Hello, everyone, and welcome to the Closure Buff. This buff is going to be led by Alana Hashman, who's going to... Sure, I will kick it off. So, hi, everyone. I am the Debian Closure Team de facto lead. I have been working on the team since 2017, since I revived it. And I have also a few members from the team with me on the call, as well as some folks from the Puppet Team who might be asking questions, as will become relevant later in the buff. So, I have Rob Browning from the Closure Team, and I also have Udkarsh and Zigo. So, let's kick it off. If everybody can see the pad, you should see what I'm going to go through in the session. I'm going to just start with a quick introduction of, you know, closure for those who are not familiar with closure. The state of, you know, the current closure packages in Debian, and then what work needs to be done in the upcoming months. So, and I'm going to share my screen. So, okay. So, what is closure? Closure is a Lisp that runs on the JVM. So, some folks may call it a dialect of Lisp. I would call it my favorite dialect of Java. So, all of the various closure programs in Debian, the source code is distributed in, you know, closure source code format. And if it needs to be compiled, it is compiled down to Java bytecode, which makes it architecture all, which is kind of handy. So, there are many packages that are currently maintained by the closure team. You can see some of them here on the DDPO page. Not all of them have been updated recently. For example, many of them are, you know, the same in stable as they are in testing. And unstable currently. And let's see. What else do we have on the agenda? So, goals. What work needs to be done? So, I have recently updated the Wiki page on the closure Wiki. And as far as goals for the upcoming release, we probably want to update closure to 111. However, that's not yet available. So, as soon as that's available, we should do that update. We probably want to update some of the other closure packages. They haven't necessarily been uploaded in a while. We may have some policy updates that we can apply. We probably want to, if possible, package some of the new CLI tools that have been out for a number of years, but just haven't been included in Debian, and we can talk a little bit more about that later. And then potentially anything else that can be accomplished in the sections below that go into a little bit more detail. So, closure itself was targeted initially at the JVM, but also targets other runtimes such as the CLR, such as the node runtime for JavaScript. So, one of the potential goals for missing closure tools in Debian would be to target closure script. There is a CLI provided by upstream, as opposed to the CLI provided by the Debian packages, which was introduced as a Debian script and does not match the upstream because it predates it. But there are a bunch of dependencies that make adding these new upstream scripts relatively complicated, as well as a package transition to potentially use the new scripts. Boot is a closure build runtime that we currently don't have packaged in Debian, but could potentially be including. And then there's some talk about potentially writing a line again helper to allow packages to be able to line again, which is the most popular Debian build tool outside of like the upstream depth scripts to make this a little bit easier than using like some of the templating that I have currently provided. We may also want to work on policy. There's also a big question of reproducibility. So, closure, the language itself is not currently reproducible, which means that any binaries distributed in Debian are also not reproducible. There is a bug sort of tracking this and a discussion on it. And what else do we have? There's some, you know, sort of general packaging hygiene stuff. And there's also stuff that we've done since the Buster release. I think the last time that I held one of these box was at DebConf in Montreal in 2017 because that was the last DebConf I was able to attend. And I think that's probably all I need to share in terms of screen. So, I guess, back to video. So, let's see, what do we have on the pad? I am happy to hold the discussion and discuss any of these, you know, potential goals for the team. One of the other things that I mentioned was that we potentially have some work to be done in Puppet because Puppet, it turns out, these days uses large components of closure. So, in order to package, you know, the various Puppet stuff, we will need to do that. So, yeah, I think that's a good overview. Yeah, I think Zigo, Akash, and I, maybe not Akash entirely, but please, Zigo and I are interested in trying to package Puppet Server. Indeed, in Puppet Server 6, well, Puppet Server was previously written in Ruby and now it's written in Clojure. And we have a large amount of dependencies to write. So, that's why we're here. Yeah, awesome. So, I mean, thanks for joining. There's many things that we can potentially discuss during today's talk, but hopefully that's a decent overview of kind of all of the things that are happening in the world of Clojure. So, any questions? I mean, you're talking about the reproducibility bug. Is it like a really hard bug? No, that is a really good question. So, let's see, let me pull up the bug and I'll share my screen again. Yeah, I think I was going to talk about this as well. Generally, I've seen upstream to be very helpful in making these things reproducible. So, okay, I mean, let's read the bug and see. I mean, I don't know what's going on. So, yeah, so this was a bug filed against line again as opposed to the core language runtime. But if you take a look at the DDPO page, like the core language is not reproducible as well. So, this was mostly a symptom as opposed to a root cause here. We actually, we removed strip non-determinism on this one because it was doing weird things to performance due to strange things about how Clojure bytecode compilation works. So, if we look at, let's see, this is probably very old because Clojure 1.8 doesn't exist anymore. But let me pull up one of these reproducibility reports and I can see if I can try to show you. I mean, it's not reproducible across the board for the most part. And it's because of non-deterministic Java bytecode. Now, that is for, let's see, it's strange that it says this is unstable but it's actually pointing at stretch. So, here, let's take a look at like in cluster. And let me see if I can find the differences. Like, there's specific ordering things in terms of like how this code is generated. And from what I can see, it's mostly like, I've seen a number of instances. I mean, this is just ordering stuff and I'm not sure necessarily how to fix that. But it's pretty like, it's not a trivial thing in terms of the differences here. It's not like a small and obvious thing. I think it would take a decent amount of time to try to determine, because like there are so many things that are just kind of moved around. One of the things that I had previously identified was that it looked like there were, for example, anonymous functions, lambdas that were being generated. And those would have like an identifier which would be like a numeric string. And sometimes those would change between builds. And I don't know if there was like a way to set the random seed for those to be generated from, but yeah, fundamentally, I think that this is like non-trivial to fix. And so I suspect it would be best if someone from like the reproducible build team actually went and took like a deep look at this. I don't think that this is an easy thing to patch downstream. I think this needs to be addressed upstream. Can y'all hear me now? Yes. Excellent. I have no idea what I did. So I poked around a little bit yesterday and saw that at least the obvious uses of the RAM number generator were using the same seed. My best guess is that it might be exactly what you said and concurrency. Like that number may well be coming from an atom that they're incrementing and they're actually generating the code in parallel. And so it's a race to see who gets number 12 on any given run. But that's just a guess. And I agree with you that somebody will have to dig into this. But I also have some people I can, I may be able to ask who, they're not Clojure developers directly, but they might have a clue. So I'll badger them. Awesome. That would be great. Did you try to report this upstream? And I'm not sure how helpful they are or how kind they are. That's a good question. So previously, so it kind of depends. Sometimes Clojure upstream is really quite amenable to various suggestions. Frequently they'll say, this doesn't matter to us therefore. Clothes won't fix. So it's unclear. I can't remember. I feel like maybe this was reported at some point, but it's been so long and the Clojure Jira is hard to trawl through. So I don't think I'll be able to give you an answer on this plot. But if there has been a discussion, I cannot imagine that necessarily the Clojure core team would want to be doing the majority of the heavy lifting. I suspect that we might be pushing that effort in Debian. Okay. Well, thanks. That's nice to know and a little bit sad to hear. Language is not producible as a whole.  Yeah. So one of the good news is that only binary pre-compiled Java bytecode has this problem. Library packages like the recommendation from upstream is that you package those basically just a source code and do compilation on the fly as needed. And there are reasons for this, namely that like between different versions of potentially the JVM as well as different versions of the Clojure runtime, there are no bytecode compatibility guarantees. So without us doing like this massive matrix of like bytecode generation to pre-distribute, it would be kind of moved. So rather than bothering to pre-compile most of the library code, which then solves the reproducibility problem because you're just basically getting text. What we do is we have auto package tests that check to make sure that everything builds with the class path with the current runtime of Clojure as specified in Debian. I actually, sorry, go ahead. Does that mean that the bytecode is being compiled in the postage? Sorry, can you repeat that? Your audio is a little garbled. Does that mean that the bytecode is being built when we install the package? The bytecode is being built at runtime. So we are not like, for example, if I go and I install lib pomegranate Clojure, I do not build any bytecode until I try to use that package with Clojure. Like Clojure will automatically do the just-in-time compilation. OK, thank you. One question I had about that was we had an experience where doing AOT compilation can have a pretty big effect on performance, especially startup performance in some of the work that I've done. And I wondered, I'm not volunteering for this necessarily, but I'm wondering if there has been a discussion or maybe even any interest in. On the Emacs side, for a long time, we've had dependency-based compilation in install time, the Debian Emacs policy infrastructure. We could probably do the same thing for Clojure if we wanted to and might even be able to steal some code from there if we wanted to. But I'm wondering, has that been discussed and do we think it's of interest? And of course, the key thing there is it not only rebuilds all the add-on packages in the right order whenever the packages are installed or upgraded, but it also rebuilds them all whenever Emacs changes because Emacs, we don't know for sure about the bytecode either, so we could do a similar trick whenever the OpenJDK changes, a new version gets installed, we just rebuild the world. Again, not volunteering, just wondering. Yeah, I would not be volunteering for that either. Personally, I suspect it would be a lot of work for not a lot of benefit. Clojure is expected to constantly be recompiling bytecode basically every time you make a change. So if, for example, you have, I don't know, some project that you're working on, on your local Debian system and you're linking it against the system Clojure libraries, every time you make a change to that code, you're recompiling it anyways. Having the bytecode available on your system doesn't matter, Clojure will just go and say, I've got the source, I'm going to redo it again. Sure, but like for PuppyDB in particular, ahead of time compilation could change the start-up time by more than order of magnitude. So we do ahead of time compilation for line again. Of course, if you are, for example, like using line again against a different runtime of Clojure. So for example, if you're like using line run with say a newer version of Clojure than is currently available on Debian or even an older version of Clojure, that will go and be like, ah, this is old. I must go and do these new recompilation things. I think is the kind of thing maybe we can look at once we've been packaging large things like a puppet or a PuppyDB, if we ever get a packaged PuppyDB correctly in Debian. Once that's done, we can actually run benchmarks and see what the hit is, because I guess that upstream PuppyDB compiles this ahead and just pushes a binary, right? Yes, I can tell you it is on the order of seconds in terms of overhead. Like it will be very, very painful. No, potentially that's not as much of a worry for something like puppet where you have like, you know, you kind of run it once and that's that. But for say like the Clojure language runtime or line again where you're frequently running the command over and over again, you absolutely want something pre-compiled available. But then we run into these reproducibility issues. So there are lots of comments in the etherpad. Do you want me to address any of those? Yes, so the blue ones are mine. So that's things I wrote because I have a cranky internet connection here. Mm-hmm. Okay, well, I will just go ahead and I will respond to some of these. Oh, I see that there is a comment that I should speak more slowly. I will try to speak more slowly. My apologies. Okay, so the first question. I didn't have a question before you proceed. I'm sorry. No problem. Yeah. Okay. So in the to do in the wiki that you shared, there was a task, a to do task that, you know, we want to update the Clojure packages that are in the dating archive. Do we do we just want to update as in, I mean, for instance, there are some packages that might depend on it and we don't want to bump their version. So that is why they're like, sometimes the reason to have outdated packages because the main package, the main thing, which is why the other packages were packaged, does not currently support the latest package of their reverse dependencies. I'm not sure if you're, if you get that one. That's right. So most of the packages in Debian under the Clojure language ecosystem, they're not packaged specifically for you to, for example, like, you know, apt install random package so that you can do system development against that package. You can do that. It's not particularly well integrated with the standard Clojure workflow. And so typically Clojure tools are going to be pulling dependencies externally from, for example, like Maven Central or Clojars or other repositories. And so generally my position is that any Clojure package in Debian should be there in order to facilitate some tool available on the system that happens to be written in Clojure. So whether that's line again, whether that's the core Clojure language, whether that's say like Puppet, my goal would be to ensure that the packages are, the corresponding versions for those dependency trees rather than always just trying to ship the latest. Clojure is I think sort of guilty to some extent of often holding really outdated dependencies because the language runtime is very stable. So there's not necessarily like a culture of like constantly updating packages and dependencies to latest. So as a result of that, I would say it's quite safe to leave them kind of where they are mostly like for hygiene, I'm thinking of updating packages. So for example, ensuring that they all are compliant with the latest standards policy ensuring that, you know, like the packaging all looks good and is up to date not necessarily pulling down new versions from upstream. All right. If I'm a VI breakage between let's say, we're trying to package Puppet server, which has a huge list of dependencies. Do you know if a new version of a dependency might break something? Is that something that is common or? So yeah, that is potentially a risk. I would not be super worried about that. And the reason that I would not be super worried about that is I would recommend probably the way that we should package Puppet is the same way that we package line again, which is that we do a big ahead of time what upstream calls an uber jar where basically like you take all of the dependencies like all the things there's no like, you know, the Java equivalent of dynamic linking going on. You take everything you compile all the bytecode that you need you get one single static executable and that's kind of the end of that. And so basically the only thing you would need to worry about in terms of breakage is if you had say like a new version come into the archive and then you can't build Puppet then that might like, you know, we would need to go and fix that in order for the next binary published to the archive to work properly. Okay, anything else before I dive into the etherpad? One quick question. Are we allowing uber jars? If we are, then some of my concerns may not as well apply. Yes. So I mean currently there is one uber jar and it is a line again. I have no concerns with shipping uber jars. That's the upstream policy. Like that is how I think many other teams are now sort of moving to ship things as various language run times sort of move in that direction. At this point, I'm not super worried about it because you know, one of the concerns of doing that is potentially outdated things in terms of dependencies and like duplication on the system. Right now we don't have enough things. I think that would result in large amounts of duplication. So I don't think it's a serious risk for any of that. There will be a good chunk between PuppetServer and PuppetDB, but I don't know if that matters. Yeah, I don't think that that would matter that much. If it was like dozens or hundreds of packages there might be more concern than like... It may be. But that's the thing. If we don't have so many packages then probably we can figure out how to package them separately. Thanks for Puppet. We counted around 20 to 25. That's manageable. But the whole tree is much larger than that. So if you were to install PuppetServer on a machine you'd get something like 200 closure dependencies. Or as if we're only using the Uberjar version then you just install PuppetServer which is a large binary and then you can run that easily. I think that might be more performant and give us less headaches maybe having something more stable with Puppet. And as for the size, I think you don't care if you're running Puppet on a server anyway that machine is powerful. Not running Puppet on a machine with 250 megs of RAM. Yeah, and that's what we're doing for a line again as well. And I mean like the file sizes we're talking about here are not particularly large. Let me pull up quickly. Let me see what the actual file sizes for like a line again are in the binary package. Because I don't think they're really not that big. So shall we stop doing what we wrote on the wiki? No, that's still relevant because we need those dependencies to build PuppetServer in Deepian. Yeah, you need to upload all of the dependencies. Instead of having all these dependencies as runtime dependencies we're going to have them as build time dependencies. Yes. Okay, so the ubersure that you're thinking about is PuppetServer is tough then. All right, thank you. Now I get it. Exactly. Okay, I'm just checking right now to see if I can see... That's the source package. Binary package. Okay, so the binary package for a line again is like 14 megabytes. So we're not talking about like really anything substantial here, right? Okay, any other questions? Yes, before we move on to the questions that are in the pad I just have a quick thing to ask. So I guess we started the discussion that there are a lot of packages, closure packages that are in the Java team. I discussed this in the Puppet team buff as well. Do we intend to move those closure packages from the Java team to the Clojure team? I would like to do that. I proposed that in like 2017. The reasoning behind that proposal being that for all of the closure packages that are just closure source code that they're not Java source code, there's no real need to have any understanding of Java in order to package them. So I think it makes sense to move them because it'll be easier. The Java packaging is much more complicated, I think, than closure packaging, particularly for something like a library that's kind of like, here's a tar ball of the source code. I think it makes sense because there might be dependencies which we'd need to update or something. Then we'll need to go to Java team to do that. And I think it's better if all the Clojure stuff is inside the Clojure team that makes this thing easier. And did you manage to have access right to move them on Celsa directly? So I should have access now to do the migration. I have not sat down and done that on mass. We'll have to probably also... I mean, all of the sim links should be in place, but we'll still probably have to update the home pages of all of the packages or the packaging links. So... The thing was to do it on Celsa on clicking on the repository tab. And then that way you move it to the Clojure team and you have a redirection which is not impacting anyone then. Yes. Yeah, that is the hope. That should make it much easier. But yeah, just have them sat down and had a chance to do it. There's like a bunch of them that we need to identify, and I would rather not go the pointy clicky route for like, you know, 30 packages. I can write you a script and start the API. I think that supposedly the Celsa team already has scripts for this. So I just need to reach out to them. Rob, I see that there's a bunch of backscroll in IRC from Alex Miller, who is one of the, like, core members of Upstream Clojure. Do you want to speak to a little bit of that for the livestream? Well, I think one of the things we were talking about was just that my original suggestion about whether or question about whether or not we wanted automatic rebuilding and install time. We were talking a little bit about that and maybe completely irrelevant if we're going to allow UberJarves. So I think we probably already covered that. But he also mentioned direct linking, which, yeah, that's a thing I think we probably, if we're not already, we probably want to enable for the final packages and maybe for everything. It basically, I'd have to go refresh in the tails, but it avoids a level of indirection at the top level for all references in Clojure. So it can get rid of overhead. It also means it's less dynamic. You can't go in and mess around with things at runtime as easily, but that's not relevant. And I think it can have an entrepreneurial effect depending on the use case in performance. It's pretty much just performance related. Yeah, I'm taking a look right now at the link that was provided in IRC. And I'll make sure to add that to the ether pads. I believe it's just a line again option. So for those who don't know, there's some plug in. I forget if they're built in or not for line again where you can do update in on the project file to make some minor modifications to a project file automatically without having to, you know, do something uglier when you're wanting to mess with it. Yeah, I definitely wouldn't mind adding that to, for example, like the line again build parameters. Now granted, if it's just like a thing that we can stick in the project.close file, then that should make it easy. But hopefully it will be, I mean, if it's a straightforward as like a single build parameter then yeah, we should just do it. If it's already happening, according to this doc link that I pasted in the ether pad, it already should be enabled on Clojure 1.8 and higher. And so if that's the case, we don't do any modification to the upstream build, we just use their scripts. So that should be happening already for that binary. So it would just be line again and potentially puppet server that we would need to enable that on. I should probably also call out that he mentioned with, I assume, his upstream hat on that they definitely do encourage users to just distribute the source libs. I assume meaning, you know, libs not compiled. Yeah, that's been my understanding from, like that's just the upstream practice in Clojure, both for like my understanding working with the line again folks, my understanding working with Clojure upstream. That's just the recommendation. So that's mostly why I've been trying to save us like pain and suffering there. It should be, it's much more straightforward to just distribute the source and that is the recommendation. All right, maybe we should have a look at the ether pad and the question because we have only 15 minutes left. Great, I am happy to do so. So I'm just going to go through the questions in the order that they have been put in the doc. So first question is how does one tell if a dependency in a project.close is a Java or Clojure dependency? That's a hard question. There's no obvious way to know without like going and looking at the package itself. You can guess? What's happening is that I look at the project.clg and trying to figure out which package is matching or not and it's not very easy to do so. No, it's not. It's, you know, it might be helpful if for example, like we had some sort of mapping in Debian between like this is the upstream Maven central artifacts name and this is the package in Debian's name. As far as I'm aware, we don't have that. If we did have something like that, I would be very happy to also contribute Clojure package names to that as well. But there's no way to tell just from the name. We do it works in the Python world. Sorry. Do you know how it works with Python? Like we have a dhpyton embed file which has precisely that a kind of dictionary. I see. Yeah. I mean, I don't have strong opinions on what that metadata should look like. That's certainly an option. But I think the problem right now is that Clojure is like a pretty small portion of the wider Java ecosystem and there's really no way to tell. And if we were to implement this at the Java team level, that would be quite a lot of work, I think, if it's not been done. So that would be potentially a good question to bring to the Java team mailing list.  It took me like two days of work.  So it was a very manual and tedious process. I talked with the people in the Java team and there has been interest in doing that. Somebody, I don't remember their name. It was Subin maybe, started doing some work on that and it had something working. But it wasn't working perfectly. But I think, yeah, since we're using Maven anyway, it should be done in the Java theme. It would be more... Yeah, that sounds totally fine to me. And if, for example, like either the Maven repo helper or if it's like an actual Maven package then the Maven Debian helper can help us write that information then all the better. It'll make it easy to standardize across the board. Currently, all of the packages in Debian, all of the Java packages, build a Java or a Maven repository within the system. So, and all of the closure packages add this metadata as well and get registered there. So you can basically point at your Debian system with all of these Java packages to treat it like you would any other Maven repo source. Let's see, what else we have for questions in the pad? There's a question on what are the causes of non-reproducibility in Clojure. I think we covered that one already. Yeah, and Alex just, I talked to him about it for just a second and he mentioned it. Yeah, Jinsim names, the integer names, that kind of thing might be a problem. And he suggested that we could ask a question on ask.clojure.org and he monitors that and can make a ticket. Great. Yeah, then I think that potentially that is something we should do. Next question is, can you explain how the Debian palms.xml gets generated by Clojhelper? Well, I think I would have to talk about Clojhelper in order to discuss that. So, let's see. I'm going to look through just the rest of the questions before I jump into that that's probably a more extended subject. What would you suggest to check on a freshly new package? What should I do to make sure my package is in shape for uploading? That's a good question. You can ask me for a review for the Clojure ones. There are some reference packages that I would look to to see like, hey, what should a Clojure package look like? But I don't have any like examples of the top of my head. Yeah, but that would be a shame to give you so many things to review. That's a problem. Yes. Well, certainly if there are other folks from the Clojure team who would be willing to step up and assist with that, I think that would be awesome too. Right now, it's always great like to have more volunteers and that's definitely an area that, you know, we could have more volunteers get involved. I think we're going to review for the first few packages, maybe, and then once we're going to be, once we have done a bit of them, we'll have more experience and we shouldn't need everything. And I think what Cashman mentioned with the auto package test is important. It's a good way to test if something is working, if you can call the Clojure package, the Clojure library. Yeah. So the next question is, this is a good question. Why do we have to specify all of the dot jars in the Debian slash package dot class path? Can't this be found out of dependencies? So Clojure currently does not do that like automatically in the Clojure runtime. It doesn't have like a dependency resolver. So the options are, you could use a dependency resolver like Maven to generate the class path. You can use a tool like the upstream Cloj depths alpha script, which could potentially generate your class path. Basically, there are many tools, most of which ultimately rely on Maven code to generate a class path. But if you don't have one already, you need a way to provide one. So what we do in most of these packages is we just go and say, hey, here's the class path. We know what it is. We don't need to use all these tools in order to specify it. That's something that we can do at packaging time. Is it time to write this file by hand? Yes, assuming it works. But there's some automation available to help with that. And then how do I check that? What I wrote there is correct. You can check that by trying to run the package. But invoking it basically with the Clojure runtime and see if it works. So we're just modifying only that particular jar on the class path to Clojure. I think the newer upstream CLJ stuff has a way to actually print the class path that it generates now, too. I don't know if Liningan does. Yeah, but both of them. Yeah, LINE also has a class path sub command that you can use. And I think that's actually how we generate that when we build LINE itself since it's a bootstrapping build. And then the class path file will end up in the jar of the library, right? Yes. Okay. Okay, so we have two more questions. One is about the team's Git tag workflow. I am not particularly attached to any particular workflow. I think you're referring to the workflow on the Wiki in a tutorial. That's obviously not the only way to do things. It is simply a tutorial guide. And it's also quite a few years out of date. So there are potentially lots of improvements to be made there. So I would not accept that as the law of the land or something. That's just, you know, here's one way you can do this. But I think we should maybe jump into this question about Cloj Helper. And I will go ahead and share my screen to give a bit of context. So Cloj Helper. So Cloj Helper is a small Clojure package that I wrote in order to assist with templating out Clojure packaging. There had previously been a script that had been written in Python way back in like 2014 that did not do a lot of things. It kind of fell out of use. I also know that Poicos had written some bash scripts to help automating in Clojure packaging. But this is what I ended up writing to assist with my own packaging. This is not like a, you know, this isn't like my name space on Salsa. It's not like in the team name space. I mean, I'd be happy to donate it to the team. But I'd say it's more like beta. It's certainly not in Debian currently. But so we had done a little bit of work on this today earlier in like addressing some of the problems, outdated stuff, CI, that kind of thing.  And so this is just, you can take a look. There's a link in the etherpad if you want to pull this up. But the specific question was how does this generate a POM? And I can just pull up the code for that because I believe that is in here. Yeah, because it's all like magic to me. And I just wonder the rest of it, I think I can figure it out. But that was a whoa. Yes. So it's not actually that. It's not very sophisticated. It just shells out to line and calls line POM. So it uses line again to generate the POM. It doesn't do that directly. And in particular, it shells out to a line. It's not added as a dependency in the Clojure package. So it's not like that's part of the source code here that you would get in a standalone jar. You would still have a system dependency on line again. But given that you need line again to build and run this anyways, that didn't seem like something excessive to ask for. While I have this open, any questions about Clojhelper other than that one? I think it would be a good idea if you could move it. And then the team's path would make certainly making merge requests easier since we wouldn't have to fork it and then we could just use branches. And I agree that I think if we're going to use that a lot, it would be a good idea to try to package it and deep into it. Yeah. I have no objection to that. I did not expect anyone to use this other than me. So I did not really write this for anyone to use other than me. So if you want to use this, by all means, I would be happy to move it to the team for falsetory. OK. Stop sharing the screen. I've got another question. Probably a simple one. Do the auto-PKG tests, the tests that we write, are kind of similar for all packages, like a quick smoke test or something? In case, if it is, can we add this in the Clojhelper and just which will generate the test by default and maybe we can run it. And if it fails, maybe we can just debug this. In case, it's similar for all kind of modules. I would love that. I think that would be a great idea. And I think somebody mentioned something about AutoDep 8 as well. Yeah, I did. I think a bunch of these tests are very similar and it could be an easy AutoDep 8 test. And when it fails, you can just remove the AutoDep test command. I don't have any experience with AutoDep 8 or talking with the even CIT from what I've seen from the Python scripts to use, because I've been looking at the Python scripts. It doesn't seem that hard. And I think it would make things a lot easier and we could add tests like this in a mass. Yep. So something like you need to add test suite and auto-PKG tests, Clojhelper, something like that. And that should be a depate test. And maybe you can just integrate. You just need to then mention a line in the D control file, the test suite, auto-PKG tests, PKG CLJ. And that should run the tests by default. Yeah, that would be awesome. The only caveat that I mentioned earlier as I think some folks ran into is the specific like namespaces that you need to test if you're doing a smoke test. They're not necessarily obvious or easily discoverable. So that might be something that we need to take account of. OK. Maybe you can just give it a try. If it doesn't work out, we can just remove. I mean, I don't want to break things and then be like, oh, that didn't work. I guess we'll take it out. I'd rather not break things. So we can see. We have one minute left. Maybe let's let Zigo talk and on that. Yeah. So if I understand well, the project.clj is some bunch of closure codes as well, right? So the best way to to parse it would be in closure so that maybe we could extend closure helper to read that file and pick up some information from it, like the dependencies, the IC test, the license name and such. So that closure helper would ask less things. I wouldn't. I'd be careful about parsing it depending on what you want because, for example, PuppetDBs is code that runs and you don't know what the right answer is until it finishes running. But you can, by extension, you can add, we could add code to project.clj sometimes to print out what we want or do whatever. Yeah. I'd echo what Rob says there. It can be because essentially like there's a macro that's been defined by Lining in called project in that file. But it's just a bunch of code. So potentially you could have a bunch of other code and some projects do have this. So it's not an I and I format or something like that. It's not just data. And in fact, like folks will potentially use this to like swap in or out different dependency profiles based on environment variables set other things like that. It's sort of the risk of having something that's very extensible. But sadly, we're going to have to end the stream on there. If you still want to talk, we can continue talking here or an IRC, but the stream part of the box is going to happen. Just to wrap up on that subject and then maybe you can say goodbye. So it's comparable to a set up by in fact, right? It's like a make file kind of. I mean, in the abstract, it's touring complete. You can do whatever you want in there. The but tools like line depths, line depth tree, line P print, line update in, or we could write our own plugins for lining, which is one of the things I was wondering about. I guess we didn't get to unless I'll talk about it first. Was the, I think you brought it up. A lot of the discussion about using line again more. And I don't know exactly what the plans were there or what we were thinking. Yeah, I don't know, but I think we got to wrap it up so we can just continue the discussion on IRC. Thank you so much. Yeah, thanks for the buff and all the help. It's super nice. Thanks everyone.


