SlideShare a Scribd company logo
1 of 58
Introduction to
Palm’s Mojo SDK
      Brendan G. Lim
   brendan@intridea.com
       @brendanlim
Overview
•   Introduction
•   What’s the Mojo SDK?
•   Introduction to webOS
•   Creating your first application
•   Data storage solutions
•   Overview of UI Widgets
•   Conclusion
Do you know HTML?
Do you know CSS?
Do you know
 JavaScript?
The Mojo SDK
is a perfect fit
Mojo SDK

•   JavaScript framework

•   Bundled with webOS

•   Model-View-Controller (MVC)

•   Can use standard web development tools
Mojo SDK

•   Includes ....

    •   Prototype, the JavaScript framework

    •   Mojo Framework & Documentation

    •   Emulator, DOM Inspector, debugger, etc

    •   Palm specific CSS styles
webOS
• Palm’s next-gen operating system
• Applications built using standard web
  technologies and languages (HTML, CSS,
  JavaScript)
• Designed to run on a variety of hardware
  with different screen sizes & resolutions
webOS
• User experience is optimized for launching
  and managing multiple applications at once
• Integrates a card-based OS with a web
  browser
• Applications can run in the background
• Applications run off Ajax-based web
  application model
Native App Model

     Native Client

      User Interface


     Server Logic Data
Ajax Web App Model
       Browser Client
         User Interface


        Server Logic Data


    HTTP             DHTML/JavaScript
           Web Server


        Server Logic Data

     Server-side Systems
Launcher




           Quick Launch bar
Cards
        Card View




Cards               Activity
Stages
Card    Activity   Dashboard
Generate an App

palm-generate helloWorld
‣ <app>
                   ‣ <assistants>
                     ‣ stage-assistant.js
 Structure of      ‣ <views>
                   ‣ <images>
an Application     ‣ <stylesheets>
                   ‣ appinfo.json
                   ‣ icon.png
                   ‣ index.html
appinfo.json
{
    "id": "com.yourdomain.helloworld",
    "version": "1.0",
    "vendor": "My Company",
    "type": "web",
    "main": "index.html",
    "title": "helloWorld",
    "icon": "icon.png"
}
appinfo.json
•   vender - person or company who made the app
•   vendorurl - URL of the vendor
•   visible - whether or not the application is visible within the
    launcher
•   removeable - tells webOs if you can uninstall this
    application
•   miniicon - path to icon to be used in the notification area
•   category - category for the application
•   noWindow - indivates that this is a headless application that
    will be only called by other applications
helloWorld App
   app/index.html
Packaging an Application

     palm-package helloWorld


The directory where your application was generated
Packaging an Application
Which ends up creating this package:
com.yourdomain.helloworld_1.0_all.ipk
Packaging an Application
     Which ends up creating this package:
     com.yourdomain.helloworld_1.0_all.ipk

   That you can install by doing the following:
palm-install com.yourdomain.helloworld_1.0_all.ipk
Tada!
Scenes
•   Can think of scenes as separate pages within a
    website.
•   Mutually exclusive views of the application
    within a Stage
•   Most applications have different scenes within
    the same stage.
•   An application must have at least one scene.
•   Scenes are supported by a controller
    •   Referred to as a scene assistant
‣ <app>
                                   ‣ <assistants>
                                     ‣ stage-assistant.js
                                   ‣ <views>
Generate a Scene                   ‣ <images>
                                   ‣ <stylesheets>
palm-generate
 -t new_scene -p "name=First" .    ‣ appinfo.json
                                   ‣ icon.png
                                   ‣ index.html
‣ <app>
                                  ‣ <assistants>
                                    ‣ first-assistant.js
                                    ‣ stage-assistant.js
                                  ‣ <views>
Generate a Scene                    ‣ <first>
palm-generate                         ‣ first-scene.html
 -t new_scene -p "name=First" .   ‣ <images>
                                  ‣ <stylesheets>
                                  ‣ appinfo.json
                                  ‣ icon.png
                                  ‣ index.html
Linking to a Scene
    app/index.html
Linking to a Scene
app/assistants/stage-assistant.js
Linking to a Scene
app/assistants/stage-assistant.js
Setting up the First Scene
   app/views/first/first-scene.html
After packing & reinstalling
Let’s tie in one more scene
Run this in the root of your app directory:
 palm-generate -t new_scene -p "name=Second" .
Setup the Second Scene
       app/index.html
Add Button to First Scene
   app/views/first/first-scene.html
Link Button to Second Scene
    app/assistants/first-assistant.js
Link Button to Second Scene
    app/assistants/first-assistant.js
Setup the Second Scene
 app/views/second/second-scene.html
After packing & reinstalling
Storage
• Mojo supports:
 • HTML5 database CRUD operations
 • Depot
 • Cookies
