So the pelvis area is giving you nightmares, not a problem. Now you can fix this pretty easily by going into edit mode and adding two bones here and here. Make sure that they're both parented to spine one, give the top bone green control over this area, and give the second bone green control over this area. Okay now the basic idea is as the hip moves forward, these two bones copy its rotation, and this bone goes this way and this bone goes down. But the one thing that we need to do first is add a driver to the hip bone so that it moves forwards and backwards as the hip rotates up. Otherwise you get this disgusting, unacceptable madness. So let's start with that. Go to pose mode, select the hip, under z location, right click, add driver, set object to armature, bone to hip, type to x rotation, mode to quaternion, space to local, and type this. Alright, looking better already. Click this bone, and under constraint add copy rotation, set target to armature, bone to hip, uncheck z, set space to local in both of these areas, and do the exact same thing for the other bone. But for this one change the influence from 1 to 0.53. Okay, now let's make this bone move up and down as the hip rotates forward. Under y location, right click, add driver, set object to armature, bone to hip, type to x rotation, mode to quaternion, space to local, type this. And in order to also control forwards and backwards movement, right click, copy driver, under z location, paste driver, and change the equation to this. Now you can see that as the hip rotates, this bone moves forwards and down a bit. Alright, the last thing we want is for this bone to move up and forward as the leg rotates. So right click, y position, add driver, set object to armature, bone to hip, type to x rotation, space to local, and type this. Then copy the driver and under z location, paste it, and change the equation to this. And you're done. And now you can see that most of your problems have been fixed. The 0.0025 just means it'll never go behind this point when the leg moves back. The 0.09 means that it will never go farther than here when it's moving forward. And 0.1 is how fast it reaches these limits. Hope that helps. If you enjoyed this video, please don't forget to like, subscribe, and ring that bell. Hope you have a fantastic day, and I'll see you right.


We know about LTA systems little bit by now and we have also looked at how they are different from the heavier than air. Now one area which is a serious limitation of the LTA systems is the need for ground handling. This imposes not only extremely high cost but also restricts the usability of these systems. You might say that airships and other stacks are simple and easy to fly but then you need to also do something to handle them. So this is a collage of pictures taken from various sources which shows the mooring masts used for various airships and aerostats. So you can notice that essentially we are holding this platform from the nose and in some cases such as in the bottom right where you see the Zeppelin NT airship, you can see that in this case the mast is also a movable system, it is a truck mounted mast. So it can be taken away. So apart from the massive size of the structure, you also need to have massive investment in terms of the ground handling. So why do we need ground handling in LTA systems as compared to HTA systems which need very little ground handling? Do you know for example what is the mechanism used to move a very heavy aircraft such as say 787 or Airbus A380? If I want to move it from place A to place B on the ground, how do I do it? What is the mechanism used? No, APU is not used for the APU is basically used only to provide power for air conditioning cooling, cooling of ionic systems, air conditioning, hydraulic system. There are simple tractors which have a link attached to them and you just attach this link to a hook in the nose landing gear and an aircraft as big as 380 can be simply pushed or simply pulled by a tractor. So very simple compared to what we will be seeing now. The reason is that even though 747 or 380 have a very large surface area like airships, the weight is 350 tons or more. So therefore it needs such a large amount of force to move it. For an LTA system even though it may be heavy, but it is a buoyant system. So its net weight or effective weight is very less. So in technical parlance, what would be the net weight of an LTA system when it is parked on the ground? How much will be the net weight? So you have heard of terms like static lift, net lift, buoyancy, weight, static lightness, static heaviness. So using these, please tell me what would be the apparent weight of a system which is standing on the ground? No, I do not want numbers. I want the term static heaviness, correct. So the weight that will be read by a scale on the floor if you put an LTA system on it will be equal to its static heaviness. This can be 500 kg, 600 kg for a typical large airship. But the forces which will act on such a large body especially when the winds are reasonably high they can easily exceed this 500 kg in the vertical direction and in the side direction of course there can be forces. So therefore we need something to hold it. So LTA systems are very sensitive to gusts and turbulence, they respond to it much more. You do not see aircraft shaking in gusts and turbulence when they are on the ground. They do shake and respond when they are in air because there is a lift force acting which overcomes the weight. So again they come to a situation of almost zero net weight. Now if there is a gust acting on it but they are very fast. So they cut through the air much faster than the LTA systems and their dimensions compared to their total weight are also much smaller. So a buoyant vehicle experiences loads from all directions. The most important and significant load is the side load which will come because of the large surface area. And therefore you need to have a pitch your role and your freedom that means freedom in nose up and down that is pitch, nose rotation that is role and yaw is nose left or right. This kind of you need to have some freedom in LTA system. If you constrain it it will simply tear off. So ground handling is really a problem and more than telling you what it is let us just have a look at a video from many years ago okay there is a website called critical past which talks about things which were in the past and looks at issues very critically. So the year is 1957 before even I was born forgot about you right and it just showcases what is meant by airship ground handling and you can see for yourself what the problems are. So observe very carefully then I am going to ask you questions based on purely what you have seen. For safe and efficient ground handling the ground crew must be alert to the ground handling officers orders. They must be thoroughly familiar with safety regulations and any pertinent weather conditions which may affect ground handling. In this film you will see how airships are handled during masting in the hangar, undocking, unmasting, and takeoff, landing, and masting, and docking. All wind directions relating to ground handling of airships are in reference to the hangar axis and the operating end of the hangar. There are three basic winds that we are concerned with. The down hangar wind which blows toward the operating end of the hangar, the up hangar wind which blows toward the non-operating end of the hangar, the cross hangar wind which blows toward either side of the hangar. In addition there are quartering winds, there are the quartering down hangar winds, and the quartering up hangar winds. Winds are important for two reasons, a moored airship always vanes into the wind from any direction causes piling up and turbulence and the wind becomes strong and gusty These effects increase. With a down hangar wind we have still another wind effect when the hangar doors are open. That is back draft in the hangar. Back draft can cause an airship here to kite and strike the hangar. Draft can be controlled by partially opening the after doors to establish a light flow of wind through the hangar. However with the after doors partially open to eliminate back draft, a quartering down hangar wind will cause bulkhead deflection in the hangar. A cross hangar wind causes turbulence at the side of the hangar. It offers no serious problem to airship ground handling, but up hangar and quartering up hangar winds cause spill and turbulence at the operating end of the hangar. Upmost care must be taken while passing through the turbulent area. The turbulence and winds coming around the corners of the hangar are likely to cause kiting. With aid docking and undocking operations, there are safety guidelines for each size and type of airship being handled. The radii of the arcs are equal to the length of the airship plus a margin for safety. Thus the guidelines assure clearance of the tail at the opposite corners of the hangar. The intersection of the lines here is the point nearest the hangar at which the tail of the airship will clear both corners. Okay, so what we have seen in this film, if you noticed as the airship was about to take off, there were two vehicles on the side which were moving and the people on the ground were actually running and attaching cables to these vehicles. The idea was that these vehicles being little bit heavy will resist the motion of the airship to some extent and also they can be used to pull it. So, there was a time in the past when ground handling of an airship involved 200 people, 250 people on the ground. I will show you one more video towards the end when we will see when an actual airship came into land, how many people on the ground were required to safely operate it. So, looking at now some specifics, ground handling means we have to look at hangar age. This can be a huge cost point in operating LTA systems. You need to create a hangar. So, whenever you are making or operating LTA systems, be them aerostats or airships, you have to invest a lot in the ground infrastructure and for airships, you need to have a reasonably sized hangar. Then we have ground movements, bringing the vehicle inside the hangar, outside the hangar, etc. Lift of recovery basically means takeoff or operating. Now, effect of size of ground handling is very evident. We know that larger the size of the airship, bigger will be the hangar required and therefore the cost will go up. Then we have an activity called as nearing, in which we basically attach the airship to a mast, called a mooring mast. There are various types of mooring mast, we will see when we go in more detail. The three main types are a simple type of mast. There can be an expert mast or there can be a mobile mast which moves on vehicle. And we will look at some design considerations for the mooring mast. We have to be very careful that when the airship is moving at low speeds in winds, we need to have sufficient control on it. And also to ensure that the mast does not impose additional forces. The mast should be a facilitator, not a rest trainer. It should not cause tearing of the envelope. Now, in ground handling, hangarage or providing of the hangar is very, very important. And a hangar as you all know is self-evident, it is basically a shed. This shed can be used first to make the airship because when you make a small airship, 5, 10, 15 meters, you can do it inside a laboratory and then take it out. But suppose the airship itself is 150 meters, then where do you have a place? So you have to first construct the hangar and then make the airship inside the hangar. So even to make an airship of a large size, first thing you need to do is to build a hangar. Let us say the airship is already built, we are now bringing it to operate it, you need for any refurbishment, for any installation, you need to do it. And obviously the size of the hangar will be connected already to the size of the airship.