Hi, Lily, can you hear me okay? Yeah. Okay, awesome. We'll just wait one more minute for Ritika to join us too. Okay, awesome. Okay. Thank you both for joining me. We'll go ahead and get started. So I'll introduce myself. My name is Ava Pradam Keegan. I'm the peer advisor for computer science engineering. And today we're very lucky to be joined by society women engineers. And do you guys want to go ahead and introduce yourself and tell us a little bit about maybe your major and your role in SWE. I can go first. I'm Lily. I am a senior studying civil engineering. And this year I'm the internal vice president. And hi, I'm Ritika. I am a senior in biomedical engineering and I'm the external vice president. Awesome. Thank you guys for being here. So we're going to get started first with talking about what is SWE. If you guys talk about, you know, what types of majors and people are in it and kind of what the goal of the organization is. Yeah. There are people from all different majors in SWE. We really strive to empower women in engineering. And this can range from mentorship opportunities to just having fun socials. But we also really want to make sure that we're being really inclusive so anyone can join SWE. Anyone who supports women in engineering and just advancing that quality there. I also see it as almost like a community for women engineering at University of Michigan just to have the support system within the larger departments. That's awesome. And then with that too, what type of events are usually hosted like I guess social, professional or like outreach and are they on specific days? Yeah, I can take this one. We try to have as many of the different types of events as possible. So the ways we are section of SWE structures, we have five different kind of main groups. So one of them being outreach events where we'll connect with elementary to high school students. The other ones being like charity based events as well as career development events. As well as we are starting to push more to making more changes towards our section in general as well. But there are also opportunities for members to get to know each other through like general body seminars where they can talk to each other and that's every other Thursday pretty much. Okay, great. And then with that too, what would you say the time commitment is like for SWE? Do you need to attend all the events?  Yeah. You definitely don't need to attend everything. I know SWE puts on a lot. But really what you put into SWE, the events you attend and the things you volunteer for or join subcommittees for, that's what you get out of SWE. So the more you do, the more you get out of it. But we have everything from like being less active to being more active. We give a little bit more priority for things if you're more active in SWE. But you can really gain something at each level, whatever you join in whatever you attend. Perfect. And then I know too, I talked with both of you about this before, but can you talk a little bit about your mentorship opportunities or if there's a specific mentorship program? Yeah, so we have one specific mentorship program directed towards like underclassmen so they can connect with an upperclassman, typically within the same major or the major they're interested in to get a lot more information or just like have a friendly maybe as they like kind of start joining SWE. I don't know if we have anything else to add. Later on in the winter semester, if you are an underclassman wanting to get more involved, we also have an intern program. So that's with like our leadership positions, they kind of move up in SWE. If you are interested in planning some more events or really getting more involved in the community, that's a really great way to see how things are run behind the scenes. That's really cool. Also something really great opportunities. And then also, can you talk a little bit about the professional opportunities that members can gain from SWE? And with that too, I know there's a part of the professional side of the Society of Women Engineers National Conference, if you guys talk about your experience with that too. Yes. So I guess to start in terms of career development, SWE and with TBP host the career fair that's seen in the fall. So it's an opportunity that everyone's welcome to attend. We also host corporate information sessions. So certain companies, if they want to talk to students, they can come have a conversation, typically with like a recruiter and get more information or like talk to them about opportunities. This is also open to anyone, regardless of being in SWE or not. More specifically though, we'll have like resume workshops or different job or scholarship opportunities available for specific SWE members. And then for the other part of it was for the National Conference. I planned it this year, our trip there. So it was really exciting to go with everyone. It's a great bonding opportunity, but also a lot of professional development. You can go to all the sessions that they host as well as the really large career fair that National SWE will host each year. That's awesome. We also have local conferences. So SWE attends both the National and local conferences to really gain insight from both the kind of wider scope of SWE. And then going a little bit deeper, we take a lot of underclassmen to the local conferences so that if you're just starting out, just wanting to hear these workshops, hear about some of these opportunities, those are also options. Those are a lot of great opportunities. That's really cool. And then can you talk a little bit about leadership opportunities as well? I know there's a leadership conference coming up. If you guys want to talk a little bit about that. Yeah, I can touch on that first. So we have the women in leadership conference. I believe it is the 18th of March, a Saturday. It's going to be hosted on North Campus, but anyone can attend this leadership conference. We have a speaker and a couple of workshops. So we are talking about the National and local conferences. This is a lot more tailored to Michigan. It's only a day. And you get all of the things at Michigan so you don't even have to go outside. But it's going to be a really great opportunity to hear from some really great speakers and to kind of dive into some of these topics related to women in STEM. Cool. And for that, would you like to sign up for RSVP before then? Yeah. I believe on our Instagram there is a post about it. That's up for RSVP. Okay, very cool. So there's a lot of great opportunities in SWE. How can students join? Is there a specific way, maybe an application? And then we can talk about maybe events after that. But I think it's joining if you can talk about that. Yeah. So you can go to the website that's SWE.Engine.Urish.org and basically a lot of the information on joining is on there. But pretty much you just have to be a member of the National SWE. And then you can do as much as you want and you'll always be a member for undergrad SWE as well. And then, like Lily said, as much as you want to get out of it, you can choose to be a leader or you can just go to events that you would like to go to. And we do offer like scholarships as needed. We don't want that to be a barrier to joining at all. And again, anyone can join. You don't have to identify as a woman or an engineer. You can, anyone. That's awesome. And then what event do you guys have coming up? I don't know if there's professional or social events that maybe people could go to. I think one of the biggest or closest events that is happening is this Thursday. On North Campus, we'll have our general body seminar. There'll be dinner. You got to hear a woman in engineering usually talk about her experience as well as just meet other members. It's a great way if you're just trying to get to know people or learn more about SWE as a starting point. Oh, perfect. Awesome.  Could both of you share maybe your favorite memory from SWE? Yeah. I can go. So I think SWE is really great. I found, I joined in my first year here and really found a community throughout COVID and throughout all of this, all of the things changing. One of the most awesome things I think is you get to have the leadership experience. You get to do some really cool stuff, but really it kind of, it all comes back to the people involved in it.  Really nice to just see everyone. I joined sophomore year, so right in the middle of COVID. So it's really fun to get to know the people you might have seen on Zoom calls this like last couple of years. But yeah, even if you're an officer seeing like your event finally come together is always a great thing and then always seeing people around North Campus like Lily said. That's awesome. Well, thank you so much both of you for being here and telling us about SWE. It was really great overview hearing about the professional, social outreach. There's a lot of great opportunities in SWE and I'm excited to see your event on Thursday coming up the general body meeting. So it'll be great. But yeah, thank you both so much for being here and I hope you have a good rest of your day. Thank you. Thanks so much for having us. You too.


