Hi, I'm Zor. Welcome to Unisore Education. I love these construction problems which I'm going to talk about today. I think they actually bring up the best of creativity in a young student. Everything is completely artificial. Everything is only the brain exercise, no more than that. And they develop this brain creativity to a very, very high degree. So I do recommend to solve these problems in as large quantities as you can. And that includes obviously all these problems which I present on this website. I hope you did try to solve all these problems before listening to this lecture. It's really very, very important for you to do it yourself. So in any case, I will present solutions to all these problems. I have many of them, by the way. This is just lecture number three. There were two others before it and there will be others after it. They're all dedicated to all different kind of construction problems which playing geometry really can present you as a challenge. Alright, so let me start. Given a circle and a point inside it. Okay, given a circle, this is the center, and a point inside it. Construct a chord that contains this point and is divided in half by it. Well, this is simple. You know that radius which is dividing a chord in half actually is perpendicular to this chord. Which means that in this case to construct this particular chord which will be divided by this point in half is just to draw a radius through this point and in this point draw a perpendicular chord. Now, since it's perpendicular, these angles are both right. Obviously these right triangles are congruent to each other because they have common characters and hypotenuses are ridges and they are equal in length. So we have hypotenuse and the characters and that's why the triangles, this one and this one are congruent and that's why these two segments are congruent to each other. Now, basically every problem which has a chord most likely will require the radius perpendicular to this chord which divides this particular chord in half. We will use this particular property of a perpendicular to a chord which divides this in half in many different problems which we will try to solve today. So this is an easy part. Okay. Now, next, divide an arc in two, four, eight, etc. congruent parts. Any kind of a power of two. And then we divide an arc. Let's say you have an arc from here to here. This is the center. How to divide it in half? Well, draw a chord and if you draw a perpendicular it will divide it in two congruent parts and I think I did this actually before, the proof of that I did before using the symmetry because every point in this arc is symmetrical to this relative to this as a diameter. Why? Because they are on the same perpendicular to this diameter and on equal distance from the diameter as I just proved before, second to go. So these two points are always symmetrical relative to the diameter which means the whole arc is symmetrical to this one and that's what actually makes these two arcs congruent to each other. Now, if we can divide it in two we obviously can divide it in four parts, equal parts how? Divide it in two and then divide into each part which means again draw a chord and perpendicular to the chord here and here. So I have four pieces, how to divide in eight? Well, again, obviously every piece you divide in two halves. So this is the next. Construct two arcs in a circle if their sum and difference are given. Okay, that's an interesting thing. So you have a circle. Now, there are two arcs which you don't really know what they are but what you do know is you know their sum let's call this arc x and this arc we will call y. So you know their sum which is equal to some arc like this. Okay, so this is x plus y and you know their difference somewhere here. Let's say this is x minus y. Alright, so you have these two arcs this one and this one but you have to construct x and y. Alright, so how can we do it? Well, let's call this arc A and this arc B. So x plus y is equal to A x minus y is equal to B. Now, let's just think about this from an algebraic standpoint. These are actually two equations with two unknown. A and B are known, x and y are unknown. Now, how can we solve the system of two equations with two unknown? Well, in this case it's very easy. Let's sum them up and you will get two x equals A plus B and x equals half of A plus B, right? Now, if you subtract them then you will have two y equals A minus B so y is equal to A minus B, one half. So, let's just think about this. These are solutions to our two equations. So if knowing the arcs A and B we can construct half of their sum and half of their difference that actually would be our x and y which we are looking for, right? So, let's forget about the equation now and let's concentrate on building the solution. Now, how to build one half of A plus B if you know A and B? Okay, let me just draw another circle equal to this one in all respects. Now, this is A and this is B. Well, let's start from one point then have a compass, measure this particular chord and basically put it here, the same distance. So, this chord is equal to this chord. This is also A arc. Now, from this point, I take this distance in the compass and put it here. This is an arc B and whenever I put them one after another and let's tag them together, they represent A plus B. So, this chord is corresponding to arc A plus B and all I need right now is to divide it in half and we know how to do it. We just draw a perpendicular and this is the half which we need. This is an x. Now, similarly, A minus B is, again, it's very simple. Basically, the same thing, first you do A then you have to subtract arc B which means you take this distance and instead of going further along the circle you go backwards, so this would be your B which means that this would be an A minus B and perpendicular to A minus B divides it in half and this is the Y which we're looking for. That's it. We found x and y, we found both arcs and that's what was required. Next, given a circle and a point anywhere outside it. Okay. A circle and a point outside it. Construct a new circle with a center in that point that intersects a given circle in two points on opposite sides of the given circle's diameter. So basically you have to build a circle with this as a center and which actually crosses the given circle on opposite sides of the diameter. Well, again, it's very easy and it's using exactly the same technique. If you draw the line between these two centers now we know that diameter is divided by the center in two equal parts, each equal to a radius which means that from this circle's perspective this is a radius which divides this chord in two equal parts and it's perpendicular to it. Okay, this perpendicularity is all we need because how to construct it? How to construct this circle? Well, easy. You connect this center to this center and draw a perpendicular to this line, a diameter, because it's through the center. These two points are basically what we are looking for because the radius of this circle which we are looking for is the distance from here to here. So again, connect the centers, draw a perpendicular to this center line until it intersects the given circle and these two points are what you need to find out the radius of this circle, of a new circle. And again, as everywhere else we are using this theorem that if you connect a center of a circle with the midpoint of a chord it's perpendicular, or if you draw a perpendicular it will be a midpoint of a chord. Given a straight line and a circle not intersecting with it. A straight line and a circle. Find a point on the line closest to a circle. Well, intuitively it's obvious that the point which is closest to the center is if you connect the center with a perpendicular line to a given line. So this point is on the shortest distance from a circle. So this distance from A to B is shorter than any other distance from any other points, let's say C and D, which you can pick from a circle, one point in the circle, another on the line. Why? Simple reason. Connect this. You do know that, and you can actually put a tangent here as well. This is a tangent in this point A, which means it's perpendicular to the radius and that's why it's parallel to this one. Now, you know that all points which are lying on a tangent are outside of a circle, except one of them which is touching the circle, right? Now, also you know that A, B is a mutual perpendicular to these two parallel lines, which means A, B is shorter than let's call this point E. So A, B is shorter than E, D. You also know that all E is shorter than O, C plus C, E. Why? Well, primarily because all A is equal to O, C. These are two radiuses, and now we are adding something. So basically the whole road from O to C through E to G contains a couple of segments which are greater than the corresponding segments on the perpendicular line. This segment O, E is greater than A, B. Segment O, C is equal to O, A, but then we add yet another piece which is C, E. So no matter where you pick the point C, the overall distance from C to D will be greater by two actual increments. One is because this E, G is greater than E and then we add one more point because it's basically outside of this parallel line. So that actually makes the C, G a greater distance than A, B. So A, B is the shortest, and if you want to find the distance from the circle to the line, you just have to draw a perpendicular to that line, and wherever it intersects the circle and the line is the shortest distance between these two geometrical figures. After a while, actually, all these problems are very much like each other, and I mean, there are some more complicated problems, but they're not this type. All these are, whenever you see the chord, just draw a perpendicular to it. Whenever you see a tangent, draw a perpendicular to the line of tangency which will be perpendicular to the tangent itself. So these are typical approaches, typical techniques which the more you solve these problems, the more you almost automatically will use them. All right. Given a chord in a circle and an angle. Given a chord and an angle. Construct another chord in that circle that intersects a given chord at a given angle and is divided in half by a point of intersection. All right. So let's draw something like this. So this is equal to this. It's divided by a point of intersection in two equal parts. The angle is equal to the given angle. All right. Now, since we have a chord, we know what we have to do. We have to connect the midpoint with the center of a circle. Okay. Now, what do we know? So we know that this is a perpendicular because the perpendicular is the one which divides the chord in half. Now, we have another chord, the given chord. We can also put the perpendicular to this, right? So AB is given. MM is what we have to construct. We put two perpendicular to these chords and this one actually divides it K. MK is equal to KM. And the angle MKB is equal to, let's say, is alpha. Okay. Now, what can we say about this? Let me think how to construct it. All right. Well, obviously these are two perpendicular to these chords, which means this angle is also alpha. That's obvious, right? If two lines are making an angle alpha and you have two perpendicular to these lines, we actually went through this theorem a long time ago. The angle between the perpendicular is the same as the angle between the lines. All right. That's fine. Now, what does it mean? It means that we can build the point K by the following construction. First, you have an AB which is given to you. So you draw a perpendicular from O to a point L, which is midpoint, by the way, of AB. So you draw this perpendicular radius from the center to a given chord. It falls in the point L, which is in the middle. Now, you have this angle alpha.  And wherever it intersects, whenever this radius which you have built intersects AB is your point K. So let me start from this. So you have this AB. First, you draw a perpendicular, which is point L. Then, from O-L radius, you draw a radius at your given angle alpha, and that's how you get the point K. Now, having the point K, now you again can build an angle alpha, and that will be the chord which you want to find out. That's it. And again, we're using the fact that perpendicular to a chord divides it in half. Or if the radius divides it in half, it's perpendicular in both ways. Okay. Given an angle, a point on one of its legs, angle, a point, and a segment, construct a circle with a center in a given point on the leg of an angle, like intersecting with a circle forms a chord, a chord congruent to... Okay, so this is the center. So we will make something like this. So this is our angle. This is the point. And we have to build a circle with this as a center, which cuts the piece from K to L with another leg of an angle which is congruent to this segment which we have. So this is the length which we know. All right, fine. So how can we do that? Well, first of all, again, if there is a chord, most likely this perpendicular would be very handy. Now, perpendicular, we can always draw from a point to a line. So basically, the perpendicular is also almost like known. It's very easy to construct. We don't need anything, just draw perpendicular to it. Got the point, M. Now, what do we know next? Well, we know that the perpendicular divides the chord in half, which means that Mk and ML both are equal to half of the KL. So what you do next is you divide your segment which you are given in half and use this half from the point M on both sides, and you get K and L. So basically, you have the radius now, which you have to use from the point O. Use this as a radius and you draw a circle. Simple is good. All problems which I am presenting here are simple, which means it takes probably a minute for you to be able to solve it. Now, this problem is very similar, but instead of a point on another leg, we have a radius. So given an angle, a segment which you have to cut from another leg, and instead of a point, you have a radius. So if you have a circle, so you don't know this point. What you do know is the radius, which is the same in these cases, right? And you know this length. This is 8. Okay, but now let's think about it. Again, draw a perpendicular which bisects the segment A in half. So you do know this side of this right triangle. And you know the hypotenuse, which is your radius, right? Which means you can build this triangle. A right triangle can be built by characters and by hypotenuse. So you can build this triangle. Okay, build it somewhere else. One side is people one half of A, which is this one, and hypotenuse is R. So you build this triangle, which means now you know another character, which is this. This is a distance from the line which you have been given to a center. Now, where are all the points which are on certain distance from this line? Well, it's a parallel line on this particular distance along the mutual perpendicular. So how to build this line? Well, you build a perpendicular anywhere to this leg of an angle. You use this length, this calculus length as the catching point on this perpendicular. You get this and draw a parallel line to this. And wherever this parallel line intersects the other leg of an angle, that's your center. Now you have the radius and the center and now you can draw a circle. Okay, give it a straight line and a point on it. Okay, straight line and point on it. Construct a circle of a given radius such that a given line is its tangent with a given point being a point of tangency. So you have to build a circle which is tangential to the line and this point which is given is a point of tangency. Now, we know that the radius which is connecting the point of tangency and the center is perpendicular to a tangent. Already discussed it many times before. So in as much as I was telling you that every chord in all these problems most likely requires the radius into its midpoint, tangents usually require the radius into the point of tangency which is perpendicular to the tangent. So, what do we know about this? The radius is given and the point of tangency is given which means how to construct it. You just take this point you draw a perpendicular and cut the length which is the radius and that's your center and this is your radius for a circle. That's it. This is the simplest. The last problem on this construction number three construct a tangent to a given circle parallel to a given straight line. Alright, so you have a circle you have to construct a tangent which is parallel to a given line. Very simple. Again, these are parallel which means this perpendicular is perpendicular to both. So all you need to do is draw a perpendicular to a given line and wherever it intersects the circle that's your point of tangency. So you got this point. Now how to draw a line? Again, it's perpendicular which you already have constructed because the tangent is always perpendicular to the radius in the point of tangency. So that's it basically. Perpendicular and another perpendicular. Okay, that concludes my ten problems for this particular construction number three. But I have others which I will just put into another lecture. So that's it for today. Don't forget that all these problems and the future ones, etc. try to solve it yourself. That's number one. Number two the website Unisor.com is for not only for students who can just listen to the lectures solve problems, etc. but also for parents, supervisors or teachers who would like to supervise a group of students and basically give them enroll them into one or another particular program which Unisor provides and that enables the students to go through exam and parents or supervisors can basically check the results of this exam maybe analyze if they want to if they don't just say the student until the exam is done completely, you are on it. And if everything is okay mark this particular program as completed and enroll into the next one. One by one you will cover the whole math. Okay, thanks very much and I'll see you the next time.


