Okay, so the final keynote speakers for Open Source Summit Japan this year is Greg Rohatman. I don't think I need a lot of introduction about Greg for this audience, but just in case you don't know him, Greg is the Colonel Maintainer. He maintains the stable corner branch. So if you are doing any business using Linux, you are actually getting benefit from Greg's work. So Greg is talking about Linux Colonel security today. So without further ado, let me bring the Greg over here. So please welcome. Hello. It's good to be back in Japan after many years. I'm also a Colonel Developer. I'm also a member of the Linux Colonel security team. So we've had lots of talks and lots of issues with security being more and more popular. So I thought I'd discuss it and try and see what's going on. There we go. So why talk about this now? A really big thing, I live in Europe and in Netherlands and our utility grid is under a lot of pressure. But so is the laws. The EU recognizes that open source and software run the world and software is not regulated. Paint is regulated, plastics are regulated, electronics are regulated. But the software in your devices is not regulated. And so they set about making a rule and laws to help regulate this. And this is a good thing. We want this. But in the creation of these laws, it's interesting to try and explain how software is created using open source with politicians. It's a big mismatch because we're not companies, we're individuals, we're companies contributing. But you can't go back and try and hold liable individual developers working in other countries and working for random projects that happen to ship a device, or software ends up in a device that could ship to the EU market. So the CRA finally was approved and finalized a few days ago. And it looks like we got a lot of good changes in there. But it's going to start hitting everybody. It's going to hit Japanese market as well. All the world sells their devices and products into the EU. But it's going to define the security requirements. And so the US government is also having security requirements. And so people are coming to the Linux kernel security team and saying, how do you meet these requirements and what's going on? These companies, they all say they want to join the security team. Let's talk about this a little more. There is no corporate members on our security team. And then, Lenly, governments and other companies want to know the security announcements. They want to know they rely on Linux. They want to know ahead of time what's going on, when there's problems, no upgrade. And all of us know Spectrum meltdown. Hardware is buggy. The job of software is to fix hardware's problems. Hardware and bargos are hard. They're difficult, have to deal with hardware supply change, development cycles that are much longer than software. And we have to do these. They are not ending. The Spectrum meltdown issues are with us for a while. They keep trying to fix them in hardware. They're not working. Another one just got announced a few hours ago. So this is not an end to this anytime soon. So let's talk about software. This has changed. A lot of people don't realize this. The Linux commercial distribution model is not dead, but it is not the majority anymore, by far. 80% of the world's servers and systems run free and open source projects based on Debian, based on Fedora, based on OpenSUSA. The majority of the servers in the world are not running commercial distributions. Because of that, intercompany interactions is found with Spectrum meltdown, like when you get the distributions talking to each other or talking to Intel, talking to AMD, just doesn't work. Because where's Debian? Where's the other open source projects? And all of this, all the Linux systems in the world and servers are a rounding error compared to Android. Android, it really is in the billions. Servers are in the hundreds of millions, probably less than that. Just doesn't work. Android doesn't open source project. Doesn't really just consumes the kernel, doesn't work well. Android is also spread across a huge number of companies. And also, the community that works with these open source projects can't sign NDAs, because they're community members. They live in other countries, they work for different companies, just doesn't really work. So the old model, companies talking to companies, getting NDAs required even going through the Linux Foundation just does not work. So let's talk about how the kernel security team works. We're reactive, we're not proactive. There are other groups and other kernel security teams and projects that are proactive. There's a security conference every year. There's the Linux kernel hardening project. There's lots and lots of good stuff going on, but that's not what we do. We just react to problems, and that's good. Somebody has to do this type of stuff. And this all started back in 2005 when somebody on the kernel mailing list said, hey, I want to report a security bug, how do I do this? 2005 was an interesting year. 2005 had the security list, had the first stable kernels, had Git, lots of things happened in 2005. We kind of grew up. So they said, hey, we need to have a list. So some of us have been doing this on our own, just in an ad hoc, informal manner, got together. And Chris Wright published this, he's now the CTO of Red Hat.  But he made, here's the rules, he submitted a patch. And one of the most interesting things in this, and Chris and Linus set this up, is at the end, he said, we don't do NDAs. Linus Kernel's security team is an informal body, and we can't sign a contract. And that actually was the best thing that could ever happen to us. That set the stage for us doing this in a way that it's company and government neutral. And it's saved us so much problems. So kudos to Chris for getting this right. So how do you do this? We have an alias, security at kernel.org. You think you found a security problem? Email us. Is that it? Just an alias, not a mailing list, no archives anywhere. Explodes out to the individual members. It's a small group of us, I think we're 10 or 12 people now. And we don't represent our companies. We can't tell our companies who we work for, what is going on. We have had problems of sometimes members of the list do tell their companies, and then we have to remove them from the list. All kept quiet. In all the years, since 2005, we have never had any leaks. Pretty good relationship, so companies trust us. All we do is triage. We triage the report. We send it to us. We figure out what's wrong. We drag in the proper developers, if they're not on the list already. We work to create the fix as soon as possible, and we get it merged into Linus's tree, and then the stable trees that me and Sasha release. The goal is to get it fixed as soon as possible. That's it. And if you're brought in a whole bunch, we then just add you to the security alias. So it's not exactly a good thing to be added as part of the security team. It kind of means and implies that your subsystem isn't doing so well. We just get tired of having to do the round trip. And every couple of years we go through and purge the list and ask if people still want to be on it and whatnot. People move on, they don't want to do things. It's all fine. And that's it. So again, we fix the issue as soon as possible, and we don't have any embargoes. Once we have a fix, the most will hold on to it in seven days. I think we actually held on to one for maybe ten or fourteen days once on a very special occasion. This is after we have a fix. When we get a report, we start working on it as soon as possible. We try and work on it. We've had some fixes that take over a year. We've had some networking issues that I think we went on 18, 19 months before we fixed it properly. But once we fixed it, we got it merged as soon as possible. So other groups, other open source security projects, set timelines of 90 days, 30 days, works out great. Ours is after we have a fix. And this is going to collide really hard with all the laws that countries are trying to create. They're doing things like say, hey, you have to fix this, or do something within 72 hours, which actually goes against labor law and the EU. So it's kind of interesting to see how those two things are going to interact. But that's it. After seven days, we'll push it out. Normally, we don't hold things. I don't think we've had an embargo in the past year or so of anything. Fix it, move on. And we don't do any kind of announcements. We don't announce anything. We don't say anything was special. Just push it in the looks like a normal bug fix, gets out to the tree, and away we go. And this makes people mad. They want to know what the security fixes are. So back in 2008, when we've been doing this for like three years in an official way, somebody complained. And then Linus wrote back, these slides are going to be online, so you can see the links better. Linus' issue and my issue and many other people on the security team is a bug is a bug is a bug. We get notified of a bug. We fix it. We push it out. We move on. There's nothing special about security fixes. And if we call out security fixes as being special, that also implies that other fixes are not special. So that would mean that you would not take those fixes when you should take them all. Because we don't really know if a fix is a security issue or not at our level. Any bug has the potential of being a security issue at our level of the software stack. Linus goes on and says, things aren't right. People are wrong to think that it's call out security issues is different. It just doesn't work. And in a very good way, what is unclear about this? This has been proven over and over and over. If you look at a number of security fixes, I like calling out a bug that I wrote many years ago. And then I fixed a few years later in a TTY layer. I thought it was just a normal issue. Three years later, it turns out that you could get root on all of RHEL systems because of it. I didn't realize it was a bug when I wrote it. I didn't realize it was a bug a security issue when I fixed it. Nobody realized it at Red Hat for three years as well. If we, us the developers who know the stuff in and out, don't know this, it's proof that any bug at this level could be potential. There's some really good write ups, unlike you do a one byte overflow of an array on how to get root. The people who are doing attacks and chaining attacks and software are really, really good. They do some amazing things. So any bug at our level has the potential of being a security issue. And that's true. People need to realize this. Any bug could be a security issue, not just something we call out, so we don't call out anything. We just say take all the fixes and move on. And this has been proven to work out really, really well. Other people worry like, hey, if I don't want to take this fixed today because it might have a bug in the fix, that's a problem, that's common. Fixing meltdown issues took us, or spectra, took us months. We fix the fixes, and we fix the fixes of the fixes, and we fix them again, and we fix them again, as we do better testing, and just normal software development. But I need to make this a little smaller. The potential of a fix is much less than having a known vulnerable system. Just take all the fixes. Because if you take the fixes and they're buggy, we'll fix them again because we know what's going on. This was called out, and this was illustrated very perfectly in the last spectra issues. About six months ago, we had another issue with spectra. Some company took just the first initial patches and pushed it to their systems, and then a month or two later, they came to us and said, hey, looks like our systems are still vulnerable because things happened and they could report the problems. And we said, did you take all the fixes? And they said, yeah, we took the first ones. And we said, no, no, no, no. You had to take the week after that, and then the ones a week after that, and the ones a week after that, and then you'll be fixed. They did that, and they're like, yeah, it all works. You have to take all the fixes all the time. Because the biggest issue is, kernel is 30 million lines of code. You only use about one and a half, two million lines in the server, three and a half to four million in your phone, about one and a half in your TV. But we don't know what you're using of these things. We don't know what your use case is. Living system and everything, it's in your smart meters, it's in your cars, it's in the satellites, and it's in cow milking machines. It's in stabilizers, mega super yachts. Linux is everywhere. It's in my washing machine. We don't know your use case. We don't know how you're using Linux. We don't know what the security model is, so we don't know what we're doing. We don't know what part of the kernel you're using. We don't know what code you're using, whether you use this file or that file. So just take all the fixes. And the most importantly, we don't want to know. You don't have to tell us. I don't want to have to keep track of it. But you know this stuff. You know what you're using. You know this stuff. So just take all the fixes. The Google Android security team for a number of years documented all known security problems that were found in the Linux kernel and compared it to the stable kernels that we released. Every single one of them, for two years, were fixed weeks, if not months, before they were reported to the world. They have documented proof that taking the stable kernels always works. Your systems will be secure. And because of that, Android now requires this. They require the stable kernels to be updated at a longer time. But we're trying to shorten that, make it a little better. But it's documented proof that we're fixing things before people know. And also with bugs, Ben did a really good article about this stuff. It's hard to determine whether a bug in your environment is actually an issue or not, whether it's just going to crash, whether it is not going to have any problem at all, or it's a security issue. Vulnerability remediation is really, really hard. Ben is a really, really good engineer to do this type of stuff. And if he can't figure out how to do this stuff, nobody can. Just take it all. He has a really good essay on what is a good kernel bug. I really recommend it. It goes into the details of how this all works. So again, the kernel security policy. Fix everything as soon as possible. Get it out to the users as soon as possible. But this doesn't really work for hardware issues. Hardware people think they're special. They're not. They're just slow. And that's going to really, really went into the new laws that are coming into play. I will call out the EU rules of bugs must be fixed in X number of days. I have been told by major hardware vendors, hey, there's this problem in our chips. We're going to fix it in 15 months. I don't want to know that anymore. So we're trying to shorten that a lot. Hardware companies need to get on the ball and make things faster, but they're not there yet. They're working on it. So we call hardware issues our separate, separate thing we do. And we handle this separately. We have an encrypted mailing list. We don't have NDAs, but we actually have cross-company communication. We have cross-operating system communication. We work with ZEM. We work with the BSDs. We work with Windows. We work with other operating systems out there as well for major issues. And we do tolerate embargoes. Like I said, 15 months. We pushed back and said, I don't want to know. Tell me when you're two months out. This is a bone of contention with a lot of us, with me and Linus and other people. It should be shortened to a realistic time. It also really hurts the security researchers. I do a lot of work with the university in Amsterdam. Defines most of the spectra bugs, it turns out. They have had their master's students graduation delayed because hardware companies have delayed the response to the issues that these master's students needed to publish their master's thesis and PhD theses in order to graduate. That's not very good. I think now they finally realize that they will not do that. They will not delay people graduating. And if you look, the same university this morning announced more security bugs that they found in hardware. So we're tolerating the embargoes right now. We're trying to shorten this. And the governments and the lawmakers are really not tolerating this. And they're going to shorten this a lot more. So how this works today, we have a document in the kernel. And as I said, governments want to get involved because they like worrying about hardware issues and things like that. It turns out Linux not only does your phone and everything else, but governments rely on Linux. I'll call it the country of France entirely runs Linux. Netherlands runs Linux. China runs Linux.  Your trains run Linux. Your physical infrastructure is running Linux. Governments rely on it. So they want to get involved with security issues. That gets very tricky, very, very, very easily. But now they realize we're not a formal body. We're individuals that works out much, much better. So again, we don't do any announcements. Take all the fixes. We cannot assign CVEs. CVEs mean nothing for the Linux kernel. And we have no early assignment for any or no early announcements for anything. And yeah, I had a slide about CVEs. I don't know where that went. The early announcement list. I used to get this asked by a company here in Japan a lot. Please add us to the early announcement list. Like, we don't have one. And this is why. I will say publicly that any early notice list that you have should be considered a leak. Because now it's public. You don't know who knows this information. You don't know who within the company knows the information. You don't know what governments know the information. Just treat it as public. So any early notice list is just a leak. Unless your project isn't used, I will call out many open source projects that have early announcement lists. Maybe people don't use them that much. Because the biggest reason is this. Why would your government allow it to happen if it wasn't a leak? Security's tricky. I've talked to more government people over the past couple of years than I ever want to. So again, security happened. We fixed these at least once a week. These are known issues at least once a week. They look like any other bug fix. Maybe it's not known to be an actual security until real years later. And there's no differentiation in bug types. We just, a bug is a bug is a bug. And here's my CVE talk. I gave a whole talk about this at the Kernel Recipes Conference in France temporarily years ago about how CVEs are broken for the Kernel, how they don't work, how the whole infrastructure just is bad. It's a fun talk. Let's just see that. So I'll leave this with one last quote from me. If you're not using the latest stable or long term Kernel, your system is insecure. And I will call out any company that does not take the latest Kernel that it is insecure. Enterprise districts that don't do this. I know of maybe one company that does this right. I'm not going to say who they are because that insinuates all the other companies that are not. Phones that do not take the latest stable Kernels. I have gone to manufacturers that said, I have your latest phone. Here's how you get root. And they run the latest stable Kernel. This is just a fact. Google's documented this. They published a documentation on this a number of years ago. There's nothing that's invalidated that documentation. So take the latest stable Kernels that Sasha and I use. Make the long term Kernel for products. Those are working well too. Go refer to Sasha's talk yesterday about how you want to take the latest long term Kernel. Don't stick to the old ones. Just as good engineering practices, it's well known. That's how you get the stable Kernel. That's how you keep it a secure system. Thank you very much.


