Today, I want to talk about making great apps, both mobile apps and web apps, some of the problems that make that hard, and a few of the patterns and solutions that I think can really help us not only do that faster but actually make more robust apps that use less complex code and that are actually easier to understand. A little bit about me, my name is Lee Byron. I work at Facebook on a team called Product Infrastructure. So Product Infrastructure on this team, we build the technology and the tools that all of our products use to be the best that they can be. And in part of that, I work on a lot of our open source technology. So I'm a core contributor to React, I'm one of the co-creators of GraphQL, and I'm the creator and maintainer of Immutable.js. And I may mention these tools and a couple others just because they're relevant to how we're doing this at Facebook, but this talk is not about any specific library or framework. It's not actually about any specific platform or language either. What I want to talk about today is the architecture underneath the apps that we're all building. What I'm going to talk about applies just as much to an iOS app as it does to a JavaScript app. And these ideas can actually be implemented in a huge amount of ways. What I'm going to show you is kind of one way to do this idea, but there's a lot of different forms that this can take. And in order to do this, I think it's really important that we first get a shared understanding of what it is we mean when we talk about architecture. When we're talking about software, architecture is a metaphor. And what we're actually doing is we're borrowing from the idea of building actual buildings, and there's some really clear parallels that we can draw between these ideas. Architecture itself originates from studying one of the most important technological advances in building things, and that's the arch. This very simple shape has proved to be nearly infinitely composable, which allows us to build larger and more complex buildings than ever before. This is Vitruvius. He was a Roman scholar and architect, and 2,000 years ago, he wrote about the principles for satisfying good architecture. Firmitas, utilitas, and venostas. Firmitas means durability. A building should be robust and have longevity. And when we build apps, we look for the architectural choices that help us reduce bugs and improve performance. Utilitas means utility. A building should be relevant to how it's going to be used. The materials, the technologies, and the aesthetics that you would choose to build your home are going to be very different from building an office building or a place of worship or an auditorium. It's because each of these places is used in a very different way. Similarly, the architectural choices that we make for our apps can differ wildly depending on the complication of the app, how it's going to be used, if it's more static or dynamic, simple or complex, or if it's going to rely on more networked or live data. And venostas means beauty. Building should be both usable and desirable by using proportion, repetition, and scale. And obviously, we want our apps to be desirable and usable, but what I believe the parallel here is not to user experience, but to developer experience. The architectural choices that we make, they impact not only how easy or hard it's going to be for our teams and ourselves to improve our apps, but to also iterate on those over time. So architecture is about making fundamental structural choices about how we're going to build things with the qualities that Vitruvius set out for us 2,000 years ago. In software architecture, we make the same fundamental structural choices based on our understanding of what our app needs to do and the challenges that it's going to face. We choose our few elements, our abstractions, to create variation and robustness to support the role of our app, solve its primary challenges, and create a productive space for ourselves and our other developers and engineers. And for the information-rich user-facing apps like the web and mobile apps that a lot of us in the room have been building, there's been a really dominant architecture over the last decade or more, and that's MVC and REST. And for these kinds of apps, there's one single biggest challenge that we need to solve, and it's this. What changed? How can I tell when something has changed so that my models, my views, and my servers stay up to date with each other? And I believe that MVC has really just left us with a poor solution to this problem, because it attempts to solve this by adding even more things that can change. You've got models sending change events, views that are easy to get out of sync, and race conditions when you're doing multiple things interacting with the server. When models and views both need to listen to each other for changes, it's easy for what seems like what would be a small change to have these cascading effects that create unpredictable effects on your entire application.  You know, modern mobile networks, they're just really crappy. Okay? First, there's latency. We can measure latency often in large parts of an entire second. So minimizing requests to our servers is actually really critical for performance, and then there's intermittency. So we often talk about supporting offline mode, but as we all know, no one goes offline. Instead what happens is, you know, you go underground on the metro or you're driving in the car between cell towers. So what we're actually talking about when we say offline mode is intermittency mode. So handling these kinds of network failures is really critical. And while REST helped us model our data in terms of a network service, it can really be crippling to performance when our app needs to load lots of data that's dependent on loading lots of other data. So let's take an example, okay? Say we want to build a social calendar app. We're going to need to get our friends. We're going to need to get, you know, their names and their profile pictures, their avatars. We want to know the next events that they're all attending and the names and the details of those events. And so we're going to have to load a lot of stuff from our REST endpoint. And since REST APIs typically return URLs when one resource references another resource, then we're going to end up loading lots of these things dependent on others. We're going to have to wait for previous URLs to load before we can even start loading the other ones. And that means that even the new stuff that we're getting, like HTTP2 pipelining, it just really can't help us solve this kind of problem. And when network latency on a mobile connection is measured in big chunks of a second, this stuff adds up really fast. You're talking about for even moderately complicated apps, three, four, five second slowdowns just on the latency, not to mention all of the other things that have to happen all over the network. So needing to deal with this problem of handling both a flaky network and a slow network, it puts us in a really sticky situation. We might want to show a loading indicator if someone performs an action in our apps, but networks can be slow. So we might not want to have them sit and stare at that loading indicator. We might just want to guess what the server is going to do and show that to them right away. But networks can be flaky. So what if that doesn't work? Are we going to roll it back? What happens if they've done multiple actions at the same time and we've got to figure out what order to do these things in? It's a really big mess. And not only is this challenging, but it's also unfortunately a very common scenario that we need to solve in our apps. And so I actually think that there's a really powerful technique that we have to get a better control on these problems. And that's by tightly controlling what can change in the first place by embracing immutability. What's really exciting about this to me is that immutability is not more complicated than what we've already been doing. It's actually less complicated because we're removing a feature. We're removing the ability to mutate data. And when we give up the ability to mutate data, we're giving up some power. We're giving up the power and the abilities that come with that power, but in exchange for that we get new principles. And when we have principles, we have new guarantees about what can and can't happen in our programs, and we can leverage those principles, those guarantees, to do performance optimizations and other whole program optimizations to get a better, you know, app speed overall. And I really think, you know, this is the crux of what we do as software engineers. It's all about balancing between power and principles to get the power that we need to build the apps that we need to do, but also get the principles that we need in order to build the best things. And if we only cared about having our software have the most power possible, then we would have stopped at assembly or go-to, right? Like, all languages are turned complete. So, you know, we really have the same power everywhere. And go-tos are incredibly powerful. You can do a lot with them. But instead, we were always looking for more principled ways to apply the power that we already have. You know, so of course most modern languages, all modern languages, have forgone go-to in favor of for loops. And, you know, you can't do everything with a for loop that you can do with go-to. But the principles and the constraints that it provides, let you guarantee some things about what can and can't happen in your app. And many of the, you know, more modern languages, even for go-for loops in favor of map, filter, reduce, and other higher order functions that happen on things that you can loop over. So it's really not the power of your software. It's about the principles that you can leverage. And a mutable data brings with it these principles, this guarantee about what can change and when so that we can use techniques that previously we couldn't rely upon, like memoization and time travel. We'll talk about those a little bit later. So, you know, I'm done with MVC and REST. I really think it's time to rethink the core architecture for how we build all the stuff that we build all the time. And as I've been observing the apps, both that we're building at Facebook and that I'm seeing built by the broader development community, I'm seeing a new kind of app architecture emerge to better solve these problems that I like to call the immutable app architecture. And it's heavily inspired by similar architectures that we've seen and may have seen in functional, reactive programming environments, which has been the result of many years of research. So, of course, these aren't all my ideas at all. And it's actually heavily inspired by the programming language Elm, which you'll hear about right after me when Jack presents. So, immutable UI doesn't mean that our screen is frozen and you can't do anything with it. It's not like we're going back to 1998 web pages. Instead, what it means is that we're just going to embrace the principle of immutability at each point in the architecture of our application. That means that we're going to be able to control exactly where changes occurred in order to apply some techniques like memoization and time travel to build faster, more robust apps. So, let's start with first principles, views. Every platform that we care about building apps for already has a concept of a view. The web has DOM elements. iOS apps have UI views. Android has Android.view. But all of these have a similar API that helps you build this view tree, right? We want to use these because they can be used on each platform. But these APIs, they're not great. You create elements. You alter their properties. You add them to parent elements. All of these are mutative operations. We're talking about immutability. And after this, you got to keep track of all these references. You do things like looking stuff up by ID and keeping things around as members in your classes. It's really hard to do this. There's just a lot of stuff that you can do. So what we really want is an abstraction on top of views that lets us declare what views should be displayed at any point in time. And we call these components. And a component, it just defines this peer function. Kind of the state of things, the state of the world goes in and what you want to see on the screen comes out. And what a good component library should do for you is provide all the hard work of managing this mutable view API that all of the platforms that we care about actually expose. And it needs to do that in a way that leverages all the performance techniques that we can get when we apply this limited power in favor of the principle of having this one function to define things. So let's take a closer look at this. Just an example. In my example I'm going to call this MyView. And it's going to have some data. And when we render this component, it's going to have some visual views. So virtual views are a representation of what we ultimately want to see. They have the same structure, elements, properties, children. But they're really just in memory objects. They're not on screen yet. And what that lets us do is the first time we render these components and we get these views, our component library can take the virtual views and then create the actual underlying native views and then our component function is called a second time, we provide some new data, then we're going to get a new set of virtual views that's the output of calling that rendering function a second time. And so what our component library is going to do is compare virtual views from when it was previously called to now when it was just called and it's going to compute a diff. And then computing a diff, what we're going to get is a translation into the set of mutable components into the state that we want them to be in. So good component libraries can do this very, very efficiently. Running really complicated apps at 60 frames per second, even on some mediocre mobile devices. So components are really important aspect of this architecture and of course React is an excellent library that implements this concept. React lets you write pure JavaScript functions and then manages the mutable DOM elements that you want to use. So there's React Native. React Native lets you write these component functions actually using the same React API in JavaScript but actually will bridge down to the native UI framework. So it will use UI kit on iOS, Android views on Android, it will even use Windows UI views if you're building for Windows. But then there's also component kit. Component kit is this exact same idea but it's entirely implemented in JavaScript. That's fine too. You can dive in here and you can write pure functions in Objective C++ and manage the underlying UI views for you. And by the way, if you've ever used Facebook, hopefully you've used it once or twice and you've used the news feed on an iOS app, you've used component kit in action. That's how all of our news feed product is built. So these component functions, they need some data as input and that's where models are going to be built. Data management libraries before these are immutable models which means they're just pure data, they're very simple, accessors only, no setters, no events, nothing like that. And I really recommend building these in JavaScript, just plain old objects or whatever the equivalent of your plain old pojos in Java. Or you can use persistent immutable data structures if you need to do something more complicated like the ones that I mentioned before. And then of course we need to get those models from our server. But I want to first take a closer look at these models and components together. So these two concepts are actually really tightly linked. They're coupled. When a component wants to render something new, you're building your app, you're adding a new feature, then you want to make sure that the corresponding model also is knowledgeable about whatever data you need for that new feature. That means that the server is also going to send that new data as well. So we're going to add a new feature. And then we're going to make sure that it's represented in our models as well. And since one model can appear in multiple views, and it's easy for these to end up in kind of different parts of your code base, it's really accidentally possible to kind of do something in your view and forget to put it in your model, and then you got broken UI. Or what I found is actually more common is that you're refactoring and you're kind of deleting some experiment that didn't work or something like that, and you forget to remove it from your model. And now you have not just the function that you need to take the state of the world and give you your views, but also all the things that it will need from the model, then you have both of these things within the same place that define both what data you need and how to render that data onto the screen. Because they're described right next to each other, it's really easy to avoid these problems of overfetching, underfetching broken UIs. And we call this co-located data dependencies. And at Facebook we do this using a tool called GraphQL, which if you're here for the back and you might have already heard a little bit about. But if you haven't, GraphQL is an API query language that we've developed at Facebook as a replacement for REST, and it powers all of our mobile apps at Facebook. And if you haven't seen GraphQL, I'll just give you a brief overview of what it feels like to use GraphQL. So this is kind of the hello world of GraphQL queries. I just want to get my name. And the first thing you'll notice is that this looks a little bit like JSON. We've got these curly braces. They look a little bit like objects. We've got these things here that look a little bit like object keys. We call those fields. And if we send this query to our GraphQL server, it's going to resolve and come back as a JSON body. And one thing you'll probably notice here is that this JSON body and the query have very similar structure. And this is an important part what makes GraphQL easy to learn and use. And it also provides some principles that lets us do some really interesting optimizations with GraphQL and sophisticated systems. And we can also request fields of complicated data. So here there's a profile picture and avatar. And it's got, you know, not just a URL to go load, but also the width and height so we can make sure, you know, we get the right region of the screen before that URL comes back. And I bet you can already guess what this looks like if we run this, right? It's going to look exactly like the query. But more importantly, GraphQL is designed not just to query stuff about one resource. It's designed to smoothly navigate between resources in a single query. So for example, I can get not just my name, but the names of all of my friends and do that in a single query. And notice that here's where a REST API would have given us a list of URLs to go load a second time.  But it's a little bit harder to figure out how that multiple levels down. And GraphQL makes that really easy. So remember our example from before where we were making a social calendar? Well, this is all the data that we need to render that social calendar. We've got our name, we've got our friends, we've got our events, right? And we can do that in a single roundtrip. Huge difference. Dramatically improving our network performance. And in order to match how developers, how they think about views and to allow for portions of queries to be recycled, GraphQL has this language feature called fragments. And what fragments let us do is describe co-located data dependencies right next to our components. And so here we have a component that describes both the data that we need and the rendering function to do a profile picture on Facebook. So we need a profile picture of our user, we need the width, height, and URI, and then we're going to render an image tag. And what we can do is we can use that component within another component. So here we're rendering, you know, maybe a row and a list but we want to know the name of the user, we want to know if they're friends with them not so we can render this button and then we want to render this profile pic. So of course we're going to need the name and the are you friends but for profile pic it's a little bit cumbersome to repeat that data so instead what we do is we just reference this other fragment and then we get all the data that we need, no more no less. And query fragments, they let us define not just the requirements next to one component and compose them one time but they compose all the way for your entire app so you can have a really complicated application which tons of nested views and then you can describe all those things and roll them up into a single query that we can run in one round trip to the network and get all the data exactly as you need it no more no less to render your app which is huge for network performance also for understandability. Okay so what we have so far is great for like a read-only app like maybe a news reader or something like that but what about apps where we have actions we have stuff where users are going to interact with our views. We need to perform actions we have these models that are immutable so we're going to need one place where we can apply those changes we're going to call that state it's really just like a bucket where we can hold on to all of our models. So we also have the initial query to our server that's going to give us kind of our initial state and of course we want state to also be immutable so we can't change that thing so what exactly is happening here? Well let's look at an action an action is just a function it takes the old state of the world in and it returns the new state of the world so you might write an action that takes in the old state of the world and then makes some changes to some models applies whatever change you want and returns a new version of the state with that change applied and once this action returns a new state with some new models then we can provide those to your components which are going to go back to your views which are going to update the underlying native views those then you can act on and we can then get back to our state again so it's a loop and so you might be thinking okay that's fine but like these functions that change your whole state you're going to do that for every time the user does anything that's going to be really slow right? Well actually not really and not really because we can leverage the principle of immutability to do this really cool thing called structural sharing so what structural sharing lets us do is take a previous version of some immutable thing and some change we want to apply and then recycle as much of the old version that thing as possible literally all the underlying memory we want to recycle if we can so let's we can do this for plain objects but this actually enables an entire class of really interesting data structures called persistent immutable data structures I'll just illustrate a little bit how this is going to work and by the way if this is interesting to you and you're a JavaScript person you can check out immutable.js which is just an implementation of these data structures so let's take a look at this example here there's some structure of data and we want to make this change so in order to make this change and we can't do it in place we kind of have to copy this node with a change applied and they can reference other nodes that's fine but anything that points to it also needs to change in order to have that new pointer again no mutations so we copy that thing and we do that all the way until we get to kind of the top of our data structure and once we do that then we have a completely new structure with our change applied and importantly we've recycled a lot of this you know this is super contrived I just got it to fit on the screen but it still recycles more than 50% of what's happening here and in practice it's more like in the 90 plus percentile most importantly we haven't changed anything about the existing data structure we can use this continuously that's totally fine we can actually use both of these at the same time if we want to that'll continue to work and as soon as we don't want the old one anymore we can just let go of it and the garbage collector will handle that for us and any modern JavaScript VM or Java VM or anything like that with a good garbage collector this stuff is super performant it's not going to be a problem and so by doing this we can really leverage immutability while still having very good performance for CPU and memory and a prime example the kinds of things that we can do when we have this is memoization so memoization is when you take a function and you know if you call it a second time with the same arguments you want to kind of skip running the function and just return whatever it returned last time so this is a cool performance technique that you can do for expensive functions like rendering a UI and so I just want to show like a really basic example this is going to be the sum function so we're going to take a list of numbers we're going to add them all up and I know I'm going to give this like a really big list of numbers so I want to memoize it so I'm going to give a list from one to a million and then I'm going to add them all up and then I'm going to push on to that array and then you know call this again so this is what I want to see right so I went looking for this function I literally went on stack overflow and it's like JavaScript memoize and it was like here's the most uprated version of memoize I simplified it a little bit just to get it to fit on the screen but this is largely it and I don't know if you guys see the problem with this but it's this JSON Stringify of course we're doing memoization to get better performance but JSON Stringify is really expensive especially if the input is big which is exactly why we're doing this and so as you might expect running the memoized version of this is actually much slower than running the not memoized version totally not what we want to see happen so I rewrote the function and instead of using JSON Stringify I just want to see if these two things are equal that's all so I did this so I ran it and at first it looked really good right I called it a second time and it looked like it was basically free and then I pushed my next number and I called this again but this time it didn't do what I expected it looks like it memoized and it didn't return the right answer of course this is why an array is mutable when you push into it you don't change the identity of that array it's still equal to itself so this check passes and got it now I understand why JSON Stringify was there but let's try that same thing and use a mutable list from a mutable JS so same exact implementation of memoized I haven't changed anything I've just replaced arrays with lists immutable lists so far so good this basically works the same and if you're paying really close attention you might notice that calling some on a list rather than array is a little bit slower that's to be expected immutable data structures are a little bit slower than their mutable cousins but what we want to do is reap that performance benefit back by applying these global optimizations and now I'm going to push into it what will happen with the immutable data structures when you push into it rather than changing that thing it's just going to return a new version of itself so we're going to make sure that we keep track of that and then we get the answer that we want so this is great so back to our diagram we're missing a big important piece and that's how our actions are going to communicate with our server doing that synchronization so let's go back and look at what an action is an action is this function that takes the old world and returns the new world but if we're going to go to our servers this isn't going to cut it we need asynchronousity we need to be able to wait for the server to get back to us so what we really want is a promise or a task that will eventually give us back our new state but like we talked about this could be slow we don't want to be slow we want to show people updated UI as quickly as possible and even on a really fast network connection even if you're on a desktop computer and you've got a hard line people are really good at noticing delays we notice delays in hundreds of a second so even on a fast network connection it's noticeable but of course on a more typical slow mobile connection it's going to be just really painful so here's actually what we want to do we want to return immediately our guess at what we think the new version of the state is going to be which we can do locally but we also want to return a promise for the real version of the new version of the world that the server is going to help us fulfill and that brings me to one last problem and that's what do we do when there's multiple actions happening at the same time and for this we need a queue so this is the last important part of this architecture and it's going to make sure that things happen in the right order and we don't get race conditions so a queue, what it's going to do is going to keep track of the most recent version of the true state what our server thinks is true and then it's going to keep a list of the options or the actions that are currently in flight so say a new action comes in what we're going to do is immediately compute what we think the state is going to be we call that our optimistic state and then we send this to the server and if a new action comes in, that's fine we just add it to the queue and we compute a new optimistic state and then when the first one is done that's great we can just remove it from the queue we're going to get a new version of our true state from our server from having done that and we'll just recompute the optimistic state if there's anything left in our actions queue and then when that second one comes back then we're dealing with true data again nothing new to apply we just have true state, optimistic state, the same thing so this is really interesting because it lets us model apps that let us first create a thing like a to-do item wouldn't be complete without a to-do app example here and then lets us make changes to that thing even before the server knows that it exists and this is usually something that's hard to do so first we're going to create a to-do and then we're going to change some stuff about that and at this point we don't really know how to tell the server hey set the due date of this to-do item that we don't know anything about yet so we've got to wait for the server to come back and say well here's the unique ID for that to do and then we can replay that action to get a new optimistic state and once that has been done then we can actually have the information we need to go to the server and give it the right info to do that thing and then we have the state of the world that we want so this kind of behavior it's typically really hard to do in traditional apps you may have bumped into this before I do kind of all the time and it's really hard to do without creating race conditions and so this technique lets us avoid the majority of the race conditions that we end up running into alright let's take one last look at this whole architecture our components describe the data that they need which informs the shape of our plain old object immutable models which are first created as the result of a structured query that we send to our servers which creates our app's initial state from there these models are provided to our components function which is going to describe our views which is actually created in the underlying UI view framework and then we're going to interact with those views which is going to create actions those actions are going to optimistically update our states but they're also going to be added to that queue and asynchronously sent to the server to let them know about that change and when the server responds we're going to get the action removed from the queue applied to get an update version of the state which is going to contain new models that again to our component rendering function which is going to describe new views which will then take the underlying native views and update them as efficiently as possible and then we're going to repeat that forever and ever and ever and ever until the user leaves your app you know kind of depending on how good your growth team is so this I think makes some dramatic progress on solving the challenges that we have in the modern apps that we're building today let's just keep track of what's changed keeping our UI up to date synchronizing with the server that more and more recently is at the end of a slow spotty network connection and we can do all this precisely because everything is immutable if part of our codebase, any part of our codebase could edit our models or reviews at any point in time which is super common in NVC frameworks then we couldn't use any of these techniques anymore we would have given up principles in favor of power we couldn't apply actions in order we couldn't easily roll back state we couldn't do these optimized view recycling techniques and we couldn't do all this on multi-threaded platforms like iOS and Android where a mutation makes jumping between threads very difficult and also this architecture it's simpler than NVC and REST because there's no direct mutation so I know I've covered a lot of pieces here and it feels complicated and of course component libraries are very sophisticated and they can be that way and they can be very useful principles, pure functions immutability and composition and what makes me really excited about this is that this powers a lot of our apps at Facebook where most of our mobile apps actually follow this pattern I mentioned earlier that if you use newsfeed you're using some of this stuff newsfeed was actually one of the inspirations for putting this talk together so I really think that traditional NVC and languages that have mutation by default are going to slowly be added to the pile of old ideas but I'll leave you with this NVC and REST they did not solve all of the problems that we face in app development but what I've presented today also won't these ideas are going to be far from flawless and they might not be right for the app that you're building and I want all of us to continue to challenge the notion that there's like one right way to do things that's not true and also just recognize how quickly and continuously our ideas about what good architecture is and good technology ideas are just every time I finish building something I just have this urge to go back to the beginning and start over because of course by the very nature of having built it I've seen all the things that went wrong and I want to do it again with all the ideas that I have to make it better but of course if I did that as soon as I was done I'd want to do it again and there are other ways to do it better and so for just this reason I think it's the process of this architectural improvement it's just never ending it'll never end and we're never going to end up at like an architecture in Ravana where we have all the answers it's just not going to happen it's an important realization and what fuels me is this process of exploration and trying new things it's the process of improvement that's exciting rather than some mythical perfection in our apps so I hope that you found this these ideas of immutable app architecture interesting hopefully they're useful for some of the things that you're building today but more importantly I hope that it inspires you to continue to improve on these ideas so that we can all build even better apps tomorrow so thank you is there like a a monitoring that you do at Facebook to make sure that things are performant how do you take off yes I mean I would say that almost every engineer is charged with some performance metric and we have tons of engineers that are literally dedicated to performance by their building tools doing that performance monitoring it's a super important part of why we're doing what we're doing and actually performance drives a lot of the architecture choices we make so both react and components in general what it lets us do is measure the time it takes to render very small pieces of the screen so if something gets slow we know exactly where it is in the app that it got slow and same can be said about GraphQL rather than having one endpoint that does a bunch of stuff and then returns you JSON and if it gets like a little bit slower you might not notice and GraphQL we measure the performance of every single field so if one field slows down maybe like 10x and it went from one millisecond to 10 milliseconds your whole query that went from 500 milliseconds to 510 you might not have noticed but seeing one to 10 milliseconds in one field you'll definitely notice and so just making sure we're making choices that help us measure that stuff and then optimize that performance is just super critical Excellent I know I spend lots of time in Southeast Asia and obviously people's experience of Moa networks is significantly different from here given all the JavaScript that you use what do you do for people with like our old feature phones in Burma and Bangladesh and places like that Yeah we actually build totally different versions of Facebook we have a product that's called Facebook Light that actually lights a little bit of a misnomer because it can do everything that the main Facebook app can do but it's really optimized for lower lower quality versions of Android and then lower quality networks so the common networking technology in India is a 2G connection so I don't know when the last time you guys used a 2G connection here was 2006 maybe 2005 before it was replaced basically worldwide or country wide with 3G dealing with 2G connections is more of a latency problem actually than a bandwidth problem and so we spent a lot of time thinking about how we can do all the work that we need and as few trips to the server as possible which has also driven some of the architecture we've So it's reducing round trips to the server Absolutely that's always number one Excellent a question from the crowd Why you no use semicolons in your JavaScript I'm actually really inconsistent with it so kind of per project I try to be consistent within each project but you know if you're curious about this you can look up some stuff about automatic semicolon insertion and how sometimes it can bite you and sometimes it can and I would put that as one of the great debates of the JavaScript community along with like should we pick 80 columns or 100 columns at the end of the day it doesn't matter as long as you're consistent with the code base Talking of great debates, GIF or GIF I know that it is supposed to be called GIF but I'm sorry that's something that you eat and GIF is how I've pronounced it since I was on the internet and you'll have to kill me to make me change and that's the right answer Give it up for Lee