Centrioles are essential for the formation of cilia and flagella, as well as for the organization of microtubules within the cell. These microtubules are important for cell shape, polarity, motility, and division. Super-resolution microscopy has been used to analyze the spatial relationships between centrioles and other components of the centrosome, such as the pericentriolar matrix, PCM. During mitosis, the PCM forms extended networks with interspersed tubulin, while during interphase, many proteins are arranged at specific distances from the walls of centrioles, resulting in ring staining, often with discernible density masses. The C-terminal region of CEP 152 is closer to centrioles than the N-terminal region, demonstrating the power of super-resolution microscopy to study protein disposition. Appended proteins show rings with multiple density masses, and the number of these masses is greatly reduced during mitosis. At the proximal end of centrioles, SARS-6 forms a dot at the site of daughter centriole assembly, consistent with its role in cartwheel formation. PLK4 This article was authored by Katerina F. Sonnen, Lo the Skemela, Heinrich Leonholt, and others. We are article.tv, links in the description below.


I express gratitude to the government and people of Romania for their warm welcome and hospitality. At the same time I congratulate the International Telecommunications Union, the ITU, for the exceptional work in organizing this plenipotentiary conference. The rapid pace of technological development is creating a new divide amongst those with access and those without. In response, the government of the Bahamas is moving swiftly to incorporate a comprehensive national digital transformation strategy that will allow for the continued growth and advancement of our people and our country. The first tear in that strategy is addressing the accessibility of digital technologies across our archipelago. The government of the Bahamas is presently offering local telecoms providers a substantial reduction in their communications fees payable to the government to offset their investment of a minimum of $100,000 in emerging technologies. We anticipate as a result a widespread rollout of these technologies and population centers and underserved communities across the Bahamas. In fact, we are already seeing early signs of success with the rapid expansion of fiber optic broadband services. At the same time, we are addressing affordability, especially for the vulnerable amongst us who may be disenfranchised considering the high cost of communications technologies. Connecting the unconnected means bringing the cost of these technologies within the reach of the of our entire citizenry. It is in this vein that the government of the Bahamas partnered with our national telecoms regulator to establish a universal services fund that will subsidize the cost of high-speed internet for those who cannot afford it. These strategies align succinctly with our ongoing commitment to develop a digital society that benefits all Bahamians regardless of geographic locations. We have also invested millions into the rapid expansion of e-government services. I must add that our national efforts are undergirded by the work we do in fora such as this. The ITU is a global champion of digital transformation and the Bahamas fully supports its work. We are a strong voice for our region and other small island developing states and we would like to continue our advocacy with a second term at the ITU council. We request your support for the Bahamas's candidacy and at the same time for a candidate for BDT director Mr Stephen Barrow. With his experience and commitment to ICT advancement across the world Stephen is the best choice to lead the BDT as it builds on its many recent successes. I invite all nations to stand with us as together we embrace a new area of digital communications where all peoples can thrive. Thank you and I wish you a successful conference in Bucharest.


