SlideShare a Scribd company logo
mobl
Zef Hemel
mobl
50 million


 iPhones
50 million    20 million


 iPhones     iPod Touches
50 million                  20 million


 iPhones                   iPod Touches




             100 million
mobl
1.5 million

    G1
1.5 million   1.2 million

    G1          Droid
1.5 million          1.2 million

    G1                 Droid


              2013
mobl
application
development
Objective-C
Objective-C   Java
Objective-C   Java   J2ME/C++
Objective-C        Java   J2ME/C++




 HTML/Javascript
Objective-C        Java          J2ME/C++




 HTML/Javascript          Java
mobl
Objective-C


Android Java

Blackberry
Java
J2ME

HTML/JS
mobl
3.3.1
3.3.1 – Applications may only use Documented
APIs in the manner prescribed by Apple and
must not use or call any private APIs.
Applications must be originally written in
Objective-C, C, C++, or JavaScript as executed
by the iPhone OS WebKit engine, and only code
written in C, C++, and Objective-C may compile
and directly link against the Documented APIs
(e.g., Applications that link to Documented APIs
through an intermediary translation or
compatibility layer or tool are prohibited).
3.3.1 – Applications may only use Documented
APIs in the manner prescribed by Apple and
must not use or call any private APIs.
Applications must be originally written in
Objective-C, C, C++, or JavaScript as executed
by the iPhone OS WebKit engine, and only code
written in C, C++, and Objective-C may compile
and directly link against the Documented APIs
(e.g., Applications that link to Documented APIs
through an intermediary translation or
compatibility layer or tool are prohibited).
mobl
mobl
AppStore
mobl
mobl
cross-platform development


   arbitrary rejections


  language expressivity
mobl
mobl
mobl
mobl
mobl
mobl
mobl
mobl
Webkit
HTML
WebDatabases
WebDatabases

Location information
       (GPS)
WebDatabases

Location information
       (GPS)




                       Threading
WebDatabases

Location information
       (GPS)

         Canvas

                       Threading
WebDatabases

Location information
       (GPS)

         Canvas

  Multi-touch          Threading
WebDatabases

Location information
       (GPS)
                       Offline support
         Canvas

  Multi-touch            Threading
WebDatabases
                 Full-screen support
Location information
       (GPS)
                       Offline support
         Canvas

  Multi-touch            Threading
“   We believe the web has won and over the next
    several years, the browser [..] will become the
    platform that matters and certainly that’s where
    Google is investing.
                                                                ”
                            Vic Gundotra, Google VP of Engineering
mobl
mobl
syntax similar to
demo
entity   Task {
  name   : String (searchable)
  done   : Bool
  tags   : Collection<Tag> (inverse: tasks)
}


entity Tag {
  name : String (searchable)
  tasks : Collection<Task> (inverse: tags)
}
function sayHello(name : String) {
  alert("Hello there, " + name);
}
screen root() {
  basicView("Tasks") {
    group {
      list(t in Task.all()) {
        item { label(t.name) }
      }
    }
  }
}
screen prompt(question : String) : String {
  var answer = ""
  header(question)
  group {
     inputString(answer)
  }
  button("Done", onclick={
     screen return answer;
  })
}
screen root() {
  var firstName = prompt("First name?")
  var lastName = prompt("Last name?")
  header("Hello there")
  label("Hello, " + firstName + " "
        + lastName)
}
data binding
var s = ""
<span databind=s/>
button("Set s", onclick={
   s = "Hello";
})
template label(t : String) {
   <span databind=t/>
}
...
var s = ""
label(s)
button("Set s", onclick={
   s = "Hello";
})
<span databind=s/>
<input type="text" databind=s/>

        two-way binding
reactive/dataflow programming
demo
screen root() {
  var amount     = 10
  var percentage = 10
  var total      = amount *
                   (1 + percentage/100)

    header("Tip calculator")
    group {
      inputNumber(amount, label="amount")
      inputNumber(percentage, label="%")
      label(total)
    }
}
demo
implementation
HTML/Javascript
<span>64</span>
<span>64</span>




             CSS styles
      span
             events
             - onclick
      64
var myspan = $("<span>");
myspan.text("64");
anotherEl.append(myspan);
sync vs async
synchronous programming


var results = tx.executeQuery("SELECT * FROM Task");
for(var i = 0; i < results.length; i++) {
   alert(results[i].name);
}
render page




                 time
query database
 and process
    results




      ...
render page




                                  time
                 query database
browser freeze    and process
                     results




                       ...
render page

 send query




                time
     ...


process query
    result


     ...
