YoVDO

Programming Cloud Services for Android Handheld Systems: Spring

Offered By: Vanderbilt University via Coursera

Tags

Android Development Courses Mobile Development Courses Java Courses

Course Description

Overview

This MOOC describes by example how to connect Android mobile devices to clouds via the use of object-oriented design techniques, Java programming language features, Jetty middleware, Java Servlets, the Java Spring Framework, and cloud computing platforms, such as Google App Engine. Although there will be 10 weeks of lecture material, the required core of the course is six weeks long and can be completed flexibly within the ten week schedule to provide flexibility for students during the summer.

An extended case study project will be used throughout the required core of the MOOC to showcase architectures for communicating with the cloud using HTTP, server-side processing of mobile data using servlets and the Java Spring Framework, and scalable storage of data using no-SQL databases and other platforms. Due to the importance of building secure and scalable mobile/cloud platforms, this MOOC will not only show you how to program handheld systems that talk to the cloud, but how to do so securely, scalably, and efficiently. Security and scalability topics will be woven into discussions of cloud service creation so that students learn, from the start, how to create robust cloud services for mobile devices.

Four weeks of optional lecture material will also be provided for students who would like to gain a deeper understanding of the patterns and frameworks for building cloud infrastructure building. This material will be presented in the context of the open-source JAWS web server, which is implemented in C++ as part of the ACE open-source object-oriented concurrent and networked programming toolkit.

Although the cloud service topics in this course will be taught in the context of connecting mobile devices to the cloud, the concepts are broader and will give students the ability to create the cloud services to support large-scale web applications, such as social networking applications; cloud services for embedded systems, such as the Internet of Things and Industrial Internet; and wearable computing devices, such as Google Glass.

The Mobile Cloud Computing with Android (MoCCA) Specialization

This is the 5th course of the six-course Mobile Cloud Computing with Android (MoCCA) Specialization. It has been designed as part of a Coursera Specialization designed to help learners create complex, cloud-based Android Applications, and includes a final “capstone” project for those who earn Verified Certificates across all six courses.

Note: We are proud to announce that the MoCCA specialization has already reached hundreds of thousands of learners around the globe. In its last iteration, we worked with Google to provide Nexus tablets, feedback from the Google App team, and the potential to be featured in the Google Play store to top course completers.

This time around, we are providing more flexibility for all of you busy learners. We are running the Programming Mobile Applications courses in more digestible one-month-long sections, each with a meaningful mini-project at the end. Additionally, we will be re-offering the courses more frequently. For example, new sessions of my two introductory courses will be launched on a monthly basis, so that you can find a convenient time to join us or pick up where you left off if you didn’t quite finish before.

For previous MoCCA students: If you have already earned a Verified Certificate in the previous version of this course, "Pattern-Oriented Software Architectures: Programming Mobile Services for Android Handheld Systems” offered in May 2014, you do not need to retake this course to continue towards the Specialization certificate and final project in 2015. Please consult the Specializations Help Center or contact the Coursera support team if you are not sure whether you qualify.

This MOOC and five 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 first two courses by Dr. Adam Porter, of the University of Maryland, are Programming Mobile Applications for Android Handheld Systems Part 1 and Part 2. They focus on the design and programming of user-facing applications.  

  • The third and fourth courses by Dr. Douglas Schmidt, of Vanderbilt University, are Programming Mobile Services for Android Handheld Systems: Concurrency and Communication. They focus 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 fifth and sixth courses by Dr. Jules White, of Vanderbilt University, are Programming Cloud Services for Android Handheld Systems: Spring and Security.  They focus 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 will require students to develop a complex mobile cloud computing application from the ground up.

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.

Syllabus

This MOOC describes by example how to connect Android mobile devices to clouds via the use of object-oriented design techniques; Java programming language features; Android Content Providers, Content Resolvers, and SQLite databases; Jetty middleware; Java Servlets, the Java Spring Framework; and cloud computing platforms, such as Google App Engine. 

