Cross-Platform, Native Mobile Development with a DSL

2,117 views
2,001 views

Published 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 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.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,117
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
73
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Cross-Platform, Native Mobile Development with a DSL

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

×