The Changelog: Software Development, Open Source - Sammy.js and Semantic Versioning (Interview)

Episode Date: April 20, 2010

Adam and Wynn caught up with Aaron Quint, the brains behind Sammy.js, a neat JavaScript framework built on top on jQuery fashioned after Ruby’s Sinatra....

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome to The Changelog, episode 0.2.2. I'm Adam Stachowiak. And I am Winn Netherland. This is The Changelog. We cover what's fresh and new in the world of open source. If you found us on iTunes, we're also on the web at thechangelog.com. Or for a real-time view, check out tail.thechangelog.com. Also head over to
Starting point is 00:00:31 github.com forward slash explore. You'll find some training repos, some feature repos from the blog, as well as our audio podcasts. If you're on the Twitter, you can follow Change Log Show, not The Change Log.
Starting point is 00:00:42 And I am Adam Stack. And I am Penguin, P-E-N-G-W-Y-N-N. Such a fun interview this week with Aaron Quint, Sammy JS, a fun little JavaScript framework built on top of jQuery fashioned after Ruby Sinatra. Yeah, it's pretty exciting to have this conversation. Yeah, since we're using it in our project ourselves, it's really helped to organize our jQueries and bring some sanity back to our JavaScripts. Absolutely. So what do you think about this little framework?
Starting point is 00:01:11 Yeah, I'm excited about what it does. I mean, I think having, especially when he talked about multiple applications of SAMI inside of one app, I think it just provides a lot of functionality that we've really been craving but hadn't really had an ability to do. It's nice because it splits the middle between adding some organization to your JavaScript and responding to events and things like that, but without getting full bore MVC on the client like SproutCore, some others that tend to be a little heavier for a lot of projects. Yeah, I think that was one part of the interview I really enjoyed was where he talked about how you can just easily integrate it or just, you know, you don't have to, like, make a large decision to get into it. It's just easy to pull into any project.
Starting point is 00:01:49 Aaron gave us some updates on JSConf as well. Bum that we had to miss that. But we're looking forward to Texas JavaScript coming up in June. Yep, absolutely. It's going to be a fun time down there. The lineup is just outstanding. Well, it's a fun interview this week. Do you want to get to it?
Starting point is 00:02:03 Let's do it. All right, we're joined today by Aaron Quint from SammyJS. Aaron, why don't you tell the folks who you are and why they should care? Yeah, so my name is Aaron Quint. I'm a born and raised Brooklynite, Brooklyn, New York. I've been doing Ruby development for about six years now. And before JavaScript over the past couple months with some little bits of Ruby thrown in. And out of that and out of kind of my desire to kind of, I guess, organize my thoughts and organize these kind of JavaScript applications that I was building. I kind of stole some ideas from one of my favorite Ruby projects, Sinatra, and kind of brought those same API and the same beautiful kind of simple structure that Sinatra has into JavaScript and into kind of the jQuery world with Sammy.js. So Sammy is kind of a, I wouldn't say direct copy, but it implements a very similar API to what everyone's familiar with in the Ruby community with Sinatra, which is kind of simply structure these applications and create kind of single
Starting point is 00:03:46 page apps the way Gmail or Google Reader and a lot of the other Google apps work where you kind of operate on this hashtag so that you can, you know, change the maintained state of a JavaScript app within a URL but without actually reloading the page. And it goes beyond that too, but that was kind of the first, that's kind of the first general overview. And then it goes a little deeper for sure. Yeah, I'm a big Sinatra fan myself. And I think that's one of the things that attracted me to it because in Sinatra, you
Starting point is 00:04:20 know, it's very close, the routes that you respond to with the implementation that respond to those routes. So Sammy's got a really natural DSL to allow you to organize that JavaScript. One of the digs on jQuery is with all this unobtrusiveness. When I was trying to bring a lot of my fellow Rubyists into the jQuery unobtrusive JavaScript fray, they would complain about not knowing where particular functionality was coming from
Starting point is 00:04:49 and where elements were being hijacked. So talk a bit about the routes and SAMI applications and kind of this ability to have multiple applications on a single page. Sure. So actually, to step back a minute too, kind of a funny thing is that where Sammy actually started was, it actually was a,
Starting point is 00:05:17 I'd love to lie and say that it was kind of a 37 Signals, you know, myth that, you know i i built it as part of an app and then i extracted it out into this awesome framework um it wasn't that at all actually it was kind of like i'd been working so much in sinatra and talking about sinatra and working with blake and those awesome guys uh in the sinatra community and I kind of dared myself as an academic experiment to kind of see if I could replicate a lot of the functionality in JavaScript. And first pass, I was able to do it,
Starting point is 00:05:57 but then I was kind of like, okay, what do I really use this for? And it was actually this guy, Alex Lang from Germany, who started using it before I even had a really good use for it and turned it and kind of showed me kind of what I did, which was organize, make it so that this simple API is really useful for organizing jQuery code and organizing and kind of building these applications from the ground up, which is very cool. So the way the applications kind of work is they're centered around, as you said, these routes.
Starting point is 00:06:37 And a route is really just in SAMI, it's a path, a verb, a path, and a callback. So the verb is kind of like your classic HTTP verb, which is get, post, put, delete. And in SAMI, though, that means something kind of different. You know, since we're not actually making round trips to the server and there are no real get or post requests. In SAMI, a get request means you're actually hitting that path, which could be part of the hashtag or it's kind of a location that's stored somewhere.
Starting point is 00:07:18 The location changes to that path. That's a get request. The post requests are actually put and delete to are all focused on form. So if a form submission happens on the page, Sammy intercepts it with the magic of JavaScript and the magic of jQuery and turns that into this, forces it through this route, which then you can respond to and you have this callback function, which allows you to execute on whatever path you're working on. One of the nice things about that, just to interrupt for a second, one of the nice things that I've noticed about that is the param handling inside of those routes.
Starting point is 00:07:59 So it feels very natural if you're Rails or Ruby to have a params hash coming from the form that's been submitted without having to do a lot of form mapping. Yeah, I think it also, in terms of just organizational and sort of your mind workflow-wise, at least for me, I'm realizing that it's very much a Ruby approach and a Ruby and Rails and Sinatra kind of mindset that's driving this and that makes it easy for Ruby developers. It's kind of a bigger mind jump almost for PHP or developers who aren't kind of used to this routes approach. And people I've talked to kind of have to make that mind jump.
Starting point is 00:08:44 But once they do, they understand it. If you think in the workflow of an application like this where you have paths that do specific things and a path is really a state, or a get path is really a state, and then a post path is like an action, when you start thinking about it like that and organizing your code like that
Starting point is 00:09:05 like you said before where jQuery you know jQuery applications can often become these kind of uh chain you know enough chain to hang yourself I guess you could say um and you kind of have a whole page full of these just you know know, bindings to different elements, you know, there's no concept of really state or what page you're on or what action you're on in that, in that kind of workflow. So the goal, or one of the goals of Sammy is that if you start from this kind of application, you're, you're building an application perspective, as opposed to, Hey, I'm just adding some behavior to this page. Um, it're building an application perspective as opposed to, hey, I'm just adding some behavior to this page. It gives you a lot of structure so that you can easily rethink your application or when you're starting from scratch, really lay it out in a way
Starting point is 00:10:01 that other people can understand it and that it's a lot easier to maintain, I would say. You know, while ideas have been borrowed from Ruby heavily in this, we should mention that it's got a very JavaScript flavor to it. So it doesn't feel like you ported one DSL from one language to the next. This is the JavaScript framework. Thanks. javascript framework thanks i think i think um something that uh i really owed a jquery in general is that you know as a as a rails developer and as a ruby developer when i started doing javascript i mean i played around with it forever i've been doing websites since i was like 12 so i mean i you know i made elements on the page blink and I, you know, made
Starting point is 00:10:45 little dots on the screen, follow your cursor, but that's not JavaScript in the way we use JavaScript today. Um, but then when I got into rails, it was kind of prototype was the thing. And though I, though I, I enjoyed programming and prototype and it kind of showed me a way, and I think it showed a lot of people like kind kind of, oh, wow, JavaScript can actually be powerful. My opinion is that a prototype in general, kind of at least the way it is now, kind of hides a lot of the core kind of awesomeness that JavaScript has in favor of making it more Ruby-ish.
Starting point is 00:11:26 And so if you're a Ruby developer and you're coming into Rails and you're like, oh, here's prototype, you make this awesome kind of, you can easily translate the way you've been thinking about applications in Ruby or the way you've been thinking about arrays and enumerables in Ruby easily to prototype. But what happens is you kind of lose the first step,
Starting point is 00:11:49 which I think jQuery at least gave me, which is, oh, in order to learn jQuery, I kind of have to learn a lot more about JavaScript. And not only that, but jQuery really only deals with a very specific subset of browser JavaScript, which is like the DOM and events. And because of that, anything else you want to do, you kind of have to figure out,
Starting point is 00:12:13 oh, I need to figure out what a function is and I want to learn how to organize my code. And that kind of leads you, or should lead you, into kind of learning more about JavaScript itself, which is actually a pretty awesome language. Anytime you actually pull a framework together like you have, you always come out with plugins and different extensions that sort of help you get to a certain point faster.
Starting point is 00:12:34 Talk about the list of plugins you already have available. They're listed in your docs. But more importantly, talk about your idea to architect the plugins the way that you did. Sure. So another thing I kind of stole from Sinatra or tried to steal from the Sinatra community was kind of this, which actually it applies better even in JavaScript than Ruby,
Starting point is 00:12:59 is really kind of forcing myself to keep the core library as small as I possibly can. And, you know, the Sinatra guys, between 0.9 and 1.0, they removed more code than they added. And I think that that was kind of, I took that, I mean, it makes even more sense on the client side when you actually have to download the file. If you can eliminate as much code as possible and make the core as tight as possible, then people can use it in more places and only bring in the functionality they need. So a little while back, I was like, okay, how am I going to do this? And then the beautiful power of JavaScript functions and closures dawned on me, and I realized that a SAMI application is actually just a function,
Starting point is 00:13:55 or a SAMI application block, as I like to call it, even though it's a closure. It's really a function that gets applied to this SAMI application object. So that's an application, but why can't plugins just be the same thing? So plugins are really just functions that are named like Sammy dot something. And all you're doing is when you do this dot use is you're applying the function that is that plugin to the, to the application that you're including it in and adding all the helpers or whatever else you need. So Sammy has this idea of helpers,
Starting point is 00:14:31 which you can use inside of your routes and inside of your templates. And plugins, for the most part, add those helpers. So right now, the main plugins that I kind of use on a daily basis, we have a bunch and most of them are user contributed and I'm happy. I would love to get more people adding them
Starting point is 00:14:55 and extracting functionality that common functionality into these plugins. But the main ones right now that people use are kind of the templating plugins. So we have a mustache plugin that's just basically kind of a thin wrapper around Jan Landhart's and Chris Wanschroth's mustache.js. And then there's a Haml.js one, which is Tim Caswell from the Node community. His client-side Haml parser also has a thin wrapper. I actually just worked on this one that Ruby and Rails guys would appreciate,
Starting point is 00:15:31 but in building this kind of bigger application, I was yearning for some of the form helpers that Rails has, specifically being able to have a text field and have it be auto-populated with an object. So there's this new Sammy.form plugin that I just added recently that kind of tries to replicate some of the form helper functionality that Rails has, but as small as possible. And it's really just putting DOM nodes into strings and stuff like that.
Starting point is 00:16:09 But yeah, the one that I actually, has been around for a while, but people don't actually know about, which I'm going to pull back into core, is this Sammy Google Analytics plugin. Because you can actually track Google Analytics, or track hashtags and stuff like that through Google Analytics. They have a thing mainly for Flash, but
Starting point is 00:16:25 it's pretty easy to adapt for SAMI apps too. One of the ones that I'm excited about is nested params allows you to have those rich, deep object caches if you build your forms a certain way a la the Rails approach. Talk a minute about SAMI storage
Starting point is 00:16:42 and SAMI cache and how you see a front-end framework like this paired with the back-end persistence layer like something you would see from Couch or one of the other NoSQL stores. Sure, sure. So Semi.Storage is basically a really simple wrapper around all or a lot of the options for client-side storage so it can write to cookies
Starting point is 00:17:08 it can write to um html local storage and html session storage and it can also write to jquery data and memory um just straight up basically just a hash. But the idea was that all of these different storage engines kind of have different APIs, so I wanted to try to unify them into a simple, basically key value store API that I could use for storing any local data in an app. I also want to kind of add, I'm looking forward to adding the kind of SQL storage
Starting point is 00:17:43 that WebKit has now and add that as a backend too. But like you were saying, it's really for local storage and almost to allow you to kind of do sessions and stuff like that and caching
Starting point is 00:17:59 in the browser. For backend storage, I mean in the end it's all just JSON being stored as key values. So ideally, the API could be extended to also CouchDB or any other kind of these HTTP or RESTful stores like Couch or even just a general Rails app that you have a RESTful resource and you're pushing stuff up. The only difference is that would be asynchronous. So dealing with that and how you deal with asynchronous storage is kind of a different question, but I'm looking to answer that. In general, Sammy plays really well with these RESTful and server-side JSON stores.
Starting point is 00:18:47 CouchDB specifically has such a cool API. It just seems to fit the web and Sammy so well that I think it's kind of the first choice for a lot of people who have been developing these Sammy apps to just kind of use Couch because it just kind of works. And I'm pretty happy about that marriage, to say the least. You know, I don't think I got the play on words with the name until I checked out the Twitter page, Semi underscore JS on Twitter. It's Semi Davis Jr., right? Yep. As opposed to Frank Sinatra. That's a nice one. The Rat Pack.
Starting point is 00:19:28 Talking a minute about building a successful project, open source project, do you think open source projects stand on their own merits or is it key in finding influencers? Like you mentioned, Alex Lang and I've seen Jan talk about Sammy before. What's the, I guess, the recipe for getting a project over the hump and to a wider audience? Yeah, that's actually a really good
Starting point is 00:19:53 question. I don't know if I have the answer because I don't know if Sammy is quite there yet, but I think there are a lot of things. I think one of the main things that I think, at least for me browsing open source projects, one of the things is documentation. And I think I have pretty decent documentation for SAMI, and I think that's one of the first things that I really worked hard on and I'm continuing to work on. But a lot of projects, it's really hard for,
Starting point is 00:20:27 as an end user, if you're browsing GitHub or just browsing jQuery plugins and whatever it is, to just really jump into something or trust something if the documentation isn't there. And I think a lot of people neglect that and don't really spend a lot of time documenting their code. And it's really, it's time consuming, but it's totally worth it because when you start documenting, at least for me, I often find that I find holes in my API or find, you know, ways I can make things better because if I can't really explain it in documentation, then no one else will probably understand it. So I think that's one thing.
Starting point is 00:21:13 I think the other thing is, yeah, I don't know if it's actually tying yourself to other projects, but I think it's good to, you know, be a part of a – make yourself a part of a community and show how, for Sammy, I wasn't the first one that used Sammy with Couch. It was this guy, Alex, and he kind of realized the potential there. But since then, I've kind of pushed that
Starting point is 00:21:43 and made that connection you know, connection or that marriage clear. And I think that that's helped out a lot in terms of gaining users and getting some momentum on the project. You know, I know what I'm considering a new open source project, whether or not I want to use it in one of my projects. Documentation is key, as you mentioned. What's your breakdown? How much time do you actually spend documenting, Sammy? Because Sammy's got some really nice docs that talk to the API. What's the split between documenting your code and slinging code?
Starting point is 00:22:19 Yeah, it kind of depends, but often I'd say it's at least, I spend at least, well, I guess if you include, you know, working on the mailing list and responding to questions on the mailing list and responding to github issues and responding to um you know uh people in irc and stuff like that if you count all that as like kind of support time and writing documentation all in that i'd say it's almost like 40 writing code 60 support if not more um once you have a project in the wild that people actually use it's it's great at the same time it's also time consuming to actually support it and i think um i'd say yeah if you want if you want actually if you actually want people to use it,
Starting point is 00:23:08 which if you're putting stuff out there, either you want people to use it or just putting it out there to kind of put it out there. And if you want people to use it, I think the, the key is getting other people involved and getting other people to kind of start, you can eventually start delegating support, but for a long time, it's just you. And getting other people involved means that eventual, hopeful eventual goal of a successful open source project, which I guess it's hard to define specifically, but it really means having a lot of contributors and getting a lot of people involved more than just using it. So if you want that, I think, yeah, it's a lot. It's spending a lot of time documenting.
Starting point is 00:23:47 And for me, I just kind of write a lot of inline docs but also kind of try to write these tutorials too. And those are all very time-consuming, but in the end, the goal is that, you know, eventually I'll be able to delegate those tasks, I guess, to other people in the community. I was going to jump out and say it because I think that anyone who's gotten this far into the podcast
Starting point is 00:24:11 has got to be just thinking, what is the sweet spot for Samia? At what point do you decide to turn over a JavaScript functionality to Samia? Where does it really fit into an application? Sure. For me, I wouldn't necessarily suggest that someone takes an application that's totally working and rewrite it for SAMI. I think in general, I think it works better to start with it rather than try to force a lot of applications into it.
Starting point is 00:24:48 However, it doesn't mean that you have to have your entire, if you're writing a big Rails app, it doesn't mean that you have to have any kind of big server-side app and you have a lot of different pages and features on your site. It doesn't mean that the whole site has to be SAMI. In fact, at my current position, we've begun integrating at Paperless Post, we've begun integrating SAMI into different parts of our application. So it's not like the entire web app, which is pretty feature-rich and has a lot of different parts of the site, are all Sammy.js. But we noticed that there are these smaller applications within the larger application that we're using it for.
Starting point is 00:25:34 For example, we have an inbox system where you manage the invitations and stuff like that that you've gotten. And there, it's like, oh, this is a perfect use for Sammy where you're navigating folders, you're navigating different pieces of the invitation, and you're going to details. It's a stateful thing that we can exist on a single page, and that's almost like the perfect use case for Sammy. Just to continue on that thread, I love how Sammy's not an all-or-none proposition.
Starting point is 00:26:09 So with other JavaScript frameworks like SproutCore and some of these others that implement full-blown MVC in the client, you kind of start with either a JavaScript entry point or you don't. With Sammy, you could come into an existing application and say, I think we could take these parts of the application and really organize them and maintain state better just by dropping in a SAMI application on this page. Totally. I think the key with
Starting point is 00:26:36 that is that it's pretty small. When you compress it, I forget the number as of today, but it's less than 15K or less than 20K. And that makes a big difference for when you're, you know, building these big apps. If you want to include something, you know, if you want to include something like jQuery UI right now, that's going to be, you know, 50 to 500K almost. So if you're thinking about something like that, it's's pretty it's kind of like a non-issue to include something like sammy that's so small and because of that i think it's really cool to be able to just bring it in piece the application that i'm working in the big application i'm
Starting point is 00:27:15 working on i've been bringing in you know piece by piece and kind of replacing or using it for these kind of smaller applications but it also um I want to point out, we were talking about Couch before, and in that way, if you're building kind of these, what I like to call these kind of like full client-side applications where either, yeah, and I know some people have been using it within PhoneGap too and within iPhone structure, and that's awesome, but within Couch
Starting point is 00:27:43 and the Couch app framework it's pretty awesome because it just allows you to kind of add structure instantly to data that you have in your database and to kind of this building an application that exists entirely on the client side
Starting point is 00:27:59 which is something I'm really excited about. You really have the choice in templating. You mentioned Mustache and Hamil.js and some of the others out there, but you really have the option still to use server-side templating if you want to do that as well
Starting point is 00:28:15 and just render partials in line. What are some of your other JavaScript frameworks? I know this one's built on top of jQuery. What about things like underscore.js and some of the others that are jQuery add-ons? Yeah, I think Underscore is really cool. That's actually represent, that's another New York City JavaScript guy,
Starting point is 00:28:38 Jeremy, who built that and also CoffeeScript. And he's obviously pretty prolific and does some pretty awesome stuff. The cool thing is because it's really just a jQuery plugin and I really tried to make it as use as few global namespaces as possible and
Starting point is 00:28:59 make it as, I guess you could say, you know, it doesn't really overlap or hurt to include it. I tried to, um, make it really easy for you to build it with other, you know, UI, UI components, jQuery components or underscore or whatever you want. Um, or even, you know, JQtouch, which is the iPhone library that's built on top of jQuery, too. Even though it has its own hash kind of navigation system, you could easily use kind of the, I guess, the UI elements that come with that, too. But as you said, server-side templating works, too. But as you said, server-side templating works too, and I've done that in a bunch of cases where we're really just rendering full HTML and using SAMI almost as kind of just a,
Starting point is 00:29:50 it's really just a controller to control the navigation structure and control the elements that are going to be populated onto the page. I think, actually, you bring up, when you mentioned templating, I wanted to mention that it's actually, that's the, right now we're at SAMI 053, and I'm going to get 054 out hopefully in the next couple days. But I've been wanting to hit 1.0 just because I know a lot of people are already using it in production, and according to Tom Preston Warner's semantic versioning spec, if someone's using it in production, it should be 10 so i feel a little bad about that um so i'm hoping that we can hit
Starting point is 00:30:31 1.0 pretty soon and kind of the big thing that i want to fix for 1.0 is the templating system because i think right now though it works it um it doesn't it doesn't do as much as I wish it could, and it doesn't actually, from, we were talking about support before, and from a support perspective, I've been spending, you know, I'd say out of the, you know, 60% time that I spend on support, I spend 40% of that, or no, like 50 or maybe even 60% of that time dealing with questions around the templating system and rendering and partials and stuff like that. So that's kind of a smell to me that we should do something about it. So I've been kind of stealing ideas and building up a kind of interesting, what I think will be an interesting approach to how we handle templating is based on some of the work that Dave Furbs is doing for LabJS and, not LabJS, sorry, SexyJS, which is a cool kind of sequential AJAX plugin and also kind of the stuff that Tim Caswell has been doing, CreationX for the Step library and the Do library and how he does these really interesting kind of,
Starting point is 00:31:47 um, work with continuations and using functions to kind of progressively progressively to kind of progressive Ajax, I guess you could call it. So tell us about, uh, JS conf and, and,
Starting point is 00:32:00 uh, making bacon. Yeah. So, uh, I mean, JSConf was awesome. I'm sorry you guys weren't there. You would have had a great time.
Starting point is 00:32:17 I can't say enough how awesome Chris Williams or Vujutiki got on Twitter who organized the whole thing and how awesome a job he did. I don't know. I've been to a lot of conferences and a lot of regional conferences and a lot of bigger conferences. And this JSConf is really like kind of this perfect middle where it feels almost like a hacker conf, but as opposed to kind of, you know, young guys or, you know, guys who
Starting point is 00:32:39 are, you know, not that experienced or just kind of trying to learn. It feels like there are a lot. Everyone's there to learn, but everyone there is are a lot, everyone's there to learn, but everyone there is, I mean, I can't speak for myself, but everyone I met was on some kind of other level of awesome. And, you know, between Brendan Eich and Crockford, who kind of bailed really early, but every single talk was just awesome. And even beyond the talks,
Starting point is 00:33:06 just one of the best things I think about JSConf is the hallway track, as you can call it. And I just spent a lot of time hanging out with a bunch of really, really talented JavaScript developers and hearing about their projects and listening to their opinions. And it was awesome. If you didn't see a my talk was a little
Starting point is 00:33:28 off subject chris kind of dared me to do or not dared me but uh we had a kind of long ongoing uh challenge going on that he said he told me that if I talked about bacon, if I made bacon on stage at JSConf, then he would let me be a keynote speaker. So we worked out something, and unfortunately the hotel wouldn't actually let us cook bacon on stage. But I did a little presentation, and I tried to actually tie it back into the JavaScript community about how heritage foods and the whole slow food movement, the JavaScript community
Starting point is 00:34:07 and the development community in general should take some ideas about sustainability and knowledge and respect from that community too. In general, it was a lot of fun. I think you've probably seen some pictures and some blog posts. It's almost been a week since it, or actually as of tonight, it'll be a week since it started. And I'm still not done digesting or processing all the information that I got out of it. A lot of bacon flying around in the IRC channel right now, too. So talk a minute about this renaissance in JavaScript that we've gotten over the, I guess,
Starting point is 00:34:47 last few months, maybe over a year. It seems like, you know, we've got it on the client with jQuery and Prototype before that and some of these other frameworks that made JavaScript suck less. But now it's really being embraced as a new-ish language and being used on the server. And I see that you guys have a new york's uh nyc.js meetup we've got a dallas.js you see i mean the thought of a the javascript meetup five years ago would have just been crazy totally so what's fueling all of this i think there are a lot of things i think one the the simplest you know the simplest explanation is just that browsers are just getting exponentially faster.
Starting point is 00:35:29 So Chrome and Chromium is just an order of magnitude faster, at least for a little while it was. Everybody else is slowly catching up, but faster than everyone else. And that was already faster than every browser a year before that. So I think for client-side at least, now that we can actually build kind of really complex applications and even 3D and OpenGL and Canvas stuff, which we couldn't have even dreamed of two years ago, people are starting to see, oh, we don't have to build a Java app
Starting point is 00:36:03 or we don't have to necessarily build an entire Flash application to sit on top of our server-side application. And because of that, it's just like, wow, JavaScript developers, there's actually a need and desire for talented JavaScript developers now that there wasn't two years ago. On the server-side, I think, you know, server side JavaScript has actually been around for a really, really long time. It's just almost the same thing.
Starting point is 00:36:32 There was never a, everyone kind of thought it was a joke because if you ran Rhino, you know, everyone says Ruby is pretty slow, but Rhino was like an order, like another level of slow. Like if you tried to run, I guess, NVIDIA JS or one of these really early server-side JavaScript frameworks, it was really slow, and it was fun because, hey, I'm programming JavaScript on the server, but there wasn't any actual, you know,
Starting point is 00:37:03 you couldn't actually use it in production. It was just too slow. But now with Node, which is also based on, you know, Chrome's V8 too, the speed is just incredible. And not only speed, but this idea of kind of invented applications is kind of, I think, where a lot of people think the web is heading, which is, you know, kind of these real-time or collaborative web applications that Node and these kind of server-side and pairing in with the client-side frameworks
Starting point is 00:37:32 allow you to have. But I think, I would say what I really love about the JavaScript community is it brings together some of the best minds in all these different communities. Whereas if you go to a Ruby meetup or you go to a PHP meetup, everyone's kind of just doing something different and working on different projects, but everyone's kind of doing very similar things. Especially in the Ruby world, it's like, okay, you go to a Ruby meetup and 90% of the people are doing Rails, and if they're not, then they're working on something else or they're teaching. And, you know, obviously, it's great to talk to people who have a lot of things in common, but there's not as many new ideas, I think, being tossed around as in the JavaScript community. In the JavaScript community,
Starting point is 00:38:21 like I went to jQueryConf last year and JSConf this weekend, too, reminded me of this. But it's just you have so many people whose day job isn't necessarily full-time JavaScript. It might start becoming full-time JavaScript, but you have people from the.NET community. You have people from the PHP community, and everyone kind of has their own ideas that they're bringing to the table. And beyond that, some people are using jQuery. Some people are using prototypes, or the Cappuccino guys, and it's just like, it's just so cool because everyone has so many different ideas to share and really learn from each other.
Starting point is 00:38:55 And it's just a really exciting thing to be a part of right now, I'd say. Yeah, absolutely. I think open source is a pretty wild world to be in, and there's lots of movement. But on that note, in open source software, what's on your radar? What's got you excited about the next big thing or whatever you're really excited about in open source? What's on your radar? after JSConf, one of the big things that I took away was kind of performance and, um, and really thinking about front end performance. And some of the things that, uh, tie into that are, uh, Kyle Simpson's or Getify's LabJS, um, framework, which is, you know, kind of like a progressive download and, um, you know, loading framework, which is pretty cool. And he says he's working on some even cooler stuff after talking to him.
Starting point is 00:39:52 So I'm really keeping an eye on that and hoping I can bring that into some projects. I'd say, you know, CouchApp, I've been a fan of for a while, but J. Chris, one of the main CouchDB guys, and Jan are both working on making CouchApp like an actual usable thing and kind of building frameworks within CouchApp. And this Evently framework that's part of CouchApp now is kind of has – steals some ideas from SammyJS. And at least they admitted that, which is cool. But it's pretty cool and it has some pretty cool functionality built into it um i think i mean i'm still keeping an eye on node and i'm ready to i'm ready to i don't think i'm ready to jump ship from ruby anytime soon but um i've been i've been playing around with it for you know over a year now and it's i'm looking forward to it actually stabilizing so that a lot of people can start building a real
Starting point is 00:40:48 standard lib almost on top of it so that people who actually want to use it for full-blown applications can really make use of it. I think on top of Node, there's the FAB framework, Jed Schmidt's FAB framework, and he talked about it at he gave an actually awesome, awesome presentation at JSConf that he gave a presentation actually at NYCJS about four or five months ago, and I talked to him about it then, and we watched it,
Starting point is 00:41:16 and I think everybody kind of left and was like, oh, what? Kind of had a funny reaction to it because it's a very interesting style of basically turning JavaScript into almost like a really lispy type of DSL. But he's worked on it a lot since then, and his presentation at JSConf was pretty incredible and really did an awesome job of explaining how it worked. So I urge anyone to check that out if they're interested in it. Now, I'm actually really excited about doing the show notes when we do this episode in post,
Starting point is 00:41:49 just to find all the links to a lot of the cool projects that you mentioned, because Adam and I tend to stay on the bleeding edge, but there's a lot of projects that you mentioned that aren't on my radar yet, and I'm interested in checking them out. Yeah. When making notes, you get the one from TP-Dubs, what was that again, Aaron? What did you say that it was his list of? Oh, yeah, the semantic versioning. Oh, semantic versioning.
Starting point is 00:42:14 That's simver.org? Simver.org, yeah. It's, I mean, when he put it out there, it was kind of like just pulling together ideas of how people have been doing it for a while. And I don't think even he would say that it's something new, but it's cool for these kind of, for me as a young developer, and I think for everybody else who kind of maybe hasn't been around in the open source community for forever to kind of put kind of meaning behind the x.y.z numbers that everyone uses. Yeah, I know we're using that as a guide over on the Twitter gem and some others.
Starting point is 00:42:53 Like you mentioned with Sammy, it's not always easy to do, but I'm glad there's kind of a framework out there for giving meaning to the ones, zeros, majors, and minors. Yeah, exactly. Well, thanks for joining us today. Really excited about using SAMI on a couple of different projects. And then when we stumbled across it, we just wanted to have you on
Starting point is 00:43:13 and share the word with the rest of the audience. We appreciate you taking the time. Awesome. Thank you guys so much. I'm a big fan of the show too, so excited to be on. Awesome. Thank you for listening to this edition of The Change Log. Point your browser to tail.thechangelog.com to find out what's going on right now in open source.
Starting point is 00:43:41 Also be sure to head to github.com forward slash explore to catch up on trending and feature repos, as well as the latest episodes of the change log. Outro Music

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.