Okay, so just a little introduction because I've got a lot to get through and I don't want to spend Very much time on myself. My name is Michael Jackson. I I'm still alive. I Yeah, everybody's telling me like dude I thought you died so I am originally from California but I live here now in Utah I Work as an independent Ruby contractor web developer. I do a lot of Web development work just JavaScript CSS HTML whatever Today I want to talk About a library called rack now. I've only been really using Ruby for about about two years and That's kind of the same time not really but it's kind of the same time that rack Came on the scene and people were like whoa, and I was like whoa because I came from PHP background and Roll your eyes now. Okay, and yeah, seriously, and I was like, whoa, what is this rack and and what was crazy was everybody? Started like putting their libraries on rack, you know like the rails guys are like hey We should use rack and and the Sinatra guys are like we're using rack and and the thin developer was like I'm Then is we're rack and I was like what the heck is rack? And you know, I I was actually talking to a developer friend of mine Last year and he was he was developing an app and rails and he's like all rails to three is on rack And he was like now I got to learn rack and as well as rails, you know And I was like you don't have to learn rack like it all just works for you, you know, but but I think his comment kind of typified Unfortunately the feeling that I've heard from a few other people to like what is this rack thing? You know, what is this library like a lot of people are talking about it? But what does it do? Why is it necessary? You know, what what what what do we what are we using it for? And so the my talk today The the reason that I think it's important is because it has seriously Changed the way that That we write for the web in Ruby. Let me see just by a show of hands real quick I promise is the only time I'll make you raise your hand. How many people are using Ruby to do web web servers web frameworks web Services, that's like everybody in here. Okay, they're like five people not raising their hands Everybody is using Ruby to do web What's so cool about The Ruby web development community and you realize this if you come from another background is that you can write Stuff in Ruby like you can just you can just take all of these different servers and frameworks and libraries and middlewares and you can like Stick them all together, you know, like in some big hodgepodge and it's it's it's kind of weird because you know another language is if If you're a PHP developer, for example, okay? What are you gonna do if you're gonna write a web app?  We're gonna use Drupal or we're gonna use I don't know. What are the PHP? Cake or something yeah, and and so it's like We will use the framework do not go outside The framework, you know and we are running it on Apache on mod PHP. That's it and and you know some dudes like hey Let's run it on you know fast CGI no Because I don't know it might be different on fast CGI, you know, we might have some different environment variables So you just you know, we're running it on mod PHP. We're running it on Apache and it's like it's it's very strict sort of you know Way to develop and deploy your apps and then you come to the to the ruby world and it's like Hey, you know, what do you want to write your app in? I don't know we could write it in rails We could write it in Sinatra. We could write it in MIRB Well, not anymore because MIRB got the axe, but I don't know. Did he get the axe? I don't know still live Anyway, and then well how we're gonna deploy it. I don't know we could like do it on Longroll or we could run it On passenger we could run it on thin Okay, so basically I'm gonna take this down. Is that okay cuz I want to be oh Snap there is I'm kind of a wired guy, but I'll try this wireless thing Hello, hello. Oh Yeah, it's good. I'm wife nice So anyway, it's just what I'm saying we got lots of ways to write web apps, right? We can write on however we want we've got lots of ways to serve web apps Does that ever strike you is kind of like wow? How do they how do they all work together, you know? I mean how how is it possible that I can take a rails app and I can deploy it on any number of application servers but I can I can take a Sinatra app and I can run it on all those servers as well Like I can basically write it for any framework and run it on any server that I want It's it's actually pretty amazing Here's here's kind of like how I how I picture it right along the top here You've got all your different ways to serve web apps, right? You've got CGI or FC GI And then you've got things like You know passenger which is you know an engine X or Apache module and then you've got your different app servers Which are pretty popular and obviously this is not a comprehensive list right there are lots more along the bottom You've got all your different frameworks, right? These are all the different ways you can write an app in rails or Sinatra Camping or MIRB or Ramazze Ramaze. I'm not sure how to pronounce so in Back in the early days The people who are writing rails are like, okay How are we gonna run our rails out? I don't know let's run over CGI Okay, so if you were writing a rails app like before 2 3 you had a little file in your public directory called dispatch dot CGI Anybody familiar? Oh, sorry. I told you I wouldn't raise your hands. No, put it down And then there was another file called dispatch dot FC GI right And then so if and then Mongo came along and it was like, okay So there's a mongrel command and then there's a mongrel underscore rails command, right? So you see the coupling that was happening you have you have a specific adapter for rails And all these and and and you know an adapter for rails and CGI an adapter for rails and FC GI a Specific layer of software for rails on mongrel Finn had has a rails adapter, you know, so it can detect if it's being run from inside a rails directory So you've got these couplings that are going on And so, you know, that's kind of represented by these arrows any anytime you want to run rails on Any one of these different servers you've got you've got a little coupling there. It might be small, right? It's a small thing, but there is still a little bit of coupling going on So if you kind of do the math you follow the pattern you've got, you know Anytime you want to write a web app anytime you want to you write a framework If you want to run it on all the different servers You have to figure out how do you're going to run it on all those different servers, right?  Why would we do anything else, right? but it changes when you've got a language like ruby and and It it it wasn't like written for the web, you know, just people are using it for the web, right? So so it's a mess You need The common kind of language here, and that's rack. Okay rack is basically it's a It's a library that has an interface it specifies an interface For servers and frameworks, right? So this is this says this is how you talk to one another Okay, so you don't have to worry about rails You don't have to worry about what app server you're running on anymore You are a rack app and the same for you Sinatra and the same for you all your frameworks You are rack apps and then you can run on any framework you want, right? And then I can write some middleware, and I can be like, yeah, you know, I I I just wrote some really cool middleware. Well, cool. How am I gonna use it? Well, you can use it with any anything that's rack compatible Right, so I can have I can have a piece of middleware, and I I'm writing a rails app And I'm like that's a really cool middleware, and we'll get into middleware. Don't worry about it If this is going over your head, we'll we'll talk about what is middleware, right? So it you know everybody talks to rack and rack handles the translation That's a pretty huge thing. Well, how do they how do they know? There's a spec Duh, it's like a spec. Oh my gosh revolutionary. It takes you like five minutes to read this spec. It is so small If you are developing for the web Hello, if you're developing for the web You need to go read the spec Do yourself a favor go read the spec Because no matter how you're writing stuff for the web you are using rack nowadays unless you're just like straight-up writing XML files pumping them through rake and Like sprinkling excess LT on them and making a little website like if you have anything that's any Application logic on the server you're running on rack So follow the spec Let's let's talk about it. What is the spec? This is the spec in a nutshell. Okay, you've got it basically specifies three things You've got an environment. What is an environment? It's a hash. What is it? What does a hash have it has keys and values the keys are like HTTP? CGI like headers, right? So like I don't know HTTP host You know path info query string, you know these types of things that you get In the in your CGI environment, and then you've got a couple of a couple of variables in that environment that rack throws in there as Well, it's all in the spec like I said, it's real simple real straightforward They've you've got apps Okay, an app. What is it? It's an object response to one method. I mean you can't get any simpler response to one method call Takes one parameter The aforementioned hash, right? What does it return? It returns an array three elements in the array status headers body The genius about rack is that it is so simple to implement.  That's easy Like we could totally be rat compatible, you know, and and and you'll see it actually We're gonna look at like some of the rails source code later You've got like like in the rails three which by the way I know some of the authors are here and they've done a fantastic job with it You go and you check it out and it's it's all just like it's all middleware Like Because it's it all you need to have is a method in there that takes a hash, you know I might not be making sense But this is kind of a this is kind of an example of what that hash looks like Okay, this is kind of what your environment looks like. Okay, if you have developed in in other environments and you're coming to Ruby You will realize the significance of this hash. It's it's awesome that you can always count on those Values being there and being written in the same way no matter what environment you're running in. Okay, this is your environment hash This is this is like an app that's like a like super simple. So the top right a lambda It's got a call method Right. So a lambda is a valid rack app You could run that you could fire up this rack app and we're going to I'm going to show you how we kind of run it You could fire that thing up and you could you could Just serve hello world all day people would love you Or you know, you could instantiate a little object here, right? We've got a little class It's got a little method called call boom instantiate it and all of a sudden it's a valid rack app, right? These are just kind of you know real simple examples. I keep talking about middleware. What is middleware? Middleware really is the lifeblood of the rack ecosystem. Go to github search for rack. You'll get like I Think it's I think it's all up to almost 500 repositories, okay, you know The manual stuff That you kind of have to do like every time you write a web app, you know like how are we gonna do sessions? You know, how are we gonna do cookies? How are we gonna do? I don't know Jason to the client. How are we gonna do? Detect if it's a mobile client like like monotonous stuff It's it's all just middleware and I'm gonna show you how it works So middleware is like a fancy. It's like a fancy app. It's got one more method, right? It's got an initialized method When when middleware is invoked it's inserted into the pipeline. I'll show you how that happens It takes an instance of the app in its initialized method case This is kind of a generic template for a middleware stores the instance of the app, right internally and then later on when you call it All it's got to do is it's got to say app. I'm calling you So it just it just passes the environment right through right so you can have a chain You can they like wrap one another, right? So it's like your app is at the core and then you've got all these middlewares that are just wrapping it, right? and when one of them gets called the the They just pass the environment all the way down to your app That's at the very core of the right and then it it will return the array, right? Just like the spec says status headers body Returns the array and it returns it to the the wrapper that called it which Does something useful we presume with the status headers and body and then returns that to the wrapper that called it And it returns it and it just passes it right back at the chain, right? It kind of looks like this Right, so if I so if I'm using these middlewares, and I've got this app that I'm running Okay, this app is the smart part. This is my logic Then I've got these middlewares that do things for me, right? I don't always want to have to specify like for example Okay, so the first one common logger, you know if you're running like a PHP app on Apache for example You've got Apache that's writing out these log files, right? So, you know nginx will do the same thing But sometimes you want to like get a log of just this stuff that actually hits your app and not like you know all the requests for Static files and stuff like that you want to get You want to see just the requests that are hitting your apps you insert common logger into the pipeline What does it do as the request comes in? It hits common logger And common logger actually doesn't do anything with it until until the response comes back out, okay? So then common logger. What does it do? It takes a look at the status. It takes a look at like the you know the time That you know the the user agent that was used, you know, and it makes it like an Apache style log, right? Same thing with like these other middlewares like I'm gonna talk about rack lock for example like it is it is super simple You've got an environment variable called rack dot multi threaded Ed or multi thread. I can't remember anyway All it does is it it's got a mutex, right? And it says You know, maybe my app is not safe for a multi-threaded environment Okay, so like have you ever thought about that?  So that a mutex is or a lock is is perfect for that because I can just synchronize calls to my app And I can say okay, you know, it's your turn now. It's your turn now. It's your turn I'm not sure about the the Like last last thing I knew I like the rails library was thread safe But I booted up rails 3 and anyway rails through was using rack lock somebody else could probably address that Better than I can. So anyway, then there's like these content type content length middlewares Basically, what are these doing? So it the rack spec says when your request comes back out when your response comes back out It better have a content type and it better have a content length, right? That's just HTTP Spec stuff and so you say okay if I'm too lazy to put that in why don't you automatically determine it for me? And so it'll say okay if you don't have a rack, let's take a look at the code like it is so simple Here's rack content type right. It's doing exactly what I told you on the way in boom It stores your app it also this one also takes a default content type in case you forget to specify a content type in your HTTP headers, right? It's called So it immediately what does it do it just calls your app calls whatever app it's wrapping? Okay, that could be another piece of middleware that could be an app the thing is it doesn't care That's a beauty right? It's decoupled right? It doesn't care all it knows is whatever. I'm rapping whatever that app is Rack specs that it has a method called call and it takes one parameter, and that's the environment I'm just gonna call it. I'm gonna pass it. I know what I'm gonna get back status headers body. I get it back And in this case all I say is if there's not a content type already in the headers Set one and then pass it back up the chain Right, so you see a lot of middlewares that are very Simple like this, and then we're gonna see a lot that are a lot more complex to that are like wow I didn't realize you could do that much, you know with just a with just a An array of status headers and body, but you can do some amazing things How are we gonna run this thing it's easy to run a rack app, okay? This is this is like the verbose way to write it Okay, so if you want to run this app take this code stick it in a file called my app Rb whatever you want and just invoke it with the Ruby interpreter. What's it gonna do? Requires the rack library sets up an instance of rack builder rack builder just takes that chunk that's in the middle right there, right? And it just evals it instance evals it right so rack builder has three methods use map and run and It just takes it just takes it takes and it returns an app when you call this to app method Right it actually creates an instance of a rack URL map if you want to kind of dig down deeper And it's just it's a real simple way to build an app right then you just say Call my handler in this case. I'm using web rick, right? But the beautiful thing is is rack has already it's already abstracted that out for us Like we don't have to figure out how to pass this app to web rick or to fin or to mongrel or to passenger or to whoever Because that's what rack it does for us, right?  Okay, what is rack up rack up is just basically It's just basically what I told you it's like it it takes it creates an instance of the builder and Takes the code in your config.ru file Slurps it up sticks it inside a builder and off you go right so it's just a little bit more terse right so notice this When I go to this all I did was you know just move just remove some of the verbosity, right?  I think it defaults to I think it defaults to web rick. Yeah, because obviously that's one that ships with Ruby Right, there's a cool little library called shotgun, right?  I got to kill the process. I got to fire it up again. Then I got a refresh, right? It's kind of a pain Ryan Tomaco He's one of the github guys now.    I know you guys are smarter than that. Okay Routing how do you how do you so? It's like I said so right so you can mount all kinds of different apps at all kinds of different places, right? I can mount an app on the route right so when somebody requests the route of my website some app runs And then when somebody requests slash Downloads or whatever a different app runs right a file server maybe and then when somebody Requests, you know my my my different post URLs or something different app runs How do we route? Sinatra DSL Is kind of the one that's often imitated never equaled people are always trying to imitate the Sinatra DSL If you haven't written a library that imitates the Sinatra DSL You're behind You need to get on it because like yours could be so much cooler than Sinatra, okay? rack mount Like I said, I'm gonna upload a lot of this stuff to These are just some basic examples of you know, here's what you do it. How here's how you run a Sinatra app Here's how you use the rack mount library I'm gonna upload this so I want you guys to download. I just have a few minutes left So I'm just trying to run rush through the end here All kinds of debugging libraries Take note of these rack lint and rack show exceptions. You've got a rack shell So imagine you're running your app boom you crack open a shell and You're you're like in your app so you can make requests and you can do all kinds of stuff right right from the shell You can see the responses coming back from your server. I mean it's awesome Let's see rack bug check that out if you do rails Make mental note of rack bug. It is awesome Forget the name of the guy Brian home camp is it that's right Brian Hill camp did that awesome library rack debug not ready for one nine yet I'm gonna skip Let's see Okay Middleware There's lots of middleware out there, please whenever you think like I'm gonna write Something to do this like don't do it. I promise you somebody already wrote it head over to github check it out Check out rack contrib check out check out the rack library There are a couple useful middlewares in the rack library. You can do streaming Chunked HTTP responses. You can do e-tag headers like automatically you can do You know sessions and cookie handling me you get all this stuff With rack you get all of it I actually have there's a sample app that I've got in the repository So when you when you go and you download the code from the repository, there's a little app there Just run it with the ruby interpreter. It's it's a it's a Twitter cash limiter app So basically it's just a very simple rack app. It just makes sure that you don't hit the Hit the Twitter API more than it likes to be hit, right? That's all it does But it's a it's a kind of a cool example of a raw rack app. It's complete with unit tests You can run the tests and everything so this is an app that you can just download you can say what is all this? Rack stuff about it's very simple I think it's like a hundred and something lines of code and you can check it out and you can run it and you can say Okay, I get rack now Since I'm done I just want to know you know are there any are there any questions anybody has about rack Yeah Yeah Right, so if so you're talking okay, so if I'm gonna so if I'm gonna use the use method You know what I'm talking about in the The in the rack builder DSL remember I showed that app What's got the rack builder and you can call three methods inside use map and run? When I say use this class right use rack Content length or in this case content type was the one that we showed I can say use rack content length comma And then whatever I pass after that right I can pass it a list of arguments that all just get passed to the constructor When it gets initialized does that answer the question? Yes so You know Honestly, I Somebody have an answer for that. I honestly I would I would either focus separate process or Use something like you know there are libraries specifically for that like delayed job and yeah, dude Right on it's all been done. I don't have to do anything.  Thanks for your lab Okay, let me go. Let me just kind of let you know Here's where you can download the code Here's where you can find me. It's a pretty lame blog, but I don't know go there if you don't have anything to read I'm on Twitter. Thank you very much


