Summarized using AI

The Return of Shoes

Steve Klabnik • September 29, 2011 • New Orleans, Louisiana • Talk

In this talk titled "The Return of Shoes," Steve Klabnik discusses the historical context and future of Shoes, a GUI toolkit native to Ruby, initially created by _why the lucky stiff. After _why's departure from the Ruby community, Klabnik took on the responsibility of maintaining Shoes, a complex open-source project. The presentation covers the basics of building applications with Shoes, challenges faced in maintaining the project after its original creator left, and how the interface embraces Ruby's unique features, making GUI development enjoyable for programmers. Key points of the talk include:

  • Shoes Overview: Shoes is described as the best Ruby GUI toolkit, simplifying the creation of desktop applications compared to other complex frameworks like GTK or QT.
  • Ten Gifts of Shoes: Klabnik shares features of Shoes, inspired by _why's book "Nobody Knows Shoes," highlighting simple yet powerful elements like paragraphs, stacks, flows, buttons, and image handling, demonstrating how these components allow for intuitive design.
  • Personal Experience: Klabnik recounts how he transitioned from Hacky Hack to Shoes, taking charge of a project he initially saw as important for teaching programming.
  • Community and Collaboration: The talk underscores the importance of community involvement, with Klabnik calling for developers to engage with the project and contribute.
  • Future of Shoes: Klabnik expresses excitement for the potential of Shoes, announcing that Shoes 3.1 is in beta, aiming for improvements while facing challenges related to multi-platform support and software stability.
  • Reflection on _why: The talk touches upon the impact of _why on the community and the importance of moving forward while respectfully acknowledging the past.

The talk concludes with a call to action for developers to engage with Shoes, contribute to its improvement, and help shape the future of the toolkit as it navigates the challenges of evolving technologies.

The Return of Shoes
Steve Klabnik • New Orleans, Louisiana • Talk

Date: September 29, 2011
Published: December 12, 2011
Announced: unknown

It's been two years since _why the lucky stiff has departed Ruby. His work, however, carries on. Shoes was one of _why's most ambitious projects, and a tiny but scrappy team has kept Shoes alive. If you haven't heard of Shoes, it's a GUI toolkit for Ruby. Most of these are simply bindings to toolkits written in other languages, like QT or Tk. Shoes is native to Ruby, so it uses Ruby-only features heavily, such as blocks. Shoes also includes packaging functionality that allows you to distribute your apps on Linux, OSX, and Windows. In this talk, Steve will cover the basics of building applications with Shoes, the challenges of maintaining a large polyglot project with an absent inventor, and what's in store for the future of Shoes.

RubyConf 2011

