What's good YouTube? This is your boy Chiwara back at y'all again with another art tutorial If you're new to the channel go ahead and hit that like button come in subscribe Make sure you click post notifications, so you will be notified every time your boy drops some heat In today's video, I will be showing you guys how to make James Harden style of hair So without further ado, let's jump right into this video. First thing we're gonna do is drop the opacity down on our picture Say about a good 70 We're gonna lock that layer at a new layer Come over here to set our brush. We want to click new brush your pressure And change this to three you just type it in Three on this side And this is the only brush I ever When you on all my videos, it's the only brush you see me using and all I do is it's like I Press light then I go hard up in the center Then I come off of it It's just like a technique That's the only brush I ever use. I just changed the sizes of it, but All you got to do to get that brush is set your pen pressure sensitivity So let's go ahead and start we're gonna just Just gonna hurry up and get to the hair First time you want to do you want to go ahead and make I make your brush bigger Go down to five and we just gonna fill it in big Before we add the detail you just want to go ahead and color in the inside But you want to leave a little room Around the edges. We're gonna do the same time. We're gonna leave some On the edges Now it's time for the technique. So what you want to do? You want to bring your brush size down?  You want to kind of like Stop it like you're trying to make a upside down. See I just want to keep doing that and then the more you do it consistently to start looking like Little hairs So all you want to do is you want to keep that same Consistency going you want to make it a little bigger a little smaller and just left and right you want to keep doing it Make our brush a little bigger We can cover more ground You see how you can you can kind of still see like the smooth line All you have to do is just come a little closer And you can just on the field Don't make it perfect just you can make smaller Hair effects till we finish the process got the beard complete. So now we're gonna go up and do the top of the hair Finish the Mohawk So we're gonna use the same method for the top of the hair. Just want to keep making your swirls left and right Okay, now we finna get to the more tedious part and that's kind of like the fade to the hair to the Mohawk So what you want to do is You want to come in Let's make our brush like zero point seventy five We just gonna do this But you don't want to go past you want to make like an invisible line like right here Little thick and the lower we get to the closer we get to the ear We're gonna make our brush even smaller so it can have a nice fade to it so So the closer you get to the Mohawk you want to try to make it darker and you want to try to hide this line Sort of look natural Kind of like what I'm doing as you see the clothes. I'm getting to the line. I'm like I'm getting rid of it Try not to make it too perfect so it can have a more natural look to it Okay, we're gonna do that same step, but we're gonna make our brush smaller so you can come up to this 0.5 And just make it a little lighter and you can space it out more too cuz like When you give it space in it to give it a more lighter effect like you You didn't put too much emphasis on it. So And we're gonna put a gradient effect on the edge But we're just doing this so when it's when this Line works it on top of it. It'll have a it'll give it it'll give it more of a fake Where to pop now that we got the hair finished What you want to do is we're gonna make sure everything is closed off so we can That are filling in colors Now what you want to do after you don't finish your line work. You want to go ahead and click your selection tool Wanna highlight everything Go to object Expand the pants and then you want to go to your Pathfinder and you want to click merge so we can make All our lines one Right after you do that, you want to make a copy of your line work by dragging it down to this blank sheet of paper You want to lock the top layer Then we're gonna find a nice skin tone Yes, um, we like you want to go to your rectangle tool and you want to drag it over all the artwork All the line work You want to right click the rectangle tool. I mean right click the rectangle we just made Do you want to go to arrange sin? Backward, I mean sin to back And you'll know if you did that step right if you look over here at your layers And you see your line work sitting on top of the color right after you do that You want to highlight everything together? And then we're gonna merge this To make it one And now you can right click on it Isolate select group And then we can we can delete The unwanted color and to get the The skin tone out of the hair what you want to do is You want to come right here to your layer?  So it won't let us delete that So you can click this arrow right here And then you can highlight it drop down just lay it right there and close it again And now we can highlight Filling side out here all you got to do just like I said lock all the black line work inside the layer But don't lock the top two Don't lock these top two just lock all the line work inside of it and then you can close it And that should let you just go through and sometimes When it's not letting you select it You just got to open it up and make sure that that layer didn't lock on you Finish coloring The rest of the picture. So you want to click this arrow right here The selection tool Click on to it You want to right regular click it first you want to then you want to right click Isolate group and now we can change colors Individually now what you want to do To add a cool effect before We do the gradient fade On the hair what you want to do is you want to add a blank layer above The line work above everything And then you want to come down here To your colors and all you can click any gradient Just make sure you have a gradient selected because we finna change the colors to it You can come to windows and then you can click gradient What we're going to do all we need is three. So we're gonna We're gonna delete We're gonna delete the extra ones So what you want to do you want to come to the sides and you want to make that black and kind of Let's see what color we're gonna make it fade over for a dark color, but Let's try to make it fade a little bluish Okay out of color in the center We're gonna make it bluish gray So we're gonna have a nice fade to it And you can just look at my settings if you want to pause it So that's the center the sides We're gonna make this a little more purplish Come to this side and do the same Just this little more you'll see what i'm doing at the end. Okay. I kind of like that. So i'm finna let y'all Look at my settings That's the first one It's the one in the middle and there's the one on the far end.  And you want to add the same swirls We did We did on the outside But you can be more more random Inside the beard you don't have to have a Order but I like to make it flow Like to make it make sense sense. I'm going this way. I want to make it flow around like this As you can see if you can see I want to make it flow around like Make it go this way So now we're going to go home to the top of the hair Another different effect like a more of a straight line than a curve But not too straight though. We want to keep it Keep the flow going Like it's natural hair So don't don't try to make it too neat But you want to keep some kind of consistent flow going We're going to add one layer Under the top line work in between And you want to get your Find this gradient tool You can just click any gradient tool and I'm going to show you what you do We're going to pull out our gradient And on this one what you're going to do you want to select this side And you want to drop the opacity down to zero On this side You want to make that fade until like a A brownish sort of flow good with this skin tone But you want to keep this You want to keep the bottom one at 100 or let's try to get a brownish color. Okay, that's pretty close So now what you want to do Now that we got our gradient tool selected We only want to have that out. So we're going to lock this Then we're going to come to our pen tool Now we finna Place it right behind our if you don't know how to use the uh The pen tool I have a video on that that'll show you how to use it. Nice Now what you want to do That we still got that selected we're going to Bring out our gradient and we're going to come right here And we're going to have a fade coming from the top Y'all much we want it to come down. So pull this level right here It's more perfect, but I'm just trying to show you guys so you can Take the time and really get it get a nice little Nice little edge going because it looked like I got to mess them up a little bit But it's all good


