How can everyone, this is the third day of the Jenkins Java 10 and up hackathon. We've made great progress the last couple of days and Oleg, I think you got our usual sort of status and such slide deck to go through. Yes, I have some slides and this time I won't forget to share my screen. Okay, just a second. While Oleg's doing that, we also have Paul from the Jigsaw JDQ project, Jigsaw. All of you, would you like to introduce yourself while we're getting set up here? Hi, yes, I'm Paul. I know some of the CloudBeats folks because I used to work at CloudBeats for a little bit. I know Kasky for a long time in some microsystems and that, so then I reached, well, fairly in the past couple of years, been working on the Java platform, a little bit on Jigsaw, but other things to language libraries and runtime. So I sort of spread myself around the whole platform. I'm happy to be here and help as best as I can to get Jenkins and its plethora of libraries onto nine and above. I think it's quite important. It's a great, great thing for you to do this effort. Excellent. So Paul, send us, everyone. Okay, Oleg. Thanks, Paul. So yeah, we will have a short hackathon intro for those who just joined the hackathon. Then we will have a co-accession with Paul and maybe other project Jigsaw contributors in order to discuss issues we heed and questions about future of Java and what we need to do to be compatible with Java 11 beyond. And then we will have a regular status update from contributors. So this is the current plan. If you want to watch this presentation afterwards, here's a link. And we post a lot of presentations in our YouTube channel so you can join and get all the content. If you want to ask any question, we also have a Gitter channel and you can just go and ask questions there. So it's Gitter.jnkci slash Jenkins. We will be monitoring this chat. So if there are any questions, we will be able to answer questions today. Okay. So, Oleg, Mandy just joined. I think she wants to introduce herself in. Do you hear me? Yes, we don't. Oh, hi, I'm Mandy Chung. I work on the JDK, mostly call libraries. And I have been working on the Jigsaw project in JDK9 and now work on Valhalla. Valhalla is the value types effort. Thank you for the introduction. Okay. Yeah, I'll briefly describe the current status and the background. Yeah, so as everybody on this call knows Java 11 comes soon and it will be LTS version. So as Jenkins project, we're interested to keep it up to date and we want to adopt Java 11. So that's why we decided to invest some effort in order to explore what's missing in Java 10 plus support and maybe fix some bits. Originally, the format of online hackathon has been proposed by Kiki. He is also on the call. So maybe he can briefly talk about the project objectives. Okay. Oh, I'm sorry. What? Yeah. Say that again? Yeah, so it would be great if you could briefly describe hackathon objectives and why do we do that? Ah, okay. I mean the same thing I said Monday? Mm-hmm. All right, all right. Yeah, so I guess the, let me see, I kind of didn't know what to do. So yeah, so in the Jenkins community, I think we sometimes divide up our work so well to the point that we don't often need to work collaboratively, right? So it's kind of looking forward to have some opportunities to bring more people together to work on the same thing. So I thought this would be a great topic and if this works out well, I'd like to do more of those. And then today I feel particularly great to have some guys from the Java team, people from Java team joining us. I think they care greatly about moving the Java ecosystem forward. And I think the work that's happening here and also the likely changes that's propagating upstream in different libraries, I think. So we can, I think we could work with them who would help us move that needle a lot. So I think it's, let's get the most out of the opportunity here. Yes, thank you for the introduction. So we started this hackathon on Monday and we already had two full days of development and actually we've got some important progress. So just to summarize the status, firstly we've got a packaging working including Java 10 and 11 releases, what packages, run guidelines and we also created some docket packages for example, for Blotion and for Vanilla Jenkins. So early adopters can try these images and get them running. And one of the major updates is that we've got a pipeline running. So there is a lame screenshot but actually pipeline was a major effort because we needed to update Jenkins course to update some plugins in order to make it working. And yeah, it's a great progress on this front because it's one of the major features and we want to make it available as soon as possible. Regarding other activities, we have posted a blog post yesterday. So you can go to Jenkins.io slash blog and you can find it on the top. So it's a summary from the update. In addition to pipeline, we had a lot of other contributors who were working on various aspects of Jenkins. Just exploratory testing and some tooling including illegally reflective access cleanup, a cleanup of built tools like asthma and animal sneaker we needed to build plugins with JDK 10 and there are many other activities ongoing. So this is the current status. We will have more details later after the QA session. And yeah, just to summarize the current obstacles what we see in the project. Actually, we've got the most of Jenkins working including all foundation features but the experience issues with development tooling. So for example, we cannot stop continuous integration for core plugins, it's work in progress but you need to fix some of our tooling and one of the main obstacles is maybe the support of Java 10 and 11 and support of multi-release jobs. So we have Devin Nosbaum and Nikola Deluf on the call. Maybe they could briefly summarize what's going on with this effort. So one thing I can say is that I've been working on not so much the building on Java 10 but the testing on Java 10 because even if we still have to build on Java 8 we really need to be able to validate that, run our unit test on Java 10 and stuff like that to make sure that we're okay with people using Jenkins on Java 10 and we don't think everything is gonna break. So as part of that I've been working on getting the plugin compatibility tester working such that I will run plugin test using Java 10 and up and then hopefully I'll have a demo of that by tomorrow. Okay, cool. And Nikola was working on my illegal access cleanup because we have lots of libraries including different extreme, Jackson and other such tools. All of them do some reflection by default and we need to clean up that. And finally we just need to build some libraries because newer versions we adopt that require Java 10 compatibility, they are multi-release so then it limits our opportunities to test plugin builds. And yeah, since we have Java experts on this call we have some questions prepared. So we reached out to Jenkins contributors and collected a list of questions we would like to ask and actually if you do not mind Paul and Mindy it will be great to discuss these questions. Sure. Kostin, is this session being recorded? Yes. Okay. Yeah, that's what you ask. Well, it's just if it's recording I may be a little bit more careful what I say. Okay. So if you want we can do unrecorded session later. I think it recordings of benefits for everybody. Okay. Okay, so yeah, then we can continue from the list. So yeah, one of the first questions from Sam was about tuning changes in Derbysch Collector. So maybe it's a bit low level but maybe Sam could clarify. Yeah, so I put a lot of work into a streamlined set of general GC settings tuned for Jenkins. We've had very good results with the G1 garbage collector. So I think that's sort of a feather and you guys is capped because you've done really good work there. I guess that's mostly looking to see what new settings are available and what has changed with regards especially to the G1 settings that we should be aware of that might want to take advantage of. I need to, I'm not an expert in the G1 collector. I know there's been, have you been doing this on Java 9 or have you been doing it on 10 or 11 PAs? Eight actually. So there's been a lot of incremental improvements going forward in G1. I don't know on the flags I can get back to you on that. There should be a bunch of JEPs hopefully or a bunch of issues through release notes you can track but I can't off the top of my head sort of dictate the incremental changes.  But generally it's recommended Derbysch Collector for now. Yeah, it's a default one. Yeah, Mandy, anything to add on that? Excuse me. Yeah, it's the default in JDG9. So if you are getting good performance on JDK8 G1 then there are continuous performance optimization improvement in the past release. So yeah, I think we need to get back to you on the specific RIVs or work on the area. Yeah. Mm-hmm. So for the JDK11, a lot of GC work is focusing on ZGC. Yeah, it's an experimental GC. So which is even on the list to be very high performance. So basically that's the work we focus on in JDK11. ZGC, the set. So ZGC is a new garbage collector, kind of a bit like Shenandoah, garbage collector that operates on large heaps and tries to minimize the pause times as much as possible. Cool. Well, that will be exciting. That will be very exciting. So the next one. Yeah, we're interested in feedback on that if you're willing to give it a try. Yeah, why not? We already have a JDK11 packages working. So maybe we could try them. Yeah. Thank you. The next question was about the Jigsaw models, but maybe we could put it for a while because yeah, if we have a mark on the call later, we could talk about that in detail. Or maybe we can discuss it later when we are done with other questions. Yes, yeah, that's a deep one. Yeah. This is a my question. Actually, I wanted to know more about Java 10 migration success stories. So how is the ecosystem doing? What is the experience of project migration? Yeah, it would be just interesting to get your insights about that. So, Mandy, do you want to go first or shall I? Yeah, you should, yeah. Go ahead. So Mark gave a talk at DevOps UK where he summarized some of this. If you haven't seen that, that might be a useful good talk to see because he talks about that and has a bunch of technologies that have shifted. But he also asked people to tweet about this. And I think he, I don't know if he kept the archives of those, but he used that information to talk about this. From my perspective, what I've seen is technologies like Lucene or Elasticsearch are more at the front and they seem to be keeping up well. Kafka seems to be keeping up well as well. They're on, I think they're regularly testing 10 or 11 builds now. Netty is doing well. It's sort of keeping up with changes for the tracking in 11 and Elasticsearch and talk about regressions that we're fixing. I'm trying to think of other libraries.  My general sense is that things are moving forward faster than I expected. Yeah, actually it's also our experience because yeah, when we were preparing for the hackathon we expected that there will be serious obstacles to get to the things running. Yeah, our nice to have goal was to maybe get some bits of pipeline working, but actually after a few patches we get the most of the infrastructure working. So for us, the immigration was much easier than we expected so far. Maybe we can talk about that later, what you had to do, be interesting in the details to see what other people are doing. I think because we dialed back the constraints around reflective access, I think that's a lot. And based on feedback, that's something that I guess is a question later on that we can talk more. Yeah, right, actually it's the next question. Okay. Yeah, because it's a kind of major problem for almost all DevTools related projects. Yes. Just back in, I believe the tool in Maven is pretty good for most part on ignoring modules. Maven, I think is looking very good. I think Gradle is too, would that be your experience? We mostly use some Maven. Yeah. I think Gradle is okay too. They've had some issues with Groovy, but it's, as long as reflective access is still allowed, they're okay as well. Yeah. Yeah, I guess that Sam and Nicola experienced issues with Maven compiler plugin, which doesn't quite work for multi-release jobs. Yes, yes, this is, yep. Yeah, the tooling around that is not so straightforward. Okay, but we see activities and lots of projects, so it seems that everything is going forward. Okay, thank you. So should we proceed to reflection? Okay, so the question we had is about future of reflection, because in original GDK-9 builds, we are prohibiting reflection by default, and it costs a lot of issues for doctors, so then it has been reversed, and so far it's still not mandatory to comply with reflective access requirements. So it would be great to understand what other plans for the future. Okay, so, yeah, go Manny. Okay, the illegal access is still permitted in 11. We didn't change that one, so we always encourage the application developers or library developers to try to turn on denial so that to find out earlier what's happening now earlier what libraries doing illegal reflective access so that they can report to the library, authors to fix the issues, yeah, earlier to prepare when we disable it. Yeah, I mean, when we turn it on, denial. Yeah, it's what we experience, so we also did some testing with enabled diagnostics and just a second, I will find the ticket. Yeah, I guess we'll start from here and then find it. So yeah, for Java 10 compatibility, we have lots of tickets submitted from different components. Some of them are our own libraries, some of them are external libraries. Yeah, actually, this list is not complete, and if you search across the code base, you can see hundreds of set accessible calls. So what would be your plan beyond Java 11? The strong encapsulation is as we planned during jigsaw development is a good important feature for integrities to turn on strong encapsulation. So I believe it will be announced wisely when the plan is. So right now? Yeah, we have been discussing about it. I think we wanted to turn it on at some time, yeah. So I think we will wait for the, and yeah, from Mark to confirm the date. I think it will, yeah, just plan for it, yeah. Yeah, I think it's to be determined based on feedback really. I think that's an important part is getting feedback from the community to decide when to ratchet this up and to what extent, whether it should be done in one go or done intuitively because you can sort of increase the strength of it in grades. So I think it's to be determined, and I think it's dependent on the reactions in the community and if major libraries are ready or not. Hi, can I ask just related to that? So with projects like Elasticsearch, Kafka and Netty, do you know if they're running, are they just ignoring reflective, the illegal reflective access or have they resolved them? Now, I know about Netty more than others. I suspect Elasticsearch seemed to be with you, I think who's on the open JDK list talking regularly. They might have done this because they're very, very strict in what they do with Netty. Netty needs to go into the internals of the JDK and they can operate without unsafe access if it's not there and they fall back in slower mode, but for super speed they want to go into the JDK so it could take a long time to get them off, say, the unsafe thing, which is a slightly separate issue. We have provided APIs that do certain things that they were using reflective access for, but I don't know if we've got all of the reflective accesses out of Netty yet in that respect because when you want to use unsafe, sometimes you need to use reflective access to get access to, so there's a chicken and egg there, but we're not going to pull the rug from under Netty and libraries like that until we've managed to resolve all the reasonable use cases in my opinion. Right, and regarding ConSafe, the plan is to remove it in Java 11. No? The plan is to remove unsafe when we've reached safe, supported public APIs for all major users, and that could take a long time because some of the use cases that people use unsafe are for what we're working on projects like Balhalla for value types, or Project Panama for better native interop. So these are long-term investments in the platform, and until those get integrated into the platform, people will still need to use unsafe for things. And in some extent it's a bit of an arms race as we produce these new features and then other people want to push the platform even further. So if you want to peek and poke at memory unsafe is what you've got, and there's always some strange use cases for doing that. The question is whether we think those are reasonable use cases or not. So it's going to hang around until we can, at least Project Balhalla and Panama come through and maybe some other projects too. Okay. Now I think the thing is we have very clear guidelines on what this is now compared to beforehand. A bit of a we couldn't enforce or we couldn't even talk about these in a reasonable way because we just couldn't control access. Okay. Thank you. Any other questions to go on this topic? I guess I would be kind of curious what the proposal is for replacing use of reflection in, for example, some of the serialization libraries and other things that are kind of dependent on access to private fields. So the access to private fields we're really dialing up. If we're just talking about the class path, we're really restricting access to stuff within the JDK. We don't want people, we want to try and restrict people poking around and into the JDK internals because it limits what optimizations we can do and it limits how we can change the internals going forward. So that's the primary focus. When we're dealing with modules, there's other ways to express that you allow someone to do reflective access to you. That's called open modules. That's a whole different discussion but we're primarily, and Mandy can correct or confirm, we're primarily trying to get people from poking around in the internals of JDK. For example, extreme poking around in tree set or tree map to do some optimization. It does some pretty, if we refact a tree map, we've broken extreme. They don't know about it and then the libraries that use this find this out through all sorts of means. I think it's tree map. I can't remember exactly. Yes, it is. It is. No. It's extremely... It's extreme. It's right. So the libraries that poke around reflectively in other libraries outside of the JDK, that's still fair game. When you create a module, you may encapsulate your internals and then you can decide from a module whether you want people to allow access to you into your internals or not. I think if I understand it correctly what you're saying basically, it's going to remain open when you explicitly use the open modules option for non-core modules but you're trying to protect the Java internals from being... Someone decided to go reaching around and rearranging things as they please. Yes, because there's... When the hotspot compiler has certain assumptions on certain layouts of classes like for example string, we changed the internals of string so that it actually is a byte array, not a char array, and some people poke around in string and now that will fail. But we've made some optimizations in string called compact strings so we use less memory for TFA to ASCII strings. There's other areas in Java langen with method handles, there's optimizations around final fields and stuff like that, so if you start poking around in the internals you could actually start messing around with the assumptions on how the JIT works and how things compile and you may get unexpected results. We've certainly had that problem with the JITGINS pipeline in the past. We know your pain. Yeah, I mean, if you're poking around internals because you're working around a bug or you need another API point this is what we'd love to hear about because it may be able to provide public support for use cases that aren't available at the moment.  For example, people want access to the address of a direct byte buffer and that is obviously... Once you've got that and you pass that around, that is obviously unsafe. But Netty is an example of why it wants to do that. There are other use cases too but there are less impactful use cases as well. In our case we have class loaders direct access in the core because the Jenkins has class loading support from plugins, so we do some tweaks in order to get it working. And yeah, there is also class loading cover remote channels, so we can download classes. Yeah. We'd be interested in those because we have added some features in 9. I think Mandy can talk more about that. Yes. For class loading, one use case we found is people like some libraries are poking to define class field of class loader. They don't have the access to the class loader hierarchy, the class itself so they cannot extend to it and they define the class. So what we added in 9 for them to replace is lookup define class. So you if you can securely get your lookup to define a class in your runtime package of the lookup class, you can use this new API and we also add in the lookup class API private lookup in if you have the access to your module then you can access to a private class in your module. So we try to provide a secure way allowing you to achieve the use case you want to have. So your advice would be to create a multi-model jar to keep the current usages for Java 8 and to adopt new APIs for Java 9 and beyond. Right? Yes. That's one option if you want to deploy one single jar that runs on 8 and 9. I guess it's our use case. By the way are there any replacements for the find class method? Because today on the morning we had a call with Tracy when we were trying to resolve one issue and we finally got to find class method. Which is exactly the same background case. We have to understand the use case. This is the first time I hear putting into the class or the find class. That's exactly what we want to do to provide the illegal access warning message so that you know you are effectively accessing some private method. We want to hear from you why you used that reflective access and what we don't have in the public API to achieve that. You should also file a JBS issue so that we can follow up. Maybe it's better to take it offline because it would be deep dive. By the way, there is an existing lookup find class method. I'm not sure whether that satisfies it. Lookup find class. Lookup is a class. Find class is a method. I can fix that up with you. Thank you. It's something we really need to consider because it's just logic of Jenkins. Any other questions about reflection? If you want to ask the questions during the call, please feel free to just propose them in the bottom. We'll try to reach them. Let's move on. Another question I heard was about Java EE models. Currently Jenkins Core depends on the Jax B. It means that we use some models which have been removed from Java 11. We found our way around in Docker packages and we know how to approach it in work packages but it would be great to get your advice how to properly handle such cases when we want to keep releases compatible starting from Java 8. We're removing the Jax B module from Java SE in JTK 11 should not impact the dependencies I mean your Java dependencies on it. The changes you would need is to put download the jars and put it on module path or class path. It's what exactly what we do. We have posted guidelines about running Jenkins with Java 10 and Java 11. It's here. Here are the guidelines. We recommend downloading these libraries. And for Docker packages we also have these bundles. These packages don't need to do anything. The problem for us is we would like to include it to the Word file directly so our users don't need to do all these speeds in order to get it running. Are there any standard ways to do that? One thing I think of is that might not be an ideal way for you is to create your custom image. That's one option for you. Create your custom image that link in your modules that you depend on. But obviously then it means that the users will need this custom image. We will need to somehow ship it to the part of our Word file and then unpack a sheet which will be unlikely to you. It works better in Docker model. In Docker we just package whatever we need. Yeah. Okay, thank you. So in our case we have some flexibility because we run with several web servers and since we have Jenkins plus loading from plugins we have a choice to upload these libraries to a particular plugin. So using Jenkins tooling we have a way to approach that. But if there are any other standard tools it will be great to know. Since this is the area that I kind of talked on the challenge for me if you think yourself as a web app developer you're writing a Word file and you're thinking about using JaxD or some other option or JavaE module in there. Now this Word file can get running also to different environments. If you're running in JavaE if you're only running in JavaE it's great because you don't need to expect that to come from the platform. It will be there, yes. But then we also have to run on a standalone tablet container which does not have these guys. So that puts us to the Word file developer in Japan. In the past I feel like we've basically kind of came down to just bundling those JaxD where we live and then kind of hope that they have the container to be able to recognize or the JaxD API in this case so that we can correctly review with this two different versions of two different kinds and then to poke around that space. Well, that seems to be their going practice but can we do better than that or are we doing wrong? I can't we don't provide any help in the platform to try and make that easier. I think the assumption was that you'd be in some EU compatible environment I guess from that perspective. You're kind of having to do probably class loading tricks or something like that. Didn't you do that already to try and work around the JaxB version that was distributed in the JDK if someone wanted to upgrade it to a newer version that you had a class load of world? Your own class load of worlds thing, didn't you? Yeah, I'm trying to remember that because we both used to work in Java and this guy is kind of saying that we built in the past but they don't know. This is kind of a similar problem to when because JaxB used to evolve so slowly in the JDK compared to JaxB outside and people would want to distribute their own versions to override it and that's the problem is it's problem overriding it. It may be there, it may not be there you're sort of dealing with it, it's sort of expanding the problem out to something that isn't there. I'm wondering if fundamentally the same problem? Yes, I think it is the same problem. So I guess the answer is there is not a basic problem to help with that platform so we're going to keep doing what we've been doing. I'm sorry about that what we tried to do when we were in preparation for the removal was make sure that they're not there by default when you run it so that it highlights this so it gets people used to this and then now, that was in 10 I believe and now in 11 they've gone to Jakarta EE Isn't that right, they've gone to that environment to be maintained further Yes the upstream project I mean this may or may not exist we'll continue in the Java 10 because the Java EE will contain Jaxby without the container one I expect it will, I don't know what they're doing in terms of profiles I haven't really been tracking that but you could imagine a profile without Jaxby as a shrunk down minimal profile That's true Cool, thanks Okay, thank you maybe we should pick some questions from others and then return to my questions yeah, I've submitted a lot of them but yeah maybe we can return to them later one of the questions was from Denis Dekter what would be the replacement of some MISC signal I don't know yet we know that it needs looking at Oh, it's going already it's still there some MISC and SAFE is in the JDK unsupported module so this the module also includes a couple other APIs that we know some library depends on and we are critical some MISC signal is one of them yeah and we have an RFE we the call library team has been looking into the replacement API for it but we wanted to get more use cases it seems like for example Wi-Fi use on MISC signal at one point but they they are able to remove the dependencies one use case we found is like control C they want to intercept a signal and handle it things like that so it just depends on the use case so far we do not really see a high demand on this but your question is still supported in JDK I mean it is still available as an internal unsupported API in 11 I guess that's the guy who added this part of the code originally where I was coming from is like I wanted to write the program that behaves and feels like a normal in a Unix program and then in the Unix LAN the signal these are kind of important part of the ecosystem for example like you send the signal after you download the configuration stuff like that you know in a way the way I think of it is the fact that the Jenkins is implemented in Java is an implementation detail for the developers something that I didn't want the users to care about so that's the kind of I mean if you ask can we work that around it's yes like you know we can even drop it and it's kind of not the end of the world I suppose but it sort of moves us a little further away like this system Java behaving citizen and that's sort of like when people hate Java we have to overcome some objections on the behalf of the users we have some hostile feeling to Java and then this is not behaving like other tools in there at least one of that we get that it's still in the unsupported module and it will still stay there until I think we can work out a use case Andy is right, it's kind of something that's not as heavily used as others in the unsupported module but it's used enough in some areas I think we kept it around until we can work out something I mean the problem we have with some of these cases is that we have Windows, Mac variations of Unix to support Java and often the challenge with these cross-platform things is Windows and getting that it's getting better and some of the challenges you have with file access and stuff like that is Windows and that's one reason why it takes a while and then people come out and say they don't care about Windows until they deploy it on Windows so I know it's predominantly x86 in the cloud and perhaps at some point we need to recognize that it's a predominant platform we have recognized that in some cases for example by adding DirectDio support it's predominantly an x86 feature a Linux feature I believe and it may not work it may be just disabled on Windows the question with signal is it's pretty fundamental so that's why it takes longer I understand I've been breathing so another area we're looking at in terms of systemy Java if you like better is project Panama we want to get better at interoperating with the platform and interoperate with native I'm a great fan of having kind of like POSIX support JRuby does that well but we think with Panama we might be able to get closer to POSIX support and it's interesting to see where Azure is going with Windows and it seems that Windows is moving do you think it's moving towards that direction I think they're trying to see how critical it is so project Panama may enable that better it may enable better signal operation as well better native interop to system calls and faster native interop as well but that's longer term we hope to make some progress on project Panama going forward with better native interop quicker but it's going to take a while to get fully verified sorry let me just go quick when you talk about trying to understand the use cases so if we've got specific use cases for signal and let's say we're using the alarm signal and we can describe the case what's the best way to sort of communicate that with your team yeah you could send it to call library call it step that's one thing I can send you the JBS issue number that we keep track of all this information I think why I ask for use cases there we look into we look into an API to support the POSIX like signal handling a more generic one thing but it involves interaction with the VM VM also have the handlers for various signals so we have to come up with an API that I'll define it yeah it's kind of very tricky to define an API such a generic way and whether it's synchronous or asynchronous is another factor to consider so if we know only specific use case rather than generic signal handling then it might be faster to come up with an API specific for that so right but I hear that well generally the POSIX signal handling is something that is good to have a cross path from implementation in Java and I can send you the A-list and later on yeah for NWK thank you thank you very much so should we press it to other question go for it okay thank you so yeah Stephen Connolly asked about National so it's scheduled for deprecation and it will be great to know when it may be removed because we have some logic dependent on that and if it gets removed what would be the best replacement yeah so yes it's being proposed for deprecation but yeah it's out there and we're getting some strong feedback from that and there's no time frame yet as to when it will be removed and that's to be determined and what we're trying to gauge is whether there's community interest in taking over maintenance of this project so that's I don't know if anyone has stepped up yet or is interested in maintaining it outside of the JDK and that is one way of deciding what happens in the future is whether there's enough community interest out there to maintain it a bit like JavaFX because that's going out from the JDK but there's a set of interested people both companies and individuals and open source interested in maintaining this going forward and I'd be interested if there's enough interest and that's one to do the same if there's not it's likely to get deprecated and then removed from the JDK and this will be there somewhere so one alternative is it gets picked up by the community the other alternatives are Graal I don't think there's any official announcement from us on what an alternative would be at the moment but so far if you want to migrate we should consider this that's one option another option as I said is sound out whether there's enough community interest it's even doing something that's normal that's more I don't know what does it know yet oh yes so what is he doing oh right right ok unfortunately we don't have him on the call so yeah for him maybe we could follow up with him yeah let me try and dig out a link on the discussion I can't remember where this discussion was on let me open JDK JDK dev list I believe the dev list here I'll send the link in getter this is a C freds or discussion deprecation so one thing that I think is being decided or is was that Nasshorn depends on a library called Dynalink and originally Dynalink was proposed with Nasshorn to be deprecated but the original engineer who did Dynalink he's not an oracle anymore but he said he's willing to step up and maintain Dynalink so that's something I don't think is going to be proposed for deprecation at the moment one thing about Nasshorn do you use the EPIs or just the scripting engine that's one thing as far as I know on the scripting engine right okay because the scripting engine is looked up through a service provider interface yeah basically Nasshorn itself is a service provider I think that will give you do not depend on the Nasshorn API which is good what it means is it's easy to replace a different service provider implementation if you want to I'm going to post a JVMLS thing if you're interested for Nasshorn just from a technology point of view this is an alternative let me open this link too many windows open that's a presentation by Jim Lasky the original architect of Nasshorn who talks about an alternative approach no plans on whether this is going forward or not it's a prototype and investigation you can see where we might be heading with this or not if you're curious about how to integrate alternatives into the JDK okay thank you later we will follow up and add some links to this discussion okay so we have something like 5 minutes left for Kui actually we have several other questions one was about JVMLS start removal then there was a question about quality outreach program which maybe we should start from this question because it seems to be a question we may follow if we continue working on Java 10.11 support it would be great to have your insights how the program works and which benefits do we get and how could we contribute and how can we get contributions so we get a win-win solution let me just if people don't have to run and upon maybe I won't continue answering more questions there's nothing that says we have to start at 10 we don't have any blockers I've just decided to pick one question and then to talk about others whether we proceed okay I'm happy to keep going if people find this productive and useful yeah it's definitely useful thanks for your time anyways continue so quality outreach what your question is yeah so our question is yep so how do other projects collaborate with quality outreach program and what are the success stories there yeah I'm not this is something I'm not very familiar with it was Rory O'Donnell who was doing this work and I think you need to reach out to him to get details like I'm sorry I don't know enough okay it's perfectly fine or at least we have a compact so then maybe we can follow up on that later okay thank you okay so if we continue from the top one of the question we have is java web start removal because we have java web start being used for Jenkins core itself and for Jenkins agents it's a remote builder which connects to Jenkins and does builds so it would be great to understand how should we press it there okay did you have any comments on that I don't have any comment on that okay so we're it's going away it's it's a tricky component to secure not going to do much detail so it's something we would prefer not to support going forward and so you need to I don't know how I can't remember the various master to slave communication mechanisms you have this is one of them isn't it yeah so the video side the kind of user experience that this was aiming for is like something yes I wanted on some platforms where like a windows main we used to do things more from the GUI and I wanted to let people just click a few times and then be able to use those computer for build it web start from there to be back then the handy way of starting a java program without going too far yeah so yeah so the fallback I think the current fallback is just we're going to have to ask people to open the command line and type java and download some files and stuff like that so it's not the end of the world but it's certainly a regression usability yes I understand that we have ways to let people still click around a few times to have a program it's important your use case is great when there's trust involved in what's going on but when you don't have trust and applets and all this it's a really hard environment to secure and it's something we're trying to move away from in terms of distribution of applets start was a key part of yeah right the hope was we are not using applets yeah so or maybe like I said that dotnet the equivalent would be like we ask people to download the executable and then they can double click that and windows pops up some warning like hey download the program that's not a good idea and if I say yes then it still runs I guess I know in java 9 there's an 80 better an 80 packaging of java program could that be somehow you mean a jlink you could certainly jlink your own distribution of a java slave thingy but that would still need to be downloaded explicitly so you could decide to package the whole 80k plus bits you need to communicate as an image and you could put that in a docker image if you wanted docker gives you an easier way to bootstrap the process or not depending on the user capability for that you could certainly experiment that way so everything is nicely packaged and bundled as one sort of jdk plus bits you need and you can shrink it down to what you need so you don't need to distribute it with what is it I'm trying to think of other packages and NASHON for example if it's still there you don't need to distribute with that I mean you pretty much need java base plus the slave dot jar or whatever it is but a lot of dependencies come through your emoting and you lay down the jars of your dependencies on your emoting so the slave is like a shim just to conduit to push other dependencies down so you can probably get away with quite a minimal runtime here's an experiment I'd be interested in you could even try the growl runtime to shrink down that to an executable binary and shrink down the size of that and speed up the startup time of that is an experiment as a separate thing but it allows you to do that kind of experiment if you don't pull it and we have all tooling in place so yeah what I've written it could be a great idea for this hackathon so if somebody wants to try just package and promote increase jailing and see how it works yeah you should shrink it down you should go down to what's the size of a jailing Java-based binary Mandi I can't remember what it is I cannot remember and at that time I cannot remember but it's much smaller than the entire Jerry it is not as small like because of the VM only the biggest piece there is there's VM with the full blown features like JDMTI and others I could view it and then find the numbers I'm trying to find the slides just if you're curious it has been a while one other thing you might be interesting in is the Java Packager JAP that allows have you used Java Packager or are you aware of this that allows you to well it might not be completely relevant but certainly it allows you to the Java Packager will build a run time image for the application package it's a more user friendly tool for normal applications sounds interesting it's a JAP being draft right now it's spelled JAP JAP like our JAPs so in this project we also have JAPs I'm just saying are the Japanese as well so it's pending JAP it's not accepted so far yes and what would be your recommendation about existing Java Web Start tooling should we remove Java Web Start from common packages taking your concerns I think you should prepare for it going away in that sense something you tell your consumers or users that this is something you should not use going forward my opinion it makes sense and we want to detach all this functionality from the core move it to a plugin it would be a first step towards the deprecation for us yeah okay, thank you okay should we move on so it's a rather generic question are there any other incoming changes in Java 11 we should consider so for example if you open change log you may see lots of changes and I use selector logic since we heavily use this logic for example for remote communication it would be nice to get your insights to which issues should be prepared and how should we test upgrade to Java 11 when we get to that so some of this some of the changes in there not just selectors I believe are for preparation for fibres so what we're trying to do is create lightweight threads and we need to make sure that the underlying infrastructure is effectively non-blocking better non-blocking than it is and these are just implementations not changing the API and Netty's been keeping us honest if you say or keeping us so that it functions on 11 with these changes there are very edge case areas where the compatibility is a bit sort of uncertain and Netty's found these cases so I hope that Netty is strong enough for use case but you won't be affected by these internal changes there has been some API enhancements proposed I don't know if you're tracking those around let me see there was some API enhancements around where was it callback based selectors is that something you can look on the Neo on the NeoDev I'll copy into the the glitter let me just so NeoDev for thread on for callback selectors I believe that's the most thing I'm aware of on the API side otherwise it's internal details so if you can get to 11 and test with the latest EA builds that's great and report feedback early then we can fix any behavioral issues I did some testing on Monday so I can confirm that agents are able to connect and use NIO on Java 11 obviously the devil in details so when we get to whatever kind of load testing maybe we'll hit something but so far it looks good yes net is a great use case for this given how it's deployed at scale the another area it's not just related to not related to NIO is HTTP clients there's a new HTTP client it was incubating in 9 and now and 10 and now for 11 it's going to be a fully supported API it's much better than HTTP URL connection which is a train wreck of an API in my opinion and it scales as well it should be it has very good asynchronous implementation underneath it might be something you're interested in so when we get to Java 11 probably we can remove other five or so different HTTP client libraries we use within the project I hope so it may not support everything it's pretty minimal API so you may find you still want your Apache HTTP client features yeah our infrastructure is distributed so we have thousands of plugins and your plugin developers pick other APIs for this project you commonly can find almost every library existing for Java and it applies to these things so these kinds of generalizations should be really helpful yeah I mean if you have any feature requests or enhancements you'd like in this area we'd like to hear about it as well does anybody have any such requests we'd have to look into the APIs and see what we're using from all the different libraries and see what we need maybe not a request so our ask would be to remove static methods which allow adjusting settings globally because in some cases it's a huge problem yeah yep I don't know how we can remove those configuration of HTTP URL connections yeah just default proxy or default host validator so whatever they're not great they're great yeah okay I have the number for the glink Java based image I was playing with it on macOS I don't have a Linux box on top here yet so the entire jre macOS is 214 megabyte jdk10 Java based only is 23 Mac it's a little larger than jdk9 I think because we are adding features but in the modern world it's a reasonable size yes which is good I think if you stream build your custom image just include the modules you depend on and then compare the size that compares very favorably to the minimal java docker images out there yep yeah that's right speaking of java docker images I had one question actually about time lines etc. for java 11 docker images so the story behind that we had hit one regression with the latest release available in docker we know that there is a new release and davin has verified the bug we had and yeah so he verified this bug was about manifest retouches and he confirmed that it's fixed in a plus 18 release so the question was when should we expect it in docker and how would we request these releases if needed I don't know when it comes into docker I can't remember what the EA release schedule is in our jdk but I have a problem with open jdk or jdk images on docker hub I don't know where they come from when that docker hub there who is that produced by also by some third party yeah so in this case it's probably not trivial so docker itself as a company maintains a bunch of images from what I see he references docker community things so likely it's an image shipped by docker as a company yeah and where did they get the open jdk builds from I think docker hub in general has a trust issue personally I wouldn't trust anything in production from here in my opinion while docker hub speaks for itself anyway that's a separate issue but I expect once the 18 EA build comes out this will cycle around but it's not us who control this cycle around because we don't produce official docker images yet it's something I do but it's not something that I can control the production of I wouldn't say we would not recommend yeah I wouldn't put that in I don't want to prescribe what people do here this is my personal opinion okay and what would be your recommended image I would get the images from open jdk the GPL if you want open jdk I think someone's getting them anyway and build your own docker images that's my personal opinion if you're going to distribute your own docker images so you conserve them from your own area or you increase the trust of what these contain I don't know this is coming from me who doesn't have a lot of experience in the container and docker world and how it operates I can't remember what the schedule open jdk ea builds are I think to some extent it depends on whether the tests are passed well it's weekly it's weekly yeah in this case particularly the build available from open jdk has the fix it was just the docker image that was out of date I see right and the build 18 is already out in open jdk so yeah like in this case we'll just need to wait while we ship experimental packages and when we go to production we'll need to think how to approach that have you got any experience running Java in docker containers and we have improved its operation in there but do you have any feedback on that so for me it just works I don't care much about performance and it works but yeah for example Sam van Orert he was playing a lot with Java optimizations including so maybe he has something back I would say that my experience with Java and especially Jenkins and docker has generally been good the only quirks I've seen have to do with specking out the Java instance running within the container is allowed to use resource-wise and I think a lot of that has been addressed now yes I have really nothing bad to say about it so that's good feedback yeah thank you it should just work and it hasn't been in some cases but now it's getting better with one catch which is attaching bugs to to Java instances running a docker on Mac and I think that's a Mac specific problem rather than a problem sometimes it just fails right really it all for me but I'm running kind of an old for docker on Mac I switched to Linux if I want to use it in the container I see so actually I use it more to debug the docker and Java a lot so what I hit actually today when I was presenting development flows I tried to connect the debugger from IDE to my Java 10 image so we have all flags so we just start with common flags and what I hit that IDE fails to connect with strange issues so that's why I thought that after it's the same as Sam was talking about but yeah that's the other one Visual VM has a lot of issues with the connection if you're like I said I usually just boot it up in Linux on my personal laptop if I need to for profiling or run it outside of the container sounds like a networking issue yeah that's the way it reads I think it's something with how the networking is set up specifically in Mac and the way it's passing the ports through okay so just to them I started the image I used the wrong port but it shouldn't matter for now so yeah when I connect a remote debugger with Java 10 for me it just fails yeah it's something like that handshake failed connection pretty much is really closed but if you take a look at the image it still waits for connection without some wire shark and some docker debugging going on in there it's very hard to know we haven't investigated so far to report but I will continue that and if it's a release I will report that most likely my ID is just outdated or something like that so I have to I'll leave right now so thank you for inviting me being here thanks a lot Mindy for your help I'm much appreciated thank you so actually we ran out of questions but if you have questions from your side maybe we could try answering them I do see one question on Gitta from Sam he asks if we know roughly what JDK versions project Panama will be landing in or is it likely to be spread out several so we don't in general we don't target to release until something is we think something is ready but what we given that faster release cycle what we try to do is to take a large project and split it out into smaller pieces so we can deliver value sooner and that's a hard challenge because you don't want to deliver something sooner and then it becomes broken or outdated or wrongly designed to the larger picture so we do have to balance that so we don't have a targeted release for Panama yet that's all I can say about that we're just operating on in the Panama repo trying to get a minimal foreign API as we call it and when we're happy with that minimal foreign API in its minimal form and it fits well with the larger picture then we'll be confident about targeting it that's helpful that's definitely helpful there's very active progress on this API in project Panama at the moment so are we looking with the outcome of that sort of a to have job in the state sort of like Python where it's very free to accept native code libraries were needed for specific purposes the idea is say let me think of an example say we want to integrate with the Open or Acuda or OpenCL GPU so you should be able to take the headers and run it all over it to generate Java interfaces which describe the methods and structures and then at runtime you can bind those interfaces and data structures so that it calls directly through to that library and so you need a notion of how to map the C or C++ model into Java with reasonable accuracy so basically that takes away the bootstrap by hand you had to write a whole load of Java, JNI, and Java and C or C++ integration and that's very error prone so it takes away the it gives you a huge bootstrap into interoperating and as part of this API we hope to improve the speed of the speed of JNI because there's often a cost to going to the native boundary between the VM outside and we hope to optimize that as well. I can see why that's a very exciting thing for the overall Java ecosystem in so many ways. We want to use it ourselves internally too so when you bind to an API it will actually bind it to a particular platform it won't be cross-platform it's up to you because different header files on different platforms will have different ways of expressing this it's quite subtle sometimes it provides you that layer and then if you want to go layer above you may have to write your own interoperable layer above that depending on how cross-platform header files are but when you're dealing with certain platforms they have certain assumptions on layouts so when you're binding natively you're often binding closer to something That's great. In this project we have several libraries using GNI for example for Windows Process Management having such tooling would help us a lot because even now for simple libraries it's a nightmare to maintain all communication It almost sounds like some of the new APIs that are being talked about for operating system integration I mean that we don't even need to resort to this interface we may give this out of box which will be a very exciting time for us Maybe I promise I hope we drop 32-bit support by this time Yeah, I mean 32-bit support is we don't support 32-bit going forward now I believe I don't like cross-platforms It is supported by others maybe but not by us going forward I think we've effectively dropped it Yeah, there are such discussions in the Jenkins project but we haven't came to the decision yet because we still have a lot of users running 32-bit Yep Okay, so thank you. Do we have any other questions? Let's get packing He's been doing it constantly Okay, so thanks Paul Should we do She's out there Thanks everybody who participated or who watches this video online. If you have any follow-ups just use hackathon channels so you can just reach out to us in Gitter or in developer mainly please and we will follow up If you have any questions just raise them here I would like to get a follow-up on the GST flags and new settings but I don't know what the best channel would be for that The best channel would be hotspot dev if you want to ask questions there but first maybe let me follow up first try and get some information from this area and see if that's sufficient and then you can follow up if you need more questions Okay Okay, sounds good Yeah Thank you very much Should we do a short team sync up as a part of common update or should we just go hacking? Let's go ahead and make going we've got an hour and a half here lots of interesting information unless anyone has a highlight So no highlights from me Yeah So I guess our pain point now is development to link so maybe Sam, Devin or Nikola have updates on this Right Yeah, I'm still wrangling with the annotation processing I've traced it down to something inside the Maven compiler plugin and how it's discovering the annotators but it's going to take some time to unravel this one I'm afraid Alright Okay, any other updates? Hi, I've been hacking on the Jack Speedy Thank you Any updates on power? No update from me Hello, no updates from me I just I'm going forward with the tests I'm doing I'm updating my ticket Hopefully get all the pipelines green by few hours Cool Okay, I guess that's it for today, so we continue hacking and tomorrow we have a sync up session so we will check what's the status and yeah, that's it for today I'm stopping the broadcast and thanks again to everybody who participated Thank you so much for inviting me Thanks a lot Paul It was a really helpful session for us


