Hello everyone. Welcome to the first normal talk of the day by RubyConf putting me in this slot. They demonstrated two things one that they don't understand what I do in the evenings and two they give me a chance to give you guys a little advice on the whole rest of the conference. So those of you that do know me know that me that I am extremely logical. So I will point out two things to you. One is when you are sitting in the chairs it is recommended that you sit inward next to the people in the middle so that when people come in then they can sit on the edges and not have to stand in the back or on the sides or what have you. So just I would say throughout the rest of the conference try to do that because normally I come in to talks late and then I'm sitting on the side and then I have to stand the whole time and then my talk is next and then I've been standing for an hour and a half. So keep that in mind. The second thing is and I want you to try this maybe you've never done it before but you come to these conferences you fly across the world you fly from Europe from Asia or maybe just from the United States from the other side of the United States where things are so different but you come here to watch presentations you don't come here to work on your website or to chat with your friends or to be in the IRC back channel making fun of me so just once pull out a pad of paper and a pen and as you watch the presentations write down ideas that you have while you're watching them and I promise you that you'll have a completely different experience for the whole conference if you do that because I used to open my laptop when people were talking and start working and studies show over and over that humans cannot multitask we really really suck at it So if you're working you're not listening and if you're not listening then why are you even here? That's all I'm gonna say about that My name is Tom Preston Werner. I co-founded github two years ago and Since then it's been amazing. How many of you have used it?  I was gonna save the hand raising for a moment from now, but you can do it now Unicorn yes, let me tell you a little story about the unicorn the reason that the unicorn came into being is because the unicorn means Stuff is really really wrong. So when you see the unicorn instead of the octocat it means Stuff is bad. He came about when we moved off of engine yard on to our chartered architecture, etc He tells us when the unicorns are not even Processing or doing anything. So that's why we have a unicorn now This talk is called Bert and Ernie scaling your Ruby site with Erlang however before I jump into that I'm gonna do a little bit of a derailment to something else that I feel is very important it needs to be talked about in our community in all Programming communities and that is that I believe that NIH syndrome or not invented here syndrome is a myth I get this thrown at me every once in a while Specifically because of what we're talking about today the Bert and Ernie stuff But when I hear it it makes me a little sad for the person that just said it So let me let me demonstrate By making everyone in the room raise their hands by asking you a question How many people here on a regular basis use light bulbs? Okay, everyone except the Amish people in the room How many people here use Transistors, how many people here use Ruby? How many people here use engine X for the sake of the video that was basically everyone in the room every single time So let me ask you then Let me ask you then If we use all of these things what was so wrong with the counterparts what's so wrong with candles Why did Edison not improve the candle my by making a better wick he went a completely different route Why did the guys the three guys that invented the transistor the solid-state transistor? Why didn't they just make vacuum tubes smaller? Why did Matt's invent Ruby? Why does he was so wrong with PHP and Pearl coming come on right? Just added a class system the PHP and you're done the point the point being is that Sometimes new things do need to be invented and I think that when people say NIH syndrome What they're really missing is the opportunity that these new things can bring to bear So let me tell you a story about when I was a kid. This is not me When I was a kid I used to play outside a lot I grew up in Iowa and We had a lot of rain and a lot of dirt and those are basically the things that I played with because there was nothing else in Iowa no offense But I would go out as a kid and I would play in the dirt in the mud and my friend Tim and I we would be playing in the front yard Coming up with concoctions and putting grass in them and I remember very specifically that once I said After I'd created my grass and mud creation.   We're always inventing things. We're always creating things in our minds We're always looking for the next big thing. We want to be special. We want to be important We want to invent things. So what is it that when we get older? We now start saying you created something new that looks like something that I'm using NIH. Why do we do that? I? Think comes down to different types of programmers So I think there's maybe three categorizations of programmers The first ones are the people who just work their day jobs. They're making websites They're writing bank software They're just doing it and then when they go home they play video games or they they do whatever right, but they go home They're not programming. It's just a it's just a job to them. They don't love programming. They do it for a paycheck We call those Java programmers the second type is The kind of programmer that uses everything that's available to them to create awesome software But it's more customer-centric. It's they're building websites for clients. You're building tools for people to use But you're not really distributing those you're just you're crafting them They're very nice pieces of software, but you're really just using what's available and creating something for yourself or to sell Or something of that nature And I would call those types of programmers craftsmen the people that rely on what's already there They like what's there they're using it and not really producing things for other people to use those are craftsmen craftsmen are great A lot of us are craftsmen My friend who's a computer programmer just took up woodworking and he's becoming a craftsman of wood I think that's really that's really enjoyable. That's a great thing to do. There's nothing wrong with this however What I think is more important is the third class of programmer which would be the inventor the person that is not Satisfied with what is already there the person that has to go out and create something new every single day Those would be the inventors So inventions I think are not always incremental It's not just make a better wick for a candle.  They got tri-quarters. They got spaceships. There's a giant canyon in Iowa But think about that and think of all the devices and inventions that they have in the future that we don't have right now There is a mathematical theorem of which I forget the name But it essentially states that if you have two points on a continuous function Then you are guaranteed that that path will go through the midpoint on the y-axis between them very it seems very intuitive So think about down here as the present Think about that think about that as the president and the future is up here and all along here are all the inventions that have to be made In order for us to get to the future If that's true if there are so many of these things Then I would suggest that each one of us should be creating that one right there create one in the middle All of these things need to be created and they can't all just be improved from what already exists Sometimes you have to create something new So you might wonder how do you go about doing this? How do you go about inventing things? Maybe it's not really something that you're used to maybe you're a craftsman and you haven't invented a lot of stuff lately So what is the process by which you create new things?  I'm a very picky person when I use software if there's something wrong with it. I get Angry Maybe not angry, but disappointed or finicky. I just it doesn't make me feel good to use it There's a lot of software out there like this the API is weird or it doesn't do thing X or Y that I need and a lot of people would say well Why not just use it and maybe add a little on top and that'll be perfect a lot of these things aren't that way So step number one is Don't just accept it Don't accept the things that are wrong in your world Think about them write them down on your little pad of paper every time you think of something That's annoying when you're on an airplane and something's annoying write it down and then invent something to fix it Every time something annoys you is an opportunity for you to invent something new that fixes that problem step number two when you are Thinking these things these things that annoy you or whatever Recognize that you're probably not the only one that has that feeling If there's anything that I've learned from the open source that I've done It's that if I solve a problem for myself. I'm probably solving it for someone else And that helps me go forward on a project For instance, I created a project called God. That's a process monitoring framework I created that because I didn't like monitor I didn't like the syntax of the configuration files. I didn't like the way it was managed I didn't like a zillion things about it never worked for me I couldn't get it to run on one of the servers that I was running all of these little things Added up and I said well, maybe there's a better way to do this. Maybe I can do this completely differently Maybe I can do this in Ruby with a better syntax. That's just Ruby for the configuration file where I can actually use loops and things What a concept but these Are the kinds of things to think about and it turns out a lot of people have these similar types of frustrations And so a lot of people use God to manage their servers And it turned out that that was a good project similarly something like chronic which I wrote which is a time parsing library There was nothing there that did what I needed there was date that parsed But you can only give that a very strict set of things to do So I said well, maybe something new needs to be done and I didn't even look Very much at what existed because I wanted to just blank slate it I wanted to say I don't care the approaches that anyone else is taking This is a case where sometimes reading the manual is Something not to do you have to be careful. You have to choose those carefully and say I want to do this my way without Relying on what other people have done the approaches that they've done. This was also learning experience for me to do this But to give it a new approach a Completely new implementation for date parsing that you can use in Ruby and just pass it natural language So pay attention to the things That you don't like and realize that a lot of people probably don't like them either And the third thing is Spend some time thinking I was just on an airplane a lot over the last 14 days in Europe When you're on a flight you can do several things you can watch a movie you can read a book You can sleep but what I like to do is just sit there and think with my eyes closed And a pen in hand and a little napkin that they give you in front of me Just think about things when ideas come to me I write them on that little napkin and then when I get home I pull out that napkin I say hey look at all these little things I thought about actually I was thinking about some of the things for this presentation on the way home I Wrote them on a napkin and now they're in this presentation So take some time to just think about things think about the things that annoy you think about the things That could be the things that need inventing that don't exist yet and then To choose the ones that are relevant It should be almost obvious to you which ones are relevant They should just feel right use your intuition if something that you're thinking about feels awesome to you Then it probably is sometimes it's not sometimes we're a little eccentric and we're weird sometimes It's oh sometimes that's not true, but often I find for me at least That that's almost always true so it feels right Give it a shot and see what happens Okay, so now that we know how to invent things going to talk about inventing the new GitHub or specifically the new backend for github that runs the site right now Maybe you're on github right now because you didn't pay attention to me and you're actually working if you are You are using all of the stuff that I'm about to talk about So as many of you know, we recently moved off of engineer to rack space We did this primarily because we needed more flexibility in the hardware that we could run We are now running 17 hardware machines that run github So let me explain the problem that we had The problem is essentially this this is what the site looked like on engineer in a much simplified view We had a load balancer that distributed requests to several front ends Those front ends would then use the library that I wrote called grit That is a git binding for Ruby. It uses grit to communicate to the shared file system So every server every front end Had access to what looked like a local disk. It was actually GFS red hat GFS We're in this shared file system All of the front end machines would connect to that system the problem with this is When you start connecting a lot of machines to GFS like we did and you start just pummeling it with IO Like we are doing just insane amounts of IO always reading off disk to get information about the git repositories If there's any problem at all in GFS if there's a locking problem Or if one of the machines goes down and the fencing isn't right the fencing is what takes of Server out of the lock pool for GFS when things go wrong, then you're totally and completely screwed Because everything in that whole system relies on that shared file system So when anything goes wrong throughout the whole system the entire site goes down and this is bad. We do not like this So when we moved to rack space we decided that we would eliminate shared file systems We would get rid of them completely and we would move to some sort of federated or charter disk system So essentially what we want is something looks like this load balancer sends requests to a number of front ends Which now make Calls somehow to get the information from the git repositories to many different file servers And this as you'll realize is the fundamental principle of scaling Cheaply which is take one thing and turn it into many things This is how we spend a little amount of money and get a lot amount of scale Because these are just these file servers. You can just be commodity machines each one of these costs something like six hundred dollars a month at Rackspace and it has 1.8 terabytes of storage that's rated for 0.9 Terabytes of storage on each one of these and they still cost very very little in the grand scheme of things So how do we do this? How do we say? Here's front ends here's back ends or file servers whatever you want to call them And how do we get the front ends to talk to those file servers in an intelligent way? How does that happen? Because before it was just all local disk access. It was easy use grit repositories there call it a day But now something has to happen where the information from your repositories has to travel over the wire to the front end Instead of information back and forth. So there's two problems. There's two problems here. One of them is How does each machine? How's each front end machine figure out which back end machine to talk to? Because your repository could be on any one of these four file servers completely arbitrary So what we did is we introduced a routing proxy that all of the front ends connect to directly and Then from there It's redirected to a specific machine. We do that using a project called proxy machine that I wrote Fragments that you can go to to check this out. This uses event machine So it's super super fast event machine if you haven't used it is probably the most amazing piece of software in the world It means you can write fast Servers in Ruby because all of the event stuff is written in C plus plus I guess but The idea behind proxy machine is that you can use a little snippet of Ruby to become a router For this proxy so front end connects to the proxy Proxy takes whatever is in there Extracts a piece of that information. This is what we would call layer 7 or content aware routing It looks at it inspects the request it figures out what user you're talking about It does a look up we use Redis for a routing table and the information about where your repository is stored is in Redis pulls that out figures out where Your repository is and then just establishes a straight proxy with the final file server At that point stuff just goes back and forth like normal and you're done Everything is in C plus plus it never touches Ruby again at that point. So it's extremely extremely fast and very very stable the second problem is What What is going over the wire? What are the bits that are crossing this chasm? How do we do that? We decided to use a very simple approach that worked with this architecture, which is a very simple RPC So that the front ends can just make a call to the back end and say give me information about something by doing this we maintain Kind of a single picture of our application a very simple serialized Traceable stack through the whole system through this you could use something like a MQP for this we decided not to I don't think it's a specifically appropriate choice for this application Particularly because we're often transferring megabytes of data over that wire. We don't want to store that somewhere We'd rather it not be stored anywhere and just be immediately returned to the caller and because we're using Ruby everything is Generally serialized anyway. It's not a whole lot of parallelism per process So this solution fits pretty well So it came time to choose an RPC mechanism, there's about a billion of these out there things like thrift and protocol buffers Corba json RPC, etc. etc. and list goes on and on When I was looking at thrift and protocol buffers those were kind of the first things that I looked at I'd use thrift a little bit before at power set where I used to work the main problem here is IDLs or interface definition languages. These are the Specifications that you write to say here's the calls I'm gonna make and here's the schemas of those calls and you express in intimate detail your complete knowledge of this whole RPC mechanism that Then forward every developer on your team will have to have intimate knowledge of and modify every time any of these calls ever changes So as you can see from my vitriol, I'm not a huge fan of IDLs. I don't think they are appropriate for my needs or for the needs of many small businesses of teams that are small enough to where You're using agile practices You're using things like unit tests Basically doing things the Ruby way. I don't think that's something that's necessary Maybe for giant companies where things are talking to everything else and every department has to know kind of what things they can use Maybe these IDLs are actually useful, but they're not useful to me The other thing that I don't like in a lot of RPC mechanisms is code generation You take these IDL files and you plug them into some Program and on the other side comes just thousands of lines of stub code For your RPC calls and then you call them just like you would normal Code in your application and then magically things go over the wire and you're done The problem with this is one that every time your IDL changes you have to Generate this code if you're using a static or a compiled language now. You have to compile this code It's a lot of steps And sometimes this generated code is pretty bad because you have the authors of these systems writing these Generators for languages that they don't even really know One example would be the Erlang bindings for thrift were some of the most horrible code on the planet This is now perhaps remedied But it's a lot of extra work that someone has to do to write these generators to make this code The machines wrote the do stuff and hide stuff from you and makes things magical. I don't like any of that I don't like that whole process Because what I want to do as a programmer is make a call to something that exists on the back end And if it's there it works and if it doesn't it throws an exception just like every other day in my programming life And Ruby if I want to call a class or if I want to call a method on a class I call it and if it's there it works and if it's not it throws an error So I started looking at JSON I like JSON JSON is really nice. I especially like the concept of taking a piece of a language a Notation in this case take that and just rip it right out of the language that it's from and say hey everyone Whatever language you're using now you can use this For inter-process communications. I think that's a cool idea because it's something that already exists It's already been shown to be useful a lot of people use it It makes things in certain languages super super easy Target languages like JavaScript if you're consuming JSON and JavaScript It's ridiculously simple to use it So I was thinking about this on an airplane perhaps I don't remember and I was thinking about the work that I did on a project called ear electricity which allowed you to Kind of glue together Ruby and Erlang you could make a Ruby program that would act like an Erlang node and send it messages and respond to it But you could write all of that in Ruby. So it was really nice for those things that you wanted to write really fast And you didn't need the high concurrency kinds of things that Erlang gave you use Erlang for the high concurrency server type stuff That makes all that threading nonsense go away And then you use Ruby for your application kinds of code where you actually need to get stuff done So I started thinking There is something in Erlang Let me take a minute. How many of you have written Erlang before ever? Quite a few maybe That's awesome. I had the pleasure of meeting all three of the guys from the Erlang movie Joe Mike and Robert and They're all amazing people. I Met Joe Armstrong at the Erlang Users conference in Stockholm about a week ago. He is one of the most animated intelligent and Awesome people I've probably ever met this guy is is truly very very intelligent. It was it was truly a pleasure to meet him I'm a big believer in Erlang. I've been using it for More than two years now maybe two and a half years How many of you were actually at the Ruby conference where they showed the Erlang movie as a joke? Guess who the jokes on it's on Ruby Because Erlang can do things that Ruby can't even dream of You can write servers In Erlang that put Ruby to shame now things like event machine mitigate that a little bit That machine is really really nice if you want to write servers in Ruby You better damn well be using event machine because if you're trying to use threads and some sort of server with Ruby Just give up just throw that code away and start over with an event machine. I promise you you won't regret it But if you're writing really sophisticated servers that need to do all kinds of crazy stuff and Have really heavy concurrency and and take just ridiculous numbers of connections Give Erlang a shot. It makes dealing with multiple paths through your system and spawning up functions Doing the kinds of things like forking off a process for each connection Makes that stuff really really easy So I was thinking Erlang okay Erlang has something that it calls the external term format And that is a serialization that it uses to do certain kinds of communication between nodes and other types of things This is a very simple serialization. It just takes each of its known types It has little identifiers for them. It looks something like this So you have a small array on the top that would be an Erlang syntax Called a term in Erlang when you Serialize this using the external term format. You can use the call in Erlang is called term to binary And then you put in the term in there and it spits out a binary these little these two angle braces here That's the the binary syntax. So in Erlang this is a binary It essentially looks like this. It's very simple the 131 is like a magic number the 107 says hey You're about to get a a small array 03 says the size of the array and then 123 is the content. So it's very simple That's essentially what the protocol or the serialization looks like It supports all of the types Basically of Erlang which are these things like integers and atoms and it even has references and ports You can even serialize functions in Erlang and pass them around So I was looking at this. I wrote a C version of the decoder and electricity to make the process of decoding The external term format a lot faster for electricity since we were using it I used it with Dave Ferram on a project called fused. It was a a server an Erlang server front-end for Rails applications used yaws or milky web to do that So I was thinking I Have this RPC situation I don't like a lot of the RPC things that are out there Jason RPC has problems where it doesn't have first-class binary Serialization you have to convert everything to base 64 and that's just conversions and dealing with Unicode and all that is just a huge pain in the ass so I Wanted a binary serialization and yet the binary serializations like thrift and protocol buffers I felt really lacking because of things that I already mentioned. So I said what if What if I took that idea from Jason where you rip something out of a language and say hey everybody use this and applied it to Erlang What if I took The external term format and I reduced the types that it supported To just the ones that were common across all languages to remove things like The functions in the end and the PIDs and the references and all that stuff that things like Ruby and JavaScript have no idea What the hell those things are just remove them, but keep the rest of the protocol the serialization protocol exactly the same What if I did that made a little specification around that and gave it a clever name and said hey everybody use this So that's how Bert came into being for his binary Erlang term Much like Jason. It's like a name right it's name like I guess Bert is a name all this way pretty uncommon Got Jason. You've got Bert now So here is an invention that I have something that I thought might be useful. I think This is something that is really useful in general to a lot of people a binary serialization That's an extraction from an existing language Already proved to be useful as really rich types and can be used for all kinds of serialization and transport things So let me talk about Bert for a little bit here are the simple data types in Erlang syntax You've got these guys in splotes atoms tuples bitless lists and binaries and on top of that I Said well, these aren't really Complete I would like to be able to send things. I would like to be able to serialize things in different languages like Hashes for instance here. We have nil There's actually a nil in the extra format that's specified But it is just the empty array and so disambiguate for other languages We wrap it in these complex type each complex type starts with the atom Bert To say hey, this is about to be complex type So that's the only reserved word in all of the Bert serialization And then we say you can have nils Booleans are just true or false dictionaries look like this You can serialize times and because I'm a little insane you can even serialize regular questions So again, this is exactly what the external term format looked like. It's no different. It's completely the same But now this I would name a Bert if you look at it with a certain pair of glasses In the Bert style, I would call this a Bert because the two are compatible Just the Bert is a subset of external term format So how do we send these Burt's over the wire while we send them with burps of course burps our binary Erlang packets It is simply just the Bert with a four-byte header that represents the length in this specific ordering So zero zero seven and then seven bytes of stuff very simple There's four bytes always four bytes that allows you to send quite a bit of information over the wire before you hit the cap And if you're sending that much stuff over the wire, then you probably shouldn't be using this stuff So now that we have a serialization for data And a way to send them over the wire. How do we use this to solve the RPC needs that we had? We do that with Bert RPC Bert RPC is a super simple RPC Formalization that we now use on github. I'll go over real quick in the first Place here in the tuple You have either call or cast in this case. It's call that says I want a response from this call Then you say here's a module. So in Bert RPC, you can have separate different modules So maybe one module that does communications for one system and another one for a different system Just to keep things apart if it was just a function you'd have only one namespace this having a module Give you two namespaces because the next item is the function name that you're calling and Then the next item is an array of arguments if the if there are no arguments and that would simply just be an empty array and From this you're always going to get a response If it is a successful response the first item will be reply in the tuple and the next item will be whatever term It is that was sent back in this case the addition of one and two is three The other thing you might get back from this call is an error Go error message. So we say error This is a server type error of this error code And this was the name of the exception and here was the message of the exception and here's the stack trace of The exception so you will get either reply or an error back We talked about the burps in RPC everything is transferred as a burp a burp is just The bird RPC burp is is simply just a normal burp, but you're using The term that represents the RPC call figuring out how long it is and prefixing it with the correct header So if you look at how that looks on the wire, it looks kind of like this Make this call It converts to this bite sequence that goes over the wire And then you get this bite sequence back and that represents this in the Erlang syntax Similar to calls is the cast the cast just says this is like a call. It is no different than a call except I Want the server to? Accept the request and then immediately send back no reply just the atom no reply in a tuple That's all it's going to send back and then on its side It's going to queue that up and process that whenever it's ready and whatever it would have responded just throw it away I don't care. We use this a lot in github to isolate Systems that could possibly fail and cause trouble like reporting exceptions We have something we call fail bot, which is a server that accepts RPC These bird RPC requests as casts and says report this exception And then that the server descends the response the no reply response back and then all of the HTTP Posting all the failures that could possibly go along with that are completely isolated in a separate system You can use the cast for things like that so a module function arguments and no reply back done For advanced things in bird RPC We have informational burps Which can do advanced things like this is the kind of what they look like Things like streaming you want to stream stuff over the wire like big files You can do that with bird RPC. There's a specification for that. It looks like this first you send an info burp This is info. This is going to be a stream. There are no arguments for this specific Informational burp you make your normal call and say hey, I'm going to send you a file called a dot jpeg and Then you send n bytes you send an n header which says I'm going to send you n number of bytes You follow that by the actual bytes When those are read Then you do that over again header content header content and when you're completely done Then you just send a four byte zero header So just zeros all the way across for four bytes and the response comes back like normal You can do this in reverse or streaming replies. That would be downloading stuff looks exactly the same Visually it looks a little bit like this. You say here's my normal bird RPC burp This would be the info and the normal one And then you've got your header and your bytes and your header and your bytes and your zero bytes when you're done Other features of bird RPC are things like asynchronous casts with callbacks So you can say I want this to be a cast But I want a response to go to another server somewhere else and by sending an informational burp with the callback information Then your server can then make a bird RPC request back to that callback address with the response that you would have normally gotten But you do it asynchronously. It's out of band There's also some advanced caching stuff. I don't have a lot of time left So I will allow you to look at that but there's expiration based caching and also validation casting Which is like the expiration the normal TTL stuff in HTTP as well as the e-tag stuff It allows you to handle complicated validation really elegantly so the philosophy of these systems is simplicity To write a bird RPC client or server is really quite trivial because the specification is so small There's no code generation. There's no IDLs I mean you could write them but the philosophy is not to the philosophy is to say use bird RPC Just like you write normal code. So simple simplicity plus Functionality what is the most amount of functionality for them with the most amount of simplicity that we can create? And I would call that bird RPC So let's look quickly at some implementations of these. This is exactly what we use on github The one I wrote is called Ernie Ernie is a bird RPC server. This is a complete specification. This is a complete code file for an Ernie server This gives you full RPC functionality on the server side you say require Ernie There's a module named calc and a function named add it takes two parameters Those are a and b add those together and whatever that happens to be returning. That's all it is Six lines of code you run this with this command here You say Ernie demonize it run it on port 9 9 9 9 Spawn 10 Ruby processes that are running that handler and Then balance between them or you could run 10 20 or 30 or a hundred of these whatever is suitable for your specific task Dash H says use this handler the calc Rb file that you just saw there is a and I'll show you that in a second How that actually runs? There is a Burt implementation called Burt it looks like this you just say Burt that encodes some Ruby value and that returns the binary and an Erlang syntax is the second one there Encode an array it looks like that encode a tuple There's a little syntax for tuple where you just Prefix an array with a T and that tells the Burt serializer to turn that into a tuple instead of an array That looks like that and then encoding things like times that takes a little more space But it looks like that Burt RPC implementation so you fire up that Ernie server you want to call it and get data back Well, that looks like this Burt RPC service new Here's the host It could be local hosts or whatever the name of the host is the port It's running on and to call this and this is where you see the simplicity of the system and no co-generation and no IDL You just say SVC dot call that could be a dot cast if you wanted to cast it SVC dot call or dot cast Calc That's the module name add that's the function name and the two parameters and guess what you get your response back That goes over the wire with Burt RPC using Ernie and Burt We've got like 12 lines of code for a full Burt RPC server client relationship extremely robust using All of this code I'm going to demo this real quick running out of time. However, I really want to show you this because it's awesome There is there is Erlang so here's how it works So this is so the thing with Ernie is Ernie is a hybrid system Ernie is Part what the so here's Ernie This is how we started up so Ernie is a hybrid system Ernie is a Ruby gem You just do gem install Ernie and you've got it you've got your Ernie binary, but that Ernie is actually Erlang so what it does is I created a way to package up Erlang applications into a Ruby gem and then it just uses the normal compilation stuff But instead of compiling some C extension. It's compiling Erlang now. You've got an Erlang server That's doing all the balancing and whatnot and then Ruby Handlers that it will balance between for all your calls You start like this this says Run this run eight of these Believe it or not that was actually successful And then you call it like this, so I got this loaded already you say SBC call There's a This is the this is the handler you got the function add it looks like exactly like that and you've got this log file You can also specify you can also specify a log file In Ernie, so it'll spew that out. Let me drag this over This is So if we run this command and we say give me call that test out bytes and all that does is just generate that many bytes And then send it back over the wire if you call that okay, you got x comes back right really fast Wow RPC If we look at the log it looks like this so we can see that that actually ran I return This is this is what it received. This is what it sent back Everything is awesome So real quickly This log file line up this guy So that loads that guy back up and then if we find This is a little this is this called event. This is a little benchmarker. I wrote for RPC This is gonna say this says make 5,000 calls using four Four processes in Erlang. This is a little Erlang benchmarker It's gonna run that and then it's gonna give us some stats about how fast it ran So here we go. It did 5,000 requests at 2476 requests per second through that process Tada I'm really out of time. So I'm gonna blast through these super super fast This is how many requests that github has done through this whole process so far since the launch 626 million actually probably like 640 million now. I did this number yesterday There's a bunch of implementations in a bunch of languages if you want to help if you like this stuff and you want to help write an implementation of Burt serializer or Burt RPC client or server in your favorite language That is the best way that you could possibly help this There's a mailing list where we can talk about for 2.0 and the things that are gonna change There's gonna be some new stuff that I'm gonna add and maybe deprecate some stuff This is the URL you go to Burt dash RPC org To find out all that information The architecture stuff that I talked about was very very very basic if you want a more Specific covering of that just go to Google search for github fast And you'll find the article that I wrote about how we made github fast and now that you've seen all this and you're stoked Go invent something new. Thank you