Hello, it's another edition of Plus Reports, a compilation of the stories and events that made the news recently. Welcome, I'm Jacinta Obiuco. We are kick-starting with the 45th anniversary of Oduwa's Investment Company Limited, a company owned by the Six Southwest States of Oyo, Ondo, Ogun, Oshun, Ekiti, and Lagos state. The keynote speaker at the event opined that management is one thing that has led a country as a region, corporate entity entrusted with public resources and legacy, where it is economically. Celebrating 45 years of business operation in a harsh economic reality, such as a situation in Nigeria today could be worth the while. Sons and daughters of Oduwa, business moguls, and captains of industries all were represented here. For guest speaker Doton Sulemon moved them to a change of mindset to question the past and embrace new ideas. Where were we when Abuja was being built from scratch? From ground zero. What did we do? What part of that we own? And where were we when all the oil blocks were being auctioned? We just had not, we just were a late entry into the gander which had been playing for 40, 50 years. Now the question therefore is that how do we characterize the last 45 years? To me, I'm asking myself doesn't a squadron of inherited riches sound rather apt. Lagos state governor Babaji De Sawulu was represented by his deputy Obafemi Hamzad. He tried to provide answers to questions posed by the speaker. But I think it's important for us to know that the future becomes and we have a responsibility to accelerate the process of transforming this legacy company. It's a legacy company and the vision of our forefather you can't you can't just, but marvel. This is a time when they don't have computers. This is what the time when they only have public typewriters. So for them to even put that vision together is just unbelievable. So these, they were genius. Paaya Okwadukun would rather talk on regionalism and restructuring, though not losing sight of the legacies of the founders of Odwa conglomerates. The film of the anniversary is celebrating 45 years of dynamic transformation of the western region into a big conglomerate from Lagos love Ikuku Uyiduku for Plus TV Africa. Reactions have continued to throw the arrest of 14 persons including a journalist who allegedly posed as security personnel and raided the home of the second most senior judicial officer in Nigeria, Justice Mary Odili. Spokesperson for the ex-president Ibrahim Babangida helped on the need for Nigeria's security system to rid itself of this connection and dislocation from the citizens and the need for the judiciary to begin to clean their house so as to avert future occurrence. Plus TV Africa's correspondent Destiny Momo has more. The judiciary as it is always said is the last hope of the common man. This claim is predicated upon its role in protecting the rights of every person, cooperation in organization against violation by the strong in the society. Justice Mary Odili's home invasion has been seen as an eye opener to members of the judiciary to take advantage of private security practices to secure their home and environs. Governor Weaker also speaks underneath for the judiciary to be protected as he personalized a humiliation on justice Odili. The judiciary as an arm of government has been said to be relegated to the financial dependence of the executive arm of government in Nigeria, hence the many challenges faced. Spokesman of former president Ibrahim Babangida and national secretary retired members of Nigeria and armed forces spoken how a brutish and barbaric such invasions warrants bring. At the scene of that crime a lump in the way raised and I was expecting the police at that point if they are not comfortable to have gone to make arrests on this spot. Security vulnerability for an example if they were family members in that house at that time how do you think their lives should have been secured if we are finding now that these guys are criminal elements not supported by these state actors. They also lend their expertise underneath for the attorney general of the federation and the legal structure to clean their house to stop such embarrassment from resurfacing. Saying the AGF have such powers because the silence of President Buhari has given him a consciousness power. And it's also a reminder to the judges and justices of the supreme court that they should not continue to cultivate all manners of bestialities in the way of manner they dispense injustice. At the general of the federation you saw the embarrassment so let them begin to clean the house if this one is found wanting they should remove his thumb and let's see if it's possible. Attack on Justice Maria Dali goes to show that the citizenry are all in endangered times. Meanwhile according to police spokesman Mr Frank Mba the 14 suspects and seven others now at large conspired to raid the residence following information that the supreme court justice was keeping a lot some of money in foreign currencies. Destiny mama for Plus TV Africa. A lot of people believe that the arrest made so far by the Nigerian police will not only restore the sanity of the nation's judicial system but we also been seen to have restored public confidence in the administration of justice. On nation building now the Igbo and Yoruba community leaders in the northeast Nigeria have called for the unity of the country noting that with fairness and equity the nation will overcome its threatening situations that believe that individual or regional interests should not be above collective interest. The 34th national festival of art and culture is currently holding in a kitty state contingent from 36 states of the federation arrived the state to showcase the rich cultural values of their different states. This is just as the state governor Coyote fire me promised the continual support for the cultural development of a kitty state and Nigeria at large fire me declared the event open in adoe kitty he also stressed that the cultural festival will provide them an opportunity to learn and enjoy the rich cultural hospitality and goodwill the state is endowed with. The body of our national commitment which has rested solely on the performance of our food oil in the international market has continued to render the nation in over. This comes for innovative and creative solutions investing in culture and crucial to the general development of any society. Culture impacts on economic growth by strengthening social values creating trust with facilitates relationship and inspiring motivation that the director general national council for art and culture and president world crafts council african region old shagwin runs away explained that nafist provides a platform for nigerians from different ethnic backgrounds to showcase their unique cultural manifestation. Nigeria is one entity and we are unity and nothing can suppress us. Nafans is a brand that came up after the civil war in 1970 and today kentucky was having an equity is telling a story of the people united and being together for me it's a platform to embrace what unites us that what separates us. Nafans is a brand that has changed the narrative of this country. Some people have told you some stories about akt about nasalawa about oku but all of them are here. That's to tell the story to the world that this country we are together. He added that it also brings to fore the role of culture in national peace and harmony as well as the vast opportunity in the cultural sector for job creation and economic empowerment. He called on the participants in all the competitive events to go into them in the spirit of sportsmanship adding that the essence of the event was to build friendship as brothers of the same nation. The southern leaders insisted that the oneness of the nation is not negotiable and urged separatists to shelf such idea for collective interest. On security matters now the chief of defense staff general Loki Irabbo has advised officers of the joint tax force oppression delta safe and personnel of order security agencies in the Niger Delta not to relent in maintaining peace in the region. General Irabbo made this call during a visit to the headquarters of oppression delta safe in Yonohua by also state. He said security is everyone's responsibility adding that all residents must work together for the sustenance of peace in the region. This is general Loki Irabbo's made in visit to the joint tax force and the south side code named oppression delta safe. The chief of defense staff is grateful to the JTF commander and is meant for walking tirelessly to ensure there is peace and security in the region. The visit is meant to serve as a moral booster to the officers and to also provide an interactive session with those involved in the exploration of Nigeria's oil and gas resources. General Irabbo hopes to have more of such meetings. I'm meeting primarily to speak to the commander. I can assure you is that the settlement is a killer of what you now see. They've done incredibly well I must say and of course that will be sustained in the near future we will see a near zero incident regarding both insecurity as well. General Loki Irabbo uses the avenue to inspect ongoing projects in the OPDS headquarters and commissions a newly built gymnasium. The commander of oppression delta safe rare admiral Abubaka Al-Hasan appreciates the CDS for the visit and for always responding promptly to the needs of the JTF. The Nigerian Navy shipyard is limited to launch four gumballs for the OPDL while on the same day the awarded contract to the shipyard for the construction of six new ones for this operation. The chief of defense staff proceeds to visit and encourage officers of Sistine Brigade of the Nigerian Army the Mobility Command Nigerian Air Force and finally the Central Naval Command headquarters where he's giving a warm reception. While he was at help of the oppression delta safe we addressed the personnel before then we had had a meeting with stakeholders in the oil and gas sector. The primary reason why this year is to hold a discussion or to address the officers. The CDS is also full of thanks to the people of the Niger Delta region for the cordial working relationship with the security agencies over the years. Jesse you see plus TV news Yeneva. We will now go on a short break and we'll be right back with more.