Hello everyone! I hope you all are safe and sound. The registration for this year's biggest AI and coding competition Codewa 2020 AI is now open. This video guides you through how to submit your project for the competition. Let's begin. Once you have already decided on the theme on which you want to work on and have projects ready, it's time to submit it for the competition. Click on the dashboard from the menu and choose Submit your project from the tiles. Now you need to add your project details. That is the project name. Choose the theme on which you have worked. Choose the category of your project. Make sure you click on multiple categories if applicable. And add a small description about your project. Next, you need to add a detailed description of your project which can include what your project is about or what inspired you to make that project. You can even upload images into this section to explain your project better. Next, upload your pictoblocks code which is the sb3 file. Finally, you need to add the project video here. Once you have added your project, you can edit or review your project from the dashboard itself. For any further queries, do write to us at codewr at the redistempedia.com. Thank you and all the best for Codewr 2020!


The field of internal medicine is one of the most sought out fields after completing medical school. But even after completing their internal medicine residency, there are multiple fellowships that these physicians choose to apply for. And these fellowship specialties can be super competitive and require tons of work to get into while already being busy as a brand new doctor. So today we're going to cover the top five most competitive internal fellowships that you can apply for. Now to understand the competitiveness of these specialties, we're going to break it into three categories. The first one is going to be the average matrate, essentially assessing for how many people don't get in when you apply for that specific fellowship program. Number two is going to be your length of training, and number three is going to be a combination of both your salary and lifestyle, so let's get into it. Now coming in at number five is the field of rheumatology. Now these are physicians who specialize in both musculoskeletal as well as autoimmune diseases such as lupus, rheumatoid arthritis, normal osteoarthritis, as well as things like vasculitis. Now in terms of competitiveness, the matrate for rheumatology is right at 74%, so about one out of every four applicants won't match into the field when they apply. In terms of length of training, most rheumatology fellowships will be anywhere from two to three years, and if there is a third year, most of that will be spent doing research. Now breaking down the lifestyle and salary for rheumatology, the average salary goes about $289,000, so definitely less than our hematology oncology colleagues, but it comes with a nice perk. As a rheumatologist, it's very uncommon for you to work nights, and often if you have to work a weekend, you're just kind of covering within your group or your colleagues, and it's not that bad. So in terms of work-life balance, I would say it's good to grade depending on the practice you're in, and if you're dealing with just one part of rheumatology, you just deal with lupus or arthritis, or if you're somebody who's a little bit more of a generalist or rheumatologist, and you get to see a lot of things, that may be a little bit of a busier and more active clinic life. Now fourth on our list is the field of hematology and oncology. Now I would say in both of my personal experience that this happens to be the most attractive fields for people who are very young and early in their training, somebody who's in college or in medical school who wants to tell themselves, I'd love to be a doctor who takes care of cancer. And because of that initial attraction, or perhaps even having experienced cancer within their loved ones, many people continue to pursue the field of hematology and oncology. That's making it number four on our top most competitive internal medicine specialties. Now in terms of numbers, the average match rate for hematology and oncology is right at 75%, very similar to our field of rheumatology. In terms of length of training, the average fellowship for hematology and oncology is three years after completing internal medicine residency. There are a few options where if you choose that you just want to be a board certified oncologist or hematologist, but not both, you could just do two years and then immediately start working, but that is very institution dependent. Now talk about salary and lifestyle. The average salary for a hematologist oncologist is about $411,000. Now keep in mind, this is a geographic variable. It also depends on which side of the field you go on. So for example, you can choose to just practice hematology and deal with blood disorders, or you can choose to go ahead and deal with cancer and oncology. And depending on the practices that you work in, in both these categories, your salaries can vary very drastically. But the lifestyle can be very similar between the two that it's very clinic-centric. You see patients, you follow up with them, either for their cancer or the blood disorders or anemia, you'll see them repeatedly with some responsibilities of seeing patients in the hospitals as consults. Now in terms of work-life balance, compared to other fields in internal medicine, hematology oncology has a very good to fair work-life balance. But the one disclaimer is that your work-life balance and mental wellness can definitely be affected if you choose to go in a very advanced route. For example, if you're an oncologist and you choose to go ahead and practice in pancreatic cancer or lung cancer, if you see patients, which you will, that are very advanced when they first get diagnosed, it's very tricky. There's very limited treatment options and you know most of them unfortunately will not do well. So dealing with that emotional turmoil of taking care of patients who are just getting this brand new diagnosis that often is terminal and dealing with them, their families, their lifestyles and then knowing that there's a good chance that what you try to do despite your best effort may not work, definitely can take a toll, particularly on the field of oncology. Now before we get back into today's episode, let's take a quick second to talk about today's sponsor, which is Picmonic. Now if you're unfamiliar with Picmonic and you're on your medical journey, they have hundreds and hundreds of videos for literally any class or material that you may need. And what makes Picmonic so unique is that in addition to having so many videos on literally any topic you need, so for example here, we're in microbiology, you can click on any video, so here's Staph Aureus and the videos themselves are very short, so this video is about one minute, 54 seconds, but essentially we'll break down the most high yield components that you have to know in the setting about Staph Aureus in this very nice story format using images. So here's a very nice Oreo cookie that essentially will link an image to your brain on an important concept about that. And the future videos, you may find that the same memorable images included in another related video, so then you can link together concepts. For example, here, this venom jar with green represents food poisoning, so any bacteria that may cause food poisoning may have this image in their overall picture and video, so you can say, okay, I know all different bacteria that have food poisoning. And then whenever you feel comfortable with a relatively short story, you can easily go into the review and quiz phase and actually quiz yourself on the various different high yield components. Now in addition to having a very unique and easy way to remember information for your quizzes and tests, you can also add all of the videos you're watching into a relative playlist. So if you're studying for a microbiology class, you can go ahead and essentially click all the videos that you add and add it to those playlists. And then whenever it's time, you can come back to your individual playlist and either watch those individual videos again or ask for specific quiz questions related to the videos that you've now said that you've mastered or at least learned the first time. And that's just scratching the surface in terms of features that pick monocas to help you on your medical journey. Other cool things include having a weakness guide so you can see which topics you're the weakest in, as well as their study scheduler, so you can actually say these are the topics that I need to know and here's my test day. And then it will essentially will give you a study schedule based off of that. So if you're looking for an all in one resource to your on your medical journey, you haven't quite found it, definitely recommend checking out pick monoc. If you're interested, there'll be a link down below. And our friends at pick monoc have also been nice enough to include an extra 20% discount if you use the code, the MD journey at checkout. And so if you're interested in learning more about pick monoc, that link will be down below. And as always, thanks to pick monoc for being today's sponsor. Now number three on our list is the field of both pulmonary and critical care medicine. Now prior to starting medical school, I thought these were two separate things. I had no idea that people usually are trained in both pulmonary and critical care medicine under the same fellowship. But in terms of competitiveness, pulmonary and critical care medicine attracts some of the most smartest as well as individuals who love working with their hands and dealing with emergencies with an average match rate of only 67.8%. So that means that there's tons of applicants applying every single year that are not able to get a spot. In terms of length of training, most pulmonary fellowships will be three years with a combination of both critical care and pulmonary electives and rotations that are on each and every single year. And how much you're trained on both the pulmonary versus the critical care side would really depend on the institution that you're working with. Now, breaking down the salary and lifestyle for a pulmonary, quick care doctor, it really varies because typically you will practice one or the other. While you do a fellowship in pulmonary or critical care, most doctors will pick one field or the other. Either you're working in ICU as a critical care doctor and that's pretty much your lifestyle or it's going to be working in a clinic setting as a pulmonologist seeing patients in the hospital occasionally. Now the average salary that's reported is about $369,000 and keep in mind there's a wide spectrum. On one end, if you're a critical care doctor who works in an institution who builds you for the complexity of the patients that you're seeing, well, there's a lot of complex patients that come in critical care medicine. You'll be able to just naturally bill higher just based on the complexity of the patients that you see for your field. And so you tend to be making a little bit more on that side. For example, if you're a critical care doctor who works in an institution who pays you based off your R views or essentially how much you bill, which is a reflection of how complex of a job you're having to do, well, just the nature of critical care medicine is you're taking care of patients who are dealing with terminal illnesses all the time. And so you're going to be able to naturally bill higher just because the complexity of the patient that you see is on average higher than most doctors see in the hospital. And so that's so you can guess that a critical care doctor, particularly one who's working in a private hospital who is essentially paying you based off of R views, you'll be making a lot more. On the flip side, a pulmonary doctor tends to have a very typical clinical schedule like the fields that we talked about for Monday to Fridays with some consults, maybe some weekend responsibilities, eight to five, and again, that will depend on just the group that you work with, probably closer to the average that we mentioned around the 350, $360,000. And number two on our list is the field of cardiology. Now, I'm particularly biased and attracted towards this field because I'm about to start my cardiology fellowship in just a few months as a making of this episode. But I would argue in addition to our field of oncology as we talked about before, the field of cardiology happens to be the other field in medicine that people early on in their journey are really attracted towards. You typically think of a heart doctor or a cancer doctor if you're thinking about somebody in medicine, and thus it happens to be one of the most competitive fields to apply to with an average match rate of just 69.7%. And at the very end of the episode, we'll talk about other factors that help applicants be competitive in case you're interested in any of these fields, but particularly in the field of cardiology, research is super important, thus making it more competitive because so many applicants are having to try to fit in three years of residency while still trying to do research during those three years. In terms of length of training, the field of cardiology is typically three years with often that last year spent doing a lot of research or electives and coordination with whatever you wanna do within the field of cards. Now, getting into salary and lifestyle and just enjoyment of the job. Now, first of all, I'm very biased. I know that because I'm going into cardiology as a fellow in just a few months, it's making this episode. And so take all of this with a grain of salt. But if we start with the average salary for cardiologists ends up being about 490,000 dollars. And this comes with a very big asterisk as this does for all the specialties that we'll talk about today. And that asterisk is there is because this salary is very inflated by those doctors who are doing a lot more invasive procedures. Somebody who's doing stents or cats or electrophysiology procedures, somebody who's doing valve repairs, technically is still considered a cardiologist, but they're making tons more money just because they're billing for more hospitals or making more money off those procedures. Compared to somebody who is a general cardiologist, somebody you'll see in clinic for a heart attack, for a lipid evaluation, somebody who will evaluate your echoes may make something a little bit less than this. So I would say the average is 490,000, but there's doctors in cardiology who are making tons more just because they're doing a lot of more invasive procedures and doctors who are probably making closer to 350, 400K range, which is again, still an amazing salary. But there is a wide spectrum depending on how much invasive hands-on procedures you do within the field. Now in terms of lifestyle, the field of cardiology can definitely have a big spectrum in addition to the salary. There are some cardiologists who are very general, who work with clinic Monday to Fridays, maybe some weekend responsibilities, and definitely is on the better side of the lifestyle spectrum. Then finally, number one, the field of gastroenterology. Now I'm biased because this is my least favorite field within the field of medicine, but this definitely has the best combination of doctors who wanna deal with both clinical medicine as well as doing hands-on procedures all the time, typically in their practice. It's very common for a gastroenterologist to see patients in their clinic as well as do consults in the hospital and then doing procedures on those patients, such as an EGD or a colonoscopy, to evaluate for things such as polyps, or some bleeding, source of malnutrition and malabsorption. So there's tons of opportunities within the field of GI to do very cool hands-on procedures as well as using your clinical acumen to help make diagnosis for patients. Now as an aside, while the field of GI is number one on our list, it was the bottom of my list when I was considering fellowships because I hate poop. But apparently a lot of people like it. Let's talk about competitiveness. In addition to the salary, which we'll get to in a second, this is what makes GI one of the most competitive specialties with the average match rate of 63.3%. I can easily say that I've unfortunately had many colleagues and friends or people that I've known who have not successfully matched the GI on their first try just because it's so competitive for the reasons that we talked about. In terms of length of training, GI fellowship typically have since to be three years, just like our cardiology colleagues. Now in terms of salary and lifestyle, your average GI doc will probably make $450,000 plus. And again, this will depend a lot on how many procedures you do. While most GI doctors are very specialized in being able to do EGTs and colonoscopies and seeing patients as consults and in clinics, how much you do those procedures will definitely determine the amount of salary you're getting. There are a lot of GI docs who typically won't see a lot of patients in clinic, but they love doing procedures. And so they tend to go ahead and set themselves up for a higher salary just because they're doing more procedures. So in terms of lifestyle, comparatively to a lot of the fields that we talked about already, field of GI probably gets a fair to good lifestyle because you get that nice mixture of just variety in your day. You get to do procedures, see patients, see consults and actually be able to see your procedures quickly help and improve both diagnose as well as manage your patients. And so while I personally hate poop, apparently a lot of people do and I can understand why the field of GI is a great field to consider. Now, while we talked about what makes these fields competitive, let's talk about things that really can make a difference if you're considering any of these fields to make yourself competitive. Number one is your letter of recommendations. Now, once you get into the fellowship pool, just the community becomes smaller and smaller, particularly in the field of cardiology, everyone knows everyone. And so it really just matters on who you know from your institution that you've worked with that is able to vouch for you and ideally at a high quality and level. So for me, the people and the aims that I had at the bottom of my letters, I was very fortunate to have the chance to work with them, but their leaders within their field. So for example, for me, when I was applying the cards, people could see in my fellowship application the name at the end of those letter of recommendations. There were big names reputable and I just had the good fortune of being able to work with them during my residency program. But when somebody from a different program can see that this very respective cardiologist is speaking very highly of this person as a future cardiologist, that holds more weight. And so if you have the option and opportunity of working with the biggest names within your institution, you should definitely go for it. Number two is your residency performance evaluation or typically called your dean's letter or program director letter. This is more of a templated document, but essentially it will take all of the valuations you've had from every single rotation. And this will include the great feedback as well as the average or below average feedback. It'll basically become a big templated document that will go out to these fellowship programs. So regardless of what rotation you're on, you definitely want to put your best foot forward and try to get the best evaluation from your attendings and colleagues that you're working with. And then finally, number three is the reputation of the residency program. If you're very early on in medical school and considering where you should go to residency, you should definitely consider that if you're thinking about any of these fellowship programs or any fellowship program for a different field, ask yourself, have people match into this field of cardiology and GI and rheumatology and surgery, whatever you may be considering, because if they don't, then you want to ask why have people tried and have been successful? This is the best place for me to get my training because you do want to have some kind of bridge with Gateway. Ideally, you can see that the program that you're doing your residency has an option for you to continue for their training. Maybe you wanted to go to cardiology. Ideally, your residency program already has a cardiology program associated with it. But even if it doesn't, the name and reputation of your residency program does make a big difference. When I was interviewing for fellowship spots, I rarely had to talk about my competency as just a clinician because people understood that where I went to training definitely trained their residents hard, we were busy, we got to see a lot. And so people trusted the name of my residency program was good enough to essentially qualify me as being a good enough doctor as a future fellow there. But those guys are the things to consider as well as the top five competitive specialties within the field of IM. Now, I'm sure I've missed some things, so if you have any questions, go ahead and drop them in the comment section down below. Happy to answer them, as well as while you're down there, hit that like button. And if you enjoyed this episode and you want more tips on how to study better, be more productive, essentially making your entire medical journey more stress-free, everything I wish I was told in the first day of med school, go ahead and click down below. There's a free document there called the Med School Success Handbook. It's something that I update on a weekly basis of all the tips and step-by-step strategies I wish somebody had just had told me. Against absolutely free, go ahead and click down below if you guys are interested. But if you enjoyed this episode, go ahead and check out this episode of why I chose the field of internal medicine in the first place, as well as this episode right here on why I made the transition into going into cardiology. Enjoy those. And as always, my friends, thank you so much for being a part of our journey. Hopefully we were a little helped to you guys on yours, and we'll catch you guys in the next one. Peace.