I am ABEAN Sylvester. I am on a HAB team. A HAB team is the Burden Reconstruction Team as well as the Deconstruction Team. We take apart all the, not all the burdens, but a good majority of them, the older ones, and then we will be replacing them later on in DPA. Today we tore apart this Chief Burthing, all the racks and the lockers and linen hampers. We got rid of, cut up, passed down, gets taken down to the Hangar Bay where it's wrapped on pallets and then it's shipped off to be recycled. It's good work. It's not difficult, but it's a lot of very little things. This Burthing we think we did in about three and a half, four hours or so, which is very productive. Everyone's working. We get a good train system going where we just take things apart and keep passing them along and it gets done relatively quickly.


Hi, it's Bridget. Welcome to Above Life's channel. The purpose here is to inspire your spirit and to fill you up with hope. This particular video is not a channeling video. So if you'd like to just stop watching now, go ahead. Oh my goodness, you're still here? Awesome! Thanks! I wanted to share with you a couple of updates. First of all, you may have noticed in one of the recent channeling that I did that I referred to and talked about my braces. Yes, I got braces recently. Now, they are the clear kind of braces. I'm gonna get in real close. So if this grosses you out, just turn away. Turn away for just like two seconds. I got clear braces. Kind of cool. I actually have rubber bands, too. Did you know that rubber bands with braces actually help adjust your jaw? And that's the primary reason why I got braces. I actually created an entire blog where I've been vlogging each day my progress and my experiences with my braces and I've been tying them to life themes or life lessons. And I shared that at my Facebook pages, the Facebook page of the purple medium on Facebook. I shared it there. And funny thing is, kind of a total accident, I uploaded a braces vlog onto Above Life Channel. So if you were watching right away on Monday morning at 9 a.m. when Bridget uploads her videos at Above Life Channel, did you catch that, you guys? I just told you on Monday, Monday mornings is when I make the channeling live for the week. Usually it's right about 9 a.m. Right around their central standard time. Usually that's my target. Okay, I try, but sometimes other stuff happens and I can't, but I try at that time. It always happens on Monday, but I try. 9 a.m. If you were right there waiting, waiting, waiting for what I was going to share this week, you might have seen one, you might have been one of the people that saw that I uploaded two videos. They were both channeling with the Bee Gees and one was like a pre-channel where I kind of vlog style in my kitchen. I was making lunch and I wanted to get some of the information on video because it was just coming in. It wasn't technically a channel. I didn't call it a channel. I called it a pre-channel, but I was wearing the same shirt standing in the same place that I had just done my braces vlog. And so usually, you guys probably noticed this, but usually if my hair looks exactly the same, my makeup looks the same. And in a video in the background looks like exactly the same. It's probably a good chance that I recorded them on the same day. And I maybe just changed my cardigan or I changed the color of tank top or shirt I was wearing or I changed my jewelry. That's another way to kind of notice. Although I have kind of favorites that I like to wear all the time anyway, but I'll change my jewelry. I didn't. And so I totally uploaded the wrong vlog, the wrong video. I uploaded a vlog for my braces instead of a Bee Gees pre-channel. So I was like, whoa, they're probably like, I think there were eight of you. I saw that eight people had started to view it. And so I'm like, oh no! So I went in and I had to upload. I had to find the right video and upload it. And that takes like 15, 20 minutes. And then I had to do the description and the tags and all that. YouTube lingo guys. YouTube lingo. And put it on. And I was like, oh geez. Okay. Luckily, I'm sure not everybody even noticed that. You wouldn't have even known if I wouldn't have told you, but that little snafu happened in part because I've been trying to do so much because I've been trying to catch up because I wasn't feeling well last week either. So that's a second update. So the first update is I got braces. And these are actually liners like clear braces. So they're trays. So I change them out every four days. And right now I'm just wearing them because I wanted to show them to you. When I do channeling, I've been popping them out and I talk just normal. Just fine. It's totally fine. And so right now you might notice on my S's or my P's when I announced Above Life Channel and I talked about inspiring your spirit. You might hear that S's a little bit. And it's only been like it'll be two weeks tomorrow since I've had them. And again, I change the trays every four days. So now these ones are new for like a day and a half. I've had them. So they're real tight. And so I'm trying to get used to that. So I may be adjusting. The way I'm enunciating my words. Usually I speak pretty clearly if I think about it. I'm conscious of what I'm saying, but I speak fast. But that's because it's a Midwest thing. That's just my style. So the update is braces.  So if you submitted, if you sent me an email for a session request and I still haven't responded and it's been like four or five days, I'm sorry. I'm sorry to keep you waiting. I am. I'm genuinely sorry. I don't like to keep people waiting. I hate that. I'm not the most patient person myself. And so when I can't respond to you like quickly, like in a couple of days, like, because let's be honest, sometimes it's interesting. I get emails and spurts. So I'll get big bundles. All of a sudden I'll get I'll get like 10 or 15 or 30. And to go through them, it can take some time. And I don't respond to all my emails. As you know, I have actually two email addresses for above-life channel. One is a general email inbox. So if you just have a story because people like to write me in really write me, like paragraphs and paragraphs of information and share a story. And I understand that when you're inspired by something and it touches you and you want to share your story, you can totally share it with me. That's fine. But I can't respond personally back to everyone. I just can't do it. I literally can't do it. It's not it's not a good use of my time. And I need to be able to produce content and to do sessions and I work in my sessions like this is my job. This is my job is to do private session work and I do classes and series and retreats and online small groups and things like that that you guys don't know that much about. I haven't shared tons of that with you guys. But that's because above-life channel is just a channeling. It's a channeling place and it's like a free content here for you to be able to watch. And so that's that's why I don't really talk about all that that much. I probably should in the future a little more so people kind of understand. But a lot of my private session work is is when so the emails I've been getting I that's a priority. Those are priorities. And so that's why I have a email specifically for sessions, sessions for Brigitte and so and usually when people request a session with me, they've already been through the process of looking at my services page in my website. So they know how much it is. If somebody just sends me emails it's how much is a session. I don't usually respond because I don't have the I don't have the staff. I don't have the time. It's just not a good use of my time just to go Oh, it's this much. And then they'll ask me more and then we're back and forth. I'm like, no it doesn't work that way because I have it's not very efficient and It just doesn't work very well. So So anyway, so I'm trying to catch up on that I feel bad about that. That's like a thing I have I like to I like to be prompt and if I'm not there's usually a good reason like there's way too many or I'm sick And it just happened to be spring break week for my kids last week. So I had already scheduled a Light week for myself with sessions. So I was able to maintain my sessions Which was my priority last week people that had paid to request session with me It takes like a month to get in with me Okay, it can it can anyway every once in a while I I'm able to open up more session time because if my projects are moving clearly like if I schedule a day for Channeling and I'm I'm feeling good about how much channeling I've been doing and I have a nice Cushion of channels that I can share in the future Gotta have backups in case something happens and I need to make sure I can do it Like if I lost my voice for like two weeks, that would be awful So I can't I have to make sure I have a little bit of a cushion there at above life here. So I I'm pretty happy that I Have been able to maintain that everything's been very consistent there That's really important to me a top priority But if I can if I don't need that extra day for channeling then I can open it up for sessions So sometimes I can have sessions that are available like next week or two weeks from now But usually it's a month to six weeks out right now I don't like to schedule too far beyond that because I think that's too long to wait for people People could change their mind or need some information More quickly and then and to be honest I might not be a good fit for everybody and everybody is now my client. That's for sure Let me just tell you that I don't I don't work with everyone that requests a session with me because I can feel if There's a difference in the energy not everybody is my client. So I I want to make sure too that I I Hope people I hope you if you're one of those people that you won't be offended you might be but It's really not my business if you are or to make you feel better if you are but I am I Consider myself to be a nice person and a caring person and I do care about how other people feel and I take that into consideration but when the sheer volume of requests for my time whether it just be to share your story with me or To to request a session I just have to be efficient you guys and I do try to read my stuff Just so you know like I I skimmed through my emails. Hey, I know you guys are gonna be disappointed If I don't respond to my email for you. It doesn't mean I didn't read it, you know It's just the way it is, you know, especially when you're in a public forum. I think a lot of people really appreciate that I Feel like I'm really accessible and I think that's really sweet Like that's the best compliment I could ever have and I don't take that lightly Like I want to continue and maintain the quality of the connection that I have with you But there be it through just this video and know that that's enough you guys that is enough There's a beautiful energetic connection. That's awesome. And if you feel the need to reach out to me, that's cool, too That's fine. I I will totally honor and value I recognize that you took the time to share and I I feel that and I'll honor your story and whatever you share so Anyway, so that's the thing. Those are all the updates. I felt like I should do that I am actually going to post this video the week of March 18th because I am actually recording it on March 18th 2019 and so Yeah, I felt like I needed to do that again This is not a channeling video, but it's kind of a housekeeping video for those of you who actually like want to know me as A person and not just as a come on lady get to the point get to the channel. Stop talking.  I got to be careful here Sorry, I'm sorry.   Thank you so much for watching if you've made it this long Congratulations in this video. Congratulations for watching this long I do appreciate you and I feel you I do I genuinely feel you This is Bridget at above life channel. Thank you so much for watching as always. I deeply I do I deeply Appreciate it. Thanks for being here


