And the tube, the main building blocks, electronic blocks for executing instruction such, you know, typically instructs. This is so power consuming that they have something like a chimney for the blowing out heat so that it was the electricity consuming power. Due to this great experience in building this computer, it was built for that period a very brand new computing center using IBM computers. This is the 65. And this institute that originally was also my institute was equipped with great computers for that time. The minus line of IBM computer was the 37 computers. That was a very strong computer for that period. But it was typical for that period to have a center of computation. This is a typical center of that here. And this is the taudue, the terminal audio that I'm going to explain what is the main reason. The machine for producing music. By the way, that's me when I was back photographing when I was very youth. And this is the group with Maestro Rossi. This is Graziano Bertini and Clementi who physically built these apparatus under the direction of the researcher of that time. And that's me in 78 and another colleague, very young students that we were. And this was a very, very spare technology. Maestro Rossi, coming from an experience of electronic music, he wanted to hear music just like a normal synthesizer. But as I am going to explain now, that it was impossible to get music from computer on that time. And this is what his motto. I want to listen music just after pressing a return key. That time the mouse was not yet invented. And so his philosophy involved the transcription of score and music, self-generating algorithm music and remote music. This is the three topics that I'm going to tell you about. And so a library of music, score at Paganini, Stravinsky, and Delbac, Scott Joplin, many, many different authors of the tradition was coded and then executed. But this is digital versus analog in the sense of going back in the years, going back in the history. We are now used to use digital electronics, the digital approach in making music. But the only way to follow at that time was analog. You know what this means. I have not to explain to you what this means. But if we go back to the 60s and 70 years, we have to realize that the power of computer was very, very, very low in respect to also with a small laptop. You have to think that the typical characteristics of that period was 1 to 5 megahertz of clock, run memory up to 1 megabyte, the big, large computer, and the mass storage of not more than 20, 60 megabytes of the big rails of tapes was the typical power you have using big computer was this. But I don't know if you know that the digital technology was born not in the audio field, but in the telephony. And it's interesting to have a short, heavy, rapid look in what happened during the 50s and the 60s because the crucial man in this field for what interest in computer music comes from telephony. You know that for a small town, for making content, people was the patchboard managed by girls that was plugging in the police content, putting content with the other person, blah, blah, blah. You have seen in many films, something like that. But when the network or telephone was more and more growing up, what is called the automatic selection was built using electromechanic devices. But when the population of telephone was growing up to millions, also the electronics mechanics was not more usable. So how computer address memory was a good suggestion for making a selection of many, many different user of telephone. So it was mandatory that a conversion from analog to digital because it is easy to understand how to select a memory cell in the computer. But then you have to send a transformation of analog signal to digital. Who was busy in that moment at Bell Telephone in US was Max Matthews, a young engineer who had the task of put a solution to making analog telephone to digital telephone. But just because it was also musician, he was thinking, why not use a computer to synthesize music? So in this chain, we drop the first part and using a computer like a synthesizer. And for the first time, during the 60s, here, Max Matthews brought a program, a series of program called Music One, Music Two, Music Four, up to Music Five, having in mind that building a software synthesizer had a number of advantages I have illustrated here. And this, but in that moment, just because having a signal of relevance means to have at least 33 kilos of sampling rates. And just because the power of that moment was around about 1 megahertz of clock, for computing a sample after the previous sample was emitted by digital to analog converter, you have only 32 microseconds. And this was not enough for synthesizing a signal of musical meaning just to justify the substitution of analog synthesizer to a computer synthesizer. So it was chosen the strategy of non-real-time music. The non-real-time music was the offline music. And the software he developed, just I mentioned before, it was Music One, Music Two, up to Music Five, used the mass storage of that moment, typically tapes, for accumulating sample computed by the program, by your composition in some way. This is well described. This is a classical book where many people during the 60s and the 70s studied the computer music. You can download it from the web. It is free now. And in this book, Max Niatius explained it. I think this is the central philosophy of working that Music Five program. Number storage in the computer memory are successively transferred to a digital converter. Digital to analog converter. But the key word is successively, because each sample was stored on the real tape and then rewinded. And the tape was read digitally speaking and converted in audio signal. But non-real-time music, this is a typical Music Five composition. And you can recognize that C-sound, I think you know C-sound what it is, comes from Music Five. You can recognize that the logic, the typical configuration of C-sound composition is the orchestras and the score parts where the instrument is defined using lines that describe oscillator, envelopes, shaper, filter, noise generator, and so on. And this is the typical page on that book that describes an instrument graphically and then test well, have you used the C-sound, I suppose, no? So you know what we are speaking about. Music Five was developed in the first language. The first language is the correspondent of C-languages of our days. In that moment, the first language was the only scientific programming of the language of the moment, of that moment, because it was very simple, but very powerful in describing the typical operation of programming. So, but once again, we have to have a look of the characteristics of the magnetic tapes of that moment. You have to think that magnetic tape is a very, very sophisticated machine in that moment and it was very rapid in rewinding and stopping, searching a particular section of the tape. But it is the typical characteristic. So, in a tape like that, it was a real of that dimension about no more that from four to 12 minutes of music were possible to store as a result of the computation. In any case, 12 minutes with the density of 6,000 bytes per inch. So the question was, how long to wait? Because you wrote the program, the music fight composition, the same to say now C sound composition, how to wait? It depends at that time. It depends from the number of instruments you have defined in your composition, the complexity of each instrument and the length of the score, the composition. So in short cases, have a coffee break and they come back. But in a more complicated, more sophisticated composition, go to lunch after lunch. And if you have a very big composition for many instruments lasting 10, 15, go to sleep and come tomorrow morning. So this is a very big problem. But the fascination of having a software synthesizer, a software system for composing music was very, very fascinating for that moment. Because the advantages, you know, if you are using a classical MOOC synthesizer, very, very difficult when you have set up a patch to reproduce the exact combination of plugins and the knobs that define the frequency, the filter, cutoff frequency, and so on. It is very, very difficult to reproduce the same situation. You have produced it one day or one week or one month before. So to have a problem that when you have set up the different parameters you have tomorrow, the computers give you the same result as yesterday. So it was very fascinating to also to have many, many different of the synthesis algorithm. Because with the experience of Max Matthews, the very new thing was to have the possibility to experiment a new way of producing timbres, timbre, different timbres. Because with the analog synthesizer, you know that no more the square waves and the filtering, noising filtering, you have nothing more. So with the Music 5, a new season was started. The decision of searching a new way of producing new timbres, the FM, well-known FM by Chowning, the first experiment was made using Music 5 program. You know that there is a Mr. Chowning, who was a very young musician that period. I don't know if you know the short story between Max Matthews. Because Chowning said, maybe I have invented a new way of producing sounds with computers. Max Matthews said, oh, good, patent it. At once, patent it. Why? Patent it. And you know that using the after having patent FM synthesis, the Yamaha, purchased the license for building the first synthesizer, the DX7 synthesizer. And they purchased the license, if I remember well, for about $1 or $2 million. And using that money that John Chowning built the mythical, no, the mythical karma institute in Stanford. So patent it. And the first experiment was made using offline synthesis. I don't know if you know these news about. And in the film Space Odyssey, the crucial sequence in the film when Hal, the computer, lost memory. Have you seen that film? The music was produced using Music 5 program by Max Matthews. But, and this is the keep of young people that you have, I think you have mentioned it many times. So coming back in Italy, Mr. Rossi, now a week, knowing all those experiences, having in mind to have a system for producing music in real time, because it was interested much more than, not in timbre, but as we will see very soon, in music in the sense of notes, composition of notes, of events. So also he had a great experience with electronic music. But just coming back in the two towns, his town and my town in Pisa, in respect to the Max Matthews approach, where the sound processing was the main topic in which was focused the experience, Rossi focused his attention on even processing. What is the timbre doesn't matter. I want to process music in the sense of the traditional composer who was composing music, putting the notes on the staff. So due to the power of the computer at that moment, he wanted to choose the real time approach. And so he developed, using that language I was mentioned before, for some language, he developed a program called like that, digital computer music program, where the three basic features was the transcription of current music with simple transcription, frequency and duration, frequency, duration, frequency, and duration. And then this is the main part of manipulation and transformation of the text. And then self-generating algorithms for producing music using many different kinds of approaches like combinatorial calculus, Markov chains, and blah, blah, blah. So the main thing was manipulation of sequence of couples of information, frequency and duration, no more than that. And so from an original to have, for example, a backward execution, inversion in some way, and modifying many different ways, the array where the notes were coded, stretching, shrinking, and completing in different ways. Or to write down a program that, with a create command with many different parameters, it was possible to generating blocks of information with random between some limitation or a range where to limit. This is a typical, this is a part of the original program that performed this. This is original, written by Maestro Grossi in that moment using the, and this was the typical commands using which to have transformation in different ways a coded score. So the first approach during the end of 16, first years of 70 was to use a single voice with the square wave in real time, this time, using, think about, using the bit zero of the register of a big computer that was of the cost of $1 billion at that time, only a bit of switching from 01 and computing the time between one switch to the other. This was the main routine for producing music. And then with the delay in an end cycle, you can get different, just in the gadget of a Christmas way, something like that. A big computer, $1 million of that time. In any case, using a very, very sophisticated program, he was also producing this disk of, it was the end of 60, or no, it was 71, 72, I don't remember. And it is the sound of a computer. And you can, this is a two minutes now example, where you get, you can realize how the transformation of music by the program, the results of this experience was well, well come in the Institute. Also, it made many interview in the specialized magazine, also transmission of radio and television. It was a very big success for that. But the single voice squared wave was not enough for producing a significance of electronic music. So it was decided by the Institute to build an audio terminal. This is for reaching polyphony, for reaching real time music for that moment, an novelty, as we have seen. What is, what these two words, audio terminal, terminal and time sharing is a very obsolete word, terminology. Terminal because you have to think that in that moment, the computers, it typically was, the name was a mind frame computer, using channels of communication, it was possible to, the access to the computer was using terminals, teletype writer. Or everything was a terminal, everything was connected to the main computer, disk tapes, printers, card readers, terminals. In the sense of the big mother and the many children to link it to the mother. So also a special device for producing music was a terminal. Time sharing means that the time, the CPU times of the computer were shared with the different user. But for example, one cent of second to you, one second to you, one second to you. But if you think that when you are typing, maybe that for typing a lines, you last half a minute, one minute. So in that moment, the computer, you think that you are linked to the computer. But the computer is not linked to you. It is working for other people. So it is much more the time when, during which, it is not connected, but you think that you are connected. So it was possible, in that moment, that up to 100, 200 people was connecting, working with a phantom computer. Because it was much more the time in which the computer was not busy for you, but for the others. It was a time sharing approach of the computer. Because the cost of the computer was very, very high. So having a special device that produces sound while many other user are using that computer was rigid linking this device through special channels and to have to part the digital control for communication with the computer and the synthesizer itself. That in that moment was an analog synthesizer. The characteristic of that synthesizer is now, unfortunately for the moment, it was abandoned in the store. But we are sent now to recover for putting it in the museum because it's a very important piece of technology where many people are working in that moment. This is the digital part. This is the analog part for synthesizing. This is the power suppliers. Because they're very power consuming that moment. This part is for controlling the different kinds of oscillators. Basically, it's an additive synthesis. Nothing else, an additive synthesis. This is the control panel. And this is how it was installed in the part of the institute where we are used to go for music. We had to, the main characteristic, the tau duet, tau 2. Tau 2 because it was an experiment before a tau 1, not linked with the computer. But a standalone synthesizer, the main structure is a hybrid device, analog synthesis and digital control. It has 256 analog oscillators with a resolution at the distance between 1 third of a semitone, 1 sixth of a temperate semitone. The range was from 32 to up to 404,000 hertz. But there was an extension also. Too much complicated to describe. In any case, the main thing is the oscillator. It was possible to control with eight different levels from 0 to 7. So for each oscillator, it was possible to simulate an envelope. And in some way, it was enough sophisticated for producing a real additive synthesis, controlling the envelope shape of each oscillator. So it was possible to define an instrument, classically using a C-sound terminology, an instrument, but only and only with additive synthesis. And it was possible to group a configuration of the oscillator to define an instrument. And at the same time, 12 instruments. But the array of 25, 256 oscillators was defined for the whole 12 voices. So it was possible, also, that some oscillator overlaps with the other. But it was not the problem, the grid problem. The update time was 1 cent of seconds for the configuration. So the envelope shape was working enough well. So from the original digital computer music program that worked with a single voice of the square wave or the big computer, the Thomas program was developed with the same philosophy, but now using time control and polyphony. This is the typical configuration from a score. You put notes in the computer, and then they are translated in the stream of coding frequency duration. And then it was possible to modify and, in different ways, the coded program just to have information. This is an anteliteramid because the information from the computer was coded in some way and transmitted to the tau duet, where the different information of each oscillator were sent to the digital part of communication and translated in the real control of the array of oscillators. And this was working with the speedy of 100 times per second, so it was possible to have control enough for what concerned time. This was some writing of Maestro when there was nothing. Because he was living in Florence, but every morning was by train coming in Pisa one hour at a time. And during the trip, he was also correcting programs, inventing programs. Another activity was to invent what is telematics music. In some way, he made many, many demo using a very, very big implication of people. And you are not. You, Serra. It's a mountain, call it Serra, just behind Pisa. I have noticed now. This is a very big mountain where the antennas of broadcasting television, a very complete wood of antennas. And down in Pisa, where the array was the broadcasting national of Italy. At that moment, only array was existing. So the technician of array comes in Pisa with a Paraboloid antenna transmitting the audio signal from the institute. And then I don't know how. Technician of array, within another town, for example, Rome, Naples, Milan, captured the signal. And the audio signal was put, for example, building like that for getting sounds. And using a typical modem of that moment, it was possible to communicate with a central computer. So a very complicated approach. But in any case, it was working. So it was possible to have demo and concert offline, completely offline in another location that was not Pisa. And it was claiming, every time it was doing this demo, in the next future, music will be transferred on the network. It was a very visionary idea for that moment. Just once again, I want to list. And now I give a very short example of music produced by Tau Due. And this evening, the concert was much longer using all the disks, a copy of the disks you have also. Nineties, this is the conclusion. When the computer are growing and growing with power, he retired at home. No, in the first period, he came back at the conservatory using LAP computer. But he also started a painting activity using a small computer like the Commodore 64 and many others computer, using the same approach used for composing music and for composing drawings. So for example, algorithmically generated. So the same program with changing some parameters, producing different drawings. And that's for you. That's for you. The same, but different. That's for you. homage from Maestro Groszi. And produced many, many different kinds of programs using basic language. But so I think that this is a conclusion for his artistic activity from a musician in the last part as a cybernetic painter, something like that. Oh, so once again, the historical photograph. And after that, a new arguments was followed as a research by myself and the other colleagues that remained in PISA. This is the basic. In 1991, this is the starting of this new activity, my machine interaction, live performance. There was a very, many people from all over the world came in this. And many ideas started. And so the new activity of producing gestural interface was initiated. But this is another story. That this evening in the concert, I shall use two basic gestural recognition interfaces that I and my other colleagues in the Institute were developed. Basically, very shortly, half a minute, using the infrared beams and real-time age processing. This is a tablet where the infrared beams can recognize is much more complicated now that I shall use this evening. Many beams, it is possible to detect the height and rotation of the hands. And the other one is the possibility of recognizing the position of the hands in the space and also to have the dimension of the frame. So it is possible to have the angle of the hands. So it's possible to give with your spare hands to give many information, to detect many information. The webcam of the computer used, so it's very, also from setting up, it's very, very quick to setting up. The program make parts of the recognition activity. So everything is integrated in the program for controlling the synthesized music. This is the typical situation. I shall use this evening. I think that that's all. OK, thank you very much.