So, I've got good news and bad news for you. The bad news is that this presentation is not that technical at all. In fact, all the things described here will work on 12 release or even 11. The good news is it's not technical at all, so everyone can try it at home. My name is Michael. I'm actually from Hong Kong, but right now I'm studying pure maps in San Jose. I'm a previous user since maybe four or five years ago, and accidentally I start programming in a lot of different stuff, web, iOS, and sometimes OS. So there are a lot of reasons why you want to have a GPU-accelerated guest in Beehive. First of all, you might have some application that you just want fancy graphics, and that breaks into a few categories. For example, you might only want to accelerate one application, or you want to actually render something, but you don't really care what it shows on screens. But the last kind of acceleration is like you actually want to always have access to some graphic interfaces. So for application-level stuff, that's quite easy. You don't need to do anything special. You can just use VirtualGL or Alkuda. In that case, you don't need to worry about anything about hardware-level things like GPU pass-through or even VGPU, which is kind of an interesting thing. So a question about Beehive is, is GPU pass-through even possible? Because nowadays, if you look at the Beehive wiki, they will tell you that GPU pass-through is not supported. I mean, VGA pass-through is not supported in Beehive, but in reality, a GPU is just like any other PCI device with some extra features. So it is actually possible to pass-through GPU to Beehive. For example, this take from my Twitter when I accidentally discovered this fact. As you can see here, it's actually running RTX 2070, and it's actually running in a Beehive guest. The story behind this is that I have a previous machine at home, and it's running current. And apparently, the latest NVIDIA GPUs and the drivers does not support current, they only support up to 12, and if you want to compile against current, it will actually crash or panic your kernel. So I was just trying to make a VirtualGL server out of it, but I never thought actually I'd get graphics out of it, and then actually work on a monitor. So GPU pass-through is possible, but it's not perfect. For example, the GPU you try to pass through to the VM must not be used before. For example, if the BIOS thing, if it ever runs on the GPU, or if your console has ever run on the GPU, it cannot pass through that GPU. So what you need to do is actually use a separate GPU for basic console stuff, and then you need to have another GPU that use only to pass through to the virtual machine. And after you pass it to the virtual machine, you can actually only use it once. That means if you want to use it again, the only thing you can do is to reboot the host, because now the GPU is ... we'll talk about it later, but actually I tried to tweet the PPD driver as well, but it does not really help. But it's actually an interesting discussion we will talk about it later. So it also does not work on all different kinds of OS. For example, I was never able to boot Windows from a crash instantly. Yeah, it's Windows, come on. So some prerequisites that you need to pass through a GPU to a guest. First of all, of course, it's a PCI pass through. So all the things you normally would do to pass through a device to a Beehive guest, you need to do it here. And again, the GPU must not be initialized yet. And also that the GPU must be a real trivial GPU. For example, if you have a laptop GPU, like a ThinkPad, and then when in the bios it's a hypergraphic, you cannot pass through that, because sometimes when you actually use it, when you initialize the integrated graphics, somehow it touched the NVIDIA graphics card as well. So that won't work. Yeah, the third one is a good one, but you don't really have to do that, which is to donate to BSD projects. So first of all, I've tried a lot of things to work around the initialization problem of the GPU. So the GPU I use is actually an RTX 2070, and I spelled it wrong. Which it actually lied about itself. It actually lied that it support a function level reset, but even the PPT tried to reset it with FLR, it actually won't work. So when you try to use it again for other VM, it just won't work. So the way I do it is I modify the drive a little bit, and I force it to use PCI power reset, which dropped the power state to D3, and bring it back again, it won't work. So that's pretty much hopeless until 13 minutes ago, I figured out something. For real experiments, of course, I tried it, but I don't try it on every kind of machine. I only have one desktop and it's AMD desktop, so maybe VTD offers something different, but that's what AMD offers. I use a Gigabyte disk motherboard. It's not commercial. So why use it? Because it has five PCI slots, so it makes doing these kind of things really interesting and easy. The first slot for the holes, I actually assign a 1050 Ti, because it's compatible with the old NVIDIA drivers in the ports. And I actually tried two GPUs to pass through to guesses. The first one is RTX 2070. That's the whole reason why I even tried this project. The other one is the AMD one, 550, because I was curious if K-Mog, DRM, would ever work. And all the guests are installed on SSD, so the B had just read from the diff. We talked about it before, all the Windows 10 guests actually does not work at all. So I check online, try to figure out why. And it turns out, from a Debian VGA pass-through wiki, they say that sometimes you cannot really assign the GPU to the root bus, because it will confuse the driver. So naturally, I try to assign it to a different bus. In order to do it in Beehive, I need to pass the dash Y flat, but somehow it actually crashed Beehive with an assertion failed. So I can never really try with Windows. But maybe, if I have an Intel motherboard, things can be a little bit different, who knows. So we can have free BSD guesses, because that's always the safest choice. The first attempt, I was using RTX 2070 and pass-through to free BSD guess. So I actually downloaded the latest and really official driver, so it would just work. The trick is that if you want to use a free BSD guess, you must use a UEFI loader. The reason why is you want to enable the VT console, so you can do stylus, otherwise X will actually complain about it and you cannot do anything. And of course, it's X, so the console actually will not show on screen, so you don't get a lot in POMPT and anything like that. Therefore, you actually need to explicitly add the bus ID to X.com and do a stylus. But if you want to use free BSD guess and you use SFS on the guess, there's a trick, which is you cannot have NVIDIA low and NVIDIA mode set low in loader.conf. The reason why is NVIDIA.co and NVIDIA mode set.co, they are so big that if you load it in loader.conf, it actually does not have enough memory to load SFS.co. So you end up with something that you cannot put.  That's the only way you can get it work. But there's a bonus for the NVIDIA graphics card, which is that the USB-C port on the graphics card actually works as a USB-C port. Why is it the bonus is because I try to pass through two different USB controllers to my B-Hive guess. It does not work. For example, when I plug in a USB thumb drive to the USB controller, somehow the free BSD guess keep, say, like the USB detection, detection, detection, which I'm not entirely sure if it's a B-Hive problem or a free BSD driver's problem. So the next one obviously is AMD, RTX driver, which used the DRM K-Mod. I was curious about this because originally I thought there's some matrix in NVIDIA driver that somehow it just know how to initialize the graphics card without VGA BIOS. It turns out the DRM K-Mod actually just worked.  So everything just worked. You don't even need a bus ID. Yep. I haven't tried that yet because I actually did just do it for experiments. If you have a 2070 and AMD 580, you want to use the NVIDIA one because it's faster. So that is actually amazing because that means if there's anything go wrong with GPU pass through, it's less likely to be a driver issue because DRM is actually open source driver. So you can actually look around and see what's missing.  It's like if NVIDIA has some secret source, then DRM K-Mod should not work. But the fact that DRM K-Mod worked, that means the factor from the driver itself has been proprietary with less likely. And then we can look at the performance figure. So I'm too lazy. So I only run the GL mark to branch mark. And as you can see here is the performance of the RTX 2070 when it passed to a VM. And the blue one, but they're both blue, is the RTX 2070 when it runs on bare metal. But this result may not be totally accurate because I cannot pass through all my coils and RAMs. And sometimes OpenGL has the problem that the CPU might actually throttle the GPU because the GPU tries to enqueue commands and the GPU actually waits for the CPU to enqueue more commands, things like that. I mean, it's probably the opposite. The other thing that's very interesting is the Intel GVT, which is like a technology that allows you to create a virtual GPU from an Intel integrated GPU. Of course, that means you can pass it to virtual machines. And the cool thing about it is that actually most of the code are already available in i9-15 DLM driver. So that means it might only need like very little tweak for us to get it working. And once it works, it probably just appears as some PCI device that you can just pass through to the virtual machine. And the fact that it's designed to run as like a VGPU might help us avoid a lot of issues. So I can get a little bit too quick here, but the reason why I want to get it quicker to the future work and work in progress is, again, back to the thing we talked about, the initialization thing, which brings us to the website. So when I investigate what happened that causes the GPU not being able to initialize again, automatically you can think about a few factors. The first factor is the PPT driver. The second factor is the GPU itself, because if the GPU actually has some limitation imposed by the vendors, then of course the vendors will try their best to stop you to do a pass-through. And the third one is actually the guest OS. Originally I thought it's the GPU's problem because of the NVIDIA thing, but later when I see when DLM K-Mod works, it kind of makes me rethink about it because DLM K-Mod is an open source driver. So if the vendor really tried to do something special to prevent the GPU being initialized again and again, then it should not really happen to DLM K-Mod because open source developers, they are less likely want to impose this limitation. And then after investigating more, I move on to the guest OS, and I realize maybe it's possible that when the free BSD guest shut down, it does not really tear down the graphics card correctly. If that is the case, then the graphics card is still in the state of already being initialized. And if the PPT driver does not do anything, then the GPU will still stuck in the state of being initialized, and hence it cannot be initialized again. And the first possibility is actually the PPT driver itself because I just forgot to leave it like 30 minutes ago. I find this very interesting thing on GitHub when I investigate the GPU password on Linux. Because I know on Linux on KVM, it is possible to reuse the GPU again and again. So it is a sensible thing to do to actually see what they do to enable it. And instantly you can see they have like this start and stop script here. Let me try to make it a bit bigger. But anyway, you can see when it tried to start the... to pass with the GPU actually stopped the X, of course, but then it actually unbind the VT consoles. So after unbinding the VT consoles, it unbind the EVI frame buffer, and also it detached the PCI device using the... the equivalent of PPT thing. After that, they basically load the VFIO kernel module, and then they actually then pass through it to the KVM guess and it works. And when they stopped, they actually do the same thing again, but this time they reattached the driver. So it made me think about if it's possible that our PPT driver is missing something, that maybe it's not detaching or retaching those devices correctly to cause the GPU not being initialized... I mean, de-initialized correctly. So I get... I think I go a little bit too fast. And actually that's pretty much... I want to say basically just like a report on what's going on. So are there any questions? So I'm wondering how you could use the same GPU on the host and in multiple guests at the same time. With Intel, you said there's a virtual GPU on other operating systems. Is it possible and what mechanism are they using for NVIDIA and AMD? I think NVIDIA has their own...  And I don't have one, so I don't have the details. But for the Intel one, what it does is basically allow you to create like VGPU out from the integrated GPU, and this will allow you to... You can actually create multiple of them. The only limitation is like each guest can only use one of them. And from my understanding, the guest can actually use those GPU with the Intel i9-15 driver. So the driver issue probably won't be a problem because as long as they can use i9-15. From NVIDIA, I'm not sure, but they might have their own proprietary technology to do that. And yeah, actually I have a friend who's working at NVIDIA. He tried to get me one of those graphics cards, but unfortunately the last few months I was... I'm not able to do a lot of research because as you know what happened in Hong Kong, so I was never able to get my hand on those GPUs. Before running your OpenGL benchmarks inside the VM, did you recreate the CPU topology inside Behive so that the CPUs were pinned and matched? Not really, but what I do is like I basically just run it from scratch, which is the same Behive script and then... But I didn't use that HFLAG, but I realized something strange. If I pass through too much CPU or too much RAM to Behive, I actually crashed Behive with unable to set a memory, but I'm not sure if it's like an AMD problem. So the best thing I can do actually is to pass through 4 CPU to Behive and 16 gigabytes of RAM. But of course on bare metal, it's like a huge difference, right? Because I actually get 32 threads and 64 gigabytes of RAM. But I don't think the CPU should fraud her the GPU performance that much though. You mentioned that when you're loading from loaded.conf having NVIDIA mode setting, kernel driver loaded and the ZFS kernel driver loaded that there wasn't enough memory for the two. On my laptop, that's exactly what I'm doing and it works fine. So is this something that was only in guests that you found to be a problem or also in the host? I have mostly in guests on host, I once load tons of drivers, I mean tons of modules with loaded.conf and it worked fine. But on guests, it never worked. On my ThinkPad, it actually sometimes when I load like AESNI and ZFS and NVIDIA modules, I get the same issue as the guest. So the limitation is in FreeBSD's UFEI loader. It has to do with the boot loader. The way EFI booting works, we have to make a temporary buffer that we copy the kernel modules into and then we exit EFI, we copy that into the right place and the BIOS booter doesn't have that. So because the guests are booting EFI, I suspect that we will flow the size of that buffer. And there is like a, you can, there's a tunable by default, I think it's 64 megabytes on 8064. You can make it bigger if you need to. Oh, that's awesome. You have to read the file loader to do it. But that's, I think, the limitation you're hitting. It's not specific to guest, it's specific to booting EFI instead of BIOS. So it's actually quite interesting to discover this stuff. And some of you might wonder where are Linux. The reason why Linux are not here because I have such a hard time configuring Linux to work correctly. For example, when I have Ubuntu guest and when I tried to make it default the GPU to the slot that I assigned, somehow it just crashed without even booting. So I was never able to test well. And in addition to my slides, I should remember one more thing, which is that on Linux and on, I once tried to pass through Linux and it worked without outputting the graphics directly to the monitor. But I suspect the GPU itself is still functional, but it won't run CUDA. As far as I know, even sometimes in KVM, CUDA just won't work. So running CUDA in a VM is probably not quite possible. But other things like running a virtual GL server probably should work. And that's actually exactly what I do with my 2070 graphics card. I run a virtual GL server in the VM and then I just ask my host to use it. Because my host is running current and it cannot run the latest NVIDIA's driver. Any other questions? Do you remember correctly NVIDIA broke CUDA inside virtualized GPUs on purpose starting with Pascal? That maybe you are. To force you to buy quadro cards. Yeah, and it's a lot more expensive. As a side note, regarding the CUDA, I have tested the pass through also with VMware. And I was able to pass the GPU and also run CUDA code in there. Oh, wow. Do you want to review with the K40? Come on, it's a K. Yes. Yeah, and that is like a consumer office card. That's cheating. Any other questions? Thank you very much. Thank you.


