Hi everybody, welcome to the second Google Jenkins Summer of Code presentation sessions. Today we conducted this session as Jenkins Online Meetup, so we'll have some introduction and then the students will do their presentations. Let me share my screen, okay, do you see my screen? Yes. Okay, so we have all JSOC students on the call, plus some mentors, plus some participants. If you want to join the call and ask questions, we also have Jenkins Gitter Chat, there is JSOC-SIG there, and you can find the participant link there, and actually it's a main channel for asking questions, but if you also want to ask questions without using Gitter, we have Jenkins Chat in RC, so if you ask questions there, I will process them and ask them to participants. So yeah, let's start from the presentation. So as I said, this is the second session, the previous one was four weeks ago, and all the students have already presented their projects, but today we do these presentations from scratch. So if you have not participated in the previous Meetup, please stay, you will see all the introductions etc. Yeah, as I said, there are two Quay channels, so please feel free to join any of these channels. Okay, so just to provide some introduction, what is Google Summer of Code? So Google Summer of Code is the biggest open source initiative and event for students. So the thousands of students participating in Google Summer of Code, they join different open source organizations and work with mentors from these organizations in order to develop some open source code, and yeah, this year Jenkins participates in Google Summer of Code. This is our second year. We have participated two years ago, we had five projects and some projects were successful, so it was a nice experience for the organization and we want to participate again and again. And yeah, this year we joined the project and we have three students. So Srinjushank is working on a core coverage API plugin, Wutong is working on a remote over Kafka, and Abhishek Gautam is working on a simple pull request job plugin. If you want to find more information about these projects, you can go to the project page, Jenkins.io, Projects.jsoc, and you can find all information there. So you can go to any project, for example, this remote and cover message bus, and here you can find all information about the project, links to the presentations, to the previous blog posts, and if you want to find more, you can also join a project specific Gitter channel and project GitHub repositories. So what do we have now? Abhishek is a multi-month project. It has started in February, now it's July, but we also have four weeks of coding ahead. So maybe after these months of coding, we'll have a second iteration, but even now all the projects have reached the demable stage that you can find this project in Jenkins Experimental of these centers. So we decided that it's a good opportunity to showcase these projects and probably to get some feedback from the community. So let's continue these presentations. Let's start from Shengyu, and then we will proceed with other presentations. So Shengyu, are you ready? Yeah, I'm ready. Okay, so if you share your screen, I'll make you a presenter. Yeah, so can you use the mass screen? Just a second. So yeah, I've presented you to everyone, so now all participants should be able to see it. Yeah, okay. So I have participated in this year's G-Socker G-Socker Check-In project and worked on Code College API programming. My mentors are Stephen, Shopen, Jeff, and Olican, they give me much help in this project and thanks them. So about me, my name is Shengyu Zhen, and I am a third-year student in computer science and technology at Henan University from China. I like programming and reading, especially reading some books about history and philosophy. So in phase one, I had planned those things, prototype based on cabal-tula blockchain data model, integrate other Java code technology tools like J-Coco, O2-detect support, health report support, pipeline support, and threshold support. Also I have modernized the report and like some unit tests. So in phase two, I had planned to do those things, APIs which can be used by others like integrate cabal-tula programming with Code College API programming, like provide Java API and REST API for getting college information and implementing abstract layer for other report format like JSON. Also supporting converters for non-Java language. I only support Java language college tool in phase one, supporting kind of reports using a build in college result page and refactoring the configuration page to make it more user-friendly. So first, I have done the integrate other plugins. So for now, I integrate a cabal-tula plugin with Code College API plugin. And I also had a new API option in cabal-tula plugin like the screenshot. So now we can enable Code College API plugins in cabal-tula plugin when we click this checkbox and it will generate a new format report with new, with more fancy UI chart. Also I will provide some more REST API.  So I will demo it. So as you can see, we have a college result page in the Jenkins. We can get a result page by this. We can get a college result information by this, in JSON format by this link over here. And this, it will get more information. Also you can get a trend data from more, yeah, trend data also by XML format. As you can see, we can also get a trend data. And also the last trend and last college data, besides the REST API, I have also supported more college calls like LLVM college JSON format report. And you can see more information in this pull request. It will generate LLVM or college report, it will show LLVM or college report by more fancy UI, like that. Yeah, we can get a function first under the REST college data. Also I have other improvements like add source code navigation in college result page. So for now, we can have, we can use the source code with the college information in our college result page. And also we factor the configuration page to make it more user friendly and the user can now more easy to use or plug in. So the steps of this one plan is that I held down those things, except the supporting companion reports within a builder. In phase three plan, I plan to supporting more college tools like a g-call, like a college.py and other college tools. Also I will polishing the code fixing bugs and writing developmental documents and user documents and final I will releasing the plugins. So this is the links for later results. You can get more information from those links. Yeah, thanks. Thank you for the presentation. So I've got a question. Could you please show code coverage browsing if possible? I mean in your demo? Oh yeah. You like that? So what's the question? So is it possible to see code coverage statistics? I mean is it possible to see code and to see code coverage stats for it? Oh you mean show the source code? Yes. Yeah you can see the source code with the college information in this level. Oh that's cool. So it was one of the questions from the previous demos. And yeah, Shin Yu has implemented it maybe in two days after the meetup. Yeah, thanks for doing that. So let's proceed to other questions. So Jason was asking about an usual format of API for trends. So Jason maybe you would like to ask a question directly in the chat. Yeah, this is on the call today. Yeah, great question. Okay, about trend APIs. Oh right, yeah so well normally in Jenkins you have different model objects and then they have an API get API method and then the API object serves all of the export API. And I just saw a strange URL pattern here that I never seen in Jenkins. So I was curious about that. Oh yeah, so in Jenkins we can get an object by URL. So API actually is not a normally API. It is an object and I will show the code for you. Yeah, wait for a minute. So as you can see API actually is not returned API object. It will return the rest for coverage wrapper. And in this class we have API returned. So we can get a rest for coverage wrapper by visiting the API and also get real API information by source method. I suggest to make this consistent with everything else in Jenkins. I suggest refactoring this so that the first class, so that coverage result has an API get API method and then it also has a coverage trend tree get trend method and then coverage trend tree has a API get API method. That would be consistent with usual usage in Jenkins so that each model has a slash API slash XML or something like that. Oh, I will look at it. Yeah, it will look better in the UI also. There's reasons to do that with the automatic API link that you get at the bottom of pages and that sort of thing. Yeah, you're right. I will create a ticket for it. Thank you. Okay, JC, you had another question, right? About levels of information. Right, so yeah, it's been a long time since I looked at it but I sort of remember that maybe it was Chococo could track coverage of an if-then statement on a single line of source code and Cobertura could not do that or maybe it was Emma or some other, sorry, Clover or something else didn't track it. So I was wondering if the API has a way of handling tools that have different levels of detail. Some tools may keep coverage per line number. Some tools may keep coverage with more level of detail. Anything like that? Or you may add a search code, like if the coverage of a class is lower than some number, so like that? No, no, it's more that if I remember some, here I'm going to type an example here, that some tools are able to have finer levels of detail. Yeah, so maybe you could show how the code is organized in terms of multi-language support because it seems to be closer. Oh yeah, so for multi-language support? Yes, related to multi-language support. So for now, I have a multi-language support, as you can see, it will also put LLVM and Java. So we have both LLVM functions and Java class, and Java matters in the same aggregated report, but it is still a little back, I will fix them later. Yeah, we have a collateral report. Yeah, that wasn't actually my question. Oh, I'm trying to get work in Gitter, and I'm not having any success with Gitter today for some reason. So I guess it's your question about, like, if one of them reports things like branches and the other ones don't? So I think- If you look at Gitter chat, sorry, I finally got it to display properly. It took me some time. Oh, okay, so yeah. Some tools will be able to say that do something else has been covered by your tests, but do something has not, for example, because rare condition was never true during your test code. Yeah, okay, I will look at it after meeting. Maybe a feature of Jococo or something, I don't remember. Yeah, I also don't remember that. Actually, maybe it makes sense to talk about how plugin developers benefit, and which features they get if they integrate with the plugin. Because yeah, since JC references these conditions, it seems to be one of the topic for generalization, like we did for thresholds and added multiple options to a Kuberstura plugin. So maybe it makes sense to talk a bit about such features available. Oh, yeah. Yeah, so if we integrate a multiple- Wait a minute, let's ask. You mean we can specify different thresholds like that if we integrate a multiple-language-tool, we can specify it separately? Yes, something like that. Actually, what I wanted to say is that since CodeCoverage API is an intention to offer reusable features and reusable functionality, it means that every plugin integrating already gets some edit value. And the idea that this CodeCoverage API will be not only API, but some edit functionality provider. So for example, once you integrate a Kuberstura plugin with CodeCoverage API, you get Trent API, you get these thresholds, I mean global ones, and you can also add things like, for example, parallel publishing for Pipeline once it's ready. So what I wanted to say from my point of view, that this plugin allows offering such features and make them reusable. And for example, and for example, Shen Yu has implemented a new plugin for LLVM. It's not a new plugin so far, but previously we didn't have LLVM support in Jenkins at all. Any user who was using LLVM CodeCoverage, they had to convert the data to Kuberstura or whatever other format as a separate tool. And now it's possible to just write the implementation of few extension points and get it working. Oh, yeah. So for example, we have LLVM support. So we can separate it from our plugin and make it as a new plugin like that. So user can just add our plugin dependence and just implement our LFAT to use our new feature like that. Oh, yeah. Maybe I'm not understanding. Yeah. Sorry if I confused you a bit. So thanks for the presentation. I see no other questions so far. So maybe Jeff and Steve and Supoon would like to say something about the project. Yes. So I guess I could go first. So this is something that the Jenkins community and particularly people that work with CodeCoverage plugins in general have been looking forward to just kind of finding a way of having a common way of generating reports. And as a user of Jenkins, we spend a lot of time looking at CodeCoverage. And we have lots of different types of things that we build, JavaScript, native, mobile, et cetera, with different report types. So we're pretty excited to use the results of this. Yes, thank you. Yeah, I agree also. It's coming along perfectly. And I'm kind of excited to see the end results as well. It's not the end results. We still have one month ahead. So yeah. We're almost there. Yeah, right. So if anybody wants to provide feedback, it's a good time. Yeah, I think he's doing a great job. So yeah, I'll be waiting for the end results. Me too. So yeah, thanks a lot for this project. Maybe last question from JC before we move on. What is the storage format when using the new API? Still using the binary formats or a new format? Or using a simple file XML format or for collateral report. Yeah, remove some. Yeah. So you're taking the Cobra, for example, the Chococo, I think, has some binary format that it defines. So you're parsing that, throwing away that file, and then saving an XML file using the data you defined. Right. Yeah, like that. Yeah. Just parsing as a format report into the simple file, simplified a collateral report. So is that parsing done on the agent or on the master? Oh, I think it is done on the... It is dependent or where the report is, I think. Right. Yeah, I'm saying if you ran a build on an agent and say, Chococo, report outputted on the agent, do you have the agent parse it and send back your generic object structure to the master? Or does the agent send the Chococo binary file to the master and then the master parses? Oh, yeah, I understand. It will send the file. Okay. So it's master side parsing. Okay. It would be possible to implement the agent side parsing later, but yeah, both approaches have their own advantages and disadvantages. Actually, it's not that difficult to implement another implementation if we need. Thank you. Okay. So thanks for the presentation. Let's press it with the next one. Wuton will present a remote over Kafka project. Wuton, are you ready? Yes, I'm ready. Let me see my screen. Okay. Can you see my screen? Yes. Okay. So hello, everyone. This is a second phase evaluation for Google Summer Code. My name is Wuton and my project is Gentines Remoting Over Messages, Mass and Q. So first is some quick introduction. So I'm a computer science student from Singapore and working together with me in this project. I have Oleg and Supoon as a G-sub mentor. And also I have the support from Jeff and David. They are developer from Remoting Project. So what's this project about? So we have the current version of Gentines Remoting. We use PCP for direct master and agent communication. So they are accepting the problem with these JNLP protocols. First is if the connection or agent fails. We have the build fails and we have to start again. They are also the issue with the traffic prioritization and multi-agent communication. And this impact the instability and scalability. So the goal of this project is we want to make use of the message mass technology and we decided to use Kafka under development as a plugin to add a file tolerant communication layer in Gentines. So this is an overview design what we have in the first phase. So the project consists of multiple components. We have the master side with plugin. We have the Kafka global configuration where we can specify the host and port of the Kafka broker. And also we have a Kafka computer launcher which uses a custom command transport which creates producer and consumer instance to do the communication. From the agent side we also have a custom engine. We also use the new command transport. And also we bundle the remote engine from the agent side. So now the communication we not using direct TCP from us direct TCP between master and agent. But instead on the communication is done over Kafka. So the summary of the first phase we set up the local components. Then we do a POC for the command transport implementation. So in order to do this we have to pass the remote thing and the call to make things easy and extensible. And we decided to use Kafka as a final implementation for this project. So you can find more information about this the first thing through my blog post. So for the second phase we want to improve the security and reliability of the current plugin. So we will support the we decide plan to support the security for master and agent connection with authentication and authorization. As well as the secret exchange like we have something similar and in JNLP. Also we want to improve the existing producer and consumer model to ensure reliability. There are bugs in phase one and we continue fixing it in the second phase. And we want to in this way we plan to release to receive the feedback from the communities. So this is our updated design for the second phase. So we support the Kafka with security enabled. We can secure this by enable SSL. So from the master side where we conflict the Kafka. We integrate with credential plugin to let users to enter the credential. The username and password to connect to Kafka. And so there's another component in yeah so my mistake so this would be inside. So so this Kafka secret manager is in charge of in charge of exchanging secret with agent. So in order to do that from the agent side we have a client listener which is run in a separate thread to listen to secret initial message from master. So all the communication now is done through a secure channel. Over Kafka so there's also an improvement for the producer and consumer model implementation. So be previously we use dynamic partition assignment. But for this phase we decide to move to manual passion partition assignment for Kafka producer and consumer. So when this implementation happened the benefits we reduce the number of topics for each condition and also the consumer group need to be used. So next for the next part of the presentation I will show a demo for the plugin. So as we continue from the last way we can conflict the Kafka things from from global configuration if we install the plugin. Here we have an option to enable or disable the SSL with credential. So first I will demo with enable SSL option. So we can create a new agent here and choose with Kafka option. So if we click on this enable SSL we need to provide the username and the security option. So if we go here we can see the script to run the agent from a Java. We have the secret parameter which is it has using hmark algorithm and if we copy this script to run the jar we need to enter the password to connect to master to Kafka and master. So upon connection we have the agent is connected to master. We can see the command transport I mean all the command things running from the terminal and we have the agent connected successfully. So this is a new feature with the security enable. We can also use connect to Kafka cluster with our security. So I will delete this here and then I change the configuration to not using SSL. Then if we we're not using SSL we have the flag here so that this is a non-secure cluster simple we copy and paste and we have the master and agent connection over Kafka. Okay so for the next part of the demo I will I will so run I will try to run a sample pipeline over this agent. So basically I have a pipeline here a sample pipeline here which take which run run the pipeline of this sample project so I can try to run it and we see how okay so if I start running it you can see the command transport the command is sent from the log here and see the console output is running in the agent side which is a lot of command transport and also we have I also integrate the this too which is used for administrator to monitor Kafka where we can see the graph and things the numbers like that and I think this might be useful in the future yeah so you can find the use of the tool in local compose I put it in local compose for this project uh yeah so we have the pipeline finished and is successful uh yeah and we can see all the components from the uh so this is the end of my demo and I will continue with the presentation uh so yeah so for the current status we finish the security support we also finish the improvement of producer consumer model we release two unprivileged and under experimental update center and so there's a minor feature is the support of Cloud Cloud Manager in local compose for backfishing is the continuous progress and we will continue is we will continue it for the third phase yeah so for the next way plan is we want to our main objective is to release the 1.0 version because it's the last day of rule or summer code so to do that we want to do a lot of packaging work and also the test automation for the plugin and then if time permits we can try to investigate on the chunking capabilities for catch channel as well as the consumer pooling or nl options uh so this is a useful link for my project you can see the jitter or jithub repository as well as my proposed about introduction introduction proposed and unfair release proposed uh so this is the end of my presentation and time for qna yeah thanks gil for listening yeah so jesse had some questions about the connection logic so maybe we could start from them jesse yeah i just wanted to know a little bit more about the management of agents so at least with with currently released launchers there's sort of two different styles so one style is the so-called jnlp launchers usually not actually using jnlp where the agent is responsible for connecting to the master um and it expects that the master already has a node defined with that name the agent passes some secret and if the agent jm dies for whatever reason then the agent computer has to restart it by running some kind of service or something like that and then the other style that the other launchers use is that the master runs some command which causes the agent to have a virtual machine to be started remotely using ssh or something like that and those and you would choose one or the other depending on how you want it to manage nodes so that's especially important if you have elastic cloud systems so if you're trying to run builds on uc2 for example then you really want to know what's the easiest way to you know get everything up and running from scratch on a new uc2 computer so it's just wondering how that's managed when you're using the kafka computer launcher oh okay so i i see the question so actually the i see the last question is about the recognition actually this we haven't been test yeah i actually i haven't been test testing it like the agent die in the middle of buildings or correct but uh we have uh so uh how do you say because we have the agent is running and it has a separate thread it had a separate thread for receiving the secret the initial secret exchange so it means if the master try to connect if the master try to connect it will i mean it will respond again but yeah i haven't tested the things like feeling maybe we can try to do it in the first phase maybe you could show the current connection logic so it may answer some questions to jc yeah so as the listener for the kafka connection that's something that's running inside the agent jbm yeah we okay okay i can show the uh for the agent right yeah so for the agent is first is we i i create a new thread for the can see my screen yeah so we create a new thread to listen to for for secret so whenever the agent receives the secret it will acknowledge and start and will start the engine it's a custom engine uh so the custom engine will create the command transport and it will connect to kafka it will start a consumer and producer and connect to kafka to listen for message is answering the question i think so so as far as i can tell it from the perspective of a jenkins administrator it works exactly like the nlp type page of this today you have to start some you start some java process on the computer you give the jenkins url and some authentication that has to correspond to an existing node definition on the jenkins master and then at some point soon after that that connection is made and it becomes an agent and if that jbm stops for whatever reason then you have to start it again from the it's a bit different um so actually both agent and master they connect to kafka but if you talk about the jenkins remote connection it's been initiated by master so it works similarly to ssh slaves plugin so master initiates the connection but yeah the assumption that both master and agent are connected to kafka so master sends a connection request to agent then agent verifies that everything is fine sends a response and then master verifies that secrets are fine etc and then it establishes connection but yeah they think that master still has all monitoring logic so pink thread and all other monitors so master is able to really initiate the connection and once master initiates the connection as v2an said the connection pool should be initialized so i think that the implementation is different from jnlp in terms of implementation and it should be more uh reliable uh one one point is because we use kafka so all the messages are stored there so it means the the features of recovering after fill i i haven't tested that yet but then we have a uh a bus in the train right so we can we consume the message it will restart the agent again we will try to see it in the first phase if we use dcp the things are lost but now we have a middle storage so yeah so yeah if you use kafka in standard implementation i mean without storage persistency then of course if kafka days the messages are getting closed but for the rest the connection works fine so i spend some time on testing that and for example if you bring down kafka and restart it master connects if you bring down the agent and restart in some cases it can even continue working natively if there was no monitor interruptions so it means that if network breaks between agent and kafka then the connection can be restored and if you make kafka fault tolerant for example using message persistency using high availability of kafka clusters then you can say that communication layer results fault tolerant so we need to experiment with that but from architectural standpoint it should be possible even now right yeah you can experiment with things like using low level linux network commands to simulate having you know to simulate a network complete disconnection or to simulate network hangs or something like that or theory can even do simulations of packets being sent in one direction but not the other and that sort of stuff yeah we have some test automation planned for the next phase and yeah of course non-success pass tests for network disconnects will be in focus because it's what it's difficult to heart it sorry it's difficult to test it reliably when you have no test automation is there is there any plan to integrate this into any cloud provider plugins because basically anything anything that defines an elastic cloud in Jenkins has to know something about the launcher in order to make a connection to a newly created computer so it would need to be explicitly integrated with important cloud plugins in order to be useful yeah so we have a ticket i think we have a ticket for for integrate with the cloud api property but we haven't we haven't started hooking on that yet so not sure it can be done on test phase so we have this ticket for the cloud api implementation yeah so it wouldn't be a single i mean it wouldn't be a plugin integrating remoting Kafka with clouds it would be that for any cloud plugin that we have in Jenkins we would need to add a new option to use a Kafka based agent rather than a dnlp based agent so it would just be patches to patches to existing cloud plugins yes yeah so this i think could be done on multiple levels and and yes if a plugin for example docker plugin if they support custom computer launchers it can be probably done even now the only problem is to pass secrets to the agent side but without authentication i bet that we can make it work in now because no i don't think it's possible because what Jenkins or does provide interface that allows a cloud plugin to use a launcher provided by a different plugin it doesn't know about but that only works for master to agent launch methods like ssh yeah computer connector but that assumes that the master is doing the work to create the machine and set up everything including starting the jvm and initiating the connection and everything like it doesn't that doesn't really work or jnlp type launchers where the agent is connecting back to the master which is what this is not exactly because as i said before master initiates the connection so master starts the connection chain and it means that the only prerequisite is that by the time the master starts connection chain agents should be connected to Kafka right well yeah master may be sending some messages to Kafka that's fine but from the perspective of Jenkins it's still the same that master that the master has to assume that the agent computer has already been configured and it has this jvm running and the jvm is connected to Kafka and all of those preconditions are there right so we already all like ssh launcher where the master really does all of the work to take a generic say linux server and get everything needed for remoting torrent okay yeah maybe we could take it offline but yeah i'm pretty confident that it's possible because even now which one has created a packaging for agent in docker and when you start the package the agent connects to Kafka so it means that if we take docker plugin with Kafka launcher it will firstly start container and container will connect to Kafka and then the launcher starts and master connects to the agent so theoretically it should work oh yeah yeah it can be made to work i'm just saying that you can't use the computer connector api which means you need to patch every cloud plugin like docker plugins separately okay yeah i propose uh to take a phone line offline for example tomorrow we have a status meeting at the project so maybe we could discuss it a bit more there okay okay so i see no other questions in the chat and yeah thanks again jessie so just to provide some feedback from the mentor side yeah the project looks really good and we've got a good progress yeah remoting itself is a pretty complicated area because you need to study a lot of things and yeah that's why we decided not to implement cloud providers in the first iterations because it would make the project even more difficult and yeah we focused on simple launchers but even with that it was a serious ramp up and what one was really successful at studying the code base he contributed some patches to remoting itself and we already got this patches in weekly and yeah i think that the project is doing really good and after the first phase we've got one thing which was missing for productization security so now there is ssl encryption and if you want you can also play with end-to-end encryption which is also supported by kafka so yeah i think that it's a really good progress by this stage and yeah i enjoy the project i'm looking forward to see how it gets to the release and adopted in the community supon would you like to say something yeah and yeah great to see project is on track and now we have spent much time with kafka and so looking forward to see the release version 1.0 soon so yeah as you mentioned he's doing a great job so yeah okay thank you so any last minute questions i guess no so let's proceed to use the last presentation so abhishek will present pipeline as yaml or symbol pull request the job plugin so this story has two names abhishek are you ready yes i am ready okay so the floor is yours okay so are you able to see my screen yes okay hi everybody i am abhishek gotham working on gsoft project uh named simple pull request job plugin but we decided to change the name to pipeline yaml so i am a third year student from cumbersyn's background from wish wish were national institute of technology in india i'm a regular comparative programmer i have done two internships as game programmer as well and i am very interested in automation so that's what motivated me to participate in this talk project with jenkins so the problem is that jenkins pipeline is groovy dsl and it is very complicated even as even with declarative pipelines and the main aim of this project is to define a viable definitions to to for the pipeline projects okay so there are there is some prior work to this and one is travis yaml plugin it runs travis yaml yaml as jenkins pipeline job and it does not support any extra pull request and also it doesn't make sense to run any any configuration that is for another platform another one is code ship plugin and it converts steps dot yaml and services dot yaml to scripted pipeline code these yaml files are supported in code ship ship platform and yeah this plugin has never been released say third one is jenkins pipeline builder and this this does most of the work but it is a non java java based tech tool which cannot be converted into a jenkins plugin easily okay so my project objective is to build a plugin which which using which we will be able to define pipeline jobs as viable my mentors are martin aunga christin wetstone jeff canark and oleg nano ship yeah so as i told you previously that the main aim of this plugin is to define a viable file using which pipeline jobs can be configured it should also intact with bitpocket server bitpocket cloud git lab and github also it should detect some presence of some reports which are present in conventional location and publish them and it should also publish build result build status so design of this plugin we decided that this plugin will be built on top of multi branch pipeline plugin because it has a nice interface to show branches and pull requests separately it can also detect the trusted version revisions of the in the repository and automatically get them and is it also has functions to publish build status to the repository so next thing is convert we have decided to convert yml configuration file to declarative pipeline and we will be we are using jcast plugin to configure the steps and get the step object to generate a pipeline snippet or for a step okay one more thing was decided that to specify any scripts and user scripts to run users will be giving only the relative path without the extension of the script and the plugin will detect if the machine is unique then it will append .sh to the script and .sh script will be called else it will append .bat and the bat script will be called so till coding phase one we had a git push step which is used to push the changes to the target repository and build and test performed by user defined scripts called from jenkins yml file agent configuration was also there in jenkins yml file and we were able to have j unit reports find bugs reports and save artifacts from the yml file and a basic interface for converting yml file to pipeline home was available so current features we have a step configurator which is based on jcast plugin this is used to get the step configurations from the yml file and then convert it to the pipeline script but it has some limitations what i i found two limitations they are that it has difficulty with nm parameters but it is resolved recently and it will be fixed in next release of jcast plugin next thing was it has difficulty with some classes like diratest data publisher.class and it is not been fixed till now okay so a specific format for jenkins yml file has been designed and details about that how what are the significant section and how to construct the job using yml file will be there in the blog post blog post is not ready till now it will be in tomorrow okay tools property in agent section of yml file has been added so that agent will be responsible for the overall configuration of the machine some tests for the plugin also has written and i was using manual indentation and manual tabs to generate the pipeline code and that was removed in this phase so the step code generation process is like this is we have a j unit step here okay sorry we have a j unit step here and user wants to do all this thing so we will parse this yml and then pass it to jcast configurator then we will get a step object which we will pass to snippet uh snippet code generator and we will get a snippet for the step that has been defined by the user you can see here example of yml file okay so you can see here that we have an agent agent section here and we have tool section here we can define tools and the type of the agent we want then we have a configuration section in which we have push pr on success variable so if this will be true then the then the changes will be pushed to target branch if the build will be successful and all tests will are passed we have another thing in configuration section this is a trusted trusted users which will be approving the prs and we should start a build one of them will approve the pr then we have a remote sorry we have a environment section in this we can users will be able to define any environment variables and the credentials they are going to use in their scripts then we have stage section in which users can will be able to define all the stages that they want and how they want the build to run also if user wants only a one stage only a simple stage then we have an option of we have a option of one section it's called steps and users users can just give a list of steps to run it and the name of the of this stage will be built in the Jenkins UI plugin configuration okay so how should we configure the configure so that we can use this plugin so we need to define we need to create a party branch pipeline project yeah and we can get a branch source get get bit but get get have whatever and we can give credentials owner depository and the code request behavior we want and then in build configuration we have to choose by Jenkins file by yml and save the save the save the job and we will be able to use the plugin okay and okay for the demo i have i have a job already be configured and i have built this pr pr number three and the yml file for this is yeah this one we have we have configured agent as any and we have three stages in it first and we have a step called a search will which will call us script and in build and in test stage also we have test and build script and we have our private effects that so that we can archive the artifacts so you can see here this pipeline for has been generated and the build was successful okay so plan for phase three is to test multi branch pipeline features such as webhook support we want to include webhook support also here so that whenever pr will be created and approved it the build starts automatically and and the part in which users will be able to give some trusted usernames so that those if those people will approve the pull request then only the build will start has not been implemented yet so that is also one thing then we should we want to finalize documentation for this and release the plugin and after the release we want to support when when declarative pipeline declarative uh directive and we want to support hierarchical report types we have a report section in in the Jenkins final file uh which only supports xml xml reports for now but we want all the reports to be published by that section only so that is another thing and some tests unit test and ats test needs to be written and automatic workspace cleanup when pr will be closed this feature we want we also want to support and one more thing is we want to refractors snippet generator uh that it's a function to generate the pipeline snippets and we want it to refractor to extensions it's yeah so these are the links for data chat and demo project tree or the project repository and yeah thank you and time for questions okay thank you Abhishek so Jesse raised a lot of questions about the implementation in the chat so Jesse maybe you would like to ask some of them um yeah not so much about implementation just about the goals of the project I guess that there seems to be there seems to seems to be a lot of different features here and some of them overlap with other stuff that's that happens in other plugins or could happen in other plugins so I just wasn't sure what the overall goal for this was and how it would mix with this mix with other plugin features that get developed in the future I think that's what most of my comments were about I guess maybe this is more a question for Martin that's a good question Jesse um at the start this plugin the initial idea is to is is is to give the user the ability to have a very very short description of um configuring a pull request I guess configuring a pull request job and doing this with the YAML file where the user would simply declare the very high level I guess configuration options of of of running a pull week of building a pull request that seemed like something interesting to have because I mean I guess he's asking about sort of scope scope thing it's like um like a pull request approvers feature so I mean that's something that that really applies equally to any kind of multi-branch project so it's not I mean it's not really about this particular Jenkins file YAML format really right so that's sort of a feature of the of the branch source the git integration something like that potentially maybe last martin maybe sorry good dropped for the call for a second so regarding potential usages so we are Jesse is right that the features may be available in a multi-branch pipeline or in other such plugins actually we try to reach out to plugin developers to get them involved in community bonding so they were not available in this time and our discussion our decision was that we try to try to implement an engine using multi-branch pipeline and offering features from there because declarative pipeline was one of the possible engines we could like we could reuse so we decided that we start implementation from there and then if people join if they want to contribute or to generate the solution it's possible so once multi-branch pipeline supports this feature yeah the only thing Abishak would need to do is to just replace the current custom implementation by one offered by multi-branch and that's it yeah I guess everybody has some connection issues from the mentors and students does it answer your question by the way yeah that's okay thank you yeah so do we have any other questions key not in the chat from what I can tell okay so yeah while martin is trying to reconnect Kristen maybe you would like to summarize the project sure so this last period was really exciting there is the alpha release of the plugins so actually if we all find it interesting or want to poke around you can go to the experimental update center and install it and try you know using it to see what the features are versus yaml you just released alpha 2 so that's been really good and I guess the more we find out what people are doing with it the more useful this can become because you know there's only five of us here so it's just whatever we're thinking would be useful for people and I think Abishak's done a great job getting that out and getting the yaml all syntax all figured out so good job thank you Kristen martin yes I missed part of the conversation but I think the most important part during this phase was to stabilize the definition for the yaml the yaml file and this enables a project to move forward so I want to thank Abishak for his work on that thank you martin and as Kristen said the project is available in update center actually each project we share we presented today all of them are available in experimental update centers so if you go to plugin repositories you can find information how to launch the project how to try them and there goes announcement blog posts which described this procedure so if you want to try any of the presented projects it's all really possible and yet for the next phase one of the main goals will be to get them in the main update centers so it will be available in public okay do we have any outstanding questions I've got one question from Uli Hafner about code coverage API plugin so he asked about source code browsing and he asked whether it should be a part of custom implementation or is it a part of code coverage API so maybe Yushin you could would you please respond to this question yeah it is a part of our code coverage code coverage API implementation yeah and he also asked whether it would be possible to generalize this engine because for example Uli is a maintainer of warnings plugin and he would be also interested to somehow reuse this engine in this plugin if possible at least it's how I've got his question in IRC so Uli has a warnings plugin it's a plugin which shows particular warnings for the code so there are multiple scanners and it would be interesting to somehow be able to show these warnings directly in the code so if I understand his question correctly he would be interested to for example use the engine from your plugin in order to show a warning in a particular code to align oh yeah I think we can we can do it because the source code result is an extension point yeah maybe it could be possible yeah but but I needed to adjust my code yeah right maybe and my follow-up to that was actually about a feature of github so currently github supports displaying warnings in the code directory so somebody can submit a code result to the pull request so for example if we take your plugin and abyshek's plugin it would be great if when somebody submits coverage and starts it would be useful to get some comments etc to the pull request for example for example when the code is not covered to solve so would be such integration possible uninteresting to you oh I think it is possible yeah yeah check apis jc mentioned yeah okay I will take it for it yeah right thank you for that yeah thank you awesome okay thank you too so I guess there is no other questions from chas does anybody want to ask something I guess no then thanks everybody and thank you abyshek crushing you and wutuan for the presentations yeah and yeah thanks a lot for all your work so we are looking towards the next iterations in order to see how the project evolved okay and of course thanks to everybody who watched this Jenkins online meetup if you want to get more information about the project um yeah I'll just show some links uh do you see my screen yeah okay yeah so you go to Jenkins are your projects uh result you cannot find all projects here and here you can also find all information so for example if you want to ask more about simple pull request job presented by abyshek you can scroll and here you may find chat each of our projects has its own channel so you can just join there and ask any specific question you have oh yeah it's me there then yeah there is github repository and jen and other resources so Jenkins are your projects should be a landing page if you have any questions and yeah as we said during the first evaluation each student had a blog post so for example here's abyshek's blog post okay um yeah it seems the link is broken okay so let's try to find it here okay yeah pipeline is yaml I think it was missing in the end or so okay so here you may see the description and you can also find the guidelines how to run projects and such a blog post are available for each project so if you're interested just use abyss materials and you will find examples and find guidelines so you can start trying projects even now okay that's what I wanted to share in the end and of course we will be publishing all slides and we will be publishing this video so you will be able to watch it later so thanks again everybody thanks mentors thanks students I'm going to stop the broadcast in a few seconds okay


