So, thank you for making it on the last day of TIBCON, Friday afternoon, post lunch session. So, really appreciate you all coming in. This is the maintainer track session for Litmus Chaos, Chaos Engineering project. It's an incubation project in CNCF. So, we probably get started with the introductions. So, I'm Kartik. I'm one of the maintainers of the Litmus Chaos project. Sure. I want to talk to you about that. I am Kartik, one of the maintainers of the Litmus Chaos project. I work as a principal of very engineer at Harness. And I have Uma here. Hi, everyone. I'm Uma Mukhera. I am the head of Chaos Engineering at Harness. But Kartik and I started Litmus. We co-created it back in 2018. We've been maintaining this project ever since. So, it is an incubating project at CNCF for the last one year. Nice to be here. Nice to meet you all. Okay. So, this is what we have on the agenda. We'll do a quick introduction to Litmus Chaos project. I'm sure a lot of you have heard about Chaos Engineering already, so we'll not spend too much time talking about what it is. We'll directly get into the project specifics. And we'll talk about one specific feature. We'll probably stress upon it for a few minutes. That's about how you can use a single Chaos control plane for doing Chaos against varied infrastructure targets, across your different cloud environments. And we'll talk about what we got done since the last KubeCon. So, I think the project cycles nowadays are measured in KubeCons. So, we'll talk about what we did from the Europe KubeCon time. And then Uma will speak about the 3.0 beta for the Litmus project and also talk about the community a little bit. So, this is just a quick refresher, just to set the context before we start off. So, Chaos Engineering is essentially injecting controlled failures into your environment. And the idea is to introduce these faults to find out weaknesses. If there is something that's unknown, something that you've probably not accounted for, you'll find those things out using Chaos Engineering. So, there's a lot of material on the Internet around what it is, especially used for distributed systems. As far as Litmus Chaos goes, it's a project that started around 2018-19 time. We are an incubation project. The Litmus tool or framework is Kubernetes native. It's just a Kubernetes application. You can install it via Helm command. You can do a Helm install. And you can just go do whatever configuration you need in the values. So, you can do the installation of Litmus framework as a limited scope one, just for yourself. Or you can do it at a larger scale for your organization. There is multiple modes supported, namespaced mode and clustered mode. So, in the namespace mode, Litmus will allow you to orchestrate chaos in a specific namespace that might have been allotted to you as a developer. That's where you're experimenting. Or you could be the SRE and you'd like to set up one control plane for all the developers. You're trying to create some kind of a self-service environment. So, you can go install it in a cluster mode. Once you've got the control plane running, and I'll probably show a quick demo before we get into the release details and all that. Once you set up your control plane, that's where all the chaos management happens. You're basically connecting different target environments into that control plane. These target clusters could be residing anywhere across any cloud platform or it could be an internal data center. You could be connecting clusters or you could be connecting namespaces as well. So, you could have Litmus control plane in one cluster and you're connecting either another cluster or one namespace in another cluster. It depends upon how much autonomy you have on your infrastructure. And when you connect that, you will be basically running an agent in the cluster or namespace that you've connected. And that agent is what we call as the chaos delegate here. That carries out the business logic of your chaos experiment. And when we talk about the business logic of chaos experiment, we are talking here the fault injection, the pre and post fault checks that we would like to do as well as any other hypothesis validation that you might want done. You might be querying some metrics, you might be looking at the availability of some downstream services. So, any hypothesis that you have around how your application should behave that can be born into your experiment spec. So, the experiment in Litmus is essentially the fault plus the pre and post chaos checks plus whatever monitoring you'd like to do. And all this will result in a verdict of your experiment, a success or a failure which you can then use for decision making. So, in the Litmus control plane, you will find certain chaos artifact sources embedded. We call them the chaos hub. So chaos hub can be sort of spoken as an open marketplace of chaos experiments. That's where the community goes and pushes their experiments into. So, you can pull those experiments from their construct complex scenarios using them and go ahead. Once you've created something that you feel is worth sharing with others, you can push that scenario back into the chaos hub as well. So, what you see here are just a couple of chaos hubs on the demo environment that I have. So, once you've gone ahead and logged in into the control plane, once you've set it up, you've logged in, you've configured your chaos hubs, now you're ready to build your chaos scenario. As part of the scenario creation, you pick a fault and then you go ahead and say, what is it that I want measured during the fault execution, fault injection? We use something called probes. We've built something called probes to do that. You can actually see there are two probe types. There are many others. You can find them in the documentation. I've just cut a couple of screenshots here for illustration purposes. There's something called as HTTP probe where you can go and vary the status of your services. You could be testing the service status for the application that you're subjecting to chaos or you could be testing the status of some service that is dependent on the one that you're impacting. And then there's something called a Prometheus probe. You could run some promql queries and you could basically check what is the deviation in the metrics. Is that as per expectation or no, etc. So, these are probes. We use that for steady state hypothesis validation. And once you've constructed your scenario by picking the right faults, by setting the right probes, now you go ahead and run it and then you like to bring more users onto the control plane into your workspace. So, in the litmus control plane, each user is allocated a dedicated workspace, what we call as project. You go inside the project and you invite other members on the platform into that project to collaborate with you and you assign a certain role to them. Are they only going to be able to view the chaos scenarios that you've already run? Are they going to be able to run it? Are they able to construct new scenarios, etc. So, that's the next step that you would generally do. Then when you've got that system working, you've got your experiments working as desired. It is proven to be effective. Now you would like to run this again and again, right? You might want to run it as some kind of a background service. You can schedule a scenario for recording execution. There are some ground schedules that you can do. Or you could be invoking your chaos scenario as part of a CD pipeline. You want to go ahead and deploy your application and you want to check the sanity, so you go ahead and run the chaos scenario. Or you could be triggering the chaos scenario as part of a GitOps deployment. If you're not running the pipeline way, if you're using GitOps, then you have Flux or Argo CD or any of these tools to go and upgrade your application. And the application change can go ahead and trigger a chaos scenario run, right? So, that can be done. So, what you see here are some screenshots that explain how you can do it. There's a recording schedule. You have the Ritmus API which you can use and you can invoke the Ritmus API to run the chaos scenarios from your pipelines. Or you could be setting up the event tracker policies. This is a CRD where you can see in the conditions you're basically going and looking for certain checks on your deployments. What is the replica count that I have here? What is the image that I have here? Any changes to this? Your configuration is actually going to trigger a chaos scenario run. And finally, once you've got all these scenarios running and you're comfortable, now you would actually go and check what is the resilience trend, right? So, you're running these scenarios that's great, but are they succeeding? Are they not? What is the state of your application's resilience? So, Ritmus provides something called as a resilience score. So, this is a metric that essentially manages your chaos scenario and your application target, right? So, this application is this resilient to this scenario. This scenario can actually be an outreach that you saw in the past, so that's why you've actually created it. So, you're going and mapping that against your application and you're saying this is how resilient I am. And there's a specific way to calculate this resilience score. We'll probably talk about it on one side of the demo. You can actually go ahead and add a lot of probes to your faults. Each fault is going to return a probe success percentage. And each scenario is going to have multiple such faults, right? And each fault is associated with certain constraints, what we call as probes. So, each fault is associated with a weightage or a criticality. And that criticality, along with the probe success percentage, together decides your resilience score on a scale of 0 to 100. And using this metric, you can compare scenario runs. Maybe you ran the scenario on build X and then you ran it on build Y. You're comparing how the resilience varied.  You might be looking at how the resilience trends have been changing across environments. Or maybe there's a change that you made within the experiment spec. Your scenario spec, you have gone ahead and changed a tunable. You've said instead of 2,000 milliseconds of latency, I'm injecting 2,500. Now you want to see what happened across runs because of the change in the amount of latency, right? So, you can still go ahead and make a decision based on the resilience scores. So that's about most of the features. And I'll just introduce you to this concept of single control plane on hybrid infrastructure. I think you might have already got it, but I just want to stress upon it a little bit. So with Litmus, you have one control plane, which is comprising of a dashboard, a chaos center, a chaos server, and a MongoDB to support the state. And you could be connecting other Kubernetes clusters or namespaces, which are running anywhere. You could be running on on-prem KITS. You could be running on AWS. You could be running on Azure, VMware, what have you. As long as you have the network connectivity, you will be able to connect them and run chaos. So why is this powerful? One of the recent ways of deploying applications is to have it spread across different cloud providers or redundancy purposes. So you would like to have one homogeneous control plane from where you can actually target your infrastructure components residing in different platforms. So that's what is enabled by this model. You can actually see this in this illustration. We have the portal here, which is the chaos center, and then you have different clusters. You can see three clusters here. Each of them is connected to the same portal, and they could actually be residing on different environments. So you have one cluster, which is actually co-residing with my control plane, and then there could be others. For example, you see something called virtual machines, which could be either VMware or OpenStack, or it could be maybe bare-metal physical machines, and then you have your cloud environments, and you will have the agents of litmus sitting there, and that is going to carry out the execution of your chaos workflow, what we've been talking as chaos scenarios all this while, and then it emits some metrics and events which you can bring back to your control plane and make a decision on how your resilience looks. So that's what it is. The feature somebody is there here. This diagram is sort of having a lot of circles. You can see the chaos center at the center of it all. You can use that for user management and teaming. You can connect agents to it. Once you've connected an agent, you do some amount of asset discovery or find out what services run there, the eventual subjects of your chaos. Then you pull the faults that you would like to do against those microservices that you've discovered, and then you add in the hypothesis validation using probes. That's the observability part. Let's say you're working off a disconnected environment. You might want to change the images. You might have pulled the litmus images and pushed it to your own registry, so you can go ahead and use that, make that setting in the control plane and say all the images that I'm pulling to the execution should come from this registry. Then the chaos workflow actually runs. You could schedule that once or you could schedule that repeatedly, and then this loop, the circle just continues. You can see a few other circles here. We basically say that the experiments that are there support different runtimes, container, docker, CRIO. You have the GitOps way of doing things. You can enable a switch in the control plane and all the chaos scenarios that you build in the platform can get committed back into a Git repository so that you can share it with your teammates. That's pretty much the summary. Before I go to the release section, I'll show you a very quick demonstration. Pull up the chaos center. You can see this is the chaos center. I'm going to log in with default credentials. Admin and litmus is the default that you get once you've installed. I've gone into the admin project, as you can see here. Admin is going to be allocated a dedicated project. I happened to log in as admin. I have the admin project here, and you can see the chaos delegates section has one chaos delegate connected, one cluster connected. It's called self-agent, and I've run some scenarios before. I'm going to run a new one, and you can see the chaos hubs here. This is the chaos artifact source that I talked about, and you can see experiments of different categories. You can see a multitude of experiments which mostly solve your resilience needs. You can write new ones as well. Litmus allows for creating new experiments using an SDK. Let me schedule a chaos scenario. I'm trying to follow the sequence that I showed you in the circle in the previous slide. I go ahead and select the chaos delegate. I've selected the self-agent here. I've selected the hub that I'm going to use as my artifact source for this scenario creation. I'm just going to give it a name. I can go add a new fault. Let's do something that's very simple. Let's say I'm going to do a part kill, and I'm interested in subjecting specific application to part kill. Let's say I have a microservices application. You can see there is an online boutique here, simple microservices app. I've selected that namespace. I'm going to select deployment as the workload kind. I'm going to select one of the services, the carts. This is the asset that I was speaking about. We are going to target a deployment which is identified by this label and which resides in this particular namespace. I have the option of adding probes. I'll probably not do that in the interest of time. I can provide some tunables here. How long do I want the chaos run? At what intervals do I need the part kills to happen? What is the nature of the kill? That differs from experiment to experiment. There is some advanced configuration that you can do to define topology and additional filtering of workloads. With this, let me go ahead and provide some weightage. This is the part of the Resilience Code calculation I was talking about. Let's say I give all points because I've just selected one fault. I have the option of scheduling it repeatedly. I'll schedule it just once. This is the summary. I'll just go ahead and finish it. You can see the experiment execution can be tracked here. Typically, each experiment within a scenario, I've just got one fault or one experiment within this scenario. You can pull multiple ones. Each experiment is associated with a couple of steps. One is just pulling the template from the hub and installing it on your cluster. The next step is the actual invocation of the fault and hypothesis validation. Other business logic runs in the next step. While we are at this, I'd like to show you the Grafana dashboard that I'm using to monitor the boutique applications. It's a very simple dashboard that's got QPS and some latency being measured here. I've annotated this dashboard with a metric that's coming from the Ritmus framework. You can actually see when the fault is live.  Then you can see what has changed during such time. Let's wait for that to happen and meanwhile you can also do all that I did on the chaos center using the Ritmus API. You can use that to automate all these proceedings. You could invoke that in your CI CD pipelines or maybe you have your own test execution framework that you'd like to plug into. Once you have these runs executed I said you can compare it. You can actually see some runs here. I'm just doing a random selection but ideally you would be interested in selecting the workflows that matter to you and probably the ones that are running on different environments or different builds. I've just selected it and it shows you some upward trend in resilience. Maybe I've got better resilience across builds. That's improving here and this comparison is made on the basis of the resilience score. You could download some reports on how your experiment execution has gone. What are the probe results? What are the verdicts? What is the resilience score? All that information is available. You can actually go ahead and add members to your team like I said. I've got a couple of members apart from the admin here. I've got Uma who is editor and there's Karthik who's on this platform. You can create new users and once they are available on the platform, you can pull them into the team. That's a quick demonstration of this particular deletion is happening. The particle is happening. You can see what's happened here. As far as the front end and the carts go, the QPS knows dived, the error count increased. This is reflecting an inefficient deployment or something that's gone wrong with my application. In this case, I just have a single replica of carts which is why the failure is seen but the same could be caused due to an application failure, an application bug in your code as well. This was a quick demonstration of what I was talking about. I have not added any probes so you can see without additional constraints, the experiment succeeds but there are several runs that have happened prior. This one where you can see the failure has happened because of a probe failure. The experiment has failed because one of the probes has failed. You can see that in the QPS result here. That was a very quick demonstration of what you can do with litmus chaos. Let me go back to the presentation and talk about what we got done between previous Valencia you've gone to now. This is a project which has monthly releases. We have releases on the 15th of every month and there's a community sync up call that happens immediately after on the third Wednesday. Across the last few months we've had about 3-4 releases and this is what we managed to do in that time. We've added new fall types. There's a HTTP chaos experiment suite that we've added which allows you to simulate erroneous status codes with a response body etc. to see how your application behaves. You can inject latency. We also have support now added for newer versions of Kubernetes and OpenShift. We've upgraded our operators etc. to be able to do that. The support for many chaos experiments of the network category, HTTP chaos experiments, the DNS ones latency, packet drops etc. are now supported and environments which also have service mesh running there and we've got support for randomization of fault inputs. What we mean by this is let's say I provide a range of latency 0-2000 you could actually be injecting faults with latency anywhere between 0-2000 right? In different iterations of the experiment you'll have different value of fault getting injected and you can also do the same for intervals. You can do the same for any other tunable that is native to a fault. You can randomize the input. We've got the ability to do all the operations that I just showed you, most of the operations at least, that I showed you on the KR Center using a CLI tool called ECMACTL. You can list workflows. You can trigger new workflow runs you can delete them, basically do some crowd operations using the ECMACTL tool. We've added support for the run times container D and CRIO. We started out with Docker but obviously that's replaced mostly container D is the de-factor and you can use CRIO. We have first class support for these run times and we've also introduced improvements to our SDK which basically helps developers to bootstrap their chaos experiments and we've also got some newer category of experiments here as you can see we've got applications that we've got chaos that does faults on spring boot applications we've improved the scope of our probes. Some of what you saw in the spec, we had the Prometheus probe and the HTTP probe but there's a command probe which we've gone ahead and made it very flexible. Command probes help you to run any validation of your choice. It need not be an HTTP request it need not be a prompt QL query but you could be doing anything. You could be having your own CLI anything could be done and then we've made our APIs better, more user friendly so we've got some feedback that we got from the community so with that said I'll now hand it off to Umar to talk about what's coming next. I think I got the mic. Thank you, Karthik. There was a great run of what we got done in the last six months but just to go back we've been adding newer features for almost three years now so with a release coming out every month on the 15th I think we have done more than 30 releases without missing the 15th date. So what that did really is it's kind of feature complete to do the basic chaos experimentation so Litmus 1.0 was more about getting the chaos operator, all the CRD is done by making sure that you do the chaos experimentation in a cloud native way. Litmus Chaos 2.0 was getting the multi cluster support introducing the chaos center where multiple clusters and namespaces can connect to the chaos center and introduce the teaming. So that enabled enterprises to think in a practical way. So more teams can come and practice chaos engineering. So what's the status today is there are a bunch of users teams, enterprises using the open source Litmus and what does it mean by Litmus 3.0 so we are kick starting the effort of 3.0 this week it goes on maybe for six months to nine months to one year and we really want to focus on making Litmus more robust right and because you know whatever the bug fixes that the community reports that we find through our automated test will focus on making sure that even if it means that you know re-architecting few things here and there will focus primarily on making it rigid and we also want to make Litmus leaner so what that means is today to run chaos experiment it runs under Argo workflow so many people want to run Litmus experiments in pipelines right so maybe it is if you are running just one chaos experiment it may be having little bit more footprint than what you need because you have Argo workflow controller it can do a lot of things but just for one experiment it may be little bit more than what you want so we are going to start work on providing a native orchestration engine where you can run the exact chaos experiment without the Argo workflow so that is going to make Litmus leaner probably know on low footprint Kubernetes on edge and other places you can start running Litmus in a more easier way and the next focus for us also is how to take chaos engineering for developers so one thing that we have observed is we started originally for SRAs running chaos experiment in pre-prod just make it totally declarative through emails and also make sure that it's got all the API support, chaos controllers operators everything and then we realize that chaos has found its need in the pipelines so more and more community users are coming and using it in their CD pipelines so that's when this chaos workflow engine getting started more and more adoption now I think it's time to do even more left shifting where developers can come and think of introducing chaos experiments even before the code gets merged think of the scenarios as I'm writing a lot of cloud native code and it's before it goes to build eventually it goes to a pipeline and then finally gets pushed is it possible for me to run a chaos experiment on the build possible build code right what happens if you delay it is it goes to a pipeline and then gets deployed and then rollback has to be done so there's a little bit of a cost involved in that and the developers really avoid that right so it's actually great to see the adoption of chaos going back a little bit to the left right so we are going to focus on how to make things easier for developers what it really means is making it lean is one of them and maybe introduce one more CRD right to make a chaos experiment run so et cetera et cetera so it is in the end phase and we are actually calling out for discussions on how what's the feedback that you're going to give us in terms of this requirements et cetera right so we have created discussion thread on let us can you go to that discussion so if you go to the litmus repo there's a discussion thread created and what's the focus of the roadmap for the next one year and we are going to work through this monthly maintainer or contributor sessions a little bit openly right whoever is interested they can actually come and not only contribute the code but you can contribute your requirements and ideas hey you know this is what I'm thinking of for my chaos engineering use case so you know come on openly and then discuss and we'll see you know how to get that done right so that's that's one announcement that we as maintainers want to do that you know we are opening up the board for the next phase of litmus which is 3.0 right so and finally I want to conclude this session by showing how to get in touch with the community right so we've been fortunate to get contributions from various different people right over a period of last three to four years so we have 200 plus different contributors from various companies right so we would like that to increase more so we always encourage contributing new ideas new experiment types not necessarily that you have to develop but you know hey here is my use case and then you know somebody will pick it up right if you can then we certainly would like to add more as a core team right so the other contribution that we think can be accelerated is the list of experiment types into the chaos hub so chaos hub has grown from 30 plus so experiments last year to about 45 now or 40 plus experiments so now that we have a stable litmus platform it's time to you know focus contributions on the experiments right so the community has actually created a lot of new experiments because it's got a good SDK but we have not concentrated in requesting you know here is how you can upstream it maybe you know the project can maintain your new experiment so we're going to focus a little bit more on asking our community members that upstream your experiments back so that it can be managed better and more people can use it right and there's a contribution guide right that's available contribution guidelines or in accordance with there are still scenes of projects right we are especially looking on you know easier areas as well docs or if you want if you are doing some testing we have a nice e2e platform that test litmus itself for every release process it can to see more contributions and litmus agents can be made you know there are already some contributions there so there are many areas which the project can you know take contributions and to do all this you know we're always hanging out at the litmus channel on Kubernetes lag so please do join us and we also run a monthly community meetups virtual meetups where you know users come and talk about their use cases and also ask questions and also maintainers announce any new features that were introduced etc etc so because of this beta that we are announcing we also run one more meetup every month that is for contributors and maintainers right it's a meantime meet so now if you are looking at developing yourself into a more active cloud native you know contributor is an opportunity to directly work with the maintainers right so that's all I have and they know we obviously want to know if you like the project we want you to like the project so give us a start they'll always help you you know who's liking this project so that's all I have maybe it's time to take any questions beyond the session we'll be still around here if you want a demo in person we can still do that thank you


