SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
Cross-Platform Mobile Development
                                           with Eclipse




EclipseCon 2011 March 21st - 24th Santa Clara, California
@hbehrens and @peterfriese working with @itemismobile
@moskovich: “Your mobile phone has more
computing power than all of NASA in 1969.
    NASA put a man on the moon...
...we put a bird into pigs.”
countless devices
diversity of platforms
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();

	   }
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];
        }
    }
}
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];
}
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 %}
object-orientation
–principle
stateless
App Anatomy 101
Views
Views   Cells
Views Cells   Navigation
Entities
Views
                 Session
Cells        title
             room
Navigation
Views
                 Session
Cells        title
             room
Navigation
Entities                   ContentProviders
DSL for mobile
tabbarApplication itemisApp {

	   button {
	   	   title= "Tuesday"
	   	   icon= "calendar.png"
	   	   view= SessionList( SessionsByDay("2011-03-22") )
	   }

	   button {
	   	   title= "Wednesday"
	   	   icon= "calendar.png"
	   	   view= SessionList( SessionsByDay("2011-03-23") )
	   }
	
	   button {
	   	   title= "Thursday"
	   	   icon= "calendar.png"
	   	   view= SessionList( SessionsByDay("2011-03-24") )
	   }
	
	   button {
	   	   title= "Speakers"
	   	   icon= "person.png"
	   	   view= SpeakersList( AllSpeakers() )
	   }
}
«Xpand»
Demo :)
@hbehrens and @peterfriese working with @itemismobile

Más contenido relacionado

La actualidad más candente

Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applicationsSkills Matter
 
Python postgre sql a wonderful wedding
Python postgre sql   a wonderful weddingPython postgre sql   a wonderful wedding
Python postgre sql a wonderful weddingStéphane Wirtel
 
Implementing a many-to-many Relationship with Slick
Implementing a many-to-many Relationship with SlickImplementing a many-to-many Relationship with Slick
Implementing a many-to-many Relationship with SlickHermann Hueck
 
Mozilla とブラウザゲーム
Mozilla とブラウザゲームMozilla とブラウザゲーム
Mozilla とブラウザゲームNoritada Shimizu
 
Psycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python ScriptPsycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python ScriptSurvey Department
 
Using web2py's DAL in other projects or frameworks
Using web2py's DAL in other projects or frameworksUsing web2py's DAL in other projects or frameworks
Using web2py's DAL in other projects or frameworksBruno Rocha
 
Data visualization by Kenneth Odoh
Data visualization by Kenneth OdohData visualization by Kenneth Odoh
Data visualization by Kenneth Odohpyconfi
 
Chaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreChaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreNicolas Carlo
 
Using Scala Slick at FortyTwo
Using Scala Slick at FortyTwoUsing Scala Slick at FortyTwo
Using Scala Slick at FortyTwoEishay Smith
 
Programming with Python and PostgreSQL
Programming with Python and PostgreSQLProgramming with Python and PostgreSQL
Programming with Python and PostgreSQLPeter Eisentraut
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. StreamsDEVTYPE
 
The Ring programming language version 1.3 book - Part 83 of 88
The Ring programming language version 1.3 book - Part 83 of 88The Ring programming language version 1.3 book - Part 83 of 88
The Ring programming language version 1.3 book - Part 83 of 88Mahmoud Samir Fayed
 
Data Types and Processing in ES6
Data Types and Processing in ES6Data Types and Processing in ES6
Data Types and Processing in ES6m0bz
 
mobl - model-driven engineering lecture
mobl - model-driven engineering lecturemobl - model-driven engineering lecture
mobl - model-driven engineering lecturezefhemel
 
RIA - Entwicklung mit Ext JS
RIA - Entwicklung mit Ext JSRIA - Entwicklung mit Ext JS
RIA - Entwicklung mit Ext JSDominik Jungowski
 
The Ring programming language version 1.5.2 book - Part 45 of 181
The Ring programming language version 1.5.2 book - Part 45 of 181The Ring programming language version 1.5.2 book - Part 45 of 181
The Ring programming language version 1.5.2 book - Part 45 of 181Mahmoud Samir Fayed
 
mobl presentation @ IHomer
mobl presentation @ IHomermobl presentation @ IHomer
mobl presentation @ IHomerzefhemel
 

La actualidad más candente (20)

