OK, it's been recorded now. OK, welcome everyone. My name is Martin D'Angiot and I'm Jenkins Google Summer of Code, Orga admin for this year. And right now we are at coding phase 2 evaluation of the program. And today we have three presentations. So before we start, I would like to remind everyone that they can use the Gitter JSOC account for any questions they have. The URL should be posted in the invitation and on the Gitter channel. So it's under gitter.im-jenkinsci-jsoc-sig, all in no spaces. I'll just lay my screen for a second. OK. So yeah, this is our Gitter channel, Jenkinsci-jsoc-sig. Feel free to join it. If you ask any questions here, we will make sure to ask them to speakers or just discuss them after the presentations. OK, thanks Oleg. So at this point, our students have worked really hard to prepare the code for phase 2. And they have prepared presentations to show their progress on the program. And we have three presentations today. The first one is multi-branch pipeline support for GitLab. The second one is the role strategy plug-in performance improvements. And the third one is going to be remoting over Apache Kafka with Kubernetes features. So I would like to invite the first presenter, Parichay, to present his coding phase 2 presentation. The lead mentors for this plug-in are Markey and Justin. OK, Parichay, you have the floor. Thanks. Welcome to the presentation of multi-branch pipeline support for GitLab, phase 2. This is a project which is trying to improve the integration of Jenkins and GitLab. Hi, everyone. I'm Parichay from India. I'm an open source contributor and a DevOps enthusiast. My mentors are Markey Jackson, Justin Haringa, and Joseph Peterson. So in the first phase, I was working on a GitLab server configuration plug-in. So I'll just quickly recap through what features that were covered in this plug-in. So it's a lightweight plug-in, and it supports Jenkins configuration as code. And it has a separate GitLab API plug-in, newer Jenkins version, which provides some UI improvements. And you can also add multiple GitLab server entries with same server URL. And you can also create GitLab access token inside Jenkins, which is required to authenticate the GitLab API that is used by the plug-in. So in this phase, I developed a GitLab branch source plug-in. The main goal of this project was to add these two features, which is multi-branch pipeline jobs and folder organization. So this completes the convention of three SCM plug-ins in Jenkins, which is GitLab API plug-in, GitLab plug-in, and GitLab branch source plug-in. So these are the functionality that each of the plug-ins provide. So the other features that include is you can check out over SSH or HTTPS remote by giving your SSH private key or your username password. Although it's not essentially required, in some cases where you have private project, you can provide these external credentials. And we have groups and subgroup support. You can choose projects from your groups and subgroups by giving your path to that subgroup. We have webhook support. This basically allows your Jenkins to create a webhook in your GitLab server. And Jenkins listens to a specific URL. And it triggers the concern based on the event that's sent by the GitLab server. So currently, it's a work in progress. The implementation required are kind of done. But there is a bug, and it fails to trigger the build. So the next is pipeline status notify. This basically allows Jenkins to notify the GitLab server about the status of your pipeline job. And we have new SCM trait APIs that has been implemented. I'll just talk about it in the next slide. And we have worked on reducing the API calls. So the indexing is faster and other functionality as well. OK, so here's a list of SCM trait APIs. You can see, for example, skip notification that allows your pipeline status not be notified to the GitLab server. And similarly, webhook mode, and check out OSSET, tag discovery. So you can also be, for further extensibility, we can also add additional traits by extending this GitLab SCM source context class. OK, so it's demo time. So I'm having a GitLab Jenkins instance running here. I will go ahead and create a job. See this. I'll choose multivans pipeline. In the branch sources, I'll select GitLab project. So basically, the server configuration part that I was talking about in the phase one was this. I am using Jenkins configuration as code. And I'm mentioning the GitLab access token here and the necessary fields that is required to configure your GitLab server in your Jenkins. So yeah, so it's configured here. And I'm choosing one of the GitLab server. And you need to provide your owner. So from based on the owner, here the list box will be populated with the projects. And you can choose one of your project and go ahead and build it. So let's say I choose this one. And I'll just go ahead and save it. So right now, Jenkins will be indexing the branches. So here, the master branch has been indexed. And test is not because the merge request has been fired from the test branch. So it just skips and directly goes to the merge request. All the magic stuff is done by SCM API plugin. And we have implemented the interfacing in this plugin. OK, so indexing has been done. And I'll go to the status. So you can see that master branch, the pipeline failed. And here, the merge request, it passed. And we'll just go ahead and see the result. We can go ahead and see the indexed index one. So basically, it builds the pipeline, it checks it out, and gives the output. So this passed. And we can see that this is the project of Webhooks integration. And initially, there was no Webhook. And I'll just refresh the screen. So we have a Webhook here that has been created by the plugin. And Jenkins listens to this particular URL. And based on that, for example, I'll just show here's my Jenkins console. And I'll just put a test push event. So this is the push, test on. So basically, this is it. So this is multi-branch pipeline job support. And we have another type, which is folder organization. So let's say test group. So what you can do here is you can build multiple projects in a particular path, let's say your username, or your group, or subgroup. So for instance, I'll show one with the subgroup. So I'll provide the path here. There's a form validation here. And it says it's a valid subgroup. And you go ahead and save it. So it will basically index all the projects there. And I have done it already here. You get the list of your projects. And you get the results from there. Yeah, these are some of the features. But not everything could be covered in one demo. So you can go ahead and try it from our plugin repository. And you can build it from the source. We have a documentation about it. And we have also made a alpha release. And so you can install it from the experimental update center by using one of the new plugin management tool that is also a part of a GSOC project. You can just download this binary from the repository and run this particular command. And it gets installed in your Jenkins instance. And you can test it out. So after testing it out, if you want to share some feedback, or if you find some issue, you can just drop your mail at the developer mailing list. Or you can just file an issue in the Jenkins era with GitLab BrandSource plugin component. Or you can just come and say hello on our GitHub channel. So we have some plans for the next print. So I'll be working on improving the performance of the plugin, which will be revolving around optimizing the data structures. And there are also some known bugs and will be discovered with the testing. So I'll be working on fixing those. And there is also some room for UI improvement. So I'll be working on that as well and implement some of the new features, like tag build strategies, et cetera. So we have also planned for implementing a GitLab Blue Ocean plugin, which will allow GitLab Pipeline support for Blue Ocean. OK, thank you. So you may ask me questions if you have any. Yeah, thank you for the presentation. Martin is trying to say something, but he is muted. Yeah, I'm unmuted now. So thank you, Perichet, for this presentation. I was going to invite people if they have questions. At this time, it's time to ask questions. Yeah, I have a question. Oh, sorry, Marke, did you want to go first? No, please go ahead. Yeah, I wanted to ask about Blue Ocean and GitLab. So do you have anything in place for implementing this plugin? And what is the current discussion status? So currently, as far as our discussion that happened, Blue Ocean is being shifted towards a different product, maybe some more improved product. So presently, we are planning to implement a plugin for that, but there was a discussion related to that that maybe we can directly work on the new interface, which is an alternative to Blue Ocean. So that's the most further discussion that we had so far. Yeah, thank you. I was just wondering, so if you added to the plan, please make sure that it's not a commitment, because there might be a lot of obstacles there. Yeah, it would be really great if we have it. It might be challenging. OK, so GitHub and BitBucket has support for that. I looked into the code base, and I feel it would be possible to implement GitLab Blue Ocean plugin. Just the thing is whether it is worth it or not. So we need to discuss about that. Thank you. And another question about GitHub organizations and multi-branch pipelines. So if you use GitHub, you get a lot of different options in order to define how builds work. For example, how to discover branches, how to filter them, how to apply permissions. And I was wondering whether you have similar engine for GitLab. Yeah, these are the functions that are provided by the SCM trade APIs. So yeah, we have support for that. I'll just go ahead and share with you what. Yeah, so you're not scrunching right now? Yeah, I'm just going to. Now you are scrunching? Yeah. So basically, you see that all existing SCM API things, like for example, permission management for Jenkins files, et cetera, they are supported out of the box by the new plugin. Yeah, if you asked about the branches and merge requests and et cetera, yeah, these configuration are available. Just can you repeat what you asked about the permissions? Yeah, so in GitHub, by default, GitHub organization, it doesn't allow you to modify Jenkins file unless you have great permissions to the repository. So the use case is pretty simple. If you have a continuous delivery pipeline, if somebody submits a full request, you want to make sure that at least somebody doesn't release your product by bypassing your pipeline and implementing his own one. So by default in a GitHub branch source, it's enabled. I was wondering whether we have similar thinking for GitLab. Yeah, so I do not think that we have that particular support for a trusted contributor, but we have a SCM create API that is by default provided. Here, we have discover merge request from folks. So what you can do is you can just go ahead and nobody you can just select. So this is one way to do it, but if you are talking about we can choose some trusted contributors, then yeah. So that implementation, which is done in GitHub branches, we don't have it in this plugin as of now. Okay, I'll check it and I will make sure to create the due to ticket if it's missing because it would be really important for J release. Thanks. Any other questions? Really quick before we move on, I'd like to just say project very, very good job. I'm super proud of you. This is a really good job. Excellent work. Thanks, Marky. Okay. Actually, thanks to the entire Jenkins community for motivation and support. Yeah, thank you too. Yeah, thank you. All right. So our next presentation is by Habu Day and it is the presentation on Remoting Over Apache Kafka with, no, sorry, sorry, Role Strategy Plugin Performance Improvements. So the lead mentor is Oleg here. So Habu Day, you have the floor and you can start presenting. Hi, thanks. I'll just share my screen. Hi everyone. I'm Habu Day and I've been working to improve the performance of the Role Strategy Plugin as a part of my Google summer of put program this year. So what we discussed today is the performance improvements that have been made to the Role Strategy Plugin and the new folder authorization plugin. Now, there have been a lot of performance issues reported to the Role Strategy Plugin and Jenkins Dira. So the goal of this project was to improve its performance. Now, we've done a couple of things to improve the performance. The first one is whenever Role Strategy Plugin got a request to find the permissions, it matched all the regular expressions. Now, what we do to increase the speed, we cash the collection of roles that match a given regular expression. The cash gets invalidated whenever a new role is added and this has provided us significant improvements in the performance of the plugin. Improving the performance in this way is a trade-off between the CPU time and the memory because we're storing all the pre-calculated data inside the memory at runtime. Now, to measure the performance improvements, we were using GMH benchmarks and from this improvement, we've seen improvements of up to 3,300%. Now, the other thing we've done is to cash the implying permissions. The Jenkins permission model follows a tree-like structure and a permission can be implied by other permissions. So for example, the permission to read a job is implicitly implied by the administrator permission. So every administrator has the access to read each and every job that's there in the system. So what Role Strategy Plugin did was to calculate each of these implying permissions for every permission check. Now, we calculate the permissions when the plugin is loaded, which means when the Java class is loaded and we store them for quick access whenever we need the calculated values. Now, a challenge we faced here was handling dangerous permissions. So in Jenkins, some permissions are considered dangerous. For example, let's consider the run scripts permission. This permission allowed non-administrator users to run Groovy Scripts which had the access to Jenkins internals and would allow them to configure anything that they like. Role Strategy Plugin supports them as an option for backward compatibility and this mode for safety is disabled by default. Now, this mode can be changed using Groovy Scripts at runtime. So we needed to take care of that and we added a hook whenever the mode changes and we invalidate the cache entries for these dangerous permissions. So, and the permissions are then recalculated again. Now, to measure a performance benchmarks, like I said before, we use the JMH Bankmax. We use the microbenchmarking framework that was created inside Jenkins test harness. During the previous phase of GSOC, you can see the blog post on Jenkins.io to know more about it and you can implement those benchmarks in your plugins too. These benchmark reports were generated during the pull request builds and we compared our results to the previous ones using JMH Visualizer. These results were also verified by running compute heavy configuration on my machine and running profiling using Visual VM. Now, the improvements that we have observed after these changes are up to 10,000% in the overall performance of the plugin. So, these are the best case scenarios but it has been verified that these performance improvements have actually been made. Now, I would like to introduce the new folder authorization plugin. This was a plugin that was created during this phase to avoid the performance issues which the role strategy plugin had. Since this is a brand new plugin, it saves us from having backward compatibility from the role strategy plugin. Role strategy plugin is more than 10 years old so there's a lot there and as a new feature or whatever you would call, dangerous permissions are not supported anymore. So, this simplifies the design of the plugin. This, just like the role strategy plugin, this supports global roles and agent roles. The agent roles do not work on regular expressions and we use folder roles for organizing permissions to projects. Now, let's just discuss some features of this plugin. Global roles, just like from the strategy plugin, are applicable everywhere inside Jenkins. The folder roles work on folders from Cloud V's folders plugin and they can be assigned to multiple users and multiple folders at the same time. The features of folder roles, the major feature of folder roles is that the permissions granted through a folder role are inherited to all the children. So, agent roles, on the other hand, allow configuring permissions for multiple agents onwards connected to Jenkins and they work on the full names of the agent. Now, we also have REST APIs for adding and assigning roles and they have full Jenkins configuration as code support. This is what a sample configuration is called and you can just specify the agent role, folder roles and global roles here. Now, I'll move on to a quick demo of the plugin. This is what the UI looks like right now. So, we have a global roles, we have a folder roles and we have agent roles. Now, let me just show you what's going on here. We have an admin role which has permissions for everything. Next, we have a read role which applies to all the authenticated users. This authenticated user group is provided to us from Jenkins code. There's another one just like this. That is the anonymous SID and that is applicable to all users whether they're logged in or not. Now, I'll just show you how this works, how to add a folder role. The first thing we have is we have three folders, root one, root two and root three and we give the read permission to user one using this role. And we have another child folder inside it and we give user permissions for configuring the job. I'll add another role here, I'll call it root two read and this would apply to root two and we'll give the permissions to read the job and to delete it and we just click add role and the role was added. Now, we have the role here and we can just assign it to let's say user two and as you can see, the role was added. Also, let's note here that user one has the permission to delete an agent that's connected to the master, that's test one but not the other two. So now let's log in as user one and the only folder he has permission to is root one and the folders can be added to the bottom to increase the permissions. Let's say he has the permission to configure the project and the folder here but he does not have the permissions to configure job one. In the same way, let's just go to the home page and see the two nodes which are connected and as you can see, the user has the permission to delete the agents but he does not have the permissions to delete test two. Now, let's just go to user two and he has permissions for root two. Now, let's just go back to the admin user and I'd like to finally show you the configuration is good working here. This is what a permission, this is what a permission looks like. This is what a configuration looks like and now these are some screenshots from the plugin and let's just compare it to the latest release and let's just compare the performance of this plugin with that of the role strategy plugin with all the performance improvements. So let's first talk about global roles and so what we've observed over 500 global roles is that the global roles in the new plugin are up to 934 times faster than the global roles and role strategy plugin. This is for a data set of 500 global roles and for folder roles, these new folder roles are almost 15 times faster than an equivalent regular expression implementation in the role strategy plugin. You can see this pull request for the benchmark results. Now, some challenges that I faced during this phase. The first one was to have efficient permission checks and we had a lot of discussion with the mentors, with my mentors to produce an efficient solution for having permission checks. Now, as a benefit, the global role checks now happen in constant time, that is big O of one. Another thing is JavaScript's JSON.stringify from prototype.js from Jenkins Core had changed either prototype.json and it was giving some wrong outputs for whenever I call JSON.stringify on an array. Next thing was configurationless code. So configurationless code uses data bound configurator for data bound constructors, which did not support, which neither supported import nor export of sets. So I had created two pull requests to the configurationless code plugins and their birth has been released in configurationless code 1.24. Now, the next steps would be more performance improvements in the role strategy plugin and improving the UI of the folder authorization plugin and writing user and developer documentation for it. And finally, a one-dot release for the folder authorization plugin. Last but not the least, I would like to thank my great mentors, Oleg, Runje, and Sukund. And thank you, everyone. Thank you to the entire Jenkins community. Please do share your feedback through either the role strategy plugin get-to-chat and or through the Jenkins developer mailing list. Thank you. These are some useful links. Thank you. Wow, this is a great presentation. I would like to open the floor for questions. I think there was a question on Gitter that was posted. Yeah, it was me. Yeah, so is it possible to set permissions for everything under the folder, but not the folder itself? That was the question. No, that's not supported right now. If the permission is for the folder, it is applicable to the folder itself and all its children. Yeah, thank you. Is that related to the plugin itself, or is that the core permission limitation? It's both. For example, to have the read permission to nested folder, you'll need the permissions for its parent also. And so we take that a step further here. So why I thought about this use case, because sometimes it's really useful for bigger organizations, because on the folder level, you can define pipeline libraries, you can define many other folder properties. And sometimes as admin, you don't want your users to modify these properties. So you want to give people a sandbox with everything we configured, so they can create jobs and whatever they want with these jobs in this sandbox, but we still don't want them to modify folders. So yeah, it might be a good use case, but yeah, again, it's rather Jira kick it or whatever to think about it for the future. I'll take a note of that. Yeah, thank you. Is there any other questions? Marquis, do you have questions or other students may have questions? I do not have any questions. Abhidha, I have a question. Okay, so the role-based strategy plugin and the folder plugin, both are different strategies for authentication, right? Not authentication, authorization. Yeah, okay, sorry, authorization. So what are the fundamental differences between these two plugins? The main difference is a role-strategy plugin works on regular expressions, which when they're repeatedly called, it has a lot of performance penalty because of that. And these permissions are very frequent. So in the folder authorization plugin, we just straight up do not support regular expression at all. Just correct me if I'm wrong with the functionality of both the plugins, same? They would allow users to have different permissions, but the role-strategy plugin can be a bit more flexible. This is designed to give better performance at a cost of reduced flexibility. Okay, thanks. It's an awesome project. Thank you. Thank you. Okay. I think we can move on to the... Is there more questions? Sorry, Oleg. I would just want to say a few words, but basically I will repeat what Marky said about Parachay. The project is going really well. Basically, we completed the entire JSoc project except a few bits like releases, but the role-strategy already got great performance improvements. We contributed a generic performance testing framework which is available for all plugin developers in the Jenkins community. And there are some ongoing adoptions already, which is great. And moreover, they will purchase two other projects like Jenkins configuration as code. If you take a look at the last release of JCASC, you may discover that the most of patches have been actually done by ABUDA, but these patches are useful not only for the whole plugin, but also for the entire community because the data-bound contributor is just a core of the integration as code plugin and is used almost everywhere. And I believe that other projects we are presenting today also use this contributor for setting up the instance. So yeah, thanks a lot, ABUDA. I think that the project goes well. It was really nice to see this metrics where we have 1,000%, 10,000% improvements. Yeah, sometimes in artificial use cases, but even for user-provided cases, we have performance improvements something like 10 times and more, which is really great. So I think the goal of the project is fully completed and we go forward by providing new functionality. So yeah, for me, this is great. And thanks a lot for all your work. Thank you. Thanks a lot for mentoring me. And I believe there's a question in the get a chat. I would love to move some of the stuff, especially the global role stuff that we've made for folder roles. But the thing is if we move the stuff from folder authorization to role strategy, that would mean breaking a lot of backward compatibility. So I think they're meant to live together right now. Basically, we had some discussions about making a role strategy plugin pluggable. So having additional selection strategies, not only regress, but for example, folder selector and something else as an extension point. It might be one of the natural involvements for the project. You just, I can just combine these plugins potentially, but yeah, right now it's not available. Okay, are we ready to move on to presentation? Well, thank you very much. This is great. So I think we're ready to move on to presentation number three. And presentation number three is remoting over Apache Kafka with Kubernetes features. And our student is long and the lead mentor is Andre Falco. But today on the call we have Vutuan who is helping with mentoring this year. Vutuan is a former JSOC student who's now mentoring this year. So long, you have the floor. And I would just like to say that Oleg, if you can take over for a couple of minutes, I'll be right back. Okay. Thank you everyone. Okay, thank you everyone. So today I'd like to present about the phase two of my project, remoting over Apache Kafka with Kubernetes feature. And before we begin, so I'd like to reintroduce myself. Long, I'm from University in Vietnam and for the project, my mentor are Andre and Kit, Vutuan, Supun. And Oleg also is a technical advisor. And the project, so the current version of remoting Kafka requires a user to manually configure the entire system, which has many moving parts as a keeper in Kafka. And it also supports dynamic agent provisioning. So it's hard to, it's hard to scale. And for this project, we aim to solve two problems. The first one is an out-of-the-box solution to provision Apache Kafka cluster. And this is what I have done in phase one. And the second thing is dynamic agent provisioning in Kubernetes. And this is what I have been doing in phase two. Okay, let's move on. So let's take a look at the last phase work. So for phase one, I have implemented a Kubernetes factory adapter class. So this class can be used to connect to Kubernetes cluster with different kind of credential, like secretive, secretive, or like maybe five or six type of credential. And the second feature is launching up Apache Kafka as a keeper in Kubernetes with one button click. And also a ham chart to bootstrap the whole system. And in the beginning of phase two, I have also released the 2.0 ANFA and publish a blog post. And this is a screenshot from the launching Kafka in Kubernetes feature. So user can put in the Kubernetes cluster connection information here and then just click the start Kafka and Kubernetes button and wait a few moment and everything will be set and done. They don't have to figure out how to configure Kafka. And okay, let's move on to phase two. So what I have done in phase two is I have implemented a cloud API for automatic agent provisioning in Kubernetes and also support Jenkins configuration as code. And I have implemented, I have integrated the feature with the ham chart and released the data version. So everyone can check out the new plugin in the experimental update center. Okay, so this is a diagram of the cloud implementation. So when user needs to start a job and Jenkins, like Jenkins, if there is no node with a corresponding label is presented Jenkins will ask the cloud to provision a new node. And this Kafka Kubernetes cloud will provision a new node which is Kafka cloud slave and Kafka cloud slave will launch Kafka computer launch with an instance of a Kafka cloud computer. Kafka computer launcher is a launcher from version one, but I have extended it so that if the computer is received in an instance of Kafka cloud computer besides launching a slave, we also use Kubernetes API to launch a pod on the Kubernetes cluster. And okay, let's move on to the demo phase. So here I have a script from phase one, the demo script. Okay, so for this demo, I will use a ham chart to launch the whole system by running ham install the chart. And then when we wait for Jenkins and after Jenkins is up, we copy the password to clipboard. So I don't have to find it in the Kubernetes secret and then open the link in the browser. So this ham chart is based on Jenkins ham chart and Kafka ham chart. And we can do QCTL to check the status. So which just ham install ham install we have Kafka Zookeeper and Jenkins both running and Jenkins may take about three minutes to download the plugin and metadata and initialize. Okay, so my connection is unstable. So I have a script to automatically open Google whenever it takes my connection is slow. Okay, we are still waiting for the Jenkins part. Jenkins is initializing, let's see the log. Okay, and my ham chart is based on Jenkins in stable repository and Kafka in incubator repository. And I also have some ham chart values for the demo Jenkins version. And I use the experimental epicenter to install the beta version of the plugin. Also install job, yes, I'm looking to initialize a job. Okay, Jenkins is up and I will look into Jenkins. In the ham chart value five, so the value five is like a parameter configuration five for the ham chart. And in this I define a JCSC config. So basically this JCSC will config the ham chart with the remote in Kafka plugin and also config job to test the agent. Let's see. So by using ham chart with JCSC, I have pre-configured everything before launching Jenkins to keep a URL, Kafka URL. And this is the cloud. And it has, this is the Kubernetes connection info. We have Kubernetes API server URL and name space. Okay, success, Jenkins URL. So this is basically the agent information description working directory and label. So the label I set here is cloud and this is the demo job. So the job is a simple one. So it do one on the cloud label. So label cloud is served by node and one cloud. So this means when running the job, it will trigger the cloud API and it's a simple job to echo hello world. Let's try this job. And when we start this job, it will look for a node with a label cloud. And if there is no node presented, it will look for a cloud, which is our cloud and it will ask the cloud to provision once agent. And this is it, it provision one agent. The agent name is based on the cloud name and a random string. So when a computer launcher launch the call the launch function, it will also use Kubernetes API to launch an agent pod inside the Kubernetes cluster. So this is an agent pod. It also has the same name as the agent on the master side. Let's check the box description. So yeah, this is the argument. It's the same as here. And it shows the image from the official image from Jenkins slash remote in Kafka agent. Okay, so the pod, the agent is online. And it will automatically run the job. So when we run a job, so when we run a job for the first time on a new agent, it will take a while because Jenkins master needs to transfer all the job files and the classes to the agent. Okay, it run a batch script. It will take a while to finalize the job. But this is just for the first run. After the first run, it will be fast because all the job cache and the classes are presented on the agent machine. So one thing I don't like about the Kafka library because it's to spam me like spam all the log here and that's something I would like to improve in the next phase. Okay, so the job success. And we already have a slave here. You can try to run again. So the second run only takes three seconds. And with cloud API, we can scale the job. Like whenever you don't have enough nodes, cloud API will create an agent and then create a part in Kubernetes. And then we can scale as much as a Kubernetes cluster can handle. And this is a nice change in technology in Clarity. And after a slave is created, it will stay here forever. And you will have either manually or some audio issues. Same here. We have audio issues. Atty, he lost the connection. Can you hear me now? Yes. Hello? Okay. Yeah, I just lost the connection. Okay, I will say again. So we will stay here forever and you will have to either manually delete it or manually implement it in phase three. These are Jenkins can automatically terminate agent after running the job. So now we have to manually. And when we terminate the agent, the whiteboard will also get terminated from the audio. From the audio issues are still ongoing. Okay, we see the next slide. Try to continue, please. Okay. So one challenge, one blocker interface is the SRF version in the plugin palm file is 1.7125. So I couldn't update the version of some dependencies on my plugin like Kafka 2.3 or the new Kubernetes Java client lib library because the new dependencies use SRF 4.j 1.7126 and yeah, this is, and I don't know how to service this because OLS says that we cannot update the plugin palm to 1.7.26. Got any conflict with the old Jenkins core question? Yeah, we can actually solve it. It's not a big deal to solve it for plugin palm. The problem is for your plugin because you need the recent Jenkins with the version to pick up the kicks. So we have released your patch in Jenkins core in the latest week there. So basically if you wanted to include this patch for remoting Kafka, you would have had to bump the dependency. Yeah, okay. Thank you. It's possible, but yeah. So regarding plugin palm, let's take it offline. There are ways to work it around. For example, the most simple way is to subline the version of SRF 4.j as a property so that you can overwrite this property in your plugin. And that's it, it will work. Yeah, that's the correct solution. Okay, so that's something that we may try to do in phase three. And the next phase of phase three plan is, okay, so now we have 2.0 beta version and most features are implemented. And we just need some more in this test to officially release 2.0 version. And the second thing is retention strategy. It's something I said earlier that the agent will stay forever after created. And retention strategy is that user can choose so that agent can terminate immediately after running a job or it may wait for a timeout before terminating. So like the number of agent can scale up and scale down automatically. And that is something I'd like to do. And so for now, there are many new things and there isn't any documentation. And I would want to write more documentation and quick start guide so that new user can get used to our plugin. And the next thing is integration test with Kafka and Kubernetes. So the plugin now has many moving parts. And it would be nice to have an integration test with all the module like Kafka and Kubernetes. And the links and finally Q and A. Okay. So I think there's some questions. Yes, thank you. I'll let you answer them. Okay. So is there any type of Kubernetes RBAC associated with Kafka? Is that part of the ham chart? So yeah, that's right. Kubernetes RBAC is part of the ham chart. So I will try the screen again. Okay. So the ham chart for remote in Kafka agent is a very simple one. It mostly use the power of the Jenkins ham chart and Kafka ham chart reconfigure some small value. And let's look at the Jenkins ham chart. So this is the official Jenkins ham chart and it has already had all the RBAC service account for Jenkins master role and role binding. So the role for the RBAC role for the Jenkins ham chart is only involve the part, get list and create. So that's it. The answer is RBAC is integrated in the dependency ham chart. Thank you. Okay. And now the second question from Markey is, I noticed your code in defining a node part in the node URL. Is this configurable with an incorrect controller? Okay. So this, we can also configure this by overriding but overriding Jenkins ham chart configuration. So, okay, let's look at the default value again. So by default, Jenkins ham chart use a load balancer to expose the service, but I use midi cube and I don't have load balancer. So I have to change the service type to node part. So- Okay. That makes total sense. That answers my question. That's it. And a question from Justin, are you incorporating your changes into the main Jenkins ham chart? Or would it be a separate ham chart? Okay. So I think this will be a separate ham chart. So this is just a use case of the official chart. So I mostly use Jenkins ham chart and Kafka ham chart and override, lots of small override. Here you can see it's pretty long, but because this is for demo purpose, in the actual ham chart, we only, it will remove most of this. So just the minimal overriding setting for the, to install the plugin and configure it so user can try out. So the answer would be, that will be a separate ham chart. And do you have any more questions? Actually, I have a question. The code you're showing there in the YAML, it's not related to your plugin, but these YAML files that you are showing, I'm not familiar with what they are. Like, can you? Okay. So this is the physical ham chart values. And ham chart value is another word for ham chart configuration. And basically in one ham chart, okay, here is the official ham chart and it define many configuration here. And now I am a user of this ham chart and I can override any configuration here. And this first part Jenkins is for the dependency. And this is the configuration I override. So I override the version, Jenkins version. I override the plugin install to the JCSC. That's it. So this is ham chart configuration. The sound is cutting off. Okay, we cannot hear you long. Ham chart value is ham chart configuration. And now we can override setting in the parent ham chart. And in this value five for my ham chart. So for the Kafka ham chart, I just override a small setting so that it only run in me, sorry. The quality of the sound is, it's cutting off. But I think at the high level, I understand your answer. So, yes, you've answered my question. Thank you. Okay, thank you very much. Do we have, is there other questions or comments? Yeah, I had a question about the chart museum metadata for deployments. So basically, once you have ham chart in the repository, it's relatively easy to deploy it to local chart museum instances. But yeah, I was wondering whether you plan to have some automation for that. Oh, that's really cool. I don't know about ham chart museum. So is it, is it, okay. So, yeah, I may write a helper script so user can install the ham chart in ham chart museum. For now, I only plan to host the ham chart in the GitHub repository. But it would be nice if user can copy the ham chart into their own repository. Well, basically there is a lot of machinery around that. So once you get integrated into GitHub master branch, everything goes, it becomes relatively simple. So yeah, there might be few scripts. Okay, probably subject for the discussions. Okay. Thank you. Oh, thank you. Thanks for saying everyone for listening. So if you have any question, please don't hesitate to ask. Very well. Thank you very much, Long for this. And what one did you want to say something? Yeah, okay. So I think in overall long did a good job for this second phase. We managed to deliver our target feature on time with this phase. And so I think we did two release and five beta during this second phase. And so long have was like fixed some box of, some box of exiting plugin. So I very appreciate that. So yeah, we're looking forward to working with Long for the test phase for the improvement. And hope that we can release a 2.0 release. Yeah, thank you. Thank you so much. Okay, this is great. So I would like to congratulate all the students for the work that you have done so far and wishing you the best for coding phase three. And I want to thank all the mentors for supporting our students. So thank you very much. And I believe this concludes our presentations today. So thank you for watching and see you online everybody. Yeah, just thought some bits. Tomorrow we have a second part of presentations. We will have four presentations by five students. So tomorrow it will be not only the Jenkins JSOC, we will have people from outreach joining. So we have another project going on right now. And yeah, there will be also one student joining from another JSOC organization to present her work about Jenkins. So we have the same time for presentations. If you have any questions meanwhile, just a comment in the Gitter Chat. And we can ask all students to add links to their presentations in the abstract document. We have shared in the meeting provides. Oleg, I just wanted to add something. Is that okay? Yeah. Related to my project. So you asked me about the Blue Ocean plugin. Okay, so the present plan for Jenkins is like they want to, there is no concrete plan as of now, but there is a plan to modernize Jenkins. So Blue Ocean would be improvised. And so my plan was to implement the GitLab plugin in Blue Ocean so that I learn about the architecture of Blue Ocean and I can contribute to the modernization of, I mean, the Blue Ocean plugin. So that was my plan right now. Yeah. So I believe for this topic we'll be heavily discussed at the DevOps Vault, Jenkins Vault. So they will be contributed to summit on August 12th. And most likely web UIs and web UIs modernization will be on the agenda for these discussions. So let's stay tuned to see what would be the final outcome of these discussions. And yeah, thanks a lot for your interest in this area. Yeah. Thanks. Okay. I think we're good, Oleg. Yeah, I think too. Thanks again to everybody who was watching the presentations. Yeah, the video will be published immediately once we stop the broadcast. Again, if you have any questions, just join our GitHub chat. Okay, thanks everyone. Thanks. Great job, everybody. Plus one. Okay, I'll stop the broadcast. See you. See you.