Hello friends, myself, Darshan Pandit, Assistant Professor, Department of Computer Science and Engineering from Walton Institute of Technology, Solapur. So, today we are going to discuss about handover in GSM. So, at the end of the session, student can differentiate between intra-cell, inter-cell, inter-BSC and inter-MSC handovers. So, basically we are having four types of handover, intra-cell, inter-cell, intra-BSC handover, inter-BSC, intra-MSC handover, inter-MSC handover. So, before going for these types, so let us see what do you mean by handover. So, handover is a process of transferring an ongoing call or a data session from one cell to another cell in order to avoid call termination when the phone gets outside the range of first cell. So, you can see in the figure when phone is moving away from area covered by one cell and entering the area covered by another cell, the call is transferred to the second cell. So that is the call is transferred from first base station to second base station. So, basically the base station is responsible for forming the cell. So, in cellular system, we require handover procedure as single cell do not cover whole service area. So, because of this, the smaller the cell size, the faster the movement of mobile session through the cell. So, we can have 250 kilometer per hour for GSM. So, this is why we require more and more handover of ongoing cell. So, however, so in this procedure, handover should not cause a cutoff or a call drop. So, in this GSM aims at maximum handover duration of 60 milliseconds. So, there are basic two reasons for handover when the mobile session moves out of the range of BTS or a certain antenna of BTS. So, the received signal decreases continuously until it falls below the minimum requirement of communication. The error rate may grow due to interference. The distance of BTS may be too high, that is more than 35 kilometers as per the cell size, the quality of radio link or a radio transmission is impossible in near future. So, these are the handover due to load balancing. So, these all are the various factor for which we require handover. So, another reason for handover is the wired infrastructure of MSC, BSE may decide that traffic in one cell is too high and shift some mobile session to another cell with a lower load. So, this may also cause handover due to load balancing. So, let us see types of handover. So, first is intra cell handover. So, this is the handover within a cell, a narrow band interference could make transmission at a certain frequency impossible. So, the BSE could then decide the change of carrier frequency. So, such kind of handover is performed to optimize the traffic load in a cell or to improve quality of connection by changing the carrier frequency. So, this type of handover is known as intra cell handover. So, second type is inter cell intra BSE handover. So, in this type the mobile session moves from one cell to another cell, but stays within the control of same BSE. So, the BSE then performs handover that is it assigns a new radio channel to new cell and releases the old one. So, you can see in the scenario 2. So, in scenario 3 it is known as inter BSE intra MSE handover. So, in this BSE only controls the limited number of cell. So, GSM also has to perform handover between cells controlled by different BSE. BSE is nothing, but base station controller. So, this handover then has to be controlled by MSE. So, last handover type is that is scenario 4 inter MSE handover. A handover that could be required between 2 cells belonging to different MSE. MSE is nothing, but mobile switching center. So, in this case both MSE perform handover together. So, just think and write which type of handover is required when a mobile user moves from one cell to another cell. So, that is inter cell handover. So, when to make handover decision? So, that is so handover decision is made upon the weak signal. So, the weak signal is identified by periodic measurement that is periodic measurement of mobile station and BTS is done based on uplink and downlink of mobile station and base station. So, we can see in the figure 3 which shows handover decision depending upon the received signal. So, received signal is measured based on uplink and downlink of BTS and MS. So, whenever MS moves away from one BTS that is known as BTS old and when it moves closer to new one that is new BTS. So, the handover decision does not depend upon actual value of the received signal, but on average value. So, the BSE collects all values that is bit error rate and signal level from uplink and downlink from BTS and MS and then calculates the average value. So, these values are then compared with the threshold that is handover margin which includes some hysteresis that is to avoid a ping pong effect. So, that is without hysteresis we can get a short term interference like shadowing due to building and it may cause handover. So, because of this we require some hysteresis. So, still even with the HOMargin the ping pong effect can occur in GSM that is a value which is too high could cause cutoff or handover and a value which is too low may cause handover. So, basically ping pong effect occur when MS is handed over from one cell to another cell, but quickly handed back to the original cell. So, this causes unnecessary signaling from UM interface or it may be from ABs or A interface and can give a indication of incorrect handover parameter settings or a dominance problem in the area. So, this figure shows intra MSC handover. So, figure 4 so, you can see in the figure on signal flow during inter BSE intra MSC handover. So, in which MS that is mobile station sends its periodic measurement report after that BTS old forward this report to BTS old along with its own measurement. After that based on these values that is current traffic condition the BSE old may decide to perform handover and sends the message handover required to MSC. Then MSC then comprises the request of the resources needed for handover from new BSE that is BSE new. So, this BSE checks if enough resources are available and activates a physical channel at BTS new to prepare the arrival of MS. After that the BTS new acknowledges the successful channel activation then BSE new acknowledges the handover request after that MSC then issues a handover command that is forwarded to MS. So, now MS breaks its old radio link and access the new BTS. So, this include establishment of a link with new BTS and release the resources of old BSE and BTS. So, to signal successful handover using handover and clear complete messages. So, this is how handover is performed in intra MSC. So, these are the references which are used to create this video. Thank you.