Hi everybody, it's Emma Mixercraft. Thank you for watching today. This is the unboxing of my April Hobby Base Club Monthly Kit. So I always share with you at the beginning of each month what we get. We always get a little bit of a teaser as well over on the Facebook group that we join when you become a club member of the club and they teased us with some of the foiling that was going to be in this months kit. So I've been super excited to get this one. So we have always got the inspiration here. This is called A Taste of Morocco and as always there are three cards all designed by Angela Dodson. So we've got this one here and it's all got listed what you need, how you make it and these ones here, these are really pretty nice cards. There's always that one there. Then we have, okay so this is what they teased us with. So we've got the Crafters Companion foil. You get two metres of roll here. So lots and lots there. I haven't got that one so that's good. This looks like it goes with it. So we've got the foil transfers. So we've got four different designs there and I've never used this before. So again like I said last time I unboxed there's always something that I've maybe used but a long time ago or thought to use but never got around to buying it. So it always kind of pushes me to do those things which is really good. So that's a lovely nice little bit there. Obviously it's got that Moroccan feel already with the golds and stuff. So these are great. Literally the other day I was just saying I've got no gold embellishments so now I have 120. So just nice big gold embellishments there. These look nice. Oh they're tiny. So the three little individual square dies. So that's going to be really nice to do like mosaic style and some grid work and things like that. So yeah they're actually, I like that middle one a lot. That's really nice. So that's again, haven't got that. So that's a nice piece to add to my stash. Then we always get a stamp. So we've got here this pretty bird. See that bird look lovely in gold. And these are four, one, two, three, four. So there's five separate stamps there. So that's nice by Dovecraft. And we've got a stencil here. I like these stencils. This is creative expressions. These are really thick. So yeah they're really good quality stencils and they're great for using embossing paste. Obviously your inks, all kinds of things. So that is a really nice big one there. So that's six by six that I go right across a card base which is nice. So that's that one. We've always got a little ink. So I've got my Rocco again. Not got this one. So already now I've got four really nice different colors in these little mementos and they're so handy for when you're doing more smaller stamps and then all the papers. And we've got even more in this one actually. So we've got now these. Yeah I think these are part of the new, don't quote me I'd need to check, but these look like the brand new Morocco papers by Ducrofs. Because I've been following them and I'm sure this is them from their six by six packs. And these are lovely. Yeah like I said I've had my eye on them. Really gorgeous prints. So there's four of those ones. Then these are, so these two are thick card. Well that one's quite a thick card and it's all embossed. You can just see it's raised there. That's gorgeous. I love that and it's got a sheen to it as well. Can you see there in the light? That's a really really nice one. That one there. So and that one. So we've got eight pieces of six by six. That's the most we've had. Then I've also got just a really nice thick piece of vellum. So it's got this like teally green one side and then that's the back side. So again that's going to be really, it's that one piece. It's like right what am I going to do with that? I want to do something nice that make a nice envelope or pocket or something. And then we've got a piece of, it's almost like a piece of trellis or something. It's like laser cut from piece of A4. And that I think is what Angela has used. Yeah here. So you can see how she's used that on the top half of that card. So that's really nice actually. So that's giving me an idea. That's a slightly different pattern. We've probably all got different patterns actually. But that's, yeah, I like that. And then the card basis. So as always you get three card bases. We've got this like metallicy, golden, browny kind of color. Another embossed one. So you can see, there we go. You can see all the embossed spots on that one. And then that one there, which is like a window card. So, ooh, how fun. So I know straight away I'm going to be, oh gosh, don't want to wreck that one. I'm going to be cracking on. I think with this, I really want to use that.  I think for me it's going to be die cutting these out and seeing how they look. Because there's ones there, I think some of it's embossed as well as die cut. But it's going to be getting this out, getting playing with these foils and the transfer. So I can't wait. So that is this month's. You have until the 21st. So what are we now? So this is the beginning of April. So you've got until the 21st of April to subscribe for May's Box. So you won't be able to get April's Box because that's now already gone out. But you've got until the 21st to subscribe for the next month. And it's always a rolling subscription. You don't have any obligation to continue month to month. So if you want to dip in and out, you can do. That's the nice thing about the kit. So I've loved every one I've got. Genuinely, I've really, really liked them, really enjoyed them. I think they're great value for money at £20. So if you are interested, as always, I will share all those links below in the video description. And tune in, subscribe, like all those kind of things so you get to see what I make with this month's kit. Thanks for watching. Bye.


