Hi, my name is Michael Williams, I'm a native of Detroit, Michigan, and I'm a senior in the College of Elton, A. in the Honors Program in Afro-American and African Studies. And thanks to the Wallenberg Fellowship, I was able to embark on a trip to South Africa last summer in May of 2012 to do a program called the Pedagogy of Action where I believe I was able to embody the humanitarian spirit of Laurel Wallenberg through the lessons of empowerment. On the service level, it appears that I ventured on a study of broad trip with my department, the Department of Afro-American and African Studies, along with my professor, Dr. Nisha Anif. However, the pedagogy of action was far more than a typical study of broad trip. Really, we use HIV prevention and capacity building as a lens to engage in the work of empowerment, empowerment of self and empowerment of community. The program itself is designed, as I said, around an HIV education module that was developed by Dr. Nisha Anif. Dr. Anif started the program about 12 years ago, 2001, and started taking undergraduate, graduate students, even faculty members alike, to her home country of Jamaica. And eventually, she changed the program to venture to South Africa during the spring and summer. Using this HIV education module, we engaged in the work of HIV prevention and learned what it really meant to connect with everyday people and to engage in the work of sustainable practice. However, going to South Africa was part of the last leg of the trip. The program itself is three semesters, and it starts in the fall semester with a course in Women's Studies and African American Studies, and a course entitled the Pedagogy of Empowerment. We really learned about activism and race, gender, HIV and health, and we learned a lot of the foundational principles that would have been to prepare us for study abroad in the spring. We also first practiced the HIV oral methodology within our own communities. In the winter term, we took another course that prepared us for praxis and engagement in the field before going to South Africa. It was in this winter course that we mastered the module and we actively prepared to engage in the global community. A lot of the ideologies of this program are grounded in radical feminist and proletarian activism. A key text for our studies was Paulo Freire's The Pedagogy of Oppressed. And it's under this tutelage and this pedagogy that the program has been able to reach over 10,000 individuals in township community groups and schools in Jamaica and South Africa since 2001. The module we use, as I said, is a completely oral module. It's about a 15-minute presentation. And the point of it is that we can teach low-literate and typically low-income communities and we can reach out to people who do not have to read or write. And the module itself, since it does deal with HIV, still covers complex scientific processes. However, it does so in a very straightforward way that strays away from large, complex scientific terms and things that can typically confuse people. So it really engages in trying to get the audience and the learners to understand the material. Also the module discusses why certain strategies work rather than just telling the participants to use them. It's a newest way that it diverts from the slogan campaigns like the ABC campaign that simply tells constituents to abstain, use condoms, and to use birth control. A key part of the module also is that we have the learners teach the module back to the teacher immediately after it's been taught to them. Following that, they also translate into their home language. It's in both of these cases we're able to address and confront the hegemony of English. And it's also through this style of pedagogy we're able to engage in the work of empowerment and reduction of stigma. And we do this to encourage faithfulness to self, to community, and to the alleviation of the virus. The pedagogy of action is more than just teaching. We do have the opportunity to teach at several schools, community organizations, research institutions, as we taught in Johannesburg, Durbin, which is on the east of South Africa, as well as the rural, quiz-able, and metal region where the epidemic is at hardest in the country and arguably the world. However, outside of teaching, we engage with a lot of the everyday people of South Africa, whether they're artist activists or activists who help to bring down the right of apartheid, like Ahmed Khatrata, who's one of the premier and preeminent colored activists from that time. We also reflect it on our experiences daily through journals, journal writing, through essays, readings, dialogues, as well as meetings every single night to reflect on our experiences. To me, the really important part about pedagogy of action and the way it still continues to impact my life is the fact that going to South Africa is really only half of the experience. The other half is when we return home to the United States and how do we use the lessons we learn from there and apply it to our everyday lives? For me, this included lessons in humility and empowerment and a call to community engagement. It is from this experience of South Africa that I was able to shape my own focus around my own passion of urban planning and policy and community building Detroit to a focus on community engagement, connecting to everyday people, and really engaging and empowering others. The biggest lesson I learned from my trip was embodying the principle of that's a uniquely South African principle that simply states that I am who I am because we all are. Or in other words, my humanity is inextricably bound up and that of yours. And as an embodying the spirit of Ubuntu, I believe I'm also able to embody the humanitarian spirit of Raul Wallenberg. And again, this has been a very transformative, amazing experience that will always impact my life. I am very thankful to the Wallenberg committee.