I. I'm here today to talk about something. I'm very, very passionate about. Kod en messy data. Yes, I'm passionate about messy data. But I'm mostly passionate about making it beautiful. Sasa wise men once said learn the most by sharing your knowledge with others. Så här är jag omstås det i dag. I. En kastis tack är något intressant till ju en. I get nothing else out of this talk. Here's a picture of me with the dragon. She's the one who causes those Friday fires. You're so afraid to deploy. I'm Michelle Sanmer. I'm an addict. I call her and code addict. So it's nothing I'm working to get rid of. I've been programming since I was a little child and I never really wanted to stop. I just kept doing it. En skit. Så att du har spännande entire talk, wondering about my accent. I'm from Sweden. I'm half Danish. I lived in Netherlands for six years and since 2014. I live in Switzerland, so it's European. In Switzerland. I work at this really amazing company. God leap. We are self managed, which means I am my own manager. And it also means it's really tricky to fire people because I don't like doing that. So basically we can do anything we want at least. Except we can't because we still have to get paid. In. Basically, yeah, it's great. Hur många people har hört av Lippe? Bevor. Okej, the people who already know me. I was gonna take a picture of all the people putting your hands up, because you heard of Lippe and it's cool, but let's not do that. Så. Lippe is a web agency in this agency. I've been working with the same thing since I started and more than five years ago. We build a product that improves the way the Swiss people do shopping. That's pretty cool, because it also improves the way I do shopping. How often do you get to be a consumer of your own product? I love that. A little bit of a disclaimer. I do a lot of ranting in this talk. Retail data is a really complex business, and I don't mean to. In two. Be condescending or whatever. We have nothing against our data providers. They all have a lot of data that was not meant for a digital age, and it's our job to take that messy data and convert it to a digital age. It's their job to provide us with the data, so it's messy. But it's okay. This talk is for everyone. I hope that everyone can get something out of it. Some concepts may be a little bit confusing, specifically if you haven't used symphony before. How many of you have used symphony in the framework before? Okay, so it's probably not that confusing. But if it is confusing or have any questions, I will have a Q&A in the end. So you can write down your questions and I'll try to answer them or answer them in a break. So the agenda today, first, I will talk about the project, the biggest retail of Switzerland. Then I will discuss some challenges. So it's a huge API. How did we solve the serialized bottleneck? When we import the data and the third party data provided lies to you. It's supposed to be a string. Why is it suddenly an object? I don't know. En mapping. How we map the data to contain the mess in one little place with unicorns. And then I will talk how we evolved in a symphony project, how we kept that project up to date, how we still love working on that code today. We're still the same team today, developers that we were five years ago. And that's really, really rare in this industry to everyone to keep working together for so long and how did we do that? So let's talk about the projects. I wanted to have one of these Star Wars screens. In a country far, far away, it started as a small API. It was meant in the beginning to output a few products on a website. And then the retail thought, okay, this is really cool. We can actually give them all our data and it looks nice in the end. So they just kept giving us data, giving us data year of the year of the year. We keep adding features and now there's a whole range of websites that this retail has using our API and apps and everything. And even the cash registers are using our API now. So that's started as a small API for a website to something really complicated that cash registers is use and we grew organically and we managed to do that because we kept our code up to date. We have a huge technology stack and there's no way one person in our team can know everything. So we use mainly symphony and elastic search. We use a rabbit and queue for queuing. We use MySQL to store the original data. We use Redis for caching. We use Neuralic and health check for monitoring. We use Xdebug, of course, for debugging. We use OpenAPI, PHP, CSFIX, PHPStand, Node, PSN React for admin panel and Golang, because the logo is cute. And since there's so many symphony people in this room or at least people who know symphony, yes, we have an API. No, we don't use API platform. And if you don't know about the API platform, don't worry about it. It's just a disclaimer so that you don't wonder further on in the talk and get confused. Så, this is us, this is our team. Timmer is the new PO, so he doesn't have a cool colorful picture yet. But we are eight developers. Ray, Toby, Christian, Theresa, Martin, David, Emanuele, and me. And we all have the same role in our development team. We try to not distinguish between who has the most experience, who has the least experience. It doesn't matter because we all have input and we all have eyes and we all think of things in different ways. And that's one of the keys to this, no hierarchy. And then we have Timmer and Colin, who keeps us sane when there's a lot of customers trying to talk to us. And then this Leo, our scrum master, who is way too passionate about agile, it's scary. And then the stuck guy, who's really annoying because he throw a problem at him and he solves it when you have been trying to solve it in two days. He solves it in 10 minutes. That's Shrego, we call him our cloud Timmer in lack of a better role. Så. In this talk. I will now assume, you know what symphony is. And the general structure of symphony. When I talk about controllers, services or config. I expect you don't get confused, but if you do get confused, that's fine. That's not the main part of this talk. This is our API, very, very simplified. There's a lot more to it. So we have our rest controllers using the rest bundle, fast rest bundle. We have serializing. Elastic search, mapping, minskål, importing and the data provider. Så if you look from the bottom, the data provider gives us data. We import that original data into minskål. We store that data there and then from minskål, we map that data into elastic search and elastic search is the source of beautiful data that would serialize to get the output that the consumers request. Så I'm not going to talk about controllers or API at all in this talk. But if you have any questions about it later, feel free to ask. So let's jump into the challenges. Did I mention that our API is huge? Both code and data. Så if we look at just the code, the source folder is 8.7 megabytes with 2067 items, tests is a bit larger because of all the fixtures. A config is 329 items in it. And then I'm a bit afraid to show you the vendor folder and that's just code. Så this is the structure that we have in our API under API. That's basically our domain in here. We have things like products, discount coupons, and we name everything that clients is the third party clients for the data providers that gets us the data. And then we have infrastructure for everything that we need to do. In between and migration for data and doctrine migrations. And a few loose things, that makes sense. Så one of the challenges is importing a lot of data and not just from one source. How do you import data from all these sources and put it in one nice system? This is the part of our API that does that. Well, it's importing a lot and it's data providers. Så the way we import data is with import commands. Så we have a command in symphony that talks to our data providers and imports it into my school. We also have workers using rabbit MQ and this is really, really, really, really important and crucial. We store the original data in my school, because if we don't do that and we map the data, then we don't know if something went wrong, because we will make bugs. We can't remap it. We have to re-import it from the data provider and it becomes a huge mess. Always doesn't have to be my school, but always find somewhere to store the data important lesson. Så problemet är att any of the data providers can send us data anytime. And when it happens, we have to make sure we can handle it and they can send us a lot of data at any time. They can send us millions of products updates. Let's say a category change names, the main category of this big retailer. The mid send us millions of updates. Sådann, we have queues and workers without the scaling to handle this. And how many people worked with queuing before? Most of you, cool. For the ones who didn't, and if you have questions, feel free to ask it later. So our queues and queuing, we used to use the MQP rabbit MQ plugin, but we recently switched to symphony messenger, which is so much nicer. Basically symphony messenger took a lot of time of switching. This is just a couple of pull requests that the colleague of mine made the symphony messenger itself when we started working on it. So it's actually thanks to our project that symphony messenger is so cool today. So here's his merge request. 167 changes just switching to symphony messenger. Så, you can see, there was a discussion for the nine comments. Yeah. Switching to symphony messenger simplified our code a lot. So normally, with any queuing, you would have to define your queues and you have to define your workers and everything, but with symphony messenger. You can remove a lot of that boilerplate code. And that's the result you see here. It forced us to use more value objects. Before we had the MQP envelope and it forced us to write better code. Now we have a category deleted message, for instance, and everything is clear. Now we know what message we get and everything is clear. It's not just Jason Blubber and XML block before. Of course, we could have done this before, but we didn't because it's so easy not to. So I love when components force you to write better code. Ja, so before I couldn't even show you on one screen all the commands we had, but now we can use messenger consume show you that. So switching to messenger was well worth the time. And how many here use symphony messenger? Almost no one, but a lot of you have been using queues and a lot of you know about symphony. So you can use symphony messenger without using symphony, and it's a very. You can. It's a tool that doesn't depend on rabbit MQ or Kafka. You can. It's a generic tool, which really helps because if we now want to switch to Kafka, we can very easily do that. So play around with it. In I love that we could give back to the symphony community with it. It's beautiful. But actually the one thing me as a developer love the most in my day to day work with symphony messenger before with rabbits MQ. I couldn't exit the worker with control C. I can do that now. Yay! It reminds me of this vim. Joke. We're trying to exit vim. Every time someone tries to exit the worker, it felt like that. So let's talk about consuming bad in quotes. API's would are crying or becoming an alcoholic. So first let's talk about some of the API's that we do consume. That are not that great. En av dem, I call soap ish API. So they do. At first, they had a soap API with one request, which said action or something like this. And that worked in soap and you send it to your XML and everything is great. But they decided to do that with rest and then in a post body, you're supposed to define what you want from them. It's really messy. It's really confusing. That's not the rest full soap. So then we have the flexible API. Which means they basically have a key value store for complex data. And it's like using redis for objects. It doesn't really work. It's. In their flexible API, they try to be so flexible that you tell them what you want in the URL. So if I want a product ID and a name, for instance, I say in the URL, I want to field product ID and name. And then I get a JSON response. And then it gives me a pointer to get the string of that product ID because it just says it's a string and here is the string is stored. And then I have to make another request. Ja, you get the point. It's flexible and it's horrible. Also the way you defined. The variables in the URL, the data comes back in that in that order, but without a key. So you have to remember where it was flexible. It's great, but when you do. Have to consume APS like that, that are not great. First of all, you get a lot of inspiration, because you know that you can do better and that's great.  I really, that's how we managed to survive when we get headaches. Literally, it's to joke about it together. Päring is caring, suffering is best done together in. I like to think that we are superheroes shielding our consumers from the pain that we have or maybe that's kind of Stockholm syndrome or something, but I like to think that we are superheroes. So let's talk about third party data providers and when they lie to you. We had cases where we were supposed to get one format of data, but got something else. We're supposed to get one product before we get a list of 10. I was supposed to get a string, but we get an array. All these kinds of things that makes it really difficult for you. So again, Päring really is caring. But what we started to do is that we realize that it's difficult for them to validate their own data and that's okay. We live in an age where there's just too much data and they can't do it on their own and someone has to tell them when the data is bad. So we started using Jason schema for that. How many of you have used Jason schema before? Okay, about a third of you. So with this, we can take the Jason data and we can define exactly how it should look like like this. So here we see title products. It's an objects and has some properties in it that we can find. For instance, the ID property, we can give it a pattern and. Etcetera, etc. So we tell them exactly how the data should look like. In with this, we can validate their data for them. When we get the message from them, we run this to validate. So here we see validate with the Jason string. And we throw an exception if we can't validate it. Don't worry, I will share the code later and the slides and also something that becomes extremely, extremely, extremely important. When you don't know what data you get is defensive programming. There's no such thing as this won't happen. Write your tests first and when you think you have all the tests, write the ridiculous test that you think could never happen, because it does. So yes, write the test for what happens if the data is not, even though they told us the data will always be there, etc. It helps. There's a really, really good talk about this if you want to learn more about defensive programming by Marco Pivetta. It's a new tube and it's called extremely defensive PHP. A lot of you might know him better as Okramius. So. We started out, as I said, as a tiny API, we had only one data source, and it was pretty easy for us. In yeah, it wasn't that hard, but then they added another data source and another, and then we have to prioritize. In we have to figure out, okay, this data comes from this source, that data comes from that source, this product comes from this source, etc. And it becomes messy really fast if you don't think about it. So we made a thing called a decider service. So you're that ID, you're from API X, you're from that ID, you're from API Y. So before we import a product, we use our decider service to decide where we should import data from. And importing that way becomes easy. But mapping. Did I mention that data quality sucks? You know, missing spaces, strings instead of in arrays instead of an object, objects instead of a string, differently named fields. When you expect a name to be field to be called description, but suddenly they decided to use German for description. Yeah, required data is missing and more and more and more. But you can keep your sanity by containing that and that's very, very important that you don't try to early to fix their code. You can use validating to tell them that their data is messy, but don't try to early to fix it because then you will get into a loop of having horrible data hacks everywhere in the code. We recently looked in our code everywhere where we had a comment that said hack.  It has to be purposefully done. So we have a product mapper. And that puts the product on elastic search. And then we output that from elastic search with serializing in between. Pretty simple concepts. And so a product mapper could look like this. We map name brand, category, price and description on it. Each one of these is a mapper on their own. This is how it used to work like. So NBC PD's mappers and we add some more mappers. Oh, and we add some more mappers and we have so much data on the product that the product mapper eventually explodes. Det är just way too much data, but what if we take all the data, we're mapping on a product and we split them into tiny parts and we decide that instead of mapping all the data that we need on a product, on a product, we go through every mapper, each one. So we have the name mapper. We have the description mapper. We have the image mapper and everything piece by piece. That way every little thing we need to do, every data we need to double check and convert, it's contained in this little box and we don't have these ridiculous classes and tests anymore. So then we put the mapper interface on it so we can map it and put it. Put the factory around that. You give the factory all the classes and then it can loop through. And that's why you have clean data to store in elastic search. Great. In theory in practice, this doesn't work very well. So first of all, you have to configure all of the mappers in order, because seven depends on three. You have to have something at description before you have ingredients or whatever. For depends on one, 25 depends on basically everything. So you have to order it and you have to be careful. And every time we change the config, a test might blow up or even worse. If we missed the test, our entire application would blow up because we changed a little bit in a config. That's not nice at all. Also languages. Since we live in Switzerland, we always have to deal with at least three languages, which is German, French and Italian. So with this product factory, what we used to do. Is that we called it three times once for German, once for Italian and once for French with some cashing in between. This meant that mapping a product with language specific data often took three times longer when it didn't have to. It was a mess, but let's see how we solved that. So mapper dependencies in symphony. They have a thing called a compiler pass. How many of you wrote compiler passes before? A few of you. How many of you know what it is? Is that less than wrote? Okej. So in symphony, when you compile a compiler pass is basically code that runs before you warm up the cash. That's all there is to it. And also it can hook into the process. And play with your config and make the services and everything for you. And basically that's what we want to do. We want to make the services. So every mapper in the mapper interface, we said it needs to have get dependent fields and get fields. So here we see the retailer mapper. So it depends on bus number, categories and additional categories. In it's the mapper itself handles the field retailer. And then in the compiler pass. We process that and we check if it's the product factory class. And if not, we continue and then. We deal with the mappers here. Find sort of mappers. So this is basically our dealing with dependencies. We can deal with dependencies in the compiler pass magically. We don't have to have a config anymore. We just check all of the mappers that we have. And we write our services. It's great. Yeah, so we sort and we loop through mappers until the dependencies can be sold. And we have a logic exception here if it counts. Luckily, I never saw that exception, but it can happen in theory. So the dealing with languages. Only deal with languages when you have to an image doesn't have three languages unless there's text on the image, which is a whole other story. But in theory, a lot of the things when it's code like category code, etc. It doesn't have a language. We don't need to deal with all the languages in your application. So here is how we did that for each translated product as products. We deal with it that way. We just forage in every mapper. Instead of running it three times in when we don't. When we don't need a language, then we don't need a forage. So obviously I said there would be unicorns. And this is our product factory unicorn. Yeah, I did implement the unicorn ticket as soon as I started in this team, and that was cool. Of course, there's some things that goes without saying you have to ensure quality, so you need to write tests. You need to have logging lots and lots and lots and lots of logging, and you need to write documentation on how you log so people can actually find those log messages. We had a lot of logging, but a lot of us didn't know how to deal with those. That was embarrassing and awkward, and then we have monitoring. Så you have to monitor accuse. And everything. Så lagalatt i bänken, you will love you. Monitor accuse monetary uptimes and react quickly. We also have a separate acceptance test. When you deal with a lot of data, you can have things when you deploy and when you remap the data, suddenly there's a bug you didn't catch in your tests and data disappears. But luckily acceptance test will catch that test for critical data. If a product should always have a product name and make sure there's an acceptance test that checks if there's any products without a product name. And then there's, of course, another project challenge of big API responses, because we started as an API. The biggest retailer in Switzerland has products and just a few things on that product and organically, our consumers started to want more and more and more and more and more things on that product. In that becomes a mess, like this slack conversation we had recently. How much stuff came put in a JSON file? What can that put in a JSON file? The way we saw that is that we use Varnish ESI so that we can partially cache everything, every product. So if you have a product listing, it doesn't matter what combination that is. They are partially cached. So I'm not going to talk that much about that, but it's a term you can write down as Varnish ESI that will really help you. So let's look at serializing, versioning and groups. So we need to handle different versions in our API when we have breaking changes and things, and we need to handle groups. So we have output something in the data view and we output something else in the list view. And we tried a lot of serializers and we use JMS serializer right now. And all of them suck when you have a lot of complex data. They are slow, they are cumbersome, it's painful. They handle everything great, but they suck. So plain JSON decode won't work that well for this. The symphony serializer is cool and all, but it's slow. Better serializer would maybe be better if we could make it work. It doesn't deal with complex data. So we use JMS serializer, which is great. It has annotations, it has the version support that we need. And so you can say output this and the version two output this since version three. And we also have virtual properties, which means we can have a little bit of logic when we output something. It works like magic with most frameworks, including symphony, which we use. And you have this config and it just works. Remember to set your datetime format, because if you don't, you can get really messy. If you're not consistent in the way you format your date. Yeah, you can read the docs about JMS serializer. But as I said, it didn't really work that great for us. It does everything we need to do, but it was slow.  Yeah, we called visit property for one of a big product over 60,000 times. How can calling a method that many times ever be fast? Never, but all modern serializers and PHP that I saw, the user thing called the visitor pattern. And that is great unless you visit each property allots. So we wrote something else that we like to call the leap serializer, which is not as much of a serializer as it is a generator. So you have your model with your annotations and then you parse those annotations and you generate a new file based on that. And then instead of visitor property, etc. You use your generator code and you call one function once. And that generator code is some of the ugliest code I was ever part of writing, but I didn't technically write it, so it's okay. We had an overall performance gain of 55% over JMS for a use case. That means our response could go from 390 milliseconds to 175. And CPU and IO weights both down by about 50% and a 21% memory gain. I would consider this a win. We tried using Golang first, and that's an entire talk of mine, how we use Golang and then went back to PHP for serializing. I could talk about this for hours. And if you're curious about the serializer, you can ask me later, or you can read the blog post that I wrote or look at the leap serializer on GitHub. It's open source. So communication. I would say we have so many technical challenges, but the one we still never could get quite right is communication. Communication is hard. Because we have to work together and working together with other people is really difficult, so it's important to give each other feedback and to establish a feedback culture. And that's not only personal feedback peer-to-peer, but it also goes into code reviews. So I recently had a moment where I felt really insecure and imposter syndrome was hitting me. And I realized then that all code reviews that I had lately from others, they only pointed out what's bad. So you get constant feedback on what's bad, but never feedback on what's good in your code. So that can really bring someone down. So we tried and what really helped was to also point out what's good.  I like the way you just generate this here. Good. They will keep doing that. I like the way you did this and this and that. Encourage good behavior and always point out when you like something. Because if they doubt something, they might not do it again. And that's a shame if you liked it. And then we also have retrospectives every two weeks. How many of you here you scrum? Okay, about half. So retrospective is what you do when you look back and you try to improve. You don't need to use scrum for this, but you discuss things like why didn't we manage to finish the things we did and you tried to improve the process, both your code, but mostly how you work together communication. Communication is hard. Yes, as I said, respectfully improve code together and team events really keep moral high. Our team is called Team Lego. So one time we made little Lego minifix for everyone. That's great. And also a key, which is really important. We have an amazing customer. They listen to us and if you don't have an amazing customer or you are your own customer, then you have to listen to them more. They can become an amazing customer. You have to listen to their needs. And if they're not, well, that makes everything hard. So in a symphony project, there's some really important things. You have to prioritize upgrades, upgrade as soon as ever possible. Even the minor versions. Fixed application warnings. Refactor often. It's not optional. When there comes new components like symphony messenger, etc. Try to use them. Try to try to use the components that there replace previous parts of your application with a solution that everyone in the community can help you solve. Also contribute to open source. If you have something like that, write in your component, give back, have some control over your tools and utilize the community. Did I mention that you really need a lot of tests? En amazing customer. So some final words. It's okay to start small and refactor later. In fact, it's preferred. Code for what you need now refactor when it needs change. We had a lot of cases where we made really complicated code, anticipating our needs and that messed everything up. Refactor later code for what you need now. Right. Dev docks. Så you write really good consumer docks, and your consumer is happy, and your customer is happy.  So really write documentation, not only for the people that work with you, but for yourself. You're not going to remember huge code base, everything you did over five years. And write down decisions you make, especially architecture decisions, etc. If you don't, you're all going to code in different ways and someone's going to comment on your magic list. This is wrong and I will say no, this is not wrong and both are correct. How do you deal with that? You need to write the documentation and especially. Things like how you do things, architecture. As I said, refactor often use the fancy programming, because what can go wrong will go wrong. And also when there's so much code involved, changing one thing can break something else if you're not defensive enough about it. Work as a team, work under communication, at least as much as you work under code. And if you do all these things, then messy data does not have to mean messy code. Thank you.