Hello everyone and welcome back to theCUBE's live coverage of HPE Discover Barcelona 2023. I'm your host Rebecca Knight along with my co-host and analyst Rob Stratje-Rob. We talk on this program about AI, security, sustainability and now we're going to talk about golf. Golf, I love golf. My handicap is I get a parking space really close to the golf course, but I wish it was better, but I think that there's a lot of tech that goes into it. I think it significantly improves the fan experience so I'm really excited about this next guest and hearing how HPE has helped with that, especially given the stature of the event. Yes, that is absolutely true. I would like to welcome to the program Michael Cole. He is the Chief Technology Officer, PGA European Tour and Rider Cup Europe. Welcome and Max Walker, Chief Technologist at HPE. Hi. Thank you for coming on the show. So I want to start with you, Michael and talk a little bit about your vision and the challenges you face when you are thinking about getting a golf course ready to host a Rider Cup. Well, you can kind of look at this a number of ways. Golf is complicated. You know, we're not single venue, we're 18 fields of play or we're not two teams, we're up to 156 players, two teams for Rider Cup and it is just complicated, but the technology that underpins golf is equally complicated. We are deploying a number of infrastructures, being incredibly innovative and really pushing the boundaries to match that complexity with a degree of almost simplicity, if that kind of makes sense. But the other way to think about this is when we look at the Rider Cup, six months before it happened, it was a green field. It was a green field with 18 holes and we had to turn that green field into a smart city and that's exactly what we did. That's exactly what we achieved. You know, through the partnership with HPE and the Rubin Networking, we created what I think is one of the most technologically advanced Rider Cups ever. Yeah, I'm disappointed I didn't get to go to Italy and see that, except for the outcome for the Americans, which was not so brilliant to put it mildly, but I think that what is exciting about these events is that they are spread out over a complete huge area and the people are going around, they're watching different holes and you have all of that, plus you have a broadcast going on and you have all of the other support that you have point of sale and things of that nature. How does the partnership really work with HPE to really get ready for one of these? And either one of you can start for that. Will you go first and I'll fill in? Well, we've got a long history in partnership with HPE and we were very keen that this wasn't just about technology for the Rider Cup, this was an innovation platform and not only that, we were hosting the Rider Cup. I'll give you one of world's top five sporting events in the historical city of Rome. So, our challenge was how we were going to bring technological innovation into the ancient city of Rome and support a real gladiatorial contest between these two teams. And through that partnership, we were able to bring true innovation that really I think excelled beyond any other Rider Cup to date, but Max, what is your view? Yeah, our partnership started way before the actual event. So, we were working a year or a year and a half up to the event essentially and we built an innovation agenda with the Rider Cup and we took the vision that Michael had and we packed around technology that would enable that vision. It had four real key themes around connectivity, around collaboration, data and sustainability and that's what we collaborated on. Some of the ideas that we came up for in the innovation space didn't make the cut, right? Because not everything can go into one of these events but what did go in did change the way the Rider Cup was run for 2023 for sure. So, what was special about this year from a technology standpoint? So, yeah, so from a technology standpoint, first ever sporting, temporary sporting event to use Wi-Fi 6E, first public sporting event to use private 5G with our Athernet acquisition. So, those are two, the third one I'd probably say is we used our sustainability insight center which measured the sustainability of the IT platforms that we supplied as part of the Rider Cup making it a more sustainable event that coupled with solar access points meaning that we could reduce the amount of cabling, et cetera. So, we really played on that greener aspect of it, yeah? To make it more sustainable for the future event. Because golf needs to be greener. Absolutely, yeah, well, yeah. I like that. It's so funny, yeah. It's definitely, I love the greens if I can get to them in two, even better. But, so from a data perspective, because all the rage is AI and everything else and really the foundation for any types of analytics or things of that nature is really the data. How did you approach this from a data-driven perspective and what does that look like from a PGA perspective? I love this line of questioning. Data is the currency. And I love it because I often challenge it as well. And what I say is data is key but data is just an input. Actually, data drives insight. Insight drives intelligence and intelligence drives actionable outcomes. And that's exactly what we did for this Rider Cup. We created, I think, sports first true intelligence war. We had this wonderful visualization from Florida's ceiling of all of these data sources that were visualized. And that visualization allowed us to do a level of monitoring and a level of management that wasn't possible before. So you're right, data is key. But actually the intelligence that it drove and therefore the outcomes. For example, we were able to track fans and understanding if you had a Roy Macaroy playing with Justin Thomas and 10,000 people following those guys, then looking at pinch points that actually do we have enough volunteers out there, marshals? Do we need to send more marshals there? We were creating insights for spectators, giving them indications of queue lengths and queue lines into the merchandise. When was a good time to go to the merchandise? When was not a good time to go to the merchandise? And that's what I mean by true insights and true intelligence. Sustainability, both of you have talked about how that was a real priority going into this Rider Cup. Can you talk a little bit about your approach and how you thought about using technology? I mean, you said we were trying to deliver, to take these insights and make them actionable. And say, okay, here's what we can do. How did it work? Well, the first thing to say is it worked incredibly well. I think just generally, we'd have kind of scripted things. I think actually we were off script in terms of the level of success. We had solar panels that was driving access points where we couldn't reach in terms of power. We were utilizing satellite connectivity where we had issues getting cabling. We used smart power within the Aruba infrastructure. So at the end of each day, 123 generators were turned off. Turning those on each morning can create a problem in terms of repowering up infrastructure. Yeah, not for us because of the smart power capability that we had. All those devices went into idle mode, went into sleep mode, so the power utilization was far less than it can conventionally be. And then of course we were able to measure this through the sustainability dashboard. Measuring the energy consumption, measuring the carbon footprint, and even the cost associated with that IT estate. You know, this is important, not just for our own economics, but equally for the planets. And a part of our green drive, in terms of us through the European tour and the Ryder Cup being more sustainable as a business. And that drive, that vision is truly being enabled through the Aruba and the Green Lake capability. So, I mean, again, you got a little break now until the next Ryder Cup, but you do have events all the time over here in Europe. You have the European tour. How is what you've learned with this past Ryder Cup going to influence the years up to 27 when it ends up in Ireland again? Well, forecast and technology is a challenge. It moves at such a pace. If 2018 was all about connectivity and the connected course, 2023 Ryder Cup was all about Green Lake and intelligence, then what I'd like to predict in 27, it's all going to be about AI and how we're going to pull in some wonderful capabilities through artificial intelligence that's going to help us reinvent that spectator experience. It's going to drive operational efficiency even better, even further, it's going to reduce our sustainability, carbon footprint even lower. And these are all the things that I think we have to look forward to. So, Max, Michael made the point earlier about just how exceedingly complicated golf is. It's got 18 fields of play, hundreds of people playing, not just two teams. What are the learnings from how you work with the PGA and the Ryder Cup in terms of bringing it to other sports or bringing it to other ways of doing business? What are some best practices you've taken away?  I lived through it and worked with Michael with it. So, and survived, yeah. There is nothing like that temporary event, but yeah, we can take some learnings around stadiums, large public venues, and we can apply what we learn. The Ryder Cup is very agile, right? In the moment, and we learn a lot from doing that, right? From a technology perspective, from a people perspective, from a process perspective. And actually, we can use that in other stadiums or other large public venues to basically build upon, right? And give our customers a better insight into the data into some of the aspects that will work and won't work in those venues. So, yeah, that's what we're going to take to the next customer, essentially. Yeah. You hit on a key point there. I mean, certainly lots of learnings that can be taken into other sports, but, you know, technology has a role to play and that is about being frictionless and keeping fans in the moment. What we don't want to do is to deviate from what is live sport. I think one of the best places, typically to watch sport, is in the armchair where, you know, you're watching TV, you've got a second device screen, and life is great.  One of the things that we wanted to achieve this time round is really to bridge the gap between the encore spectator and the armchair fan. And through great features like Outcome IQ, looking at probabilities and predictors, looking at every shot commentary, putting them on the screen, I think we were able to create that kind of armchair experience, but in a way that people weren't bamboozled by technology. And I feel, you know, that is the role moving forward. You know, making sure technology is enhanced and unexperienced, but keeping people in the moment, not deviating from what is live sport. Yeah, I think that's so true. We've talked to multiple different US based sporting leagues, the national football league US, and very similar comment where they don't want people staring at their screens and not watching what's going on right when they're there. They want them to be in the moment not only from being engaged, but from historically and understanding the sport. And that has to be a challenge that you have to deal with, like you said, the history of the sport plus bringing the technology plus the locations, which are some of the most beautiful golf courses on the planet. So that has to be a challenge that you have to. I kind of simplified what you've just mentioned is what I call the freeze. It's technology needs to create engagement. And that's absolutely what we did through some of those nice features that we ran at the Ryder Cup. It then has to create a degree of excitement. And, you know, we have a degree of control on that, but I must say there were oodles amount of excitement, particularly on the final day of the Ryder Cup this year. But finally, it's about experience. And we wanted the on course spectators to leave that tournament thinking and knowing it. They probably just witnessed one of the greatest sport in moments, experiences that they've ever had. And that needs to remain with them for the rest of their lives. Yeah, I would say that the last day was the best day because the Americans actually looked like they got off the flight and started to play. I mean that, but, you know, not bitter at all. No, no, no. But that really gets exactly what you're talking about. And I just got a little chill when you were talking because that's what the fan experience is all about, is to feel like I just was there watching history. Yeah, my wife was in attendance at the Ryder Cup this year and we'd arranged and we'd agreed that they would go day one and day two with my son. Day three, I was putting them on a flight to come back to the UK. And she was like, why are we going home? You know, this is just spectacular. I didn't have an answer for that, by the way, but I think it kind of sums up the experience that she had.  Having been to Glenn Eagles for a Ryder Club, I can guarantee you my wife was with me.  The Ryder Cup, she loves. It's just a special experience. Now even I want to go. Okay, well thank you both, Max and Michael. This was really great having you on. Really, really fun conversation. Thank you guys. I'm Rebecca Knight for Rob Stresche. Stay tuned for more of theCUBE's live coverage of HPE Discover Barcelona. You're watching theCUBE, the leader in high-tech enterprise coverage.