Hello, everybody. I'm glad to see you here in this room. Today, we're gonna spend next half an hour talking about KEDA, and, you know, we should probably get to each other a little bit more, so I would like to ask, are there any KEDA users that are using KEDA in production? I can see a bunch of people, cool. And is there anybody who doesn't know what KEDA is, or maybe just, you know, know the name, auto-scaling, whatever, but, you know, don't know the details? Okay, okay, some, also some newcomers. This is great, so now it's my turn. So my name is Binyak Rubalik. I know the name is pretty hard to pronounce, so don't feel bad about it. I'm based in Czech Republic, Europe. I've been around Kubernetes and Open Source for many years. I'm a Microsoft MVP, and while I'm here today, I'm a longtime KEDA maintainer. So basically I'm with the project since the beginning. And finally, just a few weeks ago, we started a company around KEDA called KERIFI, so I'm the CTO there, and we tried to support the project and help our customers. But today, I'm not going to talk about the company. I would like to talk about the project, so, you know, today I'm wearing my maintainer's hat, so I should probably take off this one, right? And let's start it. So first I will, you know, maybe wait a little bit because there are more people coming. But basically, I will try to explain what KEDA is, what we are trying to achieve, what is the vision, what is the idea, maybe talk about some advanced features, about some interesting features that are in KEDA. And then I will cover some tips and best practices so you can use KEDA like the best way it could be. So it is, you know, working well at your environment, short demo, and I will also quickly talk about the future of the project and what we are trying to do in the future. So I can see that the people are coming. Okay, this is great. So actually, let me start with a short story. So we are in this room, and imagine that there is a bar in this room. So probably somewhere around here, I'm the bartender. I like beer, you know, so I'm serving a good beer. And so I have a few taps at the bar, and I'm serving one tap and I'm giving you good beer. So maybe, you know, this guy in the front row would like to have a beer, so he's coming to the bar. I'm giving him the beer. This is great. Maybe after some time, all of you will learn that, okay, this beer is really great, so I would like to have also one beer.  So in the end, I'm not able to handle the load, you know, handle the amount of people that are coming to the bar. So maybe I'll ask a bunch of people to help me, you know, with it, so I have more taps on the bar, so they come and they basically help me autoscale the solution, help me autoscale the taps, so they will serve the beer, you know, from the extra taps. So this is the first solution. Basically, I autoscale the taps based on the utilization, based on my utilization, maybe based on the beer flow, right? But if I'm a little bit smarter, what I can actually do, I can, you know, observe the space, observe the room, and I can maybe see that, okay, over there, there are people are coming, you know, they are forming a queue, so maybe they are coming to the bar. So I can be more proactive about what's going to happen, and I can be more proactive in the autoscaling of the taps. So I can, you know, ask those people to help me a little bit in advance. So I suppose you got the picture. So if we basically convert this solution, this beer problem into a technical problem, it is the very same. So we have some consumer application, and it's consuming some stuff. This application is basically the other taps at the bar, and they are consuming some data from some external system. So it could be RabbitMQ, Kafka, or it could just, you know, do some stuff and query, and do it based on Prometheus. So the first solution, the nice solution, basically, is that we basically autoscale based on the utilization, based on the flow of the beer. So this is the HPA, this is the Kubernetes HPA. It just monitors the utilization and scales out the application. But if we are, you know, more smarter, what we can do, we can actually observe the queue of the people coming to our bar, or you know, it can observe the queue in RabbitMQ, Kafka, whatever. So basically, we can predict that something is gonna happen to our workload, and it can be, it is done by some external events, by some custom metrics, maybe. And you know, this kind of autoscaling is useful for some certain scenarios. Because sometimes, you know, the actual utilization, the CPU or memory consumption of the application doesn't reflect the actual need of our application, you know, because sometimes the application just consumes messages, not doing much stuff, but we need to, you know, consume the messages much faster. With a traditional HPA approach, you cannot do that. You need some external metrics. So this is what Keda is doing. You know, and also we have like this, our bar, you know, with the beer, and maybe in the future, we will start serving shots, maybe some cocktails, drinks, and these are like all the additions, extra features that Keda provides on top of HPA. So this is like the idea behind Keda. And it brings the elasticity to your platform. Because you know, you may ask, okay, so why do you need to autoscale the test? Because you can put like the people at the bar, like right away, right from the beginning, so they will be like serving the beer from 10 taps from the beginning. Yeah, this is doable, but it is not, I would say efficient. Because you know, if the beer is not good, people will not come, and the people at the bar will be useless. So we really need to think about the platform, about our solution, about how to bring the elasticity, because it solves two big problems. So the first problem is the ability to handle like a high load, so more people are coming, so we can autoscale the, scale out the application. Or, you know, we can save costs, because if there is no need for the application to be running, we can scale it down to zero. So this is very useful, especially these days when everybody is trying to save costs. So this could really help saving our cloud cost, because the application autoscaling makes the pressure on cluster autoscaling. So imagine that you have an application deployed, for example, on AWS, you have Kubernetes, and the application is running on the Kubernetes. If you enable autoscaling, application autoscaling, if the application is scaled down to zero, it makes the pressure on the cluster autoscaling, and the cluster autoscaling can also scale in the number of nodes. So you are saving resources and saving costs. Okay, so what is SCADA? SCADA is trying to make event-driven autoscaling as simple as possible, so as I just told you, you can scale any deployment or job, or you can scale a job based on some external events or custom metrics. It doesn't rely just on CPU or memory. We have 65-plus different event sources like these connectors to external services, so AWS services, Azure services, Prometheus, WMQ Kafka, you name it. And if there is any connector missing, you can implement it and contribute, or if this is some kind of in-house solution that you have in your company and it's proprietary, what you can do, we have this concept called external scale. It's an interface that you need to implement. It's a very simple interface, and this way you can feed the metric to CADDA and CADDA will handle the rest of the stuff for you, so it will autoscale the stuff based on your custom scaler. Actually, the greatest news of today is that CADDA has been recently graduated, so basically it is a good news. I would like to thank our community, CNCF. It's a great achievement. And yeah, thank you. So I was with the project since the beginning, so originally the project started, it was 2019 or something like that, and it started as an internal cooperation between Microsoft and Red Hat actually, as a POC project. Then we saw that the project is quite useful, so we open sourced it and then later donated to CNCF, and we went through all the stages, through sandbox, incubation, till we graduated, which is happening today, so it is a very great achievement. Our community is quite, I would say, quite huge. So we have some users listed on the web page. We have contributors from many companies, and I would like to highlight this QR code for CADDA users. We are collecting a survey about how are you using CADDA and what we can do to improve it, so this is the QR code with a very short form, so please take one minute to fill out the form. I will also share the QR code at the end of the presentation. So let's talk a little bit about the architecture. So how are we actually doing this kind of stuff, so this kind of event-driven auto-scaling? So CADDA is built on top of Kubernetes. So we are not trying to, you know, remand the wheel. We are trying to use the existing stablet in Kubernetes. So CADDA is built on top of HPA, so we are still using HPA for the auto-scaling under the hood, and we are using Custom Metrics API interface that's provided by Kubernetes, and we feed the metrics to HPA. There are two main components in CADDA, so the first component is a CADDA operator or controller. It is doing the majority of work, so basically, if you deploy some resource, it monitors the resource. It connects to external services and provides the metrics, and the second main component is the metrics adapter or metrics server. This is the connection point to Kubernetes API, and it's basically a proxy, and when HPA or HPA controller is trying to do the decision whether it should scale the application, it asks through this metrics server, metrics adapter, like the metrics that we are providing from CADDA. We also have some admission controllers and additional stuff, but this is not so important. I would like to highlight one more thing. So basically, at the moment, HPA cannot scale to zero, so, and this is the way, so we need to handle it ourselves from the CADDA point of view, so we have doing it through the operator. So we have actually two phases, so we call activation is the phase when you are scaling from zero to one or one to zero, and then there is the scaling from one to N, and the one to N scaling is handled by HPA. The activation phase is handled by the operator. So CADDA has, you know, few resources. The main object is called scaled object. This is the place where you define your scaling metadata. So basically, we are saying, okay, I would like to scale this deployment based on this kind of data. You can auto-scale deployment status set or any custom resource that provides scale sub-resource. So basically, anything that's running on Kubernetes can be auto-scaled. So basically, in the scaled object, you can see in the middle there is a scale target ref. This is the reference for our deployment. Then we are setting some replica bounds, so minimum, maximum replicas, and then at the bottom there is a trigger section, and there we are basically saying which metrics should be used to auto-scale the workload. We have also additional advanced settings, but this is like the very basic stuff. We can specify multiple triggers in one scaled object, and actually I would like to highlight this point, so if you would like to scale your application, even with HPA, and you would like to scale it based on multiple different metrics, always use just one resource, because if you use, for example, two HPAs or maybe a scaled object, an HPA, this kind of things will result in conflict because each thing is independent, so it will try to fight each other. So if you need to specify multiple metrics, please use this single scaled object where you put all the triggers. This is very important. And also, through the scaled object, we also provide all the capabilities that HPA does, so you can specify all the related HPA-related settings. It is very easy. The second, I would say, main resource, it's called ScaleJob, and this one is useful for processing of long-running executions. So imagine that you have a workload that is doing some, you know, maybe pulling some data, and then it's doing some calculation. It could be maybe hours or days. For this specific use case, Kubernetes deployment scaled through HPA might not be the right choice because in the middle of the execution, the HPA might decide that it would like to kill this particular bot and scale it back to minimum replicas. So for this kind of use case, you can use Kubernetes jobs. So basically, we are building the scale job on top of Kubernetes jobs. So again, we are reusing the concepts, and it's very similar. So basically, instead of the reference to the deployment, you put the whole, let's say, Kubernetes job reference, like the whole stuff in there, and then specify the replicas and the same trigger section. So in this case, you know, we can monitor RabbitMQ and, you know, consume messages from this queue, and, you know, we will spin individual Kubernetes jobs that will, you know, process and do some use for stuff. So these are the two main resources. We also have a resource for handling of secrets because, you know, usually when you would like to connect to your external service, to this Kafka or RabbitMQ, you would like to still as some kind of, you know, authorization authentication. For this specific use case, we have a resource called trigger authentication. It's like a single place where you can store all this information and then just reference it from the scale job and it will pull all the stuff. It supports secrets. It supports Azure Core Vault. I manage identities on AWS Azure, so all the stuff. So I really, really recommend using this kind of stuff to, you know, to, let's say, store the credentials or secrets in the main resources. So this was like the brief introduction to the architecture. I would like to maybe just quickly go back and spend more time on this. So recently we did a, let's say, architectural change because as I mentioned, there are two main components, the operator and metric server. The metric server is providing the metrics to HPA and operator is doing the rest. And originally, like the metric server was doing more stuff for us, so it was opening the connections to the external services and, you know, more things. But recently we have decided to move the majority of the logic to the operator, so to have the single source of truth. So this resulted in less connections to the external services because originally we have open connection, for example, if we are scaling application based on Prometheus metrics, then if you deploy your deployment, then you deploy your scale object with this reference. From KEDA we open connection from the operator to query the metrics, right? And then another connection from the metric server. And this is not needed, so basically we decided to move majority of the logic to the controller, to the operator, so we are now opening just one connection to the external service, which is good. And it also helps us, you know, with implementing of some features that I will try to explain later on. So this was like a huge internal change that wasn't present or visible for users, but it helped us a lot with the project. So the first thing is certificate. So we have certificate management for any internal communication, so between all the components, the communication is encrypted. We have support for set manager. We have support for plugging your own CAs into KEDA. So for example, if you need to connect to some service that is using your own certificates, you can use this. So this is, at the moment, is quite nice addition. Also, Prometheus metrics. Scaling is nice. If you scale the application, this is nice, but if you scale at scale, it might be harder to manage the solution. So we are constantly trying to add Prometheus metrics about what KEDA is doing. So we have a number of resources, a number of errors, a number of failures for individual scalers. We have metrics there, the activity of the tab that's happening. So we have this Prometheus metrics. And recently, we have added support also for open telemetry. So we are exposing the very same metrics. Also through open telemetry, so you can connect to your open telemetry connector and we will send the metrics that way. So it really helps managing the deployment on our cluster. Another quite new feature is pausing of auto-scaling. It was like a feature that imagined that you are auto-scaling based on some metrics in Prometheus. This Prometheus instance is going into some maintenance or something like that. And you would like to pause the auto-scaling. And for some reason, you don't want to remove the scaled object. We would do the same job to stop scaling. You just want to annotate the scaled object. So we introduced this annotation where you can specify that, okay, let's stop auto-scaling and stay on the current number of replicas or you can specify the number of replicas that you would like to set your deployment on. With pausing the auto-scaling, we are also closing the connections to the external services so you don't see any errors, any problems in the external service. Service is not in operation. At the moment, we are working on adding this same capability for scale job as well. And now, I would say the main thing that I would like to highlight today is this kind of thing. It's called scaling modifiers. And this is a useful feature that we were able to implement after we did the big architectural change. So what is the problem? So imagine that you have application and you are scaling the application base, for example, on two or three different metrics. What HPA is doing under the hood? It is taking individual metrics and then choosing... So to do the final decision on the amount of replicas that needs to be scaled, it is choosing the maximum value, so the greatest value from all of the metrics. There is no way how you can modify this kind of behavior it's baked into HPA. And for some reason, maybe you would like to have an average from all the metrics or you would like to have a minimum. But we were, okay, let's do this.  But we have decided to support, like, let's say, more complex evaluation so you can specify a formula and it accepts mathematical and conditional statements. So you can say, for example, trigger one minus trigger B divided by two multiplied by five and, you know, all this kind of crazy stuff you can do. And so basically this formula is applied during each request for the metrics and we compare it with the target and then send this individual value to HPA. This way we can really, like, basically fool the HPA and do the job for us, you know, to specify the specific conditions for auto-scaling. If we have multiple metrics. But this is also useful not if you have multiple triggers but this is also useful if you have, for example, just one trigger. This is a quote that we got from one user and he was mentioning that they have requirements to be always over-provisioned by free ports, you know. And each of their ports can process free messages at the time. I suppose it was probably RabbitMQ or something like that.  With this formula thing, it's quite easy so we can just specify, okay, let's use the value from the trigger, trigger one, and plus, plus nine. Why nine? Because, you know, they need extra free ports and each port can process free messages. So it's quite simple. So I think that this kind of stuff is very useful and we still like trying to figure out what does can be achieved with this, but this is really cool stuff I wanted to highlight. Okay, so these were the features I wanted to highlight and now some maybe best practices and tips. So the first one, use Fallback. Fallback is also like a feature that we have. It's an older one and it's quite simple. So you have an application, you are autoscaling the application, but what would happen if the service that you are getting the metrics from, the Prometheus or Kafka is down? You know, what would happen then? So we have implemented this Fallback feature when you can specify, okay, if there are, for example, four errors, connection errors in a row to this external service, let's scale to 10 replicas. So this is really useful. There is no, you know, like a downside. So please use this one, you know, just to be sure that you have the right amount of replicas running if there are some problems in the external service. Other, let's say, maybe not the, but explanation on the actual behavior that we are having. So we have this concept which is called polling or setting that's called polling interval. So basically with this setting, you specify how often the operator checks the metrics and, you know, updates the stuff. But polling interval is only relevant to the activation, to the zero to one skirting. Because if you recall, when I was explaining the architecture, the zero to one skirting is been handled by the operator, so we can, you know, set the specific interval. But the one to n skirting is handled by HPA. And HPA doesn't have a, you know, let's say, setting for specifying the interval for querying the metric values. It's cluster byte setting. Usually on Kubernetes clusters, it's 15 seconds. And you cannot change it as a user.  And so every 15 seconds, HPA asks us for four metrics. So it is not that Keda is pushing metrics to HPA, but actually HPA is asking the four metrics. So we have no way how to reduce the polling interval. But thanks to the architectural change, because the operator right now is the, you know, single source of truth, if you enable metrics cache in feature, it's like in the advanced section, what Keda is actually doing, it is just querying for the metrics during the polling interval. So for example, the polling interval is 15 seconds. So each 50 seconds, it asks for four metrics. And if HPA is asking in between, it is not doing, Keda is not doing any additional request to external service, but it is using the last value from the cache. So basically, it is caching the stuff. Why is this useful? Imagine that you have, you know, hundreds of scaled objects in the cluster and all of them are asking maybe or querying the same Prometheus instance, you know? And if you have like the polling interval set very low, then the HPA is asking every 50 seconds. It could be like a substantial load to this Prometheus instance. So this way, we can, let's say, let's say do some things around it. So for example, if you are okay with getting the metrics, maybe just one every 60 seconds or something like that, you can enable this feature. And operator will just ask the Prometheus for the metrics every 60 seconds. So any request in between will be just hitting the cache in the operator. So if you are, you know, deploying Keda on scale, this is a thing that you should consider and really like be careful about setting the right values for polling interval and metrics caching. Another thing I would like to highlight, this is not Keda feature, this is like the feature of HPA, but we are, you know, enabling this capabilities through scale object as well. It's a stabilization window and scaling policies. So stabilization window is useful when you want to prevent replica count flapping. Imagine that, for example, again we are querying the metrics from Prometheus and once the Prometheus tell us, okay, let's scale to 10 replicas. The next query will be scale to one replica and 10, 1, 10, 1, so you know. So you will see this constant flapping in the cluster. So I prefer, you know, you should try to think about like the solution and about how to handle this. So stabilization window is the right thing, so you can specify the window during each, like the HPA is considering the replicas. Scaling policies are just settings that, with these settings we can control the rate of change of replicas. So for scaling out and scaling in, we can say how fast or how slow these operations should happen. Useful stuff and if you really want to have like a good solution, it's useful always to think about these settings to nail them correctly. Okay, and this is another, like let's say Kubernetes topic. The first question that you can see on the slides, why the HPA reports metrics like this. This is a very common question that we got from users because you know, users have deployed applications, they deployed scaled objects, CADR and everything is working correctly. Scaling is happening as usual, but then the user will start, let's say, okay, let's check the stuff. So they are querying HPA to get the specific metrics that it's getting. And HPA is reporting this really strange number and the reason is very simple. This is the way how Kubernetes represents float values. So basically the first part, it's 4.8 and then it's divided by five. So it gives you like this result of the operation and it'll give you like the float value. So it is really just a representation. You don't have to be afraid about what is happening with my system, what are these strange metrics. And then other thing I would like to highlight is or are metric types. So when you are creating HPA or a scaled object, you can define like what type of metric is this. And the setting, it basically tells HPA which algorithm to use to compute the number of replicas from the metric. So the average is using the average. So basically it's comparing the metric value with average across all the ports. The value is doing a little bit different. So again, please read the recommendation on this and think about like what is the proper way or the best way for your solution. Okay, so talk is cheap. We don't have much time so I will just do a very quick demo actually. Maybe a little bit shorter than I want. So I hope it's visible. So I have like zero ports running in my cluster. And what I'm gonna do, show you today is just this very basic stuff. So I have an application and I would like to, it is consuming messages from Kafka topic and I would like to auto scale it with Keta. So the stuff I described, very basic stuff. So first I will deploy the application. So the Kafka consumer application. It is standard deployment and nothing fancy. It just connects to the Kafka. So let me create this deployment. And as we can see, there is one port running with our application. And now I will probably generate some load. So I'm using this job to generate load and it will create 15 messages. So let me create this load. So I will create 15 messages. And if we check logs... Yeah, if we check logs... Okay, okay. We can see in this... Oh, it's not so visible, sorry for that. But basically it... This is this index and it received 15 messages. So the application is able to get the messages from the Kafka topic. And now what I'm gonna do, I will apply a scaled object. So let me actually start with applying the scaled object. I will create a scaled object. And you can see right now the port is... It's been terminated because there are no messages in the topic.  I can just quickly show you the scaled object. It is the very simple one. So I have the minimum maximum replicas. I have the polling interval set in here. Just telling to scale this consumer application based on this Kafka topic. Perfect. So let me generate some big road. It will be more messages coming there. So we should see the auto-scaling. So this time we are creating, I don't know, how much 500 messages. So hopefully in a few seconds we should see more ports coming running. Okay, so the first port has been started by Kedda. And we will find out that we are not able to handle load and more and more messages will be coming to our application and we will see more ports. But actually we don't have much time. So let me just quickly jump to the next part. So I just want to show you the fallback.  So I will delete the Kafka cluster. And how can I do that? Let me show you this. So basically the only thing I have added is the fallback. So actually let me create this scaled object with the fallback, so it is just the update. So right now we have the fallback. The application has been already scaled down to zero because all the messages have been consumed. And right now I will delete the Kafka cluster. So I'm using stringsy, so I will just quickly delete my Kafka instance. The Kafka has been deleted. And in a few seconds, or maybe, you know, we will see that the application has been scaled to two replicas. This is the fallback. So, okay, I hope it will happen. Yeah, okay, so right now we can see the application because we have no connection to the Kafka topic. So scale the application to two replicas. The last thing I want to show you is just the example of the multiple triggers, but we don't have much time. So I will just show you the scaled objects. So basically here I have two triggers. The only thing I need to add to the trigger is the name, so I need to name the trigger, and then I can use it for the formula. So here I'm saying, okay, let's use the sum value for both triggers. Very simple stuff. And for the pausing, I have like just this annotation. So if I create this scale object at the moment, it will be scaled to six replicas. And the connection will be to the Kafka will be dropped. Okay, let me go back to the presentation just to really quickly discuss the future. So we are working on a Cloud Events integration. So basically the metrics that you see, like from Prometheus and OpenTelemetry, we also want to expose a Cloud Events. So you can subscribe and receive this kind of stuff. We would like to work on multi-tenant installation because this is a huge topic for us because at the moment due to the limitations of the Kubernetes API, we can create only one cdincense in the cluster. So we are working with the upstream to provide some kind of proxy to be able to install multiple these things. Also, another AIS order place. So we would like to have some open interface for predictive autoscaling because we have all these metrics coming from different sources about our application. So maybe based on the story, we can predict the actual scaling. So we can say that, okay, maybe start scaling a little bit sooner based on some history. We would also like to work on global configuration, plug-in management for external scalers. And last thing I want to say, it's carbon-evern autoscaling. So basically to reduce the number of replicas or the autoscaling stuff based on the carbon consumption, there is a talk about this on Thursday. Unfortunately, there are two catatocs on Thursday and they are both at the same time, but I definitely recommend to check this one and the other one as well. Okay, so thank you very much. This is the feedback for the session and the blue one is for the user survey and we have maybe just a few seconds for a couple of questions. So anybody has any questions? A quick, will you be supporting job sets with your scaled jobs? Job sets? Yeah, it's doable, yeah. Okay, thank you. Any other questions? Yes, hi. For the advanced trigger, there's an expression hidden in a string in a YAML document. Is there any plans to validate that expression through a dry run or is it just apply and hope that the user... Yeah, there is a validation. Like when you are applying the scale object, it's validated. By the way, I have some t-shirts over here and stickers, so if you want, come here after the presentation, okay? Hi, and do you have like a support for like a time-based? I know the nine o'clock is going to spike. Can I like a set of time and then do something with it? We have a current scaler, so basically you can specify a cron. So you can have a cron schedule where you can say, okay, during this period of time scale out to, you know, for example, five among replicas. Thank you. Question about the HTTP scaler. Is it possible like while we're waiting for the application to scale up, to show a message saying we're warming up the application or something like that just to kind of give a better UX? We are thinking about it. There is a plugin for HTTP scaling, but it is still like, I would say beta, alpha, so it is still not like I would say production ready. Because, you know, HTTP base autoscaling is much, much harder to achieve because you need to hold the incoming requests in case you are scaled down to zero. So we have to come up with some creative solution to show a message if you want to use that, that plugin as it exists today. Yeah, so there is, yeah. Okay, thank you. Okay, so we are probably, we can continue offline. The talk is probably done, right? Thank you.


