SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
MORENA: A Middleware for Programming
      NFC-enabled Android Applications as
      Distributed Object-Oriented Programs
      Andoni Lombide Carreton
      Kevin Pinte
      Wolfgang De Meuter




       ACM/IFIP/USENIX 13th International Conference on Middleware 2012
       December 5 2012
       Montreal, Canada

Monday 28 January 13
RFID in Android

      • NFC (touch range).
                                  NdefMessage: {
      • Callback on activities                        ,
        to detect RFID tags
        with subscribed MIME-                         , NdefRecord
        type in memory.                                 byte array
                                  }
      • File access abstraction



                                      read    write




Monday 28 January 13
Drawbacks of the Android NFC API

      • Manual failure handling (and NFC causes A LOT of failures because of its
        hardware characteristics).


      • Blocking communication (Android documentation recommends to use a
        separate thread for many RFID operations).


      • Manual data conversion


      • Tight coupling with activity-based architecture




Monday 28 January 13
Lessons Learnt from Previous Ambient-Oriented
      Programming Research

      • Using objects as first class software representations for RFID-tagged “things”
        is a nice abstraction.


      • These objects can be directly stored in the RFID tags’ memory to minimize
        data conversion.


      • Event-driven discovery (fortunately built-in into Android).


      • Asynchronous reads and writes.




Monday 28 January 13
Middleware Architecture



                       Application

                       Thing level   One middleware
                                     for Android 4.0
                        Tag level        or higher

                        Android



Monday 28 January 13
Evaluation: WiFi Sharing Application




Monday 28 January 13
Evaluation: WiFi Sharing Application




Monday 28 January 13
Things

                                                          From now on, we don’t
   public class WifiConfig extends Thing {                have to worry about the
   	    public String ssid_;
                                                             activity anymore.
   	    public String key_;

   	    public WifiConfig(ThingActivity<WifiConfig> activity, String ssid, String key) {
   	    	 super(activity);
   	    	 ssid_ = ssid;
   	    	 key_ = key;
   	    }
   	
   	    public boolean connect(WifiManager wm) {
        	 // Connect to ssid_ with password key_	
   	    };
                                                    Supported serialization:
   }
                                                     - JSON-serializable fields.
                                                     - Skipping transient fields.
                                                     - Deep serialization, no cycles.
Monday 28 January 13
Initializing Things
                                     As soon as an empty
                                        tag is detected
              @Override
              public void whenDiscovered(EmptyRecord empty) {
                  empty.initialize(
                         myWifiThing,
                         new ThingSavedListener<WifiConfig>() {
              	 	 	        @Override
              	 	 	        public void signal(WifiConfig thing) {
              	 	 	 	          toast("WiFi joiner created!");
              	 	 	        }
              	 	       },
              	 	     new ThingSaveFailedListener() {
              	 	 	        @Override
              	 	 	        public void signal() {
              	 	 	 	         toast("Creating WiFi joiner failed, try again.");
              	 	 	        }
              	 	     });
              }
Monday 28 January 13
Discovering and Reading Things


                                         As soon as a WifiConfig
                                             tag is detected
                       @Override
                       public void whenDiscovered(WifiConfig wc) {
                          toast("Joining Wifi network " + wc.ssid_);
                       	 wc.connect();
                       }
                                                Contains cached fields for
                                                  synchronous access.
                                                 Physical reads must be
                                                     asynchronous.




Monday 28 January 13
Saving Modified Things

          myWifiConfig.ssid_ = "MyNewWifiName";
          myWifiConfig.key_ = "MyNewWifiPassword";

          myWifiConfig.saveAsync(
                new ThingSavedListener<WifiConfig>() {
          	         @Override
          	 	 	    public void signal(WifiConfig wc) {
          	 	 	 	     toast("WiFi joiner saved!");
          	 	 	    }
          	 	 },
          	 	 new ThingSaveFailedListener() {
          	         @Override
          	 	 	    public void signal() {
          	 	           toast("Saving WiFi joiner failed, try again.");
          	 	 	    }
                });



