Today, we're going to be discussing Bermuda grass hayfield end of season management and the timing of the last hay cutting during the production season. To get us started, I wanted to first review overall goals of Bermuda grass hay production systems in the southeastern U.S. Bermuda grass is a warm season perennial grass that is often used in hay production systems because of its yield and quality aspects that it brings to the table. If you look at the figure on the right, you can see that overall quality aspects of Bermuda grass can be quite good depending on the harvest management of the forage in the system. So ideally, we typically take those cuttings around four to five weeks whenever we can optimize both the energy value as well as the protein value of that forage during the growing season. In terms of its efficiency, Bermuda grass is considered to be a very efficient crop per unit land area because of its high yield aspects and it supplies a quality product to livestock producers and it's often used as hay, as part of hay and supplementation systems in cow calf operations in the southeast during the winter months. One of the things we wanted to focus on today is how to maintain stand health of Bermuda grass over time. So as a perennial forage, we want to make sure that we're managing that system in a way that we have forage that comes back year after year, that is productive, competitive against weeds in the system and providing us with that quality product that ultimately goes to livestock producers. So in terms of Bermuda grass management for hay production systems, whenever we think about optimizing that production, this is where the concept of small things become large things. There are a lot of collective management strategies that we use in our Bermuda grass hay systems and whenever we begin to perhaps tweak some of those different aspects or change some of those management aspects over time, they can add up over a period of time to negatively impact the health of our Bermuda grass stands. So the photo shown here is a picture of what we call Bermuda grass decline. If you talk to extension specialists and agents around the southeastern US, I'm sure many of them have received calls just like we have about seeing my stand health decline over time or really just observing overall thinning of the stand over a period of a number of years. And so this picture demonstrates that concept. You can see that this is a stand that's coming out of dormancy in the spring of the year. The green area represents the Bermuda grass that's coming out and kind of the brown or patchy area is area that's now a gap in the Bermuda grass system. So very visible thinning of the stand in this situation. We see weed encroachment that's happened and in some cases we can see some thatch accumulation in places in the stand as well. So all of this are a function of the collective management of that stand from the previous season and perhaps even years before that have ultimately led to the decline or the thinning of this stand over time. So there's many things that can influence our overall stand persistence. The one that we wanted to really focus on today is how we manage our Bermuda grass stand at the end of the growing season. And what does that do to the root reserves that are used then to promote this regrowth during the spring of the following management season. So in order to manage our stands for persistence and help, when we think about just that aspect of taking the last hay cutting, we want to first think about the timing of the last harvest relative to the time of anticipated killing frost. So for Alabama, the dates of the first frost differ for different parts of the state. In the more northern part of the state we're looking at an early November window, whereas as we move into the more southern part of the state or the coastal plain region, we're looking at a later date in November typically for when that first killing frost occurs. So certainly there can be some fluctuation around this window but on average this would be kind of the timeframe we generally have in mind for when that first killing frost is going to occur. So that will influence when we should take the last hay cutting or essentially when we will have the final end of the growing season for our warm season forages occur. Is that killing frost will put everything into a dormant state until the following spring. So the question becomes relative to this first frost date, when should I take my last hay cutting and my bermuda grass system? And I would say that depends on a couple of things but one way we can look at this is first of all relative to this frost date presented here, is there measurable yield there in the first place? So if I were in North Alabama and I were to walk out into my field on November 8th, and the weather forecast tells me we're supposed to have a killing frost that night, if I only have two to three inches of regrowth since the last cutting then certainly there's nothing there that would provide measurable yield for us to cut off in the first place. So really the minimum amount of growth that we would want to see out there to justify final hay cutting that close to harvest or to a killing frost would be a minimum of eight inches of growth. And we'll talk a little bit more about why would we need to have this much growth in just a little bit in subsequent slides. The second situation is considering if it's an emergency situation. So maybe I don't have eight inches of growth out there in my field at that time, but I know that I'm gonna be short on hay and I'm not able to get anymore at that time. So I have maybe six inches of growth that I could go out and take a harvest off of that at that time and get some forage that I could use for later in the winter months. So this isn't something that we would want to do year after year, but in an emergency situation certainly it's something that people often consider if they're gonna be short on hay for the subsequent winter feeding season. So really then when should I take the last hay cutting? It depends on several things. And a lot of that is related to the biology of how Bermuda grass grows. So we said earlier that Bermuda grass is a warm season perennial forage, which means that it grows actively during the warmer months of the year. So the summer into the early fall, and then at that point, it really begins to slow its growth. The slowed growth that we observe in the fall months is in response to decreasing day length as well as decreasing temperature. So that's essentially nature's way of telling the Bermuda grass to slow down, that we're getting close to the time of that killing frost and to start preparing to hold on to some reserves so that that forage has something to pull from in the following spring to be able to generate new growth. So this environmental conditions that we see during the fall months essentially tell our Bermuda grass plants to shift plant carbon to the root system rather than solely essentially to the above ground yield aspects. So changing day length conditions encourage that plant then to begin to store carbon in the root system, which allows that forage to have a reserve for regrowth in the following spring. So in terms of timing of the last hay cutting then, essentially we should follow an all or nothing approach where we want to make sure from a Bermuda grass health standpoint and persistent standpoint that we're allowing that forage to have time to build up its root system to have that reserve for the following spring. So we can do that in two ways. We can either have adequate growth that's allowed to accumulate out there before the first killing frost or we can time our last harvest to really be exactly at the time of the last killing frost. So by doing this, what we're doing is we're allowing that forage to build its carbon pool up in the root system. And we're using the leaves as the solar panel to be able to capture sunlight and shift those nutrients into the root reserves. So in terms of thinking about the overall harvest management in the fall months, if we think about kind of in the early fall time frame, if we were to go in and clip that stand very short, what we would be doing is encouraging the Bermuda grass to focus all of its efforts essentially on regrowth. Okay, so we don't have a lot of above ground leaf material remaining, just basically stem material. And that plant is going to pull from its energy reserves in the fall months to try to generate some above ground growth rather than shifting it down into the root system to have something to use later on in the following spring. So ideally, in order to get a window on when we should collect the last hay cutting is not only a combination of the regrowth window, but also the overall harvest height that we would use at that time. So when we're thinking about overall timing of the last harvest, we're using our anticipated frost date as a time where we're going to kind of build back from to identify the appropriate time to take the last hay cutting. So what we want to do relative to that time of first killing frost is either allow the forage to have adequate regrowth before that frost event occurs. So generally that's going to be about four to five weeks of growth to try to get to about that eight inch target height that we mentioned before. Or we want to time the cutting according to frost. Okay, so that would be where if we were to go out in late October or early November at the time of the first killing frost and we had adequate growth, eight to 10 inches of growth in the field, we would ideally take that cutting and then the frost event would occur really within the next 24 hours so that that plant does not have time to try to regrow. So by doing that, we're able to take a cutting time at relative to frost where we're not in kind of that in between phase where the forage is just trying to get some regrowth on it when the first killing frost event comes and hits it. So the impact of this in terms of the root systems, when we think about the forage harvest height, we mentioned that it's not only a combination of the length of time that we need to allow that forage to grow to get it to a certain target height, but also whenever we take the last height cutting, we want to make sure that we're leaving adequate amount of stubble out there in the field to encourage regrowth. So this is specifically applicable if we are looking at that early fall time period for taking our last cutting, we want to make sure that we're getting a minimum cutting height of four inches and then allowing that four to five week window before the time of frost for regrowth. So by having a greater amount of residual stubble that's out there remaining after that cutting in the early fall, what we're doing is we're encouraging that plant to regrow a bit faster and by doing so then it's able to shift some of those nutrients back into the root system and better prepare for that time of upcoming frost. A study out of Florida showed that whenever you're looking at taking the last height cutting out of the season that with more residual forage that's remaining post harvest. So looking at either a four, seven or 10 inch residual stubble height remaining post harvest that they observe greater root reserves associated with increasing amounts of residue that were left. And so what this tells us then is that whenever we have a greater amount of forage growth that's remaining in the field before that first frost event occurs we have a better chance to accumulate nutrients in the root system of that forage which then helps favor persistence and gives that plant the energy that it needs to come out of dormancy in the spring strong aggressively and help fill in some of those gaps like we saw in the photo earlier in the presentation. So additional considerations as we think about end of season management.  So certainly the end of season management is going to be important for helping encourage better growth aspects of that forage the following spring or the next management season. But there are other things that we can do in the winter as well that can help us make sure that that plant is best prepared to meet the needs or the challenges that we put on it the following year as well. So one thing to think about is obviously check fertility during the winter months making sure that our sole pH as well as our potassium levels are where they need to be. So these are factors that can also influence the persistence of that forage over time and are a really good time to make sure that we're preparing to make those adjustments while we have time before the forage becomes actively growing again. Also weed management is important so making sure that we don't have too much cool season weed competition that occurs during the winter months that could perhaps delay Bermuda grass from coming out in the spring or begin to compete with that Bermuda grass in the spring as it comes out of dormancy. Finally we also want to think about thatch management. So if we were to have quite a bit of regrowth still out there in our Bermuda grass field after the time of frost we would want to think about trying to remove that so that we don't have just a large amount of thatch or dead material that's out there all winter long and can ultimately hinder again the emergence of that crop again in the spring. There are a couple of different ways we can think about managing thatch in the system. One is after the killing frost to cut and remove that material. Two is to think about using fire. So this is a great way to help control thatch that's out in our Bermuda grass systems to get rid of that residue over time. And then finally perhaps another thing that's not often thought about would be grazing of fields where applicable. So if you have a water source near the Bermuda grass a field that you're working with you could essentially graze off that material as kind of accumulated forage as a way to help remove some of that thatch during that time as well. So all of these are things that in addition to our end of season management in terms of harvest management can help make sure that stand is better prepared for the following spring and we are managing the stand and the residue in a way that allows that Bermuda grass to stay persistent and healthy over time. If you have additional questions about Bermuda grass management in general this is a new extension publication that we recently released that has information on hay production as well as grazing management of Bermuda grass systems in Alabama. It also goes a bit more in detail related to fertility, weed control, insect management as well as some of the harvest management things that we discussed in today's webinar. So I would encourage you to visit our website at aces.edu and if you put Bermuda grass in Alabama in the search feature it should bring up this publication for you to download and print at home. With that I'd be glad to take any questions if you would like to reach out to me by email I have that listed here and I would also encourage you to visit some of our Alabama extension resources AlabamaBeefSystems.com as well as regional resources SoutheastCatalystAdvisor.com to learn more about Bermuda grass management in the southeastern U.S. Thank you.