What's going on guys it's your boy DPJ here today with another Destiny video and in today's Destiny video I'm gonna run you guys through my Prison of Alders loot and all three of my characters running 32, 34 and 35 but before we get into the video we guys do enjoy this at the end if you could leave a like I will appreciate the support okay so getting straight into it start with my hunter from the level 32 Prison of Alders I've got an armor core, five relic iron, four strange coins, four marks of light and detection force queen fusion rifle okay moving on to 34 I got five strange coins I got an a ferret light, I got a weapon core, five marks of light, five relic iron, detection force fusion rifle again and a ram warlock exotic army absolutely incredible okay moving on to 35 and I got the alder cipher again meaning the second time I've got it in two weeks I also got an a ferret light, I got an armor and weapon core, I got five relic iron, I got a heavy ammo pack, I got three marks of the light and I got the wolfsbane queen heavy weapons so I'm not bad whatsoever on my hunter last week moving on to my titan and from the 32 I got an armor core, five relic iron, six marks of the light, a special ammo pack, a treasure key, three strange coins, her right hand auto rifle and the ACD slash the earth feedback fence exotic gauntlet which I actually at the time didn't currently have moving on to level 34 I got a ferret light, a weapon core, four strange coins, I got a royal emma feast, I got five marks of light, I got a token of identity and I got her mercy hang cannon moving on to the 35 and I got an alder cipher again, I got a ferret light, I got a weapon and armor core, I got five marks of light, I got five heme influence, I got four strange coins and I got her mercy hang cannon again so again not a bad run whatsoever got that alder cipher again which I'm pumped about that will be my third alder cipher in total meaning I can get all the new exotic weapons that drop from the prison of the alders okay moving on to my warlock and with the 32 I got an armor core, six marks of light, I got five relic iron, I got three strange coins, I got a raiding dance machine, exotic leg armor for the hunter and I got the detection force fusion ride for yet a game moving on to the 34 I got the ferret light, I got a weapon core, I got six marks of light, I got five spirit bloom, I got a royal amethyst and I got the herb benevolent sniper rifle moving on to the 35, I got a ferret light, I got a weapon and armor core, I got five spirit metal, I got a heavy ammo pack, I got the helmet in most light, exotic titan helmet and I got the payment six queens portion rifle so again not bad getting an exotic on each character also getting two alder ciphers across my hunter and my titan I got one on my warlock last week also so I cannot complain so all in all I've had great loot drop from the prison of alders this past week hopefully I can keep it going this week coming but guys what did you get from the prison of alders last week did any of you guys get the alder ciphers let me know down below hope you guys enjoyed the video if you could drop a like I would appreciate the support if you are new to my channel and enjoy daily destined to be sure to subscribe if you don't follow me on Twitter be sure to follow me at DPJSC08 my Twitter is linked in the video description again thanks for stopping by and peace out until next time peace


