Everybody for us here up being 2023 pristine baseball hoppy four bucks number five random team style find the results on your screen any time Elite sports cards.com. We're gonna go ahead and get started. Best of luck y'all Four bucks pristine the Red Sox whooped up the ash rows yesterday 17 to 1 Easy. All right. Good luck y'all got Miguel Cabrera refractor Fractor Nolan Ryan Angels Nolan Ryan Nolan Gorman fresh faces Cardinals Who could get a hit a Homer tonight? He might he's back at Fenway refractor refractor rookie is Bayo for the Red Sox Orange Mariana Rivera Yankees 22 of 25 on the Sandman Going going gone Schwerber Guy gets 60 hits a year and 45 of them are home runs Got Maurer Man supply rookie refractor Peewee Reese, I love that Peewee Reese has a card Mark McGuire going going gone Robbie Ray with a purple rookie refractor Levan Soto Angels 50 of 99 58 of 99 There's a lot of bins Get me worried. Yes. You must be expecting something. Oh, yeah Julia Rodriguez.  I can't believe it's just him snap like I don't understand It's not even like an attempt It's not even clever Yeah, hitting. Yeah, he hits 190.  That's a nice one It's numbered 450 you'll eager to yell refractor gold Ricky Nelson Velazquez Cubs Blue refractor rookie auto Gunner Henderson Very very good box. Congrats Orioles Refractor Jason Alexander in a blue refractor to 75 Braves Greg Maddox That gunners the gunners numbered is already We're good everything everything's normal. Yeah 401,000 in it Geez Dean rub it in. Why don't you? 401k that's a myth. It doesn't exist anymore Sticker placement. There's no sticker places. These are these are on-card autos Everything is on card. Oh on the mag. Yeah. Yeah, I don't know what they're doing Yeah Like it should be reversed like the back is cool. It's like flush with the card, but that's how the front should be At least those are straight. I saw something that are crooked the other day Either way, even with those I would probably grade those autos to be fair that were me As long as it's not noticeably damaged Especially especially the gunner numbered gunner auto Yeah, 401k does mean four hundred one thousand. Yeah, Dean. You you should have that much. We all have the same amount 401,000 Byron bucks and Ricky refractor Masataki Yoshida Red Sox Jim Tome going going on Matthews and purple rookie Pasquantino Royals Royals doing well here four of 99 Riley green buff for all the pursels I bought for you, Dean. You probably have a lot less than 401 left Buy an old old flawless an old NT Old exquisite Ricky refractor ble day for the a's The cost is Ricky basin there Yeah, your financial factor of sports cards people. Yeah, exactly Sean's my financial advisor playing kershaw Blue refractor to 75 Miguel Vargas Dodgers Tatsi so snap von grissom rick you refractor for atlanta gold jerseato illa Jimenez Nice card of white socks game used. It's numbered 31 of 50 Baseball is sold out. I can't believe that fresh face is the one Gorman Christine another awesome release this year gold refractors zander bow guards Padres It's number 26 out of 50 Mike just shows you looks like Kyle See who's like Kyle Thomas going going on. All right, we've got a josh jung rookie fresh faces auto Texas Nice card. We got a piazza refractor Blue refractor Jackie Robinson to 75 for the Dodgers rookie auto Gabriel Moreno diamond backs The back of this card says blue jays the checklist does go Diamond backs though. That is a diamond backs rookie auto Got a von grissom rick you refractor and an orange ronald acunia jr atlanta 24 of 25 braves Luca, what's up? Yeah, we're doing well over here How are you doing luca? Rikki refractor gorman for the cardinals trevor hoffman Purple refractor louise gonzalez diamond backs The throwback diamond backs color match right there to 99 You'll have to look around I guess Michael Harris fresh faces rikki for atlanta torque alex thomas Anything on tv ryan d Friday night breaks Goldie got bluer refractor to 75 out contra marlins Something's got I mean if not, there's a bunch of baseball. I think oh snap Nolan aronato for the cardinals Rikki refractor vargas for the Dodgers jersey auto siasca hernandez for the mariners Around the diamond game your jersey auto What was over that guy? I was wondering who was yelling out there? Guy never quits All right, san siago espinal purple rookie. Hayden was nesca to 99 cubs. Thank you luca What's up to tonight ryan Gunner Henderson rookie fresh faces for the Orioles All I know is ryan on Friday night. It's just uh margaritas Our ronald aconia junior base auto Congrats braves That's a biggie Rikki refractor bayo for the red sox blue refractor to 75 robles for the gnats An orange rikki auto shell angle ears a's that's out of 25 13 to 25 High school above very nice very nice got me gal vargas rikki refractor and blue to 75 Shane beaver guardians last box of the break Does the weather get nicer up there? It's getting like it's getting nicer than it was here It's still hot during the day, but some nights. It's not so bad anymore Some nights of the breeze it almost feels nice We're almost there a thing to where it's nice. It's some some nights. It'll be some nights. It'll be uh non-sweat weather all right Follow me been brutal Dang, it's been hotter. It's been hotter up there than it has been down here Cal ripkin or at least the same soto to 99 padres Yeah, that's right. It's awesome luka. This is great stuff Dicky coming up Trying to get this Ivan Rodriguez orange it looks like popular demand Is a derrick jeeter jersey auto Yankees 25 a 25 bookend hit huge My goodness Troy congrats Troy Gorgeous jeeter That'll do right there. Very good four boxer Fresh face is bobby wit jr Stefanichir chiropractor angels blue refractor barrios blue jays to 75 supplement card sort of guy that's Sean Volpe Alvarez going going on Mets Adley rushman or chiropractor for the Orioles Miguel Cabrera now rutchman bays Oh snap acunia regman gold for the Giants willy maccovey 10 to 50 on the maccovey two wonders Shohei otani huge SSP It's like whenever he's seven or eight cases something like that. Oh my god angels kato That's something else right there. That is not a dent. That is just card design right there That's on all of them monster congrats kato What a way to start our friday night everybody pulling big hits in pristine I am Vongons. Hi france Hi, it's jacob. Good luck, man Good luck, man. What's up, buddy? Got yoshita fresh faces Just play better than shawn.  It's not gonna go well You will not win Jordan Diaz ace auto brian servant rikki refractor Gold Ian hap cubs to 50 Rikki Otto Miguel Vargas Dodgers Stanton refractor and blue to 75 schwerber for the fillies All right, let's do a recap We have the relic autos of tiasko hernandez for the blue jays Elohimenez white socks and jose maranda Put the twins the maranda the the sorry the eloy was gold to 50 All right god base rikki Otto Miguel Vargas as well as jordan Diaz 25 shale anglia's orange auto Okunya on the base auto Got moreno diamond backs rikki Otto Josh jung nice heart a nice hit for the rangers there in case fresh faces auto gold pasquantino to 50 for the royals blue refractor to 75 rikki Otto gunner henderson orioles 67 of 75 We had seven wonders ssp show hey otani Sick card angels and a popular demand game used here is the otto derrick jeter for the yankees That'll do it for a break number one tonight. We're on to uh Forebox number six next


We have countless men and women of IOM scattered 11,000 of them in 150 countries and 450 sites. They're very dedicated to the mission and the mandate that Mr. Director Donald elect that you will be inheriting. So I'm absolutely pleased to congratulate you and thank you all for all the candidates for their campaigns. I feel very honored and privileged for every being elected for the Director General. I mean a particularly critical juncture when it comes to migration policy. There is an urgent need to make the case for multilateral cooperation in order to manage migratory flows, guarantee the fundamental rights of migrants and establishing in a sustainable way a close link between migration and development.