All right, I don't know what you guys saw or missed or not, but I'll just say that this is Philip Carter. We're talking about F-sharp. He was telling me about all these amazing things. You've heard nothing of that. So let's get back to it, and maybe start a little bit over again, maybe run through that again for me. We'll go through this a little bit faster because people didn't see this. So new version of the F-sharp language came out. We love it. It's pretty great. It has some pretty cool stuff in it. So I'm going to go through that, and then I'm going to show you how to get started for existing F-sharp developers and people who are new to the language. It should be pretty easy to get started. So there's a quick list of the feature set. So we're aligning versions with some assets. And existing F-sharp developers should be very happy about this. I know that I'm incredibly happy because it fixes a longstanding confusion. We have a feature set that I'm calling span of T and friends, but it's really a whole bunch of different features. And so I'm going to go through that and show how you can do better low-level programming with F-sharp. For better performance. Exactly. We have a new keyword, match bang. It's similar to our match operator, but it's more excited. We have some relaxations and syntax. So some stuff that you might have found, perhaps, not necessarily intuitive in the past are now just not really a requirement anymore, which is kind of nice. We have better async stack traces. So for our asynchronous computation expression feature, diagnostics should be a little bit easier. So we like that a lot. We have value option of T, which is similar to option of T, except it's a value type. So it's a struct rather than the heap allocated one. And so there's that type and a little bit of stuff with it, but it's kind of more a building block for some future things that we want to do with it. And then we have some smaller goodies in the F-sharp core library, just some nice improvements, some small performance improvements, bug fixes, lots of community involvement there, and a few kind of utility functions that kind of make your life easier. Cool. So let's talk about versioning. It's everybody's favorite thing to talk about. Hopefully we made it less confusing. In F-sharp 4.1, you had F-sharp language version 4.1. There was an F-sharp.core Nougat package version 4.3.4. And an F-sharp.core binary version <IP_ADDRESS>. Those numbers are different, especially the binary version. Everybody got that? Yeah, the binary version is something that people found quite confusing in the past, because the first four actually stood for CLR version 4, because there was a point-in-time problem with older versions of .NET Framework and newer versions of .NET Framework at the time. They're all older now, but at the time it was newer, and we needed to be able to differentiate between running on like .NET Framework 2.0 and 3.5, and .NET Framework 4.0 and higher. Gotcha. And that was a decision that was made that kind of made sense at the time, but sort of now it's kind of history and F-sharp developers with F-sharp 4.1 had to sort of inherit that history and not necessarily benefit from it anymore. Similarly, the Nougat package where the F-sharp.core binary lives in has had to rev in various ways that basically forced the numbers to become different. And it just ended up creating a confusing mess, honestly. So you're aligning that with this version. Yeah, now it's F-sharp language 4.5. The F-sharp.core Nougat package is 4.5.patch version, and then the binary version is <IP_ADDRESS>. Great. The first two numbers are the same, and we intend to keep it that way. Hopefully this makes everybody's lives a lot easier, certainly. It's a lot easier for beginners, too, as well, right? Actually, we have a couple of questions that may fit right here. So why would I use F-sharp? Like, let's back up a second. What's F-sharp good for? Like, why would I use it? Well, it's pretty much good for everything. I mean, it's a general purpose, functional programming language. So a lot of systems that you're writing, yeah, there's state and stuff like that. So functional programming is all about, oh, I don't want to have global state, I don't want to manipulate state in place or anything like that. But most of the stuff that people write are actually functional. Like, if you think about chaining HTTP calls, like you're giving something input, you're expecting output, you're passing that output as a parameter to something else. You're creating pipelines of, okay, data goes in here, gets processed a little bit, it comes out. I take that result, I do something with it. But like, I'm not necessarily mutating stuff all the time. And so when you're building these sorts of things, using a functional programming language will give you defaults in the language that sort of make it easier to do that. Whereas when you're using something like C-sharp, although you can certainly use it for these sorts of things, the defaults of the language are like, you know, everything is mutable by default. So you kind of go towards a path of mutating values all the time. When you may be working in a context where you don't want to mutate anything. And so with F-sharp, you have to be explicit about wanting to mutate something. And so like, it's kind of that inversion, but then when you're programming certain kinds of systems, that inversion helps. And so that's part of it. That's a great explanation. So great question, guys. All right, cool. So let's talk about some more F-sharp 4.5 features. Spand of T in Friends is actually, depending on how you count, I'm gonna count it as eight new features. Okay. So there are some new types. In ref of T, out ref of T, there's this type called a by ref, which has existed in F-sharp for quite a while, but hasn't really been fleshed out. It's basically this managed pointer type, but we didn't really have good support for low level programming with that. So we decided to flesh that out completely. There's production and consumption of by ref returns, which is something that sort of came out a while ago and has evolved for quite a while here. We have extension method support for by refs. We have a lot of safety checks for using by refs and by ref types, which is kind of the thing that holds it all together because you wanna be able to do low level programming in a high level language, but the whole point of using high level language is to be safe. Right. And so we basically restrict what you can do, similar to how some of the newer versions of C-sharp like C-sharp 7.2 and 7.3 restrict usage of certain things like span of T. We basically apply very similar safety checks just with some extra F-sharp semantics on there. We have is by ref like structs and is read only structs, which I'll talk about a bit more. And then we have the void pointer type and some functions in the native pointer module of void pointer and to void pointer. And so I wanna reiterate that span of T is a by ref like type. So we have the ability to consume and produce these by ref like types. And one of the most important ones that exists in .NET Core today is span of T. So it's kind of important to sort of flesh out everything around being able to use that effectively. So that's what we're doing. So let's dive into that a little bit. By refs, we sort of this trifecta, they're kind of, they're related to one another. Algebraically, there's in ref, by ref and out ref, where in ref is a read only pointer, basically. It's saying that the basically the person where I guess I should say the caller that has a handle to that pointer can only read the value, you cannot write to it. A by ref is read write, you can do basically whatever. And then an out ref for compatibility reasons is actually has the same semantics as a by ref similar to how it exists in C-sharp. But it's there for documentation purposes because you sort of wanna indicate that, oh, I'm only writing to this pointer, I'm not really reading anything there. Gotcha. And they have some subsumption rules so you could pass in, like if you're expecting an in ref or an out ref, you could pass in a by ref network. So there's some safety guarantees when you use these which did not completely exist prior to F-sharp 4.5. So you can, they cannot be used outside the scope that they're defined in. So if I define an in ref, for example, or a by ref in a given scope, and then I try to have that reference escape that scope somehow. So like say I have a function and then I try to have the reference to that value that I defined inside of that function escape the function scope, we disallow that completely. That's actually unsound and it can lead to depending on the way you use that value a crash at runtime, even though the code compiles just fine. Gotcha, okay. So that's why we disallow that. You cannot have them be contained within a heap allocated type because this is very much related to by ref like structs which are guaranteed to be stack only. And if you try to guarantee that something is stack only but you put it inside of a heap allocated type, then you're basically creating a contradiction. So we disallow that. They cannot be captured by a closure construct because that also allocates on the heap. And then we also cannot use them to parameterize a generic type. That's also a similar thing. A heap allocation could occur. And so the usage is restricted but that means that you can be very confident in sort of the safety of the stuff that you're doing there. So I wanna show a little bit about what that code sort of looks like. So you can see some of these in action. Cool. So let's define a first function. Let's call it print. Let's give it an in ref of int and we'll go print fn percent d. This is how you do formatted print for an int. And we'll just pass in x, right? So that compiles just fine. Notice if I try to go, if I try to write to the value, so if I try to change what x is, this allows me to, this by ref pointer is read only. Cool. So I can't write to it. Now, this does not mean that other threads cannot modify that place in memory, right? So it's still there still are complications that could occur in a larger system that you have to be aware of. But it sort of says like, okay, well, you know, for the thing that's calling this it cannot modify it. And I'll create another one. We'll call it print two. And it'll be a, by ref of int. Okay, so we'll print it out just like print. And then we will square, basically make it its square and then print it again. Okay. So in this case, I can read the value and I can write the value. So if I call these, so let's go, let's create a, let's say that's 12. And let's have num two is 13. Okay. I can go print num like that. And that's totally just fine. So this is, so this right here, this is how you sort of make something a, a by ref in this case, right? So print takes in an in ref. I'm basically getting a reference to num here. Now if I try to do this, check this out. Okay, I get an error. Now the reason why is because num two is still immutable, yet I'm taking a by ref and I'm mutating the value. So, so like I, what you need to do is you need to actually explicitly make this mutable. And so the error message sort of says like, you know, you know, you're not passing the right thing. So if I turn this into a mutable value, so it could change and then I give the reference, then I can actually mutate the underlying value inside of there and pass it to a thing that expects a by ref. That's cool. So this is some sort of, you know, this is sort of stuff that you're not likely to write this sort of code in all of your F sharp programs.  Let's say I try to define a value X and then we'll go let mutable 12, oh, sorry, let mutable Y equals 12. And then we escape Y from the scope. This is that scoping rule that I said right there, right? I defined Y to be inside the scope of whatever X is, but by saying, oh, well, effectively saying, oh, well, this reference to this value that I defined inside of here, this is actually escaping that scope so I can't do that. Similarly, if I defined this value inside of one of these functions and then I tried to extract a reference out of the definition of that function, it won't allow me to do that. So basically you have to try really, really hard to screw up your program with using these because any of the ways that you could sort of fall into one of those traps, it'll basically not compile. Cool. And so that's something that we're happy about because safety is basically one of the top reasons why you should even use a high level language or especially a functional language where safety is one of the things that's oftentimes brought up as one of the strong virtues of functional programming. So we're taking that quite seriously. Cool. So there's also a bi-ref returns, which I mentioned. So in F-sharp 4.1, we had support for consuming them, but you couldn't produce them. So this was a feature that came out in C-sharp 7.0 and it was useful if you're doing programming with like Unity or something like that where you want to, well, basically return a bi-ref and perhaps mutate the underlying values while also doing work at the same time. So we allowed, yeah, consuming them and you could sort of have fun with that, but you couldn't produce any code like that in F-sharp. You would have to write that in C-sharp. So we changed that. Now in F-sharp 4.5, you can both produce and consume them. The return value is implicitly dereferenced when you consume it. So we match the same sort of behavior that C-sharp has there. We also implicitly dereference the value inside of a for loop. This is helpful if you're looping through a span and you need to do something with each sort of offset that you have there. And then if you want to sort of pass a reference around the different calls, stuff like that, you just use that reference operator that Ed showed you. So I'm just gonna show you what some of that looks like here. So we got this bi-ref returns guy here. Let me set this as a startup project. Okay, so I have this horribly mutable code. I don't want to say horribly, this code is fine. It does stuff. It's functional. No pun intended. Yeah, exactly. So we have this type. I call it a sequence in eight or 5,000. Good name. Yes, and I have a mutable array of numbers that it holds underneath inside of it. And then I override two string. And so all I do is just basically just print out the numbers there. And then I have a method in there called find largest smaller than. So given a target, basically saying, okay, well, I want to basically go through and then find the value that is smaller than this target, but it's the largest smaller value. Do that with some very, very mutable code. Like a counter that I'm decrementing as I have a while loop. And then the key thing here is I don't return the actual value. I return a bi-ref to the value. Like in both branches in this case. So if you look at the type signature here, it's given an int to produce a bi-ref event rather than an int there. So if you want to actually use this code, it's pretty fun. So we'll go let s equals sequence in eight or 5,000. We'll instantiate one of those guys. And let's print out the sequence first. Okay, I'm using percent s. So this is formatted for strings there. And we'll go s dot. Do, do, do, do, do. Right, s dot two strings, sorry. Okay, so this is gonna print out basically just that same one, three, seven, 15, 31, that sort of stuff. Then we'll create a target and I'll just call it 16. And then we'll have the results equal to I'm using this bi-ref operator here because sort of when you work with bi-ref returns, you, the value is implicitly dereferenced to get the actual value. But if you want to work in terms of the ref, then you just dereference that actual call, okay? So we'll go find largest smaller than 16. Okay, so if you have a result, it is a bi-ref event rather than an int, okay? So then we'll go results and we'll just go, just multiply it by two. And you notice this is actually not letting me do it yet because I can't type. That was gonna say, I don't know F-sharp, but I'm thinking you, Mr. Parethzi. Yeah, well you can't talk thinking code at the same time.  Okay, so now we're going to call two string again. So recap, I'm just two stringing the underlying thing. I'm calling this find largest smaller than and then I'm mutating the value. So this value that it gives me back is actually a reference to one of these items in this array, this underlying array. So just go ahead and do that, debug, run this without debugging. And it should give me a value here pretty soon. Okay, so you'll notice these two sequences are different, right? So the underlying value is 1, 3, 7, 15, but then the second time I printed out was 1, 3, 7, 30. That's because I had a reference to the underlying value inside of there. So, sort of again, not the sort of thing that you're gonna be doing in everyday F-sharp programming, but if you are in a situation where you need to do like very high performance work, you literally need to be working in terms of pointers, this is the sort of stuff that you can do. Gotcha, in a safe way. Yes, in a safe way. Cool, so then we also have byref like structs, which basically it's an attribute that you can just apply to an F-sharp struct type. Can be applied to struct records and discriminated unions, we actually have a bit of an issue with the use, but the discriminated union, so I wouldn't quite use that right now, but. Anyways, what it allows you to do is sort of say, oh, well I have a value type that I've defined. I can now give it byref like semantics, right? So what that means is, okay, it cannot be allocated within another heap allocated type, so I can't have a class that then has one of these structs inside of it if it's a byref like struct, right? So I can't use it in the class or normal struct, because with a normal struct you can't guarantee that it won't be allocated on the heap. I can't do it in a non-struct record, I can't do it in a non-struct discriminated union. I cannot use it as the type of a record or a discriminated union case. It cannot be captured by a closure construct and it cannot be used as a generic type parameter. And as I mentioned before, span of T is a byref like struct. So very briefly, we'll just see what that means here.  It's unhappy. Okay.  There's no guarantee that this won't be allocated on the heap, yet span of T is a read only, sorry, a byref like struct, and byref like structs are guaranteed to be stack only. So the way that you do that, it's pretty easy. Let's go system, run time, dots, pretty sure it's compiler service, it's either that or interrupt services, is byref like, oh, I was right. Okay. So we'll just add that attribute and the red squiggles are gone. Okay. And so what this does with S now is now I could, this thing could contain spans, it could contain any number of byref like structs, but those safety rules that I just mentioned now apply to this. So if I try to do something fancy like this, create like just a simple record type and we'll go label is of type S, this immediately does not let me do it. This type instantiation involves a byref like type, it's not permitted. So the only way to do this is if R were also a struct and a byref like struct. Got it. So sort of this, I guess you could say poisonous. I don't know, but it makes sure that you can't screw up basically. Right. Okay. We also have read only structs. So is read only is actually interesting because structs in F sharp are basically already read only just due to the semantics of the F sharp language, but that's only something that other F sharp callers could really benefit from. As far as C sharp was concerned an F sharp struct is just a regular old struct. Okay. Well, C sharp has this notion of read only structs. And so if you apply the is read only attribute to your F sharp structs, then when you interoperate with C sharp, they will be treated as if they were also read only structs. Okay. And so the this pointer, for example, you won't be able to modify it as a C sharp caller and you won't be able to modify public members, that sort of stuff. And so kind of as I said with F sharp, this is sort of already been the case, the state of the world for F sharp only solutions is basically the same. But if you need to interoperate with some newer C sharp code and they're expecting read only structs, you can do this. And so as an example, read only span of T is a read only by reflect struct. So you can combine these as well. So you could create your own read only span like my fancy read only span, if you're up for the challenge. And you can do that as well. So. Cool. We also have void pointers, which are great. It's an untyped unmanaged pointer in F sharp code. This is basically a whatever the, wherever you want it to be sort of situation because void pointers and C are whatever they are. Right, right. So this is similar? Yeah, similar. So there are some cases where you got to interop with native code where you've got to use void pointers and you could not do that in F sharp prior to F sharp 4.5. So this is really used for native interop. Yes, exactly. And so we have some native pointer functions in the F sharp core library. You can convert from a void pointer to a native pointer of T and you can convert from a native pointer of T to a void pointer. And so sort of the difference there is that one is typed and the other is untyped. So you could say, okay, void pointer is just some stuff, but a native pointer of type T is actually sort of tied to an actual type. Right? And so you could bridge the gap there pretty easily. Whereas doing that before this was a lot more challenging in F sharp and most people probably wouldn't even try it. Okay, cool. So what type of applications typically you do a lot of native interop? Well, if you're doing, sometimes some game programming can get that way. Like super high performance type of stuff? Yeah, yeah, I mean, there's, I think there's still like, there's a lot of like, oh, well I have this unmanaged DLL or this C interface that I have to call into. Okay, when you're going down into like C assembly, okay. And that's just something that sometimes you just gotta do across a wide variety of applications. And so we wanna be able to sort of allow you to at least do that. Okay, make it possible. Cool, so we have the match bank keyword. Match! Match! Yeah, you can only say it by like shouting, stands up, like that. It's like go! Yes, exactly. And only if you're Eastern European as well. I drink half my coffee, so I'm very excited about this one. So this is a community contribution by John Wastonburg who's a member of the F sharp community. John! Good job. Thank you! People really love this feature already. So we're pretty happy about it. And it simplifies pattern matching in F sharp. Okay. And so it's often used with async code that returns an F sharp option. So I'll show what that looks like. Cool. Okay. No, I'm not gonna save. Saving is for losers, okay. Okay, set as startup, there we go. Okay, so I got some code here. Okay. This is try parse int async because you obviously need to be async to parse an int. But yeah, it takes in a string and then it just calls in 32.triparse. We actually in F sharp turn that out value into tuples. So true and V then basically false and underscore. We don't really care what it is if it didn't succeed. And then we return either a sum of the value or a none. And so this, if you hover over it says given a string produce an async event option. What this forces callers to do is once they have the actual value they can't just say, oh, I have the value now. They have to explicitly pattern match and say, okay, in the case where there was a value do something and in the case where there was not a value do something and it's impossible for you to move forward before you do that. So we have this function called print and print just calls try parse int async with an SDR string that gets passed in and then it just binds that result to a value called result. But result is not an int, it's that int option. So I need to now pattern match on that result and do something in this case printed out or saying not an int depending on what it is. Okay. This is fine. Like, I mean, this is really tiny code. So like this is really easy to digest, not that difficult. But when you have larger functions and larger expressions, multiple sub expressions and things like that, the inability to sort of call this async function directly inside of here results in a lot of blocks of code where you're like, okay, here's the result. Now pattern match on the result. I see, it's messy. Yeah, it can get a little messy sometimes. There are various ways to get around that and match is one of those ways. So I'm just going to extract this guy out here. Okay. And notice that it's still not quite happy because it's saying, oh, well, I got an async event option rather than an option. So that you just need to make it match bang and all of a sudden it's happy now. And so what this does, this is basically just syntax sugar for what you previously saw. Oh, okay. So it's just a way to shorten that expression up. So it calls this, yeah, it binds it to a value and then it pattern matches on that value. Got it. So it's doing the same thing behind the scenes. Yeah, and so it's just a very, just sort of nice thing. Nice, nice cleaner thing. So I've gotten some Twitter mentions from my Sharp developers saying. So John was just really annoyed with all this mess apparently and just said, you know what, let's just put a bang on the other thing. No, he's actually really cool. Yeah, it was a really, really great interaction. It was an issue created on our language suggestions repository. And he basically said, I'll try it. And so we said, okay, can you write an RFC for it? And they said, yeah, sure. So we wrote this back and then he gave us a pull request. And then we just worked with him on that pull request and sort of helped him with some of the errors and stuff and he did it very, very well. And then we merged it in and now it's in. That's awesome. The power of open source. And yeah, and he implemented it end to end, right? From the idea all the way to actually shipping into a product that was entirely an open source thing, which is pretty cool. We should get him on the show. Yeah, that'd be pretty cool. Cool, I like that one. Yeah, it's a fun one. It's just nice, makes things nice. I like when things are cleaner. Yes. So then we got relaxations in your code. You like to be relaxed, right? There you go, yeah. So got some fancy words, upcast with yield and F sharp sequence lists and array expressions. Use of the upcast operator is no longer needed when you need to use a super type with yield. It's an edge case that was annoying. And we got rid of that. Okay. Indentation for lists and array expressions, particularly with named arguments and method calls. There is a F sharp to JavaScript compiler called Fable and a UI programming. I've heard of that one. I've taken a look at that one. They're pretty great. And a UI programming library for it called Elmish that has a particular style of programming UIs that would run into this indentation problem all the time. And so just to show you what this looks like, got my relaxations file here. So this first one is collections and subsumption relaxations. I got, so X is an OBJ list. So string is an object, right? And similarly in a list of string is an object, it's totally fine. Here, if I needed to do this yield A, I needed to explicitly cast this to object. And so that was kind of annoying. You don't need to do that anymore. Now it just still compiles. And F sharp 4.1, this would not compile. I see. So it's just less stuff. Less stuff to do. And then this indentation relaxation, something that you may find a little strange is the fact that, okay, so I have this open bracket here, but then this, instead of being over here, it's just, it's right underneath the hello. This was something that was required in F sharp 4.1. And so people would write a lot of code that looked like this and then they'd get an indentation warning. Yeah, that's always what kind of hung me up in an F sharp in the beginning is those indentations. Yeah, this sort of stuff. Well, so some of it can be pretty easy to diagnose, but this stuff was oftentimes really difficult to diagnose. And especially if you're doing Fable style programming because these sorts of expressions here would be like nested.   And you would write code that kind of looked like that, but then somewhere in there, you did this when you actually needed this. And it was really difficult to track down. So we just kind of got rid of that. So that should make some people's lives easier, especially if they're doing UI programming with Fable. Cool, very cool. Yeah. Okay. And then we got value option of T. It's like option of T, but it's a struct. It's not much more to it than that really. It's a really easy one. That's what value means. Yes, it's adding value. So let's just change this. So you know how I have this sum and none? I'll just make this value sum, value none. And now it is an int v option rather than int option. You notice this doesn't compile here because I'm expecting an option instead of a value option. I see. And we'll just modify it and there we go. It's, you use it the exact same way you use options today. It's just, it's a value type. And so the reason why we- Why don't you use a value type? Right, so there are some cases depending on how your system runs where value types can be more efficient. You always gotta measure that. But those cases do exist, they are real. And more importantly, this optional type is also used under the covers and some other F-sharp constructs such as F-sharp active patterns. And F-sharp active patterns are something that a lot of people use because it's a really, really nice way to sort of express the combination and sort of like the notion of a function that you're a pattern matching over. And so you could not create struct versions of those. And so, well, you still can't do that today but this is the first step in building that out. And so this is something that sort of again was a community, not a community contribution to the community idea. And we had a lot of discussion with people there about sort of like why this should exist, what some of the benefits are, what some of the drawbacks are. We had some community involvement in writing the spec for this. And so then it was really easy to implement. So we just implemented it. But so in future F-sharp language versions, you can expect more stuff to be built out around this so that we really sort of flesh out the idea of full F-sharp programming with value types and reference types. Cool. Yeah. And we got better async stack traces. So this- That sounds like really good idea. This one I like, yeah. It's always good to be better. It's always good to have a stack trace that makes sense, right? So in the before time, information in stack traces was basically not really usable. Okay. I'm not gonna sugarcoat it, it sucked. It did. And like you would not get your user code in the stack trace. You would not get your line numbers in the stack trace. So like what's the point of a stack trace? Yeah, exactly. Okay. A little frustrating. And so they're still not perfect. There's a lot of work that has to go into making them good. But today, now with F-sharp 4.5, they at least user code names are in the stack trace and user code line numbers are in the stack trace. So you know that helps people that are just getting started with F-sharp to debug their code, you know? Yeah, so I'm just gonna modify this. So you know this N32.triparse, this is kind of safer. We don't like to be safe. We're just gonna return N32.parse value, right? This could throw an exception easily, right? If I pass a string that's not a number, it's just gonna throw it. That's the sort of thing there. So we'll go let's, let value goes try parse int async and we'll pass in str. Notice that value is an int. It is not an option event. So you do away with all of this. And we're just going to print out the value. This is unsafe code. Like this could fail in all sorts of different ways. So let's demonstrate that. So we're gonna, so I'm gonna create an array of function calls. So this is another thing. Functions are first class values in F-sharp. So you can do all sorts of fun stuff like this. So print 12, this is gonna work, right? Print 13, that's gonna work as well. Print, Beth, that's not gonna work. Okay. Okay, and we'll go async.parallel, right? So we're basically going to parallelize all of these and async.run synchronously. And I'm going to just ignore whatever the result is because I don't really care what the end result here is. This is gonna crash. And we wanna look at the stack trace. Exactly. Yeah, we're looking at stack traces. That's so exciting, isn't it? No, but people should actually benefit from this. They shouldn't enjoy this, even though stack trace is not necessarily the most sexy demo here. So we got this unhandled exception. I'm sure plenty of people have seen something like this before. I believe the font is big enough. But something I wanna call out here. All right, so we got the system format expression. Sorry, exception, this number, string to number, parse in 32, parse. But then right here at program.triparse in async in program.fs line seven, right? And then there's some stuff in there that we kinda wanna get rid of, but like, you know, it shows program.print at line 12 and program.main in line 18. So it's still not perfect. You mean we didn't get that before, huh? No, you wouldn't get this. You would get the internal closures of what's created under async, and so it would just be useless information to you because it would say under, oh, async.bind. And you're like, okay, great. Which one of the thousand async.binds do I have? So this seems like it's usable now. Yes. Okay, that's a good thing. It is usable, and so I wanna stress it's not perfect. There's still plenty of room for improvement. And it's a difficult space, so I wouldn't expect crazy improvements happening. Really, really fast or anything like that, but it is gone from basically not really that useful to something that you could probably use today. So we're pretty happy about that. Cool, we got a comment. What you did in four or five is great. Oh, thank you. Thank you guys. Okay, so then there's some additional fsharp.core things. Just nice little goodie bag. We got these funk convert APIs. So this is for C sharp interop. If you wanna interoperate between C sharp action types and F sharp function types, you can do this funk convert.from action and front convert, sorry, funk convert.to action. And we have various overloads for them that match the overloads of C sharp actions. And so with previous F sharp 4.1, you didn't have this. And so you had to kind of create this little contraption to interoperate between the two. And so now you can just interoperate directly. People interop a lot between C sharp and F sharp? It depends. I would say that especially for, so I would say that the majority of C sharp programmers that get into F sharp and they try to incorporate it into the workplace in some way do end up interoperating. Some people are able to do just all F sharp the whole way. And so this is not something they probably ever use. But this is really beneficial because, I mean, space F sharp, it's a .NET language. There's a pretty good chance if you're working with large .NET systems, there's gonna be C sharp involved. And so we wanna make- You have an existing system and you wanna extend with F sharp. Exactly. Similarly, we have map.tryget value. This is, it's similar to try parse API as an F sharp. It takes in, a bi-raff returns a bool. We convert that into a tuple for F sharp callers. It's just a nice quality of life thing. It actually allowed us to clean up some various code paths in the compiler. So we were pretty happy about that. And some other members in the community were happy too. And then there were just kind of a swath of general improvements and bug fixes. The F sharp community in particular did a lot of bug fixes, performance improvements, that sort of stuff through this core library. I would be listing like a hundred items here if I had them all, but- That's awesome. Yeah, it's pretty great. People like Stefan Forkman, Matthias Dietrich, who are members of our community, they just, they're constantly submitting pull requests that improve everything. And like, you know, a lot of the stuff that they submit, it's not big stuff. It's just making one tiny little thing better. And then over time, it just makes your whole life better because all these little nuances that you may have disliked over time are just now all of a sudden better. And from the team's perspective, they have to prioritize other things. And so it's nice to have the community pick their own priorities on things because it's gonna benefit everybody, right? Absolutely. And another thing is that people, so like people like Stefan and Matthias, they submit really, really high quality stuff. So there's basically very little risk in taking their changes, which is amazing. Like we have extremely high quality contributors who really care deeply about this stuff. F-Sharp is a very passionate community. I do know that, yeah. Yeah, they're pretty great. So that kind of rounds out what we got for- So that's all the get new. All right, that's all the new stuff. So all right, yeah. So we actually have, I've seen a lot of questions throw by here. Like, hey, you know, I like, I love C-Sharp, but like I'm really having trouble getting started with F-Sharp. Like, you know, I like, where was one of them was like about indentations, you know, main reason why I really dislike F-Sharp. It doesn't make sense. Sounds like you're helping correct some of that. But like really like what? Like for me, I also see them not a functional programmer myself. I remember way back in the day when I was learning object-oriented programming, there was just like a light bulb went on at one point, you know? At what point did like you get that light bulb? What is that thing that like really like it started to click for you? Absolutely. So at my previous job, I needed to write a DSL. Basically like if a system gets large enough, you need a DSL. Yeah, okay. I think that's just kind of how it eventually works out. And I Googled like, oh, how do I write a DSL and C-Sharp? And I saw something saying, oh, do it in F-Sharp. And I was like, interesting. I was just kind of curious. And I saw, you know, that F-Sharp was a thing. So I decided to give it a go. And I spent like a week kind of learning the language and building a DSL parser. Oh, sorry, a parser for the DSL that I needed there. And I ended up really, really liking it. And there were some great resources available to me. I'll actually bring up one of them right here. So there's this blog called F-Sharp for Fun and Profit. It's a really, really extensive blog by Scott Willaschen of the F-Sharp community. And so like there's, you know, there's some cool stuff here, but then what's nice here is there's a 30 part series on using F-Sharp and kind of comparing and contrasting with C-Sharp. And so as I was building the thing that I needed, in this case, a parser, it could be like unit tests. It could be any kind of data manipulation thing. I just sort of worked through each of these items as I was going and within a week, I had something functional. Heck. That's awesome, okay. Yeah, and that's just one way that you could get started. But there's a few more things that you can do here. So if you want to get started with F-Sharp 4.5 today, you got quite a few ways to do it. We have this here website, aka.ms slash F-Sharp home. This takes you to homepage that we have here and there's just a real nice big button that says get started with F-Sharp. You can just click that and then it'll tell you to download the latest Donut Core SDK. Okay. And F-Sharp is fully included in Donut Core. So this is completely cross-platform. Visual Studio also distributes this same SDK. So that's what I had in my, there we go. That's what I had in my IDE, for example. All of this is just .NET Core. All of this is just installed by default. Okay, cool. I just installed something that has .NET Core with it and boom, F-Sharp is in there. You're using Visual Studio too, so which version of Visual Studio do you need? This is version 15.8, so this is the latest version. And so under that, there's some templates there. We got some Donut Core stuff, some unit test projects you can create an ASP.NET Core web app if you like. It uses an OOP API, but what's helpful with that is if you understand that API, you could kind of work with that with F-Sharp object programming and then slowly sort of work in functional things as you go. You know, the Donut standard class libraries, all of this just comes directly from the Donut Core installation. And so to prove that, I'm on my Mac here. I've been on the Mac the whole time. Tricks me. Yeah, I know. I have my repo here.  It's the 400 plus family that has F-Sharp there. So we'll go .NET new console-ling F-Sharp-O FS45 demo. So this is the same thing that you would do in C-Sharp. So I can go inside of there and then I'll open up Visual Studio Code. So Visual Studio Code here, I've installed a few plugins. Most importantly, I've installed the Ionite F-Sharp plugin. You can see it has over a million downloads. This is actually a 100% community thing, but I've been saying it's really, it's the official F-Sharp plugin for Visual Studio Code. The F-Sharp community has basically been building this out and it is updated like crazy all the time. I definitely recommend using it. And so there's some pretty neat stuff there. You can get a little tree view with this little Ionite icon that you got there. And so I got my program .fs. I can do kind of whatever I want here. Let's go ahead and take this by ref returns call, or sorry, code, and just stick that in there. And then we'll run it. It's gonna .net run, there we go. And we have that same output of 137.15, 137.30. So like this, it has F-Sharp 4.5 in there. It's just the .net SDK, just .net new, whatever you got everything you need in there. And so this, I definitely recommend Ionite. It's really, really great. It's got good tooling, that sort of stuff I can control. So if you're developing, if you're developing on a cross-platform, if your development is on a Mac, then this is exactly what you need to get started with F-Sharp 4.5. Oh yeah, this is definitely one of the easiest ways to do it. But if you're developing using Visual Studio on Windows, you're still writing cross-platform apps, right? So the running of them can go run anywhere. So you can choose your development environment and choose your target. Yeah, you can do whatever you like. If you're on a Windows machine, you can use Visual Studio. If you're on a Mac, you can use VS Code. You can use Visual Studio for Mac. If you're on Linux, you can use VS Code. Just like C-Sharp. Yeah, exactly. Okay, cool. You can do it basically everywhere. And so we have a lot of Swipey Swipey going on here. So we're like running a little bit out of time here, but I want to get some questions, though. There is a question, there's a good question right here that I wanted to address here. So has the process of making type providers been worked on to make it an easier process? That's probably my favorite feature of F-Sharp. Making type providers. No, because type providers are an inherently difficult thing to create of your own. Now, using type providers is easy, but creating a custom type provider of your own is difficult. It's basically building a compiler plugin for an arbitrary data source. So it's, well, let's take that back. Well, if this person has any suggestions, you can go talk about it. It is slightly easier. The type provider SDK has been improved. And you can use .NET standard components and stuff so you can have them run on .NET Core. But fundamentally, it is sort of a difficult space. And so that's kind of more for advanced F-Sharp programmers. Okay, got it. Any plans for supporting protected members? It looks like somebody said, nope, right there. No, definitely not. That encourages inheritance hierarchies, which we avoid in F-Sharp. You can do inheritance hierarchies, but we really, really don't want people to be doing that. Cool, well, great presentation, Philip. Looks like we want to see more training material done by you. All right, so you gave us a great resource to get started. A couple places to go, guys, right here. There was a question earlier on how to watch all of these sessions. Like you can go to our YouTube Visual Studio channel, or you can go back to channel nine and you can go watch shows. Anything like that? So we want to tell the community here about F-Sharp, like get started and start using four or five. Get started, get started, give it a shot. Just create a basic console app says Hello World. If you're not an F-Sharp programmer, just try it out. It's a lot of fun. The syntax is vastly different from C-Sharp, as you can clearly tell, but that difference in syntax really, really grows on you, especially as you start using different types that, so like an example that we have on the website here. See if I can blow this up. Creating a type and pattern matching like this in C-Sharp is like an order of magnitude more code than it would be in F-Sharp. So if you value that sort of stuff, you want to give it a go, sort of see what different programming is like, then I highly recommend checking it out. And because it's all running with .NET Core and available in Visual Studio and basically any tool you like, it's really easy to get started with. All right, well, thanks very much, Phillip. It was awesome. I learned a lot today. Hope you guys did too. And we're going to go off to the next session there. So thanks a lot. All right.


