Welcome, it's Jenkins documentation office hours. It's the seventh day of April 2022. Great to have have everyone here and topics that I've got on the agenda news using crowded enterprise for localization Alex you and I spent some time on that. We had a question from Elizabeth on sponsored internships, and then we've started the she quote Africa contribute on and there are some topics about docs that I'd like to go over here and have invited a number of people to attend. Right now we've got, we've got peace with us, and I'm hoping that others will join as we proceed with the call. Any other topics that we need to add to the agenda, Alex any topics that you need to add beyond what are noted here. Okay. Welcome Elizabeth we've got a topic for sponsored internships on the agenda. I assume that that's good enough. Are there others that you need to discuss. We need to bring today. You're muted Elizabeth. Good evening. None from my end for now. Okay, great. All right, so then I'd propose let's take these topics in order and let's go ahead we'll add more topics if the time if time allows and we need them. So we released a new version of Jenkins on Wednesday. It's a long term support release. It'll be about a month before the next long term support release. And thanks very much to everyone involved change login upgrade guide or link there. Next topic then using crowd in enterprise so Alex, how was it how is it going and and what should our next step be etc. I think we have set up the platform level of plug in very well. I think you didn't encounter more issues with that did you know no no well so no issues. No issues for me at all it. It worked. I was able to integrate the changes. I think we did have the action still to decide if, if we want to approve something today right is that because I had seen a poll request and had approved it merged it I have not released the latest pull request but had released an earlier one. So I've still got an Italian translation that's not yet approved one small piece. And it looks like all the German are approved so they've been merged as far as I know is that correct as far as you understand Alex. Yes, that's fine. Okay, this week or last week I translated the last drinks and approved them earlier this week. And I think you already delivered this PR. Okay, so and we can see that here in the poll request so there is. Let's see it would show it as me actually being the committer right new translations here we go. That's you. Actually me but that's you. Right right that the misleading thing there is because it's using my credentials it is submits the poll request as me even though it's your work. Okay, good. All right. Okay so so for me that feels like. Italian still needs to be approved. And that's a task that I know how to do. Alex what do you recommend for next step so I could use it more plugins that I think I understand how to do or we could at least try it. Are there, we could demonstrate in an online meetup. We could propose wider adoption by email what what do you recommend next. We could propose something for an online meetup because writing it out and in the email group, Google thing would be a bit tedious and likely doesn't bring that much attention to it that I would like to have on it. Good. Okay, I like that and online meetups it's been a while since we had one so this is a great excuse to host one. Okay. I think we could do some demonstration to sum up what we did in the docs offer sessions on the online meetup to roughly go over crowded from a user perspective and leave out the technical aspect. Like how integration in the tank and see our organization would work. Right. Okay so so now in terms of how do we so I've, you've taken me through very, very patiently getting this registered. If, if there were 20 or 30 plug in maintainers who wanted to do this, or Jenkins, or even eventually Jenkins core. Would we need to have them be tutored by you as well or is there some more general purpose thing we should be doing. I think that the tutorial in itself has a tour and guide, if you have noticed that on the initial login. But I think it would also be better that I maybe with you can guide people through it. So people have someone to talk to if they have questions instead of relying on the documentation might make things easier to understand to get used to. Good. Okay. All right. So let's let's I've got an example group. Would it be worth. I've got an example group of a bunch of people who helped with French translations during October Fest 2021. That might be a good excuse for hey let's gather them together possibly even for a meetup, get someone from that group to join the English language meetup and then maybe they host one in French language of on their own. Yeah, for example. Okay. All right so an online meetup. Would you be okay if I propose that and put you as the primary presenter with me as an additional presenter and we'll do it together. Yeah, that would work out. Great. All right. Okay so that I can do. Now, in terms of, of the, how does the experience work would we continue using intellectual sites, or would we go to a different location, how would, how would the experience be for the Jenkins project in as we get larger and larger. I think one of the sites is my personal crowd and enterprise organization. I mean, I don't mind having a few Jenkins projects here, but in the long run, it doesn't make much sense having them on my instance just to carry them over on the Jenkins CI instance. Okay, if you would want to do that, we could request an open source license from current enterprise and use that for further demonstration purposes. And that would be, I hope, likely the solution we would use in the long run. We would request an open source license. And then, and that would then they then host, they would host something like okay so you have intellectual sites that crowd in dot com this might be Jenkins dot crowd in dot com or something else that crowd in. Yeah, for example, but try to enterprise support CNM records so we could easily point it to somewhere else. Oh, oh, okay. Okay, so so conceptually it could actually, they would still host it but it could be translations dot Jenkins dot IO or something like that or crowd in dot Jenkins dot IO. For example, yeah. Okay, good. All right. I don't know when you want to when you want to set set the online meetup up, but maybe we could request the license before and have a demonstration thing right in Jenkins. I think that would be the better approach instead of relying on my instance. Good. All right. So, so if we, if we better if we get the open source license, then establish the, the site and use that in the demonstration. I think doing the online meter because integrate one of your plugins or reintegrated design library that has fairly easy translation strings, right on the Jenkins CI or Jenkins crowd and instance. Well and design library is a great choice because we've got a very obvious place weekly dot CI dot Jenkins dot IO to show it to people. Yeah, and it's using continuous delivery so every time something merges a new plugin a new plugin is released so we get very fast fast iteration on the translation strings. Yeah, good. Okay. I think it might might justify us begging Tim Jacob to include Tim in the demo so that he could so that he could do the merge, and we could show live yes here's the merge. Oh and here it is released and congratulations now it will be available on see weekly dot CI in 24 hours, something like that. So one note on the open source license. Last time I had to request one. I had to do it as organization administrator. So it would be likely someone, what has to be someone from the governance board, I guess, which happens to be me so that's a good, good thing. Okay, so organization, and, and certainly it's a, that's a conversation for me and the board to have right they, they may have other requirements for open source licenses they may say you must be this or that. And we have to evaluate if we meet their criteria. Good. Taking it, I've taken a look over it. I think we meet the criteria quite well. All right, well Alex that's, thank you very much for that I think I am going to go ahead and add some more plugins as my time allows just because I want some more experience with it. But also I'll propose the online meetup. And if by next week. I haven't proposed it will talk about it in Docs office hours to remind me. All right. And let's assume I'm going to assume. I'm going to have six weeks from now, let's let's say four plus weeks from now, because I'm busy with other things right now and it's going to be a little tough to get all the things organized. Yeah, for the final date. Certainly some time to set up our Jenkins instance so I think for six weeks are fine. Okay, great. All right. Excellent. All right. Thanks Alex, any other topics on this one before we go on to other topics on the agenda. Not from my side. Okay, thank you. Elizabeth next topic was sponsored internships, and I'm sorry that I'm not able to help with them at this time I just don't have the capacity I've looked at it. I don't think it's a financial thing as much as it is my capacity to submit the proposals and manage them. That's fine. Thank you. Yeah, my wealth and thank you for asking. Thank you very much and thank you for the the boot camps that you're running and the you're seeking for internships that's really wonderful. Thank you. Okay, next topic was, and it looks like we've got Catherine and, and we've got Catherine and peace are both here so so that's that's at least two. Let's talk to she called Africa contribute on then for a few moments. So the she called Africa contribute on has started started April 5. And we've got project plan links here on community Jenkins.io. There are three projects were running inclusive naming. Let's see peace you are assigned to which of those sorry I've got a look inclusive naming. Oh good so you and you and Catherine are both assigned to inclusive naming very good okay so we can focus our conversation today on that project. Very good excellent. Oh and it's right here I should have read down below here we go. Catherine are both on the inclusive naming project very good. Alright, so. So, what we've, what we've got there, what we wanted to do today is meet one another, introduce each other, say hello, and then talk about startup activities to get ready to do that. And for inclusive naming. I think what we could talk about is. Oops, now my fingers. How to divide us. How to divide the work, the work between the participants. So that you don't trample on each other as you're doing doing research and I'll talk about some ideas there. So I've got some startup ideas, and then I think the most crucial one is how to divide the work.  Yeah, that would be okay. Okay great well so then let's, let's have you introduce yourselves and so peace why don't you go first tell us something about yourself. I would love Catherine to go first because her name says we'd see. Sorry, I'm not very good at alphabetical sorting. It's obvious. My name is peace look out for. I'm in Nigeria. And I'm actually a technical right. Who loves coding. I love everything about coding and I'm, I came to learn more about coding documentation and test API testing. And our house I also want to know more about contributing to open source. That was why I am that that was why I applied for the contributor and I'm so happy to be a thank you very much. Great, thank you peace and delighted to have you here and lots, lots to do Catherine would you like to introduce yourself. Yeah, I'm Catherine hero, currently based in Nairobi, Kenya. And I'm glad to be here I, I was looking for to join contribution and I'm kind of content developer, technical writer and front end developer and technical writer. Yeah, so I joined contribute on because I've been curious about open source. And I figured since I already have skills in technical writing, then learning about documentation would be a great would be a great way to start contributing to open source project. So I'm looking forward to learning a lot. Excellent. Thank you. Thanks very much. All right, so the inclusive let's let what I'd say let's take next is let's look at some of the start up start up activities that peace and Catherine will both need to do as part of getting started and getting ready to help with inclusive naming. The inclusive naming project is trying to to replace less inclusive terminology in the Jenkins projects strings and software and documentation, like master slave whitelist blacklist with more inclusive terminology controller agents include lists deny lists, those kind of things. So, so it's a it's a hybrid of software and writing and the hybrid nature of it makes it interesting because we need the help to make those changes and part of the help is finding where to make those changes and checking that the changes make sense and are workable. So, all of them have certain startup activities. One is for instance, you need to download Jenkins and download Java 11, and then use Java 11 to start your own local copy of Jenkins. This runs on it works on Windows, Linux, Mac OS. It runs on hardware that says small as it actually can run on a Raspberry Pi. It's a little bit constrained memory wise on a Raspberry Pi but but certainly on a Windows computer with two or four gigabytes of memory it should be just great. You'll use that to get some initial experience you could do tutorials you could try your own experiments the idea is just become familiar with it then you stop it and when you need to run it you start it again the same way and it will remember what you did. Another part that you need to do is you need to create yourself a GitHub account and please record it in this spreadsheet under the GitHub GitHub ID column. Because the GitHub ID column helps me know how to identify you when you're on GitHub. So add it here and you may have to add it as a comment I don't know if giving if I've given you right permission to it. So just be sure that you've, you've added that when you've got your GitHub account. Then you need to create a get pod.io account. And the reason for this. Many times. Okay, and we have to note that it was last year's experience that taught us this.  You could ask Xenob who's with us right now about her experience two years ago in Google season of docs when we gave her the impossible task of running, running on a Windows computer with very small, small space and it turned out it just didn't work well for her she had all sorts of heroic efforts she had to do didn't you Xenob. Yeah, that's that's very correct mark. So it was a lot. I had to install a virtual machine on my PC to be able to run Jenkins that I like to install. I was trying to use. I think it was the BSL something, but I was having issues. So, so many issues just kept popping up I just had to opt for a VM on Ubuntu VM. I was able to run it for is is really, really great like compared to all that stress, because for me I was able to set up GitHub in I think less than 10 to 15 minutes. It's it's pretty pretty straightforward. You don't have to get out of your browser. You can operate the IDE from your browser you don't have to install anything on your PC. I knew what I was setting it up so compared to my experience three years ago. This is so much better. Thank you. Thanks very much and there is a link here to a video tutorial on how to do that. It's actually documentation office hours from earlier this year, where John Mark Mason showed people how to do it so you'll you can watch this video, follow the steps that are in this video and it will have you configured and running able to see that. And if you have questions, ask them on Slack, we're happy to answer questions. Okay, so we've got those three, three steps, download and run Jenkins create a GitHub account and create a get pod.io account that Catherine and and piece both need to do. Then the next topic is this one. This is one where I want to actually consult with you Catherine and with you piece to see, would this idea that I've got of how to do it be workable for you. So, so this is the part where we sort of start asking I need to ask you some questions and offer some ideas. What I was thinking of doing is mark create a spreadsheet of Jenkins core and plugins. And then you'll sort by number of plugin installations. And then each person. So, peace. And Catherine enter their name next to a plugin when they are starting on that plugin. You clone that plug in you clone that the source code of that plug in. Then what you'll do is search for problem strings in HTML, replace them because HTML is just text text files. It's jelly, and it's mostly replace them Java, and there it's more like sometimes replace them. And this is where you'll have to you'll have an experience of working through what it means to deal with each of these kinds of strings and we'll take you through those. And after you've searched for one you may submit a pull request commit them and submit a pull request. When we get to jelly. It's, it's more complicated, because you have to compile them test them commit them and pull requests. Now that's an awful lot of detail for welcome first step one oh one for the very first step. And Catherine, are you okay with the idea of using a spreadsheet to help separate who does what. Yeah, I think that's a great idea. And if anything comes up later I think we'd be able to make changes as we start. But I think that this plan already works for starters. Okay, great. Thanks Catherine so peace what about you do you think that will be okay for you. Oh, we just lost peace okay so we'll have to check with peace later. So, Zina, based on your experience, does that seem like a workable process or is there something that we should, we should adjust there. No, I think it actually works. It works. The only thing is for them to remember to keep updating the sheets so that there is no conflict because if you start working on a plugin and we don't update the sheets someone can pick it up so it's very very important while it's really good it's good and get really messy if people are not updating it. Good. Good point. Yes, very good. Just to add on what Zainab has said, maybe we could agree on a number of plugins we can start working on. Then we assign the person who is going to work on them before we start so that no conflict as we proceed. That's a good idea, pre assign an initial set of plugins to to each person, right, and say okay you take these you take these, and when you've run out of those. When you're finished with those, then you could start putting your name yourself that's a very good idea I like that. Okay, that makes sense. Yeah. I think that's something I could do I did that. I did that last year, and it didn't seem harmful when I did it. So let's, I think that's worth trying good. Okay, any other recommendations. Okay, so that's it. Great comes up I can always send you a message on Slack. All right and peace is does this seem to you like it will be okay that creating a spreadsheet of Jenkins core and plugins and then having having the two of you assigned to rows of that spreadsheet so that you'd be assigned a set of plugins would that be okay with you. Yes, I think it's okay with me. Great. Okay. Now, now one of the risks here is and it's it's part of the challenge of open source is there's no promise that we'll get reviews of the poll requests. We have to ask for them right so and and we'll do that. So it's, it's just part of the nature of open source that we will submit poll requests, we intend for them to be valuable and usable and, but we can't guarantee that they will be merged that's we'll keep working on it. We certainly will attempt to use my influence to persuade people to maintain them are to to merge them and to review them and we'll do that as best we can. So that that feels like a good process then the next piece for me I think would be planning how we're going to meet regularly to be sure we get you started successfully and and which pieces will work well for you. Since the people we've got here today are related to inclusive naming is would Monday afternoon your time be okay, or would is is late evening better for you, what what times of what times work better I assume you've got regular jobs and so you're probably not available during your working day. So do you want is evening okay your time, or is there there another time. Okay, so for Catherine evening is okay. Great. And peace, how about you. Well, I feel even is okay this by this time the time we started today. All right, so this gives us so start time of Docs office hours was okay for you. Good. All right. That's very good because that that avoids most of my meetings during the day by being at this time. So, so Catherine, if we were to meet at this time on Monday, or on Tuesday, would that be workable for you. Yeah, that's fine. Okay. And, and peace. Same question for you would that be okay. Yes, it's great. All right. So let's just plan that I will, I will set the calendar agenda calendar item. Mark to schedule the calendar item. And with both of your permission, I will send you an invitation to your Gmail account from that calendar item that means though that your Gmail email address will be visible, or maybe visible in the calendar, are you okay with that. Yes. Okay, Mark invite both to the meeting. Okay, great. And I would also like to invite our project manager to the meeting. She is. Oh dear, I have to get nafisa GMO. She may not be able to attend but I'm going to invite her anyway because she'll be helping me assure that we do these things successfully. Great. We will plan for that then. Thank you. Yeah, if you are also going to be working on spreadsheet, I think it's a bit great for her to be involved in that process. She's probably doing some work on the spreadsheet and monitoring it, monitoring the progress on that. Exactly. That's what I was thinking as well. I think that Zina is that is that that's something where we can have her help. She can also help us with seeing how the data is going. We may have her do things like track which pull requests have been submitted and how they're, how they're progressing just because that way we let peace and Catherine focus on doing the work and nafisa can worry about tracking and how, how are we progressing. Yeah, exactly. Great. All right. That covered all the topics that I wanted to deal with on the inclusive naming project. I'll send those invites. I've got to meet separately with nafisa about the project manager because tomorrow we want to do a blog post. So peace and Catherine I think I've got both of your pictures correct is that right. Yeah, I'm going to pull in the slide deck. I think I've got it here. Where did I put that slide deck. I just wanted to have one more chance for you to tell me yes it's okay. Here we go social media covers this one. So here is the image I've got GMO GMOs. That backwards don't I isn't that's her first me. Oh, I'll have to check with her. So Catherine you're okay with your photo. In peace you're okay with yours. Yes. Great. Thank you. All right. Mark, I wanted to erase something you mirror. I don't know if miracle reached out to you. She dropped out to say she had to drop out of the program due to an emergency she had a home or something. Oh, oh, okay, thank you know I wasn't aware of that but knowing that she has to drop out I'll just take her off the list and if that's okay. Yes. Great. All right, done. Thank you. Let me let me have a better better layout as well. Excellent. Thanks. Okay. I think we covered the topics that I wanted today. Any, any other topics we need to go over. I just wanted to ask a question. I remember we spoke about I think I raised some time ago about by weekly sections want to be having where want to address different topics. So I was wondering if you'll be open to speaking at one of the session about github, because I know you're a pro at github, maybe give some tips on how they can use github to contribute to their various project is not going to be for just Jenkins contributors, but contributors within all the organization so yeah. Sure, sure, I'd be happy to do that you let me know. So and I apologize for my poor poor late linguistic skills. Does biweekly mean two times a week or every two weeks. Every two weeks. Okay, thank you so I admit it I'm an English speaker but I never remember which of those it is so that's every two weeks right. Alex no grinning at that comment that's that's cheating that's totally cheating. He is a German speaker and he knows it better than I do I'm sure. I'm not correct, but I know that what I'm trying to say is every two weeks, I'm also correct. Okay, so I would be happy to talk about github and do a question and answer session absolutely happy to talk about using github to contribute to open source. Yes, so the first session is supposed to happen on the 23rd of this month. It's on a Saturday. Okay. So we're thinking of doing it say sometime around the evening of Saturday. That's evening Nigerian time. So I don't know if that will work for you. It will that would be that let me double check my calendar but you said the 21st. 23rd. Okay, so 23rd on my personal calendar is open. That would be fine. Okay, so Saturday. Saturday, April 23 evening Nigeria time.  Okay, great. All right. I would I would propose to talk about the web user interface. And the command line because those are the two things that I found very helpful and here we'll talk about pull requests and templates. And, and then reviewing changes and CI job checks and continuous integration jobs. I can talk about those. All right. Thank you. I'm just going to come back to this note later and take out this content and just use it to create something before then. Sure, you bet. All right, thank you. Great. Let's see what are some other things like that for King repository. Oh, yeah, those kinds of things great updating repository. Great. All right. Any other topics we should discuss today. None from me. One point with the license. Oops. Yeah. Would you request one or bring it up in the next governance meeting. I'll start the question even before that so I will start an email thread with the governance board. After I've, after I've checked their terms and conditions. So if the license terms are easy, then at meeting I see nothing that causes me any red flag. I'll just ask the board for permission. Yeah, I think it's like 10 or 12 points. Yeah, major and possibly give grant me manager access on it that would make the demonstration much easier. If that would be possible, that would be quite nice. That makes I think that makes good very good sense. That makes very, very good sense since I think you're the most experienced person we have on it. Great. Okay. Anything else on the crowd in topic, Alex. No, think we got everything covered here. Okay, so Zina, you may have missed the early part. Alex has taken us through a way of doing translation into other languages, much, much easier than we've done it before. So for people who speak French or in Alex's case German or in my case some limited Italian. We can, we can do the translation process into those other languages much easier, thanks to open source donations from this company crowd and enterprise that provides tools to do this. All right. I think we're done for today then a record a copy of the recording will be placed on community Jenkins.io within the next 24 to 48 hours. Thanks everyone for being part of the session. Talk to you on Monday, Elizabeth and peace. See you then.