While we've reported that construction on the new Jeden Dillon Elementary School in Bemidji is complete, but parents and students are also wondering about the roundabout construction being done on Division Street by Bemidji High School. The Beltrami County Highway Department says the roundabouts are very close to being finished. The concrete and a gravel base will be put down this week. Then, paving will take two days and is scheduled to start next week. There will still be a few minor things that will need to be done when school starts, but it's really nothing that should affect the traffic flow. We were just discussing today that maybe the final lift of paving might not be done until later this fall. So things like striping might not get done until then, but there are other items, turf establishment, lights, signs, things like that. We're going to try to get as much done as we can, but some of that will still be underway. And so there could be times when there's still failures or still going on out on the site. The Beltrami County Highway Department says they will give more updates about any closures in that area towards the end of next week. If you enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland PBS.


Numbers 4, verse 5-6, in the New American Standard Bible, a porpoise skin is unclaimed. I'm surprised it's used to cover the Ark of the Covenant. After more research, the Hebrew, Takash, says fine leather. It's not animal specific. Why would Hebrew scholars choose this as an acceptable translation? Well, they would choose that because the meaning of porpoise skin is nothing more than a conjecture. Takash here, to try to make this succinct and some of these things don't really translate well to being verbal on a podcast, but I'll take a stab at this. This word, this Hebrew lemma, has, for many scholars, they've argued that it has an Akkadian background and ultimately therefore a Sumerian background. Now ESV renders it goat skin. Again, Dana mentioned animal skin. Some other scholars like Milgrom in his commentary opt for yellow-orange like a color as the meaning of Takash and both the color and the sort of neutral animal skin idea really comes from the assumed etymology, the assumed bringing in of this word from the outside, Akkadian and Sumerian, into the Hebrew lexicon. Here's how it goes. There is a term dushu, and that refers to a stone of a certain color. Again, you have to have a little bit of Semitic language background here. You say, what dushu doesn't sound like Takash? That's true, but you can have a word in one language that doesn't have all of the continental similarities in another language still speak of the same object. This today in modern languages, and it often works that way in the ancient world. Every Akkadian word, for instance, doesn't share the same consonants as every Hebrew word. Akkadian is Semitic, Hebrew is Semitic, but Akkadian is Eastern, Hebrew is Northwest Semitic. There's geography to it. There's different language groups and dialects and subgroups and all this sort of stuff. The reason why this seems like a good correlation is you have dushu, and that comes from Sumerian dushia. That is alignable to a Hurrian word, tuk siwe. So now you're getting into the Takash, sort of phonological neighborhood. So by virtue of Akkadian and Hurrian, this one would be like the Newsy dialect is Hurrian. You may have heard of the Newsy tablets when it comes to the patriarchs, because Hurrian and Akkadian sources align these two things, dushu and tuk siwe, okay? Because they align those terms to speak of the same thing. Scholars take that, they notice the correlation with the Hurrian dialect, and they say, okay, well, that sounds a lot like Takash, and let's go look and see what that meant in Akkadian. In Akkadian, it referred to a stone of a particular color. And so some scholars would argue that Takash refers to the particular color that resulted from dying leather, there you get your animal skin idea, dying leather in the culture. Now, you notice in all of that, we didn't say anything about dolphins or porpoises. I don't know of anybody who would really defend that idea, the whole porpoise skin, you know, that it probably, I hate to put it this way, but it probably comes from older English translations or traditions about the translation. However, to be fair, Levene, I've looked this up in Levene's Numbers Commentary, and he says that, quote, dolphin skins were used quite extensively in the ancient Near East and in certain cults. That's what he says. He doesn't ever say that this term means that, but he happens to discuss that at one point in his commentary. So we don't really know why porpoise skin or dolphin skin would be an acceptable translation here. Etymologically, again, and if you're doing the comparative Semitic vocabulary, it seems that a better option is either to translate it as the thing being dyed, i.e. the animal skin, or the color that results. And so that's where you're going to find most commentators land, again, because of the Cadian and Sumerian and the Hurrian linguistic evidence. So again, having said all that, I can't find any passage where this lemma, Takash, occurs in a description of something unclean. Takash doesn't occur in Leviticus at all, for example. So I don't really know why the unclean element is part of the conversation. Maybe if under the assumption that we're dealing with a porpoise skin and that relates to some other animal group, I'm not sure. I mean, I don't want to sit here and search through everything. That makes for a really boring podcast. But again, a quick search of the lemma, it doesn't occur in any passage that names unclean things. So I'm not really sure why, again, that's part of the question, but I thought I'd throw that out there. Maybe some people thought it was unclean because, again, Near Eastern cults use dolphin skins and then they just made that correlation. Okay, well, I could see how you would get there then. But the fact of the matter is, if you actually look up this lemma's usage in the Hebrew Bible, it doesn't occur in passages that list that. Maybe it has a homograph. I don't know at this point. But again, from what I do know, just fielding the question, that's how I would answer it.


