Good evening, everyone. I'm Bhavan Bairam. I was a open-affect postdoc in David Mobley's lab at UC Irvine. And today, I'm going to talk about small molecule force field development, and specifically about balance parameter optimization and share a few quick stories. Force field development is pretty exciting. And I think this is how every force field developer feels like after they make a new iteration of force field. And I hope our force fields only burn your computer and not your molecules. And the reason being, developing a force field, general force field broadly involves taking care of these force things, chemical typing, training data, optimization, and benchmarking. So chemical typing are the parameters you put into your force fields. Most of this is driven by chemistry wizards. And there are significant efforts by Trevor and Tobias to automate the chemical perception tests, as they have shown this morning. And next comes the training data you choose and whether it covers diverse chemistries and then the quality of the data set. And next would be the way you perform your optimization, the realization skills you use, and the initial point you're putting your optimization to and the definition of objective function, weights you are assigning to different targets. And finally, another most essential part that decides whether the force field is good or not is benchmarking the output from optimization. And if you feel something is not right, you go back and fix it and repeat the cycle. So how do we do this? Here is how OpenFF is successful in culminating all the steps involved in building a force field by developing a software and data infrastructure, bringing together all the bits and pieces needed. In this workflow, we start with an initial set of parameters and we use OpenFF toolkit for processing the molecule graphs and assigning parameters. And it has wrappers around ADKT and OpenI toolkit backends for most of the heavy chem informatics work. And then we have force balance or force field outmasters that can ingest both quantum mechanical and physical property data and outmesters the force field. After that, we perform orthogonal benchmarks on the output and make a decision on whether to make a release or further improvements are warranted. All of this infrastructure is permissively licensed so that you can use it for your commercial endeavors as well. And I think all the individual parts are industry standard and most of it is community driven. And I think this picture summarizes it like any lab that can go using our infrastructure. So today I will share some of the details of building a force field starting with our conduct chemistry data generation in the context of training and testing our force fields and many other auxiliary projects that make use of these datasets. So this is our workflow of QC data set generation where anyone can come with a set of 2D or 3D representation of molecules and make a pull request on this repository which will then process the submission and send calculations to HPC clusters at all the different universities and sends back the calculated data to QC archive which is a public repository of data hosted by Molesi. And here is the team that helped keep the infrastructure resilient over the last few years and made many submissions which resulted in a rich variety of datasets and a huge thanks to David Dodson and Brent Pritchard who handle most of the DevOps involved in it and keep it going. So here is a list of datasets that are available on QC archive that was generated by OpenFF. So for example, the OpenFF gen 1, 2, and 3 datasets curated by HESU and Simon they contain the HSCN soft mesh geometries and torsion scans of small molecules which we regularly use in our force wheel training and here is a recently curated industry benchmark set which we use to test our force wheel and we also have the OpenFF protein datasets for fitting our next generation of biopolymer and small molecule force wheels curated by Chapin and the OpenFF electrostatic potential datasets created by Simon to train and test graph neural net charge models, virtual sets and polarized force fields and David Dodson and I helped create a single point energy dataset along with bit management recently which contains more than a million conformers from the short datasets, webcam datasets and a lot of female assets and we call it the spice sets which really stress tested the capabilities of our data generation infrastructure and we can probably say that we can handle quantum chemistry data at scale and the main workhorse of our quantum calculations is Cy4 and the outmeasure we use is geometric from leaping one screw along with torsion drive for our torsion scans and QCFactile is the server package maintained by Ben Pritchard at MOLSI which makes these calculations possible and QC submit package developed by Josh Horton and OpenFF team makes the submission smooth and also smooth data retrieval within a few lines of code after the calculations are done. Here you can see like within six lines you can import the necessary packages access the remote to CR cable holes download the data and perform a few filtering tasks to pick the data you want. For example, we are filtering for molecules that match in nitrile from the optimization data set collection here. So when it comes to force field fitting one of the primary concerns is how good is our theory level for our quantum chemistry data and whether we are able to model diverse chemistries and whether the method is accurate in conformer energies accurately predicts torsion profiles and it is accurate for charged molecular prosthetics such as dipoles and accurately describes complex and diverse chemistry such as nitrogen, sulfur, et cetera and most importantly whether it is computationally efficient. You don't leaping one Daniel Smith and Victorio Lim did a benchmark of conformer energies back in 2018 and they proposed that B3DP3BJ within DCVPT basically is the optimal choice and that benchmark was on a smaller set of peptides medium sized micro cycles and canonical amino acids and some alkyl groups with different substituents and all of these were neutral molecules. So we extended the scope of this and did another benchmark recently on torsion profile energies including diverse chemistry such as hypervalence, sulfur, nitrogen in different hybridizations by alloys, halogens and a lot of charged molecules and we thought like we need to upgrade our level of PM theory but it turns out that what we had initially chosen provides a remarkably good balance of speed versus accuracy, despite its limitations and we plan on sticking with it for now. So our default B3DP3BJ within DCVP we produce the reference CCSDT in complete basis of limit energies within 0.52 kcal per mole and the top performing one is the drain separator hybrid with an error of like 0.42 kcal per mole and where was by only 0.1 kcal per mole and we don't think like there is a need to switch theory levels and dump all the data we generated over the last five years the overall gain in accuracy is not significant enough but for the subset of charged molecules the difference is a bit higher it is around 0.2 kcal per mole with respect to the best one so this can be considered depending on priorities but I have to mention here that it is super easy to add an additional compute specification and regenerate all the data sets and it is just a question of how much compute we can assign right now and what needs to be prioritized at the moment. Another major point is that CY4 does not have analytic gradients for rivet and dispersion calculations which makes these calculations really expensive as the molecule size increases. So we now have the quantum chemistry data to train the balance parameters in our force fields the next thing is how to efficiently use this data to bring parity between the MM and QM birds for this purpose we use force balance from leaping ones group to optimize our force fields and it is a really good program that solves the multidimensional problem and the reference data can be QM or fiscal property data and it supports a lot of MD engines and custom functional forms and as Josh showed this morning with the double exponential and it is also really simple to build custom objective functions as well. So when I say that I want to bring parity between the MM and QM birds by the I mean we want our MM geometries to match the QM reference and the same with conformal energies and torsion energy profiles. So in our force field fields we use optimized geometry target which minimizes the sum of residuals in internal coordinates the bond angle and torsion deviations within a molecule they are all scaled and summed up which goes into the objective function and the same with torsion profiles between QM and QM where the weighted energy differences go into the objective function. One thing to note here is that we prioritize the mesh to low energy regions for the torsion profiles. So using this infrastructure we made a few changes to say it's 2.0 and broadly they can be categorized changes pertaining to chemical typing and some related to fitting procedure that went to building stage 2.0 and this improved the accuracy of force fields and today I'm going to share a few details on the changes pertaining to hypervalent sulfur and some changes related to how we perform fitting and how choosing a good starting point really matters. So one thing we found is that careful refinement of typing is crucial for getting accurate geometries on sulfonamides otherwise we have terrible failures like the pathologies pictured here. The one on the left is a reproduction of a pathology with parsley 1.3 where the carbon sulfur nitrogen angle around sulfur is overly bent and thanks to the report by Chris Bailey and Guy Tannum we fixed that in 1.3.1 and stage 2.2 but again on the right we found few systemic issues which remain even in stage where a similar angle bending occurs in gas-based minimalist geometries when there is a non-carbon atom present beside a sulfonamide functional group and there are a lot of FTA-proof plugs that have hypervalent sulfur and it's a really prominent chemistry and we don't want to be doing bad in describing this and because of the unique electronic properties offered by sulfur which can lead to enhanced bending affinity and selectivity towards specific biological targets this is the chemistry of interest to drug hunters and almost a quarter of the hypervalent sulfur containing red sulfonamides and the initial stop of the reading fix was to avoid tangles A31 and A32 that were assigned for hypervalent sulfurs back to reasonable values manually as we observed created the parameters due to optimization and the values being shifted in one bad direction by the optimizer and this fix was in 1.3.1 and we didn't see the same pathology with sage but the other anomaly we observed with sage was that there is a subset of sulfonamides called sulfonamides and we were able to pinpoint the blame on the same angle parameters say 31 and A32 and also a few torsion terms T143 and T157 and I think the changes we made is all the issues permanently and I went to Pubchem to improve confidence in our force fields and tested molecules which have the same functional group and they are all doing fine with another iteration of force field. So another quick story I want to share with you today is on how changing the way we perform fitting can affect the force field. So we are doing a multi-objective optimization and if we are not starting from a good initial point we may end up with unphysical values for our parameters. For example, here is one of the earliest pathologies without force field where the optimist force constants were counterintuitive for carbon-carbon single bond and carbon-carbon double bond where the single bond has a higher force constant and much stiffer than the triple bond and propane molecules were exploding during MD simulations and a manual fix was made in 1.2, 1.2 to solve this issue. But in general, if we have a bunch of QM data it is really easy to derive a mean equilibrium value for the bond lengths and angles but it is difficult to derive the force constants easily and we were expecting the training to vibrational frequencies would set them right but matching the normal modes between QM and MM is not foolproof and as I mentioned, we were performing multi-objective optimization and we may end up with a paradox solution that gives a minimum of the potential landscape but may have highly unphysical values like this. So what's the solution for this? Fortunately, we can use the QM HACN data we already have and obtain the harmonic bond and angle force constants using a method called Modified Seminar View. This was shown by Danny Colant, George Wharton and we used it in training 2.1.0 and the graph on the right shows that parsley 1.2 that was trained explicitly to vibrational frequency training targets has a lower error in reproducing the vibrational frequencies and says 2.2 and 2.1 they don't use vibrational frequencies in their feeds and says use the previous force field as a starting point whereas 2.1 use the main values obtained from Modified Seminar View method on the training data and we do see significant improvement in reproducing vibrational frequencies closer to your force field that was explicitly trained to vibrational frequencies but without the pathologies that may arise from errors in frequency matching. And here in the left table, we can see that the parameters were propane pathology I showed before where the carbon-carbon triple bond is closer to its QM value in the range of 2,300 plus units and broadly the same changes have been propagated to all other chemistries and for example if you look at the force constants of single bonded aromatic double bonded and triple bonded nitrogen the parameters in sage all the optimal and produce the right gas phase geometries their auto fodder will compare to the physical intuitive values and now with 2.1 that use Modified Seminar View method as the starting point we see them all fall in line where the triple bonds are stiffer and the single bonds are softer in force constant values and we hope that this would avoid any new failure mode that we may not expect in market end mixtents and it is also an efficient use of QM data we already have and we don't need to generate any new data or build any new packages or invent any new methods. This is right out there for us to use with QP from Danny Cole's group and I think this is one of the beauties of open FF5 mind where people are contributing from their expertise and resolving systemic issues. So I talked about data the generation workflows and the quality of data we are producing and shared two quick stories about the changes we made in the recent force field and here comes the last and most crucial part of force field development, which is benchmarking. We have two sets of benchmarking one on the QM geometries in vacuum and the other being binary free energy calculations and most of the improvements we make in violence parameters show up in QM benchmarks and the global metrics we use are RMSG of MMOP mass geometries compared to their QM counterparts and then torsion fingerprint deviations and also delta, delta E like the conformer energies with respect to the QM and here we see improvements in all of these metrics globally with 2.1.0 and we can also slice and dice this data at a granular level to look into discrepancies and areas of further improvement. For example, we can look at the molecules with higher bond entangled deviations or we can also obtain parameter error metrics or better functional group strategies and many such things. As I mentioned before, our pre-release checklist also includes binding free energy benchmarks as well and luckily this time our force field is coincided with OpenFEs alchemist scale release and a huge thanks to Irfan Alibe for extending help to test the new iteration of force field. So is everything as good as it looks and what are some other measures that can help bring out any systemic discrepancies? There is one systemic discrepancy that is common to all the force fields in general discovered by Bilso from our industry partner Geninteg. Bilfoam that sometimes QM minima do not always match MM minima and sometimes higher energy QM conformers are stable on MM landscape. So for this molecule, if you look at the graph over here, on the left side in blue, I have the QM energies and in green, I have the corresponding QM energies starting from the same QM geometry and optimizing with Sage force field. And if we take the QM minima as the ground truth and expect the corresponding MM minima as geometry to be the MM minima, then we see that the ranking of energies does not hold and some of the MM geometries, they fall below the expected minima. And in purple on the right side, I have the RMSD with respect to the QM geometry for the MM openness geometry. And if we consider an RMSD cutoff of 0.6 as a threshold, then there are no matches between the QM and MM openness conformers. And we'll term them as orphans. And if we bump it to one angstrom, then we have three MM geometries that match to QM and three orphans that are unmatched MM conformers. And Bill has listed out a set of interesting metrics and for now I'm highlighting a few and see how we are doing in 2.1 when compared to Sage. I have to mention here that we didn't address this issue explicitly in 2.1, but we do see an improvement by improving some of the other areas in force field fitting. So on the left, I have a table of these metrics based on a TFD matching threshold of 0.1, where any confirm, any MM conformer that doesn't match with the QM conformer within the threshold of 0.1 is considered an orphan. And here out of total 72,000 place conformers the number of matches is pretty good at 67,000. And the number of orphans is like 5,000 with 2.1. And here we can see a drop from around 7,000 to 5,000. And the same can be observed with RMSD cutoff of one angstrom where the number of orphans drop from 10,000 to 8,000. So we are making good progress by addressing some of the other issues, but there is still a long way to go. So in conclusion, I have shown you that having benchmarked on diverse chemistries, our default B3-Lift D3-BJ within DZVP basis set is still fast and accurate enough for training and testing our force fields. And I also showed you that our QC dataset generation by plane can handle data at scale. And we resolved some chemistry specific issues related to cell phonomers, force weights and more through improved chemical typing and torsion periodicity handling in our force fields. And more for similar method provided a really good way to initialize our force field optimizations which led to greatly improved angle and bond force constants that are closer to physical intuitive values. And much more work can be done with the industry benchmark set and resolving the discrepancies. And what is the future for? Josh Wharton has shown you results with double exponential for intervals and we also have some really good preliminary results with virtual sites for addressing charges symmetry and polarizable force fields. And Rosemary, our self consistent small molecule plus biopolymer force field is on the horizon and Chapin will share more details and automated chemical perception, base marks from cover, it may improve parameter definitions significantly. And last but not the least, I want to thank David Mobley, my advisor for his support and guidance for the last three years and Chris Bailey as well. And I also want to thank other peers, Leaping Wang and Bill Swope and Peter Eastman, John Kudera and a lot of our industry partners. And I also want to thank the Opener 15, especially Simon, Jeff Wagner, David Dodson, Aisujang and Jessica Matt. And I also want to thank Mobley Lab members, especially Hannah Bowman and a special thanks to Trevor Goki with all his help. And I want to thank my funding agency and IH and all the awesome developers at Molesi and QC archive. So if you have any questions, I would take that. And I also want to mention that your feedback is highly appreciated and if you find anything wrong with our force, we'll please do raise an issue on GitHub or drop a message on Slack and we'll try to address it as much as soon as possible. Thank you all for your attention.