How's it going everyone Caleb here with Leighton gaming Leighton sports coach? Sorry my apologies next tonight. We have for you 2022 tops definitive baseball hobby three-box case break number 19 pick your team style You're gonna read off the teams that you do have right now. We will get to this Thank you. Thank you. Yeah, Rob. No joke Alexander M. Padres Andrew v. Red Sox Brooks H. Mariners Edmund T. Cubs Eric B. Phillies Frank L. White Sox pirates and Astros Harper B. Rays Angels Braves Dodgers Yankees Diamondbacks Orioles Marlins Howard Z. Reds and A's Jared T. Rockies Joel M. Blue Jays Nationals Jonathan a Mets Ricardo H With the Tigers Rick E. Royals Rodney S. Rangers Ryan B. Cardinals Steven S. Brewer Steve L. Twins Steven W. Guardians and Timothy M. With the Giants Let's get right in right into it number 19. Thank you all and best of luck Dude, it's impossible after like a super long night like yesterday Rob We probably literally did like I don't know like 40 breaks or something like that. Just something like ridiculous And I say it so many times then the habit is just like Yeah, it's there like on your Friday through Monday you go what gaming sports gaming sports So it's not like you're solidified. Yeah, no Which is nice though at the same time. Yeah. Oh, yeah. No for sure, but it makes it top for like Yeah, just gotta be right just gotta be on point Here's a cool. We are I'm really guys reverse house. Yeah. Here we go. Here we go Let's do it Especially with the quantity we do, you know, it's just like so much repetition But that's how it should be as well because it has to stay consistent all that good stuff It's a dangerous product Rob that is one of the best magic products to ever release Literally dangerous All right, we have number to 30 here JD Martinez Red Sox You go Red Sox Thicky here number to 50 Buster Posey for the Giants you go Giants nice Nice Giants it Buster Posey We have numbered here 34 of 40 will Clark Will Clark for the Giants You go on the bat relic auto Another bat relic auto up next is for the Cardinals this time Paul Goldschmidt 30 of 50 on The Goldie there you go Cardinals the Goldies are like one per case But with that being said, he is still a great player. So not really a sad thing All right, we have for the White Sox here on the dual auto Frank Thomas and Mark Burley number to 35 Burley and Thomas All right three of ten on the gold frame auto for the Cubs Ryan Sandberg You go Cubs I need a big one in this box Maybe there's just like a monster hiding in this case right here 41 of 50 Tigers is Matt Manning Matt Manning there 41 of 50 on the Tigers rookie auto and last one out is a Daryl Strawberry 16 of 25 That's going to the Mets On the autograph there 16 to 25. There you go Mets beautiful Yeah, Prism should be fun stuff Next one up I'm going to tweak her plan a little bit I'm going to do the first random team you do the second random team just because that would be good time So I can help Brad with his first box That'll be ideal for everything No, it's facts Rob, but at the same time I should just help them out a little bit with the configuration Casey has any questions. I can just be there to answer. This is a sick card and it's huge Oh my goodness Protectors at the plate Javi Bayas to 25 It's huge What that is Yeah, I think it is yeah protectors at the plate is helmet. Yep. That's right That's right. I like I was more concerned on the Velcro part, but that makes more sense with helmet good call Definitive collection there on the patch to 30 clean kershaw Dodger so you go Nice patch there 15 of 30 on the kershaw that makes way more sense. I think that's definitely correct Yeah, that would make way more sense. Thank you Chris Your 100% correct on that Next up here is Andy Pettit 20 25 of 40 hatch autograph. No, you're a hundred percent, right? That's where the Velcro is really really thrown me in a loop to nice Andy Pettit there 25 of 40 patch autograph Thank you B. White Sox your patch autograph.  No more Garcia para and Jason Veratec That's nice 14 of 35 You go No, that was sick man. I was I was a little bit thrown off when it was like extra large I was like, ah, I see this is gonna be something fancy It's really cool though. Nice card there one of the last teams grabbed up like I said Beautiful one here brewers on the gold frame autograph patch autograph 24 of 25 Christian Yellich Very nice Yeah, that's pretty nice here That is seven of ten Patch autograph giant in India. That is nice Reds there you go Well mag that he has been doing awesome Really good player Now I got it Rob, but trust me. I got it in the bag Rob But sometimes it's early in the night. You gotta be you gotta be pointed out there.  Nice India there seven of ten Reds This is gonna be one of the not numbered autos here defining images auto Peter Lonzo Believe he is the current home runs leaders still in the NL Or he's up there. That's for sure Peter Lonzo there Mets. There you go. Nice not numbered short print though and How about a Steve Carlton that one's 25 of 25 on the auto their Phillies You go Phillies Yeah Some of those pictures man, they have some ridiculous stats You're funny Rob Here we go 12 of 30 on the Danesby Swanson patch braves That's awesome Chris that is awesome Xander Bogart's 36 of 50 red socks This one there red socks That relic autograph for the Cardinals five of ten mark McGuire There he is. He is Nice McGuire hatch autograph 45 of 50 you're Don Alvarez Brewers smashed the break three of five Robin yon and Christian Yelich They smashed the break You know, they smashed the break Congrats three of five frame autograph Ken Griffey junior to 25 boom big one Of course on card autograph just like all of them Beautiful beautiful card congrats there That's really nice Ken Griffey junior well mag that Rookie autograph for the raise Shane Boz 41 of 50 on the rookie auto and it's gonna be Mariners 4 of 15 on the Randy Johnson great autograph on that one Whoo, that's nice That is nice There you go What would be the order number for it bank Sam can give it a look Just came in my guest would be probably I think you might have missed the call. I'm sorry about that banks We'll see how it goes though 50-50 chance. Yeah, 50-50 It'll do it guys. Thank you again so much. Let's do a quick recap appreciate it as always Yeah, but it'll go early tomorrow morning Yeah, keep in mind they start at 10 a.m. tomorrow. Yep All right patch cards here Sandra bogers dance be Buster Posey JD Martinez and the sick hobby Nasty card That's so cool congrats on that one. Once again, that is Detroit Tigers. I know he's been really flying around to a bunch of teams Autographs here Randy Johnson Shane boss yellow chin yelts to five your non-elvarez mark McGuire to ten Steve Carlton Pete Alonzo Yelich gold frame Jason Veratek no more Garcia para Jose of Bray you Andy Pettit Clayton Kershaw Darrell strawberry Matt Manning Ryan Sandberg I Got Frank Thomas Mark Burley on the duel Paul Goldschmidt will Clark Couple more Maggards. Hey, what's going on Fuego? Jonathan India seven of ten and Ken Griffey junior on the gold frame There you go. Thank you all. I really do appreciate you joining fun break there We'll have them all well protected up and sent right out to you. Thank you as always