Alrighty, so dragon from beginning to 108 Yeah, I love it. Okay, the only thing I would say This guy lower. I know it's not like you want to do a flap that you know propel them all the way out there but there's just something Repetitive in terms of how much he flaps in terms of like how far down he or she goes So I would go really and fold it Fold it low, right? So if you're going At the reversal all that stuff is cool. You're also staying in this pose for too long You go down boom reverse and then you're stuck one two three four five almost five frames In that pose and then watch out. You might have to widen kind of offset some of your structure there Conveniently work for the flaps. It's not so even as well But I would go lower Take those five frames, right? Take those out and add five more frames to the down Which should probably give you something closer to that only because you know as you see him Her so we don't want like adjustment one big one and then it's kind of the same Like I buy this Even though you could go here Technically you can also go higher here because he is low or she and I will tell us all I make sense and then go a bit lower here So it's kind of a bigger But it's not too bad like I can buy this the only thing I would say is that if you look at this pose Just look at that And now go So about here. It's the same So it feels like a 2d cut out that just kind of slides over So that combined with the kind of a timid approach here on the wings Just you can punch up the entrance so by that again I mean you can go maybe a bit higher on the wings and a bit lower and then Actually like this You know, it's a bit more tilted. So there's more What a dragon To hear To compensate Right, so you go from something like that That might just be a bit more interesting and in the you know, you could have something bigger on the head That's cool, right? But it feels like a one-axis thing. That's towards camera, which is a hard sell So you might have to make your arc a bit bigger To the side and then roar, you know, when he goes that on that You want that going backwards to be more sideways So we have more of a silhouette and visual change right now. It's just too camera seems to timid So you want to make it bigger? And that's cool If you do that big here with the big move, then you could probably leave this flap here So you have big entrance and then it's kind of an adjustments That's cool And it's going to help when you offset the wings, you know, when you have poses where it's a bit more like that You know stuff like this where it's just a bit more regular, especially because the dragon turns around This is cool. It's gonna be interesting with the legs as well You know, and especially if you go wider with a bit of a bigger turn You know, it's something where you could Help the silhouette not that it has to be that turns, but maybe more like that No, I imagine you just imagine It's something where you know, it's you have it's a horrible drawing You don't have this but you have that There's a bigger turn on the head And on the tail. So it got your You know shoot It's a bit wavier this feels a bit straight. You know me like this is kind of a A straight line Over there and then turns and stops so just punch it up a bit But it's definitely head in the right direction. It's getting better and better I'm just being a picky turd and It's basically if I would look at this at work and this was for a movie You know, whatever fantasy movie would be you want to really punch up those moments And that's what I would say, you know I understand that's the pain in the ass and some things It's a lot of work or a frame-by-frame or you don't have time to do it totally understand So you can absolutely pick and choose just let me know in the email what you did and what you don't want to hear Sometimes a feedback But this would be your work type of feedback Then those are you are 45 so basically once your hits That's a tricky one You're doing all the right things the problem is that right now it looks like he just slides sideways I Think the things that would help you, you know, maybe Go a bit higher. It's a bit more like that So that by the time you slide you we see a bigger difference in height You have it now, but if you push the beginning that could work. That's great That's great. I'm not sure if you can push it out further, but then all I would do is bring out that But then that way So if there's possibly a bit more of a negative space for the lower part of the face And then rotate that wrist out Basically what are you doing at the very end here?  So you have those thingies really breaking and that low part of the head breaking Otherwise you end up with I just trace this, you know This is just a big blob. I don't know where the head is. I can see this. This is cool And that's cool But I think if you lower the head and you break it and you take that arm over It gives us a better silhouette I think that my drawing helps Now the other thing that I would do for next time is arbitrarily add little Stone boulders things not that big like tiny things but irregular All the way and especially through here So we can see what's going on, you know, if those things still go away from us Showing that we're the camera is still moving backwards and it'll give us a better sense of what this guy is doing The other thing is he also stops too quickly What?  It's basically the same just like the dragon the body and head shape here It's basically the same looks like a 2d card. You want to give that as much visual Con contrast as possible Alrighty And I think what I'm seeing was also contributing to your Weird slide perspective change is you translate your camera to the side from here to here. I would not do that basically your canyon And your camera All you do is translate back if you ever need to reframe your rotate Just do a rotation But don't do any translates because if this was This will be either a car Or it will be tracks and someone will be pushing this you can't just have tracks laid out That's only do this a car might do a swerve But then the dynamics would be totally different of the camera So I will keep it Translating and just rotate to reframe here And if you need to reframe here, not the very end you cannot I can show you that little handheld thing for the camera Give this all of this bit more of a live action feel, but I would just do this at the end because it's going to look 20% better That's not just going to feel 20% better. It's going to look better But the feeling is going to be more realism Pound with a bit of a camera shake here a bit earlier So this is a bit late and a bit too high frequency too short so translate only just rotate in y and Uh, whatever the next So just sideways and up and down Don't do any z like you don't want your your horizon to suddenly be like this Uh and considering the animation and then I will help you at the very end with the camera as a bonus Alrighty, it's very cool. Thank you All right, there's an email you can sign up you can start whenever you want You can submit whatever you want you get 16 submissions either way a like and subscribe would be awesome. All right. Thank you