Everybody forced here ripping 2023 Bowman baseball jumbo eight box case number one. We got a picker team case to start us off here It's all it's all PYTs for the daytime anyway, so we've got Anton with the Guardians Carl C. Phillies Chessie has the Rockies and the twins Chris L Royals a's Corey M. Tigers Danny V Dodgers Dwayne has the Braves Jason Mariners Jeffrey H. Red Sox J. Cho Padres John Y. Giants Josh will be with the Nationals and the Cardinals Kai H. Pirates KCK White Sox Landy B. Diamondbacks Mark L Reds Michael T. Metz and Nathaniel S. Brewers Nicholas S. Orioles Orin W. Astros Yankees Rays and Blue Jays Rob C. Angels Rory B. Cubs Steven C. with the Rangers and William B. with the Marlins That's all 30 right there for everybody. Let's go ahead and get started We'll do a recap at the end of every break as always, but they're definitely helpful for Bowman as well Make sure one other thing here So again all cards are gonna ship for the release day PYTs today This is the only day where all cards will ship to my knowledge That's usually how we've done in the past so any PYT today all cards will ship Random styles. I'm not so sure since it's random. Yeah random styles is different So PYT you get you get what you pick for release day even the paper is what I'm trying to say and then random teams You're just gonna get your chrome Good stuff good stuff. Let's hit a super today. I didn't get to pull one yesterday. So Save I was saving it for you know release day stream We'll go with that because I for sure wasn't trying to pull one yesterday What do you guys think about the Celtics not closing it out? Are they in trouble? I gotta play a game six All the goats on TV. Yeah, that's awesome. Yeah. Yeah, that's all the Jones bouncy It's an interesting one. So I am gonna fander the papers though, but again, I will all ship to you First you have Josh Young rookie of the year favorites Jackson holiday there. I'll still keep paper and chrome separate Again, we got a good look yesterday It is cool coming to a release day and I've already Ripped three cases of the product.  I was old Parazza Ricky to your favorites jumping mehia. Yeah, I think I'll close it out, too I don't think they're in trouble either. I was just surprised. They didn't close it out last night. I Guess I'm more surprised the Hawks got a couple games But but Trey Trey's been playing pretty well in those two wins though and Then Tatum just loves to jack up some threes dude I'll tell you what especially if he's not making them like the more he misses like he's like I got like I got to make one Love shooting him. He was like one for nine at one point last night or three. I Don't know if that's what he finished that but that is That is horrific. The fact that it was a close game after that is pretty it's pretty interesting The Jalen Brown like picked up the slack big time Jalen Brown was a beast last night There's a cost of spotlight spotlight rookies are cool. We need to pull a parallel of one of these I want to see what they look like Want to lunzoo There we go a lunar glow of Jason choreo for the Guardians Lunar glow Christian would you eat the moon if it were made of cheese? Yes Yeah, good answer First auto of the day Going to the A's it's blue lunar crater 91 of 150 call in Pelluse. I've got to go with Pelluse Pelluse there you go A's on the board first You go blue lunar crater Garrett Mitchell nice parallel to start us off digging the Lunars this year Brand new the lunar and green grass are brand new and first moment refractor for the Yankees is Marcos Cabrera I won a 59 a 499 everybody enjoyed the the stream yesterday yesterday was a was a wild day Gumri Christian Hernandez Ali is a upside down card Bowman Invicta of Yendri Rojas Does anybody got Matt and I on two different screens right now? Rovers first woman speck a lot of J. Savina 46 out of 299. You go Jace of Vena All right, two number not to start the day two bats as well. I can see that first. All right one bat one bat Pelluse Pellise is not a Not a batter There's a parraza parraza So hope they wouldn't have it be too early to roll here again this another nice color coming up For parallel nice first bowman aqua lunar crater 51 of 125 they unfree us for the Guardians I was saying yesterday. I like the design a lot that space for the auto goes is super cool But even if it's not there like the parallels look great and like the logo in the center I like quite a bit too Definitely has an older feel like a 13 or 14 bowman feel sort of a lot of people were saying yesterday at the rushman on the insert Got purple lunar crater paper is Hector Rodriguez for the Reds To 199 Yeah, hopefully we can do more stuff like that like what we did yesterday. I There was already, you know hopes and hopes for something along those lines Chats quiet today. It is it is very early though That 10 a.m. Start all right should have an auto in this back in this we do and it is There's a bay or rookie to 499 paper and it is a red sock So Red Sox first-woman base all those frilly incarnation Frilly incarnation for the Red Sox our solid first box of the day Anybody watching both streams looks the best pole Matt has so far It's a competition Maybe I'll just keep the stream up over here Nolan Gorman rookie to your favorites Andy Pages Gonzalez Yeah, like I've been saying guys the drip first-moment super fracture retro factor auto bounties are fantastic So if you're gonna personal tonight on stream, I suggest ordering through drip So if you do hit something monstrous you qualify there's a Blake Got a Lunar Glow first-moment of I'm B. Oris Tavares We're Lana No, Drew Jones. Yeah, you got your gold. All right. Let's see.  I'm not sure the total amount of Bowman cases that we currently have Yes, beer if it were me that had the D-backs and I hit the Drew Jones I would immediately do that Kuma rocker Coleman are as Some more color coming up here. It is a lava jet Williams 90 of 399 for the Mets Lava or fractured jet Williams Without hesitation spear like literally immediately got Garrett Mitchell It's been playing well to Bishop Jesus Baez bastidas Here we go. Nelson Rada first-moment base auto as well for the angels here Nelson Rada angels. What's up sin Victor? I can't be real.  Oh, yeah for sure spear instantaneously All right guy costus rickety your favorites lime green paper first-moment Antony Piguero 164 of 399 Marlins and First-moment refractor William Lugo 245 at a 499 for the Mets Hey, you may as well right spear. You may as well fly first class in that in that scenario May as well get a car at the airport so you know having take you there most luxurious trip of my life Pink Paper Rookie. Hey, Masataka Yoshida 43 of 175 beast and Mets first-moment refractor out of Jesus Baez 207 of 499 Jesus Baez Riding moving on to box 3 Again everybody from group breaks today For late in sports cards for the entire day You have four total teams left in Bowman Sorry, I think it's down to three Three total teams left in Bowman. You got the Padres in case eight later with Sam you have the Red Sox in case nine and The Padres in case 10 so two Padres and one Red Sox spot for the entire day throughout So the next available breaks are tomorrow morning with Matt with Bowman and Kenzie with contenders optic Which releases today, but we're starting our breaks tomorrow and Kyle will be live on drip tonight Chase those bounties. I don't think there's a I don't know if that would have been his first home run shot It could be Those are like Fenway This looks kind of Photoshop to you. I don't know Be a spring training game A lot of fans behind them Got Miguel Vargas Ricky to your favorites, or do you think the number should be Grant? Yeah, so Drew Jones the chase Cam Collier Lazaro Montez Spencer Jones, Josue the Paula All good names Sub Tim Very descriptive. Thank you Grant. I'll see if you can pull a nice pirate I'll see you pull just pull some more nice hits here. You got Brett Beatty Nothing crazy so far. Hopefully the case picks up Lunar Glow first woman Louise Lara for the Brewers Jordan insert. I think that one. Yeah, I think it is Photoshop Spear Insert on it. Yes, we do we got sights on September insert out of 14 of 30 for the Phillies and Andrew painter nice card. I Do it's got some hype around him for sure There you go painter for the Phillies to 30 Lowest number hit so far today. Is it Gunnar Henderson Ricky to your favorite? What happens to Victor? Well, I do this time always wondering I'm always wondering like Lube a first-moment Chrome Got a Jonathan Aranda rookie lime green 174 to 399 paper for the raise Jonathan Aranda Speckle first bowman to a 7 to 2 99 Henry Ramos for Kansas City How many episodes are bad bad season one? I don't know like 20 something, you know Yeah 18 16, I don't know I don't know you can look right if you have Disney plus you just look You got a cossus or if you're not near something, I guess you're just asking yeah, I don't remember It could it's anywhere between 12 and like 30. So hope that narrows it down for you some Victor Glad glad I could help What does not and well Another red sox here.  Probably the nicest hit so far in this I like that at least the biggest name so far Yeah, there's like this good products like we were talking about yesterday at HTC It seems to be grading better than maybe like when chrome did last year, especially Chrome was the one that was tough the past two years. I think Draft was a bit better, but this seems even better than draft as far as quality Gorman rookie to your favorites Blake a Light blue Miguel blaze red Sox 299 to 499 on the paper Should they clippers keep quiet and pull towards the other yeah after healthy. Yes What kind of question is that? two of the best players in the league Nah Tough time we can't focus here that I wasn't there lava Zack Nito 71 to 399 angels Needle lava Juan Brito nice it here Rockies first woman base auto Juan Brito At least another batter there when Mother's Day is Not not a joke step and I'm people just curious. Hey, when is it gonna happen again? I mean hopefully it happens again. I Think everybody would be interested in that thing yesterday was a great success great success To quote Borat rather green rookie to your favorites Joshua Baez But nobody's actually asked today. They were asking all like all day yesterday George Valera insert Today blue shimmer Yeah, first phone with color match of the Mets to Jose Parosa 21 out of 150. No nice blue shimmer Someone's yes, I didn't like shimmers So I may 14th. All right, cool That'd be crazy to have SGC LSE combo First bowman lunar glow Antony Poguero Marlins Yeah, a good amount of 1010. She's really good to see especially with a product like Bowman Here we go Kevin Parada Bowman scouts top 100 insert auto 42 of 99 Mets again Mets doing really well. They're one of the teams that have the most hits though So that might be consistent nice hit Mets Kevin Parada insert rookie out of there Sorry prospect out of Alvarez rookie insert also for the Mets Blake Lubea for the break yesterday. No Everything was included yesterday That's why that break was so special so Fray like stayed on Raffaella Plus guys as you see they announced yesterday, and it went live yesterday that 2023 Bowman is nine dollars a card with them nine dollars per card to grade Again, they do free auto grading there's no up charges for like There's I know declared value limit things like that. So and there's no like maximum sub I believe Send send them all Rookie of your favorites Corbin Carroll for the D-backs. He's looking pretty good He's looking pretty good Fuchsia 80 of 199 Henry Davis pirates Table I love the lunar parallels. I like the lunar a lot. I like it more than like a shimmer There's the first one the first one Diamondbacks Drew Jones Landy refractor auto 375 out of 499 good-looking auto Pretty salty card to Disgusting there it is that I pull them before Matt Here we go. Yeah refractor to 375 at a 499 good. I'm glad I'm glad I had some color too Face would have been cool with the first one the first one should have color, right? That's that's how I feel this Aqua moment scouts top 100 gray rod to 125 Orioles Moreno has a diamond back here So moreno's autos are as a blue J still because it's on card and bowman for his rookie chrome autos first bowman purple paper Carlos Jorge Reds to 11 to 250 but Any base and insert should be diamond back to moreno. It's just another name for them in this product They're just there's stacked in this product Pull you could pull the corporate carol auto Andrew Jones auto in the same in the same break Do the same box at bowman dish on at the moment everybody last auto is a Hayden younger First woman base auto Hayden younger blue J's Last John's base was 600. That is a lot. That's a lot for Anyone's raw base auto. Well, hey, that's that's the hype, right? I don't we didn't set the market They do a real quick check on spots I know we're sold out today, but Sam has two total spots after tonight guys For the entire day for group breaks. We have two total spots left the Red Sox in case nine and the Padres in case ten. That's it That's it purple 1300. Yeah, there's a lot. He's he's the chase though What makes sense Not the million dollar bouncy today. Well, I won't it's not technically a million dollar bouncy unless he makes the Hall of Fame, right? So Bon Grissom on the insert there, but 250 K. Hey, you know what? That's darn good. Let's see. Yeah, so David has one Yeah, I'll say it's a million dollar bouncy and then you just read the description. It's like It's potentially a million dollars It's like an incentive based contract Yeah, well, they definitely they definitely grabbed attention with a million dollars. You're Jones man They what what they said definitely would did its purpose and grabbed attention First woman lunar glow Leonel James Lionel James. I'm not sure how to pronounce it. He's from DR It's probably Leonel Leonel James Red Sox first woman lunar glow the base or glow is okay But the the like the blue the aqua those are pretty cool the yellows The base ones all right Hated Here you go Mets Nick more abito on the first woman base auto Nick more abito Mets keep hidden She's calling messy. Okay. Okay, Kyle. Hey Gabriel Gonzalez in the fuchsia 183 of 1.9. There we go first woman for the Mariners scuffs on this card Nice Gonzalez either way good to get a number Gonzalez at least South Freylich sit on Rafael. I mean if I pollager Jones super that's what's going on the title to break a million dollar card It's exactly what I'm putting there Yeah, well, it's all bowman all day here, but again guys Kyle's live on drip tonight. I know where rear brakes are pretty much all full But Kyle's we live on drip later chase those drip bounties to those drip bounties are for real The first first bowman superfractor auto that is pulled on drip But repulsive gets 5k in drip credit in the first five First woman a red refractor autos true red Well, I believe it's either 500 or one. I think it's 500 in drip credit. It could be like it could be a grand though Hey, nice that's a Riley green true gold rookie auto 9 of 50 Detroit That is sick too Cory M That's awesome, man. There we go. There we go a Big rookie auto. That's a tough pull the rookies are Definitely like way way less common than the than all the first bowman's that's that's that's that's a tough pull right there If if his refractor is live then his super is not a redemption Purple Brian Acunia 100 of 250 The twins I mean, I guess theoretically it could be if he just botched if he was just like wrecked the card or something You're signed it so poorly that Fanatics and tops that want to put it in a pack. I guess the theoretically but And there we go gold a Brian Rockio bowman scouts top 100 33 out of 50 for the guardians Layton guy named after trees My name has two Rs. I have nothing to do with with the forest Valkyro light blue paper to 499 nationals My name is two Rs. I don't know what uh, I don't know what you guys think f o r e s t is Oh, it's for holding it. Yeah, I mean, I yeah It's like a Assumption, you know Yeah, but again, sometimes you'll see an occasion where a player has like most of numbered autos signed But a lot of the base like first bowman's aren't and there'll be redemptions like that happens um But Yeah, usually that's not the case. We didn't see any of three cases yesterday, which is good The only one that we know of is Spencer Jones, right his sticker his like sticker answer I was alive, but the the first bowman's are not on cards Nice an adley rookie line green paper. There we go 173.99 always good to get a numbered adley rookie card too And adam cramped in Orioles going back to back here. You got purple first bowman be a auto number to 250 Good Orioles pack They're very they're pretty good this year. They're a second place. I think pirates are good this year too, apparently Dino back shirt good. This is this weird year, man. So far the weird first month of the season Ray's best team ever And it's like Pirates are good Orioles are Like we knew the ores would be like fun, but we didn't know they'd be like really good, you know They're good Those young guys are carrion like everything is clicking there too Even the bottom line is the only cedric mullins bats like seven for them or something like it's really weird They're they got some depth Yeah, dude, the Red Sox are 13 and 12 and they're in last place and are seven and a half games back It's the dumbest thing of all time Obviously like Yeah, that won't like be a trend the entire year The rays won't keep this 24 per month phase legit My brewers can't beat the american league if the red sox in the nl central they probably won 150 games it's all i'm saying It's how good the the al east is Yeah, red starts like a game and a like a game out of a playoff spot currently like at the current standings Like last place Or no, I think It might be tied for like a the last playoff spot if you know theoretically lunar glow first moment louis rodriguez for the cardinals And lava refractor brine akunia 191 to 399 the twins a whore hey ruiz first woman base auto for the angels whore hey ruiz miguel vargas The azer 5 and 19.  Yeah, the oriel the oriel it is kind of weird for the orials They what they what the owner should do is sell the team so that someone can come in and pay all of these guys Or not can that will because we know the ownership can pay those players What's their work? That's what the oriel's ownership should do Garrett michael I wonder how many of those guys are gonna get traded for pitching this. I mean some of those guys getting moved for pitching, right? That's usually, you know Develop develop and then trade for what you need a rookie blue refractor auto leopold piguero 49 out of 150 pirates Two numbered rookie autos in the uh in the case Nice a drew jones first bowman refractor 441 out of 499 Refractor base parallel refractor auto Bebacks again, none yet. Alex. None yet. What's up, tim? How's it going today? Okay, new Hampshire Got a first bowman light blue paper ryan clipper numbered 484 at a 499 for the astros ryan at clifford All right, should be one more auto in the last pack here. That's how it's been a little old break anyway Purple paper first is going to be a reese huskens 38 out of 250 Now we've got a glitter figure rail first bowman refractor auto 464 499 for the rangers. Oh, yeah, we got dual streams going today Nothing but bowman morning tonight All right two more boxes in case one everybody Again, we're sold out daytime here. There's Literally two spots left for the entire day morning tonight At least as of a couple minutes ago that could very well be different now We've got contenders optic release date tomorrow everybody will release today, but our release day breaks are tomorrow It's all bowman today. Who is that sam? So the guy that invented McDonald's Dude sam didn't even watch yesterday. I wonder if sam knows that That uh, we were breaking at sgc yesterday got josh young Yeah, it's just opening cases. Matt's got seven cases today. I got six today and then sam's got eight or nine tonight Or something He's got a lot an aqua lunar crater simon wand number 37 out of 125 We're the Mets Mets again lunar crater or lunar glow josh will buy as cardinals Got an andrew taylor first woman gold shimmer auto 13 to 15 for the strobes There you go first woman gold shimmer auto andrew taylor strobes House, uh, dude house nonsense is the worst I thought you might have been at the fair Without a kitchen sink and dishwasher. What? Do what? Dishwasher, whatever you just watched. Just no sink Sam hated the fair Why did sam? I got I got I got to hear it now I got to hear now. I was like parasa jackson choreo Gold shimmer first bowman you on heliponte for a 50 blue jays Juan Alonso dodgers first bowman blue lunar crater auto 149 out of 150.  Going to the winter garden fair. Yeah, I guess it's the first one this year Straight across the street from my apartment Uh, rally green spotlight like luviae Oh, I can pause confusing you dude. I'm not quite sure tim I'm not quite sure Got a lime green first bowman matt mervis nice 222 out of two three ninety nine for the cubs Nice matt mervis On the paper matt pulled into victor drew jones To do that the plumber just took the whole the whole sink I didn't want to leave it with like a little bit of a leak. You just took the whole thing What a champ A swallow sam did you get the did you get the um Hang on one second christopher morale rookie light blue paper 281 of 499 for the cubs and a manuel belt tray now A chrome prospect base auto manuel belt tray blue jays Did you get the funnel cake with the ice cream? I was hesitant about the ice cream on top of funnel cake, but uh It was amazing It was amazing Dude, I went to the fair like last saturday night.  Oh my god It was unbelievable Like i'm 30. I felt like I was like 50 at the fair the fried orio Yeah, I had fried Reese's for Reese's pretty solid orios are better Maybe I'll have to maybe I'll walk over there tonight Since it's a literally across the street from me To get some more fair food Dude, there was there's like there's like three painting tables the entire fair I was eating like Like shish kebabs and like different things just standing up and I was like this is the most inconvenient thing that I think I've ever had to do In my life, I'm just kidding No, but it was like dude. I was like covered in like barbecue sauce Lunar glow Miguel blaze red socks What's up, manny? Yeah, Sam Sam would have would have laid somebody out if they knocked over to the dessert Here we go. Jose Ramos Dodgers bowman scouts top 100 auto 84 99 Yeah, man. It's me. I'm I'm always here. I'll never leave. Francisco Alvarez I've slowly started moving into the shop. I like a garment rack. I got like clothes hanging up now Made I made uh I made laying by me a washing machine for the shop as well for my clothes and all that It's gonna get a murphy bed put it against the wall right here Actually, no, not even I'm just gonna get like a camping cot Invicta jason choreo guardians Corbin carol work of your favorites Need more coffee after this for the next case A's colby thomas first moment refractor auto to a 60 260 4499. Yep There's some dust next to his left shoulder. We'll get that off. Hopefully if it is dust, it's full with dust And before we get that sleeve in top loaded No, Carl the admission is free You just pay for like tickets for rides and then like the games are You can pay just cash or card for and then Yeah, you just you just go walk around man Uh weekdays, I think it's like five to ten weekends is like one to like 11 I think the 30th. I think this that was the last day Right so saturday Sunday Yeah, Carl and it's like I don't know if I showed you guys a picture. It's literally across the street from me I can see the entire the entirety of the fair out my window Atomic bowman scouts top 100 insert louis and alacunia rangers to 150 Gabriel moreno Fuchsia paper to 299 marcus lee sang first bowman fillies Hope everyone's having a great day again matt's live if uh You want to watch two bowman streams at one time got andres mesa first bowman based auto rangers last hit of the break And I believe sam had what two two spots. I said That was before a few minutes ago, so those might be sold out, but um Yeah, so Two spots left for the rest of the day. It's not even 11 a.m So it's the Padres on one of the cases later and the Red Sox on one of the cases later. That's it a fuchsia first bowman Lunar crater 106 and a 199 Gabriel Gonzalez nice card for the mariners again here Two Gonzales numbered cards no autos though. Yeah, well, I will say the prices of the fair and I think that's what They'll do they thought you could get in for free, but like Like a corn dog is like eight bucks, so you know what I mean The funnel cake was like 10 Which isn't crazy I guess but it's like it's not quite disney pricing very close Very close at least the food is better than All right, here we go. So we had um, so we'll include every auto and then some of the nicer color Um from the break so we had two Gabriel Gonzalez is he had a fuchsia and a fuchsia lunar crater both to 199 the um There's some like spots on this one. You're like his leg you can kind of see Gold shimmer young jalaponte gold insert Brian Rockio Which wins there autos of Andres Mesa Manuel Beltre Jorge Ruiz Nick morta veto Hayden younger Juan Brito Nelson rata Johan jalaponte Freyli Incarnacion refractors to 499 Colby Thomas glader figurio roman anthony And he's just by us speckled to 99 of jay savina at purple to 250 of adam crampton Oh and all fair. Oh, yeah, that was no pun intended. That was good catch though True blue leopoldo rookie auto pirates Blue lunar crater of Collin Palouse For the a's and Juan Alonzo for the Dodgers Insert auto Jose Ramos to 99 for the Dodgers gold shimmer first bowman auto of andrew taylor astros Kevin parata to 99 bowman scouts top 100 insert auto for the Mets And Andrew painter to 30 sites on september auto the Phillies 14 of 30 And then cards in mags. We had a first bowman refractor of true jones 441 of 499 First bowman refractor auto of drew jones 375 of 499 Fake congrats to the d-backs and true gold rookie auto Riley green nine out of 50 tigers Very good first case here got number number two coming up


