and everything that's actually in the funnel. So we could view assets. So it's actually, you know what, let me just do it the editing way so you can see it this way. So again, everything you do, you could package it up and then transfer it to any account. So as I work, as I build my business, as I'm building my own funnels, I package them up and then, you know, give them to whoever I want. So in this, you'll see, and this is just as basic as it gets when it comes to an actual full-blown funnel.  So this is for a listing, for example, 777 Plaza Boulevard. So this is the actual list. They opt in, everyone lands there. And then the buyer or seller appointments, that's simply a list of those who schedule an appointment. Now, it's not necessarily who's scheduled an appointment just from your listing funnel. This could be a list of anyone who schedules an appointment.  But to keep it simple, this as they go to your landing page, they opt in, they then go to your thank you page, where on that thank you page, it should be a video. Introducing yourself, telling them a little bit about the listing, letting them know that you just emailed them all the specs of the property. And most importantly, to schedule a call, to schedule a call. Like, let me show you how simple this looks. This is, so this is the landing page. This is the landing page. I come here, get instant access to the price and photos of this property. Homes in this market move extremely fast, schedule your private showing before the bidding war begins. And again, you can edit all this stuff. And then just a few bullet points of the property, and then view all 17 photos now. So where I see a lot of real estate agents get it wrong, is they'll put 27 images on their Facebook profile or business page, whatever, and just allow anyone to see all 27 images.  Use maybe one image for that post and tease them, and then bring them here where they have to view all 17 photos, and they have to opt in. So the moment they opt in like this, send me the details, then it goes to your thank you page. Thank you for your interest. And this will be a simple video of maybe you and Sean or maybe just you. Hey guys, this is Anastasia. Thank you so much for inquiring on this beautiful property. Let me tell you a little bit more about it and most importantly, tell you, introduce myself and kind of tell you what our plans and strategies are for this particular property. So I would simply be introducing myself. I'd be thanking them, telling them a little bit about the property. I would be letting them know that I just emailed them. I just emailed you a ton of stuff. So you're gonna get the full listing. You're gonna get the, every link you could possibly imagine, all the details, everything is in the email. So make sure you check for my emails. And also make sure you check for my future emails because over the next few days, I'll be telling you more about this property and why it's so important for you to schedule your call now. And for those of you that are actually super serious, go ahead and click the button below. It'll take you straight to my calendar where you can schedule your best time. Oh, cool. So four points. Number one, I'm thanking them. Number two, I'm introducing myself. Briefly introduce introduction. Number three, I'm telling them I just emailed them all the details of the property.  So check for your emails. And the reason why I set that up, that's bullet point number three, check your emails. But the reason why I set it up for them to expect future emails is because as they see the ad, as they opt in, as they come to this page, some will schedule an appointment, but most won't, like let's say one out of 10, maybe two out of 10 will. That'll be really good odds. Yeah, yes, I mean, I'll take those numbers any day. And that's all you need. That's all you need to be successful is one to 2%. That's all you need. But what about the other eight, right? The other eight who didn't schedule a call here. That's why here in this video, I'm specifically bullet point number three, I'm saying, hey man, check your email. Not only did I send you all the details, but over the next few days, I'll be sending you much more information and you're not gonna wanna miss it. So check for my emails. The reason why I'm setting that up like that is because I already know eight out of 10 are not gonna schedule a call here. So I need them to get those future emails because in those future emails, yes, of course I'm gonna provide more information on the property, but most importantly, I'm gonna have a link to my calendar. So everything, the whole email automation, yes, it's great to provide content and share more information over a listing and open house, a seller guide, whatever, over the next two, three, four weeks over via email automation. But the objective is to provide my link to my calendar. The objective is to get you to schedule a call. It's the only reason why I'm emailing you, man. I'm not emailing you for my health. It's like we need to get on the phone. So over the next few days, I want them to expect more information on the listing and just really see my link to my calendar. And so back over here, this simply is a list that people would land on when they go and schedule an appointment. The whole funnel consists of really the landing page, the thank you page, the call confirm page. So as they do go and schedule a call, they'll go to your calendar and then once they schedule it, they land on this specific page. And the reason why this is all, well, the reason, well, every page is important, but when it comes to the thank you page, well, let me explain everything. When it comes to people seeing that ad, coming to the landing page and not opting in, those are people that are going in your custom audience. Though that's an audience that you'll want to retarget in the future. There are people that landed here but didn't opt in. People that opt in and land on the thank you page, that's very important for Facebook as well, because people who land on that page were able to categorize in a special custom audience and name that audience listing leads. And we do that inside of Facebook. Now you'll see obviously your list right here, like for example, up here, we'll see how many leads came in on the cartridge side for sure, but on the ad side, on the Facebook ad side, we want to track that over there as well, because whoever lands on this thank you page, they're in a specific audience. That's my custom audience.  And so if I can track that in Facebook, not only can I track the amount of leads, but I can track the cost per lead. Like look at the campaign and be like, damn, okay. We had nine people that landed on this page and we spent $72, right? So you'll be able to look at the cost per lead based on the fact that you took this link, this specific link, which is actually this link up here, you took this link and set up a custom audience inside of Facebook. And then also, this is very important for Facebook as well. Those who land on this page are in a custom audience and that custom audience is an audience that all exclude from seeing future ads, right? Like I don't need people to, especially if I'm running listings or maybe an open house, you would think, okay, so let's say only one family's gonna get this property. Let's say you have 42 leads that came in, only one family is getting that property. You would think that maybe, okay, the other 42 or 41 or 43, whatever number I'm on, let's just 42. You would think that the other 42 would be great to put in a custom audience to retarget in the future, but no, I'm putting them in a custom audience so I can exclude them because any information, if another listing comes on the market and I have these 42 people that I know opted in to my last listing ad, but it only went to one family, but the other 42 are still on my email list. Rather than running an ad and retargeting that audience, I would just send them an email because I already have them on email. Like why do I need to run an ad to them? You know what I mean? So anyone who lands on this thank you page, you're excluding, you're excluding. We're setting up a custom audience inside of Facebook and we're excluding from seeing future ads. And then the call confirmed, same exact thing. You wanna be able to track, give me one second. Sure, of course. Okay, cool. Awesome. Sorry about that, Anastasia. No, it's okay. With the call confirmed page as well, same thing. So those who land on the call confirmed page, you're able to track that with your Facebook pixel, put those people in a custom audience through Facebook and also exclude that audience from seeing future ads as well. Cool. That's why like when you go to my calendar, for example, here's an example. And I'll show you how to set this whole calendar up. But as people go to the calendar, right? As they go to the calendar, let's say, we schedule that call, that time, that date. And then this goes in right here. Next. The way this works is as they schedule, they confirm here and then they're taken to my call confirmed page. So this page right here is the same page that I'm sending you in this funnel, which is this call confirmed.  So I have my pixel on this call confirmed page and I also have a custom audience set up. So anyone who lands here, I'm simply able to track in Facebook for sure, but I'm also most importantly able to create a custom audience around it and exclude them from seeing future ads. I don't need my appointments to see ads. I don't need my leads to see ads because again, I already have their email. Any information, I'll just email it. Right. You know, save me on Facebook ad cost. I only want new people seeing my stuff or people who haven't opted in. So again, these are landing on the landing page that do not opt in. I'm gonna always retarget them because they haven't opted in yet. I'll retarget them for every ad from ad number two to ad number 22 because these are people who have not opted in. The moment they opt in, then they land on this specific URL and then we can exclude. But until you opt in, you're gonna keep seeing my ads because you landed on my page three weeks ago. Or you've been watching my last four video ads, right? There's another custom audience. So we have a custom audience around those who land on the landing page that we retarget for all ads. And then we have our viewers, our video viewers who we retarget in all ads from ad number two and on, for example. But thank you page exclude, confirmed page exclude. Now this right here is just next level. I'm just sending it over just so you have the template. But the way I do my email marketing, and it's just more time consuming on the front end. So you may not need to do this right now, but I'll just send it to you so you have it for future. But this whole thing is when I send out emails, like my email sequence, four emails, 14 emails, I have some sequences where I have 37 emails, all preset ready to go out over the next 90 days, the moment you opt into my page, right? So I have different sequences for different things, but what I do a lot is I'll simply write out the email, hey Anastasia, this is David, hey just wanted to follow up, say hi and let you know what I'm up to. And show you this latest video that I just put out regarding capturing seller leads on Facebook. Click here to watch now. That's a simple email. That's a simple text based email. But the moment you click watch now, you're taken to this page. And it's a simple cartridge page with one video and one yellow button. And so now in this video, and so for example, let's say I opt into your listing funnel, I opt into your listing funnel and in three days I'm getting an email from you and well every day I should get an email from you. If I opt in today, I should get an email tomorrow, I should get an email the next day, because it's a listing. So we have to create urgency, I need to email you. I'm not gonna set up 37 emails in a listing sequence because that listing will be sold probably by next week. I'll only set up maybe four or five emails that go out every day for the next five days, right? And the whole objective is to get them to schedule a call. Now you're listing, it may go under contract sooner than that, it might take longer, but normally they go pretty fast, right? I mean, I don't know, are your listings selling pretty fast? Right now? Yeah, it's a very hot market. Right, very hot market. So we don't need 15 emails in this sequence, maybe just five, maybe four, five, six emails. But my point is, is that let's say I opt in, I go to your thank you page, I don't schedule a call at that particular time, I now start to get your emails. The next, over the next five days, I'm gonna receive an email and every email is gonna tell you, tell me a little bit more about that property. But what I would do, and this is not, again, this is not something you gotta do right now, it's just because it's more time consuming, but just how I build my mind out is I'll simply do a video. So whatever the heck I was trying to explain to him in that email, I'll explain a little bit and then have him click to watch now. And then they come, they watch me on video, explain what I wanted to say. And in the listing, for example, I may go out and get some footage, get some video content of the property. And that becomes my email sequence. Hey, John, just wanted to follow up. Hey, thank you so much for inquiring two days ago on this beautiful listing. Guess what, man? I had 15 families come last night to our private showing and this property is not gonna last. I did a quick video of a quick walkthrough of the interior. Let me show it to you, click here, watch now. And boom, they click, they come here. It's Anastasia doing a selfie on her cell phone and there's a full blown video. And at the end of that video, that's a one minute video, two minute video.  People are buying these things like hotcakes right now. So if you wanna schedule your showing, click the yellow button. It'll take you straight to my calendar where you can schedule your best time. Can't wait to show you the property, see you soon. So five emails that go out every day for the next five days with Anastasia on video showing me another one minute clip of that property is powerful. Now again, if you're in a super hot market, then maybe going all out like that may not even be necessary because that property for all we know may go under contract tonight. You know what I mean? So that's why a lot of times with listings, I don't really run ads on because a lot of times we're in a hot market and people are freaking buying that before the ad even goes live. You know what I mean? I get you buyer leads though. Exactly, you know what I mean? Exactly, so that's a good strategy for sure is being able to leverage your other services and pitch them something different. You know what I mean? So that's just the page that's included as well. And then the sequence is the actual sequence. A handful of emails that go out. And then the form is the form that goes on the landing page. So as they go to the landing page and opt in, that's a form. So we gotta create that form. And then the simple calendar. You've got that all here as a package. That you're sending me. So here's all I'm gonna do. Here's how we do it. So now I'm gonna simply, that's why I needed your username or your email because that's what's needed over here on this end. So let me share.  I click on yes, I hit this and I'm gonna share it with a specific card tree user. Okay. And you know what? Here's what I'm gonna do. I'm gonna just simply generate a share code. Here's the share code. Here's the share code for you. And actually for anyone that wants this funnel they can just type in that right there. And the whole file will transfer over. The whole funnel will transfer over. So here's what I'm gonna do. Go ahead and share your screen. Go ahead and share your screen. Your voice sounds good today. You're not breaking up. You know what? And that's what I'm afraid of. Like our internet provider sent out an email saying that internet is gonna be up and down today. They're doing some random update. So if we get cut off, it's because of that but hopefully they're updating their whole entire system. I don't know. Thank God I'm not cutting out anymore. Yeah, yeah, yeah, it sounds great. Chris. So in the chat, grab that code in the chat and I'll show you what to do. Oh, right, the chat, the chat. Okay, chat, found it, got it. So copy that and all you're gonna do is you're gonna go to my campaigns to the left. Yes. My campaigns. Where did it go? Oh, I see it. Yes. I was watching you do it. I know. And then we're gonna click on available campaigns right at the top. Alrighty. And then all you're gonna do is hit that green square to the bottom. Import. Import. And we're gonna import that share code. Okay. And then begin import. And that's almost it. So now it's saying here, you may now deploy the campaign whenever you want as many times as you want. So now we'll come to this part right here and we'll hit deploy. So let's X out of this. All right. I'll just kind of, I don't see an X. X, you just scroll up. Scroll up a little bit. Scroll up. Aha. Okay. Awesome. And so now we're gonna click the three dots on that funnel there. The three dots right below it, right below the page. Listing funnel. Okay. And we're gonna deploy. All right. Yes. So this is just a simple abbreviation, a prefix. Like put like just, you can always delete that but just put anything. You can put just three letters or 2021 or EXP or just put anything to get through. Okay. And then we put import. Okay. That's my lucky number. Awesome. Awesome. So now you'll have that entire funnel. So go to an X out of this. And then now if you click on, you could start at the top. You can click on my communications and now you'll see the two list. And then you'll also see the sequence. So if you click on list right at the top, Lee over leads and then list. Yeah, right there. So there are the two leads, the two lists. So again, you can delete. You can click the edit to the right and delete the four, two, four. You can delete the entire, you can rename the entire thing. So go ahead and do it now. Put the actual listing address. Perfect. Awesome. Awesome. And then what I also do is copy that. Go ahead and copy that. 1311 Royal Trun. Copy that. And so go ahead and edit. So let's click on the green one, edit. And then what I'll also do is all hover over communications at the top and click on sequences. So that's your email automation. That's your drip. So go ahead and you can go and click on edit. What I always do is I'll name, whatever I named the list, I'll also name the sequence.  Right there that thank you for your interest. Go ahead and put the address right there as well. This is simply a description of if they ever unsubscribe. So if they ever unsubscribe from that list, this is what they'll see. Okay. Just like a reminder of what lists they're even on. Okay. So now we come into the actual drip. We come into the auto responder. Go ahead and start tutorial. And this right here is simply just giving you a tutorial of how to structure everything, but I'm gonna give you a full-blown crash course in 30 seconds over here. So there's one. Oh, I'm sorry. You think I'll be able to launch the ad tonight? Yeah, heck yeah. Heck yeah. All we need to do really though, is put a couple emails together. So it's just a couple emails. And this is the sequence. So you can have as many emails in here as you want, but really it's just, maybe just a few would be good for now. And then the start and roll, go ahead and edit that, click over. Yeah, hover over that and click on edit. Maybe the blue to the left. Yeah, so here's the start and roll. Anyone who opts into the form, starts to receive these emails. So that's what this is all based on. You can base it on an opt-in form. You can base it on a list, which is the same thing. You can base it on a tag, whatever, but really it's just the opt-in form. Anyone who opts into this specific form, will get these emails. So go ahead and click on save. Okay. So now it just comes down to these emails, putting together a handful of these emails. And then also the actual landing page. So let's close out of this real quick. Hit done and exit. Okay. And then what we need to do also real quick, is we need to integrate your domain.  So click on my integrations to the left, because these emails, as these emails start to go out, they need to come from your business address. So your email address. So those three dots on the cartur mail, above cartur mail, click three dots and click on edit. And right here, the sender, that's coming from your name. You can always add Sean, whatever. You can totally customize that. And then the email. So the send from and then the reply to. Those cannot be gmails or yahoo's. They actually have to be like your e-mail or your actual, the force. If you have the force email, then something like that. Okay, I think I can do anastasia.forrest.expreality.com. Yeah, perfect. That'll be good. So do that for both. That's super, super important. And then what you can do is you can send a test. I would send a test for sure. Now what is it? So why does this say 904homesales.com? It's sending a test. So by default, it has your email in there already. So you can send a test to that. It'll send it to here though. No, it's gonna send to the, well, yeah, it's gonna send to there, but it's gonna give you the notification at the Gmail. Got it. Send the test and see if you get that Gmail. All right, I'm picking up my phone. Okay. Click it again. Normally it gives you some type of confirmation. Click test again. Sure. Test. Okay, now it's sent. Okay. Portrait, test. Perfect. Yes. Okay, cool. So hit edit. So we're good there. We're good with the email. Now, here's what's super important, is this is the time consuming part. I mean, and that's why like, I know how important it is and how urgent it is to get an ad out like ASAP, but these pages just need to be edited. Like first and these emails need to be set up.  Now, you don't need a page or video in your emails. You don't got to do all that right now, but at least updating and editing these pages is something you'd want to do. It's maybe just like, let's just do it real quick. Let's have, let's go into the landing page. So let's go into the list, the one down. Let's go into that one. So click on the three dots. You'll always, this just allows you to view it. Let's just click on the three dots and let's go into the editing. I don't see three dots. Am I? Yeah, X out of here and go back. Three dots. Three dots, three dots, gotcha, edit. So, you know what? Cancel all of this real quick, hit cancel. Let me just, so we looked at my communications, the list, the two lists, we're looking at pages, my pages, here are the pages. And then click on my forms real quick. Yes. This is the actual form that goes on the landing page. So we can edit this real quick as well. And then your calendar, that needs to be set up as well. So go ahead and take out the, yeah, go ahead and put the new address right there. That's it, just name it that. Yup, that's the form for that listing. Yup, perfect. So as we go in, as we go in, we can ask for as much information on that form as we want. And that's what a lot of, especially a lot of realtors, a lot of realtors always want phone number up front. You know, they- Can we add that? What's that? Can we add phone number? No, I wouldn't. That's what I'm trying to say. I wouldn't. I would just go name an email, let them opt in, and then again, that's why the sequence, the emails, that's why that's so important because that's where the emails are coming, that's where our appointments are coming from. The appointments are either gonna come from that thank you page or they're gonna come from the emails. Okay, great. So rather than me asking for their phone number, I'd rather have them schedule a call with me. That'd be nice. So yeah, so that, yeah, that's gonna help for sure. So hit save and next. First name, email, that's all you need. Save and next. And then confirmation, the moment they, it's gonna be a single opt in. So the moment they opt in, we're telling the system right here, the success page, send them to the thank you page. So the moment they opt in, where do they go next? They're going to that thank you page, which we'll be able to edit the title of it for sure. But that's the page they're going to and then save and next. Yes. And then this is where you can send that first email. Hey, John, thank you so much for inquiring, right? Like the first first email, but I don't send it here. I send it through my communications. I send it through the actual sequence. So don't send it here. Send everything through your sequence. So right here, the moment they opt in, they're going to be subscribed to that list. So that's fine. That's perfect. So let's scroll down, save and next. We don't need any of that. And then save it next. That's form design. That's fine. And then finish. So that's the form. So now all we gotta do is we have to, we have to edit those pages, and then we have to set up your calendar. Yeah. That's what has to be done. The pages need to be edited. The calendar needs to be set up and a few emails need to be written. Okay. So that's kind of what should be done before you run that ad. Now, all that can be done today. I'll just, I wonder if it's something I'll be able to do. If you kind of like show, tell me, give me a summary of what to do. I could always do it after we get off the phone. You know what? Yeah, I can, we could for sure do that or I could just do it for you. So, and I can, I'll record it and I'll just do it for you. All I would need is images and a description of the property. Okay. And a thank you video. And a thank you video. Why don't you do that?  Yeah. I'll do that and send me, and that's it. That's it. And then you work on that thank you video today. Okay, got it. I can film that today and have that done. Let's do that. And then I'll record how I edit everything. I'll record all that. And then that ad can go live tomorrow morning. Okay. We need to set it up in Facebook though. I don't have access to your account, but what I can do is I can, I can, I can. Tell me, because am I retargeting? I just thought we might want to talk me through it because I don't know if I'm retargeting my audience that watched my video, my intro video, or if I'm just going to kind of start a new campaign. Both. You're targeting a cold market and you're retargeting your previous audience, the video. So it's both. It's both. But this part, and it's like, damn, I have a full blown schedule tomorrow as well, but, but we got to get this thing out. Let's, let me, let me double check. Let me, what's your schedule in the morning? What are you, yeah, your Florida. Tell what's your schedule? What's your schedule? I mean, if anything, we can jump on. I mean, again, yeah, what's your schedule?  I'm doing my podcast at noon, but I'll be done by one for sure. Okay. Damn, and I have calls all the way till five, your time. So what we can do is, what time is your podcast? It's my time at noon, from noon to like one, and I'll be, I want to make sure it all works. I have to jump on, probably jump on 11, 30 to make sure it's all going to work technology wise. Yes, for sure. It'll take us, it'll literally take us it'll take us, it'll take us, it'll take us 15 minutes. So why don't we jump on at 11? Okay. Well, the only thing is I have a buyer appointment outside the house from 10 to 11. So it might be tight. I'm not sure if I'll be back in time, but I could, yeah.  Let me just, let me just, here's what I want you to do.  We're done with this part. All I need is your login. Let me log in to your cartridge tonight and I'll update all this. Again, all I need is images. All I need is a description of the property. And that's it. I'm going to set up the pages. I'm going to set up your calendar. I'm going to set up your email sequence. Awesome. I'm going to set up everything. And then what I'll need is I'll need, I'll need to get access right now and we'll do that right now. I need to get access to your Facebook account. I don't need passwords. I'm going to have you just add me just so I can run the ad from your account, but from my end, and I'll start that ad tomorrow morning. Oh, that'd be awesome. Yes. Wonderful. Okay. And I'll record that part. I'll record that part so you know how I do it. Awesome. So what content do you need? I have a nice video that my photographer is sending me soon. All I need you to do is take that video uploaded to your business page and write out any texts, write out the actual description or write out the text of the post because that's going to be the text for the ad. Oh, perfect. Yeah, I'll write a little marketing blurb. Yep. Yeah, a little marketing blurb. That's all in that post. And so here's now what I need you to do now is go to your business page. Go to your business page. Just go to business settings and then I'll request access.


