Okay, very good afternoon. It is Monday 21st of December. So I hope everyone is doing well. I wanted to take this opportunity to grab some of the members identified trading teams. So just to recap, I've got the head of trading peers current I've got the head of trading development, Sam North, and I've got one of our senior traders and who leads our elite training program Tim Duggan over in Dublin. And so what I'll probably do is I'll steer the conversation, but really it's just a conversation like what we would have as perhaps a four in the office about our views and our thoughts about the year ahead. And then having everyone else listen in really and ask any questions as we go. So with that, I guess, I'll kick it off with how is the market going to perform in 2021 and undoubtedly it comes down to really only one major theme which is COVID-19, the virus in itself and the vaccine so mindful of the fact that trying to accurately forecast where a currency pair is going to finish is going to be difficult. But definitely I think we can outline at least our general view of what's going to be important, what are the timings, what are the currencies then are going to outperform underperform and so on. So let's just start from the top then COVID-19. Let's have a bit of a recap about your thoughts then for everyone of where we're at at the moment. We've had quite a significant development obviously start to evolve right now which is a new strain of the virus, which has spooked the markets to a certain degree. Is this a turning point and is this going to be one of the main things to look out for then to define Q1 at least as we go forward into 2021 for and again thinking specifically about the currency market. Shall I kick off? Yeah, I mean obviously trying to predict and second guess the COVID developments week by week month by month is incredibly challenging. I mean I'd say that base case, my base case right now and again there's risk here with this base case but my base case would be that and hopefully it's the case that this new strain isn't a big enough variance away from the original to make the vaccines redundant. Therefore, you know I would still, whilst we're going to get plenty of blips and we're going to get plenty of volatility, my base case still remains unchanged and I'm talking about the whole of 2021 here. And that is that we generally speaking move along a pathway where the world emerges begins to emerge from COVID. We are left there with a world that's pumped full of monetary and fiscal stimulus. And as a result of that, I think the big theme and it's not a contrarian theme by any means everyone's talking about it. I think the dollar weakening story is the base case for everyone, including myself. And that, and that, I mean if you just put COVID to one side for a second, there are two other big things which alongside COVID aren't big. But if COVID does slowly go away, then these other two big things can can start to become relatively more influential and certainly and the next one on the list would definitely be Biden. And then maybe Brexit. Kind of in my sort of order of things here but for me it's definitely Donald weakness as a result of, you know, more bullish, positive risk appetite globally and move back and move out of some of those sort of US dollar denominated safe havens and move into higher yielding, you know, more emerging market type assets. So of course, don't don't forget that any kind of rotation of assets geographically requires an FX transaction. I mean that's that's the big one of the big drivers here. Often people often think well hang on FX, I'm just buying and selling different currency pairs but actually, you know, if you want to rotate out of US equities, and you want to buy emerging market Asia equities with that money. Well then you've got to sell your US stocks and that you'll then have US dollars. And then to get to buy, I don't know some whatever Indonesian stocks you're going to need to sell your US dollars convert that currency, and then buy those stocks in a different currency so a lot of this exchange rate movement in 2021 might be driven by people coming out of safe haven US stocks. And I guess it's like the dual thing to mention there to kind of even further validate that view is that the Fed with Janet Yellen as the Treasury Secretary again it's just going to be like a repeat of the financial crisis, low interest rates longer mantra, which helps that dollar narrative irrespective of any reflation type risk that might emerge. Do we still see them being incredibly like supportive in that nature I suppose inflation picking up. I mean I was reading a couple of different things and they were saying, generally it's an 1822 month pickup of inflation anyway. So we're talking a long way down the road until we start to see the emergence of that if we see the emergence at all. Yeah. Well, when you bring in the Fed and Janet Yellen. You know the other big, the other big change between 2021 and 2017, 2018, 2019 is that actually through 171819, the Fed were hiking, right, the Fed were on a much more hawkish pathway. Compared to let's say Europe. So Europe, I'm talking interest rate differentials now. So we had a few years there where the federal hiking rates and the ECB were definitely not going to move off zero at all at any time. So you had a divergence in monetary policy differential. And that has just collapsed back because the fed have taken rates to zero, and they're going to stay at zero right now the ECB hasn't changed zero away. It's just the differential the fed went up and now importantly they've come back down and more importantly they're going to stay at zero. So I think that that whole differential that led to dollar strength and if you look at the euro dollar chart, you know getting down to like the 105 is during, you know, 15161718 then, you know that's that's gone there. And that that differential disappeared which is why I think you're a dollar specifically can continue to march higher despite it being painful for the ECB to watch. Is there something to say as well with the Biden angle of kind of reverting back to lesser protectionist stance cultivated by Trump, and therefore it makes then risks associated with those other non dollar related plays like you said, looking for yield elsewhere, those currencies can kind of get some relief. Otherwise, particularly, even Europe, given that they are in the crosshairs very much so the Trump administration. Yeah, I think the Biden effects might have a mild impact on the euro dollar. So we're near as powerful as that infrared interest rate differential thing I just discussed I think we buy the Biden effect you're going to see a much more powerful reaction on some of those currencies that got hammered as a result of Trump protectionism, the likes of the people or the Mexican peso, for example, you know, I think they're probably your, your biggest Biden trades or like the Chinese Yuan is going to, you know, I certainly think that's going to strengthen as well. So I think with Biden, the Biden effect it's more like that, I'd say, with the emergence from COVID.  I also think you're going to see some of those big, but much more cyclical. Let's say commodity currencies should benefit significantly in 2021, if the COVID journey is where we're going to see the COVID effects diminishing where we've seen the worst of it and that's your, you know, your Canadian dollars your Norwegian dollars your Aussie dollars your New Zealand dollars you know these commodity more commodity focused economies. So what does this look like on the charts. So say if we are saying then that there's upside potential for say the euro dollar. What is the upside potential from a technical perspective on that chart. Do you want to pull it up and have a look. Yeah, let me just share my screen quickly. Because I, yeah, I agree with the dollar weakness play. Well, yeah, let me just bring up the euro as well. I think, well firstly for the pounds I was literally just thinking I think we, we do push on and I think we go towards levels that we had, yeah, sort of just above 140 sort of those 2018 levels next year. And, however, you know, it's not always easy is that and if this trend line from the low the year breaks and it is a different story and that would be where I'd happily say okay well I'm wrong for a bit now and it might be worth looking down at 128 on the futures which has been historically a really interesting level and that's where we and we had this chat not long ago and we were talking about where could be a good place to get in for the pound and 128 was that level so if I can get that next year at some point then I'd I'd bite your hand off for it for the euro. Obviously it has been on a bit of a tear and it wasn't so long ago that we had this trend nine near the lows and there's also the weekly trend line and everyone was saying it's going to break it didn't and we pushed on and there's been great opportunities to get in, albeit a couple of months at a time where it's just gone sideways this final break above the 120 has been interesting. And so from a technical point of view, I think you can remain bullish on the euro dollar as long as we stay above this whole region, I know on the weekly chart on the longer time frame going back, you know, many years obviously we broke above that trend line that comes all the way to this sort of point so that's pretty key where can we go well similar with the the pound when looking at 2018 highs. I think that comes in and then you suddenly say well what happens if we break that well putting this then on to the weekly chart, you know what what's to say we can't then push on and get to you know the 130 and whatnot I think you'd obviously have a big hurdle from a technical point of view on 125. You can see historically how that's behaved around there but yeah I like the the dollar weakness play and here's that sort of trend line that wasn't the cleanest in the world but you can see it did eventually then then break through and as long as we stay back above all that and the 120, 118s, I'd be happy to say this goes likewise with the pound I think eventually we're going to break through this massive resistance yes it is you know very important going sort of 135s but yeah 140 I think next year I know that's not a massive call it's only you know not a massive move but I think that's that's what comes in I'd say it's wrong medium to short term below the trend line and then it's the next sort of line in the standard at 128 12750. Well you've got the sterling chart up there on the higher time frame. So, Piers and I had a chat not sure if everyone would have seen it at the time but it might be good to do just a short recap then of your view for sterling around first of all, let's just talk about Brexit first of all. So a quick update of where we are at the time of filming this, the latest is the hard deadline was Sunday and Sunday has gone. And so, this is about the 10th deadline that's passed and nothing has happened. Can you just summarize then what we were saying before in your view about the idea of that this could roll over quite quite easily into 2021 at this point. Yeah. So, in short, having traded the Brexit journey for four and a half years. What's happening now is should be of no surprise to anybody in so much as the negotiating scenario between these two parties as always being that you know you go right to the death, you know you're playing your poker face you keeping your face close to your chest and it's about trying to find that middle ground that we can move forwards and there's big reluctance to shift and then we have deadlines and they get missed and we have more deadlines we get missed but you know ultimately in the end. Fine. Now they're talking about right there's going to be an agreement for Christmas but you know really the 31st of December 2020 is is a good deadline. Not much as well all right that's when we the transition period ends, but make no mistake that doesn't mean to say that things can't carry on being negotiated beyond that so. The point I made earlier in that discussion about a couple of weeks back and was that actually what we're negotiating what they're trying to agree on here is relatively speaking a hard Brexit anyway, even if they do get a deal. And that's because if you go back to the 2016 election, you know, back to that point we were uncertain will we come out of the single market will we not come out of the single market will we come out of the customs union will we not come out of the customs union can we negotiate a deal will we stay in the single market will all that's gone because we're coming out right. So we're going to be at the single market will be at the customs union. So that's kind of Boris's hard ish Brexit is kind of the trauma negotiated deal or Boris is hard ish Brexit and look at the pain. I mean, all right, you've had some short term volatility but it's trading up but it's trading at 133 against the dollar all right it's weakened a bit more against the euro. But I guess my point is don't expect to an agreement before Christmas. I'd say it goes till midnight 31st of December, and even then they might agree to carry on talking rather than actually done a deal guys look signed it. So you're probably going to get some sterling volatility, as each of these kind of deadlines get passed but you can see that over in the big scheme of things on this long term chart that Sam showing us. Yeah. It's a short term volatility but I don't think matters so much because in the end, the big thing that will impact the pounds value is covered 90. That's a much bigger risk to the UK economy, positive and negative risk, by the way, to Brexit in terms of how it might alter UK GDP in 2021. It's all about COVID, like all of it almost and then this tiny little thing that's in the mix is Brexit. That relative difference with particularly COVID in mind, does that come into play when you think about the kind of more fractured nature of US nationwide response, given the federal and state led way of which they operate to say, we're the German government, this is what we're doing. Yeah, that's a really good point. I think that well, that does apply. So again, thinking about currencies like when you talk about Germany problem there is that they have their own currency. Right. So when you're thinking about the euro. Okay. And when you're thinking about centralized policy, then they do have a habit of taking their time. But if everyone, if all governments in the eurozone acted at speed, like the Germans, then, okay, yeah, that can be positive for the euro. I think you're exactly right in the in the federal system in the US, but it just takes longer, especially with divided Congress and all right. So they've just passed this latest bill and you've seen how long it's taken them to get that second fiscal bill passed. Right, just takes longer. You're right, governments can be more decisive and take action. Perhaps you could say that's a positive thing for the economy's ability to weather the storm. And maybe you could say that's a positive from from exchange rate point of view. One area appears that Tim and I started to get into this morning would be interested to get your take is that if you remember back in 2009 era, when everyone was kind of panicking about the future inflation that would be created by the this new unconventional thing, which was then unheard of, which was constantly easing. And we were talking about the fact that inflation never really emerged in that post recession period, or global financial crisis and then here we are again now and people have started to talk about reflation and and future inflation. What do you think is there comparisons there to be drawn and what's the difference this time if any. I think it's a really. So basically in 2009, the, there was, there was in the end a minority but still a quite, you know, aggressive resistance to quantitative easing and that was because of those inflationary fears right it's going to create inflation and it's going to be a disaster. Not only were they not right. I mean, to say they were not right would be a monster on the statement they were spectacularly wrong. Economic theory was had to have to be rewritten literally. I think one of the big reasons for that is, well, where does this money go right the whole idea about inflation thing is that, you know, you pump the system full of money, and it not only devalues your currency which is inflationary in itself but but also then you spark this big kind of upside cycle which which drives prices higher and so just didn't happen and then inflation actually stayed incredibly benign and very low throughout the whole period. Now, is it different this time. And I think it is, but I'm not sure it's that different. I think the reasons around why it's different is because stuff like the the whole rich poor divide thing, you know that wealth gap thing has started to be addressed by the political shifts that we've seen in the last decade, the reason one of the reasons why there was no inflation last time is because stocks went up, and who owns stocks will the rich. So, are the rich going to actually end up spending this increased wealth they've got well no percentage terms so don't spend it. It's just sat in their kind of share account right. If you want to drive inflation from a demand perspective, you need actually the lower income portion of society receiving more money, because the lower income portion of society will spend it all because they haven't you know they're well for obvious reasons right and that that would create the inflationary boost now a lot of a lot of what's happened during COVID is that you know you've seen major policy shift, which has supported I don't want to get into the argument of has it supported the wealthy or poor and but I still think there's a massive problem with the what the wealth divide. Okay, it's been addressed marginally, because it's only been addressed marginally. I think that's your difference where it might be a slightly more positive inflation story. But in the end, do I think inflation is going to surge 3% 4% 5% in developed economies. No. Do I think the Fed changing their policy to a more relaxed inflation target. Does that make any difference. No. In reality, inflation is only going to go up if people start spending money. And what's going to happen with government support gets removed. How many businesses fail. What happens to the unemployment rate. I don't know. So maybe could I continue on to maybe help with that question of. Okay, so the most obvious thing we're all saying is dollar weakness. And are we so question number one is, do I get long every major dollar currency pair right now. And if so, you know what's my risk. And then number two is if I'm not taking that trade now. When should I be looking to get into those trades what sort of rhetoric out of Washington, what sort of covert situation. And how would I look to get into that trade if it's not this week. Yeah, go for it. So I'm posing it to the to the room here I mean. Yeah, so my, my, my approach is kind of goes back to what I said earlier about this trade has started.  But that's fine, because it doesn't mean your opportunity is now vanished. It's about trend right yeah it's a trending market and it's so it's waiting for, I know it's easy to say, but let's wait for the pullbacks. So when do the pullbacks happen. Well, have a look at your screens. Right now. I mean there's a pullback now. It's waiting for these episodes short term volatility episodes where you get a setback on this covert recovery. And it's those setbacks that create the pullbacks that then create your buying opportunities. So you think that those long term trend if you think the dollar is going to weaken throughout 2021. Well then you need to jump on the bandwagon, and there'll be plenty of opportunities each time the opportunity comes along you're buying in at a worse level but that's the nature of a trend right. So it's waiting for, waiting for a big pullbacks, like using my son had a nice sort of channel there on cable for example or restore says wait for the pullbacks which will be driven by a short term covert setback drive those pullbacks looking for the bottom of channels looking for key support flight 128. You know it's just having these big numbers in mind and at the moment between now and the end of the year is the channel or it's 128 right now we might go into quarter one, you might miss that and find this this trend kicks on up another level. And then you got new price points new key supports. And you can see that channel will have shifted higher. And so, how do you trade a friend. Barma pullbacks.


