Click the button. All right, welcome to the day four sync up everyone. We are taking questions for anyone watching on the IRC channel, Jenkins Hackhouse, or on the Gitter channel for Jenkins, CI Jenkins. Well, it has an update for us. Yeah, I have just a second to think in other participants in the chat. But yeah, we have some updates. And actually, today is just a sync up session. I'll share my screen, and we just do the stuff. Yeah. OK, so do you see the matrix? Yes, now yes. Yeah, so I would propose to discuss agenda today because we had several requests for discussion. So it's day four sync up, by the way. I would propose to just do stuff updates. Then we had a question from trace about Java 10 support page. Then we had a question about upstreaming core changes. So what we can upstream to if it releases from now. And then the rest is we want to talk a bit about testing plugins with Java 10. So I would propose the following quarter of the agenda. But we can adjust if you prefer. Go with it. Do we have any other topics to discuss today? That's enough. OK, then let's just do updates. So if everybody is interested, we have a big Jenkins and Java 10 hackathon document which includes everything. And here we have a session for what's happening now. And I think we can just proceed with this section. So do we have some online? Yes, sir, I'm here. Cool. Oh, tell us what's going on. I'm still trying to get to the bottom of the compilation issues. It's definitely deep in the stack. If not Java compiler itself, something with the Maven compiler, which I'm going through the sources up now. I had a possible lead from Jeff that I'm going to be looking into. Thank you. And I'll know more once I go through that. If I can't make some serious headway in this area by this afternoon, I think I'm going to put this down and focus on the Groovy Braille Lake. Just for a second. Seems like a reasonable point. Yeah, I mean this one's a time sink. And what it sounds like it's going to end up with is there being a bug to the Java compiler or somebody else, not in Jenkins. Well, maybe that there's a workaround we can do. No, OK, fair enough. It's not the first time we've done workarounds for Maven, especially Maven compiler plug-in issues. There's an existing one for annotation processing that we have. Fair enough. So we hit this issue as well for some demos. So it would be really interesting. Yeah. OK, thank you, Sam. Ben? Yeah, so basically what I've been looking into is in the worst case scenario that we just can't figure out the Java 10 compilation stuff any time soon, it's relatively trivial to compile using Java 8 but run like unit test using Java 10 and up, which for validation purposes gets us most of the way to what we really need to be able to say, like, yes, we're OK with things running on Java 10 and 11. So for today, basically my goal is to kind of finalize a demo for tomorrow and maybe add some or propose some new images or whatever is needed on like ci.jankins.io and maybe even update the build plug-in groovy library to basically allow someone to test building using JDK8 but running on Java 10. Just like the Java 10 images that we have there right now. Do we want to turn that on for Core at the end of this? Or are things too? I have no idea about whether it worked for Jenkins Core itself. I mean, theoretically it would, but I haven't tried it. Basically the way I'm thinking of it is in the build plug-in groovy script that plug-ins are able to use, they can select JDK8, JDK10, I guess now. They can select versions of Jenkins to test again. So my proposal would be to add another thing that if they want to, they can test also against JDK10. But maybe, yeah, there's certainly we could discuss making that like a default thing or something like that. Yeah, just a second. I stop my screen and respond OK. I'm sharing my screen again. OK, yeah, regarding pipeline library patches, yeah, I'm the next, so I'll just do the update. I did some patches in order to enable that. I have demo Jenkins configs code presentation, which I have already demoed on Tuesday, quickly. So I updated it to support JDK and 10 and 11 builds in a tricky way, but maybe it's something which could help because it supports running a doof plugin and a lot of other pipeline library tools. Yeah, regarding the rest, we finally got the BCT released and I've created upstream pull requests to Java 10 and master branches, so Java 10 branch is integrated and the images are already updated. And yeah, I also did some testing of Oliver's patches for animal sneaker. They look good and yeah, I've added some tooling in order to support that, but we are still waiting for the release from Oliver in order to update, for example, SAMS pipeline support plugin build flow. Okay, and the rest I spent maybe three hours today running Java 10 on Windows, use work files. And unfortunately I have to admit that so far it just boring because it works. Darn, what a bummer. Yeah, so it's a good result, but yeah, I expected something to break. I'm not successful so far. I have some ideas and I plan to continue tomorrow. Well, I guess we're just gonna have to cry ourselves to sleep then, aren't we? Yeah, on that one. Yeah, let's see. Okay, that's it from me. Maybe we will also do one release for the app streaming. I wanted to discuss today. Okay, Nikola, is he online? He's not here. Okay, Jean-Paul is also, he's at the conference, but he is going to do a demo of Easy Jenkins tomorrow. And yeah, it will be a part of our status update presentation. Okay, then Kiki, are you online? He's not here, nope, and... Okay. Yeah, I don't have anything to add today. Could you please ping him in the chat just in case he missed the update? Okay, we'll make sure that he's here tomorrow. I think that's a reason for this. Yeah, but actually Kiki's update is here. So he's working on removing Jax B from the core. He tried one update with detached plugin. It didn't work due to some class loading issues. So now he's exploring plan B by just bundling libraries of Java 8 compatible versions directly to the Word file. So this is the update from him. Okay, Lime? Yeah, I don't have anything to add. And now update. Denius, he has created some tickets and he started working for Docker packaging for Slim and Alpine versions. But we discovered that there is no Java images for that. So with this, there are still things to consider. Whether we need that and if yes, how to proceed. Tracen? Hi, yeah. So I did some more exploratory testing that was running on Docker with the image. And yeah, nothing exciting at one issue where the email extension plugin didn't show up submitted a bug. But I think we talked about that, that it's likely a packaging issue with Blue Ocean. And yes, almost more issues in the documentation than in the product itself. And then in general, start a full request just to have some information on Java support. So when folks run with different versions of Java, they'll have a page to look into to see what the deal is. Oh, and I'll add, yeah, I was working yesterday with Jonah Graham and he managed to get in a couple of pull requests. And yeah, general feedback was that it was really easy to get up and running, both with Jenkins Core and the plugins, less straightforward to sort of trying and come fix sort of illegal reflective warnings just because there's a lack of sort of understanding of the architecture decisions. But yeah, he did manage to get a couple of things in. I think I've put links to the PRs. He did a bit further down. Yeah, one of the cards was about parameterized, not trigger, something else plugin. Okay, we can find them later, but yeah, one. I think just in the doc, I've put them in the doc a bit lower down if you just go down a bit. Oh, my bad. That's okay, you can just paste them in there. Okay. So yeah, this one already got released by Baptiste Matos. Yeah, that's great. This one, yeah, there was a discussion between Nicola because there was one proposal from Johan and then Nicola made another proposal based on his approach to rebuild packages. So, yeah, this is one version of the pull request and there is another from Nicola. So, it's based on the blog post he published yesterday. By the way, I need to find a little bit. Okay, yeah, so I'll just update for Nicola. Yeah. I think what was interesting as well for me with that patch, just understanding what Nicola did with the multi jar and also that this is the first time I'm seeing something where Java 10 is actually fixing like using that new AI fixer something and makes it work on Windows where it didn't before. Mm-hmm, nice. Yeah, that's cool. Yeah, Nicola also did the patches for core and he's working on the touching GNR library. It's one of our sources for illegally reflective object services and previously in December, at this they even did a lot of work to clean up core. Now the idea is to remove this library tool and make it a detached plugin. It would be great to detach JNA at the same time, but I think there's still a lot of uses of that in core. Mm-hmm, yeah. So, yeah. Okay, I think that is just a subject for discussion, but yeah, Nicola will be proposed a couple of requests with some changes. Okay. What else do we have on the call? This is Jeff. So I haven't had a lot of time, but I managed to dig into some compilation stuff a little bit. May or may not be related to some of the stuff Sam's seeing. Hard to say, it's very initial so far, but I found the annotation index or is not making a fix in there, recompiling it, rebuilding it under Java 10 or 11 seems to allow the build to proceed further. I'd be really interested to see the manifest differences between the JDK8 build and the JDK10 build. Yeah, there's a lot of things I'd be interested to see on this one, it's very initial so far that I found that I was able to get further with that, and I have no idea what's going on yet. I've had very limited time, as I have more time, I will continue digging into that, trying to understand what's going on. Mm-hmm. Thank you. One trick I wanted is to do parallel builds, do one build with Java 8, JDK8, one with Java 10, and then literally just use method. I tried to create such parallel builds, but for me, the build just fails at all now. So Jeff, if you submit the patch for that, I will be happy to evaluate and integrate it. Do you want PR out, actually? Yeah.  Was that to me, I missed that. Yeah, I was wondering if you might be able to, actually, you know what, don't worry about it. I can create a PR from what you've described, that's not it. Okay. Yeah, I can create one, I'm just not entirely sure when I'm going to be able to get to it. If you want to do it first, that's okay. Give me a second. I'll have you one. Bip, bip, bip, bip, bip, bip, bip, bip, bip, bip, bip. Were you building explicitly for compiling for Java 10 in this case, or are you still building for Java 8, just changing that field? I've been building with 9, 10, and 11 and trying what goes on. And the particular line that I indicated that I changed or added in that particular case. There's an addition for Java 9, which makes it work okay in Java 9. But then with 10, the string changed and 11 seems to be the same as 10. And I've just been building mostly with 11, but trying 10, nine, see what goes on. Okay. So I guess we need to do some comp in the chat later. Yeah. Okay. So that's it, these updates, I guess. Okay. So what else do we have in our agenda? So the first was about Java 10 support page. So Tracy starts drafting this page in the bottom of the document. Tracy, the floor is yours. And if you want, you can just take a screen share on your own. Yeah. If you could just keep sharing the document. Okay. I guess that will, yeah. For this. Yeah. So this is just a proposal for, I don't know if we can pin you, for the wording we should have. So at the end of this week, we give some clear direction to the community, what versions of Java they can use. So we just say that Java platform will run, sorry Jenkins will run with Java 8 runtime environment, but say that Java 10 will be preview. So it may be run with Java 10 by specifying the enable future Java flag. And then we put a link to known issues. And similarly for Java 11 and beyond, we say, well, you can do this. There's lots of caveats. So I don't know, there's a proposed wording. So it likes some feedback from people whether that's strong enough, encouraging enough, have yet it in more ways. Yes. I had some comments. Generally, I totally support having this page because currently the only thing we have on Jenkins, I always something like installing Jenkins guide. Yeah. That goes here. Yeah. And it says that Java 8 is a prerequisite. So yeah, this is the only thing we have now on Jenkins.io and having a kind of official page which lists support options and maybe experimental support, it would be really helpful. Because nobody really reads this page, I guess. We've got so many issues about Java 10. So what Tracy already did, she created a pull request to extra executable board. And yeah, this pull request, it's some redirects. And yeah, when we get the page done, we can just redirect users to Jenkins.io so that they see actual documentation and we can update it dynamically. So it should help a lot. That's very cool. Any other opinions? Do we want to have more details than this on the page?  Yeah, so my opinion that this guide is just not going to work because it's just too top level. So Kiki is currently working on a fix in order to make Jenkins running with just this option. By packaging the Jax B, but so far, it's not there. And yeah, I would say the other reference since not this guideline, but maybe a part of this guideline. So for example, we could take these run guidelines. Yeah, someone does instructions and put them in the middle of the page, yeah. Yeah, and I also think it would be important to reference this ready to flight packages because this package, for example, is really important for us because it includes some patches for pipeline support. And yet I would rather expect to see a page which includes this experimental guidelines and also experimental docker packages. And then we know that that's the thing that we update and everything points there. Right. So the rest of this section is not required because Tracy is detailing two JIRA tickets describing there. Right. And yeah, actually maybe we could add some notes, for example, for pipeline, what needs to be updated. So similar to what has been created for our status updates document somewhere. Right, yeah. So I was wondering if we should have maybe an updated version of that blog post. And then link it from the page. And the reason to just have it in a blog post is because it dates it. So I think this will get, it will change and get stale quickly. But if it's in a blog post, at least it's saying as of this date, this was the date of it. And then we can kind of swap out the link as we update. So I would suggest that if we have it in the docs then we can say or have a note somewhere on the bugs that are added under the Epic to say, when you fix this, you need to update the docs. I understand that the desire to have it updated, but I still want that doc to exist. I guess that we shouldn't be using blogs as the target of things, I guess. Yeah, but likewise, we shouldn't be having lots of caveats for running with Java 10 and 11. So I guess this is a kind of work in progress, I suppose. Yeah, so what we could do, we could create a Java support page where we describe explicitly what we support. I mean, so something like this, we support Java 8. Yeah, I propose to be a bit specific, but yeah, this is what we support. We also explicitly say that these versions are not supported. Then we can add information of what actually mean supported agents, master, whether you can build with other Java versions if you want, because these questions are very popular. If you want, I can just add it here. Yeah. So for example, to do as a user, can I build my project? So Tracy, I agree with the idea that we want to, I agree with the idea of like, okay, targeting is okay, as of this date, et cetera. To me, I guess having a blog post be the source of truth feels kind of hacky. It feels like, oh, you guys didn't write the documentation. Oh, you just have this blog post, it just looks odd. It's an appearance thing more than the actuality, but I don't care where the page is exactly. But it's like, oh, so you did this blog post. It also makes it very apparent if it'll make it, well, okay. So when we do an update, do we post another blog post or do we update that blog post? With a doc, you very obviously update the doc. With a blog post, we generally don't want to be going back and updating blog posts over time. I agree with Liam's points there, actually. But if I could offer maybe a compromise, could we do like an efficient doc, like finalize things, like this works, this works as of these versions and then a blog post for kind of the interim workarounds that basically shows like a snapshot in time. Here's the workarounds that we know about versus here's the things that are considered done and fixed and stoned in the docs. And then we add to that as things get kind of finished off. I guess I'm not understanding what you're pointing to. So we still have a wrap up blog post that says, here's the state of the thing. So, which I totally support doing, by the way. I totally support having a blog, a wrap up blog that says, here's the current state, right? So your points about there being issues with updating a blog, I agree about. I think a blog post should not be the central source of truth for support. And we've historically had problems with that. But it is useful as a snapshot in time for workarounds. I'd like to have things that are kind of permanent documentation captured in documentation. So, here's what's supported, here's what's, I guess things that will be updated and added to, basically. And reserve the blog post for temporary workarounds. And here's our current status, basically. But that makes no sense. I'm not sure how that would work, so we would just say that we would have a document page that points back to the blog post to say, here's the set of workarounds, because otherwise you can't run, right? Yeah, we could actually, yeah, we could, I know that sounds crazy, but we could actually do that as a starting point. We could have the documentation, plug in some basic stuff and some basic information that we know like pipeline works, these things work, and that points to eventually, that'll be in full documentation, but while there are still workarounds required, that would point to an updated link to whatever blog post we wanted to have for the workarounds. And eventually, anything that needed to be a permanent part of documentation would eventually migrate into the docs. Yeah, we'd rather agree with this approach. So, Java tends to- Okay, so then, so when we remove one of the workarounds, do we update the blog post or do we- The doc. So the workarounds do go in the doc. Once it becomes permanently functional, it's part of docs. While it's in a transitory state, I think it's okay to reference a blog post for short-term workarounds, but short-term workarounds have no place in long-term documentation, unless there's something that's gonna be permanently required. Does that make a little more sense? Like docs, docs, I feel like the doc should be stuff that reflects accurate state, basically. The doc should always be up to date with where we are. But it's a key reference, something else, so we aren't duplicating ourselves and having to have the same content in two places. Okay, I think I see what you're saying. I mean, it may be crazy. Maybe I'm hard to get too fancy here. Tracy, what do- Yeah, well, I guess my big question is, how close are we to having a simple solution for running Java 10? So, with it just being one line of saying, yes, you can run Java 10, and it's preview, so that we won't be- Here's the one line of command that you do, so that you don't have to say a lot of things, right? So, does it come down to the Jax B thing, or more? Yeah, so far it's Jax B, I think. Some of the plugins still have dependencies on versions. If I recall correctly, the WorkFlows support plugin that dependency we have there may not work with Java 8. So, we do have to have some sort of multi-release to our support baked into a couple of things. A WorkFlows support plugin works for Java 8. Does it? Yes. With your watch? Okay, and I don't remember exactly where it was. It might not have been that one, but one of the patches that we made is not readable for Java 8, I remember that much. It'll compile and it'll run in Java 10, but it's using Java 9 source, or Java 9 class files. It was a multi-release jar, at least when it starts compiling properly. Yeah. I don't know if we got far from having support, but we definitely do need to have some, there's some parts that we'll need to release because they just can't work under both. Have to have different code or different dependencies. Yeah. Anyway, I feel that we are retelling a bit. Yeah. So, I think all of us agree that having Java 10 support page would be useful. So, if we're just like, is it a Java support page, right? Yeah, just Java support page. Yeah. So, it's a landing page where we have statuses, where we say that Java 8 is supported, we say that we have Java 10, Java 11 in Preview mode. For example, with a link to the blog post, or maybe there's some basic description on this blog post, and then we have Java 7 and earlier. And we'll try to put, what we put in there for Tracy's point, we'll try to put it onto that page and stuff that isn't just transitory. It'll be something that, okay, this is going to be this way for a while. And so we're not, it's a try and put the stuff that's less likely to just go out of date, right? Right. Yeah, I agree. I'll have a second pass at that so we can have a look again tomorrow. But yeah, I hope we can just get Java 10 in a way that is kind of one line to run. That would be, yeah. Yeah, so what Kiki is working on. So once we get there, yes, of course we can remove these things, but it doesn't replace a lot of guidelines. For example, we need pipeline support plugin to be released at least, which is not exactly going to happen soon. Maybe soon, but we need to figure out how to release it at least. And I think saying what we test against is also very useful. Yeah, right. Something that I think would be legitimate to slip into the work stream for the pipeline team. It may not happen right away just because there's some testing needs there. And I'm a little twitchy about growing out major dependency bumps like that really nearly. Okay, not that I've in that horribly break something in production for users or anything like that. Okay. So if you agree on that, yeah, maybe we already discussed it a bit tomorrow with more detail or at least with some specifics. But yeah, I think we are in agreement how it would look like from the top level. Yeah, sounds good. Cool. Okay, let's move on then. So next topic is upstreaming core changes. So we had a bunch of changes created against our Java 10 support branch. And yeah, there is an interest to start upstreaming them to weekly releases in order to firstly minimize the size of Java 10 support branch. And then when we are ready to just say that master and hence weekly releases support to Java 10, then we can just drop it in. Actually, we don't have so many patches inside. So we have one patch regarding the general post-exit update from there. That doesn't necessarily matter if we're just going to get rid of it. Yeah, so you think it doesn't matter? Yeah, because I mean, we're just going to, all it does is potentially clean up some illegal access reflection, legal reflection. But if we're going to move it out of core anyway, it seems that important as long as the detached plugin is the nearest version. Right, anyway, we can just propose this patch if it's harmless against master. Then we have a patch from Sam about GroovyBump. As Sam said, it causes memory leaks. So we cannot upstream it in the current stage. And it's needed to run declarative pipeline updates. Yes, and I think once we have what I would suggest we do, at least for this, it is, one of my goals for this week is to have at least a proposed patch to fix those memory leaks out by the end of the hackfest or at the latest on Monday. Once that has passed review and is in release, I think that'll cease to be a blocker for upstreaming. I want it to be unstuck there. So, do you not, then, Groovy call this memory leaks? Yeah, and that's actually subtle because that'll cause memory leaks in places besides pipeline. As always. Well, there's a fix. When I say I'm doing a patch for preventing the memory leak, that's actually two patches. That's one to work for the CPS for pipeline and one to script security to cover other random Groovy usages. Like dynamic parameters, those extensible choice parameter. Oh, you'll have test to mention follow that, right? Yeah, that's the main reason I'm really pushing hard to get compilation and testing working under Java 10 because then I can use the existing test cases to validate my patches. Okay, that's really cool because when I've heard about extended parameter, it was really surprising, but it's great to hear that. Okay, so yeah, this one would be rather blocker for us. And I think that one needs to, I would say that one is a good one to have marinating in our weeklies for a little bit because every time we bump Groovy, there's always a little bit of risk associated with that. Yeah, right. But yeah, once we get known issues fixed, yeah, we can proceed with weekly update. Yeah, and the weekly will probably not do any other issues, I think. Yeah. Then what else do we have? So it's, yeah, we have bytecode transformer. So we also have some minor tooling patches, but yeah, in the code generally we had some upgrades. And yeah, he is a major bump, but I spent some time today testing BCT. So I've already created a pull request against master branch. It has been approved and it works like a charm. So no problems discovered so far. And yeah, if everything goes well, I would like to really integrate it. So it's ready to go. Once we have these three fixes in the core, we will get to the state we have now with our development branch. And I think it would be good enough to say that we have some demo support of Java 10 in the core. However, there are ongoing pull requests. For example, pull request from Nikolay about the GenR-Porschex pull request from Kiki about Jax B. But these pull requests can land directly in master if needed. So they do need to pass through evaluation how we can do that. Okay. So if everybody agrees, I will just create follow up tickets. I have already an epic for upstreaming Java 10 changes. Just a second, I will find it. Okay, yes. So I've already created epic Java 10 support mesh to upstream. I will create tasks there. And if I'm missing something, just add them to the ticket. Okay. That's it from me. Do we have any questions on this topic? Am I still online? That's... Okay. Thank you. And last but not least, testing of plugins with Java 10. So, yeah, there in the floor is yours. Yeah. So we already mentioned this kind earlier, but the big idea here is to basically allow almost unchanged build and test flows. So that if these compilation errors take some time to fix, we can still move forward with testing the Java 10 changes and are like our standard flows. And so my goal here is to basically get some examples, demos of running plugins with tests on Java 10 and with the PCT with the test run on Java 10. Basically, it's very trivial. You just have to pass the flags to the Maven Surefire plugin to tell it what JVM to use specifically for running tests. So it means that we'll need agent images with Java 8 and another version of Java installed. But other than that, it's like, you know, very minimal changes. So it should be pretty feasible. And so does it run with stock water files or do you package them somehow? So for the PCT, I created a custom war file based on our Java 10 branch to get like the ASM updates and stuff like that. But once those things are merged in, you could use your standard war files. You need to make sure that you have all of the plugin updates, like experimental releases of workflow support or whatever for those tests to pass. But I mean, you can also run plugin tests directly from the plugins repository, not as part of the PCT. And so that doesn't require any kind of custom wars or anything. Just directly you change the configuration. And so I guess the other nice thing about this year is that it doesn't actually require you to go in and make changes in plugins. You would just be changing the CI jobs. Mm-hmm, okay. It looks like a nice workaround. Yeah, and certainly this, I would imagine this would be totally transient. Once we get to a point where we can build on Java 10 we would absolutely replace it because it would be simpler. Mm-hmm, that's nice. So we already did some experiments with this flow. So you probably know there is Jenkins Essentials project going now. And yeah, there are steps in pipeline library for PCT. So for example, run PCT groovy. It's a step which allows running PCT with passing custom Java options that I mentioned. So in CI Jenkins IO and in Jenkins files for plugins it would be probable to use this flow out of the box. And we also have some data driven development automation. It's called Essentials Test here. So it's just a build flow which firstly builds the plugin. Then it uses some tool called Custom Work Packager in order to bundle all dependencies needed. And it runs ATH and PCT. So we experimented with this approach for integration testing. And I guess that Java 10 integration could be one of the use cases. Definitely. So everything work in progress. But you said the update that you've already done and got to test running, right? Yeah, so this all works locally at this point. It's trying to get some actual Jenkins files. Updates, maybe update pipeline library on CI Jenkins IO. For now I'm using Oleg's standard demo image that he uses to test it out locally on a Jenkins instance though. Yeah, this is the demo I was presenting with Java 10 support experiments. So it great that it works. And in such case we will be able to do some testing once we are ready to upstream these versions. So we will be able to at least have basic CI for plugins which we recommend in Installer Wizard, for example. Okay, thank you. So any questions regarding this flow? Sounds good. Okay. I guess they sit for today now. Does anybody want to discuss any other topics? I'd like to get a confirmation from Jeff that he didn't do any other particularly custom palm changes for his tricks. Yeah, all I ended up doing on that was the one line change and the annotation index or whatever that was called exactly. And then just update snapshot build, build everything locally down the chain and around. I didn't solve everything, but it did make me allow me to get along further in the build. I'd be curious too if you just built it and skipped the test and didn't even make a change if it would do the same effect. I mean, that's an obvious question, right? And I haven't tried it. Well, I'm trying it out. So this is, yeah, this pull request ideas. Nope. That's an older one, isn't it? Yeah, but this is the only one. Right, yeah.  I haven't. I haven't had a chance to. Sam, you were going to? Yeah, I'm testing it out to see if it actually does. Right. Mm-hmm. Okay, thank you. It would be great. Okay. If there is no other questions, we have another meeting tomorrow. It will be a kind of a close down. So we will have some status updates and presentations. So for example, we will have a presentation about simple Jenkins and update to Java 10 there. And then they even also wanted to show the flow if it's done by this time. So yeah, maybe we'll have some such demos. If you want to present something just to close down the hackathon activities, let me know in the chat and we will organize the agenda. And if you want to join this closed down session, we have Jenkins 10 online hackathon on meetup.com. And here you may find all the links. And here's the link for the meeting tomorrow. Okay. Excellent. Nothing else from me? All right. Oh, hold on a second. So in the change and annotation indexer, I did update it to a more current version of the main parent Jenkins palm. That was one other change that I had made. What version did you bump to? Because I just found, it was actually just about the thing that I tested it and it still has the issue of being restricted. Yeah, it looks like I bumped to 46. I'd forgotten I'd done that one. Thank you. Okay. All right, this. And I was quickly here checking through my others to see if there was anything else I found. And I haven't checked them all exactly, but it doesn't look like I changed anything else. I can go review that more carefully, but. Okay. So. No, no, still get money or okay. I, if you mind if I stick on with, with Jeff, we can take it offline and all. Yeah. Sounds good. Yeah. Let's take it offline. It's better to discuss it in the chat. Yeah. Okay. So then that's it. Thanks everybody for watching and see you tomorrow. Cheers. Cheers.


