HuJS, bridging the international JavaScript divide


Troy and I at HuJS

A few weeks ago we held an event in China called HuJS. This was an event that Troy Howard and I dreamed up when I landed in China in July (Yes I was living in China for 3 months, but that is for another post!). With the the help of a great team and with folks like Mikeal Rogers and Chris Williams advising us from the sidelines, we were able to make it happen.  The event was a wonderful experience for me on multiple levels. We exchanged knowledge, we forged new bonds with the community, and we raised more international awareness about what JavaScript developers are doing in China.

For folks that travelled to China it was also an amazing cultural experience as they got to soak up the local sites and the local culture. We took the speakers to see some of the most amazing places in the world, like the Pearl Tower, and they got to mingle with the awesome folks at Xinchejian, the local hacker space.


Things that went wrong

Every conf has it’s high points and it’s low points. Our lowest point was definitely the internet access at the venue. They were not prepared for the number of connections and well it just went down on the second day. And lucky for me, it happened right before my talk while I was prepping. For cloud talks that’s pretty murderous. :-)



You can read the experiences of others who have attended in the posts below.


The talks


The first part of the event was ran in a JSConf event style with a single track of back-to-back sessions covering two days. We were fortunate to have a really dynamic mix of speakers both local and abroad covering topics like node.js in the real world, async, webkit, JS frameworks and cloud.


Travel issues

Two folks however were not able to make it, though they really tried, Guillermo Roach of fame and Vicent Marti of github. Both tried to improvise and find a way to deliver a talk remotely. For Vicent we actually were able to pull this off (not without hitches) however unfortunately due to internet issues, Guillermo was not able to join us at all :-(. I was really excited to have him joining us so I was completely bummed that everything fell through.

Guillermo did however record a talk for us on building high performance applications using HTTP, WebSocket and SPDY. Watching it makes me wish even more that he had been present to deliver it as it has great technical content and real world experiences around scaling node!

You can go watch it right now here!

Surprise speaker


In Guillermo’s place, we were fortunate to have Domenic Denicola of Barnes and Noble step in at the last minute and give a great talk on client side JavaScript!

My Rundown of sessions

Unfortunately I did not get to attend all sessions (goes with the territory of running an event), but here are notes on the ones I did attend, which ironically was many more sessions than I usually attend for events I go to.

“Building international communities” by Troy Howard.

In this talk which kicked off the event Troy Howard from App Fog, tried to rally Chinese developers to join the global OSS community. He talked about the Apache project (which he is a member of) and encouraged local developers to use more FOSS and get involved and to committing to Apache projects as well as other OSS projects. He told them “I want to see your names on the commit logs.” It was an inspirational talk and the community really enjoyed it.


Steven gave an amazing talk. He built a taxi reservation app initially using Knockout.js and a server backend. He then migrated the application to the cloud using Azure Mobile Services. From the feedback people loved it. This particular quote was from one attendee. “It’s quite possible that Microsoft may pull off a successful transition to open source, open web and cloud!”

“NODE.JS POT HOLES” by Yuan Feng.

Yuan Feng works at TaoBao, the EBay of China where they use node.js as part of their backend. His talk was lively and entertaining focusing on common but hidden pitfalls with node. Although his talk was in English, Yuan Feng went out of this way to provide English translation on each of his slides. The talk was interesting because Yuan Fang showed actual bugs they had encountered in their systems.


Vicent’s talk was on hubot, a bot authored in node.js which handles a lot of automated infrastructure tasks at Github. Hubot initially supported only IRC, but they added support for a ton of other protocols and it is extensible (Jabbr anyone). Hubot receives commands via chat which then cause it to kick off scripts which are written in coffeescript. The scripts will report back results which will get dumped to the channel. Some tasks are callable by anyone on the channel while others require authorization. Authorization is based on who the user actually is. The model is pretty simple and relies on in the IRC case that the user actually has a registered IRC name, thus they can be sure the person is who they say he is. I did ask myself a few times, why we don’t use this kind of automation internally ;-)The best part of Vicent’s talk were his slides which were amazingly professional and artistic in a comic book sort of way.