The world is shaped by ideas, by people with vision and will, minds that question and wonder and solve, minds that helped cure the sick, flew us to the moon, conveyed our voices across oceans, put the power of a supercomputer in our pocket, and left us dreaming about what might come next. Berkeley, we dream about improving life for people everywhere, inspiring young minds to create, helping the disabled walk again, bringing power and water to rural communities, rewriting our genetic future. Today, humanity faces unprecedented challenges, and the world needs new solutions, solutions that move beyond millions to impact billions more. At Berkeley, we're finding solutions for this interconnected future. We are doing this by asking one question, what can we change in a single generation? Can we provide clean water to everyone? Can we cure cancer? Can we feed every hungry mouth? Can we ensure everyone has a voice? Can we become carbon negative? Join us on a journey in search of these answers.


All right guys, welcome back to another monthly favorites video. This is our September favorites where we talk about what we have been loving in September and honestly, even though we both have been sewing up a storm, neither of us have really tried a lot of new things or really been like over the moon about something this month, which I guess just kind of naturally happens. So we both really struggled to come up with favorites for this month to be honest. So we decided that we would just do one each and talk about the one thing that we've loved and that way it would still be true to the video in terms of it being absolute favorite, you know, without us just kind of like forcing it and trying to make up something. So I guess you could look at it as an unfortunate thing that we only have one favorite, but I hope that you'll appreciate the fact that we didn't just like phone it in. Yeah. So all right, what is your favorite? Your favorite. I talked about this before in some other videos, I believe. I have an obsession with French Terry. I love French Terry. I think I love it so much because I love to feel comfy cozy and I don't know if it's because we live in Charleston and it's so hot, so long that when it finally does cool down, I'm like, I get to wear my cozy comfy clothes. I think it reminds you of home. Maybe you might be home where it's cold most of the time. And then I love the things I do in my comfy cozy clothes. I love taking Piper for a walk or just like going and sitting outside a coffee shop and relaxing. I don't know. I just a pretty chill kind of person. So I love the things I do in my comfy clothes, but I have a new French Terry that I'm really loving. It was just released in Style Maker fabrics fall collection. So I got to sew it up as part of the blog tour. I love dots. So dots paired with French Terry. Oh, I also love great French Terry. It's just was perfection for me. So I sewed up the paper cut patterns hoodie.  I'll be doing a full blog review on my hoodie and the outfit that I made for it. But when I decided on this fabric and was telling Michelle how much I wanted, I convinced her to go ahead and sell me three extra yards of it before it was released. Before it was even on the website. So I have three more yards of this fabric. I know that sounds crazy. It's a little crazy, but I there's just some other things I want to make with it. Here's my reasoning. This I can't wear this to work. Right. It's a hoodie. So I need to make a top that I can wear to work. So I was thinking a bowline top would be really cute. I made that for the last Style Maker spring tour. I really like that pattern.  So it's super cute. If I don't make that, Lindsay says I'm only allowed to make one more top, by the way. I have some French terry that I also convinced her to go ahead and sell me because it's a perfect match for the dots. It's like just perfect. I have a pattern that the seams wrap around to the front. It's like a twisted seam front. I will put that in the box below, but I saw a top on Pinterest and they did stripes on the front and dots on the back. And it was a similar kind of seaming where the fabric from the back is drawn to the front so you can see it. So I was kind of thinking about that too. So I'm not really sure if I don't use this for that, then I'll just make some sweatpants or something with it. So I like the second shirt idea better than the bowline. The better than the bowline. I don't know why, but they're so perfect together. Well, yeah, I feel like, yeah, they should be made. Yeah, you're right. That's what it is. They should be made together. And then this just makes perfect sweatpants, I think. Yeah, it would also be really cute out of the butter dress that I mentioned in our favorite fall patterns video. Yeah, I was torn when she helped me decide on this hoodie. As she helps me on most things, I was torn between a sweater dress and a hoodie. Yeah, with the hoodie. So a sweater dress would be awesome. Yeah, I basically designed and styled for her entire outfit came out super cute. I really love the athleisure wear look and the paper cut patterns, they do a really great job of styling their models. So I kind of copied their whole look. Right down to the sneakers. She's like, boy, those sneakers are cute.  Yeah, you totally help. They're very, very popular, like lots of super wear them. She's super trendy. So she always knows what's going on. So she told me exactly what they are within seconds. They're the athitas superstar shoes. I went with white just like the models wearing and well, Lindsay also helped me decide on white because I can make no decisions on my own. She said to be a little more classic. Yes. So I think this could be worn with a lot more. I was actually picturing it with like a shirt dress. Absolutely. Yeah, 100%. Yes. Yeah. I think I could really go with a lot.  So I don't know. I feel like, yeah, you can wear those with lots and lots of different things that you would normally say are too dressy sneakers. I think nowadays those lines are a little bit blurred. And that's really what athleisure is all about. It's taking these silhouettes of things that you would normally associate with like dressy, like dresses and making them out of comfy, cozy fabrics and pairing them with sneakers. And there you have this whole athleisure trend, which is so fun. And I think it's really cute and it really helps identify like a personal style.  You know what I mean? So well, I hope I can pull it off because I got the whole outfit in my post. It's really, really cute. Yeah. So awesome. That's what I am loving. Well, the thing that I have been really using the most this month. And honestly, I really enjoy using is grommets and eyelets. So here's a grommet kit I have. These are really large grommets, but I've also got them on my dress here in the smaller grommets. They really have just, you know, popped up on and ready to wear. I feel like pretty recently, and now you're seeing them in all kinds of stuff. You're seeing them in lace up things. Abby used them for the drawstring holes. So instead of doing a buttonhole there for your drawstring or on your waist or in a hoodie, you can use them there.  So this to me is way, yeah, way, way, way easier. I pattern tested a jacket that will be released here shortly. And it uses waist grommets for the drawstring and the waist there. And I don't know if it's just like banging on stuff that makes me really like it, but I just think it creates such a nice finished, polished look. These that I have, these and these all came from Joann's. They don't have a ton of finishes there, mostly gold and silver. I have tried to source some online, but really all you can find are huge quantities. I don't need a hundred grommets. I like them, but I don't like them that much. So I'm still trying to find where you can get better finishes in smaller quantities. So when I, when I figure that out, I'll update you guys and update the description box. But yeah, I just am having so much fun adding grommets to different things. Another idea I had that I talked about, I think it was in one of our plan videos, maybe July plans, is a white shift dress with really big grommets. Gold ones just like, this is why I got these particular grommets, like four or six really big grommets. And you don't lace anything through it. You just have the holes in the placket. That's, that's a great, that's a cute idea that I have, but you can also put them like on hems, you imagine like a bunch of teeny tiny little like almost like an eyelet. I don't know, there's just like so many fun things that you can do with grommets to add details to your garments. And I think it really makes it take more like red twer, takes like your homemade handmade and it takes it more to that ready to wear level. Yeah. Yeah. I asked if I made this, which is really not something we ask each other very often because I think we just assume that we made it, but every once in a while something is, looks so ready to wear that you're like, did you make that? Yeah, yeah, it came out really good. It's a good compliment. Anyway, so those are our September favorites, one favorite from each of us. So hopefully with the whole like, you know, change of the seasons and change over and patterns and attitude and fabric and everything, we'll have a lot more favorites for you guys in October coming up. Yeah, exactly. So thanks so much for watching. Give this video a thumbs up if you enjoyed it. Subscribe to us so you don't miss a video and follow us on social media. We are at inside the hem everywhere. See you next time guys. Bye.


