text:
---
layout: post
title: Episode 54 - Unions and Unsustainable Ideology
date: 2020-12-25 16:00:00.000000000 +00:00
categories: episode
episode_number: '054'
episode_title: Unions and Unsustainable Ideology
tags: []
content_warnings: "Emotional Abuse, Bullying / Taunting, Alcoholism & alcohol consumption, Discussions of worker oppression, Mentions of: mild innuendo, violence, mass mortality, death & death threats, cannibalism (implied), blood, guns, existential crisis"
acast_url: https://play.acast.com/s/stellarfirma/stl54-unionsandunsustainableideology
summary: "Episode 54 - Unions and Unsustainable Ideology

The Client, New O'Neal Commercial and Industrial Hyperdynamics and Lotion Innovations, requests assistance with unionisation issues and general employee loyalty issues.

Management Consultants' advice: recontextualise definition of terms; unions are stupid; learn to love the boot; unions eat your legs; hats of nitiation; unions give you wrinkles; eat the boot; initiate ‘funchat'; hold ‘funchat’ in the backup airlock."
formats:

  Google Doc: https://drive.google.com/file/d/1v1aM6egpaeCoOyVM9FoNyVVBJk-9ugAB/view

sources:
  stellarscripts: http://stellarscripts.tumblr.com/
official: true
wiki_url: https://stellar-firma.fandom.com/wiki/Episode_54_-_Unions_and_Unsustainable_Ideology

---

#### TREXEL

Special thanks to Nero. Don't look now! Or ever. It would only upset you.

------

##### [show theme]

#### IMOGEN

Rusty Quill presents: Stellar Firma.

##### [theme continues]

#### DAVID

__[sighs]__ _(distressed)_ Here we go again. I was happy. I was happy, even with Angry Jim. I was happier than this. Stuck in a room again, no customers, nothing to do. Just waiting on him to come back!

I heard the thunk. I heard the thunk from the wall panel about seven and a half hours ago!

#### IMOGEN

__[beep]__ If it helps, your discovery and recapture was a statistical certainty.

#### DAVID

I can't keep doing this.

##### [door whooshes open, startling David]

#### TREXEL

_(singing)_ ♪ Ohhhhh...

Yes, I would, yes I would!

Would you like a cocktail?

Yes, I would, yes I would!

Would you like a cocktail?

Should I, should I?

Yes I should! Yes I should! Yes I should! Yes I should!

Drinking, drinking with my friends, drinking, drinking, never ends!

#### IMOGEN

__[beep]__ I do not believe he would consider that a threat.

#### TREXEL

Well, ah, David. Good morning to you too.

#### DAVID

I don't think it's the morning, Trexel!

#### TREXEL

Good point of the day to you too. You know what, in space, what is the morning? Except a time we all agreed was first.

#### DAVID

A couple of days ago I'd be closing up shop around now. And it would be lovely. And I'd be saying 'Goodbye Angry Jim, thank you for only smashing three tables today, you know...'

#### TREXEL

Well, in which case, David, you're welcome! I've saved you from that awful life. And now we're back on board. We're back in the saddle. We're back on the horse, the horse, my career, it's a career horse.

#### DAVID

_(weary)_ Right... Yes. Fine.

#### TREXEL

Now.

#### DAVID

Did you?

#### TREXEL

Had a couple of drinks, just because I'm a little bit naughty, David. And let me just say, I think, uh, I think Paradrak Ngelion and I are... firm friends. Now, we weren't drinking in the same bar because... she went to the Cosmic Lounge and I went to a different bar. But we were both at bars at the same time. And I just drank, well, heavily enough for three people. So there was plenty of spillover.

The point is we're friends. And we're going to go on holiday together, to some sort of moon, and then maybe we'll start a business together.  And then we'll be on the run! And then I'll be back to where I am!

_(calming down)_ I'm not going to start a business with Paradrak, but we are friends.

#### IMOGEN

__[beep]__ None of this is the case!

#### DAVID

_(melancholy)_ Yes, I owned a business once.

#### TREXEL

Did you?

#### DAVID

It was nice.

#### TREXEL

Sounds awful! So, what's the, what's the task for today, David? I'm sure you've done some prep work like you always do. I'm sure you've worked out some sort of-- or we'll-- we'll do it this way.

#### DAVID

No. No Trexel. Because, yet again, you need consultant access to open the panel to get the brief, [__TREXEL:__ Ah...] which is why you need to turn up to work on time, but you never do.

#### TREXEL

Well, David, in a better world, maybe I *would* be here earlier, but, I'm sorry David, this is not a better world. It's just a world that we live in, together. Now--

#### DAVID

But, but could you--

#### TREXEL

Could I?

#### DAVID

But could you--

#### TREXEL

Could I?

#### DAVID

Could y--

#### TREXEL

Could I?

#### DAVID

Cou-could--

#### TREXEL

Cou--

#### DAVID

Trexel, [__TREXEL:__ Ah!] could you just [__TREXEL:__ Ah!] stroke the panel! [__TREXEL:__ Gah!] Could you stroke the panel lightly so we can reveal the brief, please?

#### TREXEL

Stroke it lightly? That doesn't sound like me. I'm more of a caresser. I'm more of a sensual toucher.

#### IMOGEN

__[beep]__ Straight creeping detected. Security alerted.

#### DAVID

Okay. Well, caress, in an extremely sensual manner, the wall panel to make it open.

#### TREXEL

Hang on a minute, I'll just work myself up to it.

_(sings)_ ♪ Ooh, look at that wall, do-da-do-do. ♫

#### DAVID

_(crosstalk)_ Trexel, Paradrak just, sort of, bumped it.

#### TREXEL

_(sings)_ ♪ Looking so fine and smooth, looking so good to me, gonna touch it with my little paws. Ee, ah! ♫

##### [tap, tap, slap]

#### DAVID

_(crosstalk)_ Okay.

##### [panel is slapped and the wall whirrs open]

#### IMOGEN

__[beep]__ Initiating!

#### TREXEL

You gotta finish, you can just poke it.

#### DAVID

Well, that's what Paradrak did, and Paradrak's an executive consultant. So...

#### TREXEL

Look, I like Paradrak a lot. They're amazing. But! I've got a different style, David. I'm more... steamy!

#### DAVID

More long-winded. Right. Fine. Okay. So here is the brief... __[sighs]__ well, this is from Robert Nyrsef, um, and, uh, her designation is 'external seeking wisdom'.

#### TREXEL

They all come to Stellar Firma. Oh, the wastrels of the universe. 'What should I do? Help me? My business is failing!'

Ah, come to daddy! [__DAVID:__ Right.] Come to daddy SF.

#### DAVID

Well... her business is New O'Neal Commercial and Industrial Hyperdynamics and Lotion Innovations.

#### TREXEL

Oh, I, I use O'Neal!

#### DAVID

Really?

#### TREXEL

It's one of the few imports we're allowed. Most of the time Stellar Firma has its own products and brands, because obviously they're made by the Board, and therefore the perfect things. But there are some trade agreements that allow certain products in. And one of those is New O'Neal's Quick Drying Lotions! These lotions don't dry too fast! They dry just fast enough!

#### DAVID

Right? And how are they drunk?

#### TREXEL

What?! You don't drink New O'Neal's Quick Drying Lotions! You slather them on your tongue, and then you let them dry. You don't just chug 'em down. It's not, it's not standard moisturiser, two, two credits for a pump. This is pricey stuff, David. You just dab a little, a little touch on the tongue there, and let, and let the flavours dance upon your palette. And then it dries hard, and then you can't speak cause you've got a solid tongue.

#### DAVID

Right. So it's more about the mouthfeel?

#### TREXEL

Oh, it's all about mouthfeel! Somebody said umami once, but I never checked what that was.

#### IMOGEN

__[beep]__ Stellar Firma Limited cannot stress enough that no forms of moisturisers, emollients or lubricants are for consumption by employees.

#### DAVID

Right. Okay. Well... with the problem she has is, um, well, because of, and there are scare quotes here, um, unfair--

#### TREXEL

Woaaah! __[panting]__ Sorry, I got scared by those.

#### DAVID

--wages and limited opportunities for rising up the ranks within our company structure, there had been dissent and talk of unionisation within our workforce.

##### [as David says 'unionisation, the warning buzzer sounds]

#### TREXEL

_(hissing)_ David, David, David, David... shut up!

#### DAVID

What? What? I haven't finished.

#### TREXEL

_(softly)_ David, no but, David, David, David, what did you-- did you, did you say "unionisation"?

#### DAVID

Y-Yes. Unionisation.

##### [the warning buzzer sounds again]

#### IMOGEN

__[beep]__ Warning: seditious terms will not be permitted without proper negative context or, alternatively, a clearly sarcastic tone. Watch it buster!

#### TREXEL

_(hushed)_ David, that is a, that is a word to be set in hushed tones.

#### DAVID

Uh... wh--

#### TREXEL

That i-- Collect-- Collectivised employment organisations are specifically outlawed in Stellar Firma. And I know that this is a problem we're dealing with, but if people hear you yelling about unionisation, you might find yourself unionised with death!

#### DAVID

Uh, wh-what is--

#### TREXEL

The union of death and David!

#### DAVID

What is--

#### TREXEL

_(crosstalk)_ It's a spring wedding!

#### DAVID

_(crosstalk)_ What is unionisation?!

#### TREXEL

_(crosstalk)_ The priest has a gun!

#### DAVID

_(shouting)_ What is unionisation?

 But people still insisted on work-- It was awful! Like, who wouldn't want to be ruled by a powerful elite?! Especially coming from me, one of the powerful e-- I don't, the point is it's rubbish and banned. So, it's one of the things that always creeps into big organisations after a while.

We ha-- now keep this between you and us, David. [__DAVID:__ Mm-hmm.] But Stellar Firma had a slight-- couple of hundred years ago, a slight unionisation problem. In that, the Build Team decided 'Hey, don't we make everything? Also, aren't the tools we use to build planets, also basically planet-destroying weapons?' The answer to both those questions was yes!

And so they rose up, and tried to collectively bargain with violence. Um, luckily we just turned the air off and replaced them, but it was a close call. And since then, it's been a very, very touchy topic with everybody.

#### IMOGEN

__[beep]__ It was awful, so much good equipment lost or damaged!

#### DAVID

Right, so what you're saying is, basically, Enola is sort of like a union of one, so some sort of one-ion?

#### TREXEL

Mmm, delicious in pasta.

#### IMOGEN

__[beep]__ How would you know? We don't have pasta anymore.

#### DAVID

Okay, um, well, um, Robert has, has this problem, I suppose, um, she's got a, a--

#### TREXEL

_(quietly)_ Dissident talk of unionisation...

#### DAVID

--unionisation problem, and she, she's asking how can we convince our employees that a union *wouldn't* be in their best interests, [__TREXEL:__ Mm-hmm.] and that company loyalty should come above all else. Uh, electrified shock collars, haven't worked.

#### TREXEL

__[chuckles]__ You don't have to tell me! Just after a while you develop a taste for it, and it loses its threat.  [__DAVID:__ Oh.] 'cause, 'cause think about it. Like who-- Say you're downtrodden. Why don't we all get together so we've got more rights? Sounds great.

#### DAVID

Yes.

#### TREXEL

Wrong!

#### DAVID

Oh.

#### TREXEL

Because then I can't oppress you.  So it's, it's, it's, it's alluring and it's appealing, but it shouldn't be done. So what you do, is you change what union means. You convince people that union is some sort of leg-gobbling monster. And so when somebody comes up to 'em and says 'Do you want to join a union?', they turn around and say 'I would like to keep my legs, thank you very much!' and slap them across the face.

#### DAVID

Right.

#### DAVID

Right... Yes. I mean, I suppose we are *helping* Robert here, but I, I really am failing to see the problem with unions.

#### IMOGEN

__[beep]__ Someone clearly doesn't want to keep their legs.

  So, you got to get the bigger picture.

Yes. On the surface of it, on the ground, you know, as you're, you know, figuratively or literally having your face, ground in by a boot forever and ever, you could think 'Hey! This isn't fun!' [__DAVID:__ Yes.] but take, but zoom out, zoom out, up the leg. What's that? Oh, it's me that's got the boot! You see? It's great.

#### DAVID

Right... so--

#### TREXEL