All right, it is five o'clock, so I will call this meeting to order, starting out with the roll call. All there Faldi? All there Perala? Here. All there Ackley, and all there Flaky Panasky are excused. We do have a quorum, so moving on to the Pledge of Allegiance. Will you all please stand and join me? I pledge allegiance to the Queen and to the Republic for which it stands, one nation under that indivisible, and the Supreme Court is adjourned. All right, barring any objections? We'll skip over introductions today. That brings us to item number five, which is approval of the minutes. Any discussion on the minutes? Otherwise, we'll be looking for a motion to approve. I move to approve. All right, we have a motion and a second. I am seeing no further discussion. All in favor? Aye. All opposed? Chair votes aye. The ayes have it, and the motion passes. With that, we are on to item number six, which is resolution number 25 of 2223, a resolution authorizing an appropriation in the 2022 budget for grant funds received under the 2022 Wisconsin Bureau of Transportation Safety, Bicycle, and Pedestrian Enforcement Grant. We would like to take this one. I can, for those of you that have not yet met me, I'm Kurt Zempel, I'm the patrol captain for the Sheboyin Police Department. So, hopefully this part of it is somewhat straightforward. We were notified recently that we were eligible to receive a grant from the State Department of Transportation for bike and pedestrian safety patrols. This is similar to a grant that we received last year, except that it's for $15,000 this year. Last year it was just $5,000. And so, our intent with the grant is to conduct primarily pedestrian safety patrols at events and at times over the summer where we have the increased risk of pedestrian-involved crashes. And so, last year primarily we used it for pedestrian and traffic enforcement around our bar district on busy bar nights, especially focusing on 10th in Michigan and 9th in Indiana, where we have lots of people crossing the street and crosswalks and lots of vehicle traffic in the area at that time. It also has the added benefit of just providing an opportunity for police presence in those areas, which is helpful for lots of other reasons. And, but this year, because of the increase in the grant, we are going to use it for other types of events throughout the summer downtown, where there's an increased pedestrian traffic and therefore an increased risk for pedestrian safety. So, as far as the financial side of it, so LHPS heard this on Wednesday night last week and approved it, the financial side of it, working with Caitlyn and Finance, this is how we did it last year where we increased the overtime budget by the amount from the state grant and with the corresponding increase then in the state grant account. Thank you. You're welcome. Questions or comments from committee members? I'm just curious, so last year we had one for $5,000 and was last year the first year that we got the grant of this type? Of this type, yes. Thank you. Mm-hmm. Any other discussion? No. If not, we'll be looking for a motion to approve on this one. I move to approve. Second. All right. We have a motion and a second then, seeing no further discussion. All in favor? Aye. All opposed? Chair votes aye. The ayes have it. The motion passes. Thank you. Moving on to item number seven, which is resolution number 26 of 2223, a resolution approving an amendment to the project plan and boundaries of tax incremental district number 16, City of Sheboygan, Wisconsin. Thank you, Chair. So this is in regards to bringing the former Sheboygan press building into the TIF district. So tax increment, tax incremental financing district number 16 is what we consider the downtown district. It runs from the Sheboygan River up to, I want to say, the Weill Center give and take, and then kind of include some properties to the east. This is just bringing in the parcel that Sheboygan press building sits on in order to provide development incentives to the developer to renovate that into apartments. So this was, those would be, there's 29 workforce housing units on a lower rent scale that will be utilizing that property when it's renovated. We're working on a developers agreement right now that lays out the terms and that'll be coming forward in the coming weeks from, for the council to consider as well. But this is part of the process that we've worked with, with Ellers to amend the district to bring this parcel into the district. So the Planning Commission held a public hearing about two weeks ago. There was nobody present and they voted in favor. The Joint Review Board met that same day. The Joint Review Board is made up of all the taxing jurisdictions under state statute and they were voted in support of it as well. So this is coming before this body and then when the council adopts it, the Joint Review Board will meet one more time and just confirm what the council did and then it will be brought into the TIF district. Questions or comments? Yes, sir. Oh, the umbrella. Is this the same developer that owns the former U.S. bank parking lot on aid and pen? No. This is the developer that owns the department's cardinal, the developer's cardinal capital and they own the seventh and pen apartments that are built to the east of the Salvation Army. We go ahead with the amendment to the TIF and then, then, I mean, it's under that part, the amendment is under related to the agreement itself with cardinal, right? It may not work for whatever reason, but the two things are separate anyway, right? Okay, thank you. Any other discussion? Thank you, Chairman. Oh, they're hiding it. I just one question. What is the impact on this increase to the, on the general fund? Because this was normally just a regular taxed area that money was coming into the general fund, what is that impact? Or where is, what are, again, I understand about the development areas, but just when you take something out. So the property right now is assessed at 360,000, so whatever that calculates out to is probably, you know, a couple thousand dollars in taxes that we get off of it. The developer is planning to invest, I want to say, three and a half million total, so that increase value then would be captured into this district. And then when the district closes, this is, TID 16 is one of the districts that Ellers had recommended that could close, I think, five or six years early if we don't have any other major public infrastructure improvements to do. So then it'll ultimately come on the tax rules, but without TIF, we wouldn't see the value of the delta between the 3 million and 360,000. Okay, and I appreciate it. So the retirement of the, that TIF, what is the year? Is that 2031? It's a 20, it's a 2020 district, it's a 20-year district that was created in 2016. Okay. But the public works department is utilizing it every year that's funding all the conversion of the high-pressure sodium lights downtown to LED lights, so we're using TIF funds to do that. And I know they have some other capital projects, so once those get finished and we've paid off our development incentives, then we can look at closing it. Oh, thank you. Thank you, Charlie. Any other discussion? If not, we'll be looking for a motion to approve on this one. Yeah, we move to recommend, right? I move to recommend to the council. Second. All right, we have a motion and a second, then seeing no further discussion. All in favor? Aye. All opposed? Chair votes aye. The ayes have it. The motion passes. It looks like our next regularly scheduled meeting will be on June 27th, and with that, we have exhausted our agenda, and we'll be looking for a motion to adjourn. Move to adjourn. Second. All right, motion and a second. Seeing no discussion. All in favor? Aye. Aye. All opposed? Chair votes aye. The ayes have it. The motion passes. We are adjourned. Thank you.


