But I just want to get a quick survey. How many people here have read The Realist Tutorial book or have know about it? Okay, so quite a lot of people, that's great. So just a little bit of my own background, just to set the stage for The Realist Tutorial Project. I have a background in theoretical physics and I did physics research in graduate school with Caltech, where I also taught classes in the physics core curriculum. But while I was in grad school, I got bitten by the entrepreneur bug and so after I graduated I thought, you know, I'm going to go the different way and I'm going to become an academic. And one of the influences for me was a series of essays including this one called How to Start a Start Up, by a man named Paul Graham. And interestingly, Paul has a similar sort of background, he had a PhD in computer science from Harvard and decided not to become an academic, decided not to become an academic. And one of the things he discovered after he graduated, he's cutting it out, isn't it? One of the things that he discovered after he graduated is that he was doing a list of consulting, which as he says, it was like turning water. It was easy, but he knew he would drown if he stopped. And so he decided that he wanted to solve his money problem by starting a startup. And so I thought, that seems like a good idea. What happened with Paul's company is he ended up selling it to Yahoo for a large amount of money and he could solve his money problem. So I thought, well, maybe I can solve my money problem and I'll start a startup too. The startup I started with, one of my Caltech friends, was a fantasy sports startup of all things. It was pretty cool. And for a variety of reasons it didn't quite work out, including some things beyond our control. And so I was left with another kind of money problem, which didn't really have a lot of money after doing a startup. I was in grad school before that too, so you needed a map and a bunch of money ahead floating around. So after my first startup shut down, one of my friends from Caltech has approached about writing a book on Rails. And I thought, that's a good thing to do. Maybe if I write a book, it'll help me in my technical career. And so we wrote this book together called Rails Space. I'd like to apologize for the title. This is my fault. The title is Rails Space, Building a Social Networking Website. This would be on Rails. And so people thought it was about social networking, building a social networking website. But it really was just a Rails tutorial book. It happened to use a social networking website as its example application.  Why would you want to call it something so lame? So I talked in Rails Space. So that's my fault. I'm going to atone for that mistake. Rails space did really well. It was very well received. But it was fine. For maybe the first six months, it was really the best Rails tutorial out there. But then something happened. The rest revolution came. When we started Rails Space, it was at Rails 1.1. And those of you who do a lot of Rails application development know, especially for a while, that there was a big shift in the way Rails applications were structured. And so we did have some rest structured application code in the book. But most of the book was not restful, I would say. And so we went out of date pretty fast. And even though it did pretty well for a technical book, even a technical book isn't going to solve any problem. And the next thing I did was to do another startup. It takes me a while to learn things, I guess. I applied and was accepted to a program called Y Combinator, which, among other things, was started by Paul Grant, who I mentioned previously along with several of his colleagues. And I'm not going to go into details. This is a blank slide by design. I've applied with one idea, with my co-founder, and I had one idea, and then we switched to another idea, and we started another idea. And sometimes people say, oh, no, we're really interested in hearing. We're interested in hearing what the ideas were, the process. And if you say to me, you're interested in hearing about that, I believe you, I just don't want to talk about it. It was painful, it was unpleasant at times. But there is something about the Y Combinator program you should know, which is that at the end of this entrepreneur program, you give a pitch.   And so Paul is always telling you, you must fear demo day. You must fear demo day.  Something very dangerous. And so Paul is sitting right here. What was your book about again, something about social networks? Well, do that, make a social network and platform. So that's how Ensochi was born. It was sort of born out of desperation. It has something to say on demo day. And actually Ensochi did pretty well, in the sense that he got quite a bit of adoption. This is for the time one of the top most popular for repositories on GitHub. It wasn't really a business by itself, but we actually did attract an investor interest and using Ensochi as a jumping off point. And we were actually on the brink of raising a substantial amount of money around October of 2008, depicted here. Do you remember what the markets were doing in October of 2008? Turns out that was a bad time to be on the brink of raising a lot of money. And so our potential investors kind of gave us the run around for a while. And they said, we'll be happy to fund you, if you can show us a mature product with lots of traction. And so for those of you who don't know, this is how they say no in Silicon Valley. It's a polite no. And I heard the potential investors know it will. But unfortunately, it left me with the same situation I had. I've got the wrong kind of money problem. I want to solve this money problem and it's not working out. So I started to think about this, and I decided to analyze the search for the first principles. There's this balance between risk and reward. And sort of at the low end, you've got a job, which is actually I have a very positive view on jobs and sort of the entrepreneur community people are always, they're always saying bad things about jobs. But jobs are a good thing. It's all an important problem. But they're low risk, low reward. And up here, where a startup is, it's a really high risk, really high reward. Potential, really high potential reward. And so if things work out well for you, you could end up like that. One of the other companies in the same economy around that I was in, Paroku. You might end up like this. I haven't actually been to the new Paroku headquarters in San Francisco, but I've been told that this is pretty much what it looks like. The problem is that more likely you start a startup, you end up with my situation. And so I started to reflect on this risk-reward spectrum. And I thought, you know, I think there are a lot of good reasons to start a startup. But solving your money problem isn't really one of them. I mean, it might work out for you, but the chances are that you'll be left with very little. I thought maybe there's like a sweet spot in between. Maybe there's sort of a medium-risk, medium-reward kind of situation.  This would solve my money problem. I don't really need to be super rich. It's just something more than this very small amount. And so I did reflect to this point, though, on one of the core principles of Stardust, which is to make something people want. This is incredibly difficult. And it is, in fact, the Y Combinator motto, and you might be able to see this on the shirt, make something people want. This is a shirt that you get when you join the program. It's really, really hard to make something people want. Don't underestimate how hard that is. But I looked at this and said, you know what? I have made something people want. It real-spaced it pretty well. Maybe I can write another Rails tutorial book and turn Rails-based into this. But maybe I can write another book. And in fact, I thought this isn't going to be enough because it's a technical one. It's not going to solve my money problem. But I used my knowledge of the market for Rails educational products, which I'd been consuming myself and had contributed to, to see this gap in the marketplace, which I believed that there was a need for a long, comprehensive introduction to Rails a series of screencasts, much more comprehensive than had been made before. This is based partially on my intuition from having taught the core curriculum in physics at Caltech. I felt like becoming a basically competent Rails developer was about the size of a one-term course at Caltech like Physics 1A, which is about 20 hours of construction. So I thought maybe 10 to 20 hours of construction, which was much longer than anything else out there. I also knew Rails 3 was coming out, so I thought that might be some good timing. And so this is one of the first marketing principles that I learned as a key to sort of coming to marketing educational products, which is to address the market, you understand. This is so important, I think, to address the market where you really know what's going on. And I also think that sort of implicitness is this idea that you should do something you're good at. In other words, you should understand the market and you should be able to address that market and do it well. So I knew that I could write a good book because I'd done it before with Railspace, and I also knew that I could make screencasts, even though I hadn't done a lot of screencasting. It's essentially just teaching, and I had a lot of success in the classroom at Caltech, so I figured that I could do this. There's another principle that I adopted really early on, and it was later driven home to me by a certain Sif Lord who's actually in the audience right now. So this is a common thing in information product marketing, but Giles Boquette really drove this home for me, which is you should give something away. This is an incredibly powerful marketing tool. And so even from the start, I thought, I want my book to be available for free as HTML. So I had a vision for what this could be, something approximately like this. Now I want to emphasize that this is not charity. In fact, I'm a little jaded about charity actually, and pointed opinions on charity. This is not charity. This is a business strategy. If you have a free HTML book online, I thought people would give you in bell links, right? They'll link to you. Especially because it's free, right? You're much more likely to refer people to a free source. I also thought the search engines didn't come in an index. The web is made of text and links. I should make a book that's made of text and links. It's also a good karma. If you give away a book, people notice. And even though I'm jaded about charity, it really feels good. The first time you get an email from some guy in India saying, you know, I can't afford to buy your product, but thank you for making the book free online. I just used it to learn Rails. That's going to get to you. I'm not a free bar. But it's great to say this, to give away free books online. Let it be noted, it's not going to. It's not your money problem. It's not a viable business model. But so I had a plan. I had a vision for what this could be. I said, I'm going to take an HTML book and I'm going to put it online for free. But then I'm going to make a PDF of the same book. And I'm going to make some screencasts. And I'm going to sell those. And so I just want to know that there's a big surprise here. You have already thought about this. Wait a minute. You're going to sell a PDF of the book that's available for free online. This is one of the biggest surprises of this whole thing. People will buy a PDF. It's unbelievable. I'll talk a little bit more about this. And so in order to realize suspicion, I needed actually some tools. So I'm going to talk a little bit about my digital chain and the technology. So I wanted to implement this dual publishing model. This idea that I could start with a single source file and convert it to an HTML book and also convert it to PDF. I wanted to be able to make two books from the same source. And so to this, to this end, I sort of looked around and looked at all the different options. And there were some things that met some of my needs, but nothing that really met all of the requirements. And so I rolled up my sleeves and I wrote my own system called Polytechnic. And so some of you might be able to guess from the tech here that Polytechnic is ultimately based on Donald Knuth's tech-type setting engine. In particular, it starts with Leytech, which is a series of macros written on top of tech for making documents, like articles and books. And it converts this to, like, a subset of HTML, or of Leytech to HTML. Now, there are some projects, there's a thing called Leytech to HTML, but it's terrible because it tries to be too general. I just support the subset that I need to make a book. And then there's a little bit of trickery here, but it's really easy if you want to have a Leytech file to make a PDF. There's some, like, Polytechnic has some extra stuff to make it a nice PDF. But this part is easy, but there's a program called PDF-Laytech. So Polytechnic met my needs for a number of reasons, but one of the requirements was that I'd be able to typeset code. And so I just want you to see this is a web page. This is the PDF. They're not exactly the same, but they're pretty close. It's the same source file, so they're in sync by its construction. If you want to see the full result, you can go to realstutorial.org slash book. And it's a real book. I mean, it's a 500-page PDF, and it's all online. It just says, as an aside, and one of the reasons I chose Leytech is because I wanted to be able to typeset mathematics in all good math typesetting, or all roads to good math typesetting through tech. And so there is an example of one of these documents that I made on the web. This is a web page with nice math typesetting. It uses math jacks to do the heart rendering. This is a document called Talon in the Festo. Anyone? Anyone need to have us? All right. All right. This is an anti-pi propaganda piece. You should totally read it at TalonA.com. Really, read it. I'd like to interview you at TNN.com just interviewing you for this online. It's becoming a thing, so you should check it out. So as I approach polytechnic though, I need to tell you a little bit about it. I have a confession to make, which this is hard to say, but I actually suck. I really do.  I don't have a background in academic computer science. This is a market system. Maybe you need to write a parser. I don't really know much about this, but I thought this is one of the situations where there's this potential barrier. I need some imagination energy to get over that potential barrier. Instead of worrying about not being good enough to write a parser, I'm just going to plunge forward. I was inspired by this code. Anyone recognize this horrible language? What is this horrible language? Pearl? This is Pearl. In fact, this is part of the source code from markdown.pl. Markdown, for those of you who don't know, is a nice lightweight market language that can be easily converted to HTML. If you look at it, if you read Pearl, this is just a global regular expression of substitution. In Ruby, we call it a G-sub. I saw this, it was inspiring. I thought, well, I might not be some sort of computer science genius, but I can make a bunch of G-subs. All exactly.  It has a really good test for you, so it can be refactored. Once I figured out how to do it right. What's Justin? That helps me. So I wrote my technique, and it was good enough to write the book. So I started. I started by giving something away. But you can't just get something away. You have to do something else. You have to paint your product. I find self-promotion very unnatural and awkward, but I've discovered that I can pin my product. From practice, I've learned how to pin my product. In particular, I got in touch with an awesome guide in Peter Cooper, who launched the first four chapters of my book for me on Rails inside. So this is the little brother-to-Ruby inside, which is the biggest Ruby blog. So this is how it started. I gave away the first four chapters. If you're thinking about ever doing this sort of thing, you may wonder, how do I get my thing on Rails inside? Or how do I get other people to pin my product for me? So it's important to know that humans are primates. You may not be aware of this. Humans are primates. And they're more likely to do things for people if they have met them or if they have met someone who can give, or if they get a personal introduction.  And I especially recommend going to conferences. So go to conferences. Everyone in this room, you've already followed this rule. Even if you're watching and this is reported, you should know that the value of a conference is only partially in the talks. A lot of the value is to meet people. One of the other marketing techniques I used was to have lots of launches. Well, there's lots of little launches. So I did the first four chapters. And then one chapter at a time after that. And every one of the chapter releases was a little event. And every time it happened, I would send a post to my news feed. I would tweet about it. This is my happy news submission page. I know this is too small to read, so I'll indicate with red arrows the submissions that are a Rails tutorial related. Remember, came pure products. So let me be noted that we still have a problem. This is still not solving my money problem. I'm still just giving everything away. And so I want to talk about the e-commerce tool chain that I used. Now, if you ever want to sell stuff online, you're going to discover that there is... you'll be paralyzed by all your choices. This is the activation energy problem. So Amy Hoy has a mantra. Worry about it when you're rich. Don't agonize over every choice. You want to accept payments, right? I know it hurts. She's like, no, I don't want to. Yes. Worry about it when you're rich. I know you want to use something else. Use PayPal. You need to have some sort of part maybe, like coupon codes. You need to handle file downloads. You're going to use eJunkie. I decided to use eJunkie. eJunkie, I mean, with the name like eJunkie, can it possibly be good? They're like, and their UI is written in flash. I'm not kidding. It's horrible. But no, worry about it when you're rich. Okay, storage. You're going to store it someplace like something cool and cheap, and I can do better than, no, you can't do a better than that. Worry about it when you're rich. Just use S3. Okay, so launch time. I'm just going to make no decisions. Just do the defaults. And just get something out there. So launch time came for the PDF. This is PDF sales for the Rails 3, for the Rails 3 tutorial. Remember, you have to paint your product. This was the main launch on Ruby Inside. Michael Hartle's Rails 3 tutorial look. There's a Ruby and Rails tutorial. Learn Rails by example link there, by the way. This is a good thing to have. Someone linking to your site with this good link text. I also got a post, Greg Pollock made a post on writing Rails. I mean Rails tomorrow. Rails has great documentation. The first example, RailsTutorial.org. So how do you arrange this? How do you launch your thing on Ruby Inside and writing Rails? You use your primates. You cultivate relationships with people. Go to conferences. So remember our surprise? People will buy a PDF. They will buy a PDF. There was a time when there was no screencast. It was just the online book and the PDF. And people bought the PDF. Like, lots of people bought the PDF. Even after the initial launch event, even a couple of months out, I was still selling like three PDFs a day. Which isn't, you know, that's 12, but it was a $30 PDF. So, you know, it's pretty good. The amazing thing is, too, that I discovered, I kept thinking, people are going to, they're going to buy a PDF and they're going to feel burned because they're going to discover that it's available free online. But I was amazed. This is another surprise. They want to pay you. You have no idea how much people want to pay you. So I got an email from a guy saying, I just, I bought your PDF and I just discovered that it was available for free online. Can I get a refund? And I wrote back and said, no problem. I just gave you a refund. In fact, I'm surprised that more people haven't asked for refunds because the whole thing is available for free online. And the next day he wrote back and said, I have to admit I wasn't completely honest with you. I think your book is great and it's really worth it. I'm just kind of running short of money right now. And so I wrote back to him and said, don't worry about it, dude. I have to run short of money. Keep the refund and keep the PDF as a gift. It's okay. And I looked at my logs. Later that day, he went back and re-bought the PDF. If people have opportunity to pay you. I had this PDF book, but the real flagship product was these screencasts. And so the last part of the tool chain you need to know about is what you do for making screencasts. And this is really easy. You should use ScreenFlow. ScreenFlow is awesome. It does everything you could ever want. And more, in fact, I've used part of any of the fancy features of ScreenFlow. If you made a ScreenFlow for screencasts, it's available only on the Mac. So I do have an alternative for you if you don't have the situation. You should first buy Mac and then use ScreenFlow. So I made the screencast. This was like two and a half months of bone crushing effort to make this screencast. More than 15 hours of screencasts. And this came time to launch them. And here it is. Rudy inside Michael Hartle's 15 hours of Rails 3 screencast. So this is really exciting. And I discovered that through this that not only do they want to pay you, they really want to pay you. So let me tell you about a guy and I got an e-mail from a guy in Nigeria. I got this Nigerian e-mail. This is it. Request for urgent business relationship. We were talking initially a little bit about it. But seriously, I actually got an e-mail from a guy in Nigeria saying, I'm having trouble buying your screencasts. There's some issue with country code at Paypal. And we exchanged a few e-mails and I said, maybe you can pay my credit card. And I thought, this is ridiculous. I want to support this guy in Nigeria. Here's a link for a free copy of the PDF screencast bundle. Please enjoy it. He wrote back and said, thank you very much. I'm still going to find a way to pay you. And a week later, he wrote back and said, okay, it's taking a lot of time, but I figured out a way to pay you $95. Which was the price of the PDF screencast bundle. So it's shocking that people, they really, really want to pay you. Give them an opportunity. Not a donate link. Give people an opportunity to pay you for a product that gives them some value. So I want to talk a little bit about the implications of this. Look at this model again. We've got an HTML book or an HTML document for free online and a PDF with the screencast for sale. If you look at this, this is a premium model for content. It says you can give away, you can actually give away your book and still sell the PDF and then sell screencasts as well. This is applicable to lots of different kinds of content, but I have a specific suggestion for the people in this room.  Open-source software this is a new open-source library. It's really great.  So I have a suggestion for solving this problem. I want to align the financial interests of people who write good documentation or I want to align people's financial interests with writing good documentation. You can do this with any project, your own project or another project, but this is the basic idea which is to put an HTML documentation tutorial or structured documentation on the web for free and then make a PDF and possibly some screencasts Now you might notice that in my tool chain, there's one thing that you wouldn't necessarily have access to if you wanted to replicate my exact model which is polytechnic. And so I want to say polytechnic will I really swear someday I'll probably definitely need it. So there are a number of reasons I haven't released polytechnic yet. One of them is that open-source software documentation sucks and I don't want to be part of the problem I want polytechnic to have good documentation right from the start. But now luckily I have a tool for writing that document called polytechnic. And in fact I have an idea for how to align my financial interests with this documentation I'm going to write an article for possibly a book on how to use polytechnic and make it free online. Then I'm going to make a PDF and a screencast of how to use polytechnic and make that for sale. So now knowing that polytechnic can be used to write the documentation for polytechnic but it will also be monetized using the business model for which polytechnic was written. I'd like to quickly acknowledge the images I used in extremely small unreadable finds. But these are just the images. I do have a code though I want to note that I haven't actually answered the question implicit in the premises of this talk. Did the Rails Tutorial project solve my money problem? Did it solve my money problem? Anyway, that's the wrong slide. Yes! Yes! For really successful launches especially the screencast launch went really well. And it continues to sell. I have a passive income stream from that and something I haven't even mentioned which is actually a pretty cool part of this is the book has also been published. It's available on Amazon near you and here it is there's the print edition. This is part of the Addison Wesley Professional Ruby series and I just want to usually you save the full disclosure this here is an affiliate link you already knew I had a financial interest in the sales of this book and so if you use this link then I win coming and going because I get a commission behind the royalties. The screencasts are also being published by Addison Wesley too so inform my TN so I got this passive income source plus whatever the royalties might be I don't know what they're going to be something not zero I hope. And maybe the coolest thing about publishing your own stuff is that you end up with a customer base so I've got a bunch of people many of whom paid me $95 this is a really qualified list of customers. These are people who really are likely to buy a follow on products so if I ever find myself in the position I was in at the end of the Wacomator program where I was worried about paying the rent you know three or four months down the line I can make another product and I can have ideas for follow on products. So this whole thing could have been done without a whole bunch of awesome people and so I'd like to thank some of them on the left we've got Peter Cooper and Grape Pollock and Maddie Manetti these guys have just been stalwarts. Maddie Manetti helped me get this thing kicked off you introduced me to your Cooper Grape has been an incredible supporter you go to the end of Rails for Zombies the Rails 3 tutorial link there is to the Rails tutorial project which is awesome. O.B. Fernandez was the series editor on the professional Ruby series and really helped make this made it possible for me to sell this stuff from my website and also get it published and he wrote me a great forward as well. Art Pasco was the co-author on Rails Space and this could never happen without him. I'd also like to thank Amy Coy and Josh Boquette for being inspirations when it comes to selling educational information products online. Derek Sivers who are those of you who don't know him is incredibly awesome go to Sivers.org and read what he has to say Derek wrote an unbelievably awesome forward that you should read that online it's really amazing. So Derek is great and Ron Evans didn't have anything specific to do with this project but has been one of my biggest supporters in the Ruby community so and he will be seen and speak next and finally Evan Dorn we just saw talk about Ninjascript has been a friend of mine for more than a decade and his company Logical Reality had a hand in a lot of this including the design and development of the Rails tutorial so I'd like to thank all the Rails tutorial readers one of the cool things about publishing online is that you can outsource some of your debugging and copy editing when you publish one chapter at a time people write in and say hey there's a problem with your with your controller or this code listing or there's a typo and it's really awesome when you can fix the error and deploy the fix and then write back and say thanks for the report it's fixed and then you just reload the browser and it's just awesome and finally this has been great talking to you this morning and having the chance to tell you about this story so thank you we've got some time for questions yes we'll thank you Michael very inspiring I'm curious if you understand on this side why do people buy the PDF even though the HTML is online for free the question is why do people buy the PDF even though it's for free I think that people really like to be able to take that file with them put it on the computer and not worry about whether they're going to be online or not they can put it on that USB drive they can put it on their iPad or their Kindle by the way I mentioned iPad and Kindle I do have the proof of concept for an EPUB version of this probably technically I hope they're able to support EPUB and maybe maybe performance as well but so people like having that file that shares but I am surprised that this many people bought it any questions how many copies have you sold the screencast the question is how many how many copies of the screencast have I sold I don't know offhand but if I don't want to reveal specific numbers necessarily but I'll say that let's see I've sold many hundreds I don't know if it's more or less than a thousand but it's somewhere in that the question is have I thought about broadening out and becoming a publisher for other people like Jeffery Rosenbach at EPUB code certainly EPUB code is an inspiration for this and in fact I pitched this idea to Jeffery at Coco Ruko a couple years ago and said I want to make something that takes people from zero to EPUB code to take it or go to his material I think that my thing is the intersection of education and technical subjects and I don't see that my thing is having better taste or better recruiting abilities to get authors or screencasters to come work for me so Jeffery's gotten really good at recruiting good people I think that my competitive advantage is that there are certain things I can do really well and so what I'm interested in is scaling those things up I taught physics at Caltech which was great but teaching in a classroom setting doesn't scale very well so the idea behind this whole thing is to make a product that I can capture or I can capture what I do as an educator and then sell it to potentially too large number of people. Any other questions?