An extended case study project will be used throughout the required core of the MOOC to showcase architectures for communicating with the cloud using HTTP, server-side processing of mobile data using servlets and the Java Spring Framework, and scalable storage of data using no-SQL databases and other platforms. Due to the importance of building secure and scalable mobile/cloud platforms, this MOOC will not only show you how to program handheld systems that talk to the cloud, but how to do so securely, scalably, and efficiently. Security and scalability topics will be woven into discussions of cloud service creation so that students learn, from the start, how to create robust cloud services for mobile devices.

Optional lecture material will also be provided for students who would like to gain a deeper understanding of the patterns and frameworks for building cloud infrastructure building. This material will be presented in the context of the open-source JAWS web server, which is implemented in C++ as part of the ACE open-source object-oriented concurrent and networked programming toolkit.

Although the cloud service topics in this course will be taught in the context of connecting mobile devices to the cloud, the concepts are broader and will give students the ability to create the cloud services to support large-scale web applications, such as social networking applications; cloud services for embedded systems, such as the Internet of Things and Industrial Internet; and wearable computing devices, such as Google Glass. 

The course is organized into the sections outlined below.

Section 0: Overview of HTTP [Optional for students who took the POSA Communication MOOC]

  • Module 1: Overview of Hyper-Text Transfer Protocol (HTTP)
    • What are Communication Protocols?
    • Intro to HTTP
    • Why HTTP?
    • What is a Cloud Service
    • HTTP Request Methods
    • HTTP Request Anatomy
    • URLs Query Parameters
    • Completed HTTP Response Anatomy
    • Completed HTTP Response Codes
    • Completed HTTP Cookies
  • Module 2: Designing Mobile Applications with HTTP Communication
    • Building Cloud Services on HTTP 
    • Overview of REST
    • Push Messaging
    • Intro to Java Annotations
    • Completed HTTP to Object Marshalling
    • Completed Intro to JSON
  • Module 3: Better Client-side Communication Abstractions for HTTP
    • Introduction to Retrofit
    • Retrofit Client Code Walkthrough

Section 1: Structured Data Storage on Android

  • Part 1:  Overview of Android Content Providers and Content Resolvers
  • Part 2: Programming with Android Content Resolvers
  • Part 3: Programming Android Content Providers
  • Part 4: Overview of SQLite 
  • Part 5: Asynchronous Access to Content Providers 

Section 2: Building Java Cloud Services

  • Module 1: Java Servlets
    • What are Servlets?
    • A First Cloud Service with a Servlet
    • Web.xml
    • Video Servlet Code Walkthrough
    • Video Servlet Test Walkthrough with HttpClient
    • Securely Handling Client Data Avoiding Injection Attacks
  • Module 2: Better Abstractions for Building Java Cloud Services
    • Intro to Java Annotations
    • HTTP to Object Marshalling
    • Intro to JSON
    • The Spring Dispatcher Servlet and the Controller Abstraction
    • Intro to Spring Controllers
    • Accepting Client Data with RequestParam Annotations
    • Accepting Client Data with PathVar Annotations
    • Accepting Client Data with RequestBody Annotations and JSON
    • Handling Multipart Data
    • Generating Responses with the ResponseBody Annotation
    • Custom Marshalling with Jackson Annotations Serializers/Deserializers
    • Spring Boot Application Structure
    • Spring Controller Code Walkthrough
    • Spring Controller Test Code Walkthrough
  • Module 3: Better Client-side Communication Abstractions
    • Introduction to Retrofit
    • Retrofit Client Code Walkthrough
    • Android Retrofit Client Code Walkthrough
  • Module 4: Building Loosely Coupled and Extensible Java Services
    • Spring Dependency Injection Auto-wiring
    • Spring Configuration Annotations
    • Spring Dependency Injection Controller Code Walkthrough
    • Spring Dependency Injection Controller Test Code Walkthrough

