Hello, folks. Welcome to our talk. Today, we'll be sharing our story in running 10,000 Argosidy applications and sharing our journey in tuning the performance of our Argosidy instance. My name is Geary, and this is my colleague, Yudi. Both of us are infra-engineers from GoToFinancial. GoToFinancial is a financial arm, part of financial arm, part of GoTo Group, the leading digital ecosystem in Indonesia. We provide various service offerings from ride-hailing service using motorcycle, food delivery service, package delivery service, e-commerce platform, and many other services. To start off, I'm going to give you a brief overview of the state of current of our Kubernetes and Argosidy. We maintain around 50 Kubernetes clusters across AWS, GCP, and private data center in Singapore and Indonesia region. This consists of 700 compute nodes, 15,000 CPUs, 120 terabet memories, and more than 30,000 pods. This Argosidy dashboard snapshot we took two weeks back. There's an interesting story behind this snapshot. When we were preparing for KubeCon proposal this talk a few months back, we were at 7,000 Argosidy apps and looking at the growth rate of our Argosidy application, we predicted today we would reach above 10,000. That's why the title 10,000 Argosidy apps and today we made it. It's now 11,000 Argosidy applications. These 11,000 applications are coming from 6,000 repositories across 60 different projects. Argosidy watch more than 30,000, 380,000 total objects. On our largest cluster, we run 2,000 applications and Argosidy watch over 40,000 objects. We adopt a simple centralized Argosidy instance model which is technically a push model or some of you refer it as hub and spoke model. In hub and spoke model, we have management cluster where we run our single Argosidy instance. This Argosidy instance reads a common git repository. Sorry, git providers. And then using the manifest stored in git repository, the Argosidy instance push objects across all the clusters that get registered under Argosidy instance. There's a couple of benefits with this simple centralized Argosidy instance. It's very easy to maintain and upgrade because we only need to upgrade one Argosidy instance regularly. It's very easy to integrate with our automation at platform. Internally, we maintain a developer platform that is tightly related to Argosidy instance. So maintaining only one Argosidy version makes it very simple to write our integration logic in the platform. It's very easy to manage centralized RBAC because everything is in one place. And we have a nice single dashboard to view entire Argosidy applications that we have across entire clusters that we manage. Internally, we have a developer platform that became the primary interface of our product engineers. We don't let product engineers to create Argosidy application by themselves. So this developer platform leverage the standardized health charts that we maintain, the platform team maintains, and the platform generates the manifest, push it to repository, as well as generate the Argosidy applications. Our developer platform has some sort of grouping mechanism so that sets of Argosidy applications point to the same repository. In some cases, one Argosidy application can also point to one repository. The design in our platform is that one service can contain three to five Argosidy applications. These sets of applications can have different life cycle. So for instance, if a user or product engineer create service through our developer platform, we will generate one Canary application and one stable application. The stable application points to, let's say a stable container image V1, and then the Canary application points to an updated version of Image, for instance V2. The separations of application makes it very easy for us to perform our Canary rollout strategy and do promotion to the stable and Canary rollback if necessary, makes it very easy. Now in our platform, we enable Istio by default, which means we inject Istio sidecars into every pod that we manage in our clusters. We manage Istio sidecar objects or Istio sidecar configurations as a separate application. So things like critical service object, destination rule object are maintained separately in another application. In this application, we configure the traffic routing, let's say Canary 5% or stable 95%. The reason of the separation is that each of the application we can control it independently. And in some cases if the service wants to expose domains to public or third party partners, we expose it, we control it, we make configurations through another application, the Istio gateway application which contains gateway object. Another use case that we leverage ArgoCD a lot is to maintain our cluster runtime components. In this cluster runtime components, we have standardize components across the 50 clusters that we have. We leverage ArgoCD app set or application set and the app of apps pattern on a monorip. So we only have one repository that manage and configures runtime components for all 50 clusters that we have. In the root of repository, we maintain the root app set which generates the parent app of each cluster. So in this example, there's cluster 1 parent app. Each parent app manages the base cluster configuration as an app as well as the runtime component as an app set. This base app contains basic configurations like RBAC or limit range and so on that are standardized across all the 50 clusters that we have. If we need to customize the cluster beyond what is standardized, we do it through another application which is a server-side apply patches application. These sets of applications are replicated for the rest of the clusters that we have. And by the way, we also manage ArgoCD on ArgoCD. There are a few challenges with this simple centralized ArgoCD instance. First challenge is this ArgoCD instance require connectivity to all the target clusters that it manages. So the consequence of this is we need to establish tunnels or peering connectivity between the management clusters and the entire workload target clusters. And sometimes it's not always possible to establish tunnels and peering. We do it through a public network over MTLS. Another challenge is the limitation of ArgoCD functionality. First, in ArgoCD we need to maintain unique application name globally. There's no separate... So even for different projects, the application name cannot be the same. For us, luckily, we always generate application name from the platform so we can have some sort of convention to add, let's say, the cluster name or team name as a suffix or prefix of ArgoCD application name. So each team in our platform can have conflicting namings. And then the next challenge is this centralized ArgoCD instance is a single point of failure. Another challenge that we encountered a lot is performance issues of central ArgoCD instance. Along the way, we encountered slow reconciliation problem and sync issues. We look at the ArgoCD or QDAP metrics and the app reconcile metrics for this. I'm pretty sure a lot of you are also experiencing this if you manage more than 1,000 applications. The UI starts loading very, very slowly. For us, it took around 1 or 2 minutes to load the entire home page of ArgoCD dashboard. This is quite obvious and we got a lot of complaints from the product engineers. We face frequent repo server OOM kills by looking at the Qube events. We have an alert for this. We face high rate of our Git API calls for both LS Remote and Fetch. We look at Git request metrics for this and we encountered high repo catch miss in the repo server by looking at the repo server locks. It turns out later on we found out that this high repo catch miss is the root cause of why our ArgoCD is making very high rate of Git API calls. And in our controller charts we see imbalanced resource consumption by each charts and noisy cluster problem. Next, UD is going to give us walkthrough on our journey in tuning at the performance of our ArgoCD instance. Thanks, Gary. Now let's talk about our performance tuning journey. In the next 20 minutes we'll discuss all the config and parameter tunings we have done so far to support and scale our ArgoCD for 11k plus apps. As a note, the tunings in this presentation are not in chronological order of when we implemented them. Instead, we'll group them into each of their own components. So first, let's take a look at ArgoCD components. So we'll use this diagram from the official ArgoCD documentation. In ArgoCD there are four layers. First layer, we have the UI layer which is mainly for user interaction. Here we have the web app and CLI. The web app we use with our web browser and CLI allows us to interact with ArgoCD through the terminal. Next, we have the application layer which consists of the API server or we also call it ArgoCD server. It serves API requests from the UI layer. And then next, we have the core layer. These components are the main ArgoCD functionality components. Here, we have app controller, app set controller and repo server. The app controller mainly reconciles and synchronizes Kubernetes objects according to their state in the repo. And then we have app set controller which is to generate applications based on templates. And then we have the repo server which receives manifest generation requests from the ArgoCD server and the app controller. And then next, we have the infra layer. ArgoCD depends on these components for its functionality. We have radis for caching kube API to watch and apply kube objects and get helm or customized repose and also decks for authentication. Okay, now let's start first with ArgoCD server. So as Gary mentioned before, we had very slow UI load. So it could take anywhere between 15 seconds to 2 minutes for us to load the ArgoCD homepage depending on our network connection. So as a solution, we enable Jzip compression feature in ArgoCD server. So what we need is to set this environment variable to true. So in our case, it improve load time in average by 5x and data size to 7x smaller. Next, still about ArgoCD server and it's actually not a tune but more of a tip for us, the ArgoCD UI users. We can actually use selectors to filter out only the applications we want to see using their label values, their projects or their namespaces. And in this example, we select one project in one namespace and we only show fraction of the total apps that we have which under our selectors here. So one great theme is that the selectors are saved the next time we load our ArgoCD UI which is quite handy. Next, it's about Kubernetes CPU limits. So this is actually not specific to ArgoCD but more of a Kubernetes mechanism and it can be applied to other use cases outside ArgoCD. So the problem is that we notice and through our monitoring system that all our ArgoCD components got total CPU total and it kind of had an impact to our reconciliation latency. So in Kubernetes, CPU request and limits are implemented using C Groups which uses the CFS or completely fair scheduler from the Linux kernel. So CFS could guarantee or could total container CPU depending on the proportion of the container CPU shares or quota in the node. We actually don't really have much time to talk more about this mechanism but if anyone is interested to have a deeper look we attach some references. So as a solution to the CPU throttling we lifted our Kubernetes limits we decided to leave it and our app controller and other components did not go total went total anymore. Next, we move to the repo server. So Giri mentioned about OOM killed happened to our repo server. So it happened very frequently So as a solution we increase the replicas and use HPA so that the repo server pods automatically scales with its memory usage. So with this we distribute more requests into more pods. So each pod actually get less manifest generation request from the server and app controller translating into less memory usage. Or alternatively we can also use the parallelism limit flag on the repo server to control how many manifest generation request that can be served in parallel to help avoid the OOM kills. However, there's one third of this approach is that the throughput of manifest generation will also be lower as we limit its parallelism. Next, so the Argo CD server and app controller talks to repo server, right? They are the clients of repo server. They talk to repo server for manifest generation and they have timeout configurations. So as we grow we started seeing those clients' timeout errors in our logs. We see them when we sing and refresh apps. So as a solution we increase the configuration in both the Argo CD server and the app controller. One thing to note is that we really need to set on both components because I've seen people only setting it on app controller and missing the server. So they still see the timeout errors. Next, continuing on repo server again. So from our repo server metrics git metrics we consistently saw very high git fetch request. So Argo CD caches generated manifest in Redis and they have 24 hours expiry by default. So in cases when remote files change often even though the repository tag hasn't changed. For example when we do git push force or when we update a home chart with the same version shorter expiry time will be more desirable to pick up those updates quicker faster than 24 hours. But in our use case our home customized and git remote references are already hermetic. So we use the tag and we don't force push or force update to a tag. So we can actually use a higher value for the expiry time. We can do it by setting this environment variable and after extending our expiry time we immediately saw dramatic drop in our git request git fetch request from the repo server. Next we move on to mono repo. So we mention that we use apps pattern and the application set in our mono repo. Additionally, we also use the multi-sources apps feature of Argo CD which allows us to have these multiple features when defining an app. So when we implemented this we immediately saw very high git fetch and git alas remote requests as seen in the two screenshots here. So we investigated it and found that it's potentially a bug in Argo CD. So we implemented an undocumented workaround for this which can be accessed in the details in this GitHub issue and our git fetch request drop which is shown in the right screenshot. But we are still seeing high alas remote request. So we think this is still an open issue. So if anyone is interested please check out the GitHub issue. Still about mono repo. So we usually might want to use webhook from our repository to notify Argo CD so Argo CD can pick up updates faster every time we commit. In a mono repo Argo CD webhook server refresh all applications when it receive a webhook even though the news change might not have any relation to all those applications at all. It could be just a subset of parts that we really care of but webhook will refresh anyway all the apps. In the refresh process Argo CD invalidates the cache for all apps and calls Kubernetes API to annotate all application objects with special annotation for Argo CD refresh. And this operation is a network bound process which may slow the process overall especially when we start having more than 1000 apps. So we can actually filter out or define specific parts when we receive webhook so that Argo CD will only refresh applications that are changed in specific parts. We can use this special annotation called manifest generate parts we define the specific parts here. After using this we spread out our refresh process after getting a webhook refresh. Next, let's move to the app controller. So one of the first problems that we had with app controller was about work queue. So our app controller work queue depth started to pile up and it did not go down at all. So we investigated and we decided to increase the number of operation processes and status processors in app controller because there are the number of concurrent reconciliation and synchronization that can be happening concurrently at one time. So we can use these parameters to tune them and in our case we use these numbers. One rule of thumb we can use for configuring these values is that for every 1000 applications we use 50 status processors and 25 operation processors. Next, about scaling. So the app controller can actually be scaled into multiple shards. So it's horizontally shardable. And the sharding algorithm in AguCD is on the cluster level. So different set of clusters will be assigned and will be served by different shards. So to scale the app controller we need to increase the replicas of the startful set of app controller and we also need to set this environment variable AguCD controller replicas with the same value. And after implementing this into more AguCD pods after implementing the sharding we notice uneven shards. Uneven shards CPU usages. Some shards has higher CPU usages and some has significantly lower compared to others. So as previously mentioned, AguCD shards per cluster, not on the app level. Large clusters could be hosted by the same shard. Likewise, smaller clusters could also be hosted by the same shard as well. Resulting in the uneven CPU usages. The new round robbing sharding algorithm just available recently might not help much either for our use case here but the chance that large clusters will get into the same shard when AguCD round robins the clusters into the shards. So we decided to do manual a manual shard allocation instead to fine tune our shard resources. To do this we can use the cluster secret which is used by AguCD and we add a new field called shard and we put the shard number into the cluster secret and after implementing it, we saw more even CPU usages across all our shards. So perhaps one discussion about sharding on AguCD. Sharding on the application level we think would be a really great feature and might be a good solution for the noisy cluster problem we have here. There's an open discussion about this on GitHub. If anyone is interested, please check it out. Next even after all the app controller tuning we did we still saw very high app controller CPU usages and what we thought I think we think was slow reconciles so AguCD the app controller watches all field changes of track objects and if any field changes and differs to the benefits that's in the cache, AguCD will start refreshing the apps. Those objects are Kubernetes objects which maybe as we know, Kubernetes fields will get very concise and some fields might get frequently updated even though those fields are fields that we don't really need for AguCD to reconcile so we actually only need the fields that we have in our repositories in our manifest. Those fields for example are the status fields or the resource generation field so in AguCD there's this fairly new feature called ignore resource updates which was only available since v2.8 and ignore differences features. We can use these features to filter out the fields we don't really need for AguCD to do that reconciliation process or we can call them high turn objects so in our case we use these configuration I think it's a bit small but I hope you can see it for example we ignore HPA annotations which frequently updates we also ignore some replica set annotations we ignore endpoint slides which could get very noisy and we also ignore the whole status fields of our AguCD one thing to note about status is that if you have custom controllers your custom controller might want to use some fields in the status field so you might want to specify more explicit what's here you want to ignore in our case we can just ignore the status fields and upon implementing this our CPU usage drop dramatically almost by half and for one fairly simple feature this was a really great feature and shout out to the contributors and maintainers for making this feature happen next last but not least about API client so our in-house developer platform implements AguCD API client library and as we scale we started seeing HTTP2 go away errors from our platform so we investigated found and fixed a bug in the API client library when using GRPC web mode which is shown in this github issue which is that error and also actually for AguCD CLI it may fall back to GRPC web mode even though the flag is not specified so you might want to check your .config last AguCD.config file to see if there's any configuration defender or alternatively we can just use the native GRPC because this bug only affects GRPC web mode and all the improvements sorry the tuning that we can share and we do have more improvements to AguCD that we look forward to which will be presented by Geary so we explore different alternatives to our centralized AguCD setup the first alternative we look up to is the decentralized AguCD model instead of centralized model this is a pool model where each cluster installs its own AguCD instance so if we have 50 different clusters there will be 50 different AguCD instances responsible to reconcile in its own local cluster there are a couple of benefits which wins against the centralized AguCD the first benefit is the application control workloads gets distributed across the clusters nicely so it's easy to scale with this model and then second benefit the AguCD instance doesn't need to have access to all the Kubernetes API servers that we have in the infrastructure so this model has a better security posture than the centralized model however there are many challenges that we don't like instead of maintaining one instance we now need to maintain and upgrade 50 different AguCD instances for us small team of platform engineers we already regularly upgrade 50 clusters 50 Istio components and if we implement this we need to add more works to our small team and our platform if we implement this we need to maintain multiple AguCD client versions in order to talk to which cluster we need to use different AguCD client versions it makes unnecessary complexity in our platform logic and we no longer have centralized dashboard to control and view AguCD applications in a certain cluster we need to open different dashboards we would be having 50 different AguCD dashboards and anyway if the cluster gets large we still require tuning of that particular AguCD instance another alternative that we saw was an agent based AguCD or a hybrid model between push and pull that we saw in equity platform in this hybrid model each of the cluster still has AguCD instance but there is a central AguCD control plane which oversees the entire application states across the clusters and the dashboard is still centralized we really hope this model gets contributed upstream in the community we've seen a couple of work in progress in the community like the first pull request got merged couple of months back it enables optional pull mechanism for application set this PR the application set can generate application objects to a remote cluster and then let the remote cluster reconciles on the application object that they belong locally in the cluster now second feature is still an open issue in GitHub it's an effort to implement centralized UI for multiple AguCD instances and what we are also excited about is the AguCD UI improvement there is an open issue right now to support server-side pagination on the AguCD dashboard which will significantly boost up AguCD load page in the home page and this is already on equity and they plan it to bring it upstream I hope soon it will be available upstream we are heavily inspired by TikTok and Adobe's journey in managing their thousands of AguCD applications and we learn a lot from AguCD best practices from Alex and also the amazing AguCD documentation that provides us clear guidance on the performance tuning journey thank you for your time we are now happy to take questions we still have 2 more minutes and please scan the QR here to give us feedback, thank you Hi, thanks for the talk I wanted to ask how fast and easy is it to short app and down sorry, I didn't get it how fast is that how easy and fast is it to short app or down on the application server how easy is it to short app or down right, you were showing you had 4 application servers running oh, okay, controller shards controller shards, right? actually it's a simple replica change and to change the environment rival we shown in the presentation so AguCD app controller is actually pretty stateless it can build up its own state again from scratch we might perhaps see some little bit of slow reconciles right after we short up or down the app controller but it's like just 2-3 minutes in our experience I hope that answers your question Hi I have a question about the centralized AguCD maintenance so what type of guardrails do you have when migrating from one AguCD version to another say for suppose recently we did a small migration from 2.72 to 2.8 performance issues and we rolled it back in case of centralized AguCD if something breaks the whole deployment system might break so what kind of guardrails did you take when you are maintaining this okay, upgrading AguCD actually each AguCD version could have their own special treatment we need to so they are actually described pretty clearly in each upgrade documents for example I think from 2.7 to 2.8 we had a pretty smooth upgrade and I think it was 2.5 to 2.6 where we had some major changes so it depends on the versions but generally it's not that operationally intensive and they have pretty clear guidance for us to do I think we are out of time if you still have questions let's do it in the hall thank you


