Cross-Platform, Native Mobile Development with a DSL

  • 1,636 views
Uploaded on

You can build native apps for iOS, Android, Windows Phone 7, and web apps from a single source with tools of the Eclipse ecosystem. We will present a domain-specific language we used to create …

You can build native apps for iOS, Android, Windows Phone 7, and web apps from a single source with tools of the Eclipse ecosystem. We will present a domain-specific language we used to create data-oriented apps and avoid manually porting applications to other platforms. Still, you get fully readable, extensible source code of the respective target such as Objective-C, Java, C# or Python.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,636
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
68
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Heiko Behrens, Peter Friese Cross-Platform, Native Mobile Development with a DSLDienstag, 13. September 2011
  • 2. Cross-Platform, Native Mobile Development with a DSL @HBehrens @PeterFrieseDienstag, 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
  • 5. countless devicesDienstag, 13. September 2011
  • 6. diversity of platformsDienstag, 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 BackendDienstag, 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 IIIDienstag, 13. September 2011
  • 13. client-side web Web Browser JavaScript executes application logic Files Database Device BackendDienstag, 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 WatfordsaalDienstag, 13. September 2011
  • 15. hybrid app Native App Interpreter Request Interceptor JavaScript Bridge Browser executes JavaScript Device BackendDienstag, 13. September 2011
  • 16. hybrid app Cross-Plattform Mobile Development mit Wednesday Sencha Touch und PhoneGap 16.00 Stefan Kolb WatfordsaalDienstag, 13. September 2011
  • 17. interpreted app Native App interpreter Database Application Script Files Device BackendDienstag, 13. September 2011
  • 18. hybrid appDienstag, 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 BackendDienstag, 13. September 2011
  • 20. App Anatomy 101Dienstag, 13. September 2011
  • 21. Views Session Cells title room Navigation Entities ContentProvidersDienstag, 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
  • 24. «Xpand»Dienstag, 13. September 2011
  • 25. developer’s point of view Simulator Objective-C Device DSL describes application Simulator Java DeviceDienstag, 13. September 2011
  • 26. toolsmith’s point of view «Xpand» Parser Templates Templates iPhone Android Grammar Editor describes DSL EMF MMDienstag, 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 DeviceDienstag, 13. September 2011
  • 28. reduced complexity user interaction action = { log(“before”); UpdateWorkflow(item.Box.JobId, userInput("Cancel")); refresh(); log(“after”); } server round tripDienstag, 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
  • 30. paradigm agnosticDienstag, 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.comDienstag, 13. September 2011