So a few weeks ago, I made a video about Samba and how it is not, you know, the greatest and I stand by that. I think that while Samba theoretically is very, very good, the implementation of it is kind of crap. And in the comments of that video, I received many comments like hundreds of comments just saying Matt, don't use Samba. There were many different suggestions over what I should use, but primarily the one that came up the most was SSHFS. Now I had heard of this, Brody made a video about it a while back and I know DT had made a video about it. So I heard of this, but I never actually looked into it. And I put it on my list of things to do and put it in a browser tab, in other words. And I decided that I would eventually come back to it and actually take a look at it. And I finally have had a chance to do so and I wanted to make a video about it. I want to show you how it works and everything that goes into actually setting it up. So that's what we're going to do today. But first, before I jump into it, I just want to point out that this project has been abandoned. It's unfortunate because it's actually fantastic. It's like life changingly good, but it is no longer being developed. So if that's something that bothers you, just stop here. You don't need to continue on. It does still work is where it is at right now. As of the time I'm recording this video, SSHFS still works fine on every distro that I've tried it on, which entails Gentoo and Ubuntu and Debian. So those three distros, it still works just fine on. So you should still be able to use it, even though it's no longer being developed. So now that that's out of the way, let's go ahead and jump in to begin with before we get started on the how to. Let's talk about what SSHFS actually is at the base level most simplest explanation, SSHFS is simply the ability to use SSH to mount a remote file system on a host. So for example, and the example I'm going to be using in this tutorial, I'm going to be mounting the file system of this VM, which you're staring at on screen right now, which is a Debian VM, I'm going to mount that on my host main machine, the machine that I use as a daily driver that has Redcore on it. The idea here is that you'll have the file system of the remote server on your main machine where you can access it and transfer files to and fro whatever you need to do. And it just acts like a file or directory on your system as if it's always been there. It's really quite cool and you'll see more what I'm talking about as I actually set this up. So how do you do that? So first, you're going to need a terminal. So open up a terminal. This is console. It doesn't really matter what terminal you're using, whatever your favorite terminal is. And you're going to need to on the server machine. And when I say the server server machine, I mean the machine or the distro or whatever that you're going to want to mount on your main machine. So this is going to be the source of all the files. On that machine, you're going to want to install open SSH server. Now depending on what distribution you're on, this is going to be a different package name. On Debian and Ubuntu, you want to do sudo apt install open SSH dash server. On Arch, you would do sudo pacman dash s open SSH. Open SSH on Arch includes both the client and the server. I'm pretty sure that's the case on Gen2 as well, but don't quote me on that. I'm not sure. There's a good chance that you probably already have open SSH of some flavor on your machine already. But if it's not there, you'll have to install it. Like I said, on Ubuntu or on Debian, in this case, we're going to do sudo apt install open SSH dash server. And then we'll press enter, enter your password, like so it's going to do that it will install very quickly. It's not very big. It just takes a second. And once that's done, the next thing you'll want to do is enable the service and start the service of SSH. So in this case, what we're going to do is do sudo system CTL and start SSH D enter. And you won't have any output for that from that, if it went through just fine. Now the next part here is going to be different than what it used to be from what I can tell my initial tutorial on this came from distro tube. And he said in his video to do sudo system CTL enable SSH D. But if I do that here, you'll see I get a failed to enable unit error. And I'm still not sure what this actually is from what I can tell I have something to do with symbolic links or something like that. I don't know. But the solution from what I from what I've been able to find is just to remove the D and replace it with dot service like so. And that's going to enable the SSH service so that you can connect to it. Now that should have the server of SSH of open SSH running on your system. And you shouldn't have to restart or anything because we started that in this line here. So we're almost done now with the server side implementation of SSH FS. All you have to do next is find the IP address and you can do that by doing IP ADDR. You're going to have to spell it right, which I can't seem to do now. If you're new to Linux, this probably looks like a bunch of gobbledygook. It kind of is most of it you can just flat it out. What you're going to need is this IP address right here and you can just copy that. And then we what we need to do next is actually leave the machine that we're on right now and go to our main machine. So I'm going to go to another workspace here. I'm going to enter and I'm going to open up a terminal. And now what we need to do is create a mount point. So on your main machine where you want to mount the file system, what you're going to want to do is create a directory where you can mount the file system of the remote machine. So in this case, you can do it pretty much anywhere. A lot of people want you to do it in slash MNT. I'm going to go ahead and do it in slash MNT because that's where I've kind of just been doing it, but you can mount it basically anywhere. So I'm going to CD into slash MNT. And if we do analysts here, you'll see I have some files here that I've already shared or that I've already created. And what we want to want to do now is do pseudo because we're in the root directory somewhere. So we're going to need pseudo privileges. And then we're going to want to do is create a directory of some kind. In my case, the VM that I've just shown you a few seconds ago is my main VM where I do most of my work. So I'm just going to call this main. Like, except for I got to do make directory main, basically, we're just creating a directory where we can mount. So we're going to do that. It'll ask us for a password. And then if we do an alas here again, you can see that there's now a main directory. Now there's one other thing we need to do before we mount the SSHFS. We need to change the ownership of main. Now this only is required if you're creating a directory in slash MNT. If you've created inside your home directory, you can skip this step because you already own that directory. In this case, if we do this, you can see that the ownership of main just right here is actually root. So what we need to do is change that to my user. So I'm going to do pseudo CH own my user name and then colon my username again and then the name of the directory. So in this case, just like that, there should be no output as long. And if we do LSA again, we can see that main is now owned by Dr. Mdub, which is my username. I think I pointed to the wrong one up here when I was talking about this. You can see what it was owned by root. Now it's owned by Dr. Mdub. I'm not sure why EXA does things in columns. That's just that that really messed with my brain there for me. But it doesn't matter. Anyways, now that we have the proper ownership, now we can mount our file system. It's really quite simple. So if you ever need to know what the syntax for SSHFS is, you can use the man page. I actually completely passed over installing SSHFS, which I probably should, you know, actually show you because it's really simple. Just do pseudo just do if you're on arch to pseudo Pacman dash s and then SSHFS. If you're on Ubuntu, it's apt install SSHFS and you want to install SSHFS on the machine where you're going to be mounting the directory. It doesn't need to be on the server side. It needs to be on the client side. In my case, if you're I think I'm on Gen2 based distro, I do pseudo emerge dash AV and then SSHFS, I probably would need the category to in order to do that. But I don't really have. I don't remember what that was. So you do need to install SSHFS. It's probably not installed on your system. So I apologize for, you know, doing things out of order. But anyways, once you have SSHFS installed, you can then go to man SSHFS. And you can see that the syntax to mount a file system is right here. Now what we're going to actually do is I'm going to open up another terminal here. I'm going to CD back into mount just so we can we can be there and we can see that we have our main directory there. So what we're going to want to do is do this. So we're going to do SSHFS and then we're going to be you're going to need the username of the server that you want to mount. So in this case, my username on that machine is Matt, then you're going to do an app symbol and you're going to paste the IP address that we found earlier, which is there. And then what you're going to want to do is do colon. And then you're going to want to give the directory that you want to mount. So you can just do root if you want access to everything. Or in my case, I'm going to do slash home slash Matt, that's just going to give me the home directory. That's really all I need on that VM. And then you're going to want to give it the full path to the mount point that we created in this case, it's slash mnt slash main and then enter. Now you do have to have SSH set up on your machine in order for this to work. I'm not going to cover that. So if you don't have SSH set up, I highly recommend going to check out either DT's or any other Linux YouTubers tutorial on how to set up SSH. It's not that hard, but I don't have a video on it myself. Maybe someday I'll actually do that. I can't explain it very well. That's the reason why I haven't made one yet. But anyways, if you have SSH set up properly, you'll probably get a warning that looks like this. Are you sure you want to continue connecting? Just type in the word yes. And then it's going to ask you for the password to the machine you want to connect to. So I'm going to enter my password and then we're done. Now, if we do an LS here, we still have main, we'll CD into main like so. And if we do an LS here, those files are on that remote VM that I just showed you. So if we go to that particular VM, open it back up and get into full screen. I'm going to do an LS here and we're going to do make directory test. Now if we go back to my main machine, like so, and we do an LS here, we can actually see that there's now a directory that we just created on that other machine called test. And this is mounted on my main machine. Those two machines are now connected. I can transfer files to and fro. I can do whatever I need to do. And it's just absolutely amazing. It works fantastically. It's not overly complicated, given the fact that I was able to do it. It's very, really very good. Probably the biggest hurdle is going to be setting up SSH, which I didn't show you in this video. I probably should have started off with that and tried to actually cover that. But again, search out one of those tutorials, it should get you there. It's fairly simple. It's just a couple commands. So now that I have all of those files mounted on this machine, I can do basically whatever I want.  And that would unmount the server from this machine. And I'd no longer have access to those files. Now there's a couple of other things that you'll want to do. Now there's a couple of things that you'll want to keep in mind.  Especially at the beginning of your session, especially if you're connecting to a machine that's not always on. So like my VM is not always on. So when I turn that on, I would have and I'd have to come back and rerun this command. Now, if you're the machine you're connecting to is always on, you can add this to your FS tab. So if we open up another terminal here, actually, we can close this part here. And we do pseudo and Vim slash Etsy FS tab, like so, you can add something that looks like this. So you'll want to copy and paste this line here, but you actually need the entire was it was just type it. I think it's going wrong there. I don't know what's going on there. So we do SSH FS, and then the username at the <IP_ADDRESS> colon slash home slash Matt, and then slash MNT slash main, which is the mount point.  And then you can just do type SSH FS, that is the file system, it doesn't need any of the other stuff, you don't need to add defaults or any of the zeros, it should work just fine. Now again, this is only going to work if the drive exists. So don't do this on a VM that doesn't start up at startup. And I wouldn't even do it on a VM that starts up a startup because you don't know the order of the things are going to start up. So there's a good chance that the FS tab is going to get executed before your VM starts up. And then you're going to have some issues. So don't put this, don't put this in your FS tab unless you know that machine is already on already running already has SSH up and running, all that stuff, right? Only put this in your FS tab, if that is all true, if it's not, don't do this. I don't think that I don't think that if it's there, and it's not like available, I don't think that it's going to break anything. But you don't want to risk it right and just just start it up from the terminal like you normally would. So that is SSH FS. And honestly, I think that this may be the best tool that I've found in ages. And the folks who left comments on that initial video about Samba, thank you for doing that. Even though at the time I found it super annoying because like everyone said, Matt, try SSH FS. There's like a hundred comments, SSH FS, SSH FS, SSH, I get it guys, just read other people's comments. I know the other people have recommended it, but you're all right. It's awesome. I am highly disappointed that it's not being maintained anymore. I hope someone else picks it up because it is fantastic. I don't want it to die. Usually when a project like this gets abandoned, it eventually breaks. And that just makes everybody sad. I'm hoping somebody else will pick it up and actually continue to develop it so that doesn't die. But as of right now, it's still works, and I'm going to be happy until it, you know, stops working. So that is it for this video. If you have questions or comments, you can leave those in the comment section below. I'd love to hear from you. I apologize for the, you know, things not being in order.  But, you know, you know me. Anyways, that's it for this video. You can follow me on MasterDown or Odyssey. Those links will be in the video description. You can support me on Patreon at patreon.com slash the Linux cast. Links for Liberapay and YouTube will be in the video description as well. Thanks to everybody who does support me on Patreon and YouTube.  You know, that's you, the channel is not going to be anywhere near where it is right now. So thank you so very, very much for your support. I truly do appreciate it. You guys are all awesome. Thank you so much for your support. Thanks to everybody for watching. I'll see you next time.