This is the judgment of this chapter in our history. South East Asia still wants a small, a great group of members, the families of those still missing in the Vietnam War. A good day in earth, good uncertainty, the tenderness they avoided, who can attend. The pay is some 700. Their feelings are a mixture of the answers of the tenderness of those missing in action. The highest members of Congress, the leaders of veterans groups, and the citizens of the entire nation. I will show them a new John 20th Rare in the room. Receiving the body, and again returning to the end, received of them this grave, it being sealed until the second coming of Christ, in the name of the Father and of the Son. Heavenly Father, we entrust our brother to you, merciful. You love him greatly in this life. Now that he has redeemed from all of its cares, give him happiness and peace forever. The old order has passed away, and so welcome now into paradise. Well, there will be no more sorrow, no more a weeping or pain, but only peace and joy, with Jesus, your Son, and the Holy Spirit, forever and ever amen. God, your days are without end. Your mercy is beyond counting. Help us always to remember that life is short, and the day of our death is known to you alone. May your Holy Spirit lead us to live in holiness and justice all of our days with strong faith, consoling hope, and perfect love for all. The man who believes in me will live even if he dies. And every living person who puts his faith in me will never suffer eternal death. May the angels lead you now into paradise. May the martyrs come to welcome you and take you to the holy city, the new and eternal Jerusalem. May the fires of angels welcome you, and where Lazarus is poured no longer, now may you have eternal rest. Amen. In the sure and certain hope of the resurrection of eternal life through our Lord Jesus Christ, we commend to Almighty God our brother, and we commit his body to the ground, earth to earth, ashes to ashes, dust to dust. The Lord bless him and keep him. The Lord make his faith to shine upon him and be gracious to him. The Lord look upon him with faith and give him peace. Amen. As we have honored him with loyalty and devotion, in this great land where the one idea of agreement is your presence with us, we can proclaim with the promise that if we go to the heavens, you are there. If we make our beds and the depths, you are there. If we rise on the low, on the far side of the sea, you there, your hand will guide us. May the day come soon when we can lay down our arms and furnish to give our attention to do justly, to love kindness, and to walk honestly in your sight. Amen.


