Yesterday, I had a great time in Geekland, a.k.a Boston Code Camp 18. In this post, I'll share the highlights of what I learned.
SVG Graphics with D3
My day began with my own presentation on D3. I think it went well enough, but I'll let others report on that.
Identify and Fix Performance Problems with Visual Studio 2012
OK, quick: From the title, do you think the performance problems are with Visual Studio 2012 or identified by Visual Studio 2012?
I thought it was the former, but it turns out it was the latter. Still, the session was very worthwhile. Presenter Ben Day demonstrated the powerful tools in VS 2012, especially the Ultimate Edition, that can help us identify where performance problems might arise. The load-testing features were very slick.
Ben said that we should test performance early in the development cycle, since it's much less expensive to make changes at that stage than later.
One of the drums I often beat at my company is the importance of properly disposing one's IDisposables. I was therefore gratified when Ben related how he had been called in to diagnose and fix a system that was so slow that users were getting angry. Amazingly, it took only 20 simultaneous users to bring "all the back-end hardware you could possibly want" to its knees. Ben found that they were relying on the garbage collector to Dispose() (and therefore Close()) their SQL connections. The garbage collector runs on a low-priority thread, so the Dispose() just wasn't happening. The large pile of unclosed connections was suffocating their system -- with the result that garbage collection was even less likely to happen, etc., etc.
Once Ben and his team revised the code, they went from being unable to support 20 simultaneous users, to effortlessly supporting over 4,000. Plus, they were able to reallocate some of their servers to other tasks.
Ben pointed us to an article he recently wrote on Custom Performance Counters and another one titled Static Methods are a Code Smell. I plan to look into them this week.
Facelift Your JavaScript with TypeScript
Next up was Igor Moochnick's excellent presentation on TypeScript.
TypeScript is a superset of JavaScript that adds strong-typing features. It compiles to JavaScript, so is compatible with all browsers, yet it brings in some of the features of yet-to-be-released ECMAScript 6 today, notably classes.
One of the wonderful things about coding in TypeScript is that you get intellisense for all the classes you create. Better yet, if you bring in one of the type files (.d.ts extension) that are available for popular libraries, you get intellisense for them, too. One of the attendees at my D3 talk asked if anything was available to give intellisense for D3. I said no, but found out just two sessions later that TypeScript does just that! (See d3types.ts here, although I don't think it's a complete job. I don't see the chord layout, for example.)
A question arose about integrating TypeScript with an automated build. Igor directed us to Scott Hanselman's post, Why Does TypeScript Have to Be the Answer to Anything?
Writing JavaScript by Not Writing JavaScript
Andrew Babiec gave an overview of not only TypeScript but CoffeeScript, Dart, Script#, Goolge Web Toolkit and Google Closure.
I still like TypeScript.
CoffeeScript is a completely different language (and odd, to my eye), rather than a superset of JavaScript. It does not offer strong typing or intellisense.
Dart is "not ready for production" according to Andrew.
Script# produces JavaScript from C#, which is kind of cool, but it is largely the brainchild of one Microsoft employee and is not well-documented.
Google Web Toolkit converts Java to JavaScript. Some people might like that, but I'm not a Java guy, so it's not for me.
Google Closure is a different sort of product all together. It's like Lint, but for JavaScript.
For me, TypeScript is the winner.
Leverage Push Notifications for Multi-Player, Turn-Based Games
I'm not a game developer, but attended this just for fun. The great thing about the session was meeting all the passionate, young developers who are trying to break into the phone-based games market.
Beginning Machine Learning in 60 Minutes
Frank Wu presented a 60-minute overview that ranged from linear regression to neural networks. The visual interpretation he gave at each turn made a complex subject very approachable.
The Afterparty
The day ended with drinks and appetizers for the speakers at a local restaurant. I want to extend a hearty "Thank you!" to Apprenda, who picked up the tab. Although the main purpose of the day was to learn about software, I appreciated the chance to learn a little about the other speakers as well.