Welcome traders, another tickmail chart here with me, Patrick Munley. I want to update the Kiwi Dollar on the daily time frame. Completed the major corrective objective ABC into the 68 handle. We've since had an impulsive advance pulled back into the monthly pivot acting as support since some demand developed here. I'm looking to be long through the weekly pivot 7075 to take out the trend line resistance at 71.26 on route to an equality objective at 73.20. There's always traders, plan the trade, trade the plan and most importantly manage your risk. Until next time, thanks very much.


Drivers of the Ministry of Health, Wellness and Early Affairs, numbering in excess of 40, gathered at Stony Hill for a capacity-building workshop that was organized to enhance their skillsets and improve service delivery. Hemish Aldonza, who is the Transport Office of the Ministry of Health, Wellness and Early Affairs, said the workshop focused on some key areas such as specimen sampling, handling, vehicle management policy and maintenance. We have quite a number of health facilities island-wide, so the service that we provide is of utmost importance. As you know, the work that we do impacts lives and we have to ensure that the drivers are knowledgeable and well-equipped with the skillsets that are needed to ensure that the Ministry's mandate can be fulfilled. I'm hoping that after all this information has been imparted that the drivers will be able to use it to their benefit because we have a very, very big ministry with a lot of departments and the workload can get very, very, very hectic. It's very easy for them to experience fatigue and burnout, and perhaps sometimes in the absence of being properly trained, that can affect the delivery of the service. Permanent Secretary, Ms. Jerry Daniel said because of the vital role that the Ministry of Health plays in the society, the importance of the capacity-building workshop must be underscored. Addressing the drivers, the Permanent Secretary recognized that they were performing a tedious but highly significant role to the health.  Your role is significant, it's extremely important. Without you, can you imagine a day when we have no drivers? Mail doesn't get delivered. Specimens don't get delivered. Supplies don't get delivered to the wellness centers. And you can tell me all the other things that will stop happening on that day. As a result, we value you. We value the contribution that you make towards the health sector. We see it as very important and this is why we decided to have this workshop here today so that you can understand how you are seen within the ministry. The Permanent Secretary also encouraged the drivers to consider themselves as ambassadors for the ministry and in so doing to pay attention to their general department and attire. Wendy Reynolds-Belize, Administrative Assistant of the Ministry, said the ministry is hoping to make the capacity-building workshop for drivers an annual exercise. The workshop was facilitated by Ms. Betty Combee, managing director and owner of Mods Inc., a local training and consulting firm. Ms. Combee's presentation focused on customer service delivery. The participants also got the opportunity to access basic health screening services which were being provided at the workshop. From the Ministry of Health, Wellness and Elderly Affairs, Juditha Peter reporting.


