SlideShare a Scribd company logo
1 of 32
Download to read offline
Heiko Behrens, Peter Friese


            Cross-Platform, Native Mobile
            Development with a DSL

Dienstag, 13. September 2011
Cross-Platform, Native Mobile Development
                                      with a DSL


                                      @HBehrens
                                      @PeterFriese




Dienstag, 13. September 2011
@moskovich: “Your mobile phone has more
  computing power than all of NASA in 1969.
      NASA put a man on the moon...
Dienstag, 13. September 2011
...we put a bird into pigs.”
Dienstag, 13. September 2011
countless devices




Dienstag, 13. September 2011
diversity of platforms




Dienstag, 13. September 2011
Java
        public class SpeakersList extends GenericListActivity<Speaker> {

        	      List<Speaker> speakers;

        	      @Override
        	      public void onCreate(Bundle savedInstanceState) {
        	      	   super.onCreate(savedInstanceState);

        	      	     setTitle("Speakers");

        	      	     speakers = getItemsFromProvider();

        	      	     ArrayList<AbstractRowAdapter> rowAdapters = new ArrayList<AbstractRowAdapter>();

        	      	     Iterable<Speaker> items1 = speakers;
        	      	     for (Speaker i : items1)
        	      	     	   rowAdapters.add(new Cell1(i));

        	      	     setListAdapter(new GenericItemAdapter(this, rowAdapters));
        	      	     finishCreation();

        	      }




Dienstag, 13. September 2011
C#
 public partial class SpeakerDetailsDetailsView : PhoneApplicationPage
 {
     public SpeakerDetailsDetailsView()
     {
         InitializeComponent();
     }

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            string selectedIndex = "";
            if (NavigationContext.QueryString.TryGetValue("itemByIndex", out selectedIndex))
            {
                int index = int.Parse(selectedIndex);
                DataContext = App.RootViewModelProvider.BlogpostsModelProvider().BlogItems[index];
            }
        }
 }




Dienstag, 13. September 2011
Objective-C
  @implementation SpeakersListViewController

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  	   if(section == 0) {
  	   	   return [[[contentProvider valueForKeyPath:@"content"] asArray] count];
  	   } else
  	   	   return 0;
  }

  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  	   id item = [self.items objectAtIndex: indexPath.row];
  	   IPContentProvider *provider = [(itemisAppProviders*)contentProvider.providers
          providerForSpeakerByName: [item valueForKeyPath:@"name"]];
  	   SpeakerDetailsViewController *controller = [[SpeakerDetailsViewController alloc] init];
  	   controller.contentProvider = provider;
  	   [self.navigationController pushViewController: controller animated: TRUE];
  	   [controller release];
  }




Dienstag, 13. September 2011
HTML
                   {% extends "generated/application.html" %}
                   {% block title%}Speakers{% endblock %}
                   {% block content_class %}table list{% endblock %}

                   {% block content %}
                   <ul>
                   {% for s in data|to_list %}
                     <li>
                        {% url views.SpeakerDetailsBySpeakerByName s.name|urlencode as url %}
                        <a href="{{ url }}">
                          <div class="cell_text">{{s.name|safe}}</div>
                        </a>
                     </li>
                   {% endfor %}
                   </ul>
                   {% endblock %}




Dienstag, 13. September 2011
server-side web


                                                          Web Server
                                                       executes application
                                                              logic


                               Web Browser




                                                      Files             Database




                                 Device                       Backend



Dienstag, 13. September 2011
server-side web

                               5 Things your Company can do to speed up
           Tuesday             its mobile Website
            11.45              Thomas Schlagenhaufer
                               Gutenbergsaal III

                               Geräte, Plattformen,Versionen -
           Tuesday             neue Herausforderungen im mobilen Markt
            15.00              Jan Webering, Roland Gülle
                               Gutenbergsaal III




Dienstag, 13. September 2011
client-side web

                                    Web Browser



                                     JavaScript
                               executes application logic




                                 Files         Database




                                         Device                Backend



Dienstag, 13. September 2011
client-side web

                               JavaScript Data Binding mit jQuery Mobile
      Wednesday
                               Tobias Bosch, Stefan Scheidt
              10.00            Watfordsaal

                               Lessons Learned: Mobile Business-
      Wednesday                Webanwendungen mit jQuery Mobile
              17.15            Timo Elbert
                               Watfordsaal