• Used for application preferences or to
  cache data
Mojo Depot
•   Provides a simplified interface to the native HTML5
    database API
•   Depot is recommended if:
    •   You are storing simple objects for offline access
    •   You don’t need a specific schema design
    •   You have no need for transactions or queries
•   Limited to 5MB of data per object
•   Asynchronous callbacks
Using Mojo Depot

Create / Open
Mojo.Depot() - opens a depot with a name that matches or creates a new DB

Read
simpleGet() - returns object it retrieves if there’s a match


Update
simpleAdd()- adds or updates the value of the named object

Delete
removeAll() - removes the named depot and deletes associated data
Using Mojo Depot

Create / Open
var db = new Mojo.Depot({name:”dbName”, version:1, replace:false}, this.openOK.bind(this), this.openFail.bind(this));



Read
db.simpleGet(“myData”, this.getListOK.bind(this), this.getListFailed.bind(this));


Update
db.simpleAdd(“myData”, myDataContents, this.savedListOK.bind(this), this.savedListFailed.bind(this));


Delete
db.removeAll();
Using Mojo Depot
                                                                                Callbacks
Create / Open
var db = new Mojo.Depot({name:”dbName”, version:1, replace:false}, this.openOK.bind(this), this.openFail.bind(this));



Read
db.simpleGet(“myData”, this.getListOK.bind(this), this.getListFailed.bind(this));


Update
db.simpleAdd(“myData”, myDataContents, this.savedListOK.bind(this), this.savedListFailed.bind(this));


Delete
db.removeAll();
Using Mojo Depot
var db = new Mojo.Depot({name:”dbName”, version:1, replace:false}, this.openOK.bind(this), this.openFail.bind(this));




FirstAssistant.prototype.openOk = function() {
    Mojo.Log.info(“.....”,”Database opened”);
    db.simpleGet(“myData”, this.getListOK.bind(this),
      this.getListFailed.bind(this));
}
Mojo Cookies
•   Simplified interface to cookies
•   Intended to be used to store small amounts of data
    •   Application Preferences, versions, or state
        information
•   webOS creates a “fake domain” for individual cookies
    based on the application’s ID.
•   Limited to 4KB, but multiple cookies per application is
    acceptable
•   Synchronous callbacks
Using Mojo Cookies

Create / Open
Mojo.Model.Cookie(id) - opens or creates cookie that matches the id

Read
get() - returns object it retrieves if there’s a match


Update
put()- adds or updates object with an optional date/time to expire

Delete
remove() - removes the cookie and it’s data
Using Mojo Cookies

Create / Open
this.cookie = new Mojo.Model.Cookie(“Preferences”);


Read
var retrievedPrefs = this.cookie.get();


Update
this.cookie.put({ ...jsonKey: jsonValue ... });


Delete
this.cookie.remove();
UI Widgets
•   User interface controls to create feature-rich
    interactive applications
•   Types of widgets:
    •   Static/dynamic lists, button controls, selectors,
        text fields, menus, dialogs, pickers, viewers
•   Instantiated in a scene’s assistant setup method
    or when specified in an HTML template used by
    another widget.
UI Widgets: Lists
• Most important widget in the framework
• webOS user experience was built around a
  fast and powerful list widget
• Can be used bind dynamic data sources
• Can embed other widgets & objects within
  your lists
UI Widgets: Menus
• Menu widgets can be used with specified
  areas of the screen
 • View & Command menus
  • Fully customizable
 • App menu handled by the system
  • Custom items can be added to these
Summary
• If you have a general understanding of
  HTML, CSS, and JavaScript you can start
  developing for Palm’s webOS
• The MojoSDK is a solid framework that
  allows us to create applications easily
• There is MUCH more to the MojoSDK and
  webOS than was covered in this
  presentation.
Questions?

More Related Content

What's hot

AtlasCamp 2015: Using add-ons to build add-ons
AtlasCamp 2015: Using add-ons to build add-onsAtlasCamp 2015: Using add-ons to build add-ons
AtlasCamp 2015: Using add-ons to build add-onsAtlassian
 
AtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and ServerAtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and ServerAtlassian
 
AtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlassian
 
JavaFX – 10 things I love about you
JavaFX – 10 things I love about youJavaFX – 10 things I love about you
JavaFX – 10 things I love about youAlexander Casall
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0Takuya Tejima
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular UJoonas Lehtinen
 
Building a js widget
Building a js widgetBuilding a js widget
Building a js widgetTudor Barbu
 
The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015Matt Raible
 
Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todaygerbille
 
Introduction to backbone presentation
Introduction to backbone presentationIntroduction to backbone presentation
Introduction to backbone presentationBrian Hogg
 
