NICOLE: Okay. The doors are slowly closing, so we’re going to go ahead and get started.
So thanks, everyone for coming. This session is called towards better metaphors, an accessible and inclusive way to explain the technical work that we dove, my name is Nicole Zhu, I’m an engineer on the publishing team at Vox Media. And just by a show of hand, how many of you are developers or do technical work?
Okay. How many of you are journalists, editors, or, like, cross team sort of collaborates?
Okay. Nice. How many of you guys work with, like, your readers, community managers, and support teams and stuff like that?
Cool. Awesome. Great. Good mix.
So before we get started, just some ground rules, this session is being transcribed, so please clap for our amazing transcriber. And just a note if you want to be off the record, just say so, just say off the record, and when you want to come back on the record, say on the record.
This is also a safe space and, also, everyone here has something to contribute. And whether you’re technical, we’re valuing your feedback in this session a lot. So don’t be afraid to speak up and participate and ask questions and stuff like that.
So the reason why I sort of chose the session was because I was inspired by this article in the Thursday Bram in the recompiler, and it was bad metaphors, and it was about why it’s bad to have bad metaphors in programming and the positive aspect of our experiences and why we’re inclusive of all the people in the industry. I think as we all know, metaphors are really beneficial in terms of learning just because metaphors let us connect new material to concepts, situations, and stuff that we already understand.
But there’s also another dimension that I read in this article that was really important to me was that metaphors reflect our culture and our experiences. So the things that we use to describe a concept, a term are – don’t kind of come out of nowhere. They come from us, our people, and our experiences and our backgrounds. So making sure that we are inclusive and accessible in what we use to teach programming concepts is really important because obviously, like, learning programming, concepts, or terms are difficult enough. And so if you make that harder by trying to connect material that someone has to understand, that’s just an extra step that isn’t always super helpful.
And so she sort of has a call to action in this that I took as inspiration for this session, which is that we need a lot more metaphors sprouting from a much wider variety. If you love sewing, rap, all of those things, any sorts of things that you do outside of your day to day job, we want to see what those – what you kind of metaphors you can come up with those.
So things we won’t be doing this session. Please don’t do stuff like this. Come up with metaphors, like, it’s so easy, your mom can understand it. Because your mom is amazing. An example of inclusive metaphors. And examples of what you should do. This is a poll request, and this was to replace terminology that was commonly used in a communication for hardware devices and stuff that is clearly very racially charged and offensive. And so this one person just took that term out and just replaced it with leader and follower. You should not read the comments on this PR, though. It is horrendous.
But the intention and sort of what we’re aiming to do with this session is somewhere along these lines. Is to rethink and reexamine terms and language that we use that might not be inclusive that, again, reflect certain experiences or historical notions that might be outdated and how can we keep those up to date?
So session goals just what we hope to kind of get out of this session today. One, a better awareness of how our experiences, again, influence the metaphors we use to teach new material. The ways in which these metaphors can kind of influence our industry and our culture. Both positively and negatively. Obviously, on a more tangible level how to think of inclusive metaphors on how to help facilitate across teams and, again, the interdisciplinary nature of our industry.
And then brainstorming cure rate a list of useful teaching metaphors that you can take back and share with your newsrooms, teams, Internet, wherever you want. And please add – and please add to those after the session is over.
So before we get started on some of the group thinking exercises, what makes a good metaphor? So I came up with a little bit of a rubric.
So first is it complete? Does the metaphor explain the most important parts of the concept that you’re I’m trying to describe? How does the metaphor hold up if you extend the concept in even more technical ways? So if I was saying that, you know, the term was API, and I was saying, like, it’s a window into the code because you can expose internal functions that can be used by, like, other programs. But then if I was trying to explain authentication with the window metaphor, it’s not super complete because only certain arms can reach through the window. Like, it really doesn’t make sense.
Memorable is the metaphor. Is it easy to remember? Is it creative? Is it inclusive? Does it include people with different identities, whether that’s gender, race, sexuality, their backgrounds and other people’s experiences.
And also, is it accessible when people from different backgrounds and experiences from your own understand the metaphor and its explanation? So, again, is it going to be too complicated to explain, like, a – how racing works before you get to the concept you’re trying to describe.
And so what I want us to do.  I’ll go ahead and pass these out in just a second. But we’re going to take – first, five minutes to just individually do a brainstorm of some common topics, concepts, and processes that you all would think would benefit on common metaphorical.
What are things that you heard a lot but you don’t know what that is or what are things that you have trouble explaining to other people? And really, this is just to get us into a way to identify common terms and processes and stuff that we can then turn into better metaphors.
So I’m going to go ahead and hand these out.
There are more here if you need it.
Just take the first five minutes individually to come up with, again, things that you think might be good candidates for metaphors. And your time starts now.
Okay. That’s time for the individual brainstorm. And now – cool.  We’re going to now share those and group them a little bit. So we’re just going to do a hand raising thing here, and we’ll take ten minutes to do this exercise. So try and, like, prioritize the ones that you think are really, like, the best candidates for metaphors. And we’ll just kind of go around the room, and I’ll write them on this board over here.
So who would like to go first.
Microservices.
NICOLE: Microservices. What else? You in front.
Node.
NICOLE: Node.
Caching.
NICOLE: I like all of these agreements.
HTTP.
Can you add slash S to that?
NICOLE: Slash S.
I was going to – VPNs.
NICOLE: VPNs.
Metadata.
NICOLE: Metadata.
Structure data. More specifically JSON.
NICOLE: Structure data slash JSON.
Regular expressions. Nicole regular expressions. In the back.
Basically just troubleshooting. The process of finding and fixing bugs.
NICOLE: Totally.
As it relates to a noncoder – Nicole I’m going to put down troubleshooting and debugging. Does that work?
Okay. In the back.
The DOM.
NICOLE: The DOM. Yes.
Front-end versus back-end development. Any others?
Virtual environments.
NICOLE: Virtual environments. You in the back.
The difference between deploying to production versus pushing to version control.
NICOLE: Oh, great. So deploying to production and versus version control.
Yeah.
Version control has itself.
NICOLE: Let’s break that out to its own.
No. No. I think his point of deploying versus committing is important. But separately.
NICOLE: Deploy versus commit. Good point.
Mapping projections.
NICOLE: Mapping projections.
Oh.
NICOLE: I don’t know what that is. So please explain.
Asyity.
NICOLE: On synchronousity.
Tests.
NICOLE: Tests. Should we throw linting up there too?
This table agreed that GitHub should be up there.
NICOLE: GitHub. Yes. I’m going to put that close to version control.
The difference between a user and a user’s account.
NICOLE: The difference between a user and a user’s account.
Any others?
Encryption, PGP.
NICOLE: Encryption PGP. That’s one I’ve been afraid to ask because I don’t know about it.
Databases and MySQL in particular.
NICOLE: Databases and MySQL.
Open source.
NICOLE: Open source. Great.
Search engine indexing.
NICOLE: So, like, SEO?
IOT.
NICOLE: IOT.
Anyone else in the back?
Accessibility.
NICOLE: Accessibility.
Unicode.
NICOLE: Unicode.
Separately correlation and causation.
NICOLE: Correlation and causation.
Concurrency.
NICOLE: Concurrency.
Servers.
NICOLE: Servers. Yes.
This might seem really simple compared to all of this. But directories.
NICOLE: Directories. There’s nothing too simple that we’re going to put up here.
Any others?
Agile.
NICOLE: Agile. Yes.
The deep Web.
NICOLE: Yes, the deep Web.
Is the deep Web and the dark Web the same?
No.
NICOLE: Let’s find out.
[Laughter]
Maintaining code.
NICOLE: Maintaining code.
Any others that aren’t – or if people want to do plus ones to any of these that they think are especially important. API is not up here. Okay.
Is the cloud up there? I don’t want to talk about it but –
[Laughter]
NICOLE: Let’s just throw them up here. We don’t have to turn them into a metaphor. But the cloud.
Machine learning.
NICOLE: Machine learning. Yep?
How about just cat data.
NICOLE: Just data.
I’m going to put that with all the other data stuff too.
Scraping.
NICOLE: Scraping. Yes. Great. Any –
Cryptocurrency.
NICOLE: Cryptocurrency.
Any others?
Front-end versus back-end?
NICOLE: Yes, we have that up here. We can throw one in as FullStack.
Plus one.
NICOLE: Cool. Any others?
Great. Cool. So we have this giant list of stuff up here. So let’s take the next five to ten minutes and this might go chaotically. But try and group yourselves based on the terms that you either want to explain to someone, or you want explained to you. We really want to get kind of, like, a mix of teams, so that way you can, like, beta test your metaphor on other people. I’m trying to think of the best way to do this.
Can you give us three terms, and then we can go to one of the terms?
Or, like, six.
Or six. Yeah.
Any number.
NICOLE: We have about I think 30 people in the room, so give me two minutes to do some very quick math, and I will come up with a – I will divide these into terms and group you all into terms. Cool. Great.
Okay. Great. I have roughly – I did a very poor job of dividing these up visually based on groups. So we’re going to break – so we have about 30 of us. If you can break into six groups of five and try to pair yourselves with people that you don’t know, and I’m going to assign numbers to these sections, quadrants. That’s not a quadrant. Math is wrong.
So let’s – so this will be table one, this will be table two, three, four, five, and then six over there. And so try and – you can come up and look at the terms here and kind of gravitate towards the tables that you think you’re most interested in. And if the table’s full, then try and go to another table. I’ll write numbers on the tables, so you guys can easily find it.
So take a look at the board and just choose the quadrant that you’re most interested in learning or explaining. And I put numbers on the tables one through six, so try to divide yourselves into groups of five.
Maybe there are not enough tables. So join whoever. Sorry about that.
Okay. So now that you guys have your teams, we’re going to dive into the next activity.
You don’t need to go to this link if you don’t want to, but this is where we will eventually collect all of the metaphors in the end. So you can either feel free – it’s a Google dog, so you can feel free to jump into that now or be jotting down notes, or you can be discussing, and we can get that done later.
So this next step, we’re going to take 20 to 25 minutes and come up with your actual metaphors. So kind of remember that rubric and come up with two to three sentences of – describe the metaphor and how it describes the concept, the term process or, like, the key points that you really want to explain. Test it out on each other. It’s always a really great way to sort of stress test that metaphor. And if time allows, and you have your computers, repeat that brainstorm with a GIF. Sorry. Don’t murder me.
As you can see, the CSS one that I always relate to any time I tries to center a DIV in another DIV.
Flex box is amazing.
So let’s go ahead and do that. And if you need to come up to the board and – if you need to come up to the board and get the words that you’re describing or if ones that are a little too – they find challeng just take a stab at it or if you want to try one from another group, feel free. We’re going to take 20 to 25 minutes on this activity. Starting now.
[Group discussion]
About five minutes left. Five minutes.
Okay. All right. Sounds like you guys had a lot to discuss.
I wanted to be sure you had enough time to share all of the things you guys were talking about. Please feel free after to talk with each other.
But let’s regroup and share the metaphors you all came up with, and let’s kind of use this rubric that I mentioned earlier to evaluate all of our metaphors. Ours won’t be that strict because 20 minutes for six terms is difficult, so we can also assess, do we understand it? Does it make sense, and we can work from there.
So let’s go. We have the remainder of the time to discuss. This document, feel free to drop anything in there that we talked about. There’s also a link to the slides and the ether pad and whatnot.
So let’s go from table to table one at a time just sharing one metaphor at a time that you all came up with, and then we’ll just go in a circle until time is up. So which time would like to go first? We’ll go clockwise afterwards.
We can go.
NICOLE: Great.
Did anyone else do version control?
Okay. We ran out of ours and started picking off other ones.
Yeah, so our simple metaphor for version control is it’s, like, wallpapering a room in your hou so you start with a blank wall, you put on a sheet of wallpaper, say that looks pretty good, but I want to add some more wallpaper and crown molding, and you say, no, that looks bad and tear that off, and you keep a record of every layer of wallpaper you added, thus allowing anyone else to instantly duplicate all of your layers of wallpaper, or you can revert to several layers back.
NICOLE: We’ll go to this table now. Who would like to share one of the metaphors you came up with?
Okay. I can. Sorry.
We had virtual environment, and we said that was, like, an apartment building because there’s many rooms all with locks, but they’re all under the same one building.
Yeah. We had Async programming, this is a different way to order food. So one could be that you order your food, and then you get your food before the next person gets to order, and that’s synchronous. And then with Async, you order your food, and then you get a ticket saying you’re going to get your food later.
So we did caching –
Two different.
Oh, yeah. Do you want to do yours first?
Sure. So we came up with two different ways of thinking about caching. One in a kind of positive view is this idea that, like, it’s kind of like the way you think and an example used is music. You may think about a band, you may know a lot about it, you have information. Somebody asks you about that band, you’re able to tell them about it because you know them. But maybe something changes, like, a band member leaves, and you don’t know about that, so you look up new information and refresh your knowledge before you can go back and keep talking about your favorite band.
I can share the negative example of what I understood of caching before I realized positive examp
This is not my metaphor. I read it in a book, and it’s more related to, like, hardware caching in a computer, so computers have different levels of caching. And the deeper the level, the harder it is to get the information. So the metaphor is it’s like your food pantry and how you organize it. The food that you want to eat most often is in the front of the food pa and the farther back the food is in the pantry, it’s, like, the less accessible food. And then if food expires, you throw it out so that you don’t have expired food.
Nice. Love it.
So we had metadata. It’s like maneuvers packing instructions.
[Laughter]
So we had open source, and it’s a garden where people can take clippings and take which way they want. Or just take the fruits. But some people, like, must stay and maintain the garden so the person who started the repo.
NICOLE: That’s so beautiful.
We had front-end, back-end, and this one really jumped out as being easy for us. The restaurant front of the house and back of the house where the food is the data. And we said that FullStack development is like Benihanas.
What’s Benihanas?
NICOLE: Benihanas is where they cook on a hot table in front of you. The table is the stove.
Deploying versus pushing with. So we looked at printing paper and publishing through the newsstand.
Good job. People like that.
We talked about microservices versus nonmicroservices-based app. So a monolithic is like an artisan who makes you a table, he buys wood and carves it and, you know, – puts it together. But if this artisan has a six-day, there’s nothing they can do, if they make a bad table, you have to fix a lot more than, you know, just the table. Whereas microservices are, like, an assembly line in a car factory. The people who do the wheels don’t really have to know about anything but putting wheels on, and they pass, you know, a thing that has a wheel on it to the next person who doesn’t have to worry about anything that came before that, and they attach things. And if the people who do the engines have a fight with the people who do the cool whip system, you can kind of take them aside without ruining the rest of the app as it’s running and kind of deal with that problem and put them back in. People can have sick days. But at the end, you get the same result. You get a full
thing.
This is like microservices because all the wheels are working together in harmony. As opposed to bike with one wheel where if you fall down, you’re kind of –
We took VPN, which is a book with a fake cover that you’re reading on the subway.
So we had maintain code and troubleshooting and debugging.  The house with the sail’s set as it exists is a fully functioning boat. But the conditions that you set the sails for have changed, so you need to change the boat in response to the conditions. The website that you’re scraping has changed, so you have to update your code. And then troubleshooting and debugging is testing the boat for sea worthiness when you’re, like, oh, hey, there’s a leak in my boat. Or the sail has gone missi
[Laughter]
Something happened to my crew.
Sure so Concurrency is, like, if you imagine track meet, it’s not a Relay where, like, a person has to hand off a baton to the next person. It like, a lot of things are going on and multiple people are running at once and maybe there are other events, like, pole vault and stuff.
Okay. So we had, like, Git, so it was version control. So we went through most of the commands. So add is – oh, so we are metaphor shopping in real life. And so adding is, like, adding an item to your cart. Commit is when you swipe your card to pay for it, push is when you bring it to your cart after you’ve bought it. Your log is, like, your receipt. Your record of transactions. A merge is if you have two people going to the grocery store at the same time, you’re going to pay once, but then you come to the conveyor belt to pay. You look through your – this is kind of awkward.
You look through your items, and then you can fix merge conflicts by throwing out the ones you don’t want or getting multiple of the same ones you want or reverting is when you return something to the store.
Can I applaud for that? Because I understand it.
[Applause]
So we talked about accessibility. And accessibility is making accessible Web products making them combatable with the technology that people with disabilities use. So, for example, if you have a building, as Kara mentioned, and you have ramps on them that people who are in wheelchairs can easily access the building. But people aren’t in wheelchairs could also access the building, so it’s great.
Just to kind of add to that, that was something we sort of struggled with because I think we’re talking, spending some time about how, like, that metaphor can be confronted and sort of dismissed sometimes. So if folks have thoughts on explaining that in other ways, I would be really curious to hear them.
This is sort of – your point is a really good one. And another way I’ve seen that explained is they talk about curb cuts, and they’re designed with people with wheelchairs but also strollers or crutches or other things. So they – universal design is good design.
Structured data is the recipe that your personal Chef cooks for you.
Okay. So we had regular and expressions, and we said it’s the instructions for finding letters in the newspaper to cut out with an X-ACTO Knife in order to paste together a ransom note.
[Laughter]
So we did API. And I guess we kind of, like, talked about it in two different ways. In terms of what an API is, I think we tried to compare it or make a metaphor as a ATM. So it has a number of functions that are available, but it abstracts a lot of the things that are not necessarily part of your domain. And then in terms of, like, what it’s like to consume an API, it’s kind of like having a Starbucks inside of target. That’s all.
NICOLE: Give it a shot.
Okay. So we tried cryptocurrency.
Cryptocurrency is like these computers are extremely strong, extremely burly miners who go into this very dangerous mine deep in the earth and the thing that they’re looking for is fairly rare but requires a lot of labor to find. So they work extremely hard. And as a result, the labor is very valuable. But also, maybe, they’re all the same person.
[Laughter]
I guess to add onto this metaphor. The block chain is, like, every time one of these miners finds this very rare gemstone that is a prime number, they have – they write down in a notebook that they have found a gemstone and all of these miners have magical notebooks that sync with each other so that if any one individual miner tries to erase the work that another miner did, it will automatically repopulate based on all the other notebooks.
NICOLE: Does anyone have any others that they want to share? No? Any GIF brainstorms that anyone else did?
I can just speak also. We talked a lot about correlation and causation, and that was really hard. And the one that we settled on is that since causation always involves correlation, it’s a square and a rectangle. It took us a long time to get there, but we got there.
NICOLE: Were there any others that people wanted to workshop?
Can anyone think of a metaphor for a DOM?
The DOM but not a tree or a skeleton.
It was an involved discussion.
We skipped it.
We have a question.
A garment. Like, a shirt. You can swap out parts of it by patching them or excising them, but it’s a discrete product that is formed of nondiscrete things and has seams.
Tear away pants.
NICOLE: The DOM is tear away pants.
That’s awesome.
It’s very visual, not what we actually use. But I kind of – you could think of it as a stop motion an violation where it’s, like, stop motion animation, you have a lot of different pieces that compose it together, and you can easily change the animation, but you don’t have to move everything, you just move the little, individual pieces. And that’s what the DOM is, you manipulate little bits of it to change the whole page.
So is it kind of like Jenga?
Is this too simple but Legos? I know you can use Legos as a metaphor for anything.
I think the main is can’t contain other Legos.
Says you. Challenge accepted.
We were curious of map projections. If anyone has a good way of explaining that.
Episode in west wing.
Yeah, just play the west wing episode.
NICOLE: Anything else that people found –
Do you have any good metaphors for us?
I tried to Google program metaphors, but they’re not nearly as interesting as the ones that you all came up with.
So what’s cryptocurrency?
It’s miners.
Okay. Cool.
I saw recently kind of relevant to this discussion. I think Google jigsaw put it together, and it’s called sideways dictionary.
Oh, you already went over it.
NICOLE: I didn’t talk about it, but you can.
Also, I looked through a bunch of them, though, and not all of them are good. So don’t always trust it. But go to it for ideas.
NICOLE: It’s a project by the Washington Po It’s called sideways dictionary. I think anyone can submit to it. So I encourage all of you – or I will submit for you. But it’s metaphors for common terms of a lot of what we discussed today. Yeah, it’s a project by Washington Post.
Couldn’t map projection be looking through a camera different lenses. You’re going to see things differently based on the lens. Whichever one you like the best.
Close to reality than others.
Or peeling an orange, which is a map projection is an attempt to turn a sphere into a 2D plain, which is fundamentally impossible. So peel an orange and try to flatten the orange peel into a rectangle. It’s impossible. You have to either stretch things or compress things.
Funhouse
Oh, that’s a good one.
NICOLE: We have five minutes left if there’s something you want to touch or experiences that have gone well when you’ve taught a concept or someone has taught a concept to you.
The deep Web, dark Web distinction, does everyone understand it.
The deep Web is just not indexed by search engines. And the dark Web is, like, where all the really – is also not indexed by search engines, and you need to use Tor, and there’s a lot of things that are really bad happen there.
That’s dark.
I think you can do the square, rectangle thing.
Metaphors that end up in stories. So, like, sometimes I have to explain in a story what Web script is. So, like, how do you approach things where it’s, like, you can’t just put the actual term because it is assumed that most of the readers would not know it.
The problem is, like, we’re just – for investigative stories I work on, it’s, like, the – how we did it is important, but it’s not as important as what we actually found. So you need to say as quickly as possible how we did something, which means as little words as possible, which means we can’t have a term and then explain it. We have to explain essentially what we did.
Gotcha. Might have been a story about
Can’t you just say simpler words? Like pull the information from the website over time.
Right. We’ve gone with road software to pull all the information.
So this is, like, a bad metaphor but Web scrape is, like, photocopying a phone book. It’s equated to hacking nefarious, which it’s not; right? It’s, like, if you have a phone book, I can look up the number myself, I can call it, it’s publicly-available information. I can use a photocopier to rapidly copy all of this information in a way that a human could do in a much longer time.
Applied but it’s not useful. The end result is just a bunch of data. Nothing has been done yet. It’s just raw data.
Yeah.
Awesome.
NICOLE: Great. I think we’re out of time. Thank you so much for coming. I hope you guys learned a lot. Already links. You can find – I’ll share this document on Twitter later too. This was transcribed, so see those posted I guess now. And if you have any metaphors that you, like, wrote down in notes or anything, feel free to come up to me now, and we can figure out a way to send that over. And thank you so much for coming. Stick around if you have any questions or comments about the discussion.
[Applause]


