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