What y'all thinking? BMQ What's BMQ? The black and mild queen Yeah, that might be the job Give it up for the queen of the mild Queen of the mild Let's just give a round of applause for me, I'm here I'm here Give it up for queen of the mild In all my pale face glory, hello Queen of the mild So that's all you just heard bringing into Million dollars worth of game was bigger by J.Y. straight out of the Baltimore He doing his thing, check him out We want to get straight into something, you know that's real dear to the heart, man Rest in peace and nipsy hustle Wait, wait, wait, hold on Before we get into that Let's pay the bills Let's pay the bills It's brought to you by This episode of Million dollars worth of game was brought to you by New Amsterdam Vaca Listen, New Amsterdam Vaca Right?  Kevin had to go in them different barrels and get locked in?   Caged Animal Could you speak on that hot Could you speak on how did it Not just how it came about But when you were shooting with Nip Could you speak on the type of person was Nip You know, what type of person Well, you know I met Nip back in I think it was 2009 You know what I mean? And he wasn't on yet You know, he was still in the process Of getting on You know what I'm saying?  What's my man? We ran into Steve Lubell Steve Lubell, aka we work And we ran into him at the funeral Right, absolutely At the funeral home And You know, me and Nip He was in a movie together Called Caged Animal Where we was brothers And we didn't know he was brothers But we was beefing in the streets And this was a movie that Ving Reims put both of us in You know what I mean? And Even if you go look at the video On YouTube Even at a very young age Nipsey Hussle wasn't talking Like a regular Guy that came up in a gang And, you know, he always had A different type of intelligence about him You know what I'm saying?  I remember when he first opened his store You know what I'm saying? He didn't have a whole lot of product in there He had some Crenshaw T-shirts in there You know what I'm saying?  His mother, his father, his brothers Who I met personally You know what I'm saying? And all the people in his family And all the people who You know, they might not be family because of blood But you family because of love You know what I'm saying?  Because this is somebody that I met Before he got on Me and him was friends before he had Any type of money When he just had a dream Me and him was friends But I always used to tell him No, you gonna get it, bro You just gotta keep hustling, man You know what I'm saying? And he got it And one thing I could say about Nipsey Hustle, man Is the nigga that he was When he didn't have no money Was the same nigga that he was When his bank account was leased So I commend you for that, man Present piece of nip, man Shout out to all money in Shout out to everybody over there Chris Shaw, man Shout out to his family, man You'll never die out here The marathon continues It definitely continues, man But I want to get straight into Before we go any further, right I want to get straight into something That's very important to me I want to understand it, too Coronavirus in prison I got some news from some brothers That talked to some brothers in the penitentiary Man, it was on the call last night On live My brother Dewan, man And the brothers They in there, they going through it You know what I mean? People is really because just like the world Don't know how to respond Correctional officers and you know The staff in the prisons They don't know how to respond Nobody knows what's really going on You're hearing this information Hearing that They're saying a lot of brothers And they ain't even got the proper stuff To clean these sanitizers They sell as wood Sanitize the block wood You know, they letting them out With a certain amount of time Just to go take a shower Like four people at a time And everybody in there scared You know, you and yourself Most of the day You just looking at the news And you seeing everything come from the news So brothers on the inside Is real scared, man The people on the inside Doesn't incarcerate them When I say brothers I'm just talking about people That's going through a struggle All colors I mean, they just going through it And they just They scared to death You have somebody that's incarcerated To try your best to reach out to them They're not doing no visiting But try to communicate Some states they got the technology The tablets where they got They get email and all that stuff But if you can Reach out to your family, man Because I know I know I haven't been in jail When it's though they had lockdowns Or the things pop up You know, all types of Things that pop up Nothing as big as this But we in jail We be scared to death Because you don't know Like, damn, you know What's going to happen to you When they could just leave And leave you locked in that cell And you're done You can't get out of that cell They could just leave They're going to take care of these cells first And like, you know And it's simple things, man It's so easy to catch it like in prison Because even though You could be on the block Y'all could be cool Y'all could be locked in The CO's, the correctional officers The people that worked there They still going home Where they ain't coming back So you don't You just scared to death Like I know right now I will be scared to fuck to death If I was in prison, man Because you looking Well, I'm just saying like You know, shout out to all the people in prison, right?           It is It is, no Especially if you believe it You have to believe it You have to believe that you can If you believe it, you see it Put that footwork in, it'll work And add structure to your life Start waking up in the morning You the only one in the house Get up in the morning, maybe Other people will wake up with you Add structure or discipline Cause the jail will do it for you anyway Yeah, and I was talking about jail Now it's time for stories from the cell And this story is from the cell I'm talking about the first time I got jumped in jail by a white boy What happened was No, I had to slide it in quick To get this shit over with But it's real, see I'm in jail, right? This one I was still young I'm in Dallas penitentiary, right? I go to the child hall One thing about it I was a child hall champion, right?  I go down to the joint I run down to the child hall, right?  Right? I don't forget He was an Irish boy from Pittsburgh Right? I'm like, what you mean when I'm doing?   Like a tape player Push he jack, so I said, uh No, no, I ain't even You know what?       Did you ever Did you clean the cell? Chubbers and stubbers Did you clean the cell or make her bed?