56
1 Yahweh says to all the people of Judah,
"Do the things that are fair and right,
because I will soon come to rescue you; I will soon show everyone that you have been right to trust me.
2 I will bless those who faithfully obey my laws about the Sabbath days.
I will bless those who keep sacred my Sabbath days,
and who do not do any work on those days,
and who refrain from doing anything that is evil.
3 Foreigners who have believed in me should not say,
'Yahweh will surely not allow me to belong to his people.'
And eunuchs should not say,
'Because I am deformed and unable to have children, I cannot belong to Yahweh;
I am like a tree that has completely withered.'
4 They should not say that, because I, Yahweh, say this to the eunuchs
who obey my laws about the Sabbath,
and who choose to do the things that please me,
and who obey all the other laws of the covenant that I made with the Israelite people:
5 I will cause people to put inside the walls of my temple a monument to them;
because of that monument, they will be honored more than they would have if they had children;
they will be honored forever.
6 I will also bless those who are not Israelites
who join themselves to me,
who serve me and worship and love me,
who obey my laws about the Sabbath,
and who faithfully obey all the other laws of the covenant that I made with the Israelite people.
7 I will bring them to my sacred hill in Jerusalem,
and cause them to be very joyful in my temple where people pray to me,
and I will accept the sacrifices that they burn on my altar and other sacrifices that they offer,
because my temple will be a building where people of all nations pray to me.
8 I, Yahweh, the Lord, the one who will bring back the people of Israel who have been forced to go to other countries, say this:
I will bring from other countries many more people to join those Israelites whom I have brought back."
9 "You surrounding nations have armies that are like animals in the forest;
come and attack Israel!
10 The Israelite leaders should be like watchdogs to protect the people,
but it is as though they were blind.
They understand nothing.
They are all like dogs that cannot bark.
Good watchdogs bark when strangers approach,
but the Israelite leaders do not warn the people that their enemies are coming.
Instead, they just want to lie down and sleep and dream.
11 And they are like greedy dogs;
they never get all that they want.
They are supposed to lead the people, like good shepherds lead their flocks,
but they are ignorant,
and they each do whatever they want to do.
12 They say to each other, 'Come, let us go and get some wine and other alcoholic drinks,
and let us become drunk!