What's up everybody, it's Jason here for jazzyman4jazvyskagebrakes.com Mystery Crate spot giveaway here with this 2023 Bowman MLB 1 Box Blaster number 21. And again guys, we'll do the break first, randomize because of our names, teams distribute the hits out, then at the end we'll re-randomize because of our names, and number one gets the spot on the Mystery Crate. So let's do the break first guys, roll. It is a three to five, eight times, good luck. Break first one, two, three, four, five, six, seven, eight. Eight times, eight, eight, Tim down to Tim. Eight times, one, two, three, four, five, six, seven, eight. Eight times, eight times, Washington Nationals down to the Pittsburgh Pirates. All right of course guys, no trading because it's a quick little box or blaster but I'll let you quickly see your teams. All right let's switch teams down and let's do the break or the giveaway I should say. And it is of course Mystery Crate top name and number one guys. Roll it, four and a six, ten times, good luck. One, two, three, four, five, six, seven, eight, nine, ten. Ten times, four, six, ten. Here we go guys. Just me sound was John. But Samuel Williams, congratulations buddy. You are in. There you go man, 21. Appreciate it, congratulations guys and congratulations Samuel. Now again the next Mystery Filler is on the website. That's the last one, I'll sell it out if you guys want to do it tonight. If not tomorrow, appreciate it guys, thank you.