This is the VOA Special English Education Report. Thousands of protesters, including teachers, students, parents, and pro-democracy activists, marched in Hong Kong in late July. They were protesting a plan to teach Chinese patriotism classes in Hong Kong schools. Organizers said 90,000 people marched to the government headquarters. But police gave a lower estimate of 32,000. The Hong Kong government says the classes are meant to build Chinese national pride. The government plans to require the classes in elementary schools, starting in 2015. But the government is urging schools to voluntarily launch the program when schools reopen this September. The curriculum includes a teaching booklet called the China Model. It praises the one-party rule of the Communist Party. However, it says nothing about the crushing of pro-democracy protests in Beijing in 1989. Ting Kuen Chan has been teaching primary school for 38 years. He says he was not persuaded by the booklet. I don't even believe the content myself, so it's difficult to teach my students, he says. Chan Ye Long, a nine-year-old student in the March, said, China wants to unify Hong Kong. Our next generation only knows how great China is, but not the bad stuff. Protester Paul Young, a parent of two children, says he worries that too much one-sided education is not good for the mental development of young people. The protest was another sign of public concern about what critics see as the Chinese government's interference in the former British colony. Britain returned Hong Kong to China on July 1, 1997. China promised to let the territory largely govern itself. This year, more than 100,000 people joined a pro-democracy march on July 1. It was the largest such gathering in eight years. Many of the protesters demanded that the city's new leader resign. Long Jun Ying took office earlier that day. He was chosen by a mostly pro-Beijing committee. Willie Lam is a China specialist in Hong Kong. He says people in Hong Kong have lost trust in the Hong Kong government. He says they are afraid the administration of Liang Jun Ying will take orders from Beijing to support the Communist Party and not spread knowledge of China in a fair way. To read, listen, and learn English, go to voaspecialenglish.com. You can also find our caption videos at the VOA Learning English Channel on YouTube. For VOA Special English, I'm Carolyn Presuti.