Hey, this is Brett, and this 2020 Ford F-250 Crew Cab with a reading utility box on it is stock number 14090ZA. I am here at Summit Automotive in Fondlack, Wisconsin, you're new and used heavy-duty truck headquarters this 2020 Ford F-250 comes with the 6.2-liter V8 gas engine. It's paired up with the six-speed automatic transmission. This truck has been fully safety and inspected by our service shop as a fresh oil and filter change. All the fluids have been checked and topped off, and this truck is 100% ready to go. I'm going to go all the way around in this video, inside, underneath, start it up and take a look under the hood to give you the most accurate representation that I can of the vehicle. Oxford White is the color, I shoot all my videos in 4K, if you like the video you can subscribe to my YouTube channel, which is youtube.com slash summit auto. The bell notifications get updates on the videos I do each and every day, as well as having access to one of the largest catalogs of vehicle and heavy-duty truck walk-arounds on YouTube. The XL package gives you these steel wheels, and it has some nice Cooper Discover rugged Trek tires, these are LT26570R17s, I would say they have probably about 60-70% of the tread left on them, frame and under bodies in pretty nice shape. This is a one-owner clean title history, clean car fax out of Pennsylvania. The car fax will say that it was previously owned in Ohio and Pennsylvania, I think they just had to title it, and then it was the original owner was from Pennsylvania. So this truck spent its entire life in Pennsylvania. Front bumper is in excellent condition, no dents or dings on there, chrome looks really good. The grille is in nice shape as is the Ford logo. The hood is in really nice condition, I didn't see any major dents on there, and it does have the cab lights up top. Passenger side front fender is in excellent shape as well, and the passenger side front wheel no major scuffs or scrapes or damage to it. As you go down this side of this 2020 Ford F-250 take note of how clean that body is, how reflective and mirror-like the paint is. That box is in nice shape for a utility box. Looks like they might have had something screwed down on the top of that, but for the most part in really nice condition. I take these HD videos so if you're far away or even if you're close by and you just cannot make the trip down but you're still interested in purchasing the vehicle you can see the truck, hear the truck, and have confidence in what you're looking at before you even get here. Back wheels in really nice shape. If this video helps you make that buying decision, let your salesman know that you saw the video. It was helpful and that brought sent you back rear air bags, frame and under bodies in pretty nice shape, like that all the way underneath. So all the remaining factory exhausts, lower rockers, and cab corners look really good, and it does come with the factory step bars. So this reading box comes with several doors. You can see they are very clean on the inside. The shocks are in nice shape. Some really nice partitions in there and shelves. Looks really good. You get LED tail lamps on here. This is a reading classic 2. Towing package with the receiver hitch and seven pin and four pin wiring. Rear bumpers in pretty nice shape. It does have one little ding right there. Tailgate goes down like so. Here's some more of those partitions for the shelves. The bed is in really nice shape. Shuts nice and solidly. Going down the driver's side, just as clean as that passenger's side. Let's get in boxes in really nice shape. All these are exactly the same inside. And this back wheel is in nice shape as well. Down the rest of the side of the truck, cabin doors all look really good. You get the telescopic tow mirrors. They're heated, built in directional signals, they telescope out like so. And fold in like that. Take a quick look at the back seats. They are in really nice condition. No rips or tears. Does have the latch child safety system. Smells very clean inside this truck. I don't think it's ever been smoked in. Seats are in great shape. Nice flat floor back here. You know when you get work trucks like this, you don't always get them in this nice of condition. Side curtain airbags on there as well. Child safety locks on the back doors and the inside and bottoms of the doors all look really good. You know, sometimes these work trucks can really come in rough. And this one is not. This one's really nice shape. There's your VIN sticker. No Canadian trucks here. Tire and loading information sticker. And then this is information on the reading box on there. So feel free to pause that. Inside the XL package gives you the gray vinyl interior. 40, 20, 40 split bench seating. No rips, no tears on the seats. Once again, very nice and clean up here. The heavy duty rubber floors, auto headlamps, tilt, telescopic steering wheel, power windows, locks, and mirrors. We'll hop inside, check out the miles, the radio, and everything this truck has to offer on the interior. You can see this one has 18,738 miles on it. You get a compass display. Miles to empty, and you can have trip one, trip two, fuel economy, driver assist, and settings there. Instrument cluster is very nice and clean. You get the multi-function steering wheel, Bluetooth and volume controls on the right, cruise controls, and information center controls on the left. You get your shifter with the six-speed automatic transmission with the optional tap shift. And this one has the AM FM radio. And down here, your climate controls, volume and tune controls, turned-out four-wheel-drive factory brake controller, and two 12-volt power points. You do get dual glove boxes right there. Passenger side format and floor and seat are in excellent condition. Once again, the headliner is in really great shape on this truck. You get six auxiliary up-fit switches and map lights up there. The center seat is in nice shape. There is storage under there, so that's pretty sweet. Let's start it up and take a look under the hood. Starts right up, no check engine lights or anything like this. I would personally like to thank you for checking out the video today. And hopefully from this HD video, you've been able to verify the quality condition options and, of course, cleanliness of this truck all the way around inside and out. Under the hood, we have the 6.2 liter V8 gas engine. Engine bay is very clean, runs very smooth. Once again, this truck has been fully safety and inspected by our service shop, has a fresh oil and filter change. All the fluids have been checked and topped off. And this truck is 100% ready to go. There is the emission sticker.  And I would highly recommend this truck from a quality and condition standpoint. If you're looking for a utility box truck, F-250 crew cab, this is the one. You're gonna really wanna come get this one because it's in really nice shape and nicely equipped. And to see more pictures of this truck or one of our other 550 new-news cars, trucks, SUVs, minivans, Wranglers, half tons, three-quarter tons, one tons, you name it, we gotta go to the website right there, summitauto.com. Full pictures and descriptions of every single vehicle all at summitauto.com. If you'd like to check out more HD videos, you can go to youtube.com slash summitauto. Click the bell notifications, get updates on the videos I do each and every day as well as having access. One of the largest catalogs of vehicle and heavy-duty truck walk-arounds on YouTube. In fact, in a second, you will see a link to subscribe to my YouTube channel in the upper left, a link to all the F-250 videos I've ever done in the upper right, a link to this vehicle on our website in the lower left, and a link to one of our latest YouTube videos in the lower right. Click those checks out. We're super excited to help you with this ultra-clean 2020 Ford F-250 Crew Cab Reading Utility Box Truck in Oxford White. Thanks again for checking out the video. Remember to like, subscribe, and share on the YouTube channel. I really appreciate it. Thanks again.