Hello everyone, it is Crypto Grounds here and welcome back to another Unity Idle Game Tutorial video. This is episode 5.4 and today we're going to be working on the logarithmic notation. If you have no idea what that looks like, it looks something like this. So basically the purpose of this is to condense the number even more and this is good if your numbers want to get really big, really fast. So instead of having a lot of just floating decimals and then a large exponent here, you can just condense this down to something like this instead. If this video was helpful, make sure you leave a like and subscribe if you're new around here. Be sure to turn on that bell if you want to get notifications for future videos and live streams. Anyways, let's hop right into it. So fourth episode in a row where this is going to be a piece of cake. So let's head to our method script. And same thing as the engineering notation, we're going to add case 3 and this will be our log notation. So this is very, very easy guys, I'm telling you. All we need to do my friends is to take the log base 10 of the number we pass in. That is freaking it guys, I'm telling you, except I'm going to make this an absolute because we can run into issues when we have negative numbers inside this log 10. So we're just going to make this an absolute. So that makes sure it's always positive. And then we're going to apply two string and three. So we want the commas as usual. Now if you want to have the mantissa digits, you can just do, you can just add that inside of the string mantissa digits like that. And we also want to add the E at the beginning of this string. And I'm just going to join this all together with string interpolation. And it looks like that. Muah, very easy. This is all we need to do for this notation. Now if you want to clean this up a little bit, make things look a little cleaner and shorter, what you can do on Ryder at least, I'm not sure if other IDEs you can or other text editors is do all, enter, import static members. And it just chops off all of these big doubles and applies it right here using static break infinity to help big double. So just a heads up, it will get rid of all of them. And you can see how much shorter this looks. But just to prevent any confusion in case anyone can't do that and doesn't want to do it manually, I'm just going to keep it as is like that. And same as the previous episode, we're going to head straight to settings and apply our log notation to our settings. That's all we need to do. Let's test it. All right, so we're currently on engineering still. Let's head to settings and switch it. Here we go. See how nice that looks. Looks very nice. Also looks like the costs don't want to upgrade until we click on them. So what you can do is when you change their settings here, or when you sync the settings at least, you can call upgrade manager. Dot upgrade manager dot update upgrade UI. Now, you'll just call this whenever you're changing the notation. So all the upgrades are synced. All right, we're all set for the notations, guys. This is going to be the last one. I want to do letter notation, but it's very hard to make. And I just don't have the patience for that. Sorry. So if you enjoy this video and if you find it helpful, make sure you leave a like as it really helps out the videos. Subscribe to my channel if you're new around here and you're not subscribed yet. Turn on the bell if you want to get notified for whenever I post videos or whenever I go live. Sometimes I like to play games or work on my own when I get the chance. Thank you guys very much for watching today. I'll see you guys on episode six, which will be progress bars. Yes, finally, something different for once. And I hope you guys have a great day or night. I'll see you next one. Peace. Oh, and if I turn it up, then I'm bound to attract the crowd. So no wonder me and Tim be out of state doing things you can't imagine. Chris Angel on the mic and me a beat. I'll show you magic. We bought a different.


