 talk about Ruby and how it changed my life and how, just kind of my history of finding Ruby and then I went on to find Smalltalk, which is, I mean, we've actually heard a few talks that mention Smalltalk. But I just wanted to kind of go through and talk about how I discovered Ruby, yep, discovering Smalltalk and then Maglev, which is an implementation of Ruby and a project called Subwars, which is, that's kind of how I discovered Smalltalk. So first, I am Johnny T. I work at a company in Salt Lake called Crediterra. Just started there a few months ago and as you can see from my picture, I love Smalltalk. So, discovering Ruby. I first discovered Ruby in about 2006. I went to a RailsConf over in London and the closing keynote was by Dave Thomas and he gave a great talk about, at that time, saying Ruby is not enterprise yet, but it is coming and he was talking about how more and more people were kind of quitting their day jobs and able to start up doing Ruby consulting. After that, when I got back to the States, I mean actually a couple months later, I did just that. I quit my day job and switched and started doing full-time Ruby consulting, which was fantastic. I loved it. It ended up not being the thing for me. I like programming too much and running your own business. There's too much business stuff to deal with. So, and then later that year, I went to the RubyConf in Denver. So I was my first RubyConf, Metmaps, which was really cool. And even there, heard they did a skit. It was kind of cool on, it was kind of, I mean, poking fun at Smalltalk and the pure OO and objects all the way down and some Alan Kay's quotes. So, sorry, Ruby is, so we've heard Matt's talk about why he created Ruby. So this is, so Ruby is designed to make programmers happy. He's also talked about how the programmer, the productivity is another major thing. And I'd say I definitely found this. Ruby, I love, it is, I'm sure other people in this room feel the same way. I mean, that's why we're here. It, the ability to, it's a direct path between what I'm thinking and then how you express that in code. You're able to do it with, I mean, very little code. And it is fun. Like, I really enjoy, I mean, I loved programming before, but I never attended any user groups, never really reached out and did, I mean, programming was kind of just something I did at my day job and didn't really do much else. When I found Ruby, it was great. I actually wanted to share it with other people. I mean, this was a really cool thing. I had started attending actually one of my coworkers and I set up the Salt Lake chapter of the Utah Ruby users group. And we started trying to share it with everyone we could. Excuse me. Here's another thing that we've heard today. Minneswan, so Matz is nice. And so we are nice. Which is one of the things that I loved, well, I continue to love about the Ruby community. It is a nice community. It's very warm and welcoming. It's, I mean, newbies are able to come in and find people to help them out. And other things that I love about Ruby is the kind of the focus on agile and on testing. I mean, it aligns. There's a lot of kind of practices that the Ruby language as well as the Ruby community really support and are behind. So one of the things, I've already done this conference and I'd love for you guys to do if you have a chance is to thank Matz for what he did for Ruby. So this is in Japanese how you can thank Matz. So I'm gonna go through it a couple of times and I would love for you to repeat after me. So after, so that you guys can learn this and be able to go up. I mean, I think it'd be great. By the end of the conference Matz has hundreds of people coming up to him and thanking him for Ruby. There aren't hundreds in here but it'd be great if everyone did. So this is, so it's Matz-Moto-San-Ruby-Tiskute-Kurete-Arigato. So who wants to try it with me? Anyone? Okay, all right. So Matz-Moto-San-Ruby-Tiskute-Kurete-Arigato. And so for me that the discute is the one I always kind of get tripped up on but that's the, so Matz-Moto-San-Ruby-Tiskute-Kurete-Arigato. So my journey of discovering small talk really started with, sorry my slides are, well I've just been working on it. Started with a project called Subwars. In 2010, I started working on the side project. The concept behind it is a GPS-based submarine game. It has very little functionality because I've rewritten the whole thing, I think I'm up to seven times now. It started out in, as actually a Rails app, then moved to a Snotra app and at that point I heard about this project called Maglev that was a new implementation of Ruby that the cool thing about it is it promised this pure object database and so you didn't have to worry about mapping your objects to a relational database or to some other NoSQL stored. When I found that it's, well, sorry, I'm gonna go on and just talk about this quote real quick. So this is from Kempbeck. I always knew that one day small talk would replace Java, I just didn't know what it would be called Ruby. Kempbeck, I don't know, is one of the fathers of kind of computer science and Agile. He is along with many of the others was a small talker and moved after small talk didn't really take off. He moved on and was, I mean, worked a lot in Java but he definitely saw like many of the similarities of small talk and Ruby. Okay, so this is, so small talk is kind of an interesting weird little tiny world. This is an old issue of Byte Magazine that obviously this is when Pascal's kind of coming out so you can see there's Pascal's Triangle. This references a lot of kind of some older languages. You've got Fortran Ocean, the basic sea, Straits of Cobal where many a ship went down and then this was a great place. The Lisp jungle was where there's a big mist that you couldn't actually see the jungle from the sea but there were rumors of these great algorithms and recursion going on. And then you had this ivory tower of small talk built way up on the cliffs. So I mean it was something that people heard about but no one could ever make it up there and discover it. Until in 1981, this issue of Byte Magazine came out and the idea behind it, so this is the small talk balloon, the idea behind this magazine is that this actually included a lot of information about small talk. This is the first time that small talk had been released to the world. So the idea was, yeah, small talk had been designed and developed in this ivory tower that no one had access to but 1981 if they were releasing it to the world and it would go and take over, it never really did. They did release it to the world and never really took over. But the idea here that, I mean back 30 plus years ago, this small talk was gonna go out and influence and change the way people program never really took off. I think one of the reasons is the need, I've kind of found the need for a small talk Sherpa. So with Subwars, when I found Maglev, I wrote a version of Subwars in Maglev. I kind of played around with it, started getting my feet wet with the persistence and after I started playing around with it, I mean it's always really cool. I wanted to be able to understand the underlying system a little bit better. So at that time I called one of my old business acquaintances who I knew had done some small talk programming but I didn't know what dialect. So Maglev is built on top of Gemstone S is the dialect of small talk. And it ended up that my friend, his name's Mike Hales, had actually worked, he worked with Gemstone. So I went to lunch with him to try and start picking his brain about how does this underlying system work? Like how does this magic occur? I still remember the first lunch when I went to lunch with him, he talked about, he just said, you know, Ruby just don't even worry with Ruby, don't worry about Ruby, go straight to small talk. And I in my head was just thinking, man this poor guy has not seen and used Ruby. It ended up he had, but he had also found the treasure of small talk. So over the next few weeks, probably couple months, I would occasionally, whenever I had a couple hours on an evening would go to his house and just sit and talk with him and watch him and try and figure out small talk. Which really helped. I found, I don't know, has anyone here tried small talk? Has anyone downloaded an image? Okay, we've got a few people. It is, it's fun to try. I mean it is, I would say there's a lot of different dialects, but it is very hard to move past kind of the initial examples. They've got a lot of tutorials that you can download and go through, but I found myself in going through those really quickly after a few minutes, just kind of my brain just kind of stopped and I couldn't think of like, this is really cool and magical, but I don't know how I would actually use this in anything. But then after talking to Mike, it really opened up and I was really able to see one of the power that was there, as well as the ways that you could actually use it. But having a person, having someone that I could sit down with face to face and actually talk through these things was necessary. More so than any other language that I've worked with. So small talk is, I mean it needs a Sherpa. It is, it's hard to, it was kind of designed to stay within itself. I mean it is, it doesn't play with the rest of the world real well. It's possible, but it was really designed to, I mean let you be able to just fly while you're in the image. So the need for a small talk Sherpa, I think is one of the things that has prohibited small talk from really taking off. So now, let's see, I wish I had my speaker. Okay, sorry. So Maglev, one of the things that it offers, I mean all that is, so native object persistence. So it acts as your database. So if we think about, so like a traditional database, Postgres, MySQL, any number of them, when you set it up, so you install the server, which is gonna install, set up some credentials, start a daemon that you can then have a client that you spin up in a separate process. This client can log in to the server at which point you have a connection to the server that then you can go and execute your queries. Maglev is similar in a sense, so when you install Maglev, you're gonna download what's called the stone. And the stone is where all of your objects live. And so this is kind of your data stored. So download the stone, and then they file in Ruby. So the Ruby language is then kind of loaded into the stone. And so now you've got Ruby in the stone. And so the way that Maglev processes work is, again, same thing, you have a client, you have a process that spins up. The first thing that process has to do is log in. And now the difference is that once you've logged in, rather than returning a connection that then you can send stuff over the wire and execute some queries, the client actually attaches to what's called the shared page cache. So this process becomes part of the overall application and it's able to share the memory of the whole application. So small talk, some of the things that I've learned, some of the takeaways and really cool things that I've learned, one is the live environment. So when you're working with small talk, well, I guess when you're working with other languages, it is very much you spin up, you start a process, you're gonna create a bunch of objects, you might connect to a database, you've got a web server running, and everything's good, you've got your own little world going. But once that process, once you kill it, or I mean once the process ends, all of the work you've done in setting up and all those objects are just gone. And next time you have another process, you've gotta do the same thing. You've gotta spin up a new process attached to a database so you can share objects. But it's very much a kind of a static, I mean moving, well, a static thing. The objects are not obviously persisted across the process boundaries. In small talk, you're always working with a live environment. You're never starting from scratch. When you start a small talk process, there's already stuff running. And you can get in and you can kind of poke things and you can play around, look at stuff, and then you can save that as, so they call it an image, so like a virtual image. You can save that, and next time you start it up, it's in the exact same spot as where you left it. It lets you, one of the things, the live environment and working with these live objects, the debugging is one of the amazing, amazing things which I'm gonna actually show. This is a video of, this is called the Maglev Database Explorer. And so this shows, we're gonna walk through, this is kind of small talk-like development but performed in a Ruby environment. So here you can see the main thing, so over on the left there's a Ruby workspace. This is, they're actually working with a Rails app, they can see in the top left, but they're going through, and you can see you can, kind of just like IRB, you can put in expressions, evaluate them. But the debugging is one of the really cool things, and so this is gonna go through and show how you can debug an error live, make changes, check it out, save stuff, and then proceed and continue the thread. So right here, so we're setting x to one and then doing a one divided by zero, which you can see this throws an error, you get a, I mean, a divide by zero error. So this is showing the actual thread, and so actually this, right back there, this is, so one of the things that small talk has, every other language, an error occurs and you get a stack trace, I mean, you then have to go look at it, load it up in your Dev and Myron, see if you can replicate it, but it's you just have a static print out of what was happening at the time. In small talk, you were always working with the stack itself. So this is, that was a listing of the stack that you can go in, look at the code, you can actually modify variables, you can modify code, save it, and then this is gonna show that you can actually then proceed. One thing is, as this is going through, the gray lines are stuff that you're probably not as interested in, those are usually the lower level VM kind of level instructions. But this is gonna go through, this is showing how you can browse all of the local variables, and then it is gonna go and proceed at which point, let's see, here we go. So this is just looking at the different variables. Okay, so here we go. So we're still on the zero divide error, and now we proceed and you can see over here that X now has the value of two. So it's moved past the one divide by zero error, and then has the one dot pause is like a break point. But I mean, it's just that will pop up again the stack that then you can then manipulate and work with. So the live environment is one of the huge things that I found that Smalltalk offers that is really hard to find anywhere else. Here we go. Being able to work with persistent objects and being able to work with a large store of persistent objects is another thing that I found Smalltalk offers, especially Gemstone. This, so I'm gonna go through and actually do a tiny bit of live coding which is dangerous, but so we're gonna go through, I'm gonna show an example here of working with some big objects. So I get real quick, geo half is a way to encode a latitude longitude into a character string where each character adds precision. So we have, let's see, we have here subword. So this is pulling up, and actually, so this will go through and show the kind of the live environment as well. So this is pulling up this, so that's the lat long of where we are right now, and this is the geo hash of what it's returned. This is actually operating on, let's see, right? So this is operating on, so it's got 1.6 billion objects in there, and one of the cool things is you can actually access any of these objects just instantaneously. Also, what we're gonna go through right, so this is actually outputting just the name of the class, and so one of the things that you can do is we're gonna go in and actually add a 2JSON method, and then without restarting the web server, we can modify objects and then we should be able to refresh this and have it output, let's see, there we go. So now it's outputting the new, so it's using the new method that we just loaded. So this is again something, there are languages that this is possible in, I know Erlang's able to do that, but this again shows you can have a web server running and then you can update, modify, make changes to the persisted code that the web server is able to just see on the next request. You don't have to reload the web server. So being able to work with a large persistent data store of pure objects is another one of the things that I kind of found and learned from small talk. The working with, I mean pure Ruby objects, you don't have active record, you don't have, you don't have any type of object relational database or object relational mapping in place. This is a quote from, so Dan Engels, who he is, who actually implemented most of small talk, but so this is a quote from the design principles behind small talk and so to be truly object oriented, a system must provide automatic storage management and one thing, so that applies to both code and data. I was lucky enough to be able to meet Dan at one of the small talk conferences a couple years ago, but this, that concept of the automatic storage management is a big one, small talk really focused on that, talked about if you have to think about, I mean think if in a conversation, if every time you went to talk to someone, you had to rebuild the context and remind them of where you last left off, it doesn't match, it doesn't mesh with the way that our minds work very well. So having the system be able to handle the storage of your objects allows you to do much more pure OO design. So yeah, the object relational impedance mismatch doesn't quite fit, there's something not quite right. It's amazing and I found that it's amazing how much of our minds are devoted to thinking of how we're gonna store stuff as we're developing. Even in the back of our mind, somewhere we're always thinking, okay this is a cool idea, but how are we gonna get it persisted? Tooling is one of the other things that I found that small talk has that Ruby does not yet have. Small talk was very much focused on the concept of you have a language and the tools to go along with it. Oh, and that's it, so we already went through that video. So that's where the tooling that you're able to get in small talk, Ruby is definitely starting to get some. One thing I love, Pry, has anyone used Pry? There you go, yeah, Pry is an awesome tool. I mean, that I see in some ways is, I mean like a small talk tool, but I mean where you're able to go into your live environment and really easily dig around, look at your objects, see what's implemented that, check out the source, even modify stuff, and continue running. So my goals for this talk, one, I'd love for everyone here to be able to go think maths. It doesn't have to be in Japanese, it can be in English, that's just great, but thanking him for this language that has, I mean, given us joy, it's definitely given me joy. Another thing, so your local Ruby user groups, that's another thing that the Ruby community, again, is very open, and the user groups are a great place to be able to be someone else's Sherpa and to try Maglev. So one thing, I do have a, I think I've got another slide tonight. I signed up for a Birds of the Feather session. Let's see, it's right there. So tonight, seven to eight in the next door in room 24, and as we're closing, I would just like to, again, go through. Whoever wants to join me again, I'll do it once. So Matsumoto-san, Ruby, Tsukete, Kurete, Arigato. All right, everyone. Matsumoto-san, Ruby, Tsukute, Kurete, Arigato. So remember the Maglev Birds of the Feather tonight, I will be there and would love to help, if anyone wants to play around with Maglev, feel free to swing by. If you've got any other questions, I'll be there. I'll be around all night. But I would love to help anyone get set up and go through and help people to be able to experience the same stuff that I found and be able to discover the magical world of small talk. Thanks. Any questions, comments? Yes. So Gemstone is very performant. So the first version came out in 1982 and I let one of their main clients for the last few decades is J.P. Morgan that uses it to do their automated trading. So it is, yeah, yeah, something, I mean well over a thousand stones worldwide. But so it is, there are different dialects of small talk. Some dialects are not as performant as others. Gemstone is the only one that is, I mean it's really meant for distributed applications. Most of the other small talks are single threaded. I mean kind of made more for just like a single little app. So the question is, we've heard about Maglev a few years ago, where is it getting used? Is it gaining traction? So a quick update on Maglev, it is kind of in a state of limbo. I don't know if there are actually any production systems using it yet. One of the things over the next year or two I will be working on actually an open source multi-dimensional database. So similar to Tableau, but that will be in Maglev. So it is currently kind of, it's not really being used in production. That's one of the things that I am hoping to do is to raise awareness of it, be able to generate some interest so that GemTalk, who's the system behind it or the company behind it, will be able to put some more resources into it to really get it moving. But currently it's more of a, it's a work in progress. Anything else? Great, thank you. And I would love to see anyone tonight, again at seven o'clock in room 24 to actually play around with Maglev. Thanks.