Hi everyone, my name is Loreana, I'm the peer mentor for Library 203 Section 2 this fall. And I wanted to show you a little quick way to do collaborative work learning through the internet by using and sharing Google Docs and editing them. If you're wondering what the weird images on my desktop is something I picked up from taking the history of books and libraries course actually last semester and it's from an ancient manuscript and it's a picture of a hell of a mouth. In case you're interested, I recommend that class. But anyway, let's get started with what I'm actually here to talk about. All right, so you're going to want to go to drive.google.com, which is what Google now calls their Google Docs. And so you'll sign in with your primary Google address, the one that you would like to share with your classmates and your coworkers. So once you're in here, you're going to see a list of all your Google Docs. So here's some that I've used for school and personal reasons. So and here's the one that I've shared for Library 203. Anyway, so to start a new one, you're going to click Create and then you can choose any of these formats of drawing, of spreadsheet, presentation. But for the sake of just showing you, I'll choose a document this time. Here's my new blank document. So you can give it a title up here, let's call it Test Doc. And then you just edit it just like you would any other kind of word document. And the same goes for spreadsheets. It behaves pretty much the same way as Excel or any other spreadsheet application. Anyway, so I'll just do a little test message. And then make sure you have it all saved. Usually Google Docs will save it every few seconds, so it's pretty easy to keep it up to date, but you always want to be on top of that because there's nothing worth working hard on something and then having all your changes erased. So always be careful to save. So you want to share it with other people. Let's say you're doing a group project and you'll just click Share. And there's a lot of ways to do it. You could share it on your Facebook or Google Plus. But I'm going to stick with email. So I'll enter in the addresses of the people I want to share it with. So this is just my other email address. And you'll keep this checked to notify them via email. So they'll get a little message. And you can add a little message too, like here is my test document. And then you can send a copy to yourself as well. And yeah, we'll paste the item in there too. So yeah, you can edit the messages sent out. So once you're ready to do that, and you can add multiple names, you will save it. And the new permission is up there. So you'll have a list of all the people who can edit it. And then you can change their permissions also. So I can say that I'm also the owner, or I can comment, or I can only view it. For classwork, you're probably going to want to make sure everybody can edit it and have control over it. So you'll just save, and you're done. And once you get the email with a link to the document, you can just click on it and then sign in with the profile that it's been shared with. And you can get to editing. So I find that this tool is really useful for group work online, which can be really challenging given that everyone has different time zones they're working from and different schedules. So many people in this program have full-time jobs or full-time families or all of the above. So it can be really helpful to have a document that you can come to in your own time and edit and work together asynchronously. And I know I wasn't really familiar with Google Docs and sharing everything until I was in this list program. So I wanted to make sure everybody knows going in about this tool because I think it can be really helpful. And thank you for watching, and I hope you found this useful. Bye.


