Hello and welcome to another episode of Disturbing Book Reviews with Julia. Today I'm going to be reviewing two disturbing books while doing some repairs on my teddy bear brownie. Everyone say hi brownie. If anyone says even one mean thing about how he looks, I swear to f**king god I'm gonna f**k you. No Julia, don't say that. The first book I'll be reviewing is Tender is the Flesh. And I don't have a copy of it because it was a library book, so I'm just gonna edit it so it looks like I'm holding it.  Damn girl, does everything gotta be about you? I will be the first to admit this is less of a review and more about just glowing recommendation. I love this book. The premise of Tender is the Flesh is that in the future there's this deadly virus that spreads. Let's try again. Okay, the premise of Tender is the Flesh is that there is a deadly virus that infects all animals but can be spread to humans. Okay, let's just start over. So the premise is that all animals get infected with this mysterious and very deadly virus that can be transmitted to humans through scratches and bites, etc. But it can also be spread through consuming meat or animal products.  Tender is the Flesh picks up years after this catastrophic world event when the meat industry has resorted to breeding and consuming humans. But these livestock humans are no longer referred to as humans, they're called head as in a man or a woman would be a male or a female head. I feel like a lot of people's initial reaction to the plot is like horror, like, oh, how barbaric. How could they be driven to cannibalism? That's disgusting. But then the book does this amazing job at actually explaining and showing you realistically how humanity was driven to this point. Like really think about all the ways that animals are used in our society. Like losing animals wouldn't just mean losing meat. It would mean losing eggs, dairy, gelatin, wool, leather. And think of all the ways that animals are used besides consumption, like pets, transportation, animal testing. The loss of animals means that now hundreds of millions of people now have no source of income because animals contribute to such a large amount of people's diets, world hunger goes through the roof, suicide skyrockets. Honestly, the most disturbing part of the book isn't the cannibalism or the gore. It's just the cold hard realism. I'm just now realizing that all the times that I'm showing on brownie. He's completely out of frame. You just see me like this. Scalp check. Our main character, Marcos, is in charge of one of these head slaughterhouses. And despite the fact that he is objectively profiting off of this industry, he's not like getting any kind of pleasure out of it. In fact, we see him interacting with many clients and suppliers of the head. And very few of them are like villainous and sadistically giddy about what they're doing. A lot of them operate with this attitude of what choice do I have? I have to make money somehow. I was just blown away by this book's ability to show me a character who is making money off killing and eating people and have me say, yeah, I get it. I might do the same thing if I were in his position. That all being said, tender as the flesh is never sympathetic towards these characters and their actions, you know? Like you are never allowed to forget that the head are people. They are men, women and children. And as we're reading about them getting their vocal cords cut and getting raped and dissected and hunted for sport, we look to Marcos for some kind of explanation or excuse and he offers none. He doesn't pretend to be innocent at all.  He hates himself. But again, what choice do we have? If he's not running this slaughterhouse, someone else will. Probably my favorite quote in the book is said by this butcher who's a regular customer of Marcos. And they're talking about life and death in their society. And she just says, do you think we're not going to pay for what we're doing right now? Do you? This book presents such a unique and uncomfortable perspective on humanity's relationship with nature and how we're both completely dominant over it and yet completely at its mercy. Thing one billion that I really like about this book is the fact that it is unarguably boldly about animal welfare and the cruelty that humans enact on animals. And yet it never feels preachy. Like it never feels like it's PETA scolding me or anything. It's just objectively telling you what you already know. Humans do this to animals every day for money. And if you don't like that tough because it's not changing anytime soon. In case you haven't noticed, I've only been talking about the world building and not about the actual story of this story. And that's for a few reasons. The first reason is that obviously the world building is my favorite part of this book. I'm blown away by how fleshed out and ghoulish yet realistic it is. I love it. And secondly, I want you to experience this story for yourself and come to your own conclusions on it. Like the book, I'm not going to hold your hand and tell you what to think and feel about Marcos and his actions. So do I recommend this book? Yes, obviously yes, a thousand times yes. This I guess is my spoiler free review. Go read it. Now next let's talk about the book cows. Cows is a doozy. I guess let's start with the story. Meet Steven, our protagonist. He's a 20 something man who is living in an apartment with his horribly abusive mother. Pretty much everything he knows about the world is through television and he's in love with the woman in the apartment above them. But his version of love is just how he comprehends love for what he's seen on TV.  He takes a job at a cow slaughterhouse. Hey, wait. Both these books have slaughterhouses in them. Shit, I didn't plan that.  And this sexual violence is forced upon Steven as well. My man, Steven, just cannot catch a break, can he? Excuse me. What? So to get into actually reviewing the book, cows is easily the grossest book I've ever read. People say that haunted by Chuck Pollinock is the grossest book ever written.  One thing that you can say about this author is that he is amazing at writing descriptions. So vivid, in fact, that it ruins my night. Like the gross stuff in this book isn't just the gore and the slaughterhouse and the bestiality. It's also like feces and vomit and mold and rot and you can smell it and taste it as you're reading it. Cows is the only book I've ever read that has made me feel physically ill to the point that while reading it at times, I had to periodically stop and put the book down and take breaks because I felt myself starting to like get sick to want to puke reading it. For those of you who have read the book and you're wondering what brought me to that point, let's say it's when Steven makes dinner for his mother. This book has what I guess I'm going to call a high learning curve. As in, a lot of the gross material is right at the beginning of the book. Like there's no easing you into it.   Not only that, but this book has a very unique way of introducing characters in that it doesn't introduce them. Like for example, his first day at the slaughterhouse, we get this sentence. Crips led him through the office corridors where the air was guilty with knowledge of the killings out back.  I swear to God, I reread this chapter like eight times just looking for where I missed Crips getting introduced. No, this is him getting introduced. His introduction is just, this guy leads him down the hallway. I'm not going to lie about midway through the book. I started feeling very discouraged because like I said, there's a high learning curve.  And I started thinking to myself like if this is all the book is, if this is all it has to offer is descriptions of bestiality and people eating shit over and over and over again. Then I've already experienced all the book has to offer and I don't think I'd be missing out on anything if I were to just quit reading right now. And then a cow starts talking. Baby, I was back in about halfway through the book. A cow starts talking to Stephen through the vents and I have never seen a book go from a one to a 10 so fast. This talking cow immediately becomes my favorite character and he basically just explains to Stephen. Listen, there's a secret society of cows that is living in the sewers and tunnels under the city. We escaped this very slaughterhouse and over time have learned how to talk and evolved past the point of common cows. We have come up with a plot to kill Cripps and we need you in on it.  It's just fantastic.  Like suddenly I couldn't put the book down. To avoid spoiling the whole book, if this review has made you want to check it out for yourself, I'm gonna stop here with the plot. But I, oh God, I have so many mixed feelings. This book baffles me in both the best and the worst ways. Do I recommend it? I don't know. You know, I really don't know. Like the good parts are so good, but you have to go through so much in order to get to them and I honestly, I haven't decided yet if it's worth it.     Oh, I'm sorry. I love you. And there's a lot of other really interesting, are you kidding me? Another really interesting concept in this book that I haven't even gotten the chance to touch on is Lucy, his upstairs neighbor who he's in love with. And by in love, I mean, he's desiring the version of love that he sees on TV. Now, Lucy is completely insane in her own way and I really feel like it just got glossed over. On one hand, that's a total shame. I want to know more about her, but on the other hand, I feel like the lack of attention that she gets is intentional. It's reflecting the way that Steven doesn't really see women as people because he's only ever really experienced women either through his abusive mother or from the doting housewives that he sees on TV.  I'm going to read a little quote from the book that I think really exemplifies this and it is also just a fascinating and well worded look at objectification in general. He didn't care about trying to generate love anymore. All he wanted was her there in the flat to bear his child, to dress like a wife, to eat with and be warm to the touch. As long as she was there and alive, he could invest her with whatever qualities he wanted by sheer effort of will. He could make himself see her as he needed her to be.  I damn it. I'm going to have to read it again. Like that's really what it comes down to is that if I was given the task of rereading this book, I don't know if I want to. I don't know. Like I said, I don't know if it's worth it. Oh my God, wait. I can't believe I forgot to bring this up. Um, at one point a cow says the n-word. One of the cows calls Stephen the n-word like as an insult.  This raises so many more questions about the cows and this universe such as how do cows conceptualize races in humans? Do cows have their own kind of cow prejudice?  Who have you been hanging out with, young man? I feel like that is a great example of this book's problem where it's just a teeter-totter.  And I don't think this book fully succeeds. I don't think it pulls off what it's attempting to do. Hello, is everyone's favorite character Jules from the future? First of all, I need to introduce you all to the other cat. This is Stella, my childhood cat. She's been my best friend for all these years. She's never in the videos because it's always Tilly stealing the spotlight.  Actually, she's 15. She just recently had her cancer and she's my best friend. She's my reason for living. I love her so much. She doesn't know. She doesn't know my feelings. I'm here to tell you that I have recently reread cows. Yes, even all the parts that I really didn't want to reread. Basically, the conclusion that I've come to is that for me, I don't recommend it. You know, the parts of the book that I found really interesting and really exciting and really cool do not outweigh the parts that I felt were just a chore to read through. And I think it also means a lot that even though I wasn't the target audience for this book, I still was able to appreciate a lot of it. If you leave me right now, I'm going to freak out. I'm actually going to go Joker mode right now. The conclusion that I came to is that this isn't the kind of book for me. It's just not. But it's obviously the kind of book for a lot of other people. A lot of people really enjoy it. If you're the kind of person who loves shock horror, you love pushing your limits, you love art that makes you uncomfortable, then yes, check this out. If you can't, I'll insert trigger warning here. Oh, yeah. Um, also if you're the kind of person who's okay with a cow saying the N word, I'm not over that. I'm still not over that. It's been weeks since I finished this book. I'm not over that up until that point in the book race relations is never brought up. Where did a cow learn a racial slur? Hmm? Where answer me? I'm like actually tearing up right now. I'm like confused and upset. Like are the cows also racist? Like are the cows racist? I'm going to send it back over to past Julia in this video now girl. Get me out of here. There's a little update on brownie. It's not much. I've just fixed some of the stitches and parts where his fur is wearing thin just so he can be a little bit more secure. I think we're looking good.  As always, thank you so much for watching. Subscribe if you want to. Don't if you don't. If you have any recommendations for very disturbing books that you'd like me to review, please comment them and let me know. Have you read cows or tender as the flesh? And what did you think of them? I always want to hear it.