Well, it's going on everyone Sam here with late in sports cards, and I'm ripping one box of 2021 tops chrome formula one racing sapphire edition for Landon G. So good luck Landon See we can get out of here for you, man So as I said earlier everything in this will be sleeved and top-loaded I will sleeve all the color and the big cards now Everything else I will hold aside and the sword-ish and shippers will sleeve them for you So just a heads up on that one and then Everything any big color anything really like huge will get mad of course All right, good luck. I think Landon's that he's looking for some Lewis Hamilton, so See we can pull you a lou ham. All right, we've got Christian Lungard Lewis Hamilton. There you go.  We have a gold again, man. Wow All right, we got Daniel Ricardo. That is not the portrait Carlos signs Max Verstappen and nice Mateo Nanini on the gold 22 out of 50 Her HWA race lab nice hit there Landon on the gold Anything gold out of this set sells super well It's a nice one there. We get like a red or something or a padcrasher Got mixed Schumacher Valtteri Botos, Nicholas Latifi and Sergio Perez Guter Steiner we've got Lewis Hamilton Nice on the sepia to a hundred Grand pre-winner. There you go Landon We'll mad this one for you. Congrats on that one, buddy We've got card number one Lewis Hamilton. Nice That's sweet David Rivio Dan tick tick tum Charles Leclerc. There you go card number 11 a Mazepin and Verstappen See another big color come out of this Yellow we've got grand piece Sergio Perez. We've got pure ghastly. Nice on the yellow That's 80 out of one one ninety nine. What's up, Mr. Boss? How you doing? 80 out of one ninety nine nice one there and we've got pure ghastly again and Yuki Here we go got Verstappen nice Nice one there Got Lewis Hamilton Fernando Alonzo and Ralph Bosching. Good to hear Another yellow we've got Valtteri Botos. We've got Lewis Hamilton again. Nice One sixty three out of one ninety nine two loo hams for you. Congrats Landon very cool on the grand pre-winner Heck yeah, sick card We've got Esteban O'Conn and Liam Lawson That'll do it for your break right there Landon congrats on the hits man. We'll get them right out to you Thanks as always