Okay, it's three o'clock. I think we can start our session. So first of all, welcome to my talk about Diba and Java packaging. My name is Markus Krushani, and I'm a member of the Java team in Debian. Today I want to talk about our three build systems, about our three build systems, which we often use in our packaging work, about and, Maven and Gradle, and I want to introduce you to the most important Java terms and concepts. And I want to talk about Java Helper, which is very helpful if you want to package something which has no build system at all, or if you want to modify a package which uses a different build system. And in the end, I want to show you some common error messages and how you can avoid making mistakes. So if we talk about Java, then all you need to know is that source files have a suffix called Java. So our typical Hello World program would look like this, and if you wanted to compile it, you just have to type Java C Hello World. Now you can see that another file has popped up, a class file, and this file is just bytecode. And one aspect of Java is that everything is compiled to bytecode, which is interpreted by the open JDK. So if you compile it here in my system, which is AMD64, it is possible that you can transfer the file to any computer where an open JDK is installed, no matter the operating system, no matter the architecture, as long as it is supported. And you could run this program just like this. Hello World. So the next step would be something more complicated. Let's imagine you have a program which consists of three or four of these Java files. And in Java, it is convention to organize source code in directories called packages. So we have two packages here, compute and engine. And you would compile multiple files like this. And now you have two class files within the compute directory. Compiling class files is one thing. If you want to transfer those files, you have to make it more, well, some kind of, you want to transport it to another computer and you want to combine it into one single file. All you have to do is creating a so-called JAR file. A JAR file is merely a zip archive and all those class files are stored within this single archive. Plus one file, which is very special to Java, it is called a manifest file. And this is very important later on. So let's see how we can create a JAR file. The command is JAR. And something like C, V, F. The name of your JAR. And then the class files you have just compiled. Now you can see that OpenJDK2, it has added a manifest file. It's a so-called default manifest file. And you can take a look inside the JAR, like this, and see that the manifest file consists of just two lines, a version and a created byline. Manifest files can be much more complex and you will later see that it's very useful to modify this file because there are also information stored like the class path, another very specific Java term, which basically means where can my program find my libraries on the system? At the moment, it does not know. So you can change the class path within the manifest file, but you can also say, you can add it to the command line and tell Java to execute a program like this one. So you would call java-cp, stands for class path. And wait a second. Ah, first of all, let's move our computer to another directory. And then, no, that's not it. So you would call, of course, the java-c command, which is to compile. And then you put the computer on the class path and target the compute engine java file in engine. And now you can compile the engine file. And that's basically how all these java compilation things happen, how builds happen. This is the most simple case. So if you take a look at your compute engine java file, you can see statements like import compute dot compute, which just means the package compute and the class compute. The package compute and the class task should be imported. And you have just told your compiler that you should look for a compute jar in your test directory. And then he knows, okay, there I can find my classes and then compile my compute engine java class. This is what happens hundreds of times in Debian Java, only on a much greater scale. I just wanted to tell you the most basic aspects, but this is, in principle, what happens at the core all the time. Now, let's imagine you want to package an application which consists of 10 to 100 files, but you realize it has no build system. So what do you do? For example, there are many packages, API packages in Java that need, well, that we need, and they are available multiple of times on the internet. We just did one. So I have pulled two packages from main central, that's a repository for Java files, Java files, and then I see that there's only one directory. Again, that's our namespace, org, OSGI, and then you see a lot of packages, DTO framework and so on, but you see there seems to be no build system. They're just directories and files, source code. So what can you do? You could, again, use the Java C command and compile your packages, and you could create a simple script, a loop, and then, well, somehow you would compile all those files, but you don't have to reinvent the wheel because we've created a tool called Java Helper, which just does this work. So in OSGI core, there's a file called Java build, and as you can see, all you have to do is, you give your Java file a name, in this case, OSGI.core.jar, and point to the directory which contains all those source files, and that's basically it. Java Helper will compile all those files for you and create a Java file called OSGI.core. So how can you find more information about this Java Helper tool? So you would go to user shared doc, Java Helper, and then we have a nice tutorial in HTML and text, let's prefer text here, and there you can find all those commands. They are prefixed with JH, and it's pretty similar to the Depp Helper commands. At the moment, you only need to know one command, it's called JH underscore build, and that's what you actually do with your Java build file. So like with Depp Helper, you can choose either a file or you can choose to put those commands into your Debian rules file and execute it. So it's up to you, it's a matter of preferences and it doesn't really matter. So here you can see we use a Depp Helper and DH sequencer, and if you want to use Java Helper, you just pass with Java Helper to your DH command. What else is important in this file? You can see two variables. Yes, I forgot. If you have any questions, just ask, it's a workshop, so yeah. I have a question because I learned that frequently necessary that you add this UTF-8 thingy. Isn't it possible to make it the default because I always need to add it, so one. Good question. Well, I've asked the same question multiple times on our mailing list, but there's one team member which could win me, okay, not really, sorry, if you see this video. No, it's quite difficult because there are multiple build systems and they default to like Maven to USS key. And that's, I always think why do they do it and don't change it to UTF. But you are asking not the subset of UTF-8, so nothing should happen. Yeah, well, they have made it the default. So they argue that it is the job of the packageor or the upstream antenna to set the correct value. So they are not responsible for setting a language feature. Yeah, I agree with you, yes, it makes sense somehow, but we don't want to override upstream of the build systems and well, I think it's struggling against upstream isn't the best way to spend our time. So what you can see here is the JH build command is called and we passed two options to it, Java C ops and Java doc ops. And while we say, okay, please use UTF-8 as your preferred language, so otherwise the package wouldn't even compile. Yeah, what else can you see in this file is there are two variables called Java home and class path. I've told you about class path before. So here we tell our Java helper program that he needs to look in user share Java OSGI dot annotation dot jar to find the needed classes to build OSGI core. Our convention is to install system-wide Java libraries into user share Java. We have one unversion Java, a Java file and one version Java file. And that's mostly important if you use build systems like and or if you have no build system at all. Those, for those build systems, it makes sense to store it in such a global directory. You will later learn that Maven has a different concept and we install the same Java multiple times as we just similar to different directories because we have to keep a certain layout for Maven. But at the moment, it's just important to know if you create a package, you have to install at least one Java file and at least it should go into user share Java. A Java home is important. I'm not sure if you need it anymore. For Maven builds, you don't need it, I'm quite sure. But for non-build systems or and I suggest you still use this line export Java home so that the tools can find our default Java development kit which is OpenJDK 10 at the moment and will be OpenJDK 11 in a few weeks. Next question. If it's a default, why not setting the default and just do something else if it's... Yes, as I said, it is default for Maven builds already so you don't need it there anymore. But I put it stupidly in every rules file, this line Java home equals to this one. So it could be included into Java helper and then you have shorter rules files. Yeah, you sometimes want to override it. Yeah, and you override it. If you want to override it, do it. But if it's default, I don't know. Okay, let's think about it, it makes sense, yes. So sometimes you want to override it and then you have to look, just go to user, lip, jvm. So you can see there are multiple choices at the moment. Only we will keep only one for Buster which is OpenJDK 11. And okay, OpenJDK 8 will be kept just for development purposes and it will receive no security support at all. So, okay. So, what else? Yeah, so there's a second command here. It's called JH Maven repo helper. I'm just telling you about it but it's meant for installing these jar files I mentioned before into a Maven repository. So, and does nothing, does not know about Maven and if you have no build system at all, of course it doesn't know how to install a Maven artifact, a jar file. So we have created tools like JH Maven repo helper or Maven repo helper, just Maven repo helper that install those files into a new directory which is called user share Maven repo and here you can see different packages already installed on my system and the layout is as follows. So you install those artifacts into user share Maven repo and it is the same namespace as you would see in the package itself. So, let's see for Lib 12 monkeys. Oh, no. Where is it? Let's just take another one. Let's take commons codec and then you have commons codec, commons codec. So the first directory is the so-called group and the second directory is the so-called artifact and then you can see the version 1.11 and a Debian directory. So your artifact would be installed into the versioned directory but we also create a Debian directory for one purpose to be able to reuse one package for one package for everything. So in Java it is very common, it is very version centric and we use it to, well, we save us time to package all these different versions which is also not allowed in Debian. So we just package one version of commons codec and use that version for everything. So even if another package depends on another version like 1.12, we just use the Debian version. So this creates problems of course too. So you have to constantly modify or patch different packages if they are not compatible with our Debian package but it cannot be avoided because we want to reduce code duplication and it's also a security concern if we packaged multiple versions of the same library. So in Debian there's always only one library, of course there are exceptions but the general rule is please package only one library and then try to make all your reverse dependencies to work with it. So yeah, so that's basically one way JH, Maven repo helper is in Java helper. I just mentioned it here, you can use it but I recommend to use Maven repo helper instead which is a separate package, let's see. So this package enables Debian packages which are not using Maven in their build process to provide install Maven pumps and libraries in the repository located in user share Maven repo. If you just use Maven or Maven only build system then you have to use Maven Debian helper instead. So always remember, if you are not using Maven, if you are either using and or Gradle or no build system at all, then please use either Java helper or Maven repo helper if you want to provide also those Maven artifacts. It makes it easier for other maintainers who have packages which rely only on Maven to find your jar files which you have just packaged. If you only install them into user share Java they won't find those jar files but it would be much more complicated for them. So if you would like, want to be nice to them please also use Maven repo helper to install those jar files. Okay, so that's it for no build systems. Let's go to end. In 2012 I packaged a media take view which is a German application to view and download public television streams. And that was my gateway or my, yeah, well, my first package which I contributed to Debian. And as you can see, media take view back in 2012, 2013 used end, how can you see that? If it is end, there's always a build.xml file. Well, so xml looks some say quite ugly, some say it is human readable. Well, you decide. And you can also see in this case that it uses references another project. It's called NB project and that means the upstream developer used NetBeans at this time. It's an IDE for Java and it's a bit specific but if you come across such a package always remember this is a NetBeans project. And if you want to modify something you could go to the NB project directory and just modify those xml files. So what options do you have if you want to build an end package? So you can, first of all, you have to modify, you can either modify the build file. And this is necessary because most upstream developers include other libraries in their package. So before you start even packaging just take a look at the sources and remove all JAR files and all class files. They don't do this out of malice but because they want to make it easier for other developers it's more convenient to bundle everything together and yeah. It's easier for Java developers. So if someone uses and usually creates a lib directory and puts all those JAR files into it. So in Debian we can't do that because yeah well kind of violates our principles so just remove it. And then you can either patch the build xml file and change the path from lib to user share Java because that's our generic repository or you can recreate the lib directory which you have previously deleted and zoom link all JAR files which are in user share Java to this lib directory. How do you do that? So you can use Java helper again. Just go through the documentation. Again, our tutorial. And then, let's take this one. So you can either use a file called linkJAS in your directory which looks like this one. And add one line for creating a lib directory. Another line for creating a sub directory, lib build and a third line for creating a sub directory runtime. Usually you only need the first line. And then all your build dependencies will be linked to this directory. So I don't know. It's a matter of taste I think. You can either patch it which might look more clean or you can use this helper tool. The end product is the same. So your build system will definitely find your build dependencies and will run all necessary steps. So Debian rules looks like this. Again, we use Depp helper. And you have only to add with Java helper again. And if you want to create Maven artifacts then Maven repo helper is your tool of choice. And that's it basically. So the other steps are generic Debian overrides which could happen in every other package too. Another example, electric. Electric is a nice application for... Yeah, it's a CAD system that can design circuits and IC layouts. It's also written in Java. And it also uses the end build system. Again, here you see that we don't lose link jars. There's also no sign that we use it in Debian rules. Again, we tell our build system that the class path where it can find all those dependencies is end user to share out Java again.  And that's it. So in this case, I have decided to patch build XML and remove unnecessary stuff and change the lib directory to user share Java here. You can see Java C is our compiler and then you can put your build dependencies inside a class path element and point to your build dependencies and user share Java. It's one way to achieve it. You can also use link jars. Again, it's a matter of taste and your choice. What else have you to remember about end? Well, end is a very simple build system. It is meant as a build tool in contrast to Maven which is more like a framework and a project management tool. If you can avoid it, I think end is simpler. But our support for Maven is equally good at the moment so you can choose. But it is simpler for beginners in my opinion so if you can choose, I suggest you use end. But fear not, I explain Maven in a few seconds. It's not complicated at all. Oh, wait. Okay, that's Maven. Maven, yes. So as I said, Maven is more like a project management tool. It is declarative and it uses conventions. So if you look at the Maven project, you can always find a structure that makes it quite easy for Debian packages because you instantly know this is a Maven project. Let's take a look at PDF SAM, which is a PDF application. You instantly know that it is a Maven project if you see a pom.xml file. That's a Maven project. And the first thing you have to do is analyze the dependencies and check whether they are already present in Debian. So Maven dependencies are structured like this. You have a group ID, you have artifact ID, and you have a version. If you want to find out if it already exists in Debian, I suggest you, for example, code search.debian.net. Just search for the name and you could do something like hibernate, path, Debian control. And then code search would list you all possibilities, possible occurrences of hibernate in your Debian control file. And you know, hey, there's a lib hibernate file. So this is obviously packaged for Debian because it's a very important package. A question on versioning. Is the version in Debian always guaranteed to be the same as the version in the Maven repo for a given dependency? I think rather no. So let's say there's a version 1.1. It's exactly the same version as in Maven Central or else. But, well, sometimes we modify the content because of free software reasons for multiple reasons. But we only package one version. So you can be sure if we package version 1.1 that it is exactly the same version as in Maven Central. Maybe we have modified it, we added a patch. Okay, you can easily see this in our Debian directory. But, well, if you try to package something and you know the project requires version 1.2 of this specific library, you have to use 1.1 instead. Or you upgrade the package to 1.2 and then you have the same version. But then you have to make sure that all other reverse dependencies still work, continue to work. So, obviously, that's kind of a bit tricky. Is there a quick way to tell if there's a difference other than, like, diffing it, basically? I know there's a tool like ABI, a compliance checker in Java. So you could use that to find out if you break something, the ABI. Well, that's our daily business, I say. We have to make sure that everything works. So the more important the library is, if you like an Apache Commons library, which is used by dozens of packages, then it can happen that something breaks. Well, and you have to fix it then. There's no other way. So we can only use one version and you have two choices. You either upgrade the library or you fix all reverse dependencies and it works with it. That's it, yeah. That makes it a bit complicated. That's true. Okay, so you can see all those different dependencies and it's a good practice, a common practice, a good practice to check, do they exist in that way? So this is your first step, check if they exist and then decide if you want to package them. For example, you don't need to package everything. Sometimes you have a Maven project which consists of sub-modules like PDFSAM, but you only need one module. So obviously you don't have to package dependencies for PDFSAM merge if you only need PDFSAM FX. What you can do is the following. There's a so-called POMS file in your Debin directory and you can see it lists all POM XML files in your project. So if you want to ignore something, just add the ignore option to it. And you will be done. And so don't worry about too many build dependencies. Keep it simple. If you don't need Java documentation, disable it. If you don't need tests which require often different build dependencies, disable the tests at the beginning and add them later if you really need them. So let's take a look at a tool which is called MHmake which simplifies certain steps. It is a tool to create an initial Debian package. It is very simple and it only works if you have all build dependencies already installed on your system. Always remember that it can't automatically fetch them from the Internet and create you a package, at least not yet. So what can you do? You can run MHmake and then it asks a couple of questions. The name of your source package, the name of your binary package. Do you want to run tests? As I said, no. It's too complicated for the moment. And then it checks the license. It analyzes the POM. And now it asks you, I found something here, a POM file. Do you want to ignore it? If you see it as highlighted, the Y is capitalized, yes. Then enter the version. Then it asks an important question. Change the version to the symbolic Debian version. As I previously said, it is preferred that we change everything to Debian because you can just point all your other libraries and applications to this Debian version and they will still continue to work. They won't work if we would use different versions. So always use the Debian version unless you have a good reason not to. So include all models. Yes. And then it asks again the question with the Debian version and you can press just enter. Okay. Well, it also knows whether a plugin is useful or not. In this case, the Maven source plugin is not useful for us because we always provide a source package in Debian. So we don't need this. We don't need Javadoc. And other plugins. So just press yes. Ignore stuff. Test dependencies, yes. Okay, now this could be useful. No. So here's a problem. Ignore this dependency Java X surflit. If you're a Java developer, you would know the surflit API is packaged in Debian. It's kind of strangely doesn't find it. I have installed it. But in this case, just ignore it again and hope it will work. So we just looks for another version of the surflit API. Cannot find it. We will abort and just continue. If you're unlucky, it can happen that MAH make will just completely abort and you are left only with three or four files and they are not complete. And then you have to figure out how to add the additional information. But usually I recommend just take a look at other packages which are very similar to yours and just copy them. Just rename the package names and they look all very uniform and very similar. No. So we just ignore the test now and ask another question about the description of the package if you want to add a description and it fails. Okay, that is the so-called presentation effect. So what you can see now is there's a Debian directory and it contains several files and this is what I mean. It is incomplete. This worked before but in this case you are left with only the relevant Maven files. Let's see, what is a Maven rules file? In this case you can see that your group ID the file consists of group ID, artifact ID the type and the version. And we always substitute the version with Debian and the syntax is the same like SIT, a stream editor. So if you want to change something you use a Maven rules file. If you want to modify a group ID you would use this syntax just replace the word with another word you know. Yeah. So the another important file is Maven ignore rules. It's the exact opposite of Maven rules. Here you would just ignore artifacts you don't need. Again the structure is the same first column is the group ID, second is artifact and asterisk means it can take any value. So all those artifacts would be ignored and the build system would just think ignore them. Last but not least the next important file is POMS. The POMS file if you create a package there's always some text explaining what the options mean. And here you can see that we ignore the parent POM by default and we add another option and this package version means use the latest or tell your built reverse dependencies that they should add a strict version dependency on your package so they always depend on the latest version. Yeah, decide for yourself if you need it or you can use the option ignore to ignore certain artifacts. We are running out of time so I just mentioned two things take a look at PDFSEM if you want to package a Maven project an application of Maven if you want to package a library of Maven use for example Lib 12 monkeys Java which is a very simple package and model your package after this one ignore sub modules if you don't need them and if you have any questions just talk to us on our mailing list Devin Java or on our ISC channel and we can answer them. So last but not least I want to mention Gradle which is the ultimate build system very complicated and very powerful of course it's the only build system you will ever need they say it's also a declarative and it uses Groovy as a domain specific language so you can create your you can modify every aspect of your build system of Groovy it's very powerful but for us Devin packages it's also very complicated to create a proper package it is much easier with Maven because it uses conventions so you always find the same information in your source directory your source directory as the code your source directory with the application code and the test directory with the test code and so on in Gradle this all can be very different remember for Maven you use Maven Debian Helper and if you package a Gradle application use Gradle Debian Helper Gradle Debian Helper is not as powerful as Maven Debian Helper but it transforms all those dependencies which are in a build Gradle file well in a format which can be recognized by our Maven tools so you usually the Gradle upstream will pull all dependencies from a Maven central and Gradle Debian Helper will help you to transform the very specific Gradle notations into something our build tools can understand remember that and otherwise you have to patch the build Gradle file so you have to remove stuff which doesn't work like methods or plugins which we haven't packaged yet etc it's a bit more complicated so there's no magic tool which will create a package for you we have different Gradle packages in Debian just take a look for example for the recent version of MediaTikView that uses Gradle previously used and Mochito is a Java library that also uses Gradle check that out or apk tool okay last words some errors common errors if you see failed to execute goal one of its dependencies could not be resolved and the artifact XYZ has not been downloaded from it that usually means you haven't added the build dependencies to Debian control or you've got the Maven rules file wrong so the artifact name or the group ID is XY but you wanted to call it banana so it is named banana in Debian so you have to use Maven rules to transform XY into banana and always remember most likely a problem with your Maven rules file or you haven't added the package to build dependencies secondly the package XYZ does not exist but I cannot find symbols that also means either you haven't added the build dependencies to Debian control or the library is too new or too old and they have just removed the class in a newer version or remove the method and last but not least previously mentioned unmappable character for encoding USSK well then you have to pass one of the encoding options of and Maven or Gradle to Debian to Dev Helper to change that well that's all the last thing I want to mention is or documentation is not very good at the moment I want to change I want to change it and I will within the next days update our wiki at wiki.debian.org Java packaging and add more information to it so you can carefully read it again and you don't have to rewatch the talk and I hope we can extend on it and well create more information to make it easier for other packages to package Java applications I thank you all for coming and see you around