The retrosynthesis workflow predicts metabolic pathways for the prediction of compounds. Retropath2 uses reaction rules to search for a retrosynthetic network that would link the compound one wishes to produce, the target, to the set of available precursors that could be used as starting materials, the sink. From this, RP2Pass enumerates the pathways that lie in this predicted network. The final step, complete reactions, consists of refining the pathways by putting back co-substrates and co-products omitted during the retrosynthetic step. At the end, each pathway is outputted into a distinct SBML file that can be used by other SBML compliant tools. Here is the retrosynthesis workflow as it appears in the Galaxy workflow editor. We can see the three main steps, Retropath2, RP2Pass and complete reactions. The inputs are the inchi of the target to produce and the strain we want to produce the target from in SBML format. The set of reaction rules is automatically downloaded from Retrols database and the sink is extracted from the strain model. To run RetroThynthesis workflow, go to share data menu and select workflows. Then choose RetroThynthesis, click on it and choose run. Ok, now we can set inputs for the workflow. We choose here to produce the like a pin. We fetch its inchi online and we put it in the dedicating location. Then we choose the strain where we want to produce the like a pin from. Here is Ecoli IML1515. We can set all parameters of each step by clicking on different node of the workflow to modify them. Ok, so we can click now on Run workflow and see its execution and the history on the right panel. At the end of the execution, we can see that nine pathways have been predicted to produce the like a pin in Ecoli. We can click on the collection and access to each different pathway. Download it or read it. We can also visualize the set of pathways at the glance by using the Symbiocad visualization tool. Clicking on the icon, the set of pathways appears and one can interact with it. We can highlight each pathway by. If we click on a compound, we can see the details in the right panel. In the same way, if we click on a reaction, its characteristics appear in the right panel. Finally, one can see enzymes that catalyze the reaction.


Today, I have the pleasure of speaking with Lou Peruse from Veritas.IQ. How are you today, Lou? Doing fine. How are you? Great. And of course, I'm just doing some research about you because you came heavily recommended to me. And you recently spoke at a conference in Switzerland about the effect of electricity prices on the production of Thero Alloys. Now that looked like a really fascinating presentation. I know our investor Intel audience will love this. So can you just give us some of the highlights, please? Sure. The electricity can significantly impact the production of Thero Alloys because it's typically we're talking about a process that requires almost as much electricity as the aluminum process. So electricity is a cost driver here. That doesn't mean necessarily, though, that that's the only thing to be considered when deciding a new factory location. And so in this speech in Switzerland, what we talked about was how electricity can really play a part in the deciding factor of a new factory or an existing factory. But it's not necessarily the only thing. And that really goes to show that the production of silicon and Thero Alloys are extremely complex. And you have several mitigating factors in the operation. It's also important to accept some environmental responsibility here. When we're talking about very large, industrial, intensive silicon manufacturing facilities that require a lot of energy, it's very good to pick locations that have a high renewable mix in the grid. Especially when we combine that with silicon because silicon on the downstream is used to produce foldable take devices. So when we use this, when we have a situation where we have a high energy intensive production facility in a renewable, let's say, location and combine that with silicon, it really kind of adds a lot of credence to projects because of the current environmental situation. Okay, that's very interesting to our audience. And speaking of interesting, with the Virides.IQ, can you just correct me for our audience so we all can say this properly? Go ahead, Lou. Sure, it's Virides.IQ. Okay, fantastic. So with Virides.IQ, I think I finally have it here. You're heavily involved in something called a hybrid flex project, which frankly, I didn't know anything about prior to this interview. And it looks fascinating. Can you tell us, can you start with an introduction and then tell us about this, please? Thank you. Sure, no problem. The hybrid flex is actually a complex name for a very simple concept, which is basically to design the factory, a ferro alloy factory from the beginning that will allow it the most broadest production profile as possible. So many times, in fact, there's many, many silicon manufacturing facilities around the world and ferro silicon manufacturing facilities around the world that produce the other product because these products are very similar in chemistry and in production processes. So the idea here behind the hybrid flex is just that we allow, from the initial design phase, from the engineering, from the equipment, construction, and process design, we build in the flexibility for the plant to flex in either direction, okay? And whether that's involving additional raw material handling systems or storage areas or a very flexible electrode system, this allows the plant to flex either way and allows the project owner to access two markets that are quite disparate and do not overlap, basically the used market for ferro silicon, which is the steel industry in the US. And the silicon downstream market is basically chemicals, foldable tags, and aluminum industry. Okay, that's very fascinating to me. So this is very cost effective and very futuristic. I like this a lot. Can you talk to me a little bit more about a couple more of the competitive advantages? Obviously, there's a cost advantage here as well. Typically, when if a silicon manufacturer wants to convert to ferro silicon or vice versa, there's a process that has to happen and this takes time and this takes money as well. And it takes a lot of money in terms of reorganizing the furnace environment and reformulating the process. And it's not something that's done day to day, by the way. It's something that's done on a very systematic and very fundamental rationale based on the project owner's motivation in the market. This is not uncommon for silicon producers or ferro silicon producers to flex the other way. The difference here is that we're talking about a green field facilities that we're planning green field facilities that can do this from the beginning. And this allows an increased ability to transition in a low amount of time, and therefore have low transition cost, and this allows the higher scale of a flex plant to bring procurement benefits to the project owner. So of course, Lou, you were brought to our attention through our client Canadian metals and they are using your engineering firm to commence their preliminary economic assessment studies for the implementation of a ferro silicon plant in Quebec. Now, obviously, you see a lot of attributes in Canadian metals for you to be working with them with such a prominent background. I loved your website. Can you tell us a little bit more about this? Sure. So our firm specializes in silicon based industrial manufacturing projects around the world, including downstream photovoltaic manufacturing projects. So the company is kind of seen as a technology and knowledge transfer leader in the industry when it comes to silicon manufacturing and photovoltaics. As a neutral and, let's say, independent engineering and advisory firm, we're often brought in to bring know how transfer to project owners that don't have it or cannot buy it or cannot get it from their competition, let's say. So this is kind of how we fit into the whole project. For new project owners like Canadian metals, it's very difficult. Let's say it's not easy for them to gain process experience and therefore they have a high barrier to entry in the market. So what we kind of do is bring a ladder. So we bring a ladder to our clients so they can get over that barrier and then compete with the existing silicon manufacturing industry. Well, it sounds to me like you're bringing a ladder to expediting offtake agreements, so that's what it sounds like to me. Were there any other interesting attributes for Canadian metals that you would like to mention to us? I think that the US and the North American market in general is very unique in terms of the silicon manufacturing industry. So there are some unique benefits to being there for Canadian metals. And typically we look for several key factors in projects that make sense. Do they have good infrastructure, industrial infrastructure? Do they have a good electricity prices? Are there good raw materials available and are there skill sets available? And is there capital available? And in this case, Canadian metals has pretty much hit all five of those things. So I think that in the sense of putting those five categories inside a market that has a unique characteristic, has a premium market, basically, in North America, I think this is a big advantage for Canadian metals. And then just one final question, because of your expertise, I'm fascinated with where hybrid flex is going in the future. Can you just talk to us a little bit about where you see this going? Right now there's several greenfield factories being planned around the world for silicon and ferro-silicon production. And many of these projects have the capability to introduce this flex concept. Up to recently, there hasn't been that many greenfield expansion of silicon manufacturing in the world. I would say over the last 30 years, maybe there's only been one. So in fact, this is an opportunity for new projects that are being implemented around the world to introduce this concept from the early design phase and avoid cost in transition later on. Well, Lou, thank you so much for joining us today. Thank you very much.