Okay, continuing with our HTML5 canvas tutorials here. Once again, as I keep mentioning in these videos, this is part of a series. There should be a playlist. There should be an annotation on the screen to a playlist. If you haven't watched the earlier videos, you may wanna check them out, because as you can see, we already have some code written out. Let's quickly review the code that is here. In the last tutorial, we added some styling tags to remove the margin for the, and the padding, to remove the white border around our body. That way our canvas is in the top left corner. Obviously, you may not want it in the top left corner, but that's what I was going for in the tutorial. So we're setting the margin and the padding for the zero pixels, making sure that the body, which is where the canvas element is, is in the top left corner all the way. We also have our canvas element right here. It has an ID of my canvas with a capital C. It doesn't have to be that. You can call it whatever you'd like within reason. But remember, it is case sensitive in the fact that when you use it elsewhere, like here, it has to match whatever you put there. I also gave it a pretty decent size of 1200 by 800 pixels, so 1200 wide by 800 tall. And then we start our JavaScript here. In our script here, we're creating a variable, which is looking at our canvas element. And then we're getting the context of that, and we're making sure it's 2D. We're setting it to 2D because we're working with 2D here. And then we're going to create a image object. It is a new image. So we're just calling that function there to create an object, an image object. Now we're saying when the image is loaded, we're gonna run this function, which right now only has one command. And that command is to get the context of our canvas and draw to it where we're gonna draw to it. We're gonna draw an image that we've created here. And we're gonna draw it in the top left because we're going zero pixels by zero pixels. What image is it gonna draw? Well, we're setting the image that we've created. It's source to image of my daughter. It's in the current directory, same directory as our HTML code here. So we don't have to put the full URL. We just have a relative one of ember.jpg. And what does that give us? That gives us this here. So that's a review of last time. Well, at the end of last time, we ended up doing two images. Well, now we're just gonna work with one and we're gonna work on resizing. As I said, right here, when we draw the image to our canvas, we're drawing this image at zero pixels by zero pixels. So you can once again move that around if you don't want it in the top left. But if we do some more commas here, we can say comma 200 comma 300. And that will resize the image to 200 pixels by 300 pixels, which is going to distort our image because if you look at our original here, oops, it is a 637 by 897 ratio there. So it's gonna be a little distorted in this case, but we'll save that refresh up here. And there's the image, not too distorted because the percentages aren't too far off. But if I set this to, we'll say 500 and we reload, you can see that I've now stretched out the width to 500. And of course we can continue moving that up. We can say 800 and really start stretching it out. And we can also shrink this one down, squish it up a little bit more like so. So that's resizing an image. Obviously you could also do percentages of the entire canvas or the image itself. We'll get into that in a little bit. We're actually gonna be looking at some, taking the canvas width and height and working with that now. Resizing is easy. We're gonna get into cropping here, which gets a little more complex if you want to make sure you don't distort your picture and crop it properly. And really it's just adding more values into this draw function here. But instead of just writing those numbers in there, we're going to actually create some variables. And that makes it easier for later on if you want to change them plus, we're gonna be calculating a few things here. So let's go ahead and let's put this actually inside our function here. We're gonna say, we're gonna create a variable. We'll call it source and we'll set our source, sorry, source X to, we'll just say 100 for now. We'll set our source Y equal to zero. And we're gonna play with these numbers in a little bit so you can see what they do, but let's just create the variables for now. And once again, we're creating these variables and we're giving them names, but these names don't have to be, this doesn't have to be source X or source Y or source W. That's what we're calling them. So do what's relative to your project. So here we're gonna create source width, variable. Then we're gonna say source H for height. We'll say 150 for that. We're gonna once again be changing a lot of these soon. Let's go ahead and make this full screen for right now. And next we're gonna create a variable called test W. For destination width. And instead of just putting a number in here, we're going to set it equal to our source W. This will help prevent distortion. Obviously if you want to distort the image aspect and ratio, you wouldn't set them equal, but if you don't want it to store it, these two are going to be the same. So we're gonna set them the same. And this is why using variables, one of the reasons using variables is handy rather than typing the same number in multiple times. And if you change one, you gotta change the other. And if you miss it someplace, it's just gonna cause problems. So same for the destination height, we wanna set it equal to the source height. So we're not distorting the image at all. We're gonna say a variable and we'll say destination X. Then we're gonna say that is going to be the canvas.width. So what this is saying is, look at the canvas and whatever the width it is. In this case, it's 1200 pixels. And what we're gonna do is we're going to divide that by two for now. So we're going to get the center and then we're going to subtract destination width. What this is doing is basically going to be centering our image on our canvas. And we're actually gonna play with that in a little bit here. But basically if we were to, if you've done any type of programming before where you're working with images or anything visual, you know that to center something, you'd only have to get whatever your canvas or whatever you're drawing on width and divide it by half to move to center point. If we want the X, we need to also find that objects width and divide it by half. Otherwise, the left side of the object is gonna be at the center, not the center of our object. Hopefully that makes sense to you. Like once again, if you've done anything visual like this before, you do understand it. If not, hopefully I'll explain it better here momentarily or at least demonstrate it a little bit better. So we're gonna go height, divide by two. Sorry, canvas height divide by two. And we're gonna subtract our destination and I put destination width there. I'm gonna put destination W and H just trying to shorten things up. I like to have my variable short divide that by two. Okay, so now that we have all our variables, let's input them into our function here. So we still, we're gonna have zero, zero. Well, no, we're not gonna have zero, zero. We're going to have 100 and zero. So we're gonna have source X comma by source Y. Once again, the case does have to correspond since we have a capital Y and a capital X there. We have to have capital Y and capital W down here. Or you know what I'm saying. Same thing, H. Then we're going to go and just give me a moment and I'll explain all this. Actually want that to be our X and this to be our Y. And then we're going to go our, yes, W, that was correct. And our H, if I remember correctly. So before we explain it, let's just look at it. We'll come up here. We'll refresh this page now. And you can see that we now have cropped our image and centered it. So real quick, just to give you a better visual of it, I'm in Chrome here. I'm gonna hit F12 to bring up our little console here. I'm gonna click on the magnifying glass here. Now I hover over objects. You'll be able to see them better. So you can see that our image is not only cropped, but centered directly in our canvas here. And once again, we, let's turn that off. We not only need to find the canvas width, which is 1200 pixels and divide it by half. We also need to find our object, our images, width, divide it by half and subtract that from that number because if we were to, well once again, let's, let me show you here. Let's bring this down a little bit since we don't need all of it now. So you can see it's centered. It's right smack in the middle. This is right about here. It should be the middle of our canvas. If I go back to our code here and I don't subtract the object, our images, width that's divided in half and I refresh up here and we look at our canvas. You can see that it's not centered anymore because we didn't center the center of our object. We are now centering the left side of our object at the center. So this is the center, but to get the center of the object we need to find the width of our object, divide it by half and subtract that from the canvas width, divide it by half. So I don't know how to better explain that. Play around with the numbers and you'll get it if you don't understand. Hopefully you'll get it. So that's what we're doing there. Just to make things a little bit easier because of the size of our canvas. I could resize our canvas, it would probably be easier when you go, but you can also, you know, if I wanted to be up in the further top left of our screen here, our canvas, I can divide it by fours. Well, I don't want to divide the width by four. It doesn't really matter. I'm not trying to line things up perfectly here. That moves it up a little bit. So it's no longer centered. I was just showing you that so you could know how to center it. Really, this should still be too, to be proper. So now it's centered in the top left quadrant of our canvas. Anyway, let's play with these numbers some so you understand the other parts of it. So once we have all this set, obviously, the X and Y destination is gonna be the top left of our image now, which can be a little confusing. Confused me very much at first. And now our source, X and Y, which originally was our top left of our image, now kind of subtracts or moves over. So even though I said this the way I'm viewing this, I'm gonna explain it this way because this is the way I understand it. Let's just quickly look at it. So we have this image. You can see that part right there. I'm going to change this from 100 to 110, save it and refresh, and you'll see the image move to the left, not the image, but where it's cropped. Boom. So for me, I'm thinking, I'm thinking of this as more of a negative 110. I'm thinking of this as my starting point and now I'm subtracting 110 and pulling the image over that way. So that's how I'm thinking about it in my head. And if we were to change this, Y, we can change that to 10, save it. And now our image within our crop box, so the crop box is not gonna move, but our image is gonna move up 10 pixels up, which in my mind once again really is negative. I think it's kind of weird the way they did this, but boom, it moved up a little bit.  And now we're looking at my daughter's eyes. And so now let's see, let's move this, instead of 350, let's go 320. So now we're out of our eyes there. Kind of like the height. I wanna crop over a little bit more, get the other eye. So now I can come down here to the width. Let's change this to 200. There we go, let's make it a little bit bigger. We'll go 250. So understanding this is really just playing around with it. But basically the destination X and Y is once it's cropped, consider that a new image and that's the left and right, or top and left of our image. The width, the source width and the source height, you want the same because if they're not, so let's say our source width is 250. Let's say we change our destination width to 200. So it's a little different and we refresh this. You can see it's now squished our image. And so if you don't want that distortion, let's set it to 20, you can see it still has that full image in there, it's just squishing it. So if you don't want any image distortion, you're going to want to have the destination width and the destination height equal to the destination, or the source width and the source height. And once we save that and refresh up here, it goes back to that. So destination X and Y is the top left of our image now that it's cropped. The, or the cropped image. And then the source X and Y is basically pulling the image left and right out of the crop area. And the source width and source height and the destination width and destination height should be equal. Once again, if you don't want any distortion and that's how much of the image we're going to be seeing left, right, up and down. I really hope I explained that well because I understand it, but I do find it a little confusing. I really think that these should be negative numbers because I feel like we're moving, like this is the beginning here, we're moving that way that it should be negative two, or three 20 and negative 200. But that's not how whoever designed this is thinking. And I'm sure they have reason. I'm sure they're probably more proper than I am. That's just how my mind's working. Real quick, let's just have a quick look at this. So again, creating our canvas, getting its context, setting it to 2D, and where we have our image object here, which is a new image. Then when the image is loaded, or image object is loaded, we're going to grab our variables here and we're going to draw the image. What image are we going to draw? We'll image one, image one source, which is our image. So we put image here, it's going to look at the source of the image. So you have to make sure you have that set. And then it's going to input our variables here for the height with positioning, cropping, all that stuff. So we look at sizing, cropping, and all that stuff. I hope you found this useful. I hope you look forward to future tutorials. Hope it wasn't too complicated and that I explained it well. And the next tutorial, we're going to look at a simplified way of loading more than one image. And our original video on loading images we loaded to, but we kind of just duplicated what we had put in. Basically like we copied and pasted this and renamed everything that was image one to image two or whatever we want to call it. And the next tutorial, we're going to be looking at a function that we can create to shorten that up some. And again, I've mentioned previous tutorials. I've learned the Canvas tutorials, how to use the Canvas from tutorials on a website called html5canvasutorials.com. I'm not getting any kickbacks from there. I just want to give them crap because I've looked at other sites for Canvas tutorials and I found them confusing. And their site is very straightforward. You can hit the code right on the page, which made it nice in real time. And my tutorials are going to be similar to theirs.  Basically I take their tutorials, trim out excess stuff that I don't think I need to know for that specific job and maybe rename stuff or move things around to make it more sense to me. But other than that, my tutorials are very similar to theirs. So just want to give them credit for that. I thank you for watching. Be sure to check out the playlist if you haven't. Hopefully there's an annotation on the screen if I didn't forget. And I hope that you have a great day.