Okay, let me put it another way.  And that angry sun is drawing in, always drawing in with its gravity, until eventually the little asteroid crashes into the sun being destroyed utterly, but adding its resources to the sun.

#### DAVID

Um... But Trexel, that's still quite bad for me.

##### [Trexel sighs in despair]

#### TREXEL

No, well, this is just, this is just selfishness. This is the selfishness that workers always have. 'Oh, oh, I've been maimed in an accident! Oh, I haven't got enough food to feed my family! Wah-wah.'

Do you know how much paperwork goes into burying employees? It's why we don't bother. We just eat them. No, you didn't hear that from me. That's not how a slurry comes from. It's not where it comes from. Not where it comes from.

#### DAVID

_(astonished)_ Slurry's people?

#### IMOGEN

__[beep]__ Caution: employees are required to keep the pact of soylent silence.

#### TREXEL

I don't think anyone said that. So the important thing is, it's great that we own you.

#### DAVID

Right, Trexel. Okay, um, so that's why you think unions are bad?

#### TREXEL

Yes.

#### DAVID

Because you're the sun, uh, because you're the boot and it's... selfish for the asteroids and the faces under the boots to even ask for anything?

#### TREXEL

You're getting it now! Ah, the uninitiated has become nitiated. In fact, I've made you a little hat that says "Nitiated", there you go, [__DAVID:__ Okay.] there we go. __[rustling of fabric and/or paper]__ It's a nitiated hat.

#### DAVID

I'll just take this, take this hat.

#### TREXEL

Yes?

##### [brief sounds of hat crushing]

#### DAVID

And I'm just going to crush it into __[Trexel sounds aghast]__ a tiny, tiny, very, very hard and dense pellet. [__TREXEL:__ Mm-hmm.] And then... yah!

##### [David yeets the pellet, which strikes Trexel bodily]

#### TREXEL

Ooh! Oh! Wow. You, you have got strong, David. That, that was like a metal ball. Ah. Am I bleeding? Do I have blood? I've never checked. Hang on. Gah! Yeah, I do.

#### DAVID

Great.

#### TREXEL

So you're saying you're not nitiated?

#### DAVID

No. Yes, exactly! I think-- Look, this is a company where their first option has been to stick shock collars on everybody. [__TREXEL:__ Step one.] Now, regardless, regardless of whether they end up liking it or not, [__TREXEL:__ Mmm, nice.] which is your problem with this hypothesis, um, they shouldn't have done that.  You know, [__TREXEL:__ Seems fine, though.] just, just one, one foot wrong. One, one step out of line, and boop, blended, or, boop, gunwalls. You know?

#### TREXEL

Yes, I do know. It's, it's, it's the only system I've ever known, and it's always worked fine for me. I've never once been blended or shot by a gunwall, despite that one time you tried to get us shot by gunwalls!

#### DAVID

Yes! You would have been shot by that gunwall, Trexel. You're, you're not the boot! You're, maybe, maybe, you're a bit of mud *stuck* to the boot.

#### IMOGEN

__[beep]__ Please do not try to shift the paradigm of consultants. It hurts their brains!

#### TREXEL

Well, hang on, hang on. So you're, so you're telling me that... I, I'm not entirely in charge?

#### DAVID

Okay. No, Trexel--

#### TREXEL

I'm large and in charge, David. [__DAVID:__ No--]I'm, I'm the consultant. I, I have power, I have connections, I have my family name-- Yes, sure, I don't have respect, or much in the way of position, and I have been banned--

#### DAVID

_(rapidly)_ Or the ability to drink with Paradrak.

#### TREXEL

--drink with Paradrak, and yes, I'm often, often physically harmed by the systems and processes we... __[trails off incoherently]__

#### DAVID

Also, we've, we, we have been put here, right? [__TREXEL:__ Yeah...] Remember we've been put here specifically.

#### TREXEL

Yes. Because, because we're on... we're on the executive track. __[splutters in relief]__ Because we're on the executive track, David, isn't it? It's no other reason that we'd be put here, other than we're on the executive track and we're on our way to being, ah-huh-ah-uh, in charge in a very real and significant sense. It's not because we're pawns, not pawns in someone's game, David, not little pawns waiting to be crushed by the boot... Ah, not the boot! David, I'm not the boot!

#### DAVID

Okay. Also--

#### TREXEL

Oh dear!

#### DAVID

Also, Trexel, also the idea that you would be absolutely fine to be the boot, and your *only* problem with this *entire* system is that you *aren't* the boot is--

#### TREXEL

_(wailing)_ I want to be a boot.

#### DAVID

No! Stop being the boot!

#### TREXEL

I want to be, I want to be a size 12 boot! Stamp, stamp, stamp!

#### DAVID

_(crosstalk)_ No! Get a different, get a different shoe! Maybe like a nice soft plimsoll.

#### TREXEL

_(crosstalk)_ A brogue?

#### DAVID

_(crosstalk)_ Yes, you could be a brogue. Yes, you could be a brogue.

#### TREXEL

_(crosstalk)_ An oxford? A plimsoll? A flip-flop!

#### DAVID

_(crosstalk)_ And maybe you could step, maybe you could step off of the faces. Maybe just step off of the faces and onto the ground?

#### TREXEL

But they're so soft and squishy under the foot. So much fun.

#### DAVID

Yes, but they're people's faces. [__TREXEL:__ Urgh.] People own the faces. Would you like to have your face being stamped on forever and forever?

#### TREXEL

Not unless I'm paying for it.

#### DAVID

Well, okay, well that, that is a separate issue we're going to file under electro-collars. But, if you're not paying for it, if, if you're just being stamped on because somebody *else* wants to you be stamped on--

#### TREXEL

Hey! Stop stamping on my face!

#### DAVID

Exactly. [__TREXEL:__ Right...] So as the owner of the boot... why are you stamping on that person's face if they don't want it?

#### TREXEL

Maybe... Well, I, I know if I was having a boot, I think it would be because I'm always filled with an intense and, and burning fear of being the one under the boot. So, yeah.

#### DAVID

But what if *nobody* was a stamper or a stampee?

#### TREXEL

Right...

#### TREXEL

Or a giant face so large that it could be formed into another much larger faceboot. And then you stamp on the boot with the faceboot!

#### DAVID

No, just eat the boot.

#### TREXEL

Just eat the boot?

#### DAVID

Just eat the boot, because then the cycle of stamping is ended.

#### TREXEL

But then, but then don't you consu-- Then haven't you internalised the stamping, and then [__DAVID:__ Okay, look--] the whole cycle starts again!

#### DAVID

Look, this is not a literal-- I mean this, this, this gestalt face entity is not digesting the boot. The boot--

#### TREXEL

Oh, sorry. I thought we were literally going to make a giant boot of faces.

#### DAVID

Nope. The union--

#### TREXEL

Is that not what unions are? Hang on a minute. Isn't a union a thing that eats your legs? I'm pretty sure someone said that.

#### DAVID

Oh wait, no, yeah, no, no stop! No, that's your lie! That is your lie.

#### TREXEL

Okay. So what I'm hearing from you, David, is that maybe, just maybe, I, Trexel Geistman, could benefit from collectivisation and unionised action?

#### DAVID

_(wary)_ Yes.

#### TREXEL

_(quietly)_ Well, that's quite something to chew on, David. And I might add something to chew on very, very quietly, because as I said, this is entirely banned and will get us both killed.

#### DAVID

Oh, we were just talking about big faces eating boots, not anything else.

#### TREXEL

We're talking about big faces, eating hypothetical boots.  Technically, I should recycle you for spreading banned ideologies, but it's Trexel, so I'm more interested in how he will ruin this for you.

#### TREXEL

That's, that's given me a lot to think about, David, and I think you know I don't think a lot about many things, so well done for getting through my mental, my mental wall of 'don't look at it, don't look at it -- it hurts, it hurts'.

But back to the, back to the issue at hand, because as you've noticed, we haven't got much time left to finish, to finish this up before I need to have another quick round of drinks, sort of with Paradrak, but also absolutely not with Paradrak. How are we going to make sure that nobody at New O'Neal Commercial and Industrial Hyperdynamics and Lotion Innovations ever talks about unionisation ever again?

#### DAVID

Well, here's the question, Trexel.

#### TREXEL

Ask away daddy-o!

#### DAVID

The real message I got from both of you, is that none of this actually matters. What matters is that you say something, [__TREXEL:__ Mm-hmm] not that it works.

#### TREXEL

Okay. Fine. So what we say is, 'Hey, New O'Neal Commercial and Industrial Hyperdynamics and Lotion Innovations. You've got unionisation within your ranks.'

#### DAVID

Yes.

#### TREXEL

'How about you just rename it? Call it fun chat. And then when you're on the report, it says, hey, we've got a, quite a high level of fun chat within the ranks [__DAVID:__ Mm-hmm?] everyone looks at it and goes __[chuckles]__ that sounds fun, who doesn't like a fun chat?'

#### DAVID

Yeah. And maybe--

#### TREXEL

And then everyone just shakes hands.

#### DAVID

Yeah. And, and, and obviously you want to have fun chat at your table, [__TREXEL:__ Oh yes!] so maybe they'll get them around the table to have a fun chat with the fun chatters?

#### TREXEL

And then maybe they'll have a big chat, and agree things like workplace safety and, you know, hourly rates and limitation on workdays and things like that.

#### DAVID

Because that is one thing, um New O'Neal Commercial and Industrial Hyperdynamics and Lotion Innovations, uh, well, it doesn't look like, or at least Robert hasn't mentioned... that the company has tried talking... to the fun chatters. She says they've tried shock collars...

#### TREXEL

Yes. Naturally you go straight to the shock collars. Talking, you say?

#### DAVID

And that appears to be kind of it. They, they've, they've done shock collars...

#### TREXEL

And then they've come straight to us. And normally we'd advise some sort of...

#### DAVID

Yeah, they, they've done, they've done shock collars [__TREXEL:__ ...gun party.] and they they've gone to Robert and said, 'Hey Robert, uh, this isn't working. Uh, can we get you to talk to Stellar Firma so that they can help you out, and, uh, and see if we can provide something other than shock collars.'

#### TREXEL

Let's give it a go. Just write on the form, "Have a chat."

#### DAVID

"Have a chat."

#### TREXEL

Call it, call it fun chatting, and have a chat. Just see--

#### DAVID

Well, let's say, we can call it 'rebrand them, rebrand them [__TREXEL:__ Rebrand them.] to fun chatters...

#### TREXEL

Refocus, re-re-readdress the issue [__DAVID:__ Yes.] as a fun chat with a fun chatter.

#### DAVID

Recontextualize it through a positive lens.

##### [Trexel makes appreciative noises]

#### TREXEL

You know, this is a real negative filter.  [__DAVID:__ Mmm.] That's the Stellar Firma way!

#### IMOGEN

__[beep]__ That is not the Stellar Firma way!

#### DAVID

Yes, so we'll have a rose-tinted, uh, look at these fun chatters. And maybe, maybe just talk to them, Robert, and maybe just--

#### TREXEL

And hold all of the talks inside an airlock. So if at any point you decide, no thanks, you walk out, and [__DAVID:__ Ah, no.] airlock them out. Perfect!

#### DAVID

_(crosstalk)_ Okay, no, no, no. Nope. Nope. Nope.

#### TREXEL

_(crosstalk)_ Put it in the tube! Put it in the tube!

#### DAVID

Trexel, no, no!

#### TREXEL

Put it in the tube!

##### [buzz of accepted submission, and machinery whirs away, ending with a clunking lock]

#### IMOGEN

__[beep]__ Submitting!

#### DAVID

_(crosstalk)_ Oh... there we go.

#### TREXEL

_(happy)_ There we go!

#### DAVID

Trexel?

#### TREXEL

Yes?

#### DAVID

I have to say, I was pleased with, with the, the, the, the fun chat we had.

#### TREXEL

You're welcome.

#### DAVID

'til we got to the 'and put them all in an airlock and blow them into space'.

#### TREXEL

You've got to have a backup plan, David. What if the chat turns sour?  Chuck it out!

#### DAVID

I'm really hoping that New O'Neal Commercial and Industrial Hyperdynamics and Lotion Innovations is, is, is based on a planet, and not a space station, because that will make your airlock idea effectively, put them in the lobby and just open the door.