| # | Document Count | Created | Dimensions | Total Calculation Time | Status | |
|---|---|---|---|---|---|---|
| {{job.id}} | {{job.documentCount}} | {{job.created | date:'medium' }} | {{job.dimensions}} | {{job.totalCalculationTimeString}} | New Building Term/Doc Matrix Running SVD Completed Failed | Visualize |


| Authority | |||
|---|---|---|---|
| Question | Yes | No | Comments |
| Is the author clearly identified? | |||
| Is the publisher/sponsor clearly identified? | |||
| Could the author's affiliation with the sponsor/publisher result in biased information? | |||
| Did you find this resource from another resource that is considered reliable? Highly reliable? | |||
| Does the author appear to be the original creator of the resource? | |||
| Are the author's credentials available | |||
| Do the author's credentials indicate that s/he is knowledgeable in this field? | |||
| Is there a way to reach the author? | |||
| Is there a way to reach the publisher or sponsor? | |||
| Is the domain a .edu, .gov, .mil, or .org? |
| Content and Scope | |||
|---|---|---|---|
| Question | Yes | No | Comments |
| Is the purpose of the resource clearly identifiable? | |||
| Is the information clearly written? | |||
| Is the intended audience clearly identifiable? | |||
| Does the purpose of the resource meet your needs? In what way? | |||
| Is the audience-level appropriate for your needs? | |||
| Is the information organized in a useful way? | |||
| Does the amount of information available appear to be extensive? | |||
| Is this resource better than other similar resources you have found? In what way? | |||
| Are there references to additional resources? | |||
| Do any references to additional resources lend credibility to the content of the resource? In what way? | |||
| Is the information current enough for your needs? | |||
| Are there any unique or special features (graphs, images, sounds, etc.) that are particularly useful for your topic? | |||
| Does the information appear to be based on facts or opinions? | |||
| Does the information appear to be accurate? How can you tell? | |||
| Are there obvious biases in the content? | |||
| Are the links reliable? |
| Design | |||
|---|---|---|---|
| Question | Yes | No | Comments |
| Is the information presented using a layout is visually enhancing? | |||
| Is the text legible? | |||
| Do the use of graphics, backgrounds, textures enhance the site? In what way? | |||
| If you choose not to display the images, is an "Alt" tag used? | |||
| Are there navigational tools provided to guide you through the resource? | |||
| Are consistent design features used throughout the site? | |||
| Does the page change frequently, making it difficult to use? | |||
| If the site is fairly substantial, is there a search engine provided to search the site? | |||
| If additional plug in's or helper applications are needed, is information provided to help you obtain them? |
| Functionality | |||
|---|---|---|---|
| Question | Yes | No | Comments |
| Is the server frequently busy or unavailable? | |||
| Do images, textures, backgrounds, length of the page, substantially impact the amount of time it takes to display the site? | |||
| Are additional plug-in's or helper applications needed to make the most effective use of the site (to hear sounds, play movies, etc)? |
|
Moody Memorial Library P. O. Box 97148 Baylor University Waco, TX 76798-7148 |
Voice: 254/710-2344 FAX: 254/752-5332 e-mail<EMAIL_ADDRESS>Last Updated: May 14, 2001 |