Welcome to the session on RATPAC. The idea here is to give a foot for thought, like we have been building a STTP application. By that, I mean both the traditional web applications plus the rest services, what they're using. So we have been building these for quite some time, but can that be done in a better way? Can there be a better programming model for that right on JVM? I'm sure all of you have learned a lot about functional programming and might have got inspired by that, but if your day job is to develop pretty much on JVM, then how some of these good ideas can be brought onto JVM and use them. So RATPAC is one such effort. So you could call it anywhere between a library and a framework. It's not so opinionated as many frameworks, but it's a good tool for developing a lightweight, say, microservices or gateway to microservices, REST API for mobile device or so. So that's where RATPAC stands. RATPAC was started about maybe three years back as a groovy version of Sinatra, but later on, people found that much more can be done on that right by changing the programming model. So as of today, RATPAC core is totally a Java 8 library. On top of that, you have a small groovy layer, which makes it very easy to write a few DSLs rather than writing full-fledged methods. But Java 8 does have lambdas, which will make the life a little bit easier. But if I were to do everything in Java 8, probably we can look at only a few examples. So it might take quite a bit of time to explain how our world is programmed. So that kind of readability is what groovy DSL will bring in. I don't have any more slides, so I'll right away get into the code and explain all the concepts or the programming model for what I want to highlight using code. But before jumping on to that, the traditional programming model is the thread per request. So whenever a request come, I mean, the server would have already created a few hundred threads and it's ready to serve the request. So whenever a request comes, a thread is allocated for that request. And throughout the processing of that request, the thread is allocated only to that particular request. But serving request involves several IOs, maybe calling, reading a file, making database calls, or maybe calling some web services and getting the response. So all these times, the thread will get blocked. So what this leads to is that non-optimum utilization of resource. And if really the app is meant to be used by several hundred people at the same time, you would definitely have a lot of threads waiting on that. So scalability factor will be less with that. What rat pack changes there here is, I'm sure people are familiar with Node.js. So it's a similar programming model. It's followed here. So where there is an event loop, so the request gets assigned to event loop. But whenever there is an IO job, it goes to a separate thread pool and it gets processed there. It comes back to the event loop and it runs there. Unlike Node.js, the typical number of threads in the event loop is number of cores multiplied by two. That's the default. You could change that as well. But it's few, okay? With that, feel free to ask questions anytime or during. Let's get into the code. So let me create, so one of the interesting factor is you can run rat pack as a simple single file groovy script also. But I'm going to create a project here and use it. So to bootstrap a project, I am using a utility called LazyBones. LazyBones will just create a project template for you. You can create templates for any of them. So I say create, I want the rat pack. How to mention the version? Want to go to the RC3 is the latest version of it. So the GA is supposed to be released on 13th of this month. And the RC3 right now has only one bug filed against it. So for running it, I'll use a gradle. So by default, this will also create a gradle. So I can use gradle, W. That will create the IDF example is what I use. So that has created the IDF project. So I can go and launch. So this is the structure. So under rat pack, you have a rat pack.groovy that's a default script that gets created. Sure, it's okay. Let me just get these things. Let's start with the handlers. So this is where you will specify the URL pattern. So by default I'll say for get. So I'll run gradle in continuous build mode. So for that whenever there's a change in the file, automatically that gets a build. Now that's for rat pack, these handlers, something, this is extra. I don't need the findings right now. Okay, let's start building a simple REST API where typically FMCG sales rep would go to the retail stores and he'll get few orders for the product. So we'll build some of those things here. So the first thing he would want to know during the beginning of the day is which outlets to be taken. So let's have a web service for outlets. I'll just put some hard-coded data there. So I have a outlet class and some more. To get that, typically I would do is get outlets. Then I want to render it as a JSON response. The problem to be noted here is that. So here it's a hard-coded data, that's okay. But in your usual use case, you would make a database call and you would get the response and then you would try to render that. But during the database call, your processing thread will get blocked. So doing this thing on the event loop is a very bad thing in rat pack. So this should not be done here, right? So the way to delegate the task to a blocking thread or to take it away from the event loop, we have to use blocking.blocking.get. Within here, I'll have to place my call to get outlets. Let me just put some data here so that gets complete. And I'll assign that to a variable P and let's just see what is that. What is that return? If you could see what it has returned, it has returned a promise of it's. So what happens here is that when you make this call, the call is made and immediately the event loop continues to the next, processing the next request. I mean, processing the next statement there. It doesn't block. Resolve that. Ultimately, when the processing is done, we want to get that data and display it back to the client, right? So to that we can use, so let me just remove that. We'll come to that. We'll come to that. So this render doesn't make sense now because I just want, because anyway, the response is, you don't know when the response is ready. You put that, then when the response is ready, you go and render. So it is the implicit parameter. So the then block gets called. The default parameter is called it or you can go and give a name or so you can give something like this. Now that leads to an important question. What is the execution sequence, right? So what happens if I go and put something here? So let's say print here that is before blocking. And we are in blocking. So we say inside blocking, there are four parts. So what is the execution sequence? First thing is obvious before blocking. What is the next? Are you, anybody has a different opinion? Yeah, so usually, in usual case, it depends on the, say, whether the thread which is running separately, did it run first or there is a problem that the result is unpredictable then. So print statements may be okay, but what if I have a code here and say that throw exception? So is it that if the exception is thrown, does it have to wait for the blocking thread to finish and take something, right? So that leads to an unpredictable result. So instead, what Rat Pack does is makes it very predictable and you could see that. So before blocking, after then, inside blocking, then inside blocking. That is the, before executing any of the blocking operation, whatever is there outside the blocking operation, that gets executed. So that's why you would see that after then comes always before inside blocking, right? But the dependency here is that once the inside blocking is done, then only the then part can execute. We don't know when is that going to happen, right? So to make sure that, let's add few more detail here. I'll put thread, current thread, just to understand where it gets executed. Because that's a, if you understand this, pretty much you understand the Rat Pack programming model. As you could see here, before blocking got executed in the compute thread, which is the event loop. Then after, which also got executed in the compute thread, inside the blocking got executed in the separate thread. You could see that it's in Rat Pack blocking, right? Then the then part, whatever is executed after that blocking, that also gets executed in the compute thread. So what, while programming, what you have to ensure is that all the computations happen in the compute thread and whatever is the blocking operation waiting, those have to happen. I operations have to happen in the blocking. Yeah, that's one thing you have to make sure that. It's not a, I mean, see, after getting the results, I could have converted that to JSON in this thread itself. Then I could have just rendered it in the then part. But converting to JSON is not an IO operation, so it's not a good practice to put that in the blocking. Blocking should be only IO. Yeah, this is a CPU bound operation, right? So any questions? Questions? Okay, let's go ahead. So I have a few more web services which are already built, these other microservices which this application will be using. So that is, which I am running on 5051 port. So I have one to get the product information. So that will give me product ID and product name. I have one more to get the price information as well. So what we'll do is we'll call this and return this data. Then again, we'll call price data and compose them together and return it as a single object. So let's see how we can use them. Let me just copy this to boilerplate code here. That is mainly for the data structure as well as converting from the response to objects, back to objects. So let's say that it's a get product slash, slash I want to say pass the ID. Now I want to make a call to that web service and get the response, right? So let me say which product I will just port the HTTP client and hit the product ID for that. So to make a call, Ratpack already provides a HTTP client. That's what I use here. Okay. Now HTTP client is by default available, so I'll just inject that and pass it from here. That's a parameter which will be automatically injected when, because Ratpack is calling this. So I need to pass HTTP client. So I mean, the idiomatic way would be to create a service class and put HTTP client as an instance there and inject HTTP client into service and inject the service into all these things. If I have multiple, you know, requests just to make it simple, I'll not do that. String I'll convert it to log. So what I'm making a web service call which is again IO request, right? So do you think they should be executed in blocking or in the compute thread? It should be in blocking, right? I'm not doing anything. Just I have not put blocking dot get or anything. Let me put the run for it until we have something. So let's say product, it returned a promise. So note that the HTTP client what Ratpack gave returns a promise by default. You don't have to explicitly say that run this in the blocking thread, right? It will automatically do that for you. Now, what I want to do is, I want to get the result when it is available, convert it to the object I have here as a product master and say display it, right? So that can be say dot, I say map. Map will take a promise and return a promise. So the input is the response what received from that which I use here in this one. Transform to product master. So it is the response what I got from the web service. I say body, then get the bytes. I using a JSON slurper, I convert it to JSON. Then I just get the ID and the name and create a new object of that. So I say map it to, I'll just again convert it to JSON. And... So it's in the situation of the method that is going to come in for the same reason? Oh, no, it's a, yeah.  So promise is the API provided by Ratpack, which has got several methods on it. For example, here you have maps, yeah, correct. Right, right. You have to know it from the API docs. When you write your own classes, you may decide to return promise if you're doing it here. Or you may use one of the wrappers available. So for example, here within transform master in this closure, I did not, there's no mention of promise anywhere. So it's already the promise is unwrapped and finally when the result is created, it's wrapped inside a promise and returned. That map function takes care of that. So whenever you call a web service, you know, you may have limitation, for example, if you're dealing with the third party request, they may say that, say you can make only 10 requests at a time. So if it's a Google reverse geocoding you want to call and say all of a sudden your application is called by 50,000 users, doesn't mean that you can make 50,000 calls to the Google API, it will not allow that. So many of the calls will simply time out. So there is a way to throttle that. So in your HTTP client, you can go and say, throttle off size, say 20. So I just want to make sure that only 20 calls happen at a time, so which is available out of the box. You don't have to write any custom solution to do that. Cache will have to write explicitly, because it doesn't understand how. You can put a transformation function in between and decide. So right now I just got one of them. So I'll write this copy space and say I want to fetch the price, which is again the ID. So here I have received the product master. Now that I have the product master from that ID I want to take and make a call to the next service. So I can't use a map here because the next call, which is going to make a, going to invoke that web service, is again a blocking one. So instead you have to use the flat map, okay? So the input here is the product master what I already received from the previous map. Now here I'm going to call that fetch price of the specific client already. Product master.id, what I'm going to use, right? Then I have to, I'll get a response, which I have to convert it to the object I have with that price, this one. So I already have a class for that product price. So now what I want to do is I want to combine these both information together and create a new object for that. So that's what I did here, transform to product which takes a product master and price and clubs them together and use one product. So this takes product master. So now this will receive a product object. So you get all the, so now this is okay, but this is all applicable for only one product. So it's not a good idea that, the client makes call for each product and get that. It's much better to know, you have a list of products and you get it together. So let's write one for that. Need a specific client again. So first of all, I would need product IDs. I'll say one and two. So again, Rat Pack implements reactive streams. So those options are available, so you could use that. So I would say stream and I would have to convert my list of product IDs into a stream which is done by this publish function. Then I would call flat map and I can do the same operations here, right? So I can call, there is no, because each ID would get passed to the flat map one by one. So the parameter itself is the value to be passed. Then once the result comes, I have to do the same thing. Yeah, so you have to wrap it in that. Yeah, it has to, it's one by one. Yeah, so whatever is there inside, even if you have two blocking operations, I mean say in the blocking, if you have two IOs, Rat Pack is not going to run it concurrently. It's run as serial. I'll have to do one more flat map. I mean, ideally I can put it in a separate method and call it from both places. That should work well. So now what I have is the, it's a, previously I had promise, okay? Now I have a stream, not a ordinary promise. So I'll have to say I have to convert that promise to back to list and then this later. This has to have three that should be needed. Yeah, that's how you would wrap it in a stream. So streams have got several other methods where you can compose them together very well. So I mean, again, it's reactive streams compliant. So if you go to reactive streams, you would find several projects which support them. And if you're not happy with the reactive streams and you want much more powerful, you know, composability, then you'll have to use RxJava. And Radpac has got a, in a module, I mean, Radpac doesn't follow a plugin system. Instead it follows a module system. So you can have a Radpac Rx module, which helps you to, you know, adapt a promise to observables and observables back to promise. So that is something which you could use. Finally, let's do one of the post examples. Again, I'll just put something here. Then I'll say, so request I can get from the request and I'll get the, since this is a post, body will contain data. I'll keep it to post. Let me put it as just said, done. If you see, again, it's a promise. So for example, say you have a very big payload and say the authorization fails, then there is no point in reading the body and parsing that and all those. So by default, Radpac is lazy in, you know, parsing the body. So the way I can get that done is say request, right? So I just want to get the text content from that. You'll see the same thing is echoed back. So you could do any other processing before ensuring that, you know, whether you really need to get the body or not. And here also, see it's a promise. Ultimately, you want to get the content inside the promise has to be resolved, right? So map does it automatically. So here I did a very simple thing, I just getting one thing. So you can call a function, okay, which would take that data promise of T, whatever T is there. Your function here can take T as a parameter and return something. No, no. So map, you can pass any function. It's highly composable. Otherwise what happens is beyond that, it's not composable. So only one time. And yeah, lazy, it's everywhere lazy. So for example, here also, if I don't have a then block, the blocking dot get will not get called, whatever is here. So for example, yeah. So now if I remove that, let me put a, if I don't render something, it will complain. If you see that, it did not print anything. So that's how it's lazy. So lazy and composition, all those are pretty much what has been borrowed from functional programming. So that's at a high level what I wanted to cover, mainly from the census of P conference, what are the grades of functional programming that used here to, so the key focus here, asynchronous and non-blocking. So with that, you have fewer threads waiting and your application can scale very well. And this also has some templating mechanisms through which you can generate the UI and all. And yeah, but I have used some depth somewhere. If I remove that, I can make that. You will have to, that depends what is there inside that. If you put, it may not work. You'll have to do the type, yeah. So Groovy has both options. You can make it as a compile static and I mean, you can say that, check the type during compilation or it can be dynamic also, so both options are available. But the library itself is statically compiled. So because of that, I get all the auto-completion and all. If I put here, it shows me all those handlers and all those things. And for a very big application, it may not be a good idea to put everything in one file here. So always whatever I put here, like the handler parts are there. That can be put as a separate class implementing handler interface. Or if you have separate two, three handlers together, I can put it as a class that implements handler chain. So that way it can be further put into separate models. Right, it's a script file, yeah. Right, you may have separate classes. Right, right. So these are the quite a few modules, you know, available, you could see. Core is the one what we used and groovy is something. You could write the entire, instead of the groovy script, you can write it as everything as a Java class.  So which has a juice module by default. Then there are a lot of other, you know, Ikari, you know, connection pool is available. And if you are using MongoDB, you know, you could use Gmongo, which will be, you know, very easy to make a call. And yeah, and making a, you know, call to other REST APIs is much easier with the static client. Yeah, juice module. Right, so if you are creating, you can create it as a juice module and put it there. And then you say, you know, in the beginning you just specify what is the module required. And for security it has a pack 4J integration. And the RX is session. And also yeah, it supports Spring Boot also.  Maybe if you are going for slightly heavy lifting with the database connection and all you mean, you can use that. By default, you know, it's a, I mean, it uses Netty, that's how the asynchronous part works. It's a jar. It's a jar. You're right. It's not concurrency. It's not concurrency, exactly. It's just a effective segregation of, you know, blocking and non-blocking. Concurrency, there is nothing available out of the box as of now. Right now it doesn't have anything. You could use what is provided by, you know, Java or any of the Java implementations. Executor service or, you know, the parallel streams. All those things you can use out of the box. It's a JVM. Right, right. So when you build, yeah, when you do a Gradle build, it'll generate a jar file which you can run on JVM. It requires Java 8. Older versions of Java will not work. Right. Yeah, any Java library you can integrate here. I'm not very sure about that. It should support, I believe, because Java, by default, supports any code. So it's a code that's run on that product. Yeah. It might be a file, it's a plan, it's whatever it is. What I mean by that is I already created the template. Oh, okay, okay. That's how I'm going to do it. Then it should work. Yeah. So now, if there are any products, I'm sure we will be able to do that. So the documentation is not very exhaustive as of now. So the better way I found is to read the test to understand how to do things. And it has been changing quite. That blocking was initially called some background. Then it became blocking. Then now I've got blocking.get. And you have that drop wizard in metrics. Yeah, that would be the best way to use, I believe. You know, instead of developing a very heavy application, yeah, you make more of a microservice. That's a default option. No, you could use any of the messaging. Yeah, typically, yeah, either you have to use, you know, HTTP or you will have to use a micro rabbit MQ or any of the messaging. That will be another way to. But still it's a network level, right? Yeah, that's more of you consider them as a two logical databases, but physically they may be one schema. HTTP looks like the preferred option these days, but still I would say you could use, you know, message passing is still a valid option over there. It depends on the use case. Again, in terms of the development efforts, you would see monolithic versus microservices. Microservices would have slightly more effort there.  Well, any other questions? I'll be around tomorrow as well. So if you want to discuss anything, feel free to. Well, thanks for attending. Have a nice day. So very soon, I mean, the 13th is supposed to be where one or two gets released. Now it's production, it's pretty nice. This is one of the implementations. If you still need, you can integrate RxJaw also into that, three years. Yeah, but initially it started as a just groovy flavor of Sinatra, but then later they thought about all this netty, asynchronous and all. So the idea is that, you know, the Grails framework is planning to put a profile with this as the base sort of thing. So that's another, where community can make it expanded. Rat Pack is one of the profiles. So they want to put this one, then some Hadoop and some microservices, it netty, yeah. So you could use Spring Boot as a base, actually. Pack 4J is a library available there. That's one of the modules. I haven't tried it out. But Pack 4J is a separate project. So just integration here. Yeah, that's like, it's a readily available module. We just put, say, this is a module and you say this is a data source connection. That's all you have to say. Connection pooling is already available. Yeah, it has. Well, thank you.