#### TREXEL

Oh, and just let them free on the premises?

#### DAVID

Yeah.

#### TREXEL

Well, I should have checked, but I didn't. And now it's gone.

#### DAVID

That's fine. [__TREXEL:__ But!] I'm personally hoping for the bit where their frozen corpses aren't floating in the vacuum of space, so, so, fingers crossed.

#### TREXEL

Oh-ho, but that's fun! When they bounce across each other. Ohhh, look at them. Look at them pinwheel. Those were once people. Hah! Ahhh, memories.

#### DAVID

Wow...

#### TREXEL

Anyway David, you know what, I think we did a very, a very good job.

#### DAVID

Yeah... So, Trexel?

#### TREXEL

Hmmm?

#### DAVID

Completely unrelated...

#### TREXEL

Oh sure, go ahead, I like unrelated things.

 [__TREXEL:__ Hit me with it.] But say there was somebody who wanted to have a fun chat [__TREXEL:__ Sure, okay.] inside some sort of hypothetical large entity. And that hypothetically, uh, let's say they make, uh, really big balls [__TREXEL:__ Sure, okay, I can, I can, yeah.] which they then just sort of, just float about.

Just hypothetically.

 I understand. [__DAVID:__ Yeah...] Don't worry, David, you can keep going.

 Security leaving that one be.

#### DAVID

Okay, okay, okay. Um, a-a-and, and somebody wanted to fun chat inside the floaty ball, uh, company...

#### TREXEL

Tricky, tricky. 'cause I bet, I bet, I bet this floaty ball company is ruled over by some sort of unknowable executive council of some kind.

#### DAVID

Yes, yes, yes, and, yes. Yes. The, the ball council doesn't want people to have, have fun chatting. Um, but hypothetically, theoretically, just, just, just speculatively.

#### TREXEL

Hmm, that's, that's quite, that's quite the good hypothet you've got there David. [__DAVID:__ Yes.] Now, how would you--

#### DAVID

This, this fun chatter, how would they be able to, maybe, get their fun chat around without the council... noticing or being able to, to stop them exactly?

 But, you know, I think often when, uh, when dealing with executive ball councils, they, they stamp down on that kind of thing pretty quickly, maybe by--

#### DAVID

Yeah, and, and hypothetically these, these nice askers, maybe they just hypothetically, uh, crawl into a hypothetical, uh, let's call them, um, air conditioning, uh, uh, tubes, [__TREXEL:__ Sure.] and just hypothetically write a bunch of leaflets forever, and not really, hypothetically, get anything done.

#### TREXEL

Yeah, No. That-- I can imagine that hypothetically not working at all, and not really having much of an impact. No, no, I'd, I'd say if you're really trying to get that, that fun chat going, you've got to really grab the attention of the executive ball council.

So what you've got to do is all of these disparate and disaffected, oh, I don't know, let's say repurposed employees, [__DAVID:__ Mm-hmm?] what they need to do is violently rise [__DAVID:__ Mmm.] and seize key points within this ball factory, [__DAVID:__ Mmm.] so that the production of balls, and indeed the functioning, the, the economic function of this ball factory can no longer work.

So, you know...

#### DAVID

Interesting. And say, say hypothetically, some hypothetical individual wanted to, uh, speculatively, and purely as a sort of a thought experiment, um, look up this sort of tactics. What would they, what would this tactic sort of be, if there was some sort of, um, I dunno, theoretical search term that one [__TREXEL:__ Sure.] could put into some sort of engine of looking, what would they, what would they put in? Just hypothetically.

#### TREXEL

Ah, what was it called? Um, what was it called? Ah... ape punching? No... Um, monkey fight! No... I-- Guerrilla warfare! Look up guerrilla warfare, and that will give you all of the hypothetical information you need to take down this non-existent organisation.

#### DAVID

Oh, well, thank you Trexel! That was a, that was a really interesting, um, thought experiment, um...

#### IMOGEN

__[beep]__ What hypothetical fun!

#### TREXEL

Yeah, I liked that. I liked that. We should do more of these hypotheticals. It's like having a brain gym!

#### DAVID

Yes, yes.

#### TREXEL

