A child starts learning to read and write at age 5. Why can’t they start learning to program then, too? I am making Isla, a first programming language for young children. The accompanying environment is called Storytime and lets a child use Isla to write text adventures.
I’ll describe the Isla compiler and how I implemented the lexer, parser and interpreter. I’ll describe the design of the Isla grammar. Why is there no punctuation? Why are expressions like sentences? How did I enable array and object assignments, function calls, conditionals and logical rules in baby talk?
by Adam Wolff
Facebook chat used to be notoriously unreliable. User complaints about disconnection, incorrect message counts, and missed messages dominated Facebook’s overall product feedback. New code frequently caused regressions because of untracked dependencies in our ginormous, monolithic codebase.
Not long ago, a small team set out to fix this by introducing modularity and unit testing. Along the way, we developed an approach that abandoned conventional MVC in favor of a functional style. The rewrite was a success: we were able to improve every important metric for chat, and we have continued to add features without causing regressions. Come learn about how we did it.
by Max Krohn
I cofounded OkCupid.com back in 2003. It was my fateful decision to base our whole stack on a single-threaded event-based library written in C++. It sucked; our code was stuffed with callback spaghetti and pyramids of death. But all of that changed when in 2006, we wrote the “Tame” system for C++, which we presented at USENIX ATC in 2007. This new system was compatible with the old code, but drastically improved our productivity by allowing straight-line code on either side of an a network call, much like threads supported all along.
by Sam Dutton
**Imagine a world where your phone, TV and computer could all communicate on a common platform. Imagine it was easy to add video chat to your web application. That’s the vision of WebRTC.**
WebRTC implements open standards for real-time, plugin-free video, audio and data communication.
As Brendan Eich put it: “WebRTC is a new front in the long war for an open and unencumbered web.” We believe WebRTC can democratise and decentralise tools for content creation and communication – for telephony, gaming, video production, music making, news gathering and many other applications.
In this session show you how to use WebRTC to build real-time communication into your web apps:
A: "Dammit, we can't do this on the web :("
B: "You know, it's called the open web - you can change it!"
A: "I can't just fork the web from GitHub and make it do the things I want."
B: "Haha, no, it's not that simple. But you can talk to some people and if they think your API makes sense, get a browser project from GitHub and they will help you to implement your new API."
A: "But then it's just in one browser, not the web?"
B: "You got to start somewhere."
A: "Right... Can you help me get going?"
Implementing competitive printing support for PDF.JS is not possible with the current state of the web. Therefore, I started to work on some new `mozPrintCallback` API.
In this talk, I will share my experience with proposing a new API, how to implement it in a browser and how even hacking C++ code can be fun.
by Kevin Markman
The story behind Google Docs Offline and some of the fantastic hacks put in place to make it work. We changed people’s mindsets to “think offline” while re-architecting the apps to not rely on the network. Moving an internet company offline involves some hard work and has some serious challenges (performance, cross-browser compatibility, platform bugs, etc).
by Irene Ros
Data is everywhere! We build applications that collect it, and even better - other people collect it and give us access. But! Do we bring that data back to our apps? In this session, we’ll talk about patterns for integrating data into our client-side applications and sweep through a collection of exciting libraries that work with those patterns.
by Alex Sexton
by John Bender
by max ogden
by Garann Means
by Angus Croll
Good programmers follow best practices; great programmers investigate them.
The Firefox desktop UI is powered by JS and Mozilla’s XUL platform, and in our first attempt to port Firefox over to Android, we used essentially the same architecture. However, drawing our own XUL-based UI killed startup time, responsiveness and memory use on Android, so about 10 months ago we decided start over with an entirely native Android UI.
We still use Gecko to render the same web experience you get on desktop, and a lot of the front-end browser logic is still written in JS, but we use a custom JSON message loop to communicate with a native Android UI written in Java and XML. Add-ons are an important part of the Mozilla story, so we also added JS APIs to allow add-on authors to manipulate this new native UI.
I’ll talk about the architecture of our app, challenges we faced, and how you can get involved with the project (including writing add-ons entirely in JS!).
Usually, when you make changes to code you need to imagine what this code will do, how your components will look like and how colors fit. But you’ve got a computer for that!
by Stuart Memo
I’ve seen the future, and it’s not in that layered .psd your designer just handed you. As designers and developers, we build things. And we do it often. But we don’t build websites or apps. We build systems. Systems that evolve and grow with a company, its users, and both of their needs. The way we design and build these systems should reflect the living, breathing things we want to create and leave more room for them to grow. The question is how do we accomplish this with static assets?
The answer is we set them all on fire. And start in the future. We start in the browser.
Lines of code are spent. Writing maintainable software and combating technical debt requires constant vigilance and an uncompromising aesthetic affinity for small components that do one thing well. This talk will look at the shape of code ripe for modularization and exactly what steps are required to turn convoluted tangle of code into dozens of reusable sub–components suitable for publishing to npm.
6th–7th October 2012