In this section, I will be explaining how the government regulations can help the investors to overcome the problem of adverse selection or the problem that they do not end up investing in lemons. The role of government regulation is that it helps investors or all the key players in any financial market to develop such regulations. It helps investors to develop much more information so that they can make a better decision and try to reduce information asymmetry through their regulations. As I mentioned earlier, information asymmetry means that the seller's level of information about that particular financial instrument and the buyer's level of information about the same financial instrument is not equal. We call this information asymmetry. If they are both equal, we will say that information is symmetrical. Both ends have equal information. But as information asymmetry is a common phenomenon in a financial market, it means that the seller has the security of any financial instrument, where the money will come from and generate profits or losses, where the buyer will have to pay the end of the day or by the end of the fiscal year. The seller has more information as compared to the original firm owner or the firm's manager. The government helps to reduce information asymmetry so that it facilitates investors and the company to disseminate such level of information. You have to do some annual reports and you have to spread some level of information. Apart from this, there is a lot of information about investors. When the non-performing or poor-performing firms or very good financial firms are not strong firms, when investors are told that these firms are not able to meet their finances properly or they are going to have financial problems, then what happens to them? They can have bad sentiment, their overall goodwill can be ruined. So, to cut this particular thing, what happened? The government makes some rules and regulations for regulation. They make these rules and regulations so that when they operate in any market, they have to follow the rules and regulations. In many countries, the government regulates these things through institutions so that they disseminate the level of information to a large extent. People know what the overall financial position of the firm is and how much income they have generated. Pakistan also has such a system where the Security Exchange Commission of Pakistan, which we call the SECP, regulates these firms and defines the rules for them. They tell the firms which information they have to disseminate, what kind of rules they have to follow, what kind of laws they have to perform and according to which laws they define the operating procedures. By doing this, the information asymmetries can be minimized to a greater extent. Similarly, they are required to provide sufficient statistics that they maintain a specific data set on specific variables. But in this whole series, we see that the bad firms, i.e. these are bad firms, the bad firms mean that they are not financially very strong or they are going to collapse in the future or they are not generating much revenue with them. If they have taken from people their investments, they have sold a lot of their stocks in the market and their overall financial performance is not good, and they are going to incur a lot of profit and losses that people have bought from their stocks. So, the bad firms have to follow all the rules and have to publicly announce their indicators in the form of annual reports, but what do they do? To deceive people, they fabricate their own information, they twist it a little, or they are performing poorly on the indicators, and they do not update the data on it. By doing this, they maintain the problem of adverse selection, i.e. the government regulation has helped us to regulate regulatory bodies so that investors do not do adverse selection and do not invest in lemon. But the bad firms are also saved from this regulation sometimes. What do they do? They do some fudging, they manipulate or they are not available. They do not share the information of key variables through which the information asymmetry or adverse selection works, but it does not end at all.