Patterns for slick database applications
Patterns for slick database applicationsPatterns for slick database applications
Patterns for slick database applications
 
Python postgre sql a wonderful wedding
Python postgre sql   a wonderful weddingPython postgre sql   a wonderful wedding
Python postgre sql a wonderful wedding
 
Implementing a many-to-many Relationship with Slick
Implementing a many-to-many Relationship with SlickImplementing a many-to-many Relationship with Slick
Implementing a many-to-many Relationship with Slick
 
Mozilla とブラウザゲーム
Mozilla とブラウザゲームMozilla とブラウザゲーム
Mozilla とブラウザゲーム
 
Psycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python ScriptPsycopg2 - Connect to PostgreSQL using Python Script
Psycopg2 - Connect to PostgreSQL using Python Script
 
Using web2py's DAL in other projects or frameworks
Using web2py's DAL in other projects or frameworksUsing web2py's DAL in other projects or frameworks
Using web2py's DAL in other projects or frameworks
 
Data visualization by Kenneth Odoh
Data visualization by Kenneth OdohData visualization by Kenneth Odoh
Data visualization by Kenneth Odoh
 
Chaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscoreChaining and function composition with lodash / underscore
Chaining and function composition with lodash / underscore
 
Using Scala Slick at FortyTwo
Using Scala Slick at FortyTwoUsing Scala Slick at FortyTwo
Using Scala Slick at FortyTwo
 
Programming with Python and PostgreSQL
Programming with Python and PostgreSQLProgramming with Python and PostgreSQL
Programming with Python and PostgreSQL
 
6. Generics. Collections. Streams
6. Generics. Collections. Streams6. Generics. Collections. Streams
6. Generics. Collections. Streams
 
Lodash js
Lodash jsLodash js
Lodash js
 
mobl
moblmobl
mobl
 
The Ring programming language version 1.3 book - Part 83 of 88
The Ring programming language version 1.3 book - Part 83 of 88The Ring programming language version 1.3 book - Part 83 of 88
The Ring programming language version 1.3 book - Part 83 of 88
 
Data Types and Processing in ES6
Data Types and Processing in ES6Data Types and Processing in ES6
Data Types and Processing in ES6
 
mobl - model-driven engineering lecture
mobl - model-driven engineering lecturemobl - model-driven engineering lecture
mobl - model-driven engineering lecture
 
RIA - Entwicklung mit Ext JS
RIA - Entwicklung mit Ext JSRIA - Entwicklung mit Ext JS
RIA - Entwicklung mit Ext JS
 
The Ring programming language version 1.5.2 book - Part 45 of 181
The Ring programming language version 1.5.2 book - Part 45 of 181The Ring programming language version 1.5.2 book - Part 45 of 181
The Ring programming language version 1.5.2 book - Part 45 of 181
 
Eddystone beacons demo
Eddystone beacons demoEddystone beacons demo
Eddystone beacons demo
 
mobl presentation @ IHomer
mobl presentation @ IHomermobl presentation @ IHomer
mobl presentation @ IHomer
 

Destacado

Software process and measurement cast a retrospective part 1
Software process and measurement cast   a retrospective part 1Software process and measurement cast   a retrospective part 1
Software process and measurement cast a retrospective part 1Thomas Cagley
 
Performance Assessment with Impact: Studying Film Like a Pro
Performance Assessment with Impact: Studying Film Like a ProPerformance Assessment with Impact: Studying Film Like a Pro
Performance Assessment with Impact: Studying Film Like a ProKatie Rose
 
Podcasting to a Niche Market
Podcasting to a Niche MarketPodcasting to a Niche Market
Podcasting to a Niche MarketThomas Cagley
 
Universal Declarative Services
Universal Declarative ServicesUniversal Declarative Services
Universal Declarative Servicesschemouil
 
Xtext - und was man damit anstellen kann
Xtext - und was man damit anstellen kannXtext - und was man damit anstellen kann
Xtext - und was man damit anstellen kannHeiko Behrens
 
ICSE 2012: Test Confessions - A study of testing practices for plug-in systems
ICSE 2012:  Test Confessions - A study of testing practices for plug-in systemsICSE 2012:  Test Confessions - A study of testing practices for plug-in systems
ICSE 2012: Test Confessions - A study of testing practices for plug-in systemsMichaela Greiler
 