What's up, everyone? It's your girl, Kenzie here from Layton Sports Cards, and I'm ripping brand new release today of 21-22, Panini Recon Basketball Hobby Six Box Break number three. Pick your team. We go over the teams here and then we'll get started. Andrew P. Heats, Bo Habi, Clippers, Chris B. Raptors, David B. Pacers, David G. With the Thunder, Dean I. Pistons, Diego B. Nets, Dylan L. I believe. Blazers, Edgar B. Lakers, Get It Ships, 9-2-7 with the Pelicans, Jessica G. Hawks, Jiu W. Jazz, Jordan Q. Hornets, Joelle E. Mavs, Karen C. Bulls, Kuhun K. Nuggets, Kyle M. Wizards, Lursack Y. Cavs and Spurs, Matthew S. Sixers, Mike Y. Grisly's, Paul O. Bucks, Raquel B. Rockets, Tony K. Nuggets, K. Sons, Tyler D. With the Warriors and T-Wolves, Vaughn B. With the Magic and Kings, Wayne S. Nix, and Yasser S. With the Celtics. Alright, best of luck everybody. Let's see if we can keep the streak alive. First two breaks, we've pulled one of ones. Let's see if we can go three for three. Let's see. All Star thinks we're gonna get it. We've got five chances to get a K-101, so let's see if we can do that. That would be crazy. That would be crazy. Alright, first box, first pack. Good luck everybody. That Book Knight rookie to 49 purple mellow. Here you go Hornets on the second year. Future Legends Desmond Bain. Is he your magic fan then for basketball? Yeah. I don't really watch basketball that much. Yeah, it's your Cameron Thomas, Hollow Drew Holiday, Rock the Rim, Vince Carter. He's always got cool photos on his cards. I figured you said what, you're like a Tampa for a guy? For most part. We've got Pelicans, true potential rookie Otto, Herbert Jones. Pelicans. You go to games often or no? Tucker and Dwight Howard. Oh, is it for you? I mean for the price of the magic tickets, they're usually fun to just do last minute sometimes. We've got blue to 49 glorified signatures of Joe Harris for the Nets. Nets hit. I think they'll probably go up a little bit in prices next year. Anoby Hollow and Steph Curry on the pink.  We've got red to 199 rookie Quentin Grimes and Future Legends, Cole Anthony. Steelers players like the Steelers team account same with like the magic to some of the invitations for a baby shower tomorrow and the magic actually respondents that oh, sorry, they'll make it.  I was like, what? That's so cool. Little Barton Hollow and bam on a bio on the pink. Yeah. It's like not expecting, you know anything. That was really cool. Reavis rookie. We've got blue to 99 Jordan Clarkson and a Quentin Grimes on the rookie recon. And then I picked up a really cool Candice Parker card at the national and I posted it on my story like tags Candice Parker. And I went to see like who looked at my story and I see the blue bear verification mark and I'm like, wait a second, I scroll back up and she looked at my story. That's kind of like, that is so cool. Rudy Go Bear and Evan Mobley rookie recon. Nice one there. That was like my icon growing up watching her play at the University of Tennessee. That was kind of Starstruck for a second. Josh Christopher rookie. Got bronze at two 99 bones. Highland Nuggets and maneuvers. John Morant. Little ball, Bane, Harrell and pink Kyrie. Box two. Let's see that draft night acetate auto. Haven't seen one yet. Tell me they look sick. Hampton. We've got Nassir Little on the Dustin for greatness for the Blazers. I like that there's a ton of different like autograph inserts, you know, it's not just like one base autograph. Alajuan Hollow and all systems go Evan Mobley. Nice one there calves. Only second one of these we've seen in about two and a half or one and a half cases so far. Nice. And that Alajuan. It's probably a little bit shorter print. Not a true SP though, but nice card. Nice looking card. Got James Booknight, Bluda 99, Reggie Jackson Clippers and Joshua Primo on the rookie recon. White Hollow Jimmy Butler and Carmelo Anthony on the pink. Cameron Thomas Rookie, bronze to two 99 Patrick Beverly and future legends Darius Garland. Everyone we're all filled up for the daytime.  Again only three total breaks with spots left. Crazy crazy. Trey Young Hollow and Paul George Pink. Two baseball breaks and one football. Baseball being a full case tier one random team and the other.  Is a three box case break of definitive baseball random team. Then the football is a full 20 box case break of contenders optic football tiered random. We've got to 25 claim of fame Jerry West. The logo man himself. There you go. Lakers opponent to learn the hard way. West defense never rests. That's sick. That's on that one. Lakers again to 25. Caruso on the hollow and pink rookie Jalen Johnson then every spot you buy into gets you into the national promo. Big prizes and that's we've got bronze to 299 Cole Anthony and maneuvers Trey Young that ends on Tuesday. So only a few more days left to get entered into the nationals promo. Got hollow rookie Billy Bucks and rock the rim. Paul George for $75,000 worth in that promo. Cade cutting ham rookie. Got Kai Jones on the red to 199 Hornets and friends Wagner rookie recon. Saw that one. Auto and haven't seen too much of him since. Probably a harder pull. He is for the most part. Most product this year. Box to good box three. Sorry. Good luck everyone. We've got spurs. On the gold 5 of 10 glorified signatures. Kelvin Johnson. Nice gold hit their spurs. San Antonio. Lair sack why? Here you go back to back. Breaks with some gold autos to do. Rose and hollow rock the rim. Paul George will take those. Jean Springer rookie to 49 purple. Tim Hardaway Jr. Mass future legends. Josh Giddy. There's a little bit. Looks like it's got part of like the car that was underneath it on the bottom. It's not the foil isn't lifted. It's just you can kind of see. It's just it's this one's kind of cut funny. Looks like it's cut long. Thumb you're on that one. Thought it was foil up first. Looks like the next car that was coming off of the printer. Miles McBride rookie out of Bronson 299. Clay Thompson Warriors and Bones Highland on the rookie recon. It's hard to see on the black border on that one. What I was talking about. Next year we've got hollow grease and Allen and pink Jordan pool. Evan Mobley rookie for the calves. Frana Ingram hollow and maneuvers. Jalen Green. Bones Highland on the rookie hollow. Nuggets and Oki Kiki. Do you want me? I don't know. Let's not take my hand off. Eric Gorn Hollow. Pink rookie out of soon move for the bowls. Gordon Jackson. We've got Jalen Suggs rookie magic. Darren Fox on the red to 199 kinks. And Corey Kispert rookie recon. Raptors. Armani Brooks rookie auto true potential. Raptors. Siddiq Bay Hollow and we've got Hall hopefuls Kevin Durant. Another one we haven't seen in a few packs. Last pack box three. Well in bead bronze to 299 sixers and maneuvers. Box four here we go. Again hope everyone's having a great Friday. Almost the weekend. We've got true potential rookie auto of Nalo Barton. Banton sorry. Delano Banton. Raptors. Another Raptors hit. Marcus Smart Hollow and Jason Kidpin. Asked earlier but no one said anything. Anyone have any fun weekend plans? When doing anything fun. Just hanging out with the fam. Relaxin's our Williams rookie bronze to 299 rookie Santi Aldama. Rock the rim. Donovan Mitchell. Nash Herbert Jones on the rookie hollow. And Elphin Shangoon rookie recon. Went to the springs for a little bit with my best friend who's in town. Really nice relaxing that water is cold. Let me tell you my goodness. Shangoon rookie there. Red to 199. John Collins and maneuvers. Josh Giddy like the actual like well Kyva Springs Park where there's trees over it. That water's got to be like 60 degrees. Like it got me lightheaded. I could barely breathe when I got in that. It was so cold. Joellen bead hollow and then Hall of Hopeful's Derek Rose. And we went over to like the well Kyva Island where's a lot more sun and it was actually it felt nice. But not nearly as cold as that. Billy rookie. Josh Giddy on the hollow rookie thunder and Scotty Barnes rookie recon. So Jess. Oh that's cool. Sounds like fun. Hope you have fun. We've got Nuggets. True potential rookie auto. Bones Highland. There you go Nuggets. I love how he signs bones. Hollow and maneuvers. I've been the ace cafe. Josh Christopher rookie. Red to 199 Lance Stevenson and rock the rim Aaron Gordon. Look at good time though. Keon Johnson rookie to 49 Purple Zion Williamson and future legends Evan Mobley. I think we're going to go to Topgolf tonight. Not too sure yet. We went bowling last night. I haven't been able to bowl for a couple months now because of my belly. We've got Clay Thompson hollow on the pink. But I sure can golf still and still beat my fiance. Let's go to Topgolf where I can still beat you. I win all the time. I'm like okay bro I'll let you think that. So let's see 8 months pregnant at this point. Let's see if I still got it. Last time we went like 3 weeks ago or so. Still beat everybody. So that'll be interesting. We've got Raptors. potentials in 99. Armani Brooks. Raptors. On a streak here. Yeah for real Jess. Patty Mills hollow and Devin Bissell the past couple days it's been like same time almost every single day. Fortunately. Miles McBride rookie Beluda 99 Duncan Robinson got maneuvers Russell Westbrook and Stevenson Fox. LeBron James. LeBron James. There you go. Evan Mobley rookie Cavs Darren Fox bronze the 299 and future legends Haliburn. What in Yolkitsch. We've got a Latrel Spreewell claim a fame to 99 Spreewell never takes a break so opponents can't catch one. Nice spree there. Spreewell went to college with his nephew. I was like best friends with him my freshman year Rodman and maneuver Steve Nash that's one by Spree. That's pretty good. I think he ended up playing at a Strington puppy or something like that. Out on similar rookie bowls we've got Ludort Hollow and Moses Moody rookie recon. Wow. Yeah I bet when I pulled out of work when was it? It was Wednesday night like I put my truck in reverse and I just see because I have reverse cameras in the back just a flood of water pouring out of the bed of my truck I'm like and it was like a good 5 second stream I'm like wow how hard did it rain Scotty Barnes rookie out of 199 Aaron Gordon and rock the rim Simons.  You heard about Sean right? Yeah some hit him. I swear we got hit by lightning and it's spark went through blew the modem and popped him in the face it was McCollum and Mitchell Robinson luckily he had his glasses on and he was okay. He was bowed and got him in the eye. That's really dangerous. You're at 7 rookie Bronze at 299 Robinson Earl and future legends Cade Cunningham Oh the concert's outside it didn't rain then so it doesn't get canceled Simons on the Hollow and rookie review of DeMar DeRosin young DeRosin there alright last box everybody you decide what you're going to do with those boxes you won Jess from the the gaming promo you rep them or did you stash them maybe a little bit of both we've got Hornets on the true potential red rookie Louis Hornets Finney Smith Hollow and Chuma Okiki Greg Brown the third rookie we've got out of 299 on the bronze Stephen Adams maneuvers AI Port Zingas Hollow and Pink, then you have Dia Tray Murphy the third red to 199 rookie Davion Mitchell Kings John Collins on rock the rim I know you said I can't remember it was you or you said your husband is the one who likes to rip the wax the other one likes to stash it that was funny it sounds like me and my fiance Morris Hollow and Kyle Lowry on the Pink he always wants to rip stuff stay unsealed only AI Santiago Dama Rookie you've got Jaren Jackson Jr. on the Hollow and Rookie on the Hollow D. Kai Jones there you go Hornets let's see Jordan Q so that's two so far in what a case and a half so this might be a case hit I know it's SSP but nice one there so we'll continue on and see if this is a true case hit there you go Hornets we'll mag that one up for you I think she won the gaming promo Blake I think she said she won like three boxes we've got Pistons two cards there called to excellence to 35 Isaiah Thomas that's a cool one not a Kade 101 but I'm sure he'll take that one Dean nice one there on the I.T. 35 put that back over hollow Malik Beasley and future legends Luka Donchich he's the order okay gotcha yeah it's I feel like it's always like one person is a hoarder one person wants to rip it D.B. on Mitchell Rookie at Bronze at 2.99 it's a bonus and Shreeman Rookie Recon Pax left then we will do a recap here hollow D.Rose and Pink Lones and Ball two out of three of my favorite players right there alright last pack check we've got Bones Highland Rookie Nuggets Anthony Davis on the purple to 49 a little off color match there Manoeuvres Steve Nash and we've got Pink on Steph Curry Warriors alright one second we will do our recap here we go we had Herbert Jones Pelicans Armani Brooks Banton Raptors Bones Highland Nuggets Scotty Lewis to 99 on the red hornets Armani Brooks Red to 99 Raptors Dustin for greatness for the Blazers of Nassir Little Blue Joe Harris Nets Claim to fame the 99 Latrell Sprewell for the T-Wolves Isaiah Thomas called to excellence blue to 35 Pistons Sweet one here Jerry West to 25 on the claim of fame and we've got the another solid half case of basketball we've got some more coming right up


