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.
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!
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!
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.
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.
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
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).