Hello! Thank you for learning more about our new publication entitled The Lifetime of a LENAC Monitor Unit ION Chamber. To imagine yourself on a Friday evening, you're getting ready to head home for the day and you get a call learning that the ION Chamber is no longer working for one of your LENACs. In our clinic, we found that many of our ION chambers were needing to be replaced around the same time, so this motivated us to study the lifetime of the captain ION chambers currently being used in the variant true beams. This study is a retrospective review of our nine clinically used variant true beams. We report trends from the adjusted gain values, daily and monthly QA results, clinical monitor units delivered during patient treatments, and additional data collected during preventative maintenance inspections. We have seen in the literature that it's suggested that the output change would follow a trend where there would be an initial large change and then it would potentially begin leveling off or stabilizing over time. For our clinical data, we reviewed the trends over time extending beyond the first five million monitor units delivered. This graph shows the uncorrected monitor chamber response and how that changes as monitor units are delivered to each chamber. We also reviewed the changes in gain for each chamber longitude mulling as adjustments were made during routine quality assurance. Trends for the chambers for each treatment vault are shown in this figure with a linear fit shown for each chamber. The change in output can be considered by the cumulative output adjustments over the course of a year. This figure shows large changes in output over the first six months of a monitor chamber lifetime. While the changes in output are shown to be predictable over the lifetime of the chamber, our experience has shown required output adjustments ranging between 2% and 6% per year. To aid in the visualization of the required changes to output in shorter periods, each adjustment to the output was divided by time by days since the chamber was installed. For instance, if the output was adjusted by 3% after 182 days, the annualized output change would be calculated as shown in this figure. In summary, our clinical experience has shown the greatest change in output at the beginning, but there is a need for continued adjustments over time. We report the average lifetime of our ion chambers has been approximately 14 million clinically delivered MU. Please check out our paper to learn more and review our tips for what to do to streamline your replacement process. Thank you.