How's it going everybody dato doi here with some more dragon ball fighters rank matches and finally we are over on the ps4 it took me a good two days i'm glad i got ahead on those videos because wow it takes a while to rank up i just wanted to ask you guys about that really quickly so you'll see here i played 155 matches and i won 152 of them it still took me that many matches all against like the same ranks too so how like how long did it take you guys to rank up i completely forgot about it i guess like once you're actually just doing it to rank up and you're not just like playing for fun well i mean i was playing for fun but it was insane dude i like my fingers were the amount of krillin combos oh andrew 17 by the way we're playing android 17 in trunks because uh two different people asked me to play them and i was like why not both men why not hit him with the burning attack oh trunks has the coolest animations in this game by far i just wish i was a uh i just wish i was better with him dude is hard yo okay that was where was my sword what's the point of having a sword if it doesn't give you any extra range all right we are getting 16 pretty hard right now level three i agree i would have done the same to me i would have saw that that trunks and i would have been like yeah that's gotta go should we spark now we just blocked my defense has gotten a little better since the switch over to uh ps4 which is good uh you'd hate to see you hate to see the defense stay that bad all right i'm gonna wait for it do that again i did oh no my barrier didn't come out oh yikes i was gonna try to uh barrier through his projectiles all right we're just gonna vanish here uh watch that command grab oh yeah you don't want to jump in from with a jumping normal from that far that's a mistake i shouldn't have made all right come on 17 no level three again hmm hold on guys let me check my wallet see if i can afford to waste sparking this early news just came in it's payday baby it's payday baby yes if you're gonna spark you have to get a kill those are the rules of the road come on 17 behind the back see if we can't just blow them up and boom done three bars one kill i'll take that every day of the week all right all we have left is this one Super Saiyan Goku which i'm hoping we should be able to get rid of pretty easily seven frames overhead yeah hold it and dragon rush yep yep yep whoo i am just so amped to finally be doing this again baby it's been too long uh let's go and you know what let's go for the hard knockdown super strike we're going behind the back as well hope oh that's gonna be it that's gonna do it yes indeed all right we take game one whoo all right that was just a rush down which i guess makes sense you know we're playing 17 but i'll take that all right and we get the rematch too hello oh gold oh oh no that was poor poor spacing by me i got scared by gold though no not gonna lie that little dude uh might have frightened me there oh okay i see you give you i see you all right defense defense defense this could be a kill for him as long as he doesn't drop it why did i do that you know what doesn't matter doesn't matter because we still get the sliding knockdown oh beautiful reflect oh that's a punish um we're just gonna leave 16 out oh baited that one oh you you know i oh i got too excited you got too excited accidentally hit super dash gonna have to blame my old sausage fingers on that one tried to vanish get that shield up oh no no that could have been a punish if goku didn't you gotta plant those feet goku oh wow so much for the barrier oh okay we are not leaving 16 out you gotta be kidding me if you think i'm leaving 16 out you must be crazy oh the ground stomp dude threw a tantrum oh my god i hate that that has a hitbox because every time i every time that hits me i say i forget about it oh nice cross up but he doesn't get the kill we're out of there and we are promptly back it oh he grabs me i thought my heavy would deter that all right he can't kill us it's scaled too heavily at this point milky cannon do what you must have that was not the stick um trunks can you save me here buddy no don't turn around purple comet attack is so good all right at this point he's slowly bleeding us out we got to get like some big momentum here this is not the big momentum yep yep yep i knew that wasn't gonna be my turn but and get my primitive brain click the buttons anyway what could i say dude sometimes sometimes you gotta let it rock maybe he goes for a grab and then you get a free combo all right let's see if we can't put oh we could have comboed off of that it would not have been easy but it would have been sick oh gold with the big snipes cheap all right that's the end again you that's the end again you uh 16 is pretty low thankfully due to some effort i put in at the beginning of the match uh which was promptly snuffed out by my garbage play that's that's no punish not with not with 17s down heavy don't get me wrong i play i play krillin so i'm used to having a garbage down heavy but still not great oh get that out of here trunks players give me strength no that's the wrong one okay we got him anyway sorry sorry trunks players i know you just vomited by looking at that that was supposed to be an ex flip whoo i am sorry about what you oh no oh yes go ahead super dash i know you want to i can taste it in the air okay well i tasted it but not enough to react to it oh no no no i'm i've just lost control of the car at this point oh no he beautiful okay okay at this point i'm just oh what a mix up i just ran underneath that man's feet should we go for the hard knock down or the switch out we're gonna go for the switch uh just to keep some health at this point he is sparking anyway it would be no we're not fast enough that's a vanish oh there's a tough situation to be in oh that's a tough situation to be in i wouldn't put that on my worst enemy oh yikes okay sparking blast really killed us there uh and it'll probably kill us here if i'm being honest he has six bars to spend all right let's slowest combo of our lives we're trying to buy as much time as possible yes okay we we we timed that perfectly heat dome attack saved me yank him off the ground let's go heat dome attack he's going full blast it's not gonna kill but we haven't we haven't mixed up don't anime anime no anime oh don't even get any ideas boy get off of me i invented that panic goku strat oh thank you anime god whichever one of you was watching over me all right let's get this win let's get this win oh yeah let's get this win win you know i i have half a mind to switch in trunks because i just know uh a good corner combo form ah that was a bad dash oh that was bad oh nice overhead can use overheads kind of confusing the man maybe it's just because i see zero can use oh darn it oh darn it again that was supposed to be a quick tag oh wow the super dash picked him up enough not to get hit by my down heavy all right we're not dead we're not dead which is the important part here i guess oh wait a minute we're totally dead wow i i slept on 16 that's the last time i'll ever do that i was like yeah he can't extend this any further and then eight minutes past and i was dead come on man you've got to give that to me trunks oh he just pressed a button okay we have to we have to start staggering our buttons out here that's the way you have to deter that all right let's get let's get back into the corner shall we darn it oh it's so hard okay uh we we're gonna have to spark here it's a it's a no brainer yeah this is a this is definitely a sparking moment if there ever was one this would be it this is why you played this is why you don't take your hands off of the blocking thing even if you are even if you have resigned yourself to those big meaty claws oh you gotta be kidding that was like that was some range and a half dude well this round has not gone according to plan he almost got three bars from that there we go that's a kill that's a knockout it was a risky it's a risky strat i did for sure for sure but you know we got it how many dragon balls are in play if i could get the meter to pop up i wish there was a way to check okay uh that's a little enticing not gonna lie to you oh come on come on though mm that's enticing i might be dead though long before hopefully body swaps me oh that's unsafe it's not fair he had seven bodies blocking the way to him uh he could probably kill me right here level three get a milk container let's not throw out any let's not throw out any random buttons shall we go to please hit oh it kills okay good i i changed my direction on that one at the last second because i was not feeling it shenron grant me this wish shenron please shenron i just need you to restore my health that's all i need i don't need an immortal body i don't need friends he has the ultimate power though he has the ultimate power he has the ultimate power i can't help it i'm losing i've actually i'm actually stressed out of my damn mind please please i i had so little health i wanted to bring you boys back trust me i did but let's go please hit please hit please hit i need it okay okay okay sparking glass die run out please i'm begging you all i want is a fair fight oh my god oh my oh whoa whoa oh yes yes okay my hands are literally shaking i'm not even joking that's all hitting oh my anime yeah no no no no no drop it drop it please i'm begging drop it drop it no no no drop it drop it drop it oh anime oh you gotta be oh ps4 oh my heart i gotta go guys that's the end of the video three and out if you guys enjoyed this video please i'm begging you like this if if you've ever liked any of my videos like this one i'll drop the youtube back i'm huh all right all right i gotta go i gotta go i got to go this video is going up today this video is going up today it has to okay well if you like these videos like the video let's check out some other videos on your screen uh they're not as good as this one they're not i don't know i don't know what to say guys it's uh it's been fun i guess i'll take this moment to genuinely thank you guys for all the support on the channel it's been great so far i've been having a ton of fun thank you all the patreons the people that follow me on twitter everybody that comments everybody that even watches this video seriously this is the most fun i've ever had and i hope to keep doing it uh and i hope season two comes out soon all right see i've talked too long bye