What's going on, everyone? Sam here with late in sports cards, ripping 21-22, Paninia maculate basketball hobby, five bucks, full case break, number 35, tiered random team style. Here's a look again at your random results. As always, you can find these on the website under the results tab, as well as the link in chat. So good luck, everybody. Let's do some iMac. Sorry about the delay on that one. Again, I apologize. Let's just get started. Whoa, out. I'll take it. This isn't even like, not even stress-worthy. Here's a four touchdown game. It's not even second half yet. I'll take it. Nice think. That is Darius Garland to 49. This is sick. This is going to Wayne Y. How about 56 out of 75? Game used. Moses Malone. What's up, Elousis? That's not Milwaukee. Bunch of spots just came in. Thank you guys. Bunch of impeccable spots. Holy cow, man. Nice one. There's sick one here. We've got three of five. Kevin Herter for the Hawks. Red Velvet on the team logo jumbo patch. That's awesome. Congrats ATL. Danny C. There you go, buddy. Nice Herter coming your way. I miss him. Come back, please. We've got, going to the Hornets. Ooh, Rookie Patch Autograph Tags. Rookie Patch Autograph Tags. Let's see what that's numbered to. That's going to be Tags to Five. Nice one there for the Hornets. Kai Jones. Number 134. Going to the Hornets. Nice one here. We've got a Heralded Signatures. 13 of 25. Antoine Jamison going to the Wizards. Congrats on that, Wizards. Hornets, by the way, was Brian R. And really nice one to end it. Going to Chow H. We've got five of five. Herbert Jones on the RPA. Congrats on that, New Orleans. There you go, Chow. Heck yeah, buddy. That's awesome. Take that for sure. That's Jersey Numbered 505, too. Get that magged up for you, man. And the empty. And after this, guys, I do apologize on that. I know 28-nothing Eagles is scary, dude. Whoa, shots fired by Donnie. I mean, yeah. Yeah, I'll fire those shots. Division Rival, of course we're going to fire them. Oh yeah, absolutely. There's a Chris Duarte to 99 for the Pacers. 14 out of 75. Nice one there. It's going to be Dominique Wilkins for the Hawks. Human Highlights Reel. Congrats on that, ATL. Game used on that as well. Rookie Jumbo Patch is Brandon Boston Jr. 6 out of 50. Two color for the Clips. Going to Zedrick R. Yeah, would you do the giddy up if we get a giddy or no? Are you too cool for that? David Thompson for the Nuggets to 99. 68 and a 99.  Fair. I'll save that for my own stream.  That is clubbed. That is 13 out of 49. Kobe White going to the Bulls. So in there, Chicago. Wayne Y. And nice one here. Going to Corrie L with the Timberwolves. How about 22 of 25? Kevin Garnett. Smarks of greatness. Nice one there, buddy. There we go, Corrie. Nice KG. Big ticket auto. Gorgeous, man. You can pack this one. Absolutely blowout. That's what you said. You're going to have to teach me that one. That was just common sense. That was just instinctive. That's just common sense.  What did I hit my three? It's true. Fair. Zach Levine to 99. Got a nice one here for the Kings. The year in Fox, number 89 of 99. Swipe up on the standard. Okay, standard of Damian Lillard to 90. This next one's kind of sick. This is one of the most, in my opinion, underrated players of all time. We've got 54 of 99. Mitch Richmond for the Kings. Nice one there. Oh, it is the Blake and Sam hoopla show. Friday mornings are scary, dude. Oh, God, does Blake do it? Oh, yeah. Oh, no. He doesn't do it. He goes around and goes like this. Oh, that might be worse. Right, I know. Nine out of 25, Peyton Prichard for the Celtics on the modern marks. Oh, this one's disgusting, too. And going to Chow H again this time to 25, Dirk Nowitzki. Boom! 2011 Finals MVP. Holy cow, that's nasty, man. Congrats to Chow. We'll nag up the Dirk for you, too.   Sounds like a lot of hoopla. We're back on this. Sounds like a lot of hoopla. It's with a brick. That was like the funniest thing when I was playing. Oh, I forgot about that. The whole episode was brief. It's classic overall, man. Trying to come in up to 99 is Pascal Siakam to 99. Standout memorabilia, game used for the Raptors. And game used to 99 is Steph Curry for the Warriors. Followed by three of 25, Isaiah Livers on the Rookie Auto for the Pistons. Congrats, Pistons. Danny C. It's the red inaugural ink variation. 10 of 99 is a Derek Fisher. So nasty. And the next one, too. And how about 28 out of 49 Jalen Suggs. Four-colored RPA. There we go. That's going to Regina. Congrats, Regina. Awesome card for you. So, so nasty, so nasty. Down to just seven group break spots on the night, guys. Three to go, an impeccable PYT. And four to go, an impeccable PYT. All randoms are sold out. All randoms are, in fact, sold out. I don't know. Order our patties. No, we're not over there. SpongeBob, you really think we're going to be over SpongeBob? No, I mean that part specifically. Makes the giants hurt. Lassie, that's true, Regina. Very true. All right, we've got a Kyrie Irving to 10. Followed by to 99. Chris Paul for the Suns. Nice one here again. Regina, two out of 50. Franz Wagner on the Jumbo rookie jersey. Rookie Pash, I should say. I did. That was so nasty. We've got a Jordan Noir 35 out of 49. Modern Marks for the Bucks. Followed by a 24 out of 25 RPA is going to be Charles Bassie for the Sixers and going to Brian R. We've got a 3 out of 10. Jamal Murray on the two-colored patch auto for the Nuggets. Congrats on that. That is game-worn Murray. That will do it for the break, everybody. Do a quick recap. No randoms or anything we got to do. We've got Franz Wagner, Chris Paul, Steph Curry, Austin Spurs, Legend, Charles Bassie, Kaskalsiakam, Dane Miller, De'Aaron Fox, Brandon Boston, Jr. Neek, Kevin Herter, Moses Malone. Autos, we've got Jamal Murray, Charles Bassie, Jordan Noir, Derek Fisher, Isaiah Livers, Payton Prichard, Mitch Richmond, Kobe White, David Thompson, Antoine Jamison, Kai Jones. That's to five, the Kai Jones. And Magd cards. We had Herbert Jones, five of five RPA. 28 out of 49 Jalen Suggs, four-colored RPA. Dirk Nowitzki, number six of 25, finals MVP. And Mark Subkratness, the big ticket, Kevin Garnett for the Timberwolves. That'll do it for the break, guys. Thanks again for the fill. Next up, we've got more iMac. One more.


