JSConf Day 3: Ideas abound

The third and final day of the conference was marked by more sessions, similar to the first day. This day had a different feel though, focusing more on the technical than the philosophical. I tend to be wary about technical talks at conferences because they typically lean towards a lowest common denominator of skill sets. This approach isn't necessarily wrong, and can even be desirable as a way to get new people excited about web dev. Unfortunately, as a mid-level web developer and an expert JavaScript developer, it's hard for me to learn anything from these talks. JSConf wasn't like that though. I learned something useful or interesting from the majority of the sessions I attended, which is incredible.

The first talk was given by non other than Brenden Eich (@BrendanEich), the inventor of JavaScript. I've heard him talk maybe half a dozen times now, and I always find his talks interesting. This time, he talked about asm.js, a really exciting new technology that Mozilla has been working on lately. asm.js is a heavily restricted subset of JavaScript that can be compiled ahead of time, resulting in a massive speed boost. It was developed to go hand in hand with emscripten, resulting in an amazing demo of Brenden Eich playing Unreal Tournament 3 in the browser using nothing but web technologies! I think that making asm.js backwards compatible with vanilla JavaScript was a brilliant idea, and should help it avoid being relegated to niche status like Dart and TypeScript appear to be.

Nicole Sullivan (@stubbornella) gave a talk basically on how to organize a large web project, titled "Creating Living Style Guides." It was more of a tips and tricks style talk, and there were several good ones. She recommended keeping style guides (in this case, art assets/prototypes/etc from the graphics artist) in the same repo as code. This forces the graphics artists and the devs to work closer together which helps prevent getting out of sync. She also recommended regularly grepping code for common css properties (margin, padding, colors, etc) to see how often code is duplicated. This can be used to consolidate colors, styles, etc into common CSS base classes and can also be used to guide future color choices. Finally, she recommended splitting code into components folders. Each component (e.g. a button) should have a single folder with a sub folder for CSS and JS files. Simple idea, but tends to go against the common approach of having a root CSS folder and a root src folder and always keeping CSS and JS separate. Great ideas!

Another great talk was "space-age-miracle-tools.js" by Narciso Jaramillo (@notwebsafe) from Adobe. The talk covered some new feature in Brackets.io, Adobe's new web dev IDE. They have some very compelling new features in the pipeline, and I'm basically waiting for it to get some new features so I can switch over to it from Sublime Text. There is an add-on called Theseus that creates this really nice comprehensive debug environment. There is the server code (written in node.js of course) and the client code in the browser, with both being debugged simultaneously and in concert with each other. Slick! They also have what they call "live debugging" of JavaScript, which is basically doing a form of live code replacement. While this has been common in C/C++ and Java for years, doing code replacement in JavaScript (and other dynamically typed languages) has remained elusive. Adobe's solution is limited, but at the same time very elegant and simple. They manage contexts with a "with" statement (I'm was almost in a state of shock when I learned there was a good use for the "with" statement) and then they use a global lookup table for functions. Even more impressive was an addon called InstaBug. It provided for easy testing of JavaScript functions. Basically you select a function and bring up this testing menu...basically you can do a unit test in just a few clicks and export it to various unit test frameworks. Very slick!

The last session I attended that day was "Constraint programming in the browser" by Adam Solove (@asolove), and it was probably my favorite talk of the entire conference. Adam talked about using linear programming techniques to solve a wide variety of UI problems. As an example, he showed a website that used Cassowary, a linear constraint solver, that showed how the US government's budget relates to tax rates, various program spending levels, and the deficit. The entire system was specified as a system of linear constraints, meaning that the system was very simple to program, yet very powerful at the same time. What really piqued my interest though, was the talk about using a system like Cassowary to do UI layout work. That was probably my biggest light bulb moment of the entire conference! At Appcelerator, one of my two primary projects is the Mobile Web platform implementation of Titanium. One of my key contributions to the platform was the layout system, which at its heart already converts the input parameters to a series of parametric equations. It's practically begging to be used with a system like Cassowary. What makes the whole thing sad, for me, is that the core part of my dissertation involved linear programming and yet I still didn't make the connection until this talk...c'est la vie. There is the possibility that I will be working on a revised version in the near future, and I will definitely be considering using Cassowary for it.

I also attended a workshop on Backbone.js. I never actually bothered to learn it before, so I decided to finally just buckle down and learn it. Now I know it. Yep...

That night, we had a big "southern style family dinner." I'm not so certain on the "southern" part (maybe it's just cause I'm from Texas, not the deep south), but the family part certainly rang true. I talked with so many awesome people that night and had so many wonderful conversations. It was a perfect ending to a incredible conference (travel woes aside).

The following day, I headed home. It was an early flight, and given the lack of sleep, all of the conference attendees I ran into (myself included) weren't exactly talkative. There is one memorable part of the day though. I took one of the best photos I have ever taken while waiting at the Jacksonville Airport. I am very proud of this photo. I don't have a title for it yet, but I feel that the main characteristic of the photo is the sort of corporate representation of motion, exemplified by the graphic in the window, contrasted with the rather sedated look of the few people present in the image and the lonely feel of all the empty chairs, especially the empty wheelchairs looking out the window. I spent about 10 minutes contemplating how to take this photo, and then another 20 minutes waiting for a flight to leave so that the chairs were empty. I think it was worth the effort :)