Welcome along to the Enator egg test by Film My Run. So I've been seeing on Facebook, adverts for the Enator insoles. And I saw a video where the, I don't know if it's the owner of the company, drops an egg onto the Enator insole and it bounces back up and he catches it. Whereas the other insole that he uses, bog standard insole, it just breaks the egg. I don't believe it. Do you believe it? I don't believe it. So I thought, look, let's get some of these and let's try it out. So I might well end up with egg on my face here, but we're going to try the Enator egg test. So there's a brand new pair of Enator shock absorbing insoles. So we'll get one out. Oh, we'll get the other one out. Let's get a left and right. So here I have a standard insol from a pair of Hoca trail shoes. So Hoca, we know are cushioned shoes. They're very comfortable to wear. So this is a good insol to give it a go against. And this is the Enator. Now you can see the size is way bigger than I would normally wear. So what I would do is I would cut down the end here. If it's too big for you, you just trim it down. So we're going to put those side by side and here are my two eggs. Now what's supposed to happen is I'm supposed to drop the eggs from an equal height into the center of the insoles. And then we assume that that one's going to break, but that one should bounce back up and we either catch it or something. Let's try it, shall we? I don't know how high to drop it from though. Shall we try it from here? Let's go. Three, two, one. Well now, okay. So the Hoca one has cracked the egg. So it bounced off, but it did crack. The Enator one did indeed bounce off and I just about caught it and it is not cracked at all. So there you go. They're both rear legs by the way, as you can see. So it did work. The Hoca one managed quite well. The egg bounced off and cracked, but didn't completely break. The Enator one bounced off and no crack at all. So make of that what you will. I'm going to go and test these. I'm going to put them in some shoes. I'm going to run a few kilometers in them and see how they feel and I will report back. But that's it. The Enator egg test does work. That's good, isn't it? I'm really impressed. That is amazing. Wow. I'm impressed that this didn't completely break. I don't know if I was supposed to drop it from a higher height. No. Yep. Yeah. So actually they've come out pretty well, haven't they? From that. Amazing. Right, let's get this mess cleared up.