An introduction to Vue.js
An introduction to Vue.jsAn introduction to Vue.js
An introduction to Vue.jsPagepro
 
The Complementarity of React and Web Components
The Complementarity of React and Web ComponentsThe Complementarity of React and Web Components
The Complementarity of React and Web ComponentsAndrew Rota
 
Angular JS blog tutorial
Angular JS blog tutorialAngular JS blog tutorial
Angular JS blog tutorialClaude Tech
 
Js Saturday 2013 your jQuery could perform better
Js Saturday 2013 your jQuery could perform betterJs Saturday 2013 your jQuery could perform better
Js Saturday 2013 your jQuery could perform betterIvo Andreev
 

What's hot (20)

AtlasCamp 2015: Using add-ons to build add-ons
AtlasCamp 2015: Using add-ons to build add-onsAtlasCamp 2015: Using add-ons to build add-ons
AtlasCamp 2015: Using add-ons to build add-ons
 
AtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and ServerAtlasCamp 2015: Connect everywhere - Cloud and Server
AtlasCamp 2015: Connect everywhere - Cloud and Server
 
An introduction to Vue.js
An introduction to Vue.jsAn introduction to Vue.js
An introduction to Vue.js
 
AtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using now
 
JavaFX – 10 things I love about you
JavaFX – 10 things I love about youJavaFX – 10 things I love about you
JavaFX – 10 things I love about you
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0
 
Vuex
VuexVuex
Vuex
 
Vaadin Components @ Angular U
Vaadin Components @ Angular UVaadin Components @ Angular U
Vaadin Components @ Angular U
 
Sane Async Patterns
Sane Async PatternsSane Async Patterns
Sane Async Patterns
 
Web components
Web componentsWeb components
Web components
 
Building a js widget
Building a js widgetBuilding a js widget
Building a js widget
 
The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015The Art of AngularJS in 2015 - Angular Summit 2015
The Art of AngularJS in 2015 - Angular Summit 2015
 
Creating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of todayCreating the interfaces of the future with the APIs of today
Creating the interfaces of the future with the APIs of today
 
Introduction to backbone presentation
Introduction to backbone presentationIntroduction to backbone presentation
Introduction to backbone presentation
 
An introduction to Vue.js
An introduction to Vue.jsAn introduction to Vue.js
An introduction to Vue.js
 
The Complementarity of React and Web Components
The Complementarity of React and Web ComponentsThe Complementarity of React and Web Components
The Complementarity of React and Web Components
 
Angular JS blog tutorial
Angular JS blog tutorialAngular JS blog tutorial
Angular JS blog tutorial
 
Vaadin Components
Vaadin ComponentsVaadin Components
Vaadin Components
 
Js Saturday 2013 your jQuery could perform better
Js Saturday 2013 your jQuery could perform betterJs Saturday 2013 your jQuery could perform better
Js Saturday 2013 your jQuery could perform better
 
jQuery for web development
jQuery for web developmentjQuery for web development
jQuery for web development
 

Viewers also liked

ExL Pharma Clinical Trials Phase I and Phase IIa Conference Brochure: Phase 1...
ExL Pharma Clinical Trials Phase I and Phase IIa Conference Brochure: Phase 1...ExL Pharma Clinical Trials Phase I and Phase IIa Conference Brochure: Phase 1...
ExL Pharma Clinical Trials Phase I and Phase IIa Conference Brochure: Phase 1...bryonmain
 
Heart diseases
Heart diseasesHeart diseases
Heart diseasesHeena Modi
 
Im Mobile Who's Coming With Me
Im Mobile Who's Coming With MeIm Mobile Who's Coming With Me
Im Mobile Who's Coming With MeBrendan Lim
 
Zum kapuzinerberg
Zum kapuzinerbergZum kapuzinerberg
Zum kapuzinerbergHeena Modi
 
Dining in salzburg
Dining in salzburgDining in salzburg
Dining in salzburgHeena Modi
 
The broiler hen
The broiler hen The broiler hen
The broiler hen Heena Modi
 
2013 Jean Fares Couture collection look book
2013 Jean Fares Couture collection look book2013 Jean Fares Couture collection look book
2013 Jean Fares Couture collection look bookNorma HAYEK
 
Poonam and jaimin’s wedding day
Poonam and jaimin’s wedding dayPoonam and jaimin’s wedding day
Poonam and jaimin’s wedding dayHeena Modi
 
Connect Faster And Learn More With Friend Feed
Connect Faster And Learn More With Friend FeedConnect Faster And Learn More With Friend Feed
Connect Faster And Learn More With Friend FeedDaniel Pritchett
 
The gorgeous pearl
The gorgeous pearlThe gorgeous pearl
The gorgeous pearlHeena Modi
 
Before and after decorating our new home
Before and after decorating our new homeBefore and after decorating our new home
Before and after decorating our new homeHeena Modi
 