All right, so we are, my name is Klaus, Elin Svedd, Latharion, Twitter, and DO. And my name is Dick Olsson, I'm at Dick Olsson on Twitter and on Dickson underscore on d.o. Developer at Algesera, down in Qatar, originally coming from Sweden and Node 1, so that's where I'm from. I am CHX in real life, Twitter and Drupal.org. We are going to talk about relationship module. Relationships were thrown at my side since 2005 when we tried to run a reverse bound for a module implementing a generic relationship API. But it didn't go anywhere until last year when at Drupal, San Francisco, bank founder and myself had a most fruitful denerman. We have figured out how could we build symmetric relations and everything else just follow it from that. That was pretty much the history and I am going to let the other guys speak because something marvelous happened as well. This is a counter project that actually has a lot of contributors. Usually counter projects are one-man mission. These excellent gentlemen are maintainers and we have more. We have five or six people actively contributing to relation. I see even more people have showed up. I am just going to say once again that there is overflow space out in the hall with screens and speakers. If you get tired of standing you can go out in the hall. I hope there is a seat left there. There are screens and audio. The relation module, if you want to be really harsh you could say that what we are going to present today is absolutely nothing new at all. But hopefully you will find some use for it as well. There is a traditional solution which many of you probably know about as the reference module. It consists of two submodules. You can relate things to nodes or users. The fundamental problem that is solved by this traditional solution is that they need to link from one object to another. And while this has served very well and is a good solution for that specific problem it is not quite enough for what we want to accomplish. So first of all you can't relate to any other entities than those two that are hard coded into the modules. Users and nodes and if you want to relate to comments to products from the commerce project or to taxonomy to a term or any other entity that is custom made for some purpose then you would have to copy the entire module and rewrite it to suit that purpose. Also it is strictly directional and binary. So you can only relate from one thing to another. Even though you can have multiple field values it is still always from A to B. You can never go back and you can never have a symmetric relationship between several different entities. The storage module is also somewhat limited. We will talk more about that later. It is also complicated to add additional information to the relationship if you want to emulate something like Facebook friends or something that you would need to have an extra text field on for example the user to describe the type of relationship and all the metadata would have to go on either of the source or the target which doesn't really make sense and would clutter the interface. So on the first problem the solution is that we have a more generalized framework so that you can relate to any entity at all. All of the previously mentioned comments and commerce products and all that and if you write a custom entity for a new reason that should work without any problems as well just fine. For the second problem where since you attach a field to the source you would have to have a similar field on the target if you wanted to relate backwards as well and the solution to this that we have is that we add an intermediate entity the relation module defines an entity called relation and then you relate everything to this relation entity instead of directly relating the entities to each other. We have for the storage module the storage model that's used by the references system becomes fairly limited again because it's a field so it's difficult to expand that and in theory do everything with the reference module that we can do with the relation module but since we approach the problem from two very different viewpoints the solution looks very different. So we have a completely different way of storing this data which is consistent no matter how the relation looks and as you can see it's also a very performance. The first example is the way that many of you probably have done this before. You have node A and you link to node B. This could be for example an article node linking to a some sort of kind of fact box it could be a blurb for an article linking to the article and this goes as the arrow shows just one way. Now if you have a binary relation the relationship is going to look like this instead. You have the relation entity at the top and then this relates in turn to both node A and node B and then afterwards you can set if you want this to be a directional relationship or if you want it to be symmetric. An example of a symmetric relationship would be a group of siblings where the relationship between three siblings isn't going in any particular direction they just have this relationship and they are all equals within it. Like we mentioned before the storage model for this is consistent so that if you want to link up more for example if you have three siblings or seven or even more of a completely different kind of object you can just link as many of them as you want into this relation. And then if you look at this one if we say that you have four nodes that you want to link together you need one relationship object and then you link all of them to it. If you would do a symmetric relation with the normal node reference that would look something like this and there is no less than 12 fields involved in connecting all of these if all of them are going to be symmetric so that it becomes a mess if you want to extend it beyond what it is currently doing. Yeah, it basically doesn't work. It becomes a complete mess. So what's really good about this storage model then we have no change in the API to support all these different storage models binary, nr, how many want, directional, biorelection, whatever you want. So no change in the API. It's a very consistent API. No change in the storage as I just mentioned and we can also have a very consistent UI for dealing with all these different sorts of relations. We'll talk a little bit more about the UI. We're going to have a demo here later. And the fourth problem that Letharian mentioned here is that the old way of doing references you can't have any additional information on the relation itself. And the solution for this is obviously now the relation is an entity so now we can have whatever fields we want on the relation itself. He mentioned a very, very good use case about Facebook friends. You can have the type of relationship, friend, family, etc. Another example could be you have user entity, you have a party entity and then you have a donation relation in between them. A field on that relation could be amount that you donate for instance. So it becomes a really nice and consistent way of doing things. And some additional niceties that just happened basically. This was not the intention to solve but that comes very natural with the whole thing is that integrates very well with D7. You couldn't really do this in D6 too. It just plays very nice with the entity model of doing things. So that's a good thing. We also have integration with Contrib. We have views integration and we also have good basic rules integration that I'm gonna show you. It's very, very API driven at this point which is the intention with this module for very heavy custom stuff. There's some UI too that I'm gonna show. Also another problem that I'm personally dealing with since I'm maintaining the deploy module is that it makes content staging much easier. Content staging is something that Dries mentioned in his keynote that is something that's gonna be emphasized in Drupal 8, a problem to solve. And why does it make the content staging much easier? Think about the scenario if you have the old reference model where you have two nodes and sometimes you want them to reference to each other. There are many cases you might want that. What that creates basically is a circular dependency because what we have to do when we stage content is that we first move all the dependencies. So all the references needs to be deployed first before the main node can be deployed. So here we have a very circular dependency. You can't move any of the nodes. Exposing an API could be tricky, etc. Here we have one relation entity in the middle. You can deploy all the nodes and then just deploy the relation entity after that. So it makes content staging much easier. And also it performs very well. The views performance, chicks can talk a little bit about that. So this is just more or less a footnote but some of the things of the storage model it looks fairly scary. The query views generates for this. But we have actually timed it. And despite the query looks pretty scary it's actually not a performance killer. The only cost difference between using references and relation that you need to deal with one more join. But it doesn't change the type of query you are dealing with. If you only join to have information on both endpoints it's gonna be equally performant. If you are filtering on both endpoints then it's again going to be equally performant which of course with SQL means that it is not going to perform at all. Because that's the fundamental problem, right? That if you join things together and filter both then you cannot really index those. I think this was all that I wanted to mention about views performance. We have nice views and rules demo. Yes, and I'm gonna do that here. Just need to arrange the mic a little bit. Yeah, I am very fast. I hope you got all of that. No, I just need to clone the screen instead of doing the presentation mode. Fis like I'm gonna have some play piano or something. Okay, so what I'm gonna demonstrate here is three different things. First I'm gonna show the interface of how to create different relation types. Basically how you create the different bundles. Similar to how you create different content types of nodes. So that's the first thing I'm gonna demonstrate here. Under structure we have relation types. Right now we have three different types of relations here. We have donation and a few test relation types here. We can start by adding a new relation type here. Let's say we call that enlarge, okay? Turn off the overlay margin. To use some more. Where do you have the scroll? There you go. Is that better? A little bit? Okay, so adding a new relation type here. First we just want a label of the relation type. Let us say that we wanna create a transaction. It could be a bank transaction or it could be anything. We have a machine name automatically created here. We can make it directional if we want to. And we have a reverse label here too. So we could say this could be a transaction to bank. And if it's directional, that's a transaction from user, for instance. We have a few different options here. Maybe you wanna describe in detail chicks very, very quick here. No, okay. These are not that important. Okay, okay. Here we can choose the artery of the relation. We're gonna keep it simple for now. But here we also have the source bundles. Basically what bundles can be the source bundle. And what bundles that will be the target bundles, okay. So in the transaction here we probably want user, for instance. To a donated. Yeah, I'm just gonna do a generic demonstration. And then we're gonna show the donation relation. So just to demonstrate here. We actually don't have a no type for, for instance bank here. That's right. So what you could do actually here because if you go down to the bundles. You can see a very interesting thing that the relation types are also listed as possibilities to relate to. You can create such things because relation is an entity in itself. You can actually relate to that relation. Which actually here is a good use case. Because if you have a user which donates to a party. Then that donation can be linked to a bank. Saying that this was a bank transaction. And that's best described by actually relating to the donation entity itself. So this is another nice thing of relation that you can exploit very nicely. That relation is just an entity as any other. Okay, so just to step back a little bit here. I'm just gonna demonstrate how the donation relation is set up here. Label as I covered, it's directional for this one. And the source bundle, the donation is coming from user. And we for simplicity just choose all node bundles. Probably you wanna choose the party bundle here actually. I'm not gonna change that at this point. So that's the very basic settings you have to set up. So you need to figure out what kinds of relations you have on a site. Usually you just have fields for this. But here you need to think a little bit more about what kinds or what types of relations you have. Okay. And to demonstrate the views integration here. I'm gonna show how we set up a few things first. So here we have a party node. Have a view here yet. Stack on. View. Ah, okay, it's under donations. So here we have a very basic demonstration of the views integration. We have admin has donated twice to two parties. The Drupalcom party and another Drupal party. As you see here. And you see here, the interesting thing here, we have amount. So the donation here, the relation itself has amount. And to see how that works. We go here relation types. And for the donation relation type here, we can manage fields. And as you see here now, we have a field on this one. Okay. And it's just a basic text integer field at this point. Works as any other integer field. So you're probably very familiar with this one here. The settings here. So that's the view. We can go in and look at the settings here. So there's one thing you need to take in mind here when you create views with these kind of relations to it. You need to add. Depends on your use case obviously. But here we have two relationships added to this view. One from as we see here. From the user to the node itself. And then from the user to the relation. So we have the fields too. So we can show the amount for the donation. So this one is very new. I only commented the user to relation a few days ago. And this one is probably going to change in the future. We are working together with the views maintainers. Figuring this one out. Because it's a tricky problem to solve actually. Because sometimes you just want to go from the user who donates to the party who have donated to. On the other hand, other times you want to stop on the relation entity meanwhile. So you actually want to add user to relation. And then relation to party. But the problem is going to be that if we do the latter. Then everybody will be forced to always the two relationships. That's how voting API works. It's not the end of the word after all. I am just a little bit reluctant to force everybody to always use the relationships. So this is still in a little bit of a flux. Ok, so that's basically it for the views relation integration here. Most of you here are probably very familiar with the views interface. And how you play around with the different relationships. So I'm not going to cover that in detail. But that's essentially what you need to do for now. To be able to extract the field information and such from a relation. So we're working on that as Chicks mentioned. Another thing I'm going to demonstrate here is the rules integration. I'm going to show you how to set that up. And we go into population. Ok, there you go. We have workflow rules here. So this is a little bit of a tricky one. So I'm assuming here now that you're familiar somewhat with how rules works. I'm not going to go in very detail on everything. So I hope you will follow me here. And unfortunately I don't have a practical use case. I'm going to demonstrate how to set up the configuration and such. Because that can be a little bit tricky. So we have a rule here. User donated something. I'm going to edit that. Use case here is now continuous being viewed. We're triggering on that. So as soon as someone looks at a party. That user automatically donates something. Which is a pretty neat thing, isn't it? Yeah. We could set up conditions here. Only party node. You probably want to do that. They are even donating even if they are looking on pages here. Even better. So the setup here. It's a little bit tricky. Here we have some debug code. We don't need to check on that. Ok. Anyway, so first thing we need to do. Is that we need to create our array of endpoints. Ok. So I'm talking a little bit in PHP or programming lingo here. But it will make sense here. So first thing we need to do is to add a variable. And basically you have an action. Can show you how to add action. And it's basically the first thing you have here. Add a variable. And the type of variable should be List of entity items. So that's the kind of variable you want to add first. So create the array basically. Add this one here. So this is how it looks. The array at this point is empty. Ok. The next step is to add an item to this array. So the first thing we do here. Is that we add the current user to that array. So the user that is logged in right now Is first added to that array of What will be the endpoints of this relation. The next thing you want to do Is to add another item to your list of endpoints. And in this case it's the node that we are viewing. And at this point you have two entities in your endpoints array. You could add different even more nodes here. You could take in nodes from different relations. You can play around here pretty much with the whole rules API. And I'm assuming that you're somewhat familiar with it at this point. So what we got now is that we have an array of endpoints. Basically two of them. I'm going to skip our debug here. And then we have an action called create a new entity. And this action here is provided by the entity API module. And so we're adding creating a generic entity Which happens to be a relation at this point. A relation type. A donated to. And it also picks up our field API field here. That we have for endpoints. Which is the list of entities that we have here. So what this configuration now does Is that it will save this relation With the provided endpoints that we have here. The use case I'm demonstrating here Is might not something that you do on a production site or anything. But that's the basic How you're approaching the rules configuration with it. And it's exactly the same if you would do it in code. Array of entities. You pass that into the same variable. We have a question in the back. And I think we can take that now. So to repeat the question is that Do I have to add the source of the relation As the first item in the array. Or the endpoint array. Yes that's true. That needs to be the first. When it's directional of course. Just then that's when it only makes sense. So that's true. So that's the basic rules integration. Claes is going to demonstrate The relation block that we have To create relations in a different way. So this is one way you can do programmatically And Claes is now going to demonstrate Another way of creating relations. Okej. She's going to answer that. I'm not surprised at that question Because this is probably The most popular issue in our issue queue. First the question is wrong. I didn't repeat the question which was Can you add the relation from the node that it forms. The answer is that This is being worked on. But this is more often than not Is the wrong way to think about things Because relations are not part Of the endpoint. They are separate entity. And so if you are creating it from the Endpoint entity creation screen Then that's probably the wrong approach. I know that this is As I say, very popular. So this is being worked on. There's actually a code that I could say works somewhat. It's not tested yet. I mean it doesn't have automated testing. It works enough. But there are several technological challenges In this. Namely in rule 7 The entity API Just not enough time to do everything. And for example There's not really a way To provide a generic autocomplete. There is just no way Because the way the entity API works There is absolutely no guarantee That the label of the entity Is going to be a column In any database So you cannot really Find an entity Based on a label In case for example Relations The relation entities Do not have any label defined For example User model For user What we do is We basically step outside of the entity API Because user module already provides a user Autocomplete But the user entity's label If you look into the user entity definition Is created by theme username So you cannot really Have a generic way There is just no generic API for that Basically It just wasn't It's just not done. So we are going to provide an autocomplete It is going to work for some entities Not going to work for every entity Because that's impossible to do It is going to cover about 80% of the cases And of course there is also the problem Where you want to create an entity With several endpoints We came up with a very different UI Which solves all these problems Which I am going to let a class to Demonstrate that one Maybe I will say a few words Before he demonstrates So basically what we do here Is that we realize that The entities that you want to relate to You probably have some way Of finding them already We do not care how But we presume that your site has a navigation Or just the admin knows how to get there And we are reusing this A class is going to show how All right so We have on the left side here A block Called the entity collector And if we look at the list here We will see Drupal party And Drupalcon party Which as was just mentioned We have them here I have navigated to in this case Just the front page which lists these two entities So I could now pick I will have to do this in the reverse order Actually if we are going to create a new relation We will go to user one Also an entity So I have here user admin And I will add that to donated to I add user first Because this is a directional relation So user will be the source Pick And then I have In my picked entities list here User admin Now if I Go back to the front page I still sort of carry around This picked object This entity from before I can add Say the Drupalcon party Now I have these two here And then I could if I wanted If I wanted to add further As many Endpoints as I wanted And then I click create relation And then I get a new relation So Nice I wonder if that's our rules integration Or if it's a other rules bug We'll have to look at that So here we are viewing the actual relation And here we have the amounts field Which we can add a value to Do you want to say anything else? As you have seen The relation entity edit screen Bring that back please The edit screen You cannot actually edit The relation itself This is something that we Debate heavily right now How do we continue with this But traditionally There is not really Any point Is editing an entity Anything relation Because if you need to edit it That is actually going to be A different relation At most what you want is delete the old one For example If two people are married They divorce and remarry That's definitely Not gonna be the same entity Right? Oh yeah, those one can The fields can be edited The fields absolutely can be That's a very valid point Yes That's a different thing It's the end points that you cannot edit Yes That's one of the problems that does Mistakes are hard to correct If you don't allow editing But allowing editing Gets really really tricky To be honest Because Due to the problem With entity selection It's untrivial basically What we could do UiWise Probably maybe Two things One That we after all Are going to have A field Edit widget on the Where you can create A relation after all So there we might Want to allow editing The other one that we could do Is that you pick an entity Go to the relation entity view screen And there you can say Replace this one With the one that you have picked The other thing that I was Considering Is to create relation types To add another flag To the relation type Which is editable The relation type itself Would be editable or not Because I believe That it's good to actually lock down Most of the cases You don't really want to edit Before we can take any more questions I just want to mention Some quick things here Chicks are already covered here We're looking into creating a widget for it For Doing relations We have even more view support coming So that's almost done Another project That we want to look into is also replacing Because in core We have all sorts of different Types of relations And everything Is implemented in its own way Everything works differently So have a very consistent relation Model in core would be Something that we probably want to have So we Are probably going to look into that Another thing that We've been thinking of is also Entity hierarchy Module Imagine having Hierarchists as entities And you can provide more information To that entity too Well, sorry But in here the entity hierarchy The problem is that In core, for example You have taxonomies Where the taxonomy terms Have their own way To provide hierarchy between entities You have comments doing it A different way, you have books doing it A shared way So there's no doubt that it would be great To come up with a consistent way To handle hierarchies But that's a different problem space And because relations create entities If somebody comes up Entity hierarchy module Which I'm not saying that it's not going to be us Then relation is going to slot Into that one really nicely But that's not a problem That relation wants or needs to Solve It's a really, really hard To solve issue On the other hand Relation was also something that seemed impossible For a very long time Until we came up with this A weird idea Of adding an intermediary entity So it is possible That we will be able to come up with something But I can tell you that Entity hierarchy in general Is extremely hard And if you Go with the textbook Ways It's not really doable With the databases that we work with And it's literally the textbook Vadim Tropasco has A chapter on Storing trees In a sequel In his book But neither of these are going to work With my sequel, the guy works for Oracle So you can guess what those solutions work with But there are no other solutions really So Questions about relation Not hierarchy questions I'm not taking hierarchy questions You were the first There's UI The storage could handle it So the question was Why you cannot edit relations It's UI And it's concept There is nothing in the storage model That would stop it The end points Are just a field on the relation entity So Field API Perfectly supports Updating fields And so That's absolutely possible I'm just I'm just reluctant to do it But I guess that people are going to come with me Because they have to provide a widget On the note of the screen To create a relation Which I was absolutely unwilling to do for a long time Yes Okay, so Vad Claes said is that Please take the story It's extremely important for future DROPA cons Whether if we were If we really stuck here Let us Ruin another DROPA con So please take the story You can already do this with rules by the way Don't even ask We So the question was What about permissions This is an extremely gnarla issue Because That's another thing That entities do not really solve At this moment And It's just Insanely hard You have A relation With Even just two endpoints What is the module Supposed to do If you do not have access to one of the endpoints Is this going to Immediately deny access To the relation I would suspect that's not what people want Because it is possible For example You could subscribe You could login And suddenly the other end point would become Visible so people probably want To be able to reach The relation and the screen And say you need to do this or that To be able to reach the other end point So that probably shouldn't deny Access to the relation On the other hand For other use cases it is definitely Possible that if one of the endpoints Are access denied Then you do need to deny access to the relation So that's one problem too Aside from concepts There is absolutely no entity access system There is no consistent entity access system At all Which would make this And they were very hard Dominant Dominant especially Is planning to fix some of this On friday at the code sprint Because this can be viewed As a security issue against Drupal 7 That you just don't have A consistent entity access way So the question is very real And what can I say Not much So you only have one array of endpoints Yeah repeat the question You want to ask if It was required to have two arrays Is that correct Why not two arrays Well we only have one The thing here is that we want symmetry It should be symmetric The relation should be symmetric So we only have one array of endpoints So that's the fundamental problem That we're trying to solve With the module The relation itself should be symmetric And if you If you had a different We want to avoid having a different way Of creating directional relationships We want it to be as consistent as possible So that's why we only want one array And then in the Special case of a directional one The first element is the source Okay Yes so the question was Do we plan to do anything Where you have a graph The answer is a very definite yes Common tolerance has a graph API module Has relation integration already Awesome so you can actually draw those graphs already And there is an open issue To provide an API for this So the question is most definitely yes Half of it already works So it's Yes very much yes Johan again No this one Is using As I said endpoints Are fields So whatever field storage engine Or if you want to use Be it MongoDB Elastic search PBS I don't care I'm storing endpoints as fields Exactly for the reason you have mentioned So that we can use any database That you want with this No more questions Okay So are the F exposure There is an open issue for that as well Patches are welcome You are most welcome Oh It seems that we ran out of time So thanks for attending Please fire in the survey