MDSD on iPhone - EclipseCon 2010
MDSD on iPhone - EclipseCon 2010MDSD on iPhone - EclipseCon 2010
MDSD on iPhone - EclipseCon 2010Heiko Behrens
 
iPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhoneiPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhoneHeiko Behrens
 
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010Heiko Behrens
 
Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009Heiko Behrens
 
Physics Holi
Physics HoliPhysics Holi
Physics Holirockstarr
 

Destacado (12)

Software process and measurement cast a retrospective part 1
Software process and measurement cast   a retrospective part 1Software process and measurement cast   a retrospective part 1
Software process and measurement cast a retrospective part 1
 
Performance Assessment with Impact: Studying Film Like a Pro
Performance Assessment with Impact: Studying Film Like a ProPerformance Assessment with Impact: Studying Film Like a Pro
Performance Assessment with Impact: Studying Film Like a Pro
 
Spots e Imagen Política
Spots e Imagen PolíticaSpots e Imagen Política
Spots e Imagen Política
 
Podcasting to a Niche Market
Podcasting to a Niche MarketPodcasting to a Niche Market
Podcasting to a Niche Market
 
Universal Declarative Services
Universal Declarative ServicesUniversal Declarative Services
Universal Declarative Services
 
Xtext - und was man damit anstellen kann
Xtext - und was man damit anstellen kannXtext - und was man damit anstellen kann
Xtext - und was man damit anstellen kann
 
ICSE 2012: Test Confessions - A study of testing practices for plug-in systems
ICSE 2012:  Test Confessions - A study of testing practices for plug-in systemsICSE 2012:  Test Confessions - A study of testing practices for plug-in systems
ICSE 2012: Test Confessions - A study of testing practices for plug-in systems
 
MDSD on iPhone - EclipseCon 2010
MDSD on iPhone - EclipseCon 2010MDSD on iPhone - EclipseCon 2010
MDSD on iPhone - EclipseCon 2010
 
iPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhoneiPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhone
 
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
Plattformübergreifende App-Entwicklung (ein Vergleich) - MobileTechCon 2010
 
Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009Building DSLs with Xtext - Eclipse Modeling Day 2009
Building DSLs with Xtext - Eclipse Modeling Day 2009
 
Physics Holi
Physics HoliPhysics Holi
Physics Holi
 

Similar a EclipseCon2011 Cross-Platform Mobile Development with Eclipse

APPlause - DemoCamp Munich
APPlause - DemoCamp MunichAPPlause - DemoCamp Munich
APPlause - DemoCamp MunichPeter Friese
 
Windows 8 Training Fundamental - 1
Windows 8 Training Fundamental - 1Windows 8 Training Fundamental - 1
Windows 8 Training Fundamental - 1Kevin Octavian
 
Reactive clean architecture
Reactive clean architectureReactive clean architecture
Reactive clean architectureViktor Nyblom
 
Connect.js - Exploring React.Native
Connect.js - Exploring React.NativeConnect.js - Exploring React.Native
Connect.js - Exploring React.Nativejoshcjensen
 
Software Language Design & Engineering
Software Language Design & EngineeringSoftware Language Design & Engineering
Software Language Design & EngineeringEelco Visser
 
Data visualization in python/Django
Data visualization in python/DjangoData visualization in python/Django
Data visualization in python/Djangokenluck2001
 
Cross-Platform Native Mobile Development with Eclipse
Cross-Platform Native Mobile Development with EclipseCross-Platform Native Mobile Development with Eclipse
Cross-Platform Native Mobile Development with EclipsePeter Friese
 
CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on AndroidSven Haiges
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Oliver Gierke
 
Taming Core Data by Arek Holko, Macoscope
Taming Core Data by Arek Holko, MacoscopeTaming Core Data by Arek Holko, Macoscope
Taming Core Data by Arek Holko, MacoscopeMacoscope
 
Persisting Data on SQLite using Room
Persisting Data on SQLite using RoomPersisting Data on SQLite using Room
Persisting Data on SQLite using RoomNelson Glauber Leal
 
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KThomas Fuchs
 
Paris js extensions
Paris js extensionsParis js extensions
Paris js extensionserwanl
 
A Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NETA Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NETJames Johnson
 
Adopting 3D Touch in your apps
Adopting 3D Touch in your appsAdopting 3D Touch in your apps
Adopting 3D Touch in your appsJuan C Catalan
 