Dienstag, 13. September 2011
hybrid app

                               Native App

                                        Interpreter



                                   Request
                                  Interceptor


                                        JavaScript Bridge

                                         Browser
                                    executes JavaScript




                                            Device                Backend



Dienstag, 13. September 2011
hybrid app


                               Cross-Plattform Mobile Development mit
      Wednesday                Sencha Touch und PhoneGap
              16.00            Stefan Kolb
                               Watfordsaal




Dienstag, 13. September 2011
interpreted app

                               Native App

                                        interpreter




                                                 Database
                                 Application
                                   Script
                                                      Files




                                            Device               Backend



Dienstag, 13. September 2011
hybrid app




Dienstag, 13. September 2011
generated app

                    Generator




                Generator Input            Native App

                                                   Logic     Logic
                   Model
             describes logic and
                                                 Database   Database
              complete system

                                                    Files    Files
               Files           Database

                                                  Device    Backend




Dienstag, 13. September 2011
App Anatomy 101




Dienstag, 13. September 2011
Views
                                   Session
    Cells                      title
                               room
    Navigation
    Entities                                 ContentProviders




Dienstag, 13. September 2011
DSL for mobile
  tabbarApplication itemisApp {

  	     button {
  	     	 title="News"
  	     	 icon="calendar.png"
  	     	 view=EventList( CurrentTimeline() )
  	     }

  	     button {
  	     	 title= "itemis"
  	     	 icon= "itemis.png"
  	     	 view= OfficeList( CompanyDescription() )
  	     }

  	     button {
  	     	 title= "Carreer"
  	     	 icon= "trophy.png"
  	     	 view= CareerView( CareerData() )
  	     }

  }


Dienstag, 13. September 2011
Demo :)




Dienstag, 13. September 2011
«Xpand»




Dienstag, 13. September 2011
developer’s point of view

                                                             Simulator


                                               Objective-C


                                                              Device



                               DSL
                       describes application




                                                             Simulator


                                                  Java


                                                               Device




Dienstag, 13. September 2011
toolsmith’s point of view

                                                         «Xpand»
                                               Parser
                                                            Templates   Templates
                                                              iPhone     Android
                                 Grammar
                                               Editor
                               describes DSL

                                                        EMF MM




Dienstag, 13. September 2011
applause
                  http://applause.github.com

                                                                                                            Simulator



                                           «Xpand»
                                                                                              Objective-C


                                                                                                             Device
                                 Parser
                                              Templates   Templates
                                                iPhone     Android
                   Grammar
                                 Editor                                       DSL
                 describes DSL                                        describes application

                                          EMF MM


                                                                                                            Simulator


                                                                                                 Java


                                                                                                              Device




Dienstag, 13. September 2011
reduced complexity
                                               user interaction
    action = {
      log(“before”);
      UpdateWorkflow(item.Box.JobId, userInput("Cancel"));
      refresh();
      log(“after”);
    }
                               server round trip




Dienstag, 13. September 2011
action = {
      log(“before”);
      UpdateWorkflow(item.Box.JobId, userInput("Cancel"));
      refresh();
      log(“after”);
    }


    [functions log: @"before"];
    [provider userInputOn:@"Cancel" promises:^(id promise){
      IPContentProvider *provider =
          [providers providerForUpdateWorkflow:content.Box.JobId
                                andUserComment:promise];
      [functions provider: provider promises:^(id promise){
        [functions refreshPromises:^(id promise){
          [functions log: @"after"];
        }];
      }];
    }];



Dienstag, 13. September 2011
paradigm agnostic


Dienstag, 13. September 2011
More Demo :))




Dienstag, 13. September 2011
twitter             @HBehrens                 twitter   @PeterFriese
  blog                http://HeikoBehrens.net   blog      http://PeterFriese.de

  CEO/Founder getBeamApp.com




Dienstag, 13. September 2011

More Related Content

Similar to Cross-Platform, Native Mobile Development with a DSL

Apache Stanbol 
and the Web of Data - ApacheCon 2011
Apache Stanbol 
and the Web of Data - ApacheCon 2011Apache Stanbol 
and the Web of Data - ApacheCon 2011
Apache Stanbol 
and the Web of Data - ApacheCon 2011Nuxeo
 