As families prepare to travel this holiday season, busy roads may impact your ability to drive safely this year. Wednesday we spoke with Chief District Engineer Mary Westfall Holbrook about some simple safety tips that you can take before hitting the road this Christmas. As we travel this holiday season, I would just like to encourage people to, of course, obey the speed limit, watch for signs of traffic patterns that may change. But most importantly, lay your phone down, don't text and drive. It's dangerous to even talk on the phone anymore and drive. But just be cautious of the other person and especially during the holiday season, don't drink and drive. That's just something that we shouldn't do and it's not safe. According to AAA, more than 109 million people will be traveling 50 or more miles to reach their holiday destinations. Holbrook advises those travelers to never drive all tired and to check their vehicles before heading out. Of course, you know, check the tires. Make sure you've got enough air in your tires and all your fluids are full and check your brakes and things like that, your lights. In 2012, Eastern Kentucky was devastated by tornadoes. Within days, people in Western Kentucky stepped up to help the people of our region. Pikeville Medical Center is a Christian organization committed to helping others and that includes our neighbors in Western Kentucky. Our commitment goes far beyond those who come to our hospital for treatment. That sentiment is echoed from all of us at Double Quick. The need is great right now in Western Kentucky and we know the people of Eastern Kentucky are ready and willing to help. During this season of giving, please consider donating to those who have found themselves with nothing just days before Christmas. In-person donations can be made to all Pikeville Medical Center facilities and the register at all Double Quick locations. To donate online, go to www.givetopmc.org. And although the weather this Christmas is expected to be warm, Holbrook advises us to be prepared when traveling in snow. Well, you know, during the holiday season, we're very fortunate with the weather we're having. You know, it's a little cold today, but you know, they're expecting the 60s on Christmas. But the next week, during the other holiday season of the new year, they are saying we could have some snow or maybe even some rain. So just be, when you're on the roads and you're during the winter season, just be cautious of icy spots and water on the road. Lastly, Holbrook says to make sure your phone is fully charged and to make sure that you have phone numbers for services such as AAA Ready in their time of need. Just Merry Christmas from District 12 and be safe out there. For Mountain Top News, I'm Joel Korjol.