MSS Business Integration Practice Ibm Web Sphere
MSS Business Integration Practice   Ibm Web SphereMSS Business Integration Practice   Ibm Web Sphere
MSS Business Integration Practice Ibm Web SphereDavid White
 
Evolving Trends and Fashion in Egypt with Jean Fares
Evolving Trends and Fashion in Egypt with Jean FaresEvolving Trends and Fashion in Egypt with Jean Fares
Evolving Trends and Fashion in Egypt with Jean FaresNorma HAYEK
 
Lrrcm Analysis Process
Lrrcm Analysis ProcessLrrcm Analysis Process
Lrrcm Analysis Processrichardn0922
 
Schloss mirabell
Schloss mirabellSchloss mirabell
Schloss mirabellHeena Modi
 

Viewers also liked (20)

ExL Pharma Clinical Trials Phase I and Phase IIa Conference Brochure: Phase 1...
ExL Pharma Clinical Trials Phase I and Phase IIa Conference Brochure: Phase 1...ExL Pharma Clinical Trials Phase I and Phase IIa Conference Brochure: Phase 1...
ExL Pharma Clinical Trials Phase I and Phase IIa Conference Brochure: Phase 1...
 
Heart diseases
Heart diseasesHeart diseases
Heart diseases
 
Adjective Jingle
Adjective JingleAdjective Jingle
Adjective Jingle
 
Im Mobile Who's Coming With Me
Im Mobile Who's Coming With MeIm Mobile Who's Coming With Me
Im Mobile Who's Coming With Me
 
Zum kapuzinerberg
Zum kapuzinerbergZum kapuzinerberg
Zum kapuzinerberg
 
Dining in salzburg
Dining in salzburgDining in salzburg
Dining in salzburg
 
The broiler hen
The broiler hen The broiler hen
The broiler hen
 
2013 Jean Fares Couture collection look book
2013 Jean Fares Couture collection look book2013 Jean Fares Couture collection look book
2013 Jean Fares Couture collection look book
 
Poonam and jaimin’s wedding day
Poonam and jaimin’s wedding dayPoonam and jaimin’s wedding day
Poonam and jaimin’s wedding day
 
Connect Faster And Learn More With Friend Feed
Connect Faster And Learn More With Friend FeedConnect Faster And Learn More With Friend Feed
Connect Faster And Learn More With Friend Feed
 
The gorgeous pearl
The gorgeous pearlThe gorgeous pearl
The gorgeous pearl
 
Jikumbushe
JikumbusheJikumbushe
Jikumbushe
 
DSA - Lecture 03
DSA - Lecture 03DSA - Lecture 03
DSA - Lecture 03
 
Lecture 02 - DSA
Lecture 02 - DSALecture 02 - DSA
Lecture 02 - DSA
 
Before and after decorating our new home
Before and after decorating our new homeBefore and after decorating our new home
Before and after decorating our new home
 
10 words
10 words10 words
10 words
 
MSS Business Integration Practice Ibm Web Sphere
MSS Business Integration Practice   Ibm Web SphereMSS Business Integration Practice   Ibm Web Sphere
MSS Business Integration Practice Ibm Web Sphere
 
Evolving Trends and Fashion in Egypt with Jean Fares
Evolving Trends and Fashion in Egypt with Jean FaresEvolving Trends and Fashion in Egypt with Jean Fares
Evolving Trends and Fashion in Egypt with Jean Fares
 
Lrrcm Analysis Process
Lrrcm Analysis ProcessLrrcm Analysis Process
Lrrcm Analysis Process
 
Schloss mirabell
Schloss mirabellSchloss mirabell
Schloss mirabell
 

Similar to Introduction to Palm's Mojo SDK

Intro To webOS
Intro To webOSIntro To webOS
Intro To webOSfpatton
 
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitIMC Institute
 
Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Mahmoud Hamed Mahmoud
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoJames Casey
 
企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践Jacky Chi
 
Lec005 android start_program
Lec005 android start_programLec005 android start_program
Lec005 android start_programEyad Almasri
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - MozillaRobert Nyman
 
Building iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360FlexBuilding iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360Flexdanielwanja
 
Building WebApp with HTML5
Building WebApp with HTML5Building WebApp with HTML5
Building WebApp with HTML5Tien Tran Le Duy
 
Progressive Web Apps. What, why and how
Progressive Web Apps. What, why and howProgressive Web Apps. What, why and how
Progressive Web Apps. What, why and howRiza Fahmi
 
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)
"Progressive Web Apps" by Riza Fahmi	(Hacktiv8)"Progressive Web Apps" by Riza Fahmi	(Hacktiv8)
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)Tech in Asia ID
 