Hello. Thank you for being here today in one more webinar from Moodle Academy. Today's webinar is about MoodleNet and MoodleNet for developers particularly. And today with us, it's Alessandro Giassanti with the MoodleNet backend developer and Paul Holston, the MoodleNet product manager. Paul, would you like us to give an overview? Hello, everyone. I'm not going to take too much of your time. This is really Alessandro's webinar just to give you a little bit of background information. It's been just over a year since we released the latest version of MoodleNet and we've had lots of requests from developers about how they can adapt MoodleNet for their own use. And Alessandro and the team have been doing a lot of work in the last few months to enable this, to restructure MoodleNet and to enable packages to be written. So what we're going to go through today is essentially the development environment, the architecture that it's based upon and how to create and test packages. So then I'll come back at the end and talk about how you can contribute and accessible development practice in the future. But for now, I'll pass you over to the very capable hands of Alessandro. Alessandro, take it from here. Yeah, thank you Paul and hello everyone and thank you for joining. I'm Alessandro Giantsati, I'm a developer at MoodleNet for MoodleNet project. And yes, today we'll have our webinar to introduce the interested developers around the globe to on how we refactor the MoodleNet version 2 and how we are refactoring it to enable customization and enable developers to develop packages to extend and customize MoodleNet. Alessandro, can you share your screen? Oh yes, I will share your screen now, sure. And we will start directly from the development environment for MoodleNet. Well, development environment actually is just about having a good IED for developing in JavaScript or we recommend TypeScript as the software is written in TypeScript. JavaScript is also supported. So we need actually no JS in the environment in our local machine and in production also when we want to install it. And ArangoDB instance service running, ArangoDB is the database of choice of MoodleNet. So it's the main database and currently the only one that is needed for running MoodleNet. So we are going to use BS code as a day editor, as a preferred editor, because it has very good support for TypeScript. And yeah, we're just, we're going to use Docker for deploying the needed ArangoDB instance, but you can have it running however you like. The best way to develop, for the moment, the best way to develop a custom package for MoodleNet is starting from our project repository. Okay, first, maybe I should talk about some terminology, we will talk about the packages and extensions. And when we talk about packages and extension, in some way we're talking about the same thing. Packages, we say packages because packages are the standard MPM packages as any library that you can find on MPM.org, for instance, for JavaScript. And those packages, this is how extension custom functionalities and new functionalities for MoodleNet would be delivered and published. So we talked about packages because we will develop extensions for MoodleNet in packages, in JavaScript packages. Typically we use, maybe we will use extension term, mostly from the user point of view, because user admins when they will want to install new extension using the admin page, they will talk about extension, not packages. So, we can start by having, cloning the repository of the project, which is this one. We can just use, issue a couple of command yarn at the root folder project, project folder, and then yarn init depth to initialize the project to start to have it ready to develop. I actually did already all this stuff because it would take sometimes, you know, sometimes to install the dependency as usual with when we talk about project with a bunch of JavaScript dependencies. Moreover, sorry. So I already done all the initialization of the development environment. The first thing we can do here after initializing, having initialized the development environment, we can, well, see how it works. Next, we can start a development, sorry, a development backend. We can install a development backend in the development environment and start it with these two commands. We can do it here. So I am, I launched a terminal inside the model net project. Here we are. This is the model net project, the repository, the cloning repository. And we can issue this yarn that we start being in my depth. Yeah. My depth is just a name is a custom that you can choose to be whatever is just the name of the directory in which the back end will be installed. And let's see what happened. The, the, our development environment always install this development back ends inside this directory dot dev machine. So we now have this my dev, which is the name that we choose it here. I might have directly with an installation of modern net. And we now can start it with the issue in the common yarn that back end always passing the same the name of the directory of the installation director we choose. We can have many installation directory maybe with different, different configurations, we will need to test different configurations. So we can, yeah, now yarn that back end. My depth. Okay, here we are. Oh, sorry, I forgot something. I actually have to first. As I am saying here, we have to ensure that the language is running on local host. So I will run it with this. I'm running a Docker inside the Docker container, because it's quite handy for us to have it in Docker. But I'm going to run it here now I'm running a complete empty around the database. And yeah, let's step in a little bit just a moment into the other database interface, we can see what how is in on local lost. On port 85 29. And we'll have a nice UI that ships with that only be and see what's happening in there. We can see that we have an instance running, but we don't have any database inside of it. Now I said, as we tried before we can start the development back end that we installed it. And while it starts, we can watch what's happening in even in this database. Okay, first run will ensure that all the system packages are installed. So it takes just a couple of seconds. Now it's starting all the core packages that will give the most important features for movement. So if you go here and just well refresh the page, we will see that we're having where the system is creating some packages with some strange names. But we will get to it later and you will understand better what's happening here for the month to have three databases. And now it's hanging because crypto, we need some systems that needs some cryptographic keys and it's creating them now and it takes just a while. That's for the first launch. And meanwhile, it's, it's starting. Well, it's almost ready takes just a couple of minutes, the first time. But I would like to jump to and have a look on how is the modern architecture. So, modern architecture is what the software stack is very simple because it's the software is the whole software is is developed is built from what from back end to front end all in JavaScript well actually type script. And the whole code base is in TypeScript. And so we have the, our code base will run in two different environments in two different platforms on the back end it will run on Node.js. And on the front end of usually on browsers on any modern browser.  And it, even the query language is a resemble very much JavaScript. It looks very much JavaScript and it stores data in JSON format. Yes, the main, the first seat is an entity talking about the code base is MPM packages. Every functionality each functionality, or each set of functionality of the system are encapsulated in us in a independent MPM package. The other thing to keep in mind and the other feature of the system and it's a must for the moment is that we support for the moment only the new Xmas script modules from Node.js and from X from JavaScript from for latest Xmas script versions. We may support legacy modules, but for the moment we just support Xmas script modules. While on browsers, the main technology that we use is it act 18 and all the stuff that comes with it like HTML, SAP, CSS, CSS 3 and whatever other library that could be useful. So software architecture, the asset every every function every functionality is isolated in a is implemented in an isolated package. So the core main model that is is is comprised of a number of packages at the moment we have all those packages that sets up a standard installation or movement of core. The core package is the fundamental package that lets the whole framework. And it's about keeping all together all the function functionality packages. So we have a bunch of fundamental packages authentication manager direct application content graph we will talk about this other packages that give services like the ability to graphic email services. Other packages that's about about content. Other packages that have some the implementation for authentication. Yeah, and some utility packages. I would go too much about the details because it will take too much time, but we will have some information about all the core packages that we have in model and modern that installation. Just a couple of words about the core. The core keeps together all the functional packages and mediate the communication between them. It manages the boot sequence and the installation that great the installation and the upgrade of the packages or the system. Then we have our good to be that just manage the other database instance and then we have a communication manager that manages users in as a centralized with centralized APIs with centralized functions. An HTTP server and extensible HTTP server must say that most of the package are extensible. Then we have a direct application based on react. This is also extensible. Now I have a content graph, which is the heart of modern that actually here. This use along with the B and makes a database in the Rango DB instance and here you every package shares this database using this. The APIs of this package content graph and this database. This will be stored all the content, the content meaning all the content that users what user will see on the on the web application. And so different packages with different functionalities will insist on this content graph package extending it and making relation between different entities coming from different packages. An overview of all the core packages that we have here are some installation and how they are related in the system, what package uses or depends on the package how packages use other packages and how they depend to each other. So that's why versioning is for the packages is independent, but I wouldn't get too much into this now. It's more interesting to understand how to create a custom modern package. Let's see what's happening here. So the system is started now. We can see that after those databases after crypto has created these cryptographic keys, if we refresh, we see that we will have we have other databases. Every package, every function package. At on demand can ask that our database are going to be packaged to install or create a private database for its own purposes. So we have a database for the organization package, another base for the email service package database for the authentication and so on for the content graph. And so on. So we have a bunch of databases now here running with some data on it inside of it. So let's check what's happened if we go we have the server listener listening on port 8080. So we just jumped into localhost 8080 and we'll see. More than that running here. Okay, at the moment, it doesn't have many functionalities. But the moment we have, you can see functionalities for. Yeah, all the framework for extending stuff and for extending the react application and the back end and all the functionalities for for creating new user for login and sign up. And so if we want to see something now for the moment, we have to. Well, for the moment, just join create a new user. And at the moment we have just one. This just one authentication method, which is the simple email authentication method. I mean, this is a package. It's called a simple email you can see it here. In the log. And this is as well as standard authentication and sign up method you just provide an email and password and you have to confirm your email by a link that you get into your email. And that's all. Well, at the moment I didn't, I didn't configure an SMTP for the email service. So as a default, until we want to. Until we configure the email service SMTP, we just get the link that should be sent to the to the to the signing signing up user. And the link that confirm them so for the moment we can just copy it and confirm the mail manually this way, but this would be should be a link. Okay, we created a new user now. That's the user that I created. I can see my file. I can edit something and save whatever. I can log out and log in again. Okay, sorry. Okay, and log in again. Right. Authorization are not yet implemented. It's the first thing that we do from tomorrow. But now any, any sign up user can step into the second page, for instance, here we are. Here we have the second page. The second page have some functionalities some basic functionality for changing. Well, the stuff that you see on the main page, like we can change this one with with a new title, hello world, and say, yeah, simple stuff, nothing, nothing, nothing credible. The thing that is interesting for the moment for us is the extension section here we can see that we have here we call it extension for the users, but we know that they are packages. We see all the packages that has that are installed and running on the system. And you can see that these are all the main or the core packages that we have here. So let's understand this. Let's see a little just for a little while. How does this installation directory look. We have a package JSON. And we see that the packaging so defines all the packages that will be installed in the system and will be run in the system. And you can see that these extensions are the same that you see here in development these points directory to the to the to the folders here to development folders. In production that would point to a npm registry and point to an npm registry package. And we will see this later too. Here in the slides, you can see there are there are a number of steps to make to develop a simple very simple demonstration for a simple. Custom package. I want to go through all of these. But I will talk about all these steps in a in a much faster way. We can use. You see, in this package directory, we have all the core packages, but there is also a. Another package, another directory, which is called my modern mjs package template is just a template very simple custom extension custom package that could be used as a reference to understand how things work here. So let's say that a package. A modern package for extensive for extending modern it is just a simple standard npm package with its own package Jason. Here we have it. With a name with a okay it must be type module as we said that we currently just support a ESM modules we need to support just we need to know the JS major equal 16 because this will support properly the ESM ESM packages ESM modules. And with an export. Yeah, this is the the maybe you are used with the main property of package Jason to to define which is the main module in ESM it's better to use exports, it's, it looks like the same this is like it works like the same if you choose the point. And you point to the, the main module you have it's just equal to the main property in standard package Jason. And here we say that, yeah, a standard typical modern package will must have a dependency to to a modern that call because the modern that call is the fundamental hook to modern that system so you need to. To have a dependency to modern that core in as a peer dependency. This I won't get through this explanation of this now, because it's time consuming but we have to declare or the dependency that we need from modern it. And from other modern that packages in the peer dependency for the moment we are going to use the core, the react up, because we want to extend the react application to the component library, because maybe you want to use some components that are designed to be look good to look good on our on our react application that has some design patterns. First of all, we want to, well, before getting into the code, let's install it. Typically, on a production situation, you would have this section in style extension, and you would see here a list of compatible extension, making that, well, the system would make a query to MPM to the registry. And check for well extension that are published there. But at the moment there are none so we don't have any compatible extension MPM. But for development, we can have the we have the possibility to install an extension from our local directory to have this option enabled. We have to go to advance it, set the UI in developer mode. And here in the install extension, we will have also this option from local code, local package. We can copy the path of this package folder. Paste it here and say, oh, okay, we will open also here the log of the backend and install it. Okay. Okay, we don't click it. Okay. What will happen now? The system will install the package, this package in the system and restart the system and reboot all the packages. We have the system restarted now. And if we check out here somewhere in the log, we should see somewhere here is the system is importing and connecting my MooderNet and JS packet templates. This is the thing that we just installed it. Well, let's see what's happened here on the installation directory. On the installation directory in the packages, we see that we have a new package installed in the dependencies. So here we see all the set of packages and functionalities that are running in the system. This is a new one, the new entry. Now let's see how does it work. Let's see how is the code for the, how did we develop this package. The first thing to say is that the boot sequence will import the main module of the package. So it will import this one in this case. Let's go and see it, main mjs.  Well, first thing to do is to import some functions for MooderNet Core. Because we want to hook into MooderNet into the MooderNet Core into the system. And the first thing to do is to connect this package. So we can use this function, connect package. We passed the import meta. This is also something that I want to get into the device here and into the because. And we say that we want to connect this package and we want to provide some APIs for this package. Now we will get into the APIs later, just in a while. Then I saying that I want to use also the React application because I want to extend this to so I get a reference to this importing it. And I ask the MooderNet Core to use this package. Now I can use this reference given by the core to the React app and I can call the plugin API in React package. And I'm telling to React package, look, I want to extend the React application. I don't want to extend it. And I will give it an entry point for my extension, for my React extensions. And I will give a path to this main component JSX, which is stored in SSRC web app main component JSX. Here it is. We will go through this just in a minute. Let's see the APIs. I'm saying that my package wants to publish some APIs. The API definition is just an object, a structured object. Where each leaf of this object is a definition of an API. We have an API here that is inside a structure of as hello and world. This is a hierarchy. And the API is just a simple function that takes some parameters and returns a promise of something. That's all. I get parameters and I return a promise. I return with a sync or however you want to do it, but it must return a promise. And it gets as a first, as a courier parameter, a context. Let's see how it works. And now it provides also a simple function that should validate the parameters that should be passed to the API. So here we want to ensure that the first parameter is a string and the second parameter is a number. And we can return something to H2 that tells the system that parameters are okay. Let's see. By default, the system will or HTTP, the HTTP package, HTTP server package will publish the APIs that the package APIs through HTTP. So we can see that we can already use these APIs. The API that we have defined here. By a post call to 8080. MyModernet. Here we have a prefix that is the package name, the version. And then the path to the API that we want. So in this case, hello world. Then we pass the arcs. And let's say that we pass two strings instead of two string and a number. If we call it, I get a validation failure from here. So I get a message, the pattern that I sense, and just a taste of what you can find in the context. For instance, in the context, you can find who called this API. In this case, it's the HTTP server that called the API. I mean, when I say the caller with what package called this API, you would find also information about the user, the original user that issued the call and other relevant information. Let's see what happened on the front end now on here. You won't see much here because meanwhile we are talking the system restarted and the web application recompiled with the new stuff coming from the console package. So if we now refresh the page, we see some difference. Okay, we see a link here. A link here. We see that it's a new page came here. And this page, it looks like it is using the API of this new package. So what happened here? Let's get into the main component that we registered for the React app. The main component. The main component is just a simple React component that will be injected into this into the application. And here we can use some APIs from React app that are exposed to customize the interface. In this case, we are going to use three thing, three registers to register widget or add-ons for the React application. In this case, we are using user register for the routes because we want to add, here are my routes. I want to add a new route that will render the hello world page. I want to register these routes here. And I want to add a right component with a link to my hello world page. And I use this register, right component. And this avatar menu items, I will register something as here. Another piece of code. It's going to be just a link, always to the same page. We can see that we have added a route because we have a new route here that wasn't present before. We have a link here. This is this link here, my page link, added on the right. And another element in the menu, my page. This is what the package have added in the web application. And here we can see also that how we could access the API of our package by using the library provided by React app. So we can just say my package that called hello world, which is the path of the API that we define it. We pass the string, the patterns, one string and a number. And then we get the response and set it here as a state. And then we simply, and we provide it with a context, with a React context in such a way that hello world page can. Render the API response that we for the code that we made on the main component. I mean, this is the main component that we register is the entry point of the for the web application extension. Here we can use all the APIs from different from other packages, code packages or other packages to extend them. And from now on, the whole implementation of the web application features for our package is just free. It's just you can do it as you want. You're completely free to do this. You just want to use probably likely hooks to other packages features to add the widgets or add pages. Once you've done this, you are completely free to implement your, your UI as you like. The same happens on the back end. Once you have looked into, into mood and that core. Well, you can use other packages to, to interact with them using the core APIs and core functionalities. But then you are completely free to implement to your the functionalities of your package. In the way that you like. In fact, in this, in this. We say that types typescript because the whole code base is completely and very strongly typed even in the dynamic parts. So you have strong typings, even when you call APIs from, from their web application, you, everything is completely typed. But if you can, you can see that you can even write a package with standard JavaScript. Note that we are using mjs extensions because as said, we are, we are supporting only ESM modules, ECMAScript, the new features of ECMAScript modules. So let's see here, let's go back to the second page. And if we go to extension page, now we can see that we have a new guy that we installed it. At the moment, any core package can't be installed. But new packages can. So we have installed this. Now we want to uninstall it. And again, we should see, if I click it the right way. Okay. That the system will restart after removing and uninstalling the package that we want to, we wanted to uninstall as soon as the, as the system restored. If we try to refresh the page, we won't see it by once. We still page and this stuff here because it takes a while to recompile the women's on this. It will take a couple of minutes now, maybe less, maybe more, it depends. But as soon as the application has been recompiled, we should see the application as the web application as it was before installing it. What more? Well, I think that's enough. I think we got through every step for now. I just want to see here the web application that has been, it takes just a while, but that's all we can get to question time setting. Thank you so much, Alessandro, for these. Here we are, the application has recompiled and we, and yes. And the page that used to have some content is now not available. Thank you. Yeah. Thank you so much. Before we go to the questions, what about go through? Oh, yes. Okay, but we have something more. Yeah, actually, please go. Yeah, sorry, I forgot one part. Let's say that we are happy with this package. And we want to use it on our production kind of production environment. Well, now I'm in an empty directory, and we just want to showcase how we can install a real modern net installation. We just need some standard MPM command and peaks. And we call it mood and slash create. And we choose a folder destination folder like my deployment. We for the moment we have to this would point to the standard MPM registered MPM dot JS dot org, but we didn't publish yet. We have this published in our own private registry private. Well, you can you can check it out. We have a registry where we test this and this system now, and we have all these packages published here. You won't find them in MPM. So if you want to install with this common you have to add the registry option pointing to this. To this URL. This will install modern net 3.0 alpha 10 in the destination folder that we choose it. It takes some time because it will install all the dependencies. We are also working for making this process much faster. And maybe we can go on with the webinar with other things and we can have a look at the end how to install the package that we deployed that we develop it inside a production like environment. As soon as this process is ready. Thanks. Thanks, Alessandro. Just to, I noticed a question in the chat there. So just to talk about contributing packages to middle next, I think it was when who asked if middle net supported plugin development and this is really this point. Just to ask a clarifying question. I'm assuming you don't mean does middle net accept middle elements plugins because it doesn't. It's a completely different technology stack. But will we have a contribution and a plugin system? Yes, indeed, we will. It will be redesigned to act like an app store that sits alongside middle net through an NPM repository. Obviously, we're going to wait for some contributions before we do that. But yes, absolutely, we will throw in the future if you do develop something and you would like us to make it available to the community then at the moment. Just going to touch with this fire track or the community and we will set up a way of looking at that what you're doing and supporting you on that and getting it out there for community. And apart from that, this is going to just wait and see what we get. I know some of you, for example, are waiting on a single sign on packages to be added. I know that there are some people working with this externally already. So we will be offering those just as soon as those are ready. Next slide, please. And just a final note on there's a link there into the accessible development practices that obviously a whole of mood will try and work towards. So if you are developing something, the code outputs are very important that they are accessible and we check accessibility on everything now. If you want to have a look, there's a link there to our accessible coding development practices course in case you want to check the standards we're working to. Just like to say thank you. And if there are any questions. Oh, just just I would like to answer a couple of questions from the chat. Can you just allow me to read them through so we can have them in the recording as well. Starting from Jeffrey, who asked about mood net is meant only for content creators or also for consumers. And Paul has already addressed this accurately, saying that mood net is for anyone producing educational resources of any kind or sharing and curating resources. And if you are interested is another course in the educator pathway here in Moodle Academy, where you can see how mood net is used is meant to be used from the educator perspective. And we have a question from Sergio. He says that before releasing version three, you will implement authorization. I can't update to a release with open settings to any on. Or am I wrong? Yes, okay, I will ask I will answer to Sandra Bellino at the same time I would answer to Stefan Robota is the second last one commented because it's about the same topic. Yes. Obviously, we have there's no authorization authorization pattern here. That's the first thing that we will implement from tomorrow, and we already designed it. And it will be surely on more than three. The organization. I can give some just some preview about the logic of the organization system, it will somehow somehow gets sorry, it will resemble a little bit concepts from all out, meaning that will it will be based on scopes. API is will be assigned to scopes and users will be also assigned to be able to access some scopes so scopes will be the main where the main strategy for managing the authorization of the API access or packages access so every package can will be able to define its own scopes. And every package could also will be able to use other packages scopes. So the scopes will be strings in some way that are prefixed with the package name and the end with the package specific scope, the final scope. Thank you. When also asked and I think Paul already answered that about moodlet support, if moodlet supports moodlet plugin development and say that it's completely different. products. Abie says, can a plugin run as separate service on a different container. Well, at the moment, we are focusing on the on the framework on the system on this architecture and it's war and it's decided to work only as a singleton but we even we as model. We will need we will strongly need the possibility to install different well a number of a cluster of instances and also we will need to cluster eyes. The services in these instances having kind of microservices but yeah, I wouldn't only call it microservices but services oriented architecture where some instance will be enabled to perform some services. But not others so yeah cluster eyes to to to have the administrate the ID administration have the control to split the workload between different services and between different instances. So it's not now but this is something that we have in the roadmap for sure. Okay, Sergio asks, which registry software have you installed and if it's open source. Which, ah, yes, okay, this is nice. It's, I just found one that's working well. It's called the virtual. I will type it here on the on the chat on the chat. And maybe I can find also the well if you look it on Google it that's there you will find it. The Dutch.org. Yes. And it works great. It has some just some differences in some queries in the response of some queries. So it's a bit difficult to have to have our implementation for for supporting both MPM standard MPM and that should we will try to have a system that will support both. Maybe we will have the system that will support both MPM standard and that we will strive to have this. Okay, Dimitris, thanks you for the excellent presentation. Stefan, I think you already deal with that. Is there already a user role model implemented or does every user have the same rights? Yeah, I will extend the answer that I gave before. Having a scope based authorization system. User roles can be made up assigning to different roles a set of scopes. Yes. Okay. Sergio asks that should be faster to integrate an OIDC slash out to external out. Yeah, it should be quite simple because we are taking. We're taking. Yeah, the. Our authorization system will resemble the those specs. Today when asked about the moodlet forum to keep asking questions and Paul has provided the official forum from the community forum from moodle.org. Of course, you can still use the forums inside the course for things that can be dedicated to the presentation. And I guess that was all so far. That was quite interesting. Thank you so much. And just to for the conclusion. I would like to invite you to get involved in the growth of moodle Academy by contributing to its development. I will suggest topic ideas and you can go to the getting both course from the course main page from the side main page and suggest topics to be covered in the future. You can also contribute to webinars if you have some expertise and subject and of course you will receive a presenters badge, and you can also contribute to course development. And of course, again, you will gain course builder badge. So help us spread the word about moodle Academy, you can tell your friends and colleagues about the courses offered here free moodle academy. They can everybody can learn about by completing a course and even our current course the moodlet for developers will be further developed and we will have a batch as well. And of course, do tell others about moodle Academy and if you have friends were educators and not developers that might be interested in the moodle educator certification. Thank you, Alessandro. Thank you, Paul for being here and thank you all of you for joining us in today's session.