A Rich Web Experience with jQuery, Ajax and .NET
A Rich Web Experience with jQuery, Ajax and .NETA Rich Web Experience with jQuery, Ajax and .NET
A Rich Web Experience with jQuery, Ajax and .NETJames Johnson
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsHassan Abid
 

Similar a EclipseCon2011 Cross-Platform Mobile Development with Eclipse (20)

APPlause - DemoCamp Munich
APPlause - DemoCamp MunichAPPlause - DemoCamp Munich
APPlause - DemoCamp Munich
 
Scala on Your Phone
Scala on Your PhoneScala on Your Phone
Scala on Your Phone
 
Windows 8 Training Fundamental - 1
Windows 8 Training Fundamental - 1Windows 8 Training Fundamental - 1
Windows 8 Training Fundamental - 1
 
Android crashcourse
Android crashcourseAndroid crashcourse
Android crashcourse
 
Reactive clean architecture
Reactive clean architectureReactive clean architecture
Reactive clean architecture
 
IN4308 Lecture 3
IN4308 Lecture 3IN4308 Lecture 3
IN4308 Lecture 3
 
Connect.js - Exploring React.Native
Connect.js - Exploring React.NativeConnect.js - Exploring React.Native
Connect.js - Exploring React.Native
 
Software Language Design & Engineering
Software Language Design & EngineeringSoftware Language Design & Engineering
Software Language Design & Engineering
 
Data visualization in python/Django
Data visualization in python/DjangoData visualization in python/Django
Data visualization in python/Django
 
Cross-Platform Native Mobile Development with Eclipse
Cross-Platform Native Mobile Development with EclipseCross-Platform Native Mobile Development with Eclipse
Cross-Platform Native Mobile Development with Eclipse
 
CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on Android
 
Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!Data access 2.0? Please welcome: Spring Data!
Data access 2.0? Please welcome: Spring Data!
 
Taming Core Data by Arek Holko, Macoscope
Taming Core Data by Arek Holko, MacoscopeTaming Core Data by Arek Holko, Macoscope
Taming Core Data by Arek Holko, Macoscope
 
Persisting Data on SQLite using Room
Persisting Data on SQLite using RoomPersisting Data on SQLite using Room
Persisting Data on SQLite using Room
 
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2KZepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
 
Paris js extensions
Paris js extensionsParis js extensions
Paris js extensions
 
A Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NETA Rich Web experience with jQuery, Ajax and .NET
A Rich Web experience with jQuery, Ajax and .NET
 
Adopting 3D Touch in your apps
Adopting 3D Touch in your appsAdopting 3D Touch in your apps
Adopting 3D Touch in your apps
 
A Rich Web Experience with jQuery, Ajax and .NET
A Rich Web Experience with jQuery, Ajax and .NETA Rich Web Experience with jQuery, Ajax and .NET
A Rich Web Experience with jQuery, Ajax and .NET
 
Building Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture Components
 

EclipseCon2011 Cross-Platform Mobile Development with Eclipse

  • 1. Cross-Platform Mobile Development with Eclipse EclipseCon 2011 March 21st - 24th Santa Clara, California @hbehrens and @peterfriese working with @itemismobile
  • 2. @moskovich: “Your mobile phone has more computing power than all of NASA in 1969. NASA put a man on the moon...
  • 3. ...we put a bird into pigs.”
  • 6. 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(); }
  • 7. 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]; } } }
  • 8. 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]; }
  • 9. 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 %}
  • 14. Views
  • 15. Views Cells
  • 16. Views Cells Navigation
  • 17. Entities Views Session Cells title room Navigation
  • 18. Views Session Cells title room Navigation Entities ContentProviders
  • 19. DSL for mobile tabbarApplication itemisApp { button { title= "Tuesday" icon= "calendar.png" view= SessionList( SessionsByDay("2011-03-22") ) } button { title= "Wednesday" icon= "calendar.png" view= SessionList( SessionsByDay("2011-03-23") ) } button { title= "Thursday" icon= "calendar.png" view= SessionList( SessionsByDay("2011-03-24") ) } button { title= "Speakers" icon= "person.png" view= SpeakersList( AllSpeakers() ) } }
  • 22. @hbehrens and @peterfriese working with @itemismobile