Hello and welcome to this session. This is Professor Farhad in which we would look at four different leases and we need to determine which of the leases is a finance lease and which of the leases is an operating lease. So simply put, in this exercise, you want to determine whether a lease is an operating lease or a finance lease. So this is very basic in terms of lease accounting because if you don't know whether the lease is a finance or an operating lease, that's it. You are wrong right from the beginning, right from the get go. And on the CPA exam, you might see a simulation like this, giving you different leases and telling you whether to, for example, from a drop-down box, tell me whether this is an operating lease or a finance lease. It's as simple as that. You could have a simulation about this or the simulation may not be as clear as this where I'm giving you the information. You might be given documents about the useful life, the fair value, maybe an email about the lease payments. And you have to collect the information to collect the information, put it together, then go through the test. So in this session, all the information is given. You have to make a decision about whether a lease is a finance lease or an operating lease. Before we proceed any further, I have a public announcement about my company, farhatlectures.com. Farhat Accounting Lectures is a supplemental educational tool that's going to help you with your CPA exam preparation, as well as your accounting courses. My CPA material is aligned with your CPA review course, such as Becker, Roger, Wiley, Gleam, Miles. My accounting courses are aligned with your accounting courses, broken down by chapter and topics. My resources consist of lectures, multiple-choice questions, true-false questions, as well as exercises. Go ahead. Start your free trial today. No obligation, no credit card required. Now, let's start with lease A. Lease A is eight-year. That's the term of the lease that doesn't tell us much so far. The use for life is 12. The fair value of the lease is 88,000. There is no bargain purchase option. The annual lease payment is ordinary. It means they start a year from now and the payment for all those leases are $10,000. The less or implicit rate known by the less C is five. The less C's incremental borrowing rate is five. So now we're going to go through the test, the five test, and determine whether this lease is a finance lease or an operating lease. The first test is transfer of ownership. Is there a transfer of ownership? And I read all the data that I'm giving. I don't see anything about transfer of ownership. Therefore, we failed this test because there's four tests, transfer of ownership. Burgin purchase price. Is there a bargain purchase price? Clearly it says there is no bargain purchase price. And this is test two. For a lease, it's out. Lease term represent a major part of the expected life. Simply put, does the lease term represent the major expected life? We're going to give it a percentage. It's going to be greater than 75%. Let's see. If we take eight divided by 12, eight divided by 12, we see that this is 66.66%. So the lease term does not represent more than 75% of the asset major expected life. Therefore, we failed that test. This is test three. Test four, the present value of the lease payment represents substantially all the value of the asset. So what we need to do now, we need to find the present value of the payments. Remember, the payments are 10,000. So the payments are 10,000. We have eight payments. And we have to use an interest rate. We are giving two interest rates. And frankly, it's easy here because either rate you would use, the 5%, whether it's the implicit rate or the less C incremental rate. So which of these two 5% you would use? Well, you have to know. If you know the less or implicit rate known by the less C, if the less C knows the lesser implicit rate, you would use that one. And we know that rate. Now, if the less C wants to go out and borrow the money, they would also borrow at 5%, but we don't need this 5% because we already know the implicit rate of the lessor. So what's going to happen is this, we're going to go to the tables and go to eight periods. This is the present value of an ordinary annuity, eight period at 5%. And it's going to be 6.4621, which is 10,000 times that. That's going to give us 6.46321. And that's going to be 64,632. Now, if we take 64,642 and divide it by 88,000. So if we do that, that's going to give us approximately 73%. Also, we failed that test. We failed the present value of the lease payment. Specialized nature with no alternative use. We're not told anything about this. Therefore, we assume it's a no. So if you notice, lease A fails all five tests. Therefore, lease A is considered an operating lease. So the answer will be an operating lease. Let's go to scenario B. The scenario B, transfer of ownership, no. Well, there's no transfer of ownership for all of them. So we already know that, transfer of ownership, no. Bargain purchase price, let's say yes. I can stop right here and I can say bargain purchase price yes. Scenario B is what? Scenario B is a finance lease. So therefore the answer here is a finance. This is an operating lease. Let's go to scenario C. Scenario C, the lease term is eight years. The use for life is 12. There's no transfer of ownership. There is no bargain purchase price for this scenario. Lease term, let's divide 8 by 12. 8 divided by 12 is 66.66 that failed. Just want to let you know that lease B also, lease B, just FYI, if we take 8 divided by 10, lease B would also qualify under this lease term, lease term, because it's 80%. So far we've failed all the tests. Let's find out about lease C if we can get the present value test. Well, again, we're going to take the payment is $10,000, 8 and 5%. It's going to be again, 64,000. But now we're going to compare the 64,000, this number here, to 82. Let's do that. If we let's do it here. 64,000, 632 divided by 82,000. It's going to be less than 90. But let's do it. It's 78. Also, we failed that test. And there is no alternative use. Also, we failed that test. Therefore, we failed all the tests here. We failed all the tests. This is also an operating lease. Let's take a look at lease D. Transfer ownership none. Bargain purchase price none. We already know that the A divided by 12 is 66.66. So we failed that one. Now we have the implicit rate of 6%, known by the lessy, and the incremental rate is 5. Now we're going to do the present value computation, $10,000. We're going to go to the 8. And we're going to go to 6%. And it's going to be 6.20979. So 10,000 times 6.20979. And that's going to be 62,097 rounding 98. Now we're going to compare 62,097 to the fair value of this asset, which just happens to be 64. And we know that's going to be more than 90%. So if we take 62,097 divided by 64,000, it's not more than 90%. It's 97%. This is also a finance lease. So this is also a finance lease. So we have two finance lease and two operating lease based on what we based on the computation. Remember, you have to go through the test, transfer of ownership, bargain purchase. The lease term represent a major part of the expected life. Does the present value represent substantially all the value of the asset? And we measure this by 90%. And here we assume we're not told about any specialized nature with no alternative views. Therefore, for these all four, we always failed one. We always failed five. Those two, we always failed them. Lease B passed the finance under the bargain purchase. Also it passed it under the major part of the expected life. Lease C failed all five. And lease D was a finance lease under the 90% rule, which is the present value of the payments are more than 90% of the fair value of the asset, which is represent substantially all the value of the asset. What should you do now? Well, if you are not ready, if you feel this is what we did is complicated or you don't understand it, stop. You're not ready for the exam yet. This is basic. This is basically determining whether a lease is an operating lease or a finance lease. If you cannot make that determination, you cannot process journal entries. Go to Farhat Lectures and do what? Farhatlectures.com and work, MCQs, true, false. Look at additional exercises that's gonna help you do better. Invest in yourself, invest in your career. The CPA is worth it. It's a long-term investment. Good luck. I'm always here to help you. Stay safe.