Command Pride is key to suicide prevention awareness. You know, the foundation of a human being, of a person, no matter where you are, of a sense of belonging, that foundation in our hierarchy of needs, if you will, is what gives us the strength to carry on, to move on during stressful situations. And it's never stronger than it is in the United States military. That sense of camaraderie, command pride, feeling a part of that big team can get just about anybody, in fact it can get anybody through that situation if we manage it correctly when they're under stress and feeling at a point in their lives where they just don't think that they can go on. And it takes us, it takes this family of military, of our command shipmates to gather around and rally around and recognize when a fellow shipmate is not at their peak or is not their usual self. And that goes into the intrusive leadership of leaders, knowing your sailors, knowing the person that you work alongside with so that you can recognize that change in their personality and be there for them. Be approachable so that they can talk to you and not feel that they would be embarrassed to talk about a problem or feel like they were less of the team. If they came to you and said, I just don't think I can go on. We all suffer stresses. So what triggers my accelerated stress level may be different from yours. But what's not different between the two of us, what's not different between any of us, is that we are recoverable. That's the same. It may be different on how we seek our help or receive our help or interpret our help, but we are all the same in that we need help. No one, no man is an island, no sailor stands alone, no one can get through life by themselves. But as military, we're trained to be strong, confident, independent, sailors and soldiers that become a part of this team to be warriors and we can't crack and show pressure because that would show the enemy that we don't have a foundation and we don't have this perseverance. But you know, when you're stressed and you've reached a breaking point or you're close to that breaking point, that's not what the enemy is looking for. That's what we're looking for. We need to know that no matter how strong you think you are. If you're coming with us on a battle team, we're arm relying on you for safety or for course correction and you're not at your peak and there's something that's troubling you or you're under a great deal of the bad stress, you need to let us know because it could be a detriment to you or to the safety of the team if we don't intercept early and you act under your stress moment or under the pressure and you're not focused on the team and you could harm everybody, you could harm the team and most importantly, you could harm yourself. What we do is not a soft environment. So it can seem a little harsh when we talk about suicide prevention when we say this is what it is and this is what we need you to do and this is how you need to look at it and it can take some folks back and go but I don't want to ask somebody if they're having a hard day. Suicide prevention awareness is key. As bystander intervention goes, this is the number one thing that we need to be looking for. If we are not in tune with our shipmates and with the people who work around us enough to say, hey, this isn't like you. There's something wrong. It doesn't feel right. What's going on? Talk to me. If we can't do that in a human environment, then we can't do that when we need to in a war environment. So we must be able to get through that stress of asking someone how they're doing and be someone who can intervene and then we can't handle that in other environments. Suicide prevention is something we all need to get better at and we get better at that by talking about it. There are many crisis hotlines out there. We don't care which one you call. Just know how to find one. Go to Google. Go to 21st Century Sailor. Go to Military One Source. Let's use our resources and get each other the help that we need. Don't wait for things to happen to you. Make them happen for you.