There are a ton of fitness apps out there. There are completely a waste of time. Now, I've made plenty of videos on this channel around my favorite fitness apps, and there are definitely a few companies that reach out and say, hey, can you try it? We'll give you free membership. And I'm like, absolutely not. Your app is straight up bad, and it's not worth sharing with you guys. But there is one fitness app that I think is worth looking into, because I've been using it over the last few weeks, and I wanted to share my experience with you guys, which brings us to today's sponsor, Future. Future is a one-on-one personal training app where they pair you with a credential fitness coach to help you with your health and fitness goals. And I have a special offer that you're gonna want to hear, so make sure that you stay to the end of the video for that. Just to get this out the way, even though this video is sponsored by Future, they are very much well aware that this is an honest review of my experience, including things that I liked and the things that I don't like. When I went through the signup process, it was actually super, super simple. You go through a questionnaire that asks you different questions based off of, you know, what are your goals? Your age range? Do you have any injuries? And then they start asking more questions about the type of coach that you want. You want high energy? Do you want somebody who's a little bit more particular on specific type of workout? So for me, I fed out all that information and then I was able to choose between the couple of coaches that I saw and I chose my boy, Harrison. It just seemed like he had a really good approach to his training style. The next thing I had to do was download the Future app onto my phone. And once I wrapped up all of that, the next thing it had me do was set up a FaceTime call with Harrison. Okay, I add the most value to your current training. You know, are you looking for more weightlifting from me? You know, are you looking to get into a certain kind of training with Future? Now for my fitness coaching experience, Harrison was great. And honestly, I really do believe a lot of the fitness coaches are probably like this as well. When I told him I had an injury, he gave me different exercises and movements that progressively got harder as I started to recover more. When I told him I wanted to focus on mobility and core, he added those to the workouts. He constantly checked in with me through messaging. One of the workouts that I ended up missing, he did reach out and say, hey, is everything good? You know, let's definitely get back on track. So just having that accountability made me feel like I was really progressing and making sure that I was completing the workouts because I didn't want to let him down. And then around a couple of weeks in, we had a check and call just to make sure that everything was working if he needed to tweak the workouts. So it was just good to kind of have that touch base to make sure that I was still progressing and enjoying what I was doing. Now, in regards to the app experience, I was very, very impressed with the quality of the app itself. It was very simple, very clean. There's no ads, it wasn't buggy. And what's super cool is that everything is tracked within the app. You could basically see the different type of exercise that you have for the day. And when you open up each of the individual exercises, you can actually see a video showing you how to actually do the exercises. It even goes so much to show your heart rate throughout that workout. And all of these stats were also sent to Harrison. So he could also see how I was performing as well. And then what I also love is that you can actually record yourself doing one of the exercises and send it to your coach to make sure that you're performing the exercise correctly and that can give you better cues of how to fix your form and things like that. What's really cool is if you have an Apple Watch, you can actually control the workouts through your watch itself. You don't have to keep going to your phone to move to the next exercise or the next workout. But let's be honest, not everything about the future app was great. There were a few things that really did kind of bother me a little bit. The first thing is it is only for Apple. I think they're working on an Android version, but if you're Android, you're out of luck. The second thing I didn't like was the fact that it doesn't work with other fitness trackers. Yes, it's great that it works with the Apple Watch, but let's say you have the O-ring or the Whoop, it doesn't matter, it doesn't get tracked in there. And then lastly, specifically with the app as well, the music, it's kind of finicky. Like I don't know where they're grabbing the music from, but I like to use my own and sometimes I felt like my music would play and then their music would play, it would cross over. So I just think that that functionality could be a little bit better. But those are very minor in the grand scheme of things. I think that those can be addressed in a simple software update. I thoroughly enjoyed the experience and it's something that I'm very much so considering keeping for the longer term. Now you're probably like, Noah, that is great, but how much does this app cost? And I'll be real with you, it is $149 a month, but before you get off of this video, I was actually able to get you guys a pretty good deal.  You're basically saving $130. You can get a dedicated experience fitness coach that will give you a personalized workout based off of your skill level, how much you have available to you, what your schedule looks like, and they will make sure that they hold you accountable to make sure that you're reaching your health and fitness goals. And then after that first month, if you decide that you wanna keep it, by all means, cancel it. I personally stand by it as a certified personal trainer and health coach. I believe in what they're doing. They're just making health and fitness more accessible to people through a digital medium. There's no robots making a random workout for you. You had a human being on the other side of that phone really helping to make sure that you stayed accountable for completing your workouts. And for me, both of those things are very important to start seeing some sort of changes and results in your body. But I totally get it.  If you wanna see the ones that I love personally, check out this video right here. Stay healthy, be happy, and embrace the hype.