A good deed can go a long way like raking the leaves for the elderly or raising money for those in need. And this week's goal, the Naples Haiti Clotter, tells us how Bemidji Middle School gives a new meaning to giving back. Bemidji Middle School held a friendly competition amongst the students that went out in the community on teams soliciting donations for the Village of Hope, an organization that helps with homelessness. You should pat yourself on the back because they raised a considerable amount of money. They exceeded the goal that we had set. They received help from others with handmade blankets, supplies and movies. After their fundraising efforts, they celebrated with Olympic Games. It was mostly just family and friends, so then you just ask them if they wanted to help you and raise money and items for this cause. The theme of the Olympics came about because the kids are currently studying Greek mythology. Consider the cafeteria in Olympic Stadium with games like putting, frisbee toss and the bunny hat. About 107 graders played and they were looking forward to this day of celebration. I was really excited and happy because it's fun to participate in these things and makes you feel good inside when you give stuff. Putting others before you and helping those in need was another teaching moment. You really kind of see how much stuff you have and you just take it for granted, but a lot of other people give a lot just to have like shampoo or soap or just toothbrush and toothpaste. There wasn't just one winner, you could say they all won a gold medal. In Beminji, Haiti Carter, Lakeland News. If you've enjoyed this segment of Lakeland News, please consider making a tax-deductible contribution to Lakeland Public Television.