So, sometimes when working in R we can encounter data that is structured as nested lists and in this presentation I will highlight some examples using the RRapply package to handle and manipulate such nested data structures in R. So as an example data set I will load a nested list that is included in the RRapply package which contains renewable energy shares as a percentage of the total energy consumption per country in 2016. So we can see that the countries are organized according to their geographical location and we also observe that certain regions or countries contain missing values. So as a first example we can try to replace these missing values by a value of zero and this can be done using the RRapply function which is a member of the apply family of functions in R and it allows us to recursively apply a function F to list elements while maintaining the structure of the nested list by specifying this how argument. So that's quite convenient. As another example let's say that we want to filter all countries that are located in Europe with the renewable energy share above 50% while still maintaining the structure of the list. So now we can no longer use the RRapply function and instead we have to write our own list recursion code. So this is an example of a recursive function and if we apply this recursive function to the input list then we can obtain the desired results. But as we can see from the code this can quickly become quite complex and if we have to figure out exactly what is going on in this code that can be quite a time consuming task. So the RRapply package provides a re-implemented version of the original RRapply function to make it more flexible and also more generally applicable to list recursion tasks in practice. So it builds on the native implementation of the original RRapply function and for this reason it also doesn't require any additional package dependencies. Going back to the previous example if we now use the new RRapply function then we see that the code becomes much more straightforward. So here we specify a condition function which lets us decide whether a given list element is evaluated or not and we structure the result by filtering only the list elements that have been evaluated so that are satisfying the condition function that we specified here. Here we also use this special argument which is one of a set of special arguments that can be used to access the properties of a given list element under evaluation. So for example the name or the position of an element inside the nested list and in particular this experience argument evaluates to a vector containing the ancestor names of a given list element in the nested list so that allows us to easily check whether a country is located in Europe or not. So the RRapply function can be quite efficient so to illustrate this with an example we unnest the nested list to a melted data frame using this how option and this is essentially the same as what can also be done with the melt function that is available through the reshape tool package. So if we compare the computation times of both functions applied to a large list object then we can see that with the new RRapply function we can actually achieve significant speed ups with respect to the existing melt function that is available in the reshape tool package. So for a more comprehensive overview of the RRapply function you can visit the package web page so some additional features include recursing through other types of tree structured objects such as expressions or call objects. We can also summarize or collapse sub lists of a nested list and there are a number of additional options to structure the returned results that are not shown here. So to conclude the package is available on CRAN as well.