asynchronous programming


tx.executeQuery("SELECT * FROM Task",
  function(results) {
    for(var i = 0; i < results.length; i++) {
       alert(results[i].name);
    }
  });
...
tx.executeQuery("SELECT * FROM Task",
  function(results) {
    alert("Hello, ");
  });
alert("world!");
tx.executeQuery("SELECT * FROM Task",
  function(results) {
    tx.executeQuery("INSERT ...", function() {
      alert("Selected, then inserted");
    });
  });
continuation-passing style
     transformation
function displayLocationAndReturn() : Coordinates {
  var position = mobl::location::getPosition();
  alert("Lat: " + position.latitude);
  alert("Long: " + position.longitude);
  return position;
}
function displayLocationAndReturn() : Coordinates {
  var position = mobl::location::getPosition();
  alert("Lat: " + position.latitude);
  alert("Long: " + position.longitude);
  return position;
}




function displayLocationAndReturn(callback) {
   mobl.location.getPosition(function(result) {
     var position = result;
     alert("Lat: " + position.latitude);
     alert("Long: " + position.longitude);
     callback(position);
   });
};
function displayLocationAndReturn() : Coordinates {
  var position = mobl::location::getPosition();
  alert("Lat: " + position.latitude);
  alert("Long: " + position.longitude);
  return position;
}




function displayLocationAndReturn(callback) {
   mobl.location.getPosition(function(result) {
     var position = result;
     alert("Lat: " + position.latitude);
     alert("Long: " + position.longitude);
     callback(position);
   });
};
function displayLocationAndReturn() : Coordinates {
  var position = mobl::location::getPosition();
  alert("Lat: " + position.latitude);
  alert("Long: " + position.longitude);
  return position;
}




function displayLocationAndReturn(callback) {
   mobl.location.getPosition(function(result) {
     var position = result;
     alert("Lat: " + position.latitude);
     alert("Long: " + position.longitude);
     callback(position);
   });
};
reactive programming
screen root() {
  var n = 8
  label(n * n)
  button("Inc", onclick={
     n = n + 1;
  })
}
var n = 8



var n = ref(8);
var n = 8



       var n = ref(8);

Observable
- set(value)
- get()
- addEventListener(eventType, callback)
label(n * n)




var node565 = $("<span>");
node565.text(n.get() * n.get());
n.addEventListener("change", function() {
    node565.text(n.get() * n.get());
});
root.append(node565);
button("Inc", onclick={
            n = n + 1;
         })




var nodes566 = $("<span class='button'>");
node566.text("Inc");
node566.click(function() {
  n.set(n.get() + 1);
});
root.append(node566);
screen root() {
  var n = 8
  label(n * n)
  button("Inc", onclick={
     n = n + 1;
  })
}
screen root() {
  var n = 8
  label(n * n)
  button("Inc", onclick={
     n = n + 1;
  })
}
screen root() {
  var n = 8
  label(n * n)
  button("Inc", onclick={
     n = n + 1;
  })
}
conclusion
many mobile platforms


      HTML5/JS


avoid AppStore approval
mobl

statically-typed WebDSL-like language


        generates HTML/JS


CPS transform/reactive programming
get it?

http://mobl-lang.org

http://twitter.com/zef

More Related Content

PDF
Writing Your App Swiftly
PDF
Unbreakable: The Craft of Code
PDF
ES6 patterns in the wild
PDF
Mozilla とブラウザゲーム
PPT
JQuery Flot
PDF
Phoenix for laravel developers
PDF
Minimizing Decision Fatigue to Improve Team Productivity
PDF
Programmation fonctionnelle en JavaScript
Writing Your App Swiftly
Unbreakable: The Craft of Code
ES6 patterns in the wild
Mozilla とブラウザゲーム
JQuery Flot
Phoenix for laravel developers
Minimizing Decision Fatigue to Improve Team Productivity
Programmation fonctionnelle en JavaScript

What's hot (20)