Now, here in 1 Corinthians chapter 11, beginning at verse 2, I'll begin reading and I'll read to verse, let's see, see, I'm going to take you to verse 16. I don't know if I want to read all of those verses at one time though. I'll read verse 2. We'll start there. That's as much as I feel like reading right now. Now, I praise you, brethren, that you remember me in all things and keep the traditions as I delivered them to you. As we look at verse 2 here in 1 Corinthians chapter 11, this is actually what would be referred to as a new section. And Paul begins at this point to actually deal with a very difficult issue. The issue that he's actually going to begin to deal with is the issue related to authority and submission to proper authority. And so what he's writing is, he's writing concerning the issue of women and biblical submission. Now, obviously, as I begin this, this is a very difficult subject because women are just so sinful. Now, this is a, you're here, okay. Part of the reason that it's a difficult subject is because women in general have legitimate concerns, obviously. And the concerns have contributed to an imbalance in the church. Because there are injustices. There have been times when women have tried to solve those injustices, but often what occurs is the church begins to adopt the spirit of the age. And what we do is we begin to accommodate the standards of contemporary thinking. And when we do that, we slowly but surely begin to abandon scriptural authority. By giving over to the spirit of the age, we neglect what God's word has to say. Somebody said, here is the great evangelical disaster. The failure of the evangelical world to stand for truth as truth. There is only one word for this, namely accommodation. The evangelical church has accommodated to the world spirit of the age. First, there has been accommodation on scripture so that many who call themselves evangelicals hold a weakened view of the Bible and no longer affirm the truth of all that the Bible teaches. This accommodation has been costly. First in destroying the power of the scriptures to confront the spirit of the age. And second, in allowing the further slide of our culture. You see, we can become guilty of redefining scripture in an attempt to force upon scripture new interpretations. What we do is we interpret scripture through the lens of contemporary opinion and contemporary culture. And the result is that we speak to scripture rather than allowing the scripture to speak to us. So that puts us in the position of authority. And at that point, scripture no longer wields the authority. So we are not in the final place of authority. We need to remember that scripture is. Our responsibility is to either accept what the word of God says or to reject it. But we cannot reinterpret it to suit our own personal needs and tastes. See believers understand that the scripture judges us. It's not we who judge the scripture. We are actually judged by God's word. Jesus in John 12 48 said there is a judge for the one who rejects me and does not accept my words. That very word which I spoke will condemn him at the last day. And so we are actually to be conformed to the spirit of scripture, not the spirit of the age. And so as we look at this subject here, we're going to be looking at women and men in church. Paul begins to deal with that very difficult situation and he begins in verse two by saying.  So as we look at this, I'll start out by looking at the obvious. I want you to notice that he uses the word traditions, that you keep the traditions that I have delivered to you. At this point, the New Testament was in the process of being written. And so the church normally was using the Old Testament. And so what they had in the Old Testament is in terms of the teachings they had received is they had received what were called traditions. The word tradition simply speaks of something that has been handed down from one person to another. And so they had received traditions. But one of the things about traditions is that they're only as valid as their source. And there are traditions that have no spiritual benefit. There are traditions that actually undermine what scriptures authority has to say. A good example is found in Matthew chapter 15 verses one through six. It says there are some Pharisees and teachers of the law came to Jesus from Jerusalem and asked, why do your disciples break the tradition of the elders? They don't wash their hands before they eat.  No, he didn't. Jesus replied, why do you break the command of God for the sake of your tradition?  But you say that if a man says to his father or mother, whatever help you might otherwise have received from me is a gift devoted to God, he's not to honor his father with it. Thus, you nullify the word of God for the sake of your tradition. So there were traditional interpretations and practices that had been handed down through rabbinic teaching that Jesus confronted, because he said when scripture plainly states one thing, man's tradition is not to overthrow that. Now the traditions that Paul is speaking of here in verse two when he says, you remember me in all things and keep the traditions, these traditions are God given and therefore are to be received. There are traditions that the church practiced and still does that are actually God given. In 2 Thessalonians 2.15 Paul says, therefore brethren stand fast and hold the traditions which you have been taught, whether by word or our epistle. Second Thessalonians 3.6 continues to say, but we command you brethren in the name of our Lord Jesus Christ, that you withdraw from every brother who walks disorderly and not according to the tradition which you receive from us. And so there are proper traditions and then there are traditions of men. Those traditions that you find in scripture that are practiced by the first church, the early church and continue on through the history of the traditions that we hold fast to. And so he's praising them here in verse two. He's praising them for openness to teaching and he's praising them for having a willingness to obey what the word of God says. And as he's beginning to praise them for that, I want you to notice he begins to deal now with the issue of women and submission. Verse three, I want you to know that the head of every man is Christ. The head of woman is man. The head of Christ is God.   For that is one and the same as if her head were shaved. For if a woman is not covered, let her also be shorn. But if it is shameful for a woman to be shorn or shaved, let her be covered. For man indeed ought not to cover his head since he's the image and the glory of God, but woman is the glory of man. For man is not from woman, but woman from man. Nor was man created for the woman, but woman for the man. For this reason the woman ought to have a symbol of authority on her head because of the angels. Nevertheless, neither is man independent of woman nor woman independent of man in the Lord, for as the woman was from the man, even so the man also is through the woman. But all things are from God.  Does not even nature itself teach you that if a man has long hair it's a dishonor to him? But if a woman has long hair, it's the glory to her, for her hair is given to her for a covering. But if anyone seems to be contentious, we have no such custom nor do the churches of God. Here we go. I want to go home. He's detailing authority and submission. I want you to see this as we begin, verse 3, he speaks of the head, the head of every man is Christ, the head of woman is man, the head of Christ is God. When he says the head of every man, that word head speaks of the ruling authority. It speaks of anything that is supreme, chief, or prominent. That's what the word means. So when he says the head of every man is Christ, he's saying that Jesus is the head. Jesus is the preeminent authority. He has authority over all things. Jesus said that in Matthew 28, verse 18, where he said, all authority in heaven and on earth has been given to me. So Jesus has preeminence. That's what he's pointing to. Jesus is the preeminent one. He has all authority. That's why when Paul was writing to the Philippians in chapter 2, verses 10 and 11, he said, at the name of Jesus, every knee should bow in heaven and on earth and under the earth, and every tongue confess that Jesus Christ is Lord to the glory of God the Father. Jesus has all authority, and that's how he's beginning when he speaks concerning proper submission and authority. And when it's the head over everything, Jesus obviously is the head over the body of Christ called the church. And that's what it says in Colossians 118. He is the head of the body, the church. He's the beginning and the firstborn from among the dead, so that in everything he might have the supremacy. That's what he says in Ephesians 122. God placed all things under his feet and appointed him to be head over everything for the church, which is his body, the fullness of him who fills everything in every way. So Jesus Christ is the first and is mentioned when it says here, the head of every man is Christ. Simply another way of saying Jesus is preeminent over all things. He's speaking in terms of authority. But then he goes on to say, and man is head of the woman. What he's saying is man has authority. God given authority that has been given to him by virtue of the priority of creation. Man is created first and then the woman. He alludes to that later on. Now, the fact that man has been given by God authority does not make man superior. I think that's where a lot of people have problems with that concept. The distinction is not based on value and it's not based on abilities. It's not based on intellect and it's not based on spirituality. What this is based on is what would be called complementary roles. It speaks concerning how to have an orderly society. Everybody knows that a two-headed body is a monster. And so there needs to be a system of authority. And so in God given authority, Christ is the head over everything. But man being created first has been given authority and the woman has a responsibility in the order of creation. Again, not because of inferiority, but because of complementary roles. And because of an orderliness in society, man has been given the responsibility of what is called headship. And so for proper order to be established, husbands assume leadership. And they maintain the respectability of their life. Because if a man assumes his proper position of leadership, he's also going to do it through love and by earning and maintaining the respect of his wife. And we're speaking of husband and wife at the moment. And so in that order, if I as a husband live in a way that is honoring to God and loving to my wife, it gives to me a greater opportunity and ability to lead my home. But if I don't live with love for God and love for my family, then my wife is not going to respect me and it's going to be an awful lot more difficult for me to maintain any kind of order in the home. And so as a man, my responsibility is to remember that I have someone over me. And the one who has authority over me is Jesus Christ. And because I'm a man under Jesus Christ, I'm to have a relationship with him that is of such quality that it transforms my life. And as my relationship with Jesus is transforming me, my relationship with my wife is also being transformed because as a man, I normally have a role of initiation, but my wife has a role of accommodation. What she does in other words is as I initiate my responsibilities as being the man of authority and the man who's under Christ, Marie is going to respond to my leadership and she does that. Because the way change really occurs isn't for me to say to my wife, you need to do this because after all there's a Bible verse somewhere in there that says women are to submit to men. I know it's there, you know it's there, you read the Bible more than me but you know I'm right. And therefore you need to submit because it's in there somewhere. That's one of those verses most men have memorized, they've never even read the Bible but they heard that somewhere and they know it's there. And so we can say that. Well it says women submit into the husband and you're supposed to do that. But how is that made possible? It's made possible when I love her. When I love her like Christ loved the church. And how did Christ love the church? He loved her and gave himself for her. He sacrificed, he yielded his life. So there was an act of love that was continuing because he still loves the church and that transforms relationships. And so if I as a husband understand my role is to be submitted to God through Jesus, that Jesus is over me then I as a husband have a greater potential to be able to lead my wife in the way that the home ought to be led. The Bible makes it very clear that women are to submit to Godly leadership. Even as I mentioned a moment ago Ephesians 5, 22 and 23, now all the men are starting to write this down, watch. Wives submit yourselves into your own husbands as unto the Lord. For the husband is the head of the wife even as Christ is the head of the church. And he, speaking of Jesus, is the savior of the body. So husbands love the wife like Jesus loved the church. How did Jesus love the church? He loved the church and gave himself for it. And so husbands have a responsibility under Christ to be leaders in the home. How I'm, you know, this is a part of my notes and I have to be careful because I can start veering off and start talking and I want to. It's been said when the women's liberation movement came out, women do need liberation. But the liberation they need is liberation from poor leadership on the part of their husbands. And I think there's a degree of truth in that. Those kinds of statements that was made by a very solid Christian preacher at statement that rang true in my life. I wanted to become a man who knew how to lead my home. And I wanted to learn how to lead not by force or by anger or pressure. I wanted to lead it in a godly way. Because later on Paul is going to say the woman is the glory of the man. The woman reflects the ministry of the man. The woman brings glory to him. And part of the way that the woman brings glory to the man is just the kind of woman that she is under his influence. And because I want my wife to have a blessed life, I had to begin to learn and I've been trying for a long time to love her the way Christ loves the church. I had to learn what it means to sacrifice really and what it means to speak with gentleness and to treat it with kindness and respect. I had to learn all of those things like we all have to learn those lessons. But I wanted to learn that because it was best for her and best to reflect the love that God really has for her. And so leadership for a man doesn't have to be the puffing out of the chest and the raising of the voice and the anger that we can show sometimes when we basically are trying to say I'm the man and you're the woman. And it doesn't work. That doesn't work. All that creates is anger, hurt, and resentment. It's different when you actually have a firmness, a strength, but that that strength is covered with the tenderness. I just the other day was speaking to guys and I said this. I said what God wants us to be is velvet and steel. That's what he wants. He wants us to have a softness but a firmness at the same time. It's been said tough and tender. That's what we're supposed to be. We know what God wants us to do, therefore we're going to do it. But gentle as we lead our wives in the path that God has led us on. And my wife, if I'm loving her and if I'm living in a respectful fashion towards her and she sees me loving Jesus and she loves Jesus, has a tendency of following my lead because she trusts me because she knows I'm listening to him in my prayers and in my studies. And that helps and enhances the possibility for us to get along. And so it's simply taking Paul's admonition to heart. Christ is the head of man, but man has authority over women. And that's so that homes can function properly. When he goes on to say the head of Christ is God, that's an interesting phrase because this is speaking of his incarnation and in his incarnation for the purpose of salvation, we know that through reading our scriptures, Jesus fully submitted to his father's will. In John 4.34, Jesus said to them, my meat is to do the will of him who sent me and to finish his work. In John 5.30, he said, I can of my own self do nothing. As I hear I judge, my judgment is just because I seek not my own will, but the will of the Father who has sent me. Hebrews 10.7, then said I lo, I come in the volume of the book. It is written of me to do thy will, oh God. And so Jesus Christ submitted to the will of the Father and that's God's chain of authority. It's all built on proper submission. And so as he's speaking concerning this, he moves on to some things that are practical, at least during that time.   For if a woman is not covered, let her also be shorn. But if it is shameful for a woman to be shorn or shaved, let her be covered. Well, obviously we've seen ladies who have decided to shave their heads and in our society that really isn't anything other than really cool or whatever. If she's got a nice round head, if she's got a lumpy head, it's not cool at all. But what is Paul talking about here? We really want to get to that. He utilizes a local custom and he's utilizing a local practice in order to make an illustration. You see, in Corinth, and we're looking at a Greek city, in the city of Corinth, men didn't wear head coverings. They didn't wear veils. They didn't wear hats while praying and they didn't wear hats or veils while prophesying.  So they have these little paper hats that you'll put on top of your head if you don't have a baseball cap or some form of covering. So when you look at the pictures, you will always see people who are in there by the western wall, the wailing wall it's called. You will see men with hats. Their hats are, their heads are always covered with a hat.  And when they pray, their heads are covered. So you may assume that that has always been the case but the answer is no, it's not. That did not begin, head coverings in prayer didn't begin until the fourth century. So that's a relatively, well that's late after the church and after the writing of Corinthians. The Greeks themselves, the Greek men did not pray with their heads covered because that would have been something that was not part of their practice. So men wearing a veil while praying was actually regarded as a disgrace. And Paul is speaking of that because he's saying if it's a disgrace, then it's really an insult. It's an insult even to Jesus. But on the other hand, women wore head coverings. Now, some of you maybe remember or saw pictures of this in ancient history books but in my generation as I grew up and I went to church, women wore hats, they wore veils. They would wear veils in church. It was very common. My mom had a veil, she would wear women in general wore veils when we went to church. I was raised in the Catholic church. And so you would have a head covering. It was normal, as a matter of fact, I can remember that in our community.  That was very common. Marie Zant was going to church one day and she reached into the drawer to put on her hat to go to church and as she went to church she was seated when one of the ushers tapped her on the shoulder during the service and she kind of brushed him off and said, leave me alone. And he reached over and tapped her again and she looks at him, she says, leave me alone, what do you want? He says, ma'am, I'm sorry. You've got your underwear on your head. What's your true story? What she had done is she had reached in to the drawer and put her drawers on her head. She was really embarrassed because it said Thursday. That was even worse. But they used to wear veils. They used to wear veils. It was very common. And even in our generation today there's still places that you can go where women are wearing veils. They wear what are called head coverings. Now, part of the reason that they would wear the veils and all, and sometimes they would cover, and you see some today from the Middle East who will wear veils and things like that, they still do in some cultures. Part of the reason why a woman would wear a veil in public was because, and I found this interesting, it was rather an open demonstration that their beauty was reserved for one man, which was their husband. That's why they wore the veils because they were saying my beauty is reserved for him. And they didn't want to even attract other men's attention because she was wearing a veil symbolizing that she loved her husband with all of her heart and wanted to honor him. And so if you understand that, you'd understand that when the Christians began to remove their veils, that it was creating a real problem in the Corinthian society. Because in Corinthian society, there were women who didn't wear veils when they were out. And the women who did not wear veils were the prostitutes, the slaves, or the adulteresses. They didn't wear veils. So the Christian church, women saying were liberated from the culture's demands, began to cease wearing veils in times of prayer and things of that nature. And what happened is it became a shame to the husband, whose wife was uncovered. And only the prostitutes and slaves and adulteresses in that society were uncovered. And so even though she would argue, in Christ I'm free, I have the freedom in Christ to be as I am, it still brought shame on the husband. And that's what Paul is speaking about here in this passage when he says again, every man praying or prophesying, having his head covered dishonors his head, but every woman who prays or prophesies with her head uncovered dishonors her head, speaking of her husband, for that is one and the same as if her head were shaved, for if a woman is not covered, let her also be shorned. But if it is shameful for a woman to be shorn or shaved, let her be covered. The point he's simply making is, if the man is praying in a certain way, he can dishonor his head with Jesus, but if the woman is not wearing her veil, she can bring dishonor to her head that was just referred to as her husband. And so Paul is saying, you don't want to be involved in this negative association. In essence, and this would be something interesting, what he was basically saying, he's saying, you are appearing like the Corinthian women's liberation movement. That's what he's saying to the women in the church. You see, there was a women's liberation movement in Corinth. And in that movement, women began to try to look like men.  And that's what was taking place then. It's, you know, there's nothing new under the sun. That was taking place 2,000 years ago in Corinth, it's happening today.  Now he says in verse seven, for a man indeed ought not to cover his head since he's the image and glory of God, but woman is the glory of man. So Paul defends the principle by appealing to created order. Man is created in the moral and the intellectual image of God. And as such, we are intended to bring glory to him. But the woman in her style of life, her manner of life will bring honor and glory to the men. A man's, and I'll say this very briefly, but, a man's ministry. A man's ministry, if he's a married man, is very often gonna be revealed not by the things that he may be accomplishing, whether he, as a pastor will say, has a good-sized church or many ministries or writes a lot of books or appears on television programs or has a lot of radio stations that carry his messages, all of that is well and good. But the man's real ministry is gonna be his wife. That's my ministry. When you look at a man's relationship with his wife, you're seeing the deepest relationship that he has on earth. And when the woman that he's married to is a godly woman, then the chances are that the man she's married to has had a tremendous influence in her life that has helped her to become the woman that she is. Many years ago, my father said something to me. My father spoke to me sparingly over the years. He was not one of these guys who would sit down and say, Dave, you got a couple of hours, I just feel like talking. My dad wasn't that way at all. My dad was just kind of a nod at your head, kind of, that was my dad. We didn't have any conversations as I grew up, except during commercials. I mean, if he was watching TV, then he'd watch TV. And then commercials would start and I had a minute to two minutes to talk to him. And then he'd turn his attention back to the TV and that was just my dad. I was used to it. I didn't have a problem with it. That was dad. But he said things to me that he didn't realize were having an influence on me. And one of the things my dad said to me that I've never forgotten was when my dad said to me, you know, David, these men who complain about their wives, because I guess a lot of men do. He said, these men that complain about their wives, my dad said, don't they realize how bad that makes them look? And I believe my dad said that to me before he was saved. And what he was saying to me is a woman is the glory of the man. That's what he was saying. And that's a biblical principle. I've got a wonderful wife. I've told her you could be married to Tilla the Hun and you'd be a great woman. There's no doubt about that. She's just a good woman. Bottom line, reality. But Marie would tell you, my influence in her life has made her what she is. She would tell you that. And that's truth. Because she has a husband and had a boyfriend but has a husband who wants to serve the Lord. And that has influenced her life. So my encouragement to her to do her devotions or to do her ministry or whatever it may be, to be loving, gentle, whatever, all of those things, she would tell you that comes from our relationship because she's my ministry. She's whom God has placed in my life that I'm to influence the most. There have been times when in the history of this church, somebody has had a desire to be on staff and to serve this congregation. And I normally will look at what he's doing, see what fruit he has, but I'll be honest with you, one of the other things I want to see is what his marriage is like. I want to meet his wife. I want to see what kind of woman he's married to because he's influencing her. And I can see in that woman qualities that will tell me what kind of leader he is because the woman is the glory of the man. And that's how that works. Now he goes on in verse eight and says, "'For man is not from woman, woman from man, "'nor was man created for the woman, but woman for the man.'" In other words, God's original design was such that women were created to complete man. And we know the story of creation. God created Adam. Adam was there with his responsibility of naming animals. There was nothing like him there and all these animals that he was naming. God allowed him or put him to sleep and brought to him the woman. And so out of man came woman. So he's referring to that. Man is not from woman, woman from man, nor was man created for the woman, but woman for man. So that's creation.  Now what are you talking about? I don't know, let's keep going. What is he talking about? When you look at angels, angels, if they fell, are forever fallen. There's no redemption for fallen angels. The angels that kept their first estate, the angels who never fell, never fell because they were fully submitted to God. And therefore they didn't rebel against him. And in not rebelling against him, as Satan did and as he influenced, as Revelation seems to indicate, a third of the angelic host, the angels that remained faithful know that God is powerful, that he is majestic, he's holy. They see and know things that we only read about, but they live those things.  They know that because they are fully submitted to him. And so because angels are fully submitted to God, they look at God's creation, his sons and his daughters. And as they look at sons and daughters to them, it only makes sense if God is Lord that the sons and daughters obey their Lord. So when one has a rebellious spirit, the angel looks and wonders over that because angels are fully submitted to God. Why are God's children not? And so he's speaking concerning that for this reason, the woman ought to have a symbol of authority on her head because of the angels. In other words, it's demonstrating full submission, which is what angels understand because that's what has kept them in what is called their first estate, the unfallen ones. So submission has that kind of power. Now he goes on in verses 11 and 12 to say, nevertheless, neither is man independent of woman nor woman independent of man. The woman in verse 12, the woman was from the man. Even so, the man also is through the woman. All things are from God. Just very simply put, we need each other because we function together in a spiritual teamwork. I know how that works in some very practical ways. I'll give you a simple illustration how this works in my marriage. There's so many things that Marie brings into my marriage with me and then I brought into it for her. But one of the things that I discovered early on in our ministry together is that there have been times when somebody has come to speak to me and Marie happens to be standing there. I'll give you an illustration of a woman one time and came to speak to me. And as she came to speak to me, she was going through some very painful moment in her life, very terrible. So I as a pastor and as one who tries to appeal to scripture for wisdom, I listened carefully to her as she's speaking. And so if you were to come to me and speak to me, some of you have it, and if you had a real serious situation, you're going to discover something about me. I listened very carefully because I want to hear what you're saying and not only do I want to hear your words, but I'm watching you. I'm watching how you're acting. I'm watching your eyes to see whether they're welling with tears. I'm watching the way that your body language is. I watched that and I've been doing this for a long time and so I'm picking up visual cues and so you're speaking to me and I'm watching you. Now Marie on the other hand is standing next to me as this lady is speaking.  Now me, I'm thinking Lord, what would you have me to say to be able to help her? What scripture would you give to me right now that's going to bring healing in at least the right direction? That's what I'm doing. I'm listening, but I'm praying. And then I look at Marie and Marie's crying and it hits me what a team we can be that she has the heart and this woman notices Marie's response so she begins to direct more of her attention towards Marie who's responding to what she's saying. And I'm there sharing in the ministry as Marie is caring for her and showing the empathy and compassion that is necessary at that moment. And then I can add to it and I can say, you know the word of the Lord says this and so we need each other. It works that way. Many years ago when Marie and I were first dating I brought her to my parents' house and she and I were seated in the kitchen when a knock on the door came and it was two of my cousins who live in the Culver City area. One of my cousins and this was 38 years or so it goes a little while ago. One of my cousins at that time was about 20 years older than me at that time. So she was in her late 40s and the other one was a year younger than me or two years younger than me, women. And the older one had a husband at that time who was still in gangs and she had the look of a woman who grew up on the rough side of town. She's my cousin. I'm used to that. My other cousin, well, she's kind of rough too. So we're sitting at the table and these are my cousins and I love them and they love me and they're talking to me and one of my cousins is saying, you know, my husband's in jail. He's in prison. My husband's in prison, David. He didn't really kill that guy. They say he killed him. She's telling me this, he didn't kill that guy. No, he killed the guy. I knew he killed the guy, but she's in denial. He didn't really kill that guy and he's doing some time right now. And I'm thinking to Marie, I'm thinking welcome to the family. This is my family, welcome. We have a tattoo machine in the back. We'll be putting a little cross on your hand in just a moment. Couple teardrops. I really was, I was thinking, well, you know, this is your baptism of fire, baby. I mean, this is, this is my family. And so, you know, they're kind of uneasy because I love them. They're my cousins. I can minister to them. They respect me. We've got that going, but Marie has never met them. So, from the corner of my eye, I kind of looked to my left to this young girl who seated next to me and I look at her and I'll never forget seeing those tears that were just dripping down her face as she was listening. And the Lord spoke to my heart and he said, this is the kind of woman that you need to be married to. This is what I want for you. I saw that. That was one of those confirmations because she has a heart. She has a heart and you need to have one too.  So rather than trying to change them to become your image as a husband, well, I want you this way and I want you to do that. No, she's been brought in the way she is to fill your gaps because there are lackings in you that you don't even see yourself. But she needs the things that you bring to a relationship because she needs those things in her. So together you become what is called a composite unity. The two become the one and that's how it works. And Paul is speaking concerning that and he's saying this is how it works in the kingdom of God. Obviously, and I'll roll to a conclusion, women are not inferior to men. I shouldn't have to say that and I know to this church I don't. Women are not inferior to men. Women have the spiritual hunger. You see that in the story of Martha and Mary and how that Jesus speaks concerning Mary and says that she has chosen the better part. Mary had this heart of spiritual hunger for the Lord. They women have supported the work of the Lord. You see that in Luke chapter eight where it says the women supported God's work. Women like Phoebe in Romans chapter 16 verses one and two or refer to in scripture as selfless servants because Paul speaks of her and says that she's been a helper of many, myself included. Women obviously have ministry that they do or they train and develop the children. They support their husbands. They nurture children in ministry. They are always nurturing and caring for those young ones that God has entrusted to them. And so he is not saying in any way that women are inferior to men and we don't think that at all. He says in verse 13, judge among yourselves. Is it proper for a woman to pray to God with her head uncovered? Does not even nature itself teach you that if a man has long hair it is a dishonor to him but if a woman has long hair it is a glory to her for her hair is given to her for a covering but if anyone seems to be contentious we have no such custom nor do the churches of God. Now I'll say this very briefly. When I first got saved it was during the hippie movement and man had long hair and she would find, I went to Biola and you would find scriptures like this placed on message boards. Just the scripture here where it says in verse 14, does not even nature itself teach you that if a man has long hair it's a dishonor to him and that was like proof positive that men who have shoulder length hair well there's just something wrong with them. And for me I thought there's gotta be something deeper than that. I mean, I don't know maybe the artist's conceptions of the times of Christ are wrong but Jesus had some long hair you know so I thought I've never seen a picture of Jesus with you know a flat top or a buzz you know he's. So there must be something deeper than this that's being spoken of and there is. When you speak so and let me address this quickly does not even nature itself teach you that if a man has long hair it's a dishonor. Well we know now that men's hair grows in three stages and grows differently than women because men have testosterone. We have what is called a time of growth and then our hair goes into a time of rest and then our hair will fall out. That's the three stages you know but sometimes the hair grows back and we say hallelujah. I mean that's how that works. But it's three stages growth rest and then it falls out but it grows back right. Women have estrogen and so women stay in cycle one the growth cycle longer. They rarely reach the third stage where the hair can fall out. So we speak of nature and the reality of estrogen and testosterone. That's what he's speaking about. And he's simply saying and using as an illustration the natural fact that women have longer hair. Now women's hair is their glory. What would you mean by that? Well women can use their hair in a variety of ways including as a way to from modesty if need be and that's been from ancient times because the long hair can actually be something that is worn in a way that is helping them to maintain their modesty. So what is he talking about? Is he saying you know prophetically 2000 years from now they're gonna be some Jesus freaks with long hair don't they know this is wrong? I don't think so. What he's speaking about and this is the simple thing here is this. Men need to understand that men are men and women are women. It's just that simple. Don't confuse men's roles with women's roles. Men have been created by God with certain basic things that we do and women were created by God for certain basic things that they do and I'm not gonna get into a long story about that. I would have prepared a better study if I wanted to develop that with you but I will say that there are certain elements that are generalities that are true in terms of nurturing and a variety of other things that women have just a different way of doing things. They just do and we know that. So don't confuse the roles of the sexes. That's the point he's making. Don't confuse the roles. Men aren't supposed to act like women. Women aren't supposed to act like men. Women should embrace what women are and have always been and men ought to embrace what men have always been and the images that men have. And I could talk about that for a little while because we have a tremendous confusion of roles today where there's a lot of gender confusion. And I have seen some pretty aggressive women and some pretty wimpy guys. That's the truth. Am I lying? I'm not lying. That's the truth. Because the guys don't know how to be men. A lot of times because, well, I'll say this briefly, because with the breakup of the home the sad fact is that a mama does a better job of raising a woman because she is a woman herself. And so she can identify in the raising of a little girl just much easier because it's natural for her. But the sad thing is when a mama has to raise a son because mama isn't a man. And so she's gonna do the best that she can under the conditions that she finds herself in but she can't be a man because she's a woman. And part of that I've seen as affected young men who have come from broken homes because I'll give you one thing that I've observed. Young men who have come from homes that have either been broken through divorce or a father has died when he's young. The man being raised by a woman has a tendency to yield to women's opinions a lot quicker and not to stand up and say, I differ. And the reason would be because mama raised him and because mama raised him he respects women in that way. So he didn't have a male role model in the house to see how men respond and how men make decisions. So his model is a feminine model. And so what happens, and I've seen this to be true, is they begin to act out the way they were taught but they never had a man in the house who says, no, that's not how men do that. This is what we'll do. And because of that, the only model they had was a woman and the woman as he's been yielded to woman's authority becomes a greater figure.  So I'll give you one example. When our boys were young, we had a daughter first and then two boys and then a daughter last. My boys are outside. And what do boys do when they're outside? They play in the mud and they get dirty. And the older one has a tendency of hitting the younger one.  And the first thing mama wants to do is say, no, don't get dirty. You shouldn't get dirty. Go sit under that tree and play. I'm a man and I say boys play in mud and they throw rocks. And if they find a stick, they will beat each other with it. That's what boys do. And I had to explain to Marie that boys are different. You see, you get boys, little six-year-old boys, right, and you put them under a tree and you just let them play. Get three or four of them. Let them play before you know it. Even though you are nonviolent, they are picking up sticks, pow, pow, pow, chasing each other, hitting them, you know? And that's what boys do. You get four little girls under a tree and they're sitting there nicely. One girl gets up and walks away and the other three talk about her. That's what girls do. Am I wrong? Oh, she thinks she's got a nice dress. Her dress isn't so nice. Her hair isn't so nice. That ribbon doesn't go with those shoes. Now, if you've got a little boy doing that, you've got a problem. So let men be men and let women be women. And that's the illustration. What's he talking about? The roles of men and women. They are different.