NSS Engineering College has been functional for more than 50 years and is situated at Palakkad, Kerala. Its alumni have achieved high degree of success in various fields and is active in various social programs across the globe. NECAB - NSS Engineering College Alumni Bangalore - aims at promoting interaction and networking between its members, supporting art and cultural activities in Bangalore and also helping the deserving through programs aimed at social intervention.
A decade since its inception, NECAB has emerged as one of the most vibrant Alumni Associations in Bangalore. Our bonding has been intrinsic and natural, connected by the common thread that is the Institution that contributed in making us what we are today.
Blue Ocean is a startup theater group, launched by a group of acclaimed film and theater artists with a common vision of offering fine quality theatre experience to the drama lovers around the world. As the name indicates, Blue Ocean’s aim is to explore unchartered waters to deliver a fresh theatre going experience to the audience. Their philosophy is simple: If they enjoy making it, the audience will most certainly enjoy watching it!
NECAB and Blue Ocean Theatre aims to present an unparalleled theatre experience to the drama lovers of Bangalore by hosting a classic play in the best possible manner and to raise a significant fund to fund the rehabilitation of Endosulfan affected people of Kasaragod through ENVISAG and for NECAB’s Social Obligation Program that government schools in Bengaluru


ACES Coders V4.0 is the annual coding competition organized by ACES (Association of Computer Engineering Students)
Event details
Schedule
8.30 A.M - 9.00 A.M
-
Registration.
9.00 A.M - 9.00 P.M
-
Coding.
9.00 P.M - 9.30 P.M
-
Award Ceremony.
Prizes
First Place
-
Rs.20000
Second Place
-
Rs.15000
Third Place
-
Rs.10000


happy journey!
Recent Posts
The Moscow Kremlin usually referred to as the Kremlin, is a fortified complex at the heart of Moscow, overlooking the Moskva River to the south, Saint Basil's Cathedral and Red Square to the east, and the Alexander Garden to the west.
It is the best known of the kremlins (Russian citadels) and includes five palaces, four cathedrals, and the enclosing Kremlin Wall with Kremlin towers. Also within this complex is the Grand Kremlin Palace. The complex serves as the official residence of the President of the Russian Federation. The name "Kremlin" means "fortress inside a city"LEARN MORE
Posted by
Admin
Quintessentially Indian in its fabric, Taj Hotels Palaces Resorts Safaris is recognized the world over for delivering a unique flavour of hospitality that offers world-class refinement while remaining deeply rooted in its local heritage.
With over 100 hotels in 62 locations, Taj offers guests the refined luxury of heritage, the effortlessly efficient service and amenities and a local experience with the assurance of quality.LEARN MORE