Monday 28 January 13
Broadcasting Things to Other Phones

                                  Will trigger whenDiscovered on the
                              receiving phone with the broadcasted thing

          myWifiConfig.broadcast(
                new ThingBroadcastSuccessListener<WifiConfig>() {
          	         @Override
          	 	 	    public void signal(WifiConfig wc) {
          	 	 	 	     toast("WiFi joiner shared!");
          	 	 	    }
          	 	 },
          	 	 new ThingBroadcastFailedListener<WifiConfig>() {
          	         @Override
          	 	 	    public void signal(WifiConfig wc) {
          	 	           toast("Failed to share WiFi joiner, try again.");
          	 	 	    }
                });


Monday 28 January 13
Evaluation: WiFi Sharing Application




Monday 28 January 13
Middleware Architecture



                       Application

                       Thing level   One middleware
                                     for Android 4.0
                        Tag level        or higher

                        Android



Monday 28 January 13
Detecting RFID Tags

                       new MyTagDiscoverer(this,
                          THING_TYPE,
                          new NdefMessageToStringConverter(),
                          new StringToNdefMessageConverter());




                       private class MyTagDiscoverer extends TagDiscoverer {		
                       	 @Override
                       	 public void onTagDetected(TagReference tagReference) {
                       	 	 readTagAndUpdateUI(tagReference);
                       	 }
                       	 	
                       	 @Override
                       	 public void onTagRedetected(TagReference tagReference) {
                       	 	 readTagAndUpdateUI(tagReference);
                       	 }
                       }



Monday 28 January 13
The Tag Reference Abstraction




Monday 28 January 13
Reading RFID Tags


               tagReference.read(
                     new TagReadListener() {
                          @Override
               	         public void signal(TagReference tagReference) {
               	             // tagReference.getCachedData()
               	 	      }
               	    },
               	    new TagReadFailedListener() {
               	         @Override
               	         public void signal(TagReference tagReference) {
               	             // Deal with failure
               	         }
               	   });




Monday 28 January 13
Writing RFID Tags

               tagReference.write(
                     toWrite,
                     new TagWrittenListener() {
               	         @Override
               	         public void signal(TagReference tagReference) {
               	             // Handle write success
               	 	      }
               	    },
               	    new TagWriteFailedListener() {
               	         @Override
               	 	      public void signal(TagReference tagReference) {
               	 	          // Deal with failure
               	 	      }
               	   });




Monday 28 January 13
Fine-grained Filtering

              private class MyTagDiscoverer extends TagDiscoverer {	 	
              	 @Override
              	 public void onTagDetected(TagReference tagReference) {
              	 	 readTagAndUpdateUI(tagReference);
              	 }
              	 	
              	 @Override
              	 public void onTagRedetected(TagReference tagReference) {
              	 	 readTagAndUpdateUI(tagReference);
              	 }

                   @Override
              	    public boolean checkCondition(TagReference tagReference) {
                       // Can be used to apply a predicate
                       // on tagReference.getCachedData()
              	    }
              }



Monday 28 January 13
Conclusion

      • Event-driven discovery.


      • Non-blocking communication:


            • Things: cached copy, asynchronous saving of cached data.


            • TagReferences: first class references to RFID tags offering asynchronous
              reads and writes.


      • Automatic data conversion


      • Looser coupling from activity-based architecture


      • Data structures over several tags, stronger consistency guarantees?

Monday 28 January 13
MORENA: A Middleware for Programming
      NFC-enabled Android Applications as
      Distributed Object-Oriented Programs
      Andoni Lombide Carreton
      Kevin Pinte
      Wolfgang De Meuter




       ACM/IFIP/USENIX 13th International Conference on Middleware 2012
       December 5 2012
       Montreal, Canada

Monday 28 January 13

Weitere ähnliche Inhalte

Andere mochten auch

Visual Dataflow Coordination2010
Visual Dataflow Coordination2010Visual Dataflow Coordination2010
Visual Dataflow Coordination2010alombide
 
Distributed Reactive Programming Tools2010
Distributed Reactive Programming Tools2010Distributed Reactive Programming Tools2010
Distributed Reactive Programming Tools2010alombide
 
AmbientTalk Rfid Dais2010
AmbientTalk Rfid Dais2010AmbientTalk Rfid Dais2010
AmbientTalk Rfid Dais2010alombide
 