Linkon Wamai, founder of Link Cell Technology, thanks to the internet, is a self-taught engineer who makes electric cultures from recycled parts for the disabled. I deal with mobility permits for people living with disabilities. I still have a line that deals with electric scooters for normal people daily commuters, so mainly we deal with electric mobility for people with disability and mainly for daily commuters, people who commute daily to work because they see a lot of time from getting stuck in traffic. I was raised in a very humble background. I didn't want to do mechatronic when I when I completed my form four levels but I never managed to do that. I'm a form three dropout that was back in 2008 but that never stopped me from achieving and fulfilling my dreams. I had to figure out ways to fulfill them and try to make myself an engineer and I would say everything I do till today, I've learned through internet, following the right channels and I would say it's God-given talent. Having made the first prototype in 2016, Lincoln's motivation was as a result of the large number of persons with disabilities he noticed, especially in Nairobi. I was raised in Nanyuki, Likipia County. It's not a big town. When I was in Nanyuki, I never saw more than I would say in the highest number of people with disability at once was maybe five. So in 2014 when I came to Nairobi, I was very shocked. I had come to Nairobi on several times before then but this when I moved to Nairobi, I saw a lot of people with disabilities at one point. That was on a rainy season and it was on Russia when people wanted to go home. It was very challenging for them because no matatu could accept them in the matatus because you have to carry them, put them into a matatu and again they have a wheelchair that you need to some some wheelchairs are not even foldable. So it's like for everyone one person with disability it's like you have to carry them to the matatu again you have to carry the wheelchair to the rooftop of the matatu so that you can take them home. So I saw that people with disability were being neglected by our drivers, our conductors as in public means were really negating them and I thought of how I can come up with a solution. It was tough for me to think of what to do but I had to come you know before I used I am someone who brings solutions for the problem that I see. So I figured out a way of helping and coming up with a solution and the only thing I could have done or I could do at that point was to design a wheelchair okay that time it was not a wheelchair to design something that can ease the mode of transport for them a vehicle that can carry them from home to workplace and take them back home in the evening. It was challenging because I've been a green champion I love electric mobility because I don't like fuel so one thing I had to design a vehicle that must be powered by batteries secondly I'm a good champion of recycling I love using second hand things like I had to get second hand motors second hand batteries from laptops so it was very challenging for me to collect all the materials for me to build the prototype it took me two years to do that the first year was to collect the materials the second year was to build so from 2014 I completed my first wheelchair in 2016 it was very successful people would literally accepted it and I received a lot of feedback from the society post a feedback and that was how I started building wheelchairs a prototype is the original version of what you are building the first wheelchair I built it was a testing version uh I still I'm still keeping it as originalist was the first day so right now it's it's I think this is the sixth the fifth year it it has been running for the last five years he explains the process of making the wheelchairs okay I always make sure that what I build has at least 50% recycled materials uh I've been building electric wheelchairs and electric scooters and I've never imported a batch not once we have a lot of electronic waste locally so everything I build like the batteries I've been sourcing them locally so first of all you have to get to source batteries you have to get a good a good supply for batteries because you know batteries are needed in bulk secondly you have to get the correct electronics we have motors we have speed controllers and generators so at least now we have good channels for good suppliers and within a day we can even build two wheelchairs within five hours I'm able to complete a one wheelchair I've never consulted anyone on designing I'm a designer and I'm a maker so and by the way this okay I didn't know there was a difference between what I do mostly people design in a computer a model in a computer then they make a prototype unfortunately for me I design it in my mind and I build it then I draw it in a computer that's how I operate mine is quite the opposite of yeah mine is the other way I I build I design it in my mind build it with my hands and then draw it for in order for me to keep records though many youth indulge in wayward behaviors Lincoln is lucky to have escaped the trap the more reason he offers employment to his fellow youth talking of drugs and think that the youth are doing nowadays if I didn't have a vision and a focus I could I think up now I would be using drugs but since I was focused and I had something I wanted to do to fulfill in future uh I started to get the resources that I needed you know first of all I wanted a computer it was very hard for me to get one and I think most people or most of the youth in Kenya are doing they are not they are doing things that are not are not building the nation because they lack resources for me I wanted a computer to be able to learn online to get online unfortunately to get one was very hard but I got one using not good ways but at least I I achieved to get one I used that computer to educate myself to turn myself into between from I useless person to a useful person in the society actually my first project I did was in 2010 from from 2008 I did my first project in 2010 I had a project and a vision of getting out of Kenya so what I did I started designing a drone a drone that could carry me and take me to a place away from Kenya but not in Kenya unfortunately that project was way expensive for me so talking of the drugs I think some youth are using drugs because they lack resources of which that is not a solution you have to be focused and think of a way you can survive and make make something to help the society some youth most of the youth or some youth have very good ideas the problem is lacking exposure support from the government and resources because you can have a good idea like in my case I had very good ideas of building a wheelchair and still I have more ideas but I lack enough resources to fulfill them so I know they are still and I have people who I've been working with who have good ideas in fact there are people I have people who've been coming to my workshop and doing their own projects not related to my project because they have very good ideas but they don't have the resources to fulfill the dreams so I think we lack no I think I'm very sure we lack resources exposure and support from the government my vision has been creating employment and making creating employment and bringing mobility solution for all that include the disability and people who can work because I build scooters and wheelchairs employment has been my key thing employing the youth because I understand you know there was time I was looking for employment it was very challenging so it feels nice when I employ youth and train them to be useful people because in my company I don't like employing people fully because I like training people to be important people in the society that can they can do something impactful to the society the fact that he uses electronic quest does not exempt him from challenges yeah we have a lot of challenges like right now people are getting to recycling batteries so now the batteries are not we are not getting enough batteries that is the main challenge you know our wheelchairs are our wheelchairs of vehicles are powered by batteries so if you don't get batteries they won't move so we have that challenge of batteries I understand we have a lot of institutions where they have a lot of batteries but they don't know where to take them I can because I've been recycling I'll keep them I'll put them in good use so if you have batteries that you're not using we can have them because right now we have a big challenge of batteries sometimes you have the challenge of importing and things get delayed before they get and you had promised a customer in this time the wheelchair will be ready so those are kind of the challenges we have with shipping companies again like the products we make the wheelchairs we make we don't have designated place for them to be reading on the highways that is the main challenge with the users now that is a complaint from users we don't have designated place for wheelchair users in our roads I think the government should leave a designated place for bicycles and other small vehicles like wheelchairs because we can't you can't you are it's not safer to use a wheelchair on the highways so if you had a safer place a designated place for the wheelchairs it would be safe for the user and for other road users I think in the society people with disability don't get the attention they require like this issue of being neglected by public transport and for those who care for them in public transport because they are those people who care for them the vehicles are not designed to accommodate them when I create a solution that is making their mobility easy for them they it helps them become independent uh help them make their day to day as it helps them become independent and when you become independent you are able to get an income you know some I have some customers who use the wheelchairs to do some hawkings in town like selling sweets uh like I would say like in there's a lady in a place called kiaaba who is using the wheelchair to do to sell some peanuts and other small stuff in fact she converted the wheelchair to be a shop we have three types of wheelchairs we have the foldable wheelchair that one goes for 80 000 we have uh an offroad we have two different types of offroad wheelchairs one with a single motor still goes that one goes for 90 000 and we have now the strong version that has two motors meant for going uphill that one goes for 110 000 so those are the products we have oh and I forgot about the scooters we have scooters as slow as from 25 000 one thing we had to consider when we were building we were designing I was designing the wheelchairs I had to make them affordable to be the imported ones I think as for now the cheapest wheelchair you can get an imported wheelchair the cheapest you can get is 130 000 and mine is 80 000 so I think there's a great difference but what we're offering is a solution you know the imported wheelchairs are not meant for Kenyan roads we have bad roads but the wheelchairs we design and meant for offroad capability they have shook up soba to make the roughest rain so smooth and for those who can't afford because I understand most people in this village are associated with poverty of which sometimes sometimes you know the the correct thing to say but we have like for me most people who buy wheelchairs from me they rely on the society to contribute do a contribution and buy a wheelchair for them in my case like for instance if someone is being donated people are donating for someone to buy a wheelchair there's a percentage I give a discount I give for people who are being who are who are being a contribution for a wheelchair but for those people who can afford a wheelchair I don't I don't I actually don't support them because we have people who actually need that support who can't afford that wheelchair at all there's a program that you want to start where a customer can purchase a wheelchair in higher purchase you pay in bits that will make the wheelchair more affordable because according to the feedback I get from society we have people who can't be able to afford that 80 000 at once but if you ask them to be paying like 100 bob daily that one they can afford you know when you get a wheelchair you are able to work and when you're able to work you can be able to to to pay that balance you of the wheelchair so we want to introduce a system where people can pay the wheelchair in bits thanks to technology he is grateful to social media for the role it plays in promoting his business I don't have a marketing team I rely on social media and referrals from people who've been using the wheelchairs because I believe every wheelchair that I build will perform like I promised and if the wheelchair perform I know the customer who uses it will give referrals good referrals that's how we've been surviving my greatest achievement is seeing a product that I designed solving a problem of mobility in Africa secondly creating employment I told you the other time I was looking for employment it was hard for me so when I have a team of people that are relying on this company it makes me feel like part of my dreams are being achieved though he uses junk materials there are those that he must import there are some parts I import like the speed controller school it's easy to import them to to make to manufacture them locally in fact we didn't have the facility that could be able to manufacture electronics but at least now we do but the capability for them to manufacture is beyond what we need so right now is still importing but in future you want to be supporting local manufacturing factories and local youth to grow lincon also gives back to society especially to persons living with disabilities we actually visit the less fortunate who are disabled we love visiting them and sometimes we even donate wheelchairs to those who can't afford at all yeah again through social media we've been we've been able to reach out to even people who are brought by wheelchairs for our local people here so mobility I would say mobility is that is the thing that we want to solve for political disabilities due to his love for the environment lincon's workshop is solar powered due to my love for green energy we even made sure that our workshop is fully powered by solar solar solar panels we use we make sure everything we build is powered by batteries our wheelchairs I'll build using solar power energy because we run the workshop using solar panels so we love we love solving the environment and not polluting it and I wish I wish most people could start using electric mobility because you understand right now we've been having a lot of pollutions people are buying vehicles and the vehicles are polluting the environment we have a solution we have scooters you can use a scooter to ride to your workplace instead of using a vehicle it will decojas the cities cause zero pollution and almost zero maintenance he is lucky to have received financial grants that aided his work I think the only thing that I've ever received was a grant from UK aid through a program called AT2030 assistive technology 2030 um I want the grant because of the wheelchair I design and build the rest have been receiving through services I offer and selling the wheelchairs although what we make from selling the wheelchairs is not enough for us because you know we are dealing with someone who we don't want to sell our products that expensive so that people can be able to afford them so the revenue we make from selling the wheelchairs is not enough to sustain us and that's why we even designed scooters and other products that are using batteries lincon gives a thumbs up to cbc the new curriculum for the mere fact that it supports skills and talent for instance in my case I might be talented but if I were to look for a job in a company without papers I would I wouldn't get employment so I think the way the government has done this into supporting talents from that young age that is that was a good move the cbcs will will do a good job you know uh there are people who are talented in doing things other things than uh in the books so the at least they will get the support they need so it was a good move for the government to accept the new curriculum his message to young people therefore is to capitalize on their ideas for to my fellow youth uh if you have an idea uh a solution would like to solve get the right channel get the right resources give it time uh sometimes the financial support is what we lack give it enough time like if you know how much it will cost you you can save it you can save for it because sometimes getting them the financial to support those project is the biggest challenge like for me I I see that I got that challenge too I give it time get enough resources and work work work on it and I swear some at some point at some point it will give you a good feedback because I've come to understand Africans love things designed created in Africa because it was created by someone who understand the problem better than anyone else