So my name is Deltra, Deltra Ferguson, and I have the privilege of being the coordinator for the WRC, the Women's Resource Center, on the SOU campus, from September 2004. It's when they had the audacity to bring me on. I went to the University of Oregon as an undergraduate and discovered theater. That's another of my great loves is the theater. It was kind of a wild time and I, my girlfriend and I at that time loaded our truck and our cats up and moved to San Francisco after that, where I guess I just had to kind of figure out who I was. Well exciting things happened there. I met some good friends, I learned a lot about life, and I went to a women's festival in California and really discovered what that scene was about and that was really pretty cool. And then I went to the Michigan Women's Music Festival hearing about that and actually went back to that festival and helped to build it every year. I was part of the workers community, it's called the workers community, the women who put it up and created this city of women and creativity. I did that for about 10 years each summer. A real blessing in my life, very informative for me. And when I was first there I got to experience some of my, really some of the earliest San Francisco, it was called the San Francisco Gay and Lesbian Freedom Day Parade. That was its early, in its early, you know, incarnation. Harvey Milk in 1976, first parade, right? Amazing man. These parades through San Francisco would attract thousands, hundreds of thousands of people, right? Well I was there in the early 80s and AIDS was emerging in the community and what was most striking to me was the way in which the parade transformed from a joyous, very colorful, very queer, very whoo-hoo kind of event full of pride, full of pride to a funeral march. It went black. That was amazing. We, I want to say, and I'm going to get my years wrong, but I think it was 1985 and may have been 84 and we went to the parade and it was like a funeral funeral dirge. It was quiet and weird and that's what that felt like and there was rage that exploded out of the gay male community after that, of course, and we saw some of it. In the early 90s, the big marches on Washington, on the Capitol happened. They rolled out the names project onto the lawn in between the Capitol and the Lincoln Memorial and it stretched the whole way. It was just this amazing thing and we walked through it. You could walk through it and around it and look at the different panels that were there and really try to get a handle on the magnitude of that. Was there a social, political, or cultural alliance between gays and lesbian at the time because that had sort of splintered? Yeah. There was a coming together that was very interesting to see. I went to Northwestern and I had colleagues in Chicago. One of my colleagues was a gay man and we were talking about our culture and things and talking about how different lesbians in gay men were and how there had been a lot of history of just going because we were so different and yet we were brought together by our shared persecution without a doubt. I laughed and I said, you know, during AIDS we lesbians, we really rose up and supported the gay male community and did a lot of organizing and did a lot of support. He smiled kind of sheepishly and he said, yes, you really did. I said, you know, if the shoe had been on the other foot, what do you think would have happened? He smiled and kind of bowed his head and I said, there wouldn't have been anything whether we wouldn't have had anything. He said, yep, that's right. That's a fact. So that's it, you know, but I don't really care about that. I care that we pulled it together. That's what I care about. I think I was a feminist from the time I knew I was a girl. So it's sort of just in my body and very naturally there. And so finding my way through time to what was called the women's community and to feminism and to lesbian feminism was just a very natural unfolding of my life. I went to Northwestern after San Francisco and completed a degree from there, a performance studies degree. Very important because it really broadened my notion of what the theater was and I could perform things that were important to me. It helped me find my voice. I created a performance around a woman named Malvina Reynolds for example. Malvina, some of the old-timers will remember Malvina. She was a politically active older woman in Berkeley in the 70s. She wrote little boxes. She would write a song before breakfast every morning. She was really quite the character and a wonderful spirit and I took her work and put it together into this performance. So part of my expression of myself as a feminist came, got to come together with the theater and then there it was. It was really, really neat stuff. And another place where that happened is when I came back from Chicago and eventually wound my way around until I made it into graduate school for that PhD at the University of Oregon. And there I was very feeling very empowered to do a lot of really interesting kinds of performance and so forth that was going on. And I began to teach women's studies. I started out as a GTF teaching women's studies 101. Great big women's studies classrooms. We would have you know 70 young people, not kids but it feels like kids, but they were young people for the most part. And we would, I insisted that we had rooms where the chairs were not bolted into the ground because we were going to sit in a circle. I didn't care how we were going to do.  And it was kind of amazing to me. I was very eye-opening. There was an eagerness in those students to not only know the history and the current state of affairs but to really have what they knew was already true about what it was to be a woman affirmed in a very powerful way. And then they would meet in circles and talk and just in the tradition of the women's, you know of the of consciousness raising circles and they would find themselves. It was wonderful stuff that was going on. Okay so I kept teaching. I taught at Oregon State and the University of Oregon for quite a number of years and taught many different women's studies classes and theater classes. And then I met my current wife, Kirsten, who was Kirsten Peterson at that time. And yeah, it was fabulous. We were married, we've dated for a little while, and we met on a blind date and that was kind of fun. And then we actually married in 1996. Of course that was illegal so it was not illegally recognized marriage. I have to say that. But we got married anyway. And all of our family was there and we were blessed by that. And she and I, so you know just like all married people we had to figure out what's her future going to be? What are we going to do?  I always loved bicycles and wheels and ever since the mouse and the motorcycle it was just something I adored. So I got to have this fantasy time where I learned how to be a bike mechanic. And I had to even fashion a resume that omitted my PhD and a lot of other things because I wouldn't have been hired. So I just kind of left a few things out and it was great. I had a couple of years with some nice guys and learned how to fix bicycles and put them together and stuff. And all of this while Kirsten was finishing her master's degree because we knew that had to happen. So anyway we like most couples and we tried to figure out where are we going to go? What are we going to do? Throughout our resumes here and there. And sure enough she scored a job and she scored a job in Ashland or in the Rogue Valley. She was a speech therapist and we thought okay there's the first good job let's go there. And she'd had family here. We thought yeah great. We came to the Rogue Valley and that meant that I had to find a job. And so that was an interesting time. I got to try to date this one a little bit. I think it was 2000. 1999. Yes around there. 1998-99. I applied and I applied and I applied. And I my resume was wonderful and powerful. And I got many interviews. I interviewed 10 times. Five of which I could absolutely identify that I was ejected because of what I look like. Because I am decidedly a lesbian. And even though I thought wow I feel like I've stepped back in time. This is remarkable. But this was very very clear to me. So this was not an easy route. And I thought okay we're going to you know something's going to land here. I know it will. Well I finally got a job. And I got a job in Josephine County as the executive director for the Women's Crisis Support Team, the WCST. They needed some help. It was a it was a big crisis time for them. The founding mother Esther Jackson who had been you know founding mothers are amazing people if you have had the pleasure of knowing some of these these incredible women. She had been the one who started that she started the Women's Crisis Support Team. The story goes out of a shoe box. They had a shoe box with the names the first name and then the last initial of the woman. So she was Esther J. And then there would be other women with just their last initial and their phone number because it was dangerous. It was extremely dangerous. And they needed to stay very very covert. But this was across always original. It was a crisis line right. It was a it was a tree of women who would respond to domestic violence when a woman was in trouble. Well eventually it formed into one of the safe houses. The many safe houses that now dot this country and are critical and an integrated part of the way that we run our communities to be honest. There's a recognition this is and it works together with the cops which is amazing. You know originally there was an adversarial relationship with the police officers. There was there was a feeling of you know conflict there. But that has since dissipated and there's a real understanding and in my time there there was a real understanding that we were helping and they were helping and we were doing a good job. So I worked at the at the Women's Crisis Support Team and helped it. Esther Jackson died and left behind a lot of work to do. There were things were undone. The shelter had a hole in it the roof. The roof was literally leaking and they were in trouble. I my first day on the several days on the job I I turned to the bookkeeper and I said well I need to see look at the books and she said well I have a checkbook. I said oh good that must mean there's money and she said yes. And I said I'm going to the bank. We started there and from there of course we built the financials out. We created the wrote the appropriate grants got the grants back on track pulled created a personnel policy created everything because there was just there wasn't there were the infrastructure had just gone gone down and we fixed the roof. So and we bought new appliances and we got things back on track again right because that's what needed to happen. Well after that I Kirsten and I she got pregnant. We had wanted to have a baby for a long time and that was super good news and you know we built a house and we just needed a baby we needed a family and we were super excited about that but what happened is that it turns out we were having twins so yes so suddenly life really okay it changed a lot and I thought I've got to get closer I can't be working in Josephine County you know sometimes 12 hours a day it was a very very big job and I thought I've got to change this I just have to change here they come so I'm doing it you know which is my usual fashion okay just do it. So I um found a what did I do there was a little there was some funny in between jobs I did a little stint with a little summer stint with the um with the bread festival which was joyous and then I did and then I worked for the Southern Oregon Humane Society teaching kindness using their doing their education program teaching kindness uh and uh and then there was this job at the university they needed a coordinator for the women's resource center I thought oh boy there it is so I went ahead through my head in and applied and it was an amazing trip I can tell you that at what I did the women's center in 2004 was in a place of crisis in turmoil um the students were in a lot of pain they felt that the administration wasn't listening to them and that rape was was uh just not being addressed at all and uh so there was a lot of incredible tension there uh I came into it thinking wow this is not this is compared to the like a women's shelter with you know where I had seen some stories and had there been women coming in that stories that I'll never repeat because they are so terrible that's the level of violence that was that we were dealing with at the women's crisis support team and I thought if I can do that I can do anything so I came into this job and it even though it was in a place of turmoil I thought this is a university and I can I can make this I can make this work and we can come together I know this and um we're going to be okay um it was a lot about listening in the first year a lot about listening and there was there um and I think that there was some concern initially that I wasn't going to do anything because I was listening and because there was um they had been the women the young women in the center had been so disenfranchised by the university they felt they were feeling pretty angry and and disempowered so it took a while for that to get to play out and for us to get into a place of confidence and and trust really but we did get there we got there pretty quickly 2005 six seven eight nine all very powerful years for the women's resource center on the campus um the uh the first there was a a period of time where there was a a real change and it should it should go uh sort of on the record at least I don't know how interesting this is but when I first came the women's resource center was in a place in the stevens union in the basement um net right next to it and this was right across from what's called digversions right now another room called digversions um it was a pretty good size space and right next to it was the what was called the q or the q r c and it had just uh been born and I find it ironic but there it was and it was this about the size of a closet and I thought yeah okay put the queer people in the closet you know here we go so so that that was the women were in the basement and the queer people were in the closet I thought this is very interesting I wonder what we can do with this right so so many so the first thing that happened is that we knew that that the q r c was being treated disrespectfully that things had to change and the students knew this and they were gonna they were gonna have that that was gonna happen so there was a a year where the women's resource center was displaced into um a funny office and it was kind of a displacement year and in the process um the q r c the the whole lower floor was just gutted they just tore it up and then they split it in half basically and the women's resource center was one half of this long section and the q r c was the other the other part of it much better much more dignified and good the students were um I we we entered discussions about moving everything upward there was some resistance from some of the students some of the students wanted to stay low and kind of lay low they didn't feel safe and they said this is a place where people can go women can come here and they can get help and they've been sexually assaulted and they don't you know want to be up in the you know that this is the kind of it's down low kind of place is a good place for it and um but there anyway that story that that there was and it meant with the counter argument was what gee you know let's be proud let's get up out of the basement here let's get into the light so there were this was an ongoing piece and then the multicultural resource center was born upstairs so and then the commuter resource center was born so all these student centers just kind of were born of the women's resource center you know which had the history which was the oldest and was kind of the mother really well that's what it was um we were also very powerful painting of the t-shirts are why are t-shirts important I don't know they travel through time they're like it's ephemera of a sort you know they're deteriorating I mean look at this thing this thing's coming apart it's a mess rosemary's got some I've seen some of her t-shirts and they are so old and ragged some of them are just pieces of you know what there this is wcst so this is back you know to josephine county to that shelter that one you know women's shelter right and then this this thing look at this see this now I had to bring just one of my oldest right look at that stone wall see how rag bag that is it's coming apart because it just you know so what you get what do you have you have a tangible uh kind of trail of uh challenge and um victory and progress and pain and glory all and it is a bunch of freaking t-shirts you know isn't that a gas you know and then of course you know coalition right so I brought this one just to remember that nobody ever does it by themselves right you're always part of you know was part of the earth and part of everything it just isn't it just doesn't work that way so not not for women not for men not for anybody so you know this was a fave of mine because it's a little bloody they like that one to be kind of you know same purple right you know oops ah there we go right on there we go so that's how that works yeah so we created these different programs to really honor all the ways in which women were in the world and one of them was called circle of fire coalition women and it was all built around coalition the fundamental value in the women's resource center which was that we work with others we are not a silo we we reach tentacles out to all different kinds of of people to to men to indigenous people to you know we wanted to to the to the qrc there was this was the programs that came out of circle of fire were about that were about working in coalition and understanding the value and the power of that and then we had something called vivacious voices empowerment through education and expression and that was vivacious voices was about creativity and we did amazing things and probably the banner creative piece out of that was a program called Athena in velvet which was this this event this wild creative women's event that would happen once a year full of music and poetry and goddesses and it was just incredible and in comedy and it was wonderful and then changing woman health and wellness and that of course was around body and the power of our body and the it had things like our our support groups our body image groups yeah that was and fertility awareness workshop that's right yeah there were all these different programs that came and then were organized around around that another program new era liberty and justice for all and that was our justice program really and it was we we really celebrated the anniversary of real Wade we the women in leadership conference would happen out of new era it was about leadership and about the kind of the politics really you know and then we had sa fe safe creating a sexual assault free environment so an entire program dedicated toward creating safety for women and responding to sexual assault we had self-defense workshops we did r.a. trainings we did domestic violence awareness month we did a sad sexual assault survivors groups and of course we provided advocacy and then we did the vagina monologues annually which was an incredible fundraiser we were able to give away you know about fifty thousand sixty thousand dollars to different organizations we created a actually a fund over in the foundation there's a foundation account i don't know what happened to that about twenty two twenty four thousand dollars that was over there with the idea that we would eventually be create a scholarship fund so it was very effective very powerful and we worked together with the sexual assault response team the the community response team the sexual assault and did something called yell it tell it stop sexual assault campaign so so that was a very effective i the main thing i want to underline about this is that i i was never i mean coordinator was the right was the right name for for me i was wished i'd been called a director but i didn't direct anything i was just the coordinator i was like the catch system and i would make things look pretty you know organize them a little bit and stuff like that and i was there to be the consistency and the protector and the steward of the women's resource center i was what i i was the part that the women could count on women on campus and and quite a few men too that was that was my role other than that they did everything you know they really did and they brought the the young women and young men would bring their energy and their power and their creativity and their intelligence and their joy and their sorrow a lot of pain a lot of growing up that was happening as i spoke to the morning earlier the you know there is that final stage of human development that is so powerful when a young woman comes in as a where she's been you know a high school young woman a girl and then she goes to college and those years you know between 18 and 22 23 are so powerfully formative they're just incredible the trajectory is is amazing and you would see these these new young women who had come in very young and they by the time they would reach their junior and senior year they were raring to go i have never the the power and the fortitude and the clarity was stunning and you would watch this transformation into womanhood that's what was going on these women were getting their feet underneath them and and i just got to i just got to be there to see it and to guide it and to make sure it happened as in in a way that was as the most supportive that that could be right and of course they would support each other they were profound supports for each other there were friendships that were made at the women's resource center that continue and endure because because they were that powerful we were ingenious and tricky we did there was a there's a story that i can i can relate a few stories and one story is like this there was a fellow who came on campus and we can in in front of the union there's a free speech plaza he was a provocateur well he stood out there on and he would stand out there at the while the kids while the young people would pass by the students would pass by and he would say terrible terrible things about the shaming women's bodies that they were sin the original sin of eve and it was just and so he was and it was worse than that i don't need to actually repeat the the way in which he spoke but he was basically saying that that full of misogyny full of homophobia and so much so that the students were just you know usually students would kind of block do a certain amount of blocking out just go to camp you know i'm not in my class you know and but this guy was really nasty and i saw young men and young women engage him and try to find some way to get you know can you speak intelligently can i talk to you know and they would fight him you know verbally fight him and engage him and nothing nothing seemed to make a difference this went on and on for for probably a week or more it was it was quite a while it was a protected free speech space so and when the students had designated that and that you know that's what that was well at a certain point my young women had had enough they were feeling that it was harming people they were really aware and they were really acutely aware of the way it was hurting the people in the qrc the students in the gay lesbian queer union that because of this this really hateful rhetoric that was going on and they got together and we got together in the women's center we called a circle what are we going to do well well what are we going to do they said let's go make so much noise that no one can hear him anymore that's what they decided to do and i said okay that's what and there's an example really of empowerment right i didn't make that decision this is the women working together thing this is what we're going to do this is how we're going to address this and this is what we're going to do i thought okay so i accompanied everybody up we went you know 20 of us and we formed a circle around this guy and we danced and we sang and we shouted and we had tambourines and we were banging some pans and we made so much noise that he could not be heard at all and we did this for a good i don't know 45 minutes or more finally the the vice president of student affairs john eldrich comes out and he his eyes are big like this and he comes up to me and he says deltra please let them know that if they don't stop they'll be arrested i said oh okay and so i i turned to one woman in the circle i said we need to stop because we'll be arrested and she passed it around very quiet you know very calmly passed it around everybody looked at me and i said let's go so away we so we filed a little bit of a distance away the vice president that this point john eldrich said so he and a security card accompanied this man and said i'm good we're going to have to take you off of campus because and he said well this is a free speech space and he said yes but you've disrupted classes they can't hear in taylor hall and it's disrupting classes so you have to leave and off they went and they they i can still remember they walked up toward the library and my women you know we all looked at each other and as soon as they were far enough away we went down to the women's resource center and everybody who was around was watching and going wow that was fantastic i mean it was complete victory we went down into the you know down into the women's resource center the queue was going away to go away to go it was perfect it was a perfect solution elegantly done no violence took care of business they were something i'll tell you so uh that's an example of of the power out of the women's resource center we were looked to to keep to really um draw the line to be on the edge where things were a little dangerous and a little bit uncomfortable and they and we did we did that we created a sexual assault network all the way across campus trained a whole bunch of people on how to respond the basics of responding when a woman or man uh is comes and is sexually assaulted and and what how do you plug into this network to bring her to the services and the resources that she needs so so we were we were willing to dive in to the to the pain we weren't gonna we weren't gonna just stay on the outside there was a lot a lot of joy but there was also big pain in that in that first step into the adult world right it's a big deal it was a really big deal um and um i i just want to i just want to make sure that it's understood how how much i really love those women and i regarded them highly i regarded them highly it is it is so wonderful to see a woman get powerful it's just so wonderful and you know i think that's really the heart of feminism right because i always used to say to my women's studies 101 students i said look this is so much bigger than me it's so much bigger than any of us as individuals if i didn't know that you guys weren't going to go out there and keep doing the work of liberation and and and do and and freeing and and and and protecting and um empowering uh women i if you weren't if i didn't know that you guys were going to go out there if try to speak again if i if i didn't know that you all all of you young people we're not going to go out there and continue this work i just fold up and and that would be the end of me and i and i'd be in despair but you see i'm not in despair oh contraire i feel joy because that's exactly what's going to happen you're going to go out there and you're going to change keep changing the world that's what's going to happen and and so you see really big hard things can be tackled when people like that and you can count on it and i can count on it right so that's the joy of my work yep