Salut les copains, c'est Tros Historiants! Ok, baby. Ok. Get up, stand up. Mais non, mais tu fais quoi? Ouais, parce que j'étais... Trois quarts. Trois quarts.  For music. For music. Well, music has just happened to be when I was a teenager. Et c'est quelque chose que j'ai pensé beaucoup, parce que c'est vraiment difficile de faire quelque chose d'autre, de l'argent, au moins. Mais je ne pouvais pas imaginer ne pas jouer. C'est juste une addiction. The reward from doing a good concert for having people come up to you at the end of the gig and saying that really touched me is huge, not to mention the pleasure of inventing music and creating it and then performing it. The goal for us is to be able to make a living of it or at least, at the very least to be able to have the project finance itself. So copyright is something, I guess, necessary. When I say that, for me personally, it's more about just having being acknowledged as a musician so that somebody else wouldn't be able to take it and claim it as theirs. If you imagine 100,000 people in the world, which is not many at all, buying our music, that would easily make us a living. So a transistor go is really something really special because it's allowed me to, it's pushed me to elevate everything. Everything I know and to improve and to just try and achieve what I've always imagined in my head and actually make it come out.


Next-generation sequencing, NGS, technologies have revolutionized biological research, allowing scientists to quickly and cost-effectively obtain large amounts of genetic data. The most popular NGS platforms include the solid ion-torrent PGM from Life Sciences, the genome analyzer HiSEC-2000 MISEC from Illumina, and the GSFLX Titanium GS Junior from Roche. BGI, which owns the largest sequencing capacity in the world, operates several of these platforms, including 137 HiSEC-2000, 27 solid, one ion-torrent PGM, one MISEC, and one 454 sequences. This paper reviews the technologies behind these platforms, analyzes first-hand data from extensive experience, and summarizes the advantages and specifics associated with each platform. Finally, applications of NGS are discussed. This article was authored by Lin Liu, Yinhu Li, Xiliang Li, and others.