Now I'd hear us welcomed to Herlfield Air Force Special Operations Command. I told you earlier, you're in the land of the quiet professional. So our men and women are asked to do missions on a moment's notice. And we don't talk a lot about what we do. It's a shared experience. We'll look at each other across the room, and it's a nod, a handshake. Sometimes those missions are in some pretty terrible places. But we pride ourselves in getting after the mission. So it's awesome to have you here. My first question for you is, what are your thoughts on the military? What advice or what can you offer our team that we can capture? Well, I mean, I think me being here is already just an experience that I will never forget. I mean, just like I said, meeting people like you, Travis and people I know just hearing and learning more about what you guys are doing. I think that's the honor right there alone. Me hearing about the Air Force or really anything in a military or any type of, I don't know how to say that, what do you guys call it? Missions? Missions or anything. We always hear that. They're very strict. They're very on schedule. They're very focused on what they've got to do. And we always hear that we're the number one at everything. We have the number one power in the world. We have the number one military. We have the number one Air Force. We have the number one everything where a machine really just well oiled machine. So just hearing that as a regular civilian, I guess, as you will call it, for me to be from this country is something that I will learn more about. I remember when I went to an Army All-American game, that's when I really seen the troops and it was a bunch of them. And then I don't know who it was, but somebody, one person got all their attention at once. 3,000 people got their attention at once. I'm just like, damn, how does one person get all these people's attention? I mean, it's just very a team that's well oiled, that's well focused on their goal and their mission. And I just want to learn more about it. So me being here, it's like, man, I'm going to ask a lot of questions. I'm going to ask a lot of questions. Because I come from a background that team is important. One man's mistake will cost a group of people stuff. So me being around them, I'm like, man, what makes this so well oiled? Maybe I could come back to my team and tell them, this is what we need to do, because in the Air Force, they do this, and look how things play out for them. So I'm interested. Yeah. It's great to have you here. So we, you know, yes, we're in the Air Force, we're also in our special operations command. So we work with our Army, our Green Berets, our Army Rangers, we work with our Navy, our Navy SEALs. So we work with those elite teams. So when we show up at a time and place of our choosing, we can get the mission. And often it's to return American citizens from another country. One recent example is the call came in, and we launched aircraft with our people. So we had to have the maintainers to generate the aircraft, we had to put the aircrew on the aircraft and the equipment and go over to Sudan to bring Americans out of harm's way. Another thing we would say makes us prepared for those kinds of missions is reps and sets, much like you. So we practice, not till we get it right, you practice until you can't get it wrong. And that's something that probably rings true to you. We talk about being mentally, spiritually, and physically fit to fight. So on the mental piece, we can be our own worst enemies. 100%. How do you combat that? What do you do, what advice can you offer our team on staying mentally focused when you've got distractions, whether it's family distractions, friends distractions, maybe it's workplace. Maybe it's locker room distractions or things that are going on inside your organization. How do you get focused? Well, I think it goes to one word and I think this one word is actually underrated, but it's the will. What are you willing to do? For football, I play running back. I'm kind of bigger for running back, I am, but I'm always going to go against somebody who's bigger than me, stronger than me, faster than me. Anyway, a D-Lime and he's 6'5", to 320 pounds and he has to hit me, he's going to tackle me. In a small box where I can't really run away from him because I have to run through this hole no matter what for my team. So I mean, just the will, what are you willing to do for your teammates? What are you willing to do for your country? I'm willing to go to the extreme amounts just to do anything I can for my teammates because this is the ultimate team sport. I play the running back position, it's probably the most violent position. You don't, you last, that's the least. You don't have really the long career span that you want in other positions, but somebody has to do it.  All you got, you guys want to do the same for me? You know what I mean? Do you doubt your capability every now and then? 100%. You know what I mean? But then it goes back to my training. Me training in the off-season kind of fades away that doubt. I train a lot. I train extremes. Like you were saying, repetition. I train a lot. I train probably more normal, more than normal, I guess, probably do too much. But I want to be in a position where I feel comfortable, or you guys, and you guys keep doing it over and over. You guys don't feel, I want to be in a position where I feel so comfortable in a situation that other people don't feel comfortable in. You know, the game is on the line for me. I want to be that person say, look, give me the ball on third and whatever. And I'm going to get this first down like 100%. It goes back to my training. Me constantly doing extra reps, training cardio. Me even tapping into other sports like boxing and other things like that for extremes amount of cardio. You know, when I'm getting a ball probably like 30 times a game, it's a fourth quarter and you need to get 10 more carries and you're beat up, sore. You know what I mean? You got all type of bruises on your body, bleeding everywhere. You got to be willing to get 10 extra more carries and to end the game and finish it. And then you got to do that again next week, next week, 17 games. And you doubt yourself for sure. But you got to remember where you started, where you came from. I came for a situation where I didn't really have nothing in my corner really. I didn't have nobody in my corner. So who was going to be their biggest believer? Who's going to be that person? And it's just a man in the mirror really. It's you. Nobody's going to believe in your goals and your aspirations than you. I always tell myself that it takes the artist to paint the picture. You're the artist. I'm not going to know or see your vision until you paint it out for them. And then when you see it, they see it. It's like, wow. That's a great analogy. I think often we look for that. If we don't see it in the mirror, we look for somebody else to give us that. But at the end of the day, you got to look at yourself and you got to find it from within. That's what you're telling me. Yeah. Exactly. 100%. So there's no doubt that most players at your level are physical specimens. You get the training. You're going to be like, if you're not, it's going to show. It's going to be revealed. Do you find that your organization pours effort into the spiritual piece? Because we're trying to find a balance for, I don't know that there is such a thing as balance. However, we are trying to find resources and ways to rehab our folks because we know what we need to do physically. Yeah. I think that's a pretty well oiled machine in your business and in our business. But the mental piece, because what affects you one way might affect me a different, you know, some way different. Exactly. It may never affect you where it affects me really hard. So there's no cookie cutter recipe for bringing folks focused. What have you experienced? Can you share anything about that? About just me being focused? Yeah. Like the resilience of it. Well, not the physical aspect, but more. More the mindset.  Man, so. Or does it always go back to the physical piece? I'm just not sure. No, no, like there's more than just physical pieces. You know, I came from a school, Alabama, for instance, I came from Alabama. We always teach discipline, pride, effort, commitment, you know, I mean, we always teach that. And I think that in NFL and just being a professional football player, there's more to it than just physical traits. And I mean, if you don't have the right mindset, you will never be able to provide for the team or you'll never be able to, I guess, really just provide for just the city, the team, anything, even NFL in general. Always having a great mindset. That's where it always starts from. You can have all the talent in the world, but if you have a terrible mindset, it's the worst thing to have.  You'll always be. Right. I always train myself to put myself in a position where or anything bad happens to me or anything, you know, any type of road bumps I have, any place, times I gotta be resilient. How do I train myself to get over that? You know, the media and social media, they always play a factor. Do you look at it?  You know, even when I don't try to be on it, it's like, okay, I might have a marketing thing where I have to post something and I might come across something.  So how do I, you know, try to find ways to use that as fire? That's why I always tell myself, how do I, how do I prove the doubters wrong? You know, how do I, how do I put myself in a position where, you know, when somebody else is in the same position as me, I could tell them, like, look at it. All the people, you know, they're always going to have their own opinion, but the only opinion that matters is how you view yourself. If you feel like you need to work on something and go into a space, train more, go into a position where you can train a lot more to, I guess, to work on those things. You know, I'm always in a situation where I have to prove doubters wrong. Always is. No matter how I've been. So when I was young, all the way up to the NFL, I was always in a position where, you know, you have to prove the doubters wrong about, you know, what they say. That's fuel. It's always fuel. It's always fuel. It's always fuel for me. I've been, I guess I'm so comfortable now, and I'm so used to it where I actually like it now. You know what I mean? I'm so used to people saying I can't amount to nothing, but I thrive off of it. This is something that I really like now. It always starts with your mindset, though. This is what you're saying. Long story short. It's just, the mindset is so important. We, uh, we don't have nobody to really hold my hand in a way, but like I said, that was a blessing in disguise. Because now, rookies come in or even, um, guys who've been on other teams and come to this team and they tell me, like, what are some ways where I could elevate my game or, or stuff like that. And I've been in every situation they could think of as a young guy that could help them out. So it's a blessing in disguise. Yeah. It's a win. You'll grow the next. Yeah. I'm certain of it. Yeah. Um, we're getting ready to have a bunch of young, high school young men out on her overfield next weekend to place them seven on seven football, uh, that are, uh, look to you as a role model, right? They want to be at your level one day. Some of them absolutely may make it on that, um, onto that stage. Some of them may not, uh, whether it's for injuries, uh, and, or for other reasons, um, go back in time to 16 or 17 year old Nanji. What would you tell those kids that are facing adversity, uh, that are out of a fork in the road, uh, to either keep, to, to continue? Yeah. What advice would you give them? So me at 16 or 17, right?  I was in the environment where the people I looked at, they were not doing good at all. Um, and I love looking at, listen to motivational speakers, love listening to motivational speakers and You sure go to. Les Brown. Okay. So he told, so he told me, but I'll read and I'll always look at his videos every time cause I work on my mentality and he think, one thing that stood out for me the most when he said, um, he said, do not go where the path may lead, but go where there's no path and leave a trail. So I'm like, man, like that stood out for me ever since I was young because I would see other people following the direction that's not really where I want to go and I'm trying to, you know, kind of a young age, you're kind of saying like, is it okay for me to walk my own path? You know what I mean? So, um, that's hard. That's hard. It's extremely hard. Extremely hard. Especially at that. Yeah. Extremely. Especially at a young age. You know what I mean? I don't really have like a role model or something. So, um, for me to walk my own path, you know, follow, make my own trail, it was extremely hard because you got to face adversity. You got to face everybody telling you what you can't do and what you can't amount to. Um, man, and, you know, for me to go through that journey and for me to be where I'm at today, man, I will tell people like, you know, do not go over the path and leave, but go over the path and leave it. Leave your own trail. Leave, leave your own, make your own story.  You know what I mean? Um, and when you do achieve what you do, go back to that same place. That's what I do.  It's okay to stand out. You know what I mean? Those are who will make the diamonds, you know. So, that's what I'll say. That's great advice because the challenge in high school at that age when you're trying to figure out what you want to do from life and the social pressures never changes. It doesn't matter what decade we're in. That's a real thing. So, I think that'll resonate with the young kids. Yeah. Oh, I see. You knew that. Pretty good. Yeah. E.T. Spire. E.T. Spire. I think it doesn't matter what you look like, how old you are, you're always looking for some kind of inspiration. Yeah. And it may be inspiration for myself because I doubt my ability to lead all these young men and women. Maybe it's an angle to connect with one of our young airmen that has come in because I'd like to think I'm relevant with 16, 17, 18, but I'm not. Yeah. Let's be real. So, I'm always looking to improve myself. It doesn't stop. Everybody's got a story. We can look in a room full of five people or 5,000 people and everyone has a journey. You have a story. I have a story. And, you know, I'll tell you that to see you use the platform, the gifts that God has given you for good to pay it back. I'm a believer that you grow the next. You use your success, but more importantly, your failures to grow the next. And to go back and remind folks like, hey, I was there. I struggled there. And to keep pushing forward. I have the honor of being the first special operations wing commander. There's a lot of people relying on me to guide the ship and move it the right direction as well as our command chief. When we look at using platform for good, one of our goals here at Holberfield is to bring the community onto the installation so they can see the men and women in uniform doing great work. You're doing the same thing and paying it forward by going back to where you came from, but looking at the youth to inspire them for the next. What's it? Is there a piece of advice or is there something you'd like to offer to the folks that might be in a position that they can do good? Yeah. Maybe aren't. Yeah. So this platform I have, like what you say, you work really hard to get there. Now that I'm in a position where I could impact other communities, I use that to my full advantage. So I was homeless for a good amount of my life. So now that I'm here at this stage, I partnered with the governor of California Gavin Newsom, one of my good friends. And homelessness is so huge out there. So now I'm standing up on a podium with him talking about how ways or anything we can do to change the situation of homelessness out there. That was something I always wanted to work on and that's something I always wanted to do and I'm still doing to this day with my nonprofit and stuff. So for me it's to be in this position where I can shed light on things that I feel like needs to get shed light on more on is big. So obviously homelessness, I was talking about just about the use of our flag football in there. That's huge, especially for women too, getting to flag football and really just expanding our sport, making it be more worldwide. Because right now it's kind of an American sport, but the more we can expand it, I want to be the kind of that person to do that. There's a lot of other positions where I talk to also in just the running back football world, but that's not important. No, I think every person you touch, right? So it's great to have you here because next time you go out on your platform and say, hey, those military folks are not so bad. We do offer an opportunity and a team just like the team you're on, that maybe that path leads them our way. Exactly, yeah. So like for being here, you know, looking at outside world, we think it's a whole different world here. Like I said, I think you guys have any personality that you guys would be in, you know what I mean? Just hearing the stuff. It's all for the camera. Yeah, I mean, you're playing the games with Call of Duty and nothing even laughs. I mean, Shepherd and Ghost in the game, they're all, I mean, you guys play Call of Duty, I'm pretty sure. But you know, it's all very strict, you know what I mean? But just to be here, crack jokes, you know what I mean? Laugh and have a good time. It's kind of, you get a different perception from the outside world. So just to see that when you get here, it's not like that at all. You spend a lot of time with each other. You guys know each other. You guys know exactly what's what. When is the time to turn it on?  I was asking Travis a lot of questions, too. I'm thinking y'all don't even go out or nothing or eat out or you can't even leave the base. Yeah, I'm thinking y'all eating rations and stuff. Yeah, I mean, y'all, it's just a different world and a different perspective when you are really here. Looking on the outside end is different from the outside. We, I would offer that if you look at the word get and the word have, so there's a lot of things that as being in the military we have to do.  I get to go get after the enemy. I get to lead men and women in uniform and I'm just representative of an incredible team that also wears a uniform. You get to put on your uniform and represent who you are and your background and your family and your country essentially and the Steelers right as you get onto that field. So there are a lot of habs and when I find myself kicking rocks and feeling like I have to I'm like I get to. I get to be a part of that. It's a different perspective. The way you say like that actually makes a lot more sense. I get to wear my uniform. Yeah, exactly. They have to, but not everybody gets to. Yeah.