Hi, my name is Kimberly Klein. I'm really happy to share with you the announcement of a new journal supported by the Federation of European Microbiological Societies called FEMS microbes And our tagline is open science toward a sustainable world So FEMS microbe is a new open access journal It's a gold open access journal and we are covering all aspects of microbiology and microbial sciences in the journal. And so more specifically we aim to publish basic and applied research within a broad range of microbiology including industrial microbiology, environmental microbiology, clinical and veterinary microbiology, as well as current methodological advances that would be of general interest to across microbial sciences And we've swept the journal up into five sections that we think encompass the diversity of areas covered by microbial sciences. So these are microbes and metabolism microbes and multicellular life microbes and disease microbes and environment and microbes and society I'm one of three editors-in-chief at the journal I'm based in Singapore and the other editors-in-chief are Jenna Jass who is based in sweden and Kathleen Scott who's based in the United States And I think you can see quite quickly and easily that we are an all-female editorial board And so this was not intentional, but it's a happy accident because one of our real big big goals of the journal is to promote diversity in the people that are participating in and publishing in the journal And this is also reflected in our broader editorial board. You can see on the left We have representation across genders across nations of origin across ethnicities career stages as well as scientific expertise In addition, we think FM's microbes is a really great home for your research publications for a variety of reasons We have really progressive publication policies. So we very happy to accept submissions of papers that are posted on preprint servers We have a very transparent peer review process. So authors have the option to have their peer reviews The comments from reviewers published along with their paper And they also have the option to publish their own author responses to those reviews In addition, reviewers have the option to disclose their names at the time of publication We also recognize co-reviewers So if a postdoc or a phd student helps a reviewer review a manuscript That co-reviewer can be acknowledged in in pub lawns We also offer scooping protections. So if you have a paper that's in the review process at fems microbes And a similar paper is published elsewhere This has no adverse consequences that we will proceed with the peer review process as per normal We also have publication discounts for all members of fems affiliated societies And we are very lucky that we are supported by our publisher oxford university press as well as fems To help promote the visibility of our manuscript and we can see how that's going through article level metrics And so we can actually gauge who's reading and who's seeing our research So we also are really Dedicated to engaging and supporting early career scientists at fems microbes and we're doing this in a variety of ways One is that we hope to engage early career scientists in the review process And so we know it's often hard to find those early career scientists and know what their expertise is based on How papers are published in the corresponding authorship that is usually affiliated with published papers And so what we've done is started a database of early career scientists And so we're trying to build this network of people that are interested in reviewing And so if you're interested in being an early career reviewer with fems microbes You can submit your letter of interest and a cv to the email here on the slide In addition, as I mentioned previously, we very proactively recognize co-reviewers via pub lawns So for folks that are participating as a helper in the review process We also are holding fems webinars that early career scientists are very encouraged to participate in either as a presenter So presenting the research that you're publishing in our journal or as a audience member In discussions for other people's work And finally fems microbes Is supported by social in social media by fems micro And so if you're interested in the social media aspect of sharing your research You can volunteer to become a journal social media editor You can just drop us a line or a tweet and get involved that way And so finally if you have any more questions or you'd like to know more about the journal Please check us out at these websites. You can get your questions answered And this will tell you more about how to get connected with fems microbes And thank you for listening. We're very happy to answer any questions