Transferring plays an important role in regulating iron levels in the body. It can be either apotransferrin or holotransferrin, depending on whether it has enough iron attached to it. Apotransferrin is low in iron and stimulates the release of iron from cells, while holotransferrin is high in iron and suppresses the release of iron. Hepsidin is another factor involved in regulating iron levels, and it can also affect the interaction between transferrin and ferroportin, the protein responsible for transporting iron out of cells. When Hepsidin is present in higher concentrations than normal, it can cause the transferrin ferroportin complex to break apart, preventing the release of iron. This study provides new insight into the mechanisms behind the regulation of iron levels in the body. This article was authored by Stephanie L. Behringer, Kandaya Palsa, Vladimir S. Begelman, and others.


We are the home of computing. We choose the big, urgent, mind-bending work that endures and shapes generations. Three thousand researchers and scientists around the globe creating the next advances on computational technology to solve problems we couldn't solve before. We live by the scientific method. It is at the core of everything that we do. We push the boundaries of knowledge to predict things that have never even happened before. We protect the freedom to create so that we can solve complex problems. Knowing that you can take the risks. Knowing that there is no boundary. Understanding that you have that freedom liberates you. We operate with a backbone. We don't cut corners. We really think about the work that we do. We want to make sure it's impactful. It's responsible. It's expansive. That is inclusive. We choose vision of urbanity. Impact beyond market cycles. We are IBM Research. This is the future built right.