Hello Aces, welcome back to module seven, lesson 2.1. Get free press. In this lesson, you're gonna be able to learn how you can get some free press in four simple steps. It is a continuation from module six, lesson three. We did cover some parts of PR and that's truly just scratching the surface. And today I'm gonna be sharing a lot more in-depth strategies with you so then that way you can get some free press that usually cost thousands of dollars. So the reason why I say this is because there will be overlap for those of you who have been through module six, lesson three just to let you know. So why is PR so amazing? And I always say PR is a gift that always keeps giving. Why is that the case? It is because it gives you ongoing brand awareness. That means that people, an audience of other publications and their followers are always gonna be able to see your article and to see your brand.  Also acts as a really great link juice and what is link juice? It is when people are like a well-known, reputable publication talks about you and links to your website automatically in Google's eyes, they see that your website is credible, that it's not just some random website that is on the internet, it has credibility. And what does that do? That means that you have more link juice. What does link juice means? It means that when people are searching for best ice cream in Vancouver, our site pops up even closer to the top. That's why it's so good when a well-known publication links to your website. On top of that, it is also great social proof when your brand is on a well-known publication. So I definitely really, really enjoy PR because it's, once again, it's a gift that always is always giving. And lastly, ripple effect. What is the ripple effect? It is when one outlet covers your story, other outlets and other journalists will have much more incentive to cover your story because they have a fear of missing out. They don't wanna miss the next big thing and that's the reason why when one decides to talk about you, many others will follow suit. First, PR is what? PR is either earned media or paid media. So you can have either or. Earned media means that it's organic and it is completely free. What are paid medias? These means that it's sponsored and you need to pay money for them. Now, how does that appear in earned media? You can have an article that says it's a list of the best five cafes in Vancouver or it could be a food blogger that writes a lengthy blog about your food offering or local radio show talks about how great your happy hour is. So what is paid media? You can pay money to appear in the top five cafes in Vancouver, pay the article, journalists pay the publications or you can pay a food blogger to write a blog post about you or you can pay the local radio show to promote your happy hour. Nonetheless, what we're doing today is we're looking for free PR. So if you're looking into paid media, that's not now and you can really focus on how you can get the free PR which can easily cost thousands of dollars because we actually paid for an article and that cost us more than $2,000 for one article. That's how much paid media is. So just imagine you being able to have one earned media, it would pay for all the investments that you have already done so far. So to compile your free PR toolkit, you need a toolkit in order for you to be able to reach out to these publications and today I'm gonna share with you how you can come up with this toolkit, how you can reach the journalists and how you can have them list your article. First up, wow factor. Second, irresistible press release. Third, journalists outreach. And fourth, FOMO enhancer. What do these all mean? These are your four steps to get free PR. In the link below, download the worksheet so then that way we can follow along and do this together.  Media wants edgy content that makes them go wow because that's what audience would want. If your audience would find this article or this wow factor interesting, then they will read the article and in turn the publication that posted this article will have more viewership and thus they'll have more ad revenue and ad dollars. That's how the game works. We need to understand that the journalists, they need good content, the wow factor content to do their job because that's how they sell their ad space. So understanding this allows you to craft your article and your restaurant with wow factors. We need to give them fresh content so then that way they can repackage that and send it out to their own community. Once again, I was just sharing with you a good story, a good pitch is not only gravitating for the journalists but also should be gravitating to the customers because ultimately that's what truly counts. Now, how do you find your wow factor? This is something that I always get asked a lot of times and right now I'm gonna share with you a few ways to find your wow factors or things that inspire you, okay? Look for trends around the world. What works elsewhere could potentially work within your community because you need to understand there's always a cultural gap. There's always a gap between different countries, different cities. So if you're exposed to other country or other cities or other ethnic backgrounds and you're able to bring that to your city right now that might work, okay? So that's how we created our ice cream shop because I traveled to Korea. I see that smoking honeycomb ice cream was so popular. It was a whole movement but then yet in North America this movement haven't even started yet and that's where I see an opportunity and that's why I jumped into creating our ice cream chain. If this could be a particular item like the smoking ice cream or it could be a specific ingredient like honeycomb or it could be a cooking style or the ambience nonetheless all these things are variables that you can look at that differentiates you from your competitors, okay? For example, beyond meat burgers are trending within the whole fast food business because it is the trend. It is the wow factor. Burgers not made of real beef. It is made of plant-based beef. How much of a wow factor that is, right? Healthy, not a vegan, all this good stuff. So where do you look for these trends? Instagram food pages from different countries, news sites with food categories from different countries or if you like traveling, travel to different countries and ask your friends who you're traveling with what is some of the best places to eat and that's where you're gonna be able to have your creative juices turning a lot. Do something polarizing. This is something that is very interesting because when you go against the convention of what is the norm usually it's quite polarizing. It could be interesting, it pulls attention or people will hate you. It is a risk that you need to take but nonetheless, if it is a tasteful risk then oftentimes it works like a charm. So for example, polarizing in your community specifically but is common in other countries. So charging for a deposit for a reservation is not a common thing that happens in Vancouver yet in New York it is the norm and that's the reason why you may if you start charging for reservations in Vancouver but for a great cause that might be able to generate some buzz for your restaurant. Having something timely and relevant is also a wow factor. Journalists need something to talk about that is relevant to the season that they are in right now. That's what people are looking for. That's what is current because for example, if it is Christmas everyone is looking for Christmas things to do and if you can create something that is timely for that season then people will start picking you up because it's something new, something interesting, right? Something fitting for the season or the holiday. For us, for example, if you have a special five course meal just for Valentine's for you and your better half or it could be a pumpkin spice ice cream flavor for the fall or a refreshing watermelon shaved ice for summer. These are all interesting menu items that you can create for your restaurant and thus use this as a wow factor to reach out to PR. For us, we did right here as you can see new cups for Christmas and then also a new flavor and new presentation. As you can see, the flavor is not very new and it's not super innovative. We've been selling green tea ice cream for a while but we dressed it up like a Christmas tree. That presentation is new and novel and is timely. Same thing with here. This is milk tea ice cream that we already have and we have been serving this for years but we changed it up and made it look like a reindeer and in turn this was a huge smashing success for our ice cream shop because it is timely and a lot of articles were written about this creation just by us repackaging the goods. This is how you can find your wow factor. Sometimes it doesn't even have to be that wow. It could just be a change in packaging like what I'm showing you right now. Example, when we entered and when we expanded into Edmonton we knew no one there was doing smoking ice cream there. That's the reason why when we approached the PR they gobbled it up like crazy because it is something interesting and highly attractive story. It made journalists think, wow, this is something new. Wow, Edmonton people would love this because they haven't seen this before and as you can see we had multiple different radio station talk about us and even different publications that talked about us. Find your wow factor guys and be inspired to do so. Next up after you have found your wow factor or you have narrowed down your wow factor it is time to create a resistible press release. A lot of people don't know what press release is and that's the reason why I'm going over this with you right now. When you are approaching your journalist you need to be able to write a cohesive document that has the gist of what you're trying to say and the story or the angle that you're trying to approach it with and then your journalist would be able to read this in a very fast manner so then that way that they can decide whether to post your story or not. That's the overall gist and I'm jumping ahead but let's go through this step by step. You need to do a lot of homework before crafting your press release and I'll tell you the reason why. Because pitching a story is like selling a product and you need to get into the heads of your customers and in this case your customers are the journalists. You need to be able to be in their heads and understand what is it that they need? What is the job to be done guys? Right now I'm gonna share with you the three steps in crafting your irresistible press release. First of all is to find the outlets that you're wanting to send the PR to. Second is to study the journalists that you're trying to pitch to and thirdly it is to create a irresistible press release so then that way you can pitch them. So for the sake of this whole exercise we're gonna put you in a scenario that you are a Japanese restaurant that specializes in both authentic and also crazy sushi rolls. And your signature crazy item is the Flaming King salmon roll and this just think about a salmon roll that is torched for 25 seconds and that is super spicy. That's your signature. Okay, first up finding the outlets. How do you find outlets? Look at the media articles of your competitors. So look for the top three competitors that you have and then look at their press release page on their website, okay? Make a list of all the names of the outlets that they have been publicated at. A lot of times because established restaurants they wanna be able to once again position themselves for explosive growth which is why they would highlight the press that they get and this is a great way for you to be able to find all the different outlets that have featured them in the past. If they don't have a press section on the website and if they are not as good but you still wanna be able to see because they have a lot of press they just haven't compiled everything on their website. You can also find that by just Googling them and looking at the top five pages and the spot coverage and looking for the magazines, right? Who has covered them in the past before and as you can see there's Vancouver Courier, there's Monte Cresto, there's Georgia Straight. These are the outlets that you wanna target, okay? Next up after you have finalized, okay, you know what, these are the top five outlets. We need to study the journalists that wrote the article, okay? Each journalist has a different way of writing articles. Some lean more towards articles that are listicles that include four to 10 different restaurants. It's quick and easy to read for the viewers. For example, top 10 sushi restaurants in Vancouver and just imagine being able to have your restaurant being listed in this listicle alongside with all the other companies and restaurants that have been in existence for many years. That's gonna have an uplift for your brand. Some other journalists would prefer to write features and usually this is highlighting one or two restaurants that is a little bit more in depth and is unbiased. Basically, they're just featuring you and it's a very unbiased, very objective way of writing about your restaurant. Miku launches the Brewery Prime. So something that is unbiased, right? Or lastly, some journalists would prefer to write reviews. So usually it's a deep dive about their experience at your establishment, okay? And this is usually opinionated, for example, their personal experience dining at your restaurant. Look for the journalist who wrote the article by scanning through their work, okay? As you can see, once you clicked into the outlet, you can click into the journalist. Once you click into the journalist, oftentimes it leads to the previous articles that they have written. By you studying this, you're asking yourself these questions. What type of articles do they tend to write? What is the pattern between their work? What is it that he's writing? Is it opinionated? Is it reviews or is it listicles? As you can see here, some of the listicles by Tammy, right? Like she likes doing listicles, as you can see, 10 new wild fruits to eat this year. Two Vancouver dining spots. So it seems like that she does enjoy writing these type of articles. Now, understanding what they write allows you to position the pitch a little bit differently because you wanna do a majority of the work for them. If you can hand all the work to them in a silver platter and it is down the pipeline of what they are thinking, what they are wanting to do, and it just becomes so easy, what is a reason for them not to feature you? They have all the reasons to feature you because you already done all the work for them. In this process, make sure you don't rush the process, okay? Because at the end of the day, you're not only contacting the journalist one time. It's an ongoing time throughout your whole journey. Every time you have a new launch, every time you have a new menu item, every time you have a new wild factor, every time you have a new location, you're reaching out to these journalists. So make sure you guys don't rush it and be super respectful. Now that you have located your outlet and you have located the journalist, it is time to craft your irresistible press release. And this is what we're gonna cover in depth in the next lesson because I wanna be able to dedicate one whole lesson in helping you craft the perfect, irresistible press release, okay? So these are all the things that we're gonna cover in the next lesson. This is just a sneak peek for you on how we're gonna be able to do that. Now that you have crafted your irresistible offer, your irresistible press release, it is time to outreach to these journalists, okay? How are you gonna be able to outreach to these journalists?  How are you gonna be able to send it to them? Well, a good way is so when you click in their bio, you can actually see their contact info. You can see email, Twitter, Instagram. It is usually in the bio section of where they work and that's where really you can contact them there, okay? Next up is you can actually Google their name and a lot of times with journalists, if you Google their name with the publication that they work for, they would, their contact detail would definitely show up. Something for you to understand and to get into the heads of your customer, which is the journalist right now is that these journalists get around 20 to 30 pitches every single day. It doesn't matter how big or small they are, they always get pitched, okay? So you have to make it super, super easy for them to read and how it's relevant to the style that they write and which is the reason why we did all the legwork in the previous step, which is to study your journalists, right? Use similar article that they wrote about as a connection point, right? So for example, if they have written a listicle that has gained a lot of eyeballs and a lot of viewership, you can talk about that when you're outreaching to them, okay? Copy and paste your press release into the email so then that way they understand exactly what is it that you're asking for, what are the talking points and whether they would want to write about you. Customize a message to the specific journalist and once again, that's why we did the homework in the previous step, is to understanding the style that they write in. Create a public folder in Google Doc and share this folder with your journalists and in this what you wanna include would be your press release, your campaign photos and a picture of you in the case that they want to feature you don't need to have this conversations back and forth. They have everything they need in order for them to do their job. Last thing they want is like they feel interested in your wow factor, they feel interested in your restaurant but the coordination with you is just a pain. They have to ask for a picture, they have to ask for the press release, they have to ask for more footage and that is not a pleasant experience. Just imagine them writing multiple articles at once. If you can provide everything for them in a silver platter once again, they'll be much more likely to feature you. Pro tip number one guys, when to send these emails to the journalists, first up it is to send it at 855 right before their work time or right before they decide where to have lunch, 10, 10. Use a tool called MixMax on Google Chrome. Go download it, use it because this Chrome application would allow you to see whether they have opened up the email and whether they have seen it. Don't be afraid to follow up after two days of sending your first outreach because like I said, they might be very interested in your article and your restaurant. They might want to really feature it. However, because they've been bartered with so many emails on a day, they might have forgotten. There might be some kind of thing that popped up and they might have forgotten about it. So that's the reason why it is not rude to reach out after two days just to give them a friendly nudge. Super easy for people to miss emails on a daily basis as well. It could have just been buried in their email and if you send it two days after, that could be the first time that they see it. So that's the reason why you have to make sure that you follow up. Next up, FOMO. Fear of missing out guys. We talk about the FOMO enhancer. What is the fear of missing out? We all want to be part of something that is cool, something that is interesting. That's the reason why we would feel left out if we were not included or if we were not invited to the cool party, ate that latest dish or gone to see that popular movie. That's the reason why we have this kind of feeling. Our journalists would have the same thing. They would have a fear of missing out that they did not cover the latest story. That's the reason why we need to use this psychological state to our advantage. How do we do that? Make them FOMO, okay? You can make the journalist FOMO because they know how trends get attention, that they get viewership, that when people view their articles, they would have much more statistics to sell to add and get more ads, right? Which means that more views potential to sell more ad space. That's what we talked about. So I'm gonna go through this whole cycle with you in this map. So imagine after sending out your press release, you monitor all the outlets to see if they have covered your story, okay? When one publication covers your story, share it with all your social media channel and your website. Find the handles of the outlets that are journalist outlets and also publications and tag them in all of those posts that you're doing. Bonus, if you can actually boost the posts with engagement and objective to build social proof. This part is when you're running paid advertisement. Basically, I'm just saying, hey, you know what, run an advertisement and target the outlets. Target the journalists so then that way they can see it. They were like, wow, they see it now. When they see it, the reaction would be, wow, this is something I'm missing out on because a lot of people are seeing it. A lot of people are commenting on it or a lot of feedback is going on and they feel like they're missing out on something. And what's gonna happen is that they're gonna start talking about your restaurant. So for example, in the scenario of the restaurant that I presented earlier, let's say Georgia Strait covers are Flaming, King, Sam, and Role in a feature article. We share this article on our Facebook, Instagram and on our website. We tag the outlets like Monty Crestill, Vancouver is Awesome, Dish Vancouver, Vancouver Sun, Vancouver Courier and these are all the well-known publications in Vancouver. We place an ad on our Facebook post so then that way we can target the potential outlets and also journalists. One reach out to the journalists and one for engagement ad for show show proof. We set the geo metric so then that way we target the people within the headquarters of Vancouver to narrow down our targeting. We also set engagement for ad for our customer avatar so then that way people that our customers would see this. Yay, it looks like Dish Vancouver also covered us because they feel FOMO. That's how you can create this loop right here. We repeat the cycle by sharing that coverage and tagging the whole outlets so we keep doing this whole circle, keep doing what we're doing and to squeeze every single thing out of this through our Flaming, King, Sam, and Role feature. That's how we're gonna be able to get people talking about us, okay? So in this lesson we talked about the wow factor, how can you find an edge that is not only attractive for your journalists but also attractive for your consumers, okay? Second, we talked about how you can create a irresistible press release. The outlets, the journalists that you need to study and also crafting an irresistible offer. Next up is the actual journal outreach process. How do you find them? How do you find their contact info and what do you send them in this whole package? And then when they cover you, how can you create that FOMO enhancer so that more articles and more outlets would cover you? This is the four step to get some crazy advertisement and for us at 720 Suites, we got tens of thousands of free press because I utilize these four steps. In the link below, download the templates and follow along to get your own free press. Once again, remember PR is an art. You won't get this every single time. On your first try, maybe none of the articles or none of the outlets would cover you, but you need to analyze what worked and what didn't work so then that way next time becomes an easier process for you. It could be a timing thing, it could be your angle, it could be your wow factor not wow enough or it could just not be relevant enough and know for one thing, once again, journalists gets pitched a lot of times and that's why don't give up, okay? Now it is your turn to find your wow factor, do the research on the outlets and journalists, craft your irresistible press release, reach out to journalists, monitor for hits and use the enhanced FOMO, okay? In the link below, download the templates, follow along. In this lesson, I just shared with you the four simple steps to get free PR. In the next lesson, we're gonna cover in depth on how you can craft the irresistible press release which you'll be sending to all the journalists. I'll see you guys in the next lesson.


