The confluence of multi-core and distributed-core processors, inexpensive mass storage, ubiquitous wireless connectivity, and commodity software platforms is driving the need for software engineers and programmers who understand how to develop concurrent and networked software for mobile devices that connect to cloud computing platforms. Despite many improvements in processors, storage, and networks, however, developing quality software on-time and on-budget remains hard. Moreover, developing high quality reusable concurrent and networked software apps and services is even harder. The principles, methods, and skills required to develop such software are best learned by attaining mastery of patterns, pattern languages, and frameworks.
A pattern describes a reusable solution to a common problem that arises within a particular context. When related patterns are woven together they form a pattern language that defines a vocabulary and a process for the orderly resolution of software development problems. A framework is an integrated set of components that collaborate to provide a reusable architecture for a family of related apps or services. Frameworks can also be viewed as concrete realizations of pattern languages that facilitate direct reuse of detailed design and source code.
This MOOC describes by example how to apply patterns, pattern languages, and frameworks to alleviate the complexity of developing concurrent and networked software for mobile devices via the use of object-oriented design techniques, Javaprogramming language features, and Android middleware. An extended case study project will be used throughout the MOOC to showcase pattern-oriented software design and programming techniques for concurrent and networked mobile devices and clouds.
Note: This course is part of a trans-institution sequence of MOOCs entitled Mobile Cloud Computing with Android
This MOOC and two others, taught by Dr. Adam Porter from the University of Maryland and Dr. Jules White from Vanderbilt University, have been designed to complement each other as part of the first trans-institution sequence of MOOCs taught on the Coursera platform, structured as follows:
The University of Maryland MOOC, Programming Mobile Applications for Android Handheld Systems, will run from January 21st - April 28th. It focuses on the design and programming of user-facing applications.
The first Vanderbilt MOOC in the sequence, Programming Mobile Services for Android Handheld Systems, will run from May 12th - July 6th. It focuses on middleware systems programming topics, such as synchronous and asynchronous concurrency models, background service processing, structured data management, local inter-process communication and networking, and integration with cloud-based services.
The second Vanderbilt MOOC in the sequence, Programming Cloud Services for Android Handheld Systems, will be run from July 21st - September 29th. It focuses on how to connect Android mobile devices to cloud computing and data storage resources, essentially turning a device into an extension of powerful cloud-based services on popular cloud computing platforms, such as Google App Engine and Amazon EC2.
The final Capstone project MOOC in the sequence will run from October 1st - November 3rd. For this first offering of the Mobile Cloud Computing with Android (MoCCA) Specialization only students in the Signature Track who receive a "Verified Certificate with Distinction" are eligible to enroll in the Capstone project course.
Some of the programming assignments and the iRemember integrative project for these MOOCs will be coordinated.
If you just want to take some of the MOOCs in this sequence or take them all in different order you’re certainly welcome to do so, and you’ll still learn a lot. However, if you take all the MOOCs in this sequence in the order presented you’ll gain a deeper, end-to-end understanding of handheld systems, their applications and services, as well as their integration into the cloud.
The course is organized into the following sections:
Section 0: Course Introduction
Part 1: Overview of Mobile Cloud Computing with Android
Part 2:Course Structure and Topics
Part 3: Course Prerequisites and Learning Strategies
Part 4: Overview of Patterns and Frameworks
Section 1: Android Concurrency
Module 1: Concurrency Motivations and Challenges
Part 1: Concurrency Motivations
Part 2: Concurrency Challenges
Module 2: Java Concurrency Mechanisms
Part 1: Overview of Java Threads (Part 1)
Part 2: Overview of Java Threads (Part 2)
Part 3: Motivating Java Synchronization & Scheduling Mechanisms
Part 4: Java Synchronization and Scheduling Classes
Part 5: Java ReentrantLock
Part 6: Java ReentrantReadWriteLock
Part 7: Java Semaphore
Part 8: Java ConditionObject
Part 9: Java CountDownLatch
Part 10: Java Synchronization and Scheduling Example
Part 11: Java Built-in Monitor Objects
Module 3: Android Concurrency Frameworks
Part 1: Overview of Android Concurrency Frameworks and Idioms
Part 2: Android Looper
Part 3: Overview of Android Handler
Part 4: Posting and Processing Runnables to Android Handler
Part 5: Sending and Handling Messages to Android Handler
Part 6: The AsyncTask Framework (Part 1)
Part 7: The AsyncTask Framework (Part 2)
Part 8: Programming with Android Concurrency Frameworks (Part 1)
Part 9: Programming with Android Concurrency Frameworks (Part 2)
Section 2: Android Services and Security
Module 1: Android Services and IPC
Part 1: Overview of Started and Bound Services
Part 2: Programming Started Services (Part 1)
Part 3: Programming Started Services (Part 2)
Part 4: Android IntentService
Part 5: Activity and Service Communication
Part 6: Service to Activity Communication Using Android Messenger
Part 7: Programming Bound Services with Messengers (Part 1)
Part 8: Programming Bound Services with Messengers (Part 2)
Part 9: Programming Bound Services with AIDL
Module 2: Android App Security and Risks
Part 1: Traditional App Accounts
Part 2: Mobile vs. Traditional App Accounts
Part 3: App Account Mapping to Linux Users
Part 4: Apps Lie & Steal
Part 5: How Android Protects Apps
Part 6: What Android Doesn't Protect
Part 7: Avoid Storing Sensitive Data in Public Locations
Part 8: Risks of Insecure File Permissions
Module 3: Building More Secure Android Apps
Part 0: The Challenge of Secure Coding
Part 1: Security Vulnerability Walkthrough
Part 2: Principles of Secure Abstractions
Part 3: Avoid Coupling Data & Security State
Part 4: Build Abstractions that are Hard to Use Insecurely
Part 5: Bound & Strongly Type Security State
Part 6: Avoid Conditional Logic in Secure Pathways
Part 7: Prevent Secure Pathways from Being Broken at Runtime
Part 8: Privilege Escalation Concepts
Part 9: Privilege Escalation Scenario
Part 10: Privilege Escalation Code Walkthrough
Part 11: Privilege Escalation Fixes
Part 12: User Interface Attacks
Part 13: Cross-platform User Interface Attacks
Section 3: Concurrency and Communication Patterns in Android
Module 1: Coordinating Concurrent Access to Shared Data
Part 1: The Monitor Object Pattern (Part 1)
Part 2: The Monitor Object Pattern (Part 2)
Module 2: Activating Services on Demand
Part 1: The Activator Pattern (Part 1)
Part 2: The Activator Pattern (Part 2)
Module 3: Passing Commands to Services
Part 1: The Command Processor Pattern (Part 1)
Part 2: The Command Processor Pattern (Part 2)
Module 4: Automating Marshaling and Demarshaling of Data
Throughout the MOOC we'll focus on pattern-oriented software architecture, with an emphasis on concurrent and networked programming in the context of Android middleware systems programming mechanisms, such as synchronous and asynchronous concurrency models, background service processing, storage and retrieval of structured data, and local inter-process communication (IPC) and networking. We illustrate by example how key pattern and framework concepts and relationships are applied in Android Services, Content Providers, Broadcast Receivers, and various secure local and remote IPC mechanisms from both an application and infrastructure perspective. Many code examples are shown throughout using Java, with a case study project used to reify the key points throughout all the modules in this section.
The PDF versions of all the slides used in the course will be available online as the videos become available on the course website.