I don't think we did a good enough job of starting fast, obviously being down 14-0. Obviously, everybody in this locker room knows no quit in this team. So we didn't lack any faith that we was going to come back and make it a ball game. But with a good team like that, when you're playing, it's hard to start 14 points behind and come back on one. With as much as you guys moved the ball in the first half, hard to believe you didn't have any points on the board at halftime? Yeah, we did a good job. It was kind of hit and miss. Either we had a 3 and out or we did a great job moving the ball. But we didn't do a good enough job. We finished and put in points on the boards. We turned the ball over too many times. And now that's going to come back and haunt you.


So here at Hardware Sugar, we're always saying that we want to get the rare and hard-to-find items, the kind of products that other shops might think, you know, we won't carry that because no one will buy it. And so we've gotten some pretty cool things, some really sort of uncommon products here, like the HTC Vive and the Secret Lab Gaming Chair. And to be honest, we've been quite surprised the items that we think nobody will want, either because they're too expensive or they're just kind of, you know, way out there, like the VR headset. A lot of people have shown interest and so we're really trying to double down on getting products that you can't find anywhere else or that, you know, they're uncommon or they're rare. Or if you can find them here, they're super expensive and we don't want that also. So anyway, in line with our product approach or product selection, we've gone ahead and we have stock of the NZXT H700 Customized Nuka Cola Case. And you can see it behind me, the lovely lady behind me is part of the customized case. And basically it's a stock H700 but they've added decorations and motifs that are common to the Fallout universe.  It is pretty cool that NZXT does this. They claim that they've only manufactured 2,000 of these cases. And so one of those 2,000 cases is behind me right now and available for sale at Hardware Sugar. And really it's, if you're interested in Fallout or if you're interested in Americana, you know, that kind of 1950s vibe, Cold War era type, which the Fallout series excels at. You'll be super interested in this case. The design is quite nice. It's like burnished on the, you know, it's like burnished paint on the metal. And the case does come with imperfections in the paint because, you know, it's supposed to be scruffed up a little bit in keeping with the design. And so the imperfections or, you know, the sort of simulated dings and scratches are part of the design. Just in case you buy the case and you come back to us saying that, you know, you want to refund because it's already damaged. That's part of the design. And you should know that going in. And, you know, we won't accept refund requests for that because the case is trying to mimic that kind of beat up, survive the nuclear holocaust kind of aesthetic and that kind of vibe. If you're a Fallout fan, you'll really feel like, oh yeah, you know, this is something that I could have encountered in the Wasteland.  We decided not to pull it out anymore. So I'm not really sure what the bubble head looks like by the case and find out that's a nice little bonus for the owner. Nuka Cola H700 case. NZXT does have a number of other customized cases. We're trying to get a hold of them. They do have a lightly modded or lightly customized H500, I believe, for Overwatch or with Overwatch team. The packaging for the Nuka Cola was actually quite impressive. It comes in a double box. It comes in the Nuka Cola designed cardboard box and then the, it comes also with an exterior box. So it's like a box within a box. So NZXT took a lot of care in packaging the case because they don't want any unnecessary scratches and dings to mark their artwork. And if you're a Fallout fan, I am one myself. I've played all of the main RPGs except for Fallout 2. My favorite was Fallout 3 where you're in DC because for me, the art direction was really great. It really felt like you were there in the subway and you know, the bummed out creators of the monument and things like that. So, but the Fallout series has always been good ever since Fallout 1. Whether you choose to join the Brotherhood of Steel or any of the other factions, it's always been a fun ride.