Hello, welcome to the show. It's me, John Park, and it's time for John Park's workshop. Thank you so much for standing by. We had a couple of technical difficulties earlier in attempting to launch the show, but now it appears like everything is not good broadcasting properly. We're going out over the, let me pause this right here, going out over Restream I.O. to a bunch of places including Twitch, and we've got Facebook, we've got YouTube, so you can head to any of those places to catch the show. And if you're wondering where the chat is happening, it's right here in Discord. So adafruit.it slash discord, go to the live broadcast chat channel. And there you can see people discussing topics relevant to the show. I can also keep a little bit of a eye on the YouTube chat as well. So thanks for stopping by, everyone, in all of those chat places. So let's get going. First thing I wanted to do is mention our job board. We have a job board over at jobs.adafruit.com and it looks an awful lot like this right here. If you head over there, you can post if you are looking for work, you can post if you're looking to hire someone, it's entirely free to use. And this is just an example right here of some of the types of positions people are posting about. And that can cover everything from on location, remote, part time, full time, contract, freelance, you name it, it's probably there. So go and check out jobs.adafruit.com and see if you can hire someone or find some work or who knows. Let's see, what else is going on? I'll tell you what's going on. On Tuesdays, I've got my product pick show. It's called JP's product pick of the week. It's hotter in here than I thought. I'm rolling up my sleeves. Time to get to work, right? And on the product pick show, I picked something from our list of either new or old but awesome or somewhere in between products. And I have a huge 50% discount typically on the product pick or picks. This week it was two of them. And then I do some demos. We can go over code if there's code related, do some hardware stuff. If there's hardware related, usually both. This week it was a couple of different neopixel strips but we had them both as a 50% off and we are broadcasting the video live inside of the product page in this case for both of those pages. And thank you so much to everyone at Adafruit who helps make this possible.  Here's a little recap of what I did this week. Ah, there it is. Yes, that's one whole meter of pixels per meter. So these are perfect for things like our circuit playground express and circuit playground blue fruit boards as well as micro bit because they have these nice alligator clip friendly pads on them. What we have are a ground, a power which is good for anywhere from three to five volts and a data pin.  Mount that inside of your cool cyber hoody hood. Alligator clip, neopixel strips in both the one meter and half meter length both with 30 pixels, so two different densities. Hey, wait, was that gonna loop again? I shouldn't have, but I caught it just in time. All right, yeah, so that was product pick of the week and tune in next week. It's on Tuesdays at one o'clock Pacific time. That's my time zone and four o'clock Eastern time. If you dig that or if you wanna do the math to figure out other points on the planet, you can do that. I don't think we're broadcasting beyond the planet currently, but you never know. Let's see. Cup of coffee says a regurgitated product pick. I did not regurgitate that. It was an illusion. Yeah, don't eat those. Probably don't eat those. I don't know, they're in silicone. They're probably fine. All right, let's see. Next up, I wanted to do a little cleaning up of this display before we do product or rather, circuit pipe on parsec. That off there. Lots of reflections. Go for it. Here we go. That circuit pipe in. All right, standby. I've got a file to open here. It's chaos, I tell you. All right, let's launch that one right there. That'll do it. Okay. For the circuit python parsec today, I want to continue on with our series of vector IO shapes. This is the lightweight 2D shapes library that works with display IO in circuit python. And last week I did circle and rectangle, which are the two sort of implicit primitive objects. Now we have the very versatile polygon object. So if you see what's going on right here, I've got a feather, no, it's a feather RP2040 and the TFT feather wing, three and a half inch, I think it is. This is a set of polygon objects being drawn on here using vector IO. If you take a look at the code and how I'm doing that, in fact, let me zoom in on here and focus a little better. Just like that, there you go. Very nice, clear polygon shapes. And the way I'm doing these are in code. I import the vector IO library. I've also got display IO and some other goodies to go along with it. I'm setting up three pallets in this case. This is in flux, this will be changing, but right now I have three pallets to do three different colors. And then you can see we create a list of points. These are vertex pairs. So in the case of this hex object, I have a set of X, Y coordinates for each point on this hexagon. Then I create an object called hex using vector IO.polygon and I refer to the pallet, one of the pallets I've set up, and I refer to that list. So I take these X, Y coordinate pairs for each vertex of the polygon. It creates the edges and the fill for us. So it fills it in automatically. And then you can see in this case I'm setting up two objects, one star one and star two. These are both using vector IO polygon, picking a different pixel shader for them so they're different colors, picking the same set of points and then I'm putting them in different positions on the screen. Then I append those to the display and they get drawn. If we go ahead and change the position of one, let's say, and resave the code, you'll see it's gonna refresh and it will redraw that second star in a different space. It'll also respect the order that you draw them so you can put things on top of or below each other inside of the display's sort of Z depth. So that is a really simple way to get started creating polygon objects using vector IO inside of circuit Python. And that's your circuit Python Parsec. Yes, circuit Python. I'm just hearing over in the chat that YouTube is having a little bit of a buffering. Okay, it looks like we're back up and running and it seems that the stream health according to YouTube is a little better than it was so hopefully we won't have any stuttering and buffering. I'll tell you what, the question is, did we get a clean circuit Python Parsec that I can, I think I can pull that off a Twitch if that one was clean, we'll see. I always create a sort of two minute version of the circuit Python Parsec that gets played later in the week and is uploaded separately so people can look at that. Oh no, C Grover says Twitch just dropped out completely. All right, if it looks like YouTube is streaming okay, maybe I'll rerun that. Let's redo the circuit Python Parsec. See if I make up new facts this time. Who knows what'll happen. All right, here we go. Ready, circuit Python Parsec take two. Yes, circuit Python. For the circuit Python Parsec today, I wanted to introduce vector IO polygons. So this is something that works hand in hand with display IO and circuit Python. It is a 2D lightweight shaped drawing library. Last week we checked out circle and rectangle, these implicit primitive objects. This week we're gonna look at the very versatile polygon object. So as you can see here, I have a Feather RP2040 with a TFT feather wing. This is a three and a half inch one. And I have three of these polygon objects drawn on here using vector IO. They actually use just that one command in the library but I'm giving them different sets of points and different positions and colors so that I get different shapes displayed on the screen. If you look at the code here, what I've got going on. I'm importing vector IO as well as some supporting things like display IO in the feather wing library. And then I am creating three palettes in this case and this is gonna be changing but right now I have three palettes so I can do three different colors. And then I am setting up this list of points for that hexagon. So you can see here I have these pairs of points which are x, y coordinates of different vertices or points on the screen which are gonna be used when we then create the polygon object itself. Here in this command I'm creating something called hex one and that equals vector IO.polygon. And then in the argument for it, I'm telling it which of the pixel shader palettes to use which set of points to use and then an x and y coordinate for the whole object on screen. You can see here, it's kind of interesting when I do the stars, I'm actually only creating one list of points for this and then I'm reusing it in two different places. So I have all of these different vertices that make up a star and then I'm creating star one and star two objects using vector IO polygon, pick a pixel shader for those, pick the same set of star points for them and in this case I'm putting them in two different points on the screen. Then I am appending those to the display and they show up right on screen. If I do something like change the position of the second star's x, it's gonna move closer to the left, you'll see that it's gonna draw that in a new position, same points and it also overlaps that first one because it respects the draw order that we presented. And so that is the basics of using the polygon inside of vector IO in circuit Python. That is your circuit Python Parsec. All right, now I feel like I'm getting into a rhythm. I should just keep repeating this one all day. Let's see how smooth we can get that. All right, so hopefully that was working on Twitch and it looks like it was working well on YouTube. So thank you. Thanks for putting up with that behind the scenes action there. But yeah, I'm really excited about these. Let me flip back over to the screen here for a second. I'm really excited about these polygon objects because you can pretty much draw anything you want. Right now we're doing a simple fill with them. So these are gonna be single color. There is some work that FOMI guy Tim has been doing with some helper objects, including a line which allows us to do sort of an outline. So maybe doing an outline or a stroke on these will be possible, but we also wanna keep them lightweight so that we can move them quickly on screen. In fact, this example right here, you can see I'm not moving them actively, but let me just reopen a different one. Let's see which this one does. I'm gonna resave this as code.py. And this is I think the one I had done. I showed this a little bit last week. This has some of our motion code as well as different polygon objects. So sorry for the glare there. You can see I've got these little triangles. Those are the polygon object. I've got these trapezoids at the bottom. Those are also polygon object. And then I'm using that line helper to do these little strings for that. And then we also have the rectangle and the circle on there. So, oh yeah, Dexter just noticed that I have too many points for that hexagon object. I'm not sure why I did that, but I think I started repeating the points. You actually, based on how this works, you can get away with one fewer point. You don't have to seal the object. You can end and it will. So if you place one, two, three, four points, you can create a four-sided object. You don't have to repeat the first and last point, which is probably that makes sense for some people. I'm used to things in CG where you tend to close, make an object watertight landing the last point where the first point was. But yeah, how many do I have on that hex? I have way too many, I'm sure. All right, so exciting stuff and tune in, I believe, tomorrow for the deep dive with Tim, where he's gonna be, I'm not sure if he's doing vector IO stuff, but he has been covering a bunch of it, which is cool. Yeah, C Grover says, display IO shapes have outlines already, but vector IO shapes are more efficient. So this is the sort of trade-off. We can do this using the shapes and display IO, but they are not as efficient. So we probably wanna be careful about not loading on too many features to vector IO so that we can maintain speed as its main cool feature. All right, so let's, next up, I wanna talk about this Star Trek L-Cars panel. So give me a second. Let me bring up a browser here. Make that a little bit smaller. Move myself off to the side. So if you're not familiar with it, first of all, let's go to Wikipedia and type in L-Cars. This is a, make that a little bigger. This is a nice introduction to what is essentially the user interface of the Star Trek franchise. And I don't know the Star Trek franchise well, which is one of the reasons I wanna bring this up so I don't misspeak which shows and movies this appears in or doesn't appear in. Here it says, in the Star Trek chronology, the term was first used in Star Trek to the next generation. And you can see on the right there, that image, that's a typical piece of user interface from this system. It was created by Michael Okuda, who's graphic designer, and it stands for Library Computer Access Retrieval System. So the interesting thing about the L-Cars as a user interface, I was reading up a little bit on the history and the design, was it allowed the interface of the ship to be very simple and fairly low budget because these were essentially created as films that were applied to Plexiglas masked and then different polarizing filter film was used so that they could backlight it, spin the lights, or spin a filter in front of the lights, rather polarizing filter, which would cause animation to appear, so effects to appear. And this is in the earlier incarnations, later things ended up on different types of CRTs and monitors or in-camera versus post-production animation. So, but at its most basic form, this is a backlit poster. And the reason this came up is that a friend of mine brought to me a L-Cars panel that was, you won't be able to see it well because it's not backlit right here, but let me see if I can always point a light at the back of it, hold on. And this is, I can't say too much about it for various reasons, but this friend of mine acquired this, it had something to do with Star Trek production and he asked me if I could light it for him in a little frame, so you can see there, it's a little backlit piece of, I think it's color print on vinyl in this case. So it's a single piece there that's got the printing for the color and the black and you see the light does not shine through that black, which is pretty cool. Mounted on some smoked Plexiglas there. And he asked me if I could create a small frame for it that would include lighting that could be animated. So easiest thing in the world would be to make a light box and just light it, it'll light up and look great. But in order to make it animate in a similar way to these do on the show, which is often whole sections of the lighting blinking on and off or even in some cases, little stepped sort of lighting and shadow effects moving across bars on the interface. Then we got a few options. One thing I looked into, I don't know if I have any right here are small LED backlight panels. No, I don't think I have any right here. And those look really nice and bright, but they're very difficult to actually arrange exactly where you want them, just the geometry of it.  You could also head over to Neopixel Land and figure out a way to do the lighting sort of like my Ninja timer. Whoops, if you remember this thing, this is a set of Neopixel strips with acrylic and I've got some spacing and sort of light pipe kind of stuff happening so that I think it's eight Neopixels per strip just look uniform. We don't get the individual points of light. So this is kind of a nice direction to go to this I think, but given the sheer size of it, the suggestion that Lady Aida made was what about using an LED matrix, an RGB matrix instead of Neopixels? So here's one of these. You remember this is actually the one that was in our Aida box with the matrix portal that I have right there. Let me remove these little strings on here. So matrix portal, if you'll remember, is a sort of all-in-one microcontroller designed for driving these types of panels. And I was just in New York looking at, in Times Square, looking at the just massive, massive building-sized panel matrices of matrices. So they plug in just endless numbers of these things into a driver board and make up those huge signs. So using this, we have, this is a 64 by 32 array and the size is just about right. I haven't looked yet to see if we have anything with a denser pitch that might work better or different sizes, but I think this one's gonna work out really well if you look at the size that we have. In fact, let me, let me switch over to this view here. It'll be easier to show you some of this stuff. So there we go, jump over here and let me just bring up the chat, there we go. Oh, I'm seeing on our chat, by the way, if you go to our Discord chats, people using L-cars interfaces on their iPads and similar types of tablets, which is really cool. So here you can see I've got panel there, sizing is pretty good. I wanna be careful with this, careful not to scratch this. I don't think I brought my little silicone pad I was using. I'll just set down some padding there. So if you look at the sort of debossed, hopefully you can see that. You can see the printing is kind of debossed based on how that was made. You see a little indents there. So looking at that, I can cover just about everything. Missing about a couple millimeters on one side. So it's possible that with this being separated with a little distance, so we don't see all those individual LEDs and with some light pipes made as a cutout, we'll be able to light that all from this. And then my idea for animation is to create BMP sprite sheets because it's very easy to animate sprite sheets, pretty small low resolutions, 64 by 32, have a series of those. And then I can have in software it doesn't blink. It's really effective. It's not like a slide show where it's having to load up new BMPs. It loads one BMP up if we want, and then we'll move between different animation frames to blink stuff. So what I did, I'm doing this cooking show style a little bit for you. What I did was I took a photo, I don't have a flatbed scanner anymore, but I may see if I can scan it on someone else's or borrow one. But I took a long lens photo so it's pretty flat with a ruler in there so I could get this geometry pretty well traced. It's not a hundred percent accurate, but it's pretty well traced inside of Rhino where I designed a little light pipe cutout that you can see I've created just a prototype one using some MDF material. My material was a little short, so I'm missing one side there, but it's just about reaches. So if we flip this over, you can see, this'll line up pretty well. If you can see, yeah, I don't think you can see that side at all with the way this is set up. Let's see if, oh, you're not gonna be able to see that. Okay. But trust me on this, it lines up pretty well. I'll work to get a better fit. And then what I have going on with the Matrix Portal to light that, let me grab a good power supply. So one thing for this is that you wanna use a three amp power supply with this so that you are giving it enough current. Otherwise you'll see some weird glitching and blinking. I think this three amp USB-C power is gonna be enough for this. Look at that. And let's set this over here. Actually, I'm gonna try it with two panels because I'm working on getting the right distance. The MDF works fine. It may be the final thing or I may do this in some black acrylic but I'm running low on black acrylic so I tested it with this. So let's set that there and then I'm gonna power up the Matrix Portal underneath and I may have to do some alignment. There we go. All right, so let me turn off a light. Lower this one so you can see it a little better. Nope, exposure control is not set on that. I don't know what control it's on. Well, you know what, I'll put this over in the, we'll bring this over to the other display where you'll be able to see that better. It is, let me drop one layer of this. It is not exactly a fit yet. Just the BMP I made doesn't fit my animation quite as well as I'd like. Let's get, there we go. So you can see this is doing some basic blinky stuff with it. Like I say, it's not as bright as I like but this is that full white on these. You can see they are pretty bright. If I put this directly on here you can see the problem with full illumination from it as we see all those individual LEDs. Usually diffusion material doesn't really cut it and it's spacing that you need to get even lighting like this. And even at that distance I'm seeing a little bit of dots in it. So let me bring this over. I just wanna show you this under better lighting circumstances, because it does look a little better in real life than what I'm seeing on the camera. Let's go over here, let me go to this down shooter and I'll plug this in. Oh, we're gonna get it. The camera is adding a bunch of flicker, which is too bad. At least get the exposure. There we go. So that's a little, sorry about the glare but that's a little more like what I'm seeing here in the real world for that. So you can see the color is built into the panels. It's possible that you could also try to match the color in the LED animation itself or the BMPs but you can see here, this actually looks pretty nice over in this section and my alignment isn't so hot in some areas. So if I slide that over there you'll see this little animation. Let me turn off this, this lights the limits. That's a little better. So let's put a second and put the second spacer on here and the spacer isn't the same as the first one so it'll mask some things, unfortunately. Let's get that aligned. There we go. So flicker you see on camera is only on camera. It's not in the real world and it looks pretty good. It looks pretty steady. So that's my progress on this so far. You can imagine if you're using just a light box you can just get a ton of light if I use this little, oops, let me switch cameras here.  You can get what we really want, right? It's just super, super tons and tons of light there. You have the right size panel. So not sure yet if I'll be able to get away with the matrix. I may try LED strips. Some neopixel strips. May try again with the little individual panels. So we'll see but this is kind of cool. Also, this is a smoked acrylic so it's cutting down the light a good bit. What I'd like to do is show, so this one is a production one. It's made a particular way and it was gonna be just saturated with light from behind using a light box I think. However, if you wanna make this sort of thing yourself there's a lot of places, a lot of good resources online like the Replica Prop Forum will point you at where you can do printouts on archival paper, spray-mounted inside a clear acrylic so you get more light coming through and then figure out your backlighting technique that you're gonna use. What I wanted to do also is show, oh yeah, that looks pretty cool right there, like these numbers, this part's really nice. Let me see my little blocker there. I wanted to see, actually you know what I'm gonna do is I'll put a, when I do the guide for this I'll put up a link to the really clever polarizer wheel. It's essentially a motorized disc that's spinning of just sort of polarizing film that changes the angle of the light hitting different sections of this that have then film put on in different directions. Yeah, Todd in our chat says, wow they had really bright lights behind those Elkars panels. That's what someone was saying on one blog post showing how they worked. They just had huge amounts of big fluorescent bulbs basically behind these things. It must have been really hot in there lighting up all of those panels. There we go. Let's see, oh yeah, there's Ryan Kunk in our chat. Hey Ryan, Jim Hendrickson, hello. Nice to see you all. Yeah, Seagrover Hired Density Matrix Panel. It's gotta help, right? If I could double the amount of light in there that would be fantastic. Dexter says maybe this is one of those episodes where the systems are malfunctioning. Yeah, it has that look. Yeah, actually let's back away. So one of the nice things too about these is that they were often not so close to camera. Let me straighten this. You can see there I have a mismatch right now between my laser cut blocker and the LEDs. That's a little better there. Let me focus that. There we go, that's getting better. So you can see I probably want the panel to be larger anywhere where I'm, I think I was being optimistic thinking I'd get away with the light not really being directly under it anywhere where it's a little bit off, it gets pretty fuzzy. So we want like full lighting to hit the blockers anywhere that I have black gaps in them that aren't intentional is gonna soften that, soften that lighting up I think. Cob LEDs, Andy Callaway says, yeah. That could be a good thing too. Wagon loads over in YouTube says I've seen a YouTube video of someone made an Arduino based Star Trek sick base screen with the sound effects, that's excellent. Yeah, clearly you can do a lot with just modern displays. I'm sure a good iPad or a similar, an app on a similar type of device would look amazing. But if we can get this working, it's got a totally different look to it than a screen. The resolution is whatever you can print at and the sort of type of colors, type of look is very different. You know, one thing I want to do is show you how I'm creating that animation for this and also just wanna throw a full blast, full white at it from this panel just to see. Now, it will glitch out when I try to do that over my computer USB even though it's a powered hub that I'm going through. I don't think it's gonna provide the current that this thing wants, so we'll program it and then we'll need to plug into that Pi supply, that three amp Pi supply. So let's go for a second. I need to create a share. I'm gonna use a sprite, which is the little pixel animation software I like and it works well for this. Let's do a screen capture, new screen capture. Bear with me one second.  Okay, that over there and we'll put me in the corner. Hello. So you can see here I took essentially the 64 by 32 pixel. This is the design of the graphics and the cutouts that I made in Rhino sort of squished down to 64 by 32. And what I'm doing is creating frames of animation that are just blocking parts of it out. Oops. And then these don't really have an implicit timing to them the way I'm exporting them. So you could tell the frames to hold for a certain time and I'm previewing them at 300 milliseconds per frame. You can set that to anything you want, but in the end we're just gonna be exporting one BMP that has in this case seven copies stacked on top of another in a vertical sense. So that's the type of sprite sheet, excuse me that we're making. And then we can tell in circuit Python code, we can tell the matrix portal how long to hang on each tile of this sprite sheet basically. So if we wanna just make this pure white for a second, let's just do that. And I'm sure there's other ways, but what I'll do is just make a 64 by 32 white. I'm gonna export this as just L cars, white BMP and say, okay, export, and now you won't see this part, but I'm just gonna go into my finder on the Mac here and copy and paste that onto the circuit Python drive. Let's find it first. Use your set and done. Make a shortcut for myself, there we go. L cars, BMPs, L cars, white, copy, circuit Python drive, I'm just gonna paste this into here and I will move this one out of there. L cars, anim sheet five was the limit was on there. Okay, so now we just have this L cars, white BMP on there and let's go look in code there one second. Okay, so let's see, I'm gonna actually open up the REPL here and see if it's yelling anything at me. It wants me to restart it. You know what? It probably is really unhappy trying to drive every pixel at full bright white. Hey, there it goes. And now it's, yeah, I'm killing my USB there. Oh, you didn't see that, okay, fade it out. Let me use that three amp capable supply and we'll see how that goes. That's a found shooter. It's funny that it tried. Not gonna do it even on this. Yeah, that's not, even that's not enough. All right, it tries and restarts itself. Funny, so actually, you know what might be interesting is we have, I don't know if on the Matrix portal we have a way to use a different external power supply but we do with the feather wing. So there's a Matrix driving feather wing. Do I have one around here? I don't think I do. That allows us to hook up an external power supply so we could get like a nice 10 amp 5 volt, I think is what we can use on that. I'll have to double check that. But I think this is just not gonna be happy about driving pure white. I am kind of curious if we make this, let's say pure red. Let me update, I'm gonna plug that for a second. Let's update this, or let's do blue, how about? So this is a third of the current, essentially. So with these panels, RGB, red, green, blue, there's three diodes per LED and you draw one third of the current if you only drive a single color. I have to remember in a sprite how to, there we go, let's go to RGB mode and I'll go full blue. I did full red, full blue, there we go. Let's re-export that. Now car is blue. There's also a chance that my board is resetting itself because it got unhappy with the power dip and wants me to like reinstall circuit Python. That can happen sometimes as well. Okay, so let's, I'll see if I can manage to keep the board alive long enough to, okay, I'm gonna have to play with the reset button as I plug this in. What if I, yeah, let me see if I undo the power. That should help. Let me see this here. Move that out of the way. So I've unplugged power to it and I'm just gonna remove the power supply line, the five volt out from the panel there. This should allow me to plug it in without causing the power dip. And now we'll put, yeah, it's staying on. That's good. So let me go over to that new L cars blue, copy, paste. Okay, so now I can re-plug that power. I guess I could use external power with this. I just have to tie it to the ground on here but drive the panel from a brick. That should work, actually, yeah. Okay, so here you can see it's much happier to display the pure blue. Obviously that's not gonna be as bright but I'm curious how that looks with, yeah, you can see it's not anywhere near as bright but it's quite even. This is the Tron version of it. Yeah, again, sorry about the flickering that we get over the camera. It's not there in real life. All right, so that is, yeah, so I think that may be the way. I think that'll be my next attempt is just to simply give it like a 5 volt, 10 amp power supply should be plenty, famous last words, and tie that to ground on the matrix portal but give it this external power supply and see how that works. I'm not sure if we can power the, we might be able to power the board from that as well, right? That would be nice. I don't want to have multiple power supplies so I think we should, in a lot of cases you want to keep those power supplies separate with things like robotics. You don't want the sort of motor power to cause brownouts on the board but I think that could work in this case. Let's see. Wagonload says, can you drive your panel at full brightness using a PWM to limit power drain? I do not know. That's a good question. This is, I'm trying to remember, the matrix portal is ESP32 and I can't remember if that's a coprocessor. I think that's a coprocessor for doing wifi stuff and I think it has the M4 for processing so you could potentially tie this into Internet of Things things, make an interface on your phone for it. There's things you could do once you get the sort of basic control of it working. I think that's going to do it. So thanks everyone for stopping by. Let me know if you have other thoughts about this. I'm going to try a few different ways with this but I think this one could be pretty promising and especially if you find a tighter density display, make a smaller one. So we have a lot of possibilities for backlighting stuff using this matrix I think. All right. For Adafruit Industries, that's going to do it for John Park's workshop today. It's me John Park and I will see you next time. Thanks everyone for stopping by. Boop.