So, the experiences in Pratt College have always been positive for me. When I came here into the building, I always felt the personal approach with students, with teachers. The relationship is closer than what you get in larger universities. You can solve your problems and your questions in a more intimate way. You get to ask things that you don't usually get to ask. So, you may ask your lecturers about things that are outside of the curriculum, maybe even some personal things, some things that may help you later in your career. So, things like that, they always touch my heart a little bit. So, I'm going to talk about my first school year when I came from school directly. And this is mostly directed at people who are coming from the school to the college. So, during my first classes I felt that there is a similar setting in terms of size and how many people are in class and the teacher. But the relationships have changed and you have to not be only a passive receiver of information in that class. You should feel more engaged and you should interact in that class. You should sometimes even take ownership and responsibility as to what is going to happen in a class. So, for example, it happened to us that we finished our curriculum before the semester ended and it was up to us to decide what we wanted to learn next. So, we had to agree as a class on the topic that interests all of us and the teacher would then go on to present it and we could even have a mature discussion about the topic. So, on a different level, you're no longer just a student, you can also participate on a higher level. I felt maybe confusion at first. I wasn't prepared for that and it took some time to get used to this. But after that you feel empowered to actually have more control of what you want to do in the class. As students we always have obstacles and most of them are caused by ourselves. As I found out, because we delay our work or we don't ask questions in a timely manner but most of this can be fixed I think by having good relationships with your lecturers and listening to their feedback when they have some and when you get yourself into time pressure or maybe you have no idea what you should do on the assignment. It's never a good thing to isolate yourself and it's always better to ask for help and communicate with your teachers and if you maintain a good relationship with them I think they will always be willing to help you. So, that's the way I solved most of my obstacles during my studies. So, my career started in a very interesting way. I haven't planned actually to start working. We had a job fair here in Prague College on the underground level. We had a job fair and there were a bunch of companies which came and I participated. I spoke with multiple of them. I chose Epic 2 that I liked and I just visited Open Doors Day on the days that they suggested. One of them was NCR and NCR at the end of the Open Doors Day they asked me to write an internship test which I did and they liked it so we agreed that I could join some team that I liked in the company. How quickly I found my job? I would say very quickly considering that I haven't actually looked for it deliberately and the moment that I got the opportunity to start working it just happened on its own. I would say that this was the specific case of preparation meets opportunity. I was prepared for that and it just happened. It was a multiple-stage process of me finding the job, let's say. I started out as an intern. I wrote the internship test and they asked me maybe I want to do immediately the part-time so I wrote the part-time test as well but I didn't have time to actually because they need some specific amount of time to be at work to make it work. So I started out as an intern and I've been an intern for half a year and then I moved on to the part-time job because it was the point in my life when the work itself has started helping me in my academic work and I started feeling that the stuff in the college gets easier because I also work on myself at work and so I was able to combine those two things at the same time and then when I graduated I immediately moved to the full-time employee position. I was always applying things that we learned here maybe not on all of the subjects but definitely subjects like databases and programming in Java and also C-Sharp I was applying those things from the get-go and there's also some cross dissemination from work to college and it goes both ways. So you learn some things at work, it makes it easier at college. You learn some things at college, you understand something at work and this is a very nice process when you start feeling that's happening. You start growing much faster than if you just have one so I would definitely suggest students to look for something like that or look for an internship or a part-time position. Right now I'm satisfied with where I am in terms of career and I try to focus more on my personal development and you shouldn't forget that that's also an important part of your life but for my future plans I don't want to forget that I should be a permanent student because we are in IT sphere and engineering sphere and if you lose track of where you are in terms of your knowledge you can become outdated very fast. So you can either learn by yourself at work or in your free time which is what I'm doing right now or if I decide to switch positions or maybe switch projects to something that will interest me in a different way when it interests me right now I would definitely look into getting more formal education in terms of masters in a specific computing area.