SharePoint Saturday Atlanta 2015
SharePoint Saturday Atlanta 2015SharePoint Saturday Atlanta 2015
SharePoint Saturday Atlanta 2015Pushkar Chivate
 
XPages Blast - ILUG 2010
XPages Blast - ILUG 2010XPages Blast - ILUG 2010
XPages Blast - ILUG 2010Tim Clark
 
Vaadin 7 CN
Vaadin 7 CNVaadin 7 CN
Vaadin 7 CNjojule
 

Similar to Introduction to Palm's Mojo SDK (20)

Intro To webOS
Intro To webOSIntro To webOS
Intro To webOS
 
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
 
Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践企业级软件的组件化和动态化开发实践
企业级软件的组件化和动态化开发实践
 
Lec005 android start_program
Lec005 android start_programLec005 android start_program
Lec005 android start_program
 
Web APIs & Apps - Mozilla
Web APIs & Apps - MozillaWeb APIs & Apps - Mozilla
Web APIs & Apps - Mozilla
 
Building iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360FlexBuilding iPad apps with Flex - 360Flex
Building iPad apps with Flex - 360Flex
 
React django
React djangoReact django
React django
 
Building WebApp with HTML5
Building WebApp with HTML5Building WebApp with HTML5
Building WebApp with HTML5
 
Progressive Web Apps. What, why and how
Progressive Web Apps. What, why and howProgressive Web Apps. What, why and how
Progressive Web Apps. What, why and how
 
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)
"Progressive Web Apps" by Riza Fahmi	(Hacktiv8)"Progressive Web Apps" by Riza Fahmi	(Hacktiv8)
"Progressive Web Apps" by Riza Fahmi (Hacktiv8)
 
JavaScript on the Desktop
JavaScript on the DesktopJavaScript on the Desktop
JavaScript on the Desktop
 
Magento++
Magento++Magento++
Magento++
 
SharePoint Saturday Atlanta 2015
SharePoint Saturday Atlanta 2015SharePoint Saturday Atlanta 2015
SharePoint Saturday Atlanta 2015
 
Zend framework
Zend frameworkZend framework
Zend framework
 
XPages Blast - ILUG 2010
XPages Blast - ILUG 2010XPages Blast - ILUG 2010
XPages Blast - ILUG 2010
 
Os Haase
Os HaaseOs Haase
Os Haase
 
Vaadin 7 CN
Vaadin 7 CNVaadin 7 CN
Vaadin 7 CN
 

More from Brendan Lim

Developing Cocoa Applications with macRuby
Developing Cocoa Applications with macRubyDeveloping Cocoa Applications with macRuby
Developing Cocoa Applications with macRubyBrendan Lim
 
Building Native Apps With Titanium Mobile
Building Native Apps With Titanium MobileBuilding Native Apps With Titanium Mobile
Building Native Apps With Titanium MobileBrendan Lim
 
MacRuby to The Max
MacRuby to The MaxMacRuby to The Max
MacRuby to The MaxBrendan Lim
 
The Lure Of Ubiquitous Mobile
The Lure Of Ubiquitous MobileThe Lure Of Ubiquitous Mobile
The Lure Of Ubiquitous MobileBrendan Lim
 
Mobilizing Your Rails Application - Rails Underground, London, UK
Mobilizing Your Rails Application - Rails Underground, London, UKMobilizing Your Rails Application - Rails Underground, London, UK
Mobilizing Your Rails Application - Rails Underground, London, UKBrendan Lim
 
Mobilizing Your Rails Application - LA Ruby Conference 2009
Mobilizing Your Rails Application - LA Ruby Conference 2009Mobilizing Your Rails Application - LA Ruby Conference 2009
Mobilizing Your Rails Application - LA Ruby Conference 2009Brendan Lim
 

More from Brendan Lim (6)

Developing Cocoa Applications with macRuby
Developing Cocoa Applications with macRubyDeveloping Cocoa Applications with macRuby
Developing Cocoa Applications with macRuby
 
Building Native Apps With Titanium Mobile
Building Native Apps With Titanium MobileBuilding Native Apps With Titanium Mobile
Building Native Apps With Titanium Mobile
 
MacRuby to The Max
MacRuby to The MaxMacRuby to The Max
MacRuby to The Max
 
The Lure Of Ubiquitous Mobile
The Lure Of Ubiquitous MobileThe Lure Of Ubiquitous Mobile
The Lure Of Ubiquitous Mobile
 
Mobilizing Your Rails Application - Rails Underground, London, UK
Mobilizing Your Rails Application - Rails Underground, London, UKMobilizing Your Rails Application - Rails Underground, London, UK
Mobilizing Your Rails Application - Rails Underground, London, UK
 