Hello everybody, welcome back to another Adobe Premiere Pro CC 2021 tutorial in this one I'm going to show you how to go from black and white to color as a transition Let me show you what I am talking about. Here we go You'll see it started black and white and then it transitioned into color now the original footage is in color So I'm going to show you two techniques here. Let's get going. I'm going to delete all this We're going to start from scratch like we like to do the first step here as I've got some footage I've got color footage to be more specific and I've got this gorgeous little puppy dog playing in the in the grass now We want it to start off as black and white and then transition into color of course you can go the other way and Go from color to black and white, but you got to do one or the other So let's just do it So the first step here is I'm going to move my playhead to about two seconds in and we're now going to go Head and make a cut so I'm going to grab the razor tool and I'm going to hover and Left click on that. Here's what I've done. I've gone ahead and cut out a two-second segment Okay, now I'm going to move my playhead back to the beginning And I'm going to go to the effects panel if you don't see effects Just make sure there's a check mark beside effects under window effects now Resist the urge to type in black and white. I know that is a way to do it But it doesn't do the transition what you want to type in is Lumetri and Then in particular if there's a there's one called Lumetri color video effects color correction Lumetri color Drag and drop that on to the timeline like I've just done there Nothing happens when you drop it on there not to panic again the playhead is at the beginning if you look under basic Correction You'll see that you go to effect controls Lumetri color basic correction You have something called saturation black and white is basically a complete lack of saturation That's all it is so I'm going to go ahead and take the saturation from 100 to 0 and when I do that It's black and white now. It's black and white and I'm going to transition to color So now that I've got the black and white at the beginning I'm going to left-click on this toggle animation stopwatch and now or the toggle animation And I'm going to now move my playhead to the two second mark And it's at this point that I want the saturation now to go actually I'm going to go back one frame Pardon me.  It's that simple guys. Thanks for watching this tutorial ton more stuff coming up stage