Good afternoon, everyone. Thank you all for coming to this talk. I'll be explaining about the best practices and experiences that I've had while I was trying to learn to build Android SDKs or libraries. I'll be covering a lot of these information, like in the upcoming slides. But let me first introduce myself. I'm Nishant Shavasthu. I am a software developer at Omni Labs. Our company is based out of Vancouver and San Francisco. It's a small startup. And what it deals in is it builds analytics and business intelligence tools for marketers. You can obviously find me at my Twitter handle and GitHub handle, that's NISRULZ. While at work and in open source, I've built a lot of libraries. And two of those which I'm really proud of that I've built in open source are basically Sensee and EasyDeviceInfo. So Sensee is a very basic Android library which makes detecting gestures, such as a wrist twist or your shake detection or your tilt or rotation or all that stuff. It makes it super simple. You just have a particular listener and it just tells you that a particular gesture is there. So I made this library that was really something that I wanted to build in the first place. And then EasyDeviceInfo was basically born because I have done a lot of analytics SDK. And that requires me to get a lot of information regarding device information. So that's all good, right? But wait, what am I talking about? What is an Android library? So an Android library, according to me, is basically like it's a reusable piece of logic that is written in code. But the way I like to put it is like an Android library is basically made of three secret ingredients combined when combined together. It forms the Android library. The basics that we all know about is basically the Java code, which if it is being used in Java language itself, you can have the jar that is Java archive. Android library has extra stuff in there that is Android resources and Android manifest stub. Stub is basically a placeholder. When you combine all these, it forms an Android archive. In short, AAR, that's the Android library. But why would you want to create an Android library in the first place? It doesn't make sense. I don't just want to create an Android library, right? Well, the short answer that I would like to add is like, you don't have to, because if there's already a solution existing, why then just use that? It might sound a bit obvious right now, but it is not. Just take for example, you have all these huge number of libraries just built for runtime permissions, right? You don't want to have all those. We should literally be having just one the same way as we have retrofit and OK, should it be existing for networking, right? So if you really want to contribute back, maybe send a pull request to these specific ones, but the one library that you are trying to build around, maybe an already existing solution exists, and you just send a pull request and make it better. With that said, let's just move on to best practices for building Android libraries. So before I start talking technical stuff in this, I would like to mention a few aesthetics about how and why a particular type of Android library should be built. And it starts with the ease of use. So when I say ease of use, I'm literally trying to say that the code that is reusable, it should be very easy to use. And it needs to follow three simple rules. They can't be more, but these are the major ones that I look forward. And that is that it should be intuitive, as in it should do exactly what it is saying that it is going to do. Take, for example, you build an Android library that is supposed to make image cropping easier for Android developers, right? But you added another version to it, and then you added like QR code to it. That does not make sense because initially, the prime focus of the library was to do just image cropping stuff. So it should be intuitive. It should do exactly what it is meant to do. It should not deviate from its path. The second is basically it should be consistent between versions. So in the first version, maybe you had your image cropping functionality. The second version, you added QR code reading, which is obviously conflicting the first rule. But these two versions that change, and then the third version, you replace the image cropping functionality. That's not how it is done. Why? Because the Android developer is still expecting that feature exist, where it doesn't in the version three. So it should be consistent. If you really want to remove something, you need to follow a certain path, which we'll be talking about in the upcoming slides. The last one that I usually look forward is like it should be easy to use and hard to misuse. Now, again, this line is, again, very obvious. But you need to think from the perspective of a library developer versus an Android app developer. A library developer needs to make sure that it is very easy for the app developer to use this particular library code itself. But he also has the responsibility to make sure that even if the app developer tries to misuse it, he can't, because you put in the validation checks for all the different type of scenarios that might exist. OK, so now I'm getting into more technical stuff. And it is more about what are the things that you should not be doing versus what you should be doing. So the first one that I want to start with is avoid multiple arguments. The code line that you're seeing right now, it has multiple arguments. Why is it wrong? Well, because it's easy to mess up the order that you can see. In the example that I'm showing right now, the second argument should be an integer, but it's a string right now. You can check it from the first one. Intrefresh is now prod as a string, which is very easy to mess up. Well, if this is not what you should be doing, then what you should be doing is, maybe you can use an entity class. An entity class is basically something like this, wherein you can put your validation checks. Remember the thing that I was talking about? Hard to misuse. This is how you handle all that stuff. So you have the option of providing all the variables in there, and then you can have the setters and getters. You can have constructors and all this stuff. That's the first way of doing it. Or you can basically use a builder pattern. Builder pattern is something more like a design pattern that you can obviously study, like go online and check out. But it is basically used to initialize your library. If you want to generate a particular instance of a class, you're going to use builder pattern. The good thing about this is everything that we did in an entity class, we can do it in builder class too. Minimize permissions is the second one. Well, most of the time, this is also common to app developers, but whatever I'm actually talking about right now is from the perspectives of a library developer. So you need to keep in mind of those things. It's very common to have all these different permissions that your library might need, but you should not be doing that. I've learned it the hard way. The other solutions that you have to do, you can obviously bypass this by using intents. You don't need permissions to use intents. That's the Android framework is built to have a very good messaging system using intents. So you can use that. You need to reduce the number of required permissions. Now, this line is very specific here is because when you are building a library, you have that Android manifest tab, right? So you can add request, the required permissions in that manifest. When the merging of the manifest happened, of your app and the library, that's when that permission request will basically be embedded in the manifest of your app. So you don't want that to happen. The way to handle that is by checking it dynamically. You can use fallbacks after you have already known it. So instead of adding it in the manifest file, you actually did it like a dynamic check to find out if the permission exists or not. Based on that, you can enable and disable the functionalities. The second one is basically a third one is basically minimize the feature request. So this line that you are seeing, for those of you who don't know, if you include this in your app, your app is filtered out in Play Store from devices that do not have this hardware. So think of this. If as a library developer, I include this in my manifest and during the merging phase, it gets added to your app, you lose the target to other devices that you would usually have. So we don't want this to go in your app's manifest either. So what's the solution? Well, the solution is to do, again, dynamic checking where we can use package manager to check for the system feature. Does it exist or not? If it does, obviously go forward with whatever functionality that you have implemented. If it doesn't, then either use a fallback or maybe disable the functionality altogether. Support different versions. My rule of thumb is basically support the full spectrum of Android versions. Why do I say that? Well, the whole idea is to reach maximum app developers. You want people, those who are still using API version 9 till, say, 14, and then there are people, those who are using from 14 till 21. So you have to support both type of Android developers. So that's why you should be supporting. The min SDK should be 9 and the target SDK should be 26. But what this comes up with is there are other APIs that you cannot access in, say, version 14 or below, or you can access something that is only above version 26. So the way to handle that in your library code is by doing, again, a dynamic check. You can check if a particular version exists. And if that is, then what are the APIs supported by it? If a certain API is not supported by it, you enable and disable functionality based on that. And you add more maybe like a fallback also. You can generate a log in your log cat by showing that, OK, this particular functionality is not available. We cannot do anything with that. But keep in mind, we are not enforcing it on the app developer anymore. We are making sure that everything that we are going to do in the library is happening dynamically. Don't log in production. I've seen this in multiple libraries that are open source. What these guys have literally done is they add logs in the library code. And when you add that library in your Android app, these logs show up. These logs show up even though you haven't enabled any of these logs in your app itself. So you don't want to do that. But you literally want to add logs for exception centers. Why? Because that's important. That needs to be shown to the app developer when he's developing the app. But that's not a good idea to show it all the time, right? You still need to give them some control over who sees these logs. So my way of solving this is by providing a flag logging support. While you're initializing your app, you can provide a buildconfig.debug flag. That is basically that you are in your debug mode, right? And you'll see that the section in my library code, this is my library code right now when I'm initializing it. I flagged it by putting an if condition. And based on that, only my exception would be printed on the log side. So thereby, I'm giving control to the app developer to control when he wants to see this particular log or exception, versus just showing it in the production itself, OK? Degrade gracefully on error. So I'm going to talk about an example first before I talk about what it is here. But this is a problem that I've seen in some of the other Android libraries that I've worked with. One of the other SDK that I worked, it was from Enterprise itself. And what they did was whenever their SDK would fail, it would crash the app along with it. So you do not want to crash the app. If and if your library crashes, you need to cache that error and do something about it, like basically disable the functionality. It doesn't work. You don't want to keep it in an unstable state. Saying that your library is crashed is a problem that the app developer cannot solve. What he can do is come back to you by saying, OK, this is an error, and you need to fix it. And that's a long chain to go through. You don't want that whole process to proceed. So what you want is maybe cache this error, but disable the functionality. When I talk about the error section, this is also important. I see this a lot of places.  Every single type of exception that comes, just cache that, print it in log, or enable, disable, everything. This doesn't work. Why? Because you don't know what's happening. Unexpected errors are coming, and you are not prepared for that. What you should be doing is doing specific exceptions. You know what is going to happen. Because you know what is going to happen. You know what type of fallback or what type of functionality to disable. If anything is happening outside this, it's a critical problem. Instead of catching it, and just silently not telling anyone about what happened, or maybe just logging it to the app developer side, doesn't help. So you need to be specific as to what kind of exception that you are passing or you are catching, actually. Handle poor network conditions. Now, this is synonymous to people, those who develop apps also. But the perspective is different here. The example that I will take is the first one that I took, the image cropping library. So say, for example, you have an image cropping library, and it downloads a configuration over network. It does that as soon as your app initializes. Now, what is going to happen is, when you start developing it, you will see that the configuration files download instantly because you're in a place where the network condition is good. And it works. And you ship the library. A lot of developers are using it. But what happens is that you need to acknowledge that unreliable network also exists. There are countries that do not have enough bandwidth or good internet conditions. So in those cases, what is going to usually happen is that the configuration file doesn't download. And your library never initializes. It goes into unstable state. It crashes, probably takes the app down too. So the first foremost thing to understand is that you need to acknowledge that the unreliable network conditions exist. Based on that, you need to make some different changes in your code so that you understand that sometimes the configuration is not going to be available. A default solution, you can provide standard default configurations to make use of to initialize your library. That could be a good solution. The other solutions basically include by batching network calls or prefetching data ahead of time and using better data structures such as flat woofers. So all these three things that I'm talking about, batching network calls, prefetch data ahead of time or use better data structures such as flat woofers, they all pertain to one specific thing is that your library should be doing least impact to the app itself. When a library is included in the app, then if you are doing batch network calls, you are using less radio, so less battery. If you are prefetching data ahead of time, you already have the information so you don't have to make multiple calls. If you are basically using better data structure, then the data that is passing over the network as well as what's being used on your device in memory, like it is an efficient way of accessing the memory itself. So all these things are important as a library developer because you are trying to push forward the least impact to the app. If someone is including my library and I start making a lot of network calls, the app developer never coded this functionality in place. And the battery that is being consumed shows up in his app, not in my library. So it's really important as to the things that we are trying to do versus what comes up in the app itself. This is fairly new. So implementation API versus compile. Most of the stuff that you have been doing up till Gradle 4.0 was compiled, and it didn't allow you to do a lot of things. It's like standard compile and the dependency name. What Gradle 4.0 onwards they introduced was the deprecated compile, and they said there are two keywords now for build.gradle file to include dependency. It's implementation and API. Implementation is, think of it, if a library module uses implementation to include another dependency, then it is only available to the library module. It is not going to be available to the app module. But if I was to use an API version of this keyword to include a dependency, this particular dependency would be available to the app module too. So it's just about the scope of where the classes are available, require minimum dependencies. So I say this, and you can use this particular plugin. I use this a lot to keep track of what is the method count, because method counts.  And in total, when your whole library is being used in an app, the sum total of all the dependencies plus whatever methods you have, that gets added to the app itself. So the app developer is most susceptible to be reaching the 64K limit. We want to reduce that. So what we want to do is we want to have less number of these. For example, people usually include the complete Google Play Services library. You don't need that. You need maybe a sub-library of that that is available now. You can see that type of functionality also in EasyDeviceInfo, where we are slated into different modules. And you can include only part of the library itself. Another solution is basically letting the developer make the decision about inclusion. So I think I got this particular information, I guess, like two or three months back. I didn't figure out before this. But the whole point is every single time you add an implementation API or compile statement to your library by adding a dependency, what you are actually doing is you are asking the compiler to compile the library and the dependencies are along with it. What you would want instead is maybe just don't include the library at all. And let the app developer decide if he wants that type of functionality or not. So the way to do that is basically by using provided or compile only. Provided is now deprecated with the new Gradle 2.12 onwards. You can use compile only. What this basically does is that the dependency is not included in your library anymore. And compile only is saying that when the compilation will happen, it will look for the classes at the time of compilation. It's not going to pre-compile these libraries along with the original library itself. So you do this on the library side. But on the app side, you actually include an implementation. Now, if I was not to include this in my app, this dependency is not going to be available to the library itself. So how do I handle that? I handle that by using, again, dynamic checking. Checking for the class, if it exists in the class path. If it does, good enough, we can enable the feature. If it doesn't, the developer didn't include the dependency in the first place, then we just do not do anything. And we can disable it or use a fallback. So it's a clear case of deciding where you want your method counts to go. In this version of doing things, you shaved off the method counts specific to that dependency because you didn't include it in your library. But you asked the app developer to include it. So they made the decision of including it on their site. And you didn't do that. Lifecycle architecture components. So this is fairly new. Everyone talks about this lifecycle architecture component regards to app development. They talk about how to architect your app and everything. But no one talks about the lifecycle architecture comprehensive with respect to libraries. A good thing that it brought with it is now library developers can look for what a particular lifecycle event is going on in the activity itself. And it allows us to trigger a lot of functions based on that. Earlier, we couldn't do that. What we had to do was put it in our readme as to ask the app developer to include a function in onDestroy, onPause, onResume. And they'll have to go and write these functions. But what lifecycle architecture component allows us to do now is we can ask a specific function to get triggered at a specific point in lifecycle itself. So you can see right now we have execute function onCreate, where I have added an annotation on top. And then there's a cleanup function because I don't want to leak memory here. So I have one that is going to run onDestroy. The way I implemented this is by implementing the lifecycle observer class. It's available in the architecture component dependencies itself. And the way that you do it on the activity side is by extending it from lifecycle activities and then adding it as an observer and removing it as an observer. That's it. Any other lifecycle events when they occur, what function needs to get called is decided on your side, and it is not off-roaded to the app developer anymore. It's all being handled by the library developer, and they make the best choices as to where this should be called. This is a good one. So do not hog the startup. So it's all cool. It's nice that you build an awesome library. Everything works. But it's not good if you are going to eat up all the startup time trying to initialize your library. The example that I gave that where you make a network call to get the configuration file, as soon as the app is starting up, if you try to do that instantly, that's not a good thing to do because maybe the UI is not going to be good enough to see that. It's going to be jittery plus maybe the app just stops responding. You don't want that to happen. And app developer, whenever they see that after adding a library, this happens, they'll just remove it. So even though your library is awesome, it does a lot of things. It doesn't have any bugs. You wrote a lot of tests and everything. The first impression it gave was so bad that the app developer just switched it over with a different library. So you don't want to do that. What you want actually to do is do a lazy initialization, but still initialize it at the time when a particular feature is demanded. On-demand initialization is something that you can try doing. Remove functionality gracefully. This is important because no one does this. Every single person that I've seen for not talking about the star Android developers who build libraries, but the general ones who are building libraries nowadays, like the beginners who are doing that, whenever they are trying to remove a public API from their library itself, they just delete it. So it exists in version 1.0. It doesn't exist in version 1.2 anymore. And no one, the app developer doesn't have an idea of how did that happen. So the way to serve can navigate that is by adding at the rate deprecated annotation. That's by marking it that it is going to be removed in future. You do it in one of the versions. And then you remove it after one or two, three versions. You don't remove it instantly. What would be good is if you added a Java doc that explains what to use because this is deprecated. So I'm basically talking about as of release 2.0 replaced by this particular function, so use that. Document everything. So this is important maybe for everyone, like if you are doing it open source. But in general, if you are doing it for your own enterprises also, your code is what is being read all the time. It's not an app which needs to be used by a user. Your code is what is being used by the app developer. So it is read all the time. So if you provide a simple example, if you write enough information for the app developer to understand and think about if do I want to use this or I don't want to use this, providing pros and cons, put it in the read me because that is the first thing that they are going to read. Include Java docs in your code. I think this is very obvious. Bundler sample app. Now, this is something that I need to mention. A sample app needs to be as minimalistic as it can be. Adding a sample app, people think that they can add something that is fancy looking. It has a lot of UI animations and a lot of stuff because that's what people are going to see. But what is important to understand here is that people are not here to see your app anymore. They are here to see the implementation of the API that you have built. So build the simplest possible example app that does not have a different UI or a lot of different things, pomp and show, going on. What you want is it should only show how to implement your Android library, how to use it, and harness all the functionalities that you have invented to the library itself. Maintain a change lock. You can read on this link how to write a change lock. The way I do it on my Sensei library is by including in your project statement how to include this library. And then I add what are the things I added into the library when a particular version was launched. So there can be version 6.5 that had some different type of functionality added, or maybe there were some bugs that I fixed. So I will add all this functionality on GitHub. This is how it is done. You can do it on GitLab and all the other Git repository hosting services too. License is really important. Most of people skip this. But understand this, if you do not have a license, what it literally means nowadays, it's not even like in legal terms, it means that you own the code. And no one is going to come back and contribute back to it. So if you do not mention how you want others to contribute back into it, people are not using your library. They just think it's propriety. So add at least any specific license that you think matches whatever you want to do, and maybe then upgrade it to something else later on. The best one that you can do is basically do MIT or Apache 2.0. That is really good. What I like to do is I like to do a header that basically includes all the stuff regarding my basic summary of the license itself. Because who reads the license anyways? The app developer is basically going to open up the code. And as soon as they open up the code, they see this header. And they understand, OK, this is what the license it is pertaining to, and this is how I can actually contribute back to this library itself. Versioning strategy. Now think of this. What if retrofit had a version that said 1.2 ABC123? You don't want that, right? No one remembers that type of version. So doing these type of different type of versions, you can see a lot of these libraries that go on Jetpack. Some people also put their name. They would put James123 as their version, because Jetpack allows you to do that. But most of the time, you should not be doing that. There's a site, semversion.org, that you can go to check how to version your libraries. The gist is basically that you version your library based on major.minor.patch. If it's a change that breaks something, you bump up the major version. If it is a change that adds a new functionality, you bump up the minor version. If you did something very like a small bug fix, but did not change the public API at all, just bump up the patch version. It's a simple rule. It's not something that is hard to understand. So most people should be following this. They don't. But I hope most people would do that after my talk. Versioning strategy, again. So the versioning that I explained is most about how you should version in the first place, like what should be the version of the name. But then what if you wanted to support two different versions of your same library? Say, since the library that I built, it existed at version 1.0, it did something. And then since 2.0 came out, and it did something else. Now, there's a huge chunk of Android developers who are already using the since version 1.0. And then I come up to since version 2.0. I have two options, too. The first one is basically ask everyone to upgrade to 2.0, which is not easy to do, because most people would not go back and write more code. So that's not how it works. The second version is basically, by changing the group ID, I can release both these versions the same way as RxJava does it. So you can see io.reactivex is the same. But the next group ID is changed. RxJava is now RxJava 2. At this particular point in time, they have released both these versions. And they can push more updates to the version 1 itself and to 2 at the same time. They definitely have given a timeline to kill version 1. So that's how you should be killing out your version. But it says that at the same time, you can use whichever version you want. And they both get their own box fixes in time. ProGuard. So most people actually don't know about this. I've talked to other Android developers, but you can add those particular ProGuard rules in the library itself. Most people just don't do that. And the way to do that is by adding consumer ProGuard files line in your library build.gradle. You just create another file, consumer.proguard.rules.pro, add your configurations in there. And you just add this line. And when you compile and when you try to have your AR generated, that's when this ProGuard file will already be in there. When an app developer uses it and they enable the ProGuard, this configuration is used for your library. But then I read this. And this is by the great Jake Wharton. So basically, he says library providing ProGuard rules is almost always a bad idea. They wind up being overly keeping and defensive so that things just work. And it made me think that he's actually right. These type of things are something that we just can't avoid. We want to keep our library intact. We don't want it to be stripped off by some app developer. But you also need to think that if I didn't write that ProGuard file, like myself, I didn't provide the configuration, then the app developer is basically banging his head to get that right. So it's more like a balance. If you know how to write ProGuard rules, definitely put it in your library. If you don't know how to do it, just too many if I enable and that's it. You just, you need to learn ProGuard rules in the first place to start putting in things. With that, I think that's all. I'm open for Q&A if there is any. Thank you. Thank you, thank you. Do we have any questions? Yes, please come to the microphone. That's a little hard. It's okay, it's okay, I turned it. I have a question about dependency. So say my library needs retrofit to talk to the network. And I'm worried that if someone is using my library and they want to use a different version of retrofit, like how do I make sure that my library will still work? Do I include retrofit? Do I use the... So this is related to the slide that I was talking about. You can actually add a compile-only version where it will be added during the compile time. So it's not included in your library anymore, but it definitely says that there's a reference existing for retrofit and you are looking for that in the application side that someone needs to include that line. So if that particular line is not included, the check that you're doing on your library side is basically checking on the class part that a class exists or not. If retrofit doesn't exist there, then that line was not included in the app in the first place. And you can definitely fall back at that point. So basically I will have to have code that uses retrofit and fall back to use just, like, Android framework. So that's pretty painful. That is, but you are providing a solution here versus... So this is more like a balance that you are trying to have. If you want to include the method counts that retrofit brings in, then you just include it as it is. But if you are trying to avoid that, then the functionality, if it is not retrofit, maybe you are using HTTP UR Connect. And you are not doing a lot of things that retrofit literally does.  At that point, you just don't need that, right? You can just have it as a compile only if that functionality isn't provided by the app developer in the first place, then you are using something else. Okay, well, I'll ask you more later. Okay. Yeah, I have more questions, but other people ask first. Yeah, thank you. Hello, thanks for the talk. Yep. I had a question regarding the sample apps. If it's a library that it's not quite simple to use, that it has lots of functionality, would you, in the sample app, would you ship the sample app with something like MVP and BBM, or would you still keep everything in activity and make like several screens? So since it's a sample app, most developers are going to come and download this sample app first fall and then compile it and then look at the code. They'll not straight away look at the code instantly. They compile it, get it to run first, and that's when it's working. That's when they'll go back and check the code. So you want to make it as simple for them to consume. Think of it. It's like you reading your own code. So if you can split it into different activities, good. Not even activities. If you can split it into different classes, good. If you do not want to do that, then you'll probably put it in the activity. It's an equivalent version of how you want your library to be used. So if it is hard right now, maybe you need to simplify your library code in the first place so that it becomes easy on the app developer side. So the changes that you are expecting it to become easier on the app side, you need to implement that functionality in your library in the first place because then you are changing your perspective, right? Now you want to be in a state where the app developer finds it easy to implement it. So make those changes on the API side so that it is easy for him to see that code itself. My question was more related. If it's a library that requires UI to show it in the sample app, would you use, like, MVP, for example, to divide the logic from the view? Or would that be a bad thing because maybe the user that is using the library won't know about MVP. I would not use MVP on other architecture because now your library is basically an API for simplifying the user interface, right? It's probably providing some sort of, like, a resources file, an XML file, and these things. When you include that functionality and you are trying to show it in an activity, I'll just use it as it is in the activity. As soon as you add MVP and other architecture components and other stuff around it, you're adding more, like, complexity to that sample app. You are obviously making the sample app much better in performance, but that's not the whole idea of the sample app. The idea is to show the implementation of the library. Okay. Thank you. Thank you. Okay, Nishen. Thank you for sharing your insights and your experience with us.