Private phd defense_40-45min
Private phd defense_40-45minPrivate phd defense_40-45min
Private phd defense_40-45minalombide
 
An introduction to M2M / IoT technologies
An introduction to M2M / IoT technologiesAn introduction to M2M / IoT technologies
An introduction to M2M / IoT technologiesPascal Bodin
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 

Andere mochten auch (6)

Visual Dataflow Coordination2010
Visual Dataflow Coordination2010Visual Dataflow Coordination2010
Visual Dataflow Coordination2010
 
Distributed Reactive Programming Tools2010
Distributed Reactive Programming Tools2010Distributed Reactive Programming Tools2010
Distributed Reactive Programming Tools2010
 
AmbientTalk Rfid Dais2010
AmbientTalk Rfid Dais2010AmbientTalk Rfid Dais2010
AmbientTalk Rfid Dais2010
 
Private phd defense_40-45min
Private phd defense_40-45minPrivate phd defense_40-45min
Private phd defense_40-45min
 
An introduction to M2M / IoT technologies
An introduction to M2M / IoT technologiesAn introduction to M2M / IoT technologies
An introduction to M2M / IoT technologies
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

Ähnlich wie Morena middleware2012

Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureC.T.Co
 
Sword fighting with Dagger GDG-NYC Jan 2016
 Sword fighting with Dagger GDG-NYC Jan 2016 Sword fighting with Dagger GDG-NYC Jan 2016
Sword fighting with Dagger GDG-NYC Jan 2016Mike Nakhimovich
 
Automated Discovery of Deserialization Gadget Chains
 Automated Discovery of Deserialization Gadget Chains Automated Discovery of Deserialization Gadget Chains
Automated Discovery of Deserialization Gadget ChainsPriyanka Aash
 
4th semester project report
4th semester project report4th semester project report
4th semester project reportAkash Rajguru
 
Introduction to Things board (An Open Source IoT Cloud Platform)
Introduction to Things board (An Open Source IoT Cloud Platform)Introduction to Things board (An Open Source IoT Cloud Platform)
Introduction to Things board (An Open Source IoT Cloud Platform)Amarjeetsingh Thakur
 
WAFFLE: Windows Authentication in Java
WAFFLE: Windows Authentication in JavaWAFFLE: Windows Authentication in Java
WAFFLE: Windows Authentication in JavaDaniel Doubrovkine
 
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
 
망고100 보드로 놀아보자 19
망고100 보드로 놀아보자 19망고100 보드로 놀아보자 19
망고100 보드로 놀아보자 19종인 전
 
Jafka guide
Jafka guideJafka guide
Jafka guideAdy Liu
 
Eclipse Kura Shoot a-pi
Eclipse Kura Shoot a-piEclipse Kura Shoot a-pi
Eclipse Kura Shoot a-piEclipse Kura
 
T2 reading 20101126
T2 reading 20101126T2 reading 20101126
T2 reading 20101126Go Tanaka
 
Step-by-step Development of an Application for the Java Card Connected Platform
Step-by-step Development of an Application for the Java Card Connected PlatformStep-by-step Development of an Application for the Java Card Connected Platform
Step-by-step Development of an Application for the Java Card Connected PlatformEric Vétillard
 
Microservices with Netflix OSS and Spring Cloud - Dev Day Orange
Microservices with Netflix OSS and Spring Cloud -  Dev Day OrangeMicroservices with Netflix OSS and Spring Cloud -  Dev Day Orange
Microservices with Netflix OSS and Spring Cloud - Dev Day Orangeacogoluegnes
 
Networking and Security in Java
Networking and Security in JavaNetworking and Security in Java
Networking and Security in JavaConestoga Collage
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean ArchitectureMattia Battiston
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalDroidcon Berlin
 

Ähnlich wie Morena middleware2012 (20)

Pinte
PintePinte
Pinte
 
Air superiority for Android Apps
Air superiority for Android AppsAir superiority for Android Apps
Air superiority for Android Apps
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Sword fighting with Dagger GDG-NYC Jan 2016
 Sword fighting with Dagger GDG-NYC Jan 2016 Sword fighting with Dagger GDG-NYC Jan 2016
