Good afternoon, and I want to thank you all for attending today's lecture. So it's my pleasure to introduce Joanne Stubby as the 2013 Steenbach Lecturer in Biochemistry. So I'll try to keep the remarks short so we can get to the science, as Joanne would say. I thought I would begin by talking about Harry Steenbach for whom these lectures are named. And so as many of you know, he was a professor here in biochemistry, and he discovered that UV irradiation of food increases their vitamin D content. And this in turn resulted in the cure for rickets, as well as has many other consequences for human health. And here's a photo of Professor Steenbach giving a little mouse the suntan of its life. The lectureship, the Steenbach Lectureship, is one of the most prestigious on the UW campus and was made possible by funds provided by the late Evelyn Steenbach, who was Harry Steenbach's wife. And she and herself was a biochemist, as well as a philanthropist in the Madison area, as well as throughout Wisconsin. I don't know the animal. In addition to great science, Harry Steenbach also had great foresight to patent his invention, and he did this with his own money and this subsequently created war, which of course greatly contributed the university as well as science and the science in the state of Wisconsin. So when I was thinking about Professor Steenbach, I was thinking how much he and Joanne have in common, including the fact that both have trained a huge number of biochemists. Perhaps the most relevant one for today's talk is Hector DeLuca. So Professor DeLuca was trained by Harry Steenbach, and he in turn hired Joanne to UW in 1980 as an assistant professor in the Biochemistry Department. And she remained here until 1987 and was granted a tenure and she won the Pfizer Award in enzyme chemistry during this time. So in 1987, she moved to MIT in the Department of Chemistry and she remains there until this day where she still runs her lab. So Joanne is very well known for her work on radical mechanisms in enzyme chemistry, and I just want to pause, but I've got to show I think the only surviving photo of Joanne during her Wisconsin years. So when Joanne was teaching 501, you never knew what to expect and there's a very nice story that goes along with these photos which you can ask Joanne at the reception after the talk. I want you to know that NERD-D had not been discovered yet, but because I was going to MIT they thought I was NERD-D. So Joanne, like I said, is very well known for studying complicated enzyme reaction mechanisms, particularly those involving radicals of one sort or another. In addition, she's also made significant contributions to the studies of DNA cleavage by gliomycins, de novo purine biosynthesis, as well as phb synthesis by bacteria. In addition, she's won numerous awards, two of which are shown here. So just about five years ago, she was the Everson lecturer in biochemistry and in 2008 she won the National Medal of Science. In 2010 she won the Franklin Institute Award in Chemistry, and she's also won the Welch Award in Chemistry. So I'll finish up the introductions with that and I'll let Joanne take over and I'll just remind everyone that there is another seminar tomorrow at the same time and in the same room and there's a reception in the biochemical sciences building immediately following the seminar. So let's welcome Joanne to Wisconsin. We're all coming to listen to my talk today. I always love to come back here and this slide sort of is some of the things I have my fondest fondest remembrances of. I think it's appropriate that in the steam box lecturer in that I love milk and my favorite thing was ice cream and back in the days when I used to run quite a bit I used to eat a lot of ice cream. And of course you couldn't have either of these without our friends and when I was here on the nightly news which is at 10 o'clock they used to have segment for cow of the week and so that's one of my fondest remembrances. I also learned a great deal when I was here for example I knew no molecular biology and by going to seminars as a young faculty member sort of trained much more on the chemical side I realized that if I didn't learn molecular biology I would be left in the dirt. I taught with Cleveland and listened to him listened to all his lectures on kinetics and isotope effects and used to ask a lot of dumb questions during these lectures and that's how I figured out a lot about kinetics and isotope effects and hopefully help some of the students figure out things they didn't understand as well. And so here's a picture of one of my fond remembrances of Mo and his two kids and I used to babysit for them when they used to go to the opera and they used to go to Australia quite a bit and this looks like looks like a little teddy bear but it was a quala bear and then my other friend who recently passed away Chris Race was in the lab next door to me and he taught me genetics and how important genetics were in integrating biochemistry with trying to figure out what was going on back inside the cell. So I'm grateful for all these people. I lost a pie in the face bet to Race but I have won 20 pie in the face bet and here was my giving Race a pie in the face bet and this one that I lost I should just share with you all about that little takeaway from my time which was already getting shorter. But I didn't really lose this bet because I bet him that he would learn how to drive. He was four years old he didn't know how to drive and that he wouldn't buy a sports car since I figured he is no way his wife would ever allow him to buy a sports car. He learned how to drive sort of. I mean he used to drive in his gear going 10 miles an hour but he learned how to drive and he bought a sports car so I lost a pie in the face bet anyhow. So I have really fond rememances of Madison and Henry Mall and what's amazing I think is if you I was trying to look through the hundreds of photos I have now I mean back in those days we didn't take photos right so there's a lot of things I have in my brain which I wish I had on the screen but they're not there. But anyhow I'm grateful for having been here. I had a great time doing science in Madison. Okay so the title of my talk initially was radicals your life is in the hands and I meant that title of the talk to be provocative that is radicals have many meanings. For example I was at Berkeley in the late 1960s when people used to jump when the then governor of California used to dump tear gas on Berkeley's campus and I was going to give a general lecture but in the end two days ago I decided I'm not giving a general lecture I'm going to tell you what I'm excited about so hopefully most of you will learn something from the first part of my talk and see how anybody could spend you know 35 years of their life working on one protein. Okay and I'm going to show you I'm going to talk about a question and the protein ribonucleotide reductase isn't going to show you today this enzyme which has a couple of protein subunits can catalyze an oxidation by a tyrosyl radical of assisting to a thyle radical and the distance is over 35 angstroms. And the question is does that really happen and how can you go about studying this process and today what I'll do is freely sort of give you an overview of how we've been able to use site specific incorporation of unnatural amino acids in conjunction with kinetics and paramagnetic resonance spectroscopic methods to learn quite a bit about this unprecedented reaction in biology. Okay so I'll start by giving you some background ribonucleotide reductases which I'll call RNRs are responsible in all organisms for the conversion of nucleoside diphosphates to deoxynucleoside diphosphates that is they reduce both purines and pyrimidines and consequently supply all the monomeric precursors required for DNA repair and DNA replication. This one enzyme is also largely responsible for controlling the relative ratios of the deoxynucleotide pools and the absolute amounts of deoxynucleotide both of which are fidelity which are essential for the fidelity of these processes. And the enzymes are regulated at every level imaginable and this is a major purpose of most people working in the field today. For example you need to control which substrate is reduced best controlled by binding to at least two sites maybe three of allosteric regulators so if you want to reduce ADP the GTP needs to bind if you want to reduce GTP TTP needs to bind et cetera and we'll talk a little bit about regulation but not in a lot of detail. So the other thing that's important about this system and I think I could have spent my whole lecture talking about this but have decided to talk about the chemistry that I'm most excited about is that this has been the successful target of three drugs that are now used clinically and two more that are in clinical trials all of which have different targets in this complex series of transformations I'm going to allude to over the next 45 or 50 minutes. Okay so what is the actual reaction catalyzed by these enzymes the enzymes catalyze a simple transformation cleavage of a carbon hydroxyl bond formation of a carbon hydrogen bond this is a reduction reaction two cysteines in the active site on the bottom face of the sugar are oxidized to a disulfide providing the reducing equivalents and there are enzymes inside the cell here I've indicated thyrodoxine thyrodoxine reductase which re-reduce the disulfide back down to two cysteines which is essential to have multiple turnovers so one substrate again is one enzyme is working on four different substrates but in addition to these two cysteines on the bottom face there's a third cysteine in the active site which we showed now back in 1989 had to be oxidized to a transient bio radical to initiate this reaction and it turns out that while I was at Wisconsin in the first few years in MIT I spent a lot of time studying the detailed chemistry of this reaction and what we showed is that this process involves complex nucleotide and protein radicals and that it's initiated by removal of a hydrogen atom from the three prime position to initiate this complex series of transformations and today what I really want to focus on is where does this sulfur radical come from okay so this is a transient oxidized amino acid radical that plays a key role in deoxynucleotide formation and it turns out ribonucleotide reductases have been classified based on the metallocofasters that mediate the oxidation of a cysteine to a sulfur radical so we now have structures of these three classes the place where the nucleotide reduction occurs is the same in all three classes it's a 10-stranded barrel here's the nucleotide here are the two cysteines that become oxidized concomitant with substrate reduction there is a finger loop in the middle of this barrel and at the tip of the finger loop is the cysteine that needs to be oxidized okay so in addition I have a cloud here and what was most surprising to me about comparing the structures of the three systems is despite the differences in the metallocofasters that the oxidant was sitting directly in the same place in three dimensional space under the cloud okay there's little sequence homology between these systems and so what I want to show you very briefly is what we know what the cofactors are with class 2 or class 3 and then I'm really going to focus in on class 1 where I'll show you this oxidation is very unusual and unprecedented okay so what do we know about the class 2 and class 3 the class 2 enzyme uses nature's most beautiful cofactor I think Perry will agree a denisal cobalamin and we know that from from decades of studies that this kind of a cofactor involves mollusks the carbon cobalt bond to generate a five-pronged deontia denisal radical and what you see when you lift up the cloud is this corn ring and this axial ligand which is going to do the chemistry we don't see in the structure but it's sitting right adjacent within a few axons of the cysteine that's going to be oxidized so the mechanism of oxidation of cysteine to a bio radical is thought to involve direct hydrogen atom construction okay if you go to the class 3 enzymes they are now part of a super family of enzymes with pioneering work coming from this department that use a four-iron four sulfur cluster and acidenosilmothione not as a methylating agent what you learn about in introductory biochemistry but again you have reductive cleavage of the carbon sulfur bond to form the same five-pronged deoxy denisal radical and in the case of the class 3 enzyme it generates a glycol radical in the polypestide backbone and over here if you looked up the cloud this is alanine but this is where the glycine is sitting right adjacent to the cysteine that needs to be oxidized and so again the oxidation occurs over a few angstroms difference at distance by direct hydrogen atom abstraction okay so these are anaerobes and these are found in algae and in many kinds of bacteria and the system that most people know something about is the class 1 enzyme which and specifically the class 1 A enzyme which is found in humans and also in E. coli which is the system i'm going to be talking about today and so if you pick up the cloud what do you see you see two tyrosines okay well tyrosines are not oxidants so the question is if this model holds how do we how are we going to oxidize these two tyrosines to be able to do hydrogen atom abstraction and so when you look at this protein which was first characterized by right now many years ago there is a second subunit besides the common subunit where all the chemistry has happens and this sub second subunit has a di ferric tyrosyl radical cofactor okay so there are a couple things that are unusual on number one where does this tyrosyl radical come from it comes from it's it's formed by chemistry with a metallic cofactor and that's something I'm going to talk about tomorrow how do you convert tyrosine to a tyrosyl radical okay so the metallic cofactor plays a key role in generating a tyrosyl radical now for those of you who don't think about radicals which is probably almost everybody in the audience um a tyrosyl radical has a lifetime of a microcephal solution yet if you look at the bacterial enzyme the lifetime of this radical is four days okay pretty amazing and the human enzyme the lifetime of this radical is 20 minutes okay still amazing um if you reduce this radical by dumping in an electron and a purge on the enzyme's dead so this radical which i'm going to call the stable radical throughout the rest of my talk is essential for catalysis and um again its job is to oxidize this cysteine to a sulfur radical yet it's on a second protein and so the question is how does this oxidation occur and what i'm going to show you is the model has been it occurs over 35 angstroms and what i'm going to try to do is show you the kinds of experiments that we've tried to carry out to test this very unusual model okay so this is um a model um a docking model we have a structure of the large subunit alpha and it's a dimer which is the same in all ribonucleotide reductases this is where the cysteine is that needs to be oxidized it's allosterically regulated so here's an allosteric binding site which controls which substrate is reduced um and here you have the second subunit beta two and this subunit has this di ferric tyrosyl radical cofactor which is essential for activity you reduce it the enzymes dead so um the question is where did the smart docking model come from it came from um early studies by eklings who saw both of these structures who docked them all proteins together based on shape complementarity so um in the beginning the closest you can get if you don't move any of the protein the closest you can get um between the tyrosyl radical and cysteine that needs to be oxidized is about 35 angstroms a long way but all of you is biochemists know that this thing could undergo all kinds of conformational changes and maybe this could be moved much closer to that and when I began working on this problem a while uh a long time ago now um I thought that that was probably going to be the case okay so the other thing I need to tell you is just at the outset the system is extremely complicated okay I'm not going to tell you all the complications I'm going to give you sort of my overview take on this I'm happy to talk about the details to anybody that wants to hear them but I'm going to show you the kinds of experiments we've done the conclusions we've drawn um but suffice it to say it's complicated so the other thing that I think is important to know is the enzyme behaves um sort of like with half sites reactivity this is alpha and beta this is alpha and beta you have to successfully complete the oxynucleotide reduction on one alpha beta pair before you do chemistry on the second alpha beta pair and I'm not going to say any more about that but that's a complication to the system okay so what is the working hypothesis and so this is the key thing if you um this is our working model um and I'm going to give you a cartoon overview of our working model and then I'm going to take you through how we try to test this model so here's the beta subunit again the iron clusters function um is to oxidize tyrosine to a tyrosyl radical once you've generated it's stable for a very long period of time this is the beta subunit the second subunit is where all the nucleotide reduction happens that's common to all ribonucleotide reductases underneath that cloud you saw the two tyrosines okay so this model this came from the docking model is a 35 angstrom distance and there are a number of issues that were raised from the initial studies first of all the interaction between the two subunits alpha and beta are extremely weak point form like a hole so that's part of the reason why we don't have a structure of the complex the second thing is that the rate limiting step in this reaction is conformational change and in most enzymes that are very complex and biology conformational dating is everything so you can put the two subunits together and nothing happens it's only when you bind the substrate and the effector to this subunit that you trigger off i think multiple changes which puts everything into motion when everything goes into motion it goes like a bad eye of hell you do the oxidation you make deoxynucleotide and it comes back okay so it masks everything you want to look at as a chemist so to be able to study this we're going to have to do something to unmask the conformational um gating okay so the distance is 35 angstroms many of you who have taken an introductory course in biochemistry hopefully have thought about electron transfer but maybe not um so electron transfer is extremely prevalent in biochemistry if you think about the respiratory chain people have known for some time now that nature has designed proteins to have um redox active pope actors between 10 and 15 angstroms apart and the rate constants for electron transfer are much faster than any kinds of rate constants for normal organic reactions at 10 to the 8th per second um and we also know know a lot about electron transfer um in many biological proteins um and it can be described by the marcus equation um but here we have a problem that's different and the problem is different because we don't have any metals in between and we have 35 angstrom distance so if in fact um the electron had to tunnel from this position to this position over 35 angstroms and he used the marcus equation the rate constant for turnover would be 10 to the minus 8th per second and the turnover number of this enzyme is 5 per second so what does that tell you it tells you if this model is correct you have to have intermediates along the reaction pathway so then you can take another step back what would these intermediates be you can pile up you know 3 000 sequences they're on a protein of 260 000 both subunits you only have 27 amino acids that are conserved most of them around the active site the others around the metal cluster but then you have three tyrosines tyrosine tyrosine tyrosine i'm going to call those guys the transient tyrosines okay and this tyrosine 356 um put it put the number in the back of your mind we can't see it this is very close to the C terminal tail of this protein and it's moving around okay um and we have a tryptophan okay so we're going to propose that we're going to have intermediates along this reaction pathway um and so um oh the other thing i need to tell you is that to do oxidation of tyrosines or tryptophan it's not just an electron transfer you have to lose the proton so this is called proton coupled electron transfer to be physiologically viable so i would argue and in fact i teach us an introductory course now that we need to spend a lot more time talking about electron transfer and proton coupled electron transfer in introductory courses because i think this reaction is as important as carbon carbon bond forming reactions anyhow we don't understand electron and proton coupling it's complicated why electrons are really tiny they can tunnel over long distances because they can be behave as waves or as particles protons are much bigger 2000 times bigger they can only tunnel over seven tenths of an angstrom so you have this dichotomy how do you think about proton movement and electron movement within the protein so that's a problem and if you don't get anything else out of my talk you've learned that pc i think i think pc e t is important okay so what's the model so nothing happens unless you bind substrate and effector and now what i'm going to do is show you our model so in the first step we believe you have electron transfer and a proton transfer from the water on the iron so if you look at the cartoon i'm drawing that's what we think happens so you go from an iron um water to an iron hydroxide i'm going to come back to that later in my talk the next step again we're going to do electron transfer and a proton transfer now we have to go remember we don't know where this guy is we have to go across the interface we do an electron and a proton transfer um and if you notice here where the protons go versus where the electrons go there are thawed on it to each other so the donor and scepter are the same for protons and electrons and what i'm going to show you in the alpha subunit we'll have to provide evidence for that today is that the proton and the electrons move collinear with each other so we propose that you have whoops we we propose i skipped two steps all right well anyhow we have hydrogen atom migration another hydrogen atom migration to generate the sulfur radical so we've done a bunch of hopping steps to get to the sulfur radical and now we're ready to make deoxynucleotides like you saw the other ribonucleotides reductase in stew so we can okay let me let me do that one more time this is sort of okay so let me do this okay okay now we're going to have hydrogen atom transfer hydrogen atom transfer now we're ready to pull off the three prime hydrogen atom converted nucleotides to a deoxynucleotide and now on every turnover we have to go back so we have radical intermediates on the way over and radical intermediates on the way back and they're not necessarily the same okay so the question is this seems like a pretty hair-brained idea the question is how would you go about testing something like this experimentally is there a pathway are there redox active amino acids on the pathway is proton couple of electron transfer involved in this and can we learn something more about the details of the chemistry and what I'm going to do is share with you on some of the data we've collected on this system and I might say at this stage that I collaborate with a world's expert on proton coupled electron transfer in the nocero lab who focuses on this problem not only in r and r but in the energy problem the photosynthetic reaction center where a lot of people are working on this problem okay so our focus is to put in unnatural amino acids and the unnatural amino acids we have a stable tyrosyl radical and then we have three purely transient tyrosyl radicals and that's what I'm going to talk about today and then what we've done I mean we can slice specifically incorporate these things I'm not going to talk about that in any detail the only thing you need to know is we can get 100 to 500 milligram quantities of protein which is essential for doing all the physical biochemistry studies we've done on this and that wasn't easy the second thing we do is we do kinetics looking at what happens to the radicals they are observable in the visible spectrum they're observable by EPR spectroscopy which allows you to see radicals and we can look at these radicals and look at know something about the electronic distribution of it and the structures of these species so what I'm going to start off by doing is summarizing a bunch of different kinds of experiments we've used using amino tyrosyl radical amino tyrosine amino tyrosine is easier to oxidize than tyrosine by about 200 millivolts and the initial idea was simply to say could this function as a radical trap could you get evidence for a radical in the pathway and then in the last few minutes I'm not going to spend very much time on this I'm going to talk about using two unnatural amino acids nitro tyrosine and these fluorinated tyrosines and I'll show you what we've learned from those studies okay so this is the question we're focused on here's your amino tyrosyl your amino tyrosine we can put it into these three positions 356, 731, and 730 and then we can study the ribonucleotide reduction process and what do we learn from these studies okay so since this is such a complicated system I'll keep reminding you what the pathway is so the idea is you get no chemistry at all unless you bind the substrate and the effector when both of those bind then you get this radical reduced in this radical form both of these have visible absorption so you can follow the kinetics of this they occur on the millisecond time scale by stop flow so you can see the tyrosyl radical disappear you can see a new radical being formed you can measure the kinetics with substrate effective pairs and it occurs the kinetics are complicated mostly biphasic but both phases are kinetically confident okay so this was really sort of the first evidence that these these conformational changes were faster than turnover suggesting that there were conformational changes which is what we had proposed as to why we could never see the tyrosyl radical in this position change okay so we we thought this guy was going away this guy is the form we can do freeze-quench EPR experiments and blue is the spectrum that you see which is a composite of both tyrosyl radical and amino tyrosyl radical because of the house site's reactivity you always have tyrosyl radical left green is the structure and this is nine gigahertz spectrum of the tyrosyl radical and what you get left when you subtract the two is this red spectrum which is the spectrum of you know tyrosyl radical and how do we assign that we do this is nine gigahertz we do 140 260 gigahertz and we do isotopic labeling and we can calculate the spin distribution in these systems so we know a lot about the structure of the radical and furthermore and with this was most I think unexpected to me is here we have this guy is much easier to oxidize I thought we might have put ourselves into a dynamic hole yet in all cases we can turn over so in all cases we're actually producing deoxynucleotides and the rates are 5 to 10 percent of the wild type activity so we can see a new radical formed in a kinetically confident fashion and it actually makes deoxynucleotides so that's suggestive going to learn something from our studies okay so in all the unnatural amino acid studies we have structures of everything and I just want to point out one thing so now we're in the alpha subunit that's where the chemistry happens tyrosine 731 730 and the cysteine which initiates the chemistry and all the structures that you see in most places the two tyrosines are stacked on each other and in the usual configuration but I want to point out we've done a bunch of structures that this tyrosine which is we don't have any structure of the complex we can see multiple combinations so the question is is really this the configuration which is required for co-linear proton coupled electron transfer or is something more complicated going on the rest of the protein structures are exactly the same as the wild type structure within the resolution of our systems okay so the first experiment I want to describe to you is our efforts to address this question of co-linear proton coupled electron transfer does the electron and the proton move together between adjacent residues in the pathway and so again we make the tyrosyl radical by freeze point EPR we take the spectrum and now what we do is besides taking an EPR spectrum we use a method called Endor spectroscopy which is the method which allows you to look at the nuclei interacting with this unpaired electron and that's exactly what you want to do to figure out how the protons are actually moving within the alpha subunit so this analysis is complicated and it requires close collaboration with a computational person to be able to take the spectra and then simulate the spectra and so we look at that we use the structural information to help us do that by going back and forth and our conclusion from these recent studies is that we see two hydrogen bonding interactions which are pretty close and we propose are the hydrogen bonding partners within the pathway in addition we believe we see a third very weak hydrogen bonding interaction which we think is associated with water and if that's true has interesting mechanistic implications so the next slide just shows you the data i've got to tell you i'm not going to talk about the data in detail but of course you have hydrogen bonding interaction between the amino and the nitrogen okay and we studied all of that and so these very broad features are the amino protons are the strongest interactors but what you see is these two features which we believe are associated with either side pathway residence on either side of 730 and they they have a coupling constant 0.6 megahertz now the other thing that i think is very interesting is that when you look at epr you're looking at a g tensor and the gx value of your g tensor is reporting on hydrogen bonding or electrostatic environments this is an incredibly unusual g value strongly indicative of hydrogen bonding in this system so we believe this kind of experiment and this is early days these data took something like three years to acquire these are not easy experiments carried out by Milito Bernati's lab the Max Pont Institute in Gurdjian i think provide the first evidence that these things are probably aligned like this and that we have co-linear proton couple electron transfer we have other ways of looking at that as well okay so the next experiment i'm going to show you about is we're characterizing what is when we put this amino group in place of the tyrosine do we do anything to the protein so we're looking at the protein alpha 2 beta 2 interactions which i told you a week and we noticed that with the amino group present the kd's for the interaction went down and we decided to look at this more closely and what i'm going to show you so we're doing this and we're going to add the substrate and the effector so this gets reduced and this gets on to us so we have one hydrogen atom movement and now what happens these two subunits that weekly interact that nobody's been able to get a structure of are going to increase their affinity for each other by a factor of 10 to the fourth to 10 to the fifth so by one hydrogen atom migration what we can now do is put a tag on the alpha subunit and you can actually this is an experiment done in in two and a half minutes you can actually post that you don't really have time to equilibrate very well but you can pull out a one-to-one mixture of the alpha and beta subunits with this mutant but not with a wild type so we then do another experiment to show that this is not an artifact and the experiment is to actually calculate the ornament as well but we use fluorescent tags on the end of our proteins and what we can calculate from these experiments using stock load fluorescence is in the wild type the beta subunit comes off at 70 percent fast so it could move around one beta could service multiple alphas on the other hand with this one amino tyrosine substitution it's 10 to the minus 3 percent so somehow by the one hydrogen atom migration you're changing the affinity I believe transiently during catalysis you change the affinity everything happens really rapidly and then they dissociate that's our interpretation of the data okay so people have been trying to do structures we've done a lot of physical biochemistry on these systems we now have a system where the two things stick together and so we tried to put this on to a carbon grid and do cryoem this is done with the Drennan lab in Francisco Asturias' lab at Scripps and these structures again a 30 angstrom resolution are similar to what we would expect for that docking model I showed you early on and this structure for example we still have a lot of things that aren't complex because of the complexity of the system but that's for example the alpha subunit so this piece of data actually in some sex experiments we've done recently both show that this docking model that was put forth by Eklund is a reasonable model and the distance is really long okay so let me now just tell you one experiment that was very recently published and this is a collaboration with a Bowlinger lab Marty Bowling was one of my former students in Carson Krebs lab and we've been doing this experiment for five years as well okay and so remember I'm talking about proton coupled electron transfer okay so this is the design of the experiment is easy the execution is tough so the model is that we're going to do proton coupled electron transfer and that the proton you get an electron either from tryptophan or tyrosine you come back to this later on and the proton comes from a water on the iron okay so that's the model so what happens you donate an electron you donate a proton and you generate this species and we put this amino tyrosyl radical here to pull the reaction to the right and then it stops I mean under the conditions we did the experiment so what we're doing is we're changing the iron from water bound to hydroxide bound the question is can you see that okay and is there a method spectroscopically that'll allow you to see that and so we did a second experiment which does the same thing okay so here we're going to do an electron transfer and a proton transfer but now to initiate forward electron transfer we use a mechanism based inhibitor we studied 20 years ago and what we know we know a lot about this system we know that you can get an electron and a proton transfer and you trap this is a nitrogen standard radical on the other subunit so in both cases now you have an iron water versus an iron hydroxide and the question is can you distinguish between the two and Carson who's a Moscow spectroscopist which is a physical method which allows you to tell something about the oxidation state of your irons and something about the electronic environment around the irons carry out these experiments on these two systems and we got the same answer you have to iron 57 label your protein it turns out we know a lot about this cluster we can iron we can iron label the site or this site and doing a bunch of controls we see a difference not in the isomer shift which is indicative of the oxidation state but of the delta eq value and then doing dft calculations we can predict what that change would be and it's really similar to what we observe experimentally so i think this is telling us now for the first time that this iron cluster which we always know is involved in formation of the tyrosyl radical in the first place which you need for analysis now it's really directly involved in this long range proton couple electron transfer okay so what have i showed you with this residue there's pathway dependence i haven't showed you all the data you can put it here here and here you can trap a radical you can put it off pathway you don't trap a radical conformational changes we can measure the kinetics of formation it's fast suggesting that these changes are kinetically confident we've been able to trap three amino tyrosyl radicals on this pathway the three transient radicals our indoor data we've interpreted to suggest is consistent with collinear proton couple of electron transfer we form a transient tight complex when we move one hydrogen atom in this system from one sub unit to the other and we think the iron complex is directly involved in weakly attached reduction okay and so in the last few minutes what i want to do now is tell you about a second set of experiments i'm only going to tell you about one experiment really as indicative of many experiments we've done in the last two years and then i'll come down and give you a model for what we think is happening in this process okay so we decided that we wanted to put in formated tyrosines into the system and i'm going to show you the formated tyrosines whether you have two three or four you can perturb the redox potential of the 300 millivolts that's enough if you're doing proton coupled electron transfer you've perturbed the redox potential that's exactly what you want to do if you perturb it over a couple hundred millivolts you turn the enzyme off okay uh furthermore the pka of the phenols is quite different which also allows you to think about proton coupling of electron transfer um so um young in the in the Schiltz lab in collaboration with minahan in my lab evolved a tRNA synthetase to the 235 235 trichornate a molecule which is exist predominantly as a phenolate and when we did that we then had a tRNA synthetase tRNA pair and luckily for us it's able to put in all of these formated tyrosines so one tRNA synthetase can incorporate any of these species into any of these positions okay and again after a lot of messing around we've been able to do this on um hundreds of real quantities which we need to do this spectroscopy okay so why would we want to do this and so um i'm gonna share with you one experiment but let me show you what's key to understanding this experiment so over here um this is our stable tyrosine i'm going to show you we think we have to go uphill to generate a sulfur radical to make deoxy nucleotides and then we go back downhill okay so um we put in 235 232 236 formated tyrosines 35 we know something um about the relative redox potential so we're trying to measure this much better than the way we've measured it um thus far um and so the question is could we perturb the redox potential in a way that would perturb this pathway and tell us something about the thermodynamics of residues in this pathway versus the conformational gated okay so what you can see for example i'm going to talk about nitro tyrosine this is the other extreme of the amino tyrosine it's much harder to oxidize by 200 millivolts and what does that mean it means it's a really hot oxidase dying to be reduced um and then i'm going to show you studies with 35 which is pretty similar um to tyrosine in terms of redox potential and in fact this enzyme can turn over at the same rate as the wild type enzyme okay so the key to this experiment is the following we needed to know what these radicals look like um and at 122 remember 122 whoops 122 sorry 122 is right next to the dye iron cluster so the question is can the dye iron cluster oxidize these guys to the radical to initiate nucleotide reduction okay and so my lab has studied this um for 15 years we learned the details of how a dye iron cluster to an iron three iron four to media which i'll talk about tomorrow is able to oxidize tyrosine to a tyrosyl radical and it can oxidize all of these unnatural amino acids it can even oxidize nitro tyrosine which is much harder um to oxidize and all i want to point out here most of you don't think about EPR this is the spectrum of the tyrosyl radicals the derivative spectrum at 9 gigahertz um but what i want you to see with the fluorinated ones is if you look at the high field in the low field side you see all these little bumps and those little bumps are indicative of fluorine hyperfine and so what does that say if we're looking for three tyrosines in the pathway and they all have the same EPR spectrum you can't tell whether you have one two or three but now by putting fluorinated tyrosines in there if you look at either side you can actually if you have mixtures of radicals you can actually look at them equilibrating and that's the experiment we carried out and so let me show you that experiment briefly and then summarize okay so we've been able to make a nitro tyrosyl radical with our iron cluster the lifetime of this radical in contrast to four days with a wild type enzyme is 40 seconds so these experiments are extremely challenging and i had a really outstanding postdoc in the lab who was able to measure all the kinetics using three syringe rapid mixing experiments and so what i'm going to do is show you some unusual results we got using nitro tyrosyl radical and then combine it with a fluorinated tyrosyl radical and show you what we've learned from these studies okay so here's our nitro tyrosyl radical and what we expected we would add substrate we would add a factor we would do some chemistry okay so and we study this in a lot of detail i'm not going to give you any of the details but the first thing you would accept is proton couple electron transfer to form the phenol right that's what we've just been talking about in reality what we see in this step is we get a electron transfer but no proton transfer so now we don't we don't understand it we have structures but the bottom line is we've uncoupled the first step the electron and the proton transfer okay so what has that done it turns out we can rapidly form we can measure the rate constant from formation of this we can rapidly form deoxynucleotide and now deoxynucleotide in a rapid chemical quench experiment is formed at 150 to 300 per second the normal turnover is five per second so we somehow by uncoupling unmask the conformational gating or conformational multiple conformational steps and we can now rapidly produce deoxynucleotide i'm going to show you why i think this is important and furthermore then you do back electron transfer and what we can see at the same rate constant is formation of the 356 radical so now in contrast to all the amino radical trapping we're now looking at the the tyrosyl radical trapping okay and the rate constant of its formation we've shown that it's at this position bipolar spectroscopy which i'm not going to talk about is formed at 150 per second and so the question is now why doesn't this oxidize this back to the nitro the nitrofenol tyrosyl radical at duffin it stops here and because you can't do this oxidation because of again some unusual coupling around the metal center we ask the question could we see the collaboration of these three radicals and so the model would be as we go over we make deoxynucleotide we come back we can't do any more turnovers so we're doing one turnover and the enzyme stops we generate this radical and now the question is can we see collaboration with these radicals and here's where we can put sites specifically a fluorinated tyrosine here or in that position and so now what you can do using epr you can ask the question can you see the hyperfine interactions associated with the fluorine and we published a paper on this last year as well where we can see these two things equilibrating these 730, 731, 356 with a ratio of about 10 to 1 so it's telling us something about whether nature is perturbing the redox potential of our tyrosines to facilitate this long-range proton coupled electron transfer process so to summarize in this section we've seen uncoupling of the proton and the electron transfer around the metal cluster for reasons we don't understand during this process we were able to generate deoxynucleotides 150 per second 50 times faster than we see during the normal wild-type turnover which is governed by conformational changing we also see very rapid formation of the 356 radicals and now we've seen a radical on the pathway that's the tyrosine rather than the amino tyrosine and we've seen using the two of these unnatural amino acids we can see equilibration of these radicals telling us something about the relative thermodynamics of these species on the pathway so this data and a lot of studies that we've done with these fluorinated tyrosines that I don't have time to talk about and is the active area of investigation now and looking at this part of the pathway has allowed us to come up with this model so let me walk you through my working hypothesis okay so we have a tyrosyl radical stable it's not thermodynamically stable it's kinetically stable so it's only when you bind substrate it affectors that you do something and everything it's a subtle transformation one or two chlorines changes everything subtle transformation allows this chemistry to happen we believe the chemistry is uphill we believe that this is the second species along the pathway where we can see this over and over again and in data I haven't presented but from the data I just showed you in the last set of experiments we know something about the relative equilibria between these three transient tyrosyl radicals this one is more stable we believe in these two and we place cysteine in this pathway from model studies where people look at phenoxy radical being able to oxidize the sulfur to a sulfur radical so a model for cysteine radical oxidation and they're not very different in terms of the thermodynamics so the idea is the following we believe this ranch is uphill slightly uphill why would you want it uphill our rationale is that you never want to build up any intermediates because if you build up intermediate sand then it kills itself and that what drives the reaction to the right and this happens I think in the nucleotide reduction process and a lot of other radical based reactions my lab has worked on is a rapid irreversible step so you go uphill you don't have that much of it you got to obviously have enough to go on and get your turnover number to work but then you have a rapid deoxy nucleotide formation 150 per second and then when you get here it's back downhill really rapidly so um in the beginning I was not a believer in this mechanism I thought it was patently ridiculous that some enzymes so important and central in nucleic acid metabolism would ever catalyze an oxidation over a long distance like this especially when you can use b12 or glycol radical sitting right next to it in three-dimensional space but this enzyme can catalyze a million turnovers and not kill itself so there's something unique about this pathway that is allowing this chemistry to occur and has is still with us today and I think I never thought we would have gotten this far in something this complicated but I believe that there is a pathway that the oxidation now is uphill slightly uphill that is is pulled to the right by deoxy nucleotide formation and goes back down to the resting state and I hope in the last few years before I retire that we will know and we already know quite a bit about the relative interactions between 122 and 356 so let me close by thanking the people that have done this work so this is my current group let me start over here this is Dan Nocera's group I would say everything I've done in the last three or four years couldn't have been done and unless it was in collaboration with really fantastic people which has made science a lot of fun for me in the last few years I collaborate with Nocera but Nocera group who he recently moved from MIT to Harvard and he's one of the world's experts in proton coupled electron transfer. I collaborate also with Adrenan laboratory structural biologist and we've recently done some really pretty amazing structures that I didn't get a chance to talk to today but we had joint group meetings we all get in the same room together and actually like each other which is nice and anyhow today's today's work with the fornated stuff was mostly done by Ellen Menehan and the Amino and and Kanchana and the Amino stuff has been taken over from Ellen by Wonkyu and finally I'd like to thank my collaborators because I really couldn't have done any of this without having spectacular collaborators over the year so here's Dan whoops here's Dan proton coupled electron transfer man we were able to get the first high-field EPR of tyrosyl radicals way before anybody else was able to do that and that was with Bob Griffin's lab at the magnet lab and he had a very talented postdoc at that time Melita Bernati who's now at the Max Fungi Institute in Gerdigan and who built the instrumentation and obtained the first high-field indoor of tyrosyl radicals here's Kathy this is an old picture of Kathy this is Remy that's a dog Remy her new dog's name is Shep right anyhow there are a lot of other people that I would thank over the years we couldn't have done anything without them but I'd like to thank you for your attention and we don't have any clue I mean so I mean people have tried to crystallize this we've tried to I don't think they spend any very much time together at all actually and I think the way I think about this is really different in mammalian cells for example one is in the nucleus one's in the cytosol there are at least signals to move from one place to the other I think they can transiently interact and go back you know I mean if you think about it 10 to the fourth 10 to the fifth isn't that many kilocalories right so but it's some I don't think it's just one I think you're you know and I think part of it is triggered by if you believe on moss farm data so we had some pretty critical reviewers which we let the paper go through I think that there's a carbon I think the iron cluster and the movement of metals in the iron cluster is the key to catalysis and most metal based reactions and I'll talk about I'll talk about metal reorganization in tomorrow's lecture and this is just water you know water hydroxide I think it's appealing to me but whether it's really true I showed you what the evidence was sort of we have we haven't ever done that you mean to put it in the ortho position or in place of a sulfur radical or it's in in place of just for trying to form an s-dot yeah I don't know I have to think about what the redox potential is so the pKa's you know we've done we use nicrotiracy we originally made nicrotiracy because the pKa is 7.2 and so we could put it at each one of these positions and we could measure the pKa of a single residue and a protein of 260,000 the pKa's in the transient positions don't change at all so nature isn't perturbing the redox potentials by perturbing the pKa's which she does quite frequently in metal based reactions but the pKa around the metal cluster is dramatically perturbed we can't really measure it but that's not really surprising if you look you know why is it so stable it's in an incredibly hydrophobic cavity and there's nothing adjacent to it at least with it with the redox potential of the tyrosyl radical that allows it to get reduced on the other hand with the nitrotyracyl radical we've done a lot a lot of study on that the nitrotyracyl radical is much hotter and we've done experiments to look for the tryptophan radical which I've ignored in our in our pathway and we can see tryptophan radical but then when you do Keldor experiments which allow you to look at all the radicals in the protein you can see the the the electrons have popped from all over the protein and so a lot of people studying hot oxidants like ferrule species are for oxo species you know they see a spectrum and they say ah it's this they don't get very high yields in reality what happens if you have a really hot oxidant you have anything around it that can donate electron you get hopping all over the place so you need a way of finding out where that is and this Keldor method which we use is incredibly powerful for being able to look at that and in this system really when you don't perturb it very much the chemistry is amazingly cool for it so it's been finely tuned for I don't know how nature ever got to that stage yeah but it's been amazingly finely tuned yeah yeah if I had if I was talking to a chemistry audience I probably would have had a square scheme that no are you kidding me we can't even I mean even people doing it on monosystems can't agree on what proton coupled electron transfer is I think it's a very active so if you look at mayor's work or you look at armistar arms work and you look at Savion's work they all come up with different they've all done very similar experiments and come up with different interpretations so for me the answer of understanding proton coupled electron