Apachecon 2011 stanbol_ogrisel
Apachecon 2011 stanbol_ogriselApachecon 2011 stanbol_ogrisel
Apachecon 2011 stanbol_ogriselNuxeo
 
PHP in a Mobile Ecosystem (Zendcon 2010)
PHP in a Mobile Ecosystem (Zendcon 2010)PHP in a Mobile Ecosystem (Zendcon 2010)
PHP in a Mobile Ecosystem (Zendcon 2010)Ivo Jansch
 
Community Code: Pega Mobile
Community Code: Pega MobileCommunity Code: Pega Mobile
Community Code: Pega MobileSencha
 
Windows Phone 7.5 Mango - What's New
Windows Phone 7.5 Mango - What's NewWindows Phone 7.5 Mango - What's New
Windows Phone 7.5 Mango - What's NewSascha Corti
 
The Contextual Experience of the Mobile Web
The Contextual Experience of the Mobile WebThe Contextual Experience of the Mobile Web
The Contextual Experience of the Mobile WebJeff Carouth
 
Mobile Web on Drupal!
Mobile Web on Drupal!Mobile Web on Drupal!
Mobile Web on Drupal!Lyza Gardner
 
Scalable Apps with Google App Engine
Scalable Apps with Google App EngineScalable Apps with Google App Engine
Scalable Apps with Google App EngineDavid Chandler
 
Introduction to android
Introduction to androidIntroduction to android
Introduction to androidjavalabsf
 
BlackBerry WebWorks APIs
BlackBerry WebWorks APIsBlackBerry WebWorks APIs
BlackBerry WebWorks APIsSencha
 
Hacking Webkit & Its JavaScript Engines
Hacking Webkit & Its JavaScript EnginesHacking Webkit & Its JavaScript Engines
Hacking Webkit & Its JavaScript EnginesSencha
 
Application Architectures in Grails
Application Architectures in GrailsApplication Architectures in Grails
Application Architectures in GrailsPeter Ledbrook
 
Brian Hogg - Web Apps using HTML5 and JS
Brian Hogg - Web Apps using HTML5 and JSBrian Hogg - Web Apps using HTML5 and JS
Brian Hogg - Web Apps using HTML5 and JS#DevTO
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWTArnaud Tournier
 
Vital.AI Creating Intelligent Apps
Vital.AI Creating Intelligent AppsVital.AI Creating Intelligent Apps
Vital.AI Creating Intelligent AppsVital.AI
 
Beginning Android Development
Beginning Android DevelopmentBeginning Android Development
Beginning Android DevelopmentJosé Ferreiro
 

Similar to Cross-Platform, Native Mobile Development with a DSL (20)

Apache Stanbol 
and the Web of Data - ApacheCon 2011
Apache Stanbol 
and the Web of Data - ApacheCon 2011Apache Stanbol 
and the Web of Data - ApacheCon 2011
Apache Stanbol 
and the Web of Data - ApacheCon 2011
 
Apachecon 2011 stanbol_ogrisel
Apachecon 2011 stanbol_ogriselApachecon 2011 stanbol_ogrisel
Apachecon 2011 stanbol_ogrisel
 
PHP in a Mobile Ecosystem (Zendcon 2010)
PHP in a Mobile Ecosystem (Zendcon 2010)PHP in a Mobile Ecosystem (Zendcon 2010)
PHP in a Mobile Ecosystem (Zendcon 2010)
 
Community Code: Pega Mobile
Community Code: Pega MobileCommunity Code: Pega Mobile
Community Code: Pega Mobile
 
Windows Phone 7.5 Mango - What's New
Windows Phone 7.5 Mango - What's NewWindows Phone 7.5 Mango - What's New
Windows Phone 7.5 Mango - What's New
 
The Contextual Experience of the Mobile Web
The Contextual Experience of the Mobile WebThe Contextual Experience of the Mobile Web
The Contextual Experience of the Mobile Web
 
iphone presentation
iphone presentationiphone presentation
iphone presentation
 
Mobile Web on Drupal!
Mobile Web on Drupal!Mobile Web on Drupal!
Mobile Web on Drupal!
 
Scalable Apps with Google App Engine
Scalable Apps with Google App EngineScalable Apps with Google App Engine
Scalable Apps with Google App Engine
 
Introduction to android
Introduction to androidIntroduction to android
Introduction to android
 