Hi. I'm Adam Jabari and this lesson is called Youthful Expression. Today we're going to explore self-portraiture. A self-portrait is an opportunity to explore a subject that you know most, yourself. So, we're going to turn our cameras to a portrait or vertical orientation for today's practice. As with all photography, we need a light source. Where does your light come from? You'll need your camera, a smartphone or tablet with a camera app is perfect for this practice. And have some paper and pen available to you. You may also need something to prop up your camera. I'm going to use my canteen for that. Let's begin with three deep breaths. Sit nice and tall, heart forward, crown high and take a deep inhale in through your nose and exhale slowly from your nose.  Exhale slowly and once more deep inhale through your nose and slow exhale. What does your internal weather forecast feel like? It might be bright and sunny, clear, cold, stormy, overcast. Take two to three minutes to write down your internal weather report. Now that you've spent some time exploring yourself, let's use what you wrote to create self-portraits. So, turn your camera to a portrait orientation or tall. Frame your subject, that's you, from the waist up or even closer. Once you're set up on your stable surface, return to your weather report and express some of those moves in your images. Make five to ten self-portraits. Maybe your weather is complex. You might have sunny and stormy, hot and cold all swirling around within you. If that's the case for you, try taking an image to represent each of these moods.  Give it a try. South African photographer Zinele Muholi said, Too often I find we are being mimicked and distorted by the privileged other. We are here. We have our own voices. We have our own lives. Thank you for being here today to share your voice. Let's close together with a full breath. I'm Adam Jabari. Peace.


Good morning folks Steve Rhodes coming to you live from the shores of sunny and pleasant Delray Beach, Florida. This year Lebanon update we've got a sea of red all the US indices that we track our trading to the downside down 40 points about a little less than two tenths of a cent. Four tenths for the S&P or 16.6 tenths for the Nasdaq one hundred eighty nine points there and seven tenths for the Russell. That's about a 13 point move. You've got the semis down 52 bucks one and a half percent got trannies there trading down a hundred and two that's a seven tenths of a percent move to the downside goals also trading down by seven tenths that's a 14 point move silver by seven tenths 16 points there likes recruit us up 87 pennies natural gas basically flat the third year treasuries down a half a point trade out at one nineteen ten. Let's try to figure out what all that means by looking at that nine panel market update chart. The ES mini ES mini right now is trading below a very key level. You want to write this number down in your pad of paper if you don't have it there already it's forty three seventy seven. We had a close blow forty three seventy seven. We likely have a change in turn I won't say likely we will have a change in trend. If we take a look at a spotball till next yesterday a tester rejected that fifty day exponential moving average as long as the price remains above it and it is 1560. Sellers have the upper hand. In the case of the NQ its next area of support is down at the fourteen six ninety two level at the bottom of its profile U.S. dollar index yesterday negated its TD nine count top price is trading above that high right now. It looks like wants to break out but during the show the traders that show we're going to take a look at the Euro the end of the pound because those are the influencing factors with regard to the U.S. dollar index gold consolidating with inside its daily profile that range from nineteen eighteen to nineteen fifty three silver pulling back this is going to be day number two now there is a new profile that is attempting to form the top of which is a twenty three sixty two. So this is a profile that is trying to form below price. That's a bullish signal for a silver out there doesn't mean that price can't pull back to test that level of resistance which right now be twenty three sixty two but is a bullish signal actually crude has held its swing point down at seventy eight sixty price has resistance up at the eighty one thirty eight to eighty one ninety four level. Natural gas will complete a TD nine count bottom pattern today. It's also forming a new profile. It supports a two fifty five resistance up at two seventy nine under thirty or Treasury just consolidating with inside its daily profile does have a TD nine count bottom as well. The continues to trade lower support will be down at the one eighteen oh nine level. Folks stay tuned for the traders that show but if you have to start through Friday have a fantastic weekend. Thanks for joining us. We'll look forward to speaking with you again soon. Take care now.