and welcome to the webinar on quality of youth exchanges. We call this webinar from idea to project application. Yeah, so we're gonna look at what are the steps, what happens from the very beginning when idea pops up until the moment when actually you have a project and you have a project grant. And this webinar is part of the massive open online course on Erasmus plus funding opportunities for youth. So this MOOC is happening already, it's a sixth edition. We are organizing this online course since 2015, with more than probably 4,000 learners who already completed the course. This is special year this year because the course is ongoing. It started in February and it goes on until the end of the year. So actually if you're watching this webinar and you think, oh, I never heard about this course, no problem, you can easily enroll to the course and get access to all the materials we have. And at the end of this webinar, I will look through some materials, especially focusing on youth exchanges. But you can find a lot of material there on youth worker mobility, on strategic partnerships, on structure dialogue, on cooperation between program countries and partner countries and what these two words mean also. So there will be a lot of resources and my colleague, Narius, who is helping more technical part will also post in the chat the enrollment link. Those watching on Facebook, you will see enrollment link to the course in the comments below. So you can really catch up with the content and you are never late for our course and you're always selected to our course because course is unlimited for any amount of learners. And this particular sixth edition is financed and coordinated by the German National Agency, you can put Europa. So thanks to our supporters and we go on. And today in the webinar, we have two guest speakers and by now more than 30 participants. So the flow today will be this, that at first we'll start from Emil Vingren, who is a youth worker, a worker of young people and actually does what the name of the webinar tells. Supports young people in implementing their own ideas, yeah, their own ideas and kind of guiding them in implementation of youth exchanges and youth exchanges need money and support. And that is why the role of National Agencies is very important. And that's why we have Paavo, should I say Pukinen, yes, so Paavo is from the Finnish National Agency. He works with youth exchanges for already many years and he has a lot of knowledge about that and he will present the kind of approach of the National Agency and especially the importance of youth involvement in youth exchanges. Plus Paavo gonna share some exciting resources, how you can learn more about youth exchanges. If you never did any youth exchange, if you never heard about it, or even if you heard something, there is still always certain things to learn more. So that's a brief intro and I think we can go to Emil and maybe you can also tell a little bit briefly like where exactly you're from, what is kind of your working environment and also other people can ask questions. So you can use the chat and make sure you click everyone so everyone can see your questions and you can ask questions there. Those who are watching us on Facebook, you can write questions in the comments and we'll make sure we voice these questions. So Emil, the floor is yours. Okay, thank you and hello everybody. Nice to see some faces here also. I was afraid I'm gonna speak to my own picture only and that would have been sad. So yeah, I greet you from the tiny town in Cardleby in Finland and I am gonna share the screen here to ask Google where I am and show you. So here is Europe and here is Finland and I have the chat window in front of the zoom in but we will do it like this. So there you see. It's so small, it doesn't even have a name but I'm sure the only one who has been here of you is Paavo and I'm happy for that. Now I wanna exit the screen. No, wait, I'm gonna ask Google again about some pictures also. Do you see it? Yes. Yes, here is some. If we press Nikali on Google, we will see that. You will see a nice river and a small, small town. Yes, that's it. Now I wanna go out of the screen sharing. Where do I do that? There should be a red button stop sharing on the top usually, on the top of your window or I can stop your sharing if you want. Stop me, stop me. All right, great. Yes. So I'm gonna talk to you now for like 15 minutes about our European youth work and my view and our way to do it. I know many of you have a lot of experience in the area but it's always nice to share and compare and I'm happy to get the invitation to be here. Yeah, so I work for the municipality or for this small town and that's by that organization we do the projects. And it was 13 years ago I got the question suddenly that do you wanna go on a travel? It's free. You go as a leader for six girls and you also get paid for it a bit. And I was like, what's the catch on this now? And there was no catch and of course I wanted to do it and that was my first youth exchange and my first experience of a European youth work whatsoever. And it was crazy, it was not well arranged but it was still an amazing door that opened to and that became a big part of my life. And so I wanted to, I wanted more and I wanted to learn how to do projects myself and to see what it could be if you arranged it better or in a different way and together with the youths. So after that year by year I took over all our youth work piece by piece and kept doing more and new projects. And to be true, a lot of the work I do it was more fun the first years you did it. But the exception is the youth exchanges. It's still equally fun and it's still the greatest thing ever. So therefore I like to talk about this and invite new people to this world of youth exchanges also. We try to travel on a youth exchange every year and we arrange a youth exchange every second year. So it's no mass production but we are doing it every year. And our last projects was, they looked kind of similar to what our projects looked like 10 years ago. But the way of doing it and the way of looking at it has changed mainly in the way that it's been for me like a 10 year process of stepping back giving more responsibility to the youths and seeing that the main value is in the process and it's not about making a perfect event. And this is still ongoing I learned by every project. Yeah, when planning for this webinar I figured out the six points for success in this topic. And number one, the base of everything you do is create a good relation to the youths. That takes time and effort. I want to be a team player to create openness and trust. And I don't wanna be a teacher telling the kids what you should do this and you should not do this and so on. So that's important. Number two, the youths make the ideas. Some ideas are great, some are not but I still say yes, let's do it. At least in the beginning. Like for example, we were planning a youth exchange on topic of health, nature and creativity and one girl wrote on a post it like, nature music. And I said, wow, I have no idea what that is but this sounds great, let's do it. And this brings us to point three which is follow through their ideas. Support them to evolve the ideas but don't change them to something else. The youth need to experience that, that, whoa, I wrote this seven months ago on a post it and now we actually did it. So yes, seven months later, 40 international people went out to the forest made music and that became one of the most rememberable moments of that project. And point four, give them responsibility. As I mentioned before, it's usually easier if you do it yourself or if you tell them exactly what to do, but no, we should step back. We should support them, trust them and embrace the failures and try to make the best out of that. Because it's in this process, the learning happens and the learning is the result we want. Number five, do the work and the play all of you together. So do the cleaning, collecting the equipment, arranging the rooms and all these boring tasks builds the feeling that this is our project. We did the work and if it feels too boring to start with I use the tool of pizza to get the youths more interested in it from the start. And also, yes, do the play together. I try to take part on everything in a project like either as an observer or a participant to be there on every activity. I have a fly in here.  Laugh together at ourselves and at each other. This will make it so much easier when you later need to talk about more and more difficult stuff. So yeah, that's six pillars I wrote down now for this. And now a bit more practical about how we do it. So I know many of you don't have a youth group that meets regularly, and that's also fine. But I have an international club which we meet on a set time once a week most youths are 13 to 17 years old. So they are quite, I worked with quite young youths. They register in the autumn for one year. And on the club meetings, we do a lot of getting to know each other, a lot of team building and learning in the multicultural topic. And we prepare ourselves for traveling, for youth exchanges and we plan and do youth exchanges. So I mean, can I ask here, you mentioned the age that you mainly worked with 13, 17 years old. I can notice a tendency that many organizations tends to usually involve people over 18. Yeah. Would you have some arguments from your experience? Why would it matter to do it with the younger people? Well, I think this depends a lot on the culture where you come from also, that the maybe more here up north youths want to, you know, after they're 18 they can travel by themselves. So I think the need is when they're younger to do this as a first travel project without their parents and then they can go on to EVS or Solidarity Courses, excuse me, and stuff like that. So yeah, yeah, I know many projects are from 18 and up and it's of course a bit different. Yeah, the goal is that we go on a youth exchange every year and sometimes it doesn't happen the first year so it might be they are on the club meetings for more than a year before they go on a youth exchange so it can be a long process. But it's always here at the club that the project starts. We ask the question, do we want to do a project? And they will say, yes, we do. And for the new youths, they at this point need to learn a bit what is a European youth exchange because most people don't know and it's difficult to get going even doing the first steps if you don't know what it is. And also to get the extra motivation because the older youths who have been on a project, they know how good it is. So they can motivate also the newcomers for this because like which 14 year old want to spend hours and hours making an application for a project happening in a year. It's like that's an eternity for a young teen. So you need to be motivated and know that it's something good is coming. What is this kind of driving force for people? What do you think? What keeps them still doing something that might happen in one year also might not? Because when you apply, you also kind of never know. Exactly, what people are looking for the most actually when they start engaging in this process? Well, for me as with this ongoing group, it's like I see it as an organism also that the older infects the new ones and then they learn they have a collective knowledge. They know how that it will be good. And I also a goal for me is for every meeting that we will have fun also. Because if we do things that the youths think is boring, then they come here on their free time. If it's boring, most of them won't come next week. So yeah, also have fun. Do a bit of work for the project, but the fun is very important and motivation of course. And if you could go briefly because we have this kind of topic of from idea to application. So you gave some principles how to deal with young people. If you would say what are the kind of key steps for you when from the moment when people say, oh, we want to do something as you said music and environment, what was it? So like, okay, what are the main steps until people arrive at the common project? Yeah, yeah. Well, as I said with the motivation also that it can feel big and long time and you know, so I want to keep it simple from the beginning and the best thing is to start brainstorming what do the youths want to do? So this is the starting point. And then add the questions that why do we want to do it and how can we do it? So practically we meet, we produce a lot of post-its with activities. We would, I would like to do this. I would like to do this. And from that on, we discuss and select and evolve these ideas. And the part where my input is mostly needed it's the moment when we try to discover a theme and needs to see how it fits to the Erasmus Plus program to find something. Okay, youths don't want to be out, they want to do sports, they want to play games. Okay, well, we can get that to some kind of help team and maybe add something. So yeah, we put a lot of effort in the, from these post-its to make the daily schedule for the project. So we make a detailed daily schedule. And I also quite early put the names there. Okay, this is the workshop, this activity, who will do this? So there we put two names of two, three youths and that will give them a responsibility also. They know this is mine. Yeah. So do you want to say, Emil, that the program is actually also done by participants and it's not you doing all the work? Yes, yes. The daily program is all made by the youths and then parts are made by the other groups from other countries. If we talk a bit of partners also, there was some in this info about this, there was about how you choose or find partners. For us, when we've been in this area such many years, we have quite a network of good partners. So I'm in a good position, we can kind of choose everybody wants to be in our projects and we can kind of choose and therefore I can also put demands on the international partners. I demand them to write in the application and I demand input from their youths also so that there are also in the application some input from the youths in all countries. Yeah, and it's, I mean, if you're a newcomer in the area, maybe the others of you have better suggestions how you find good partners and so on because it is essential to have good partners and you have this like a view of youth work that sometimes how connects with yours. Maybe meanwhile, I will check with Narius if there are any questions either from Facebook live or here from the chat. Yeah, we have more reactions rather than questions. Let's say Mark from Facebook saying do stupid things makes it easier to talk about more serious things. Yes, so I think he's agreeing with a message then. Also Bruno says that could be a motto for his life and then it's also the question about under 18. Some people are commenting that yes, exchanges should be better promoted to under 18. So that would be somebody from Facebook commenting and in our chat on Zoom, Paolo is saying that never underestimate the power of food to interest teenagers. Daniel is saying that of course impact and the learning process is bigger on teenagers than 18 plus. So that would be maybe a comments and reactions to what Emil was sharing. Yes, and later we'll look at the MOOC environment and we do have some resources on partner finding and principles of partnership and where people can actually look for partners and what makes it to be a good partnership. Yeah, I think my time is running out. Right, so should we end it here and we can, yeah. I think we can continue with Paolo more from the approach from the National Agency. And anyway, I encourage people not only listen but to reflect, think what does it mean in your practice and if you still wanna ask some questions, please do so. We'll try to respond and if we won't manage with that, we can move on the discussion back to the online course discussions. So now I'm giving the, thank you very much Emil for your input and for your experiences, cool principles of working with young people and it was good to hear how you do your work. And now we're switching on to Paolo who is now probably in Helsinki. Yep, Helsinki Finland, the capital of Finland. And hi everybody, it's nice to talk to people. I also take care of organising trainings when they are the actual trainings when we meet and I enjoy meeting other people. And many times I deal with youth exchanges because that's the project type that I've been working with over 16 years in the Finnish National Agency. Well, shall we just go to the presentation? I will, my idea is to explain you one way of working with the young people and the tool that we have created for doing that. Like you heard from Emil's presentation that what we really support here in Finland is that the youth exchanges are exactly young people's projects that they make themselves rather than projects that adults have made for young people and recruit the young people later. And there's a story behind this. You probably understand that these funding programmes in Europe, they don't just fall from the sky. There's a lot of politics behind and there's lots of planning and lots of fighting for the funds. When Erasmus Plus programme started, it was a very difficult thing. There was a youth programme with funding that was called Youth in Action. It was a separate programme that was funded from a separate budget line. And the lifelong learning programme that was where the formal education programmes were. When it was decided that all of these would be go under the same programme, Erasmus Plus, the first thing that the colleagues from the formal education part said was to question that why in the youth programme we would have these one week long holidays for young people to Europe. They were referring to the youth exchanges. This is how youth work is many times seen from the outside and also I'm very well aware of the fact that the youth work is very different structurally and in the different countries in Europe. The colleagues in the commission had to explain them very carefully the original idea of youth exchanges. Youth exchanges are not one week trips abroad. They are long term learning experiences. It means that the original youth exchange that is still something that we always teach everyone to do comes with the idea of the participating group and then exactly like somebody said in the chat, the adults role is to support the groups in creating their own approach. Can we go to the next page, Lymunas? It was rather hard sometimes to explain this to many people in Europe because I'm also aware of the fact that there are lots of youth exchanges that have been made by adults. They have been applied, they will be granted and then the young people or normally young adults, university students will be recruited after the granting. And then when Finnish groups started contacting groups in Europe, they found out that they had really different ways of working in many times. We wanted to create some material that would highlight the fact that the young people can be involved on every stage of the youth exchange from its very beginning to its very end. We created this kind of a map or a poster that shows the whole process of youth exchanges. Many times youth exchanges are referred as the step seven which we say is the actual youth exchange when you go abroad or you host a group in your country. But with this map, you could show to your group of young people as well that it's actually a longer process and it takes a longer time. And there are lots of things that you have to be involved in during that process. So we cut the youth exchanges in nine different steps that start from building a group of young people who is interested to finding partners, creating the project together, creating the application, waiting for the decision, preparing for the actual exchange, then having the exchange, then taking care of dissemination and then reporting. And I can tell you that young people can be involved on every single step of this process. Limas, can you put the next one please? So the map itself is explained something but then you might understand that youth exchanges have a lot of things to think about. We have the other side of the map looked like this. On every step, we had four different parts. We would explain what are the important rules of the program that you have to respect regarding this step. Then we had an example from somebody who has been making youth exchanges. This is how I was involving my young people on this stage of project planning. Then we had also a part saying that don't do this because you might regret it later or it doesn't really work that well or it's not simply a good practice. And then we also had a step saying, this is where you can write it in the application if you, when you're filling in the application. We also produced this kind of leaflets that give examples on how to deal with a topic as an exercise. They're not really like that do this but it's more like that this is what you can do and this is what you can have a base when you're creating your own projects. Next one please. If you saw the back of the map you see that it's a lot of text and it might not be the most approachable thing. So at the time came when we decided that it might be easier to create a digital version out of that. So we have made the map into videos and exercises on the starofyuro.eu website. And this is an open platform that anybody can use and it still has the same structure as the map. It still has the same advice and do's and don'ts and rules that the map has but it's maybe a bit more approachable. So the website is starofyuro.eu and you can go there. Actually Lyman as if you stop sharing now I could share the screen from, oops, here we go. So the webpage looks like this and as you can see there are 10 playlists. Nine of them are the same steps that we have on the map. So there's a playlist for each of the steps. If you go to the step itself then you can see what's under it. There are mandatory tasks and there are optional tasks. And every step has two different videos. That explain the basic idea of that step, how you can involve your young people in that step and it also has the possibility to download the script in the written form. I wonder if we just, you know, watch one video here. Do you think it's all right, Lymanus? I think we don't have time for that. Okay, that's fine. Discover themselves, yeah. Sorry, the other thing is that the important rules of the program is always on the step three. So you can, we have collected what we call eligibility rules under this step. So you can check that you comply to all the rules that are needed in making the project. You can also download checklists from this page so that you can actually print it out and mark the things that you have done and what still needs to be done later. Then there are lots of optional steps where you can, for example, see how you can use an online tool for communication or building projects together. And then finally, it also has a link to the MOOC on Erasmus Plus that explains you how you fill in the application and it gives you an idea that once you have been discussing this part of your project with your partners and with your young people, then you can write this information in here. The final thing that I show is that if you join, you can go to any of these pages without joining and just use the content. But if you join the, hang on, so you can collect learning badges. Like I said that when this is a learning program and we call it learning by doing, it means that we allow the young people to do things that are new for them. They have new experiences and we as the adults can then reflect about those experiences and help the young people to understand what was imported about it and how does it help them in their own life. So if you join in, you can have Lime on us, help me, where do I go? You can go to any activity, so any activity has one badge to earn and also you earn a badge for the whole playlist. Exactly, so there is information on how you can earn this badge. So there's a task underneath and if you do, if you do what you are supposed to do, then you can get the badge. And the good thing about this is that when the young people are doing tasks during the planning of the youth exchanges and the implementation afterwards, they can collect these badges and realize all the new things that they have done during the project. Then it's easier for them also to maybe understand that that thing was new. That thing was new. I haven't done that before. What I learned in this project. So there is also a residential training course on the Star of Europe where we go through the whole youth exchange process within three days and there will be an online training version out of it as well. So if you are interested in this kind of approach, then also follow the European trading calendar. And if you see Star of Europe, things apply. That's it. Is that enough? Thank you very much, Paolo. Yeah, thanks a lot. I didn't know to see it to any new questions. So we just saw a resource where you can learn about every single step, how to go from the idea to the application and actually implement and share results and evaluate youth exchanges. So thanks a lot, Paolo, for sharing this. Maybe I'll just point out that of course there are different ways of looking at the thing in Europe, but there are few countries in Europe, Finland included where we don't actually grant any projects where we don't see that young people have been involved. And the argument for it is that if we are looking at the project in a learning program, we can easily argue that if the young people have been involved in the program for a longer time than just a few weeks of preparation and the exchange itself, then there is more learning with yourself. So Paolo, just to clarify, are you saying that if, let's say, a brilliant youth worker, a very smart one with a lot of ideas, if that youth worker meets another youth worker in another country, they come up with a great idea and they describe how they're gonna select people later and they write a perfect application. Do you say that actually this might not be supported because young people are missing? Definitely not be supported in Finland. No, there is no way we will grant that. First of all, if you look at the fact that these projects are young people's projects, then therefore they should be based on their needs. Many times in applications, I see that the basis or the need of the program comes from United Nations report or our OACD report or our EU report, that this is what generally happens in the world and therefore we have to do something and teach the young people. This is a weird approach. I think it's a very Soviet approach that adults think that they know what the young people need. The young people definitely need, know what they need and what interests them and youth work is support, it's enabling. It's doing something that the young people can reach the potential that they have. The other thing that I maybe have to say is that all the young people can do something. There are young people that have a lot of different obstacles in their participation, but they can still have opinions about what country to involve, what food to eat, what kind of activity is nice. Of course, if the young people need more support than the adults will provide it and not all the program has to be done by the young people, you can blend and as long as you agree with the groups. But the idea is that youth exchanges are not projects that adults or organizations make for young people. Youth exchanges are young people's own projects. That's the original idea and I think that in the new program it will be highlighted more. Thanks a lot, Pao, for the answer and clarification. I think you made it very clear. And yeah, now few words about the online course environment and what you can find at the online course in case you still didn't discover all the materials. I saw some people wrote in the chat saying, hey, I went through all the resources already and that's why I'm joining the webinar. Maybe other people did the other way around. They found out about the webinar and just joined it now. So I'll just share the screen to show what you can find on our online course which is hosted on the Canvas, free for teachers platform. Neri has already posted in the chat how you can get enrolled if you're not there yet. So when you start the course you will start with an overview of different possibilities that Erasmus Plus has to offer for the field of youth and it has what to offer for both young people and youth workers and you can explore all the possibilities there. This month and next month we will be hosting a series of webinars on youth exchanges and when you go there you can start from any action you want. So if you click on youth exchanges you get to that module and then it's plenty of materials there. I already added a few links to the upcoming webinars. We are planning to do one webinar at the end of June where we're gonna look at tools for youth exchanges. So what methods you can use for preparing, doing and evaluating youth exchange and then on the 9th of July we're gonna have one more webinar where we're gonna look at similarities and differences between youth exchanges and youth worker mobility. So we're gonna look at some differences and some tips and hints on that and when you go on youth exchange maybe I go through the module view. You are able to see some videos so you can explore what a youth exchange is, what are the rules of the game. You can go through some quizzes and check your knowledge if you feel you really know it well and then you will go through some basic steps, how to, for example, create a group, a youth group of youth exchange and this is explained not in a kind of long written text but this is explained in a short, snappy videos that really transmit the whole idea. So how you create a partnership that was this discussion there are different links and different tips how to do it. And also if you are not from so-called program country you're not from EU and not from one of the country that has own national agency you can explore still how you can be a partner and how you can host a youth exchange in your country because all the neighboring countries around EU also can take part in the program and we invite you to participate in discussion forums there and you can also learn how to design a youth exchange program how the example of the program looks like so you can actually really see a practical tips that will make you in the development of the youth exchange. We have some videos on impact of youth exchanges. We ask you to discuss what creates a good impact. We also have module about youth pass and the value of recognizing learning happening at youth exchanges. And also we collected plenty of examples how the youth exchange looks like in practice. Most of them are in English or they have subtitles in English and you can watch and learn from the experiences of others and actually meet peers on the online platform and discuss with people there. And actually if you go to a discussions in the online forum, you can also see that there are some calls for partnerships or you can initiate some calls for partnerships. So that's it about the course. We will meet with you online or we're gonna meet with you at the other webinar and roll to the course like our page on Facebook just search for MOOC Youth. You can also join our Facebook group which has a few thousand learners who already completed the course previously or they are still eager to learn about youth exchanges or other opportunities of Erasmus Plus. So for today, thank you very much for our guest speakers for giving us your time and your ideas to admit it to Parva and also to everyone who were with us. And I'd like to launch a question for you. So if you are checking on mobile phone or desktop you should be able to see a question how useful was this webinar for you? And there are four options, very useful, somewhat useful, not very useful or you expect something different. If you joined via web version, maybe you don't see the poll but at least you can write in the chat and share a little bit how was this webinar for you? And I'll wait a little bit for the votes to come in and then I'll end the poll. We have 80% of people who voted already, two, three. Okay, so I'm probably gonna close the poll, no new votes coming in and I can share the result. So seems that people found it very useful or somewhat useful. So make sure to comment and give us a feedback on the Canvas Network. You can always write us a message saying what else you would expect what are the topics that you would like to have a webinar on because we will continue organizing such events further on throughout the year. And you probably know that it's the last year of the Rosmos Plus program but there will be a new program coming in and we're gonna come back with some news in the autumn. Okay, so thank you very much and then have a good rest of the week and good summer.