University of New Brunswick’s Human-Computer Interaction Lab is looking for new graduate Computer Science students (Master’s or PhD) and undergraduate student (honour's or summer research assistants) to join the group. Applications are due in January for the following summer or fall semester (but earlier contact is preferable). View UNB’s prospective students page for more information on graduate studies. Positions are highly competitive, and based on your background, previous performance, and demonstrated interest and skill match in our current or past projects.
Interested applicants should first examine our past publications and projects to see if your interests align with the type of work and projects we conduct. Next you should email Scott Bateman<EMAIL_ADDRESS>and/or Daniel J. Rea<EMAIL_ADDRESS>to discuss your application and the possibility for supervision before applying to UNB. Emails should be sent to Scott Bateman or Daniel Rea between September and January for entrance in the upcoming fall (typically students outside of Canada are not able to get immigration sorted before the fall semester). UNB undergraduate students and canadian students typically need less time (around 4 months) to be accepted into the program.
The email should include the following four items (failure to include one or more will mean your email might not get a reply):
Once you have discussed your interest in joining HCI Lab with Scott or Daniel, you will follow the University of New Brunswick graduate student application process.
We are looking for strong programmers, designers and UX researchers. In order to be considered you must have:


Try entering values in the range of 10 to 50. Verify that the browser stays responsive when working on a large calculation. We have created 3 workers, so the worker pool will handle a maximum of three tasks at a time. When exceeding this, tasks will be put in a queue.


Earthquakes Today {{displayToday}}
Magnitude
Location
Time
{{earthquake.magnitude}}
{{earthquake.location}}
{{earthquake.time | date:' HH:mm:ss'}}


GNU/Linux operating system
GNU is a Unix-like operating system. For me, GNU/Linux operating system provides a stable, flexible, and highly customizable working platform. The specific GNU/Linux distributions I use are Debian and Ubuntu
Unix users spend a lot of time at the command line.
The command line (often called the console, the shell or the terminal) looks something like this:
$
When you type in a command like ls
, it will
give you feedback:
$ ls
Documents README.txt
$
In this case, the ls
command listed
the files in the current directory.
$ history | cut -c8- | sort | uniq -c | sort -rn | head 997 ls 887 gnuplot 872 make run 581 make 540 make clean 297 cd - 291 make to_cori 287 ./p.sh 234 cd .. 144 cd $gemetg $


Renting a boat doesnt't have to be difficult! Renters can view rates, availability, live photos, and reserve a boat all in one simple click! You do not have to be a member to search boats! Choose your location and begin searching! After finding your desired boat, sign up with RentABoat.com!
Rent A Boat With Us Before?
Login here
New to RentABoat?
Please, click Continue to register and sign in, or call us for assistance!<PHONE_NUMBER>


{% extends 'samplemulti/base.html' %} {% load i18n %} {% block content %} SAMPLEMULTI World Overview of Conservation Approaches and Technologies SAMPLEMULTI is an established global network of Soil and Water Conservation (SWC) specialists, dedicated to sustainable land management (SLM). Add a new Technology {% include "wocat/partial/search.html" with current="samplemulti" %} Last updates {% include "samplemulti/questionnaire/partial/list.html" %} {% endblock %}
World Overview of Conservation Approaches and Technologies
SAMPLEMULTI is an established global network of Soil and Water Conservation (SWC) specialists, dedicated to sustainable land management (SLM).


Stock market professionals are used to analyse stocks using a bit different candlesticks than the ones most of us know.The main difference is this – empty candle is shown when open value of the same date is lower than close value (price increased during the single period – day, week, month, etc.). And the color indicates if price dropped or risen comparing to a previous period – if current item’s close price is lower than previous period close price, the candle will be red. Otherwise – green.


DOMError is an interface that describes an error. More...
#include <DOMError.hpp>
Public Types | |
Public constants | |
| enum | ErrorSeverity { DOM_SEVERITY_WARNING = 1, DOM_SEVERITY_ERROR = 2, DOM_SEVERITY_FATAL_ERROR = 3 } |
The severity of the error described by the | |
Public Member Functions | |
Destructor | |
| virtual | ~DOMError () |
| Destructor. | |
Functions introduced in DOM Level 3 | |
| virtual ErrorSeverity | getSeverity () const =0 |
| Get the severity of the error. | |
| virtual const XMLCh * | getMessage () const =0 |
| Get the message describing the error that occured. | |
| virtual DOMLocator * | getLocation () const =0 |
| Get the location of the error. | |
| virtual void * | getRelatedException () const =0 |
| The related platform dependent exception if any. | |
| virtual const XMLCh * | getType () const =0 |
A XMLCh* indicating which related data is expected in relatedData. | |
| virtual void * | getRelatedData () const =0 |
| The related DOMError::getType dependent data if any. | |
Protected Member Functions | |
Hidden constructors | |
| DOMError () |
DOMError is an interface that describes an error.
The severity of the error described by the DOMError
.
DOM_SEVERITY_ERROR:
The severity of the error described by the DOMError
is error. A DOM_SEVERITY_ERROR may not cause the processing to stop if the error can be recovered, unless DOMErrorHandler::handleError()
returns false.
DOM_SEVERITY_FATAL_ERROR
The severity of the error described by the DOMError
is fatal error. A DOM_SEVERITY_FATAL_ERROR will cause the normal processing to stop. The return value of DOMErrorHandler::handleError()
is ignored unless the implementation chooses to continue, in which case the behavior becomes undefined.
DOM_SEVERITY_WARNING
The severity of the error described by the DOMError
is warning. A DOM_SEVERITY_WARNING will not cause the processing to stop, unless DOMErrorHandler::handleError()
returns false.
| xercesc::DOMError::DOMError | ( | ) | [inline, protected] |
| virtual xercesc::DOMError::~DOMError | ( | ) | [inline, virtual] |
Destructor.
| virtual DOMLocator* xercesc::DOMError::getLocation | ( | ) | const [pure virtual] |
Get the location of the error.
| virtual const XMLCh* xercesc::DOMError::getMessage | ( | ) | const [pure virtual] |
Get the message describing the error that occured.
| virtual void* xercesc::DOMError::getRelatedData | ( | ) | const [pure virtual] |
The related DOMError::getType dependent data if any.
| virtual void* xercesc::DOMError::getRelatedException | ( | ) | const [pure virtual] |
The related platform dependent exception if any.
| virtual ErrorSeverity xercesc::DOMError::getSeverity | ( | ) | const [pure virtual] |
Get the severity of the error.
| virtual const XMLCh* xercesc::DOMError::getType | ( | ) | const [pure virtual] |
A XMLCh*
indicating which related data is expected in relatedData.
Users should refer to the specification of the error in order to find its XMLCh*
type and relatedData definitions if any.
Note: As an example, DOMDocument::normalizeDocument()
does generate warnings when the "split-cdata-sections" parameter is in use. Therefore, the method generates a DOM_SEVERITY_WARNING with type "cdata-sections-splitted" and the first DOMCDATASection
node in document order resulting from the split is returned by the relatedData attribute.


Fred
2
0
8.1.1.c relevant form control becoming non-relevant
You must see an xforms-disabled message only.
First Name:
xforms-disabled
xforms-enabled
xforms-value-changed
xforms-valid
xforms-readwrite
xforms-optional
xforms-in-range


Gender neutral debate after mum slammed for calling Santa 'Father Christmas'
The mum said she was 'shamed' on social media for not using a gender neutral term
by Molly Dowrick, Sarah McGeeA Plymouth mum took to a social media group to discuss a children's Christmas book, but was "shamed" in the comments for failing to give Santa a gender neutral name.
She referred to the jolly Christmas figure as 'Father Christmas' but many people criticised her, saying that 'Santa' is the preferred gender neutral term.
Speaking to Plymouth Live, the anonymous parent said she feels "on edge"' since posting in the group, saying she doesn't want to offend anybody by saying 'Father Christmas'.
The mum said: "I've just been shamed [on a Facebook group] for using the name 'Father Christmas' and [told] that 'Santa' is now seen as gender neutral.
"I was only referring to the book ['Father Christmas' by Raymond Briggs] but it's left me a little confused/on edge about what we are allowed to say.
"I have a small child and don't really want to raise him saying 'Father Christmas' if it's hurtful to some."
'Santa'/ Santa Claus' and 'Father Christmas' are arguably the most common names in the UK for the jolly person in red, while 'Saint Nick/Saint Nicholas' is used in other parts of the world.
In France, they are called 'Pere Noel', similar to Italy's 'Babbo Natale' which both translate to 'Father Christmas'.
In Germany the common term is 'Weihnachtsmann' (Christmas Man) and in Hungary and Poland it's 'Mikulas' and 'Mikolaj', both of which translate to [St] Nicholas.
In Russia, the name 'Ded Moroz' translates as 'Grandfather Frost'.
While many of these terms allude to Santa being a masculine figure, UK parents have weighed in on the debate with some parents calling for a gender neutral change.
'This gender neutral stuff is way out of hand'
One mum said: "It's always a man,
"Santa is so American, Father Christmas here and will always be Father Christmas."
Another dad agreed, saying: "It is Father Christmas, we are English not American! This gender neutral stuff is way out of hand."
One mum said: "Father Christmas is fine! We have always used that in our family!!
Another added: "Carry on calling him Father Christmas, it's your choice."
However, some parents disagreed with one saying: "I must be the only one who hates 'Father Christmas', I much prefer 'Santa/Santa Claus,
"plus it's easier for littlies to say."
Other people noted that LGBTQ+ community did not seem to be offended by the masculine pronoun and aren't asking for the name to be changed.


API Documentation¶
SVEA Managers¶
Archetypal (standard)¶
Module containing archetypal SVEA manager classes.
-
class
svea_managers.svea_archetypes.
SVEAManager
(vehicle_name, localizer, controller, actuation=<class 'svea.actuation.ActuationInterface'>, data_handler=<class 'svea.data.BasicDataHandler'>)[source]¶ Container for the different software module of a SVEA vehicle. Additionally, this manager is used to provide clean interfaces to each module of a SVEA vehicle. In general, every SVEA consists of the following modules: 1. Localization Interface 2. Controller 3. Actuation Interface 4. Data Handler Note, we use the term “Interface” carefully. They are called interfaces since the main functionality is performed elsewhere in another ROS node.
Parameters: - vehicle_name (str) – Name of vehicle; used to initialize each software module.
- localizer (class) – A chosen localization interface class constructor
- controller (class) – A chosen controller class constructor
- actuation (class) – A chosen actuation interface class constructor, defaults to ActuationInterface
- data_handler (class) – A chosen data handler class constructor, defaults to BasicDataHandler
-
compute_control
(state=None)[source]¶ Compute control using chosen controller object
Parameters: state (VehicleState, or None) – State used to compute control; if no state is given as an argument, self.state is automatically used instead, defaults to None Returns: Computed control input; format depends on return type of controller object’s own compute_control() method; typically this should return a steering angle and a velocity Return type: Some return type as self.controller.compute_control()
-
send_control
(steering, velocity)[source]¶ Send control input off to low-level controller and actuate SVEA. This method also auto-logs the control input.
Parameters:
-
start
(wait=False)[source]¶ Start interface objects
Parameters: wait (bool) – Flag deciding whether to wait for actuation interface to be ready or not
-
visualize_data
()[source]¶ Visualize data using the visualize_data() method of the chosen data handler object
-
wait_for_state
()[source]¶ Wait for a new state to arrive, or until a maximum time has passed since the last state arrived.
Returns: New state when it arrvies, if it arrives before max waiting time, otherwise None Return type: VehicleState, or None
Path Following¶
Module containing path following SVEA managers
-
class
svea_managers.path_following_sveas.
SVEAPurePursuit
(vehicle_name, localizer, controller, traj_x, traj_y, data_handler=<class 'svea.data.TrajDataHandler'>)[source]¶ Container for the different software module of a SVEA vehicle that is performing path following using a pure-pursuit algorithm.
Parameters: - vehicle_name (str) – Name of vehicle; used to initialize each software module.
- localizer (class) – A chosen localization interface class constructor
- controller (class) – A chosen controller class constructor
- traj_x (list) – X coordinates of trajectory
- traj_y (list) – Y coordinates of trajectory
- data_handler (class) – A chosen data handler class constructor, defaults to TrajDataHandler
-
compute_control
(state=None)[source]¶ Compute control for path-following using pure-pursuit
Parameters: state (VehicleState, or None) – State used to compute control; if no state is given as an argument, self.state is automatically used instead, defaults to None Returns: Computed steering and velocity inputs from pure-pursuit algorithm Return type: float, float
-
goto_pt
(pt)[source]¶ Compute control to go to single point, taking advantage of the pure-pursuit controller
Parameters: pt (tuple) – Point to go to Returns: Computed steering and velocity inputs from pure-pursuit algorithm Return type: float, float
-
is_finished
¶ Check if pure-pursuit controller is finished or not
State Representation¶
Classes for representing the state of a ground vehicle.
- TODO:
- Implement handling of covaraiances
- Handling of state messages
-
class
states.
SVEAControlValues
(steering=-128, velocity=-128, gear=None, front_diff_locked=None, rear_diff_locked=None, control_flags=0)[source]¶ Convenience class for representing SVEA control values in a human readable format.
The default values corresponds to the do not care values for the LLI. That is: if a ctrl_lli message is generated from a SVEAControlValues instance that was initiated without arguments nothing will change if it is sent to the LLI.
Parameters: -
control_msg
¶ The control value interpreted as a lli_ctrl message.
Getter: A lli_ctrl message representing the current values Setter: Set the current values from a lli_ctr message Type: class: svea_msg.msgs.lli_ctrl
-
ctrl_msg
¶ The control value interpreted as a lli_ctrl message.
Getter: A lli_ctrl message representing the current values Setter: Set the current values from a lli_ctr message Type: class: svea_msg.msgs.lli_ctrl
-
gear
¶ Gear of the vehicle. Can be either 0 (low) or 1 (high)
Getter: Return the current gear Setter: Set the current gear (0 or 1) Type: int or None
-
steering
¶ Steering actuation value.
The valid range is [-127, 127]. Anything else will be interpreted as a Do Not Care
Getter: Return the steering value. Setter: Set the current steering value. Type: int
-
update_from_msg
(ctrl_msg)[source]¶ “Update the class from a control message.
Unlike setting the control message directly this method respects the don not care rules according to the same logic as the LLI. Usefull for interpretting incoming control messages
Parameters: ctrl_msg (class: svea_msg.msgs.lli_ctrl) – Yaw of the vehicle in radians Returns: True if the control message changed anything, False otherwise Return type: bool
-
-
class
states.
VehicleState
(x=0.0, y=0.0, yaw=0.0, v=0.0, frame_id='map', child_frame='base_link', covariance=None, time_stamp=rospy.Time[0])[source]¶ A 2D state for vehicles Units are [m, rad, s, m/s]
Parameters: - x (float, optional) – Initial x position, defaults to 0.0
- y (float, optional) – Initial y position, defaults to 0.0
- yaw (float, optional) – Initial yaw, defaults to 0.0
- v (float, optional) – Initial velocity, defaults to 0.0
- gear (int, optional) – Initial gear, can be 0 (low) or 1 (high), defaults to 0
- front_diff_lock (bool, optional) – Initial front differential lock status, defaults to False
- rear_diff_lock (bool, optional) – Initial rear differential lock status, defaults to False
- frame_id (string, optional) – Reference frame for the state, defaults to map
- child_frame (string, optional) – Child frame for the state, defaults to base_link
- covariance (numpy.array, optional) – Covariance matrix 4x4, defaults to a unity matrix
- time_stamp (rospy.Time, optional) – Time stamp for the state, defaults to rospy.Time.now()
-
array
¶ An array representing the continous state [x, y, yaw, v] of the vehicle.
Getter: A numpy array with the state of the vehicle [x, y, yaw, v]. Setter: Set the current state [x, y, yaw, v] from an array. Type: numpy.array
-
covariance
¶ Covariance of the state, should be a 4x4 matrix
-
dict
¶ The state represented by a dictionary
-
odometry_msg
¶ Odometry msg representing the state
-
pose_msg
¶ Pose msg representing the state
-
state_msg
¶ SVEAState msg representing the state of the vehicle
-
twist_msg
¶ Twist msg representing the state
-
v
¶ Velocity of the vehicle in [m/s] with respect to frame_id
Getter: Return the current velocity in [m/s] Setter: Set the current velocity in [m/s] Type: float
-
x
¶ X position of the vehicle in [m] with respect to frame_id
Getter: Return the current x position in [m] Setter: Set the current x position in [m] Type: float
-
states.
extract_pose
(msg)[source]¶ Extract the pose from a message :param msg: An Odometry, Subject, Transform or any variation of Pose message :return: The Pose contained in msg :rtype: class:geometry_msgs.msg.Pose
-
states.
extract_pose_covariance
(msg)[source]¶ Extract the covariance from a message :param msg: An Odometry, Subject, Transform or any variation of Pose message :return: The Covariance contained in msg :rtype: class:numpy.array
-
states.
quaternion_cov_to_yaw_cov
(quat, quat_covariance)[source]¶ Calculate the quaternion covariance based on the yaw and yaw covariance.
Perform the operation \(C_q = R C_{\theta} R^T\) where \(C_q\) is the quaternion covariance, \(C_{\theta}\) is the yaw covariance and \(R\) is the Jacobian of the transform from a quaternion into yaw. \(R\) will be a row vector defined by:
\[\begin{split}R = \\ \frac{\partial \theta}{\partial x} &= ay + bx, \\ \frac{\partial \theta}{\partial y} &= ax - by, \\ \frac{\partial \theta}{\partial z} &= aw - bz, \\ \frac{\partial \theta}{\partial w} &= az + bw, \\\end{split}\]The transform from yaw to quaternion is \(\theta = arctan2(g, h)\), with \(g = 2zw + 2xy\) and \(h = x^2 + y^2 + z^2 + w^2\). The partial derivatives of \(\arctan2(g, h)\) in terms of \(g\) and h are
\[\begin{split}\frac{\partial}{\partial g} &= \frac{g}{g^2+h^2}, \\ \frac{\partial}{\partial h} &= \frac{h}{g^2+h^2}, \\\end{split}\]With \(a = 2frac{\partial}{\partial g}\) and b = 2frac{partial}{partial h}, the chain rule yields the expression for \(R\) above.
Parameters: - quat (Any container that has numerical values in index 0, 1, 2 and 3) – Heading of the vehicle represented by a quaternion.
- quat_covariance (4x4 numpy array) – Covariance matrix for the quaternion
Returns: The quaternion covariance transformed to yaw coordinates.
Return type:
-
states.
xy_yaw_from_quaternion
(quat)[source]¶ Calculate the yaw angle in the xy plane from a rotation quaternion. :param quat: A unit quaternion representing the :type quat: Any container that has numerical values in index 0, 1, 2 and 3 :return: The yaw angle in radians projected on the xy plane :rtype: float
-
states.
yaw_cov_to_quaternion_cov
(yaw, yaw_covariance)[source]¶ Calculate the quaternion covariance based on the yaw and yaw covariance.
Perform the operation \(C_{\theta} = R C_q R^T\) where \(C_{\theta}\) is the yaw covariance, \(C_q\) is the quaternion covariance and \(R\) is the Jacobian of the transform from yaw to a quaternion. \(R\) will be a collumn vector defined by:
\[\begin{split}R = \\ \frac{dx}{d\theta} &= 0, \\ \frac{dy}{d\theta} &= 0, \\ \frac{dz}{d\theta} &= \frac{1}{2} \cos \frac{1}{2} \theta, \\ \frac{dw}{d\theta} &= -\frac{1}{2} \sin \frac{1}{2} \theta, \\\end{split}\]Parameters: yaw – Yaw of the vehicle in radians Returns: The yaw covariance transformed to quaternion coordinates. Return type: 4x4 numpy array
Models¶
Bicycle¶
Module for bicycle models with params set for SVEA cars.
-
class
models.bicycle.
SimpleBicycleModel
(state=## Vehicle State: - x: 0.0 - y: 0.0 - yaw: 0.0 - v: 0.0 - frame_id - map - child_frame- base_link - covariance - array([[1.0000, 0.0000, 0.0000, 0.0000], [0.0000, 1.0000, 0.0000, 0.0000], [0.0000, 0.0000, 1.0000, 0.0000], [0.0000, 0.0000, 0.0000, 1.0000]]) - time stamp: 0)[source]¶ Simple Bicycle Model State-space equation is:
\[\begin{split}\dot{x} &= v\cos(\phi), \\ \dot{y} &= v\sin(\phi), \\ \dot{\phi} &= \frac{v}{L} \tan(\delta), \\ \dot{v} &= a.\end{split}\]where \(x, y, \phi, v\) are x position, y position, yaw, and velocity; \(\delta, a\) are the steering angle and acceleration inputs; and \(L\) is the wheel base length. This object also includes a method for dynamics updates based on the set sampling time and the embedded bicycle model. Units are [m, rad, s, m/s]
Parameters:
Localizers Interfaces¶
Module containing localization interfaces for motion capture, indoor localization, etc.
-
class
localizers.
LocalizationInterface
(vehicle_name='')[source]¶ Interface handling the reception of state information from the localization stack. This object can take on several callback functions and execute them as soon as state information is available.
Parameters: vehicle_name (str, optional) – Name of vehicle being controlled; The name will be effectively be added as a namespace to the topics used by the corresponding localization node i.e namespace/vehicle_name/state, defaults to ‘’ -
add_callback
(cb)[source]¶ Add state callback. Every function passed into this method will be called whenever new state information comes in from the localization stack.
Parameters: cb (function) – A callback function intended for responding to the reception of state info
-
remove_callback
(cb)[source]¶ Remove callback so it will no longer be called when state information is received
Parameters: cb (function) – A callback function that should be no longer used in response to the reception of state info
-
start
()[source]¶ Spins up ROS background thread; must be called to start receiving data
Returns: itself Return type: LocalizationInterface
-
Actuation Interfaces¶
ROS interface objects for sending actuation commands to the SVEA car’s low-level controller. The low-level controller expects unit-less steering and velocity values from [-127, 127] that correspond to the minimum and maximum steering angles and velocities. We implement the interfaces for two reasons: (1) our models typically expect steering angles in [rads] and velocities in [m/s], and (2) we would like to add some features on top of just sending the control inputs.
-
class
actuation.
ActuationInterface
(vehicle_name='', log_length=100)[source]¶ Standard actuation interface. Make it easy to input steering angles in radians and velocities in m/s. Assumes very simplistic models of the low-level actuation. It assumes a linear steering model and a linear velocity model. The control interface assumes that the ESC is in the default Sports mode.
Parameters: - vehicle_name (str, optional) – Name of vehicle being controlled; The name will be effectively be added as a namespace to the topics used by the corresponding low lever interface i.e namespace/vehicle_name/lli/topic, defaults to ‘’
- log_length (int or None, optional) – Number of messages from control requests, control actuated and the remote that should be stored in the internal log. Set to None for unlimited logging, defaults to 100
-
differential_front
¶ Status of the front differential lock
Returns: 0 if unlocked 1 if locked, None if no information has been received. Return type: int
-
differential_rear
¶ Status of the rear differential lock
Returns: 0 if unlocked 1 if locked, None if no information has been received. Return type: int
-
emergency
¶ Check if the emergency flag is set. If the emergency flag can not be cleared from ROS it is also possible to clear it by not sending any control requests for at least 5 seconds, and setting the remote to override.
Returns: True if emergency flag is set, False otherwise, None if no information has been received. Return type: bool
-
gear
¶ Current gear
Returns: 0 if low gear 1 if high gear, None if no information has been received. Return type: int
-
max_speed
¶ Get the maximum speed, dependent on gear
Returns: the maximum speed, independent of direction Return type: float
-
max_speed_signal
¶ Get the maximal velocity that the controller will actually attempt to actuate for the current gear
Returns: the maximum actuated speed, independent of direction Return type: float
-
remote_idle
¶ Check if the remote is considered idle by the low level interface.
Returns: True if idle, False if active, None if no information has been received. Return type: bool
-
remote_override
¶ Check if the remote override is active. If the override is active the control requests will be ignored by the low level interface.
Returns: True if override is engaged, False otherwise, None if no information has been received. Return type: bool
-
send_control
(steering=nan, velocity=nan, brake_force=0, transmission=-1, differential_front=-1, differential_rear=-1, ctrl_code=0)[source]¶ Method for taking control inputs and implementing features over the control inputs. This method converts steering angles and velocities from radians and m/s to unit-less values that the low level system expects, saturates the unit-less values, implements a stopping feature for blocking control inputs (note, this is not necessarily a braking feature, it only blocks inputs from being published, thus it should not be used for emergency braking), and sends/publishes inputs to the low level interface.
If an argument is left empty the low level interface will be told to use the last sent value. The same is true if the gear or differential arguments have any other values than 0 or 1. If you do not call send_control then the car will not do anything.
Parameters: - steering (float, optional) – input steering angle for the car in [rad], if argument left empty the low level system will use the last sent valid value, defaults to float(‘nan’).
- velocity (float, optional) – input velocity for the car [m/s], if argument left empty the low level system will implement the last sent valid value, defaults to float(‘nan’)
- brake_force (float) – brake force as a percentage [0, 100] of maximum braking force, defaults to 0
- transmission (int, optional) – 0 means low gear, 1 means high gear, -1 means keep the currently set gear, defaults to -1
- differential_front (int, optional) – 0 means unlocked, 1 means locked, -1 means keep the currently set lock state, defaults to -1
- differential_rear (int, optional) – 0 means unlocked, 1 means locked, -1 means keep the currently set lock state, defaults to -1
- ctrl_code – [deprecated]
-
software_idle
¶ Check if the computer is considered idle by the low level interface.
Returns: True if idle, False if active, None if no information has been received. Return type: bool
-
start
(wait=False)[source]¶ Spins up ROS background thread; must be called to start receiving and sending data
Parameters: wait (bool) – True if the interface should call wait_until_ready before returning, defaults to False Returns: itself Return type: ControlInterface
-
wait_until_ready
(timeout=10.0)[source]¶ Wait until the Control Interface is ready. Will also return after timeout seconds or if rospy is shutdown.
Parameters: timeout (float, optional) – Number of seconds to wait for a response from the low level interface, defaults to 10 Returns: False if timed out or rospy is shutdown, True otherwise Return type: bool
Data Handlers¶
Module containing all the handy data handlers for simplifying and standardizing all things data. Data handlers handle data logging, data accessing, data visualizing, and saving data.
-
class
data.
BasicDataHandler
(vehicle_name='')[source]¶ Handler for the basic data-related tasks, including logging, plotting, and saving data. Also a good class to inherit from to standardize the names of common tasks such as visualize_data.
Parameters: vehicle_name (str, optional) – Name of vehicle being controlled; unused in this class, but included as a standard, defaults to ‘’ -
curr_state
¶ Most recent state of the vehicle
Returns: Last logged state of vehicle Return type: VehicleState
-
curr_steer
¶ Most recent steering input of the vehicle
Returns: Last logged steering of vehicle Return type: float
-
save_data
(filename)[source]¶ Save logged data
Parameters: filename (str) – Path to desired save location
-
update_animation
(only_plot=True)[source]¶ Clear and update animation between each frame
Parameters: only_plot (bool) – Flag used when several processes want to plot on same figure. If set to True, other processes will not be able to plot. If set to False, other processes can plot in figure without being cleared out, defaults to True.
-
visualize_data
(only_plot=True)[source]¶ Visualize logged data
Parameters: only_plot (bool) – Flag used when several processes want to plot on same figure. If set to True, other processes will not be able to plot. If set to False, other processes can plot in figure without being cleared out, defaults to True
-
-
class
data.
RVIZPathHandler
(vehicle_name='', traj_x=[], traj_y=[])[source]¶ Handler with additional features for handling visualization to RVIZ.
Parameters:
-
class
data.
TrajDataHandler
(vehicle_name='', traj_x=[], traj_y=[])[source]¶ Handler with additional features for handling trajectories. Role of class is primarily for handling trajectory plotting.
Parameters: -
save_data
(filename)[source]¶ Save logged data
Parameters: filename (str) – Path to desired save location
-
Simulators¶
Simple SVEA Simulator¶
Simulation module for the SVEA platform. Creates fake ROS subscriptions and publications that match the real car platform. Intended for debugging code BEFORE running on a real car.
-
class
simulators.sim_SVEA.
SimSVEA
(vehicle_name, initialized_model, dt=0.02, start_paused=False, publish_pose=False, publish_odometry=False)[source]¶ Handles simulation of a SVEA vehicle. The object takes in a model and pretends to be the low-level of a SVEA vehicle. It will spin up a continuous loop that updates the state of the fake vehicle using the model dynamics at a fixed rate and takes control inputs by subscribing to the same low-level interface ROS topic the actual SVEA low-level system uses and even publishes actuated control to the same topic as the low-level system.
Parameters: - vehicle_name (str) – Name of vehicle, etc. SVEA0, used for creating ROS topic names
- initialized_model (Model) – Model to use as pretend SVEA vehicle. The only requirements on the model is that it has an ‘update’ method that takes a steering angle and a velocity as inputs
- dt (float) – Sampling time in [s]
- start_paused (bool, optional) – Start simulation paused
- publish_pose (bool, optional) – Publish the simulated vehicles pose if True Default: False
- publish_odometry (bool, optional) – Publish the simulated vehicles odometry if True Default: False


Highlands Ranch Tech
Learn More
First Meetup
Our first meeting will be held at the Highlands Ranch Library. June 1st, 2017 5:00pm-7:00pm.


Moodboard
Menu
Home
About
Portfolio
Creative Writing
Computer Science
Moodboard
Menu
Connect
You found me! :)
Image from
Tumblr
.
Lucy Liu at a Hollywood party. Image via
Tumblr
.


Match Play. Double Match Point. How should Red play 43?
pips Red=186 White=143
(CorrectAnswer= 0/0, ErrorScore= 0)
The key here is not to attempt an attack with 8/4*, 74. Red has too few checkers in the attack zone to try to blitz White.
He does much better by keeping his four-point prime on his own side of the board and keeping his options for a variety of back games open on the other side of the board.
There is very little difference between a) 21/14 b) 23/20, 14/10 and c) 23/20, 15/11
The latter wins the rollout by 0.007 but that is incidental. The key learning point is not to mistakenly go for the blitzing game plan.
He does much better by keeping his four-point prime on his own side of the board and keeping his options for a variety of back games open on the other side of the board.
There is very little difference between a) 21/14 b) 23/20, 14/10 and c) 23/20, 15/11
The latter wins the rollout by 0.007 but that is incidental. The key learning point is not to mistakenly go for the blitzing game plan.
1. Cubeful 2-ply 23/20 15/11 Eq.: +0.156 0.578 0.150 0.006 - 0.422 0.131 0.004 2. Cubeful 2-ply 21/14 Eq.: +0.151 (-0.005) 0.575 0.146 0.006 - 0.425 0.145 0.005 3. Cubeful 2-ply 23/20 14/10 Eq.: +0.139 (-0.016) 0.570 0.146 0.006 - 0.430 0.139 0.004 4. Cubeful 2-ply 15/12 14/10 Eq.: +0.136 (-0.019) 0.568 0.148 0.007 - 0.432 0.145 0.005 5. Cubeful 2-ply 15/11 14/11 Eq.: +0.134 (-0.021) 0.567 0.145 0.006 - 0.433 0.131 0.004