And the vice president, Yemi Ushimbajo, has chaired the first meeting of the National Staring Committee, NSC, on poverty reduction on Friday at the presidential villa, Abuja. Recall that President Mohamed Abouhari, on June 22, inaugurated the committee to drive the target of lifting 100 million Nigerians out of poverty in 10 years. Ushimbajo charged the committee to be intentional about their resolve to achieve progress. The vice president said the government would create opportunities for Nigerians to earn decent livelihoods and equip them with the necessary vocational skills. Other members of the NSC in attendance include Governor Abdelahi Suley of Nassarawa State, Governor Kaedeh Fahimi of Iqiti State, who is also the Nigerian Governor's forum chairman, and Governor Babaga Nazzulum of Burnu, the Secretary to the Government of the Federation, Minister Boss Mustafa, Ministers of Agriculture Mohamed Nanono, Industry Trade and Investment Nia Debayo, and Labor and Employment Chris Ngige also attended the meeting.


At Audiology Associates of Prestonsburg, you can live your life the way you want and find the freedom of better hearing. You'll experience patient care that is specific to you with exceptional follow-up care that ensures your hearing and balance needs are being met. Audiology Associates at 1428 Northlake Drive in Prestonsburg. Hogue Masonic Lodge has partnered with the Town of Wise to host the 9th annual Chillin' and Grillin' in the Glades, July 16th and 17th. The festival will crown the Virginia State Barbecue Champion, the Virginia State Champion State Cook, and feature live music, a cornhole tournament, and more. And we feel like it's important to do this to provide something to the community to do. I've gotten involved with competitive barbecue probably 15, 20 years ago and from judging. And I wanted to bring that back here to where I live. There was no contest. It was really close. Closest contest is a couple hours, two or three hours away. And I wanted just to bring my love of barbecue and share that with everybody here as far as letting them get involved in it as well. The weekend will also include a kid's steak cookoff, a dessert contest, and craft and food vendors. The 34 barbecue teams and 40 steak teams from all over the United States will be competing for the Virginia State Champion title, guaranteeing a chance to compete at the Jack Daniels World Invitational Barbecue Championship and the American Royale. And it's really paid a lot of dividends for the town. It's a tremendous tourism asset for this weekend. Several of the hotels are completely booked up, so it provides plenty of people to spend their money in our town, in our county to help our revenue from that way. And it's a good thing to give people something to do to get out and enjoy themselves. We've got plenty of music for people. We've got kids. Thanks for the kids to do. People can shop at the craft vendors or give them some great foods, delicious food that we have here from their food vendors. Plenty of barbecue will be here, of course, because it's a barbecue and music festival. The event is free and open to the public. For more information and a full schedule of events, go to chillinandgrillinintheglades.com. For Mountain Top News, I'm Breanna Robinson.