So you may have used one of my plugins which are hosted in this site So if you've seen that before but no didn't know that was me Now you know and that's the same name persistence also my Twitter handle, which is also not necessarily off obvious I've been talked to the breakout session yesterday about Qunit and test swarm Which I hope by the next jQuery conference where I've got like a full session about there's some really cool stuff going on there I also work on jQuery UI and the one line beta is finally out and so one line final is not far away but today what I want to talk about is something really else it's about single page applications and Instead of reading out this definition from Wikipedia. I just want to show some examples. This is kind of the Probably the best known example of a web application and then by whatever definition of single page application That's probably a price here like it's Gmail. It's a male client running on the web And you can fully control it with a keyboard if you enable the keyboard shortcuts It's pretty awesome that that's not necessarily something to aim for like this a lot of room between like a Simple page that may have some interactions and the full-blown applications like Gmail something I've worked on Like half last year is the Mobile up SoundCloud website. Yeah, don't know SoundCloud. It's best described as YouTube for audio and What it basically does is let's you listen to audio on the web and Anyone can can upload stuff and shared with friends or shared with other people and the rest of the internet And here on the screen to the left You can see the player page with like a Place big audio and you can see that the progress with your waveform Which is kind of the icon of SoundCloud and Instead of just having to play backstop when you click on somewhere something else because you are looking for some other sounds It'll just continue playing in the background So on the screen to the right you can see the now playing link at the top if you would click on that you get back to the Play and it's still active. So on this case signal page obligation makes a lot of sense because you want to have things Go on in the background while they still browsing content Something else I worked on a few month ago as a control panel for a cloud hosting provider from Berlin This is very different from what SoundCloud is doing, but it's it's interesting application on the left You can manage applications deployments deploy from git to their cloud hosting service can get statistics It's a single page application, but otherwise doesn't really have that much in common with like SoundCloud or Gmail But what both have in common is that they both basically JavaScript application running on the client and they use of JSON API is a screenshot from from flickers API documentation Which is probably one of the oldest and Maybe best known JSON APIs for the sound of mobile site We were using their API and basically you can for any user you can get their tracks or for a track You can get comments or stuff like that It's basically like a wrapper around the database and the database doesn't necessarily have to be like a single database can Like come from different sources Something else these two examples like SoundCloud and this this console had in common that we're both using backbone as the framework Along with jQuery and some other stuff that for like structuring the application Figuring out what to load when and how to display it back bone Was being used It's this is certainly not the only framework Though when we started early 2011 on the sound like sound on mobile site There wasn't that much choice and even backbone was still pretty early in development But now there's ember which who does involved with this angle a JS just like to people with Google are developing and I didn't use any of them yet. So I can't really tell you that much about them But what I can tell you like using one of these frameworks can certainly make a huge difference compared to Starting from scratch, especially if you haven't like build a full JavaScript application before So with those in mind there the opportunities that I like the title mentioned opportunities What are those I give it the first one is that the simple up this is pretty simple application architecture because Basically you have some static files a JSON API on the server and then you build your application on the client and it can run on all these mobile web clients of roses You can get a better user experience because you can get rid of all the page reloads and so Other interaction that become possible that weren't really possible before like playing audio in the background or whatever else you You want to do and this instinct frameworks like like born in the other dimension so that should sound pretty good, right and See I've got a few more of those. I don't know if they're as funny as Dave's bit. I'm trying First thing I want to mention of the like the pitfalls which I'm not going to cover that much You shouldn't underestimate what it means to build a full application in JavaScript So far you've basically like build stuff on the server and then you've sprinkled some jQuery on top That's very different from doing everything in JavaScript. It's a Whole new challenge so Listening to people to talk about application architecture or testing all that stuff or bring it up like trying out these these frameworks It makes sense. It's definitely useful with it. It's not what I'm going to cover here instead I want to cover like a few of these opportunities and see What pitfalls there? to start with first third will be basically about why hashbang sucks and what you should you should use instead Why having a first page load in really slow is not not good And what you should do about error handling and For all of these I have examples I would show some of the code but not all of them Nonetheless the code is all in GitHub So I'll give you a link later on so if you want to to see the example in detail and try them out yourself They were rather than you can can do that later So to start with this first one User experience really getting better because there's actually some room for making good ways so I'll give you an idea of that. Here's Our fake classic page, which is like just a regular website. There's a link there where you can see Kitten details, so if you click on that and get kitten details Just a place order bit important part here is the red underline here the slash details So the rest change because it's just a link and the browser loads another page the dress changes Let's say we built that from scratch as a single application using backbone and whatever else And we've got the same link and then we load some details Maybe the details load we eject but you get Jason back and then show something and If we have been careful or don't pay attention or don't use a framework They already handles that whereas we end up with just the same URL So it doesn't change even though the content chains the UL stays the same and this is Little subtlest that may look like it's actually pretty big problem because it means You know click on the back button nothing happens Maybe we get to the page like the Google search result or something, but we don't get to the start page again if we go back and like do Command or control click depending on the system to open that link in new tab, which pretty much works everywhere It would just do the same thing as the regular click So we can we break like native behavior, which is not a good thing because the few things that people learn about how browsers work if we break those expectations actually make things worse and One more thing by actually addressing this problem We open up in a few other opportunities that I'll get to like in the second part, but for now Let's look at some HTML specifically the HTML 5 history API that can help us address this problem Before we look at the API and the details for that use that chart from can I use comm and pretty awesome site showing you support for all kinds of new features in browsers As you can see I will support in I attend the history API, but current rosas don't so we may need to fall back there Actually, we can get get away with not doing it. I'll talk about that the next part And Android 4 and 3 have kind of a broke implementation, but they're now going to replace the crappy browser anyway with chrome on Android So that's kind of getting addressed as well So overall the support is pretty good like this other HTML 5 features where the situation is much worse But we still need some work around some bug fixes because the vendors can't really agree on some details of this back. So If I look at those options, here's a quick overview of the API, which is actually really simple there's the push state method which When you call that we'll use that fragment that you provide as the last argument this to others which are mostly completely Revolent but they made into the spec and now they can remove it But what this does is add a new history entry to the history stack and change the address Which is something that you there's no way to like do that with JavaScript without The browser supporting it so you can't really like you can't write a poly in true poly for that So that's why it was so frustrating for IE 9 not to support that because the API is really simple There's an alternative replace state which also changed the address But that does not add a history and you just replace the current one. There are a few edge case where that is useful But like push state is really the important method here And in order to know when the for example the user presses the back button We can listen to the pop state event And that's where the inconsistency start because like Mozilla things that everyone else is wrong about how when the pop State event should be triggered and everyone else thinks Mozilla is wrong and they can so far couldn't agree on One way or the other so we have to deal with some inconsistency there So libraries can actually help address those history. Yes, this One from Benjamin Bolipton. He's an Australian and he read this really comprehensive library that pretty much covers all the things there Probably addresses by now too many bugs that we don't even care about more like some regression in Chrome 4 Whatever no one use that anymore if you use backbone, you should opt into the push state support that got landed like about a year ago That makes a lot of sense and what I'm going to use in the example tab here something I actually wrote for this talk It's called simple history. Yes, it's just a thin wrapper around the API Just getting rid of the few inconsistencies but not doing like hash change fallbacks And not being a framework of its own. It's really just a small really small library and the API is pretty simple to What the original history API looks like so pushed every place data pretty much the same except they get rid of the completely useless title argument And instead of binding to a pop state event with at the event listener You just pass a callback to the start method and that'll deal with the normalization of the push pop state event so If you've never like seen push state before I want to show you an example, but that actually looks like in practice See if I can get this Going back to cloning Okay, so I've got this really simple Application here and in order for you to believe me that this is actually like running Stuff as a single page up against not just relearning a page got this audio element here Which should play back when I click on play So can like if you keep an eye on that you can see it's running and if I click on one is images Like this is basically gallery application that will continue running. So and I can go back and Still the same thing. So it's actually replacing content the client But if I do that again, you can see that the URL here actually can change like it's just a regular URL There's no no hash involved It's a separate address and as you can see I can use the back button to go back. So This is basically what the push state API is about once you Understand that it's really stupid simple, but it's extremely useful and something that makes building these type of applications a lot more pleasant and We can just like reload the page and we get the same page again and The same thing also works fine on is so again here should be able to play back the audio thing Okay, so audio also works and again and can change the address and can see Updated and if I go back and still playing back the audio Except now it doesn't show it anymore Yes, and like the native audio element you probably shouldn't use it but Good enough for this demo so They code involved in that It's two pieces. I want to quickly show you so this deals with handling clicks So it assumes that your anchors on the page just point to regular you else You don't make anything special for this JavaScript location just regular URLs And whenever we click on one of these we ignore everything that points to some like other server But if it's in like a local click we'll handle it and the first thing to check is The events has like this meter key shift key or control key property set which basically means The users trying to do something special. So let's ignore that. So just let the browser handle So that actually makes the control click work Like it's supposed to otherwise we prevent in the default just calling event brief event default and then call It simply is to push state passing the href of that link. We just click and That's all the actual handling of what to show next is handle elsewhere so that's when the code you find this this Call to the start method and when you do that whenever push states or the pop set event is triggered then your call begs run and you can Use the URL argument to figure out what what are you supposed to show next? see it's basically Take the URL do some client-side routing and figure out what content to show in this case the actual application is really stupid Simple it basically just figures us this is the index page if show show that otherwise show an image If we show an image use this photos dot look up call to just update an image element It's just an example nothing like production ready, but it does trick so I mentioned has changed before and that they actually not such a great idea and You're most likely to have seen them on Twitter for a year now or something So whenever you go to Twitter comm slash persistence You will end up on this slash hash bang slash persistence Which actually pretty annoying because when you really look that page it'll like open the Twitter homepage and then figure out Hey, there's a hash and I should actually load something else because the the hash parts never available in the server without doing some JavaScript workarounds so might be okay to use as a fallback but Probably shouldn't even do that so I'll show you soon and I have this chance to talk to Dan web who basically was responsible at Twitter for like undoing all the hash bank change stuff on Tuesday and They actually figured out that they don't want to have the hash change for even not even as a fallback so Twitter doesn't do that anymore so and Explain why that actually works. So but what you keep in mind use push date and try to not even bother with hash change So but then we have this other thing about the first page load like Really doesn't have to take 10 seconds or 15 seconds to load like a Twitter status update where it's just 140 characters that shouldn't take that long and This guy says if you like load a page then you should make a good impression So and what it comes down to is going back to the server and rendering content on the server Which may sound like a bad idea because now our simple application architecture actually gets not so simple because now We have to do things on the client and on the server So but it actually it's not even that bad because there are few opportunities to to make make use of this dual thing On the one hand assuming that you have this Jason API already just use it on this server There's no reason why your server should use a different API from your client Just use the same thing and you basically just have less network latency in between Whenever you have like templates it should be just matter of HTML with a few placeholders show There's no reason why you shouldn't be able to render those on the server as well and Where it gets even more interesting if you have a platform on the server that also runs JavaScript You might even be able to share a lot more code with the client and Luckily, we now have no JS and while this isn't the official logo. I like it much more We can actually run this stuff on the server just and share share code between client and server and again I'll switch to showing you a quick example and For that it's basically just show the same stuff that before this time around I'll show you this the source of each page, so Just reload once and then this thing about your source here is It's always Rendering stuff from the server so you don't will like doesn't show any DOM modifications So what you can see here is pretty much just like the list of images and that below here There's this placeholder with an empty empty image element might be not such a great design But it makes it some like the JavaScript update this makes it pretty simple now if we go back Click on one of these links and you use source again It's still run this at that same list because it was lazy But the difference is now will actually have the image element in the markup again. So Because it the same stuff on the Coming down from the server just with content this time around we can still just use that and money fight from JavaScript So if I go back and load another page, it'll just use that same image element and put something else in there and I'm going to skip over the note parts of this like if you if you work with no JS before It's would probably be pretty boring if you had never seen it before Probably like showing you just a few code slide probably wouldn't help either so Again the code is available on GitHub What I'm going to show here is just a bit of JavaScript that is explicitly shared between the two two sides here So you can see this if type of exports Not equal to undefined. This is basically detecting Hey, we're running in a Node.js environment because node has this export object So let's yet use that to export our data and methods and otherwise It'll just declare a new variable in this case just global and export stuff through that So in the end we can use that same photos dot lookup method both on the client and server Which in this case is not extremely helpful because it's just doing some filtering but again Again, this is just an example. So in the extra application you might be able to share a ton of code between client and server and Instead of trying to figure out all of that from scratch There's actually quite a few frameworks available now that Explicitly about let's build this application once and run it both on the client and server I haven't used any of them so I can't really talk much about that But along with this all the example source codes I've also have a list of links where I can find a few of these But for now, let's just keep in mind so the set rendering can be really helpful to address the slow first page And that's pretty much what Twitter is doing like in IE. They just always have Like servers that rendering they basically don't do anything too much anymore on the client Which also actually helps address stuff like search up to search engine optimization where Someone comes up. Hey, we've got the single page application They has changed and like Google the Google bot doesn't see our content So rendering content on the server means you don't have to do anything special for that stupid crawler That's that what could possibly go wrong and I've got a little illustration here Except this is not the quote I was looking for so I adopted that slightly In browsers, no one can hear your code screen Basically when this happens Like something throws up This might happen except it's like the tree falling in the forest when no one is looking you don't see it And your client probably won't like your users don't look at the console to see what your application is doing except they happen to be up developers So what can we do about that like? This is actually a big deal because whenever something goes wrong You won't know about it your client might complain. Maybe not maybe just goes on to your competition So it's really important to deal with error handling. I'm just basically Catch errors on the client send them back to to the server to your server or some third-party server And you forget a lot of these errors. You actually have to deal with aggregation To get back to in a little bit to start what what type of errors do we have to deal with? There's syntax errors in JavaScript, which should be really easy to catch even before any of you just see application So if you like test locally and then like build your applications Maybe some JavaScript notification deploy it to a staging server even to your left server and take a look yourself There's something really wrong. You get in syntax error and you'll notice so nothing really we really have to worry about at runtime Though what we have to worry about is type errors because those are much more like to cure under some random conditions Which we can't necessarily test for so dealing with those is pretty important and the same goes about Ajax errors, which depends like can depend a lot of network But it might also be just like use it mistyped a URL or a server may have something maybe doing something wrong Which we don't know about so Being aware at least what errors occur and then to sign into ignore certain errors. That's also important here's Some little scope snippet to test like a Ajax and a type error because the Ajax request is actually asynchronous the 404 that this causes will come afterwards and and so let's see how we can we can handle the type errors and While I generally try to avoid the term best practice I think this is pretty much at least the best current practice on on handling errors You should not use jcrease bind or on method to bind to error event because you actually use that those three arguments message File in line, which are really really useful just knowing that an error queue it is completely useless if you don't have any context about it and You may notice the first line in the handle itself actually kills itself So if like something in the loop occurs, we only get notified about it once otherwise a single client may spam our Logging service, which is generally not useful You can do the same thing with Ajax errors Of course, you're assuming that you use jcrease and using the one method to bind just a single Ajax error event and then just using the arguments that you get to lock an error And the lock error method that these two using could look like this again using jcrease You just post something back to the server Which of course won't work when the network is down So if you're dealing with Ajax errors that are triggered by Ajax like network problem Then sending back to the same server or we won't help I'll skip the example here because it's not really that interesting but What I want to talk a little bit more about and the aggregation options so Mention before if you're dealing with it like that that's that cloud hosting application There's like another 20 people using that right now. So there's not a lot of errors So aggregation is not really important But on the other hand with sundot mobile which like went from 70,000 to like a 200,000 views per day We ended up with a few thousand errors in a few days So like figuring out which of those are the same and which are unique and which should we deal with They turned out to be pretty important So either you just roll your own solution or if you're using something like Google Analytics or some other analytics software You may be able to to use that. So for example by triggering custom events Which are kind of like jcre custom events except with its analytics tools and If you want to use that here's an adapted log error method which uses Google Analytics weirds area-based API where the first argument is basically method calls So we want to track an event and then we just pass on these other arguments and we can She didn't know this was supposed to have a screenshot what that looks like sorry other tools available are for example outbreak and bug sends Those are third-party service mostly about tracking errors from your server side application But you can actually use them to track client side errors as well. Here's a screenshot from air break And again along with the code examples. I've got a few resources There's someone at sound that had to write a blog post about how we were using I think but like covering both air break and bug sends For doing this kind of logging, but what whatever you end up using It's the most important point is to actually catch all those errors and bringing out to deal with them So that said Is that all worse to the trouble? and to recap like the better user experience But by removing pay tree loads As long as you pay attention to other things that you might break in the process and fix those Yeah, we can get a better user experience and we can still make a good first impression If that's important for our particular application, which is not always the case for Twitter Obviously is for others might not be but it's generally good idea to have a first good first page load And if we deal with errors, we can also Provide a pretty stable product. So yeah, I think it's worth it and with that I'm pretty much done. Yeah, so here's here the links for the examples There's something forgot here if you got feedback for this particular talk Welcome to have any feedback for this survey or just ping on Twitter or something emo and we have like six minutes left for questions So if you have any let me know I have a question about the error handling Um So the In JavaScript if you catch the exception will it still be caught by the window when you do on-air? so if JavaScript developers trying to prevent the console from logging the exception to be visible to the user Would it still be caught and sent to the server so if you Like if all your code is wrapped into the tripod and you catch all exceptions then no it won't pop bubble up so if you have a tripod and catch catching all exceptions and The global handle would but if you have that try blocking place You might as well just use the catch block to lock the error instead of having it bubble up So that should make that much of a difference just the approach to how to deal with the errors slightly different But generally I think it's not a really good idea to have everything wrapped in a trial block because if you're dealing with like modern Jt engines like v8 They actually opt out of a lot of optimizations if you have everything in the tri-trip lock, so That's generally not such a great idea So I think you mentioned that Twitter has figured out a way to avoid using the hash bang hack But I don't know that you mentioned what that method is I'm wondering if you could share that with us So what they're basically doing it now is they don't use hash bank anymore And if they like find a hash on the client that's supposed to be like an old-style URL They're just rewrite that to a proper URL and they don't have the test change fallback at all Which basically means if you use Twitter at least Sooner they they actually done with those changes on like I nine It'll basically do fall back to always do service at rendering and because they actually optimized for that to some degree. It's Pretty fast anyway So it's not that much of a difference and like Twitter doesn't have to play big audio in the background So they don't really care about I nine not supporting has changed. I'm sorry not supporting push state So I'm actually working in a full full request Environment and I've been switching over and right now I'm kind of in a hybrid environment where some pages have our single our single page applications But I have multiple like small single page applications Okay, and I've been wondering about you said Twitter. They do a single page app But they had also falls back the the back-end will serve up the entire thing I was wondering if there's any like good solutions out there to help It seems like you have to get a lot of communication Are you almost doubling all your code that you would have had on the front end on the back end so that you can have this fallback Behavior or if somebody renders the page and I was wondering if there's any good solutions or ways to make that a little bit smoother for me so there's Their frameworks available that basically helped you like share the code So like I think one is like meteor.js, which is basically all about writing stuff once and then having it run on both sides I think what Twitter is now doing is basically when you click on the Like push state enabled link they actually send wall as the same request that it would otherwise send to the server with a regular Request and that looks at the headers sees hey, this is a true request So let's only send like the the body of the page and skip the like the headers and stuff They just dump dump that into the page and they even I think what they also do is Use the push state state argument to just reference this this blob of HTML And if you use the back button and we actually look that content again So they basically just use the same like they don't really don't even run a template on the client. They just Render them all those in the server and use Ajax to look them Which is I get I mean it's it's probably a pretty simple solution. So that's that's generally good idea But then Twitter is not necessarily the typical single-page application either So I have a question that I'm hoping you can help me with how tall are you I? Don't know in foot or inches because we don't use that silly system in Germany 194 very I think I think that's it so one more round of applause for yarn