I'm Tony Vincent and I'd like to show you my technique for tracing and drawing my own illustrations, clip art, and avatars. I love using my own illustrations in my projects. It makes my work look original and can be attention-grabbing. Check out my posts on Instagram, username, learning in hand. I think the posts that really stand out are the ones where I've drawn the illustrations. There are a variety of apps for tablets that can import an image as a background layer, allowing you to draw on top. Explain everything, an Autodesk sketchbook are available for just about every kind of touchscreen device. While both of these apps are good, I happen to use Adobe Illustrator Draw on my iPad. I use an Apple Pencil for my stylus. A stylus is not necessary to draw on your tablet, but even a cheap stylus can make it easier to draw and trace. Let's trace a map. Drawing your own map is helpful because you can use your own color coding and labeling. Let me show you. I've found a map of the original 13 American colonies. I'm importing it as the background image layer in a new project. Notice that this image is not very high resolution. That's okay, because after tracing, I will have a much clearer image. So that I can see my own pen marks better, I like to make the photo layer somewhat transparent. Switching to the draw layer, I'm going to choose my pen and change the size. Then I'll zoom my canvas before tracing. I'll outline each colony in black. If I make a mistake, I click the undo button. I end up using this button a lot. Next, I want to color code the colonies according to their regions. To make the new England colonies blue, I select a color. In Adobe Draw, you can bucket fill an enclosed area by long pressing inside the area. Other drawing apps might have a dedicated button fill tool. Oops, my bucket fill spilled. That's because I did not fully enclose the shape. I'll need to use my pen to close up the hole and then try filling again. I change my color so I can fill the mid-Atlantic colonies. And again, I change the color and I bucket fill the southern colonies. The photo layer is no longer needed, so I click the eye icon to hide it. With the photo layer hidden, I can save my drawing. It gets more complicated when you want to draw objects and people. I like tracing from photos because, well, my freehand sketches don't end up looking how I want them to look. If I trace my illustrations, they are much more recognizable. You can bring in any image as the photo layer to trace. Now, I prefer to use photos that I've taken myself as the photo layer. Tracing someone else's source image might be copyright infringement, so if you intend to use images that aren't yours, it's best to stick with images you have permission to use, like public domain and Creative Commons images. Let's use the tracing technique to draw an object. Let's draw this microphone. I bring in a photo that I took of the microphone as the photo layer. I make the layer mostly transparent so I can see my lines better. Switching to the draw layer, I outline the microphone in black. Adobe Draw has shapes that I can use as stencils. I choose the line stencil, which gives me a straight edge. I can use two fingers to position the line right where I want it. I can draw a long edge to get a straight line. With my tracing done, I'm going to make the photo layer fully opaque again. I want to color the top of the microphone purple, just like in the photo. To get that exact shade of purple, I long press color and a chooser appears. I move the chooser to select the purple from the photo. That exact shade of purple is now my selected color. Other drawing apps might use some sort of eyedropper tool to select colors. I can choose a color for the handle of the microphone and then long press. The other parts of the microphone are different shades of that same color, so check this out. I can click color and then select picker. I adjust the slider to choose a lighter or darker shade. Then I can use this color for bucket filling. When my drawing is complete, I can save or copy it. I prefer to copy and then paste into apps like Keynote, Google Slides, or Book Creator. There, I can combine my illustration with text and other photos. In the map and microphone examples, we used just one drawing layer. Adobe Draw allows for multiple drawing layers. Now, if you're new to drawing apps, you might want to stick with just one drawing layer. It starts to get confusing when you add layers. When I draw people, I do like to use layers. For example, in this illustration, I've used several layers. With layers, I'm able to change colors, words, and pictures on the shirt. In this example, each person is on their own layer. This one places each object on its own layer. Here, I put myself on one layer and the parts of the computer on other layers. In this illustration, I took a photo of my daughter. Her hair, face, shirt, and iPad are all on different layers. But in this one with my son, all the drawing is on one layer. So layers are not necessary, but the more I draw, the more I see value in using them. Drawing people is challenging. With practice, I'm improving. Now, there are different ways to draw people and their avatars. One way is to outline in black and then fill with colors. Another is to outline and fill with shades of the same color. Or you could have no outlines at all. Instead, you use different colors and shapes. Having no outlines is the way I prefer drawing my avatars. Let me show you. After I get my photo layer in place, I draw the neck. I trace it and then fill with the same color so you don't see an outline. Then I choose a shade of that same color and I trace the head and fill. I like to put hair on its own layer, so I add a layer and trace and fill. Adding details to the hair can make it look more realistic. I make the draw layer partly transparent so I can see the photo layer below as a guide. Now I jump back to the head and neck layer. I make it partly transparent so I can see the photo below to trace facial features. I have to decide exactly how much detail to include as I draw. On a new layer, I draw my hand. I found that hands have to have outlines, otherwise they look like blobs. So I outline in one color and then fill with a similar color. I add another layer and trace and fill in my shirt. Finally, I hide the photo layer to see my finished illustration. I can always go back and make changes to any of the layers. I've built up quite the library of projects. I keep them all because I may be able to use them again, perhaps by duplicating it and changing something for a new project. I really like having my own library of customizable clip art. Keep this in mind. Your end drawing doesn't have to be exactly what you see in the source image. For example, in this cartoon, I really did not pull out my hair and I really don't have computer chips in my head. But I was able to trace my original photo and make changes. You've got to see how students at St. Stephen's Episcopal Day School in Florida have been using Adobe Draw in their projects. They've color coded their own maps, drawn cartoons for prepositions, made avatars, and have created illustrations for their projects. They are getting better and better with Adobe Draw. I continue to learn and improve when it comes to creating my own illustrations, clip art, and avatars. Practice and experimentation can help you discover your own sense of design. If you've got a growth mindset, you'll continue to learn, progress, and improve. See how I progress and improve by following me on Instagram. Also, follow me on Periscope. Sometimes I draw live. I have tons more tips to share. And I'd love to teach you in person. Contact me about speaking at your school or conference. Thanks for watching.


Well on the mats of Amidji wrestling team, they're young, even featuring a pair of seventh graders. But that doesn't stop their team goal of a section title. And with the move from double way up to triple this post season, the Jacks are ready for what lies ahead. Over a month into the season, Amidji wrestling head coach Rantz Barr has a lot of things he's liked so far from his team. They're good kids. They're good people. They're great to work with. They're coachable. They're hard workers. We have a lot of depth and a lot of balance talk to bottom, so we're excited about our opportunities. Especially seeing improvement just last week after a disappointing duel at Detroit Lakes, then just a few days later sweeping through the Grand Rapids Quadrangular. We made a big adjustment from our natural earlier that week. We didn't give up a lot of bonus points and we capitalized on their mistakes and got a lot of bonus points. And looking at this lineup top to bottom, one of the first things you'll notice, they're pretty young. We do have two seventh graders in the room this year. Dane Jorgensen and Seth Newby. Newby, of course, pinned his way through the Paul Bionton tournament, which is a very, very difficult tournament. We're very excited for him. He's having a great year. We have a lot of freshmen. I think we have 15 or 16 freshmen in the room. A lot of young kids, but very knowledgeable about wrestling. And they'll need this depth as they bump up to class triple A with one team in particular that they're looking out for in their section. Section finals will probably have Wilmer. They're tough, but we should be able to pull it out. And therefore, state-placed winners on their team, three returning state finalists. So they're obviously going to score some points against every team that they wrestle. So even with the bump up and a lineup featuring some young faces, this team's goal still remains the same. We have our eyes set on a section title and doing some damage once we get down at the state tournament. As a team, yeah. And we have a good chance of sending quite a few innovators to the state tournament as well. They are back in action on the road Friday at Foley, competing in that tournament. If you've enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland Public Television.