What is it? Another case for Nick Carter, master detective. Yes, it's another case for that most famous of all man hunters, the detective whose ability at solving crime is unequaled in the history of detective fiction, Nick Carter, master detective. Tonight's curious adventure. The substitute, Brock. A young man here to see you says he's no friend of yours. Well, hello, Nick. Ellen Marvin. Well, Ellen, it's good to see you again. And what brings you to this part of the country? I came east to get married, Nick. Well, congratulations. Wait a minute, I'm afraid your congratulations are a little premature. What's the matter? I don't know. I can't find her. Can't find her? Well, what on earth do you mean by that? Well, look, it's like this, Nick. Alice Evans and I have been engaged for about four years. But for the past three years, she's been living in South America with friends of her family. She was due back in this country yesterday on the galley, so I came on from Chicago to meet her. Her boat got in ahead of schedule, and my train was late, so we missed connections. I'd already told her I was coming, but in spite of that, she was gone by the time I got to the dock last night. Didn't she leave any message for you? No, not a word. Sad? And she has no friends in this part of the country that she could stay with. Well, didn't anyone at the boat know where she went? Apparently not, Nick. The stewardess says a boy brought her a note, and as soon as she read it, she got dressed and went ashore. There was a taxi waiting for her, and she went off in it. Now, later, an expressman called for her trunks. Perhaps she went to a hotel. Hotel, but why should she do that when I told her that I'd meet her at the boat? No, Nick. Something has happened, or I'm sure of it. Nick, the morning paper says that the Miss Alice Evans registered at the Hamilton Park Hotel. What's that? Would that be the same girl? Here, let me see that. Will you quick? Right here. Well, and she did go to a hotel.  I'll take nothing of it, Alan. Glad you found her. Well, if you don't mind, Nick, I think I'll... She'd better go right ahead. I know how anxious you are to see her.  I'd like very much to have you meet her. Well, Alan, this seems hardly the time to... Oh, come on, no, Nick, come on. I want you to meet her. You'll like her. Well, all right, if you insist. But I've heard it said that three is usually a crowd, especially after two of them have been separated for three years. Taxi! Taxi! Second and fifth rather. I gather that you feel that our visit to the young lady was not a complete success. Nick, something's wrong. I don't know what. So I noticed. That's why I stayed until you left. I tell you, she's changed. I can't put my finger on it, but she's different somehow. Three years is a long time, Alan. Some change would be quite natural. But it isn't that kind of change, Nick. Doesn't she look the same? She doesn't. She doesn't. You mean you don't think she is, Emma Sevens? She must be. Yet? Then you're not sure. I wish her father were here. He'd know immediately whether she's his daughter or not. Where is he? Chicago? I don't know. He told me he was meeting the boat, but as far as I know, he hasn't shown up. She said she hadn't seen him. Well, he probably was delayed in getting away. Look, you don't suppose anything could have happened to him, do you? You know, like so many rich men, he always carried several hundred dollars with him. Well, that's possible, of course, Alan. Was there anything distinctive about his appearance? Well, he was a shortish man, stout, white hair. Oh, yeah, he wore old-fashioned side whiskers. Well, those should make him easy to identify. I'll have Lieutenant Riley get in touch with the Chicago police and see if they know anything about him. Oh, good. Then I'll have Patsy make the round of the hospitals here in town. I'll send Penny to the terminal and the ferries to see if he can pick up any information about him there. Well, we ought to find out something that way. And I think my next step will be to visit the galley at her duck and see what I can learn there. The main reason I'm taking you to see Miss Evans-Perser is that I want you to tell me whether or not she's the girl who made the trip up in South America with you. I understand, sir. Are you the purser of the galley? Probably had as good a chance to see her as anyone. Oh, why, yes, sir. But none of us saw her very much. She took ill right after we sailed and stayed in the room almost the entire trip. Would you say you'd be able to identify her positively? Oh, yes, sir. I have excellent memory for faces. And she was a real looker. She was. Here's her hotel. Come on. Righto, sir. Here, we can take this elevator. Three, please. This is your floor. Our room's right across the corridor here. Oh, come in, Mr. Cardi. Thank you, Miss Evans. You, of course, know this gentleman, Miss Evans. Well, I... Well, let me see. Oh, it's hardly fair to expect her to remember me, Mr. Cardi. She was so ill every time I saw her that I doubt if she'd ever really got a good look at me the old voyage. Oh, I, of course. Now I know who you are. You're one of the officers off the galley here. We came up from South America together. That's right, Mum. See, sir, she knows me right enough. Oh, I knew I'd seen you somewhere. If I hadn't been so sick, I'd have remembered you at once. I see. Well, Miss Evans, our call is really in the nature of business. The first to find a valuable lot of jewelry left behind in the ship, and I was called in to help find the owner. As it was near your cabin, we come to you first. I haven't missed any of my jewels, but I'll let you know if I do. Thank you. Have you had any word from your father yet? No, not a word. Do you suppose anything's happened to him? What did he look like, Miss Evans? Why, he was... He... I'll show you his picture. You can tell better by that. Here you are, Mr. Carter. That's my father. Are you a detective? Yes, Miss Evans. I am. Then you must find him for me. I don't care what it costs. Very well. I'll see what I can do. Shall we go, Purser? Oh, yes, sir. Good day, Miss, and good luck to you. Goodbye, and thank you. I'll let you know as soon as I learn anything, Miss Evans. Good day. Well, Purser, was that the Miss Evans who made the trip with you in the galley? Oh, positively, sir. I'd know her anywhere. You're sure? There's no question, whatever, sir. I'd swear to it on a stack of bottles of foot I would... I couldn't find a thing, Nick. There's nobody in the hospitals who answers to the description of Mr. Evans. I hardly expected you'd find anything, Patsy. But we had to be sure. Did the Chicago police know anything about him? Riley said they had no report of anything having happened to him there. What did Penny find? Well, Penny hasn't come in yet. Oh, hey, Nick. I couldn't find any traces of the old boy at the tunnel. But I did find something at the ferry. What'd you find? Oh, that'll keep, Nick. Right now, I got a taxi waiting outside, and the driver of the taxi is the fellow who took Alice Evans from the boat to the hotel last night. And he knows something. How'd you find him? All the stewardess on the galley appointed him out to me. I'm afraid if I try to bring him in here, I'll scare him. I already asked him a lot of questions. I'll go outside and talk to him myself. Oh, driver, I'm Nick Carter. So what? I ain't interested. But I am. I'm interested in what you can tell me about a young lady you picked up at the galley last night. You took her to the Hamilton Park Hotel, didn't you? All right. So what if I did? Look, you'll save yourself time and trouble if you'll answer my questions. You picked her up about 8 o'clock, didn't you? Yeah, about that. How long a drive is it to the hotel? About a half hour. Maybe if the lights was against you, 45 minutes. And how does it happen that she didn't register in at the hotel until nearly 10 o'clock? Well, how did that? Where'd you go between the time you left the galley and the time you reached the hotel? I stopped over to House and 22nd Street for a while. Did Miss Evans leave the cab? Yeah. She said she wanted to see Winslow's daughter. Said they went to school together. You mean it was David Winslow's house you stopped at? Yeah, I said so, didn't I? Yes, she did. Thanks. Here. This will pay you for what's on the meter and for the information. OK. So long. Find out anything, Nick? That depends, Betsy. Now, Penny, what was the dope you got at the ferry? Well, it's like this, Nick. I found one of the ferry guards who remembered seeing an old guy with big white side whiskers get on the ferry. About the time Evans' train must have got in from Chicago, see? Well, this guard got such a kick out of the whiskers that he watched for the old guy to get off the boat at the other side so he could get another gander at him. And did he? No, the old guy didn't get off. What? Was he sure? Sure. And the old guy wasn't on the boat anywhere. Well, that could sound as if something might have happened to him during that ferry ride. Nick. Oh, Ellen. Nick, I've got some news. Mr. Evans was alive this morning. Is that so? How do you know? I'll tell you. I went to see Mr. Evans' bank of this afternoon to see if he had any word from him. He showed me a check that Mr. Evans had made out this morning, a check for $50,000. Dated this morning? Yes. It was made out to John Smith and endorsed by David Winslow. David Winslow? You sure of that, Ellen? Yes, I'm sure. Why, Nick? Here's why. Last night, a girl who claims to be Alice Evans but apparently isn't stops off at Winslow's house on the way to the hotel. Mr. Evans disappears last night, and yet a check made out by him this morning turns up endorsed by Winslow himself. Hey, wait a minute. That does look suspicious. Certainly does. Patsy, come on in the morning. You and I are going to call on Mr. Winslow. [? ? ?] It's very good of you to see me, Mr. Winslow. I'm Nick Carter, the detective. Yes, I have heard of you, Mr. Carter. And this is Miss Bowen, my assistant. How do you do, Mr. Winslow? Good morning, Mr. Winslow. What can I do for you, Mr. Carter? Mr. Winslow, you know James Evans only very slightly. You acquainted with his daughter, Alice? No, Mr. Carter, I'm not. I see. Did a check of Mr. Evans recently pass through your hands? Why, yes, it did. I cached one of his checks yesterday. Did you know that Mr. Evans disappeared the day before the date on that check? No, I didn't. Well, he did. You don't say. Would you be in a position to know if the signature on the check were a forgery? Well, the signature was genuine all right when Mr. Smith presented for payment a check in the amount of $50,000. I naturally sent the check to Mr. Evans' bank for verification. They said it was good, so I paid Smith the money. I see. You said a few moments ago that you didn't know Alice Evans. Yes, I did. But didn't she call here night before last? Well, yes, she did. She called to see my daughter. They were classmates at school. My daughter was not at home, so she talked to my wife for a while and left. Thank you for your trouble, Mr. Winslow. Not at all. Come on, Patsy. Time for running along. OK, Nick. Good morning, Mr. Winslow. Good morning. Day, Mr. Winslow. Good day to you, sir. Patsy had me tempted to believe what he said, even if I didn't know that he has an excellent reputation in banking circles here in town. Well, what he told us certainly sounded straightforward enough to lay. Don't bother, Patsy. See that man going in the house next door? Oh, yes. What about him, Nick? I saw that man at court a few weeks ago, charged with murderous assault. What? And now we found him going into the house next door to Winslow's. Patsy, why don't you get back to the office immediately? Tell Penny to see what he can find out about that house. The address is 832 West 22nd Street. Yes, Nick. I want to know more about that place. 832 West 22nd Street, Raleigh. No, well, no, Nick. That's a curious thing. One of the boys picked up a bum this morning. And when we searched him, we found a slip of paper in his pocket with that same address on it. Well, Raleigh, hold him. I'll be right down. I don't know, I tell you. How many times do I got to keep on saying that? You don't know who pushed the man off the ferry? Who kidnapped his daughter? Where she is now or anything about it? No, I tell you, no. Who's the girl who's staying at the Hamilton Park Hotel under the name of Evans? Where's the Hamilton Park Hotel? All right, Baker. All right. Guess I must have you all wrong. I'll say you have. You live at 832 West 22nd Street? Well, I don't exactly. No. Who does live there? Oh, how should I know? Where does David Winslow live? Ah, right next. Who's David Winslow? Raleigh. Yeah, Nick? I'm through with Baker. Not the fellow I thought he was. All right, Baker. The guard's waiting for you just outside the door. You'll take it back to yourself. OK. I hope you're getting what you're looking for, Carter. Well, Nick, what did you find? Raleigh. Baker thought he told me nothing. But his answers were as clear as he thought they were. Actually, he told me that Evans was thrown off the ferry into the river and that he was picked up in a rowboat, which was waiting for him. I also discovered that he knows David Winslow and that he knows what goes on at 832 West 22nd Street. All of which, while not conclusive, evidence tells me I'm on the right track. Nice going, Nick. Well, what's next? Raleigh, I want you to release this man Baker at once. Well, release him, Nick. But why? I want to be sure the rest of the gang knows I'm on their trail. The first thing Baker will do when he gets out of here will be to tell him. They'll undoubtedly make some move to try and stop me. And that may bring him out in the open. Benny, what did you find out? Well, I'll tell you, Nick. Whoever's running that gang's keeping it pretty secret. None of my old pals know anything about it. All I could find out is that the address is the hideout of what they call the secret six. Yeah. I ex-convict the car they call a butler. It takes care of the place during the day and keeps it cleaned up. That would be the man Patsy and I saw. What about David Winslow? Ah, nobody connects his name with it, nowhere. You must be extremely clever. Or I'm extremely clever. Or I'm extremely much of a dope. Ah, you're no dope, Nick. Hey, where's Patsy? She asked me to bring her back some peanuts. Oh, she wanted to see that girl who was posing as Alice Evans at her hotel. Hey, wait. I didn't realize it was so late. She should have been back by now. Found this note at her desk when I came in around lunchtime. And, dear Nick, girl who calls herself Alice Evans just called to say she had information on her father's disappearance. When I told her you weren't here, she asked me to go over and she'd give it to me and I could get it to you. We'll take a run over to the hotel and see what she wants. See you at the office when I get back, Patsy. And that was almost five hours ago. Say, look, should we go over there and have a look, see? Well, first I'll phone Miss Evans. Hamilton Park Hotel, that's, um, Shermore, three, two, four, two, three.  Hamilton Park Hotel, good afternoon. Miss Alice Evans, please. Miss Evans, I'll connect you. Thank you.  I'm sorry, Miss Evans does not answer. Thanks. Nobody home? No, Penny, and I don't like it. I think you better get going and... Wait a minute. Nicholas Carter's office. Nick Carter? Yeah? Who's this? If you want to see your girlfriend Patsy again, Carter, keep out of the Evans case. What do you mean? If you make another move to try and find out what happened to old man Evans or his daughter, you can kiss your girlfriend goodbye. It'll be crittance for her. But look, Nick, just because the Secret Six meets here doesn't mean that they'll be keeping Patsy a prisoner here. I know that, Penny, but we saw a couple of members of the gang go in here a few minutes ago, didn't we? Yeah, sure we did. Well, if I can't make them tell me what they've done with Patsy, my name isn't Nick Carter. Well, whatever you say, Nick. You say that man, they call the butlers upstairs in the first floor now? Yeah, he's writing in the back parlor. Then let's get into the basement, quick. Oh, but the door's locked, Nick. It's got a special Townsend lock on it. Well, that won't be the first door with a Townsend lock on it, that my little big clock in this opened. There. Quiet now. Wonder where this door goes. Oh, that leads into the basement of the house next door, Nick? Then I'm right. That's the basement of the house where that banker Winslow lives. He is in on this. Hey, Nick, sounds like somebody's coming down here. You're right, Penny.  Get in here. I'll leave the door open to crack so we can watch him. You're not going to gag me again, are you? That must be Old Man Evans. What's that stuff you have there? Now, if you call that food, you can take it away. Penny, Penny, if one of us stands on the outside of that door, we can grab the butler when he comes out. But don't let him call out. Those other guys might hear him. No, whatever you say, Nick, like this.  Go on, get out. Here he comes. Now, good. All right, let's drag him into Evans' room here, quick.  What's this? What are you doing? You're Mr. Evans, aren't you? Yes, yes, I am. I'm the detective, Nick Carter. Oh, thank heavens. You know where the other two men are that we saw come in here a little while ago? They're probably in the room where the gang meets at the end of this hallway, sir. Butler! Butler! That's Winslow. Quick, Mr. Evans. What does this butler's voice sound like? Very much like yours, except that he had a kind of dialect. No particular country. Just foreign. Butler! How does a butler address Winslow? Just seeing your Winslow, I think, sir. Yes, seeing your Winslow. You called me? I have called you several times. Where have you been? I've been trying to find something in the back of the storage closet. You wish something, senior? Yes. When the boys come in for the meeting tonight, tell them not to leave until I get here, no matter what time it is.  But of course. They must not leave until you come. I will tell them. All right, then. Don't forget. Oh, that was amazing, Mr. Carter. It was almost a perfect imitation. All right, Penny. You better get this butler chapped tied up and gagged before it comes to. Well, whatever you're saying, Nick. Mr. Evans. Yes? You know why you were kidnapped and brought here? Why, yes, Mr. Carter. They want my fortune. I know they've kidnapped my daughter and substituted in her place a girl who looks enough like her to be her double. They plan to have her get possession of everything she can, sir. Then they forced you to write that check for $50,000, didn't they? Yes. But, Mr. Carter, do you know where my daughter is? I'm sorry, Mr. Evans. I don't. But I expect to know very soon. Come on, Penny. Let's get down the hall and let those thugs tell us where Patsy is. Whatever you're saying, Nick. Hold it, Penny. I'll turn the knob on the door very gently. Then when I give the word, we'll rush them just in case there may be more than two in there. Whatever you're saying, Nick. Easy now. Right.  What is it? Nice shooting, Nick. He should have known better than to pull a gun on you. All right, you get up. It's only your wrist that's hurt.  Now drop your guns on the floor. Come on, let's have them. What have you crooks done with my assistant Patsy? You heard what I said. What have you done with her? We don't know nothing about her. No? Well, maybe you don't know it, Mr. But when I get mad, I can be dirty and mean and somebody gets hurt. Now, where is she? I tell you, we don't know anything. Butler! It's Winslow again. Penny, give your gun on these two. They open their mouth, let them have it, and shoot to kill. Butler, why don't you answer me? Pardon, senior. We are having a conference. We did not expect you until later. You are coming in here? I just wanted to tell you that I don't expect to be here. Put him up, Mr. Winslow. I'll do the telling from now on. Why? What's the meaning of this, Mr. Cardi? You can't...  Where's Patsy? Where's who? You heard me. What have you done with my assistant Patsy? I don't know anything about... Where is she? Oh, no, don't... Where is she? Don't, don't break my arm. Stop! And the last time, where is she? Stop it, stop it, I'll tell you. Oh, my arm. Well? She's upstairs. Second floor back bedroom. Door locked, I suppose. No, I'll get her, Nick. I took the butler's keys away from him. Good boy, Penny. Make it snappy. I'll watch these two for a nickel thugs. Yeah, whatever you say, Nick. All right, Winslow.  And if you've hurt one single hair on Patsy's head, you'll be lucky if you live long enough for me to turn you over to the police. She's all right. We did nothing to her at all. Lucky for you.  Wouldn't it have been easier to have kidnapped him someplace else? I had the ferries watched for several days. And found at the time of night, in the bitter cold weather we've been having, a rear deck of the ferries almost always deserted. So we planned it that way. We had other plans ready in case that didn't work out. Oh, Nick, am I glad to see you. Oh, Patsy, are you all right? Anybody hurt you? No, Nick. They were a little rough, but they got as good as they gave me. Look at that black eye on the guy on the left. Good for you, Patsy. Ah, hey, Nick. After I got Patsy loose, I looked in some of the other rooms and I found this dame in the front room up there. Say she's Marion Blake. My name is Marion Blake. You're not Marion Blake. You're Alice Evans. No. No, I'm not Alice Evans. I'm Marion Blake. Aren't you saying that you're Marion Blake because you're afraid the gang will hurt your father if you admit you are really Alice Evans? What? Well, you're quite safe now, Miss Evans. Oh, Mr. Evans. Yes? Will you come in here, please? Yes, Mr. Carter. My father here and free. Yes, Miss Evans. Here he is. Oh, father. Oh, Alice, Alice, my dear. Oh, I'd be sorry about you. Oh, Penny, you'd better go get Riley. You'll find him waiting just around the corner. He can take over now. Tell me where you were. Mr. Carter, I can never thank you enough for what you've done. We owe you our lives, Alice and I. You don't owe me anything, Mr. Evans. Getting rats like these out of circulation gives me more satisfaction than anything else ever could. This is your room.  Good morning, Miss Evans. Oh, good morning, Mr. Carter. Have you discovered anything about my father? I was about to ask you the same question. Have you heard from him? No, Mr. Carter. Nothing. Well, let me be the first to bring you the good news. Good news? Yes. Your father has been found. He's been found? Yes. He was kidnapped and imprisoned by some crooks who were trying to steal his fortune. Oh, my poor father. Where was he found? In a basement room where the gang was keeping him prisoner. Has he told you what happened to him? Oh, yes. He told us everything. Everything? By the way, Miss Evans, I brought a friend with me this morning. I thought you might like to meet her. May I ask her in? Yes. Yes, of course. Ellen, will you bring the young lady in? OK, thanks. Do you recognize this young lady, Miss Evans? All right, Mr. Carter. Can drop that Miss Evans stuff now. I see you know the whole story. Practically the whole story, yes. Oh, Alice, have you met the real Marion Blake? No, I haven't. My goodness, she does look like me, doesn't she? Yes, but she didn't fool me, dear.  Resemblance is certainly close enough to fool almost anyone else, though. Well, she even sounds like me. Miss Blake, whose idea was it to substitute you for Alice Evans? My husband's. He was the head of a Chicago gang. Saw a picture in the paper, and the idea came to him. Her coming back from South America seemed to be the ideal setup for carrying out the scheme, so we came east to do it. We knew Winslow from a couple of jobs we did from Chicago. Didn't it occur to your husband that when you threw my father off the ferry, he might get pneumonia in the icy water and die? We didn't worry about that. We knew he'd live long enough for what we wanted. Why, you cold blooded... Oh, Alice, Alice, take it easy. But did you hear what she... That's all over with, dear. The police will take care of her now. I'm not usually bloodthirsty, but I hope she gets the electric chair. Well, the chair is hardly the sentence for attempted extortion, Alice. And by the time she gets out of jail, she'll no longer be young and pretty. And with the marks that prison will leave on her, she'll never again be able to double for you. This was another strange experience of Nick Carter, master detective, called the Substitute Bride, or Nick Carter, in the mystery of the night ferry. Another of the curious adventures of Nick Carter, which are brought to you regularly at this time by W.O.R. Mutual. And now, Nick, what strange adventure are you and Patsy going to tell us about next week? Next week, I want to tell you about a case that never seemed to be twice the same. What do you mean by that, Nick? Well, what Nick means is this. The case started out as a suicide, turned into a murder, and then disappeared entirely. And I disappeared with it. Well, all this sounds very screwy to me. Are you sure you're talking about next week's story? Nothing else but. But I'm afraid that if you want any more details, you'll have to listen to the story itself. And if you're wise, you won't miss it. It's one of our best. That it is. But for now, so long, folks. So long. So long to you both until next week. In the strange adventure you have just heard, Nick Carter was impersonated by Lon Clark, Patsy by Helen Schott. Original music was played by Lou White. The entire production was written and directed by Jacques McGregor. Next week, at the same time, listen to another curious experience of Nick Carter entitled... This story is a copyrighted feature of Street and Smith Publications Incorporated. The return of Nick Carter is produced in the studios of W.O.R. and is broadcast over most of these stations every Wednesday evening at 8.30 Eastern wartime. This is Mutual.