Sword fighting with Dagger GDG-NYC Jan 2016
 
Automated Discovery of Deserialization Gadget Chains
 Automated Discovery of Deserialization Gadget Chains Automated Discovery of Deserialization Gadget Chains
Automated Discovery of Deserialization Gadget Chains
 
Jersey Guice AOP
Jersey Guice AOPJersey Guice AOP
Jersey Guice AOP
 
4th semester project report
4th semester project report4th semester project report
4th semester project report
 
Introduction to Things board (An Open Source IoT Cloud Platform)
Introduction to Things board (An Open Source IoT Cloud Platform)Introduction to Things board (An Open Source IoT Cloud Platform)
Introduction to Things board (An Open Source IoT Cloud Platform)
 
WAFFLE: Windows Authentication in Java
WAFFLE: Windows Authentication in JavaWAFFLE: Windows Authentication in Java
WAFFLE: Windows Authentication in Java
 
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
 
망고100 보드로 놀아보자 19
망고100 보드로 놀아보자 19망고100 보드로 놀아보자 19
망고100 보드로 놀아보자 19
 
Jafka guide
Jafka guideJafka guide
Jafka guide
 
Eclipse Kura Shoot a-pi
Eclipse Kura Shoot a-piEclipse Kura Shoot a-pi
Eclipse Kura Shoot a-pi
 
T2 reading 20101126
T2 reading 20101126T2 reading 20101126
T2 reading 20101126
 
Step-by-step Development of an Application for the Java Card Connected Platform
Step-by-step Development of an Application for the Java Card Connected PlatformStep-by-step Development of an Application for the Java Card Connected Platform
Step-by-step Development of an Application for the Java Card Connected Platform
 
Microservices with Netflix OSS and Spring Cloud - Dev Day Orange
Microservices with Netflix OSS and Spring Cloud -  Dev Day OrangeMicroservices with Netflix OSS and Spring Cloud -  Dev Day Orange
Microservices with Netflix OSS and Spring Cloud - Dev Day Orange
 
Networking and Security in Java
Networking and Security in JavaNetworking and Security in Java
Networking and Security in Java
 
Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean Architecture
 
Thomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-finalThomas braun dependency-injection_with_robo_guice-presentation-final
Thomas braun dependency-injection_with_robo_guice-presentation-final
 