This right here guys is Small Rick and Brandon Lee's co-designed iPhone 15 Pro Max cage. A special edition that comes with many useful features to help mobile creators like us simplify the filming process. They also have completely black version of the cage for the iPhone 15 Pro in case you have that model. Now, Small Rick is widely recognized for creating top notch camera accessories and filmmaking products. I personally use many of them and now they teamed up with Brandon Lee, shout out to him, an amazing travel filmmaker and a global nomad to create the ultimate mobile filmmaking kit. So with that said guys, let's see what this mobile cage has to offer and how we can use it to get creative shots. Now, before we dive in, I wanna thank Small Rick for sponsoring this video and making it possible. Now, why would you need a mobile cage in the first place? Now, one reason is more stability and control when shooting handheld with your iPhone. Even with great image stabilization on the iPhone 15 Pro Max, a secure and stable grip enhances your ability to capture smooth footage and allows for creative camera movements as well. The cage also protects your iPhone from drops or damage while filming on the go. It also provides multiple mounting points for accessories to expand your setup. So let's now check out the features of this cage. Firstly, the build quality is premium. Also, it's incredibly lightweight, ideal for mobile shooters on the move who prefer to keep their gear as light as possible. It also has a beautiful green and black color combination along with random lease signature. Now, as you can see, the cage includes two grips for setting up dual hand mode enabling for smooth handheld camera movements. The innovative feature of this cage is the quick release system. It allows you to detach the handle based on your shooting needs. So you can use it as a side handle to change from horizontal mode to shooting vertically or you could even use it as a top handle to get those low shots or you could even use it as a vlogging setup to film yourself. Now being able to attach and detach the grip quickly makes this rig even more compact fitting it easy in any camera bag and even in your pocket if you remove these two handles. Additionally, the grip comes with a wireless remote controller that connects to your iPhone via Bluetooth. The remote control has a range of up to 10 meters and this really allows for easier and faster recording control without necessarily having to touch the screen on your iPhone. Now the best part is that you can slide this part off and it reveals a cold shoe mount for additional mounting options. Now the cage has a side door that opens by pressing this button up here and the iPhone 15 Pro Max fits perfectly and slides in smoothly as well. The inside comes with a built-in silicone pads to avoid possible shocks and scratches. Now once I close the door, it locks automatically. The iPhone buttons and ports are easily accessible. Now the back is exposed allowing you to attach a MagSafe wireless charger whenever your battery is low ensuring uninterrupted shooting. And by the way, I will leave links to all products mentioned in the video description below. Now the cage has 10 one-quarter threaded holes and two cold shoe mounts to expand and create your customized setup such as adding an SSD holder to record my videos externally. Still you could also add a light or microphone or mount it on a tripod or gimbal. The possibilities with this one are really endless. Now the cage comes with an M mount back plate. However, other back plates can be purchased separately for lenses with a 17 millimeter or 37 millimeter threaded lens and T series. The kit also includes this 52 millimeter V&D filter with five stops. This way you can choose the widest aperture lens on your iPhone, which is the standard lens and achieve a slower shutter speed to get that cinematic look and natural motion blur in your video. It comes with a filter ring adapter for easy mounting, allowing you to attach the V&D magnetically, which is really cool. Plus it also stays securely even if I try to shake it off, as you can see. So let's now put this rig to the test in the field and show you how you can get creative shots with it. So let's first start with the camera settings. So I'll be using the Blackmagic Camera which comes for free and gives you full control over your camera. I'm gonna be shooting in 25 frames per second shooting everything with this rig handheld. So I won't use any slow motion to smoothen out any camera shakes, but I will use some post-production stabilization. And as for the shutter angle, I will set it to one over 80. This equates to a shutter speed of one over 50 and gives me that natural motion blur. Next up, the ISO I keep as low as possible and the white balance I keep locked. As for the auto focus, I leave it in auto and I'm also using an ND filter over here. This way I can adjust the exposure according. So if I remove the VND, you can see that everything is overexposed. So by using a VND, I can keep the shutter angle at 180. Now I'll be shooting everything in Apple ProRes 422 LT and I'll be recording everything on the external SSD which I can set over here. I'm gonna choose files and you'll see one terabyte Samsung is selected. And because I will be recording in Apple log color space, it gives me a flat picture profile and I use display LUT with Apple log to Rec.709 selected to convert the log footage into a Rec.709 look. This way my shot won't look so flat and I can better see what I'm filming. So when I head over up here and select the LUT option and turn it off, you'll see the image is flat and I can now display the LUT and everything looks much better. Now as for the stabilization, I leave it at standard. This way it will help smoothen the shots a bit. If you have really shaky hands, you might wanna go for cinematic or extreme. Now one thing I also do is in the settings, when I head over to audio, I set it to stereo. This way I can also record the ambient sound which I could use later in the edit. All right, so I have my buddy Arturo with me. He's gonna help me out in this shoot. He's gonna film me behind the scenes. So big thanks to him. He's also actually a creator. He does short content on Instagram as well as TikTok. And he's actually transforming to long content. You can follow him on his OnlyFans account. So. No. Anyway, for this next shot, I'm gonna have Arturo help me out. He's gonna film me from the side and pass by the trees. This way we have some foreground and create also some handheld movement. And it's gonna be very challenging because the floor is uneven and there are a lot of sticks lying around. So especially easier having a rig than holding the phone naked. Really cold. So have you seen my root of the red nose reindeer? That's him, man. So for this next shot, I created an orbit shot around this tree. The best way to get serious shots is by having the rig close to your body sort of creating a three point contact. And then especially walking heel to toe which will make the shakes less obvious. With the rule of thirds, I try to keep the tree centered and I always make sure to adjust the VND filter so it's not under or overexposed. So the next shot I created is a low shot. And the way I did it is I placed this handle on top and reposition the SSD on this Colchue mount. And this way I can get lower to the ground to create a sort of crane shot. And also importantly, I just moved with my body instead of with my feet, which worked really great. So the next shot I created is a selfie shot using one handle to the side, basically stretch this arm and faced the rear camera towards me. And it's a fairly easy shot to create that you can include in your videos. And also be sure that the exposure is correct because the light was also changing. I can simply place my hand to where the sun is shining and then adjust the VND accordingly. Also created this parallax shot from a lower angle which I think looked really nice. So the next one is a static shot. I'm going to use a tripod for that. I framed it in a way so that I have a little bit of foreground over here. And the great part is that this rig comes with a Bluetooth shutter that I can use to start and stop recording from a distance without having to touch the screen. I think they made a really awesome camera rig for mobile creators shooting with the iPhone 15 Pro Max. It's perfect for those who want to keep things simple while still capturing professional quality footage. The design is well thought out, versatile and great for different shooting scenarios. Now, if you're someone who frequently upgrades their iPhone or likes using it with a case, SmallRig also offers universal cages that work with a wide range of mobile phones allowing you to keep your case on. Their latest addition is the universal quick release mobile phone cage which is Max-Ave compatible and comes with a phone clamp. It also features an integrated quick release system just like this one for easy setup. I might even do another video on it so stay tuned for that. Anyway, I'd love to hear your thoughts on SmallRig and Brandon Lee's co-designed iPhone 15 Pro Max cage. Personally, I think it's a solid investment for anyone who's serious about mobile filmmaking and wants to transform their iPhone into a pro camera. The price is also quite reasonable and it's really cool to see that Brandon has been part of it as he himself travels a lot to different places and therefore really understands the importance of a compact yet functional rig. With that said, thank you so much for watching guys. I appreciate all of you. Take care and see you in the next video.