How many people were not here last week? Okay, not too many. So before I ended the meeting, or we were partnering with the meeting last week, I mentioned that I wanted everybody to understand, I wanted everybody to know that we will continue to work on this thing. Last week, or last meeting, wasn't just a conversation. We forget about it until next time. I wanted everyone to know we're working on it and doing our best to come up with a solution that's sustainable, that works and is sustainable. So, I've put together three options. They're parking related. And the first two are probably not sustainable from a financial perspective, but I'm gonna put them up here anyway. Now, if you get mad when you see these things, the guy who put this together or stand them back there, I'm just presenting it. Deputy Chief Chris Benavidez is back. There is your hand, Chris. That's the guy to throw the darts at. No, seriously, Chris was the captain assigned to the Emergency Management Center, the EOC, the Emergency Operations Center. I'm on the, that's next to the call center and he worked there for a number of years and he's a big project guy and he put this together for me and I asked him to take a look at it and map it all out. He's been the ops coordinator for the incident commander for the final four and a lot of big events here in the city so he knows how to put this stuff together. We've got our city officers back there, raising hand guys, got them back here as well and everybody's familiar with the city. And I just want to comment real quick before I do this, just so I can take a minute. But I just want to comment on some of the, Carol, your concerns about the noise and man, your concerns about the noise. In my humble opinion, I'm not sure what we're studying. The noise is coming from the strip as they come back in the neighborhoods. There's your study. And I'm not sure, again, it's the two worlds of the commercial community and the world of the community, the residential community are colliding here and that's what we're trying to fix that. I don't know what the study is gonna be, but anyway, that's my study. So these are all the issues we talked about. You know, last week, last meeting, I mentioned that there's two issues that everybody's concerned about. And I wanted to make sure I was identifying properly. One is order maintenance issues, which you see up here. And then to compound that, you have some violent stuff going on in the strip every now and then.  So that's the issues that we're looking at right now primarily and can we pop up the first? Okay, so this first study is 25 officers and two supervisors. And what we're doing here is all around the community on both sides of the strip, we're gonna block anybody from coming in. You can't, you don't have access to park back in the neighborhoods with this plan. They call us the 25 officers a night. I don't think from a financial perspective, that's sustainable, unless the bar owner doesn't want to pay for it. But, so I know there's bar owners in here, I'm just kidding. So the second one is 15 officers. And we're just blocking both sides of the strip. I'm going back to the neighborhoods, but that leaves a whole backside of each, well, of that side of the strip open. So I don't know that that's all that effective. And then the third one is probably sustainable. We've got seven officers, one supervisor, but where you see the X's, they're all barricades. And that would effectively keep people out of the neighborhood. Now, will it be any convenience to the residents who want to get in and out? Not really, because you can just get out and move the barricades if you want. Nobody's gonna holler at you if you do that. But that to me is the most sustainable from a resource perspective. We can try that and see how it works. There's also the options that we could give out two yellow cards or a yellow card for people who live there and they want to come back and forth and they can have that to show the officer if they can stop from moving the barricade. But that's about as best I could come up with right now. And again, if anybody want to yell at Chris for these. So that's about as best we can come up with right now. But the issue here is people going from the strip into the neighborhoods after the bars closed and after the food truck shut down. If we do this, it'll probably impact that to some degree.