In many ways fashion has always been technology, cutting a piece of cloth and turning it into something that can function on such a dynamic and expressive system as the body is an extraordinary technological feat. Technology has and continues to move ahead in leaps and bounds and I think that's a very exciting thing for fashion. Many people have different ideas about what wearable technology is but I like to think about it as interactively responsive garments and interfaces. As technologies advance and as they're explored with they can extend our ability to communicate with each other. They can extend our knowledge about ourselves and what's going on with our bodies. They can communicate that knowledge to others if we want it to. Wearable technology occurs in two spaces at the moment. We have artists and designers doing a lot of highly poetic explorations that are unable to be bought to market but then we have examples of engineering driven wearable technologies that are bought to market. Helen Storey and Tony Ryan for example are major leaders. They're champions in many ways of investigating how scientists and artists and designers can collaborate fruitfully to really innovate and look at how these innovations can play out in everyday life so become products. Susan Lee with her bio couture project is really looking directly at synthetic biology biological systems to create new materials. Pauline Van Dongen is in many regards a younger researcher and she's trained as a fashion designer and she's working with scientists to try to refine ways that wearable technologies can be developed in a fashion context and actually brought to market and this is one of the biggest struggles. We can see around us with some of the sporting applications of wearable technologies. We see microcontrollers paired with the body that can give you data about how you're running or how you're exercising or how your body is responding to situations but as technology is evolving we're beginning to see applications of the biosciences and the life sciences and the material sciences. We can 3D print DNA. How could that manifest itself in a wearable technology? There's a compromise between what's currently possible and what is desired in order to produce things at the moment and hopefully that compromise will be less towards the engineering and a bit more towards the expressive capabilities and extraordinary potential of wearables as we move forward.


Okay, so here we are going to make a custom flesh tone palette with watercolor paints. So I'm going to mix a red and a yellow here together until I get sort of an orangey color. And this is where I made my first mistake. I should have added a lot more yellow and made it a lot more orangey. I ended up having to fuss with the paint a little bit to get it to be the color I want, because I didn't add enough yellow right there. And then I add some blue in, and that was cerulean blue, which whatever yellow, red, and blue you use, you're going to get a different flesh tone color. I should have used probably ultramarine blue, but I chose the cerulean blue. I don't know what I was thinking, but I end up making it work. And I end up fussing with it back and forth. As you can see, adding yellow, it gets too green, adding red, it gets closer to what I want, testing it on a piece of paper, adding some white. And I really want to have a few different shades of flesh tones. So the white is going to make the watercolor less transparent. It's going to make it opaque, but I'm okay with that because we're shooting for flesh tones here. And honestly, if you just add a lot of water to it, it's going to bring back a little bit of that transparency anyway. So I'm just holding it up against my hand to see if I'm headed in the right direction. Now I'm going to test it on a piece of paper, see if I like it. And if I do, which I think that's not bad, then I can scoop it up into a full pan there.  So if you're going to do this, make sure you've got some paper handy, set that one aside. Now I'm going to add a whole bunch more white to that one and lighten it up even more so that I have a light and a dark in similar shades. So I can lighten up the dark one by adding a lot of water, but I can lighten up the light one even more by doing the same thing. I did decide as I lightened it that it was a little too purple. So you saw me add a little bit of yellow there. I still thought it was a little purple, so I did a little bit more. So I'm just playing and mixing until I get the color I want. There's, you know, no exact formula. You just have to get out your paints and mix them. And the nice thing about doing this is you can mix a full pan or two of these paints and let them dry out. These are watercolors, so it's okay if they dry out because to reconstitute them, you're just going to spray it with water and they'll be fine. It's not like when you do this with acrylic paint and then you have to make sure you store it in an airtight container or use it, you know, fairly quickly because it's going to dry out. If I'm going to spend all this time mixing flesh tone paint, then I prefer to do it with watercolor because I know that it's not going to get wasted. So I decided I like that. So I'm going to fill another pan and set that one aside. Now I'm going to mix the rest of that that's on the plate and try to get a couple more flesh tone colors in slightly different shades, something that's yellower than the first batch because I would like to be able to have a variety of flesh tone colors when I'm playing with faces.  I'm pretty sure that's raw umber. So I'm going to add some brown to it, which is really going to warm it up a lot. And this is the color I end up with, which I really like. You can see on the swatch card there that it's a lot warmer than the first batch. And so I'm going to fill up another full pan with this new dark color. And then as you'll see in just a minute, I add some white to it to make the light color. Trying not to waste anything and use what I have to create a custom flesh tone palette. I also do add in some more empty pans into the palette and to the right of me near my water bottle, you see the palette. It is an empty prima palette. I took my prima paints out and put them into something else. All three sets together. And I saved these palettes and I'm going to make a custom flesh tone palette out of this particular one. And in it are going to be my four full pans of watercolor paint that I've just mixed. I'm also going to add in some a pan of white, two different shades of red. I think phthalo crimson permanent red and handsome yellow. And then also pains gray, which is a nice dark blue black, which is going to be great for this. So here I'm going to put my pans in. And then I'm going to fill the empty spaces in with, there we go, with more empty pans. I'm going to put some more white in that one. And I'm using a variety of paints, royal Van Gogh, Grumbacher. I'm using what I have. I do like Daniel Smith paints, but I'm using what I have. I decide on that last half pan to pull that out and to put in a full pan because I want to have a full pan of pains gray. So there's the phthalo crimson, which is more of a purpley red. And then I'm going to, I'm thinking, yeah, like what am I going to do? The mess is making me crazy. There's the pains gray that I knew I wanted. I decide I'm going to use that one. And I'm pretty sure that's permanent red and then handsome yellow. And these are all Van Gogh and Grumbacher paints down here on the bottom. The phthalo crimson is a Grumbacher. The other three are Van Gogh paints.  So I have to have the pliers handy. So there you go. There is our custom flesh tone palette. I will link the watercolor Wednesday live broadcast in the description below in which I play with this palette and create a face. That was a lot of fun. Don't forget when you create any palette to make yourself a color key that you can keep in said palette so that you have an example of what those colors are going to look like on white paper. You should do that with any palette that you either create or buy. And I'm not going to waste that paint that's on the plate to my right. I do take my palette knife and some water and I scrape all those little bits of paint off and they ended up in another empty full pan and they went out into one of the mystery boxes that I just recently sold. So somebody got some custom flesh tone paint. So there you go. On the color key I made sure to put the brands on there on the ones that I didn't custom mix and have some fun with this. Have a great day. Do something nice for yourself. Maybe make a flesh tone palette and do some experimenting and have some fun and see what you come up with. Don't be afraid to try mixing your own paint. It's a lot of fun. What's the worst that could happen? All right. That's it for now. Have a great day everybody.