Welcome to part 2 of APN's series on insecurity in Athens. Last time we focused on food insecurity, and in this video we'll take a look at housing. As you may have heard, an eviction crisis is looming in America, with the floodgates set to open when the Center for Disease Control's moratorium on evictions expires on June 30th. What steps are we taking in Athens to address this issue? And how can we emerge from this pandemic as a stronger community, with fewer people suffering from housing insecurity than when we started? Let's take a look. Unlike food insecurity, there's no single national definition of housing insecurity, so I can't explain the term precisely. It's a broad category that includes aspects of affordability, instability, safety, quality, and homelessness. I'm going to focus on instability and homelessness in this video, but I think everyone knows we've been having increasing issues around housing affordability as well. Over the past four years, the average rent in Athens has gone up 33%. Has your income gone up 33%? I'm going to guess, probably not. And the minimum wage hasn't gone up at all. Athens has had major issues with housing insecurity even before the pandemic, but in March of 2020, things got a lot worse. Even as late as January of this year, one in five renters nationwide weren't caught up on their rent. For black renters, that number is even worse at over one in three. Locally, given our high poverty rate, I'm sure the numbers are just as bad if not worse. Fortunately, the CDC issued an eviction moratorium in September. They took this unprecedented step not to relieve housing insecurity, but to help slow the spread of COVID-19 by encouraging social distancing. Something that's difficult if you're sleeping on a friend's couch or at a homeless shelter. But to gain the order's protection, you have to meet certain conditions. So who's protected and to what extent? I went to speak with Sarah Gehring and Chad McCrany, attorneys with Georgia Legal Services, to help clear this up. The kind of people that it covers are people who would be evicted because they are behind on rent payments or payments of late fees or other money problems with their landlord. Who are below a certain income, it's like under six figures, so it's a pretty high ceiling. And who would become homeless or have to live in really close quarters with other people if they were evicted. That's the general kind of person that's meant to protect. And in order to take that protection, you have to sign an affidavit that says, you know, you are all those things and handed to your landlord. So the order only prevents evictions due to failure to pay rent. If you're being evicted for another type of lease violation, or if you've overstayed your lease, the CDC order probably won't help you. On the plus side, most evictions are due to failure to pay rent. So it seems the order has helped quite a bit in Athens. According to ACC Magistrate Judge, Ben Macon, there are normally around 3,000 eviction cases filed in Magistrate Court every year. But in 2020, that number was cut down to about half normal, a pace which continued into 2021. Although another reason why eviction filings might be down is the slow pace of court proceedings these days due to the need for social distancing. Eviction cases in particular are normally required to proceed through the courts very quickly. In general, a dispossessory case has to be resolved within 14 days of the date that the tenant is served with the paperwork by the sheriff. That's incredibly fast. That's faster than any other case I think in the courthouse gets resolved. But due to a judicial emergency issued by the Georgia Supreme Court, these cases are now allowed to take quite some time. It's kind of sad or funny in a way, but the pandemic may have actually improved housing security in Athens in some important ways. Chad specializes in protecting low income tenants. I'm a staff attorney with our office. I do general work. A lot of the attorneys in our office are general. We've all started picking up these eviction cases, which we didn't before because before under Georgia law, if you don't pay rent, unless there's some really specific things that happened, there's almost nothing for you. And now for the first time, there's this widespread protection of tenants of low income tenants in Georgia. Beyond the CDC order, there's all the relief funding which has been an enormous help to local nonprofits fighting homelessness. Athens received $6.6 million in CARES Act relief funding last year. This year, after the victories of President Biden and Senators Raphael Warnock and John Ossoff here in Georgia, we're set to receive $57 million from the American Rescue Plan. If this money is spent well, it should be enough to completely reverse the effects of the pandemic on housing security and many other local needs. But let's not celebrate just yet. Even if we do go back to normal, that would mean going back to an Athens that has huge and growing problems with both housing affordability and homelessness. It might be worse for some people here than you realize. I want to take every opportunity I can to express how dire the problem is and how pervasive the issue of family homelessness is in Athens. I spoke with Shea Post, Director of the Athens Area Homeless Shelter, to try to better understand family homelessness in Athens, which they've been fighting for decades. The conversation really does tend to revolve around individuals who are experiencing homelessness and the camps that we have in town and people can see that it's happening. With family homelessness, you can't see that it's happening, but it is an even larger issue. And the reason why it's not as visible is that often parents will find some place for their children to sleep, and sometimes they'll be able to stay there, too. But it might be a different place every night, while mom or dad or both sleep in their car or sleep at the park. It's just not as readily visible. And to give you an idea of how pervasive the problem is, every year the Clark County School District has a social worker who works exclusively with children who have experienced homelessness throughout the school year. So every year she starts her caseload at zero. And by the end of the year, that caseload is generally over 900 students who have experienced homelessness throughout the school year. It's an incredibly pervasive issue in our community. This is a difficult, nearly impossible problem to fully address in normal times. But after receiving $57 million from the American Rescue Plan, perhaps it's finally time to take action and set a goal of eliminating homelessness in Athens forever. I spoke with Commissioner Tim Denson, who has a plan, borrowed from Gwinnett County, to get us moving towards that goal. It's called Project Reset. Project Reset is a program that helps people avoid eviction. When a tenant or a landlord come here to the magistrate court and the landlord is trying to get a person removed, instead they'll be invited to enter into this program Project Reset. The landlord and the tenant will agree. And then a settlement will be negotiated with the landlord, say it's 70% or 80% of what the money was owed. And if they accept that settlement, keeps them out of the magistrate court that stops the eviction right there, settles the payments, ends any late fees, and really resets the tenant where the name comes, resets the tenant where they have no debt there. They can remain living in their home. Through this program, the local government would pay a percentage of the back rent owed by low-income tenants, through a negotiated settlement with the landlord, who would then agree to forgive the remainder of the debt. So it's kind of a win-win situation, and it's a win for the community also because having these evictions happen forces people out of their homes, makes more people homeless in our community, which puts a strain on our community, and it's especially problematic when you have a pandemic happening here too. So really the community wins, the tenants win, and the landlords win. If Commissioner Tim Denson gets his way, not only will Project Reset help people get through the looming eviction crisis, but it will become a permanent program offered by the county. We can actually make a better world even after this, right? We can come out of this pandemic better than before we even got into it. And by doing this, resetting somebody's financial situation when it comes to their housing, it has economic, positive economic impacts, plus housing, plus health, quality of life, everything. But since this plan only helps those who already have a home, it won't do anything, at least in the short term, to address the problems of those who are already homeless. From the point of view of housing affordability and housing stability, we're working with families who are already sort of off the precipice. They're in the margins already, once they get to us, and our goal is to find stable housing, and it's really an upheld battle in this community because of the lack of affordable housing, because of earning power and minimum wage. Thanks for watching. If you liked this video, why not hit the like button? And if you want to help me make more videos like this, you can become an APN member at AthensPoliticsNerd.com slash join. Thanks so much.