Wonderful sitting next to an immensely more beautiful person than I normally am That's rude. I know that's why I said it Hey, we'll go back to our super directs the Corbin. I'm Stephanie He calls it Instagram Twitter.  Thanks to patreon Follow us for your Twitter account subscribe and you'd like button and the reason you saying my lovely beautiful wife here today one She's better to Rick is feeling a little sniffily and his voice is gone Is it under the weather and I don't want his disgusting germs here because we have three children and that would be hell Sick children. No, not fun. All you parents out there. No very well So obviously the new trailer Rick and I saw the teaser of this this is called Boola and this is the official trailer for it It's a JDF gun and taboo It's coming out at the end of March You have seen the original of Kythie I think that's what it is right Kythie. I think so the Remember when I saw Vikram? Mm-hmm the prequel To Vikram It had like the bus scenes like a big action bus scenes You you watched it with me I watch a lot of things with you. That's true. I Just want to refresh your memory here. Do you remember to remember this at all the bus? A lot of fun action Yes, you remember this. Yes vaguely Okay, well, that's basically the same universe as Vikram, okay, okay But that have not seen no because it came out theaters and that's where we saw that but that's nothing to do with this This is the Hindi remake of that film. Okay, starring a JDF gun and taboo in the titular roles And the teaser was really good looked like a different Telling of it In terms of it was like almost visually hyper stylized and all that kind of stuff So we'll see how it is, but this is the trailer for that. Let's just get into this If we get up at all, it's because our children are supposed to be sleeping Once again your parents out there now they don't listen to us I Wow, that was a lot different than the teaser and give a lot more dialogue heavy it felt like also I'm guessing it was in a song it was basically like impregnating the girl in like this whole do you remember this oh man yeah that gives a whole new the sex song in a yeah that's funny the original remembering did not have songs in it like in terms of like dance songs so obviously it's been Bollywood iced I don't like this as much as I liked the teaser I still think it looks cool but some of the CGI was a little off it looks still look like it could be a lot of fun but I hope they don't Bollywood eyes it too much because the original was really nice I thought it I mean I haven't seen the teaser but I thought it looked intense breaking the person's arms backwards that's a lot of fun but actions I just think you're there to have a good time mm-hmm and it's in 3d which is which means there's gonna be a lot of things coming at you yeah maybe that's why the CGI was off so you're gonna feel like like there's gonna be a lot of like you're experiencing whatever is happening to the other person type of thing yeah like he breaks his arms backwards and your arms go backwards yeah like that it's a 40 experience fun for the whole family yeah look like a lot of like like this visual was still really cool I liked it and it looked like they've stepped it up a notch but also sometimes like it could look like some of the CGI like I said was a little yeah CGI it was to CGI parts of it a lot of the action looks really cool I don't remember the Trident unless I'm just forgetting it I don't remember the Trident part in the original at all I know you don't remember I remember that part with the Sanjay Meester in the end that was very memorable yeah so there's there are parts but it also looks like it's done a lot with it because I don't remember like taking a lot of liberties yeah I don't remember a boat yeah God maybe I'm just forgetting it it looks like a CGI boat is what that looks like two tractors going up on the back ends here so it looks like it could be a lot of fun but I also hope it just isn't Bollywood eyes too much because sometimes Bollywood eyes is fun but then sometimes they get a little too much especially if it doesn't like fit like because some like obviously certain films I just go into for fun yeah but since it's a remake your yeah I mean it's I know the original material but granted maybe they should do more different because you know try to make it your own I guess yeah who knows anyways let us know what you thought about the trailer and anything else we need to know down below