And the reason I want that is it's real stuff, it's true, I practice it. And I learned things in the book that I didn't practice. And I don't play basketball. And the book's not a basketball book. The book is a life book. The book is a happiness book. It's a blueprint for success book. To kind of put into context, so my first book was Raise Your Game. And the goal of that was to show folks how to reach optimal performance. But then I realized that's only half the battle. Staying there is the hard part. And staying there is more of the long term. I mean, it's one thing to get to the top of the mountain. It's the other thing to stay there. You know what this reminds me of? If I say this with the most respect, it's like the best of Timmy Grover with like the best of Mel Robbins in one book. You with me? When I first listened to the audiobook, I was like, this is so full of just actionable. I say easy. Easy to comprehend. Easy to write down what fills my bucket.   Like, and I like that. You heard me say it like, I like simplify, simplify, simplify. Don't complicate things because most people complicate things. And then they don't do anything. You got to listen to this book. Because it is, it's not every day that you come across something that like, if you consume it, you'll be better. I'm a better person for writing it. I mean, the reason I write books is to help me improve in the exact material that I'm writing about. I write the book that I need to be reading myself. We have been conditioned and taught how to start and stop, but not sustain. And I thought I would use that lead in because it's really the heart of the book about why sustaining is so vital to our success. I remember vividly back when I was in the basketball training space and I was at an event where there was a bunch of NBA rookies who had just recently been drafted and a veteran player said to them, and he said this with a smile kind of tongue in cheek. We just said, hey, congratulations on making the NBA. I know this has been for most of you a lifelong dream since you were first able to walk or dribble a basketball and it's finally come to fruition.  But I want to tell you that was the easy part. The hard part is actually staying in the NBA. But I started to figure out that there was a slight difference between what you need to do to reach the top and what you need to do to stay there for long periods of time. But the most important part of that is with a sense of joy and fulfillment. Stay at home mom could read your book and say, you know, how do I not get burned out in this?  I've struggled with stress, stagnation and burnout at different times throughout my entire life and career. And I find it both liberating and somewhat therapeutic to kind of meet that head on and right about and speak about from stage the things that I'm still working on. So I'm not coming from a place of mastery and any of this stuff, but I'm starting to figure some things out that I believe are putting me on the right path and that I always want to share that with others. And anytime I hear feedback that that work is helpful, you have no idea how much that means to me.