Last week I attended JSConf 2014 in Alameda Island, Florida. What a great show they had there!
For those not in the know, JSConf is run by a husband-and-wife team and is extremely family friendly – they had a “Significant Others” track and made sure to plan a day of activities sandwiched between the two conference days so that both the techies and family members had time to play and mingle. Newcomers were made to feel at home and there were plenty of networking and fun events.
Venue
The conference was held at the Amelia Island Omni Resort hotel. This is about as fabulous a location as you can get for a conference. Disclaimer: If I had to choose between our Emerging Technologies for the Enterprise show and this conference, I would pick ETE (I’m not just biased, it’s a great all-around conference and quite affordable). ETE is KILLER (talks are being posted online as we speak), but since I didn’t have to choose, well, this spot is also a no-brainer, for those who are focused deeply on JavaScript and that community’s ecosystem.
Beyond flying a quad-copter around with Node, Sails, Angular and a video processing algorithm, and taking lots of pictures of the scenery, I did learn a number of interesting things while I was there.
No Big Frameworks! Just APIs!
Lots of small projects, more in the Linux, small-library-style than the more encompassing Java style, rule the day. It’s not surprising to fire up a project and find it downloaded 30 or more small NPM packages. For the Java developer that’s maybe a tad disconcerting, but for someone in JavaScript land it’s more or less expected.
Many developers in this world are focused on libraries, as opposed to frameworks. There is a heated debate, spurred on by Rob Ashton’s infamous “You ruined Javascript” rant, that says AngularJS and other heavyweight frameworks have done a bad thing for the JavaScript programmer.
One talk that hammered that point home was by @Raynos, who has authored more than 250 packages in npm. That’s a huge number. He stressed you should:
- Use the best of everything,
- exactly what you need, no more,
- avoid upgrading for the sake of upgrading
and therefore you’ll have no lock-in, and have the freedom to switch your APIs when it suits you. He also claimed you can learn about a library mostly by reading the developer’s code, talking to them at conferences and so on.
I’m not sure I agree with that approach in practice. Experience bears this out across a number of different prior tech lives (Client/Server, Web 1.0, Java EE/Spring, .NET, etc). While in theory building a stack from “pieces parts” sounds like the best way to completely isolate your risks on any given feature, in practice I think the work you’d be doing to build up your stack each time just takes too much time. There’s a reason we use frameworks, and that reason is productivity.
From the tech side, his talk mainly focused on writing and consuming npm modules, and he referred us to a GitHub documentation library from James Halliday – see https://github.com/substack, in particular his guides on Browserify and streams in NodeJS.
ES6 Modules for ES5!
One of the best talks was by @guybedford – it was about using ES6 module syntax in your current JavaScript projects by installing a browser shim. The jspm project installs this shim and allows you to use ES6 semantics to mount modules stored in npm, github, and local files. This is an ingenious library and one I need to research further. Check it out if you want to see where JavaScript is headed and if you want to start writing code that is compatible NOW.
It’s About the Developers!
Three talks stood out for their content in a more non-technical way. There was a talk about Emotional Safety from Jenn Turner (@renrutnnej), who experienced some pretty rough treatment in a prior company. Invalidation is something every developer encounters to a degree; it’s a pretty rough field sometimes and friction between team members and business leaders is always a concern. Her talk highlighted the physical effects of stress in the workplace, discussed the Vegas nerve, and how you should not stand for repeated attacks and hyper-critical co-workers.
Another talk, by Mozilla’s Kate Hudson (@k88hudson) covered how to open up your development efforts, testing, and other things by appealing to the diversity of the community. Great discussion about how engaged users will help you in a myriad of ways. She referenced Scott E. Page’s “The Difference“.
Finally, a FANTASTIC wrap-up talk by Brian J. Brennan (@brianloveswords) brought the house down – it was about how hyper-criticism, judging, being overly crappy to each other affects people in the developer community. I’m going to look for the video of this talk and post it if I can. What a cool cat and an awesome talk.
NodeCopters!
I got to fly a NodeCopter. Well, actually it’s an AR Parrot Drone, which I plan on getting as soon as I can explain how I afforded it. But I teamed up with fellow Java guy from RedHat/JBoss Ian Hands (@IanPageHands) who has some experience with video processing – he was able to take the front-facing video camera, click on an area and sample the color, and send me autopilot tracking information to follow a ball or other object. I then wrote up a node-based server with Sails and used the ar-drone API to fire off an autopilot and move the drone around. SUPER COOL!!!
Check out the video of our flight here:
Web Audio API
Something I didn’t expect to be so darn cool was the Web Audio API. Jordan Santell (@jsantell) showed us how to create oscillators, pipe them through filters, and affect their amplitude, pitch and a number of other variables. In short, how to create a synthesizer in the browser. This was reinforced with the second-to-last talk of the day when Web Audio and WebGl were both used for multimedia art projects.
Modular Javascript
ES6 will have a browser-based dynamic loader API similar to RequireJS or CommonJS. But you don’t have to wait for ES6 to use this feature. Simply load up jspm – a client-side package management system that enables ES 6 semantics and lets you aggregate projects from NPM, GitHub, and flat files. Watch for an article on jspm in the future, I think it will be a nice alternative to Browserify for those looking to move eventually to ES6.
Angelina Magnum on Canvas, WebGl and performance
I am not a game developer. That said, I remember my ancient days of drawing on Applets with a GraphicsContext. Well, in JavaScript, it’s all about the Canvas API lately. The 2D context is our standard drawing tool, but if you try to do 3D with Canvas you might find the performance lacking. Angelina Magnum from Mozilla had a great talk about doing things like double-buffering in an off-screen canvas, avoiding drawing too much or repainting, and introducing the newbs to WebGL – an OpenGL API for the browser. Interesting stuff, and it caused me to at least animate a few pixels in a lame attempt to be hip.
Parallel Node Engines
Node is a high-speed, single-threaded, event-driven system. What if you’re hitting up against the max performance in one Node engine? Why, launch another one and cluster it, of course. Except that there is a better way. We had a talk from Dan Silvestru (@confusement – the BEST Twitter name of the week) and Gord Tanner (@gordtanner) from BitHound.io talking about how they use ZeroMQ (0MQ) to fire off workers and solve problems in a massively distributed way in the cloud. Sounds familiar (in the way that map/reduce and other services work out there) but it’s good to see the Node community focusing on this stuff. Also, check out the hilarious game they played called Fourism (do a search, it’s really strange).
Meteor
The team from Meteor was there too, talking about cross-execution-domain Javascript. I think as we get closer to ES6 perhaps we’ll see syntax that looks close to the same on both sides. That’d be nice. For now, the speaker was explaining how to provide the same module in both places, but how to shim / proxy so that you get different implementations on either side – for example if you use cookies from the browser, you’ll want to use document.cookie, but on the server side it’s the Set-Cookie header. I wasn’t following this talk very well but suffice it to say the JS community is focused on JS execution everywhere.
DSLs in Javascript
A pretty good talk on writing DSLs in JavaScript, focusing on things like dynamically reading parameter names using the arguments property, returning the object for each call so you can chain objects together, and using things like RegEx and text parsing to munge psuedo-code into a workable set of JavaScript calls that you’d eval to execute your logic. JavaScript is a dynamic programming language with metadata built in, and so doing things like this is pretty easy.
A talk on Isomorphic Javascript
This talk discussed JavaScript on both the client and server and used Handlebars templates on both sides, Director for routing, and Superagent for HTTP requsts. Browserify came into the pictdure to package CommonJS modules on the client. Pretty cool stuff, and documented well on his blog,](http://venturebeat.com/2013/11/08/the-future-of-web-apps-is-ready-isomorphic-javascript/) for details.
Wrapup
The talks will come out on video (I think for attendees only, but if they go public I’ll be sure to tweet it) soon. If you’re looking for an interesting, in-depth Javascript-focused conference, I’d definitely check out the show in 2015. Hopefully by then I can present a topic there.