HTML5 WebWorks
HTML5 WebWorksHTML5 WebWorks
HTML5 WebWorks
 
BlackBerry WebWorks APIs
BlackBerry WebWorks APIsBlackBerry WebWorks APIs
BlackBerry WebWorks APIs
 
Hacking Webkit & Its JavaScript Engines
Hacking Webkit & Its JavaScript EnginesHacking Webkit & Its JavaScript Engines
Hacking Webkit & Its JavaScript Engines
 
Asml esitys geniem
Asml esitys geniemAsml esitys geniem
Asml esitys geniem
 
Application Architectures in Grails
Application Architectures in GrailsApplication Architectures in Grails
Application Architectures in Grails
 
Brian Hogg - Web Apps using HTML5 and JS
Brian Hogg - Web Apps using HTML5 and JSBrian Hogg - Web Apps using HTML5 and JS
Brian Hogg - Web Apps using HTML5 and JS
 
Easing offline web application development with GWT
Easing offline web application development with GWTEasing offline web application development with GWT
Easing offline web application development with GWT
 
07 PhoneGap
07 PhoneGap07 PhoneGap
07 PhoneGap
 
Vital.AI Creating Intelligent Apps
Vital.AI Creating Intelligent AppsVital.AI Creating Intelligent Apps
Vital.AI Creating Intelligent Apps
 
Beginning Android Development
Beginning Android DevelopmentBeginning Android Development
Beginning Android Development
 

More from Peter Friese

Building Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsBuilding Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsPeter Friese
 
Firebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopFirebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopPeter Friese
 
Building Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsBuilding Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsPeter Friese
 
Firebase for Apple Developers - SwiftHeroes
Firebase for Apple Developers - SwiftHeroesFirebase for Apple Developers - SwiftHeroes
Firebase for Apple Developers - SwiftHeroesPeter Friese
 
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 +  = ❤️ (Firebase for Apple Developers) at Swift LeedsPeter Friese
 
async/await in Swift
async/await in Swiftasync/await in Swift
async/await in SwiftPeter Friese
 
Firebase for Apple Developers
Firebase for Apple DevelopersFirebase for Apple Developers
Firebase for Apple DevelopersPeter Friese
 
Building Apps with SwiftUI and Firebase
Building Apps with SwiftUI and FirebaseBuilding Apps with SwiftUI and Firebase
Building Apps with SwiftUI and FirebasePeter Friese
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebasePeter Friese
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebasePeter Friese
 
6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase AuthPeter Friese
 
Five Things You Didn't Know About Firebase Auth
Five Things You Didn't Know About Firebase AuthFive Things You Didn't Know About Firebase Auth
Five Things You Didn't Know About Firebase AuthPeter Friese
 
Building High-Quality Apps for Google Assistant
Building High-Quality Apps for Google AssistantBuilding High-Quality Apps for Google Assistant
Building High-Quality Apps for Google AssistantPeter Friese
 
Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google Peter Friese
 
Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on GoogleBuilding Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on GooglePeter Friese
 
What's new in Android Wear 2.0
What's new in Android Wear 2.0What's new in Android Wear 2.0
What's new in Android Wear 2.0Peter Friese
 
Google Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinGoogle Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinPeter Friese
 
Introduction to Android Wear
Introduction to Android WearIntroduction to Android Wear
Introduction to Android WearPeter Friese
 
Google Play Services Rock
Google Play Services RockGoogle Play Services Rock
Google Play Services RockPeter Friese
 
Introduction to Android Wear
Introduction to Android WearIntroduction to Android Wear
Introduction to Android WearPeter Friese
 

More from Peter Friese (20)

Building Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsBuilding Reusable SwiftUI Components
Building Reusable SwiftUI Components
 
Firebase & SwiftUI Workshop
Firebase & SwiftUI WorkshopFirebase & SwiftUI Workshop
Firebase & SwiftUI Workshop
 
Building Reusable SwiftUI Components
Building Reusable SwiftUI ComponentsBuilding Reusable SwiftUI Components
Building Reusable SwiftUI Components
 
Firebase for Apple Developers - SwiftHeroes
Firebase for Apple Developers - SwiftHeroesFirebase for Apple Developers - SwiftHeroes
Firebase for Apple Developers - SwiftHeroes
 
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 +  = ❤️ (Firebase for Apple Developers) at Swift Leeds
 