Everybody forced here ripping 2022 tops tier one baseball hobby 12 box case number 39 random teams Those results on screen are always available late in sports cards.com click the results quick link at the bottom of the website Scroll down click results. They're all there. You can search them on the search bar as well Very easy to find and there's a link in chat Good luck everybody What's up steppin shaw in one yeah one of the 30 ways All you shawns got to get it figured out man yours make sense to me yeah SCAN is like is that like Irish or something? I have no idea thick pack Yeah, two relic cards here Cubs Wilson Contreras game use Jersey to 64 of 399 Exactly Padres game use Jersey Jake Cronin worth 27 of 249. Oh, I already know a next car I get is gonna be at least like partially electric at least Reese Canary Rookie Auto 56 of 299 San Diego and A's auto Matt Chapman 206 of 299 Royals dual relic Salvador Perez 9 of 25 nice on the Royals Blue Jays rookie auto auto Lopez 74 of 299 And an Orioles auto Eddie Murray 7 of 99 nice Murray That's the facial hair.  I'm ready for an electric vehicle Plus they make like everything electric now You can get like a truck electric if you wanted it got Phillies Jersey card Zach wheeler 9 of 399 Game use Jersey card blue J's Vladdie jr. Bookend 299 of 299 Nice Rookie auto rangers you help hoso 17 of 299 And a Padres auto Blake Snell 37 out of 199. What do you drive Shane? Pretty curious My cars paid off. I don't plan on getting rid of it. It's only got a little over 100,000 miles on it So I'm gonna ride it till it's done Driving that thing till you know something major happens to it knocking on wood right now don't envision Get a new car anytime soon Chris say all 298 of 399 Jersey card for the Red Sox.  Oh nice silver rookie auto there Jersey auto Royals Whitmerefield 24 of 99 Reds bat relic Joe Morgan 53 of 199 Rourers Freddy Peralta auto 167 of 255 and Cardinals Scott Rollin auto 245 of 299 Giant Jersey card Buster Posey. That's 237 of 399 TJ Fridtl rookie auto 127 of 299 Duel auto Mariners Ken Griffey Jr. Randy Johnson 14 of 25 boom what a hit big card Seattle Christopher s Ontario what a monster Sorry guys My voice got to me as soon as we got to this thing man Disgusting card best of their respective positions man Top-10 pitcher all-time Top-10 outfielder all-time. I mean Both played at the same time the same team feel bad for Mariners fans So many good players in their past. There's nothing to show for it Yankees Jersey cards CC sabatheo to 399 That's a big card Cardinals Tim McCarver auto 88 of 299 White Sox rookie auto Jake burger 114 of 299. So yeah guys my voice is still uh, it's getting better, but Somebody asked the chat of personals are full. There are no personals tonight. Yeah, no personals tonight's personals tomorrow night after group breaks We've done about eight hours of personals in the last Like 15 hours Jersey card Nationals Juan Soto one of 249 Got Jake Myers rookie auto 282 of 299 for Houston Personals resumed to Maronite after group breaks Padres Jersey auto Joe Musgrove 32 of 99 You guys I'm not sick at all, but So I got that national voice and last night did not help Staying up till 4 30 a.m Did not help these two days off are gonna do wonders for me Mike Piazza Padres Jersey 101 of 399 Aramis from here as Cubs auto 53 of 299. What about Royals rookies? Got Ernie Clements auto rookie 117 of 299 for Cleveland off-dropping between breaks. Oh You mean because they beat up the Red Sox. Oh, I don't feel bad Rolls rookies got to do their thing Red Sox just being mediocre is what it is Cardinals Paul Goldschmidt Jersey 47 of 249.  What about I'll be in the Red Sox her last place team Yankees auto Don Mattingly 63 of 100 Braves Jersey car Chipper Jones 259 of 399 Braves rookie auto Kyle Muller 263 of 299. Yeah, what's live and this was just cool And Larry Walker auto 70 175 Colorado color colorado. You should do a national in Denver.  Give me a sec here Oh Relics Chipper Jones Paul Goldschmidt Mike Piazza Padres Juan Soto CC for the Yankees Hosey Joe Morgan Wilson Contreras Joey Votto Chris Sale Vladdy Jr. Zack Wheeler Salvador Perez Jake Cronenworth Wilson Contreras again Auto is Larry Walker Kyle Muller Don Mattingly Emmanuel Rivera Ernie Clements Aramis Ramirez Joe Musgrove Jake Myers Jake Berger Tim McCarver TJ Fridle Scott Rowland Freddie Peralta Whit Merrifield Marcos de Plans silver Nolan Ryan Kyle Seeger Blake Snell Yohal Pozo Eddie Murray auto Lopez Mark Chapman or sorry Matt Chapman Reese Caner and Dual auto Mariners Ken Agrippy Jr. and a Randy Johnson Such a sick hit for the Mariners. That's gonna do it everybody one more tier one case coming up