Hey y'all, what's up? My name is Sonali. Welcome to my channel if you guys are new and if you are definitely hit that subscribe button. Today I'm going to be filming a very highly requested video and I'm so excited to finally answer all of your questions about my breast reduction. So I got it in September of 2021. It is currently July of 2022. So it's almost been a year since my surgery. So in this video, we're going to be talking about post-op scars. How am I feeling? Am I regretting it? And I've blocked the whole entire process from the pre-op appointment through recovery and everything in between. And I know a lot of people are interested about the cost of the surgery and that's also in one of the pre-op vlogs. So definitely go check that video out and I have a whole playlist about my breast reduction surgery that I will link in the description box. First off, I wanted to talk about what made me decide to get a breast reduction. I have been thinking about it since college. So that was like 2016-17. I actually tried to get it covered by insurance in college and see how that would go and it did not go well. I went to the doctor. I complained about it multiple times and they told me to go to a back doctor where I got x-rays. And they pretty much said I had bad posture but nothing was wrong with me. And I'm like, yes, there's a reason why I have bad posture.  I know what I want. I know I want to get the surgery. So years later, I saved up and was able to get the surgery on my own without insurance. I'm not too sure about like the whole process of insurance or how long it really takes to get it approved and all that. But I did get a lift and a breast reduction and the lift was actually the most expensive part. So that was definitely interesting. I got my surgery done at Westlake Dermatology with Dr. Chiki Obi here in Austin, Texas. I had a bunch of questions come through over on Instagram about the surgery. But before I get into those, I wanted to go through a list of things that I highly recommend that you purchase before your surgery. And I will have it linked all in the description box so you guys can collect them. And I think most of the items you can find on Amazon. So it'll be super fast shipping too. The first thing you definitely need to buy are the bras with the zipper in the front. My surgeon only gave me one and I'm pretty sure they have like mini clasps. And it just wasn't as comfortable as the ones I actually purchased myself. And they came in a pack of three, I believe I actually wore these bras months after my surgery. And I still wear them just because I feel like they're really secure and super freaking comfortable. Next up are these rinse-free bath sponges. My surgeon actually didn't tell me about this. But somebody else recommended it to me when they went through a surgery. And let me tell you, these came in clutch because you can't shower for about a week. So these just made me feel so clean. And then my mom washed my hair in the sink. I just kind of like laid on the kitchen island. So that's kind of how I dealt with just not being smelly. And also itchy will get into that because the next thing is gauze and tape. So the most uncomfortable thing about the surgery in my opinion was having drains in me. And these were so freaking itchy guys. So itchy. I was like literally driving myself insane because I couldn't itch them because they're like in me and I don't want them to move and it kind of like hurts when they move. So I would highly recommend to get gauze and tape because they're going to tape up the drains. But when they become itchy, it really helped to change out the gauze and tape. Or you can also call your doctor and ask if you can take a Benadryl. They said if I really needed to I could, but I changed the gauze and I was totally fine. So yes, definitely, definitely get some gauze and tape because you do not want to go insane. And if you don't have drains, consider yourself very, very lucky. Your surgeon will probably ask you to arrive in a button-down shirt and you're going to want to buy a couple of these. And I also recommend to get a oversized fit because you don't want it to be like super fitted. I feel like that would be very uncomfortable.  So the button-downs are just really easy to take on and off. Liquid IV, which this was actually the first week I tried these magical powder packet things. And something about it made me feel so good. I guess it just made me feel like a lot more hydrated. To treat the scarring, my surgeon told me to use bio oil and just like massage it into the scars. Like, I don't remember how often, but pretty much every single day, if not more. And I was also recommended to get the Scarway Band-Aids, which I'm going to be honest, I didn't really use because they were really annoying. You would have to cut them and like place them on like your curved boob and they just like wouldn't stay. So I definitely think that they would have helped a little bit more, but I was just not very convenient. So I didn't really end up using it very often. Everyone asks how bad is the pain from the surgery? And I'm going to be totally honest. I don't remember feeling any pain whatsoever. It was mainly the itchy drains. Like the drains are right here. I still have scars from the drains actually. So they're right here on the sides and they were so incredibly itchy. I mean, I already told you guys this, but that was like the most uncomfortable part. And then also, I'm pretty sure the anesthesia was a tube down my throat. And I kind of remember them saying like you're going to have like an itchy throat the next couple of days, but I had a very sore throat. Like I remember like feeling like almost sick because my throat was that sore. So just a heads up on that. I'm not sure if like that's the only way to get anesthesia. But if you get a tube stuck down your throat, that's probably why you have a sore throat the next couple of days. My second most asked question was how was recovery? And I've logged the whole entire week of recovery. So if you guys are interested in all the in-depth details, definitely check that video out, but I will kind of like recap it for you guys. So I got the surgery on Monday. I took off work Monday through Friday. And then by Saturday, I was kind of feeling like, okay, I was able to like get out. But then I went straight back home because I was like, okay, that's good enough for me. And then Sunday, it was kind of a little bit more. I was able to like go grocery shopping, not like move a ton, but like just be outside without feeling too fatigued. But every day kind of got better. I definitely recommend to just take a full week of work off if you can. I was extremely lucky that my mom was able to come over here and just help me through recovery. I live with my boyfriend and it would have been totally fine if, you know, he was on his own. But just something about having your mom there is so special. She was able to wash my hair, help me bathe, feed me. I'm very grateful that she did that for me. The whole week was this insane emotional roller coaster. I found out that it might have been the pain meds that did that to me. But like literally the first couple of hours that I was home from the surgery, I was like editing a video. I was super happy. I was like totally fine. I felt like myself like it was insane and then like it kind of spiraled down from there. So like I would kind of cry sometimes and just be like really high highs, really low lows. And then the day before my mom was leaving, I was crying because she was leaving and then she switched her flight. And it was just like wild to say the least. And like I said, I blocked it all in detail. So definitely go check out that recovery block. But overall recovery wasn't that bad. I'm pretty sure two weeks after I got the surgery, I went to ACL, which is a music festival. So like you're out all day long for three days and I was totally fine by then. And a month after my surgery, I actually had a beach vacation plan and I was able to swim. I'm pretty sure four weeks after the surgery. Also, if you guys are wondering what you can and can't do before and after the surgery or two to three weeks, you're supposed to avoid bath tubs, jacuzzi, school, anything that will have your boobs submerged in water. I put that in my pre-op vlog. I go through like the whole list of what the surgeon gave me. It's very interesting to see exactly what you can and can't do because I was kind of surprised by some of them. I know a lot of people are very interested in the scarring of the surgery because I know that was my biggest hesitation. Do I want these scars on my body pretty much for forever? Because yes, they do fade, but they're still very much there after almost a year. And honestly a month or two after, I didn't even care. I didn't even notice like I was so happy with my boobs. So I think just having these scars are like totally worth it. They are way bigger than I thought they would be. They went from here to all the way up here on each boob and then around the nipple, which you can't see at all, but then like a little line down here. So that is pretty much the only thing I see every day is the line because you can't really see the ones down here.  So yeah, the scars are still very much there, especially the ones on my boobs right here. I'm definitely not going to show that because I'm not going to put my boobs on the internet, but I will show you guys the scarring right in the middle of my boobs. Honestly, like even a month after the surgery, it just kind of looked like a shadow was there and you can't really tell that there are scars unless you look very closely. I will say that my surgeon told me that since I have a darker skin tone, my scars were not going to fade as easily.  I kind of stopped doing it, but I definitely need to get back into it, especially in the summer months. Like I don't want them to get like too exposed. A couple of random things I wanted to mention is that one, the anesthesia is probably going to make you constipated. So just be aware of that.  I feel like I remember almost passing out. Honestly, like I don't know why it was so weird to even just see it. And I mean, obviously I was very happy with it, but it definitely takes some time to get used to your new boobs. And I've actually gotten some DMs where people were missing their cleavage and I'll tell you guys, it definitely comes back, which may be good or bad for some people, but yeah, they definitely drop a little bit and I'll get into that a little bit later. But let's go through the questions that came through on Instagram and there is a ton and I want to get to everyone's questions. I'm going to try to keep them short and go through them really fast. First question is, do you regret not going smaller? Yes, 100%. I went from a triple D or a double D. I never know because everyone's size is so differently, but I was a D cup and I asked for a C cup and I really wish I asked for a B cup. Even though the surgeon agreed that a C cup would look really good and it does look really good. I just really wanted like small boobs so that I can wear even more tops because I still feel like my boobs are like a good size and they're still pretty big, but they're not like as huge as they used to be. I do feel like they fit my frame a lot better. Like I do not regret this surgery at all. The past few months, I do feel like they dropped like a good bit, which kind of sucks because I loved when my boobs were like here, which they will be for like, you know, the first couple of months. And I also do feel like I put on a little bit of weight so I'm not sure if that's the reason why they got bigger, but I do wish I went smaller. Next question is, do you think your posture has improved? And absolutely not. That's all on me. Like I think I need like a little back posture tightener, which I literally have. I just never use, but I will say that I do think it helped with the back pain that I used to get. I am a photographer and my back would start hurting so incredibly bad after an hour or an hour and a half of shooting and just standing up and having this big chunky thing around my neck. So I definitely think that's helped a little bit. I don't feel like I have like those back spasms anymore. So that is very nice. Someone asked if I had to change my bras after my breast reduction and I actually got a bunch of bras from Nate Why. It was actually a sponsorship I did with that. It was there barely there line, but I literally wear them all the freaking time and they're not like the cutest bras ever, but I don't really care because I'm able to not even wear a bra anymore, which is amazing. Like this body suit, for example, I'm not wearing a bra. I will say that sometimes when I'm wearing t-shirts and stuff, like when it's like more flowy and not like holding them in a little bit more, I definitely wear a bra, but I really, really like the barely there line from Nate Why and I did do a sponsorship, but I seriously wear them all the time and they're just like more comfy bras. I also like the skims triangle bra. I wear that one a lot. I need to get more of those, but I think they're like almost always sold out, which was so annoying, but I will link the exact styles I used down below. And someone told me before my surgery to not wear any like underwire bras because they're like right along the scars. So they said something about like the scars would be like worse if you wore that. So it kind of scared me away from wearing those types of bras. So I think I tried to wear it once, but honestly, it was like too soon and it was just like really uncomfortable. So I've really just been wearing my Nate Why bras and my skims bras and I still have yet to get measured at like a store. So I'm not even sure what size I am currently. I really need to go to like a SOMA and get measured soon. Maybe I can vlog that for you guys. That would be very exciting.  Like I said, they dropped and so they're pretty like normal. They feel really normal. They're like normal feeling boobs, I guess. But when I first got them done, they were like up here. I already told you guys this up here, rock hard and I kind of missed that. I didn't have any cleavage and I didn't really care because I loved those small boobs. But as you can see, the cleavage is back and they feel like normal boobs. But the nipples, let's go into the nipples because I feel like that is kind of just like one of my main issues with the surgery right now. They're kind of being wonky. I don't know why. So first off, my boobs were pretty low, you know, before the surgery and so my nipples were too and now they're so high that I have so many nipslips because I don't even like know that they're out, you know, and that happens a lot in bathing suits. I don't know if everyone has this issue, but I don't, I don't just like they're so high and maybe I'm not used to it. But I don't know if that's normal for them to like be placed so high. And my surgeon also made them a lot smaller, which was honestly nice. I didn't mind that. Also, someone asked if I can feel my nipples and I don't really think so to be honest. Like, I mean, I feel, I know that I'm like doing that, but I don't think they can really feel anything, which is weird. My parents were very supportive of the surgery and I was 24 at the time. I was already out of the house. I had the money to pay for it. So they didn't really care that I was doing it, I guess.  But her base hesitation was if I was able to breastfeed once I decided to have kids. And so when I went to my first consultation, I had like a list of all these questions, but the biggest question was that. And basically, I didn't even know this, but apparently not everyone can even breastfeed. She was saying that there's a 50-50 chance of you being able to even do that. But the technology these days, I should be able to breastfeed if I choose to. But once that day comes, which is not anytime soon, I will definitely tell you guys if I'm able to. Last question is, do you feel lighter when moving or working out? So before my surgery, I was really into doing 12-3-30, which is a treadmill workout where you do like a 12-inclined 3-speed for 30 minutes. And I literally have videos of my chest just bouncing up and down, which like that definitely does not happen anymore. And I've also tried to do more running now, which I definitely still need to invest in like a little bit more of a supportive bra for that. But like even in just like my set active bras, running feels a lot better because like this is just not like bouncing up and down. You don't feel that like tension on your chest. So that I would say definitely feels a little bit different. But like weightlifting, I don't think I ever really had a problem with that. Overall, I am insanely grateful and just so happy that I was able to get the surgery. I know it is not cheap whatsoever and it was like so worth every penny. And I do not regret it one bit because I feel like it just fits my frame so much better. And I'm able to wear clothes that I wasn't able to fit into because my boobs are so big and they would just spill out over the top or the sides. And now I really don't have that problem and I am still a size 10 slash large. I just fit my clothes so much better and that is like the best feeling in the world. So if you are looking into it, I definitely recommend to do it if you are able to. And once you get that gut feeling that you really want to do it, go ahead and make that consultation and book your surgery date. I'm pretty sure I had my consultation in maybe like July or June. I really can't remember at the top of my head. I was really lucky because somebody had canceled. So September was the next surgery date available. So that still was a bit of a wait, but I think it would have been a little bit longer. And last year people were still kind of like scared to get surgeries because of COVID and everything. And so now I feel like more people are okay with getting surgery. So my thought process would be that the weights would be even longer. So like I said, if you guys are thinking about it, definitely do your research now and like make moves because I feel like once you decide to get it, especially me, I'm very impatient and waiting for the surgery date belt like years. And if you guys are in Austin, Texas, definitely recommend to go to Westlake Dermatology. Dr. Chiki Obi was amazing. If you guys do end up going to him, definitely tell him I sent you. So that wraps up this video. I'm hoping I don't forget anything. And if you guys have questions, I definitely recommend to watch every one of my breast reduction videos because I swear I go so in-depth and give you guys all the T on the whole surgery and process. And if you guys have any more questions after that, my DMs are always open on Instagram. It is so underscore gnarly without the G. I also made an Instagram highlight and a TikTok playlist answering more breast reduction questions kind of just going in depth. And I'm pretty sure on my Instagram I have a daily kind of written out vlog of how I was feeling every single day. So it's definitely interesting to look back and see how exactly like the whole process was because like now almost a year later, I don't even remember half the things. I'm just so happy I did it for you guys. Leave here. Definitely hit that subscribe button and I will see y'all in my next video. Bye.