async/await in Swift
async/await in Swiftasync/await in Swift
async/await in Swift
 
Firebase for Apple Developers
Firebase for Apple DevelopersFirebase for Apple Developers
Firebase for Apple Developers
 
Building Apps with SwiftUI and Firebase
Building Apps with SwiftUI and FirebaseBuilding Apps with SwiftUI and Firebase
Building Apps with SwiftUI and Firebase
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and Firebase
 
Rapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and FirebaseRapid Application Development with SwiftUI and Firebase
Rapid Application Development with SwiftUI and Firebase
 
6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth6 Things You Didn't Know About Firebase Auth
6 Things You Didn't Know About Firebase Auth
 
Five Things You Didn't Know About Firebase Auth
Five Things You Didn't Know About Firebase AuthFive Things You Didn't Know About Firebase Auth
Five Things You Didn't Know About Firebase Auth
 
Building High-Quality Apps for Google Assistant
Building High-Quality Apps for Google AssistantBuilding High-Quality Apps for Google Assistant
Building High-Quality Apps for Google Assistant
 
Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google
 
Building Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on GoogleBuilding Conversational Experiences with Actions on Google
Building Conversational Experiences with Actions on Google
 
What's new in Android Wear 2.0
What's new in Android Wear 2.0What's new in Android Wear 2.0
What's new in Android Wear 2.0
 
Google Fit, Android Wear & Xamarin
Google Fit, Android Wear & XamarinGoogle Fit, Android Wear & Xamarin
Google Fit, Android Wear & Xamarin
 
Introduction to Android Wear
Introduction to Android WearIntroduction to Android Wear
Introduction to Android Wear
 
Google Play Services Rock
Google Play Services RockGoogle Play Services Rock
Google Play Services Rock
 
Introduction to Android Wear
Introduction to Android WearIntroduction to Android Wear
Introduction to Android Wear
 

Recently uploaded

KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Websitedgelyza
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?IES VE
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 

Recently uploaded (20)

20230104 - machine vision
20230104 - machine vision20230104 - machine vision
20230104 - machine vision
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
COMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a WebsiteCOMPUTER 10 Lesson 8 - Building a Website
COMPUTER 10 Lesson 8 - Building a Website
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 