Republicans who control the Minnesota legislature have their plans to address health insurance costs. GOP lawmakers vowed to quickly move a relief package for the residents paying premium increases of up to 67% this year on the individual market. But disagreements with Governor Mark Dayton over how to shape that assistance could drag the debate out a few weeks. We all recognize that this is a crisis providing that relief. We agree that that's important. It's just important that we get some of those reforms as well. And so I don't want them to do anything to slow down the process. And we want to make sure that the governor is coming in and working with us. We know that for it to happen, we have to have agreement with the governor and we intend to have that. The Republicans plan would scale subsidies based upon income, but cut off support for those making eight times the poverty level, about $190,000 for a family of four. House Speaker Kurt Daut says their plan could pass next week. The Senate is hoping to pass the plan shortly after that. If you've enjoyed this segment of Lakeland News, please consider making a tax deductible contribution to Lakeland Public Television.


Hey thanks everyone for coming to this session. We're going to keep this very conversational and informal. I'm Will Roper. I do Air Force Acquisition. I'm Jack Cable. I'm a hacker with the Defense Digital Service. I'm Jack Cable. I'm a hacker with the Defense Digital Service. And I'm Will Roper. I do Air Force Acquisition and we wanted to chat a little bit back and forth about why we're here, why we're bringing defense equities to DEFCOM, what we hope to get out of it, and then you know what we're concerned about. Like why is this more than just a conference to us? So if you're in the Air Force you really worry about vulnerabilities and for decades we have taken systems out to test ranges. We have flown them against our simulations of threats trying to understand if things we put a lot of money into like stealth and radar and jamming capabilities whether they really work. And we're pretty good at that when the things that we're testing are based on hardware not so much when they're based on software. And so one of the things that's been an increasing area of concern for us is that our future depends on having really good software in our airplanes. We want things to be able to work together to share data, to network, and the kinds of stuff we imagine for the future like collaborative systems and swarming. They only work if the software is credible and difficult to thwart. But we don't really do the same red teaming, the aggressive testing of the software in our systems. And so part of the reason we wanted to be here at DEFCOM and to work with really smart people like Jack in Defense Digital Service is to start bringing the talent that we know exists to probe our systems and tell us what's wrong with them so we can fix them. Yeah thank you. So yeah I've been a part of the Defense Digital Service now for a little over a year. I got into it through the Hack the Pentagon program. So that was the United States government's first bug bounty program launched in 2016 and it was the first way for hackers to work with the government in a friendly way which didn't involve them working directly for the government. Say 10 years ago it could have been arrested for hacking into the Pentagon. I got to do it in high school and I got paid for it. So that was pretty great and I did a few more challenges. One called Hack the Air Force eventually got started talking with people from the Defense Digital Service and now I'm trying to make the experience working with hackers better for the United States government. So we've launched a variety of challenges with our bug bounty program. Three with the Air Force, a bunch of others other departments and we also have a vulnerability disclosure program which allows hackers from all across the world to report vulnerabilities to the Department of Defense. So since it's launched in 2016 we've received over 10,000 vulnerability reports from hackers from across the world thousands of hackers pretty much every country and the great thing is is we don't even pay them for that. There's people out there who want to help. So we want to expand those connections and make it further than just right now it's only websites. We want to take that further and make it so if you find a vulnerability affecting anything within the Department of Defense you can report it to us and we can fix it. So we're here with a bunch of different systems for testing and we're going to keep expanding it and making it so we continue testing our security. So Jack this is a big move for us because in addition to like networks and base defense systems which are pretty safe things to hack I mean they're important to us but it's not like it's a war fighting system that like is going to go into the battlefield today if called upon. We've brought some like no-kidding war fighting systems or at least ones that support them. So we've got a download system for an F-15 that's here. It's a system that moves data back and forth between the ground and the airplane and it doesn't sound like it's something that you really ought to worry about because the airplane's on the ground it's safe right but this is a system that has access to our airplane and it tends to be an afterthought for us in terms of having like really good cyber survivability and resiliency. So Jack what should we do we've brought a system here today but what should we do in future to get more people like you where they have an opportunity to to access our systems and help us and how do we do it safely? Yeah so what we need to keep doing is stuff like this. So be at DEFCON this is one of the first times that the U.S. government the military is here asking hackers to hack systems and we need to keep doing this we need to make it as easy as possible to test the system so bringing stuff to hackers next year we're going to try to get an actual plane here to hack on and do whatever we can to make it easy to test for vulnerabilities especially in places where might not otherwise be able to test how often can you get your hands on F-15 probably pretty difficult so keep doing that and really just fostering these relationships with hackers and that goes beyond the bug bounty programs it goes into actually bringing hackers to the Department of Defense to work on really great projects so I work with the defense digital service who has hackers on hand and is starting to see that we need to do more of this so really doing whatever we can to make it so if you come work for the government you're not going to be sitting in a room doing nothing but you'll actually be working on projects that matter and you'll be able to make an impact making systems more secure so finding places to best put people where they can have a big impact is a big part of it and something that we want to keep doing it's cool and one of the things that we're really excited about is that if you think of the air force you probably think of like fighters and bombers and things like that and they're really cool airplanes but we also buy a lot of commercial airplanes that we modify to do different missions for us so the airplanes that move stuff around like logistics support they're really commercial airliners that we modify our tanker is a Boeing 767 that we modify so one of the things that we think would be cool to do is to really probe the vulnerabilities of our commercial modified systems and if the things that we find are military unique vulnerabilities well that's great we need to fix them so that our pilots are going to be safer but we might actually help commercial airlines make their products more secure and since most of the companies that make airplanes have a relationship with the air force and there's a good amount of trust there we're hoping we could build on that trust to improve the safety of commercial airlines as well so Jack if we wanted to do that I mean how should we start the next defcom is it show up with a tanker or a Air Force 737 and pull it in here and let people hack away at it what should we do yeah really doing anything that we can to enable finding more vulnerabilities so especially on the commercial side something I want to emphasize is that say if you report a vulnerability to the Department of Defense through the vulnerability disclosure program you can be assured that it will be used only for defensive purposes so for testing commercial planes what's going to happen is that if you report a vulnerability it'll be fixed in the systems we have but also be sent to whoever develops that software so that everyone who's using that plane can make it more secure so we really want to make sure that with these programs there's as much of an assurance for hackers one that you won't have any legal troubles in helping us make our systems more secure and two that anything you find will only be used to make systems more secure so we have the duty as a vulnerabilities equities process anything found in the VDP is not subject to that's only defensive and that's something that's really important for working with government we want to make it as simple and as useful as possible so having a way for say the work here can also go and make aviation everywhere more secure so we really want to emphasize that well jack I'm going to do my best to get a like a commercial plane of some type here I think it'd be really awesome and if you don't really think of vegas as an air force place there are two major air force bases that are near here there's Nellis and Creech so it's actually an area that's pretty easy for us to get stuff in one of the things I wanted to pick your brain on is that the government historically has been pretty bad at software right we really haven't changed the way that we code since the 70s most of the code we have was developed under the old waterfall process there's a lot of nested and embedded code all worst practices and so when we do vulnerability testing we've got a really unpacked different layers and you know that takes a lot of time right time at keyboard so can you give me a sense of like if we're working on legacy systems we probably have one model if we're working on a system in development where we have all of that software open in a laboratory we're probably doing something very different so what should we do for both yeah so when we test say legacy systems with the bug bounty program we find of course really critical vulnerabilities and we do our best to patch those systems so they don't don't come up again but the truth is that we can keep testing these systems all we want but unless they're developed from the ground up to be secure it's not going to get that much better so what we want to do is start developing software with security in mind and traditionally that hasn't happened in DOD it hasn't happened in industry and we really need to shift how that works so a few initiatives the defense digital service is starting some projects across the DOD one with the marines to focus on how software is being developed and build using much more modern software development practices continuously test the security of its systems and consider possible security implement implications when developing the software there's also new with the air force a fast track authorization to operate which involves more modern agile development methodologies that have much more of an emphasis on security and also running bug bounties say in development before systems hit production and that's really important to catch flies earlier the earlier it is the easier it is to fix the vulnerabilities less of an impact that they could have had so really drilling down that we need to get earlier earlier into the development process and a big part of that also is making sure that developers actually know what they're doing when it comes to security so increased training for developers and giving them resources so even if they have just a little bit of knowledge of the security implications that their code can have that they're able to consider that and when they write something that looks a little fishy they can dive into that and really make sure that most of the vulnerabilities that get into the code don't hit production because we're testing them before then so jack if we were to say go up to probably the place for writing code the fastest so we've got a team of eight hundred people that are up in boston they uh they call themselves kessel run so i you know i've got to really give them you know credit for a name that really inspires one the geek side of me but also speed so they write really great code today for what we call our air operations center it's what helps us coordinate all of the operations in the middle east and around the world so they take some about six weeks to go from a new war fighter request to code that's on the battlefield doing mission so could we work at that pace with the hacker community if we need to be able to do vulnerability testing in days for code that needs to deploy in weeks definitely because kessel run is a great example they not only develop software faster but they're developing in much more modern way and actually that's much more conducive to positive security and they're also integrating testing earlier into the process so a lot of systems we might have across the dod take years and years to approve and to get authority to operate but the truth is without actual security testing and without actually making sure that the systems can hold up in production manner that security won't have the same it just won't be as effective as adding continuous testing into the development process so we can have both the fast development and fast improvements as we've seen with the fast track ato so we can really make sure that software is getting tested continuously and from the start and by doing that we can really do it in a quick manner as well and so but jack what do you think what do i say to the pentagon bureaucrats who say well there's no way that you can do this securely so as awesome as it is to stand beside an f-35 fighter or a b2 bomber or mysterious x-37 space plane all really awesome things that we have in the air force they're unique and that only we have them and we don't want adversaries to know much about them so how do we make sure that the people that are helping us find vulnerabilities really are the the good guys that want to help us for good reasons and not people who are trying to get in and exploit for bad so with the vulnerability disclosure program we do have it open to the entire world and that's because we know that if people are telling us about it they want to help and the fact is there's people attacking our systems every day whether we like it or not so we need to do the best we can to engage the people who want to help and if they're coming to us and offering their skills to make us better then we should accept that help and another thing is that going back to the idea of building software really quickly and also making it secure a lot of the fundamentals of security are really simple and it's important to make sure that those are in place before trying to go out and do something that may or may not really affect security so if we focus on the basics and focus on what really matters then we can make sure that our systems ultimately work much better and are more secure so I think that going forward it's something that we need to as the entire department as industry also we need to get better at looking at the fundamentals and focusing on what we've known to improve security rather than something that might say after the fact make it a little easier but really the basics that we've struggled to get down we've struggled to really improve from there so ensuring that we have a sound foundation is a big part of it and jack how do we get access to the talent so we are historically really bad at getting people on board in the government I think your example is one of the worst case stories I've ever heard of months and months of paperwork and bureaucracy it's just horrible I'm going to imagine that we'll have some people who will say yeah I really love this idea of defense digital service I want to sign up I want to be able to hack some things that only there that I'd be able to touch but I'm going to guess there'll be others who will say I'd be interested in doing an event or two per year how do we need to engage to get talent where they don't have to fight through they're basically hack the hiring process before they actually hack the system yeah so yeah definitely there's I'd say one part of it is that within government traditionally it's seen as somewhere where of course with the giant bureaucracy it's hard to get stuff done so by giving people access to roles where they can really have an impact from day one for me at least that was a really great way to see that there's a lot that can be done in government working with DDS but that might not be for everyone and for people who don't want to go through all of the hoops to get hired all of that there are still other ways that they can work to help make us more secure so I think the bug bounties are a great example of vulnerability disclosure program we can pay people competitively to test our software and make it really easy for them to do that rather than having to go through the entire hiring process they just get approved to hack one system and they can go at it so making it as easy as possible for people to test these systems is a big part and I think that it's we've seen some really great results with hackers who would have never otherwise worked with the government but now they're working directly with us to find vulnerabilities in these systems and tell us what we're doing wrong so we can get better and Jack that's my experience too so when I when I left academia I was a string theorist it took forever for me to actually join up with the government but I've been so glad that I've come in because you get to do things you just wouldn't be able to do anywhere else and work with a lot of people a lot of operators that are just really thankful and grateful for the help that you give hey let me let me do one pivot and let's take a couple of questions for the audience so if we think forward in the future right if we want to be a presence here at DEF CON a really like collaborative member in this community and we can bring airplanes each year what do you think about going a little bigger than just aviation so we're an aerospace force we have a lot of satellites that I'm going to guess have the same vulnerabilities and by the way space is a booming industry most of the venture houses are saying we're going to have at least a trillion dollars of the economy in space by 2040 maybe three trillion so should we be going after those vulnerabilities just as aggressively and do you think we can leverage a forum like this to do it I think definitely yeah the Department of Defense has all sorts of systems from aviation space ICS everything that you can imagine the DOD runs as biggest enterprise in the world so we need to be testing all of those and I think this is a great place to start that process so yeah say with satellites the less we test systems the more likely it is that there are vulnerabilities that have just escaped under the radar for too much time so by making that accessible and giving hackers say putting them right next to a satellite and seeing what they can do we can uncover some really great vulnerabilities so I think going to whatever lengths we can to bring it here and bring it to the hackers I think that'll have some really great results that's cool well it gives me a lot of things to take for actions I have to get an airplane here next year a satellite to hack and by the way satellites are a great area for us to hack before we deploy because you can't get them back so whatever we put up we live with the ground station you can fix so I think the bottom line for me is you know having 60 billion dollars of Air Force programs underneath like I'm super excited about our future the Air Force is pretty adaptive is pretty aggressive in trying to change and it's really embraced making software as important to it as air and space but we've just gotten to the starting block like we've gotten good enough to know that we suck and that we need to get a lot better so what I hope that we can do is make sure that if talent wants to work with us that it's not hard and that's a really different model than what we had say last century in the Cold War when technology changed so slowly that you waited on it and now technology's saying so fast that we ought to be able to update systems on a daily weekly basis but the only way you can modernize and update that way is if you've got the right talent to support you make sure that you make smart choices and if you make dumb choices have people like you that can advise us how to fix them and fix them quickly let's take a couple of questions so DDS is based at the Pentagon where our main office is there we also have an office in Augusta, Georgia that we just recently opened up but yeah so but DDS is based at the Pentagon but we don't do all of our work there and we go wherever the work is so if there's someone anywhere in the world who's struggling with technology we go in there and help them make it better so yeah DDS is really operating across the Department of Defense we use them a ton so they've done reviews for me on the b2 bomber on satellite ground stations and a lot of other things that don't come to mind now so they get employed really broadly and I think what's pretty awesome about it is that you never know what you're going to be working on next and they also get to work with a lot of people that are kind of their counterparts in the Air Force at least in my service that are responsible for writing that code so it's great having like the person that's the developer getting to work with the person that's going to be their troubleshooter or red team so the cool thing is that it covers so many cool technology areas any other questions well with no other questions let me turn it over to Brett Goldstein he's the director of defense digital service who had the audacity to invite the Air Force with him to DEF CON so I'm really glad you did Brett I'm glad we're able to get some cool stuff here the simulators for people to use the things for people to hack so we're excited with the direction you're going but I know you need a lot more people to do your job true thank you will and I think it is completely crazy that we're here with the Air Force at DEF CON so thanks everyone for listening so I'm Brett I am the director of DDS I am completely the new dude here I have been on the job for two and a half months and I need to tell you I never thought I'd work at the Pentagon on you know I come from the private sector I was one of the people who built a company open table you know when when I was saying what would I do next it wasn't DOD so and every year when I've come to the to DEF CON I never thought that I would be up here with a big Air Force flag and a DOD thing so thank you again for having us on DDS has a crazy mission we are the SWAT team of nerds that deals with tech when technology is gained in the way of national defense we are the team that they call and you know we're able to have amazing partnerships like the Air Force on and as Jack said we go where the work is like I gotta tell you I've now spent a piece of my life in Afghanistan that is something that wouldn't have happened at open table so I've learned a ton it is probably one of the most awesome missions that someone could have on something will and I and of course Jack are pushing is we need to get out there as DOD and embrace other communities I have come to DEF CON for a long time and this is a world that we need to work with you know many of us are already part of it there are a lot of people that want to help us do our job better on so we want to do a better job of coming out and talking to folks and you folks can help us raise the bar because it's important and we can't do things the old way so thanks for listening I have a whole bunch of folks here from DDS we have Jack, Roro, Claire somewhere, Megan we have a whole bunch of folks that would love to talk to you about the projects the projects that we're working on and then we have a bunch of Air Force folks that are you can raise your hands so we work on really cool things we want to tell you about it and we want to hang out so please feel free to approach afterward but thank you again and everyone have a great DEF CON