The victory of the Conservative Party of Boris Johnson last Friday was greeted, of course, with a wave of jubilation in all the stock exchanges, the bankers, the capitalists of the world. Of course they were delighted, naturally, at this result, but not as delighted as some other people I could mention, the people who were really interested in a Tory victory and the defeat of the Labour Party. I'm referring, of course, to the closet Conservatives and Lib Dems in the present Parliamentary Labour Party. The fact of the matter is, you see, that these ladies and gentlemen have been preparing for a Labour defeat and willing and wishing for a Labour defeat ever since 2017, when their nose was put out of the joint by the fact that Jeremy Corbyn, despite all the predictions of the pundits and the 20% lead that the Conservatives had at that time, succeeded in galvanising the Labour Party, the Labour movement, in a marvellous campaign which almost led to the defeat of the Conservatives at that time. And despite what is said, and a lot is being said at the moment, we'll come to that in a minute, despite everything that's said about Jeremy Corbyn, the fact of the matter is this, one man, through his courageous activity, succeeded in galvanising and mobilising the enthusiasm of a whole generation of workers, of young people in particular, the youth, who overwhelmingly support Labour now, also to galvanise the Labour Party, and to give it a new lease of life. I think somebody said, an old friend of mine said on television recently, that he actually recovered the soul of the Labour Party, and that's a fair comment. Until that time as much, the Labour Party was pretty dead under the dead hand of the old Blairites who dominated and crushed the living daylights out of the Labour Party and destroyed its essence and thereby alienated a whole layer of the electorate. This fact must be stressed. Yes, they wanted Labour to be defeated because a Corbyn victory would not have suited them. Of course, a Corbyn victory would have suited the capitalist class, the bankers and capitalists, even less. There never has been, I think, in the whole history of British politics, such a venomous campaign of vilification and attempt to demonise or destroy an individual politician personally and politically as the vile attacks which have been constantly levelled against Jeremy Corbyn ever since he was elected Labour leader. These attacks, by the way, ought to tell us something. If a Labour leader is praised by the capitalist press, as Tony Blair undoubtedly was praised by the capitalist press, they should ask themselves the question that the old German social democratic leader August Bebel said before the First World War when the press one day praised him. He said, what have I done wrong? What has old Bebel done wrong that they should praise me? Well, that's quite an accurate assessment of the attitude of our wonderful free press. Free for what, I might ask? Certainly free for many pretends of telling the truth. Free for many loyalty to the British public and its interests. Yes, but not at all free from the shackles of big business and for the dictates of the ruling class, because those are the interests which are served by our wonderful media and how well they fulfilled that role in the recent election campaign. I say a campaign of vilification? There's unknown, it's unprecedented. I think I can't think of any example in my lifetime, this is quite long, of any individual that was so attacked and so vilified as Jeremy Corbyn and that should tell us something. Why was Corbyn the object of such hatred, such attacks on the part of the ruling class? Only for one reason, behind the hatred, there was another emotion, another passion if you like and that was fear. Oh yes, fear. This man, he's got his faults. My criticism of Jeremy Corbyn, he's free to criticize anyone else. Yes, but let's give him his new.  This is what they feared and above all they feared a Labour government rather, under Jeremy Corbyn, under these circumstances, under the pressure of the working class could have gone even further than what he proposed. Now they're trying to say, oh it was the programme, the programme was rejected and so on. The financial times the other day said that the socialist programme performed by the Labour Party has been now tested to destruction. Well, not so, not at all true. As a matter of fact, the basic ideas of Labour's programmes of nationalising the railway, the fat cats of the energy companies and so on, got a tremendous impact. The restoration of the pensions which had been stolen from the whole generation of unfortunate women and other things the national had, all this did connect in a big way. Unfortunately it was cut across by Brexit, I think that was the main thing, it's true Brexit, but this poisonous thing which is divided the whole country. And let's call a spade a shovel. What is Brexit? What's the whole business about? It's a struggle between two wings of the ruling class. Now the more or no less the interest of the working people of Britain don't enter into this, not in the slightest degree. And there's no way that any serious socialist should support either side in this gang of Brexiteers or Remainers if it comes to that. Yes, Labour did suffer as a result of ambiguous or confused position on Brexit. That's not an accident. That's the difference you know with 2017. In 2017 the same Labour Party that by the same leader Jeremy Corbyn got a wonderful result on the basis of a laughing radical program, so that the financial times is simply not telling the truth, but there was a difference. In 2017 Jeremy Corbyn and the Labour Party stated that they would respect the result of the referendum but they would fight. That's correct. They would fight to defend conditions, wages and the interests of the working people. That was a fair enough position to take. And that would have connected with millions of poor people of Labour, ex-supporters traditionally in the North East and in Wales who've got nothing out of EU membership, who have suffered, were still suffering terrible privation, poverty and employment and who feel neglected and rejected if you like by the political elite in Westminster. It would have connected. It did connect in 2017. The proof is there in the statistics. Yes, but there was a change. What was the change? The change was that under intense pressure from the Remainers, that's to say the Blairites in the Parliamentary Labour Party, Labour and Corbyn was pushed and pushed and pushed into a position which was, if it wasn't the Remainers, it was very close to Remain. That certainly alienated and repulsed many people, workers in the North East, who felt that this was enough, that Labour was trying to block their aspirations, that Labour was being undemocratic, was trying to stop Brexit by undemocratic means and so on and so forth. There you can see the revolt of many people in the North who are not conservatives, they're not Tories, they didn't vote for Boris Johnson or for the conservatives with any enthusiasm whatsoever, but purely on this poisonous question of Brexit. Who's responsible? You know, I was quite amused this morning to hear on the news that Emily Thornberry was now thrown a hat into the ring, it seems, looking for Jeremy Corbyn's job. You say, oh no, in private, she's going to say this in panorama tonight, apparently. What's that problem with interest? Oh yes, in private, if you please, in private, she warned before the election that Labour would lose because they had an ambiguous position on the EU, on Brexit. Oh yes, yes, and if we'd have accepted her advice and the advice of Sir Keir Starmer, what would the position have been? For Labour to abandon its ambiguous position and unambiguously embrace the EU and all its works. Abandon Brexit, yes. That would be like a red rag to a bolt of the people in the North, far from the peasant defeat would have been turned into an absolute catastrophe if the advice of these people had been heard. Incidentally, lots of people say lots of things in private, which are entirely meaningless and can't be proven one way or the other. But in any case, what I'm saying is this, that ultimately it was the bad policy, the wrong policy of the Blairites who represent what? What do these Blairites and the Peel represent? The interest of the Labour movement, the interest of working people? Far from it. They are a fifth column, a Trojan horse, representing the interest of the business class, of big business within the Labour Party. That's their interest. And since big businesses remain as a favour of staying in the EU, these guys, these girls and boys are also in favour of staying in the EU. Nothing more, no less. And now they've all come out of the woodwork now to heap abuse once again on the head of Jeremy Corbyn. These people in the Parliamentary Labour Party have had nothing on their mind for years. For years, since Corbyn was elected, they've had nothing on their mind. Only one objective, to get rid of Jeremy Corbyn. Now they seem to have succeeded, at least partially. Unfortunately, and it is very unfortunate, that Jeremy Corbyn and John McDonnell have announced that they're going to step down. Not immediately, it's true. And these gangsters now are pressurising them. No, no, that's not good enough. They must step down immediately. Yes, in order that they can stick the knife in and move, push the Labour Party they hope far to the right. If they could get away with it, this would really be a catastrophe if they could get away with it. But I don't think they will get away with it. I mean, what future would they be familiar with? To return to this gang, this Blairite version of Toryism, that's what it boils down to, closet Tories, that's all these people are. What future would that represent? And how they hate Corbyn. You see that on election night. Even before the result was announced. Immediately after the exit poll was announced, they were gathering like, I don't know, like a witch's Sabbath in the TV studio. All the old corpses, like as I said in an article, it reminded me of the old horror film, you know, the black and white horror film, The Night of the Living Dead. There they were, Ed Balls, Jack Straw was there, Alan Johnson, all these people. Yes, who was demanding now the expulsion of my mental brother. He wants the moment to be out of the Labour Party. Oh yes, of course he does. Now, let's call a spader shovel. These people want to blame everything on Jeremy Corbyn.  It's a complete, damnable lie. If anyone's responsible for the sabotage of Labour campaign, it's these ladies and gentlemen sitting comfortably in the PLP. Oh yes, Jeremy Corbyn made mistakes. Did Jeremy Corbyn make mistakes? Yes, I think in fairness, I have to say personally, I think that Jeremy did make some mistakes. Not the mistakes that these people are barking and being and crowing about. Not those mistakes, other mistakes. Now I speak to you as, you know, as a Marxist, as a dedicated Marxist. And you know, there is a difference. I made my position clear. I greatly admire Jeremy Corbyn as an individual, as a human being and as a dedicated socialist. And Jeremy Corbyn has all our support. He had our support, all the time that he's been elected in the fight against the right wing. He continues to have that support and that respect. Yes, but I have to say this as one friend to another. You know, a good friend is not somebody that always pats you on the back and says, well, you're right, of course, you're right when you're clearly wrong. Jeremy Corbyn is a dedicated socialist. Yes, but he's not really a Marxist, Jeremy. Not really a Marxist. He's what I would call, say with John McDonough, no friend of mine. He's what I would call a left reformist, an honest left reformist, a dedicated, courageous left reformist, but a left reformist. I basically still believe that it's possible to deform capitalism in a certain way. All the reforms that he proposed, whether we accept, we support those reforms. We support any movement to protect and defend the living standards and conditions of working people. That goes without saying, has a complete support. Yes, but the problem with left reformism, what I would sum it up in this way. It's very good as far as it goes, but it doesn't go far enough. That's what I would say. And the trouble is that left reformists tend to compromise. They tend to retreat. They're too nice, if you like. That's my criticism of Jeremy and John. They're far too nice, they've been far too nice against these gangsters that are constantly attacking them. And I've been trying to destroy them for ever since they were elected. This is a mistake. It was a mistake. The first mistake was not to allow the rank and file of the Labour Party to carry through a process, a democratic process, I hasten to add, of deselections, of the MPs. Yes, these gangsters in the Parliament today, but they're demanding the right to remove Jeremy Corbyn because they don't approve of him. Don't they constituency parties have the right to do the same with them? To demand their removal if they don't approve of them? Of course they have that right, it's in the Constitution. And the overwhelming majority of party members were in favour of deslection. And it should and could have been carried out at that time, some years ago. It was stopped. Why? Because of a fear on the part of the NEC or the Labour leaders or the trade union leaders in particular, and momentum by the way, who scandalously backed away from this position, they were stopped from carrying out the only possible policy for saving the Labour Party. Which is to purge it. Boris Johnson, by the way, was quite right from his point of view. When he was attacked and criticised by elements of the Tory leaders, he got rid of them without any ceremony. He expelled them. Why should we not do the same now? With people who have consistently sabotaged Jeremy Corbyn from the word go, I think we should and I think that was a mistake that he was not done before. Same with anti-Semitism, which is clearly a smear which has been invented and used in an unscrupulous fashion by people who wish to destroy Jeremy Corbyn. That's the only purpose of it, believe me, my friends. I've been a member of the Labour Party for 60 years. In my life, I found a single member of the Labour Party who was anti-Semitic. No, never, not once. And the statistics proved the part, the tiny, infinite, less than 1%, that they've never been taken up even. This is a dirty smear which has been invented. It should have been tackled head on. It should have been exposed. For example, the monstrous idea that a person is a anti-Semitic because he criticises the state of Israel. Well, I don't accept that. And by the way, the head rabbi should be asked, what's your position on Jewish settlements in the West Bank? What's your position on the atrocious treatment of the Palestinians? Nobody's ever asked this question in any TV interview of anybody. This is anti-Semitism. Don't accept it. And it should have been met head on. By retreating, you achieve nothing by retreating. Every step back that you take, these individuals demand 10 more. It shows weakness, and weakness, my friends, invites aggression. And on the EU, I've already stated that Corbyn and the others were pushed into a position, a disastrous position, of in effect supporting, in so many words, supporting your remaining Palestinians. Not completely. That would have been another disaster. No, no, no, no, no. This idea of preserving unity by making constant concessions must cease. It can only be decided, it must be stopped. The rank and how these people are on the offensive, they really are. They've got the knives out constantly every day on the television and the press and on the radio all the time, attacking Corbyn, attacking Corbyn, attacking the left, attacking this, that and the other, all of them. They want to stage a counter-revolution that be warned. These people, these renegades, that's what they are, they want to stage a counter-revolution in the Labour Party. I don't think it will happen, but it will only happen if you, my friends, if we pull ourselves together, I can understand people are disappointed, maybe a bit disoriented and so on. A bit upset, yeah, I understand that. Yeah, okay, you can mourn for 24 hours, but we haven't got time, because the knives already, the war has been declared. The parliamentary right wing has declared war on the Labour Party. They're pushing their candidates with the support of the mass media and so on. There's a danger here, and it's a big danger. If you do not want the Corbyn revolution to be reversed, then you'd better get active, you'd better get stuck into the Labour Party. We must organise ourselves, mobilise ourselves to defend the gains, the big gains that we've made by the Labour Party, now the biggest party in Europe, by the way, as a result of the Corbyn revolution, we must defend it and push it further, carry it to the end. That's my advice, that's our slogan. Carry the Corbyn revolution out to the end. That means that we must show the same determination as the right wing. They're very determined, by the way. They're very aggressive, they're very audacious, because they have the support of the capitalist class and the media behind them. We, my friends and comrades said, so the same determination in staging our revolution from below, from below to clear out the house. Take a big broom and clear it out. Through democratic means, through deselections, that's the name of the game, that should be the slogan now. That's our answer to all the vicious campaign organised, the anti-Corbyn campaign organised from the leadership, from the parliamentary party itself. That's the only way to deal with it, because let's clear out this rubble, this rubbish that's in our way, and have a genuine democratic Labour Party controlled by the rank and file, which will preserve the heritages and the genuine ideas of Corbynism, improve them, develop them and carry the whole position to the end to fight for a Labour government. By the way, I've had this point, this victory of Boris Johnson, it's very fragile, it will not last. He will not be able to carry out his promises, particularly if they go down the road of a no deal of praxis, but they're on course to do that by the way. The whole thing will blow up in their face. The swing to the right, if you like, will be replaced by an enormous swing to the left, and therefore the left must stick to its guns. We don't change course. We develop a genuine left-wing policy, fight up until the Labour Party conference, clear out the house and prepare the grounds in an immeasurable space of time, for a Labour victory and a Labour government pledged to real socialist policies to transform Britain in the interest of working people.