No, never. So if they, if they say the wedding night, we gonna enjoy it. First night ever. First night ever, y'all get to see and You know, they're gonna come on there and watch. That's a brand. It's just me, bro.  The money coming. If they do it, the money is gonna kill it. Get real high before you do it. Yeah, I'm praying to get more than high. So you think y'all, you think y'all good, you go, that's something you think about doing? Nah, I probably think about it. I gotta lose weight. You know how I'm... Get out your mind. Get out of your mind.  I'm saying you gotta lose weight, bro. You forgot he love the big booty? Yeah, but the stomach, I gotta lose the stomach and go nowhere. It's just the stomach. Yeah, I think that's the plan. Nobody never mentioned that. You're gonna say, yeah, boss talk told me that. No, yeah. My wedding night, only fans, boom!  What you saying? I'm telling you, too, it's crazy. He's like so like running up numbers. Like, you make this much and he's like, Lupe, we'll make this much. I'm like, oh my God. And they talk when he's out. They talk almost every day, bro. They do? I think so, cause they seem like they got a real good relationship. I talk to them every day, but not like talking. I just like always talk about his daughter, the little girl Parker Mack. She's so cute, bro. I just love babies. I love babies. I love little, I used to be a preschool teacher. So that's why I went to school to be a teacher. And then I worked with special needs kids for like a long time. So I have a lot of patience. That's what one of my photographers, he do that. With kids that are special needs. You know what's so crazy? Cause when I used to work, like if we have circle time and I used to keep all the kids entertained. They love you. They never forgot about me. I was like their favorite teacher ever. I believe it. I believe it. Cause you know, I'm funny. Like I could make adults laugh and I make the kids laugh even more. I can see it. And it's like, every day was I was joking around with them. Like it was, you know, that's my passion is kids. You know what I'm saying? So that's why I gravitate towards this. I see somebody, some of the homies have kids and stuff. Oh, how cute. And you know, I'm good with kids, bro.