PDF
Error Management: Future vs ZIO
PDF
Snickers: Open Source HTTP API for Media Encoding
PDF
Reactive, component 그리고 angular2
PDF
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
PDF
ES6, WTF?
PDF
Sylius and Api Platform The story of integration
PDF
MDSD for iPhone and Android
KEY
I phone勉強会 (2011.11.23)
DOC
Pads lab manual final
PDF
Introduction to Android Wear - Peter Friese
PDF
CQRS and Event Sourcing in a Symfony application
PDF
JavaScript and the AST
PDF
Tweaking the interactive grid
PDF
Emerging Languages: A Tour of the Horizon
PDF
Epic South Disasters
PPTX
Get started with YUI
PDF
Extending grimoirelab
PPTX
Creating sub zero dashboard plugin for apex with google
PDF
Un dsl pour ma base de données
PDF
Decoupling with Design Patterns and Symfony2 DIC
Error Management: Future vs ZIO
Snickers: Open Source HTTP API for Media Encoding
Reactive, component 그리고 angular2
beyond tellerrand: Mobile Apps with JavaScript – There's More Than Web
ES6, WTF?
Sylius and Api Platform The story of integration
MDSD for iPhone and Android
I phone勉強会 (2011.11.23)
Pads lab manual final
Introduction to Android Wear - Peter Friese
CQRS and Event Sourcing in a Symfony application
JavaScript and the AST
Tweaking the interactive grid
Emerging Languages: A Tour of the Horizon
Epic South Disasters
Get started with YUI
Extending grimoirelab
Creating sub zero dashboard plugin for apex with google
Un dsl pour ma base de données
Decoupling with Design Patterns and Symfony2 DIC
Ad

Viewers also liked (9)

PDF
mobl presentation @ IHomer
PDF
Abstractie (Dutch)
PDF
Cloud9 IDE Talk at meet.js Poznań
PDF
Frontrow conf
PDF
Internal DSLs
PDF
Avoiding JavaScript Pitfalls Through Tree Hugging
PDF
WebWorkFlow
PDF
mobl - model-driven engineering lecture
PDF
PIL - A Platform Independent Language
mobl presentation @ IHomer
Abstractie (Dutch)
Cloud9 IDE Talk at meet.js Poznań
Frontrow conf
Internal DSLs
Avoiding JavaScript Pitfalls Through Tree Hugging
WebWorkFlow
mobl - model-driven engineering lecture
PIL - A Platform Independent Language
Ad

Similar to mobl (20)

KEY
CouchDB on Android
PDF
mobl: Een DSL voor mobiele applicatieontwikkeling
PPTX
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
PDF
MOPCON 2014 - Best software architecture in app development
KEY
Paris js extensions
PDF
A More Flash Like Web?
PDF
Asynchronous Programming at Netflix
PDF
After max+phonegap
PDF
混搭移动开发:PhoneGap+JQurey+Dreamweaver
PDF
Software Language Design & Engineering
PDF
PDF
Android Best Practices
PDF
PDF
Backbone.js — Introduction to client-side JavaScript MVC
PPTX
Design Summit - UI Roadmap - Dan Clarizio, Martin Povolny
PPTX
What's New in Android
PPTX
Quick and Easy Development with Node.js and Couchbase Server
PPTX
Designing and developing mobile web applications with Mockup, Sencha Touch an...
PDF
WordPress Realtime - WordCamp São Paulo 2015
PPTX
Introduction To Google Android (Ft Rohan Bomle)
CouchDB on Android
mobl: Een DSL voor mobiele applicatieontwikkeling
2008 - TechDays PT: WCF, JSON and AJAX for performance and manageability
MOPCON 2014 - Best software architecture in app development
Paris js extensions
A More Flash Like Web?
Asynchronous Programming at Netflix
After max+phonegap
混搭移动开发:PhoneGap+JQurey+Dreamweaver
Software Language Design & Engineering
Android Best Practices
Backbone.js — Introduction to client-side JavaScript MVC
Design Summit - UI Roadmap - Dan Clarizio, Martin Povolny
What's New in Android
Quick and Easy Development with Node.js and Couchbase Server
Designing and developing mobile web applications with Mockup, Sencha Touch an...
WordPress Realtime - WordCamp São Paulo 2015
Introduction To Google Android (Ft Rohan Bomle)

Recently uploaded (20)

PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PPTX
Big Data Technologies - Introduction.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Advanced Soft Computing BINUS July 2025.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Machine learning based COVID-19 study performance prediction
Dropbox Q2 2025 Financial Results & Investor Presentation
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Review of recent advances in non-invasive hemoglobin estimation
NewMind AI Weekly Chronicles - August'25 Week I
“AI and Expert System Decision Support & Business Intelligence Systems”
breach-and-attack-simulation-cybersecurity-india-chennai-defenderrabbit-2025....
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
Big Data Technologies - Introduction.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Electronic commerce courselecture one. Pdf
Unlocking AI with Model Context Protocol (MCP)
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
[발표본] 너의 과제는 클라우드에 있어_KTDS_김동현_20250524.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Advanced Soft Computing BINUS July 2025.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Machine learning based COVID-19 study performance prediction

mobl