Am I terrified of putting them together? Absolutely! I'll be working on a couple of sets that are, to be honest, way out of my comfort zone. But I figured, you know what?  Now hit that like button if you'd like to try things out of your comfort zone. So I had a company called Remarkable Gifts reach out to me, and they actually represent several brands of 3D puzzles in North America. And they sent me two sets from two different brands. The first set here is called Mysterious Timer 2. The brand is called Time for Machine and this brand carries metal mechanical model sets. It has 62 pieces and this is made out of stainless steel and it is 116 x 84 x 71 millimeters when it's completed. And according to the back of the box, this set does look to include the tools that you need to complete this. Which is fantastic because to be honest, I wouldn't know where to get these tools or I don't even know if I have these in my house. But anyways, really this is more of a model building kit, which you know is why I say this is totally out of my comfort zone because I've never really done models like this before. And the next set that I have here is called Treasure Box. The brand is Beater Models. It has 174 parts and it is made out of plastic and wood and it is 86 x 130 x 130 millimeters when it's completed. And what's great about them is that you don't need any glue. And again, this one is kind of like a model building kit as well, which I have absolutely no skills for. But what's good about this particular one is that the level does show that it is easy. So this will probably be the one that I start off with first. Now, what's really interesting about both of these sets is that they both have working mechanisms in them. So once you've completed them, you can actually use these. You can use Treasure Box for what looks to be jewelry or coins or whatever small items you have at home. And with the mysterious timer, you can actually set it to go off for up to an hour. So honestly, this is pretty darn cool. Do I think they're going to be fun? Absolutely. Am I terrified of putting them together? Absolutely. I feel like the timer is going to be the hardest one out of the two of these here because I'm seeing all these little, what do you call these, gears and whatnot. And that's kind of making me nervous. They look really small. But judging by the image on the box, I mean, it's going to look really nice once it's completed. It's definitely something that I will have on display. I'm definitely going to work on the Treasure Box first, considering that the difficulty level is easy. But I'm pretty sure even though the timer has way less pieces than the box, I think this one's going to be the hardest one and probably most likely take me the longest to complete. But we'll see, right? I don't know. I might finish them both really quick. I might never finish them. I don't know. I guess you'll just have to sit through the video and find out, right? Now let me know down below if any of you guys have tried any sets from these two brands. And if so, what was your experience like? I'll be curious to see how I think of it. But there's only one way to find out. So you know what? I'm going to stop talking now. Let's open these boxes up and let's see what I've gotten myself into. Okay, dokes. So I have both sets here. I think I'm going to open the wood one first. So let's put this one at the side for the minute. And it has plastic wrap. So let's get this open first. Let's open this up. That comes off very nicely. It's a nice box, really. All right, let's see what we have here. Oh, it's this. We have ourselves a cloth here. What is this for? We have here our books to be our assembly instructions. Now, they do have the instructions in several languages inside the booklet, which is great for anyone who wants to try these out. The way that it shows the assembly really does remind me of putting together the cubic fun 3d puzzles, kind of like just showing the step number and the arrows pointing to wherever you need to add the piece in. So I don't know, maybe it won't be as hard as I think it'll be, but we'll see, right? Honestly, this is the part that makes me nervous, the actual putting together of the mechanism itself. So I don't know. Either way, I think it's going to be a lot of fun. It never hurts to try new things, guys. Okay, now I'm really scared. But the finished product, I am definitely sure is going to look amazing. We have here, I believe the instructions said this is what you use to pull the pieces out of the sheets. So we'll put this on the side here. Well, you know, we'll put it back here just so that we don't lose it. And what are you? I'm kind of seeing what looks to be what this item is in this picture here, and I'm guessing you use this for the gears. It might be some kind of lubricant or something you have to put on the piece for it to function properly. We got like little clear rubber bands. Let's open this up and see what this looks like. Oh, wow. So here are the wood pieces. This is very nice. There's the thickness of the wood, which is not bad really. And the detail on it is fantastic. Look at that. This is very clear, whatever this printing is on this wood. This is fantastic.  Wow, there's a lot of small bits to it as well. But you know what? I'm pretty sure, as I said before, this is going to be fun. So that's what comes in the Veeder model set for the treasure box. So what we're going to do is we're going to put this to the side because now I want to open up the metal model. All right, so let's open this one up now. Again, this one has plastic wrap, so let's get this off first. Slide you out. Ooh, this one looks pretty fancy. Check out those little gears, huh? And I'm guessing this is the mechanism for the timer. So here we have our instruction, but oh no, look at this. I like this. It comes in like this folder with all the stainless steel pieces. And it does stay on the box that this can have some sharp edges to it. So it does not recommend children too young to mess around with this. But let's put one of these out and let's take a look. Ooh, this is really cool. Who's that? Is that me? It probably is because that's pretty much how my hair looks after I wash it and let it air dry. So yeah, that's for sure me. This looks to be one of our tools. It looks like it's a file. So I'm guessing we're going to have some instances where we're going to need to file down some sharp edges perhaps. This I believe is to kind of clean the metal so to polish it up a bit. And this is our instructions. Now, I'm just skimming through these instructions right now. So I can't really tell whether this is pretty straightforward to follow or not. Obviously, that'll be something we'll find out as we go through putting this model together. See, ah, here it is. Look at that guys. It's got everything we need here, which is fantastic. I'm pretty sure I have these somewhere in my house. But you know what? The fact that they provide you with all this is really, really useful. All right, this is super neat. I really like the way this is laid out for you. But you know what? I'm never going to know what I think to it until I try. So I'm going to stop talking now. Let's get started on one of these and let's see what I think to the whole experience. So like many other 3D models, you really need to make sure you stay organized during your completion process. Make sure your area is clear of anything else because depending on the model you're working on, you can have a lot of very, very tiny pieces involved.  Now, the treasure box did come with a cloth and I used this as kind of like a construction mat. And it was good because it called all the mess that the lubricant stick left behind when I had to use it for certain steps. And it did make quite a mess at times. The timer set did come with some spare pieces, but you know, sometimes it just won't be any of the pieces that you might end up losing. But that sounds more like my kind of luck. It was pretty challenging to follow what was going on in the directions at times. And I struggled with this more for the metal timer because there was a lot of bending and manipulation of the metal pieces. And I'm not sure if these kind of instructions are pretty much common knowledge for experienced model builders, but I struggled to understand that in the beginning. But as I moved on with it, I started to get more of a better idea of what I had to do for the treasure box. It just had a lot of aligning and snapping bits together. So it was a bit easier. Now, something else that I dealt with when I was putting these together was that it made my fingers hurt. And it happened more with the timer. And well, that was because it was metal. The edges did hurt at times, but the box does warn you about that. And I don't know if they do sell special gloves to wear for model builders. But let me know down below if you know if that even exists. And as a side note, make sure your fingernails are not too long because I really struggled picking up and placing the little tiny pieces into place. It really made the construction a lot harder. But once I took care of them, it was a lot easier. And I know that might seem random to some, but it really does impact the whole construction process. Now, one major thing that I noted was that both sets are not forgiving. And what I mean by that is that if you make a mistake either by snapping the wrong piece in or placing the right piece in a slightly different way, it can be very difficult to correct it. And this went more for the treasure box. I had a number of instances where I put a snap in the wrong way. And it was so hard trying to get it back out because I was just trying not to break it or cause any damage to the surrounding pieces. The only damage that did occur was that I chipped the bottom corner of one of the wood pieces, but thankfully it was still usable. It wasn't major and it still held the snap in place. And each page of the instructions involved a number of pieces. So if you realize you did something wrong, sometimes you had to take the whole section apart and do it over again. But again, I think this was more because of my lack of experience. I mean, really, I think every issue that I had was because of my lack of experience. I'm not going to lie. But as I had quickly mentioned before, both sets did have some pieces that were very small. And at times it was really hard to see, especially with the plastic pieces for the treasure box because, I mean, not only were they small, but it was clear plastic. I don't know if experienced model builders actually use any special tools for model building. Or if they even use a special magnifying lens too, so that they could see what they're working on because really I feel that would have helped. But at the same time, I do realize that this is just the nature of this kind of project. Any working mechanism is going to have a lot of small pieces to it. It's just intricate. It is what it is. But hit that like button if you ever thought about trying something like this, or if you have tried model building before, and let me know down below what kind of sets did you try. What are your thoughts in general about model building or 3D puzzling? Now, I don't know much about the different brands of model building kits, but I felt with, you know, even with my lack of experience, the quality overall was absolutely fantastic. I mean, the boxes themselves look pretty fancy, and they do provide you with just the right amount of items that you need to complete this if you don't have anything. Now, as you know, the treasure box was a mix of both plastic and wood parts. And again, the print on the wood was great. The details were very clear. It was actually quite intricate.  Don't be a beast with this kind of stuff. And the plastic was strong. It was not cheap plastic. I really had to put quite a bit of force at times when I made a mistake with putting the plastic pieces together, and it never cracked or lose its strength, even with my beastly force. And as for the timer, the metal does look thin, but it's pretty strong as well. Strong enough for me to find it difficult to manipulate at times when I had to. But I really liked the finish of it. And they do provide you with a polishing cloth if you want to clean it up a bit too, which is nice. And that set also provided you with pliers as well, which was great. I even used it for the treasure box at times to help me with certain bits too. But overall, this kind of puzzling is its own kind of beast. And I don't mean that in a bad way. For me, this was really hard, but I'm sure you're waiting to know if I actually got them to work. So let's see the treasure box first. Ah, success. I feel good about this. This took me about three hours and 15 minutes to complete. Now let's see about the timer. Okay, now we're turning. One. Oh wow, this is hard. Two. Oh gosh, some of the gears are not even moving. This has taken me about four hours so far. So yeah, it's not quite working. And I think I know what the problem is because I have been struggling trying to get the gears to line up. And I think my biggest problem is that I probably didn't tighten it well enough. They're kind of dancing around a bit. So yeah, some of it moves and sometimes it does meet, but other times it struggles a little bit. Yeah, I think once I tighten them up a bit, they're not gonna like dance around too much. So you know what? I think once I do that, it'll be fine. I'm not giving up on this. I'm gonna make this work. Even if I have to take it all apart and start over again, I'm gonna do it. And when I do, I'm gonna let you know about it. It'll be like a victory dance or something. I'm not gonna dance. But I did have a sense that when I pick this particular model that I probably bit off more than I can chew. I really should have known better because of the difficulty level. But what can I say? I got bolted. I will not be defeated. I'm too stubborn for that. But I mean, I mean, this was like one of the coolest looking models they had. And even though it's not quite working properly yet, I mean, look how cool this looks. This looks really nice, even as a just as a display piece. So I'm honestly, I'm quite proud of what I've done so far. But if you're really looking to try something new and something with like a really big challenge to it, I'm gonna leave the link to remarkable gifts down below so that you guys can check out all the sets that they have available for both the Veeder models and the Time for Machine brand. And if you're not quite sure what to pick, pick the treasure box. Honestly, considering that I hadn't a clue what to do, you know, it was on the easy level. So I managed to get it working and it looks fantastic. It's really cool. It's beautiful to look at. And you know, I got it working too. So you know what? If I can do it, anyone can really. And if you know anybody who's really into this kind of modeling or puzzling, I highly recommend these as gifts. And again, I am not giving up on the timer. So be on the lookout for an update at some point because I know in the end it is going to be awesome. Well, guys, I got some more review videos coming soon. So if you'd like to hear what I have to say about other types of puzzles and other brands, be sure to subscribe. But if you want to watch another video before you do, I'm gonna leave another one right here so that you can check that one out. Well, thank you all for watching. Happy puzzling, and I will see you in the next one.