So, before we start, how many of you have worked with WebDriver, used WebDriver? How many of you have used Java language, apart from Java in any other language? Anyways, majority of you are using Java. That's great. That should be a nice foundation for this, okay. So just to set the context right, let's quickly go through some basic things. So you know you have WebDriver. So this presentation by Selenium, I mean only WebDriver, we're not going to talk about Selenium 1.2. So Selenium WebDriver is abstraction for our multiple browser implementation, or instead of writing tests or automation scripts for each browser, you just write using WebDriver API, and then you can run it on any of the browsers. But ideally, there should be a implementation of WebDriver for the specific browsers. So at this time, people write their automation scripts, write directly using WebDriver API. So is it a good thing or not so good thing? Then we have this famous thing. If you're using WebDriver API directly in your automation scripts, you're doing it wrong. Same as to what? So there's a link to that in Martin Fowler's Blinky. So what is the problem here? Anybody? It leads to a lot of rework, fragile tests, et cetera, right? So this is the context we are mostly familiar with. Let's try to see another context as well here. So here, say the automation scripts are written in JavaScript using WebDriver.js, which in turn talks to Selenium server using JSON wire protocol, which in turn talks to the browser. So that's how you can bind any language libraries into WebDriver. Another possibility is like the system in which you're running the script and the system in which actually the browser is running, they are different.  So if you look at this point, so one place developers are using the API and you have multiple implementations of that and you have also other language bindings trying to use this API. So it's kind of doing multiple jobs here. So anytime when you design an API, the common issue you run into is the level of abstraction, whether the API has to be fine grained or the API has to be coarse grained. So what are the benefits or disadvantages with that? If you go for coarse grained APIs, developers will have to write a lot of code, right? So step one, step two, step three, step four, like that, you'll have to do that repeatedly. On the other hand, if you go for coarse grained API, it's good for developers for writing the automation scripts, but implementations of the WebDrivers will become complicated. They'll have to implement more. Or you might not be able to expose all the capabilities of the browser through the APIs, because it's slightly at a higher level. How do we solve this problem? Let's just take a look at here. So here you have the, you know, this side it will become more and more complicated if you make the APIs more coarse grained. On the other hand, developers will want a very API. So this is the problem. So how do we solve this problem? That's a very famous saying, right? Any problem in compute science can be solved just by adding another layer of indirection. So instead of everybody directly relying on WebDriver API, you develop a small library on top of WebDriver, which could help developers to write better. Okay, let's quickly start with a simple example of usage of WebDriver. Then let's see how we could implement that using JEP library. Then slowly let's convert our code to more idiomatic style of JEP, how you should be ideally writing JEP code.  So let's quickly go through this. This is a simple WebDriver script. So I'm not using anything related to JEP here. It's totally a WebDriver API usage. The differences I have written this in groovy file, not Java, just to make things simpler. You would see the usage of APIs, WebDriver and, you know, I believe what we are trying to do is very much evident from the code. Just to note here, at the top you would see grapes, grab, et cetera. So instead of, I mean, to run this program, you would need the Selenium jar. And here I'm trying to use FirefoxDriver, so I would also need the FirefoxDriver jar. So instead of creating a Maven palm file and putting the dependencies there, I'm directly putting that content over here. So you would see at grab, I'm exactly giving the, you know, the Maven group artifact and the versions here. So what it will do is it will download these libraries or jars and make them available in the class file. Let's just run it. So it executed real quickly. I mean, I don't have any assertions or anything like that. Just usage of WebDriver. I mean, so far things are fine. Now, what's chat, please? Everything is in directly in my code. I don't have to, you know, create another middle or something like that. If you have script one and script two, if you're running them independently, you'd have to mention it. See, if you're using script one, and from that you are accessing script two, then you don't have to. So wherever you're starting, you have to mention that. Oh, no, no. I'm not, say, whenever you are running your entire test suite, so you'd be using some dependency managers and all. So here everything is in one file. Just to make the demo simple, I'm using it. Say whenever I run a single script or some simple code like this, I always use Grape. But if I have, say, hundreds of files, then I could use Maven or Gradle or anything like that. You could use still, but I would say this is simple, right? It's like hard coding is okay when you have only one file, all right? You want to demonstrate something to your friend. Yes, do that. That's what I'm trying to do. So let's try to introduce Jeb here. So what's bad about that? What's bad about WebDriver? We already discussed that, so let's just try to generalize. Let's take a simple example. Say you meet your friend in the conference and you ask him, how did you reach here? So what's the answer will be? You can buy public transport or bike or whatever, something like that. Instead if he answers like, okay, I opened the door, front door of my house, I stepped out, then I stepped, I mean, I climbed down the staircase, then I got into road, then I walked till the bus stop, then I got a bus. How do you feel about that? Not so good, right? Is it the way we interact with it? No. It's in the same way we, the developers, want to interact with any APIs at that high level. We don't want the APIs to be so dumb, that too in 21st century, right? So that's the problem we are trying to solve step by step. So let's see how Jeb could help. Let's introduce library Jeb here. So Jeb is an open source project which is written in Groovy language. Groovy is a dynamic language on JVM which compiles into class files and later you can execute them on JVM. And also it's Apache V2 license. So you could grab them, make your own changes, commercial friendly, right? And the latest version of Jeb is 0.9.3, it's very close to 1.0. So 1.0 should be out somewhere this year. And the API is quite stable and typically not much changes are expected in 1.0. So we have been using WebDriver. So the gateway to WebDriver API is WebDriver class. So you get an instance of WebDriver class and then you start using it. Similarly, the gateway to Jeb API is BrowserObject, which is in Jeb.browser which wraps around WebDriver. So instead of talking directly to WebDriver, now you will talk to Jeb and Jeb in turn will talk to WebDriver. So this is how you could do it. So you create a new instance of BrowserObject by passing a DriverObject. Then you want to go to visit some URL. So you can say browser.go and you could give a URL. Now hard coding things is not so good. That's what we just, I mean the people, told about. Because if you want to use a URL, I mean a Driver in multiple places, you want to use the same Driver, not the different, different Drivers, or say you want to change the Driver. Instead of Firefox, you want to use Chrome. You would want the change to be in one place rather than in multiple places. So this is how you do it. The configuration file is named jebconfig.groovy and you put them as a groovy DSL Driver and you could create. So here I'm creating a Firefox Driver. So any customizations there you could do. Here I'm trying to make sure that when the Firefox window opens, it's maximized. Then I return the instance. Similarly, you could create a Chrome Driver and return that, okay? Now, previously I created a new browser passing a DriverObject. Now I don't have to do that because it will be taken from the config file. So here I can say browser.go directly with browser, just a new browser. Then browser.quit can be used to terminate, I mean, stop. Now let's see how you could access elements in jeb library. So at the top, the commented code shows how you could do it using WebDriver API and below you can see how you can do it in jeb or using jeb. So browser.you call the dollar method and you say name is j username. Now once I got the element, I want to set some value into that text. So I can use the left shift operator and I can pass the value. So again, you could see the WebDriver version and jeb version. Then suppose you want to read the value present in the text field. You could say the field.value which will return it. So I'm just trying to print it here. So let's see that example. So my configuration is already present in jeb config which should be placed in the default package. Now here you could see additionally I am including the jeb core library as well in addition to Firefox. Then I'm creating an instance of browser. The actual instance will be taken from the config file and I say go to login.html. That's a URL and then I enter the username and password. Then I click on submit and finally click in this. Okay, that's it. Come. Yeah, please. Right. Exactly. You're right. So this is not the end result. We are just starting. So instead of directly giving you, this is the perfect way to write jeb code, I'm slowly transitioning you from WebDriver API to Jeb API. Now let's see how you should ideally do it in jeb. So this is just to get you familiar with jeb. This is what we do. This is a very ugly code. Right? Why is it so? I'll come to that. Yeah. Apart from that. Just from the API usage perspective. Yeah. I could do that. I'll come to that later. That's fine. Apart from that. So every time you'd see browser, browser, browser, that's a bit irritating, right? When you speak to someone, say your friend, say Raj, hey Raj, how are you? Hey Raj, did you do this? Hey Raj, like that. You don't say that, right? First time you say that, then you stop that. Again, we want our APIs to be intelligent enough, not so dumb. So once you tell that this is what you have to use, browser object, you want it to understand that. That's not so good. Apart from that, another one. Here I call browser.quit. What happens after that? Can I, the browser object reference is still available, right? Can I use that? If I try to say browser.go once again, what would happen? It will give some error. Right?  So, but still you can do that. That's not so good thing. So how we could improve that? So again, the API provides a static method called drive, wherein you can pass a block of code. So drive will create an instance of browser and run the code block within that context, within the context of the drive. So once quit is called, you don't have the browser reference anymore and you can't do any silly things there. So does it look better than the previous? Okay? Or no? Okay. So this is exactly the point he mentioned. So we have hard coded the URL. We don't want to do that. So we may want to run the test in multiple environments where the base URL could change. So you put the base URL in a chip config file and when you say go login.stml, it will be appended to base URL. Yeah. Yeah. It's exactly done using with. But in that case, I have to create an object, say new browser object. Then I should say the browser dot with and I could pass this code block. So what would happen is after the code is executed, still you would have the reference to that browser object. So we make that construction part private, which happens internally. Then comes the assertion. Once we have the, I mean, we have seen how we could set the values and read the values. This is how we could assert, say I'm getting the value of H1 and which has some text value and I'm checking if it is dashboard. So that's just an introduction of how we would use it. Now let's get into bit more details of the navigator APIs, how you could access elements in the page. This is the syntax. So does it sound familiar, the dollar one, anybody? Have you written dollar selector somewhere, jQuery? How many of you are familiar with jQuery? So you already know how to use jQuery, most of the web programs. So instead of remembering web element dot by ID, by so many classes and that, doing jQuery selectors or CSS selectors is easy. So that is the power Jeb gives you. So you could write CSS selectors or jQuery selectors using the dollar method here. So first argument is the CSS selector. Then you could say index or range, we will see more examples and some attributes also. Let's get into the example. So this is the page snippet you have.  So I try to select H2 and say get the text. So there are four H2 elements here. So dollar H2 will select four elements. And dot text will get the text, the content of the first item in that. That's how your jQuery API would also work. I'm trying to give a index value here. So I would say dollar H2 and one, so which gets the first one, zero and five. Now I try to get the size of that. How many H2 elements are there, gives four. Now I want to fetch multiple ones, not just one element. So I can provide a range operation here, zero dot dot two, zero, one, two. Three elements will be accessed. So which returns a list of that. That's a bit of a trick in Groovy here, I use star dot, which is equivalent to iterating and getting that value and collecting the result and returning it as a list. Here I have added the duration attribute and I'm trying to query by where duration is five and there are two elements in that. Here I'm trying to get an H2 element where text is something. So I'm not going by ID or name or anything by the content, that also you could do. So it's similar to attributes. So whenever you give text as an attribute, it will take the content, not the attributes. Also you can use sort of, you know, regular expressions. So there are some built-in options available like a contains here. I try to get all the H2 where text contains O. You would see the first two contains O there, page objects where O is uppercase. So if you want to include uppercase as well, you could do I contains. Here again duration contains five, so you would get size as three. So finding the child elements, you could do by I'm selecting, you know, div dot languages which selects the outer div. Then I'm trying to find all the elements with class dot jvm. So what would be the result, anyone? So two elements have jvm class. Next filter, again similar to jquery. So I'm trying to filter from the current list. So I get all the languages and filter with jvm is, this is an including filter. So if you want excludes, not containing that, you could use not. There's a most discussed item, a topic in the conference, I believe, page object. So let's see how we could use page objects. So this is the code we just saw previously. Let's just ensure that it works before we try to refactor, okay? It's complete, so first thing is we need a page object. So let's create a page object, say log in page, so which has to extend jv dot page. Now what do we do? So here I'm telling go to log in page. So now, instead of telling here, I should tell go to log in page. So how do I do that? I should put the URL here. So URL, I make it internal to page. So even if the page URL changes, the change has to be in one place. Next, what do I need to do? I have to move all of these elements inside the page. Which I can do, say, I say username. I use the same selectors, but I just move it inside the page. Submit that required, you could put. Now, what should I do? Should I access username, password, submit within my code here or something else I should do? That will be still, it will be kind of a getter setter. So it will eliminate that problem of URL changing and you want your code, I mean you want to change only one place in your code. That problem is solved, but still it's tightly coupled. So instead, what I can do is, I say log in. So now, instead of doing this, I say log in. Does it look good? Any questions? So what I did is, I created a page object, log in page. And I specified the URL there. And I moved the elements inside the page object so that it's encapsulated over there. And I'm just providing a log in method which I can use to call that. I mean, to simulate that. Anything you see? Call. I need not be using method two, sorry. When you're using page, you are supposed to use two instead of go. So yeah, that's what you could do. Now, when you log in, the page changes to another page, right? So let's just create another page object. Here, we want kind of verification if it is really at that page or not. So I can remove this part. We just move to dashboard. So I say add, so that's complete. So the assertion is now moved to the page itself. Similarly, I can move this text also. I can put a placeholder similar to username password. I can say some heading or something. Then I can say heading or text. We could do that as well. Any typos? Anyway, that's, that's, that's, that's. So we have seen a basic page object in action. Let's get into modules. So, page objects are logical representations of a page, but there could be some content, some section repeating across pages, right? So how do we handle that? Let's see a demo for that. So here I have taken dashboard, you may have the heading same, the search, you may want to use it across the pages. So let's see. So for the reusable section, what I do is I create a module by extending module class, and similarly, the way how I created a page object. Similarly, you create the content for your module. Then the similar way I have provided, I provided a login method within the page. I provide a search method here, wherein I pass the query, which will send the, set the text in the text box and click enter, press enter. Now, how to use it in the page? This is the page where I want to include that module. So within my content, I say search bar, that's the variable what I want to use. And I say module and the module name, is it clear? Then this is a result page I'm using. So I say I go to dashboard page, then I call the search on that. Then I just assert that the page is actually moved to next page, that's the search result page, where you see search result, you can run that, okay, complete. Any questions? I have a question. So here, my dashboard page has a page title, and search result page as well as a page title. Here I say assert page title equal to search result. How does it know which page title to be called, in which page? So in the previous example what I did is, in the page demo, right, we said go to login page. Then here we said at dashboard page. So browser object what we saw earlier, that maintains which is the current page. So here when you said login page, it knows you are in login page. Then when I call login, there is nothing called no login method within browser, right? It is present in the page object. So browser knows which is the current page object, and it delegates that responsibility to the current page object. So login is delegated to current page, that is the login page. Now when you say at dashboard, it calls this verification. So now it knows that dashboard is the current page, right, or instance of that. So when you call next heading, it should go and call the heading of dashboard. But in this example, I have not used it. I have just commutated. Then how does it know? Look at the module definition, I created search box, along with that I specify two and a page object. That means when I click on that, which should be the page you should move to. This is one of the practices people use, right? A page object should return which is the next page object upon click, right? So due to this, it automatically knows which is the current page object. Out of one, you could pass multiple values as well, you could pass a list as well. So what it will do is, now you set two search result page, it will call the at assertion on that. So if title is not dashboard, something else may be due to an error, it will skip that and go to the next element you passed here, that's allowed. So it will go one by one from the list, and it will check this at assertion. If it is true, it will set that page as the current page object, otherwise it will try to get the next one. So whenever you say at, there is an explicit assertion made. So there is no page object, something like that, it will fail. So move back, that's one of the example where we saw one content repeated across pages. Let's get into another example. Anything repeating here? The rows are repeating, it's the same, structure is same, right, list of some values. So you could use modules to solve this problem as well. This is how do you use it. So record represent a single line or a single row here. And here I have created a kind of template which using the groovy closure. So I pass an index and the row is what is, you know, everything what is in the row is will be in a TR type. Within TR you have multiple TDs. So when you search by TD, you would get multiple TDs by default. But my navigator allows me to specify an index as well. So if I pass 0, I would get the first one, if I pass 1, I would get the second one. I need the columns of that. Say I am trying to get here product code and price. I just call this with multiple different index, right. Column of 1 will return the first TD, column, sorry, it's the second one. First one I just put the serial number. Column of 2 will return the, so it just, so I am just index 1 and 2 is what I am taking. And I am trying to convert it to integer. Now how do you use it in a page? So I have a page called a product page which has a URL as usual and within content. So previously I gave a variable name then I told module and the module class, right. Here I gave module list and I gave the module class which is here. And then this is the row selector. If there is only one, you don't have to give that also. I mean if you're directly, if this is directly selecting, you don't have to give anything. In like, in my previous pages there was only one search box. So if I dollar, I give you some idea of that search box, it should find it. In this case, there are multiple rows. So I need to tell that module which is the current row, right. So this will select all the TRs and put it into a list called products. Let's just see how you can get the values actually. So you say you go to product page and product contains all the rows. So I say products.each, I'm getting product.product.code and product.cry. So a product is a variable I give here itself while iterating the current element. So any questions here? That's how to use cases of modules. So one content repeated across multiple pages or same content repeated within the page. Next thing is how to wait? Why do we need wait? Anybody? Why do we need a waiting? So you may have an Ajax request which may take some time to get the response. So until then you want to wait to get the value of the result. Consider this example. You have a div whose ID is dynamic. There is no content. Say there is a button upon clicking that an Ajax call is made and the response is populated here in our text. These are all the ways that provides ways of waiting. So you use wait for method and you pass a closure here. So here it is I say by ID dynamic and get the text which is a kind of predicate. So it will wait until this div contains the text. Not infinitely it will use the default timeout which is 5 seconds and retry interval is by default 100 milliseconds. So every 100 milliseconds it will check if that text is present in the div. If it presents it will return. If it is not present it will wait till the timeout. In the second case you are explicitly saying I want to use 8 seconds timeout. And the retry interval is set to default again 100 milliseconds. The third example I am saying that I want to wait till 8 seconds with I do not try every 100 seconds instead retry only say half a second. Next one is you could pass a text also. So what does that mean? So in your config file you could have a preset. So under presets you could define multiple presets. I have defined a preset called slow which says timeout is 12 and retry interval is 1. So if you want to use this across your application in multiple tests you could use it as slow. You could categorize say some faster jacks calls maybe fast category. Slow means say slow category like that. So then slow previously which was 10 seconds now you want to reduce it to 8 seconds or you want to increase it to 15 seconds something like that you just have to change it in one place not go and change in every place. So waiting is real real simple here. Let's see we saw how the JEP API can be used from the trivial example to a very practical page objects, modules and weight and so on excuse me. And now let's see how you can really integrate this in a say continuous integration environment or so. So JEP provides these integrators. So typically you may want to write your test in J unit and call JEP API could be or these are the options available J unit 3, J unit 4 and test NG is available and also SPOC is also available. So I'm going to just give a demo of SPOC API so if you are using Groovy typically you would end up using JEP which is quite a good you know testing framework which is again on top of J unit 4 runner. So this is a sample SPOC specification similar to J unit you can consider. So JEP provides a base class JEP reporting spec so it helps you to capture the screenshots. So I just create one called sample JEP spec so this is how you define the specifications here in a very you know descriptive way or specification not test so you can give the description here. It need not be like a regular method and then I say when here I use the JEP APIs so I'm not saying browser dot anything like that or I'm not saying browser dot drive anything because this already creates an instance of browser and it provides to me. So whenever I'm doing here it's always within the context of browser that context is already available. So we say to login page we repeat the same thing what we did here but there is no browser explicitly mentioned here so I hope any questions here I mean the syntax should be pretty evident. So then when then that's the expect those are the syntax let's see a demo of that some using gradle here that's a failure right so let's see what is that this is where you would get the screenshots as well as the HTML file at the end of each test that is by default it's taken now we just want to see the test report so one failed we saw so the error is shown here so the page title is actually you know result result one search result one and search result that's a so this is left side is search result showing right side is the search result one actual is search result but I'm expecting it to be search result one let's just fix that and rear so it passed now everything is passed let's say you want to take the screenshot in the beginning also right now if you go here the reports you could see the dashboard and next one is the search result those pages are available you could see there is a page before also which I just put it in one place so wherever you want you can just use report or you can use a pass a string which is the group so it will create a folder and that kind of and I'm using the Gradle here I can run it with the multiple tests by configuring it in Gradle I'll say you can add any browser so that is controlled in the Gradle file so you could add which drivers you want and you may want to add some dependencies and so there are few these are the templates I took directly from the JEP there is a sample repository there is a sample Gradle there is one for May 1 also there is one for Grails if you're using Grails that's much easier to do than this and I have all the patterns what we learned that's how you could define one more point I missed here is I used stepwise so that the tests are executed in order so I may want the login to be done first and then the rest of the things in this order or say you could also put it as I mean say before running the entire test you do a login that's also possible depending on your how your use cases you could configure that so you know you have setup and tear down for each test so setup is executed before each test tear down after each test and setup spec is executed once for the entire spec and tear down spec after all the tests are run so by default what happens is the browser session is maintained for the entire I mean if you stepwise for the entire spec it is maintained otherwise all the cookies and all will be deleted after every test so your login session will not be retained so you could customize it the way you want so in summary what does jeb really provide to you so web driver API is available to you you can still you can get the instance of web driver and you can customize if you want in addition say 80 percent of the case you use jeb and some specific case you really want to control through web driver that is still possible nobody's preventing from doing so you still have the power of web driver you know learning jQuery selectors is pretty easy compared to learning any selectors API so in no time you can learn that all people would already know that so that's another part of it and page object patterns are set right away so you don't have to reinvent the wheel then the power of groovy so if you know bit of groovy still you can you know say in a complex situations you can write a lot of templates and more reusable code something like the closures we used in that rows and all so that would be a another benefit you would get so with all these jeb should be a very good you know candidate for developing test automation so I mean I'm not telling that everybody has to use jeb or something but using plain web driver might not be a good idea so you have to develop something on top of web driver so jeb has all the good practices of that so most of the cases jeb should cover pretty well so any questions I have the references are put and all the code examples what I've used I've already you know put in the github and presentation slide will be available in my slide share yeah yeah I'm sorry right you're right so what happens is from the performance point of view if you can put everything in the CSS selector that would get executed in the browser and it will return that will be faster compared to getting everything and then you are doing a filter so it's like you know you make it work and then you can make it better that's usual cases even if you use groovy selectors the attributes still it would work say a few milliseconds here and there will not make a difference but say if you really facing some performance problems or if you want to improve it further you can always try to move it to CSS selectors the first argument else last minute well thank you