Hi, my name is Stan Peceni. In this talk, I will present our paper, Mass Triples Amortizing Multiplication Triples Across Conditionals. This work was done by myself, David Heath and Vlad Golesnikov, and we work at Georgia Tech in Atlanta, Georgia. In this work, I will be discussing a classic secure multi-party computation protocol, which uses pre-processed multiplication triples to evaluate arbitrary functions represented as Boolean circuits. A Boolean circuit consists of nonlinear endgates and linear exorgates. The circuit is evaluated gate by gate under encryption. While evaluating the linear exorgates is essentially free, the nonlinear endgates require the use of costly interactive primitives. More specifically, endgates are evaluated with beaver triples which are expensive to generate. In our work, we reduce the cost associated with generating multiplication triples. Our improvement results in significant improvement to both communication and runtime of the triple-based protocol. We improve the protocol by carefully reusing multiplication triples and conditional statements of the source program. Hence, if a program has an if or a switch statement, we can take advantage of the fact that only one of the branches is actually evaluated. Traditionally, it has been assumed that we need multiplication triples for all branches in a conditional. This was because we need to ensure security and each multiplication triple can be used to evaluate at most one hand gate. In this work, we show that this is unnecessary and the number of triples we need is proportional only to the size of the single longest branch. Prior work has looked into conditional branching improvements under other protocols. Start garbling is a line of research that has looked into the conditional branching problem in Yao's garbled circuit, so in the two-party setting. The first work to achieve significant conditional branching improvements in the multi-party setting was motif, a work done by myself, David Heath and Vlad Golesnikov and was presented at Asia Crypt 2020. Motif worked with the GMW protocol, a protocol closely related to the triple-base protocol in that both protocols evaluate Boolean circuits, work for any number of parties and are secure against dishonest majority. Our approach thus works in a similar setting to motif. However, our solution is distinct and yields a significant conditional improvement over motif. I will now elaborate on motif's limitations. The key cost in the GMW protocol is pre-computing random oblivious transfers, which are then used to evaluate the circuits and gates. Oblivious transfers, or shortly OTs, are expensive public key primitives and motif's improvement stems from amortizing OTs across conditional branches. In GMW, all available endgates are computed simultaneously in layers. At any time, only the endgates whose input shares have already been computed are evaluated. Motif's limitation is that it cannot amortize OTs in future layer endgates. In each layer of GMW computation, one can amortize OTs only over the ready gates. Thus, motif's improvement is dependent on the conditional branch alignment, meaning the branches need to have a similar number of endgates in each circuit layer for optimal performance. In the sample conditional, I show two layers, both of which are unaligned. In this conditional, motif would pay the cost of four endgates, while the longest branch has only three endgates. Thus, the example conditional is not an ideal fit for motif's protocol. Our work shows this limitation of motif can be quite significant. Our new work is called masked triples, and the benefit is that our improved protocol truly pays only for the longest conditional branch independently of the branch alignment. Recall that masked triples improves the triple-based protocol, which is closely related to the GMW protocol. Similarly to motif, we reduce the number of expensive random OTs. In the triple-based protocol, random OTs are one way to generate multiplication triples, which we amortize across conditional branches. Unlike in motif, the number of OTs we need to generate is proportional to the size of the longest conditional branch. So, I have introduced the key idea of our improvement. Now, in order to get into the technical aspects of our improvement, I briefly review how triple-based protocol works. The triple-based protocol evaluates an arbitrary Boolean function in four steps. First, the function is represented as a Boolean circuit. Next, the parties secret share their input bits and send the appropriate shares to other parties. Then, all parties step through the circuit gate by gate, and ensure they hold a valid XOR secret share of the true bit on each wire. After evaluating all gates, the parties reconstruct the output. Let's start with a simple circuit. For simplicity, we consider only two parties, Alice and Bob, but the extension to any number of parties is straightforward. The circuit on this slide consists of a single AND gate and a single XOR gate. Alice holds input X and Bob holds input Y. Alice secret shares her input X into X1 and X2. Symmetrically, Bob secret shares his input Y. Then, Alice sends X2 to Bob and Bob sends Y1 to Alice. Alice and Bob now each hold one XOR share of X and one XOR share of Y. Note that the Y with input 1 can be trivially secret shared by Alice setting her share to 1 and Bob setting his share to 0. Alice and Bob next evaluate the circuit gate by gate and compute valid XOR shares on the output wires of all gates. The last step is to reconstruct the output. Alice and Bob send to one another their share of the output and compute XYXOR1. So, I have explained how a Boolean circuit is evaluated in the triple-base protocol and now I will demonstrate how each gate is evaluated. XOR gates are virtually free and are evaluated locally without interaction. Alice and Bob simply add their shares. Unlike XOR gates, AND gates are expensive since they require the use of expensive and interactive primitives. The key idea due to Beaver is that if you have a way to compute a random AND gate you can then perform cheap linear arithmetic and some cheap broadcasts to compute any AND gate. These random AND gates are the multiplication triples and are expensive. We thus separate AND gate evaluation into two steps. A pre-processing step where a triple is generated and an evaluation step where the triple is used alongside linear arithmetic and big broadcasts to compute the AND gate. First, let's look at the first step. That is, pre-processing a triple which means computing a random AND gate. In this step, the parties draw two bits A and B uniformly and compute their product. The output is a uniform sharing of the product. This is achieved by each party uniformly drawing a bit for their share of A and B. These shares are then input to an MPC protocol which outputs the share of the product AB to each party. The MPC protocol can be, for example, a single GMW AND gate. The point is that the MPC protocol requires communication and is expensive. Now that we have pre-processed a triple, we are ready to evaluate the AND gate. We input the pre-processed triple that is the bits A and B and their product AB as well as the actual AND gate inputs X and Y. We then use cheap linear arithmetic and broadcast two bits to get a sharing of the output Z. This is a well-known protocol. To see the algebraic details, please see our paper. We have shown how to evaluate an AND gate. Let's now analyze the cost of an AND gate. The evaluation phase is cheap and requires broadcasting only two bits. The pre-processing phase is much more involved. If we generate triples with a GMW AND gate, we will need to compute two OTs in the two-party setting. Recall that OTs are asymmetric primitives and thus are expensive. If we generate OTs with the OT extension of Ishai, Kelly and Nisim and Petrang from CryptoO3, each one-bit multiplication costs communication on the order of the computational security parameter Kappa, which is usually 128 bits. We add that recent advancements have shown that oblivious transfers can be extended without the expensive Big O of Kappa communication overhead. However, these works still require the parties to perform significant computation to generate the correlated randomness associated with OTs. While we stress communication reduction, more generally, we simply reduce the number of needed OTs. Thus, even when using these new and powerful primitives, it is worthwhile to use our approach in order to decrease computation consumption. I have demonstrated that generating triples for AND gate evaluation is expensive. Hence, we would like to reduce the number of triples needed in the protocol. Let's consider a conditional with N branches and N AND gates across all branches. Normally, we would need to generate N distinct triples that is one triple per AND gate. This is because the triple values a and b are essentially one-time paths on clear text values in the circuit. Thus, if we use a triple for two different AND gates, we violate security. We would like to be able to generate a single triple for all these AND gates, but we need to take care to do it securely. So, if we are able to securely reuse a triple on AND gates across all branches, we have effectively made all untaken branches free. I will now demonstrate how we can reuse the triples securely. We work for any number of branches, but for simplicity, let's consider just two branches, where the top branch is the active that is the taken branch. I emphasize that neither player knows which branch is active. We would like to use the same triple on both AND gates in the two branches. This idea of reusing the same expensive resource is that of material we use and stems from the stocked garbling line of research discussed earlier in the presentation. The key idea behind reusing triples securely is that we can carefully apply secret shared masks to the triples. For the inactive branch, the parties mask the shares with uniform exhaust shares of uniform masks r and s, randomizing the triples and preventing us from breaking the security of one-time pad. By randomizing the triples, we violate the correctness of AND gates on the inactive branch, but this is of no concern. The output of each inactive AND gate is ultimately discarded. For the active branch, the parties use the triples as is, meaning the active branch is evaluated normally. Of course, the parties should not know which branch is inactive, so from the perspective of the parties, it should appear plausible that either branch could have used randomized triples. To achieve this, for the active branch, the parties also exhore masks onto the triples, but in this case, each mask is a uniform sharing of zero, hence the exhoring is a no-op. We stress that masking only the a and b bits of the triple is necessary and sufficient. This is because these two bits are used to mask broadcasts during the AND gate evaluation phase. The third value in the triple does not need to be masked. Each party holds a share of this triple value, but uses it only locally with garbage values. Whatever you learn from these local operations will not give you any useful information. Importantly, our approach yield significant concrete improvement because generating masks is much cheaper than generating additional triples. I have shown that if we are able to cheaply generate triple masks as described on the previous slides, we can reuse triples across conditional branches, thereby driving down the cost of conditional evaluation. I will now give a concrete example of our approach. Suppose our conditional consists of two branches. And the first branch is the active branch. Recall that neither party knows which branch is active. In a standard triple-base protocol, we would need to generate one triple per AND gate in all branches, and hence a total of five triples. In our approach, we need to generate triples only for the longest conditional branch. As the upper branch is the longer branch in our example, we need to preprocess only three triples, one for each AND gate in this branch. So, we have preprocessed our triples, and now we generate a sufficient number of masks. In our example, we need six pairs of masks, two pairs for each triple, as we are masking two bits in each triple. Each pair consists of a mask for the active branch and a mask for the inactive branch. Once the masks are ready, we proceed with the conditional evaluation. As the upper branch is active, the triples are masked with all zero masks. Hence, the triples' semantic values are unchanged, and the parties use them as is on the active branch. Note that the parties are not aware that the masks are shares of zeros, as the shares are uniform. In our masked triples protocol, we take care that the all zero masks are aligned with the active branch. On the inactive branch, we randomize the triples by applying uniform masks. In this case, we change the triple's semantic values and invalidate the correctness of AND gates on this branch. As we discard the outputs of the inactive branch, this is of no concern. So now, we hold the outputs of both branches, but we need to propagate only the value on the active branch. This can be achieved with ordinary Boolean logic. Specifically, we use a multiplexer, which takes as input a branch condition, a secret shared bid that determines which branch is active, alongside the outputs of both branches. The multiplexer consequently propagates the output value on the active branch and discards the invalid output on the inactive branch. Multiplexer costs one AND gate per conditional output. I have demonstrated that our protocol works assuming triple masks can be generated much more cheaply than additional triples. What remains is to show how we generate these masks. Recall that we have to generate a large number of these masks. I will refer to this number by AND. We need one triple for each AND gate on the longest conditional branch and we need twice as many masks. In order for us to evaluate a conditional statement for the cost of a single longest branch, we must ensure that the cost of generating masks is independent of AND, the number of masks we need. In fact, we just need a small constant number of OTs of long strings to generate any number of masks. For simplicity, I demonstrate our mask generation protocol in the context of two parties and two branches. Alice and Bob first sample a uniform bid S and a uniform and bid string R. Alice and Bob then compute a vector scale of product S times R and receive a sharing of this product. This product can be computed cheaply with only two OTs on end bid strings. I will not discuss the details here but you can find them in our paper. Alice and Bob then output their shares of the masks S times R and S times R plus R. Depending on the value of the bid S, one mask is a share of zeros while the other is a share of the random bid string R. Now I have successfully generated all zero and uniform masks. These masks are currently ordered according to the uniform bid S. If we go back to our example with two branches, we need to associate the all zero mask with the active branch. However, the parties do not know which mask is all zeros nor which branch is active. This is easy and cheap to arrange given the branch condition bid and the bid S with a single bid broadcast and a simple local permutation. So I have introduced the complete mask triples protocol. We have implemented our approach and now I show some of our results. We ran our experiments on circuits with randomly generated alignments across 100 runs. Please see our paper for details of the circuits we used. This first plot is in the two-PC setting and demonstrates how we reduce the number of OTs as a function of the branching factor that is the number of conditional branches. In our solution, the number of OTs is virtually constant whereas the number of OTs grows linearly in the standard triple-based protocol. Recall, at the beginning of the talk, I said motif was limited by the branch alignment in the conditional and that our work improves on this. This box plot shows motif's dependence on branch alignment in the case of two branches. We plot the distribution of the number of random OTs needed for two parties to evaluate each protocol. Across all 100 runs, mask triples and the standard triple-based protocol always need the same number of OTs. On the other hand, motif's performance differs depending on branch alignment. Because we sample alignments uniformly, this results in an increased number of consumed OTs. For two branches and on average, our approach required 1.5 times fewer OTs than motif and consistently required 2 times fewer OTs than the standard triple-based protocol. Our next plot shows the total per-party communication as a function of the branching factor in motif and our work. On 16 branches, our approach improves total communication on average by factor 2.6 over motif. Our improvement over the standard protocol was by factor 12 in the same setting. Our last experiment emphasizes our approaches scaling to the multi-party setting. In this experiment, we fixed the number of branches to 16 and plot per-party communication as a function of the number of parties. Our optimization does not add additional costs as compared to motif and standard triple-based protocol. Each technique consumes communication quadratic in the number of parties. While our approach scales efficiently to the multi-party setting, we also introduce more efficient mass generation protocols in the 2 and 3-party setting. You can find details about these protocols in our paper. So, this was mass triples. The key contribution is that we introduce a protocol with communication proportional to a program's longest execution path in the multi-party setting. Unlike state-of-the-art motif, our improvement is independent of the circuit topology. We implemented our approach and obtained significant concrete improvements over motif in all tested settings. So, thank you for listening!