Continue. Isn't having a new boyfriend or girlfriend so exciting? There are butterflies and flirty texts, brushes on the arm that make you light up and long conversations over the phone. The beginning of a new relationship can feel so heady and come with a head rush of emotions and thoughts. But how can you be sure that your new bae is ready for a romantic relationship? How do you find out if you're both on the same page? To help you gain more clarity in your situation, here are five signs that someone isn't ready. Number one, they're going out with a lot of different people. Have you ever been in a situation where you're getting to know someone and are starting to develop feelings only to find out that they're going on multiple dates with other people? It can be jarring and disheartening to find out the person you like is seeing other people. According to globalnews.com, this is a common scenario due to the popularity of dating apps. Apps like Tinder, Bumble, Hinge and Countlessmore have vastly widened the pool for potential partners. Online dating expert, Julie Spira, while advocating for casting a wider net, also explained the darker side to casting such a wide net. She says that if someone continues to play the field and doesn't take a digital leap of faith with one person, they may end up on a merry-go-round and end up in a series of one-and-done dates or dates that don't go past a few weeks. If this is happening to you and you're not currently seeing anyone else, Elite Daily notes that having a straightforward conversation about where the two of you are could be helpful in establishing what the dynamic will be moving forward in a committed relationship. Number two, they bring up their ex often. Have you ever wondered why your new partner keeps bringing up their ex? Have you been stuck thinking that it could mean something deeper? Maybe they mention their ex out of nowhere or reach out to their ex on their birthday or still keep in touch with their ex's family. If you're entering into a relationship with someone who is emotionally unavailable because they have unresolved feelings for someone else, this could lead to a big hurdle in trying to properly connect with them. If they strictly engage in polite conversation with you and don't talk to you about anything deeper or more meaningful, and it feels like they push you away when you get too close to an emotional boundary, then this is a sure sign that they aren't ready for a real relationship with you. Number three, they don't know what they want. Have you ever expressed exactly what you need from someone only to be met with an, I don't know, from the other person? It's hard for someone to be all in and ready for a relationship with you if he, she, or they is unsure of what they want. It puts you in an unstable kind of situation with little support. Wishy-washiness and a shaky sense of commitment is never a good sign when it comes to establishing a relationship. Number four, they're flaky. Does your partner text you last minute and bail on plans or dates all the time? Or if they do happen to show up, are they chronically late to every gathering? This is a major problem when your partner has an inability to follow through on plans or arrive on time. This type of behavior shows a lack of commitment and a skewed sense of priorities. If they can't or refuse to make time for you, then you simply aren't important enough for them as they'll always have better places to be and friends to hang out with. And number five, there's a lack of progression in the relationship. Does it feel like your relationship is at a standstill? Has there been too much distance between dates? Has it felt like there have been any steps taken forward in the relationship at all? When you're suffering a lack of progression in your relationship, there might never be a mention of a future together or there's no immediate plans being made or you're struggling to feel emotionally fulfilled. According to lifestyle.com, the progression of a relationship typically occurs in five stages. Attraction and romance, reality sets in, disappointment, the stage in which conflicts get resolved and there's growth in a healthy partnership and finally stability and commitment. If it feels like this dynamic is in limbo and isn't headed towards the next stage, it could very well mean your partner simply isn't ready to take the plunge and be in a relationship. Did you relate to any of the signs mentioned? If you're unsure of your relationship status and feel like you're holding onto a shaky sense of commitment from your partner, then it's time to give things a hard look and choose to fix the issues or move on. You'll figure out what's best for you. What other signs can you think of that someone isn't ready for a relationship? Share your thoughts with us in the comments below. Please like and share this video if it helped you and you think it could help someone else too. The studies and references used are listed in the description below. Don't forget to hit the subscribe button for more Psych2Go videos and thank you for watching. We'll see you next time.


Hello everybody, this is Esides-D with The Esides Show, and today's question will be, What SCP are you assigned to? These will be a series of questions I ask periodically, and have the viewership also add in their two cents and so forth. So basically, let's begin. What SCP are you assigned to? The best way to accomplish this is by going to the SCP Foundation website, to which I will put a link on the description and probably end the video, so you can go there. Once you're on the site, you're going to go to the site location on the left side. Underneath that, you're going to see something called Random SCP. Click on that. The first actual SCP you come across will be the one you're assigned to. Joke SCPs and such like that do not count, it has to be actual numerical SCPs. Since I'm making the questions here, I might as well play along. So let's find out what SCP I myself am assigned to. Well, I got some shitty luck. I got SCP-058, the Heart of Darkness, Object Class Keter, and so forth. I actually read about this in an earlier installment of my SCP readings, I'll put a link up here so you can actually read about it. Well, what SCP did you all get assigned to?


