The Changelog: Software Development, Open Source - Node.js and Server-Side JavaScript (Interview)

Episode Date: April 6, 2010

Adam and Wynn caught up with Felix Geisendörfer to talk about Node.js, server-side JavaScript, and JSConf 2010....

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome to The Change Log, episode 0.2.0. I'm Adam Stachowiak. And I'm Winn Netherland. 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 You can also head over to github.com
Starting point is 00:00:32 forward slash explore where you'll find some trending repos, some featured repos, as well as all the audio podcasts from this year's podcast. If you're on the Twitter, you can follow Changelog Show, not The Changelog, and I am Adam Stack. And I am Penguin, P-E-N-G-W-Y-N-N.
Starting point is 00:00:48 Awesome episode today. Talked to Felix Geisendorfer from Transloaded about Node.js, our favorite server-side JavaScript framework. Nice to see the streak has been kept alive. Kept alive at 20. Some awesome mind-bending JavaScript. Speaking of mind-bending JavaScript,
Starting point is 00:01:04 we'll be at Texas JavaScript June 5th in sunny Austin Texas and let's not forget we're heading to Red Dirt RubyConf back up to the OKC Coco up to the OKC Coco actually I think it's at the convention center the actual conference but I'm sure we'll stop into the Coco and see all the
Starting point is 00:01:19 compadres there that's May 6th and 7th open Oklahoma City great episode this week should we get to it? Let's do it. Hi, we're joined today by Felix Geisendorfer from Berlin to talk about Node.js. Felix, why don't you introduce yourself to the audience, let them know who you are and why they should care. All right. My name is Felix Geissendorfer, and I currently work a lot on Node.js,
Starting point is 00:01:51 which is why I'm on the show. I previously did a lot of work on CakePHP, and, yeah, I started using Node for a project of mine where, like other technologies, we're really bad fit, and maybe we can talk about that a little bit well it's kind of hard to to think that anybody that's caught a single episode of the changelog would not know what node.js is at this point but for those uninitiated folks that maybe this is their first episode why don't you give a little background about node.js and you know what problems it aims to solve? Okay, sure.
Starting point is 00:02:26 Well, Node, pretty much one description I read was it's the first server-side JavaScript implementation that you actually would want to use, which I think is a nice and simple explanation. A slightly longer version goes somewhere along the lines that you can do things in parallel with Node really easily because it sits in an event loop. So instead of just like writing your code line by line and seeing it executed in this order, you get callbacks for everything. So if you want to start
Starting point is 00:02:58 1,000 HTTP requests or answer 1,000 of them at the same time, it's not a big deal because it's all event-based. And that makes Node kind of special from most platforms where this stuff is definitely possible, but really cumbersome and not really efficient. So Node was created by Ryan Dahl, I guess. Right. How did you get involved with the project? I got involved with Node around June last year. I saw it a little bit earlier than that and thought it looked kind of neat.
Starting point is 00:03:29 And then I was doing a lot of work that involved worker queues. And I was writing those worker queues in PHP and PHP daemons to process a queue. And it was really messy. And I was remembering Node and how it was really easy to run comment line scripts in parallel with it, which is what I was doing a lot at that time. And so I tried to use it, and it worked pretty well initially. But I hit issues, and so I just started contributing. Because what actually made it really easy is that most of Node's API itself is in JavaScript instead of C++.
Starting point is 00:04:02 So people can contribute easily. I think it's kind of funny that we've actually I'm not sure if you actually noticed this, but this is going to be the next point release. The last point release was Chris Wanstra from GitHub and Felix gets to be episode 0.2.0 and that's
Starting point is 00:04:18 Node. We've been talking about Node for such a long time. It's been like a streak, so we finally get to episode 20 of the changelog and finally have someone on to talk about Node. How fitting. It's been like a streak, so we finally get to episode 20 of the changelog and finally have someone on to talk about Node. How fitting. It's actually even more fitting. The next big release of Node is also 0.20.
Starting point is 00:04:33 Wow. Yeah. It's an important release because it's going to bring some API stability. Let's talk about how you got started in, I guess, in open source and in Node.js. What got you on this kick,
Starting point is 00:04:49 and what got you excited about it to get started with it? Well, my story programming goes that I started fairly early. My dad gave me a C64, where all I wanted to do was play games. But if you guys know some machines, you had to type in like three comments to load the disk and start it all up. And I got interested in that that's like visual basic on that afterwards on the pc uh got internet but even after that for a long long time i was really
Starting point is 00:05:14 isolated from the programming world and uh then a friend of mine introduced me to cake php i was doing web development stuff at the time and i realized that i just had been reinventing the wheel i mean i i did my own kind of framework i didn't call it that but it was really messy compared it was like let's use that um at the same time rails obviously was big and i looked at that but i couldn't get it to run on my windows machine back then so that's where that decision was made for me um it wasn't really like a wise technology kind of choice. So then I started blogging about like what I was doing. And I was blogging a lot about CakePHP and how it sucked.
Starting point is 00:05:53 And like, I guess a year into that, the people on the CakePHP team finally had enough of that and gave me a chance to contribute. And they were like, listen, if you're just like saying what's bad, why don't you come on and help fixing it? And I was really interested in that and started working on CakePHP and plucking about that a lot. Our little plug, I'm now doing it together
Starting point is 00:06:18 with my partner Tim. We've written like 400 entries. Actually, I think that is an important part why open source is fun for me because if you start writing about it, you also get a lot more feedback instead of just like doing commits. So they're not really visible
Starting point is 00:06:33 to anybody who's not deep into the project. So what source control system are you guys using for KikPHP? The longest time it was subversion. They now switched to Git. I'm not actively involved with the project anymore. I still do a lot of work with it, but I'm at the point where it really does everything I need.
Starting point is 00:06:54 I don't hit any bugs with it. And going forward, the next technology I'm going to heavily invest in is going to be Node and JavaScript. You know, that's interesting though with more and more projects going over to Git. Git just makes it so easy to fork a project and apply patches to a project. It's almost like put up or shut up
Starting point is 00:07:17 if you've got criticism of a particular project, right? Yeah, and I guess because people can do it without asking for permission first they can like go ahead fork and do stuff and point it out to the world whereas with subversion you could write a patch and email to some mailing list but it wouldn't really get a lot of eyes on it and well it's also a bigger barrier because you'd have to be like i when i was using subversion i would never email patches around.
Starting point is 00:07:46 I knew how to use Subversion, but I didn't care much beyond that. That's quite the leap from PHP to server-side JavaScript. PHP is on every Unix machine and half the Windows machines on the planet. Google, the V8 engine that powers Node, not so much. Talk a bit about how does someone get it set up with Node and the installation process and how do you get up and running? Sure. Installing Node is pretty easy if you're on a Linux and Mac machine. If not, and you're not really like a Unix hacker who can pull off like a CYG install and fix all the issues you might hit, don't try it. I wouldn't try it with Windows yet.
Starting point is 00:08:32 If you're on a Linux machine or Mac, you can just download the source. The description on how to do that is on the website. Then you type in configure and make install, and it's a pretty painless process. So there's no external dependencies, and I haven't heard of a build error on the mailing list for the last two months or something. So now that you've got Node set up, it's pretty easy from that point on. You just create your first JavaScript file, call it my.js, and then you call up the Node binary, which is now installed in the comment line. And you're saying Node, my.js, and the JavaScript code gets executed. If you're doing a server, which is going to be a long-running process and you want to deploy it, you're going to need some way to demonize it. Node might do that in the future, but for now you're going to have to use
Starting point is 00:09:25 like a Ubuntu upstart script or whatever your platform has for that. But really running locally is very easy. Deploying is easy as well, but you need a little bit sysadmin skills for that. For those developers out there who are, I guess, primarily client-side JavaScript hackers, maybe even some really deep ones, what is the biggest difference between client-side JavaScript hackers, maybe even some really deep ones, what is the biggest difference between client-side JavaScript coding and server-side with Node? A few things. Speed.
Starting point is 00:09:55 Everything is placing fast with the browsers, unless you look in Google Chrome, which is the engine that Node uses, V8. Things can be sluggish. Another big difference is that you can use a lot of new JavaScript features that people are avoiding right now because they're not going to run in everybody's favorite browser like Internet Explorer. So V8 is headed for a full ECMA 5 compatibility, which is a new proposal or standard for JavaScript
Starting point is 00:10:25 that got accepted a little bit ago. And so you can use all of those functions that V8 currently implements. It means like array has a native for each method filter. What's really cool is you have a standard JSON parser and stringifier and a few other goodies.
Starting point is 00:10:44 I think getters and Setters. And there's actually a page in the Node wiki which describes all the cool features that are available. Google Node and V8, I think. Those are definitely the biggest differences.
Starting point is 00:11:00 Other than that, I think there's also a lot of similarities. If you're used to handling click events, like on click, so same ideas apply a lot in Node because you have events, like your connection coming in or some data finishing, writing, or sending, and you get a callback, and you just deal with the callback. So everything in Node is asynchronous, and a lot of things in the Clyde sites are asynchronous as well.
Starting point is 00:11:26 When you look at, I guess, kind of where Node is going now, it's still sort of fresh and young, right? What are some of the new things that are happening with Node, like any web frameworks or any specific templates that are coming out difficult moment to join the scene because since Node 0.1.28, there's been a lot of backwards compatibility breaking changes. Those are a little painful because everybody has to update their applications. But they're really nice because some of the things that are enabled by them. I guess the biggest deal is that one concept that's really important to note is streams, streams of data. Like you're having a read stream
Starting point is 00:12:18 of files that you're reading in or TCP connection or standard out, or you have a write stream, like standard in or an HTTP connection you're writing to or TCP connection or standard out, or you have a write stream like standard in or like an HTTP connection you're writing to or TCP your file. And with a standardized interface, Node will be able to build abstractions to that or users will be. So you can say, take the stream that's coming in here and pump it into this other stream
Starting point is 00:12:41 and automatically handle buffering and all kinds of other issues you might encounter so that's a place where the api is changing a lot another thing is features being added there's unique support for units unix sockets was added inter-process communication is a big thing on the agenda as well because with with Node, you only have like one thread. So if you're running out of CPU power, you need more processes to split it amongst multiple cores. And so you would start multiple Node processes that communicate. And I guess buffers are a big deal as well. you notice working on a native buffer object which allows you to directly address memory chunks similar like you would do in a low-level language like z
Starting point is 00:13:33 and so you would get a buffer of a fixed size and you you would operate on that basis and on strings which note has previously used but which are not really efficient you know one of the things that i hear quite a lot in the same context as Node is just how fast it is. Can you give the listeners any idea just how fast Node.js is and what types of tasks it does well? Yeah. Node is very fast in, like, hello world benchmarks, which are often used for comparing technologies, simply because you have a really like low or fast pass between like a connection coming in and Node being able to handle it.
Starting point is 00:14:16 That's by design and that's an advantage over a lot of things. In terms of numbers, so they're really rough numbers, but I guess on a machine where you would install Nginx to serve a static file and Nginx would get like 20,000 requests a second, I guess Node is somewhere in the responses sent by Node are dynamic. So in terms of having a dynamic web server, there's not a lot of stuff that's faster than Node that is not written completely in C or C++. Most dynamic scripting languages will be a lot slower. So do you see Node shining, I guess, coupled with something like WebSockets?
Starting point is 00:15:09 Is that really where the sweet spot is? Depending on what you're doing, it is. Everybody who is excited about real-time web technologies should definitely have an eye on Node. I think it's a very excellent use case. I've done a lot of long polling kind of stuff with Node, which is also nice because with like a PHP script, you really wouldn't want to send an HX request,
Starting point is 00:15:34 which hangs for multiple seconds until the answer becomes available. With Node, that kind of thing is really efficient and you don't have to worry about thousands of those requests just hanging in there um yeah so web sockets are definitely a big big area where node will shine talk for a minute about promises and and do opinions on those oh that's yeah that's a big thing I actually left out in the API changes. Node removed promises. For those of you who don't know what promises are, essentially whenever you called a function that was asynchronous,
Starting point is 00:16:14 you would get an object returned, which we would call the promise. And you could then call methods on this object, which would notify you when things happen. So you could say promise at callback, and you'd be notified when this promise has been completed, or there would also be an error handler, so you could handle errors. This is completely gone from Node now, because everybody had an opinion on how to do it better or not, and there was at least three threads on the mailing list with close to 100 messages. And so Node removed those.
Starting point is 00:16:49 We are now using simple callbacks where the first parameter is either null or say error object if an error occurred. And this makes a bunch of things easier. You mentioned the do library. The do library deals with scenarios where you have multiple asynchronous things happening at the same time. You have the callbacks for those, but you want to group them. You want to wait for all of them to finish. Or you want to do all of them in sequence and handle the event where something goes wrong in between. Node doesn't really come with any abstractions for that. And do looks like a really, really nice way to deal with those.
Starting point is 00:17:33 For my codes that I'm writing with Node, I usually haven't used do yet because whenever I had some needs that I needed to abstract, like multiple things going on and group them, I was using like an integer counter as a private variable to keep track of it. And that worked really well and gave me more flexibility than any abstraction would. So I guess if I would have this problem more often, then I would definitely go with do because it looks really nice. And do is from our buddy Tim Caswell. It was in episode 017. Yep. And they built the blog howtonode.org.
Starting point is 00:18:15 I'm not sure if he's running Do in that framework, but the open blog still fascinates me. Along those same lines with libraries like Do, what's the state of package management or library sharing in the node ecosystem um basically nobody's really using package management yet and by nobody i mean most people who are not some creators of package management software for Node. There's Isaac, who's working on NPM. And there's TJ Huchak, or do you guys know how he's pronounced? Anyway, he's working on something called Kiwi. He's also the creator of Express.
Starting point is 00:19:03 And I really haven't invested heavily in those yet because with Node's API still moving, those things will break. And when I need to deploy and make package management part of my deployment process, that's really just another hassle to worry about at this point. So I'd say once the API settles down, both NPM and Kivi will be really interesting to follow. So TJ's got another project called Express, Express.js, that aims to be a Sinatra-like DSL for creating apps on top of Node. Have you played with this at all?
Starting point is 00:19:33 Sorry. Express. No, I have not played with it. Oh, sorry. My throat. I might have to get a glass of water in a second. Sure, no problem. Anyway, let's try Express. Express looks really nice. It seems like TJ is putting a lot of work in it. I have one big problem with it.
Starting point is 00:20:00 It's taking this idea of one language, namely Ruby and Sinatra, and tries to emulate it kind of one-to-one in Node. I think most projects taking this route are not really going to feel natural in Node because all these Ruby or Python or whatever projects were written with a different programming style in mind. Another big problem is creating DSLs in JavaScript. JavaScript does not really lend itself nicely to create domain-specific languages, just because you cannot easily define symbols and function names and mix them into the local scope without polluting the global scope. And so Express, as far as I know, pollutes the global scope with global methods like get and other methods.
Starting point is 00:20:52 And I think that is really something that people should avoid in JavaScript. If it wasn't for that, I would really recommend Express because it looks TJ puts a lot of work in that. But I have a problem with anything that pollutes the global namespace in JavaScript, just because it's a bad practice that we should all try to get away from. Pretty much every time Wynn jumps on my project, I don't have jQuery defined properly. He yells at me, so I'm used to that. So you haven't played with Express, but what about Fab?
Starting point is 00:21:22 It's another pure JavaScript DSL. I guess everybody's got a Sinatra fetish these days. What about this one? Fab is one that I actually have played with, and I think it's really going an interesting path. Rather than
Starting point is 00:21:37 trying to ban JavaScript to look like a DSL, it's pretty much on every function call it returns a function call. And so you get like a really long list of like function calls, but you can indent them and the parameters are then like taken into account. And it kind of looks like a definition of the sitemap of your website. You really have to see it to get a picture of it, but it looks like Lisp.
Starting point is 00:22:08 What is really interesting about it is that it really focuses on streaming. So every node that you kind of have in your tree that defines your site is like a little application that can stream data up to the next node or down from the previous node, and you can alter the data stream.
Starting point is 00:22:27 And you can also change the type of the data stream. You could take JavaScript objects like JSON downstream and then convert them into actual JSON strings and in the next application G-SIP them. And it's really nice to see how you can create really reusable stuff with that and just chain it together in interesting ways. Yeah, that's interesting. The two, I guess, initial reactions that I've got to looking at this is it looks a lot like jQuery,
Starting point is 00:22:57 which it says right there on the homepage, in the chaining events. But in the other approach that you just mentioned, having these horizontal aspects, it sounds a lot like in the Ruby world, what we call rack middleware, where you can just, you know, have different levels of your application kind of latch onto the responses and requests.
Starting point is 00:23:16 Right, right, exactly. And there was a lot of discussion in the node and also the common chess community on like a standard for this. I think, what's the Rack standard called? Help me out, guys. I mean, either way there's some sort of standard that
Starting point is 00:23:33 governs how Rack works and how the objects look that it passes around. And what's really not been part of the discussion until Node came along was how to do this with streaming data. I think with Rack, you always have a finished message and you pass it on to the next middleware. Right, right.
Starting point is 00:23:51 And then it deals with that. But with Node, you actually have the ability to take half a message and pass it on. And the application needs to be able to deal with that every step of the way. And that is, I think, something that Fab solves really elegantly and where it's going a little bit beyond of what Rack might do in the Ruby world. Interesting. So it mentions here on the Fab homepage
Starting point is 00:24:15 about using it as a CommonJS library. What's your experience with CommonJS and how does it play into dealing with Node? I'm not very involved with CommonJS itself, but since we're in the JavaScript server side world, we're talking a lot to the people that are pushing CommonJS. I think the Node standpoint is we look at everything that CommonJS puts out there
Starting point is 00:24:44 and if it looks nice, we consider adopting it. is we look at everything that Common Chairs puts out there. And if it looks nice, we consider adopting it. But mostly Node is driven by implementations. Ryan always says implementations should drive standards. So if there's something that's really hotly debated, and the scope is limited, I guess Node is the kind of library that goes ahead and starts an implementation, tries to look how that feels, and then takes it from there, rather than defining a big standard up front.
Starting point is 00:25:14 And so the common chance people are probably a little frustrated with Node from time to time, but at the same time, it's an interesting discussion between defining standards or implementing something and deriving a standard out of it. We've got a couple of questions coming at us from the IRC channel. One is a pretty good one. I actually think I've had this one in the past too. It comes from a fellow. I'm not sure how you're going to pronounce this. His Twitter handle is ETHNT. I'll let you try to butcher that one since you're good at butchering names.
Starting point is 00:25:46 His question is in regards to production environments, he doesn't really want to take the time to learn Node.js, but his question is if there's any hosts out there that have Node.js already on them that he could deploy to, and if there's any you could recommend.
Starting point is 00:26:03 No. I am not aware of any Node-specific hosting at this point. I think most people have a dedicated server or virtual machine that's a SSH into configure Node, compile it, and then push the applications to. And it's pretty much a manual process at this time. It would definitely be nice to see something like Heroku for
Starting point is 00:26:27 Node in the future, but I think it's a little too early for that. Before we go too far away from the discussion we had earlier, too, we were talking about TJ and Express and all that, but he's also got a library called JSSpec, and it deals with testing your code and whatnot. How does that play into
Starting point is 00:26:44 Node, and how does Node deal with TDD and BDD setups? That's a good one. With testing stuff, I find DSLs to be more compelling because I can see how they make the tests easier to structure and easier to read. I still disagree with what JS spec does in terms of exporting global objects. I think it's messy.
Starting point is 00:27:11 I think it exports a describe method and an is it method and all kinds of things. Node itself, what Node does is, initially it was using the test suite from V8, which is called ms or mjs unit and um now we're using the common js uh testing module or their specification which is pretty much a module called assert and it just has like assert equal or assert deep equal and a bunch of assertion message which uh throw an error so you
Starting point is 00:27:46 write your test as like a plain javascript file and if one of your assertions throws an error node exits with an error code of one and so if you automate like your test suite you just check if one of your tests has an exit code of one um for a project of mine, I'm also using just the asset module. I kind of like the purity of it, just like doing the minimum I need. And like a library on top of Node, which might again break with the compatibility if Node changes API, is really just another headache for me to worry about. My personal guideline for any third-party libraries with Node is, unless they have full unit test coverage and look really well written, I try to avoid them just because it's another part of the software I don't control and Node itself is moving fast. In general, I might like to have something like JSSpec if done a little differently in the future, but I'm also
Starting point is 00:28:46 not sure if we really need it. That's because JavaScript itself lends itself nicely to unit testing. If you need a mock object of something, you just define a JavaScript object and you attach methods to it, or you take the original object
Starting point is 00:29:01 and you just replace a method, and that all feels very natural and very easy in JavaScript. But the jury's still out. I don't think a lot of people in the past had to deal with testing stuff that's asynchronous. It really changes how tests look, because its indention level goes a lot deeper than it would go for test suits, usually. Usually you just have one, like, indention level with assets lot deeper than it would go for test suits usually usually you just have one like indention level with assets maybe an if statement but um asynchronous testing is still
Starting point is 00:29:32 pretty new land and uh i i stick with the purest form which is using the asset module on node right now but going forward who knows what comes up you know in the changelog, Adam and I are big Haml and Sass fans, and so I think we've covered multiple ports of Haml to JavaScript, both Haml.js and JSHaml. I've seen Sass.js. What are you using for your markup?
Starting point is 00:29:58 I would imagine Mustache would be suited for this sort of thing. What do you use in your projects? Well, my main project does not output any HTML. So it's a problem I don't have. For some client consulting I did, I actually set up Mustache because I think it's a nice approach.
Starting point is 00:30:17 And I think I was using Jan Lennert's implementation of it. Haml, I like. I used Haml a little bit in Ruby before. I'm just not convinced of the quality of Haml.js implementations out there yet because most people think, hey, it's easy to parse a syntax, but then it turns out it isn't
Starting point is 00:30:39 and you have to debug a parser or compiler, which is not fun. So Mustatch is what I use right now and which I find good. So if you're not returning a front-end markup, what are you returning, JSON objects? Yeah, the project just has a web service API and it's all REST and JSON. So what sort of projects are you working on with Node.js?
Starting point is 00:31:05 The main project that got me into Node and that I'm still heavily working on is called Transloaded. It's basically a service for people who want to outsource their file uploading and video encoding and don't want to deal with that on their own boxes at all. We give them a jQuery plugin, and their form submit events are high-checked, and we take their files to our machines, we show an upload progress bar, and then we encode the videos and upload them to S3. Where Node really shines here is that a lot of the stuff we do is call up comment line scripts once we've received the upload.
Starting point is 00:31:47 So we have, at any given moment, like 20 or 30 comment line tools running side by side, and it's all just one node process managing them and handling the events. With any other kind of technologies, we would have to write like workers who, where we'd have one worker working on one comment line tool execution because that's usually a plucking process.
Starting point is 00:32:08 The other thing where Node is really nice is file uploading. One of my earliest contributions to Node was actually a multi-part parser, which has now been replaced by a better one at iSIG Road. And so in Node, you can actually receive a file upload and handle every byte as it comes in. It's a stream of data, and you can choose to write it to disk or first inspect it before you write it to disk. And that is nice to us because we can kind of look at authentication information.
Starting point is 00:32:39 That's one of the form fields that's being submitted to us. And if this doesn't match, we can abort and upload, which might take an hour for a big video, and notify the user of a problem right away. And that kind of flexibility is what I really enjoy in Node, and I guess why I started using
Starting point is 00:32:58 Node initially. So you're going to be speaking at JSConf coming up, right Felix? Yep. Got your topic picked yet? Yeah, the topic is called NodeDirty. NodeDirty is like a fun project that just came to me one day. I was thinking about what kind of stuff
Starting point is 00:33:16 you could do with Node. And one thing I came up with, you could write like a key value store because it seems fashionable these days. And I started playing around with a few ideas and what came out of it is called no dirty and what it basically does is it tries to not do the things that all the other databases being relational or no sql suck at and that usually is abstraction. Abstraction itself is not bad. It just means that you have to learn some sort of interface and some sort of, like, thinking model to access your data.
Starting point is 00:33:53 And I think that's really a barrier to your data rather than, like, helpful unless you know it really well. And this other thing is networking. I guess the more decent data stores out there have decent networking code, but where they still fail is that a typical application has to send multiple requests over the network to generate its page or whatever it's doing with the data, and then aggregates its results and compiles them to some HTML on the client side. And I think the networking is a really big bottleneck,
Starting point is 00:34:28 especially if you go for high write performance. And so what Node-Dirty does, it does no abstraction, and it does no networking. So all you get is a little database object with a get and set method. Whenever you set a key and a value, it's directly written to an append-only JSON file. It's just new line separated JSON. So that's really simple about it. And you get a callback. The callback fires when the data has been written. But even before the data has been written, it's already in memory. So if all you care about is having the data in memory, you could return to the client that it's done right away. Or you could wait for the disk persistence.
Starting point is 00:35:12 So that enabled something that most data stores don't allow you. They either go for full consistency or they give it up for eventual consistency or all kind of ways you can spin the cap theory. And with Dirty, my hope is kind of that you can choose what model applies the best depending on your situation and current data set. And people would use it to build their own databases that are actually applications. It would be applications that directly contains a business logic and use something, either Node-dirty or something like that, as an underlying mechanism. I think that's a really interesting use case for Node because now you can write all your business logic in JavaScript
Starting point is 00:35:56 and just provide a nice JSON interface, REST interface, that answers business questions rather than abstraction questions, rather than like doing a query or some sort of mapper to use. You just directly ask your database a business question, which I think is what databases should answer. And all the abstractions happen internally. So your current query API is basically a get by ID or a filter where you essentially pass it a function much like you would if you were filtering an array
Starting point is 00:36:26 in JavaScript or jQuery, right? Right. The filter thing is just to get people started. It's once you get into millions of records that won't perform anymore for a few reasons. One of them is Node just has a single thread. So if you filter over a million records,
Starting point is 00:36:44 nothing will happen until you looped over all of them. So once you go for bigger data sets, you probably want to update some fuse or caches every time the set method is called. I'm currently thinking about either providing an explicit plug-in system to make those things happening or just overwriting the set method and monkey patching it. But I
Starting point is 00:37:07 dislike that a little bit, so I'm still working on that. So no dirty. No dirty, no sequel for the little man. Is that the title of the talk at JSConf? I'm changing the sub-slogan from time to time, but no dirty is the title.
Starting point is 00:37:25 At this point, really, just to clarify that, it's mostly a fun project, and I'm seeing how far it can be pushed. I think it's going to be a nice way to store data, especially for prototyping, especially to keep your moving parts
Starting point is 00:37:39 in the stack low. If it's really going to make an impact for high-performance stuff, I don't know. I'm doing some benchmarks that look very, very promising, but I don't work on high performance site as part of my day job. So I can only go by what all the cool kits publish and what their problems supposedly are. I'll hopefully get some feedback at the conference. And that question was from, I believe, Chris Williams, Voodoo Tiki God on Twitter. Let's talk a bit, before we hit the radar, Felix, about the development scene in Berlin.
Starting point is 00:38:10 What's it like to be a code slinger in Germany? It's pretty nice. I think Berlin has the biggest startup scene in Germany. I don't think it's anywhere near Silicon Valley, Bay Area, but there's a lot of interesting stuff going on. Jan from CouchDB is there and I started hanging out with those guys a little bit.
Starting point is 00:38:37 They started actually a JavaScript user group in their co-working office, co-op. And I did one talk on Node there, and there's been a lot of excellent other talks there. And yeah, I mean, whatever your technology is, you will find lots of people in Berlin to talk with them. There's a lot of events. And as far as the tech scene in Germany goes,
Starting point is 00:39:02 I think Berlin is where it's happening. So I guess the common question we ask to close off the podcast is, what's on your radar in terms of open source software? What's out there, I guess, besides Node that you're just dying to play with that's just got you really excited about open source and what you're doing? My April Fool's was I'm quitting quitting open source but that's not going to happen so um what else is on the radar um i i really am liking ruby i and i would like to do more with it uh i don't i don't have like a uh like client work or any other time that I could spend on it. I really hope that Node will be able to do everything Ruby is being used for right now,
Starting point is 00:39:51 but that's still multiple years off. So if I happen to have some time, I'll definitely play more with Ruby. And I guess any Node projects that come up. But other than that, I'm mostly looking at the JavaScript stack at this point. Cool. And before we close off, you mentioned earlier a startup you're working on.
Starting point is 00:40:13 Can you plug that URL so that the listeners who didn't hear it clearly can go there and check it out? Right. It's called Transloaded.com. That's T-R-A-N-S-L-O-A-D-I-T.com. And I assume you're on Twitter, too, so what's your Twitter handle? Is it Felix E.?
Starting point is 00:40:34 Felix G-E. Well, thanks, Felix, for taking the time on a late Friday evening over in Berlin to chat with us. Really appreciate it. Now we can maybe put the Node.js streak to bed on purpose. Maybe next episode. I don't know about you, man, but I'm going to sleep well tonight knowing that we've talked about Node.js so much. And finally, our second point release, episode 20,
Starting point is 00:40:58 is going to have a full-featured episode of Node.js. It's awesome. Well, cool. Let's wrap there. Felix, anything else you want to mention before we head out? Sure, yeah. I want to thank you guys for the opportunity to speak here. I want to just say that
Starting point is 00:41:13 Node is, like, I'm spending a lot of time on it, but the really big man behind Node is Ryan. He's, like, working day and night to make it awesome, and I guess if somebody who hasn't contributed to open source before wants to contribute to
Starting point is 00:41:30 something, Node gives you the opportunity to use your JavaScript skills. There's a lot of stuff to help out with. Just hop on the IRGC channel, check the GitHub issues. If you need any help with stuff, people are around to help you. We love everybody you need any help with stuff, like people are around to help you and we love everybody's contributions.
Starting point is 00:41:49 Cool. Thanks, Felix. We'll chat at you soon. Yeah. Thanks for having me. 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 also be sure to head to github.com forward slash explore to catch up
Starting point is 00:42:14 on trending and feature repos as well as the latest episodes of the changelog Safe in your arms As the dark passion shown Was mine alone Open I'm open All roads to drive Bring it back, bring it back to Open Outro Music

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