So, my name is Ted, I work in a company called Tinkerbox, and I'm here... Yeah, we have some Tinkerboxers here tonight. So I'm here to share with you five random Ruby tips. And I guess the fear when you do this talk is, since it's random right, what happens if you randomize the exact same tips as last time? So it's actually not completely random. True, true, true. All right, so let's go. The first tip is to unify and unfreeze your strings. So in Ruby 2.3 we got the frozen string literal pragma that allows you to freeze all your strings by default. And in addition to that we also got some new unary operators for strings. So you can actually do stuff like minus your string and it will freeze your string. We can do plus your string and it will unfreeze it. Now obviously you can't unfreeze things in Ruby, so it will actually just return you a mutable version of the string. And also important to point out that the minus works the same way. So you can't use the minus to freeze something in place like you would use the freeze method. So they actually work slightly differently. Now if you decide to do this just be careful because obviously the unary operators do somewhat different things if your variable is, say, fixed num. So just be wary of that. Okay, the second tip in the same flavor is to freeze your value objects or other things if you want to. So we have a hypothetical class here named point that takes some coordinates in its constructor and calling the freeze method inside the constructor. And there's obviously no magic going on here. The freeze method is defined in object and since point is an object you can just call it from wherever. Obviously to make your object immutable from the outside you can just use the readers, right? You don't have to use the assessor. I also define a method called nope to demonstrate that this will actually not work. So the nope method tries to update the x-coordinate of this point. But when you try to call it it gives you a runtime error and says that you can't modify your point because it's frozen. So this works on any object that you define yourself. The third tip is implicit to proc invocation. So most people by now know that you can pass a symbol to the ampersand operator when you're using an enumerator. And the way that works is by implicitly calling to proc on whatever you pass it. But this works on any object that you pass it, not only on symbols. So you can define to proc on anything you want. So in the example I defined to proc as a class method on our hypothetical point class. And it returns a proc. So if you are familiar with JavaScript this is similar to a function returning another function. In this case the function return just takes some arguments and instantiates a new point with those arguments. And this proc will actually keep its scope wherever it goes. So new will always refer to points new. And that could theoretically allow you to take some coordinates raw data that might come from an API or wherever. And instantiate point objects using a slightly shorter notation. So I listed three ways. The first way is probably the way that most people are familiar with and use. The second way uses the method method to get the method new from point. And that will also work because method implements to proc. And the last one is our example where we actually define to proc ourselves. So it's slightly shorter but if you want to do some convention like this it's important to remember that most people will probably not know what's going on. And if you don't know that to proc is called implicitly then it gets even hairier. But it is possible. Okay, first tip. The typecasting methods defined in kernel. So there are seven of them. Array complex float hash integer rational and string. And now you might ask what's going on here because these look like classes and they are also classes. Because it turns out in Ruby there's nothing preventing you from defining a class and a method with the same name. The only thing that will happen is you can't invoke your method without parentheses because it will return you the class instead. But this can be quite useful. So array for example if you pass nil to the array method it will give you an empty array and hash works similarly. And you have something like integer that works differently from calling to underscore i on your object as demonstrated here. So I have two strings that are sort of numbers but they also have some other stuff in there. So in the first example the string is one followed by a letter and two i will return one. The second one is a letter followed by a one and two i will return zero. So it's sort of inconsistent here. But if you try to call the integer method it will throw you an argument error. So for all of these methods they will return you what you expect or they will throw an error which can be useful in some cases. And of course because they are methods you can also use the method method to use them in a new level. Okay fifth and last tip and probably my favorite is the new squiggly hair dock. So if you don't know what hair dock is it's has been in Ruby for quite some time and it allows you to write long multi-line strings without messing too much with the interpreter. So hair dock is one of the things when I was reading the pickaxe book I was thinking okay I will probably never use this for anything because it seems weird. But the last few weeks I've been working a bit on RuboCop and I've actually found a valid use case there. This is the squiggly hair dock by the way. So they have this sort of declarative pattern matching language that they match to the AST and since you all know what an AST is now you can understand the merit of it. And here is an example of the dash hair dock which existed from before. So the slightly unexpected behavior here is that all these indentation spaces will be included in the string. But with the new squiggly hair dock all the leading spaces will be removed in the final string. And this was also introduced in Ruby 2.3 so you won't be able to use it. But I assume you all upgrade frequently and if you don't I think Winston wants to talk to you after. And those were the five random Ruby tips. Thank you.