The major hitch of his talk was that he was unable to join us live. He did however reluctantly agree to try to deliver the session remotely. Internet in Shanghai is NOT good, so this was a pretty brave undertaking. Vicent recorded his video ahead of time and sent it to me. We then played the video during his talk with him watching the screen on skype and live video showing his face. To keep it interactive, periodically I would pause the video and ask him a question, or he would give some more clarity. We hit a few technical hitches due to bandwidth issues (as predicted), but the video quality was fantastic thanks to it being pre-recorded. After his talk he had a few minutes for live Q&A with the audience which they really appreciated.


I found this to be a fascinating. Tim kept a really good pace with this talk for non-english speakers. He described how he set out to write Luvit, a Lua port of node on top of libuv. The reason he did this is because Lua runs in a lot of embedded devices. One huge challenge for him was he did not know C++ or Lua when he started the project. Tim described in detail the process of learning Libuv and Lua and then mapping out node concepts to Lua, and adjustments he had to make based on language constraints. With the help of a community that formed around the project he managed to get pretty darn close.

“WIND. JS debugging and troubleshooting support” by Jeffrey Zhao.

Wind.js is a pretty interesting async framework. It is yet another example of folks dying to have async/await type syntax in JavaScript. Like Streamline, Wind.js does rewriting, however unlike Streamline it does this all at runtime and doesn’t require running anything other than node. The downside is the syntax is pretty verbose and it deeply pollutes your code. In this talk Jeffrey talked about Wind.js and how to debug. As he does all the rewriting at runtime he’s able to capture all the information in memory to map back to the original lines of code, something that Streamine does not do. I am not a fan of the Wind.js approach because of how it “infects” the code, but I do see how the runtime rewriting has significant benefits over static generation which Streamline uses. Aside from that  it was great to see some really interesting node hacking happening in mainland China.

“Run with node.js for fun and profit” by Charlie Robbins. This was a variant of an earlier talk I’ve seen Charlie give which basically talks about the evolution of node.js, and how it is exploding. He used the exponents of 10 approach starting at 10 to the power of 1 and working his way up at each level talking about how it relates to node starting with 10 to the 1st as the number of core committers and working his way up including plenty of nodejitsu  along the way. One thing Charlie did that really resonated with the crowd is he pulled several Chinese words into his slides. It was a fun talk. Charlie has celebrity status here however so people loved the talk regardless of what he said :-)

“Apps these days are too big” by James Halliday.

The main them of James’s talk was about not building monolithic node applications. This has been a passion area for James as he has authored several diff modules to address the problem. The crux of his talk was encouraging folks to break as much code as possible into npm modules and to use modules like fleet and seaport to allow apps to easily scale and to distribute workloads across many machines and processes. Fleet is a git integrated mechanism for continuous deployment and for process management. Seaport is a centralized registry for network based services. James argued with Seaport you can have components in your system sitting side by side but using different versions of the same service. He said both modules have been hugely valuable to running the infrastructure for Browserling.

“The Secrets of Node revealed on Windows and Azure” by Glenn Block.

My talk was focused on educating and eradicating misconceptions about Node.js as it relates to Microsoft, Windows and Azure. The talk was a bit campy as I used one of those secrets revealed documentaries type of theme. I started off first talking a bit about myself and how I ended up in Shanghai and putting on the event. Then I talked about node.js, how it initially did not work on Windows and how Microsoft jumped in to help node.js have a first class experience on Windows. Next I showed npm and how that works on Windows. Next I moved to the cloud talking about how node.js works in Azure and finally how you can deploy to it from any platform or even deploy Linux VMs. As part of the talk I did a bunch of demos of node, npm and finally Azure. The Azure demo hit some hitches due to some network issues. I worked around them by using the Azure portal to deploy. Overall I think the audience was shocked and surprised to see node working on Windows. After my talk I had a guy come up to me who runs a local startup and say “I used to hate Microsoft because they didn’t care about OSS, that changed when I saw you today”. That made me pretty happy J

“NEW APP(‘WINDOWS 8′);” by Aiken Qi.

Aiken Qi gave a nice overview of Windows 8 application development and the JavaScript programming model. He demoed a Windows 8 app live and also walked through the code. I spoke to several folks after the talk and they were really excited to see the way Microsoft has embraced JavaScript for client development.