Half an hour gone, 0-0, but Palace on the threat here. It's got loads of cherries player down in the penalty area here, flat on his face. Lerma's down, and the referee has actually stopped play. Jefferson Lerma is holding his face. Let's have a look here. Lerma is trying to wrestle Joachim Anderson. You get to... Did he mean... I don't think he meant to punch you. You say he's parming. It is a closed fist almost on the nose of Jefferson Lerma. It is. Still looking at it. They're looking at different angles at this, by the way. So while Lerma is just getting some treatment back to his feet here, I think eventually now it has been decided that nothing further is going to be happening there. They do have a pretty detailed look at that one. Now here come Palace. Jordan Ayu edge of the area. Now Zaha knocks it to the left, tries to turn away. Still has it. Zaha heading back towards the bar line, turning away from Zabani. Into the near post, and finished by Ezzer from around about six yards. It came from Zaha down the left-hand side. A little help on by Jordan Ayu, and it found Everichi Ezzer centrally to fire it home first time. And Crystal Palace, they've certainly been threatening more than Bournemouth have, and on 39 minutes they go one up. Because here's Ezzer off the left-hand side now, coming in towards the top of the box. The shot! Oh, that is absolutely scintillating! The second of the game for Everichi Ezzer, who has caught that like a tracer into the top right-hand corner. And Bournemouth, they were threatening at one end and have got picked off at the other. Crystal Palace to Bournemouthville. Yeah, it was an amazing strike. It really caught it well. And this, of course, something in this last seven minutes can change. Here is Bournemouth's number seven, David Brooks. Left side of the area, deep towards the back post, in comes Keefer Moore, who in the inputs, it passed the post under some real pressure. He claims a corner, which you can't believe he didn't get. Lovely cross from Brooks, but Moore had too much to do.