So, I wanted actually some guidance about our voting system. There have been requests by various people who wanted to use the basic engine for tasks which are widely different from what we use it for. Even though I say so myself, the voting system is fairly good at running independent votes and detailed elections. Most of the results I think that you see are already automated in the progress reports. And it's a fairly open election in voting process. So, I can either vote through a whole bunch of talk about what the voting is, where it came from and how it is currently. Or we can jump to the meat of the box and look over where you guys want to take it. History, I, we used to have a security team called Ben Daly. Who, the guy in the votes, created 2000. And around 2000, it kind of disappeared. Like, it was when they disappeared. Whole chunks of money, but we didn't have a SPI back then. And he was back. He was back, he was back, he was back, he was back, he was back. So, there was a ban, etc., etc., all of them. Ian Jackson stepped in in 2001 and asked Raul Miller to run the vote. Because there was no secretary during the NPL election. Raul ran the vote. Forgot that the NPL elections were supposed to be secret. And so that's the only NPL election for which we have fully-publicized votes from the government. Well, he was not used to running it. He was called upon to run the vote. He had to learn the system. I think 2001, it's quite a dilemma. And the system, as it was then, had been created for one giant stretch. It was running.sport. It may have come in. It would open a database. It would text file a database. It would lock people. It would go through, do the parts, the GPG, signature, nature, it was okay. Parts, the contents, make sure what the vote was. Figure out what the votes would be and write the database back. So if the other votes came in at the same time, you had problems. And this whole thing, if there was ever anything wrong with LDAP, then that vote was lost. Because there were no records there. Either it went through and you wrote the DB or it did.  Now that is put in some database. But still, if LDAP was down, you would lose all the votes that came in. So I was tapped in 2002 to see if I would do the project separately. I don't know, in the moment of being this, I agree. But then I asked Rao what we had to do to run the vote. And there was this giant stretch. No way am I monitoring responsibility with LDAP. So the devotee was actually written, the first draft, during the DPL election. When the elections mattered, all the had was something that would take the mail and store it in a folder. The rest of the devotee was written while the election was being run. The votes that I had there, they should be identical. That means if you got votes coming in, you rerun that thing, you should get the same results. So every action you take is identical. Second, the first thing you do is you save all the data. No matter what happens to the devotee, even if something crashes in the middle, you should not lose any data at any intermediate stage. And the third thing was to make it not scary to me. Each stage ideally should be independent, separate scripts, stuff that I can understand in one vote. I kind of slipped a little bit on that one. So I was told by many people, AJ and Bidey and everybody, they told me to fix the whole system, don't rewrite it from scratch. AJ was kind enough to tell me that I shouldn't be doing this, because writing main handling systems, especially those that handle GPG are not easy. He wanted to save me, because not everybody can write systems in one vote. Otherwise everybody would have. And stubborn as well, so I decided to do that. Devotee divides the current implementation, divides the task of doing the vote in, I think, about nine stages. The first stage runs sort of brought forward. All it does is it takes the mail, puts it in the school directory, it will block it. And it increments, it's kind of like made in IR, I wrote my own implementation because I didn't know very many mainly IR implementations of how data is processed. And I had 24 hours before the vote was supposed to start. So I was kind of under 5% of the directors who put like, I can use block, I can implement the number I and do this. So that's stage one. You save the mail. Nobody ever touches anything in that directory. None of the rest of the developers. Stage two, copies, any mail that has not already been copied from the school directory to the working directory. So the school directory is always the same timestamp, whatever it is. The working directory is where everybody is. So apart from the schooling, every other devotee script runs in sequence out of crowd. Each one of them blocks the popular directory. At any given time, only one of the other devotee scripts will be running. The spooler kind of runs in sequence. Copy, the next step is mind-handling. We need to separate out the body and base. It's the coding or whatever. Parallel to this, there's the GPG. People subscribe just to a doc here. We do that GPG coding there. Sometimes they also have mails of money. Sometimes when you have a mind, GPG mind, PGP mind, input in mail, you have two parts. If you have not encrypted it, they measure, then they assume it. Some mailers who are unhelpfully input this after this. Some mailers don't input this. There's also the line ending. The RFC said that all the line endings would be backslash r, backslash n. Evolution, for example, doesn't care about that. This gives you backslash n or whatever it's going on. It doesn't keep going.  It works for me. I send it to myself. I have to report it. Why not you? So now we have GPG reported. We have done the mile separation. We've got the boat sitting in a nice, clean format. If the GPG stuff succeeds, then it goes to LNAP, set the season and the fill-up is the same. Then you parse the boat, carry it. At any state of the living problem, it goes through a put-semitage in the log directory. All of this is being done in some directories of the top voting directory. So every script reads from run directory, writes to the next directory, and so on. So we're changing scripts and their input and output are changed from one directory to another. Then if the boat succeeds, whether it's a secret or not, you do the resuming that all of us have voted and we know what the vote distance is back. If you have never made a mistake, you know what the vote distance is back at LNAP. So these are the steps that happen whether you send it or either in LNAP or in LNAP, and all this is recorded in the log directory. The thing is, if at any state things fail, like if you put in GPG, if it was not signed, then the GPG authentication step fails, the file is dropped in the log directory.  If the LDAP fails, you will have GP. If you run GPG again, you will see that the output directory already contains something. Yes, no, usually it's not there. So if the output file already exists, it doesn't do it again. So it doesn't do any more calculations than it has to. Is it based on which files? It's based on which files? Which files? No, I just do it without a problem. You could run the same thing from make, but it is a sequence. I have got something called dbt-chron, which is what I speak to the... It is chron, because now I have got a mostly automated method of setting up the new board. I go and run this script, it sets up the chron job, it sets up when the board starts using the app, sets up when the board finishes using the app, and I'm working on something that will send off a signed message to dbt-pressure, I think, to it. There's a signed message to dbt-prison as soon as the results are there. So the human effort is mostly in making sure that the candidate or the option names are correct to consider devoting. And from that point on it mostly is you just get it run and it starts and stops the work on its own. The problem with the current process is, as I said, it is all based on and each script reads from the output directory or the dbt script and writes into the input directory of the next script. So it is not easy right now to say let's not do dbt-checking, let's just do LAP, or just forget LAP and we'll do it. Or to insert another authentication method. So it works, but it's kind of a package. And I apologize for that. I wouldn't have done this if I wasn't under the gun of having people tell me that I had to do it. I had three weeks to write all this stuff in but that's how long voting lasts. So I would like to change this because there have been various people who have asked me, they want to use this mechanism, they want to use parts of this. For example, if you're doing the web-based voting, you don't need the mind-handed front-end. If you're doing web-based voting, you already have with HPA access password checkings, you don't need GPG or LDAP checkings. SPI probably doesn't need the first three steps. No mind, no GPG, no LDAP. Authentication has been taken care of. But the rest would be nice to have a standard method. Currently the only voting thing that we have are our Debian's variation of control set. But there are various kinds of voting algorithm out there, you know, first pass papers, all kinds of things. SPI also doesn't do the same thing that Debian does. So if I could plug in, so it seems to me now that I have time to read and think about design I have to go, oh my god, what will I do if I can't get it done? It seems like this is a blackboard pattern. Every vote that comes in is a job that is placed on the blackboard. Every job has a certain requirements. The default requirements are stated in private whether you need authentication or not. Which set of authentication methods need to be applied. What kind of processing needs to be done that you want to say more than what you could have multiple parallel results. Communication back to the people who vote in your, whether you both succeed or didn't succeed. Secret ballot, non-secret ballot. All of these can remain with tasks that so the blackboard pattern for people who are not familiar with looking at professionals. Blackboard pattern is where there are processors jobs that are placed on the blackboard.  You go off, you do whatever the job needs to be done that you can do it. Then you come back and you place the job back on the blackboard. This way, the blackboard pattern can work on itself. It's well enough to find that it will be easy enough to vote. And it will also be flexible enough that you can say that throw away bits and pieces. If you think of this as a plug-in, a modular framework where you can plug in various things. You can say plug-in various authentication but you can plug-in various authentication. There is somebody who wanted me to start sending mail back. Can't say yes, I am on AOL which is quite interesting but I have told them that no for Debian, I don't think I am quite ready to support AOL instant messaging when you send your mail. But it is not a bad request. I would like to be able to support other messaging protocols.  It's the XML protocol. There are XMLs in major protocol. How can you send a jabber message? All I need is a way to be able to read your jabber message and say ok, just develop a vote and it was signed by the right key. Anytime you want to redo just remove every other directory except for the original school directory. And then you can rerun the vote. I mean, when I do that and I have done that when I made changes in 2017 I just turn off the NAP and NAP so you don't get multiple notices for the same thing because I need a new vote but not flexible. There is no code in devoting it. It's not time to write it but then configuration becomes later. You have to be able to configure each script. Right now I have one configuration for devoting and there is lots of development. So I have the idea of in inscripts you might want to run many different inscripts but they need to be in different orders so you can prefix them with numbers so what you could do is you could prefix the sub-directories of the working directory with numbers and when a script so your capacity would run in the middle of a number and the output of a given other script would go to the directory with the next number. So you don't have to go to the level of direction right now about the direct reading you just say that you are script number one so you read from directory number zero and write from directory number two. You are script number one you can just have a directory of scripts in the directory assembly to those scripts isn't that familiar? They have the same name the final names are the same so message number xxxx it's so complicated that it's just being passed through the final name is the same the context can be broken for example, if you look at this text there are a bit there are a different text I can imagine some use cases where you do not have serialized process you can imagine having a vote where you could vote by name all by web or by chat so you would have one sequence of and I'm not sure that storing what it works storing the data in five words basically what we have here is a state machine currently has just one string of serial operations but you can mention other multiple inputs for multiple voting and other inputs maybe even parallel there are some parts that can be done there is a the point being this here with the directory the dependencies for example in order to do the exact and I was thinking that it's a problem that could be a result of changing the language using the database could work it will also provide you there are string problems as running a database on master could be hard a remote database will bring new right now everything is dead simple I can remove files I can get things to work again you can use have a more complex structure even still dealing with files but now I can't use BI anymore because you can still have multiple pass periods so the transcripts have the same output work well actually I would rather not go into implementation I'm going to rewrite the voting I'm going to rewrite it in voting because I need to learn the language we all need to learn the language well right now I need look the blackboard pattern will handle everything I want to stick at the level of algorithms and patterns at the moment because we can get lost in the implementation details I'm hungry I don't want to stay beyond the e2plot dinner starting right can you just make it configured by a shell script which won't listen the backends in the right order we could but you are looking again on the web we can go to the database we can do more complicated data structures on the file system is after all the data but what I need more than the implementation details we can always discuss what I want to write in this book is a brainstorming the idea that the same vote can have multiple means of sending in votes that was this is a new idea that they wouldn't even consider so far so how would we handle getting the blackboard pattern when a new job is injected onto the blackboard its requirements come up so the processing the input processing that is done for if it came in by a team then you have to do mind processing if it came in by a jabber you have to do some kind of accessibility stuff to it in order to grab the wrong message that GPG etc. and similarly on the web you can say that bypassed the whole checking thing because the web CGI been already somewhat indication sorry which can be diverted and each model has an input forward which needs to be read we don't feed jabber messages into the mind process we have to have validation and specification of the output from and you got only for modules that's fixed that makes a lot of sense well they do have two different patterns they work here talking about pipelines but there the processing has been set in priority you cannot change in the quality of the system is reduced by using the pipeline pattern as opposed to using the blackboard pattern because the blackboard pattern there is no preset pipeline but we can do everything that the pipeline pattern does using the blackboard pattern because each job is set of requirements each requirement can have prerequisites and therefore the dependency between the requirements each single unit comes in looks at the job and sees I have a certain capability and the job has certain need I also need to have for my capability there is a prerequisite if the job has the prerequisite processing is already been done I can make the job and I can do it this exploits any parallelism that is in the system and I can say that these are the subject of jobs that are in the blackboard that I can work on it doesn't really you don't really have to search that means you can add a new processing unit and a job with a new requirement any time without having to ever change any bit of quality because your pipelines are being derived dynamically based on the requirements of the job and the processes that are present you can plug in more processing units every task even calculating results or sending things back in the processing unit I can plug in a new authentication mechanism or a communication mechanism and the job comes in because the requirement will automatically be met I don't have to ever set any pipeline the advantage of this is if this is a framework which can create some dynamic pipelines and I can give to people who can use this system to do whatever they want so it can be used beyond devotee I did consider the pipeline but then I decided that the blackboard one was better because then you can remove processing units and you don't have to construct pipelines it seems like it's not even specific it seems like it's a general blackboard kind of framework which you can then apply what I wanted what do you guys want to use this for what kind of processing units do I need to implement at the first oh beyond what I already have one of the things to get to that point is I was looking at this trying to be able to set up for this special opportunity so that for example one of the things I was looking at was the ability of arbitrary people to say hey I want to vote these are the options that I want I want people who have a GPG key that said I want to trust people or the stronger than I could say any male or people who are in this arbitrary career already anybody who can get to a panel on my machine I mean anything you can to separate people and then make the vote and suddenly you can do it on one form or something and say hey run the vote start time here, end time here results to wherever run it and so for example if you have a small organization and you want to run a vote it makes it easy you can set options for the complete tell to run everybody can send mails this is cool essentially we are talking about if you have a modular voting if the modules are available you pick your input modules you pick your authentication modules you pick your communication modules how you can make that and you pick your result calculating module and then you pick what, how the results are published and all this can be done on the web so what are the other processing modules jabber was one of them cj beach command line I want to share it with the user system if it's an organization like an old example bbs or just a shared server by a separate organization of people if they all log into the server and want to command both of the unassisted that can be extended to just like the ability to SSH to the vote machine or the sole purpose of running a vote system yeah something that injects the vote I could provide that does anybody have a piece of paper I forgot to I need to note these things down you have either the local login scenario or the SSH to a special account then you either case the authentication is already taken care of SSH to a local account that is sure it should be at least the person who is running the vote to decide whether you still need authentication or not if you can log into master then if you can log into master and are in who by DW I don't know if there are any other accounts of master it's possible maybe a local admin can decide they are non-human role accounts yeah if you can do it yes so then we probably we don't know what it is sorry once on the patchy yeah triple W data it's the code for anybody can write their own model so that takes me out of the loop so I don't have to work so hard I think however that doesn't mean you have to write a lot more documentation people tell me that Ruby doesn't need documentation it's a nice language that someone else has written well if you do it right you can make it language enough that you use the modules and framework because if you document the design well enough and we get a protocol I'm not really sure how I'm not really sure I can design I can commit to designing a interface that is language writing since the framework is hard work what is the final list presumably you want to have a paper trail on the disk for everything that is done you probably want to stick with plain files like them it might be a reasonable case for XML I don't know speed it becomes an issue the problem with the current team is that the model of scripts is not good and there are various reasons you can tell that the problem actually is that I want to move to a general solution I want to move to a blackboard pattern so that I have received requests from a co-op a farmer's co-op in France who want to devote it and they want to use condos because where is the next one what I would do was to stick with the current scheme of working directories and quantify the worker so that they accept input directly as an argument and make the whole thing what do you figure out what is the chance script that reads from here right to there and this will allow you to set up the pipeline this will also allow you to have several input methods so we have just two workers that are writing the same directory and this sounds pretty natural the hard thing about it is that it requires people to know what is going on it might become too I have been asked to package devotee if I package devotee you know the kind of people that have been using it they would want to use it for their look maybe there could be some standard setup that is already ready and standard I would suggest also that the directories have a blackboard framework that is more general than voting and could be used for other things too even media and I would recommend that you then give the name devotee to your set of voting modules for this framework which would itself be more general you want to make a separate separate out the framework and packages separately and devotee is just one user of the framework I think that actually is what you are proposing whether you separate it out or not the framework itself has no dependency on the notion of voting that is true it would probably be pretty specific to the idea of storing jobs as black files and having files that is why I do not want to talk about it right now that is the way to do it and I would probably stick with it but there is no reason we could change the modules so that the messages go through and what is the Ruby editor called there is a special editor that the Ruby folks have been trying to get me to use instead of Emacs but that is based on some things it is not a blackboard mechanism they have worked internal storage and so we can follow that framework and all the modules then write to it looks like a pseudo file system inside it but it is sorted in various ways so we can change our storage we are not well into the files I definitely think that whatever the storage system you use the file format itself should not be tied to any specific language for example, to give an example it obviously won't use it should not be Java serialized objects whether it is fly file with a documented format or XML or something else like this the framework should not specify what is the file format anyway because devotee would like to still use email for the email input and then the intermediate form I already have all we need is that means login ID or fingerprint and what the vote was I think the framework is not you imagine for each job on the blackboard I think it would have two parts you have the data block which would be in some specific format specific to what stage the job is at and then you also have another data about what stage the job is at and that would be in a second file and the second file would be in a well-defined format I think the blackboard that has some kind of best practices format and I think it would be reasonable and easy to document and it would be and it would even be very specific and anybody can parse them in a simple format and do whatever with the data and the framework itself would be very lightweight it would make a lot of deal with that and the framework talk and I was thinking of template I think well the blackboard pattern actually makes sense yeah the fact is one of the reasons that I personally don't know it was confusing at first I had to say that for all of you there you cannot create a script so that people like you can come in and understand that and see what it does and this new thing should be the blackboard should be even easier to configure than what I have now that's good you mainly matter defining which models you want to use which in some way of feeding data to your input model yeah do you have a few global parameters about a few global parameters actually I don't know what you are going to get the key ring or how to log in to LDAP that would be part of the config of that model but you just have like listed models and then just a few very maybe some place where the modules don't and they have their own config files and you don't even need to have any way to master the modules you just need to make sure that before you start feeding data into it you have all the necessary modules programs running I would say to even monitor the directory or monitor the blackboard for new entries whether it's get to yeah and it could be with McFan or whatever and you could just notice when there's something there so you just have all the components and all the money before you have any data being fed into it then it will all end with it there will be one thing that will be necessary for this which will be the prerequisites for example currently the way that LDAP works it looks at the fingerprint of the person who has signed the book it uses that fingerprint to query the LDAP database to make sure that they are in the mic that prerequisites will show up in the metadata for each job for each job but there might be some other way of using LDAP so there is a LDAP module based on this configuration where is the LDAP in some fashion I can say that just take the user with the name in the from header see if they belong in my database forget about GTG we don't have a GTG here so now even though you have the LDAP module what it is using as input has changed and that is the configuration of the LDAP module so the there is dependencies for the LDAP module might change from word to word depending on whether you want to change GTG into LDAP or not so this metadata about which modules are dependent on what well that doesn't mean if one data would have that it would just have prerequisites that would have keywords of what has been satisfied but which ones in particular module would require in order to continue as opposed to just ignoring them as it is for the present that's really up to the individual module that's it well since I put a new so a lot of the configuration file and then it would decide dynamically which prerequisites it really cares about and which ones it doesn't I think I'm looking at this it's all first say of course it is still devotee we have always in certain steps that we need because our constitution says so it has to be GTG checked it has to be LDAP checked we have to extract how the person voted we have to send a acknowledgement back and that is not a different way and finally the results have to be handled every time a vote comes in so this list of tasks that need to be done for that particular these are the requirements for the job you can either think of them as global parameters or you can say that by default every job comes in with a certain set of requirements and these are those a job coming in from the mail input then also has a mine parsing which comes first so you might each front end might want to add a pre-processing stage so you so just like we have there needs to be some order that doesn't depend on the model so the first thing we do for votes is do a GTG check now depending on how the ballot is injected some other processing is done processing or XML transition but the GTG model doesn't have a pre-processing it doesn't care what it cares is that it has got either a crypt text or plain text plus signature blocks somewhere that it can run out and if you consider that pre-processing is the message yet in a format that GTG can deal with and if you just consider that to be a client that starts on set but then you know some previous model that puts the message into the correct format that GTG can deal with but in any case now you have got a specific set of flags which might change from a job from what you do pre-represents I call the flags we are talking about things it's just a mannequin stuff does this sound like a good idea or is this something people would want to have it's not much more flexible I have this is about time I'm still only talking about the network question I haven't read the questions if you have this sequence or module and they converge on this targeting module then I think it should be able to have two instances two different instances the same module we are sending back messages because I think if you get a work by chat you don't need work by chat if you get a work by you you don't need work by chat so the way that this is handled in the blackboard type of thing every processor that processes a job takes it off the blackboard and that includes adding other requirements which I think might be easier to understand transcriptions this is a task in which a voice file comes in at one end somebody listens to the voice file types in the text and then there is somebody who checks it proof reading so I am using this my last project was working at a hospital trying to get the doctors with this and all kinds of requirements one other thing that happened was when you were listening to the voice file you realized that the doctor you thought it was about patient edge but the doctor is actually talking about some other patient and now you won't have their address so what when you listen to the job this person has to have wait a minute you need to have an address check wait a minute I could not understand part of this so could a proof reader could you take a look at the job so the process thing is changed in a blackboard pattern by the process you can add more requirements on the job so that's why it's more flexible than a hard-coded pipeline which is where it goes in either one part or the other so jabber if it comes through the jabber there is a jabber translation it will add something back like you said that we need a jabber app to be sent to such and such a place so now the requirement goes along with the job and then the jabber app and this acknowledgement has really possessed you you need to have all the checks done I guess you could so you could maybe when you adjusted you could start out with some requirements say if it comes through the jabber it would be adjusted with the jabber requirements it would be a bunch of requirements to the application like the voting and you would only move a job you would only record a job as finished when all the requirements have been satisfied and so that you can even verify that everything has been done properly that's a requirement they could just publish more the published module only runs when everything else has been done it could be interesting to have a scripted program that can prove that every message that comes in builds out here what I was thinking actually what I was thinking of static verification what actually I was thinking well was right now when messages come in the original email which they seem like they are all described as soon as I have done my processing because I don't need to carry them through in fact it would confuse the rest of the module I was thinking instead of trying to input and output forms that I create we think in terms of object there is a job object and various processing changes the job object and you attach various things to the object itself now when I say attach something to the object all I mean is you add a pointer to the metadata that this was the previous form in such and such a directory now the next step has been done in the metadata points to a separate file in the end of the directory or we can give a database reference the backend is implementation defined when we are calling the thing we can either say so the concept of that is the job object has the metadata that points to all the processing that has been done which has not been done yet and there was hey we can even do check this object into hvn and every time we do processes we do a hvn commit so we can use hvn as a backend I mean I wouldn't do it for voting alright but if you are doing document processing using our framework and various things are being done to the document then I can see using hvn as a back end is reasonable for the document you carry a page for the back end you should do some research whether such a form exists and you should not I have been this I have been working on this medical transcription system so we did the documentation to clean the document medical says that they are willing to sell us a blackboard pattern module for 1 million dollars US per seat per year I mean all those does that sound like a workflow with Q you know kind of like people on all that stuff enthusiasm on all that stuff well it is kind it is a workflow model the blackboard pattern is a workflow model but the Q implies it is kind of like Q and not in those kind of stuff you just drop stuff in the Q and the Q stories and some of the guys say ok is there something in the Q for me and you have to get out of it the Q is the blackboard the Q is the order the Q is the order not in those I mean you have a Q you have this kind of communication device and they call that Q but it is more like more like a lake and simply well that is the blackboard so the idea is you have a single Q but you have about a dozen different Q runners some of which are just ignoring half the messages but high to the Q that can get not like that and then they get great active messages how does that work? do you question my mind in some other way? just say we will do it now but there is one in one unit that requires Italian so the tally sheet is a separate object in this part of the processing of this is that the tally sheet changes when you run the tally module on your job technically your maid could have write in any order you can't rely on email as being an ordered service that could be part of the metadata for that job well there are two things right now if you send things to devotee, two emails devotee just articulates the order in which the job was received if something happened to your email and your first mail arrives later than your second email you will get the wrong work right now so we thought that the order in which you send the board is the order in which they are processed unless you get the app in between I guess or you probably get the app in the proper order yes, if once you get the app you can send the email in full because that means you are in process that's what you have to do the issue you might have is that it may be 30 in total but because right now the way you have it and if something gets stuck in the queue which queue is that and which process is that you can go straight to the script and say this message this doesn't work but you have a blackboard you have a common school area things get stuck in there it's going to be really difficult with blackboard but every job that comes in can have a differential id I see that if I look at the output even so we can create a time span based id system where we can state that you can always have a common semaphore which governs what id is given to your job we probably will have to otherwise we will be confusion if there are two jobs with the same id we couldn't feel the heck out of everything we have that so we have to kind of semaphore that no matter which way if we get the id and the semaphore will make sure that messages coming in at the same time kind of get the same order of id no matter which system they come in we can still check you look at the output you can see that if 91, 92, 93, 94 have been done but then there you have got 96, 97, 98 and notice something went wrong and that is how I check right now at the end you are enforcing a pipeline on the back of the id I am not saying I am enforcing a pipeline I am just saying that I notice that there is one thing stuck and then I would come in an hour later if I still find a thing stuck then I would investigate as easy to find a culprit there in that case well it will be easy because you will know exactly what job it is which process what stage of processing it was in and then you maybe have something that no Japanese requirements for some reason somebody put a requirement and nobody fits and you have to think about why doesn't anybody take this that is very easily checked at injection time you put something on the black board every processing module has to register them just on the plug-in thing right every plug-in goes in and registers themselves to the framework if you get a requirement and there is no registered looking for it yet you flag something for that that we have got an unknown requirement and I guess the framework will then catch the case of a would a plug-in be able to tell the framework some list of prerequisites that it is going to be expecting of this job so the framework can check that all those prerequisites are possible to satisfy within the current configuration yes set it for application it would actually be a little more static you do all this checking before you start accepting jobs the black board also allows you to dynamically add requirements based on how you process this job do you think the requirement can be satisfied by something you tried to show before no the module wouldn't know what had been registered before the module can add a requirement then it goes to the black board properly and the black board says, whoa, whoa, whoa you have just added a requirement that I don't know anything about and then it fires out a message to my pager or something and wakes me up and I go investigate what the heck happened you say, oh I forgot to enable this other module oh there is a bug in this new framework system somebody screwed up yes I don't see it possible but how could that multiple jobs that can run in parallel like multiple modification mechanisms it's not like you can get a message by Jabber you might want a notification by Jabber and at the same time by email because Jabber might be lost for some reason we do it the same way that we do now if you send two different words, the last word no, yes one word multiple modification mechanisms because it's like you will get to a point where you say how do you find this message and how can it will make that convert two jobs, how do you know how do you know there are separate jobs today you've got to drop any by email you've got only one job and you want two notifications oh two notifications or three or whatever or whatever this is a configuration for your blackboard the metadata is always presumably if you've got all the information there in that message or you've got some way of getting the information, like I get an email from you I need to know what the jabber is if I've got a module that can convert query an external database and say ok such and such there will be a login has such and such jabber IDs then there can be a when I'm hitting on the board I can say that if we have jabber information also add on the requirement that the notification has to be set by jabber this is what I was talking about that you add some default processing when you're setting up the board and then if we don't have a jabber ID for you it will log then it logs in sorry if no notification could be sent then it's important that it will set you can install it so the advantage of all this is that we can if I do the plug-in architecture right you can have all kinds of modules put in the pipeline that check whether things succeeded whether such and such so you can say that send jabber notification to everybody basically another thing would this be flexible enough to make it reasonable to have different error paths I mean with the pipeline I guess we have like many different places that are job connected to the system if something goes wrong then you go to somewhere or like with your current architecture you have lots of different things that can go wrong and every check every check could fail and if it does what happens to the job the first time that the check fails now we log that thing and as soon as we have worked the error log for any code no more processing is ever done so with plug-in business with blackboard pattern I imagine what you have is that each module would have a way to take a job off decide that it fails and put it over into a different pile instead you put it in the same pile modify the metadata and say that this job is failed so no other module would pick up a failed job so nothing else will touch it and then by the end of the road you just have this oh no there is one thing that will touch it they want to go in guys an error module will go in that's what it means how many of you can just remove the other requirements except for to go to an error module I mean other requirements will disappear but either way you