Yes, thank you all for attending. I'll be presenting a new open source project called Iotivity Constraint. It's specifically targeted towards resource constrained hardware and software environments. During the course of the talk, I'll discuss a few design decisions that we have made. And while this project implements the open connectivity foundation standards, similar design philosophies should apply more generally to standards based software for the internet of things. So this is the outline of the talk. I'll start by briefly introducing OCF and the Iotivity Project, followed by a brief overview of the OCF core standard. I'll speak about the typical challenges of working in constrained environments, and further dive into the Iotivity Constraint's architecture. I'll then walk through a few code samples, application code samples, to give you an idea of the Iotivity Constraint's application APIs as they currently stand. And lastly, I'll provide a few guidelines on porting Iotivity Constraint to new environments. So the open connectivity foundation was set up in an attempt to solve the problem of fragmentation in machine to machine protocols and standards. It's an industry consortium with several member companies. It aims to collaboratively develop and publish open communication standards for the internet of things, covering a wide array of vertical use cases. In addition, it sponsors the Iotivity Project, which is an open source project, and serves as a reference implementation of these standards. So this talk is specifically about Iotivity Constraint, which is a new project under the Iotivity umbrella of projects. It, too, is a reference implementation of the OCF standards for resource constrained environments, which is also to say that it is lightweight. Its architecture enables it to be easily customized to various platform configurations. This is an important attribute, since given the variety of hardware and software options that vendors have to choose from, having a flexible architecture helps to capture a wider base of users and serve them. To that point, the users who would benefit most more from this project are embedded vendors or makers who would like to tweak their OCF applications and OS bundles at a fine-grained level. To sort of gain a better understanding of what it means to be constrained, I'll quote from RFC 7228, which presents a classification of constraint devices. Flash and RAM sizes are the key dimensions along which the authors observed a fairly clear clustering of commercially available chips and MCUs, resulting in the three classes. Class 0 devices are severely constrained in memory and processing capabilities. In the best case, they might be connected to the internet via a proxy or a gateway. Class 1 devices are less constrained than Class 0 devices, but with a limited code size, they might not be able to employ a full protocol stack to directly talk to other internet-connected nodes. However, they might be able to run protocol stacks that are more built for constrained environments, such as the constrained application protocol. But even with that, it might leave only a few limited resources available to applications. Class 2 devices are less constrained than Class 0 and Class 1 devices, but their resources can be better utilized by using lightweight and efficient software, leaving sufficient resources to develop more capable applications. So as you can see, these factors directly influence any design choices that we must make in software, based on the class of devices we'd like to target. For OCF specifically, we have the challenge of accommodating at a minimum the operating system, the network stack, the drivers, the OCF protocol, and the OCF application within the constraints. They might, however, be further considerations, such as software update, which might also need to be factored in. So the IATVT project has been around for a little less than two years now, and maybe some of you are familiar with it. It targets multifunction devices, such as PCs, smartphones, gateways, tablets. Such devices run a full feature at OS, like Linux, Android, Tizen, Windows. Whereas IATVT constraint targets resource constraint devices, and these devices are ones that might be battery powered and mostly wireless, such as door locks or environment sensing platforms. Such devices may be connected to a network that is itself constrained, such as low power and lossy networks. Such devices typically run a small OS, like Zephyr, Kentucky, RiotOS, FreeRTOS. However, both the implementations are protocol compatible. Over the next few slides, I'll just provide a brief overview of the OCF. Some key concepts that underlie the OCF core standard. The OCF protocol is based on the restful architectural style, where all things in the internet of things are modeled as resources. The crudin, which stands for create, read, update, delete, and notify, operations may be performed on these resources via the standard methods get, post, put, and delete. The things communicate with each other by exchanging resource representations. The schema of these representations is fully specified by OCF. The observe or notify operation, which is really a special case of the get method, and is used to subscribe to notifications from a resource when there's a change in its representation. Resources are defined with a common set of properties. Resource URI points to a specific physical object. It has a friendly name, a name property. Resources also have one or more types or interfaces. The type is sort of self-explanatory. It could be a light or a fan, and they have specific names designating those types. And also they might support one or more interfaces, where an interface defines the set of operations that are possible on the resource and the nature of their presentations. OCF provides a standard set of resource types and interfaces that applications might use. Resources also have policies associated with them, which specify if a resource is discoverable or observable. OCF also defines roles that are embodied in applications. The server role describes an application that hosts a set of resources and exposes them to the outside world. The client role describes an application that accesses resources hosted on a server. An application may incorporate both the client and server role at the same time. Such an application might run on a gateway or a proxy device, serving as an intermediary. So the OCF protocol is based on the constraint application protocol. It supports resource discovery with the aid of a fixed well-known resource. Endpoint discovery over IP is performed using multicast requests to an assigned address and port. Since co-app is usually transported over unreliable network transports, it has a simplified mechanism for establishing reliability, which uses a stop-and-wait retransmission model with an exponential back-off. Messages that want to utilize this function are marked confirmable, and expect an acknowledgment to return from the remote endpoint within a certain time frame, failing which they attempt a retransmission. OCF data payloads are encoded using the concise binary object representation, which is a compact binary format that is well suited for use over constrained environments. The OCF security model defines mechanisms for authentication and encryption over DTLS, and further rely upon access control lists to restrict access to resources. You may refer to the OCF security specification for more details on the security model. The OCF protocol is designed to work well over UDP and IP as the network transport, but there has been some prior work to adapt it to used Bluetooth low energy as an alternate network transport. There is an ongoing effort to refine and standardize this. So the OCF core specification lays out a set of well-known resources that serve specific functions. The OIC-RES resource is specifically for discovery and handles discovery requests. This is something I touched upon in the previous slide. It takes the, it accepts a resource type as a filter, which a client might specify if it wants to discover resources of that particular type. Device and platform are logical concepts defined by OCF, which, and their resources expose certain metadata, such as manufacturer operating system and firmware information as well as versioning information. The OIC-SEC resources serve as interfaces to the security implementation. And likewise, there are a few other well-known resources that always exist. You can, you may refer to the OCF core specification to gain a better understanding of those. I'll walk through a few request response sequences with a simple example. In this scenario, we have a smartphone which runs a client application, a light bulb, which runs a server application. The smartphone issues, in order to do resource discovery, the smartphone issues a multicast get request to the well-known OIC-RES resource. The light bulb, the server application running on the light bulb receives this and sends a unicast response back to the client with its information, which in this case mentions a resource a slash light with a specific resource type or supported interface and its policy is the fact that it's both discoverable and observable. The client that now wants to communicate with this resource sends a unicast get directly to the light bulb end point to that specific resource a slash light. The server response sends a unicast response with its current representation, which contains two properties, state and dim. The client issues a unicast put request to a slash light and its payload includes the representation that it wants to essentially put on the server side. This basically, the representation mentioned state equal to 1 and dim equal to 50. So this ends up turning on the light bulb and setting the brightness level to 50. On successfully completing this operation, the server sends a unicast response indicating the success status to the client. The client now issues a unicast observe request, which is really a get and the observe option set in the co-app header to a slash light. The server accepts the subscription, observer subscription and sends a unicast response back with its current representation, which remains the same. That is state equal to 1 and dim equal to 50. In this example, the light bulb happens to be connected to a physical switch, which someone has just turned off. So this has obviously led to a change in the representation of the server side. And so the server sends a notification back to the client, which had previously subscribed for notifications of such. And it includes its current representation, state equal to 0 and dim equal to 0. So this is roughly how clients and servers interact. So now I will speak about the typical challenges of working in constrained environments. These are a few hardware-induced constraints. I've already spoken about the fact that you tend to have lower RAM and flash capacity. Not only does this imply that we must run software that is lightweight, we should also understand that these constraints directly influence certain runtime parameters that have an impact on the constraint, the workload that an application can service. Some of these parameters might be, you know, maximum number of concurrent requests and maximum payload sizes. And this is something we need to factor into and be aware of. Well, while working with low-power CPUs that might potentially have a low clock cycle, we need to ensure that frequently used code parts are sort of straight and direct. We should also limit the number of copy operations. We should also ensure that there is no spinning that happens during periods of inactivity so that the CPU can be allowed to enter a more deeper sleep state. All of these considerations improve execution efficiency, which is something that's very essential if the device is battery-powered. And lastly, software should be designed such that you could easily incorporate only a specific subset of features that an application needs and not compile any more code than is necessary. These are some of the typical challenges posed by software infrastructures for constraint environments. First of all, the operating system itself is lightweight. It might lack an appropriate network stack or support for persistent storage, making the user rely upon third-party or proprietary libraries to fulfill those purposes. There's usually no dynamic memory allocation in these operating systems, which is something that we take for granted for the future OSs. We could easily allocate memory statically, but then considerable thought needs to put into the size of those allocations because they would have a direct impact on the performance of the application. There are a variety of OSs and other choices that developers have. So this leads to a considerable fragmentation in the APIs and also programming models tend to vary. There can also be a variation in the design of execution contexts amongst various OSs as well as their scheduling strategies. They might be either preemptive or non-preemptive. For example, Riot OS supports multi-threading, Contiki supports a form of cooperative multitasking, and Zephyr currently has a task and fiber model which serve different purposes. So basically the point I'm trying to convey is that it's very hard to design a piece of software for a particular environment and easily port it to another when we have to. So all of these points, in turn, led to the definition of some of these architectural goals that are fulfilled by Iotivity constraint. Firstly, we have a core framework that's essentially cross-platform. It's just pure C code. It encompasses much of the OCF resource model protocol memory management and its execution. It interacts with lower-level platform-specific functionality via a set of abstract interfaces. These interfaces are defined in generic terms, and elicit a specific contract from their implementations. The specific functionality is that these interfaces cover span, the connectivity, access to a system clock, pseudo-random number generation, and some form of persistent storage. And these are all features that the core framework just relies upon and needs to carry out its functions. As the core framework is the sole consumer of these interfaces, the scope of their definitions is very limited to its needs, and this enables it to be implemented on various environments with relative ease and allows rapid porting of Iotivity constraint and deployment on those environments. All memory is allocated statically in memory pools. And lastly, the design is modular and enables applications to exclude certain features cleanly without affecting the rest of the system. So this illustration sort of depicts the architecture that I just described. The gray box in the middle is the core framework, which is the cross-platform framework. It consumes the abstract interfaces. Concrete implementations of all of these interfaces constitute support, and we have a number of ports currently for Zephyr, RiotOS, Kentucky, and Linux. And finally you have an IOT application that sits and communicates with through APIs that are exposed by the core framework. So this box sort of illustrates the constituent blocks of the core framework, which is essentially like zooming into the gray box from the previous slide. To the right are blocks that handle the OCF resource model protocol and security flows, and they interact uniformly with various platform-specific functionalities on different environments via the abstract interfaces. The blocks to the left serve more horizontal functions and deal with managing memory pools as well as the execution. The framework executes in an event-driven fashion where the messages are passed between internal modules through the propagation of events. The framework maintains a queue of a fixed size to hold all outstanding events that are to be processed, and these events are processed by the receiving modules to completion in the order in which they were posted. An application essentially needs to then run an event loop in its main or background task to execute the framework. The code that implements the client and server roles are kept distinct so that an application can incorporate either of them or both. And lastly, the framework exposes a set of APIs for operating on and handling resources as well as working with OCF's data model. This illustration shows the internal workings of activity constraints event loop. An application continually calls the OC main pole function, and at the same time registers a set of callbacks with the framework. Every invocation of OC main pole processes all outstanding events at that time. That are to be processed. The connectivity module at the bottom right tends to wait for incoming messages over the network, and once such a message is received, the data buffers are passed as events to either the security or messaging modules depending on whether the incoming message was encrypted. The security module passes a decrypted co-op message to the messaging module. The messaging module decrypts the co-op message and passes the structure to the resource layer, which maps it to OCF resource model constructs, and then calls back into the application to either handle resource requests or responses. At the same time, an application can itself... If all of this happens in the context of the event loop, everything I just said. At the same time, an application can itself post events, like interrupt events, into the framework for handling. This might be used, for instance, in the case where you wanted to handle data that arises out of a hardware interrupt from a sensor. The event loop is designed such that the task that runs it can basically enter a particular idle mode when there is no activity. An application can, in addition, register a callback which can be invoked to signal the event loop when there is new work. The code on the slide sort of describes a pattern that applications can use, where the code block on the top runs in the application's main task. It creates a semaphore to use for signaling. It initializes a semaphore and then starts off the main loop, the event loop. The OC main poll function returns the absolute timestamp of the next schedule event if there is one, or it returns zero if there is none. The application can now wait on the semaphore either indefinitely or for a period of time. The signal event loop callback, which is being registered by the application, can be implemented to signal the semaphore. But the way all of this works underneath this, the framework invokes the signal event loop function when there is new work, since it is aware of any such activity, which can come in two forms. One is either if there was an incoming request for a response or if the application itself posted an interrupt event for processing. Once it invokes the signal event loop function, it would signal the semaphore and then the event loop could resume execution. So I will now go over a few application code samples, and the examples would illustrate the APIs as they currently stand. As I mentioned earlier, applications may incorporate OCF's client or server roles or both, and application is basically implemented over a set of callbacks. These are required by the framework and they sort of dictate the structure of the application. These are the set of callbacks that you would typically define. One is for initialization, for defining and registering OCF resources in a server application. Resource handlers for all supported methods of defined resources in a server application. An entry point for issuing requests in the client application. And response handlers for all issued requests in a client application. And in addition, there is a framework configuration file that lets you configure some of these various runtime parameters which you would need to make so that it meets the needs of the application that you're building. So this is done in a specific header file, config.h. I'll show you some of those parameters that I'll talk about them later on. So this is an example of the main task in an application where you set the initialization callback, the callback for signaling the event loop, and callback for registering resources in an OC handler T structure. You pass that structure over to OC main init, and following a successful initialization, you start executing the main loop. This is an example of the initialization callback where you typically set the representations for the platform and device resources, which are standard OCF resources. And you pass in some of the required metadata that you'd like to expose, like the manufacturer name, the device name, and some versioning information. You might also want to perform any hardware initializations over here. It's an appropriate place to do that. And in addition, it's a place where you can initialize the persistent storage hardware that you have on your platform. So for supporting... So the OCF... An Iotivity constraint requires some form of persistent storage to load and store credential and access control information. And the framework accesses persistent storage via the storage interface, which is one of the four abstract interfaces. OC Storage config is part of the storage interface, and takes a particular parameter, which might be some sort of a reference to some area of storage. The behavior of that function really depends on the implementation. In this specific case, where it's taken from the Linux sample, the parameter that it takes refers to a file system path. This is an example of the resource registration callback, where I'm defining a resource with URI a slash light of a resource type core.light. It's said to be discoverable and observable. It supports only the get method and sets the resource handler as get underscore light, which is a callback that we'd have to define. So here's an example of the light resource handler for the get method. If a resource handler supports queries, so basically an application can issue query parameters along with a request to a resource. And if a resource handler supports that, it can read those query parameters here by calling the OC get query value API. But basically, what the resource handler needs to do is return a representation of that resource, specifically for the get method. And as you can see here, the representation consists of an object with two properties, state and brightness level, and they are being set from the application. What you see here are basically a set of macros that are part of the IATVT constraints API to make it as an attempt to simplify the process of encoding representations, and we send a response. So here's an example of doing resource discovery on the client side. So at the top is the API to issue a discovery request for a particular resource type, OICR.light, and also passing in a handle to a callback function to handle the discovery response. The framework invokes the discovery response handler for every, separately for every discovered resource that match with the filter. So below is an example of the discovery response handler. Where you basically have to make a copy of the URI as well as the OC server handle T structure. That contains the information about the remote endpoint that actually hosts this resource. And these are the two pieces of information that a client would need to subsequently issue a request to that resource. Also, the discovery, the response handler can, has an opportunity to review all of the other resources that were just discovered, or by returning OC continued discovery, or can choose to just stop discovery if they are satisfied with what they're found. So here's an example of a client application issuing a get request to the resource that we just discovered. The server handle and URI would have already been populated in the discovery callback. And so you issue an OC do get request using the OC do get API to the URI and server. And you also pass in a query selecting the units that you'd like to use in your, that you'd like the resource representation to contain. And you also pass in a response handler for this request named get light. In this case, you would, this particular request is choosing to not use the co-apps reliability mechanism, which is the conformable request part, which I mentioned earlier. And so in order to do that, it's just mentioning low QoS as a parameter, which as a result sends a non-confirmable request that doesn't expect any acknowledgement. So here's an example of a response handler that's handling the response. The response payload would include the representation encoded in Seabor of that particular resource. And by the time this callback is invoked, the payload is already parsed out. And so this function gets handed in a structure which the application can just walk through to read all of the properties, which are part of the representation. So in the case of a conformable request, as I mentioned earlier, when a client issues a conformable request, it expects a response within a certain time window, failing which attempts a retransmission. But there might be instances where a server might not be able to return a representation within that time frame and yet receive the request correctly. So in order to prevent the client from needlessly retransmitting, the server can respond with an empty acknowledgement and at a later point send a separate response to that request. So this is basically how you do it with the APIs. You declare a separate response handle to track all incoming requests. In the resource handler for some resource, you would basically use the Indicate Separate Response call to add that request to the handle for tracking. And at a later point, whenever the response is ready, you would send the resource representation back to all of the endpoints that are requested for that representation in that period of time. The framework has the ability to set a callback to trigger after a certain period of time. This is done using the ocsetDelayedCallback function, where you specify a period in seconds. So in this instance, the function run after a second runs immediately. And inside of that function, the value it returns, which could be either done or continue determines whether the application wants to tear it on the callback or continue to trigger every one more time period ahead. And this mechanism can be used for scheduling like periodic requests, for instance. So lastly, for handling interrupts, applications have the ability to define a callback and signal it from an external context. That's a context that is external to the one that's running the event loop. For example, from an interrupt service routine. So the callback, once signaled, ends up running in the context of the event loop. So in this case, we can see an example of how you would define a callback and give it a name, register a callback during initialization, and subsequently signal the callback. And this you could use to again handle data from sensors or anything that's externally derived, an externally derived event to handle that. And it ends up getting synchronized and executing in the context of the event loop. So for instance, this could be used to send notifications of sensor data values whenever they get delivered to the application through the ISR. So the framework configuration is something that I spoke about earlier, and these need to be set at build time in a file, config.h. So these are some of the parameters that you configure in that file, like the number of application resources, number of request response buffers, like maximum payload sizes, memory pool sizes, and DTLS-related parameters. So lastly, these are the... I'll just go over the definitions of some of these abstract interfaces that you'd need to implement to port IATVT constraint to any new platform. So this is an example of the... This is the clock interface. In order to use it, you need to first define the resolution of time that IATVT constraint must use. IATVT constraint tracks time in terms of clock ticks, and of course a higher resolution provides for greater precision in timekeeping. Those are defined in the framework configuration, but the interface itself consists of these four functions which is for initializing the clock, getting the current time and clock ticks, getting the current time in seconds, and delaying the flow for a certain period of time. These need to be implemented using the target environments API. So for example, on Linux, I'd use clock get time to implement these functions. These are all the functions that are part of the connectivity interface, where you have functions for initialization where you might want to set up and configure your sockets. Shutdown for clearing resources, sending a buffer which basically sends a message to some remote endpoint, sending a multicast message, and getting the currently assigned ETLS port. These are all functions that the framework internally calls, and so they need to be implemented correctly on any target. The OC message T structure contains all the remote endpoint information, which could be the IP address of Bluetooth address as well as the data buffer. On the received side, incoming messages may be captured either via polling, or via a blocking weight from a separate thread. For example, you could do a select to block indefinitely on the site of socket file descriptors on Linux. But once the message is received, the port should construct an OC message T object and then the messages are injected into the framework via the OC network event call. However, the OC network event function needs to be synchronized with the execution of the event loop itself. And so in instances where it's called from a different thread, it would need, the connectivity implementation would need to even implement these functions using the target environment synchronization primitives to achieve that synchronization. On the other hand, if you're working in an environment like Kentucky where there is no preemption, since it uses cooperative multitasking, there is no need to implement these functions because there is no need to synchronize. This is the pseudo random number generation generator interface. An implementation might choose to employ some desired seeding strategy if necessary in the initialization. But the framework calls OC random value to obtain an unsigned integer whenever it needs a random number. And this is the persistent storage interface. I spoke a little bit about OC storage config, which is for initialization. How it's used entirely depends on the implementation. But OC storage read and write must most definitely implement access to some key value store. Since the framework internally calls these functions to read from keys and write to keys. So to conclude, the project is being actively developed. We have a few working ports for these environments. Riot OS, Zephyr, Kentucky and Linux. We're trying to work on filling up some feature gaps from the OCF standards point of view, some enhancements and our goal is to eventually pass all OCF certification tests to make it completely OCF certifiable. And also, we are still working on better documentation for the project, the code and the APIs. These are the pointers to the source code as well as the Iotivity mailing list where you could post questions. And we'd welcome any involvement or code contributions. That's any questions? What makes OCF more special than LWM2M? I'm not that familiar with LWM2M to be honest. But OCF is based on co-app, and so I guess if you know the difference between co-app and LWM2M, then that might... Well, OCF, I guess OCF tries to address sort of the vertical side as well because we have a lot of work groups that are focused on the needs of various vertical use cases. And so the... I think one of the contributions for OCF is the establishment of various data models that work well for various verticals. At least that's one of the things that we do over co-app. But yeah, I'm not sure about... if LWM2M does something similar or what. Right? So, as soon as we're done with the device, we would like to talk more and more about the network. And do you really have an idea of how much our job on the network is going forward? Right. So you're talking about off-loading functionality? Yeah. No. Yeah, no, I think it really depends on... Well, so I guess if you look at the way the event loop executes and the way the framework gently executes, it tries to behave well in the sense that it basically goes to sleep. It gives an application the opportunity to sleep. So the framework has all of those necessary hooks to enable an application to take advantage of those things to basically behave in a more energy efficient way. As for the question which you're asking, I guess it also depends upon how frequently you're receiving requests, right? Because that really has an impact on how often the device is executing and performing more work. So to some extent, the application can constrain the number of requests that it can receive by setting those parameters saying, hey, I don't want to accept more than one sort of request at a time. But I'm guessing the application itself who was designing this for a device might have to put more thought into how they'd like their device to behave in a thought. But the framework has those capabilities to enable applications to do whatever best they can. I'm just not sure if that's an OCF thing. I mean, it seems like... What you need to do is limit the interaction to the network if your device seems very powerful. The main one that you need to be aware of is going to be the multicasting because it'll depend on you. And to solve that, what you basically need is to register your device with a resource directory and then disengage from multicasting. So you can be still found, but you're not on multicasting. So just leave it for a bigger device to answer that question for you. And then it should be more or less okay. But the one is that we're trying to find the right architecture on the database that should be happened once. And in the case of that, you have to buy to change the place of all that information. It will really depend on what your use case is going to be, what your users are going to be doing, and how much you can spend but I think that the most important thing is actually to find out for multicast. Don't be on multicasting. This is what we're doing. But after that, it's only when it's directed to you and if your user is asking you to do something, your device has to be designed for the workflow. I think Tiago's point is a key point that you can actually have a resource directory that sits in between as a proxy to your really low-powered resource. So it goes to basically queue up requests and all of that. And the application can decide how it wants to behave based on who is building the device. Okay. No, not at the moment. But it shouldn't be particularly difficult. Just to contribute to that point. Yeah. We have a question for you. Just to bring it to your audience. Do you have them in the course that you're attaching on you? And then the follow-up question So I think to answer your first point, I think my new to something that is definitely of interest to us and something that I plan to personally look into. With regard to certification, I think that's sort of the goal, as I mentioned. I think the goal is to eventually be able to pass all certification tests. So the certification group in OCF has laid out a large test plan which covers a number of various cases and ensures that you're compliant with the spec, both the core specification as well as the security specification. And so, yes, I mean, I think the goal is to actually be certifiable so that somebody can take this and really productize it. Yes. Yes.