On both days we had a panel of the speakers for that day. That was really interesting because there was a mix of English an Mandarin speakers sitting side by side with questions coming from the audience for both and in two different languages J.  The outcomes of the discussions were not so important, though there were some interesting ideas percolated. The real I felt was in the international.

Day 1

On the first day the discussion was about frameworks. The first part was a frameworks vs libraries discussion for node of which most folks were on the side that you should prefer small libraries over frameworks. The second discussion was about javascript templating engines and which style of engines the speakers preferred, i.e. string based or DOM based. Most erred on the side of dom based, though Nodejitsu has an interesting model which plates which runs on the server and uses a string based representation of the DOM. Steve gave a really good explanation on the different between the different approaches which I really appreciated. Another topic that was covered was around the community in China and what folks in the panel thing China developers should do to be more involved. The basic sentiment was for folks to get more involved with OSS projects and to be active in the mailing lists.

I asked Charlie Robbins about native modules in node as it relates to cloud providers. Charlie said that nodejitsu fully supports native modules and that he believes all providers should do the same. His argument was there was just too many flavors of distros / configurations and that building was the only sure fire way to ensure it works.

Day 2

The crux of the day 2 panel was about whether or not to use OOP libraries in JavaScript. The overall tone was don’t do it and embrace prototype, though a few folks thought it was perfectly fine to use OOP constructs. The second discussion was about coffeescript, should you use it or not. This came up in the context of Vicent’s talk on Hubot as it uses coffeescript. There was a split across the braod with the panelists. Some thought it was completely fine, others though it was horrible don’t do it and there were people in between. I spoke about my own personal pref which was to not use it in a published npm module though other than that it’s fine. One guy Domenic Denicola (from Barnes and Noble) pushed back and said if you are following James Halliday’s recommendation, then everything is a module thus you shouldn’t use Coffeescript at all.

Another question came up about which languages we use to develop. People cited various languages, but Domenic made an interesting comment, saying the only language here cares to learn nowadays is JavaScript and that with server support he needs nothing else. Domenic was a little biased as a lot of the work he is doing is mobile app based, where he is just using simple web apis on the backend and calling to other infrastructure. Several others agreed with him though that for many things, JS is sufficient today.

Finally the last question was directed to speakers asking them which cloud platform they prefer. A few of the foreign speakers said they use nodejitsu, though I definitely said Azure :-). I also said that I have used nodejitsu and it is nice for a very targetted node experience. I said that Azure offers the best hybrid cloud solution (PASS, IAAS, and On Prem support) and that I had heard that hybrid cloud was very important to several local folks I had spoken to.


Following the event we had a full day hackathon at PeopleSquared where both speakers and attendees came together for some hardcore hacking.


Bob Zheng of People Squared welcoming folks



Different teams at the hackathon

We started off using an open space style with folks suggesting projects they wanted to work on. Then everyone voted or the sessions they liked and teams were split.

My team was with Tim Caswell where we were building a new tool called “crate” which will packages up a node application, it’s modules and node itself into a self-extracting / executing exe.. I helped with the design and actually picked the name, but unfortunately had to leave early due to a family commitment. The project is up on gitcafe, a new github like offering in China.

Several other really cool projects came out of the hackathon including a gravatar type service which has an avatar that changes dynamically based on your mood or time of the day.

The best part about the hackathon for me was the collaboration between local and international developers working together toward solving a problem.


HuJS was a fantastic experience. It was amazing to see developers from the opposite ends of the world with very different languages and customs come together, share and learn.

For the folks in China, I hope they came away feeling that although an ocean separates us, we have many things in common should work together. For folks that came from the US/Europe etc, remember when you are on the node / JavaScript lists that you have friends in China and think about their needs as developers. Do your best to bridge the gaps!

And as for the organizers, we hope this is the first of many China JS events to come. I am talking to you Beijing!

Thank you to our sponsors, our organizers, our speakers and our attendees who made HuJS a possibility!

This entry was posted in Uncategorized. Bookmark the permalink. Follow any comments here with the RSS feed for this post.