Okay, hello everyone. Thank you. Thank you. Welcome to welcome. Let me be the first to welcome you to RailsConf So our our talk today is Heroku 2014 a year-in-review It is gonna be a play in six acts featuring Terence Lee and Richard Schneemann So of course this is a year-in-review and Heroku does measure their years by RailsConf So this is from Portland to Chicago RailsConf year the standard RailsConf year as As some of you might know that we are on the the Ruby task force and in fact that makes us Ruby task force members and Of course this was a big year. We're gonna be talking a little bit about app performance some Heroku features and Community features so first up to the stage. I'm gonna be introducing the one the only mr. Terence Lee You might have recognized him in some other roles He hails from Austin, Texas, which has undoubtedly the best tacos in the entire world so he Them's fighting words friend So that he's also sometimes known as the chief taco officer Or the CTO and something something very interesting about Terence is recently. He was inducted into Ruby core so congratulations to Terence. All right, so without further ado act one deploy speed Thank you, Richard so At the beginning of the rails standard year we focused a lot on deployment speed We got a lot of feedback and realized deployment was not as fast as it could be and we wanted to make it faster So the first thing we have to do was to actually do a bunch of measurement and profiling to look at where things were slow and how we could make it better and to kind of gauge Like the before and after and know when at good points Where to kind of stop and move on To other things because you can never make You can never you'll never be done with like performance improvements so After about Six months of work on this we managed to cut down the deploy speeds For across the platform for ruby by 40 percent So it's a pretty decent speed improvements And in order to do this we mainly looked at three various ways to speed this up The first thing was running code in parallel. So running more things Running things like more than one thing at one time If you cache stuff, you don't have to do it again and in general just like cutting out code that doesn't need to be there So with the parallel code we worked with the bundler team on bundler one five There was a pull quiz sent by cookpad That was sent in to add parallel bundler install for bundler one five So if you actually aren't using this yet, I would recommend upgrading your bundler to at least bundler one five and The bundler added this dash j option which allows you to specify the number of jobs to run And this is basically if you're using MRI it forks and does a These number of sub processes and if you're on j ruby or rubinius it actually just uses threads here And the benefit of doing this is when you actually do bundler install the dependencies that get installed get downloaded in parallels You're not waiting on network traffic sequentially anymore And in addition, you're also installing gems in parallel And this is mostly beneficial especially when you're running Native extensions. So if you have something like nohigiri that takes a long time Oftentimes, you notice you just like hang and wait for it to install and then it stalls next thing So this allows you to install that basically in the background and go and install other gems at the same time Also in bundler one five Richard actually added This function that allows people allows bundler to auto retry failed commands. So Initially before this we would when we run bundle install and something would fail because of some odd network timeout like during one chance you would have to basically repush again No matter where you were in the build process. Um, so by default now bundler actually will retry clones and gem installs for up to three times by default So it will continue going during the deploy process So is anyone here actually familiar with the pigsy command? So just Richard um, so pigsy's is parallel jizip and the build and packaging team At hiroku worked on this feature Or worked on implementing this at hiroku Using the pigsy command and in order to understand the kind of benefit of using something like this When you push an app up on hiroku during the compile process it actually builds these things at hiroku that are called slugs and Basically, it's just like a tar of your app directory of everything after the compile phases run And originally we were just using squash fs initially and then we moved to kind of just tar files and We noticed that one of the slowest points in the actual build process was actually Just going through and compressing everything in that file directory and then pushing it up onto s3 after that was done And so one of the things that we looked into is is there a way we can make that faster? so If you ever push a hiroku app and then you basically like wait when it says like compressing and then it goes to done like that's the compressing of the actual slug and we managed to Use slug pigsy to now improve that by sniffing them out. I don't remember the actual performance improvement but it was pretty significant and The only downside was in certain slugs the slug sizes are a little bit bigger But the performance trade-off was worth it at that time The next thing we started doing was looking into caching so anyone here using rails for So pretty good amount of the room So one of the things that we did which differed from rails 3 Thanks to a bunch of the work that's happened on the rails core team with this was that we can now cache assets between deploys This wasn't possible in rails 3 because the cache was You couldn't actually reuse the cache There was times when the cache would basically be corrupted and then you would get like assets that wouldn't work between deploys So the fix there was you actually have to remove the Assets between each deploy and some rails 3 builds, but it wasn't consistent So sometimes it worked and sometimes it didn't and on heroku. That's not something we can rely on in an automated fashion But luckily a lot of that stuff has been fixed for rails 4 so now we cache assets between deploys on rails 4 and so if we look at um Rails 3 I guess this got cut off, but um, they're supposed to say about like 32 seconds for a rails 3 deploy and then on rails 4 it got For the average we we measure the steps in the in the build process and on rails 4 The perk 50 was about 14 points something second. So pretty significant speed improvement there Both due to the caching and other improvements inside of rails 4 for the asset pipeline So the other thing we also looked at was just If there's code that Is doing extra work if we remove that it will speed up the build process for everyone who's deploying every day So one of the first things that we did was actually stop downloading bundler more than once. So initially When you when we do the ruby version detection, we actually have to download bundler and then Basically run that to get the version of ruby to install on the application And then again, we would then and download and installed again because it was run in a separate process For the actual like installing of your dependencies And one of the things we did was to actually just stop doing that and we would cache the bundler gem So we don't have to download that two or three times during the build process. So cutting network io and other things Um We also started removing there was like duplicate checks between detection of what kind of app you're using so and Been detects. Uh, we would use it to to figure out what kind of app you have like if is it a ruby app a rack app A rails 3 app a rails 4 app stuff like that. Um, and then again Uh, since it was a separate process and been compiled we would have to do it again um, so Richard actually did a bunch of work to Refactor both detect and release and so now detect is super simple It literally just checks if you have the gem file file there And then all the other work is now deferred to bin compile So that means we're only doing a bunch of these checks, uh once like examining your gem file checking what gems you have. Um So not doing that two or more times and If you haven't watched this talk, uh, he gave this talk at agency ruby I don't actually know if the videos are quite up yet, but Richard does a talk about testing on testable. So if you're interested in learning how we test the build pack Um, you should go watch this talk So I'd like to introduce Richard. Um Because he's gonna present on the next section. Um, so Richard loves ruby so much that he got married to her Uh, I think he got married last last year Yeah, right for our last rail scum. I remember that He's also on the rails issues team and he's won the top 100, uh, rails contributors. Um, according to the rails contributor sites And uh, you might also know him for his This gem called sextant that he released for rails 3. Um basically I remember back in the day developing rails apps when I want to basically verify routes I would run the rake routes command and it would you know boot up the rails environment You have to wait a few seconds and then they would print out all the routes And then if you want to like rerun it using grep, you would keep running it again. Um, so A lot of us when we're doing development already have like rails running in a servers, uh, Where we're testing things and whatnot So what sextant does it allows, uh, it supports basically looking at the routes that are ready in memory And just allowing you to query against them programmatically and then it has a view for doing this And this was also just merged into rails 4. So if you're using rails 4 higher, you actually don't need the sextant gem and it's now built in um Richard and I both live in austin and so, uh, when people come visit or actually when i'm in town, which isn't Often, uh, we have re meet-ups at franklin's barbeque So if you guys are ever in town, uh, let us know and we'd be more than happy to take you to a meet-up All right. So the uh, for the first part of this, uh, this act, we're going to be talking about app speed But before we talk about app speed, we're actually going to talk about dimensions uh, so The the document dimensions are Here we go We're originally written in widescreen, but the screens here are, uh, standard There we go. So, uh, you're actually going to get to see all of the slides as opposed to just having some of them cut off So, okay, um on on app speed, uh, the first thing I want to talk about is, um, is tail latencies anybody familiar with tail latencies Okay, the guy is in the hiroku t-shirts and uh, somebody else Okay, so this is this is a normalized distribution We have on one side the number of requests On the on the other side we have the time to respond so the further out you go the slower it's going to be And, um, we can we can see this is the distribution of our requests.  You're super happy Over here, we have a super slow request and you don't want to be that customer and you're pretty unhappy So right in the middle is our average and i'm sure they talked a ton about, um Why the average is really misleading in the in the last session with skylight i o But but we're basically saying that Roughly 50 of your of your customers 50 percent of your traffic is going to get a response time at this or or lower So like this is this is pretty decent. We can say like 50 of the people who come to our website get a response before then Moving up the distribution To something like perk 95 we say 95 of everyone who visits visits our traffic will get a response by now So i'm going to be using those terms perk 50 perk 95 that refers to the percentage of Of requests that come in that we can respond by So this is kind of theorized. This is an an actual, um application And one thing that you'll notice is that it's not perfectly normalized like it's not like both sides are not symmetrical We kind of like steeply shoot up and then we have this really really long tail And and this is kind of the what i'm referring to what i'm saying tail latency So yes, somebody actually might have gotten a response in zero milliseconds You know, I doubt it But somebody for sure did get a response in 3000 milliseconds And that's a really long time to wait for your requests to actually come in and get finished So even though somebody is getting really fast responses and your average isn't bad your average is under 250 milliseconds One customer might be getting a really slow response and a really fast response and and the net is a bad experience So the net it just it's a very inconsistent experience So whenever we're talking about application speed, we have to consider individual request speed and average but also Consistency how consistent is each request? So how do how do we do this? What how can we how can we help with this? One of the things that we launched this year was was px dino's So a px dino a typical dino only has 512 megabytes of ram.  So Or it's it's not on the same shared infrastructure So you can you can scale with dino's You can also scale inside of dino's and that's kind of two two important parts that we're gonna gonna have to cover So of course whenever you have more requests than you can possibly Process you want to scale up and say i'm gonna have more dino's but what happens if If you're not making the best use of everything inside of your dino previously with 512 megabytes of ram You could just you know throw a couple unicorn workers in there and you're like, oh, i'm probably using most of this Like if you put two unicorn workers in a px dino, you're not making the most use of it all So recently i am super in love with uh with puma evan this is evan phoenix's Web server that was originally written to kind of showcase rubinius. Guess what it's really nice with mri as well Recently we've gotten some puma docs And so i'm gonna talk about puma for just for just a little bit So if you're if you're not familiar I was totally off on the formatting So puma handles requests by running multiple processes or by multiple threads and it can actually run in something called a hybrid mode Where each process has multiple threads. We recommend this or i recommend this like if one of your processes crash It doesn't crash your entire web server. It's kind of nice um And so the multiple processes is something that we're pretty familiar with uh as rubius. We're familiar with Forking processes. We're familiar with unicorn But the the the multiple threads is a little bit different even with mri Um even with a something like a global interpreter lock.  And uh, and this will give our threads time to kind of jump around and allow others to do work So you you can get quite a bit of extra performance with there So we're actually going to be using puma to scale up inside of our dino So once we give you that eight gigs of ram We want to make sure that that you can uh, you can you can make the most use out of it In general with puma more processes means more ram And more threads are going to be more uh cpu consumption. So you want to um You want to maximize your processes and maximize your threads Kind of without going over as soon as you start swapping as soon as you go over that ram limit Your app's going to be really slow and that kind of defeats the the purpose of trying to add these resources um another issue is uh that I had kind of never heard of until I started looking into all of these multiple um web servers is a slow client So if somebody is connecting to your website via like, uh, 2g over like a nokia Candy bar phone uploading like photos or something like that like that is a slow client And um, if you're using something like unicorn it can DDoS your um your site because Each one of those requests take takes up an entire unicorn worker Whereas puma has a um has a buffer and it it buffers those requests as uh similar to the way nginx does um One other thing to consider with puma is so i'm mentioning threads i'm talking about talking about threads ruby We're not necessarily known as the most thread safe culture uh thread safe Community and so a lot of apps just aren't thread safe and so some you might take a look at puma and be like hey That's not for me Um, you can always set your maximum threads to one and then now you're behaving just like unicorn except you have the slow client protection And whenever you get that gem that's bad or you like stop mutating your constants at runtime or something um Then uh, you can maybe bump up and try multiple threads Okay, so i'm i'm talking about consistency and i'm talking a lot about puma. How does that all kind of boil down and help? um So does anybody think that sharing Distributed state across multiple machines is like really fast maybe Okay, good, uh, what about sharing state inside of memory on the same machine? Is that faster? Okay, all right. I think we're we're in uh in agreement so uh a little bit of a point of controversy um, you might have heard of the the hiroku router at some point in time um, and this the router is actually designed uh, Not randomly, but it is it is designed to use a random algorithm Um, and it basically will try to deliver request as fast as humanly possible or computerly possible to individual dinos So it's like it gets the request and wants to get it to your dino as fast as it possibly can And adding any sort of additional overhead of distributed locks or cues Is gonna be slowing that down Once inside of your in your your process puma or unicorn has in memory state of all of its own processes And is capable of saying oh, hey, this process is busy. This process is not busy. I can do Really intelligent um in routing and and basically for free It's really fast it it took a little bit of convincing for me. Um, so does anybody else need to be convinced Okay, good because otherwise I could totally just skip over the next section of slides So this is this is a graph uh produced by the fine Um developers over at at rap genius and on one side we will actually see a percentage of requests queued And on the bottom we are going to be seeing number of dinos So the goal is actually to minimize request queuing like this is this is time that your customers are waiting that you're not actually doing anything Uh, so you you want to minimize that queuing with the smallest number of resources So the smallest number of dinos This top line we actually have is what we've currently got now the random routing with a A single threaded server and like this is pretty bad It like starts out bad and it like it doesn't even like trend towards zero like this is probably bad So this is using something like web brick in production. So Don't use web brick in production Or or like even even thin um in single threaded mode. So um On the on the very bottom we actually have a Like mythological if if we could do all of that distributed shared state without uh and locks and cues Without having any kind of overhead We can see that basically it just drops down to zero at about you know, in their case about 75 dinos and then just You know, it's straight zero. There's no queuing and it's great and this would be amazing if we could have it But unfortunately, there is a little bit of overhead What was really interesting to me is this second one, which is not nearly as nice as that mythological intelligent router But it's kind of not too far off This is still our random routing and uh, and this was actually done with unicorn and uh workers Set to two so basically once we get the the request to your operating system It's like one of those two workers is free and can immediately start working on it Some some interesting things note about this is For the non optimal case for the we basically don't have enough dinos to handle this So that might happen if you know, you got on hacker news or whatever slash dotted reddited snap chatted secreted, I don't know And uh, it does actually eventually approach ideal state So it gets even better. Uh, and unfortunately they kind of stopped at at two processes But it gets better the more concurrency that you add so if you have three or four workers or Again, if you're using something like puma and each one of those workers is running like four threads Now you have like a massive amount of concurrency that you can deal with all of these requests coming in um, so The the the if again, we're looking for consistency We want that request to get to our dino and immediately be able to process it So you can use puma or a unicorn to maximize that worker number Um, and again distributed optimize distributed routing is slow in memory routing is relatively quick uh On again just in in the whole context of speed Ruby 2.0 came out and uh, this was a while ago. It's got gc. It's optimized for copy on right In in ruby extra processes process forks actually become cheaper So the first process might take 70 megabytes the second one 20 and 10 and 7 and 6 So if you get a larger box, you can actually run more processes on them If you get eight gigs on one box, you can run more processes Then you can if you had eight gigs across eight boxes um, so again more processes mean more concurrency and more concurrency means, uh, consistency Uh, if you are using workers, you can you can also scale out with um with rescue pool And uh, if your application's still slow, we rolled out a couple of really neat platform features One of them is uh is called htdp request id. So as a request comes into our system We will actually give it a uu id and you can see this in your router log And then we've got documentation on how to configure your rails app So it will actually pick this up and use that uu id in tagged logs So like how is this useful? So if you are getting like an out of memory error or if your request is taking a really long time and you're like, uh Like that request is timing out and you know Heroku is returning a response and we don't even know why Now if the request id is tagged, you can actually follow along between your two logs and be like Oh, it's hitting that controller action Maybe I should be sending that email in the background as opposed to having to actually block on it So you can trace specific errors We also launched a log runtime metrics a while ago And this is something that we'll actually put Your your runtime information directly into your logs. You can check it out Librata will automatically pick it up for you and make you these these really nice graphs And again, if you're doing something like unicorn or or puma Then you want to get as close to your ram limit without actually going over Okay, so uh the The next act in our in our play Again, introducing Terrence is we'll be talking about ruby on the Heroku stack and in the community Thank you. Uh, so I know we're at railsconf, but I've been doing a bunch of work with ruby. So I want to Talk about some ruby stuff So who here is actually using ruby 187? Wow, no one that's pretty awesome. Oh wait one person You should probably get off of it. Uh, but Who's using ruby 192? few more people 193 Good amount of people here. Uh, so I don't know if you guys were following along but uh, ruby 187 192 got end of life at one point and then there was a security incident and Zachary Scott and I have volunteered to maintain security patches till the end of june So if you are on 187 and 192, I would recommend Hopefully getting off uh sometime soon unless you don't care about security or want to backport your own patches And then we recently announced that ruby 193 is also getting an end of life in february 2015 which is Coming up uh relatively quickly. It's a little less than a year away now at this point Uh, so please upgrade to at least 200 or later And uh during this past rail standard year, we also moved the default ruby on heroku from 192 to 2.0.0 We believe people should be at least using this version of ruby or higher And if you don't know yet, you can declare your ruby version in the jump file on heroku to get that version Um And we've also are pretty Pretty serious about supporting the latest versions of ruby basically the same day that they come out. So we did this for 2 1 0 and 2 1 1 And in addition, we also try to support any of the preview releases as whenever they get formal releases. So We can as a community help Help find bugs and test things like put your staging app on your versions of ruby If you find bugs, then hopefully we can fix them for they actually make it to the final release And uh with regards to security patches if there are any security releases that come out We make sure to release them that day as well. We take security pretty seriously So once a security patch has released and we've patched those rubies You have to push your app again to get that release And the reason we a lot of people ask us like why we don't do that Why we don't just automatically upgrade people's rubies in place and the reason the reasoning here is that Not there might be a regression in the security patch or maybe the patch level is not actually 100% backwards compatible There's a bug that slipped through but you probably want to be there when you're actually deploying your application In case something does go wrong You probably wouldn't want us to deploy something and then have your site go down and then you're like not at your computer at all You're at dinner somewhere. It's like super inconvenient to get page there. So We publish all this information all the updates to the platform But also all the ruby updates including security Updates to the dev center changelog. So if you don't uh, this is I think devcenter.heroku.com slash changelog And if you don't subscribe to it, I would recommend subscribing to it just to keep up to date with what is happening On heroku for platform changes in addition to updates to ruby specifically On heroku And there isn't too much traffic like you won't get like 100 emails a day. So Highly recommend subscribing this to just keep up to date with things like that here Um So the next thing I would like to talk about is uh mats is ruby team. So if you didn't know Back in 2012 we hired three people from room core. Um, we hired mats himself, uh, koichi and nobu and as I've gone around over the last years talking interacting with people I've realized a lot of people have no idea who Besides mats who koichi and nobu are so I wanted to take the time to kind of update people On who these people were and kind of what they've actually been like we've been paying them money And what they've actually been doing to kind of move ruby forward in a positive direction. So If you run a git log, uh since 2012 since we've hired them, uh, you can see the number of commits they've made, uh To ruby itself. So the so nobu here Who we've hired has basically more commits than like the second guy by many many commits And then uh, koichi is the third highest committer as well And you're probably wondering why I have six names here on a list for the top five And so there's this so there isn't actually someone on the ruby core team who has the handle svn It's not actually a person. Uh, so I find out, uh, the hard way Who this person was?  So there's like 710 of those commits. I think I did this like a month ago So this is a number of commits for a month ago So the first person I like to talk about is nobiyoshu nakata. Um, also known as nobu Um, and he's known I think on ruby core as the patch monster Uh, so we'll go into why uh, he's known by this So what do you think the result of time dot now equals empty string? I'm sure you thought it was an infinite loop, right? Um Or uh using the rational like so if using the uh rational number, uh library and standard lib Like what do you think the result of doing this operation? Yeah, so this is a sec fault Thank you. Thank you for reporting the bug Uh So these uh, so eric hodl actually reported the other bug the time thing And he found this in ruby gems I believe but these are real issues that are in ruby itself And so if you actually run those two things now and you're using later patch levels, you should not see them but uh the real issues and um Someone has to go and fix all them and so the person who actually does this is nobu And uh, he actually gets paid full time to basically do bug fixes for ruby So all those two thousand seven hundred some commits are bug fixes to ruby trunk to make ruby run better. Um And I Thanked him when I was just in japan last week for all the work. He's done. Um It's pretty incredible. Like there's so many times when things sec fault and other things and he's basically made it better Um, I was at oedo and there was actually someone giving a presentation about like 30 tips of like how to use ruby And someone was talking about open uri and there was uh code on the screen And he found a bug during like the guy's presentation and during it He committed a patch to trunk during that guy's presentation. So he's pretty awesome. Um, He doesn't he doesn't do he hasn't done any talks, but uh, I think people should know about the work he's been doing Um, so this last bug actually that I wanted to talk about that he fixed was Are any of you familiar with the regression from in ruby 211? Um with regards to hash so Uh, I'm sure you're familiar with the fact that if you use ruby 211 on rails 403, it just doesn't work like they're in rails We we use this we fetch uh In hashes we use objects as keys and if you override the hash and equal method When you fetch like you won't get the right result back um so inside of rails in 404 they actually had to work around this bug and uh Nobu actually was the one who fixed this inside of ruby itself So these were just like the three most interesting bugs that I found from within the last uh year or two of stuff He's worked on but uh, if you look on side ruby core, you can find like Hundreds and hundreds of bugs that he's done within the last year of just like seg faults and other things. Um, So he's great to work with uh It's the next person I want to talk about is koichi sasada um, he's also known as co co one co e one, uh And uh, he doesn't have a nickname in ruby core So me and richard spent a good amount of our talk preparation Trying to come up with a nickname for him. So we came up with the performance pro And this is a picture of him giving a talk in japanese um so If you use ruby one nine at all, uh, he worked on yarv So basically the new vm stuff that made ruby one nine I think it was like 30 fast than one eight for like longer running processes Um, more recently he's worked on the r gen gc um And this was introduced in ruby two one one And it allows faster code execution by having basically Shorter gc pauses so instead of doing full gc every time like you can have these minor ones. Um So just he spends all of his time thinking about performance uh in ruby and that's like what he's paid to work on uh, so If anyone actually cares about ruby performance, you should Thank this guy for the work. He's done. Um, if you've looked at the performance of ruby since uh in the last few years Like it's improved a lot A lot due to this guy's work And I was just I was talking to him and he was telling me that he basically like when he was working on r gen gc He like he was just like walking around the park and he had a breakthrough So he like spends a lot of his time even off of work hours just thinking about this stuff Um other stuff that he's been working on as well is uh profiling work. So Uh, if you've used any of them on stuff for two one one, um With the member profile and other things, uh, he's been working on With him to introduce hooks into the internal api to make stuff like that work So we I think we understand that profiling be able to measure your application For ruby is super important. Um, so If you have basically comments or uh suggestions on Things that you need or think that you can to improve this thing like it's worth talking reaching out and talking to Koichi about this And some of the stuff he's been working on In this vein has been like the gc tracer gem So using this to basically get more information about your garbage collector An allocation tracer gem to see how long live like objects are And then even in two two, uh were as a team we're working on there is an incremental gc patch and then also, uh Or he's working on making the gc better with incremental gc And then there's symbol gc for security things which would be super good for rails So we can't get like dos because of the symbol table being filled up Uh another so one of the things when I was in japan, uh, we had a ruby core meeting and we talked about ruby releases and uh releasing rubies kind of a slow process And uh, I was I wasn't really sure why it took so long and so I kind of asked the question and uh Naruse who's the release manager um of 2 1 was telling me that it requires Uh, lots of human and machine resources basically ruby has to work on many different configurations linux distros You know on os x and other things and in order to release like the ci server has to pass and like you kind of have to pass on like Various vendors and whatnot. So like there's a lot of coordination and like checking. Um To like make an actual release happen, which is why things don't release super fast. Um, so some of the stuff that kawichi and uh My team and other people on ruby core will be working on is like working on infrastructure and services to help with basically testing ruby To kind of hopefully automate and like basically do that per Either nightly or per commit or something along those lines. So hopefully we can get uh releases that are faster and out to users sooner um If you have ideas for ruby 2 2 like I would love to hear them. We have a meeting Uh next month in may about uh, what is going to go into ruby 2 2? So I'd be more than happy to talk to you about ideas that you have uh that you would like to see there. Um I'm just gonna skip this stuff since I talked about earlier and we're running short of time. So here's shneems to actually talk about rails Okay, has anybody used rails? Have we covered that question yet? Okay, welcome to rails conf. Um, okay. So rails 4 1 on heroku, uh, a lot of things in a very short amount of time We are secure by default. Have you heard of the secrets.yaml file? Okay, so secrets.yaml file is actually reading out of an environment variable by default, which is great we love environment variables separate your config from your source and um So whenever you push your app, we're going to set this environment variable to just like literally a random value And if for some reason you ever need uh to like change that you can do so by just setting your The the secret key base environment variable to to whatever you want. Maybe, you know, like another open ssl bug comes out or something um, so Another thing that was worked on a bunch is the database url environment variable This is something that we've spent a lot of time looking at and it's actually support has been in rails for Surprisingly large amount of time to just read from the environment variable, but never quite worked due to some edge cases and random Rate tasks and so on and so forth So this this december around christmas time spent a lot of time getting that to work So i'd like to happily announce that rails 4 for 1 actually does support the database url environment variable out of the box.  Um, if the database url is present, we're just going to connect to that database It's that's pretty simple. It makes sense. Um, if the database yaml is present, but there's no environment variable Then we're going to use that that also just kind of makes sense Um, if both are present then we're going to merge the values Make sense, right? Okay, so we that sounds crazy. Uh, bear with me, but um, a lot of people You you want to put your connection information in your database url environment variable? Um, but there's also other values you can use inside of your database yaml file to configure active record itself Not your database so you can turn off and on prepared statements. You can change your pool size all this kind of thing. Um And uh, we wanted to still enable you to be able able to do this. So, uh, so the results are actually merged and um For for somebody like hiroku or like if you're using another container Um, we don't have to have as much magic if you if you didn't know, uh database url We actually had to over whatever your database url was. We were just writing a file over top of it And it's like forget that we're going to write a custom file So people would put stuff in their database url or their database yaml file And they'd be surprised when it wasn't there or like a different file was there So we no longer, uh, we no longer have to do that and rails plays a little bit nicer with um, with this Containerized style environment. Um, it also means that you could actually start putting your active record configuration in that file Um, another note if you were manually setting that, uh, your pool size or any of those things via a after reading an A article on our dev center go back and revisit that please before upgrading to rails 4 1 Um, some of the syntax did change between rails 4 0 and 4 1 So if you can't connect to a database, then maybe just like email shneems and be like, I hate you What's the link to that thing and i'll i'll help you out? um Okay, uh, I think probably actually the last thing that we have time for uh is uh asset pipeline who Like if asked in an interview would say that their favorite thing in the whole world is the rails asset pipeline Oh Just rafael we have a bunch of like rails core here, by the way, so you should you should come and thank them afterwards um for for other things not for the asset pipeline Uh, so the asset pipeline is the number one source of of ruby support tickets At haruku just people being like hey this worked locally and like didn't work in production And we're like yeah, that's just how asset pipeline works. That's not haruku um, so uh, so rails 4 1 added out of the couple things. Um, it's going to warn you in um, development if you're doing something that's going to break production Like if you've ever forgotten to add something to your pre-compile list, well now guess what you get an error Um, if you are not properly declaring your asset dependencies, then you're going to get an error. Um And this is even better actually in rails 4 2. Um, as some of these checks aren't even needed anymore We can just automatically do them for you, but unfortunately those have are not in rails 4 1 yet so In general, I have a personal belief that in programming Or really in life the only thing that should fail silently is This this joke Um, so, uh, thank you all very much uh for for coming. Um, we uh, we we have a booth and um Later on what what time three? Yeah from three to four thirty.  Yeah. Yeah Yeah, three three three to four thirty. We'll have community office hours with, uh, some nice people from rails core, uh, contrib So come ask basically any rails questions or anything you want Um, and then shneeman will also be doing a book signing of his haroku up and running book, uh today and tomorrow at 230 So if you want that Yeah, so get a get a free book and then come and ask questions and just like hang out and uh Uh anytime you stop by the booth, uh, feel free to ask, uh haroku questions and thank you all very much for coming