What's up everyone it's your girl Kinty here from Layton Sports Guards and I'm ripping a personal here for John S. We got three orders of the 2022 Panini National Sports Convention VIP exclusive gold packs. These come in lots of five here for you John. Thanks again for hopping back in. I've got your first one one two three four five one two three four five and one two three five. All righty best of luck here for you John. Yes Mike you are up next. Yep you're up next. Sorry I didn't see that you ordered two separate or I would have just ripped them together. My apologies ballistic and a rookie hyper of Obi Toppin.  Joe Burrow and velocity of Devin Booker. Fernando Tautis. Oh what do we have here? Black Pulsar. Luca Donchich. Five of five. There you go. We'll hit there John. Wax bundle of five. Jamar Chase rookie and we've got Camo. Pandora. Zion Williamson the 25. Nice Zion. Six out of 25 on that one. Did you give John a heart attack? Yeah are you still with us? John where'd you go man? I need to call 911. There you go. All right seconds lots of five. That's just because he doesn't want to jinx it. Devonte Smith and Velocity rookie of Christian Pache. Check two. Take your phone up off the ground. Stay quiet till it's over. Jason Tatum we've got blue of Bobby Witt Jr. 14 of 15 on the blue Camo. Don't say nothing. Very nice. Okay I think he's behind. Oh it is. Nice Bobby Witt though. Theo Maldon rookie and Hyper Ken Griffey Jr. Mookie Betts and we got Tiger of Dale Earnhardt Jr. Wow that's a cool one. Nice Tiger Stripe of Jr there. That's sick. Last pack. Patrick Mahomes and Cracked Ice to 99 Emmett Smith. All right last order of five. Got Joe Burrow and Velocity Jason Tatum. Fernando Tatis Jr. and Hyper Brace Harper. Okay I must be behind. Dak Prescott. What do we have? What do we have? 14. Wow. Black Shimmer Auto Bobby Witt Jr. That is another huge card there for you John. My goodness 12 of 14. Wow. We will mag that one for you. Wow. Oh that's a thick pack. Let's save that for last. Uh out of what was I out of 14? Uh yeah 12 of 14. 12 of 14. Bo Jackson and Hyper Tom Brady. All right the animal print autos are one of one. All right paint manning and last hit here for you John. Out of 25 we've got Obi Toppin on the scope rookie patch. Okay.  There you go congrats again. Thanks John for hopping back in again. We do appreciate it and we'll get these right out to you.