Hi, welcome to this video showing you how to get private video and audio chat integrated in NexCloud. So we will be installing Spritme on a server. Spritme offers WebRTC audio and video chat. That's fully end-to-end encrypted, completely private and secure. So Spritme is a Go server app. We have to compile it as there are currently no packages or Docker images yet. They will come in due time. It will make it easier to get all of this working. Now we will go through three steps. We will install the Spritme server application. We will then install the Spritme NexCloud app. And then we'll go to configuring the server and the apps. So that Spritme and NexCloud can talk to each other. I've opened three terminals on my server. One for the Apache configuration, one for building and configuring the Spritme server and one for getting and configuring the Spritme app. So the first step is to install Spritme. As I said, there's no Docker yet and there's no packages yet. So we're going to build it. It's relatively simple because Spritme is written in Go. So we're going to start with installing Go. This is already done, actually, but I'll still show you. And Go is already installed. Now I'll show this on OpenSUSE. If you are a user of Ubuntu, for example, let's apt-get install Go and so on with other distros. It's slightly different. Now we're going to go to the folder where our web server is installed. You see here NexCloud, which is my NexCloud server. Then we're going to download Spritme directly master from GitHub. Then we will extract the zip file.  Now we're going to go in that folder and we're going to build the configuration and make files. Then we can run the configure step, which will detect all the dependencies and prepare building Spritme.  So Sprit has finished building. We're now done. We have Spritme installed. Step two, installing the NexCloud app. So we will go to the folder where NexCloud is installed on my system and we will then download again directly from GitHub from master, the zip file of the application, extract it. Now this is put in a NexCloud Spritme master folder, which we will then rename to Spritme. That's it. The app is now installed. Now the big amount of work, configuring the server and the apps. So first we will configure Apache to make Spritme accessible. This will basically allow NexCloud to talk to Spritme. So for this we have to configure Apache. Now, so we go to the Apache folder. So on OpenSuser, this is where you can find V host files. There is, for example, NexCloud.conf, which we're going to edit. Now we have to put this text in the right place. The right place is just above here, virtual host. So, done. Now we'll restart Apache. Okay, next step, the Spritme configuration. So these are a lot of steps. They're all quite simple, but it's important that you don't miss anything. Now we're going to begin by going to the right folder. Now here we are already in that folder, so that won't change a thing. And then we copy over the default server configuration to the server configuration, we'll modify. And then we go and edit it. So here we need to make changes in tree sections, the HTTP section, which is right here, where we need to enable base path. So we look here and we see there's base path. So we remove the semicolon and then edit this too. Now you can do this in different ways. But our manual or our... Now you can do this in different ways, but I strongly suggest to use it, Spritme as in a path on your server. All right, done. Then we go to the app section, and we look for authorized room join. I set it to true. Then we enable extra, and set it to the absolute path of Spritme slash extra. So this is the folder of the app, that you installed. You put the app here. There is Spritme, and that's where this needs to point to, because in Spritme has a folder named extra. Let me show you. Here's extra. So that's what we need to point to this folder. We'll remove this and paste this folder. Then we enable plugin, and we set it to extra static oncloud.js. So we've done this one. Now we need to go to the users section. Here we go. Set enabled to true, and then we set the mode to shared secret. So this is basically how you authenticate users. It's the default, so that's not too difficult. Now of course then we actually need such a shared secret. So there is a shared secret here. Let me see. Here we go. Now it says do not keep, so we will not keep it. We will generate this using this command. Now for that I will quickly open another terminal, and this command just gives you random numbers, which is what we need. So then we will just enter the random numbers here, and there we go. You should keep this because we will need it later on again to connect the application. This is how the how spritme server talks to the spritme nextcloud app. Now we've made all these changes, so we save and close the file. Alright, this was the spritme server app. Now the client app. Now we have to configure the nextcloud app by going into the config, and there we copy over the default configuration into our config file, and go and edit it. Here we need to make a number of settings. First there's a spritwebRTC based path. This needs to be webRTC, and it already is, so that's easy. Then we need a shared secret. Remember the shared secret we had? We need to copy our shared secret there again. So this one needs to go here. It needs to go within these. Now you can also allow temporary users, so those are basically people who have not registered. Like for example, you want to invite a friend who doesn't have a user account on your nextcloud, you still want to invite him or her for a call. Then you can simply enable this, and then you send them a link, and they will be able to join. So let's set this to true. If you do that, you also need to generate another key. Which is used for authentication, so that's simple, you just generate another key and then insert it here. Alright, so the shared secret has been set, and we've enabled the temporary password login. So now we save and close. Now we need to go into the extra static config folder. So we need to go in extra, because here is a file we need to copy over and configure again. Well, actually the configuration is pretty simple, we used slashwebRTC as domain. So as you can read in the file, if you use that, then the host is automatically determined, it's going to be your current host. So this actually doesn't have to be configured the way we've done it, we just need to put the file there. Alright, now is the app configured. So, we've configured Apache here and started it. Let's start the spritme server running, and the spritme app, well that will have to be enabled, of course, in nextcloud. So we will log into nextcloud, go to the app, go to the non-enabled apps, and we look for the app, there it is, enable. That was easy enough. We go back to here, and then in our drop-down is spritme. So, I just created a test room, and now we'll make a temporary password for arthur2 in binary, of course. So an expiration date, well, let's say for the 14th, but then you really want to create a temporary password, which is valid for more than one day. Well, yes, let's do that. Alright, now we have a URL, we can send it to arthur, and of course also a password, you see there, very long, now we need to wait for him to join. There he is. How nice.  Share devices, and there we go. Good morning, arthur. It's working. Wonderful. Now, this is a test. Thank you very much. Bye-bye again. So that was it. And join spritme, let us know how it works out for you on the forums, and thank you for watching.