Hello everyone and thank you for your patience while we sort out a few things here. Welcome back to the 1230 breakout session in Breakouts Zone 1 for the Arts and Community Track. As a reminder to our in-world and web audiences, you can view the full conference schedule on our website at conference.opensimulator.org. You can post your questions in local chat. I'll pick them up here. On the Ustream chat or tweet your comments using the hashtag O-S-C-C-1-3. This hour we're happy to introduce Opalei who will be presenting enhancing depth in your virtual world photos. This to me is one of the great things about being able to take photos in a virtual world and it's going to be very interesting to learn how to make them even better. Whether you still take photos for your personal momentals for a blog or your virtual business, depth adds realism and interest to your images. Learn how to use standard photography tricks and the tools in the Firestorm Viewer to enhance the illusion of depth even before you edit your image. Opalei will illustrate concepts with examples from her 365 project, Where's Dim Sum? Opalei, a.k.a. Lea Tesoro, I hope I said that right, you can correct me when you start talking, is a former software professional who thought she could successfully apply her MBA in a virtual world business but instead ended up doing more artistic stuff like digital contact creation, photography, and machinima. She is a recognized expert on stereoscopic framing. She wrote a book about relationships in virtual worlds and she still doesn't know what she wants to be when she grows up. Hi, here you are, Opalei. Please join me in a warm welcome for Opalei. Take it away, Opalei. Thank you, Buffy. Hello, good afternoon, everybody. We're going to get started very quickly here. The client that I'll be using is Firestorm. We'll be talking about that mostly because, and I'll explain why later. But first, let's go over to the first slide. What you're going to learn today is how your two eyes see depth. This is really just a background about how stereo viewing, how stereo vision works and then we'll talk about how we see depth in 2D in regular still photographs. And then we'll get to the meat of the presentation today, which is how to simulate depth into these still images with inside a virtual world. And this can apply either in second life or in OS grids or any other virtual reality worlds. And we'll do that. We'll go over some of the, actually some of the, about five of the aspects, the concepts that are related to depth. But, and again, I'll mention, I'll talk about why we use Firestorm. And that's because they have the photo tools, dialogues, which make it very easy to get the settings done. First, we'll talk about what stereo vision is. On the left side of the screen, once it comes up for you, you'll see an overhead view of my head with two globes. One is close by to my head and another is farther away. And you'll see two lines converging towards each of the globes. What you'll notice is that the lines that are going to the closer globe, as you'll see on the right side, they have a wider angle between them, whereas the lines going into the further, the farther globe are narrower. This is how the brain sees distance. It sees the differences in those, in the comparison between the left eye view and then the right eye view. And so it knows where the image, where the object is relative to everything else around it. And I'll show you the next, the next slide I'll show you. This is what it looks like inside my avatar with my eyelashes. We'll assume that my eyelashes are my eyes. We'll see where it is. And this is the setup. So there's a closer globe. The globe is closer to me and the globe is farther away. The globes are actually the same size. And in this slide, you'll see the view from the left eye. I have my eyelashes on the center of the screen here. And this is the view. And we'll put this all together in a little bit. You'll see that the view has tilted slightly. And in the next slide, we'll cover it up, because we'll just, we'll come back to that a little bit later. And this is the view from the right eye. So you see how it shifted. And we'll cover that up. We'll show that as red. And let's put it all together. And you see that there's a distance, you'll see the distance here more obviously. The distance between the red edge, the edge of the red circle and the edge of the blue circle is wider with the globe that's closer to us. Now how do you see it in 2D? There are different, it's really just an illusion. Your brain kind of figures it out. And the way that it figures it out, I'm sorry, the way that it figures it out is through different things so that it doesn't look like it's just a flat image. Your brain knows that it's a 3D, that there's depth in there. And we'll go through this one by one, but let me just go over that, what we have right now. First is convergence. And we'll talk about that more in detail. The second is through collision. And you probably already heard what that is. Collision is where things are just overlapping over each other. And also their position on a plane. The third are the shaders and shadows. And some people think that that's just to make it look nicer, but it's actually giving the brain hints about the shape of the object, the 3D shape of the object and the distance of the object. And the fourth is atmosphere. That's mostly about the light, and we'll talk about that too. And then the fifth is depth of field, or DOF. It makes it really, it makes it, some people think it's just an effect, but it also helps in depth perception. And another way to figure out what depth is, which is not really going to be covered today, because it's more like how we perceive it inside a virtual world where we move around the object and you can see the other sides of it. And then your brain figures out that, yes, it's a 3D object. But we're not going to cover that today because it doesn't really apply. It's more for machinima, or something like that, or normal walking around. As I said, my focus here is, let me just say this because I know that this is going to be recorded, and therefore other people will probably be seeing this in the future after the viewer has changed a lot. So I'm using version 2.4.2, BL34167 of Firestorm. And Firestorm has two versions now. It has one as an SL only version, and another as an OpenSim version. So you want to make sure that you install the OpenSim version. So environment settings, I'm just going to go through this briefly. This is how you get to the menus that we're going to be talking about. I can make the slides available later also so you can have this as reference. So if you want environment settings, what you want to do is go into the World menu, and then go down to the environment editor, and choose environment settings. There's another easier way to get there. Oh, thank you about that. So there's another easier way to get there, and I'll show you that in a little bit. This is why Firestorm is what I prefer to use because of the easier way. But this is how you can get it in other clients. They're pretty much about the same way. And you can also do edits or create new settings, new in-light settings and new water settings by going to also in the World menu, go to again in environment, oh, I'm sorry, I'm lost here, and choose the, choose, I can't see my slides, sorry, and choose sky setting, sky presets, and you can create some or edit an existing one. But I'll show you how to do this faster if you're using Firestorm. If you, we're also going to talk about okay, this is the easier way to get to something, to the dialogue that's faster. We have a lot of your photography photography tools in one place. You can use the photo and video option in the World menu and either and choose photo tools that would have everything that you need in there. I'm also highlighting camera tools here because we'll also use that to move around. Usually what I do is I move the focus on where I want the, the, I want it to be clear because I use a lot of DOF, depth of field. And, but I want it, sometimes I want it off-center, of course, for composition. And that's then, then I focus on that and use camera tools to move, to move it around in the screen. So you're going to need that also. You can also get the menu from the, if you have your icon bars in the bottom. You do it by right clicking on the icon bar and then choose toolbar buttons. And these are the ones that you would want, photo tools and photo tools camera, which are surrounded by the red box there. And this is what the photo tools dialogue looks like. There's actually several tabs in there and the top one is the one on the left and several ones in the back. And we'll go through some of them today because I'm going to show you the settings that are going to affect your composition that we need for depth. So with that, now that we've got the basics behind us, we're going to talk about the first aspect that makes an, an illusion, that creates an illusion of depth. And that's convergence and sometimes it's called vanishing point because if you, if you imagine a grid around you, like in the picture there, all the, all the lines are going towards the back, towards the background will be vanishing or eventually converging towards one point until where it all disappears, where it all meets. So that's one, one way that you can tell distance. The, you can also have, but of course you're not always going to have lines. So you sometimes would have same, the same things in a row, but receding to the background and that would also give you depth. And I'll show you some examples from my, from my 365 project. And you can also have different sizes of the same things. So let me go and bring up some pictures. Oh no, oh no, I'm crashing. Oops. Okay. Just my graphics card. Okay. I think I'm out. Let me give Buffy my links. Okay. One moment. I'm sorry about this. I lost my notes too. It crashed with it. Okay. Buffy has the first link. There'll be a lot of this links though. In this, actually I'm going to show you a lot of this links and I can, Buffy would it be okay if we just copy and pasted it on the chat so they can also just go directly to the website? Because it is just in the chat. It might be easier than putting it up on the, on the board there. What you'll see in this ones are examples of things that are going towards the, the vanishing point. And it might be a bridge or it might be a dock or it could be a tunnel. So things like this which would show you that, which would would give an illusion of depth. So you have to focus on, you have to oh sorry, you have to, it's, it's, if you, if you could, don't put them in just one line in the foreground is what I guess what I'm trying to say here. Try to angle your composition so that you have lines that are going towards the back, going towards the vanishing point. And that gives you a better illusion of depth. A lot of this will be dependent on your composition. So this is one of those, one of those composition things is not really a technical thing. I'll also show you starting with Newton's cradle where you can have a rule of different things, but they're similar to actually the same things. I'm sorry they're the same things, but they're going towards the distance so that it looks like, so that you also have that vanishing point thing. It doesn't really have to be all vanishing entirely. It can just be a short distance and it will, it will already give you some depth there. And I'll, I'm also showing you some, I'll also show you some starting with arches through arches. There are some objects, for example, like the arches that you only have, I only have two in the same picture, but they give an illusion of depth because the sizes of the arches are different, although our brain kind of thinks that, yeah, they're the same thing, therefore they're probably the same size. So just the fact that they're in different sizes in the 2D photo that tells you that it's farther away, the smaller one is farther away. Another example is like the moose, for example, not rush moose. Once you get to that, you'll see that there are two mooses, I think that's the plural of moose. There are two mooses and one is larger and the other is smaller. So you kind of know, even though you don't really see the ground that they're stepping on, you kind of know that the smaller moose is farther away. Let me see if I can get back in. Buffy, can everybody just say out, or just say out in public chat if you're done giving the pictures. Just don't get distracted about the other links in there. But if you've seen the pictures, give me a cue maybe to continue. Continue. Okay, great, thank you. Go on to slide 23, please. We'll go through collusion and roots, and collusion is really just very simple. And the slides, if it's already up, you'll see on the left side the blue and the red circles. And you can't, they're 2D, they're very 2D, they're very flat. You can't really tell if, okay, thank you. Let me sit down. You can't really, oh, I'm in the wrong place. You can't really tell of, okay, sorry. Let me sit down, otherwise we can't see the slide. Okay, let's go through this fast. Did I miss it? Oh, I wanted to show this. Hold on a second. Let me back up here. I wanted to show this slide. Is it there yet? Oops, I went past it. Too many clicks. Is there a way to get to a specific slide with the system? Okay, it's not letting me do this. I have to do it slow. I wanted to show you, I wanted to go back to the slide where there's the converging lines because I wanted to show you another trick in there, which I forgot to talk about. Sorry about that. There's what you'll find is there's a way to control the distance as it shows in your screen. I know that you probably, you probably have tried it with Alt F9 or one of those, but you can actually do it also in the photo tools. Stop, stop, stop, stop, stop, stop, stop, stop. Okay, it keeps going. The slides won't stop. You know, let me do this. I'm going to go ahead and create one. Can I create? Okay, I just need to just make this faster here because this is ticking while I figure this out. Yes, it won't stop. So let me put my slides on just a prim and just do it this way. Okay, hold on, hold on. I think we're on number 23. No, not that. We want to go back to 18, 16, 17, 17. Okay, here we go. Okay, we're back in business. So let me, okay, what did I say? That was 17. Okay, let's try 18. Okay, here's 18. Now in this slide, you can see there's my avatar opal in Second Life. And in the back behind me, you'll see a very small avatar. That's my Alt Hi-Ho. What you can do with if you go in the depth of field tab in the photo tools dialogue, at the top line at the very first option there is the view angle. And the default is usually 1.047. This is how it looks like. And it usually what it does is I don't use the default anymore, because usually when you have your image on the edges, it becomes distorted. That's another reason. But I'll show you another way to kind of make the sides feel bright. Okay, hold on. To kind of make it, to control it so that you can also have another way of showing depth or another way of making your images more unique or have a different aspect, a different field to it. And I'll show you an example. I have one example. I don't use this often, but I'll show you one really extreme example. So this is 1.047 at this setting. So if I move it up, if I move it down, I'm sorry, if I move it down to 0.8, you notice that Hi-Ho starts to get bigger and he starts to come closer to the foreground. And if you also notice that the lines, the horizontal, what are they? Not the ones going to the foreground, but the square ones are also becoming more compressed. So that's what's happening as you move along, as you reduce that number. And here is 0.6, 0.6 and 0.4. See, Hi-Ho is coming really close. And 0.2. You see the difference? 0.0, let's go back over to 18 from that to that. And you might also notice that my face is also changing. That's because it's less distorted the smaller you get. I haven't tried this with one of my images. Let me get the link. Where did I put it? Oh, no. I lost my link. Oh, here we go. I'm going to put it up on chat. I hope everybody, let me scroll. I hope everybody can hear that. Or maybe what is, let me see if I can shout it. Does it shift enter? Oops, no. That was a whisper. Oops, no. Okay, hold on. Sorry. There's a shot. Okay, there's a shot. I hope everybody heard that. Oh, thank you. I think you can read. Okay, so that's that. Yes, this is SL10B. That's actually, the turtle is actually farther away. Yes, yes, yes, it's a turtle isle. It's actually farther away, but by using this technique, I was able to kind of bring it really, really close. It looks more, it looks more I can't remember. I can't think of the word. It looks more impressive.  Thank you, Carrie. So that's one way that you can do it. One way you can use that technique. So it's not just that you're showing depth, but you're also able to control it. You're also able to control at least the distance of how things look like. And you can also go the opposite way by increasing that number. So it will look farther away, but then you also have to be careful not to put it too close to the edges of the picture because then it gets really distorted towards the edges if you make it too far away. Unless that's what you want to do, of course. Okay, so let's go to the next slide. 23. Yes, it's this one. Okay, now let's talk about this one. About collusion. So if you look on the left side of the top part, you see two circles, a blue one and a red one. And they look like they're right next to each other. But if you go on the right side, they're still the same image. They're still the same size. But I just put the red one over the blue one.  So that's what collusion is. It's very simple. The bottom one is about, I call it roots. I don't really know what the technical term is for this one. But if you see something like this, you're kind of thinking the blue one is in front and the red one is in the back. But really, these are just flat images and they're just moving up in diagonally. They're all the same size. It's not even the size thing. So that's another way that you can kind of fool the brain to think that, oh, yes, the red one is in the back. So this is very simple. So these two ones are very simple. Now about, okay, now let's talk about shaders and shadows. Most of us, we usually say, when we say shadows, we also refer to the darkness on the opposite side, like the shadow on the side of the moon that's not lit by the sun, for example. But for now, for here, we'll call it a shade, a shading instead of a shadow. And we'll call the shadow something that is, that falls onto another object. So we'll talk about shaders and shadows here. And that's also going to affect how everything looks.   But the difference is the thing is with this is that I'm using a windlight that takes away all that. The only reason that Opal looks normal is because of the built in shadings on her outfit. And you get that, okay, I'm using, let me go through here, I'm using the ambient white windlight setting, which is one of the defaults in Firestorm. But what I usually do is I modify it on the bottom side. I don't know how it's just, if you can see this clearly because it's really fuzzy on my screen. But on the bottom, on the bottom middles, not really the bottom, but on the middle right side of the screen is where you can either create a new windlight or edit an existing one. Usually what you, if you already have something and you're playing with a windlight already, if you create, if you tell it to create a new one, it will take whatever settings you have at that point. And it brings up this dialogue on the left side and the upper left hand side. The reason that you cannot see the skull is because of the part here that I have highlighted on the left side. That's the sun moon section and the ambient section. What the sun moon color is, is the color of the light. If you want it to be pure white you can have it white or a little bit gray. This white can be too overwhelming. But the ambient is usually darker and that's what shows you the shades. So because it's reversed in here, then that's why you cannot see the shadow. So let me say sorry, so I cannot see the skull. So let me show you the next slide where we show a little bit. It shows a little bit because I reversed the white and black on the left side as the sun moon color and ambient. Then it starts showing you the shades because now the shades are changing. So now because of that you can see the shape. You can see the 3D shape of the skull. That's another way to add depth. And then we'll do one more thing. I hope it's coming up fast enough for you guys because if it comes up for me then I move on. Let me know if I'm going to fast with switching slides. This one is the same but all I did is change the direction of the sunlight or the direction of the sun. So instead of being in sunset like before, let me go back to the previous one. So before look down below here okay thank you. Look down below here the picture of the of the sun is right at sunset. So it's like 5 o'clock something. But in the next one I moved it up just closer to noon this early afternoon and then the shadows move like in this screen you can actually already see the sockets of the eyes. And I will do a little bit more and in this time what I did is I changed the position of the east and there's also another way that you can enhance how the shading looks in the object that you're trying to feature. And I do this all the time and every image that I do I play around with the sun position because that's, you find the perfect way, the perfect position for the sun where it just hits it just the right way and it looks great and sometimes it just washes it out. So you play with it even when with images that you're doing even if it doesn't seem like it's pertinent to whatever you're trying to do. The only thing about this though is that you sometimes the sun doesn't come through if you're inside a building. So it's usually best to do it outdoors or if you have your own studio then open it up, open up the top or open up the walls so that you can have the right shadows coming in. And in the next slide I can see, let me see I have a few more of this one in this one now I turned on okay now we go back to the right side the dialogue on the right side what I did is I just turned on advanced lighting before I didn't have it on now I turned on advanced lighting and I chose sun and moon shadows that's all it is Opal, see if you notice Opal's shadow it kind of follows the curve of the skull. So that's another way that you can see that there's something there, the 3D even though you don't even if you don't see the back part of the skull you kind of know that there's something there that distorted the shadow so then you kind of can also see the shape of whatever it is that's there and there's a couple more here maybe a few more this one I have oh it's just the same one this one I turned on local lights. I had two projectors actually in this set and it's not very obvious but if you probably, I don't know if you can see it here if you're probably pulling closer you'll be able to see there's actually an overlap there. The problem with projectors the shadows for projectors is that they're only obvious if the background that it's falling on is also dark and I'll show that to you in a little bit. So you have to kind of also play with the how much light you put on it but as we go along you'll see more and more depth added to the picture the image. Oh there we go, there's a little bit more. There you see it a little bit more and in this one Hi everybody, I think Opal crashed out of Skype per second so hopefully we can get her back before we head to the end but I might suggest too while we're here that maybe if you guys have questions you can kind of pre-populate those into chat as well that way when she does get back in we'll have those waiting for her Hi Buffy, can you hear? Hello Buffy? Nope, I'm here I'm here Hi, okay, so I thought Opal was coming back but it doesn't look like it that we're going to be able to get her back. She crashed and you know how this goes sometimes we've got a lot of technology happening a lot of things going on and sometimes to me it's just amazing it works at all so what I'll do is I will make sure that I get all the questions and I'll pass them on to Opal and I'll have her get back to you hopefully before the conference ends or maybe I'll get her to post it on her website or however we'll get back to you on that anyways and I have two minutes I can talk about the suitcase for those of you who are interested because I didn't know anything. I came in here blind for OpenSim too, just kind of wandered around and the suitcase gets created the first time you go to another grid and and anything in the suitcase it looks like that's what gets copied over to the other grid so if you want a landmark it'll go in a landmark folder if you create it on a different sim, I don't think it's called sim or grid, you know I get those mixed up but anyways if you go to a different place how's that, just plain old place yeah so look for that suitcase folder the first time you grid hop and you know a good one to go to is a fleet grid if you go to the landing zones and look around there is a platform area with all the links to all the different grids you can hop to and it's lots of fun hopping around sometimes things don't make it but you know again it's new technology so we have a little bit of time for me to even do my little closing script here so bear with me I'll just say what I was going to say and we can wrap this up so I really want to thank Opal and I will when I see her for all those little tricks to make us better at being virtual photographers I can't wait to put them in practice and I hope everyone here learns something here today too next up in breakout zone 1 is Annabelle Fanshawe who will teach us how to make content with a minimum of stress with her session called using the build it once approach to making content for the metaverse I'm really looking forward to this one too I met Annabelle here I can't believe here when we were setting up and I can't believe I was offering her hair asking her has she ever grid hop before and stuff she's been doing it for years and years and years so I know it's going to make life a little easier for us down the line and as a reminder you can see what's coming up on the schedule at conference.opensimulator.org and there's lots of exciting things happening this afternoon going to the Air Force grid I'm looking forward to that too so and please do take a moment if you can to hop around to not hop don't hop because we're on the same grid here but teleport to the sponsor grids they've really put a lot of effort into making wonderful builds over there alright so thanks again and everyone have fun wherever you go next and I'll see you in a few minutes okay bye