Hello, everybody. Andrea Terewski here with Dental L Tutoring. Let's talk about how to find patients for clinic when you're in dental hygiene school or dental assisting school. And I'll tell you exactly what I did, but you are all so lucky, okay? Because now you have the internet. You have Facebook. You have all kinds of things that when I was a student, we didn't have. We had Facebook, but this was like, I don't know, like 13 years ago, so Facebook wasn't really popular. In fact, I don't even know if we had Facebook 13 years ago. We had email. I know that much, but like things were just starting to come about. So finding patients was a lot harder. When I was looking for patients, I literally posted flyers like at the bus stop, the subway station, which is kind of dangerous too because anybody can call you. Anybody can email you and then anybody can show up, right? So is that really the best thing to do? Not really, but I didn't have a choice. Where I went to school for dental hygiene, my family lived two hours away, so they weren't going to come and be my patients. They pretty much said, we want to help you, but we're not going to come for your patients. So yeah, so that was kind of hard for me. So all my friends and family lived two hours away, so they just weren't options. When I was a dental assistant though, a dental assistant student, I went to school in town. So that was a lot easier for me. We needed 10 patients. That was it. And I just literally asked all of my friends and family and they said, sure. So that was a lot easier to find. And for dental assisting, you don't have as many appointments. So it was just easier, but so if you're a dental assisting student watching this, it will be a lot easier for you to find patients because you don't do as much and people don't mind sitting there for an hour or two for maybe two appointments. Whereas for dental hygiene, it's like six or seven appointments to start. But it's kind of how you spin things. So well, so first I'll tell you guys how to find patients. So the obvious is friends and family. Ask them. But now that you have social media to your advantage, post in Facebook groups. Which whichever town you live in, there's usually something called like, let's say you live in Toronto. Look up a Facebook group, Toronto Moms or Toronto, new to Toronto, Toronto People. Usually something like Toronto Moms or Toronto Buy and Sell, you know, things like that. Then that way you can advertise your services. So that will help you find people, honestly. Especially, like I said, the ones where it says like Toronto Moms, if you live in London, Ontario. London, Ontario Moms, you know, because Moms, they know other people, right? Like they talk to people through their kids' school, through the daycare. Their neighbors, they all like to get together so they know people.  But also, they will have the best treatment possible because they have to do every little thing and be perfect at it. So there's no room for, you know, error, right? And most importantly for people, it costs so much less because there are people out there who don't have insurance. There are people out there who just simply don't have the money to go to the dentist. They want to go but they don't have the money. So stress the point that it is going to be so much less for them. When I was a student, what I did was now some people in my class actually paid for people to have their teeth cleaned. So they would advertise that they are offering teeth cleaning for free. As long as they can commit to all of the appointments, they actually show up for all of them because if you don't show up or if your patient does not show up for all of the appointments, they fail. Literally, they fail that patient so they have to get another one. So that's what happens to you too, right? So it's so important to find people who will commit to coming to all appointments. If you're talking to somebody and they're like, oh, well, I might be able to come to two of them. I have a really busy schedule. I don't know if it's going to work. Don't see them because if they come for one, great, that's nice. If they come for two, great, that's nice. But if they don't come for all of them, that patient likely will not count depending on the program you have. So look for people who are reliable. But as I said before, I did have some classmates offer cleanings to people for free. I didn't have the money to pay for everybody's cleaning. Like at my school, I think a full cleaning was $40, maybe $60. I'm sorry. I can't remember, but obviously not a lot where in the real world, a full cleaning is like $200, $300, right? So you save a ton of money, but I didn't have the money to pay for people.  So I thought outside the box. So I would give them, I would actually pay for all of the supplies, but I would give them like toothbrush, floss, toothpaste. I even contacted a whitening company. So a tooth whitening company. And I can't think of the company now. And I said, like, I am a student. I am looking for samples to give to my patients. And they sent me a ton. So I could also offer my patients free whitening. So I thought outside the box here, and that helped people come to me. So I found all of my patients because at the time I would advertise, I advertise on something called Kijiji. And I said, I am offering. I can't think of exactly what I said, but I said, like, I am a student giving teeth cleanings for a much reduced cost. I am happy to see anyone included is free whitening and a free sample package. And people loved that. And then the patients who I saw, I would ask them and say, Hey, can you recommend somebody else to come to me because I need as many patients as I can get. So that's how I found patients. If you need help, let me know. But I'm telling you, you guys, social media is your friend. Post on social media. Don't be afraid, okay, to post on your personal Facebook page asking people to come see you. Tell them you are helping them out. And people love to help people out like I would help them out. But apparently there's no hygiene or dental assisting schools and Kitchener that I know of. So I can't really help out people, right? But it's so nice. Plus another thing that I just thought about, there are dental assisting groups and dental hygiene on Facebook, ask somebody to help you out because they had all gone through school so they know how hard it is. Ask people to help you out. So good luck. I hope you can find lots of patients and you will be done school soon. Yay. Have fun in clinic, you guys. Bye.


Good morning everyone, thanks for coming here so early. We're going to have a look at some build-in profiles and what we can try to do with them. This relates to the reproducible build project, which created the specification for build-in flow. So we, in the reproducible build project, have been looking for ways to reproduce Debian's packages from source code to values. The work in stretch has focused on removing potential causes of non-reproducibility between two successive builds. And that project went very far, managed to fix problems in 94% of Debian source packages. That's when, until we start considering additional potential causes of non-reproducibility, like the build path issue. But so far, the testing infrastructure hasn't focused on reproducing the actual binary packages that Debian publishes to its users. So that's kind of what I've been looking into now. The build-in profile describes the environment in which a .dev binary package was built, or many .devs were built from a single Debian source package. Now this serves under the useful aid in figuring out why a binary didn't match what you expected. This is generated. You may have seen, if you run S build, P builder, or in de-packed build package, you probably see not only a .changes file, but a .build-in profile is now generated. That also gets uploaded to the Debian archive if you use debug or whatever else people use. This build-in profile is describing any potential reasons that your binary package might end up different from when someone else builds it. We are archiving build-in profiles, not just the ones that are created on development machines, but each of the official Debian build-ins, build servers, creates the build-in profile when it finishes building. So we can compare the development build environment to the official build machines that you can build environment and try to understand if there are differences in the binary output and why that might be. That's a good aid to diverging the disability issues because once we know what the differences are, we can try to avoid those having an effect on the build-in binary package. Ideally, we want a package build to always produce the same output so that we can verify that it is trustworthy and tampered with. Some reasons packages are not reproducible. You've probably heard, if you've been to Holger or Chris has taught, all kinds of strange details specific to the build environment, like the hosting of the machine, which would use a build-in package. These are quite often embedded into a package. It causes it to be different when someone else builds it or on a different machine. There are things like time, which is always changing. If that is extended in the form of timestamps, different binary output on each build, randomness can creep into the build. Some file systems order files on this randomly and if you read them back, this directory contents, you might get files back in a different order and that could lead to things being built in a different order or linked in a different order and so forth. There are other causes of non-revisibility, which I categorize a little bit differently. Like build path, the current working directory when you build the source of the package. That's something that could potentially be fixed by building with the same path that the official Debian packages were built in. There are other variations like to these environment variables, depth build options and depth build profiles. If you change things in there, it is quite often expected that you get a different binary output. This is why we also want to record the values of these environment variables when we build packages. Of course, if you change the install build dependencies, like the compiler version used, it's quite often expected that you would get a different binary output. All of these things are included in the build info. What that leads to then, if we want to reproduce a binary, we simply take the source package and hopefully all the necessary information would be included in the build info that you take the source code, you follow the instructions given in the build info with the specification given in the build info file, and that's a recipe for reducing a remittable package every time. In theory, the build info looks something like this. I have only included the most relevant fields on this slide, if there are many more. So, as I said, the build path is there, the install build dependencies and their versions and some details of the environment. And, of course, here, well, here, we also include the hashes of the output binary packages within this file. The whole thing can then be signed and then the signature is an attestation that someone was able to build this package and these are the hashes of the binaries that were produced. So, to reproduce official Debian packages, if we have access to the build info file that was produced by the official build servers, the build info file contains the build path that was used. So, if the user was able to create the same path in their own build environment, then it should be the same across both builds and not lead to any variation. If you try to reproduce the package in a plain or up-to-date search route, it's quite possible that your install build dependencies will be different from the ones on the official build server because these are changing continuously in Debian and stable. So, it would be necessary to install additional build dependencies or even downgrade some to an older version in order to be quite sure that you will get the same output. So, my project this week has been writing automated tool for this second point to install build dependencies, old versions of build dependencies from, I've been using the Archive, snapshot.devian.org, which has an archive of all old versions of Debian packages that you would need. So, I will demonstrate the tool that I wrote. It's written in Perl because Perl already had available modules for passing the built-in file format and then after passing out the build dependencies I used the www.mechanized Perl module to connect to the snapshot.devian.org web service search for specific versions of build dependencies that we need so that it's running now it's making many queries to snapshot.devian.org, that's okay I could use a cache web proxy so that I could run this once before and it should remember the result. From the result of that it's constructed in app sources list with about 120 entries one for each old version of a package that we might need within the build environment. This is not the most efficient way to do it but I would say optimize your code for blasts. Updating your package caches with 120 entries in the list takes some time. Also each snapshot is a snapshot of the whole archive so it contains an index of all the packages in the archive 10 megabytes each so after downloading it has to calculate the package index there will be many duplicates because for example if a package exists in an old snapshot it has not been updated it will still exist in the new snapshot but my tool is performing a proof of search of every possible app source it is signed that it may need to be able to find all the versions of these packages. This is running as a hook within s build it's running app get like this installing all the build dependencies that would be needed and specifying the exact version with this equals version syntax. Allow downgrades on the command line because we are actually downgrading gcc to an older version if that's what was used to build the official package in the archive in more detail that this app sources this maybe maybe slightly alarming sometimes that sometimes the snapshots are from 2013 that means that the binary package needed to build new packages has nothing rebuilt since 2013 sometimes 2011 or even something older these are packages that were uploaded and never rebuilt in five plus years and these are still being used to build new packages so that could be a problem so this is still installing build dependencies now it's running the actual build so at this point the s build should be a pretty good replica of the state of the shoot on the build server when this binary package, this is a dash was originally built so if there are no causes unnecessary reproducibility in the package then we should be fairly confident of getting the same binary output at the end of the process it's finished building as I mentioned s build will automatically produce a build-in profile for you now so I can compare the build that I just completed to the original build-in file these are all archives now on an internal devian server so currently only devian developers have access to that but we should be able to make this public soon we're still figuring out the best way to do that so comparing these two build-in files this slide we have checksums for the output-.dev package and we can see that it was identical from the official build to my own build that I just executed now within the build-in profile the only difference is here the actual build-in when the .dev is built is recorded here but that's not recorded inside of the .dev so the .devs were identical the side-point I actually carried out that build with no checks so it would be faster but that didn't actually have any effect on the binary output that may be a way to speed up some of the reproducibility testing that we just don't run the test-read if it does lead to differences we could try running it again with the test-read to see if that does cause it to be reproducible again so as a result of writing that tool I because it takes so long I only run about 10 packages through this process so far but 9 out of 10 were reproducible so I managed to reproduce official .devs from the official archive and I got the same result when I built them on my own machine so I agree that .devian is probably at least 90% reproducible actually we have some old binary still in the archive these were not necessarily built on the final .devian machines but quite possibly built on the developer's own machine which is problematic for trustworthiness if a developer did not have a clean build environment or that she was compromised that .dev packages produced is still in the archive right now and being used to as part of the build process of new packages so I think we want to push the idea of rebuilding some older packages especially if it makes them become reproducible source only uploads have been possible for some time if you don't know what those are or didn't know it was possible you should look this up on the .devian rekey how to make a source only upload where you upload source to the .devian archive without uploading .devs that you have built yourself and then that ensures that it will be rebuilt in the fresh environment by the official build machines and upload .devs on your own machine and upload those and building for will save this and it has a pgp signature on it so we will know who you are there was one package uploaded I noticed and for some reason GCC 4.9 was building the build environment this was a package uploaded this year and GCC 4.9 is not gone I think that person may have a configuration problem with it's maybe not removing all packages so maybe I should contact that person and see what happened there I found one package that could not be reproduced even with the same build dependencies installed that should be looked into I think it was only a minor difference in a info documentation file but we should look into why that happened especially since the rebuild build test architecture did not did not detect a rebuild problem with that package came across some build-in profiles that were incomplete they missed pre-dependence of python but this these were quite old build-in profiles maybe the problem has been fixed already so looking ahead we would really like to rebuild this continually rebuilding the devian official packages and when those builds are carried out produce a build-in profile sign it it could already be submitted to the build-info.devian.net tool we can collect build-info's there and analyze them for example it would be really great for NGOs or states organizations such as the NIST or the BND in Germany could be reproducing devian packages signing the output and contributing that to an archive then if you find that the package has a signature from devian from multiple third parties then we are quite sure that the devian build process itself wasn't tampered with by looking at these signed build-in profiles we can see the software supply chain meaning how the soils get built and distributed to the user this probably ties in well with the next talk where I got some of the ideas for this basically FF has some kind of vulnerability when it's fetching with the .dev there is a possibility at the last moment before installing the .dev that we can use build-info's signatures as a second way to verify what is this .dev where did it come from did someone actually build it are there signatures from multiple parties to let us know we can trust this .dev before installing it so it has to compromise or if the archive queuing is compromised we have this independent way to authenticate that the package was actually built by a trusted machine or trusted for the party before we go ahead and install it at the time I will skip some of these other concepts do we have time now for any questions one question yeah, good back thanks for this talk we have some binary rebuilds but they all arched any packages right? yes we should really understand that yeah, that's true the tool that I've written for example does not handle arch all packages I concentrated that out of scope for the research I was doing but still a very important topic arch all packages are built once and then we use by many built in future across different architectures even but that also means we have more interesting ways to QA these packages we can try to cross build them from different architectures is a an arch all package is not binary code tied to a specific machine architecture so it should be possible to cross build it we could try to build this from an AMD 64 machine from an ARM 64 machine even something more exotic like a KVVST machine and we should in theory get the same output for an arch all package yeah, and in fact we don't really know if these packages are verb and sigri yes, that's also a problem sometimes the actual package is the only support being built on one specific architecture no, not the architectures version so if there is a binary package from 2013 in the arch that was built in 2013 against whatever, squeeze maybe or whatever we don't really have you tried actually taking one of these and rebuilding them against a recent sit yes, the official tests.arch for infrastructure is doing this and finding a lot of problems with building those packages so maybe that's already being done great I'll have to ask you today we are almost at the beginning of the next session ok, let's do that