The last thing I want to say in data science and introduction where I'm trying to define data science is to talk about teams in data science. The idea here is that data science has many different tools and different people are going to be experts in each one of them. Now, you have for instance, coding and you have statistics. Also, you have fields like design or business and management that are involved. And the question of course is, who can do all of it? Who's able to do all of these things at the level that we need? Well, that's where we get this saying I've mentioned it before, it's the unicorn. And just like in ancient history, the unicorn is a mythical creature with magical abilities. In data science, it works a little differently. It is a mythical data scientist with universal abilities. The trouble is, as we know from the real world, there's really no unicorns, animals, and there's really not many unicorns in data science. Really, there's just people. And so we have to find out how we can do the projects even though we don't have this one person who can do everything for everybody. So let's take a hypothetical case just for a moment, I'm going to give you some fictional people. Here is my fictional person auto, who has strong visualization skills, who has good coding, but has limited analytics or statistical ability. And if we graph his stuff out his ability, so here we got five things that we need to have happen. And for the project to work, they all have to happen at at least a level of eight on the zero to 10. If we take his coding ability, he's almost there, statistics, not quite halfway, graphics, yes, he can do that. And then business, all right, and project pretty good. So what you can see here is in only one of these five areas is auto sufficient on his own. On the other hand, let's pair him up with somebody else, let's take a look at Lucy. And Lucy has strong business training has good tech skills, but has limited graphics. And so if we get her profile on the same thing that we saw, there's coding, pretty good statistics, pretty good graphics, not so much business, good, and projects. Okay, now the important thing here is that we can make a team. So let's take our two fictional people auto and Lucy, and we can put together their abilities. Now actually have to change the scale here a little bit to accommodate the both of them. But our criterion still is at eight, we need a level of eight in order to do the project competently. And if we combine them, oh, look, coding is now past eight, statistics is past eight, graphics is way past, business way past, and then the projects there too. And so when we combine their skills, we are able to get the level that we need for everything, or to put it another way, we have now created a unicorn by team. And that makes it possible to do the data science project. So in sum, you usually can't do data science on your own, that's a very rare individual, or more specifically, people need people. And in data science, you have the opportunity to take several people and make collective unicorns so you can get the insight that you need in your project, and you can get the things done that you want.