Mobilizing Your Rails Application - LA Ruby Conference 2009
Mobilizing Your Rails Application - LA Ruby Conference 2009Mobilizing Your Rails Application - LA Ruby Conference 2009
Mobilizing Your Rails Application - LA Ruby Conference 2009
 

Recently uploaded

Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 

Recently uploaded (20)

Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 

Introduction to Palm's Mojo SDK

  • 1. Introduction to Palm’s Mojo SDK Brendan G. Lim brendan@intridea.com @brendanlim
  • 2. Overview • Introduction • What’s the Mojo SDK? • Introduction to webOS • Creating your first application • Data storage solutions • Overview of UI Widgets • Conclusion
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8. Do you know HTML?
  • 9. Do you know CSS?
  • 10. Do you know JavaScript?
  • 11. The Mojo SDK is a perfect fit
  • 12. Mojo SDK • JavaScript framework • Bundled with webOS • Model-View-Controller (MVC) • Can use standard web development tools
  • 13. Mojo SDK • Includes .... • Prototype, the JavaScript framework • Mojo Framework & Documentation • Emulator, DOM Inspector, debugger, etc • Palm specific CSS styles
  • 14. webOS • Palm’s next-gen operating system • Applications built using standard web technologies and languages (HTML, CSS, JavaScript) • Designed to run on a variety of hardware with different screen sizes & resolutions
  • 15. webOS • User experience is optimized for launching and managing multiple applications at once • Integrates a card-based OS with a web browser • Applications can run in the background • Applications run off Ajax-based web application model
  • 16. Native App Model Native Client User Interface Server Logic Data
  • 17. Ajax Web App Model Browser Client User Interface Server Logic Data HTTP DHTML/JavaScript Web Server Server Logic Data Server-side Systems
  • 18. Launcher Quick Launch bar
  • 19. Cards Card View Cards Activity
  • 20. Stages Card Activity Dashboard
  • 22. ‣ <app> ‣ <assistants> ‣ stage-assistant.js Structure of ‣ <views> ‣ <images> an Application ‣ <stylesheets> ‣ appinfo.json ‣ icon.png ‣ index.html
  • 23. appinfo.json { "id": "com.yourdomain.helloworld", "version": "1.0", "vendor": "My Company", "type": "web", "main": "index.html", "title": "helloWorld", "icon": "icon.png" }
  • 24. appinfo.json • vender - person or company who made the app • vendorurl - URL of the vendor • visible - whether or not the application is visible within the launcher • removeable - tells webOs if you can uninstall this application • miniicon - path to icon to be used in the notification area • category - category for the application • noWindow - indivates that this is a headless application that will be only called by other applications
  • 25. helloWorld App app/index.html
  • 26. Packaging an Application palm-package helloWorld The directory where your application was generated
  • 27. Packaging an Application Which ends up creating this package: com.yourdomain.helloworld_1.0_all.ipk
  • 28. Packaging an Application Which ends up creating this package: com.yourdomain.helloworld_1.0_all.ipk That you can install by doing the following: palm-install com.yourdomain.helloworld_1.0_all.ipk
  • 29. Tada!
  • 30. Scenes • Can think of scenes as separate pages within a website. • Mutually exclusive views of the application within a Stage • Most applications have different scenes within the same stage. • An application must have at least one scene. • Scenes are supported by a controller • Referred to as a scene assistant
  • 31. ‣ <app> ‣ <assistants> ‣ stage-assistant.js ‣ <views> Generate a Scene ‣ <images> ‣ <stylesheets> palm-generate -t new_scene -p "name=First" . ‣ appinfo.json ‣ icon.png ‣ index.html
  • 32. ‣ <app> ‣ <assistants> ‣ first-assistant.js ‣ stage-assistant.js ‣ <views> Generate a Scene ‣ <first> palm-generate ‣ first-scene.html -t new_scene -p "name=First" . ‣ <images> ‣ <stylesheets> ‣ appinfo.json ‣ icon.png ‣ index.html
  • 33. Linking to a Scene app/index.html
  • 34. Linking to a Scene app/assistants/stage-assistant.js
  • 35. Linking to a Scene app/assistants/stage-assistant.js
  • 36. Setting up the First Scene app/views/first/first-scene.html
  • 37. After packing & reinstalling
  • 38. Let’s tie in one more scene Run this in the root of your app directory: palm-generate -t new_scene -p "name=Second" .
  • 39. Setup the Second Scene app/index.html
  • 40. Add Button to First Scene app/views/first/first-scene.html
  • 41. Link Button to Second Scene app/assistants/first-assistant.js
  • 42. Link Button to Second Scene app/assistants/first-assistant.js
  • 43. Setup the Second Scene app/views/second/second-scene.html
  • 44. After packing & reinstalling
  • 45. Storage • Mojo supports: • HTML5 database CRUD operations • Depot • Cookies • Used for application preferences or to cache data
  • 46. Mojo Depot • Provides a simplified interface to the native HTML5 database API • Depot is recommended if: • You are storing simple objects for offline access • You don’t need a specific schema design • You have no need for transactions or queries • Limited to 5MB of data per object • Asynchronous callbacks
  • 47. Using Mojo Depot Create / Open Mojo.Depot() - opens a depot with a name that matches or creates a new DB Read simpleGet() - returns object it retrieves if there’s a match Update simpleAdd()- adds or updates the value of the named object Delete removeAll() - removes the named depot and deletes associated data
  • 48. Using Mojo Depot Create / Open var db = new Mojo.Depot({name:”dbName”, version:1, replace:false}, this.openOK.bind(this), this.openFail.bind(this)); Read db.simpleGet(“myData”, this.getListOK.bind(this), this.getListFailed.bind(this)); Update db.simpleAdd(“myData”, myDataContents, this.savedListOK.bind(this), this.savedListFailed.bind(this)); Delete db.removeAll();
  • 49. Using Mojo Depot Callbacks Create / Open var db = new Mojo.Depot({name:”dbName”, version:1, replace:false}, this.openOK.bind(this), this.openFail.bind(this)); Read db.simpleGet(“myData”, this.getListOK.bind(this), this.getListFailed.bind(this)); Update db.simpleAdd(“myData”, myDataContents, this.savedListOK.bind(this), this.savedListFailed.bind(this)); Delete db.removeAll();
  • 50. Using Mojo Depot var db = new Mojo.Depot({name:”dbName”, version:1, replace:false}, this.openOK.bind(this), this.openFail.bind(this)); FirstAssistant.prototype.openOk = function() { Mojo.Log.info(“.....”,”Database opened”); db.simpleGet(“myData”, this.getListOK.bind(this), this.getListFailed.bind(this)); }
  • 51. Mojo Cookies • Simplified interface to cookies • Intended to be used to store small amounts of data • Application Preferences, versions, or state information • webOS creates a “fake domain” for individual cookies based on the application’s ID. • Limited to 4KB, but multiple cookies per application is acceptable • Synchronous callbacks
  • 52. Using Mojo Cookies Create / Open Mojo.Model.Cookie(id) - opens or creates cookie that matches the id Read get() - returns object it retrieves if there’s a match Update put()- adds or updates object with an optional date/time to expire Delete remove() - removes the cookie and it’s data
  • 53. Using Mojo Cookies Create / Open this.cookie = new Mojo.Model.Cookie(“Preferences”); Read var retrievedPrefs = this.cookie.get(); Update this.cookie.put({ ...jsonKey: jsonValue ... }); Delete this.cookie.remove();
  • 54. UI Widgets • User interface controls to create feature-rich interactive applications • Types of widgets: • Static/dynamic lists, button controls, selectors, text fields, menus, dialogs, pickers, viewers • Instantiated in a scene’s assistant setup method or when specified in an HTML template used by another widget.
  • 55. UI Widgets: Lists • Most important widget in the framework • webOS user experience was built around a fast and powerful list widget • Can be used bind dynamic data sources • Can embed other widgets & objects within your lists
  • 56. UI Widgets: Menus • Menu widgets can be used with specified areas of the screen • View & Command menus • Fully customizable • App menu handled by the system • Custom items can be added to these
  • 57. Summary • If you have a general understanding of HTML, CSS, and JavaScript you can start developing for Palm’s webOS • The MojoSDK is a solid framework that allows us to create applications easily • There is MUCH more to the MojoSDK and webOS than was covered in this presentation.