Morena middleware2012

  • 1. MORENA: A Middleware for Programming NFC-enabled Android Applications as Distributed Object-Oriented Programs Andoni Lombide Carreton Kevin Pinte Wolfgang De Meuter ACM/IFIP/USENIX 13th International Conference on Middleware 2012 December 5 2012 Montreal, Canada Monday 28 January 13
  • 2. RFID in Android • NFC (touch range). NdefMessage: { • Callback on activities , to detect RFID tags with subscribed MIME- , NdefRecord type in memory. byte array } • File access abstraction read write Monday 28 January 13
  • 3. Drawbacks of the Android NFC API • Manual failure handling (and NFC causes A LOT of failures because of its hardware characteristics). • Blocking communication (Android documentation recommends to use a separate thread for many RFID operations). • Manual data conversion • Tight coupling with activity-based architecture Monday 28 January 13
  • 4. Lessons Learnt from Previous Ambient-Oriented Programming Research • Using objects as first class software representations for RFID-tagged “things” is a nice abstraction. • These objects can be directly stored in the RFID tags’ memory to minimize data conversion. • Event-driven discovery (fortunately built-in into Android). • Asynchronous reads and writes. Monday 28 January 13
  • 5. Middleware Architecture Application Thing level One middleware for Android 4.0 Tag level or higher Android Monday 28 January 13
  • 6. Evaluation: WiFi Sharing Application Monday 28 January 13
  • 7. Evaluation: WiFi Sharing Application Monday 28 January 13
  • 8. Things From now on, we don’t public class WifiConfig extends Thing { have to worry about the public String ssid_; activity anymore. public String key_; public WifiConfig(ThingActivity<WifiConfig> activity, String ssid, String key) { super(activity); ssid_ = ssid; key_ = key; } public boolean connect(WifiManager wm) { // Connect to ssid_ with password key_ }; Supported serialization: } - JSON-serializable fields. - Skipping transient fields. - Deep serialization, no cycles. Monday 28 January 13
  • 9. Initializing Things As soon as an empty tag is detected @Override public void whenDiscovered(EmptyRecord empty) { empty.initialize( myWifiThing, new ThingSavedListener<WifiConfig>() { @Override public void signal(WifiConfig thing) { toast("WiFi joiner created!"); } }, new ThingSaveFailedListener() { @Override public void signal() { toast("Creating WiFi joiner failed, try again."); } }); } Monday 28 January 13
  • 10. Discovering and Reading Things As soon as a WifiConfig tag is detected @Override public void whenDiscovered(WifiConfig wc) { toast("Joining Wifi network " + wc.ssid_); wc.connect(); } Contains cached fields for synchronous access. Physical reads must be asynchronous. Monday 28 January 13
  • 11. Saving Modified Things myWifiConfig.ssid_ = "MyNewWifiName"; myWifiConfig.key_ = "MyNewWifiPassword"; myWifiConfig.saveAsync( new ThingSavedListener<WifiConfig>() { @Override public void signal(WifiConfig wc) { toast("WiFi joiner saved!"); } }, new ThingSaveFailedListener() { @Override public void signal() { toast("Saving WiFi joiner failed, try again."); } }); Monday 28 January 13
  • 12. Broadcasting Things to Other Phones Will trigger whenDiscovered on the receiving phone with the broadcasted thing myWifiConfig.broadcast( new ThingBroadcastSuccessListener<WifiConfig>() { @Override public void signal(WifiConfig wc) { toast("WiFi joiner shared!"); } }, new ThingBroadcastFailedListener<WifiConfig>() { @Override public void signal(WifiConfig wc) { toast("Failed to share WiFi joiner, try again."); } }); Monday 28 January 13
  • 13. Evaluation: WiFi Sharing Application Monday 28 January 13
  • 14. Middleware Architecture Application Thing level One middleware for Android 4.0 Tag level or higher Android Monday 28 January 13
  • 15. Detecting RFID Tags new MyTagDiscoverer(this, THING_TYPE, new NdefMessageToStringConverter(), new StringToNdefMessageConverter()); private class MyTagDiscoverer extends TagDiscoverer { @Override public void onTagDetected(TagReference tagReference) { readTagAndUpdateUI(tagReference); } @Override public void onTagRedetected(TagReference tagReference) { readTagAndUpdateUI(tagReference); } } Monday 28 January 13
  • 16. The Tag Reference Abstraction Monday 28 January 13
  • 17. Reading RFID Tags tagReference.read( new TagReadListener() { @Override public void signal(TagReference tagReference) { // tagReference.getCachedData() } }, new TagReadFailedListener() { @Override public void signal(TagReference tagReference) { // Deal with failure } }); Monday 28 January 13
  • 18. Writing RFID Tags tagReference.write( toWrite, new TagWrittenListener() { @Override public void signal(TagReference tagReference) { // Handle write success } }, new TagWriteFailedListener() { @Override public void signal(TagReference tagReference) { // Deal with failure } }); Monday 28 January 13
  • 19. Fine-grained Filtering private class MyTagDiscoverer extends TagDiscoverer { @Override public void onTagDetected(TagReference tagReference) { readTagAndUpdateUI(tagReference); } @Override public void onTagRedetected(TagReference tagReference) { readTagAndUpdateUI(tagReference); } @Override public boolean checkCondition(TagReference tagReference) { // Can be used to apply a predicate // on tagReference.getCachedData() } } Monday 28 January 13
  • 20. Conclusion • Event-driven discovery. • Non-blocking communication: • Things: cached copy, asynchronous saving of cached data. • TagReferences: first class references to RFID tags offering asynchronous reads and writes. • Automatic data conversion • Looser coupling from activity-based architecture • Data structures over several tags, stronger consistency guarantees? Monday 28 January 13
  • 21. MORENA: A Middleware for Programming NFC-enabled Android Applications as Distributed Object-Oriented Programs Andoni Lombide Carreton Kevin Pinte Wolfgang De Meuter ACM/IFIP/USENIX 13th International Conference on Middleware 2012 December 5 2012 Montreal, Canada Monday 28 January 13