Lecture 19, As-Salaam-Alaikum. Welcome to the virtual university's course on business and technical communication. While in the last lesson, we looked at how to write direct requests. In today's lecture, we will look at how to write routine, good news and good will messages. In this lecture, we will learn to decide when to write a routine, good news or good will message. When is it appropriate to write such a message? We will also look at how to adjust the basic organizational pattern to fit the type of message that you are writing. What is the organization of a routine, good news, good will message and how will you adjust the basic organizational pattern of a message to your purpose? We will also add resale and sales promotion material when appropriate and look at how to do that. Also, we look at how to encourage the reader to take any desired action that you want them to take. Obviously, when you are writing any message, there are times when you want the reader to take some action based on your message and there are times when there is no action desired. So, if there is an action desired, then we will look at how you can encourage that action to be prompt and forthcoming. We will also look at how to write credit approvals and recommendation letters and how to use the correct form for such specialized messages as instructions, news releases and good will letters. Now, when we talk of organizing positive messages, we need to keep in mind that most business communication consists of messages that present neutral information or messages that answer requests positively and establish better relationships. So, you will probably get a lot of practice composing these routine, good news and good will messages because they are really what you will be involved or engaged in most in your business life. And understanding how positive messages are organized allows you to compose excellent messages quickly and promptly. So, once you get a basic understanding of the organization of good will messages, then it will not be a problem for you as you are engaged in writing them in a routine and you will be able to write your messages, convey your information, convey your the desired action very effectively. Of course, intercultural positive messages are best when organized according to the audience's needs. If you are giving a message that you have to read by someone who belongs to some other culture, then you will have to think that whatever your message is, it is according to your audience's needs and it follows their cultural norms, not your cultural norms. But when you are communicating with a US, American or Canadian audience whose cultural differences are very minimal, then you will use the direct plan. If you are looking at American audiences, North American audiences, whether they are in the US or in Canada, then they don't have a lot of cultural differences amongst them. So, you will write your message in a direct way to keep in mind their culture and also you need to keep in mind that whether your message is oral or written, positive messages begin with a clear statement of the main idea. They then move on to clarify any necessary details and then they close with a courteous close. They end with a courteous close. So, there are three basic sections to a routine Goodwill message. The first is a statement of the main idea. Second section is the detail and the third section is a courteous close. Let's look at the clear statement of the main idea. Now, we know that all business messages have two basic purposes. The first is to convey information. Secondly, to produce in the audience a favorable or at least an accepting response or attitude. The second purpose is to read your message and see if your response is positive or favorable. Once you know that you have these two purposes, then you need to begin your message with a clear statement of the main idea. This is your purpose. You need to convey information. You want to give your message a favorable response. Now, you will state your main idea. Basically, when you are beginning your message with a main idea, you are actually preparing your audience for what is to follow. So, therefore, it's important because you are preparing your audience for what is to follow. It's important that you make your statement and your opening clear and concise. There should be no ambiguity in what is to be stated and also it should not be very long. Let's have a look at two introductory statements which are basically making the same point but one clutters up the main idea while the other one presents the main idea in a more concise manner because it's brief and to the point. Instead of saying, I am pleased to inform you that after deliberating the matter carefully, our personnel committee has recommended you for appointment as a staff accountant. It might, it would be better to say you've been selected to join our firm as a staff accountant beginning March 20th. Now, the meaning in both the statements is the same but in the first statement, it's a very long statement, nearly double the size of the second statement and the writer gets to the point at the end of the statement rather than at the beginning of the statement whereas in the second statement, the writer gets to the point immediately, gives all the necessary information and ends the opening statement there. The next section will have the details of the appointment and that would be it. Now, how would these details be laid out? How would these details be organized? The middle part of Good News, routine Goodwill message is typically the longest section of such a message. Obviously, in the beginning, we only gave an opening statement. Now, all the details will come in the middle section so the middle section will be the longest. Your reasons for communicating can usually be expressed in a sentence or two but you will need more space or time to explain your point completely so that your audience will have no confusion or lingering doubt. So, whenever you've stated something in your main idea, in your opening, you will use more time, more space to explain whatever it is that you're saying so that there are no confusions in the audience's mind. Now, when you're providing necessary detail, the task is easiest when you're responding to a series of questions. If some of your students have already asked you some questions and you're answering them or you think that these questions will arise in your students' mind and you're already answering them. So, the easiest thing to do is to write them as a list. So, if you put them down as a list or as a numbered, especially as a numbered list, it becomes easiest to tackle all the issues, all the necessary details that you are going to be looking at in your middle section. In addition to providing details in the middle section, you also need to maintain the supportive tone that you established in the beginning. When a routine message must convey mildly disappointing information, put the negative answer into a favorable context or into as favorable context as possible. Let's have a look at an example where one way of giving mildly disappointing news would be to say, no, we no longer carry the sports girl line of sweaters. If that is what the customer has asked for. Now, this statement is very direct. It's very blunt, but it's also disappointing to the person who has requested this brand. However, instead of this, you could write, the new Olympic line has replaced the sports girl sweaters that you asked about, Olympic features, a wider range of colors and sizes and more contemporary styling. Now, here you are giving the same information, saying that the sports girl line is no longer available, but you're giving the audience an alternative and you're giving them a favorable news that will make them feel good and that will at least give them an alternative rather than giving them a blunt negative answer. A bluntly negative explanation here, as you saw, was replaced by a more complete description that emphasized how the audience could benefit from the change. However, you need to be careful that you are not using negative information. Be careful though. You can use negative information in this type of message only if you're reasonably sure that the audience will respond positively to your message. If you feel that the audience will not respond positively to what you're saying, then you need to modify the negative information that you're giving out. Because remember, as we talked about earlier, one main purpose of writing a routine goodwill message is to make sure that your audience responds positively towards you and has a positive attitude towards you. So it's important that your courtiers close, in ways the true courtesy that needs to be extended to your audience, your message is most likely to succeed if your audience is left with the feeling that you have their personal welfare in mind. In addition, your courtiers close will also include any follow-up action that is required. So you need to state clearly who will do what and also if possible when it will be done. So if you are required to take any action, then you need to state that in your courtiers close and if your reader request is required to take any action, then you need to clarify that as well. Now, coming to acknowledgement orders, which is another key kind of a message that you use in your business situations, you get orders and a lot of the times you need to acknowledge them. An order acknowledgement is unnecessary. However, if products are being shipped or the services will be provided immediately because if the service is being provided immediately, then you don't really need to acknowledge that order. If you have received that order through a written order, you just then confirm when the service would be provided and you provide it. Acknowledgement orders are acknowledgments for orders are appropriate for large orders, first orders and orders that cannot be filled right away. Obviously, if you have received a very large order, then you need to acknowledge it. If you have received an order, the first time a company or a client has placed an order with you, you need to acknowledge it as well because you need to establish a new order with your goodwill. And if there is an order that you cannot fill immediately or you cannot do that immediately, then you need to acknowledge it so that the audience can know what is your helplessness and when you can fill the order. In these three cases, you will definitely acknowledge the order but if your routine orders are on a rolling basis, then you don't need to acknowledge that order every time. Now, in acknowledging orders, again there are different sections. The first paragraph states the good news and the good news obviously for the audience in this case would be that the order is being processed and the merchandise is on its way. Obviously, if someone has ordered something from you, then the good news for them is that you can fulfill that order and they are sending whatever they have ordered. So, you will state this in your first paragraph because this is good news, this is something that will have a positive impact on the reader. When they open your message, they want to see that you can fulfill their order. The middle section demonstrates the professionalism of your farm with a clear, accurate summary of the transaction, when the delivery may be expected, the cost of the merchandise, shipping and taxes, any problems that might have arisen and perhaps your credit terms. All the details, all the things that are necessary to tell your reader will be written in the middle section. This shows the professionalism of your company and the thoroughness of the company.  Obviously, your client or customer will be satisfied that you are in command of the situation. And order acknowledgement frequently does a bit of selling in the middle or closing section as well. First, you gave all the details in the middle section that when the order will be filled out, what will be the cost of it, what will be the details, from where to pick, etc. If you have any problems, but in the middle section, you will try to give your sales pitch as well. You can point out a favorite aspect of your product or you can do it in the middle section or in the closing section. This information is called resale information. Obviously, you have got the order, you are completing the sale, but resale information means you want the client to order again, you can sell their product again. So, you will prepare the resale in the same message. So, this resale information boasters the customer's confidence. It raises the customer's confidence by pointing out the good points of a product or a company. By explaining how these good points will benefit the customer. When the customer gets satisfied, what we have bought is really good. When the customer gets ready for the order, what they have just ordered, they also get satisfied that we have ordered really good things. Because you have highlighted the favorite points in your letter. Also, when you are acknowledging orders, you do a lot of sales promotion. You take advantage of the customer's obvious interest. In your product, you can send along brochures or order blanks to make additional purchases easier. So, this way you are, although the customer has ordered with your company, they are buying your products, you will also be promoting other products and you can either attach brochures or include brochures in your mail or even send an order form which they can fill out to order additional material. Effective resale and effective sales promotion demonstrates a very strong you attitude. We have talked about the you attitude before. It is something that is very important in making your audience receptive to your message. Now, let's have a look at an acknowledgement of an order and we will have a look at the different sections and see what function each section is performing, keeping in mind what we have talked about right now. As you see, in the first section, the message says, you will receive your SpannerVision video cassette recorder in just over two weeks. Now, in this, this is the main message and it is stated clearly right at the start. In this message, it is stated at the beginning that what is the message in this? The main message that you are trying to tell your audience is that they will receive the order within two weeks. Now, in the middle section, the writer is conveying the specific details of the order by saying, because you live in Massachusetts, you exempt from the Illinois sales tax, so I am enclosing a check for $26.15, the amount of the sales tax that you included in your payment. Any detail, if you want to return some money with the order, or if you want to ask for some extra money, or if you want to discuss any extra information with the order, is done in the middle section. Also, the middle section includes resale and sales promotion, which is, which builds on the customer's goodwill towards the product and the company. Let's have a look at how that's done. The writer says, Mr. Harmon, you're going to enjoy your new VCR day after day. It's quite versatile and to make it even more so, you might want to add a remote control device. Wired and wireless models are pictured in the enclosed brochure. Now, as you have seen, in this part, this is the continuation of the middle section. The writer has resale, which tells the reader how to enjoy your VCR because, as you mentioned in the opening, he was sending a VCR. Now, he tells you how good the VCR is and why the audience will enjoy it. Now, he is also talking about selling a remote control device, which was not included in the initial order. He also sent a brochure to encourage the reader to buy that. Also, the customer's name is mentioned as in a personal conversation to increase the feeling of friendliness. Using the person's name shows a more personal attitude towards the customer. It shows a closer link between the writer and the reader. Now, in closing, the writer offers friendly, accessible help by saying, when your new VCR arrives, spend a few minutes with the user's manual. If you have any questions, call toll-free 1-800-441-6446 from 9 a.m. to 6 p.m. weekdays and then in brackets Central Standard Time, one of our expert staff members will be happy to help you. As you can see, in this closing, there is a very pleasant closing. He says, when your VCR arrives and you enjoy it and if you still have any problems, you can call the person on this number and we will be happy to help you. So that's obviously a closing. It obviously rounds up all that has been said in the message. It's a farewell and it's personal and it offers help. It's personal, courteous and helpful. Now, another form of routine messages could be when you're replying to requests for information and action. If you have a letter or an email or an action official, and you write a message in the reply, that is also a very common form of writing messages in business situations. Any request is important to the person making it, whether that person is inside the organization or outside it. So you have to deal with every request as if it was the most important request because for the person who's making that request, it is the most important request for them at that point. The person's opinion of your company, your products, your department, and you yourself will be influenced by how promptly, graciously and thoroughly the request is handled. Obviously, if someone has requested you for information or wants you to do something, especially if they don't know you and even if they know you, their opinion about you will be molded, shaped, or changed in the way you will deal with their message with promptness and efficiency. And if you will deal with them graciously, obviously, they will be able to give you the information you need. They will understand you better and they will consider you a better businessman. Now, obviously, it isn't always easy to comply with a request. There are many times when people make requests which are not very easy to fulfill. So you need to keep that in mind as well. The information may not be immediately at hand. You may need to take some action for which decisions need to be made at a higher level. So you cannot always take the action yourself. You need to wait. So you can't be prompt in responding. Also, you need to keep in mind that because a letter written on letterhead stationery is legally binding, you need to plan your response carefully as well. If you are writing a letter on company's letterhead or your letterhead, then it becomes a legally binding document. So you need to keep in mind what things you are writing on your letterhead. You can't talk to them legally because they can be sold in a court of law. But if you are writing something on your letterhead, then it can be sold in a court of law. So you need to be very careful what you are writing on letterhead stationery. So whatever response you are giving to routine requests for information or action, you need to be careful that you are actually giving out the correct information. Now companies usually develop form responses to handle repetitive queries that are often similar. A lot of the times, companies get, if they are dealing with a specific product or a specific service, a lot of the times they will be getting specific types of queries. And then they develop templates or form responses to handle the same kind of those repetitive queries or messages. Basically, in this, there is a template or form in which relevant information is filled out and sent back. Although form responses are often criticized as being cold and impersonal, much time and thought may go into wording them and computers permit personalization and the mixing of paragraphs as well. So it makes a lot of sense to have form responses and then you adapt them to the situation and you can personalize them as well now in this age of computers. It is not necessary that you send back form responses that are neutral. You can add the requests or the information you have requested in their names. You can also change the paragraphs so that the request becomes a direct response and you get a general response. Now when a potential sale is involved, then you need to use specific criteria, you need to use specific sales promotion techniques in the routine Goodwill message that you are sending out. Prospective customers often request an annual report, a catalog, a brochure, a swatch of material or some other type of sample or information to help them make a decision about the product that they have encountered through advertising. If your company is advertising their product then people will request a lot of information after seeing the product. They can request an annual report or a sample or brochures or more information. In a solicited sales letter in which the customer is anticipating that they will be getting something, you may use the direct plan. When answering requests involving a potential sale, you have three main goals. 1. To respond to the inquiry and answer all questions. 2. To encourage the future sale. 3. To leave your reader with a good impression of you and your firm. These are three things. Obviously you want to sell something, or sell your service or product. Then you have to do these three things. You have to respond to the inquiry and the questions that have been asked will be answered in a better way. 2. Encourage your reader to buy your product or service. 3. Write your message like this that your reader and your company will have a favorable impression. Let's have a look at a message where a potential sale is involved. Again, as in the previous example, we are going to break down the message in different sections and talk about each section separately. In the introduction or the beginning the writer says here's the copy of brightening your kitchen that you recently requested. Now this is a clear conversational statement of the main point and that's all that's required to start off the message. It's not very formal. There is a reference to what was requested but there is no lengthy reference to the previous communication. It doesn't start off by saying with reference to your letter or request dated dash dash dash. You're basically starting off very directly you're mentioning that the audience had requested this material and the audience obviously, the reader obviously knows that they requested it so they won't be surprised when they receive your message. After this you present the key information by saying as beautiful as the full color photographs are you really need to inspect right tiles in person. Only then can you fully appreciate designer patterns and overall quality. Baywood hardware 313 front street is in Clear Lake is the nearest outlet carrying bright tiles. Now here you're giving the key information you've given the address of the local store that carries the merchandise and all this information is presented immediately after the opening. After this you give a reference to more specific information by saying something like from antique Victorian to sleek contemporary bright tiles will help you achieve just the look you want. Spend a few moments now with the handy chart the right pattern for your decor on page 6 of the enclosed booklet. Then you'll know which patterns to look for when you visit Baywood hardware. Now this reference to a specific page further emphasizes the benefits of the product. This suggestion also encourages the reader to take one more step towards the actual purchase. Earlier they said where these tiles will be found and they said that we have given the brochure. Now in that brochure they are also referring to the particular page that you should look further because it is possible that the readers should look at the brochure carefully and keep it on the side and then maybe go and buy the tiles or not. But in this way the specific product is emphasized. The page number tells you where it will be found and then again they hinted that if you visit Baywood hardware store you will like these things. It's basically urging the customer to actually take the step towards going to the hardware store and ordering more tiles. Now we have in front of us a personal close which confidently points towards the possible sale. In this the writer is confident now that the reader will actually buy the product. By saying Mrs. Reha's, if you have any questions before or during installation please phone our toll free services Hotline, 1-800 whatever the number is you will get easy to understand answers every time. The fact that they might have questions during installation the writer is assuming that the reader has actually bought the product. Obviously when the product is being bought, they are installing it. Note that they are promoting their product but they have already written in the closing that when you buy this product and install it, you do this if you have any problems so they are already assuming that the product will be bought. Now this is a very effective strategy for selling because it shows the reader that you are actually confident in your product and you know that your product is so good that the reader will buy it. Now another type of message could be where no potential sale is involved. Now we have seen how such a message is written where a sale is involved you have to sell something or you are not giving an answer to a request where you can have a sale but there will be messages where there is no chance of a sale and you don't have to sell anything and then there are two essential goals when you are writing a message where no sale is involved.  Where there was a sale there is one main purpose that is to buy your product here this is not the purpose that your product is also there but yes this is the purpose that your company's impression is very good on the reader and your and their one working relationship is better developed and obviously the request that they have requested you are responding to it. Favorably to claims and adjustment requests also needs attacked diplomacy as anyone business knows customers sometimes return merchandise to a company they complain about its services asked to be compensated etc. Such complaints are golden opportunities for companies to build customer loyalty if you unfortunately you have complained about your product which shouldn't come but if there is a complaint then this is a very good opportunity for a company to improve their relationship with their customers because obviously if they do not deal with that complaint properly then in the future the customer will not return the most sensible reaction is to assume that the customers account of the transaction is an honest statement of what happened now obviously if the customer is telling you something they are saying that we bought this product at this time this particular place and this is what happened this is what is wrong with it then you need to assume that what they are saying is correct unless the same customer repeatedly submits dubious claims or suspicious claims a customer or they are honest for example they are trying to return merchandise that has obviously been used or they are trying to return a dress that has been worn and then they are saying that it is the wrong size that's where they want to return it or something like that or if the amount of money that is involved is very large you will not question the claim of the customer if you really feel that they are saying the wrong thing they are lying that they are trying to return it and they are returning it or they are using it and they are returning it when there is no damage or there is a huge amount of money involved apart from this if you don't have these things then whatever customer you are saying you will take the face value because replacing that product will make you lose a lot of money because you need to remember that once a complaint is made customers may come to view the original transaction as less important than the events that come after the complaint so they might forget how you dealt with them when you were actually selling the product but they will remember how you dealt with them when you dealt with the complaint so you need to be very careful in how you deal with that complaint to protect your company's image and to regain your customer's goodwill refer to your company's errors very carefully don't blame an individual or a specific department and also avoid lame excuses such as nobody's perfect or mistakes will happen because these will not really give a very good image of your company it will try to show that you are trying to just brush off the error that happened also don't promise that problems will never happen again such guarantees are unrealistic and often beyond your control if obviously a problem has arisen with the product it was not deliberate it was beyond your control and your company's control so don't make firm promises that it will never happen again but explain your company's efforts to do a good job because in doing this at the error was an unusual incident a letter shows us how such a complaint has been dealt with your letter about the golden harvest canned fruit you recently purchased has been forwarded to our vice president of operations for review we are pleased that you took the time to write your satisfaction is important to us since 1906 golden harvest has been packaging fine food products our workers and inspectors monitor quality carefully with technology but we want to do an even better job your letter will help us do just that the next time you shop use the enclosed half price coupon to pick up a gift box set of golden harvest holiday spices this coupon which will be honored wherever our fine specialty products foods are sold is our way of thanking you for your interest in our products the writer has not directly to anybody they have not said that we are not packaging it somebody else is packaging it that's why there was a problem but what they are saying is that we have made the best efforts to monitor the quality of the product and the way of apologizing is that they have enclosed a coupon through which the customer will get their products discounted or free now there is a clever way of promoting their own product even though they are dealing with the complaint by giving a coupon for an alternative product by the same company the company is actually introducing the reader to their new product the complaint was about canned goods or fruits and now they have given a coupon for spices those who do not buy the spices will be given samples that's why they are giving to buy it it exemplifies the following points it's a form letter now this kind of form letter is sent to people with various types of requests or complaints with minor adjustments it's the same format of the letter that they would be using for different complaints of different products of the company they will just change the name of the product and it cannot start with a clear good news statement because various customers are seeking various types of good news so they have started directly with what the problem is it starts what might be called a good attitude statement which is the U-oriented attitude to put the customer at ease also at no time does the letter suggest that the customer was mistaken in questioning the quality of the product they don't say that the product is fine they are not questioning the customer's judgment at all also however they are not admitting to any defect in the product they are not believing their own mistake they are not saying that our product is defective but they are not lying to the customer they are just accepting what the customer has said and not commenting on it but going on to more positive news the middle explanatory section combines the old and the new it says Golden Harvest has been doing business for almost 100 years but its equipment is thoroughly modern this explanation of the company's quality control may restore the readers confidence in the product so if the reader feels that the company is very old and the technology that they are using might be old by saying something like this the company is actually saying that although we are old the technology we are using is very modern the experience is actually adding to our quality rather than taking away from it also the letter closes with some resale and sales promotion and this resale and sales promotion is made personal by the use of you and your by these pronouns now obviously if you get an adjustment letter like this you are also likely to respond favorably to it so when you writing an adjustment letter like this you can be sure that your clients will also respond favorably to you a claim letter written as a personal answer to a unique situation would start with a clear statement of good news the settling of claim according to the customer's request now however a claim letter written as a personal answer to a unique situation this is a standard situation but there could be times when the request or the complaint could be unique and then the claim letter would not be in a form format but it would be more personal so such a letter would start with a clear statement of the good news and then talk about the settling of the claim according to the customer's request let's have a look at an example in just a few days you will receive a new factory tested electronic metric scale to replace the one you returned thanks for giving us the opportunity to back up the name of total buyer satisfaction now if you saw in this reply the writer is again although they are telling the customer what it is that the customer will get they are also thanking them because the customer has pointed out a problem with the company and also in the close they are pointing to the policy of total customer satisfaction saying something positive about themselves as a company although they are responding to a complaint now another type of message could be when you are approving credit if you are working for a company or if you are working in a situation where you need to approve credit for your customers then you need to keep in mind that handling routine credit requests is important because customers often carry a wallet full of plastic credit cards and businesses of all sizes operate more smoothly because they can pay for their purchases over time a lot of the times in this day and age a lot of transactions are not made by handing cash immediately at the time of the sale a lot of the work is done over credit or through credit cards letters approving credit are good news messages and the first step in what may be decades long of a business relationship so if you are writing a credit letter or you are writing a letter approving credit then you are obviously giving out good news to your client here you need to open your letter with the main idea in the middle section you will include a reasonably full statement of the credit agreements what are the upper limits of the account the dates that the bills are sent possible arrangements for partial monthly payments account payments, interest charges for unpaid balances due dates etc any details that might be relevant when you are giving the details you will state the terms positively and objectively not negatively or in an authoritarian manner instead of saying something like your credit balance cannot exceed 5000 dollars or 50,000 rupees you will write with our standard credit account you can order up to 5000 dollars worth of fine merchandise it's the same it means the same thing but you are putting the message positively instead of negatively another example could be instead of saying we expect your payment within 30 days of receipt of our statement you will say payment is due 30 days after you receive our statement also when you are approving credit the final section of the letter provides resale information and sales promotion highlighting the benefits of buying from you let's have a look at a letter that was written both to approve credit and to bring in customers it says welcome aboard here is your new ship to shore credit card which will make shopping at Conrad's even easier than before now you can make credit purchases up to a total of 100,000 dollars or 1000 dollars or whatever the amount you want to name now this is a good news opening right to the point so depending on the purpose of your routine message the function that you wish it performs you will tailor the opening accordingly you will include necessary details and obviously then you will have a closing preferably something which makes a possible future sale and also resells what you are selling the product that the customer already has ordered in this lecture we learnt to decide when to write a routine good news, good will messages and what type of message to write depending on the situation we also learnt how to adjust the basic organizational pattern which was the three different sections of a letter that we looked at and how to arrange that how to organize that to fit whatever type of message you are writing we also learnt how to add resale and sales promotion when writing because that is something that is important for the image of your company for the sales of your company and for the success of your company we also learnt how to encourage the reader to take desired action by using a positive note by ending on a positive note and on a confident note as well we also talked about how to write credit approval letters and also the correct form for specialized messages as instructions news releases and good will letters we also learnt how to write credit approval letters and how to phrase the terms and conditions of those so that they come across positively rather than negatively or in an authoritarian manner with this we come to the end of today's lecture on writing routine good news good will messages until next time, Allah Hafiz


That principle, a small part is left which we can finish now itself because how much time is left? We have amens that it should be in the previous like that. After that, now suppose this point A and B will be connected in series, understood? Not through the show. Through B. This is I0. This is something of the loop we can insert. That's what it is. These are your insert points. Okay. Then you should connect RG. This is called resistance. Small R, sorry capital R in series. Okay. And then you have to connect. Okay. Now RG plus R. This is a maximum power in J. Definitely there will not be a doubt. Make sure we score 100% in this chapter. Two questions in J advance. Not two. One big mark question. Or ten marks. They come from this chapter itself. Okay. One class is based on one big multi-guide. Could be. Okay. What I am trying to say? Not small. There is another chapter in magnetism which is EMI. Okay. Which is also simple, straightforward. So make sure you hit hard way.


Hello friends, welcome to the session. I'm Alka and we are going to discuss without actually performing the long division State whether the following rational numbers will have a terminating decimal expansion or a non-terminating repeating decimal Expansion our question is 23 upon 2 to the power 3 and 5 to the power 2 Here we see that our denominator that is Q is in the form of Q is in the form of 2 to the power n and 5 to the power n m This implies that the Frith the rational number is a terminating Decimal expansion Hope you understood the solution and enjoyed the session. Bye. Bye and take care