Well, I'm going to tell you about recent developments in H3Africa. The last time I talked to you about H3Africa was a year ago, this coming May, when you looked at applications, I'll tell you a little bit about what's happened since I last talked to you and about what your role will be in the next council for H3Africa. So for those of you who are new to council and weren't here for the review of the previous applications, H3Africa arose from a discussion at the African Society of Human Genomics, Genetics, meeting in Cairo where Francis Collins and Charles Ortimi were present, and the Welcome Trust was also present as well. Francis and Charles brought the idea back to the NIH and it became part of Francis's global research initiatives. H3Africa is a partnership with the Welcome Trust and the African Society of Human Genetics, and along the timeline of the discussions and securing money for the project, H3Africa became an NIH Common Fund project. Now the goals of the project are to increase the numbers of Africans who are internationally competitive in genomics and population based research, to establish collaborative networks of African investigators pursuing genomic-based disease-oriented projects, and finally to create and expand infrastructure for genomics research including bioinformatics and biorepositories, and you'll see how this works throughout all the applications that we've received, funded, and now are considering. So key aspects of the H3Africa initiatives that make it unique among some of the other NIH programs of global health. The awards for H3Africa are made directly to the institutions and to the African PIs, and this, as you can imagine, is a challenge and an opportunity. We are funding centers and they're all comprised of multiple collaborative projects. They were required to collaborate with at least two or three institutions outside of their own institution. This is something that doesn't happen a lot in Africa and I think it's an important element of the program. All of the NIH grantees must deposit their data in a public repository. They must also deposit specimens in the H3Africa biorepository, which I'll tell you more about, and they must also use the H3Africa Bioinformatics Network. I'll tell you more about that. All the applications must include a training component and the first set of applications may include societal implications LC research. Okay, so this is the results of the RFAs that you saw in May. I mentioned that we're funding centers. We funded two awards, one on metabolic syndrome and one on kidney disease. They each will be getting $1 million a year for five years. In the first year, they got an extra $250,000 for equipment as well. We also had a large number of applications for research projects. These are UO1s, unlike the collaborative centers, which were required to collaborate outside of their institutions. These applications did not have to, but they had to be attached to an ongoing funded grant. This really didn't work very well. We had a large number of applications and ended up really with only one award working on tuberculosis that we funded, and we're hoping that we'll have more applications like this in the next round. So this is what we funded it at, and again it's for five years. Now we also wanted to set up a biorepository program in Africa, and to do that we decided to use a mechanism that would allow us to have two years of pilot biorepositories, after which there would be an administrative review, and up to two of those would be scaled up into an H3 Africa full-scale biorepository. We didn't get enough good applications last time around to fund four pilots, which is what our goal was, but we funded two at $200,000, I'm sorry that's wrong. It's $100,000 a year for FY 12 to 13, so for two years, and this really is for planning and trying to do some logistics in order to put together their full-scale application. And then the Bioinformatics Network, the idea behind this was to have a Bioinformatics Network all over Africa with nodes throughout the entirety of Africa, not just sub-Saharan Africa, and in order to bring the continent together to provide Bioinformatics training, connectivity, and to help the H3 Africa consortium work together and provide them resources, tools, etc. So we funded one award, and it's called the H3A Bionet, you'll see me refer to that. I got $3.1 million in the first year in order to set up a lot of infrastructure, and it'll get $2.2 million for the next five years. This is what the map of Africa looks like. The stars are our primary grantees. You can see we have quite a few down here in South Africa, and then three over here in West Africa, which is an unusual distribution. I think we were all a little bit surprised by that. There are collaborators though all over Africa, even North Africa, and a lot of that is the H3A Bioinformatics Network. If you can distinguish the colors, the greens are the H3A Bionet, and then the biorepositories have some collaborators. The centers in particular have a lot of collaborators throughout Africa, so we really covered quite a bit of Africa in the current funding. So I want to tell you about progress for the project. Eric already showed you this picture. I think this is our first meeting, and we held it in Addis Ababa, Ethiopia. We had really great attendance from the PIs. Eric already told you the agenda. I don't need to go through this very fast, but as usual at these meetings, there were grantee presentations, and then a lot of discussions about major policy issues. Eric also told you about the outcome that we had established, a steering committee, working groups. We prioritized among these working groups drafting a marker paper and policies for obtaining consent, data, and sample sharing. And then the NIH and the Wellcome Trust also agreed to let the PIs put in an application to the two funding agencies to put together a coordinating center at the bioinformatics site, the H3A Bionet site. For the progress on the organization, we have agreed to fund this coordinating center, so that will be helping us a lot with the 10 conference call, 10 working groups and conference calls we have every two weeks helping us organize the meetings, et cetera, the kinds of things coordinating centers do. And so far, the steering committee of the PIs and the funders meet every two weeks. It sounds like your typical NHGRI consortium. We meet with the Wellcome Trust staff every two weeks, and then these are the working groups that are active, and you can see we have six that are ongoing now, and we have four more that will be starting in the next few months. So we've been very busy talking about first what the working groups need to do, because this is really a new concept for the African PIs that we're dealing with. And they've really gotten into it and very interested in coming up with policies that then they will bring forward to the May 2013 consortium meeting in Accra, Ghana. So what have individual grants been doing? These are the PIs from both the Wellcome Trust and the NIH, and Eric and Pat Goodwin from the Wellcome Trust. So the H3A pilot biorepositories meet every two weeks to discuss their protocols, and they've begun to survey the consortium about anticipated biobank needs. They're trying to put in place protocols and SOPs so that when whichever groups scale up, we'll be able to have some standardization of samples so that when they come in, it can be more automatic and more efficient. The Bionet, as I showed you, is setting up all their nodes. They're preparing for—they're going to help everyone with data submission, and they're preparing for that by, again, putting out a survey to find out more about what types of data are going to be prepared, be generated. They're also starting to work on their training components, and I said the coordinating center earlier. Most of the research projects are still in the phase of writing their consents, and several of these, at least for the NIH projects—I don't know as much about the Wellcome Trust projects—will be going to their ethics committees or IRBs. And then their first progress reports, which are a progress report that the H3Africa program has put together, will be due in mid-February, so we'll be seeing those very soon. All right, so now for the future, where we're going in May. As I said, we want to fund a few more collaborative centers. We could have made four awards last time, last round, and we would like to make at least two more, if we can, if we get the quality applications. And I should say, those of you who are on council know what a great job the Review Committee did a year ago, and we're looking forward to a similarly terrific review. We did not. We only funded the very, very best applications. We felt that there was another round, and we're hoping that these applicants will come in and have better applications, and we'll be able to fund even more. So we really do want to be sure that we are funding quality, and we won't fund all of these awards if we don't get quality. The research projects, again, I told you that we had a lot last time and only funded one. We could still fund two or three more. We've increased the size of these, and we've dropped the requirement that they be allied with an ongoing grant. And I think that probably, that may help in the review. The reviewers didn't like that part of the RFA last time. Again, we want to fund at least two more pilot biorepositories. They will be out of synchrony with the other pilots, and they will be judged for scaling up a year later. But this part, the biorepositories, if we can successfully scale some up, have a seven-year term. So they'll miss one year of the seven years. Again, that number's wrong. It's $100,000 per year. And then new to this upcoming round are some ELSI projects. Ebony Bookman is in charge of this part of the project, and she wrote an RFA that we published, and this will be reissued two more times. We anticipate making three to four awards of $54,000 each for FY13 to 16. Okay, and this is what the applications look like, the spread of them across the African continent. You can see that there are 12 countries that we actually get applications from. The pool represents collaborations among 20 African countries and 98 African institutions. And this is very similar to last time. It's truly incredible the number of institutions that are participating. And then, as I said, the review meeting will be held in March. Actually, February, I think. But anyway, the end of February, beginning of March. And at that point, we will go into overdrive, figuring out what we're going to do as far as presenting this outcome to you for counsel. So, one thing I wanted to tell you about that has been an ongoing problem with electronic submission of applications from low and middle-income countries, and our experience, of course, is with Africa, is that there's a huge problem with the electronic submission at the NIH with applications coming in from these countries. For the first RFA and the second RFWA, we lost about 40 percent of the applications at the early stages of the electronic submission process. Either they didn't get in, or a large number of them got stalled at the error correction time. So, several of us from H3Africa went to the Office of Extramural Research to ask, with a bunch of suggestions, I should say, most of which didn't work for one reason or another. But one thing we did agree on is that we could put in more language into the RFA template to help applications from low and middle-income countries. It explains the registration, which is the biggest problem, because it takes so long, and the electronic submission process better. So, we're hoping this will really help. We also have the... So, we're experimenting with this on the LCRFA that was just recently released. It's going to be out for four months. The letters of intent will come in after one month, so we have more time to work with the applicants, and that's still enough time for them to complete the registrations, which is usually one of the big hang-ups. And we made a couple of other tweaks. We recommended that applicants submit... applicants begin their submission a week before the deadline. So, we're going to follow this story more closely, and the LCRFAs that remain to be released in the coming years will be watched carefully, and we'll tweak... Every time we can, we'll go to the office and try to improve the process. Okay, our next steps. The review, as I said, will be in March. We will be site-visiting the highest-scoring applicants, hopefully before council. It depends on the outcome of the review, where the sites are going to be, and how we can fit that around the consortium meeting, which is in Accra in May. And then it's adjacent to the African Society of Human Genetics May 20th and 21st. Those happen to be the same days you're going to be considering these applications here at council. So, lucky for us, Mark Geyer, I think, is going to be in town, and he will be presenting those applications to you. And the rest of the H3Africa team will be trying to Skype into the meeting next May. So, we'll see how that goes. And then the new awards will be made by August 2013. This is the NIH working group members, many collaborators from all the institutes, and I'm happy to take questions. Jane, can I get a little clarification? The biorepository projects are separate from the other projects, or they're meant to support the other projects? They support the other projects. And so, the ascertainment and the collection of those samples is all driven by the questions being asked. Yes. Yes, I'm sorry if I didn't make that clear. In fact, no samples will get to the biorepositories until we have a scaled up biorepository. So, it's going to be years before they get to the biorepository. And what do you think most people are going to be banking? They all are banking. They have to. And they're going to be banking what? Sorry? Blood, primarily. Blood. Okay. Whole blood. Primarily. There are other things in some of the applications, or microbiome, for example. Okay. Thanks. Can you say a little bit about the financial oversight that the GRI is planning on doing? It's an area of the world where there's a lot of variety of financial oversight, we'll say. So, I wonder what you're doing there? Well, our grand Spanish team goes with us on our site visits. And I forgot to also mention that we have an independent expert committee advisors that are joint with the Welcome Trust. And so, we are meeting twice a year. So, we don't have any special program for financial oversight, but our and grants management people are quite in tune with what's going on. So, that's what we're doing. And the second part is, are you engaging some of the funding bodies in Africa? Obviously, the South Africans have been around, but several of the West African countries are now starting to get a little bit more focused with their research funding. So, we are trying to talk to research ministers or national ministers for research in the different countries. Given that we've just gotten started, we haven't done much yet. We certainly, we invited, I don't know if you know about NEPAD. It's the new, somebody has to help me with that. It is an African organization that is trying to get African governments to spend more on science. And it's relatively new. And it came to our first consortium meeting. So, we're trying to encourage the countries as much as we can. I'll talk to you a lot about it, but you're going to be in a crawl. And there's no better place to start, both because of what they're doing with their oil money. And also, with their, they've been a major node for the WHO programs over the last two decades. So, they have a nice reach in West Africa. Yeah, but we're planning to invite a minister of research. Can I add a couple points to Howard's question? Might not have been clear from Jane's answer that when the grants management people go on these site visits, they're meeting with the grants management people in the institution.  So, they've established these face-to-face relationship with the grants management people at the various institutions. There's also a component where, which is linked to a Child Health Institute program, which is to train grants management people from low and middle-income country institutions. So, they bring, they have a two or three-year training program where they bring people here for a while, and then they have various distance learning kinds of opportunities. And Child Health has agreed to include at least one person from each of the H3Africa Institute's institutions in that program. And then with respect to the governmental connection, each of the applications has to have a letter from the appropriate ministry of the government addressing the issue of support for science in that country. Yeah, I wonder if you leverage the medical education program initiative, the MAPI, because they've gone through all these pains of grants management and so on. Yes, we've, they worked with us on this, getting this new template going. They have the same problem with electronic submission we have. We would like, so MAPI is the Medical Education Partnership Initiative. It is at the Fogarty Center, and it is, they are all at PEPFAR institutions. PEPFAR is the President's, it's the Emergency Fund for AIDS Research. And so they don't, they aren't focused on research. They're really focused on medical education. And we would like to meet back to back with them. So far, it's amazing how hard that is to do. So far we've only had one meeting and they've had three or four. So, but so far we haven't managed to do that. On the other hand, what one thing we have managed to do is, when we meet in any city and they meet in another city, we try to invite our grantees who live in those cities to attend our meet, respective meetings. So that actually worked out great in these. We had someone there that was really enthusiastic and it was a great interaction and actually had some research in common with some of our grantees. So I think that will help and we hope to be able to meet jointly with them. Jane, to be very good. Do you want to say anything about individual institutes' efforts and how they might or are synergizing with the broader H3Africa program? Yeah, I hesitate to say anything about this publicly yet. But we do have one institute that is funding a significant size project that's already been funded. So I probably could say what it is, but I think I should be careful. And they are actually going, it's funded completely by the institute. It's going to join H3Africa. And then several other institutes have put funds. So there's some parts of the RFA that specifically ask for specific kinds of applications. And those would be funded by institutes who've promised money if the right application comes in. NIAID, for example, contributed to one of the projects that had AIDS research in it. And the Office of AIDS Research did the same thing. So the other institutes are working with us very well. And we work and talk to each other every two weeks. So I think it's a thing that's growing. There's another institute that is very interested in getting another program going and having it part of H3Africa. So the point I wanted to make, it's an example of leveraging. We talked about leveraging earlier today. In this case, we're not leveraging necessarily an HGRI dollars, although we're putting some of our money in, but mostly leveraging common fund dollars. I'll tell you, the reason I wanted Jane to say a few things about that is, I don't know, maybe it was my year and a half ago or whatever this was, Mark, Guy or Jane Peterson and I, the three of us, I mean, we really went on a tour, just around NIH, where we went and spoke to many institute directors and their senior staff, hoping at the time that they would just be forthcoming with money to add to the common fund because there's a lot of disease work that you would think they'd want to fund, and indeed they are. At the end of the day, they weren't very interested in just writing checks and having to pool in with H3Africa dollars. But no question, we planted some important seeds, and those seeds are starting to germinate now, because now that H3Africa is getting out of the gates, they're seeing opportunities for grants that they're interested in to individually fund them, and then they join the network. So, while at the time it was frustrating, because we got a lot of polite welcome, but not a whole lot of additional funds raised, now it's coming to fruition in that at least they're coming on their terms, they're funding grants in areas they're interested in, and it's being added in a network kind of a fashion with H3Africa. Okay, thank you, Jane.