Good afternoon. My name is Jean-François Cloutier. I come from Portland, Maine. I organize the Portland, Maine, Erlang, Elixir beat up. I also code in Elixir for a living. I'm one of the lucky few, and I hope you so much luck yourselves, it's really a good way of earning a living. It's very fun. But I'm going to talk to you not about my job, I'm going to talk to you about my hobby. And my hobby in these days is to do robotics using Elixir. And if you want to follow along with the slides, there's a PDF of the slides at this URL. This URL will appear on the top of the next few slides so you'll catch up. First of all, let me introduce to you and it's got some nice features. It's got an ultrasonic sensor to sense the proximity of obstacles. It's got a little motor, medium motor that kind of symbolizes its mouth so it will activate when it's eating. I have a speaker so that it can emote and say things, say how it feels. It has a color sensor, which I use for the robot to detect food. And food is a particular color that it sees on the floor. There's a beacon. A beacon simulates the scent of food so the robot can smell. And it will smell with the infrared detector, but it also has two large motors. Left wheel, right wheel to move about. Touch sensor, it's connected to a bumper, which you see in the front, to detect frontal collisions. And this infrared sensor, which it uses to both sense the distance to the food and the relative direction of the food. And finally, there are LEDs on top of the robot. And I use that to also to communicate an emotional state to the robot. This is an autonomous robot. And most importantly, this robot is powered by Elixir. Now, basically, this is the behavior of the robot. Marv is curious. So it roams around trying to avoid collisions and trying to get unstuck when it gets stuck. But when it gets hungry, and it does get hungry, then it starts foraging for food, looking for food. Unless, of course, Marv is scared, in which case he panics and acts like a headless chicken. So that's Marv. The blue paper you see at the top, that's the food. It's looking for the food. And just above the food there you see a little beacon. That's the scent of the food. And Marv will say a number of things. He'll say I'm hungry, a hoe, when it's colliding. I'm stuck when it's getting stuck. I'm scared when it's getting scared. And when it's eating, he'll say nom de nom de nom de nom. So let's watch Marv in action. So now it's roaming around. It's getting stuck. It knows it's stuck because it's trying to move and it doesn't detect a change in position. So it just said a hoe, a hoe. Now it's getting unstuck, moving about, moving about. And it tries to avoid collisions. So you'll see that it, whoops, tries to avoid collisions. Sometimes it's successful. Now it's hungry and it's just picked up the scent of food. It's moving quite fast. Let's get closer. It slows down and orients itself more precisely, found the food. So it says nom de nom de nom. And it's eating the food. The motor is activating. And it's going to eat until it's full. And when it's full, it's going to say, OK, I'm not hungry anymore. So let's go back to roaming around. I'm a curious robot. Let's see what's out there. OK, but now it tried to move and it got stuck. So I'm scared. So now it's acting really, really panicky and doing very silly things. The red lights are flashing. It's running around like a headless chicken. Until it calms down and continues roaming. Now it finds that it's, uh-oh, it collides. Uh-oh. So it tries to avoid the collision. And it keeps moving around. There's some random elements trying to avoid, but it can't avoid that obstacle. So now it's, again, stuck. It realizes it's stuck, says, I'm stuck. I'm stuck. And we'll try to get unstuck. There we go. Moves around. Oh, food. I'm hungry. It's been a while. All that exertion finds the food by the collar. Nom de nom de nom de nom. Nom de nom. Eats. It's really happy. That's a fulfilled robot there. Billy Full decides, OK, let's do some more roaming. And on and on. So that's the totally autonomous robot. And it's powered by Elixir. Now, how did I get there? How did I get started?  It started about a few months ago in June. I saw this talk by Torben Huffman at Elixir User Conference 2015 using Elixir to get the fund back into Lego Mindstorm. He basically installed Elixir and started doing fun things with it. And this is made possible by a group of people called EV3DEV. And EV3DEV is a variant of Debian Linux that you can boot the EV3 with. Because the EV3 has a port for a microSD card. And you can boot from that card. So you can boot your own operating system on that little machine. It's really cool. And EV3DEV, what it does is it exposes the motors and the sensors of the robot to you, the programmer. And the way it does that is very simple. It exposes the connected motors and sensors as directories containing ASCII files. So for example, for a sensor, you would read the driver name file. Just ASCII it would give you the name of the sensor. What kind of sensors? The color sensor is a touch sensor. Mode would tell you what mode it's in. Because some sensors have multiple modes. The light sensor in C color, reflected light, ambient light. So you can set the mode. You write the name of the mode into the mode file. And that's it. You've changed the mode of the sensor. And you can read the measurement from the sensor by just getting the value from the file, or value 0, or value 1, depending on what you're going for. Motor is the same thing. Driver name will tell you if it's a medium motor, or large motor. You can tell the motor what to do by writing the command into the command file. Run forever. Run to position. Run relative. And you can also set the parameters ahead of that. Say, what's the speed that I want you to have? Speed, SP. And then you can read from that file, what's your current speed? So you have all these very simple ways of interacting with a robot. And you can do that from any programming language that runs on Linux. Which means, Alexa. Wow. That's exactly how I felt. So obviously, obviously, contact of my friends from Amazon and a kit was on its way. As soon as I arrived, my technical staff ran some acceptance testing. While I was busy getting EV3DEV on SD card, which is very straightforward, follow the instructions, ev3dev.org. Really great work, these guys did. So that went very quickly. Plug the SD card, reboot the EV3, and EV3DEV comes up. And it'll shout out here to David Lechner, who's the main contributor, and he's very, very helpful. He's there at all ungodly hours of day and night, answering issues. Great guy. But at this point, I'm still tethered to my EV3. I have a USB cable, so I have a USB network. And I don't want that, of course. You don't want your robot to be tied in, right? So first thing I try is Bluetooth. But I have a Ubuntu machine, and just for the love of God, I cannot get the connection going. It won't speak to me. And eventually, I trace the problem to Ubuntu, and there's lots of issues. And you look for answers, and there's no real good answer. So I gave up, dejected. And then I went for Wi-Fi. I got myself a little dongle, and plugged it in. Boom, it worked. Wonderful. So now, I have my EV3 brick, which is the brain of the robot. And I can plug in the motors and the sensors and start just playing with it, just straight from the terminal. So I connect over Wi-Fi. I go into slash sys slash class. I can see LEGO sensor, there's LEGO sensor, and then there's LEGO tackle motor. These are the two directories that are really of interest to me. LEGO sensor, I go. I see it detects four connected sensors. I go to sensor zero. I can see all those files. It will tell me about sensor zero and allow me to control it. Very nice. And let's say I go into sensor two here. I say, I read what's in the driver name. It's the color sensor. I say, what are the modes that I supported? Reflect, ambient color. The other ones are not really useful to me. I say, OK, what's the current mode color? OK, well, what's the color that you're seeing? And I put a blue sheet of paper underneath. It says, oh, it's seven. It's blue. I put another color. It says, oh, it's two. I don't remember what color it is. It's a green. And then I say, OK, I'm going to change you to ambient light. And I'm going to say, OK, what's ambient light? Well, it's 10%. Good. So it's working. Very nice. And same thing for the motors. Go to the taco motor, get the motor zero. It's the medium motor. I can see what commands I can run, run forever. I can say, OK, what's the duty cycle specification? That's zero. I'm going to put it at 100, which means work as hard as you can. 100%. I say, run forever. What's your speed? Pretty high speed, number of degrees per second of rotation. That's basically what the speed is. And I can then write the stop command and then stop the motor. Everything's working. Wonderful. I want Elixir to do that for me. So I need to install Erlang and Elixir on my little Linux that's residing on that microSD card. It's easy. It's easy. Relatively easy. For Erlang, you need to go and do a complete build from sources, because that's the only way you can get release 18. And that works, just follow the instructions that works. There's a little gotcha. You've got to turn off the in memory swap, memory swap, virtual memory swapping, and put it back on the SD card so you have enough room to do the build. So there's a little gotcha, so it's on my blog. If you have questions, you can contact me. It's a very simple workaround. And it will build. It'll take a while. It will build overnight, but it will build. Elixir, of course, download the pre-compiled zip, install it, done. So where am I? I reboot. I can run. Here we go. I've got Elixir running on the EV3. And that makes me very, very happy. OK. Now what? What do I do with this? Well, I have a bunch of questions I'd like to answer for myself. And that's kind of my program of investigation here. Well, one, can I interact with my robot using pure functions? I'm using Elixir, functional programming. What will it look like, a pure functional approach to interacting with my robot, with my motors and sensors? Can I do that? What do we look like? Question two, I don't want my robot to be driven by a giant control loop sequentially. Hey, it's Elixir. We've got processes, right? So can my robot be driven? We've got agents. Can my robot be driven by a society of agents? And we'll talk a little bit more what that means. But if you've seen the movie Inside Out, the Pixar movie Inside Out, you know intuitively what it means as an individual to be a society of agents. Three, how good a fit is Elixir for robotics as a whole? Is that a great tool, or is that a super great tool? So I want to answer that question. Can I interact with my robot using pure functions? Question one, let's see that.  Input, output, no side effects. So what do I have? What does EV3DEV give me? It gives me basically global and mutable states with side effects. That's what it gives me. What is a file? It's a global variable, and I write to it, and I read from it. So that's not exactly the model I want. So I want to create this barrier there, and on this side have functions and immutable data. And I want first a function that gets me all the connected devices. And each device becomes an immutable piece of data. As you'll see, it's a struct. Then I want to be able to have a function that takes this device, the device being either a motor or a sensor, and then change the parameters, change the speed, change the mode, and then I get a new device. Then I want to be able to say, OK, if it's a sensor, all right, go, sense. Tell me how dark it is. Tell me how far we are. If it's a motor, go, run, activate. And I may even get a new device out of it because this might change the state of the device. And then you rinse and repeat. And that way you get a functional model of interacting with sensors and motors. So it's pretty simple. And I think one of the key lessons of functional programming is that you have simple data and small stepwise transformations. And that makes people not so bright like myself be able to actually do something interesting. So a struct here is used to represent a device. Devices either a motor or a sensor. So what do I have? I have these attributes of class. Is it a sensor, a motor, or an LED path? Where is it in the file structure that I can find my sensor, my motor? Port, where is it connected to? Port A, B, C, D, 1, 2, 3, 4? What type of motor sensor or LED is it? Is it a color sensor? Is it a large motor? Props would contain the idiosyncratic properties of this particular sensor or this particular motor. And mock is through a fault because in order to do testing, I have also sensors and motors, mock sensors and mock motors on my laptop. OK, so that's very straightforward. And reading and writing to the file system is very straightforward as well. So we have reading, the attribute, what's the current color of? What's the current value zero for that sensor? Writing, I want to change the mode of that sensor or change the speed specification of that motor. Then I want to, reading is this very simple code as well with some transformations just to make it very clean and writing as well. So we won't go deeply into each, into the code itself. It's available to you. But I just want to impress upon you that that's pretty straightforward, pretty easy. And we're talking about the discovery. I want to get all the sensors, for example, that are connected to the brick. So if I'm not in testing mode, then I essentially scan the right directory, which is the LEGO sensor directory. And I get all the files out of it, the file names. Then I filter and just get the file names that represent actual sensors, actual motors. And then from that file, for each file that represents a sensor, I just in it create this destruct representing the sensor. And that's really straightforward as well. I, okay, I get the port name. I get the driver name. I extract the type of sensor from the driver name. I, using a reg X, then I construct my sensor device, set the mode, and here, I'm done. Straightforward. When you want to interact, when it's set the mode, I want to say on my color sensor, I want it to read ambient light. Well, it's just a matter of if it's not already the mode it's in, then set the attribute, and then get the new device out with the new mode. So that you're not going to be using this device for further calls, as we saw in the diagram. How do I now access my various sensors, color sensor, light sensor, and whatnot? All the sensors implement a behavior, so they expect to be able to respond to implement the function sensors. What are all the things you can sense, color, ambient, and reflected in this case? And here, read sensor, read color, or read ambient, or read reflected, and that's just a dispatch. And then, a reading is very straightforward. You just get the attribute, just read from the file system, and then translate the result that you get into an actual meaningful value. And return the value in the updated sensor, because in order to read the color, you may have to set the sensor to color mode. So what I return is the value in the updated sensor, and that updated sensor is gonna be the one that I'm gonna interact with going forward. All right, so I'm going very fast, but that's essentially the strategy employed to do functional programming on my robot. And yes, indeed, I can, of course, I can interact with my robot using pure functions as if there was any doubt, but it's very nice. So I've created a small domain-specific language, and this becomes the basis for what comes next. Now, that's the big question. That's really the one that got me interested, because long, long time ago, I was in the world of AI, and I was very interested in the concepts of society of mind and society of agents and whatnot, and I thought, hey, can I do that on my robot? Can I implement a society of agents? Is it possible? As opposed to this? I didn't want that big control loop. That's not how our mind works. We're not just one big control loop. We have all these things going on in our mind. At the same time, sometimes conflicting, sometimes working together, exchanging information, and out of that emergent cacophony, out of that cacophony emerges who we are. So on a very, very simpler scale, can I do that with my robot? Okay, the idea comes from Marvin Minsky. You may have heard of him. He passed away just a few weeks ago. He was probably one of the most influential AI and cognitive science individuals. Very, very smart man. He wrote The Society of Mind in the mid-80s. That's the one that influenced me. And this came out in 2005, the Emotion Machine, which I'm reading right now. And what I'm doing is a very, very, very pale and simplistic reflection of what has come up with. And what it's come up with is that the fact that there's a theory that the mind is a society, a society of agents, small, simple processes, these agents, and of course, we know agents, processes, we go, Alexa, of course we do. And it's all of them working together, exchanging information, processing information in different ways that we get intelligence from that that we get intelligence, or at least interesting behaviors. All right, so I came up with my homebrew society of mind, society of agent, and this is what it looks like. I have, in terms of the data, because we look at the data first when we, I think, we do functional thinking, you look at the data first, is what are we gonna be transforming? We're gonna have percepts, and percepts are units of perception. How far I am? What's the color? Am I in danger? Am I hungry? Perceptions. Motives are units of motivation, behavior or triggers. Am I, am I afraid? Am I curious? Am I, do I feel hunger?  Then we have intents, it's units of actions. I wanna move forward, I wanna move backward, I wanna turn right, I wanna turn left. These are intents. So that's the data that's gonna be flowing around, and I have a bunch of agents. And I have detectors, internal clock, I've got perceptors, which is kind of a higher level cognition. I have motivators, which decide whether I'm motivated by hunger, I'm motivated by curiosity or not.  Actuators, how am I gonna move forward, how am I gonna move backwards once I've intended to do so. And an nervous system to connect everything together, plus a memory to remember what happened recently. I'm gonna go through each one a bit more details. But first of all, let's look at what a percept looks like. Again, it's a very simple struck. It says, what is this percept about? Is it about distance? Is it about fear? What is it? The value, if it's distance, is it five, is it 10, is it nine, if it's color, is it blue, is it red? Since when was that perception realized, created, instantiated? How long is it still true, until what time? Source, who produced it? Is that a percept or is that a detector? Time to live, how long are we gonna remember this thing? Resolution, how precise was the value? I mean, if it's distance, a distance of three and a distance of four are essentially the same. But a distance of three and a distance of six are not the same. So what's the resolution here? Transient, do we wanna even remember this, this perception? For example, perception of that time has elapsed. Well, I don't wanna remember that, but you wanna remember that you were in danger five seconds ago. Very simple. Motives, units of motivation. Again, what is the motivation about hunger, fear, value, is it on or off? When? And importantly, what other motives will this inhibit? I'm sure that being afraid will really do a number on my appetite. When I'm afraid, I'm not hungry. It inhibits my hunger, right? So there are inhibitions across motivations. And source, which motivator turned that motive on and on? Intent, again, simple struck. What is the intent about? Moving forward, moving backward, turning, value. Are you gonna move forward fast, slow? Are you gonna turn left, right, by how much? When was that intent generated? By whom? And is this a strong intent? If it's a strong intent, the robot is gonna work a little bit harder to make it true, make it happen. All right. So let's look at our different agents here in our society of agents a little bit more closely, but not in too much details. We have an internal clock. It ticks every second. It says, time is fast, time is fast, time is fast. Apparently, that's actually quite a crucial part of a robot. If you only have a notion of time passing, you can't do anything much. Detectors for each sensor, and actually for each motor, you have a dedicated detector, which pulls that device and reads the current value, the current color, the current distance, the current speed, and produces a percept, which is then centered in the central nervous system, which will then dispatch it to whoever is interested, including the memory, which will memorize it. All right. Perceptors. Perceptors is a higher level perception. It's how do we make of what we've perceived so far? In the context of what we're, you know, recent past, what's happening right now in the context of recent past, what do we make of it? For example, I get a distance percept that says 10. I look at a perceptor, which is concerned with collision, will say, in the recent past, was I less than 10 or greater than 10? It says, oh, you were greater than 10. So that means that I'm getting closer to an obstacle, collision imminent. Perceptor will be interested also in the touch sensor being pressed. If the touch sensor is being pressed, while in the recent past there was a collision imminent, that means we're colliding now. So perceptors produce higher level percepts and other perceptors will even produce even higher level percepts. And that way you create a certain level of awareness of the environment. And of course, these percepts are communicated to central nervous system, which dispatches them. Good. Each perceptor is, as its own concern, light, collision, and whatnot. And there's a module perception, which contains a list of all these configuration. For each configuration, there will be a perceptor. That will be instantiated. And here the collision one focuses on distance, touch, collision, and time elapsed. Nothing else, doesn't care about motives, doesn't care about past and tense. And it will remember for 10 seconds and it will apply the logic here in the function collision to decide if indeed we are looking at producing a collision percept or not. And we'll go into the coding of that collision function a little bit later. Motivator, motivator, given percepts that are flowing in, does that mean that I care? Does that mean that I should feel something about this? Does that mean that I should be afraid? Should I feel hunger? Or should I stop feeling hunger?  And again, we have a motivation module that contains all the definitions for the various motivators. And I have three of them, curiosity, hunger, and fear. And each one focuses, for example, for fear, focuses on a danger, basically. Is there a danger that's being recognized, perceived?  The motive, the fear motive. Let's look at hunger. That's the logic here within the motivation module. When do we turn a hunger on or off? And in this case here, this is a simple rule and here what we have is a function that returns a function with multiple heads. It's nice that the lecture is so expressive. But basically what it says here, I will have, when I receive a percept that says, oh, one perceptor said, you're very hungry. Fine, in the context of prior percepts. I'm gonna say here, if I was not in any danger in the last five minutes, yes, fine, turn a hunger on. But if my stomach is telling me, you should be hungry, but I'm still remembering that I was in dire danger a few seconds ago, hunger's not gonna turn on. I'm still not ready to feel the hunger. And also here the fact, we have the fact that this motive of hunger will inhibit curiosity. Once you're hungry, you don't roam around, you look for food.  Okay, behavior. Behaviors are finite state machines that are triggered by motives. If hunger is turned on, then we have the foraging behavior that's kicking in. And the forager behavior will be driven by percepts coming in because as we'll see, well, when it's turned on by hunger, but whether or not we are on track or off track towards getting close to going to the food will direct our behavior, right? What do we do? If I'm on track, don't change the direction, just keep going. If you're off track, is it to the left? Is it to the right? If it's to the left, then turn to the left and try to get back on track. So you have all these state transitions and for each transition, these transitions are driven by new percepts coming in. And with each transition, you have some intents that are generated. Okay, oh, you're off track and the food seems to be coming from that way. Turn that away and then move forward.  Reorient. Are you on track? Just keep going. All right. And we have also reflexes, which are behaviors that are simply driven by perceptions.  Same thing for collision. Just avoid the collision and then go back to foraging. Okay. And this behavior, this transition, this finite state machine is coded as basically structs. And I won't go into more details, but it's pretty straightforward. That didn't take, that took a few hours just to get it done. So again, lecture very expressive, very easy for me to get to where I want. Finally actuators, how do we go forward? How do we go backward? Well, if I'm a two-wheel robot, going forward means moving both wheels the same speed together. If I want to turn, it's moving a wheel in one direction, the wheel in the other direction. If I'm a single-wheel robot, going forward is a very different thing. If I have threads, it's a very, it's a somewhat different thing as well. So actuators translate intents, moving forward, moving backward, turning into the scripts of commands that are just commands to the motors themselves. And they look like this. Going backward is a function. It returns a function. And given the intent, which would contain, go forward fast, for example, and all the motors that the robot knows of, it would say, okay, let me get the speed out of the intent and the duration of the intent. And I'm gonna create a little script here called going backward. And I'm gonna, in that script, three steps. I'm gonna first tell the right wheel how fast it's gonna go, the left wheel how fast it's gonna go, and then the third step is go, activate, run. And when the script is gonna be run, the intent is gonna be realized. Okay. Finally, there's memory, because a lot of perceptors and motivators depend on context in order to decide whether to be afraid, to be hungry, and whatnot. So there's memory, which essentially just stores all the percepts, all the motives, and all the intents that are generated, and then forgets about them over time. So it's short-term memory. And it can be queried. So it's my little data store, right? And the simple nervous system is just one big dispatcher. It's an event dispatcher. And it connects all these agents together. Agents don't know of each other. They only know of the central nervous system and memory. That's all they know. And when a percept is created, it's just sent to the central nervous system and the agents who need to know about that, that the percept will be notified of it through handlers, and we'll see that. So that's my little, you know, model of the mind, my model of agents. I'm just driving the robot right now. And just as a recap, so imagine a detector or an internal clock just generates a percept. It's made available to the dispatcher, the perceptor by the central nervous system. Perceptor says, aha! That, given the recent past, I recognize that we're on an imminent collision course, for example. This is sent, this may be sent to a motivator. And motivator says, ah! I know how to feel about this. I'm gonna turn on a motive. Behavior says, ooh! That triggers me. That triggers me as a behavior. Behavior is triggered, and now, as new percepts are generated, it leads to intents being produced that are listened to by the actuators. It says, ah! So you wanna move forward. Fine by me, moving forward. As it moves forward, of course, now the distance between the robot and whatever the obstacle has changed, which leads to a new percept being generated, and on and on. So what we have here is all these control loops. We don't have one control loop. We have any number of control loops happening at the same time. So we have the society of agents. These agents are interacting together and all at once, basically. Very different from ye olde giant control loop, sequential control loop. That's what I wanted to do and did. And this is just a, this is Marv's mind map. So you can see all the perceptions that it's capable of, either from detectors or perceptors. The motives that it operates that drives them, fear, curiosity, and hunger. And all the behaviors it has, getting unstuck, which is a reflex, colliding, well, actually uncolliding, or avoiding collision, which is a reflex, panicking, exploring, and foraging. And all the various, it's vocabulary for actuation. It knows how to turn right, turn left, go forward, go backward, and it knows how to eat. Also knows how to say things. It's not in the picture here. So that's the robot's mind. That's Marv's mind. Now, implementing this, you saw pieces of the implementation, but now I wanna concentrate on the OTP architecture of this. And we've covered all of this in various talks. We've talked about gen servers. We've talked about supervisors. This to me, I love OTP, but this to me, this problem, this very problem of a society of agent was an absolute marvelous fit for OTP. OTP was just this perfect tool that fits in your hand and it just becomes part of you. It's just an amazing feeling. So the general architecture of this here. So we have EV3, we have a robot supervisor, EV3 application and root supervisor, robot supervisor that supervises other supervisors for detectors, perceptors, motivators, behaviors, and actuators. The robot supervisor also supervises three workers, the CNS, memory, and internal clock. And the detector supervisor is responsible for instantiating the detectors and restarting them if they fail. Perceptors and thing, motivator, and actuators. And under the CNS, we have a bunch of handlers, event handlers, gen events, for detectors, perceptors, motivators, and whatnot. So that's the general architecture. The source code you can find in here if you want, if you look at it. But we'll just look at a very thin slice. I'm slightly, I might be running a little bit over. So, okay, so if you look at, I just wanna give you now a sense of the simplicity of the code. We're not gonna go through the code. You can go through the code if you want. This is the EV3, that's the application, where you set the supervisors on the end point of supervisors, and when you start it, I can start execution, I can start perception. That's where I start everything. And the robot supervisor, same thing. You can see, you know, just start all the children, and which are either the workers here or the other sub-supervisors. Strategy one for one, very straightforward. And this is where we go into more details into what start perception, start execution is all about. You start actuators, you start the behaviors, start the motivators, pretty straightforward. Starting the perceptors, what does that mean? Well, for each configuration of a preceptor, in the modular perception, we looked at that earlier, well, you gotta say, okay, a preceptor supervisor, start me a preceptor based on that configuration. Same thing for the other guys. And let's look at preceptor supervisor, starting a preceptor, well, you start a child, passing the preceptor configuration as the state of that child. It is, it is, the supervisor started the child and that's it, basically. And it's a simple one for one, which means you create that preceptor only when asked. When asked by, I'm being asked to start preceptor, okay? Remember perception, which was where we defined all the configurations for preceptors. And there they are, we looked at one already. It's pretty straightforward if you decode it a little bit. And the preceptor agent is essentially, when it's an agent, so it's a, yes. And when you start it, it started on a preceptor, preceptor configuration, and it's an agent. And you say, essentially, okay, when you get a precept, that's of interest to you. Analyze it, out of it comes a new precept or nil, and that's what you return. The analysis is you run that logic, like collision logic, for example, you just run it with the precept in the context of the recent past that's of interest to you. And the CNS, in this case it's a gen server, and I did that because I wanted to monitor my gen events. If they failed, I could actually fail the CNS, restart it through the supervisor. Otherwise, the failure is silent. The failure of gen events is silent unless you monitor them. And you want to monitor them from a gen server in order to catch the message. So it's just a, okay, you get, when you receive a precept, just dispatch it. And you dispatch it to the preceptor event handler. Straight forward. And since I've registered all my handlers as monitored, if one of them fails, I'm gonna get this message and I'm just gonna crash myself and let my supervisor restart me. It's very, very nice when you're debugging because you don't want silent failures. It's really, really not nice. And finally, bringing everything together, the preceptor handler. Well, the CNS has received the precept. It's dispatched it to all the handlers that are registered. One of them is the preceptor handler. It processes the precept. And what it does, asks all the preceptors that it knows of, all the preceptors it knows of, is this something of interest to you? Are you focusing on it? And then analyze that precept. You'll give me a nil or a new precept, in which case I will then shoot it back to the CNS so that it re-enters the mind if you want and it keeps going. So that's where the loop gets closed. Okay, so can my robot be driven by a society of agents? Yes. Now, my feeling's about how Erlang, Elixir and OTP worked for me. Well, I found it was remarkably easy to implement that society of agents. Even though it's a relatively complex problem, it just was a perfect fit. The beam, because of its software time guarantees, I didn't have to think about it, how all these processes running around. None of them was a hog. None of them precluded other processes. I didn't have a process that would just like take all the time and starve everybody else. None of that. So it was just simple. It just worked, thanks to the beam. Functional programming, my code was manageable. It was easy for me to express myself. What I meant is what I wrote and what I wrote was what I meant. And that's an excellent feeling. So how good a fit is Elixir OTP for robotics? Totally awesome. Totally awesome. I knew that coming in, but I still was shocked how great it was.  What else did I learn? I learned about the urgency of now. A robot is not like a program. Time is not elastic, time is now. Time is a harsh mistress. And you can't just react to an intent that's three seconds old. You cannot deal with a percept that's two seconds old because that's the past. You're completely out of sync. Your robot is out of sync with the past. So you have to deal with that because it happens. This is a slow processor. There's a lot of things going on. So what I did, my solution was ignore stale precepts, ignore stale motives and intents. And if they have stale intents, send an alarm message to the central nervous system saying, I'm overwhelmed. And the central nervous system will tell the perceptors and the detectors, shut down.  Don't see anything, become blind. Faint. I make the robot faint. And everything else can get in, washes through the system and then after a little while, a second, half a second, the CNS revives and now everything is in sync. We're now dealing with the present, not the past. So that worked. Another thing I learned, debugging a robot is painful. If it's the real world, the effect of commands are unpredictable. You want to say, you say, move forward. Well, if the wheel is slipping, you haven't moved forward. So you don't know for sure that what you ask for is gonna happen. Sensors can lie. They see ghosts sometimes. Overall, behavior is very sensitive to tuning. And the Heisenberg principle applies. If you start tracing things, you change timing of things and then the problem you've seen is gone. So that's interesting. And debugging is really much harder because of all these things and also because the deploy-edit cycle is long. It's a slow computer. All right, I also learned Elm to build a dashboard. It's really cool. And I'm not gonna go into the details of it. It's a highly reactive dashboard. Things happen all the time. If I had three more minutes, I'd activate one. But I use Phoenix, I use Elm, and really it's just the best thing, the best combo. It's better than peanut butter and jam. But that's another story. And I'm really, really eager to answer your questions and show you the dashboard if you're interested when the talks are over. So parting thoughts. A robot is a bunch of sensors and actuators working together to achieve shifting goals in a dynamic environment. So it's more than just a robot that we've been looking at here because this is true also of a smart house, of anything else that will come out from the internet of things. It's the same kind of problem. Now, societies of agents have evolved everywhere in nature. Everywhere you look, you'll see societies of agent. There's a reason why. Maybe the internet of thing needs to form societies of agent as it evolves as it tackles more complex problems. And Elixir will be a fantastic enabler. I have a blog. You can see more of the details. And I'm really happy to answer your questions later after all the talks are done. And I wanna thank you all. This is where you can find me. I organized the Portland Main, Erlang and Elixir Meetup. And again, you can find the slides at this URL. Thank you very much.


Today is February 24th. My name is Timmy Ngo and you're watching this week's CalTV Entertainment Weekly Wrap-Up. This week in Entertainment News, Beyoncé has dropped out of Coachella due to her pregnancy, but she is rescheduled to perform next year. Rihanna was announced as Harvard's humanitarian of the year and the Oscars this Sunday, airing on ABC hosted by Jimmy Kimmel. In theaters this week is Get Out Written and Directed by Jordan Peele, who was from Key and Peele, Collide, and Rock Dog. A lot of new music this week as well, Lana Del Rey released a new song called Love and it's been one of my favorites from her in a while. Alessia Cara released a new song with Zed called Stay and it is so good. Closer is Shook. Speaking of the chain smokers, they released a collab with Coldplay called Something Like This, which is ironic because I felt like I heard something like this on an old chain smoker song. Calvin Harris also released a new song with Migos and Frank Ocean called Slide. At New Albums, Future released another album called Hendrix and John Mayer released The Search For. That was your entertainment in a minute.