All right, I got under pf sense video for you guys I've had a few people ask me saying can you do a video on? Specifically the port forwarding and actually this is a common question. I do it all the time So it's I run through it kind of quick and I think I went through it kind of quick and some of the other ones now Not just port forwarding it. I'll show you port forwarding and This is a my lab that I've got set up here And I've got it set up with two wands failover and two separate networks now It gets a little bit confusing when you're doing that because people think when you make the net rule for something to pass through That it just carries over but it doesn't net rules have to be implicitly bound to each one so we're gonna run through and pretend just doing port 80 basic web server and We'll show you how to map the portrait or we've got no rules no visibility into my network And we're gonna open up the firewall and we're gonna use my computer Now if you didn't notice we jump back real here to the beginning is This is a 192 168 111 network We have a 192 168 2 network and a 192 168 3 network So we've got you know three different networks my particular computers IP address is 192 dot 168 dot 1 dot 9 So we'll go over here to firewall and we're gonna start with that Then we're gonna add a rule Now when you're building that rules it by default will land on the WAN interface You can't have them land on the land interface You can't have them do on I just called it WAN 2, but you could have called it whatever Sometimes for some clients when we're setting up a WAN failover we'll rename them one will call one ISP And we'll call the other one the other ISP for example Comcast could be one I one of the WAN interfaces and the other one can be called AT&T helps us identify them when we're looking at Them because you may not remember by the IP address. Well, anyways because this is my lab We just call them WAN 1 and WAN 2 keep it simple. So first we know what interface to snap rule is applying to Then we know is it a TCP UDP or TCP UDP port We're just gonna leave a TCP because we're doing our pretend web server now I can pull from the list and put WWW But I just I know the port so I type them in port 80 now the target IP is the IP We want to land on landing on this computers. We're setting up our pretend web server on this. So a Target IP is you know, whatever the web server is internally The external IP is the WAN address now. There are some advanced options where you can get in there You can filter for certain IP addresses by default. We're gonna leave this wide open let anything come here But you can specify for example The incoming traffic that only this port is only visible by this one other computer And you do that sometimes if you have two different sites set up and just one more Procautionary step you want I'm filtering all traffic unless it comes from that IP of course some IPs can be spoof But it's one more little layer you can add on there. Now you can type in any custom port range But the other thing here the reason there's a to and from on here But on the other side only one port is because whatever you set the beginning if I set this one to be 100 I still leave this one at 80 because what it's doing is Port 80 is here. So this is the beginning port. So I don't have to like do dash 100 or anything It will automatically forward all the next ports. Now if I started that this one at 100 It would actually forward from 100 to 120 all those ports in there because there's a 20 port range So that's why you don't need that because if I people ask, okay, you know How does that work if I want to have a range of ports forwarded? So we're just gonna leave them 80 80 And this was our WAN WWW server Now net reflection use system default if you're not familiar with what net reflection is This is a really handy thing. I've showed you in some of the other pf sense videos yet by default turn this on and Also add associated filter rule both of those leave at the fault when that Reflection doesn't there's not much of a reason to turn this off for example Let's say you have a DVR and you have an external IP address or maybe a URL set up for that DVR so you can do severe cameras But when you're on your internal network, you're trying to view that DVR, but it's local to you That's what net reflection does it says wait a minute You're inside this network, but you're trying to get to it from the outside But we we understand that so we're gonna reflect it back inward without actually going out But that way you can leave one URL you can leave the public IP in your settings While still having network so that's what the net reflection is so leaving all that on is fine You can also create the rules disabled if you need to Then you can end do them later You can also do some inverted options and things like that So it kind of depends if you want to do all those kind of really detailed filtering on this And of course the added for those associated filter rule is first you have to have a NAT Translation which says this external IP lands this to this internal IP But then there has to be an associated firewall rule to actually allow the passing of traffic and it does that by default So there's that one on the WAN address now. We're gonna add another one essentially the same thing again here But we're choosing WAN to that's our failover one So this is our WAN to WWW All the same rules apply and this is how you map if you have a failover address now How that works in practice is a little bit different because we're gonna apply the changes here You're not making your web server redundant per se because what you've done is you have two separate networks because This is WAN to network and this is WAN one network So you have to only point them at one of them and you have to make if one of these goes down Which you still want people to get to your web server You still need to Re-change a DNS setting to point it to the other side now where there's redundancy and this works as we've helped people with mail servers behind there So if you have a mail server you can add to your MX records a lower priority MX So you will pick one to be the primary one to be the secondary But this is all you have to do to map this across there is Add one mapping for each one so interface when one WAN to and when we look at the rules for the firewall You can see net WW server for the WAN and then the WAN to yet another one on here now Let's actually show you this working and run a little test here All right, so we're gonna run net cat dash L. We're gonna listen on port 80 over here now this particular computer called the box actually has its Two network cards and with two network cards it can go to each one of those IP address It has a network card that's in each of these networks It's all part of my lab setup So the first IP address we'll go to is the one here. So we'll Tell not 2.33 port 80 And we see over here. We see hello and it hello comes across. So we're able to port through on that one So we'll close that and we'll open up this again Listen on port 80 and now we're going to do the other IP address and it's in the three network three dot two five one 80 Hi from WAN one So you can see this works. It's really simple to do But some people do get confused I think you can only make one net rule and because these are together now because they have separate IP addresses There's not a way just to make one net rule and have them just work together I actually think there's a way in pfSense. You may be able to alias them together as one But reality is you want to map the rules and you also have to think do you need to wrap the rules? When we set these up for some clients other than having an internal mail server and MX records for fail over Having the web server because you have to go in and make a DNS change And have a secondary DNS for them to flow through on there It may not be the most practical setup for you because it doesn't really work in the way some people think Oh, if I have two ISPs, it just doubles my bandwidth No, because you circuits need a single IP address to go through so it doesn't double your bandwidth This is more for failover purposes I mean there are routing things you can do where you can push some over other traffic and create rules to create You know where this data goes over this circuit and that data is this or that's a different topic And it can help your speed But this is just to show you really quickly how to do that and If you happen to have more than one WAN address for every WAN address you have now Even if those are a group of IPs assigned to you for example We buy a block of IP of five IPs. It's the same thing you have to create a rule for each IP address and a Nat rule for them so they have so it flows through so that's just a quick overview of how that works Hopefully it answers anybody who had questions on this if you have some comments or questions or need another tutorial on this Leave some comments below and I'll work on that one. Thanks. Oh, if you like the content here like and subscribe


And I've been saying this all along for many years. Most people will go to their graves pretending to be what society expects them to be, never knowing who they truly are. You know, ask yourself, if there was no such thing as money, what would I be doing with my life? And that ultimately will probably lead you to exactly why you're here and what your purpose is.


China supplied Ukraine with tens of thousands of drones to strike Russia. Iran has sold Russia thousands of drones to bomb Ukrainian cities and another 6,000 drones are to be produced in the alabuga special economic zone under an Iranian license. Meanwhile, Ukraine buys drones in much larger quantities to shell the enemy's frontline positions from another partner of Russia, China. Ukraine has found ways to get tens of thousands of drones as well as to establish a flow of spare parts for them From China reports the Wall Street Journal. Purchases of finished products primarily from SZ DJI technology are carried out in stores and from suppliers. In addition, Chinese components are used in drones of their own production which is growing rapidly. According to Georgi Chakaya, the defense advisor to the Ukrainian Ministry of Digital Transformation, over the past year and a half the number of drone manufacturers in the country has grown from 7 to almost 300. Hundreds of thousands of simple cheap devices that can carry explosives are produced in an artisanal and industrial way. Every month the armed forces of Ukraine use about 10,000 drones on the battlefield. DJI told the Wall Street Journal that it tries to limit the use of its products for military purposes but cannot control their use after purchase. The US ban on the use of DJI drones from the military as well as Chinese components in the production of their own drones was one of the reasons why US-made drones are too expensive. Although the US tried to supply Ukraine, many American commercial drones cost tens of thousands of dollars more than Chinese models. In Ukraine, we would like to test and use more American drones but we are still looking for more cost effective solutions. Deputy Minister of Digital Transformation of Ukraine Georgi Dubinsky told. In addition, every drone software update requires Pentagon approval. However, the situation on the battlefield is changing so quickly that programmers and engineers have to constantly make adjustments to their models. What flies today can't fly tomorrow, Dubinsky says. We need to adapt quickly to emerging technologies. The innovation cycle in this war is very short. At least one person was seriously injured on Wednesday in an explosion followed by a fire at a plant in the port city of Seat in south of France. Some 200 people were evacuated after the explosion. Authorities are conducting tests for eventual toxicity in the surrounding air and soil. The explosion occurred in a warehouse used for producing fuel from grains. The factory was not in operation when the explosion occurred, the prefecture for the surrounding Heraldt region said. The fire was brought under control at 1610 GMT, Saipol Company that owns the factory said in a statement. Dozens of fire engines have been brought to the scene of the incident. Saipol, part of oilseed group Avril, is France's largest biodiesel producer.