Hai, semua. Selamat datang ke Ketua Ketua Ketua dan selamat datang ke Klik Thao. Terima kasih. Sama lagi. Jadi saya akan bercakap tentang Ketua Ketua Ketua Jadi ini kata-kata benar-benar memperbaiki kamu untuk sebenarnya tahu sebabnya Ketua Ketua. Jadi sesiapa di sini tidak tahu Ketua atau kata-kata? Maaf. Jadi kamu harus tahu tentang Ketua dan sebenarnya kamu harus memperbaiki Ketua Ketua Ketua dengan Jonathan Tuffing kerana Sebenarnya saya ingin bercakap tentang Ketua tapi kemudian saya melihat presentation Jonathan dan bercakap tentangnya. Jadi saya akan bercakap tentang perkara yang tersebut. Jadi anda telah bercakap dengan presentation Jonathan dan saya rasa ia sangat menarik. Saya rasa ia sangat menarik. Untuk apa yang saya ingin bercakap? Kerana ada komponen yang berbeza dan ini adalah pilihan yang tersebut. Jadi pilihan pertama adalah menghadiri dan bagaimana anda menghadiri pilihan yang berlaku, bagaimana anda memperbaiki pilihan yang berlaku. Pada kemudian, kita akan bercakap tentang pilihan yang berlaku, bagaimana anda memperbaiki dan melahirkan pilihan yang anda memperbaiki. Dan kemudian, tentu-tetu saya akan bercakap tentang perkara yang anda tidak tahu tentang pilihan yang berlaku. Cuma anda tahu tentang pilihan yang berlaku, yang tidak pasti mengetahui, jadi saya akan bercakap dengan perkara yang tersebut dan esok yang yang akan saya bercakap dengan pada pilihan yang berlaku. Pertama, pilihan yang berlaku. Berapa banyak perkara yang berlaku kepada pilihan yang berlaku? Hai. Terima kasih kerana mengetahui. Ada sesiapa? An example of template engine? Or any template engine, not template engine? Or just go. Or any template engine? Ya. Template engine. So we didn't go. This is really how it works. You have a client sending a request to the multiplexer. Dengan handle, handle, and start talking to model database. It will send all those things to template engine to generate the content using the template and finally we'll go back to client. So this is where it is. And this middle part here is what I'm going to talk about today. It's supposed to be orange colour. It doesn't come out too much. So a template engine essentially does this. It takes data, ...data, ia mengambil tembakan, ia mengambilnya bersama... ...dan kemudian mengambilnya sebagai konten, untuk menjelaskan bagaimanapun. Kemudian, kembali ke tembakan... ...dia sebenarnya... ...dan kembali ke tembakan, ia sebenarnya... ...tidak sebenarnya, tapi hampir seperti dua tembakan. Satu adalah apa yang dipanggil sebuah tembakan yang tak logis... ...yang seperti masjid... ...hendoba. Jadi, anda cuba sebanyak yang mungkin... ...atau cuba tidak memasukkan logis... ...untuk tembakan. Yang lain adalah, tentu saja... ...JSP, HEMO, JPHP... ...yang lain adalah... ...saya mengambil semua logis di dalam tembakan. JSP adalah... ...basis-basis semuanya. Semuanya di dalam tembakan. Jadi, apakah tembakan yang memasukkan tembakan... ...dan jenis jenis jenis jenis ini? Sebenarnya lebih dekat dengan logisnya dan... ...tapi tidak secara logis... ...sebabnya jika saya memasukkan... ...saya rasa anda akan melihat sedikit apa yang saya maksudkan. Ia memasukkan sedikit... ... Ground Princess Tempakan sebab... ...�� saham passionateys parteak. Bukan dabei saya berkenal dengan hoyang tempat yang saya cachuk untuk memasukkan tembakan. Saya eensienyaitu kita. Dan itu adalah Tata PTK. Namun, ilangnya bukan trespatan.32 lagi dibanyak. Jadi, apakah jenis jenis jenis jenis jenis jenis jenis? Kenapa betulnya jenis jenis jenis jenis jenis jenis jenis jenis jenis jenis? Jenis jenis jenis jenis jenis jenis jenis jenah... ...änir iaito? dan HJML template. HJML template berguna dari template text. Template text basically contains almost everything that you need. HJML template contains those things that are very specific to HJML. For the template engine, there are two parts of it. The first part of it is something you need to put into the handler. So what do you do in the handler? You put two pieces of things. The first part of it is really to pass a template whether the template is a string or a file. So you pass a template. The second part of it is you need to execute the template. So it's just these two things. You pass it and then you execute it. The second part of the template engine is the template files or the template itself. And the template in the simplest form is something like this. Can you see this? So this is HJML. And what you have is double curly brackets. Start and double curly brackets. So this dot looks very harmless and looks very simple. It's actually quite complicated. It's one of the most important things that you need to think about in a template. Sorry, in a go template. Because that basically contains the data that is passed from the handler to the template. So if you say, so the rubius here if you say if you use Rails or you use Sinatra, you have an instance variable. You put an act and then that instance variable is passed on to your template. So here you don't pass on anything at all. The only thing that you pass on, whatever you want to pass on to a template is the dot. So everything, the whole universe is actually in the dot. So everything you want to pass on to a template is in the dot. And whatever you do next with it is basically you manipulate it out. So let's look at some code. This is a handler. And say you have a handler called process. So these are two parts of it. First you pass the template. This is one form of passing. So you're actually passing a file here. But you can also pass strings. You can pass anything. And then after that you execute it. So you execute, you pass on the writer which is basically the response writer. And you pass on the data that you want to pass on to a template. In this case, I pass on a string. Hello world. But in other cases, you can pass on a strut where you can connect on your data. You can pass on a map. You can pass on whatever slides or whatever you want to pass on. So that's the basics It seems very simple.  Everything is in the dot. What else is there? So it's actually quite a bit of stuff. And at least in my opinion, I think the code template is kind of free because it doesn't actually do what you think it actually does. And I'm going to talk about three things which I think is really interesting. You might already know it if you haven't. Jonathan probably knows it. But these are some things I don't see often or I don't see at all in other template engines. So the first is pipelines. So what I mean by pipelines? Just now you saw dot. Right? It's only a dot. But actually it's more than a dot. You can actually do stuff like this. So you can have let's say P1 is a dot or whatever variable if you get happier. You can pipeline it to P2. So the output of P1 goes into P2 and output of P2 goes into P3. And it's processed in the pipeline. So let me show you an example. Again, HTML. So let's say I have this is a constant across this example. But let's say I have constant 1, 2 dot 3, 4, 5, 6 and I type it to printf and then I have the printf string. This will generate 1, 12.35. So you can actually pipeline the output from 1 to the next and to the next to the next to the next. So pipeline. Any other web template engine you've seen with pipelines? I think Angular. Angular has pipeline? I don't know the symbol but I do remember acting upon the value. Okay, has full test. Yeah, full test. But syntax might not be the same. Syntax is not the same. Yeah, but it's similar. Okay. Yes, Kai. Thank you. Okay. So again, it's functions. Functions in GoTemplateThing. It's a little cumbersome but it actually is again very powerful. So, just give an example here. Again, you have a function. You just said you find let's say you want to format the date that you want to format accordingly. You create a function called format date and then as you before you actually pass a file and execute it, what you do is you add the function, you give it a name, label fdate and then set it as a function using the fung map function. Sorry, the fung function and then you pass a file as per normal and you execute it. Inside your template, you can now use you can now use fdate. Basically what you've done is you've created a function and you pass it on to the template. Of course, it looks a bit cumbersome. Wow. Do I every handler do I need to create my own function and then set it in? Well, you can if you want but you can also put some utilities to automatically create a fung map so I can fold it in. So, this is the method of the way how you use to update a dot so basically you are formatting the date for the dot. That's one way of doing it. Of course, the other way is your dot and then you pipe it to your fdate. And the fdate it comes out of something else can pipe it to something else. You can come up with different variations of it. So, second interesting thing I think about the Go template engine is the the third part. Well, unless you don't have the dot which is where the dot. Unless you don't have the dot just the function. Just the function? I don't have anything. It's an error. You're not passing a parameter to the engine. Of course, if your function does not take any parameter, that's fine. But if your function takes a parameter, that's fine. I thought the fdate didn't have. Or med date. Oh, okay. But the argument is taken as time now. Oh, which is the dot. Which is the dot. Ya. This is the dot. So, you're passing time dot now. To make it a bit clearer, could you go fdate time dot now in your template? You can. You can. You can. I mean, I'm just doing this to show you can type or you can put in any other data in the date. So, I think one frequent use is really you put in stuff in a strut and then you pass a strut as a dot and then within the strut you can actually use the different parts of the strut. So, it's a date and date. The third thing about co-web templates is aware and what do I mean by that? So, when you display the content on a web page, according to where you place it, the formatting of the data changes. So, it is context aware. It is aware of where you are placing the data. So, I'm going to show you the code example. I habitually use this. So, this is basically a string. I ask so, you have angular brackets, you have double quotes, you have single quotes, you have question mark, you have colon. So, it's a test. Now, I put it in this. I put a dot here. Within this, I put a dot in the hash wrap. I put a dot when Q equals 2 and I put a dot under as a JavaScript function. Let's see how it comes out. So, this is how it comes out. As you can see, all of them are different. It depends on where you actually put the data. It comes out differently. So, this is a bit messy. Let's just show your table. The original text is here. And you just put it with a normal div. It converts all the angular brackets into 100% LTE, semicolon and so on. You... What's that called? html? html They call it URL encode. You put it in the hash wrap. Second one is the html encode. Oh, sorry. First one is not. First one is probably call it html. Escape. Html is escaping. You put it in the hash wrap and you put it with the... as a what is it called? Curry string. Curry string. And it changes as well. And you put it in JavaScript. It's a little different. So, it changes according to where you put it. And I would like not actually seen any other about company that does this, though I have to be wrong. This is something I thought is pretty cool. But why would you want to do that? It's not like kind of crazy thing to do. So, obviously this is the reason, right? Because this is a very obvious reason. There are other reasons but this is a very obvious reason. And for this, I actually want to show you a demo. So, let me show you the code first. If you can see. Okay, you just ignore this too. Like if I do this here and I output this here. So, if I put this, right? So, and I have a form that summits. Okay. I have a form that that does this and I have a input that enters some script in it, right?  Let me start this. But in this case, what happens is that it converts it into this. So, what happens is basically converts the angular brackets and everything accordingly. And then it just turns out into normal stream. Display it on the browser. Of course, you can actually escape this. So, what happens if we don't do this? So, the other thing is you can you can remove this. You remove the existence protection and you put template.html. Basically, you say, look, this is an HTML. Like, don't convert it. You blow it up again. So, this time. Oh, okay. Sorry. Technical problem. I did not save the file. Okay. Let me compile it again. It comes out. The script actually comes out. So, that was an example of how you possibly use it. In fact, the thing about it is you don't actually need to use it because by default it protects you from this kind of attacks. You can actually escape it if you want to but then you actually need to explicitly do it. So, that was a demo. And end of with a sales page. So, this is my new book. Go Web Programming. This is actually extract one of the chapters in my book and I'm halfway through writing it but it is already in Early Access. If you want to you want to get Early Access and use it discount code if you're 50%. So, it's 5.0. You are aiming to finish this file. So, I should finish writing around July and it should come out around August, September. Okay, a little bit faster. I've been pushed like crazy by the politicians. Go is hot. We need to dilarit soon so, it's to beat the competition. Sending all my minds and opinions during this. Okay. So, that's it from my talk. Thank you. This is my email and my Q&A. He's taking on a know-it type of experience with Go.