With us today is Allan MacKinnon, President, CTO, and founder of Everypoint, a company that builds developer tools and a platform for developing mobile applications.
Q: Allan, your company provides a mobile application development environment called "Nemo". What problem does Nemo solve?
A: Let me first start by explaining the mission for Everypoint. Everypoint was founded with the goal of redefining mobile application development by creating a clean and powerful way for developers to create, distribute and manage feature-rich, iPhone-quality applications to most possible Internet-ready mobile phones.
Everypoint's Nemo platform was created to be the industry's first mobile application development ecosystem to create, distribute, and manage highly interactive and graphically elegant applications for the over 1+ billion Internet-enabled phones in use across the globe today, effectively increasing market potential for developers by at least 100x. With this, we're looking to make it easier for developers to reach the largest audience of phones currently in use in the world.
Q: Can you tell us about Nemo from the developer's perspective?
A: With Nemo, for the first time, developers can create "rich" interactive always-on applications for Java ME devices. Nemo gives developers a rich presentation layer, infrastructure for pushing and syncing content in real time and an interactive scripting language that lets them try code out and break free of the "edit, compile, test, debug" loop of traditional mobile development.
The Nemo programming language was built to run on very resource limited Java ME feature phones. The goal was to build a language and runtime that would support dynamic loading of programs from either the network or local storage. Additionally, we wanted to give developers a rich vector graphics presentation layer and a powerful means of getting back and forth across intermittent low-bandwidth wireless networks.
Nemo also is unique in that is supports structured exceptions, closures and dynamically scoped variables. We leverage these features in our graphics and animation framework.
One of the most interesting features in the Nemo scripting language and its supporting Cloud Services is the ability to create "flows." Flows are real-time replicated collections of JSON objects that can be snapshot'ed, queried and manipulated from Nemo. Flows let developers subscribe to content that is either in the Nemo Cloud or is found on the internet and it will appear as an always-up-to-date collection inside of Nemo. Flows can be used for sharing content and even applications in real time across wireless networks. Flows are transactional and also guarantee that only the minimum amount of data is transmitted between the mobile phone and cloud, phone and Internet or phone to phone.
Because Nemo is interactive, a developer can ease into development and try the language out from the command line. The developer can draw anti-aliased text and graphics to the screen as well as create new definitions and test them immediately. We've found this immediate feedback invaluable and conducive to rapid development of applications.
Finally, it's worth noting that Nemo is written in itself. The entire language, interpreter and compiler are written in Nemo. We found this to be a great way to "bring up" a new language as well as prioritize features during early stages of the language's development.
Q: What's different about developing mobile applications, as compared to desktop applications?
A: Where do I begin?
Java ME feature phones typically have only 2MB of RAM to work with. Some more, some less. Think about that for a second, that's really small by today's standards. For that reason, our Nemo scripting language compiles down into a tiny executable representation. For us efficiency in both time and space is important so we built the smallest fastest language we could.
Wireless networks are not LANs. Mobile applications should be designed to be "intermittently connected." As a mobile developer, your application can go from no connectivity to 10KB/sec on a 2.5G network to megabits/sec on 3.5G network. This is why we built a powerful abstraction into the Nemo programming language that lets developers simply subscribe to content either in the Nemo Cloud or on the actual Internet. If you have connectivity, the content will be delivered. If you don't, it won't. All of this is taken care of by the Nemo Runtime and Cloud and only changes are sent to your mobile phone. The Nemo abstraction layer then informs you what's changed and where. The same goes for sending content from the mobile phone back up to the Cloud or to the actual Internet.
Screen sizes are not only consistently small but aspect ratios vary greatly. 240x320 pixels has rapidly become the standard screen size for developers to target but what happens when you want to develop across different screen sizes and aspect ratios? This is why the Nemo Runtime has a full-featured vector graphics engine built in. Nemo's vector graphics engine is amazing in that it's entirely written in portable Java and gives developers anti-aliased graphics, Bezier curves, transparency, outline fonts, animation, affine and perspective transforms, JPEG image scaling and more... all running on J2ME device with only 2MB of RAM and a 150MHz CPU.
Finally, the biggest and hardest to solve challenge with mobile applications is actually designing applications that work the way the mobile consumer expects. Most mobile applications are used for minutes or less at a time. Making sure the user gets all the information they need as quickly as possible remains a challenge. Nemo tries to help developers build great mobile applications by providing the three technical innovations I listed before but we also try to lead by example by demonstrating to the developer and consumer what great looking mobile user interfaces should look like.
Q: If you had to name the top three or four headaches for mobile developers, what would they be?
A: 1. Extreme device "fragmentation." Fragmentation has stagnated mobile development until this point. Trying to develop applications that run across phones with different hardware and software capabilities simply doesn't scale. We built the Nemo Runtime to "defragment" these device differences and present as ideal of an environment as possible to the developer.
2. Low fidelity APIs. Whether it's lack of access to powerful data structures or being stuck with primitive graphics APIs, it's very frustrating when your big ideas that would easily run on a PC simply can't be brought to a typical mobile phone. This is why we set out to build Nemo. We really wanted to build a layer that would enable really great mobile applications.
3. Debugging. Not knowing exactly why your application failed on a real device is painful beyond belief. We've lived through that pain and that's why we've made Nemo applications as debuggable as possible.
Q: Where can readers go to find out more about Nemo?
Demos of each application can be trialed using Everypoint's online emulator at http://nemo.everypoint.com/wiki/Live. All five applications, source code and tutorials are freely available for download by all registered Nemo developers.