Which is a man called Jim in your brain who says 'Do better!' [__DAVID:__ It's j--] Just like Angry Jim.

#### DAVID

Yes. Related to, uh, hopefully fewer table smashings [__TREXEL:__ Well.] in, in the brain...

#### TREXEL

More like lobe smashing. Smash that lobe! Smash that lobe button!

#### DAVID

Yes. Well, that's it. My lobes are thoroughly smashed, and I think you have some sort of, uh, parasocial Paradrak socialization to, to get on to.

#### TREXEL

_(sings)_ ♪ Oh... Pour a pint for me! Pour a pint for me!

Pour a pint! Pour a pint! Pour a pint or three! ♫

##### [door whooshes as Trexel exits]

#### DAVID

Right. IMOGEN?

#### IMOGEN

__[beep]__

Yes, David 7?

#### DAVID

Um, activate, uh, secret browsing!

#### IMOGEN

__[beep]__ Browsing shielded. Do not look up pictures of shirtless Bathin.

#### DAVID

Oh, that worked. Okay. Um, search for... guerilla warfare.

#### IMOGEN

__[beep]__ Searching... Accessing restricted files. __[beep]__ Found.

#### DAVID

Right. Time to make good use of these universal permissions.

##### [show theme starts]

gha_language: JavaScript


text:
##Description:

Passwords of at least 64 characters should be allowed.
The use of password managers should be encouraged and supported by ensuring users can paste into password data entry fields,
thereby enabling the automated use of password managers.

##Mitigation:

Verify that passwords of 64 characters or longer are permitted.

branch_name: refs/heads/main

extension: md

gha_language: HTML

license_type: permissive


text:
---
layout: project
title: Programming Strategies
# youtube_video:
photo: /assets/img/research/strategytracker.png
short_desc: Short description about the project
current_collaborators: [Maryam, Yang]
# prev_collaborators: []
active: true
---
Developers solve problems by applying programming strategies, describing sequences of steps to debug, reuse, design, test, and understand code. Experienced developers work better by using more effective strategies. We've been exploring ways to capture and make explicit the strategies developers use, helping uncover how developers work differently and to create new ways to help developers benefit from the hard-earned wisdom of experienced developers.

license: MIT

branch_name: refs/heads/master

gha_license_id: MIT


text:
## Lymui-node 🍭 (WIP)

A small wrapper over the [lymui](https://github.com/shigedangao/lymui) library. The wrapper provide binding for the specified language below

- C
- NodeJS

## C Binding

Uses these commands

1. Compile the header for the C library

```sh
cbindgen --config cbindgen.toml --crate lymui-c --output my_header.h --lang c
```

2. Compile lymui-node

```sh
cargo build
```

3. Compile the example with GCC

```sh
gcc rgb.c -o test -llymui_c -L../../target/debug
```

4. Run the example

```sh
LD_LIBRARY_PATH=../../target/debug ./test
```

## NodeJS

You'll need to have NodeJS installed on your machine.

1.  This is going to output a `.node` file which you can use in your npm project

2. In a JS file file you can copy paste the following example.

```js
const binding = require('../node-binding.node')

const res = binding.getAnyRgbCompatibleColor(
    { r: 5, g: 10, b: 100 },
    binding.RgbMapping.Rgb,
    binding.RgbMapping.Hex
)
```

repository: shigedangao/lymui-node

gha_language: C

repo_name: shigedangao/lymui-node


text:
## HTML.js

HTML.js is a tiny library for creating HTML fragments in JavaScript. See [this page](http://andrewberls.github.io/html.js) for docs and examples.

Created as a weekend project by [Andrew Berls](http://andrewberls.com/), licensed under [MIT](https://github.com/andrewberls/html.js/blob/master/LICENSE).


text:
---
id: index
title:  "Summary"
---

If you know a useful library that has direct support for ZIO, please consider [submitting a pull request](https://github.com/zio/zio/pulls) to add it to one of following categories.

- [Official ZIO Libraries](officials.md)
- [Libraries with Direct ZIO Support](directsupport.md)
- [Tools for ZIO](tools.md)

## ZIO Interoperability Libraries

ZIO provides the ability to interoperate with other parts of the broader ecosystem, see [Interop](../../interop/index.md) for overview.

repository: sameerbrenn/zio

repo_name: sameerbrenn/zio


text:
# nextjs-postgres-graphql

Boilerplate to get started with Nextjs, Hasura GraphQL engine as CMS and postgres as database using this awesome library: [withData](https://github.com/adamsoffer/next-apollo).

[![Edit nextjs-postgres-graphql](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/github/hasura/graphql-engine/tree/master/community/sample-apps/nextjs-postgres-graphql?fontsize=14)

![Nextjs Postgres GraphQL](./assets/nextjs-postgres-graphql.png)

# Tutorial

- Deploy Postgres and GraphQL Engine on Heroku:

  [![Deploy to
  heroku](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/hasura/graphql-engine-heroku)

  Please checkout our [docs](https://docs.hasura.io/1.0/graphql/manual/deployment/index.html) for other deployment methods

- Get the Heroku app URL (say `my-app.herokuapp.com`)
- Create `author` table:

  Open Hasura console: visit https://my-app.herokuapp.com on a browser
  Navigate to `Data` section in the top nav bar and create a table as follows:

  ![Create author table](../gatsby-postgres-graphql/assets/add_table.jpg)

- Insert sample data into `author` table:

  ![Insert data into author table](../gatsby-postgres-graphql/assets/insert_data.jpg)

  Verify if the row is inserted successfully

  ![Insert data into author table](../gatsby-postgres-graphql/assets/browse_rows.jpg)

- Clone this repo:
  ```bash
  git clone https://github.com/hasura/graphql-engine
  cd graphql-engine/community/sample-apps/nextjs-postgres-graphql
  ```

- Install npm modules:
  ```bash
  npm install
  ```

- Create config.js as follows, in this step we are configuring `withData` with an `httpLink` to connect to a valid GraphQL server URL.
  ```js
  import { withData } from 'next-apollo'
  import { HttpLink } from 'apollo-link-http'

  // can also be a function that accepts a `context` object (SSR only) and returns a config
  const config = {
    link: new HttpLink({
      uri: 'https://my-app.herokuapp.com/v1/graphql', // <- Configure GraphQL Server URL (must be absolute)
    })
  }

  export default withData(config)
  ```

- Wrap your page component with `Query` component from `react-apollo` so that appropriate data can be fetched while the page is SSRed
    - GraphQL query

      ```js

      const query = gql`
      	query {
      	  author {
      	    id
      	    name
      	  }
      	}
      `

      ```
    - Wrap your component with `Query`
      ```js

        <Query    // <- Wrap the component which requires data with Query component from react-apollo
          query={ query }
          fetchPolicy={ 'cache-and-network' }
        >
          {({ loading, data, error }) => {
            if(error) {
              return (<div>Error..</div>);
            }
            return (
              <div>
                <h1>My Authors </h1>
                <AuthorList authors={data ? data.author: []} />
              </div>
            );
        }}
        </Query>

      ```

- Run the app:
  ```bash
  npm run dev -- -p 8000
  ```
- Test the app
  Visit [http://localhost:8000](http://localhost:8000) to view the app

  ![Demo app](../gatsby-postgres-graphql/assets/test_app.jpg)

# How it works

  It uses [next-apollo](https://github.com/adamsoffer/next-apollo#how-does-it-work) underneath which ensures that data requirement is satisfied before it is rendered on the server and next.js takes care of the rest.

# Contributing

Checkout the [contributing guide](../../../CONTRIBUTING.md#community-content) for more details.


text:
# Terraform::Mailgun::Domain

Provides a Mailgun App resource. This can be used to
create and manage applications on Mailgun.

## Properties

`Name` - (Required) The domain to add to Mailgun.

`SmtpPassword` - (Required) Password for SMTP authentication.

`SpamAction` - (Optional) `disabled` or `tag` Disable, no spam
filtering will occur for inbound messages. Tag, messages
will be tagged with a spam header.

`Wildcard` - (Optional) Boolean that determines whether
the domain will accept email for sub-domains.

## Return Values

### Fn::GetAtt

`Name` - The name of the record.

`SmtpLogin` - The login email for the SMTP server.

`SmtpPassword` - The password to the SMTP server.

`Wildcard` - Whether or not the domain will accept email for sub-domains.

`SpamAction` - The spam filtering setting.

`ReceivingRecords` - A list of DNS records for receiving validation.

`Priority` - The priority of the record.

`RecordType` - The record type.

`Valid` - `"valid"` if the record is valid.

`Value` - The value of the record.

`SendingRecords` - A list of DNS records for sending validation.

## See Also

* [mailgun_domain](https://www.terraform.io/docs/providers/mailgun/r/domain.html) in the _Terraform Provider Documentation_


text:
# 0.3.0 Cleaned Up Log Of Changes

## Improved Segmentation Map Augmentation #302

Augmentation of Segmentation Maps is now faster and more memory efficient.
This required some breaking changes to `SegmentationMapOnImage`.
To adapt to the new version, the following steps should be sufficient for most
users:

* Rename all calls of `SegmentationMapOnImage` to `SegmentationMapsOnImage`
  (Map -> Maps).
* Rename all calls of `SegmentationMapsOnImage.get_arr_int()` to
  `SegmentationMapsOnImage.get_arr()`.
* Remove the argument `nb_classes` from all calls of `SegmentationMapsOnImage`.
* Remove the arguments `background_id` and `background_threshold` from all
  calls as these are no longer supported.
* Ensure that the input array to `SegmentationMapsOnImage` is always an
  int-like (int, uint or bool).
  Float arrays are no longer accepted.
* Adapt all calls `SegmentationMapsOnImage.draw()` and
  `SegmentationMapsOnImage.draw_on_image()`, as both of these now return a
  list of drawn images instead of a single array. (For a segmentation map
  array of shape `(H,W,C)` they return `C` drawn images. In most cases `C=1`,
  so simply call `draw()[0]` or `draw_on_image()[0]`.)
* Ensure that if `SegmentationMapsOnImage.arr` is accessed anywhere, the
  respective code can handle the new `int32` `(H,W,#maps)` array form.
  Previously it was `float32` and the channel-axis had the same size as the
  max class id (+1) that could appear in the map.

Changes:

- Changes to class `SegmentationMapOnImage`:
    - Renamed `SegmentationMapOnImage` to plural `SegmentationMapsOnImage`
      and deprecated the old name.
      This was changed due to the input array now being allowed to contain
      several channels, with each such channel containing one full segmentation
      map.
    - Changed `SegmentationMapsOnImage.__init__` to produce a deprecation
      warning for float arrays as `arr` argument.
    - **[breaking]** Changed `SegmentationMapsOnImage.__init__` to no longer
      accept `uint32` and larger itemsizes as `arr` argument, only `uint16`
      and below is accepted. For `int` the allowed maximum is `int32`.
    - Changed `SegmentationMapsOnImage.__init__` to always accept `(H,W,C)`
      `arr` arguments.
    - **[breaking]** Changed  `SegmentationMapsOnImage.arr` to always be
      `int32` `(H,W,#maps)` (previously: `float32` `(H,W,#nb_classes)`).
    - Deprecated `nb_classes` argument in `SegmentationMapsOnImage.__init__`.
      The argument is now ignored.
    - Added `SegmentationMapsOnImage.get_arr()`, which always returns a
      segmentation map array with similar dtype and number of dimensions as
      was originally input when creating a class instance.
    - Deprecated `SegmentationMapsOnImage.get_arr_int()`.
      The method is now an alias for `get_arr()`.
    - `SegmentationMapsOnImage.draw()`:
        - **[breaking]** Removed argument `return_foreground_mask` and
          corresponding optional output. To generate a foreground mask
          for the `c`-th segmentation map on a given image (usually `c=0`),
          use `segmentation_map.arr[:, :, c] != 0`, assuming that `0` is
          the integer index of your background class.
        - **[breaking]** Changed output of drawn image to be a list of arrays
          instead of a single array (one per `C` in input array `(H,W,C)`).
        - Refactored to be a wrapper around
          `SegmentationMapsOnImage.draw_on_image()`.
        - The `size` argument may now be any of: A single `None` (keep shape),
          a single integer (use as height and width), a single float (relative
          change to shape) or a tuple of these values. ("shape" here denotes
          the value of the `.shape` attribute.)
    - `SegmentationMapsOnImage.draw_on_image()`:
        - **[breaking]** The argument `background_threshold` is now deprecated
          and ignored. Providing it will lead to a deprecation warning.
        - **[breaking]** Changed output of drawn image to be a list of arrays
          instead of a single array (one per `C` in input array `(H,W,C)`).
    - Changed `SegmentationMapsOnImage.resize()` to use nearest neighbour
      interpolation by default.
    - **[rarely breaking]** Changed `SegmentationMapsOnImage.copy()` to create
      a shallow copy instead of being an alias for `deepcopy()`.
    - Added optional arguments `arr` and `shape` to
      `SegmentationMapsOnImage.copy()`.
    - Added optional arguments `arr` and `shape` to
      `SegmentationMapsOnImage.deepcopy()`.
    - Refactored `SegmentationMapsOnImage.pad()`,
      `SegmentationMapsOnImage.pad_to_aspect_ratio()` and
      `SegmentationMapsOnImage.resize()` to generate new object instances via
      `SegmentationMapsOnImage.deepcopy()`.
    - **[rarely breaking]** Renamed `SegmentationMapsOnImage.input_was` to
      `SegmentationMapsOnImage._input_was`.
    - **[rarely breaking]** Changed `SegmentationMapsOnImage._input_was` to
      always save `(input array dtype, input array ndim)` instead of mixtures
      of strings/ints that varied by dtype kind.
    - **[rarely breaking]** Restrict `shape` argument in
      `SegmentationMapsOnImage.__init__` to tuples instead of accepting all
      iterables.
    - **[breaking]** Removed `SegmentationMapsOnImage.to_heatmaps()` as the
      new segmentation map class is too different to sustain the old heatmap
      conversion methods.
    - **[breaking]** Removed `SegmentationMapsOnImage.from_heatmaps()` as the
      new segmentation map class is too different to sustain the old heatmap
      conversion methods.
- Changes to class `Augmenter`:
    - **[breaking]** Automatic segmentation map normalization from arrays or
      lists of arrays now expects a single `(N,H,W,C)` array (before:
      `(N,H,W)`) or a list of `(H,W,C)` arrays (before: `(H,W)`).
      This affects valid segmentation map inputs for `Augmenter.augment()`
      and its alias `Augmenter.__call__()`,
      `imgaug.augmentables.batches.UnnormalizedBatch()` and
      `imgaug.augmentables.normalization.normalize_segmentation_maps()`.
    - Added `Augmenter._augment_segmentation_maps()`.
    - Changed `Augmenter.augment_segmentation_maps()` to no longer be a
    wrapper around `Augmenter.augment_heatmaps()` and instead call
    `Augmenter._augment_segmentation_maps()`.
- Added special segmentation map handling to all augmenters that modified
  segmentation maps
  (`Sequential`, `SomeOf`, `Sometimes`, `WithChannels`,
   `Lambda`, `AssertLambda`, `AssertShape`,
   `Alpha`, `AlphaElementwise`, `WithColorspace`, `Fliplr`, `Flipud`, `Affine`,
   `AffineCv2`, `PiecewiseAffine`, `PerspectiveTransform`, `ElasticTransformation`,
   `Rot90`, `Resize`, `CropAndPad`, `PadToFixedSize`, `CropToFixedSize`,
   `KeepSizeByResize`).
   - **[rarely breaking]** This changes the order of arguments in
     `Lambda.__init__()`, `AssertLambda.__init__()`, `AssertShape.__init__()`
     and hence breaks if one relied on that order.

## New RNG handling #375

* Adapted library to automatically use the new `numpy.random` classes of
  numpy 1.17 -- if they are available. If they are not available (i.e. numpy
  version is <=1.16), the library automatically falls back to the old
  interface (i.e. `numpy.random.RandomState`).
* Added module `imgaug.random`.
  * Added class `imgaug.random.RNG`. This is now the preferred way to represent
    RNG states (previously: `numpy.random.RandomState`). Instantiate it
    via e.g. `RNG(1052912236)`, where `1052912236` is a seed.
  * Added `imgaug.random.supports_new_rng_style()`.
  * Added `imgaug.random.get_global_rng()`.
  * Added `imgaug.random.seed()`.
  * Added `imgaug.random.normalize_generator()`.
  * Added `imgaug.random.normalize_generator_()`.
  * Added `imgaug.random.convert_seed_to_generator()`.
  * Added `imgaug.random.convert_seed_sequence_to_generator()`.
  * Added `imgaug.random.create_pseudo_random_generator_()`.
  * Added `imgaug.random.create_fully_random_generator()`.
  * Added `imgaug.random.generate_seed_()`.
  * Added `imgaug.random.generate_seeds_()`.
  * Added `imgaug.random.copy_generator()`.
  * Added `imgaug.random.copy_generator_unless_global_generator()`.
  * Added `imgaug.random.reset_generator_cache_()`.
  * Added `imgaug.random.derive_generator_()`.
  * Added `imgaug.random.derive_generators_()`.
  * Added `imgaug.random.get_generator_state()`.
  * Added `imgaug.random.set_generator_state_()`.
  * Added `imgaug.random.is_generator_equal_to()`.
  * Added `imgaug.random.advance_generator_()`.
  * Added `imgaug.random.polyfill_integers()`.
  * Added `imgaug.random.polyfill_random()`.
* Refactored all arguments related to random state handling to also accept
  `imgaug.random.RNG`, as well as the new numpy random classes. This
  particularly affects `imgaug.augmenters.meta.Augmenter` and
  `imgaug.parameters.StochasticParameter` (argument `random_state` for both).
* Marked old RNG related functions in `imgaug.imgaug` as deprecated.
  They will now produce warnings and redirect towards corresponding functions
  in `imgaug.random`. This does not yet affect `imgaug.imgaug.seed()`.
  It does affect the functions listed below.
  * `imgaug.imgaug.normalize_random_state()`.
  * `imgaug.imgaug.current_random_state()`.
  * `imgaug.imgaug.new_random_state()`.
  * `imgaug.imgaug.dummy_random_state()`.
  * `imgaug.imgaug.copy_random_state()`.
  * `imgaug.imgaug.derive_random_state()`.
  * `imgaug.imgaug.derive_random_states()`.
  * `imgaug.imgaug.forward_random_state()`.
* [rarely breaking] Removed `imgaug.imgaug.CURRENT_RANDOM_STATE`.
  Use `imgaug.random.get_global_rng()` instead.
* [rarely breaking] Removed `imgaug.imgaug.SEED_MIN_VALUE`.
  Use `imgaug.random.SEED_MIN_VALUE` instead or sample seeds via
  `imgaug.random.generate_seeds_()`.
* [rarely breaking] Removed `imgaug.imgaug.SEED_MAX_VALUE`.
  Use `imgaug.random.SEED_MAX_VALUE` instead or sample seeds via
  `imgaug.random.generate_seeds_()`.
* Optimized RNG handling throughout all augmenters to minimize the number of
  RNG copies. RNGs are now re-used as often as possible. This improves
  performance, but has the disadvantage that adding images to a batch will now
  often affect the samples of the other images in the same batch. E.g.
  previously for a batch of images `A,B,C` and seed `1`, the samples of `A,B,C`
  would remain unchanged if the batch was changed to `A,B,C,D` (provided the
  seed stayed the same). Now, if `D` is added the samples of `A,B,C` may
  change.
* [breaking] The above listed changes will lead to different values being
  sampled for the same seeds (compared to past versions of the library).
* [breaking] The seed for `imgaug`'s global random number generator is now
  sampled from numpy's default random number generator. That means, that every
  run of a program using `imgaug` will by default use a different seed and
  hence result in different samples. Previously, a fixed seed was used,
  resulting in the same samples for each run (unless the seed was manually
  changed to a fixed one). It also means that seeding numpy will automatically
  also seed imgaug (not guarantueed that this behaviour will be kept in
  future releases). The change from fixed to random seed was done, because the
  old (fixed) behaviour didn't match the common practice (and especially not
  numpy's standard behaviour) and hence led to confusion. #408

## Adaptations to numpy 1.17

* [rarely breaking] Deactivated support for `int64` in
  `imgaug.dtypes.clip_()`. This is due to numpy 1.17 turning `int64` to
  `float64` in `numpy.clip()` (possible that this happened in some way
  before 1.17 too). #302
* [rarely breaking] Changed `imgaug.dtypes.clip()` to never clip `int32`
  in-place, as `numpy.clip()` turns it into `float64` since 1.17 (possible
  that this happend in some way before 1.17 too).
* [rarely breaking] Deactivated support for `int64` in
  `ReplaceElementwise`. See `clip` issue above. #302
* [rarely breaking] Changed `parameters.DiscreteUniform` to always return
  arrays of dtype `int32`. Previously it would automatically return
  `int64`. #302
* [rarely breaking] Changed `parameters.Deterministic` to always return
  `int32` for integers and always `float32` for floats. #302
* [rarely breaking] Changed `parameters.Choice` to limit integer
  dtypes to `int32` or lower, uints to `uint32` or lower and floats
  to `float32` or lower. #302
* [rarely breaking] Changed `parameters.Binomial` and `parameters.Poisson`
  to always return `int32`. #302
* [rarely breaking] Changed `parameters.Normal`,
  `parameters.TruncatedNormal`, `parameters.Laplace`,
  `parameters.ChiSquare`, `parameters.Weibull`, `parameters.Uniform` and
  `parameters.Beta` to always return `float32`. #302
* [rarely breaking] Changed `augmenters.arithmetic.Add`,
  `augmenters.arithmetic.AddElementwise`, `augmenters.arithmetic.Multiply`
  and `augmenters.arithmetic.MultiplyElementwise` to no longer internally
  increase itemsize of dtypes by a factor of 2 for
  dtypes `uint16`, `int8` and `uint16`. For `Multiply*` this also
  covers `float16` and `float32`. This protects against crashes due to
  clipping `int64` or `uint64` data. In rare cases this can lead to
  overflows if `image + random samples` or `image * random samples`
  exceeds the value range of `int32` or `uint32`. This change may affect
  various other augmenters that are wrappers around the mentioned ones,
  e.g. `AdditiveGaussianNoise`. #302
* [rarely breaking] Decreased support of dtypes `uint16`, `int8`,
  `int16`, `float16`, `float32` and `bool` in `augmenters.arithmetic.Add`,
  `AddElementwise`, `Multiply` and `MultiplyElementwise` from "yes" to
  "limited". #302
* [rarely breaking] Decreased support of dtype `int64` in
  `augmenters.arithmetic.ReplaceElementwise` from "yes" to "no". This also
  affects all `*Noise` augmenters (e.g. `AdditiveGaussianNoise`,
  `ImpulseNoise`), all `Dropout` augmenters, all `Salt` augmenters and
  all `Pepper` augmenters. #302
* [rarely breaking] Changed `augmenters.contrast.adjust_contrast_log`
  and thereby `LogContrast` to no longer support dtypes `uint32`, `uint64`,
  `int32` and `int64`. #302

## New Augmenters

* Added `augmenters.edges.Canny`, which applies canny edge detection with alpha
  blending and random coloring to images. #316
* Added `augmenters.pooling.AveragePooling`. #317
* Added `augmenters.pooling.MaxPooling`. #317
* Added `augmenters.pooling.MinPooling`. #317
* Added `augmenters.pooling.MedianPooling`. #317
* Added `augmenters.color.AddToHue`, a shortcut for
  `AddToHueAndSaturation(value_hue=...)`. #319
* Added `augmenters.color.AddToSaturation`, a shortcut for
  `AddToHueAndSaturation(value_saturation=...)`. #319
* Added `augmenters.color.WithHueAndSaturation`. #319
* Added `augmenters.color.MultiplyHueAndSaturation`. #319
* Added `augmenters.color.MultiplyHue`. #319
* Added `augmenters.color.MultiplySaturation`. #319
* Added `augmenters.color.KMeansColorQuantization` and corresponding
  `augmenters.color.quantize_colors_kmeans()`. Both deal with quantizing
  similar colors using k-Means clustering. #347
    * Added a check script for `KMeansColorQuantization` under
      `checks/check_kmeans_color_quantization.py`. #347
* Added `augmenters.color.UniformColorQuantization` and corresponding
  `augmenters.color.quantize_colors_uniform()`. Both deal with quantizing
  similar colors using k-Means clustering. #347
* Added `imgaug.augmenters.segmentation.Voronoi`. An augmenter that converts
  an image to a voronoi image.  #348
* Added `imgaug.augmenters.segmentation.UniformVoronoi`, a shortcut for
  `Voronoi(UniformPointsSamper)`. #348
* Added `imgaug.augmenters.segmentation.RegularGridVoronoi`, a shortcut for
  `Voronoi(DropoutPointsSampler(RegularGridPointsSampler))`. #348
* Added `imgaug.augmenters.segmentation.RelativeRegularGridVoronoi`, a shortcut
  for `Voronoi(DropoutPointsSampler(RelativeRegularGridPointsSampler))`. #348

## New Modules

* Added module `imgaug.augmenters.edges`. #316
* Added module `imgaug.augmenters.pooling`. #317
* Added module `imgaug.validation`. The module is intended for functions
  related to the validation of input arguments. #413

## output_buffer_size

* Added argument `output_buffer_size` to `multicore.Pool.imap_batches()`
  and `multicore.Pool.imap_batches_unordered()` to control the maximum number
  of batches in the background augmentation pipeline (allows to limit
  maximum RAM demands). #305
* Changed default `output_buffer_size` in `Augmenter.augment_batches()` from
  "unlimited" to `10*C`, where `C` is the number of logical CPU cores. #417

## Other New Classes

* Added interface `augmenters.edges.BinaryImageColorizerIf`, which
  contains the interface for classes used to convert binary images to RGB
  images. #316
* Added `augmenters.pooling._AbstractPoolingBase`. #317
* Added `augmenters.edges.RandomColorsBinaryImageColorizer`, which
  converts binary images to RGB images by sampling uniformly RGB colors for
  `True` and `False` values. #316
* Added `augmenters.color._AbstractColorQuantization`. #347
* Added `imgaug.augmenters.segmentation.PointsSamplerIf`. An interface for
  classes used for sampling (usually random) coordinate arrays on images. #348
* Added `imgaug.augmenters.segmentation.RegularGridPointsSampler`. A class
  used to generate regular grids of `rows x columns` points on images. #348
* Added `imgaug.augmenters.segmentation.RelativeRegularGridPointsSampler`.
  Similar to `RegularGridPointsSampler`, but number of rows/columns is set
  as fractions of image sizes, leading to more rows/columns for larger
  images. #348
* Added `imgaug.augmenters.segmentation.DropoutPointsSampler`. A class
  used to randomly drop `p` percent of all coordinates sampled by another
  another points sampler. #348
* Added `imgaug.augmenters.segmentation.UniformPointsSampler`. A class used
  to sample `N` points on each image with y-/x-coordinates uniformly sampled
  using the corresponding image height/width. #348
* Added `imgaug.augmenters.segmentation.SubsamplingPointsSampler`. A class
  that ensures that another points sampler does not produce more than
  `N` points by subsampling a random subset of the produced points if `N`
  is exceeded. #348
* Added `imgaug.testutils.ArgCopyingMagicMock`. #413

## Other New Functions

* Added `imgaug.is_np_scalar()`, analogous to `imgaug.is_np_array()`. #366
* Added `dtypes.normalize_dtypes()`. #366
* Added `dtypes.normalize_dtype()`. #366
* Added `dtypes.change_dtypes_()`. #366
* Added `dtypes.change_dtype_()`. #366
* Added `dtypes.increase_itemsize_of_dtype()`. #366
* Added `imgaug.warn()` function. #367
* Added `imgaug.min_pool()`. #369
* Added `imgaug.median_pool()`. #369
* Added `imgaug.compute_paddings_to_reach_multiples_of()`. #369
* Added `imgaug.pad_to_multiples_of()`. #369
* Added `imgaug.imgaug.normalize_random_state()`. #348
* Added `imgaug.augmenters.segmentation._ensure_image_max_size()`. #348
* Added `imgaug.augmenters.segmentation._verify_sample_points_images()`. #348
* Added `imgaug.augmenters.segmentation.segment_voronoi()`, a function that
  converts an image into a voronoi image, i.e. averages the colors within
  voronoi cells placed on the image. #348
* Added `_match_pixels_with_voronoi_cells()`. #348
* Added `_generate_pixel_coords()`. #348
* Added `_compute_avg_segment_colors()`. #348
* Added `_render_segments()`. #348
* Added `augmentables.utils.copy_augmentables`. #410
* Added `augmenters.flip.fliplr()`. #385
* Added `augmenters.flip.flipud()`. #385
* Added `augmenters.color.change_colorspace_()`. #409
* Added `augmenters.color.change_colorspace_batch_()`. #409
* Added `augmenters.arithmetic.add_scalar()`. #411
* Added `augmenters.arithmetic.add_elementwise()`. #411
* Added `augmenters.arithmetic.replace_elementwise_()`. #411
* Added `augmenters.arithmetic.compress_jpg()`. #411
* Added `validation.convert_iterable_to_string_of_types()`. #413
* Added `validation.is_iterable_of()`. #413
* Added `validation.assert_is_iterable_of()`. #413

## Other New Constants

* Added to `imgaug.augmenters.color` the constants `CSPACE_RGB`,
  `CSPACE_BGR`, `CSPACE_GRAY`, `CSPACE_CIE`, `CSPACE_YCrCb`, `CSPACE_HSV`,
  `CSPACE_HLS`, `CSPACE_Lab`, `CSPACE_Luv`, `CSPACE_YUV`, `CSPACE_ALL`. #409

## Other New Arguments

* [rarely breaking] Added a `pad_mode` argument to `imgaug.pool()`,
  `imgaug.avg_pool()`, `imgaug.max_pool()`, `imgaug.min_pool()` and
  `imgaug.median_pool()`. This breaks code relying on the order of the
  functions arguments. #369
* Added to argument `size` of `Resize` the optional keys `short-side` and
  `longer-side`. This adds the ability to resize the shorter and longer sides
  of images (instead of only height/width). #349
* [rarely breaking] Added `value_hue` and `value_saturation` arguments,
  which allow to set individual parameters for hue and saturation
  instead of having to use one parameter for both (they may not be set
  if `value` is already set).
  This changes the order of arguments of the augmenter and code that relied
  on that order will now break.
  This also changes the output of
  `AddToHueAndSaturation.get_parameters()`. #319
* [rarely breaking] Added argument `polygon_recoverer` to
  `augmenters.geometric.PerspectiveTransform`. This changes the order of
  arguments of the augmenter and code that relied on that order will now
  break. #338
* Added attribute `from_colorspace` to `AddToHueAndSaturation`. #409

## Other Removed Concepts

* [rarely breaking] Removed `dtypes.get_minimal_dtype_for_values()`. The
  function was not used anywhere in the library. #366
* [rarely breaking] Removed `dtypes.get_minimal_dtype_by_value_range()`. The
  function was not used anywhere in the library. #366
* [rarely breaking] Removed `Affine.VALID_DTYPES_CV2_ORDER_0`. #407
* [rarely breaking] Removed `Affine.VALID_DTYPES_CV2_ORDER_NOT_0`. #407
* [rarely breaking] Removed `Affine.order_map_skimage_cv2`. #407
* [rarely breaking] Removed `Affine.mode_map_skimage_cv2`. #407
* [rarely breaking] Removed attributes `colorspace_changer` and
  `colorspace_changer_inv` from `AddToHueAndSaturation`. #409
* [rarely breaking] Removed class constant `ALLOW_DTYPES_CUSTOM_MINMAX`
  from `Invert`. #411
* [rarely breaking] Removed attribute `dtype_kind_to_invert_func` from
  `Invert`. #411
* [rarely breaking] Removed attribute `maximum_quality` from
  `JpegCompression`. #411
* [rarely breaking] Removed attribute `minimum_quality` from
  `JpegCompression`. #411
* [rarely breaking] Removed argument `affects` from
  `dtypes.promote_array_dtypes_()` as it was unnecessary and not used anywhere
  in the library. #366
* [rarely breaking] Removed method
  `ElasticTransformation.generate_shift_maps()`. Use
  `ElasticTransformation._generate_shift_maps()` instead. #413
* [rarely breaking] Removed method `ElasticTransformation.map_coordinates()`.
  Use `ElasticTransformation._map_coordinates()` instead. #413

## Performance

* Replaced all calls of `imgaug.do_assert` with ordinary `assert`
  statements. This is a bit less secure, but should overall improve
  performance. #387
* Improved performance of `augmenters.flip.Fliplr`. #385
* Improved performance of `augmenters.flip.Flipud`. #385

## Deprecation

* Marked the following functions as deprecated (#398):
  * `imgaug.augmenters.meta.clip_augmented_image_`
  * `imgaug.augmenters.meta.clip_augmented_image`
  * `imgaug.augmenters.meta.clip_augmented_images_`
  * `imgaug.augmenters.meta.clip_augmented_images`
* Marked `imgaug.augmenters.arithmetic.ContrastNormalization` as deprecated.
  Use `imgaug.augmenters.contrast.LinearContrast` instead. #396
* Marked argument `X` of `imgaug.augmentables.kps.compute_geometric_median()`
  as deprecated. Use argument `points` instead. #402
* Marked `cval` in `imgaug.pool()`, `imgaug.avg_pool()` and `imgaug.max_pool()`
  as deprecated. Use `pad_cval` instead. #369

## Refactorings

* Refactored `augmenters.arithmetic` to improve code quality and
  docstrings. #328
* Refactored `augmenters.segmentation` to improve code quality and
  docstrings. #334
* Refactored `augmenters/convolutional.py` to improve code quality and
  docstrings. #335
* Refactored `augmenters/weather.py` to improve code quality and
  docstrings. #336
* Refactored `multicore` to improve code quality and
  docstrings. #367
  * Improved error messages in `multicore`.
* Refactored `imgaug.pool()` to use `imgaug.pad()` for image padding. #369
* Refactored `augmenters.pooling.MedianPooling` to use
  `imgaug.median_pool()`. #369
* Refactored `augmenters.pooling.MinPooling` to use `imgaug.min_pool()`. #369
* Improved code style and documentation of (#389, #402):
    * `imgaug.augmentables.bbs`.
    * `imgaug.augmentables.heatmaps`.
    * `imgaug.augmentables.kps`.
    * `imgaug.augmentables.lines`.
    * `imgaug.augmentables.normalization`.
    * `imgaug.augmentables.polys`.
    * `imgaug.augmentables.segmaps`.
    * `imgaug.augmentables.utils`.
    * `imgaug.imgaug`.
    * `imgaug.parameters`.
    * `imgaug.augmenters.weather`.
    * `imgaug.augmenters.size`.
    * `imgaug.augmenters.segmentation`.
    * `imgaug.augmenters.meta`.
    * `imgaug.augmenters.geometric`.
    * `imgaug.augmenters.flip`.
    * `imgaug.augmenters.contrast`.
    * `imgaug.augmenters.blur`.
    * `imgaug.augmenters.blend`.
    * `imgaug.augmenters.weather`.
* Refactored all calls of `warnings.warn()` to use `imgaug.imgaug.warn()
  instead. #401
* [rarely breaking] Refactored most of the augmenters from functions to
  classes. Previously, some augmenters were functions that returned an
  instance of another augmenter (with adjusted hyperparameters) when being
  called. Aside from a few corner cases, these have been switched to classes
  inheriting from the augmenters that were previously returned. This should
  make some outputs less confusing (e.g. `print(A())` does no longer lead to
  class `B` being printed). All arguments stayed the same and this is not
  expected to affect any user code negatively. The augmenters listed below are
  affected by this change. #396
    * `imgaug.augmenters.arithmetic.AdditiveGaussianNoise`
    * `imgaug.augmenters.arithmetic.AdditiveLaplaceNoise`
    * `imgaug.augmenters.arithmetic.AdditivePoissonNoise`
    * `imgaug.augmenters.arithmetic.Dropout`
    * `imgaug.augmenters.arithmetic.CoarseDropout`
    * `imgaug.augmenters.arithmetic.ImpulseNoise`
    * `imgaug.augmenters.arithmetic.SaltAndPepper`
    * `imgaug.augmenters.arithmetic.CoarseSaltAndPepper`
    * `imgaug.augmenters.arithmetic.Salt`
    * `imgaug.augmenters.arithmetic.CoarseSalt`
    * `imgaug.augmenters.arithmetic.Pepper`
    * `imgaug.augmenters.arithmetic.CoarsePepper`
    * `imgaug.augmenters.blend.SimplexNoiseAlpha`
    * `imgaug.augmenters.blend.FrequencyNoiseAlpha`
    * `imgaug.augmenters.blur.MotionBlur`
    * `imgaug.augmenters.contrast.MultiplyHueAndSaturation`
    * `imgaug.augmenters.contrast.MultiplyHue`
    * `imgaug.augmenters.contrast.MultiplySaturation`
    * `imgaug.augmenters.contrast.AddToHue`
    * `imgaug.augmenters.contrast.AddToSaturation`
    * `imgaug.augmenters.contrast.Grayscale`
    * `imgaug.augmenters.contrast.GammaContrast`
    * `imgaug.augmenters.contrast.SigmoidContrast`
    * `imgaug.augmenters.contrast.LogContrast`
    * `imgaug.augmenters.contrast.LinearContrast`
    * `imgaug.augmenters.convolutional.Sharpen`
    * `imgaug.augmenters.convolutional.Emboss`
    * `imgaug.augmenters.convolutional.EdgeDetect`
    * `imgaug.augmenters.convolutional.DirectedEdgeDetect`
    * `imgaug.augmenters.meta.OneOf`
    * `imgaug.augmenters.meta.AssertLambda`
    * `imgaug.augmenters.meta.AssertShape`
    * `imgaug.augmenters.size.Pad`
    * `imgaug.augmenters.size.Crop`
    * `imgaug.augmenters.weather.Clouds`
    * `imgaug.augmenters.weather.Fog`
    * `imgaug.augmenters.weather.Snowflakes`
* Refactored `Affine` to improve code quality and minimize code
  duplication. #407
* Refactored `CropAndPad` to improve code quality and minimize code
  duplication. #407
* Refactored module `size` to decrease code duplication between different
  augmenters. #407
* Moved matrix generation logic of augmenters in module `convolutional`
  to classes, one per augmenter (i.e. one per category of convolutional
  matrix). This should avoid errors related to pickling of functions. #407
* Refactored color augmenters to use `change_colorspace_()` and
  `change_colorspace_batch_()`. #409
* Refactored `Alpha` to decrease code duplication. #410
* Refactored `AlphaElementwise` to decrease code duplication. #410
* Refactored `Add` to use `imgaug.augmenters.arithmetic.add_scalar()`. #411
* Refactored `AddElementwise` to use
  `imgaug.augmenters.arithmetic.add_elementwise()`. #411
* Refactored `ReplaceElementwise` to use
  `imgaug.augmenters.arithmetic.replace_elementwise_()`. #411
* Refactored `JpegCompression` to use
  `imgaug.augmenters.arithmetic.compress_jpg()`. #411
* Refactored `AddToHueAndSaturation` to decrease code duplication and improve
  code quality. #319
* Refactored `Affine` to improve code quality and decrease code
  duplication. #413
* Refactored `PiecewiseAffine` to improve code quality and decrease code
  duplication. #413
* Refactored `PerspectiveTransform` to improve code quality and decrease code
  duplication. #413
* Refactored `ElasticTransformation` to improve code quality and decrease code
  duplication. #413
* Refactored `Rot90` to improve code quality and decrease code
  duplication. #413
* Refactored `Augmenter.augment_images()`, `Augmenter.augment_heatmaps()`,
  `Augmenter.augment_segmentation_maps()`, `Augmenter.augment_polygons()`,
  `Augmenter.augment_line_strings()` and `Augmenter._augment_coord_augables()`
  to improve code quality and remove redundancies. #413
* Refactored `imgaug.imgaug.imresize_single_image()`. #413
* Refactored `Sequential` to reduce code duplication. #413
* Refactored `SomeOf` to improve code quality. #413
* Refactored `Sometimes` to reduce code duplication. #413
* Refactored `AssertShape` to reduce code duplication. #413
* Refactored `ChannelShuffle` to improve code quality. #413
* Refactored `dtypes.py` to improve code quality. #366
* Refactored `dtypes.promote_array_dtypes_()` to use
  `dtypes.change_dtypes_()`. #366
* Refactored `dtypes.get_minimal_dtype()` to use
  `dtypes.increase_itemsize_of_dtype()`. #366
* Renamed `dtypes.restore_dtypes_()` to `dtypes.change_dtypes_()`. (Old name
  still exists too and redirects to new name. Not yet marked as
  deprecated.) #366

## Other Changes

* [rarely breaking] Changed colorspace transformations throughout the
  library to fail if the input image does not have three channels. #409
* Changed colorspace transformations throughout the library to also
  support `YUV` colorspace. #409
* [rarely breaking] Changed `AlphaElementwise` to verify for keypoint
  and line string augmentation that the number of coordinates before/after
  augmentation does not change. Previously this was allowed. This also
  affects `SigmoidNoiseAlpha` and `FrequenceNoiseAlpha`. #410
* [rarely breaking] Changed `AlphaElementwise` to use for keypoint,
  line string and bounding box augmentation a pointwise approach, where
  per coordinate a decision is made whether the new coordinate from the
  first branch's (augmented) results or the second branch's (augmented)
  results are used. The decision is based on the average alpha mask value
  at the xy-location of the coordinate. For polygons, the old mode is
  still used where either all coordinates from the first branch's results
  or the second branch's results are used. This also affects
  `SigmoidNoiseAlpha` and `FrequenceNoiseAlpha`. #410
* Improved error messages of `dtypes.restore_dtypes_()`. #366

## Other Minor Changes

* Increased `max_distance` thresholds for `almost_equals()`,
  `exterior_almost_equals()` and `coords_almost_equals()` in `Polygon` and
  `LineString` from `1e-6` to `1e-4`. This should fix false-negative problems
  related to float inaccuracies.
* Changed `_ConcavePolygonRecoverer` to not search for segment intersection
  points in polygons with very large absolute coordinate values.
  This prevents rare errors due to floating point inaccuracies. #338
* Changed `_ConcavePolygonRecoverer` to raise warnings instead of throwing
  exceptions when the underlying search for segment intersection points
  crashes. #338
* Added check to `dtypes.gate_dtypes()` verifying that arguments `allowed`
  and `disallowed` have no intersection. #346
* Changed `dtypes.get_value_range_of_dtype()` to return a float as the center
  value of `uint` dtypes. #366
* Changed `multicore.Pool` to produce a warning if it cannot find or call the
  function `multiprocessing.cpu_count()` instead of silently failing.
  (In both cases it falls back to a default value.) #367
* Changed the default `pad_mode` of `avg_pool` from `constant` (`cval=128`)
  to `reflect`. #369
* Changed the default `pad_mode` of `max_pool` from `constant` (`cval=0`)
  to `edge`. #369
* Changed the default `pad_mode` of `min_pool` from `constant` (`cval=255`)
  to `edge`. #369
* Changed the default `pad_mode` of `median_pool` from `constant`
  (`cval=128`) to `reflect`. #369
* Changed `imgaug.imgaug.pad` to automatically clip the `cval` argument
  to the value range of the array to be padded. #407
* [rarely breaking] Changed `KeypointsOnImage.from_keypoints_image()` to
  return `(x+0.5, y+0.5)` instead of `(x, y)` where `(x, y)` denotes the
  coordinates of the pixel in which a maximum was found. This change matches
  the standard that all pixels are given with subpixel accuracy and therefore
  any whole pixel with a maximum should denote the coordinates of that
  pixel's center. #413
* Removed image-channel check for cv2-based warp in `Affine`. Images with any
  channel number can now be warped using the cv2 backend (previously: only
  `<=4`, others would be warped via skimage). #381
* [rarely breaking] The `value` parameter in
  `augmenters.color.AddToHueAndSaturation` is now interpreted by the
  augmenter to return first the hue and then the saturation value to add,
  instead of the other way round. (This isn't expected to affect
  anybody.) #319
* Added output `from_colorspace` to
  `AddToHueAndSaturation.get_parameters()`. #409
* Added dtype gating to `dtypes.clip_()`.
* Changed all dtype-related functions to accept also dtypes given as
  string names, numpy arrays, numpy scalars or dtype functions. #366
* Changed `dtypes.restore_dtypes_()` so that if `images` is a list of length
  `N` and `dtypes` is a list of length `M` and `N!=M`, the function now raises
  an `AssertionError`. #366
* Changed `dtypes.restore_dtypes_()` to ignore the argument `round` if the
  input array does not have a float dtype. #366
* Removed restrictions of `value` parameter in `AddElementwise`.
  The value range is now no longer limited to `[-255, 255]` and floats
  are now allowed. #411

## New Scripts

* Added a check script for `UniformColorQuantization` in
  `checks/check_uniform_color_quantization.py`. #347
* Added a check script for `Voronoi` in `checks/check_voronoi.py`. #348
* Added a check script for flip performance measurments under
  `checks/check_flip_performance.py`. #385

## Other

* Added the library to `conda-forge` so it can now be installed via
  `conda install imgaug` (provided the conda-forge channel was added
  before that). #320 #339
* Changed dependency `opencv-python` to `opencv-python-headless`.
  This should improve support for some system without GUIs.
* Added dependency `pytest-subtests` for the library's unittests. #366
* Improved the docstrings of most augmenters and added code examples. #302
* Added error messages to `assert` statements throughout the library. #387
* Removed the requirement to implement `_augment_keypoints()` and
  `_augment_heatmaps()` in augmenters. The methods now default to doing
  nothing. Also removed all such noop-implementations of these methods from
  all augmenters. #380
* Increased minimum version requirement for `scikit-image` to
  `0.14.2`. #377, #399
* Renamed `imgaug/external/poly_point_isect.py` to
  `imgaug/external/poly_point_isect_py3.py.bak`.
  The file is in the library only for completeness and contains python3 syntax.
  `poly_point_isect_py2py3.py` is actually used.

## Fixes

* Fixed an issue with `Polygon.clip_out_of_image()`,
  which would lead to exceptions if a polygon had overlap with an image,
  but not a single one of its points was inside that image plane.
* Fixed `multicore` methods falsely not accepting
  `augmentables.batches.UnnormalizedBatch`.
* `Rot90` now uses subpixel-based coordinate remapping.
  I.e. any coordinate `(x, y)` will be mapped to `(H-y, x)` for a rotation by
  90deg.
  Previously, an integer-based remapping to `(H-y-1, x)` was used.
  Coordinates are e.g. used by keypoints, bounding boxes or polygons.
* `augmenters.arithmetic.Invert`
    * [rarely breaking] If `min_value` and/or `max_value` arguments were
      set, `uint64` is no longer a valid input array dtype for `Invert`.
      This is due to a conversion to `float64` resulting in loss of resolution.
    * Fixed `Invert` in rare cases restoring dtypes improperly.
* Fixed `dtypes.gate_dtypes()` crashing if the input was one or more numpy
  scalars instead of numpy arrays or dtypes.
* Fixed `augmenters.geometric.PerspectiveTransform` producing invalid
  polygons (more often with higher `scale` values). #338
* Fixed errors caused by `external/poly_point_isect_py2py3.py` related to
  floating point inaccuracies (changed an epsilon from `1e-10` to `1e-4`,
  rounded some floats). #338
* Fixed `Superpixels` breaking when a sampled `n_segments` was `<=0`.
  `n_segments` is now treated as `1` in these cases.
* Fixed `ReplaceElementwise` both allowing and disallowing dtype `int64`. #346
* Fixed `BoundingBox.deepcopy()` creating only shallow copies of labels. #356
* Fixed `dtypes.change_dtypes_()` #366
    * Fixed argument `round` being ignored if input images were a list.
    * Fixed failure if input images were a list and dtypes a single numpy
      dtype function.
* Fixed `dtypes.get_minimal_dtype()` failing if argument `arrays` contained
  not *exactly* two items. #366
* Fixed calls of `CloudLayer.get_parameters()` resulting in errors. #309
* Fixed `SimplexNoiseAlpha` and `FrequencyNoiseAlpha` not handling
  `sigmoid` argument correctly. #343
* Fixed `SnowflakesLayer` crashing for grayscale images. #345
* Fixed `Affine` heatmap augmentation crashing for arrays with more than
  four channels and `order!=0`. #381
* Fixed an outdated error message in `Affine`. #381
* Fixed `Polygon.clip_out_of_image()` crashing if the intersection between
  polygon and image plane was an edge or point. #382
* Fixed `Polygon.clip_out_of_image()` potentially failing for polygons
  containing two or fewer points. #382
* Fixed `Polygon.is_out_of_image()` returning wrong values if the image plane
  was fully contained inside the polygon with no intersection between the
  image plane and the polygon edge. #382
* Fixed  `Fliplr` and `Flipud` using for coordinate-based inputs and image-like
  inputs slightly different conditions for when to actually apply
  augmentations. #385
* Fixed `Convolve` using an overly restrictive check when validating inputs
  for `matrix` w.r.t. whether they are callables. The check should now also
  support class methods (and possibly various other callables). #407
* Fixed `CropAndPad`, `Pad` and `PadToFixedSize` still clipping `cval` samples
  to the `uint8`. They now clip to the input array's dtype's value range. #407
* Fixed `WithColorspace` not propagating polygons to child augmenters. #409
* Fixed `WithHueAndSaturation` not propagating segmentation maps and polygons
  to child augmenters. #409
* Fixed `AlphaElementwise` to blend coordinates (for keypoints, polygons,
  line strings) on a point-by-point basis following the image's average
  alpha value in the sampled alpha mask of the point's coordinate.
  Previously, the average over the whole mask was used and then either all
  points of the first branch or all of the second branch were used as the
  augmentation output. This also affects `SimplexNoiseAlpha` and
  `FrequencyNoiseAlpha`. #410
* Fixed many augmenters and helper functions producing errors if the height,
  width and/or channels of input arrays were exactly `0` or the channels
  were `>512`. #433
* Fixed `Rot90` not supporting `imgaug.ALL`. #434
* Fixed `PiecewiseAffine` possibly generating samples for non-image data
  when using `absolute_scale=True` that were not well aligned with the
  corresponding images. #437

repository: Wastoon/imgaug

repo_name: Wastoon/imgaug


text:
---
layout: post
theme: jekyll-theme-modernist
title: "Cloud Director V to T Migration Videos"
date: 2023-03-31
comments: true
excerpt: Links to two videos I created with my colleage Joesph Polcar on V to T migration for Cloud Director

---

Recently I recorded a couple videos with my teammate, Joseph Polcar, on Cloud Director V to T migration. The first video provides an overview of the migration tool, running and evaluating an assessment, and other steps needed to prepare for a migration. The second video provides an overview of the YAML configuration file used by the migration tool, a walkthrough of what happens during each phase of the migration, and how to perform a rollback. Hopefully you find these videos helpful. Feel free to leave any questions in the comments, or contact me in [LinkedIn](https://www.linkedin.com/in/ethernet0/?lipi=urn%3Ali%3Apage%3Ad_flagship3_feed%3BigirzDRSQ9yap29XiT2WUA%3D%3D). :v:


text:
---
title: Strangers in the Heart of Europe
image: /img/series/strangers-in-the-heart-of-europe.jpg
---
<iframe src="https://player.vimeo.com/video/307082982?title=0&byline=0&portrait=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen></iframe>

## Strangers in the Heart of Europe
Country: Germany | Genre: Documentary | Writer & Director: Jan Paschen

Homeland and identity are not fixed concepts, but flexible constructs that mean something different for everyone. "Strangers in the Heart of Europe" portrays Carpathian Germans in Eastern Slovakia. "That's the worst thing, that I don’t know who I am.", artist Helmut Bistika is one of five protagonists, portrayed in this documentary series, that investigates the questions of homeland and identity.

repository: jensbambauer/seriale

gha_language: CSS

repo_name: jensbambauer/seriale


text:
# `SimpleSDMLayers.jl`: A Basis for Species Distribution Modelling in Julia

This repository contains the resources for our JuliaCon 2020 poster presenting
`SimpleSDMLayers.jl`, a package for species distribution modelling in _Julia_.
Take a look at the poster [here](juliacon-poster.pdf).

Interested to try to package? Check out this [script](main.jl) or try running
this [NextJournal notebook](https://nextjournal.com/gabrieldansereau/SimpleSDMLayers-JuliaCon2020-demo/).

For more advanced examples, check out the [documentation for the package](https://ecojulia.github.io/SimpleSDMLayers.jl/latest/).


text:
Progress
========

Show progress reports for Jira versions.

Build
-----

    $ npm install
    $ make

Run
---

Create a config file:

    module.exports =
      port: 3000
      jira:
        url: 'https://jira.example.com'

Run `app/bin/progress` to start the app:

    $ ./app/bin/progress

Browse to `http://localhost:3000` (replace port number as appropriate).

repository: afternoon/progress

repo_name: afternoon/progress


text:
Mage
====

Send locally stored videos to your Smart TV or other UPnP/DLNA media renderer.
This is intended as the simplest approach for sending a video through the local
network.

Spellcast works by setting up a temporary HTTP server that hosts only the video
file, and sending its URI to the rendering device via UPnP protocols.

## Setup

This is a Python 3 application. It uses
[Twisted](https://pypi.org/project/Twisted/) and
[requests](https://pypi.org/project/requests/). For your convenience you can
easily install it with pip:

```sh
python3 -m pip install spellcast
```

Or, alternatively, you can set everything up in a virtual environment as
follows:

```sh
python3 -m venv venv
source venv/bin/activate
python3 -m pip install -r requirements.txt
```

## Usage

Pass the video file as argument, and Spellcast casts to the first media renderer
found on the network:

```sh
cast /path/to/video.mp4
```

Or:

```sh
python -m spellcast /path/to/video.mp4
```

## Acknowledgements

This implementation borrows a lot from the
[video2smarttv](https://github.com/probonopd/video2smarttv) project by
[probonopd](https://github.com/probonopd), which in turn uses
[dankrause's](https://github.com/dankrause) solution for [SSDP
discovery](https://gist.github.com/dankrause/6000248). Thanks go to all
developers involved!

repository: lillanes/spellcast

repo_name: lillanes/spellcast


text:
# Website account permissions

## Story

In this exercise you'll be checking permissions of user accounts on an internet forum. The forum supports three different permissions:

- Read
- Write
- Delete

There are three types of accounts, each with different default permissions:

- Guests: can read posts.
- Users: can read and write posts.
- Moderators: can read, write and delete posts.

Sometimes individual permissions are modified, for example giving a guest account the permission to also write posts.

## Tasks

These are example tasks that fit the website permissions exercise:

- Get default permissions for an account type
- Grant a permission
- Revoke a permission
- Check for a permission

## Implementations

- [C#][implementation-csharp] (reference implementation)

## Related

- [`concepts/bitwise_manipulation`][concepts-bitwise_manipulation]
- [`types/bit`][types-bit]

[concepts-bitwise_manipulation]: ../concepts/bitwise_manipulation.md
[types-bit]: ../types/bit.md
[implementation-csharp]: ../../languages/csharp/exercises/concept/flag-enums/.docs/instructions.md


text:
### [CVE-2020-26943](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26943)
![](https://img.shields.io/static/v1?label=Product&message=n%2Fa&color=blue)
![](https://img.shields.io/static/v1?label=Version&message=n%2Fa&color=blue)
![](https://img.shields.io/static/v1?label=Vulnerability&message=n%2Fa&color=brighgreen)

### Description

An issue was discovered in OpenStack blazar-dashboard before 1.3.1, 2.0.0, and 3.0.0. A user allowed to access the Blazar dashboard in Horizon may trigger code execution on the Horizon host as the user the Horizon service runs under (because the Python eval function is used). This may result in Horizon host unauthorized access and further compromise of the Horizon service. All setups using the Horizon dashboard with the blazar-dashboard plugin are affected.

### POC

#### Reference
- https://launchpad.net/bugs/1895688

#### Github
No PoCs found on GitHub currently.

repository: trickest/cve

repo_name: trickest/cve


text:
---
# Display name
name: Giuseppe De Laurentis

# Username (this should match the folder name)
authors:
- admin

# Is this the primary user of the site?
superuser: true

# Role/position
role: PostDoc

# Organizations/Affiliations
organizations:
- name: Paul Scherrer Institut (PSI)
  url: "https://www.psi.ch/en"
# - name: Physikalisches Institut - Albert-Ludwigs-Universität Freiburg
#   url:
# - name: Institute for Particle Physics Phenomenology - Durham University
#   url: "https://www.ippp.dur.ac.uk/"

# Short bio (displayed in user profile at end of posts)
bio: Counting quarks and gluons

interests:
- Scattering Amplitudes
- Quantum Field Theories
- Scientific Computing
- Algebraic Geometry

education:
  courses:
  - course: PhD in High Energy Physics
    institution: Durham University
    year: 2016 - 2020
  - course: First Class MPhys
    institution: University of Oxford
    year: 2012 - 2016
  - course: Summer Term
    institution: Harvard University
    year: 2011
  - course: Summer Term
    institution: Stanford University
    year: 2010

# Social/Academic Networking
# For available icons, see: https://sourcethemes.com/academic/docs/widgets/#icons
#   For an email link, use "fas" icon pack, "envelope" icon, and a link in the
#   form<EMAIL_ADDRESS>or "#contact" for contact widget.
social:
- icon: envelope
  icon_pack: fas
  link<EMAIL_ADDRESS># For a direct email link, use<EMAIL_ADDRESS>- icon: arxiv
  icon_pack: ai
  link: https://arxiv.org/search/hep-ph?searchtype=author&query=De+Laurentis%2C+G
- icon: inspire
  icon_pack: ai
  link: http://inspirehep.net/author/profile/G.De.Laurentis.1
- icon: orcid
  icon_pack: ai
  link: https://orcid.org/0000-0001-5252-455X
- icon: github
  icon_pack: fab
  link: https://github.com/GDeLaurentis
# Link to a PDF of your resume/CV from the About widget.
# To enable, copy your resume/CV to `static/files/cv.pdf` and uncomment the lines below.
- icon: cv
  icon_pack: ai
  link: files/cv.pdf

# Enter email to display Gravatar (if Gravatar enabled in Config)
email: ""

# Organizational groups that you belong to (for People widget)
#   Set this to `[]` or comment out if you are not using People widget.
user_groups:
- Researchers
- Visitors
---

Hello! I am a postdoctoral researcher at PSI, working on high energy
physics theory and phenomenology.

gha_language: Jupyter Notebook


text:
# 天气应用

:point_right: [在线版本](https://humilitas.github.io/weather-app/)

## 快速启动

进入根目录，执行 `yarn start`，即可运行开发服务器。

访问  http://localhost:3000 查看效果。

## 构建

进入根目录，执行 `yarn build`，即可构建生产版本。

关于如何部署 React 项目，请查看官方文档。

---

# Weather App
See live version at https://humilitas.github.io/weather-app/.

## Available Scripts

In the project directory, you can run:

`yarn start`

Runs the app in the development mode.

Open http://localhost:3000 to view it in the browser.

The page will reload if you make edits.

You will also see any lint errors in the console.

`yarn build`

Builds the app for production to the build folder.

It correctly bundles React in production mode and optimizes the build for the best performance.

The build is minified and the filenames include the hashes.

Your app is ready to be deployed!

See the section about deployment for more information.

repository: Humilitas/weather-app

repo_name: Humilitas/weather-app


text:
# Ruby SendX API

**NOTE:** All API calls contain 2 parameters - 'api_key' and 'team_id'. These can be inferred from your settings page 'https://app.sendx.io/setting' under the sections 'Api Key' and 'Team Id' respectively.

SendX API has two methods:

* [Identify](#identify_api)
* [Track](#track_api)

##  Identify API Method

Identify API Method is used to attach data to a visitor. If a contact is not yet created then we will create the contact. In case contact already exists then we update it.

**Example Request:**

>
    {
      email<EMAIL_ADDRESS>
      firstName: "John",
      lastName: "Doe",
      birthday: "1989-03-03",
      customFields: { "Designation": "Software Engineer", "Age": "27", "Experience": "5"},
      tags: ["Developer", "API Team"],
     }

Note that tags are an array of strings. In case they don't exist previously then API will create them and associate them with the contact.

Similarly if a custom field doesn't exist then it is first created and then associated with the contact along-with the corresponding value. In case custom field exists already then we simply update the value of it for the aforementioned contact.

We don't delete any of the properties based on identify call. What this means is that if for the same contact you did two API calls like:

**API Call A**

>
    {
       email<EMAIL_ADDRESS>
       firstName: "John",
       birthday: "1989-03-03",
       customFields: { "Designation": "Software Engineer"},
       tags: ["Developer"],
    }

**API Call B**

>
    {
      email<EMAIL_ADDRESS>
      customFields: { "Age": "29"},
      tags: ["API Team"],
    }

The final contact will have firstName as **John**, birthday as **1989-03-03** present. Also both tags **Developer** and **API Team** shall be present alongwith custom fields **Designation** and **Age**.

**Properties:**

* **firstName**: type string
* **lastName**: type string
* **email**: type string
* **newEmail**: type string
* **company**: type string
* **birthday**: type string with format **YYYY-MM-DD** eg: 2016-11-21
* **customFields**: type map[string]string
* **tags**: type array of string

In case email of an already existing contact needs to be updated then specify current email under email property and updated email under newEmail property.

**Response:**

>
{
  "status": "200",
  "message": "OK",
  "data": {
    "encryptedTeamId": "CLdh9Ig5GLIN1u8gTRvoja",
    "encryptedId": "c9QF63nrBenCaAXe660byz",
    "tags": [
      "API Team",
      "Tech"
    ],
    "firstName": "John",
    "lastName": "Doe",
    "email"<EMAIL_ADDRESS>    "company": "",
    "birthday": "1989-03-03",
    "customFields": {
      "Age": "29",
      "Designation": "Software Engineer"
    }
  }
}

##  Track API Method

Track API Method is used to track a contact. In the track API object you can:

* **addTags**:
* **removeTags**:

You can have automation rules based on tag addition as well as tag removal and they will get executed. For eg:

* On **user registration** tag start onboarding drip for him / her.
* **Account Upgrade** tag start add user to paid user list and start account expansion drip.
* On removal of **trial user** tag start upsell trial completed users drip.

**Example Request:**

>
  {
     "addTags": ["blogger", "female"]
  }

>
  {
     "addTags": ["paid user"],
     "removeTags": ["trial user"]
  }

**Response:**

>
   {
    "status": "200",
    "message": "OK",
    "data": "success"
   }

This SDK is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project:

- API version: v1
- Package version: 1.0.0
- Build package: class io.swagger.codegen.languages.RubyClientCodegen

## Installation

### Build a gem

To build the Ruby code into a gem:

```shell
gem build swagger_client.gemspec
```

Then either install the gem locally:

```shell
gem install ./swagger_client-1.0.0.gem
```
(for development, run `gem install --dev ./swagger_client-1.0.0.gem` to install the development dependencies)

or publish the gem to a gem hosting service, e.g. [RubyGems](https://rubygems.org/).

Finally add this to the Gemfile:

    gem 'swagger_client', '~> 1.0.0'

### Install from Git

If the Ruby gem is hosted at a git repository: https://github.com/YOUR_GIT_USERNAME/YOUR_GIT_REPO, then add the following in the Gemfile:

    gem 'swagger_client', :git => 'https://github.com/YOUR_GIT_USERNAME/YOUR_GIT_REPO.git'

### Include the Ruby code directly

Include the Ruby code directly using `-I` as follows:

```shell
ruby -Ilib script.rb
```

## Getting Started

Please follow the [installation](#installation) procedure and then run the following code:
```ruby
# Load the gem
require 'swagger_client'

api_instance = SwaggerClient::ContactApi.new

api_key = "api_key_example" # String |

team_id = "team_id_example" # String |

contact_details = SwaggerClient::ContactRequest.new # ContactRequest | Contact details
contact_details.email =<EMAIL_ADDRESS>

begin
  #Identify a contact as user
  result = api_instance.contact_identify_post(api_key, team_id, contact_details)
  p result
rescue SwaggerClient::ApiError => e
  puts "Exception when calling ContactApi->contact_identify_post: #{e}"
end

track_details = SwaggerClient::TrackRequest.new # TrackRequest | Track details
track_details.add_tags = ["paid user", "startup plan"]
track_details.remove_tags = ["trial user"]

begin
  #Track a contact
  result = api_instance.contact_track_post(api_key, team_id<EMAIL_ADDRESS>track_details)
  p result
rescue SwaggerClient::ApiError => e
  puts "Exception when calling ContactApi->contact_track_post: #{e}"
end

```

## Documentation for API Endpoints

All URIs are relative to *http://app.sendx.io/api/v1*

Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*SwaggerClient::ContactApi* | [**contact_identify_post**](docs/ContactApi.md#contact_identify_post) | **POST** /contact/identify | Identify a contact as user
*SwaggerClient::ContactApi* | [**contact_track_post**](docs/ContactApi.md#contact_track_post) | **POST** /contact/track | Add tracking info using tags to a contact

## Documentation for Models

 - [SwaggerClient::Contact](docs/Contact.md)
 - [SwaggerClient::ContactRequest](docs/ContactRequest.md)
 - [SwaggerClient::ContactResponse](docs/ContactResponse.md)
 - [SwaggerClient::TrackRequest](docs/TrackRequest.md)
 - [SwaggerClient::TrackResponse](docs/TrackResponse.md)

## Documentation for Authorization

 All endpoints do not require authorization.

repository: sendx/sendx-api-ruby

gha_language: Ruby

repo_name: sendx/sendx-api-ruby


text:
## Computational Social Choice 2020
_Gerrymandering Attempts with Uncertain Voters_
> [MBWhitestone](https://github.com/MBWhitestone), [csirika](https://github.com/csirika) & [stefanklut](https://github.com/stefanklut)

This repository contains the source code for an investigation on the impact of swing voters in two-party gerrymandering.

### Files
- `astar.py`: code for the heuristic search algorithm
- `gerrymander.py`: classes implementing the gerrymander model
- `LICENSE`: our code is available under the MIT license
- `readme.md`: this file containing a readme of the repository
- `results_0D.txt`: results for the 0-dimensional model
- `results_1D.txt`: results for the 1-dimensional model
- `results_2D.txt`: results for the 2-dimensional model

### Requirements
For running the code you need a working version of `Python3` with the `numpy` and `tqdm` libraries.


text:
# SEO 101

Search Engine Optimization is a tricky word.

There was a time when you could game the system quite easily; now it’s a bit more difficult.

First off, Google has a few preferences that one is encouraged to follow.

We need to provide some metadata; as well,Google prefers for sites to be mobile-accessible. As well, for them to be updated regularly.

One is able to register with Google’s[ Search Console](https://search.google.com/search-console), and get feedback on your website’s Search Engine readability!

## SiteMaps

Google loves these, and uses them to scrape your website for their search engine!

## Mobile First

Google also loves this, most folks use their phones to traverse the net these days. Making sure your website is responsive to their smaller screens will boost your website’s rating!

## Consistent Content

Remember that sitemap, for scraping?

If Googles see that you are updating your website with new content often and consistently, it likes that too!


text:
---
layout: post
title: On Cloud 9
categories: [Uncategorized]
tags: [Untagged]
comments: false
show-avatar: true
---

On my 1st participation in any of the competition held in college, in my 1st ever "Fest", me and friend stood 1st, crossing all our seniors who were from 4th, 6th and 8th semester.

The competition was, Technical Paper Presentation, where we had to bark on a particular topic. The topic we chose was Web 2.0. After we completed our presentation, it was our Question/Answer time with the judges. One of the judge said, "First let me say that this is the best presentation I have ever seen so far."

Then, the rest of the Q/A went fine. After we came out, we were like, what the hell did we speak, we couldn't even re-collect that. It was on-the-spot. We didn't cram/by-heart anything, and ofcourse were nervous, but had this much confidence that whatever was present in the slide, we had full knowledge of it.

After 4-5 hours, my friend came and told me that we came 1st

beating around 5-6 seniors (don't know exactly though). We didn't have any equal aged participants.

1st Prize was certificate along with a cash prize of Rs.4500. So, me and my friend divided the loot :P, and I came back with Rs.2250 and a certificate, which I can't control my eyes from staring at.

repository: Pragith/pragith

gha_license_id: NOASSERTION

repo_name: Pragith/pragith