Hey everybody, this is Brian and welcome to the 74th Qt tutorial with C++ and GUI programming. Today we are going to do something much different. We're going to start down the path of graphics programming. After all, Qt is a graphics library, I mean it's a set of graphics isn't it, allows you to make GUI. So we're just going to call this painter, maybe if I can spell and put it in the usual place. And for this, we're just going to select Q dialog. And if you've ever done any graphics programming before, this is going to be very much boring to you. But if you're brand new to this, this is going to be very interesting. Alright now, first thing we want to do is we want to be able to draw on this little dialog we just made. Let's show it here, actually let's just compile and run it. Before you display something on the screen, it's actually drawn on the screen. And different programming languages handle that differently. For example, we're drawing this window on the screen. Now some languages and some libraries, because different languages can have multiple graphics libraries, they actually render their own controls. Some actually use the native controls. Acute, I believe, renders the controls using the underlying native platform. It's a very fancy way of saying it does it very good and very fast. So we want to draw on that, as if it were, you know, just like a canvas or something. And we're not going to get there just yet. We've got a lot of explanation to do. So let's just go dive right in here. We'll say protected and we want to do the paint event here. You notice that cue paint event. What we're going to do is we are going to tell this dialog every time you are requested to paint, you know, draw on the screen. We want to know about it because we want to do the painting. And we're just going to make a few includes here. We're going to say Cue Gui. And I know people hate it when I do this, but it saves time. Cue Core. Let's just grab that. And now in our dialog, our implementation file, I should say, we're going to say avoid dialog. And you guessed it, the paint event. So this is called every single time that the form or window is being asked to paint. So we want to actually do some drawing on here. First thing we need to do is make a Cue Painter. What is Cue Painter, you ask? Well, Cue Painter is a class that allows you to very simply just paint on the window. We'll just call it Painter, this. And what we're going to do is we're going to draw a line. And in order to draw a line, we have to have a start position and an end position. I know that sounds confusing. If you've never done this before, you're probably like, what in the world are you talking about? So we're just going to say Painter, draw a line. And you notice it's got a couple overrides here. And we're just going to go to the one where it says int x1, y1, x2, y2. And we're just going to say 10, 10, 100, 100. What are those numbers? What are these? Well, we're going to explain this real quick. Let's go ahead and build and run this. Maybe, tick, tock, tick, tock. There it goes. Must have something running in the background. Anyways, you notice how we've got this nice crisp line going from 10, 10 to 100, 100. That's what those numbers mean. See, the very top left right here is 0, 0. That's x and y. X means going across, y means going down. So we said 10x, yx, or 10x, 10y, sorry. So that's the start point right here, 10, 10. And then we said 100, 100. You notice how it's 100x, 100y. That's where you get your positions from. That is called the Windows Positioning System. That's actually standard for just about every operating system out there. The top left corner is 0, 0. And then it just goes out indefinitely. Every window, every control, even your monitor uses that system. So the top left of your monitor over here is 0, 0. The top left of this window is 0, 0. It depends on which one you're talking about. Now that you know very basically just how to draw a line, we're going to get a little fancy with this. And you're going to learn a few things. How did that line get on the screen? Well, Qt used what's called a pen. And that's not only a Qt terminology. That's actually an operating system terminology. They use pens to draw on the screen, much like you'd use a pen to write on a piece of paper. So we wanted to make a Q pen. And we'll call it point pen.  Now what we're going to do is we're going to draw a box at the start and end position of this line. And we're going to draw the line. But we're going to draw on different colors, different sizes. So let's just get cranking on this. We'll say point pen. And we want to set width. And we're just going to say six, which is a very big number. If you're wondering what the six means, that's in pixels. All these numbers we're talking about are in pixels, unless I say otherwise. Then we want to make another pen and we'll say Q pen. And we'll call this line pen. And this is what we want to draw the actual line with. And we want that to be the red color. And we'll say line pen set width. And we're going to say two pixels. That way it's a little thicker. Now what we want to do is we want to use a little fancy and use what's called a point or a Q point. Now a Q point is just a representation on the screen of the position. So we'll say call that P1. And we're going to say set X, meaning go left or right. And we want to set this at 10. And then P1 and we want to say set Y. That's up and down. We want to say 10. So that's our first point. A point is a single position on the screen. And we're going to need to make another point because we need two points to draw a line. And we're just going to say 100, 100. As you can see, we're kind of just doing the same thing here. We've got 10, 10, 100. We're just using the actual objects. And then we're going to use custom pens to actually draw these out. Now what we need to do here is say painter, set pen. Now we're saying, OK, use a specific pen other than the system default. And we want to draw our line first. So we're going to say grab the line pen. And if you remember, the line pen is up here, which is red and two pixels wide.  So we're just going to use the two points to draw. If you're wondering why you're using points, instead of just writing out the numbers, well, what if you want to use a lot of lines? And you don't want to hard code these numbers in. You want to use an object to actually do the set x, set y. That way you can read from the file or command line or whatever you want to do here. So let's actually save this, run it, and let's see what this looks like so far. All right, now you notice how we've got this big, thick line here. Now let's see here. You're wondering why it was at 0, 0, because I goofed and we didn't set P2. We set pen 1. So if we rerun that here, there we go, from 10, 10 to 100. You notice that's two pixels wide and it is bright red. Now we want to actually draw those points. So let's actually go down here. And what we need to do, just like if we were drawing a picture or so, if we need to grab a different pen. So we're going to say painter, set pen. And we want the point pen. I call it paint pen, not point pen. Sorry about that. Actually, let's just rename it. That way it's very clear what this does. Call this point pen. So we're going to grab our other pen, which if you remember is black and six pixels wide. And then we're going to draw a point. Remember, a point is just a position on the screen. And we're going to draw point one. And then through the magic of copy and paste, we're going to draw point two. And let's run this again. And this will be a little more explanatory of what's going on here. See, there's point one using our point pen. And there's point two using our point pen. And there's our line that's connected by the two points. Remember, point one is at position 10, 10, 10 across, 10 down. And point two is at 100 across, or 100x, and 100 down, or 100y. And if you're wondering, yes, you can change these. Let's actually do something a little different here. And let's just say 300. So for point two, we're going to say we want it 100 across, but 300 down. What do you think that's going to look like? Well, let's experiment and find out here. It should be a little sharper. See? There we go. 100 across, but it's 300 down. That in a nutshell is how to draw lines, points, using pens, and the cue painter object. I hope you found this tutorial educational and entertaining. Thank you for watching. And send me your feedback. Let me know if you like these.