Hey there friends, thanks for checking in. This is my Glock 26. I like this handgun. I've referred to it as one of my favorite Glock's but what I don't care for are the Glock sights. And for a carry gun I think that night sights should be installed. So I'm going to do that today and I've decided to go with XS DX T2 night sights. It's got that big dot in the front and the night sight in the back that's just a line. And then in the kit it also includes lock tight as well as a front sight removing tool. And I also acquired XS inline sight pusher. It's a kit made for Glock's to push out that rear sight. I can't show you all the processes on video but I'll do my best to remain clear in line with the YouTube guidelines so let's get to it. The first thing I'm going to do is remove that bolt right there that connects to the front sight. I'm going to use this tool that was included in the XS case. Before I go any further I'm going to take that front screw and I'm going to degrease it if you will by using an alcohol wipe just because there may be some lubrication on there and that could cause the front sight to walk out over time. So I'm going to do this first, let it air dry and then apply some lock tight. I now applied the lock tight onto the screw.  And right there the front sight is installed. The reason I went with the blue lock tight opposed to the red lock tight is because if for some chance this happens to walk out on me I'm not expecting it to but if it does I'll be able to remove it much easier with blue lock tight opposed to the red lock tight which requires heat to loosen it up. It's a much stronger bond. I'm just going with the blue I think that'll be fine and I've had good luck with blue lock tight in the past. I'm not going to use the XS inline sight pusher made specifically for Glock's to push out this rear sight. By doing that I'm going to place the slide and align it properly with that right there and then rotate this lever to push that rear sight out. I'll now install the rear sight. You may notice that this just slides in the place but in the case also includes this wrench. This is tension held by a couple screws in the back. You're going to tighten that up on the bottom of the slide there. Once you get that set where you want it you tighten it up and that should hold nice and sturdy. Well that was incredibly easy and this is what you're looking at. When you align these sights you want to put that dot above that front dot above that line in the rear and if you do that then sometimes you hear people refer to that as pumpkin on a post or something like that but you don't you don't want to line it up like you would with three dots. You want that that dot above the line like right where it's touching the bottom of the sight and that should work out pretty well at the range and that's what we're going to check out now so let's head out to the range. XS big dot sights. Let's see how it goes. Nice that big sight jumps out at you but the key is to put that rear line right underneath the big dot and just use that dot it just it jumps out at you you can see it it's big just put that thing on target and it's real easy shooting so there it is. XS big dot sights. Good improvement for the Glock 26 or any Glock that you want or any handgun I should say that you want a large front night sight easy install I'm happy with this G26 improvement if you like videos like this please subscribe and share I always appreciate thumbs up button thanks for watching and you guys be safe