Now five months ago I transitioned not only to being a new cardiology fellow but also a brand new dad. Here are some of the biggest takeaways I've had over the past five months. Number one, I come home with a different level of energy. My priors in training and working often coming home just felt like I was just literally releasing all of the fatigue and tiredness from the day. But now when I come home I'm actually excited because I know coming to be able to see my daughter and seeing her smile is just a different level of motivation. Number two is I definitely see a change in my behavior and personality especially interacting with patients. Often I'll start asking myself the question of how would I want my daughter to see myself interact with these patients and these individuals. Number three is definitely being more hyper-focused on all my inefficiencies. Before it was much easier when just me, my wife and our dog but now knowing that my entire life essentially circulates around when my daughter is asleep and when she's awake I have to make sure that I'm using all that time that I need to get work done as efficiently as possible. And then finally number four is understanding the bigger goal. It is no longer just about medicine. Everything that I do is to put myself in the best situation possible so I can provide and be present for her for all the years of her life.


Putin moving nukes through Russia for impending attack in a national address, Russian President Vladimir Putin has threatened to use nuclear weapons if NATO countries were to join a ground offensive in Ukraine. The suggestion of adding NATO forces to Ukraine was made by France's President Emmanuel Macron but quickly dismissed by the US, UK and Germany. However, it comes amid calls to show more strength against the Kremlin from Baltic leaders as Russian troops ramp up military operations along land and sea borders in the region. Estonia, Latvia and Lithuania are now bolstering their civilian armies and have urged other NATO countries, including the UK, to do the same. At such a time on February 27, a self-proclaimed conspiracy theorist named Liz Churchill posted a video on X that appeared to show Russian intercontinental ballistic missile launchers being moved through the streets at night. Churchill's post read, President Putin is moving nuclear weapons. Russia isn't playing games. To NATO and the CIA, you cannot win this. Please surrender. The video was also widely shared by other users on X. Sergei Radchenko, a Russian-born British historian, suggested Putin's quick lurch to nuclear threats suggested Macron had touched a raw nerve. I thought it was interesting that Putin's speech included a direct reference to Macron's recent remark that the use of NATO's troops in Ukraine should not be excluded, he said. His apoplectic reaction to threatening nuclear war suggests that Macron touched a raw nerve. Putin later suggested that the West was being cavalier about the threat Russia poses. The West is trying to drag us into an arms race. They are trying to wear us down. To repeat the trick, they succeeded in pulling off with the Soviet Union in the 1980s, Putin said. Estonia plans 600 bunkers to stop Russian invasion in the first hour. On NATO's borders with Russia, front-line states are already preparing for the next war with Moscow. In January, the defence ministers of Latvia, Lithuania and Estonia agreed to a new plan to build an extensive network of fortifications intended to deter and defeat the kind of Russian incursion long-feared in northeastern Europe. Given their country's 210 miles of border with Russia, much of it considered near-impassable thanks to extensive forests and wetlands. Estonian officials said the government is planning some 600 bunkers they hope will prevent a hypothetical invasion and occupation by Moscow. The war in Ukraine has shown that taking back already conquered territories is extremely difficult and comes at great cost of human lives, time and material resources. Susan Lilevali, the Under-Secretary for Defence Readiness at the Estonian Defence Ministry said she spoke about the $64.7 million project during a Thursday briefing with journalists. In addition to equipment, ammunition and manpower, we need physical installations to defend our countries efficiently. Lilevali said the small Baltic states have long been considered the most likely Russian targets should President Vladimir Putin be bold enough to launch an attack on NATO. If successful Russian units might be expected to overrun the three small nations within days, these installations serve first the purpose of avoiding military conflict in our region, as they could potentially change the enemy's calculus. Lilevali said counter-mobility and fortification measures have played a significant role in wars in our region in history, for example in Finland and as the war in Ukraine has demonstrated, they are perfectly valid also in this century. She continued, the installations should deny the enemy the possibility to advance rapidly in the territory of Baltic countries and in case of military incursions, stop the enemy's advance already at our borders. Brutality within Russian army in Ukraine now worse than in hell. Although the Russian authorities work overtime to hide it, brutality by officers and soldiers in the Russian invasion force in Ukraine is now so bad that some veterans say things are worse than in hell. The product they believe of the entrance of so many former criminals into the ranks and their propensity to follow the moors of Russian streets. U.S. expert Paul Goebel said this, according to him, this is the conclusion of Olesya Gerasimenko of Vertska media draws on the basis of conversations with veterans, their relatives and their defenders after the last three months of the fighting and the picture she paints is truly disturbing and a sign that unit cohesion is weakening. The closer Russian forces are to the front lines and the rarer leave has become the more officers and even some soldiers feel they can get away with anything she says, confident that no military prosecutor will appear and that they therefore have the power to act as they like up to and including torture, rape and murder. According to the investigative journalist, the problem of extrajudicial punishments, bullying and non-regulation relations has intensified and the longer the forces are on the front lines the more serious things are becoming. Those with a criminal past are leading the way in applying the rules of the streets, but regular officers aren't far behind, soldiers say. Both groups view those who are weaker than they as somehow less than human and therefore appropriate targets for their anger. Some Russian soldiers are shooting themselves to escape and others, Gerasimenko says, are surrendering on occasions when there was no need for that only to escape the hell of service in the Russian military.