Cross-Platform, Native Mobile Development with a DSL

  • 1. Heiko Behrens, Peter Friese Cross-Platform, Native Mobile Development with a DSL Dienstag, 13. September 2011
  • 2. Cross-Platform, Native Mobile Development with a DSL @HBehrens @PeterFriese Dienstag, 13. September 2011
  • 3. @moskovich: “Your mobile phone has more computing power than all of NASA in 1969. NASA put a man on the moon... Dienstag, 13. September 2011
  • 4. ...we put a bird into pigs.” Dienstag, 13. September 2011
  • 6. diversity of platforms Dienstag, 13. September 2011
  • 7. Java public class SpeakersList extends GenericListActivity<Speaker> { List<Speaker> speakers; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle("Speakers"); speakers = getItemsFromProvider(); ArrayList<AbstractRowAdapter> rowAdapters = new ArrayList<AbstractRowAdapter>(); Iterable<Speaker> items1 = speakers; for (Speaker i : items1) rowAdapters.add(new Cell1(i)); setListAdapter(new GenericItemAdapter(this, rowAdapters)); finishCreation(); } Dienstag, 13. September 2011
  • 8. C# public partial class SpeakerDetailsDetailsView : PhoneApplicationPage { public SpeakerDetailsDetailsView() { InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { string selectedIndex = ""; if (NavigationContext.QueryString.TryGetValue("itemByIndex", out selectedIndex)) { int index = int.Parse(selectedIndex); DataContext = App.RootViewModelProvider.BlogpostsModelProvider().BlogItems[index]; } } } Dienstag, 13. September 2011
  • 9. Objective-C @implementation SpeakersListViewController - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(section == 0) { return [[[contentProvider valueForKeyPath:@"content"] asArray] count]; } else return 0; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { id item = [self.items objectAtIndex: indexPath.row]; IPContentProvider *provider = [(itemisAppProviders*)contentProvider.providers providerForSpeakerByName: [item valueForKeyPath:@"name"]]; SpeakerDetailsViewController *controller = [[SpeakerDetailsViewController alloc] init]; controller.contentProvider = provider; [self.navigationController pushViewController: controller animated: TRUE]; [controller release]; } Dienstag, 13. September 2011
  • 10. HTML {% extends "generated/application.html" %} {% block title%}Speakers{% endblock %} {% block content_class %}table list{% endblock %} {% block content %} <ul> {% for s in data|to_list %} <li> {% url views.SpeakerDetailsBySpeakerByName s.name|urlencode as url %} <a href="{{ url }}"> <div class="cell_text">{{s.name|safe}}</div> </a> </li> {% endfor %} </ul> {% endblock %} Dienstag, 13. September 2011
  • 11. server-side web Web Server executes application logic Web Browser Files Database Device Backend Dienstag, 13. September 2011
  • 12. server-side web 5 Things your Company can do to speed up Tuesday its mobile Website 11.45 Thomas Schlagenhaufer Gutenbergsaal III Geräte, Plattformen,Versionen - Tuesday neue Herausforderungen im mobilen Markt 15.00 Jan Webering, Roland Gülle Gutenbergsaal III Dienstag, 13. September 2011
  • 13. client-side web Web Browser JavaScript executes application logic Files Database Device Backend Dienstag, 13. September 2011
  • 14. client-side web JavaScript Data Binding mit jQuery Mobile Wednesday Tobias Bosch, Stefan Scheidt 10.00 Watfordsaal Lessons Learned: Mobile Business- Wednesday Webanwendungen mit jQuery Mobile 17.15 Timo Elbert Watfordsaal Dienstag, 13. September 2011
  • 15. hybrid app Native App Interpreter Request Interceptor JavaScript Bridge Browser executes JavaScript Device Backend Dienstag, 13. September 2011
  • 16. hybrid app Cross-Plattform Mobile Development mit Wednesday Sencha Touch und PhoneGap 16.00 Stefan Kolb Watfordsaal Dienstag, 13. September 2011
  • 17. interpreted app Native App interpreter Database Application Script Files Device Backend Dienstag, 13. September 2011
  • 18. hybrid app Dienstag, 13. September 2011
  • 19. generated app Generator Generator Input Native App Logic Logic Model describes logic and Database Database complete system Files Files Files Database Device Backend Dienstag, 13. September 2011
  • 20. App Anatomy 101 Dienstag, 13. September 2011
  • 21. Views Session Cells title room Navigation Entities ContentProviders Dienstag, 13. September 2011
  • 22. DSL for mobile tabbarApplication itemisApp { button { title="News" icon="calendar.png" view=EventList( CurrentTimeline() ) } button { title= "itemis" icon= "itemis.png" view= OfficeList( CompanyDescription() ) } button { title= "Carreer" icon= "trophy.png" view= CareerView( CareerData() ) } } Dienstag, 13. September 2011
  • 23. Demo :) Dienstag, 13. September 2011
  • 25. developer’s point of view Simulator Objective-C Device DSL describes application Simulator Java Device Dienstag, 13. September 2011
  • 26. toolsmith’s point of view «Xpand» Parser Templates Templates iPhone Android Grammar Editor describes DSL EMF MM Dienstag, 13. September 2011
  • 27. applause http://applause.github.com Simulator «Xpand» Objective-C Device Parser Templates Templates iPhone Android Grammar Editor DSL describes DSL describes application EMF MM Simulator Java Device Dienstag, 13. September 2011
  • 28. reduced complexity user interaction action = { log(“before”); UpdateWorkflow(item.Box.JobId, userInput("Cancel")); refresh(); log(“after”); } server round trip Dienstag, 13. September 2011
  • 29. action = { log(“before”); UpdateWorkflow(item.Box.JobId, userInput("Cancel")); refresh(); log(“after”); } [functions log: @"before"]; [provider userInputOn:@"Cancel" promises:^(id promise){ IPContentProvider *provider = [providers providerForUpdateWorkflow:content.Box.JobId andUserComment:promise]; [functions provider: provider promises:^(id promise){ [functions refreshPromises:^(id promise){ [functions log: @"after"]; }]; }]; }]; Dienstag, 13. September 2011
  • 31. More Demo :)) Dienstag, 13. September 2011
  • 32. twitter @HBehrens twitter @PeterFriese blog http://HeikoBehrens.net blog http://PeterFriese.de CEO/Founder getBeamApp.com Dienstag, 13. September 2011