Editor's Notes

  1. Some of our products include applications like Present.ly, a microblogging solution for businesses.
  2. Scalr, which allows you to take advantage of Amazon&amp;#x2019;s EC2 service without poking your eyeballs out.
  3. CrowdSound, which allows your customers to leave feedback on your applications.
  4. ... and MediaPlug which allows you to offload long user uploads and do complex transcoding and manipulations automagically without your users having to leave your site.
  5. This is the native application model, which Palm OS had and other major mobile platforms use. In this model the app is installed as an executable on the native OS with direct access to the OS&amp;#x2019;s data and services.
  6. This is the application model that Palm&amp;#x2019;s webOS uses. Ajax apps have some nice advantages over embedded apps. They can be more easily deployed and updated through the same techniques used for web applications. It&amp;#x2019;s also much easier for most developers to jump in since it&amp;#x2019;s just like web apps. This is big for web development shops with developers that aren&amp;#x2019;t familiar with Java or Objective-C. Since they all know how to make web apps, they are all essentially mobile developers bc of Palm&amp;#x2019;s Mojo SDK.
  7. Cards were inspired by the way one person handles a deck of cards. webOS works similarly by allowing you to scroll through cards, select cards and flicking cards off the top of the screen to remove them or select them and drag them to a new location. There are cards, the expanded card view and the individual activity view.
  8. webOS applications can have one or more stages. Here you can see the Card stage, Activity stage, and the Dashboard stage. Stages are declarative HTML structures similar to a traditional HTML window or browser tab. For example the Inbox view may be one stage and the screen to create a new e-mail would be another stage.
  9. So, this is the initial structure of the application after you generate your helloWorld application. Within app there is the assistants folder, views for your HTML files, images, stylsheets, etc. The important file here is appinfo.json which holds all the info for your application. The icon is what is shown in the launcher for your application. Also, like a regular web page, index.html is the initial view that is loaded.
  10. So the appinfo.json file is one of the most important files in your application. It contains the information to load and launch your application. The id specifies the package name for your account. Everything else is pretty much self explanatory. There&amp;#x2019;s a bunch of other options you can include here as well ...
  11. Here are some of the other options you can add in to your appInfo.json
  12. So, this is the index.html page that is automatically generated for you. The mojo framework is automatically included for you in the script tag above. You must include this in every application. Also you can notice below, there&amp;#x2019;s sample text that is automatically generated for you to verify that your application actually runs. If you end up creating other stages or other scenes you have to include the assistants for those. We&amp;#x2019;ll go into this in just a second.
  13. Most applications will have multiple scenes. An example of an application with only one scene, though, would be a Calculator. Scenes are managed like a stack with new scenes &amp;#x2018;pushed&amp;#x2019; onto and off of the stack with the last scene on the stack visible in the view.
  14. palm-generate -t (task) new_scene with properties of name = to first. So you can see on the right the old directory structure from when we initially generated the application earlier.
  15. So, after you run this command you can see that the first assistant was added and a new folder called &amp;#x2018;first&amp;#x2019; and an html page called first-scene.html has been created.
  16. So, if we go into index.htm, we&amp;#x2019;re going to want to add in stage-assistant and first-assistant. The stage assistant sets up any application-wide objects and pushes the first scene onto the stack. The scene assistant allows you to control that scene&amp;#x2019;s behavior.
  17. This is the code generated for you within stage-assistant sans the comments. Here we&amp;#x2019;re going to want to add a new call to the setup method, which gets run when the application gets started.
  18. Here, we&amp;#x2019;re telling the stage assistant to go ahead and load the first scene when we launch the application.
  19. Since it won&amp;#x2019;t be any fun to link to a bank page, we&amp;#x2019;re going to add some html to our first scene. As you can see here, it&amp;#x2019;s just straight HTML. The CSS classes you see above are built in styling that comes with the MojoSDK, which you can also override if you want to. Palm actually has a set of Human Interface Guidelines just like Apple does with the iPhone -- so make sure that if you do end up overriding these styles, you are within their guidelines.
  20. So, after
  21. Now that we&amp;#x2019;ve created the second scene, we have to do what we did to the first scene and add in the second-assistant to our index page.
  22. So, within our first scene I&amp;#x2019;m adding a button with the standard palm-button styling and with an id of myButton so that I can reference it within an assistant.
  23. So, this here is what is generated for you for a specific assistant. In this case this is our first assistant file that was generated for us earlier when we created that scene. I made sure to take out the comments within the javascript file since it took up way too much space to fit within this slide.
  24. So, within the setup function, which gets called when this scene is loaded, we&amp;#x2019;re going to want to setup an event listener for &amp;#x2018;myButton&amp;#x2019;, which we specifically specified in the html page. So when we &amp;#x2018;click&amp;#x2019; we&amp;#x2019;re going to want to go to launch the nextScene function. So if you look on the bottom you can see in the nextScene function, we make the Mojo controller push the second scene onto the stack.
  25. and like the first, let&amp;#x2019;s add some goods to our second scene so we have something to look at.
  26. Depot, which is just a simplified interface to the HTML5 database API Cookies are your standard HTTP cookies
  27. Widgets support the webOS interface and Mojo defines the styles for each of the widgets. The styling for them is already available by declaring and using the widgets -- although styling can be overridden with custom CSS. The List widget is the most important in the framework since webOS was built around a fast and power list widget experience.
  28. The List widget is the most important in the framework since webOS was built around a fast and power list widget experience. You can use lists to bind dynamic data sources with instant filtering and you can also embed other widgets &amp; objects within your lists
  29. Menu widgets can be used with specified areas of the screen. - The App Menu is a regular desktop style menu on the top left of the screen. - The View Menu applies to menus across the top of the screen and can be used as your display header - The Command Menu is used to set a menu at the bottom of the screen Unlike other widgets, the menu widgets aren&amp;#x2019;t declared in your scene view. They are instantiated completely within the scene assistant within the setupWidget call.