Good morning, I hope you're well or good afternoon or good evening whenever you're watching this. Today is Monday the 11th of April, the time is 12.15 and I'm going to go to the gym. I woke up about an hour ago. My shift today in A&E is from 3 in the afternoon until midnight, which I kind of love.  I don't mind finishing at midnight because to be honest, if I want to go out at midnight, I'd still have friends who are out if I'm being chill. If I'm being honest, I'd not even out out but chilling out. I like the shift and it's like a Monday and Tuesday. If it was a Friday or a Saturday, maybe you'll be less of an ideal shift, but I like this one. Look who's here. Hello everyone! She's last month's mom, she's steaming. My dad's jumper for him. Our house is so messy right now because basically we've had like all of this that's been repainted. I don't know if you guys can tell from the camera, but we repainted the whole of the ground floor and then we're starting upstairs now, so Sol's room is done and then we're like basically refurbishing it slowly, gently, but it's been, we've been living in this house for literally 20 years. We moved in in 2002, so it was time that it got a little kiss of love. So the house is really messy, but anyway, I'm going to go to the gym now.  I do not know what was up with me today, but in the end on that stair master I actually could not breathe. I did my 10 minutes that I always do, but it wiped me out and it really wiped me out. Anyway, I did, I basically did strength training today. So I did resistance band circuit for three rounds, about four exercises, 15 reps each. And then I did my abs circuit and then I did 10 minutes of skipping interval. So I'd wait till my heart rate really got up and I could feel it because it hurt my chest. Then I would stop, wait for my heart rate to come back down and then I'd skip again and I'd do that for 10 minutes. And then I ended with 10 minutes on the stair master. So overall I worked out just under an hour. I have to rush back home, eat, shower and then get to work. I feel like tomorrow when I'm on the same shift, I'm going to come to the gym an hour earlier just so that everything afterwards isn't so rushed. But you know when you're head, like when it's the first time you want to adjust into a rotor, it has to make how much time you have. Oh my god, it sounds like I've put so much time. But I don't. Anyway, let's drive home. And this weather today, I just, I can't cope. It's so beautiful. It's 18 degrees. Wow. This is the April heat wave we've been waiting for, guys. So my mum made fish yesterday last night for dinner and we had one left. So I'm having that now with some coconut rice. It's the basmati pouches and it's actually really nice. I think it's coconut and jasmine or just coconut or just jasmine. I don't know. To be honest, it's really nice. It's the blue packet and she's made salad Shirazi. I'm going to take half of this with me to work and the other half I am going to eat now. I didn't get a chance to change because the food was already ready when I got home. So I'm just like screw it.  Well, shower, change, get ready for work. But I've literally got 15 minutes to do all of this. So I'm just going to have a shower now and then do a hair wash tonight instead of now. So just wash my body now. Morning. It's day two of this week, a.k.a. Tuesday. And I broke up earlier to go to a gym and I'm wearing this Burnt T-shirt. I've just got this denim jacket on top because the weather is so good in London right now and no makeup on and my hair is so greasy. I've slicked it back. So I woke up earlier so that I can, I actually listen to my own advice. So that I could go to the gym, come back and shower, wash my hair and make my food. My family have some Chenje kabob, which is like lamb fillet kabob, left over from yesterday. And my mum makes like fresh salad every day. So I'm going to take that for my dinner at work and I'm going to make something today. Last night in bed I was just watching Korean YouTube and like the Korean YouTubers I watched they all just like show what they eat and oh my god it just makes me so hungry. Like I'm sitting there in bed at like 2 a.m. thinking oh I would love some ramen but obviously like I don't do it even though I'd love to do it. And they're also slender even though like they eat like really, honestly if I were there I would be like obese. So yeah they get away with it luckily. Jeans, some people's jeans honestly. So anyway let's hit the gym. Someone said in my last video by the way your teeth look so straight and it just made me so happy yay. Night in bed is a lie and I think that's four weeks to go. Doctor S dentistry. Genuinely look at that. How straight is that and even from the top. Now you can never say you didn't see inside Persian bunny's mouth. If any of you guys were thinking that. Anyway I'm really chatting rubbish now let's go it's 12 o'clock. So I went to the gym and bumped into my friend Andrea. We like made friends in the gym so we're gym friends if you'd call it that. But anyway she had just started her legs and like leg training session and she's incredible in the gym. I think she's training to be a PT and she was like do you want to train with me and I was like incredible. So I've just had the most amazing like leg day session I feel like my legs feel like jelly and yeah I was like legs and butt and it was really really good.    I don't even know what to do I didn't even have a choice Oolala so start Lipis come to join Saina has shoulder pads for days shoulder pads from the 90s I know you know I only realised it has shoulder pads once I wore it after I bought it literally I was like oh but I like it it's 7.10am I'm off to a Pilates class before my day at the clinic I need to run but I'm going to try and film it for you so this is my second week doing Pilates this week we've done two gym workouts one Pilates I've eaten like relatively healthy as well so I am feeling better in myself I'm not like restricting myself last night you guys saw for dinner me and Sol split and had a bit of fries with it so I am being healthy but I am not restricting myself so it's pretty more just about feeling good about myself, feeling stronger and making just these healthy little steps for me. Good morning this spot is actually an inconvenience it is Wednesday morning I haven't picked up the camera since last week and I feel like I have a valid reason I have been working for today will be 10 days straight and my next day will be Friday so that will be 12 days straight or like 13 days straight anyway whatever it is I'm usually fine with that the problem is that I had nights on the weekend so whilst everyone was enjoying the bank holiday weekend and the sun I was working nights so it was really hard for me to pick up the camera to film because I was just working non stop in A&E so when I got home like I was sleeping and there was just no content for you guys I'm sorry but yeah today I've got a normal shift and in the morning I have self development time so I've just been on my laptop doing a lot of like the stuff of my portfolio that is coming up so I've just been sorting that out and now I'm going to have some breakfast I have worked from 12.30 to 5 usually the shift is from 8 to 5 but obviously because I have the self development time I start at 12.30 which is lovely so yeah I just woke up done this stuff gonna have some breakfast, get ready to go to work and yeah come have some breakfast with me so oh my god my hay fever is so bad like my ears itching, my nose is running not cute look but anyway here's my breakfast with avocado and fried like scrambled not fried it's scrambled egg whites and then I made myself an ice latte I love these Starbucks cups I don't know why I'm so obsessed but I don't want my family members to keep losing the straws so this is one straw that I have from another one and then the other ones that are like missing it's lid I don't know so this is just like a weird one that you can't buy the combination of but like I think the original came with a multicoloured like a really cool straw it matches the sunshine the strength so I'm just in central had a clinic day and then just come to do some shopping I the Louboutin Mag is at mine it's Sinas but I'll ask her to show you what it is that she got and I collected it for her and then I got a bunch of stuff from Zara so I'm gonna do a little haul for you when I get home so I've just got home and I've changed for the gym also remember my last vlog where I was telling you guys I'm taking my health a lot more seriously I've actually been doing that and I'm very proud of myself come I'm sick my mum wants to see what I got from Zara I said I would show both of you guys at the same time hello yeah but I have been taking my health really seriously mum haven't I I've been eating a lot healthier like literally yesterday was the best time I had something a bit naughty and I had chocolate a little bit but I feel like even a little bit of chocolate in moderation is fine if you want some chocolate so okay so mum you're gonna love this you know have the corset top for this yes so hold it like this hold it okay it goes matching with this my mum she's my mum she's my mum she's my mum my mum loved matching sets when she was my age maybe when you were younger than me now because when you were my age you got married still I was your age as well anytime but I feel like your fashion must have changed when you became a mum oh no never no never ever you can see I'm still wearing I'm still in the clothes but like you're not like you're more like cute you're you're more cute style you're not sexy like whoa okay next I got a lot of tops because I felt like I need more tops I have enough tops of this I love it I'm going back for myself one size bigger and then look at the back of this top it's open oh wow oh my god I love this it's really nice perfect and then this one I just thought I don't have enough long dresses and I love long dresses and it's very suit you so basically the other night Sol and I decided to book a trip to Monaco because I'm off for a long weekend so we're going not next weekend the weekend after so some of these stuff I could even keep and wear weight to wear in Monaco it ties in the side so it gives you like a nice waist but it's just very comfortable you know if you want to wear this with sandals no are you sure yeah I think Monaco will be like 24 degrees maximum hmm my mom and dad are going to Bodgeron because we booked it for mother's day and father's day so we did it joint in between the two dates so they are going to Bodgeron as our gift to them anyway next up these shorts do you not think it's too short this is what I wanted to wear tonight maybe this is perfect some of the clothes you have to try on I'll try on and we'll see tonight but this is the matching top for us it's beautiful of course the top is like this and the shorts go like that matching this color is so cute and it's pretty soft and it's good for like London it's knitwear but it still is soft next up is this top this is so pretty I just thought with jeans it's very comfortable and pretty and I just like all the colors of everything that I've chosen very nice then we have yeah to be fair it didn't have a lot but I feel like I picked up everything that was good then I've got this one I got this one with a very beautiful bra underneath and a black leather skirt or any no black and it's a match with your white skirt jeans asmr I need to try you will see okay and then last top is this one that's lovely cute bandou I got all of these items in a size small I'm gonna go to the gym now tonight I'm going to Bagatelle I'm going with my three of my really close friends Amelia and Nabia who I work with who you guys saw in my last vlog they threw me a little surprise birthday party and also my angel girl Natalie she's a very good friend of mine we actually met on the plane to Ibiza last summer and we just hit it off and we've been so close since but they've never actually Amelia's met Natalie before but Nabia hasn't but I just know that we'll have such a blast like we're gonna have such a good time we're gonna go dinner and dance and that's all they really want I've been working for 12 13 days straight and in the middle of those 13 days there was some night shifts so honestly I feel like I don't mind working every day I feel like it keeps me motivated but the night shifts in the middle of it I think was just the bit where I was just like this is just too much you like this girl so yeah I'm looking forward to a break anyway let's hit the gym we got this this is the outfit that I'm wearing by the way these gym leggings are bow and tee this is a very old Forever 21 bra and this is a pretty little thing that is part of a set and no I don't have apps it's just the lighting some of you guys are gonna stay but yeah I need to go home I've shopped my content I need to go home and edit my vlog, look at me with chopsticks and my mum is going out to lunch with Zyna that's fine I said I don't want in the car I'm having wasabi and I got like this bigger set because I was like my mum needs to have at least one baby no honestly I want to go out again I was like we need to share at least a bit together what I love from wasabi are these Onigiri so I had a best friend in primary school who was Japanese her name is Remi she moved to Japan when we were in year 5 but her mum used to make her these and I used to love them so her mum used to make them for me too the plain seaweed ones and the salmon ones and I love the salmon ones I've never seen them in any Japanese restaurant and then when wasabi came to the UK they were takeaway please they had these and it just gave me such nostalgia so I love this Onigiri so much if you guys know anywhere else in London that does because today they didn't have any salmon left in the stock so if you guys know anywhere else in London that does Onigiri and it's really good let me know