Oh, oh my god. Oh my god. Oh my god. Oh my god. Oh my god grab grab grab grab that's like a freaking Yo, what's pop people walking back to another episode of kicking the bass TV if you guys are new to the channel hit that Subscribe button hit the notification, but also the like button if you guys have been enjoying the content behind me I got the boys the old bass fishing legends and they're with us today. We got Fletcher the fisherman We got my boy Fisher yin and we got my man one rod if you guys want to check out their channels The links would be in the description box down below We're actually hopping on the Twin Trollers today on the big lagoon out here at Fletcher's place We're gonna be trying to catch some really big bass. We were pulling up Oh, they have they have and we actually drove by and I saw two bass on bed already So that is exciting one round is gonna be on my boat We got Ryan and Fletcher gonna be on their boat and then throughout the day We might end up switching up and getting Ryan on the boat that I'm on and we're just gonna try to catch some big Bass today. That's the main goal, but we're gonna go ahead and hop on the boat See what we can do. Let's get it. So what's the key bait today, brother? slow baits fast baits Top order baits.  We're about to pull that one out again Is that the plan? That's the plan for me. All right. What about you Fletcher? I'm thinking red is the name of the game today. The fish have been keying in on these crawls There's a lot of crawfish in the area if you like walk around these banks We're gonna see like little mounds all over the place. Those are actually crawfish mounds I was looking to show you all one, but I don't see one right here But there's a ton of crawfish in here. So red baits have been killer Also, the water that we're gonna kind of work towards is really dirty. So black and blue Some darker colors, maybe some chartreuse even pearl light could do well But basically a little pitching a flip in trying to get up shallow these fish are pushing up big time So we're gonna have to see what they're doing. You got Fisher Yen in his natural habitat Isn't it a wild scene? I Ruined I ruined your clip didn't I? Just a little behind the scenes. Yeah So what's what's the key bait today, dude? Oh? It might Might as well be his crankbait It's a very interesting crankbait. I mean it was catching them. That's the weird thing It was slaying them that red tip on there matches that crawl pattern out here perfectly They're all bad. So, you know I was waiting on it. I was like, I'm just gonna steal is that in my bag, but it's not the biggest It'll work if you get it head hey, and I can catch it makes it more interesting if we got to grab them with our hands So if I catch a pee pee, I don't want to make it interesting Hey, I'll jump in after my promise. Okay bet. I'm wanting you accountable to that if I get a pee pee I will make sure you land it. I promise I promise counting on you bro. Listen, we're gonna get it. Are you ready? Are you ready? Let's get it All right, y'all we're about to get this started I'm starting off with a little texas rig a little speed worm on there It's actually a darker color And this water is fairly clear. I'd usually use more of a natural, but that's just what I got So that's what we're gonna be rocking with and before we put the boats in I actually saw some bed fish along this bank So we're gonna kind of go down this bank and see if we can spot any and see if we can start off the video with a fish right away That would just be exciting There you go What was it on? Hey I got one That's a good one. That's a good one, dude I don't know. Oh, yeah, that's a pretty good one. We don't need the net, but it's a pretty good one I thought you'd start off the session right here I can't tell if he's three. He might be like a high two pound. Yeah Old texas rig two It is a two pounder, okay Nice No, it's a different one. That's that's even better, right? Anything about that Mike? I think that's a pretty dang good way to start. Yeah Mike is still rigging up I happened to snag one really quick.  So these fish are just biting You know we've this last month was some tough fishing Let me tell you just between the cold fronts blowing in It was getting cold for three days and it was warming up for three days and it was getting cold There was no consistent weather. We finally had some consistent Warm weather this week and these fish are ready to munch and they're pushing up shallow That one was big right? Yeah, that that was a five that had to have been a No, I'm kind of fancasting around There's a lot of beds on this bank, but it's hard to see You have that big layer, but you see that one bed. See there's two fish on that one right now Can you see him? I don't I don't know if it's a fish, but Obviously these fish are pushed up shallots out, baby They're biting good too. I got another one. Oh my gosh Yeah Dude, that's bass. Yeah, I'm gonna catch on this cast Right here I mean they're eating so good, dude. We're about us. We're about to slam. Yeah, I got them. Oh my god I think he might be on look I think he might be on bed throw up there. You can catch him Bro, they're they're eating it so good too. Like they're just hammering it. He's not big, but Yeah, we're just gonna get a few of these in the boat get get warmed up Try to find this big bass Yeah, I mean, how can we not fish for these if they're buying that good, you know I mean it's just Cool to see that's a better one He I didn't even feel him eat it, dude He was just walking with it hit you on the bank. Yeah. Yeah, he was up shallow It's a little better He's not a big one, but he's he's a nice fish So you have a natural color you gotta I got natural color. I don't know. They kind of like this color It's not a bad fish. I mean, that's that's a two pound Take those all day.  All right, we're about to get I got a little head start on you I went from crappy fishing for weeks to looking at fish on beds Oh, yeah, yeah it was I actually the the stick I didn't it was small like two pounds So I thought that that was a fish, but when I hit it, I saw one Yeah, he was right under that All right, we'll fish down this just a little bit and then we're gonna cut over Try that out. It's really hard to back left Oh, oh my gosh. That was a good one, bro That I wasn't paying attention I skipped up in that tree.  Gosh That was a bite. I wasn't expecting that Maybe there would be another one. I don't want to feel heavy.  You see that bed? Yeah, I see that bed All right, y'all we're gonna get off that Texas rig real quick I'm gonna chuck That's chatter donkey if you guys want to check out any of the striking baits I have my link in discount code down below and if you guys want to check out the kicking combos They're only available on my website pick in their bass.com right hand bait casters left hand and also spinning combos On the website We're gonna throw this thing around for a second this little firecrawl Color and see if we can get some fish some more active ones Yeah, oh, we followed you. Oh, we got it. You got it. Dude, that was sick That guy came out of the bed followed it up to destroy that That was cool. All right, you want to make it cooler? You see in between those trees. That's where that boil was. I wasn't even that's why I was burning it in Yeah, that opening. Yes. Yes You're gonna double up with me That's the smallest one I thought I had a bite that was I don't think it was Oh, no, it was a bite. Yeah, you kind of I don't know. I'll put you a little sink at all. That's the smallest fish guys on the chatter donk, which is interesting He usually catches the big one Yeah, I saw that Right up there. Oh my god. Oh my god.  That's a eight plus Oh my god grab them grab them grab them. That's like a freaking keep the pressure. Just all right get them get them get them Let's get it.   Look at that. Look how scratched up she is. That's gotta be a seven. Yeah, I think seven Do you want to weigh it? Yeah, we'll wait Yo You know what's crazy Look at that right there to your right. You see that? I bet you she was on that bed right there, dude I bet you choose her right there.  What the fudge? Absolutely crazy. Hey, we about to get you on one two I'm on two.  I'm on two.  A monster.  No, I don't.  You don't scare me. I literally just had my bait sitting there Wow Look at that.  Look at that Tom literally All right, you tell me man. Let me tell you. All right, let go. You let go my friend Six seven Oh, dude, there's a seven range, but it's moving has not just look at it. Look at it. Look at it dancing Calm down, baby. Calm down.  Give me seven. Dude Six pounds 14 ounces. You had it though two ounces away from seven. Yeah You didn't picture anything. Yeah, dude. I will get a picture with this one All right, y'all a six 14 on the scale. That's a freaking tank now. We got to get Mike on one Dude, we haven't been fishing long, bro I know we have not been fishing long and he actually had one on his rod Oh, I still have it on. I'm just letting you handle it. You still have it on. I didn't even know Look at that.  Give me some. All right. We got to get you one over seven. You got to be at the seven I mean, I've got to be over eight for my PB. Hey, it can be done. We've only been fishing like 30 minutes Yeah, we got to make it happen. Let's do it. Let's go, baby. Y'all I do not know what to say on that the dang thunder cricket bus right king and the firecrawl color I'm not letting us skip all this bank.  Let's do it. Mike actually caught a small They're in that hole All right, dude, I'm happy. I just want you to catch one now.  How long we've been out here 35 minutes? Hey, there they are Look at them stealing our bank. Mike. What's going on here? I'm not I'm not playing.  I'm not finally She ate it the same way. Look Wow Dude, she was on that bed and she ate it exactly like a big one Have you ever had a big one eat a chatter bait where they just dump it one hard time? They're running with it. I didn't have any pressure. She knocked slack. I mean, yeah You guys we got this firecrawl and we got this menace on here That is what just caught that tank I'm gonna see if we can get Mike on one.  I want to see you catch a PB That's the goal, baby. You caught a PB yesterday with me. Uh, there's literally blue-gold bites. The light is tapped. I have the smallest tap I probably it's gotta be that's a bass dude.  I'll take him into the bass. Oh, that's not a pound. It's two pounder. That's a two pounder. Yeah That's not the goal today though guys How you guys doing I caught a freaking monster dude 14 Mike The 14 was on the scale bro. He caught a he caught a seven and I caught a 14, bro Yeah I'm kidding.   That's a big That's a big I was trying to increase your chances and hopefully add about six pounds on them. Look you got one too Nuts This is the bank. Yeah, that's a good one. That's a four pounder Is that close to four? Yeah, she's right at four right at four But we're gonna go head up this lake a little bit and uh, see if we can find some more of what we're looking for You know, I saw these brim beds on the side scan And that's what made me come over to this bank and literally right where those brim beds were right over here That's right where she did But that was crazy We just need to need to keep on going and see if we can get a couple more big ones and more importantly get this guy On his PB today, that would be sweet Get him brother Why he spit it didn't he? I mean, it was it's such a small bite like I thought it was a small fish You got him? You got him?  What does he think and do? I was thinking What was he thinking? Well guys, that's my third fish on the Thunder Cricket Not as big as my last one My last one could probably eat him He ate it off the freaking The dangle that was cool Yeah, my line was hanging over that branch I watched him eat it. That's pretty sweet Pretty dang sweet I don't mind that quick release That's a big one Isn't that big?   I couldn't move him and then What if he odds and bites again? Probably not high Nah, yeah, he ain't biting Oh Yeah, that was a good one. If he wasn't four, he was a high three pounder mid to three I imagine if you threw that worm in there and just caught him that would have been cool I'm just hung on the tree Alright, see if you can catch him You want me to go for it? Yeah, just send it dude, just send it I think he'll eat it. He's all watching it You're good, you're good I'm on the ground He might, he might To be fair man, I can't see anything I'm just like, I'm just casting dude I didn't see what was going on. I just heard that You got hung and he came up and tried it He got some stuff for you I've caught some fish Fletcher, but I cannot cast today I don't know what What is happening? But yeah, that's where I caught this My biggest one on a frog was here Under this fridge I was actually fishing from the bank right there I wasn't even on the boat Yeah Woo, that big? That big is an echo Another squeaky McGee They are still I just picked up the speed worm They got one too Hey Ryan I'm a little worse Get up bright and early Dude, I got a dang fish What in the world Just happened to me Bro, the whole time I thought that my blade was messed up And it was actually just running at me Yeah What in the world Uh-oh Better one? No Yeah, he ain't big though They're all over You good? That's a pretty good one I don't know He's