hey guys what's up welcome back to my channel my name is Sonali and today i have my grandma here her name is lila her name's amma well amma is what i call her but apparently it's supposed to be amma is it well mom's mommy's amma yeah so it's apparently supposed to be amma but my sister couldn't say that when she was little so we all call her amma today we're gonna do the grandma reacts to my instagram's video and i think it's gonna be really funny because my grandma loves to roast me so let's get started i hope i'll be alive i don't even know how she's gonna react to these because i didn't i didn't know which ones to pick out but let's start with this one wow that's nice oh everything is covered up at least oh my god well i got a little shoulder showing that's okay oh thanks she always makes sure there is hand that's yeah she always makes fun of my uh cutouts and then yesterday she was wearing a little cutout and so i can make fun of her but do you like my makeup my amma always says i wear too much makeup i don't like that yeah would you wear it on your eyes never never what about this one who is that where is my sonali she's a genie it was halloween isn't it cool though no i don't know amma doesn't like makeup okay let's go with the natural this is natural oh my god what's natural about it oh you barely wear makeup you're barely wearing any clothes i am i'm wearing a true cup yeah no i was naked in this photo oh my gosh um let's see another makeup one my first cut crease too much too right it's pretty but that's no oh my gosh that's too much it's so pretty though no well damn i just taught amma how to use brow gel because apparently she took a pencil to her brow and just drew one line off the edge we don't have you know we do other things other than putting makeup on like cook and clean yeah but you can still put on your eyebrows nicely attend to our children and grandchildren yes thank you yeah she's been cooking for me a lot while she was here chicken curry opum pull a sherry fish curry what else i need my fish fry fish fry and my banana fry thing yeah all of them we love them okay all right let's see okay i like that smile thanks yeah don't i look bougie yes do you know what bougie means no what does it mean it means scary how i look scary okay no you don't look scary bougie means like oh like popping like i'm so bougie or like because that sweater makes you look like hollywood you know so yeah bougie oh we didn't have it in my days bouginess yeah what about this one oh this is your extreme cut out yes i'm glad it's it stopped there it could have been worse it could have been worse i've seen worse just two strips of fabric yeah here and there and on your knee and on your ankle that's a trend it's a trend oh my god don't buy it okay 168 for what fabric wild what about this i like that guy thank you yeah my grandma and grandpa just met my boyfriend and they said he was really better take good care of her he better oh you need more clothes girl yeah but it's a trend it's trendy oh you can go trendy look at all my look at all my accessories got a necklace sunglasses yeah i guess you have to show off your accessory without clothes yeah that's just how it is you know don't i look like a kim Kardashian that's common ever that's my sonali don't you like it yeah my hair it looks like a panting model i like that yay and don't a good one see that shows shows a little bit of skin no no no no i don't mind that okay no that just shows you don't need anything else you know you don't need to show off anything just be natural okay i'm gonna stop wearing makeup just for you yeah no i was kidding no makeup is to enhance you like i always say that yeah but not to cover you up unless you're having a pimple cloth is to cover you up okay not makeup okay well that's it of this video yes that's a wrap i hope you guys enjoyed this video it was really fun having her come visit here in atlanta she lives all the way in california and check out my vlog i will link my vlogs down below when i went to california the last few times i vlogged it did you see those vlogs yes she watches my videos yeah but she comes to california just to be near hollywood yeah trendy yeah but also to eat your cooking and to visit you yeah don't forget to follow my instagram to see all my summer adventures and i will see you guys in my next video bye guys bye