00:00:17.680 good morning everybody thanks for showing up i know it's really hard to wake up so early on day two of any
00:00:24.000 conference especially after you have that party last night amplock was a good time um I'm Steve and this talk is
00:00:31.119 called the return of shoes uh it's about shoes which is the best Ruby guey
00:00:37.440 toolkit in existence uh If you didn't know uh Shoes was originally started by Y the Lucky Stiff uh and then whenever
00:00:45.600 he disappeared I ended up uh taking over the project um I actually took over
00:00:51.039 Hacky Hack uh first and by virtue of Hacky Hack being the largest shoes application ended up working on shoes as
00:00:57.520 well because it's just natural that you know my biggest dependency I I would get involved with too and now I'm
00:01:03.280 maintaining both projects so uh yeah this is a this is a story about um those
00:01:09.520 past two years uh a little bit about shoes itself if you're not familiar with it and uh some talk about where I'm
00:01:15.280 taking the project in the future and how you can get involved and uh and help because shoes is awesome so yeah
00:01:21.680 whenever Y disappeared um I uh I I thought to myself well I'm not really
00:01:27.040 ready to take on an open source project and help anybody out um or or I would need to help someone out rather than
00:01:33.200 take one over so whoever is going to take over Hacky Hack I would love to help them because I think that that's Wise crown jewel and a very important
00:01:39.759 project even even not uh because of his celebrity but just because I feel very uh I feel that the the social idea of
00:01:47.680 teaching people how to program and especially kids is really important and so um so I said okay well I'll I'll help
00:01:53.280 whoever whoever steps up and takes that on and then somebody's like I'll take over shoes I'll take over H precott you
00:02:00.000 know I'll I'll work on this and uh and you know a day or two went by and nobody stood up for Hackerty and it became very
00:02:06.320 clear that if nobody else if I did not nobody else was going to and the project would die and so um so I decided to bite
00:02:13.520 the bullet and uh and give it a shot and um you know so there it was me and
00:02:19.160 Hackiaak and um as as I started working on it you know and finding bugs and things um I ended up getting involved
00:02:25.520 with shoes too and I came to realize that uh shoes is really really awesome uh the most of the time when you're
00:02:32.720 programming uh with guey stuff i mean so as much as we complain about HTML and CSS uh and how bad it is sometimes to
00:02:40.080 actually build things doing desktop applications is far worse i would much rather uh deal with all of the finicky
00:02:46.400 CSS stuff and deal with IE6 issues than uh use GTK or QT or something like that
00:02:52.239 to build build an app because it's it's horrendous uh and it's not really those projects fault that they suck uh it's
00:02:59.360 due to the their history uh and the fact that they originally written for C um means that oftentimes you get interfaces
00:03:06.000 that are just C ported to a language like Ruby so it's not like actually programming Ruby you're programming C in
00:03:12.480 Ruby so uh shoes uh and what makes it so magical specifically is the fact that
00:03:18.159 shoes fully embraces Ruby uh and uses its primitives and ideas to to build
00:03:23.440 gooey stuff so uh it makes really heav he heavy use of blocks for example to power everything um and uh this means
00:03:31.120 that it's it's the only time I've ever built desktop applications that I didn't immediately uh want to go cry afterwards
00:03:38.400 uh because it's actually enjoyable so the first the first part of this talk uh I'm going to give you a demo and share
00:03:43.599 with you uh why I uh love shoes so much uh this particular section is is based
00:03:50.319 on um part of a book that why wrote called Nobody Knows Shoes and uh so it's
00:03:56.720 called the 10 gifts of shoes and it overviews the uh the 10 biggest features or the 10 biggest parts of shoes so uh
00:04:03.439 all of this art is things that I stole directly from why because it's great art
00:04:08.560 so just where that comes from um yeah nobody knows shoes is the book and uh
00:04:14.080 afterwards you will so uh here here are the 10 gifts uh that choose gives us uh
00:04:20.759 paragraphs stacks and flows which do layout uh buttons images edit lines
00:04:26.639 which you input text uh links and URLs which are kind of cool uh the
00:04:31.759 backgrounds and uh clear and other manipulation stuff so we'll uh we'll go over these real
00:04:38.120 quick so um paras let you put paragraphs of text on the screen pretty simple uh
00:04:44.000 you can add some strings you can you know multi-line strings and it and it all works out but uh it's the most basic
00:04:49.600 thing you can do right display some text on the screen also if you'll notice uh in this code example the uh the entire
00:04:56.160 application is actually in a block of itself so choose app do and everything that goes in the middle is what shows up
00:05:02.080 in your window um very basic straightforward uh stacks so uh stacks are one of the
00:05:09.759 two layout mechanisms that shoes has uh they're basically a stack uh if you put
00:05:15.840 uh elements into a stack they'll just go from top to bottom um on the page so it's like stacking things on top of each
00:05:22.320 other and you can combine those stacks with flows that let you do uh things that go left to right so put things in a
00:05:29.199 flow and they go that way with just these two simple primitives you can end up uh making much larger uh interfaces
00:05:36.320 by combining them together so you know if you put three stacks into a flow you'll have a three column layout and
00:05:42.320 it'll grow to size all of the stuff that you put in it um and you can set heights and widths and I'll do all those kinds
00:05:47.600 of things but that's it as far as layout goes um when I when I was in uh getting
00:05:52.880 my CS degree and we were doing all that Java interface stuff I never could quite get my head around all the different
00:05:58.479 like layouts and settings and you know you combine them in weird sort of ways so so she's keeps it really nice and
00:06:04.160 simple um and just lets you put those two things together and it's really surprising how versatile it actually is
00:06:09.919 um and the things you can build out of simple simple stuff um so buttons um
00:06:16.880 buttons are awesome and and they're awesome because they they demonstrate uh just how great blocks are basically so
00:06:23.440 to make a button and choose you call button with uh and this is kind of tiny text but you uh you button with a string
00:06:31.120 and the string is the text of the button and the block that you pass to it is the code that gets executed whenever you
00:06:36.400 click on the button couldn't be more straightforward uh and this is a great example of callbacks and how you can use
00:06:42.240 blocks uh as callbacks in general and uh yeah I think it's a great illustration
00:06:47.360 of one of the best features of Ruby um these are images uh you can't you
00:06:53.919 can't really super see this really well but up in the upper right hand corner there's just uh the bottom of that
00:06:59.039 picture is image guy.ping with a top and a left added to it so uh you can include
00:07:04.479 images that are on your hard drive you can include images that are in your application itself you can actually even
00:07:09.919 include URLs of images and the first time your shoes app runs it will download that image and cache it locally
00:07:16.080 so um that's kind of cool uh and it uh you know you can use height and width to
00:07:21.120 change the sizes of it and put them wherever you want and do all that kind of positioning but it's really super simple uh no messing with you know uh
00:07:28.319 loading a JPEG versus loading a ping or using different libraries you just say "Hey shoes I'd like an image." And it uh
00:07:33.360 and it puts it up there um edit lines the most simple of input
00:07:40.000 uh you know things possible so uh you can type stuff in um by giving in give
00:07:45.039 it a width and just get the text out very straightforward and uh this is also
00:07:50.319 this particular piece of code shows a lot of the the patterns that happen when you're writing shoes apps so you sort of
00:07:55.680 set an instance variable inside the block to be equal to the edit line and then later you can ask that edit that
00:08:01.919 instance variable for its text so as you're sort of setting up these interface uh items you can ref this is
00:08:07.520 how you name them or or refer to them later is by uh by setting them equal to an instance variable and actually return
00:08:13.280 objects uh which is kind of cool and then uh so links there's
00:08:18.879 actually two different kinds of links in shoes so you can put something like a click uh handler uh on something and
00:08:25.360 that'll actually go to a web URL and it'll bring it up in a browser so that's uh the first kind of of link but there
00:08:31.680 are also uh URLs which have links which I'll explain in a minute but those are two separate things so uh backgrounds um
00:08:39.919 backgrounds are seem like a kind of a minor feature uh but they really made me
00:08:45.040 appreciate all of the stuff that shoes actually does for you compared to other toolkits so you can give backgrounds by
00:08:50.560 using a color a gradient or an image to set the background for your shoes app so um a color there are I don't know a
00:08:58.240 dozen or two named colors that have fun names like periwinkle or red um but you
00:09:03.360 can also do RGB values directly uh and so we sort of have these predefined colors that exist um you can also do
00:09:09.680 gradients uh if you pass in some hex colors uh and make them into um you know
00:09:16.480 uh use the dot dot dot operator to uh create the the gradient right it just makes sense um the This is an example of
00:09:25.440 things that are super easy to do to in shoes that are really hard to do elsewhere so I was building an application with QT one time and I
00:09:31.920 wanted to use a gradient for my background and the the line of code to implement this gradient would be
00:09:37.040 background and then those two those two colors um it took 26 lines of code uh in
00:09:44.399 QT to make a background because you have to create the background object you have to create the two colors you have to
00:09:51.279 create a gradient object you have to set how far does the gradient go and it at what rate does it move from one color to
00:09:57.680 another and all these crazy options to make it work and uh and shoes is just a couple simple characters so um this is
00:10:04.959 this is why shoes is simultaneously very simple but yet really powerful uh because the defaults uh and the it's
00:10:11.519 very simple to do simple things and it lets you do some some more complicated stuff um with the gradients you couldn't
00:10:18.079 exactly get down to that level of specificity but uh I haven't found it to be a problem to have a third of a
00:10:23.519 gradient at top of window and the rest of the gradient at the bottom yet so you know and then uh the second sort of link
00:10:30.959 things are URLs um this is actually a a feature of shoes that is not well
00:10:36.320 defined quite yet and there's very little documentation about it but um you can actually build applications by sort
00:10:43.040 of uh defining screens if you will and then creating links between them and treating it sort of like a web page so
00:10:50.000 in this case uh this is a book list and there are three different pages so at the root URL uh you call the index
00:10:57.360 method and that'll display on the screen if you hit Twain it'll call Twain and there's no actual browser bar this is
00:11:03.440 all just internal um but it lets you do the uh links so if you can see in the index there's a click going to slain and
00:11:11.040 that's how you navigate between um this sort of sort of betrays a little bit of shoes's heritage uh this this sort of
00:11:17.839 Ruby incarnation of Shoes is actually the second or third uh long long ago uh it was actually about putting Ruby
00:11:24.000 directly onto uh an instance of I think it was Gecko um way way back before I got involved with the project so it
00:11:30.720 still has this very webbby feel to it in a lot of ways um if you know stacks and flows are very similar to you know using
00:11:36.160 divs to lay things out but um but this lets you build like multi-page or multi-creen applications uh relatively
00:11:42.720 easily and then you can also um just use a shoes.app or a window block multiple times if you want to have multiple
00:11:48.560 windows and shoes but um this is one of those things that's really unique and interesting uh it's like a different way
00:11:54.720 to build apps so when coming from other toolkits there's a little a little bit of learning but uh you know it's not too
00:12:00.480 bad and then finally uh clear and its derivatives so uh you can call um like
00:12:08.160 the clear method onto some sort of container object or something like a text area and it'll clear out all the information but uh if you want to change
00:12:15.279 something you can actually pass it a block and it'll clear stuff out and then fill it in with whatever other elements you put in there so uh there's also like
00:12:22.399 after and before that let you sort of manipulate it almost in a domish kind of way again like sort of pseudo webby but
00:12:28.399 not where you can take these elements and manipulate them um like that so uh
00:12:33.600 so that's it that's the the 10 gifts of shoes here's an example uh application
00:12:38.639 that I whipped up in about 15 minutes um this uh my friend Zach created a project
00:12:44.079 called Shoes contrib and it uh has 30 or 40 sample shoes applications you can
00:12:49.200 play around with and use for examples and so um I got really sick of opening them all up manually myself to play
00:12:55.040 around with them and since shoes lets you run multiple apps at the same time uh I built this little browser so this
00:13:01.600 uh you can actually load this up and it will automatically read all the samples and let you uh use two dropown boxes to
00:13:07.760 try running them so uh you can see I have a stack with a flow so um it'll do
00:13:13.279 everything top to bottom and then left to right within it and uh you can pick a category from a list box so I have all
00:13:19.839 the named items and uh it's a little long so it sort of wraps around the screen but you know uh that's how you
00:13:25.680 would do like a drop-own list and then um I have a hidden flow that has choose
00:13:31.200 an example with an empty list box in it then when the the category box changes
00:13:36.560 it uh sets the examples hidden to false so it shows it and it lists them with
00:13:42.240 all of the Ruby files that are in that particular boxes named folder so uh you
00:13:47.680 know really super simple callbacks uh elements interacting with other elements through this instance variables and and
00:13:54.160 block style and then finally whenever the example box changes it uh it does something that's really terrible but
00:13:59.920 that's okay uh it eval the string of text in that RB file uh in the current
00:14:07.040 binding so just run whatever code is in that application uh which I would never suggest for production but in this
00:14:13.199 particular case when I'm just showcasing demo applications I'm not going to put a rm-rf demo application in there so I
00:14:19.920 felt it was it was okay to uh to to do that but um so yeah so this really simple basic app it's like 15 minutes to
00:14:26.560 whip it up and uh and it's really enjoyable overall to code in so uh that's why why I love shoes and uh
00:14:34.160 nobody knows shoes but but now you do so that's the uh little bit of a demo i want to show you uh an actual shoes app
00:14:40.959 running and this is demos are always a terrible idea so uh this will probably fail miserably but um you know so uh
00:14:48.720 this is this is my favorite uh little shoes demo app um why uh was demoing
00:14:55.120 Hacky Hack at uh a conference called Art and Code a couple years ago right before he disappeared and uh so this is a this
00:15:02.560 is a a duel so uh you can see I have this open in Textmate we have a a window with a black background and some swords
00:15:09.760 um that are in a stack they're just paragraphs and it's sort of hard to tell with all these lines what's going on but you'll see in a second so um we have
00:15:17.360 this waist and these legs and there's this animate block so one of the other features that I didn't talk about um
00:15:23.519 before you can actually run animations and uh processing and shoes sort of have a lot of cross collaboration or a lot of
00:15:30.480 the people that were active in shoes really early on kind of went to processing uh at some point and so um
00:15:35.839 you can do these great animations so this is taking this insult variable and replacing its text with stuff from these
00:15:42.480 array of insults uh and then moving moving these legs and swords and stuff so I'm uh I'm actually going to start
00:15:48.959 shoes up and uh it gives you this little menu when you don't um you can package an application into a standalone uh app
00:15:56.800 um but you can also open other apps so oftentimes when I'm developing I just open apps from uh shoes and so whenever
00:16:04.000 you're uh you know you got two dudes that are sword fighting and yelling insults at each other running back and
00:16:09.279 forth um this little animation so uh it's always really appealed to me i'm
00:16:14.320 not sure exactly why but uh it's kind of it's kind of cool so yeah so you got this animation and like little window
00:16:20.160 you also notice that uh this is a it's got real like the Chrome is actual Mac Chrome so we do uh native widgets on Mac
00:16:28.959 Windows and Linux so the the standard problem with crossplatform guey toolkits
00:16:34.160 is that they tend to have their own image right so if you've ever used a swing application you know you're using
00:16:39.519 a swing application and that approach is is okay but not ideal and so uh so we
00:16:45.440 actually use we bind to Coco directly to the Windows uh API and we use GTK on
00:16:50.959 Linux so uh only if you're using QT do you sort of feel weird about it but um that way you have actual real widgets
00:16:57.519 and it feels much more native um than something like swing would be um so yeah
00:17:02.639 anyway this is a little little app and while uh shoes sort of has a reputation for being good for tiny apps or it's
00:17:08.480 good for like smaller things um but you can actually build larger applications in shoes um shoes actually came from
00:17:15.360 hacky hack uh like I mentioned earlier so um I'm going to show you that real quick as well just to give you an idea
00:17:20.720 of like a much larger shoes app so uh you know hacked hack is a couple thousand lines of code um and uh it lets
00:17:27.839 you uh learn Ruby or learn programming via Ruby so this is all uh written in
00:17:33.280 shoes but I have some tabs some sample shoes apps uh that you can look at so there's actually really cool like um
00:17:39.520 animations this is actually one stolen from processing but it lets you just run them and uh you know check out all these
00:17:45.520 little these little fun things but um so we have this like code editor and it's got line numbers and you can like syntax
00:17:51.840 highlighting stuff um when you type in do it'll highlight things and let you move around and you can just click save
00:17:58.160 and uh and save your program and run it so you know super integrated mini IDE uh
00:18:03.200 you can actually learn Ruby via these lessons so uh you it actually folds out these little these little side panels
00:18:09.360 and you're able to uh to go through and learn programming it tells you how to start typing stuff we actually
00:18:15.440 implemented logo as a DSL in Ruby and put it into hacky hack so you actually start off by learning logo in Ruby to
00:18:22.320 learn programming which is kind of slightly meta but uh you know good so uh so I'm a big fan of that and then
00:18:28.320 there's also um so you have your list of programs and you can actually um go to
00:18:33.919 the uh website and sign up and get an account and then back up your programs
00:18:38.960 to the cloud um on the website and share them with other people and help each other out so um I was so excited i
00:18:45.200 didn't explicitly build like forking functionality into the website it's sort of like a almost like a mini GitHub
00:18:50.400 right because GitHub influences all of our lives as developers so with the Hackyak project I wanted to have
00:18:55.440 something similar and uh organically uh these two like 15-year-old kids were
00:19:01.120 building a little uh a little application and one of them had a problem and the other one said "Hey I copied your program and I tried it out
00:19:06.960 and I fixed a bug and like check out my version." and I went "Yes you know all all of the work that I've been doing has
00:19:12.799 meaning." Um so you know it's great i've had people uh email me and say "Hey I went through this with my seven-year-old
00:19:18.400 son and now he's like playing around and making little games and messing with things." Um so you know it's uh it's
00:19:23.679 real good but anyway this is an example just of a larger shoes app and how it can sort of scale up to you know
00:19:29.840 semi-real uh applications and also uh I distribute an actual copy of Pong with
00:19:35.600 uh with Hackak as well which is kind of cool so you get you can actually play uh by just moving the mouse and uh the AI
00:19:43.200 isn't particularly great but you know whatever so that's an example of uh yeah
00:19:48.480 computer wins uh you can build whole games in shoes via a shoes app and you
00:19:53.600 know all that meta stuff so awesome code demo everything didn't
00:19:58.760 break never fails such a bad idea um so shoes is awesome right uh I love shoes
00:20:06.320 but uh there are some things about it that uh that aren't so we'll talk about what's awesome about shoes and what's
00:20:11.600 not awesome about shoes so first of all uh most importantly yeah guey toolkit
00:20:17.200 isn't actually a pain to use the only one I've ever found that's like this um
00:20:22.559 the the best thing about shoes though the more I've come to work with it uh is to appreciate that the the value of
00:20:28.080 shoes or what's great about shoes is its interface and not its implementation so
00:20:33.520 um this manifests itself in a bunch of different ways but uh the largest is just that that the the joy that comes
00:20:39.679 out of using shoes is because it is a great way to build gooies but the the actual details of how that how that
00:20:46.000 works is uh the first of all the implementation of shoes is a little bit of a problem but also there's no reason
00:20:51.200 there can't be multiple flavors of shoes so um a while back uh we decided to
00:20:56.640 actually explicitly do this and one of the core team members created green shoes which is a uh a shoes that's about
00:21:04.559 90% compatible with the classic or what we're calling red shoes but it uses uh the native Ruby GTK bindings to build uh
00:21:13.840 using the same interface you can run your code um via that and so uh it's it's an interesting uh experiment
00:21:20.720 recently released 10 um on Yday Okay uh and um so it's sort of like a different
00:21:26.240 backend to the same front end so if you wanted to uh you know help out or add a
00:21:31.520 feature and you more comfortable with using Ruby than using C because uh shoes is implemented in C and I'll get to that
00:21:36.559 in a minute uh you could use the green shoes project and add it there right and interesting ideas uh that have been
00:21:42.640 prototyped in green shoes get eventually moved into red and it's all sort of a little you know ecosystem so uh so we
00:21:48.720 want people to be able to build their own custom shoes and this of course means that this leads into uh a shoes
00:21:54.799 spec project which we're naming white shoes that uh eventually we'll be able to just like Ruby has a Ruby spec and
00:22:01.200 you can imp uh unit test different implementations to see how conformant they are we want to have uh unit tests
00:22:06.799 for shoes apps or shoes implementations to see uh how conformant they are eventually down the road um but these
00:22:13.840 are the two major forks um there are a couple other ones that have sort of started up and fizzed out a little bit but Green shows is going strong and is a
00:22:20.720 really awesome project um being cross crossplatform is also one of the great
00:22:26.159 things about shoes right so uh as developers we want to do things that minimize our time actually developing uh
00:22:32.799 the the junk and we want to be implementing interesting logic right so
00:22:38.080 uh write once run anywhere is is awesome and you actually get to do that uh with shoes so um so that's pretty cool uh but
00:22:46.559 like I said there's some things that are just not awesome about shoes and I would be lying to you if I told you that everything was super happy uh and great
00:22:53.679 so uh this is currently what the problems are um with shoes so uh for the
00:23:00.320 last two years of working on shoes in Hacky there's there's a reason that I had to take over the shoes project and that's that the people who were working
00:23:06.720 on shoes basically stopped working on shoes so uh I've pretty much been by myself on both projects for the last two
00:23:12.799 years uh and that can be pretty demoralizing at times um it's really difficult whenever you spend uh hours
00:23:20.080 fixing something and you're not even sure if anybody uses it i'm really driven by motivation of people actually using the software that I write and so
00:23:27.200 uh you know it's uh that's what's been great about Hackerty um specifically is that a lot of people use it and so my
00:23:32.400 work through shoes comes forward in Hacky but um it's been very hard to uh to keep going whenever you're sort of by
00:23:39.280 yourself um and uh the other problem is platform stuff so uh the by yourself
00:23:47.200 thing manifests itself in other ways more than just me wearing black clothing and crying in a corner or whatever um so
00:23:52.880 when you're by yourself and uh you're supporting uh Mac Windows Linux you're like "Okay cool cross crossplatform
00:23:59.679 whatever." But three platforms is not actually three platforms right so if we're talking about Linux I need to
00:24:05.039 support Iuntu uh of course but there's also Fedora and Arch Linux um if I'm
00:24:11.120 talking about Windows there's Windows XP and Windows Vista and Windows 7 if
00:24:16.480 talking about the Mac then you have Mac OS Leopard and you have Snow Leopard and you have Lion now so uh you know
00:24:24.480 supporting three platforms is actually more like supporting eight or 10 uh or 12 platforms and uh whenever the
00:24:31.279 original creator of the project is no longer with you and he used old APIs to
00:24:36.720 implement large swatches of functionality and then this guy somebody who I I uh like a lot decides to like
00:24:44.320 remove entire chunks of you know the Mac OS in his newest releases it creates problems and there's a lot of work uh
00:24:50.480 bit rot is a very real thing when you're working with desktop software any software for you know at all but
00:24:55.840 especially desktop software um and so currently actually uh the shoes works
00:25:02.000 with Lion but only if you build one yourself so if you go to the website and download it right now it will crash uh
00:25:07.600 and we're I'll get back to that in a little bit later but um bit rot is one of those things that actually does um
00:25:13.360 happen and is very hard as a single developer to be an expert on 12 different versions of operating systems
00:25:18.960 and all their little kinks and you know fiddly bits so um so I'm lay tired from
00:25:25.600 dealing with all of these issues uh it's also really hard because you know every change I make I don't want to break
00:25:31.039 things so if I want to implement a new feature I have to test it on all of those operating systems and uh this is
00:25:37.279 one of the things that I love about open source is that working on my projects lets me work on other people's projects so if you haven't heard about Travis yet
00:25:44.240 you should go to that URL right now um because it's awesome so Travis CI is continuous integration for the open
00:25:50.799 source community in general it started off um for Ruby but has actually moved to be for um Erlang and Closure and a
00:25:57.919 couple other languages too um Node.js and uh Python and PHP are coming soon
00:26:03.120 but um basically this lets you just uh go to their website click sign in with GitHub it shows you all your
00:26:09.120 repositories and you say I yes I would love for this one to be continuously
00:26:14.440 integrated and then every time you push to GitHub it runs excuse
00:26:20.360 me it runs all your tests have a drink I can borrow quick is there
00:26:27.799 water i ran out of water
00:27:01.919 anyway Travis is awesome so um because
00:27:08.600 of at the moment it only supports Linux but uh this is a great way for me to
00:27:14.080 contribute to the project i'm helping them with Mac and Windows workers so that we're able to actually test
00:27:20.720 applications on multiple platforms and so that'll be a great way to be able to test all these things and uh make sure
00:27:26.640 that I'm not breaking stuff um because of all this too it
00:27:32.640 means that we've had historically had very infrequent releases so um we
00:27:38.000 released the first uh like shoes three a year after Y disappeared and uh we uh
00:27:45.440 haven't released since then so technically there hasn't been a new shoes release since uh August of 2010
00:27:52.880 which is a long time ago uh you know we talk about continuous deployment and wanting to push stuff to your customers
00:27:58.640 all the time but it's been very difficult to um get releases out there so uh you know that's another thing that
00:28:05.360 sort of manifests itself with all these other issues is that if you spend all your time fixing platform specific bugs
00:28:10.880 then uh it's hard to release often uh also shoes is written in C uh I
00:28:20.159 think this is really awesome but uh there's other people that don't think this is really awesome it's very hard to
00:28:25.520 uh convince rubists that they should take the time to learn an entirely new low-level language and deal with memory
00:28:32.080 and pointers and uh all those kinds of things so um for me it's a great excuse
00:28:37.200 to get into all that stuff because I really love programming in C but there's a lot of people that don't so um yeah so
00:28:42.720 I think it's awesome they don't think it's awesome uh so this is actually uh why a lot of the
00:28:49.080 uh shoes uh people that signed up after Y left left is because they looked at the codebase and said I don't really
00:28:55.039 want to work on that um also
00:29:01.320 uh somebody posted this in their blog uh a letter from Y and uh Y was saying that
00:29:06.559 he likes to experiment and not write tests and so maybe we shouldn't write tests too because why didn't do it and Y
00:29:12.720 was awesome and uh So I posted this which is very very very true as someone
00:29:18.880 who maintains wise code please write some tests for your application um it's incredibly difficult again like
00:29:25.840 12 different operating systems all written in C uh wise C code is not very
00:29:31.200 good to just straight up say it and uh there's there's a lot of uh not checking to see if things are
00:29:38.480 null before you dreference them kind of errors that will just you know lead to problems down the road uh and so um you
00:29:45.440 know having unit tests would be awesome i have zero and uh there's there's a file called ruby.c in shoes for example
00:29:52.480 that says uh the comment at the top says just a few bits of Ruby that I've become accustomed to smiley face it is like
00:29:59.600 3,000 lines of uncommented Zcode um so so unit tests would be great uh and you
00:30:06.640 should write them for your application so that you're not paying someone else's technical debt off someday in the future um it's totally worth it but you know uh
00:30:14.240 shoes is intimately uh tied to MRI at the moment and uh what that means is
00:30:20.000 that 192 it's not happening uh one of the reasons why we released shoes so
00:30:25.279 infrequently is because we currently were tied to Ruby 191 and Ruby 191 is a terrible abomination that never should
00:30:31.520 have been forced upon the world but I didn't know that right before it came out so we moved to 191 and uh you know
00:30:37.520 it's what happens so we're still working through a couple little one 192 issues but it's really difficult um I also want
00:30:42.880 to move to Rabinius at some point as well uh that'll probably end up happening but maybe not we'll see um I definitely want to get it working with
00:30:48.799 it but uh because Rubinius is a great project um so yeah so nobody knows shoes
00:30:55.840 is sort of the past and so what's going on with uh you know the future will anybody know shoes or what's the what's
00:31:01.760 the project like we're sort of at this weird tipping point right now which is really awesome uh and it's an exciting
00:31:06.880 time um specifically but there's definitely a very clear separation I feel between this moment that's
00:31:12.240 happening um and the past and the future like it's all going to be different uh going forward than it was in the past
00:31:19.200 this is very hard for me to to um sort of work through one of the reasons why it took me two years to really get going
00:31:25.279 on these projects is you know when you pick up someone else's uh work of art that is very obviously uh closely
00:31:32.399 personal to them and they like threw it in the garbage can and you sort of picked it up you you don't want to like
00:31:37.919 ruin what they originally were intending uh but you also like have different goals than the original creator so like
00:31:44.640 I uh think that there's a lot of beauty in maintaining software uh and having lots of tests and being able to change
00:31:51.440 things easily and so it's not that why was bad it's that his goals were
00:31:56.880 different than my goals and so now I have to turn his code into the code that I want to see um and so it took me a
00:32:02.640 long time to become okay with uh removing thousands of lines of code that why wrote from a project you know it's
00:32:08.720 very it's very difficult um also there's this sort of effect which uh is something that's uh slightly
00:32:15.360 important i want to say a couple words about celebrity in the programming community uh I heard this at Lonear Rub
00:32:21.279 uh I can die happy when I go to a Ruby conference and I don't hear anyone say Zed Shaw or Y um and uh for the record
00:32:29.200 this conference actually has been zero until me just now uh so good job um at
00:32:34.720 that conference the best part was at that conference I got to put up a slide that said Y3 Zed 5 uh during talks at
00:32:42.559 that conference um and so uh you know this is sort of the I'm giving a talk
00:32:48.960 and mentioning why because you know I sort of feel like I want to say a couple things uh about him and about what I'm doing with his work but um I am slowly
00:32:56.320 uh systematically removing why from the project and it's not uh it's not because
00:33:02.640 I don't like why because uh why was awesome right like that's the reason that I'm devoting most of my life to continuing his work but he did want to
00:33:09.200 leave and be left alone and so I feel that it's only respectful not to uh keep keep talking about someone forever right
00:33:15.760 like you you break up with a girl and you don't keep her pictures around your apartment you know for the rest of all
00:33:21.200 time uh it's part of the like moving on process is that uh you know we need to
00:33:26.240 remember why for sure and that's one of the reasons why uh you know Y day is awesome so I wrote this blog post called
00:33:32.480 we forget that open source is made out of people and um you know we do invest a lot uh of ourselves into the projects
00:33:40.159 that we write so like I said I wasn't comfortable with changing wise code for a long time because you know wise code
00:33:45.360 is what we have left of why and he invested a lot of himself into it and we sort of have this like meritocracy uh
00:33:51.840 idea that I don't think is actually true so we'd like to say that all the software we write and we put on GitHub
00:33:57.039 is totally impersonal and it's all about whether it works or whether it doesn't work and uh you know it's it's it's just
00:34:03.279 about code right like it's you know when I tell you that that code that you wrote is terrible it doesn't mean that you're a bad person it's about the code i'm not
00:34:09.280 saying anything about you but it's terrible um and and this happens right like I do this to other people sometimes
00:34:15.359 and and other people have done it to me and we we sort of ignore this human element that I think is really important
00:34:20.560 so um we need to all remember that we are people and that we invest ourselves into the work that we do and it's really
00:34:26.399 easy to uh to take things personally when you criticize so uh we should be remembering things in a good way so Y
00:34:33.440 day for example awesome i want to keep doing Y day in the future and and continue to like remember why on Yday
00:34:39.760 but I don't think it's healthy to keep talking about him every other day of the year so um and yeah so that's the big
00:34:46.399 the big emphasis we're all people uh this manifests itself also in the celebrity effect that we're talking
00:34:51.760 about before so um you know people talk about Zed and Y because they're they're
00:34:56.879 famous and cool and did cool stuff but there are tons of people that are doing really cool stuff that aren't name brand people and I think they deserve the same
00:35:03.359 amount of of recognition so um you know I uh I would like to see that sort of
00:35:08.880 flatten out and yeah even PHP developers they're people too so we're all in this together as as uh as software
00:35:15.599 programmers so uh you know we should remember this and and deriding other people's languages while it's fun to do
00:35:21.920 and you know uh all that stuff it's it's not a healthy way to move forward as a
00:35:27.280 community so uh I want to see everything be happy so one of the reasons why I love following Tenderlove on Twitter is
00:35:32.800 because of his Friday mornings like let's have a hug guys right he takes a picture of himself with his with his arms outstretched or you know saying you
00:35:39.920 know doing silly things and it's uh it's very uh it's very positive and uh upbringing so I want to see a lot more
00:35:45.520 of this uh in general out of us and out of our uh you know community and what we're doing with projects um this is
00:35:52.160 also why I love contributing to Travis because Sven and Josh uh genuinely are incredibly happy anytime you help them
00:35:58.480 with anything uh their IRC is one of the best rooms to be in just because they uh
00:36:03.760 they love doing this and they uh enjoy that people want to help them so that sort of positive energy is very uh
00:36:10.880 infectious and it creates a really great environment to uh to work in um GitHub
00:36:16.720 adding emoji to like pull requests and stuff and like comments is like great because you can like put all these silly
00:36:21.920 things in there and you know make it much more light-hearted and happy so uh I really like having that and so um so
00:36:28.560 as I'm moving forward these are the kinds I'm thinking about right like what community do we want to create as software developers um as someone who's
00:36:35.119 running a project and as someone who's running a project that basically is minting new developers right like I'm I'm having metaphorical babies what kind
00:36:42.320 of world do I want them to grow up in and so you know when I make new programmers I want them to to be taking
00:36:47.520 part in something that I would be that I would be proud of so um as far as the actual technical details of what's going
00:36:53.440 on with the future um choose 3.1 beta uh I'd like to sort of semi announce
00:37:00.000 that uh today so uh we some of the stuff that I've told you is slightly outdated
00:37:05.680 as of right this second so um shoes 3.1 is mostly about moving to Ruby 192 and
00:37:11.359 so if you build shoes head today uh with Windows and or with Mac and Linux you'll
00:37:17.839 get a working shoes based on Ruby 192 with a couple other bug fixes and stuff if you build on Windows it will compile
00:37:23.920 but not quite run and this is largely due to the fact that we all are not very experienced with Windows and we redid uh
00:37:30.320 the build process entirely to make it better but something is still a little bit broken so I was furiously working
00:37:35.839 the last couple days to try to get it working right before uh this happened so I could just be like it's out but not
00:37:41.280 quite so uh so it's a beta instead of a release candidate so uh if you would like to help you can check it out on the
00:37:47.119 shoes wiki um and there's links and stuff so uh we would love to have some additional uh help testing this newest
00:37:54.240 release of shoes if there are other bugs I mean you know the Mac and Linux versions too uh actually are working but
00:37:59.920 we would love your bug reports feedback comments you know we're always trying to make shoes better in general and as part
00:38:05.760 of that like not having celebrity happen um I uh while I'm the one up here
00:38:11.359 announcing shoes 3.1 uh it's not really due to my work in a large uh part of it
00:38:17.359 so specifically uh was not rice and Chuck Reams are two guys who have put a lot of time and effort in in the last
00:38:23.599 month so uh like I said just that little bit of help from someone can sort of take a project that's stagnant and make
00:38:29.760 it you know uh explode so these two guys sort of jumped in the IRC and said "Hey
00:38:34.800 I'd like to help what can I do?" And um so in the last like six weeks there's been more activity in shoes development
00:38:40.720 than in the last two years and it's solely because one or two people decided to actually uh help in help and get
00:38:46.000 stuff done so uh Eric rewrote the Mac uh build process entirely and Chuck rewrote
00:38:52.240 the Windows build process entirely themselves which is no small feat again with C compilation compiling Ruby uh 10
00:38:59.040 to 15 dependencies of like various you know C stuff that we use is not a non-trivial thing and so you know I uh
00:39:06.640 they're awesome uh all these other people Toby uh Fininszy Dominic uh Corey
00:39:12.480 Dan and Matias they've all been doing a lot of great work on shoes and Hackard specifically lately um you know uh Dom
00:39:19.760 is helping me rewrite the website uh for Hacky Hack uh Matias is doing the same thing with the the GitHub style or like
00:39:26.720 code sharing style stuff on the Hacky website corey and Dan contributed great stuff to the Hacketty you know
00:39:31.920 application themselves working with the new site and doing those kinds of things and Finy and Toby have been working on you know various things around shoes so
00:39:39.040 uh all of these people uh have been helping me out a lot and I really really appreciate it and they've completely
00:39:44.480 changed my perspective um on a project that was you know difficult to work on like I said you know when you're doing
00:39:49.599 something by yourself for a long time and so um I owe them a great deal uh for that so um yeah if you want to help out
00:39:58.160 with shoes we would love to have you even just advice or like I went to your website and it sucks because of X would
00:40:04.079 be awesome so uh you can hit the the shoes wiki uh shoes at liberalist.com is
00:40:09.359 our mailing list we have pound shoes on freode uh as well and uh if you want to get in touch also there's the shoesb
00:40:17.119 Twitter account because uh all the good variations of shoes were taken and Twitter doesn't give up names that no one uses anymore so three O's and shoes
00:40:24.880 RB and if you don't feel comfortable posting the mailing list you could actually uh email me directly and uh you
00:40:32.240 know I I would love any feedback or thoughts or whatever so uh you know you can send me an email so uh thanks uh
00:40:40.240 yeah as always you can reach me at all these different places with my Twitter and uh our status uh on the web the
00:40:46.560 websites for shoes and uh hacky hack that should be 10 and chrrbb.com i
00:40:51.760 typoed my own slide um so uh yeah I'm also on speaker rate uh all the talks
00:40:57.200 that you go to you should go to speaker rate and rate the people that talk because it's the only way we can get feedback about our talks so really
00:41:02.640 appreciate it and uh I'm writing a book about rest so uh get some re.st is about
00:41:08.480 uh real rest and why Rails is not actually REST so uh if that means anything to you or doesn't you should
00:41:14.000 check it out uh and I run training classes now with Jeff at Jumpstart Labs so uh you know that's other things that
00:41:20.319 are going on with me sort of unrelated to shoes uh so yeah thanks uh I don't
00:41:25.920 know what my time is at all i think I have some time for a couple questions at least right when's the next person
00:41:31.599 starting yeah we're good okay yes what's up
00:41:38.200 so maintenance programming is entirely different than green field development you know this more more than like
00:41:44.000 anybody does so I will be moving to 193 as soon as humanly possible once it's
00:41:49.040 out but it's the same sort of deal right like the difference between 191 and 192 is bigger than 192 and 193 in a lot of
00:41:55.760 ways so uh as soon as 193 final actually comes out I'm going to start like doing
00:42:01.520 that and moving and it should be a relatively easy transition because the biggest thing is like threading right so
00:42:07.359 uh 191 actually causes a lot of crashes on Windows um and this affects a lot of uh of hacky hack uh users because guey
00:42:15.200 stuff uses heavy threading and one-on-one threading was the worst part about a terrible release of Ruby so um
00:42:21.520 yeah that's big anybody else yes have you looked into what frameworks
00:42:28.240 there are for C uh yes so there is a bunch of testing frameworks but as I'm sure you know if you don't write
00:42:34.640 your code to be testable it's often really hard to get your code under test so um every one of you should go out and
00:42:40.640 buy working effectively with legacy code by Michael Feathers uh right this second
00:42:46.640 um that is another book that changed my life uh Jim you know Wyrick gave the talk where he talked about the books
00:42:52.480 that changed his programming life and uh working effectively with legacy code uh changed my uh perspective he defines
00:42:59.440 legacy code as testable code and so it's a basically a bunch of strategies for getting completely untestable code under
00:43:05.920 test so um yeah so looking into it and that sort of stuff so thanks and yeah
Explore all talks recorded at RubyConf 2011
+55