There once was a table of hashes that stored extra items and stashes It all seemed like bliss, but things went amiss when the stashes were stored in the caches This is alibi, a floor in cuckoo hashing based hierarchical ORAM and a solution I'm Daniel Noble presenting and this is a joint work with my advisor Brett Hemingway-Folk and Raphael Ostrovsky I shall now explain oblivious RAM or ORAM and why it is so useful Oblivious RAM is a technique in which a client with a small amount of trusted memory can make use of a larger entity with a large amount of untrusted memory Let's imagine the following scenario Alice has photos, lots of photos, and she is no longer able to store these all on her local device She would therefore like to make use of a cloud service provider However, the cloud service provider is not entirely transparent about what it does with Alice's data Furthermore, if Alice is a business that has access to sensitive data such as medical records Putting these on a remote host might lead to disastrous consequences There are a few cryptographic primitives that Alice could use to protect her data The most basic of these is to encrypt the data This will hide the content from the service provider, but it will not be able to hide Alice's access pattern her reads and her writes She can instead Use a primitive called private information retrieval Which is a protocol that she can engage in with the service provider in which she is allowed to learn Read information from the database without the service provider learning what information she accessed Lastly if she wants to protect both her Reads and her writes She is able to use a primitive called oblivious RAM or ORAM PIR and ORAM by themselves do not Protect the contents of the data. They need to be combined with a secure encryption scheme in order to do so The most common application of oblivious RAM is the one just described in which a client Outsources memory to an untrusted service provider However, this is not the only application The first oblivious RAM protocol had in mind a different application that of a secure execution environment that Needed to depend on an untrusted RAM This actually is relevant in practice now that we have secure execution environments like intel sgx A trusted execution environment can Use untrusted RAM Using an oblivious RAM protocol A third application that is extremely important is secure computation Secure computation allows a number of parties Who have data split up between them to still be able to compute on that data If a piece of data is split up and each party knows which piece of data needs to be accessed Then they can easily compute on that data However, if the item the index of the item that is To be accessed is also a secret Then it is difficult to Find an efficient and secure method For each party to Access the relevant secure share Oblivious RAM protocols can be tailored to the secure computation setting And indeed in the secure computation setting sometimes you can take advantage of the Work that the Different parties can do in order to make the protocol more efficient I will now explain hierarchical RAM schemes Hierarchical RAM is based on oblivious hash tables An oblivious hash table is a data structure that has the property that accesses to the data structure access random locations As such if each item that is queried to the oblivious hash table is only queried once It leaks no information about the items that were queried Nor does it leak any information about the relationship between items that were queried and the actual items in the database However, because oblivious hash tables can only be accessed once They need to be combined in a new way in order to Allow items to be accessed multiple times from the oblivious RAM This is done by having Several oblivious hash tables of geometric in the increasing sizes briefly each In short each Oblivious hash table will have twice the capacity of the oblivious hash table above it At any given point in time not every oblivious hash table in the hierarchy will exist In the diagram shown on this slide The first and third oblivious hash tables are not needed at this point Or the first and third levels have no oblivious hash tables and the second and fourth Levels have the oblivious hash tables shown In order to query an item the Each level that has an oblivious hash table is queried starting with the smallest If the item is found another random value Announce which is only used once Will be queried at subsequent levels This is important for security The item that was queried in the smaller level may have previously been queried at one of these larger levels As such querying a random value instead protects the security of the scheme as it guarantees that at each level An item will only be queried once The fact that these random values are different every time is also essential for security because it means that again These random values will only be queried to each table once Once an item has been queried from every level it is inserted into the top level Called the cache In the cache every item is queried Whenever the crash cash becomes too big The entire data structure needs to be rebuilt all Levels that have an oblivious hash table from the smallest level until the largest one such that the sequence of oblivious hash tables Um, can the sequence of levels all contains oblivious hash tables All of these oblivious hash tables are combined And built into a new oblivious hash table The details of how the oblivious hash table is built In such a way that it does not leak any information about the contents of the data is Not going to be discussed in this talk as it varies from scheme to scheme However, I am going to discuss in quite detail how the tables are accessed In particular many hierarchical ORAM schemes make use of cuckoo hashing Cuckoo hashing is an efficient form of hashing In it there are two Subtables each of size epsilon n where epsilon is some constant greater than one And n is the number of items that The scheme rushes the store in the table Each item can be stored in one of two locations These locations are determined based on hash functions as such each location can be treated as a Random value uniformly chosen from the epsilon n possible locations Each of these locations has capacity one The fact that the Each item can be stored in one of two possible locations Allows much greater flexibility in the assignment of items to locations For instance, if there is a collision in one of the tables The items can still be stored For instance in this diagram We can show that we show that the robin can be stored in the hash table on the left And the flamingo on the hash table on the right Even though both of them were assigned the same location in the hash table on the right We can continue to see that Even though this table now contains several collisions It is still possible to find a correct assignment of items to hash table locations Such that each item is assigned a unique location However, it is of course possible that A configuration of items to locations is chosen such that it is impossible to store everything in the table This depends on the randomness of the hash functions that are chosen The probability that this occurs Whenever any items are inserted is order n to the negative one This was shown by Pag and Radler in their paper introducing cuckoo hashing in 2004 Cuckoo hashing was then proposed as a scheme for oblivious hash tables By Pincas and Reynman in 2010 They proposed that each level could have a cuckoo hash table In the event that there was an assignment of items to locations in the table Such that the items could not all be stored in the table They suggested that the table could be rebuilt This is a standard way of dealing with this one over n probability of an unsatisfactory assignment However, this actually presented a subtle problem Imagine that the table is rebuilt in the case that there is an unsatisfying assignment Now if all of the items in the table are queried That access pattern in the queries will not correspond to an unsatisfying assignment However, if items that are not in the table are queried It is possible that the physical accesses to the table correspond to an unsatisfying assignment For instance imagine that the table contains the parrot, the owl and the robin We know from this that the parrot owl and robin Query locations cannot be the same two query locations However, imagine that instead we query the flamingo, the hen and the penguin It is possible though unlikely that All three of these queries will result in the same two locations being queried If this event were to occur we would know that it is impossible That all three of the items that were queried existed in the table This therefore presents a subtle security leakage That means that the oblivious RAM in general is not secure It was then proposed to use cuckoo hashing with a stash by Gudrich and Mitzmacker in 2011 A stash is an additional area of storage In which items that could not be placed in the main table can be placed instead It can be shown that For any constant s the failure probability then becomes order n to the negative s Furthermore for non-constant s it can also be shown that the failure probability becomes order s Open brackets order s over n close brackets to the s plus 1 This means that the failure probability can be made negligible Failure in this case means that more items are placed in the stash than the memory of the stash allows Observe that we also cannot reveal how many items were placed in the stash Because this again would suffer the same problem that existed with the Protocol of pink s and rhyman During the build phase the fact that the stash size was leaked would reveal no information However, if the access pattern corresponded to a sequence of elements A set of elements that does not have the same stash size We know that the items that were queried could not all have existed in that table This means that the stash sizes need to be revealed And furthermore the entire stash needs to be accessed at each level Grid brick and mids and macka then presented a protocol with these properties In their oblivious RAM protocol every level contained a cuckoo hash table And also contained a super constant size stash Say of size log n This protocol was secure And was able to take advantage of the cuckoo the efficiency from cuckoo hash tables However, it meant that the number of accesses at each level was no longer constant Because the entirety of the stash needed to be queried As such, the scheme was secure But it was still somewhat inefficient Because it still needed order log squared n physical accesses for each virtual access It was then proposed by Goodrich and Al in their paper in 2012 That these stashes could in fact be combined They showed that even though each stash needed to be of size Order log n, if the combined stash was of size order log n This was sufficient to ensure that the stash didn't overflow As such, this combined stash at the cache level would be checked first And then the remainder of the table would be checked as per normal Herein was introduced the subtle security floor that is described in the alibi paper Since the combined stash was checked first The hierarchical ORAM protocol would, if it found the item in the stash, Search for other elements instead in the lower levels This meant that instead of searching the locations of the item that had been stashed Other locations were accessed instead Now any single query did not leak any information Since only two locations were accessed and those locations were still random However, when multiple queries were combined A similar problem appeared as had happened with the Original cuckoo hashing protocol by Pinkers and Reiman While it was possible that the item that had been placed in the stash Would result in the same query locations This is extremely unlikely As such, it is extremely unlikely that the resulting stash size From the query if all of the items that are in a table are queried Will be as large as the original stash size if the stash size is greater than or equal to one In this example, again imagine that the Robin, Owl and Parrot were placed in an oblivious Hash table However, further imagine that They were not able to be assigned to this location and therefore the parrot had to be placed in the stash In this event reality, the Owl and the Robin will, when queried, still access their original locations However, the parrot Will access new locations As such, the queries for any items that are in the stash are resampled If instead we look at three random items which are not In the table The probability that they cause a complete collision, i.e. that all three of them are mapped to two locations Has not been affected Therefore, there is a statistically significant difference In the probability that these three items which are not in the table will be matched to two locations Versus three items which are in the table being mapped to two locations The solution to this is actually quite simple If any item is placed in the stash It also needs to remember Which table it originally came from Then whenever it is queried The table at which it originally came from Needs to be queried with the original query So if we find the parrot and the parrot originally came from level three The protocol should still query the original Hash locations of the parrot in query three in level three In subsequent levels, it should as before Query a random value since the parrot may indeed have been queried at this level before This successfully allows The sequence of access patterns at each level to Be independent random samples from the table space In other words, the query patterns are not affected at all by an item having been placed in the stash The additional information Therefore it serves as an alibi of sorts In the same way that a criminal needs an alibi to claim that it was He or she was going about their daily life This additional information Makes it seem as if the item existed at its original level in the table When in fact it was placed in the stash Through doing this the queries at each level appear completely random And the oblivious RAM scheme can be made secure This additional information only Requires a number of bits equal to the number of levels And therefore does not Increase the asymptotic cost of the protocol This flaw first appeared in a literature in 2012 so has existed for almost a decade It was then inherited by a sequence of other works And in total this flaw appeared in six different papers Including three oblivious RAM papers that were published in the last three years This motivates the simplification of oblivious RAM protocols And the development of modular Secure components It also makes us realize that Combining components in ways that undermine their basic security properties Can result in unintentional security flaws Lastly it Motivates the suggestion that reviewers should be Compensated more for their efforts so that they Can devote more time towards Reviewing search protocols and are therefore more likely to catch flaws such as this one