|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |
| Packages that use main | |
|---|---|
| dialogs.analysis | |
| dialogs.assign | |
| dialogs.display | |
| dialogs.file | |
| dialogs.help | |
| dialogs.library | |
| dialogs.model | |
| dialogs.view | |
| main | |
| visualize |
| Classes in main used by dialogs.analysis | |
|---|---|
| Progressor
Class for showing process information. |
|
| SolidMAT
Class for main frame. |
| Classes in main used by dialogs.assign | |
|---|---|
| SolidMAT
Class for main frame. |
| Classes in main used by dialogs.display | |
|---|---|
| Progressor
Class for showing process information. |
|
| SolidMAT
Class for main frame. |
| Classes in main used by dialogs.file | |
|---|---|
| Progressor
Class for showing process information. |
|
| SolidMAT
Class for main frame. |
| Classes in main used by dialogs.help | |
|---|---|
| SolidMAT
Class for main frame. |
| Classes in main used by dialogs.library | |
|---|---|
| SolidMAT
Class for main frame. |
| Classes in main used by dialogs.model | |
|---|---|
| Progressor
Class for showing process information. |
|
| SolidMAT
Class for main frame. |
| Classes in main used by dialogs.view | |
|---|---|
| SolidMAT
Class for main frame. |
| Classes in main used by main | |
|---|---|
| ActionHandler
Class for handling action events of menubar and toolbar buttons. |
|
| Formatter
Class for formatting numeric values in GUIs. |
|
| SolidMAT
Class for main frame. |
|
| Statusbar
Class for Status bar of main frame. |
|
| SwingWorker.ThreadVar
Class to maintain reference to current worker thread under separate synchronization control. |
|
| Toolbars
Class for creating toolbars for the main frame. |
| Classes in main used by visualize | |
|---|---|
| SolidMAT
Class for main frame. |
|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |