Expect all network communication to be asynchronous. You don’t know when requests will come back to you, and you likely have no idea what order they will arrive back. So you write your code asynchronously, same as you do in real life:
“Look, just get back to me when it’s done, ok?”
“Sure thing, I’ll call when it’s ready”
That’s all a Promise is – that conversation and that commitment. And they are a great design pattern to restore some sanity to asynchronous code.
If you are moving to OpenLayers3, the documentation is autogenerated, but the constructors aren’t really described all that well. The changes were enough to warrant a demo site and a workshop site that cover a lot of cookbook tasks. Find out more about Quakes in Canada at the NRCan quake center. If you want to do something with the datasets at Open Data, you can submit them to their App catalogue here
Rosetta and Philae are working hard at comet 67P and how they got there makes for some good interactive content.
Elegant simple clean interfaces work best when exploring new content that stands on its own. The dash and interface are a DOM overlay on the webgl allowing for simpler responsive layout changes for window size. The milestones really pull the interactive together and it would be interesting to have them denoted as points on the scrubber timeline or allow sequential navigation between them (i.e. [next milestone: encounter with asteroid Stein 3D] )
With exportable and maintainable csv files, data compression is not optimized but export from content creators is kept simple. The app is kept up to date on a daily basis and no web backend is really needed for DB entry. It will be interesting to see if how it is kept up to date while the imagery from Philae on the surface starts coming in. It is likely there is a custom CSV editor to ensure that no errors are made and that orbital data can be imported from other engineering tools.
Reuse: Any mission can use an interface like this. The spacecraft and target models could be changed up and of the CSV data on paths and milestones.
Social Media: The big social media aspects for ESA are webcast links, first images, and animated GIFs and simulations of approach and landing. Interactive content showing a timeline has to justify itself in comparison social media and outreach tools which are dense and event-based. They attract a different set of users who want to share in exploration actions not simply the results of the exploration. To bridge the two, embedding of Twtter feed tool, YouTube videos in the milestones section would make this a gateway interface to social media. In the other direction, a ‘goto’ function and embedding capability would make this a tool that could be quickly reference on social media channels (i.e. share this viewpoint and 3 days of orbit time)
jsperf is like a horserace – it allows you to set up and run your own test cases simultaneously on multiple remote browsers to see the performance differences. One recent one I was checking out was “Math.floor(4.6)” versus “~~4.6”. This is a powerful tool to diagnose some cross browser performance issues, and to have a look at what other people have been benchmarking.
I wrote a jsfiddle sample as a demo for my brother’s control systems class at NAIT to show the differences between closed-loop feedback controllers – the tiny algorithms behind cruise-control autopilots, and autofocus in your camera.
I have to generalize it to a PID object and so on, but it is fun to play with the coefficients – and I learned a thing or two I’d forgotten about digital controller behaviour, like sampling error and sampling bandwidth. And as all Control Systems engineers are warned: Turn up your Gains slowly!
Ideas for feedback loop tuning games? The unicyclist? better cruise control, Autopilot lander? Fill the acid vat?
By sandboxing App Stores and development processes, the major players have taken on the problem of developing their app stores. Although HTML5 promised to be a universal platform, iOS, Windows 8, Android etc. make those apps second-class citizens to the native App Store versions, forcing developers to choose which platform to develop for as an initial target.
This becomes a problem for upcoming platforms that quickly need to build App libraries to legitimize their proprietary platforms, mainly because they want it both ways: they want to lock developers time into their platform, and they want those developers to do it when there is no critical mass in that platform. From a developer perspective, why would I write for, say Windows 8 first when I can spend the same effort on a known distribution base: iOS? Ideally I would like to write for all platforms with one codebase. Of course if the platform creator is trying to ramp up by funding key developers and projects that can work for a while, but it presumes the target audience’s planned use for the new platform.
A simple solution would have been to allow web-based technologies to acts as a virtual machine that could be further compiled to native code for performance boost, much like Adobe is attempting to do with AIR. This would allow a write-once platform with closer to native performance, unlike, say PhoneGap which is forced to work in a browser window and so is not really a native App. Performance on, say, smartphones and tablets, is quickly becoming good enough that a small performance hit would be acceptable.
Being proprietary does not in itself attract developers – being a good return on investment does. It may be that the performance gap between native code and HTML5-based apps is not closing as fast as it could because platform creators do not think this way.