Welcome back to Scores Cards and it's Jacko and Lani and today we're using these bars because we were looking at dips. Dips are great for building up strength particularly in the front of your shoulder and your triceps and so we're going to show you how to get the set position correct to start you off with and then look at some strength progressions you can build through safely and effectively as you build up that strength. Yes we're going to look at the positioning of your shoulders and your elbows through the movement of the dip. It's really important that you look at that technique because if we don't get the technique right then things aren't going to be nice. This set position and the line is going to show us is all about creating tension through the shoulder. So in between the parallel bars what we're not trying to do is we're not going to be slumped in this position where the shoulder is up by the ear but that's not going to be good enough. We need to get active feel up position, we're going to actively push down what we call this active pushing position. So that we're not just pushing down but also getting a bit of retraction so pulling the shoulder base together at the back. That then creates a nice stable position for the shoulder so when we drop down to that dip we're getting that good technique the line is talking about with the shoulder and the elbow pointing backwards. So build up some strength and being able to hold that position, keep that separation from the shoulder and the ear and build up some time and attention there. 5, 10, 20, up to 30 seconds if you can to get yourself set up for the beginning. And also when I'm lowering down I'm still engaging and pushing against these bars as I'm going down. Yes so just because you're lowering yourself you're not slumping letting that tension go from your shoulder otherwise you're going to lose that position and when you lose that position you're going to lose the strength. The first strength exercise then we're going to give you is this angled push up position where the hands are higher up off the floor but it's going to give us a chance to look at the good pushing mechanics we need in this dip. So line is going to get those shoulders set in that correct position to start with where she's getting a little bit of a pinch between her shoulder base at the back but actually lowers down now we're keeping that retraction of shoulders, keeping that separation there but we've also now importantly got the elbows pointing backwards. What we don't want to do in terms of your body line is we drop into the bottom if you're finding that you're struggling strengthwise from your shoulders and your triceps this bum will kick backwards and then you'll just actually push your bum back rather than actually driving yourself up so what we want to make sure we're doing as we're dropping down ribcage is locked down, abs are tight, bum's tight so as she drives back keeping those elbows tight to the body the whole body moves as one away from the bars. Now we're going to focus on doing the full movement of the dip. So lowering all the way down and then coming back up. I've chosen a slightly thicker band to give me a little bit more assistance. So saying again, on top. Yeah bangers on top, hands on top, dead, dead simple. Don't start tying in knots and doing all sorts of funky things as they just put the hands on top. Technically it's all the same, getting yourself a slightly thicker band is just going to give you a little bit more help on the way when you drive back up so we've still got that control on the way down creating that set position shoulder, not driving up by ear, elbows pointing nicely backwards, loading up the triceps and then driving back up. Lani we're then going to try and put together sort of three to five reps of these if they're working on our sort of maximum strength or applied strength part of our framework and what you're going to then do is start to work down as you get stronger week by week, use a thinner and thinner and thinner band and so you're not having to do any whatsoever. Beautiful. So there we have it, there are a few tips on how you can build up the strength to doing your first dip unassisted and it's all about focusing on that technique. Yeah and these are a great one to get mastered and get in your locker because the basic strength that you can develop and the technique for all of your pushing based movements are grounded in having good quality strength dips for those, strong shoulders, strong triceps. So if you haven't subscribed yet you need to get doing that that's up by Lani's head there. If you haven't got our free beginner's guide it's got loads of tutorials in there to help you get started on your class X journey down there and for one of our other tutorials that you might have missed that's up there. So until next time. Class dismissed.