Section 3: Building Database-driven Java Cloud Services

  • Module 1: Persistent Objects
    • Object to DB Mapping
    • JPA
    • Entities
    • Repositories
    • Understanding SQL Injection Attacks
    • Spring Data Code Walkthrough
  • Module 2: RESTful Services for Persistent Objects
    • Spring Data REST
    • Spring Data REST Code Walkthrough

Section 4: Deploying to the Cloud Scaling

  • Module 1: General Scaling Strategies
    • Stateless vs. Stateful Applications
    • Horizontal Scaling
    • Auto-scaling Horizontally
    • Caching
    • Offloading to Cloud Provider Services
    • Asynchronous IO in Controllers
  • Module 2: Scaling Up Data Storage
    • NoSQL Databases
    • Optimizing for Key-based Lookups
    • Optimizing for Reads vs. Writes
    • Contention Sharding
    • Mongo DB
    • Spring Data Mongo DB
    • Database as a Service
    • Amazon Dynamo
    • Spring Data Dynamo DB
    • App Engine Big Table
  • Module 3: Automating Packaging Deployment
    • Deploying to Infrastructure as a Service
    • Deploying to Amazon EC2
    • Packaging Web Applications into WAR files
    • Adapting Spring Boot Applications for Google App Engine
    • Deploying to App Engine
  • Module 4: Performance Testing
    • Intro to Cloud Service Performance Testing
    • Apache JMeter
    • Building Realistic Tests

Section 5: Patterns and Frameworks for Concurrent and Networked Server Software [Optional Material]

  • Module 1: Introduction to the Web Server Case Study
    • Applying Patterns and Frameworks to Concurrent and Networked Software
    • Overview of JAWS Web Server Case Study: Part 1
    • Overview of JAWS Web Server Case Study: Part 2
    • Overview of JAWS Web Server Case Study: Part 3
  • Module 2: Patterns and Frameworks for Service Access and Communication
    • Accidental Complexities with the Sockets API
    • The Wrapper Facade Pattern
    • ACE C++ Socket Wrapper Facades
    • Applying the ACE Wrapper Facades to a Web Client and Server
  • Module 3: Patterns and Frameworks for Synchronous Event Handling, Connections, and Service Initialization
    • The Reactor and Acceptor-Connector Patterns
    • The ACE Reactor Framework
    • Applying the ACE Reactor to JAWS
    • The ACE Acceptor-Connector Framework and Applying it to JAWS
  • Module 4: Patterns and Frameworks for Service Configuration and Activiation
    • The Component Configurator Pattern
    • The ACE Service Configurator Framework
    • Applying the ACE Service Configurator to JAWS
    • Applying the Activator Pattern to JAWS
  • Module 5: Patterns and Frameworks for Concurrency and Synchronization
    • The Active Object Pattern
    • The ACE Task Framework
    • Applying ACE Task and Acceptor-Connector to JAWS
    • The Half-Sync/Half-Async Pattern
    • Implementing Half-Sync/Half-Async Using ACE
    • The Monitor Object Pattern
    • Applying the Monitor Object and Synchronization Patterns to JAWS
    • The Leader/Followers Pattern
    • Applying the Leader/Followers Pattern and ACE_TP_Reactor to JAWS
  • Module 6: Patterns and Frameworks for Asynchronous Event Handling
    • The Proactor pattern
    • The ACE Proactor Framework
    • Applying the ACE Proactor Framework to JAWS
    • The Asynchronous Completion Token Pattern and Applying it to JAWS
  • Module 7: Summary
    • Evaluating Patterns and Frameworks for Concurrent and Networked Software

Taught by

Douglas Schmidt and C. White

Tags

Related Courses

A Simple Picture Storing App with Java and Android Studio
Coursera Project Network via Coursera
Advanced Data Structures in Java
University of California, San Diego via Coursera
Advanced Java Concurrency
Vanderbilt University via Coursera
Advanced Monitoring and Optimizing with DynamoDB (Spanish)
Amazon Web Services via AWS Skill Builder
Advanced Monitoring and Optimizing with DynamoDB (Simplified Chinese)
Amazon Web Services via AWS Skill Builder