Reliability and portability are the main goals of the expert book lineup by ASUS. There are many series in this business line starting from the affordable B1 and going up to the ultra premium B9. The B5 we have with us today is the most balanced choice for providing a cost effective price point and premium quality. Plus, this is the flip modification so you can rotate the screen as you like. It is built like a tank but you wouldn't be able to see that looking at its thin body nor will you find it in the spec sheet. Stay with us to see how that's possible. Let's start with portability. This 13 inch laptop weighs just above 1 kilo and it's 16.9 mm thin. Lifting the lid also lifts the backside at the notebook providing both better airflow to the cooling system and better ergonomics when typing on the backlit keyboard. The keys are big so there's no space left for the numpad but we have the cool LED illuminated keypad hidden in the trackpad called ASUS number pad. It's a bit small for our taste but it's still good. As we already said, the screen can be rotated in 360 degrees and you shouldn't worry about it because it is held by thick stainless steel hinges with large screws. The whole body is made of aluminum and magnesium and is further strengthened by a honeycomb construction on the inside. We also see rubber dampers that protect the mainboard from shocks and spill resistant design for the keyboard. With all these it's not hard for the B5 Flip to get the A10H military certification. Even the ports have additional protection with stainless steel brackets. The B5 Flip is equipped with two Thunderbolt 4 ports supporting power delivery, micro HDMI to Ethernet, Kensington lock slot, HDMI 2.0B, one full size 10 gigabit USB port, audio jack and a fingerprint reader hidden in the power button. So you can connect up to three 4K external displays. However, many business users often need to work on the go and the integrated screen allows for comfortable operation out of the office. There are three display options, two IPS and an FHD OLED panel with 400 nits of brightness and 100% coverage of the ultra-wide DCI-P3 color gamut. This is our choice for the review as we really like the deep blacks and the vivid colors. The OLED panel also has lower harmful blue light levels compared to regular LCDs. However, if you're going to do color sensitive work, go for one of the IPS variants since they'll have better color accuracy. Also check out our display profiles from the link in the description below the video. There are two battery variants with a capacity of 33 watt hours or 66 watt hours. The OLED variant always comes with a 66 watt hour unit which lasts for 12 hours and 27 minutes of web browsing or 10 hours and 50 minutes of video playback. These are pretty good results and should get you through a whole day of work without needing a charger. Only 2 per 100 people watching this video are subscribers. If you decide to just start following us, we'll be able to reinvest more in our laboratory thus making even more helpful videos for you. Thank you, you're awesome! We've conducted the tests with a Core i5-1135G7 processor, but you could also configure your B5 flip with an i3 or an i7. On the GPU front, you rely on integrated graphics, powerful enough for most types of work. The notebook comes with a simple cooling solution as there's only one heat pipe, one fan and one heat spreader. In the stress test, the Core i5-1135G7 gets pushed past its 28 watt power limit, going as high as 40 watts and boosting to 3.4 GHz in the first seconds of the test. After that the clock speeds and temps lower, maintaining a consistent 2.51 GHz at 80°C. Comfort is excellent as the metal chassis is pretty well isolated, giving us an outside temperature of only 38°C, while the fan works quietly and activates only under extreme stress. Despite its portable body, the expert book B5 Flip is one of the best 13 inch devices in terms of upgradeability. We're pleasantly surprised that the storage isn't soldered. You even get not one, but two NVMe slots with RAID 0 or RAID 1 support. Also, there is soldered memory, but ASUS has found space for an additional RAM slot for future upgrades. And upgrading the laptop is a fairly easy task. We have a detailed teardown video that shows a step-by-step process, which you can find in the description. On top of all that, you still get the usual perks of the expert book lineup, like the two-way AI noise cancelling technology that eliminates ambient noise in your meetings, the ultra-fast Wi-Fi 6 connection, and the webcam shield. Speaking of meetings, here's a very cool feature, one of our favorites. This little light automatically starts glowing when you're busy on a conference call, so your colleagues will know not to bug you. Also, while ASUS says that the pen is optional, we found one in all configurations that we checked out. Keep in mind the three-year international warranty, so you're covered wherever you are in the world. The laptop is also Windows 11 ready, thanks to the TPM 2.0 module on board. All in all, ASUS expert book B5 Flip B5302 is one of the leading 13-inch business laptops, providing excellent reliability, high portability, and ample upgradeability. That's why it wasn't a hard decision to award this notebook with our editor's choice medal. So check out our in-depth review on laptopmedia.com, because we have a lot more to share with you.