So now Arjun will speak about NFS Ganesha. Arjun works for Red Hat in the Bangalore office in India. I'm very happy to have him here. Thanks. Thank you. Thank you for the introduction, Niels. Well yeah, I'm Arjun Sharma. I've been with Red Hat for about one and a half year now and I'm a part of the NFS Ganesha team at Red Hat in Bangalore office, India. So I'll just start right away. I think I'll just start it. You got it? Yeah, perfect. Alright, so the outline of my talk is something like I'll start off with the introduction of NFS Ganesha and I'll explain about its architecture. I'll talk about the, about a component of NFS Ganesha which is a configuration file known as the Ganesha.con. Then I'll move on to NFS Ganesha features and I'll, yeah, and I'll also compare NFS Ganesha with kernel NFS and yeah, and then I'll talk about since I'm mostly working with the Gloucester FS and not Cef, I do not touch Cef or RGW at all. I'll talk about Gloucester with NFS Ganesha and then I'll talk about some recent developments or ongoing developments in NFS Ganesha and then finally I hope to get some feedbacks regarding transport less security. It's, it's one of the, I think, hot topics in NFS I guess. So yes, I'll move on.  So it's, it's basically, it's a user, these are NFS servers in user space. NFS Ganesha basically allows you to do NFS servers in user space and it supports your version 3, 4, and your PNFS with also 9P protocol, 9P for the plan 9 operating system. The version 3 of NFS was stateless, stateless, and from version 4 it was stateful. So I know most of you all probably know what stateless and stateful is but let me just rephrase what stateless is. So basically, yeah, stateless stores no client information, you know, like the FD, the file FD, next byte to read and etc. stuff like that. Or, but instead it supports the lookup procedure that converts the fine name to a file handle, which is a unique identifier, like it's probably, it's mostly the inode number for the file. And yeah, I mean NFS Ganesha has Fuzzal, which is called file system abstraction layer. And I'll be talking more about Fuzzal. I'll be talking about Fuzzal a couple of times in my presentation. So the architecture, right? On the top, we have the network layer, the network 4 channel. It actively listens and captures your network requests from the client, which the request then passes through an RPC dispatcher. Here, the request, the RPC dispatcher decodes your request at RPC. And the RPC dispatcher here uses a sub, sub, sub, I'm sorry, sub project, sub, sub directory, sub program known as the lib NTIRPC that is used to implement RPC. And then the request passes through a duplicate request layer. And also NFS Ganesha supports RPC SEC GSS for your user space, user space applications like Curb 5. And then from there, the request passes to the protocol layer, depending upon which protocol you're using, version 3 for whichever it is. And from the protocol layer, it passes to the actually, so I was half asleep when I made this diagram. Just imagine the SAAL layer to be on top of the MD cache layer. And yeah, I mean the request, from the protocol layer, the request passes to the SAAL layer. And the SAAL layer converts the request to an operation. For example, the write request to a write operation, read request to a read operation. And then the MD cache layer basically stores the metadata cache for the particular request. And then finally, we have the FASAL layer, the file system abstraction layer. Depending on what backend file system are we using, Gluster, SAF, whatever it is, yeah, it communicates with that. And that goes on to your backend file system. So it makes more sense to have FASAL here since it's easier for NFS Ganesha to also interact with other user space applications like Curb 5. And then we have D-Bus that basically in a way controls the entire NFS Ganesha process. So you can dynamically send D-Bus messages to dynamically export and export and do other things. And yeah, we also have logging depending on log levels. You can log the results, the progress, I mean the logging basically. So the configuration file. Although the configuration file has a lot more things, I'm just pointing out the, I'm touching upon the main parts here, main components. So first we have the NFS code parameter. So here, yeah, if the block is not defined, it picks up the default values for it. It's basically used for defining your ports to be used for the particular share, for particular share. And then we have the export block where you can export your file system, the shares that you want to export. It can be multiple, you can export multiple file systems. And then we have the, yeah, it's a generic block, the NFS Curb 5. So here you basically, for example, the NFS Curb 5 block will communicate with, if I'm using Curb 5 for authentication. So this block basically is used to modify functions and options for my Curb 5. And then we have the NFS V4 as the name suggests. It's basically used to limit if you want to just go ahead with NFS 4.1 and not 4.2. So yeah, it's mainly for that. And then you have the cash inode layer, the cash inode block that's used to set options for caching. And finally, we have the log block where you can modify log levels for each, for the Fizzal layers to store logs, features. Okay, so NFS, let me just start by talking about Fizzal, file system abstraction layer. So Fizzal is basically, yeah, it's like a plugin that's written in NFS Ganesha for your back-end file systems. So basically, you have a file system that you have. And if you have a library that supports, I mean, you write a library in your file system to integrate it with NFS, you can write a Fizzal in NFS Ganesha for it. And then you can just straight up use your file system with NFS Ganesha. So that's where Fizzal is handy. And then it supports your dynamic exports using Debus Mechanism. I spoke about this during the architecture. So you can basically give Debus commands to dynamically export and un-export your file systems.   Yeah, it's in the user space, so I think which is why it's ideal for huge metadata caching. And also, we have, I'm not sure, I'm not 100% sure about kernel NFS. I think it's, if it's not impossible, it's complex, a bit complex to, you know, implement high availability.  So in case I have like multiple servers that are actively serving my clients. So if one server goes down, I have the other servers to support having to service for that. So that's what HA is for. And we use a pacemaker and coarsing, which are actively developed by Red Hat, especially. And yeah, pacemaker and coarsing, if I have to touch upon it, pacemaker, I'd say is like a, in essence, pacemaker is like a, it decides how your cluster behaves. And coarsing is like a message, is like a message channel that communicates between server and clients. So yeah, we, so it supports active-active configuration. So there's a difference between active and passive and active-active. So I'd say for the viewers, so most of you here know, I'd say that active-active is basically where all your servers are up and running and serving your clients. And this is also good for your load balancing, depending on the situation. And whereas active-passive, you have, although there is redundancy, but you have just one server that's serving. And if it goes down, you have the other server that takes its place. Then, yeah, security and auth mechanism. Yes, it communicates well with other user-level applications like five welled up. So you have auth mechanisms similar to kernel RFS, I think it's way much easier. And it's user space. So yes, it's easier to work with, easy to debug. And of course, we are like a small team and small team. So we have a faster development cycle. And yes, faster development cycle, it's not, it's not chaotic. And okay, I think chaotic is not the right word here, but yeah, we have a faster development cycle. Integration with Gluster FS. So yeah, firstly, the Gluster FS has something called as the GF API, the LibGF API, to communicate with NFS Ganesha. And NFS Ganesha uses, it's basically a wrapper with the Gluster protocol, which interfaces with Fuzzal Gluster that's written in the NFS Ganesha. So NFS Ganesha uses GF API to communicate directly with the Gluster FS and not go via the traditional Gluster Fuse layer. So performance is better in that way, in that sense. And yeah, we have the edge implementation for NFS Ganesha where you use, as I spoke, you Space Maker Encouraging for active-active configuration. Here, you need, I think, at least four servers to carry out edge implementation. And it fails over seamlessly. And if, let's say, a server dies, most of the clients don't even realize it dies. And the administrator can go and bring up that server without any problem. So NFS Ganesha versus Kernel NFS. Firstly, I'd like to mention performance-wise, of course it's Kernel NFS, that provides better performance. But NFS Ganesha is quite good, it's not that bad, it has good performance, it gives you good performance. Other than that, it's easier to debug with. We all know how daunting it can be to debug Kernel NFS or Kernel applications. And it's easier to scale out as compared to Kernel NFS.  So let me just chop on that, since most of you I think you know, but I'll just say that. So scale up is where basically you have a box, you have a machine, and you add in more CPU power, you add in more RAMs, you add in more memory, and you add in more stuff to scale up the box, and then there is only as much as you can put in, and eventually you run out of space to do it, and you've scaled up as much as you can. But whereas in scale out you can add in more boxes, and then of course you can scale up those boxes. So it's much easier to scale out with NFS Ganesha as compared to Kernel NFS. And yes, it's easy to access, since it's in the user space, NFS Ganesha is in the user space, so it's easier for NFS Ganesha to communicate with other user space applications. It's not as complex as Kernel NFS, although it's a bit complex, but it's not as complex. And yes, we are a much smaller community, so we know how, so for development, how daunting it can be to get your patches merged for any kernel projects. But here in NFS Ganesha it's not that bad, and it's much faster. So some recent slash ongoing developments, labeled NFS, so the labeled NFS, right? So basically, labeled NFS in short allows you to set security as a Linux context to restrict processes from interacting with each other. So basically, if a client requests a file access from a server and a server sends a request back access to the client, I mean these two processes for the same file are actually different, so you don't want them to mix up, and you have better security that way. So it was one of the features. I personally worked on this feature, and it's been merged upstream. Then we have delegation. So for delegation, I'd say it's more or less, as far as I understand, it's for better performance, where the client doesn't have to speak to a server, which then speaks with the NFS Ganesha and then to locate a file that... Then NFS Ganesha actually has to find another server where the file is actually located. So delegation allows the server to basically delegate file data to the client so that it can directly access the file, and then we have the sticky grace period. So for grace period, I'd like to touch upon what grace period here is. So when an NFS Ganesha server is up and running, for a while it takes some time to start a problem. So basically in the starting, few of the file operations are not permitted so that the servers can... So the clients that were communicating with the server earlier can have the locks if there were any previous file operations going on. So here with sticky grace period, the thing is for in-flight operations, some file operations require the server to be in a grace period and some don't. So here with this improvement, it overcomes the problem of in-flight file operations so basically you don't flip your sticky grace period. So it basically is suited for a clustered NFS Ganesha cluster.  So finally I have transport layer security There is no as-search right now, there is no proof of concept for it and this is a project that my team has been asking me to get a reaction from community from NFS enthusiasts like you. So I urge all of you to participate, like chat about transport layer security. Since we have curve five but it's a little bit complex and you might as well have TLS and so I'm hoping to get some reaction although there is nothing right now for it. So but depending on the reaction we get from the community and about the I don't know any suggestions that the community may have, we may start working on TLS. So please feel free to get in touch with me after the talk. If you have any suggestions you may just raise your hand and you know say anything you like about it. Yeah, that's all and questions. Thanks Arjun for the talk. I have one question regarding this async IO we have mentioned in the Glust. Regarding... Okay, okay. So I have briefly worked in NFS Ganesha layer to develop our own propriety file system. So I have used async IO and 2.5 version of NFS Ganesha. So I wanted to know like what is the state of... Sorry, I use sync IO. I wanted to know what is the stage of async IO? Are you guys in Glust? Have already implemented Afzal for async or still you guys are using sync and it's still in the you know development phase not in the production ready in case of Glust. I know that APIs are available from NFS Ganesha side but how robust they have been integrated with the Glust. Just want to know your view and how team is doing it. Okay, so thank you for the question. Okay. So question, I'll repeat the question. The question basically was how robust is async IO with Glust. In short, right? So okay, as far as I know that the development is still going on but it is better with Glust. It's there and it works well. I mean, I'm saying this because you also have an option for going just with the sync IO and not the async. So I think the async is in a pretty good state right now but I'm not sure where it is exactly right now.  Yes, please. Okay. So we use the set of this with NFS Ganesha on top and I'm curious what you mentioned about the caching the empty cache layer. It sounds like that's a major contribution to a potential performance benefit in particular with considering the set of this in terms of performance with the metadata in particular in small files. Is that correct? Should I focus on that and give it a dot of the cache area? Okay. So the question is, first step, since metadata is I think an issue with stuff and NFS Ganesha has an empty cache layer so should he just rely on NFS Ganesha's empty cache layer and shoot more metadata for it? So firstly, I'd say I'm not familiar with SEF like the problems and the limitations with SEF which SEF has although I've just heard about it I think metadata is the big of an issue in SEF but since I'm not that aware what I'd say is so this is what my understanding is please jump in if you have something to add on Neal's since it's a user space it has the ability to store a lot of metadata so I think if that's what you're looking for to store a lot of metadata maybe so yeah I think that's... The answer is it depends, right? The empty cache layer is great but any time you're stacking caches like this because LIBSA of us has its own it kind of caches a lot of this data as well so well it has to for the caps, right? So it has to do that for caps so any time you're doing that you always have cache coherency issues that you have to work through some things time out, some don't so the issue though is that you're double caching too so you're going to consume a lot more memory if you use the empty cache layer that way most of these are in-memory operations and all in the same process so you're probably not going to get a whole lot of benefit from doing that the one thing that is the problem with LIBSA of us is that it's all under a giant mutex and so you can get contention on that mutex if you're doing a lot of threading I can talk to you about it a lot more detail later if you want but yeah the question depending on what you're doing it may help you but it may harm you too so thank you Jeff the other part two is that we don't have any up calls from LIBSA of us to call into the to Ganesha to invalidate stuff so if we get capped, revoked and you loot and metadata changes it may be difficult for Ganesha to know this so if you have one Ganesha and it's the only thing that talks to us is fine but if you have two Ganeshas running independently or some south of us and some Ganesha then that's bad thanks guys any plans for different HA options? so for example we run Ganesha in a container and like the coarsing pacemaker this doesn't really make this great for that so you know perhaps something like using raft or switch transaction right so the question is if there is any other option for HA as related to pacemaker and coarsing that's what I hear correctly so since I've only used pacemaker and coarsing I'm not sure what the other the other application that you mentioned raft I think I'm not sure about it but as far as I know it's only pacemaker and coarsing that we use for HA in last year especially so yeah sorry so NFS Ganesha the good part is that he does not enforce you to use something so we used zookeeper for HA and we have written our own duplicate request gas DDRC for our own metadata DRC purpose so it is possible yeah it's quite it's quite pluggable architecture that is the best part of NFS Ganesha I would say is that fast enough? yes indeed yeah there's actually some native clustering inside there too if you're using sef so sef I built a way to do active HA using just sef so using rados basically it kind of maintains a shared state database between the Ganesha servers I can point you to a couple talks I've given on it if you want to see them so any more questions? yes just ask do you have a client in user space as well? do you have? a client in user space why do you see me in user space? I'm sorry I'm not hearing that client access so we have user space client user space client we have a fuse client a fuse NFS client fuse NFS clients okay what I know is I know about cluster as a fuse NFS Ganesha has a fuse NFS so there are NFS client utilities that you can use the NFS protocol from a client side there are libraries for that but they're not part of the NFS Ganesha project so NFS Ganesha is really the NFS server the NFS client is either the Linux client that you have in the news kernel or NFS utilities in user space thank you oh, any more questions? I guess if there's no more questions then okay, so we'll do one more sorry thank you for your talk so the question about the client for example if there are no for example system no single AP is used and no pismaker or other things but you have two active active servers and you use something like out there fast on a client side multiple connections and how that can work with Ganesha to achieve HA for that kind of case I'm sorry we have like two servers active active active active so you have multiple active nodes for example 510 and you need to reconnect to every time to different AP so you don't have pismaker you don't check the ability of nodes but you just once it failed you need to reconnect and you're using for like a wrapper for client to do multiple connections and okay, I don't I don't think I fully understand your question but I think what they're asking is about the IP connections for IP addresses that the client uses and multiple IPs so we the NFS Ganesha server has like virtual IPs we IPs for every multiple IPs for every node in the servers so yeah I mean that points you to a different like for failovers that's what points your different server so yeah one more question so we used for example kernel NFS for that for ages for some quite a time but we have this timeouts so once the connection is established it's not so easy to do the switch so we're always losing time and with Ganesha in user space is it something it will be easier, better than I mean from the failover part okay from the failover part okay I'm not sure about the performance okay but you know the logs are transferred to different servers so your data is preserved and yeah I mean the clients don't even notice the failure in a server but I'm not sure about the performance I'm sorry okay thank you okay that's it thank you