This study demonstrates the potential of using an organ on a chip, OC, platform with a transendothelial electrical resistance, TER, measurement system to assess the permeability performance of targeted gold nanorots, GnR, fortheronostics of Alzheimer's disease. The GnR, PEG, and 2D1 nanoformulation was found to be safe and effective for crossing the blood-brain barrier, BBB, and could potentially be used for treating Alzheimer's disease. This article was authored by Suji Parmaflores, Adrienne Lopez-Gnoza, Francisco Moales-Savola, and others.


So why do we explore space? First of all, because exploration is a human imperative. It's built into us. Everything from Magellan to Captain Janeway. And exploration aligns humankind looking outward instead of allowing us to be distracted by the irritations that lie between us, both as people and as nations.


The National Coordinator of South-West Agenda for Siewaju Swaga, Senator Daio Adeyea, says when efforts and economic policies of President Timbu start yielding results, the current economic hardship faced by Nigerians will fizzle out and citizens will have assurance of better days ahead. Senator Adeyea stated these in Oshobo during the launch of Food Palliative Initiative by members of Swaga to support and provide soccer to the economic challenges of residents of the state. The Swaga National Coordinator said the palliative which comprises a truckload of 600 bags of rice to be distributed in different states is for citizens to benefit irrespective of social background or political affiliations. Speaking on some of the policies of the current administration, Senator Adeyea posited their outcomes will offer a renewed hope and new lease of life to all citizens. Oshobo Foundation's state coordinator of Swaga, who doubles as the palliative committee chairman Ayo Omidiro, said the group has worked out monitoring mechanisms to ensure the palliative get to the intended beneficiaries, adding that citizens should expect similar palliative gesture and many more from Swaga from time to time. The National Executive of Swaga, Oyetunde Ojo, said the palliative is intended to complement the federal government's effort at cushioning economic effects on the masses, particularly at the local levels. It is not for only Swaga members, it is not for only APC members, it is even for the general public as well. We are having the best leader in this democratic dispensation. Since 1999, I want to say without any fear of contamination that this is the best leader that the leader has had. And in the next few months and few years, the leader will see that the fortune of the country will be turned around for good. Swaga is bringing palliatives to everybody to say thank you for voting. And we will continue to do the best that we can. The organisation is perfect. You will see now, we have representatives from each local government and we have mandated them that they cannot share. The party chairmen in that local government. This is not a Swaga or an APC hello. It is for all Nigeria. No man should have worked for a local party, no man should have worked for an association with them too. This is to support President Mola Netulogo. So it's going down to everybody. Thank you very much.


Migrants are at the heart of IOM's work, particularly those who find themselves vulnerable to violence, exploitation, and abuse. IOM has offered support to migrants in numerous tangible ways. The organization has undertaken health assessments for refugees awaiting resettlement, migrants applying for various types of visa and returnees and their assisted voluntary return programs. IOM has placed increasing focus on the sustainability of the reintegration process with the aim of reducing the vulnerability of those returned. To bring this service together in a more coherent manner, IOM is developing a range of migrant support mechanisms focused on offering a range of integrated tailored services for visa applications to training assistants.