Hello, welcome back to the happy house. I'm Neil and usually my videos are a bit tighter than this This is going to be a really flabby video and not just because I'm outdoors in my t-shirts By the way, summer has happened here in the UK. This is our one day of summer So I thought I'd take the camera out to then go back inside again because I've got a little project today And usually I've script out or a bullet point my videos and for this one. I'm not going to do that I'm just going to let you follow along a little project. I've got going in the hut today It's this is how it's looking at the moment, but the project today is is this I bought this Cheap whoa some extra bits. I bought this cheap lighting panel on Amazon because I've got a little project going and I saw it Why don't I just share it with you and you can see if this works I don't even know if I'm going to get to the end of this today Let's take the camera off This is my position here for the videos that I usually record on the channel and usually I sit down like this Hello, this is sort of the setup that I usually have and I've got the sony zv1 or zv1 camera bolted to the wall on this monitor arm and then from Lidl, which is a very Cheap supermarket here in the UK. I bought this light panel and it's great because it gives me enough lights on my face here But it's also got a remote control. So not that I ever do this But you can change the colors and do some funky things with it You can also change the warmth of the of the color But the downside with it is that I now have a lot of lights on this side and not so much on on this side What I usually do to get around that is this I mean it's a lamp from IKEA So I've just got that literally pointed at my face Which I mean it kind of helps It's really tricky filming in here during daytime as well. So probably close the the blind behind me But the idea is this it's to use this light panel I got from amazon for 25 pounds Which is I think that's about 30 dollars. It is 30 centimeters across by 60 centimeters long And I'll put those dimensions in the description So the idea is this is that I will put up this light panel here on my left hand side So if I could somehow put the light panel there then I'd have lights hitting this side of my face I've got another top secret plan as well that I've been mulling and you can tell me in the comments what you think of this I'm getting a little bit fed up of sitting down to make the videos and I'm wondering What if I were to to stand up would I feel better making these videos standing up? I mean it's probably a big procrastination a big chunk of procrastination Assuming that I have to somehow position myself differently to make more videos But it's something I really want to try out So the first thing I need to do the quick costume change apart from that. I also need to clear the area now The next thing I need to do is to line this up on the ceiling see where I want it and then mark it out This is the frame that holds it. I think I'm supposed to screw this to the roof and then this will clip on Now I wasn't expecting this should I be lazy look here's the here's the issue So I really want this panel light to be tucked within this beam the frame fits really well in there But I can't fit it like that because I need to put a frame up for it to clip on Oh, that's not much of a build is it if I just tuck it into the rafters. Should we do it? What do you think? I've got these fixtures and fittings. I'm just going to pre-fit the frame to the panel light So now I've got this cross brace screwed in behind the frame and then this transformer What I'm going to do is just kind of clip it on the back And then I think I'm going to have to drill a hole in the corner to run a cabling to power it So I'm going to put this over here Like that so if I mark up where I want the dual lock tape to go that's going to be roughly here This stuff is brilliant. I'll try to put it in the description It's called dual lock tape and it's like velcro, but it's really really super strong Then I'm going to stick them together so that they are completely aligned Then I'm going to stick one piece here and one piece there and then I can take the backing tape off So this is ready to stick to the wall and now the moment of truth to see if this works I'll stick this to the wall and hopefully the backing dual lock tape will hold it in place There have a look at this That is quite snug. It's better than it was before. I know that it's got less of a chance to fall on my head So this is the tricky part. Can I pull it off without pulling off the backing tape? Whoa, it's stuck. It stayed. Okay, that one stayed because of the way these slats work The sticky tape's got nothing to hold on to. This is just turning into one bodge after another I think this is going to work though. What I need to do next is to drill a hole So that I can run a cable out and it'll actually be this cable I don't use this cable anymore. This was for a failed lighting project I had LED strips around the chimney there. Wow, I feel like this is this is almost like fun for Louis Building his electric campervan, isn't it? Not I haven't got the hair for it Now I've just had an idea. I was going to drill a hole into that's my drilling motion I was going to drill a hole into the base of the lights and run the cables through But if I can just get some metal cutters great So I've got the metal cutters. All I need to do now is to cut the metal Hey, have you noticed when fun for Louis does this? He always takes his top off You don't think that I should uh, maybe um What I'm not sure this works So what I'm going to try and do instead is to just use this hole here and it'll inevitably fall on the floor Basically, I'm going to use that hole to run the cable through This is where the danger goes up a notch. I've got the ladder into the happy hut Basically, I've got to now pull down the cable that I installed over there I have pulled the cable through the the hole that was there already and it just about fits I don't think see the fabric is really just about filling that hole up So I'm just going to connect this up and get a plug on it It is now the moment of truth. I've not seen what this panel looks like when it's lit up But it's all wired up. I'm going to put it into position and I guess we'll see what it looks like. So Here we go Whoa, that is really bright. Oh my goodness cut to wide shots This is what my standing shots looks like now and I I think it's just a little bit too bright and this is my mistake I didn't realize that I can't dim this panel. So I have no control over this light. It's it's just It's just like daylight which now means that this side isn't bright enough this side here So I'm declaring this a partial fail Um, I think I'm definitely going to use this light panel when it's daytime And when I've got bright sunshine coming in on this side, this might balance it up a bit Sorry to cut in but this is this is me two days later And it's in the middle of the day. It's very very bright sunshine outside and I think this kind of looks good. I think this works I think my bright my super bright lighting panel balances the natural sunlight from the window quite well And I I'm some looking at myself in the monitor. It's okay. And I think I might actually declare this a partial success I think the standing up and talking to camera is working a lot better for me than I thought it would What I need to do next is to get a standing desk I'll probably get the scarcer desk and I might even film that for my Ikea dad channel right here So that'll be an extra video for the the group of channels that I'm growing at the moment If you have any cheap lighting tips you can share with us leave them in the comments below And right here is something else that I do with my youtube channels Can you please help my daddy get 10 000 subscribers? Just click in his face. Thanks. Bye All right, this is going to be the proper one though