Okay Here we are in Photoshop. Let's see if we can create some Awesome textures Right, so I'm actually going to start on the color ID map This is the one I'm going to create is like my or treat as my base material. So I'm going to file save as Just call this Barrel texture Master and I'm gonna try and put all my different texture apps into this one file And I can just save them out one at a time, but we'll we'll get to that Okay, so I don't want this as a target I want this as a Photoshop file because I need to save everything in this So let's click on save Right, so all this is going to be is like a reference layer when we're never actually going to see this So I am going to duplicate it just so that it's not a locked background layer I'm just going to rename this to color ID Okay, so the first thing I probably want to do is to get a The wooden materials on here. So that's what I'll concentrate on first of all So I'm going to open What am I going for wooden planks? This is going to be the first The first thing I need Okay, so let's just Select pretty much everything. I don't need that white band on the bottom so We'll leave that alone and I'm just going to copy with control and see Go back into my texture master, and I'm going to press control and V to paste that in and that's going to need some Serious resizing so I'm holding shift in fact Let's go through the whole process control and T to turn on your transform tool And then every time I click on the corner. I'm holding shift because I want to keep the dimensions So I want to distort this at all There we go. So I'm just going to try and keep the height about right so about There's something like that. Okay. Now pretty much all I need to do is Put some planks in place So I might just put this kind of in our room Yeah, I'll put it over and I'll just move it over a bit at a time probably right So let's just press enter to save that control and zero and then Let's Get some selection. So the first thing is I'm going to get rid of All of that so press Backspace and then I'm going to grab that which is going to be an entire plank Hopefully and With my move tool I'm just going to move it over and I'm aiming to cover the green and on the one above it the yellow area So I'm going to hit control and T To free transform this and I can overlap slightly But I'm just covering that with with a plank really and Then what I need to do is Repeat that again So I'm going to grab the next plank and then with my move tool. I'm going to move this over again And again I'm going to go over slightly I think because I'm going to use some masking to sort this out Like that. So that's working out. Okay, isn't it? So that's two. I'm going to repeat this with one plank at a time Until I've covered all the green areas Okay, so I've just finished laying my sort of first layer of planks So now what I want to do is I'm just going to hide that for a second and I'm going to use my magic wand tool to select All these green areas Okay, so what I'm going to do is just select a green area for a start. I'm going to go to select similar okay, and then I'm going to press Alt to my keyboard and Just deselect these yellow chunks up here and Replace them green chunks. Sorry Deselect all the green chunks and I'm going to replace them with the yellow ones So I'm now going to hold shift on my keyboard To add in these yellows That's what that should now all be the pieces that I want to be selected and then With that selection in place, I'm going to go back to this layer. I'll just turn it on and Making sure that selection is still there. I'm going to click on this here, which creates a mask and then you can see That that plank has only gone Where I want it to There are a few places though that still need a little bit of work That haven't quite copied through so in order to get that I'm just going to get a white brush and Use my paint brush. So I'm going to click on the actual layer here Just bring that up Bring that brush size down Make sure it is a hard-edged brush. I'm just going to paint in the mask In any areas that I'm not happy with Like that turn that opacity up. That's why that's not working. So a little bit of black there showing through that don't like So this would probably be all right on the final Map, but I don't particularly want to risk it So I'm just tidying things up where I think I might need to Think I also Need to add these areas to the mask as well I'm just going to do that and I just don't want to leave any areas with blank I can overlap a little bit on this Because the two maps in a sec I'm going to kind of cross this with another map and the two maps should work together So I just need to get this in place Okay, so I'm pretty happy with that for my first kind of layer of planks. I Now need to repeat that on another layer So I'll speed that up and I'll repeat the process to get Two two lines of planks, which is what I'm going for Okay So what I've done in this instance is I've just created a layer With all all the planks going across like that Which should work okay in a sec. So what I'm going to do is just go to my color ID map I'm going to select all the red. So click on one bit of red go to Select similar and then I'm going to go back onto my This layer here that contains all the planks and just hit backspace just to bring that that red back through I'll turn on this layer as well So now you should be able to see that there they're working together nicely I've got a nice bit of variation going on for for this barrel. So that's so far so good. I think What I'm going to do now because I'm pretty happy with that is I'm just going to merge these two layers Merge layers like that and that layer is finished now I'm happy with that the next thing to do is Work on these layers up here. So what I'm going to do for that is Create Some new masks I think okay, so the next job is to get some textures going on on on these So all I'm going to do is get some more Get another sample of these wooden planks. I need kind of a square area So I quite like that and I'm just going to copy that over a new layer for this And that's obviously going to need scaling down and rotating around Putting in place Okay, so what I'll do is I'll knock the opacity down on this one so I can see where I'm putting it I'm going to try my absolute bestest To line this up without having to do one Plank at a time So you can see I'm lining that edge up with that one there. I'm just going to bring that in as well as I can Yeah, I'm happy with that. So that doesn't need to be too neat because I'm going to overwrite it with These textures on there. So I'm happy with that one. That's nice And then I'm going to get another sample of wooden planks To put on the other side and just zoom out again I'm going to paste this one in place and scale it down and rotate it around Knock the opacity down so I can see what I'm doing Zoom in and again. I'm going to try and put this in place. So it starts about There pull that in like that. We're looking at here now So now needs moving down to line that one up and pull that up. That's close enough. So Put the opacity back up on those and I'll zoom out press control and zero to go full screen If it wants to work, there we go Right, so I'm happy with both of those. They look grand. I'm going to merge those layers Okay, now I need to hide those for the time being and I just need to get some individual pieces of wood that go over these pieces here And once I've got those I'll be happy. So I'll show you how to put a few of those in and then once they're sorted You can you can do the rest. So we just need to place those around some all I'm going to do as well I'm just going to do it for one and try and transfer it over to the other side just to save time okay, so Basically what I'm going to do is as I like normally you would resize like that But if I hold control as I do it I can skew the actual dimensions of This and it'll kind of just fit in nicely with the shape I'm going for So like that And then what I'm going to do is I'll reuse these wherever I can so I'm just going to duplicate that layer and Then I'm going to move this to here. So I'm probably going to do the same one every third so we're going to do a Free transform and rotate this around Until it fits in place That looks like a good fit and then I'll duplicate that again and I think you kind of get the idea of what's happening now So I'll go all the way around and get my other samples in merge all those layers together and then we'll move on To get in the metal on so you'll see how this comes together Okay, so now you should be able to see that I have gone all the way around This particular part of the UV map and I'm happy with that But what I need to do is merge all that into one layer So it starts here. So I'll click on that top one all the way down to the bottom one Hold shift select all the layers right click and merge layers And then I will just get my move tool to make sure that they all move together. They do Okay, so I'm happy with that and then what I'll do is duplicate that layer by dragging it onto there Let's see if we can move that straight across and get as close as I possibly can That's pretty close. I'm going to hit control and T And I'm going to hold alt and shift when I resize this so that it scales from the center I want to interfere with the bottom of this too much So it's okay Hopefully so now I've got a Lot of layers that I can now merge so let's merge all these together wait wait don't merge them It's very important before I merge anything That these layers that I've just created these circular ones go on top So that then I don't have to worry about what else can and can't be seen and then I'll merge all of these Okay, and I'm just going to call this layer wood diffuse So I am so ecstatically happy with that that is now that part of The material complete what I need now is to create the metallic part So I need to go back into my color ID map I'm going to hide the wood for now and I'm going to open the Metal There it is right what I'm going to do is Select almost all of it. I'm just not going to bother with the bottom again Now I'm not convinced that this is a seamless texture. So this might create a seam If you want to create a seamless texture, there are ways of doing that. There are many tutorials For time reasons, I'm not going to worry too much about that if I get a visible seam It can be something that I would just correct later But you would you would make this probably a seamless material first Anyways, I'm going to go to control and see to copy that and I'm going to bring it in here and I'm going to press Control and V to bring in this metallic layer and I'm going to press control and T on here And scale this down so that it kind of fits where I want it to fit Which is just over the areas where? There is some red So it's going to start about there And I don't mind there being a little bit of distortion on this about there Right, so that's now on the layer. I'm going to go to my color ID map and just hide that for a second Select anything that's red select Similar So I've got a selection of just red go back to my metal layer and put a mask on there And you can see that that now shows where the metal should be. So that's good. I'm going to call this layer metal diffuse right at that stage We've we've done it. We have a diffuse texture Now I'm not quite happy with if we zoom in There's I think a little bit of yellow and green showing through So what I'm going to do is I'm going to delete this mask Delete it I'm going to go back to my color ID Click on red again select similar And I'm going to select and I'm going to modify I'm going to expand this By one pixel just to make that selection a little bit bigger so that I'm not going to See any of my color map underneath that and then I'll go back on to my metal diffuse and I'll put the mask on Yeah, and that looks much cleaner Right, so that is my diffuse texture. So I'm going to save this out at this point. So file Save as target And I'm going to call this barrel Diffuse and you can see it's going to my source images folder, which is good save Right is a question for you if it asks you do you want 24 or 32 bits per pixel? Unless something's going to be see-through. So always 24 32 bits per pixel gives you a Transparency alpha layer so we don't want that Okay, so that's that first material Done what we need to do now is Create a roughness map So what I'll do is I'm going to set both of these Right-click and I'm going to in fact not right-click I'm going to go down here and create a new folder for them, which is a group and I'm just going to call that diffuse Wicked Okay, what I want to do now is Copy both of these layers I'm gonna take them out of my Diffuse Just move them below there. That's it, right? So take them out of my diffuse group I can close that and this is now going to become my wood Roughness and you are going to become my metal roughness like that Right, and now I'm going to modify these so that I get something that's quite rough So on my wood layer, I'm going to go to image adjustments.  I think And what I want is something that is quite white because this is quite a rough barrel. I'm going for so Okay, I can't say anything happening because I need to hide my diffuse layer. Let's try this again Silly Shane, okay image adjustments levels Okay, so I'm going to take out a lot of the black Almost all of the black to be fair.  So I think I'm going to try leaving that where it is I could always come back and change it if I want to So that's okay. So I think at this stage, I'm going to save out my roughness map file Save as Okay, so I'm going to save it as a target This one's going to be called barrel Roughness roughiness no Barrel roughness good and I don't want that for channels. So go to that save Right, so I'm now going to put these in their own Layer I'm gonna put them in their own folder. So this is going to be roughness ROUGH and ESS Okay Right, I'm going to copy these again get the two copies and just get them out of those groups Right this time. I need a metallic map And that's very very easy because first of all the things are either metallic or they're not So for the wood diffuse I actually don't need that to be part of this I'm going to delete that layer and I only need metal. So let's just hide the diffuse layer again and hide the color ID Maybe I do want the wooden layer.  So file save as Okay, this is going to be a target as well Don't offer channels and this one's going to be called barrel metallic Like so.  So Let's put these two into a Group and call this one metallic And then I'll be hiding that Right now what I need is my sampled normals. So control a control C. I'm going to copy this in Just above the layer with my color ID map. So we'll paste that there So that is the first part of a normal map, but we can actually do a little bit better than that and the way I'm going to do that is I'm going to copy the wood and the metal diffuse layers again, so let's get a copy of that and then I'm going to If it will let me just drop those on the layer just in front of the normal map I'm then going to merge them. So merge layers And I'm then going to desaturate them image the adjustments and desaturate Okay, so you can see that that's now laid on top now Photoshop if you've got the right version has got a very Wonderful filter in there if you click on it go to 3d You can generate a normal map and I'm going to generate a normal map off of this wood and metal So let's give it a second It'll give us if you can see there the kind of fine detail Which will make the normal map look a lot It'll just make it a little better. Do you know what I mean? That's what we want It's going to make it look a lot better. So you can you can mess with all these settings I'm just going to go with the default Because it should give me what I need so I'll click on okay Like so and I now have a normal map that sits on top of this And what I want to do with that normal map is blend it now There is a better way of doing what I'm about to do I'm just going to do it the quickest way So with the wood diffuse copy layer on top. I'm going to go to Here which is your blending style and I'm going to go to overlay And you'll see that blends them together So now I'm getting both sets of normal information and that'll be wicked So I'm going to save this out as a normal map file safe as I'm going to call this one once it's a target file to the target barrel normal safe Okay, I'll just do a little bit of tidying up here Before we move on so let's get both those layers So we've got We'll call this detail normal Or what if I could spell the actor detail normal and this one here is going to be sampled normals Oh, come on Shane. What are you doing? Like that And we'll put these in a folder Try again folder And we'll call this Okay, then we're just going to save this photoshop file so We've saved all the different maps onto different layers and into different folders So we can come back and make any changes that we need to Um, but what we'll do now is we'll tie up the texturing part Because it's taking ages, isn't it? Jesus Okay, so what we'll be doing in the next and final step is we'll be back in Maya and we're going to build a material that will show all this beautiful detail off So we'll be using a physically based rendering Shader which looks miles better than your standard sort of lambuts or Fongs or blends So I will see you in the next step for that and then we'll be finished Yes