Integrating Firebase Into Our Application

Integrating Firebase into our application from the Course AngularJS: Adding Registration to Your Application.


Authentication is a fundamental part of any web application, but it can be notoriously difficult to implement. In this short course, you’ll create a simple registration system that allows users to log in and out of your applications. By taking advantage of Google’s Firebase authentication service, you can manage registrations easily and securely. In the process, you’ll explore working with the AngularJS application structure (including routes and controllers), storing user information into the Firebase NoSQL database, and creating services to manage registration information throughout different controllers. This will help you create a great registration template that you can use as a starting point in a variety of web applications.

Topics include:

  • Adding a basic MVC structure
  • Using routes
  • Processing form input
  • Integrating Firebase
  • Storing registration information in the database
  • Logging users in and out of an app

Realtime Database

Firebase provides a realtime database and backend as a service. The service provides application developers an API that allows application data to be synchronized across clients and stored on Firebase’s cloud. The company provides client libraries that enable integration with Android, iOS, JavaScript, Java, Objective-C and Node.js applications. The database is also accessible through a REST API and bindings for several JavaScript frameworks such as AngularJS, React, Ember.js and Backbone.js. The REST API uses the Server-Sent Events protocol, which is an API for creating HTTP connections for receiving push notifications from a server. Developers using the realtime database can secure their data by using the company’s server-side-enforced security rules.


A web API is a subset of an application programming interface (API). It is used for exchanging information with a website, either by receiving or by sending data. A web API typically consists of multiple publicly exposed endpoints that accept HTTP requests and respond with the requested data, typically in the form of JavaScript Object Notation (JSON) or Extensible Markup Language (XML).



A server-side web API is a programmatic interface to a defined request-response message system, typically expressed in JSON or XML, which is exposed via the web—most commonly by means of an HTTP-based web server. Mashups are web applications which combine the use of multiple such web APIs. Webhooks are server-side web APIs that take as input a URI that is designed to be used like a remote named pipe or a type of callback such that the server acts as a client to deference the provided URI and trigger an event on another server which handles this event thus providing a type of peer-to-peer IPC.


A client-side web API is a programmatic interface to extend functionality within a web browser or other HTTP client. Originally these were most commonly in the form of native plug-in architectures however most newer ones target standardized JavaScript bindings.

The Mozilla Foundation created their WebAPI specification which is designed to help replace native mobile applications with HTML5 applications.

Google created their Native Client architecture which is designed to help replace insecure native plug-ins with secure native sandboxed extensions and applications. They have also made this portable by employing a modified LLVM AOT compiler.

See More Resources:

Free eBook: AngularJS Programming Cookbook
Responsive Web Design with AngularJS
Firechat – Open-source real-time chat, built on Firebase
Firepad – Open source collaborative code and text editing

Build My Site

Creating Global Properties and Constants

Android, Windows, and iOS support are all required for a successful app launch. This course, revised for 2015, is one in a series that will demonstrate the similarities and differences between the three platforms via the development of a complete note-taking app. This installment uses Xcode and Apple’s Swift programming language to get the job done. Author Todd Perkins shows you how to set up your development environment, create a new app, and customize the app to support a split-screen view.

Building a Note-Taking App for Android and Building a Note-Taking App for Windows Phone 8 and Windows Store use the same assets. Compare and contrast the steps and discover the similarities and differences between the three platforms. See more: Building a Note-Taking App for iOS 9 with Swift.

Swift Programming Language

Swift is a multi-paradigm, compiled programming language created by Apple Inc. for iOS, OS X, and watchOS development. Swift is designed to work with Apple’s Cocoa and Cocoa Touch frameworks and the large body of existing Objective-C code written for Apple products. Swift is intended to be more resilient to erroneous code (“safer”) than Objective-C, and also more concise. It is built with the LLVM compiler framework included in Xcode 6, and uses the Objective-C runtime, allowing C, Objective-C, C++ and Swift code to run within a single program.

Overview of the various programming paradigms according to Peter Van Roy

Swift was introduced at Apple’s 2014 Worldwide Developers Conference (WWDC), It underwent an upgrade to version 1.2 during 2014, and a more major upgrade to Swift 2 at WWDC 2015. Initially a proprietary language, it was announced that Swift 2 would become open source later that year, supporting iOS, OS X, and Linux.

Types, variables and scoping

Under the Cocoa and Cocoa Touch environments, many common classes were part of the Foundation Kit library. This included the NSString string library (using Unicode), the NSArray and NSDictionary collection classes, and others. Objective-C provided various bits of syntactic sugar to allow some of these objects to be created on-the-fly within the language, but once created the objects were manipulated with object calls. For instance, concatenating two NSStrings required method calls similar to this:

NSString *str = @"hello,";
str = [str stringByAppendingString:@" world"];

In Swift, many of these basic types have been promoted to the language’s core, and can be manipulated directly. For instance, strings are invisibly bridged to NSString (when Foundation is imported) and can now be concatenated with the + operator, allowing greatly simplified syntax; the previous example becoming:

var str = "hello,"
str += " world"

Though omitted in the early betas, Swift supports three access control levels for symbols: public, internal, and private. Unlike many object-oriented languages, these access controls ignore inheritance hierarchies: “private” indicates that a symbol is accessible only in the containing source file, “internal” indicates it is accessible within the containing module, and “public” indicates it is accessible from any module. The decision to omit the traditional “protected” scope met with some controversy.

See more resources:

Error-Handling in Swift-Language
Protocol-oriented Programming in Swift – Apple WWDC 2015
Programming Paradigms for Dummies: What Every Programmer Should Know

Build My Site

Building a Note-Taking App for Android | Customizing the appearance of list items

Android, Windows, and iOS support are all required for a successful product. This course, revised for 2015, is one in a series that will demonstrate the platforms’ similarities and differences via the development of a complete note-taking app. This installment uses Android Studio to get the job done. Author David Gassner shows you how to create a new project in Android Studio, customize its material design themes, and create a data management layer that allows users to create, read, update, and delete notes. He also demonstrates how to build a rich user interface, create activities (aka screens), and enable action icons to control navigation.

Building a Note-Taking App for iOS 8 and Building a Note-Taking App for Windows Phone 8 and Windows Store use the same assets to develop a similar app. Compare and contrast the steps and discover the similarities and differences between the three platforms. See more about this course: Building a Note-Taking App for Android.

Topics include:

  • Understanding Android UI and data management patterns
  • Creating an Android Studio project
  • Customizing material design theme colors
  • Defining an SQLite database structure
  • Managing data with ContentProvider and Loader classes
  • Retrieving and displaying data
  • Customizing data display with a CursorAdapter
  • Creating, updating, and deleting notes
  • Preparing the app for deployment

Material Design

Material Design (codenamed Quantum Paper) is a design language developed by Google. Expanding upon the “card” motifs that debuted in Google Now, Material Design makes more liberal use of grid-based layouts, responsive animations and transitions, padding, and depth effects such as lighting and shadows. Designer Matías Duarte explained that, “unlike real paper, our digital material can expand and reform intelligently. Material has physical surfaces and edges. Seams and shadows provide meaning about what you can touch.” Google states that their new design language is based on paper and ink.

Some typical Material Design UI components

Material Design can be used in Android version 2.1 and up via the v7 appcompat library, which is used on virtually all Android devices that were made after 2009. Material Design will gradually be extended throughout Google’s array of web and mobile products, providing a consistent experience across all platforms and applications. Google has also released application programming interfaces (APIs) for third-party developers to incorporate the design language into their applications.

Google announced Material Design on June 25, 2014, at the 2014 Google I/O conference. As of 2015, most of Google’s mobile applications for Android have applied the new design language, including Gmail, YouTube, Google Drive, Google Docs, Sheets and Slides, Google Maps, Inbox, all of the Google Play-branded applications, and to a smaller extent the Chrome browser and Google Keep. The desktop web interfaces of Google Drive, Docs, Sheets, Slides and Inbox have incorporated it as well.


The canonical implementation of Material Design for web application user interfaces is called polymer paper elements. It consists of the Polymer library, a shim that provides a Web Components API for browsers that do not implement the standard natively, and the so-called “paper elements collection”.

See more resources:

Material Design Resources and Inspiration
Material Design Lite – A Giant Library of Web Components
Lessons Learned From Analyzing Material Design Components

Build My Site

Building the Node.js Server App

Socket technology is a natural fit for presentation and chat applications. This course helps you use Socket IO in combination with powerful JavaScript libraries to develop an interactive polling application that processes data in real time, allowing presenters to interact with audience members and graph their responses. Alex Banks shows each step in the process, starting with setting up the node environment and express app for development. You’ll then create and connect sockets for real-time data sharing and set up routing and interface elements with React.js, refactoring those components for ES6 integration. This setup will allow you to program functionality for running presentations, joining presentations, asking and answering questions, and graphing the results of the poll. See more: Building a Polling App with Socket IO and React.js.

Topics include:

  • Setting up the environment
  • Connecting sockets
  • Handling disconnects
  • Setting up the React.js router
  • Passing state to child components as properties
  • Joining the presentation
  • Starting and running the presentation
  • Asking and answering questions
  • Graphing results
  • Upgrading to ES6


Node.js allows the creation of web servers and networking tools using JavaScript and a collection of “modules” that handle various core functionality. Modules handle file system I/O, networking (HTTP, TCP, UDP, DNS, or TLS/SSL), binary data (buffers), cryptography functions, data streams, and other core functions. Node’s modules use an API designed to reduce the complexity of writing server applications.

Frameworks can be used to accelerate the development of applications, and common frameworks are Express.js, Socket.IO and Connect. Node.js applications can run on Microsoft Windows, Unix, NonStop and Mac OS X servers. Node.js applications can alternatively be written with CoffeeScript (an alternative form of JavaScript), Dart or Microsoft TypeScript (strongly typed forms of JavaScript), or any language that can compile to JavaScript.

Smashing Node.js: JavaScript Everywhere–Free Sample Chapters


Node.js is primarily used to build network programs such as web servers, making it similar to PHP and Python. The biggest difference between PHP and Node.js is that PHP is a blocking language, where commands execute only after the previous command has completed, while Node.js is a non-blocking language where commands execute in parallel, and use callbacks to signal completion.

Node.js implements event-driven programming for web applications in JavaScript. Developers can create highly scalable servers without using threading, by using a simplified model of event-driven programming that uses callbacks to signal the completion of a task. Concurrency is difficult in many server-side programming languages, and often leads to poor performance. Node.js is designed to use the scripting language JavaScript for Unix network programming.

Thousands of open-source libraries have been built for Node.js, most of which are hosted on the npm website. Its developer community has two main mailing lists and the IRC channel #node.js on freenode.

See more resources:

private npm is here
Node.js – A Simple Tutorial With Example
node.js domains make my app predictably fixable

Build My Site

What is Flexbox?

The CSS Flexible Box Layout module (aka Flexbox) provides a simple solution to many of the design and layout problems web designers and developers have faced since the advent of CSS. Now that the module is becoming ready for the main stage, it’s time to look at what we can do with it.

This course shows how to use flexible boxes to create advanced responsive layouts. Morten Rand-Hendriksen takes the viewer on a tour of Flexbox and provides actionable code snippets that can be implemented safely in almost any website. He puts it all together in a holy grail site complete with card-based layout, mixed content menus, and interactive components that provide visitors with choices about what they see. See more: Advanced Responsive Layouts with CSS Flexbox. For beginners see: CSS: Flexbox First Look.

Topics include:

  • Creating Flexbox-powered menus
  • Building a responsive card layout
  • Marking up and styling the holy grail layout
  • Changing displays
  • Showing and hiding the sidebar
  • Animating content

CSS Flex Box Layout

CSS Flex Box Layout is the latest layout model coming to CSS3. It is in the W3C’s Candidate Recommendation (CR) stage. The new flex layout allows elements within a container to be arranged in a way fitting to the screen or device that it is being viewed on. Unlike the block layout mode, the flex layout lacks the functionality of columns and floats. It does, however, allow more flexibility in the layout of the content within the container.



One of the most defining features of the flex layout is its ability to form-fit, based on its viewing environment. Flex boxes can adjust in size—either decreasing, to avoid unnecessarily monopolizing space, or increasing to make room for contents to be constrained within its boundaries. Moreover, the flex layout is less restrictive in terms of content flow than those, for example, of the block and inline display types, which are generally uni-directional. Indeed, not only can flex directional flow be specified, at the style level, as rightwards, leftwards, upwards, or downwards; individual items within a flex container may also be automatically reordered and rearranged to suit the available layout space.

Browser Compatibility


Designate a flex box

Designating an element as a flex element is relatively easy. All that is necessary is to set the display property to either flex or inline-flex as follows:

display: flex;


display: inline-flex;

By setting the display to one of the two values above, an element becomes a flex container and its children flex items. Setting the display to flex makes the container a block-level element, while setting the display to inline-flex makes the container an inline-level element.

See More Resources:

Using CSS flexible boxes
A Complete Guide to Flexbox

Build My Site

Understanding Basic Ionic CSS Components

Creating hybrid mobile applications is a great way to leverage your knowledge of web languages like HTML5, CSS, and JavaScript. Modern frameworks such as AngularJS and Ionic make it easier with pre-built templates and components. In this course, staff author Ray Villalobos shows how to install the Ionic framework and set up a development environment suitable for building web-based apps. He reviews the core Ionic components: pre-built, easy-to-use features such as buttons, lists, tabs, and forms. Then Ray shows how to combine these components with Angular.js models, views, and controllers to build a single page app with sliders, pull-to-refresh functionality, and search. The training culminates in building a multi-page app, which you’ll learn how to customize with CSS. See more: Building a Mobile App with AngularJS and Ionic.

Topics include:

  • Installing the development environment on Mac or PC
  • Understanding the Ionic templates and CSS components
  • Adding IonicIcons to a layout
  • Adding tabs, cards, and lists
  • Using form elements
  • Building a single view app
  • Implementing Pull to Refresh
  • Creating a multi-tab app
  • Styling the applications
  • Deploying applications


Ionic (mobile app framework)

Ionic is a complete open-source SDK for hybrid mobile app development. Built on top of AngularJS and Cordova, Ionic provides tools and services for developing hybrid mobile apps using web technologies like HTML5, CSS, and Sass. Apps can be built with these web technologies and then distributed through native app stores to be installed on devices by leveraging Apache Cordova. Ionic was created by Max Lynch, Ben Sperry, and Adam Bradley of Drifty Co. in 2013, and is used by software developers around the world.

Ionic provides all the functionality that can be found in native mobile development SDKs. Users can build their apps, customize them for iOS or Android, and deploy through Cordova. Ionic includes mobile components, typography, interactive paradigms, and an extensible base theme.

Using Angular, Ionic provides custom components and methods for interacting with them. One such component, collection repeat, allows users to scroll through a list of thousands of items without any performance hits. Another component, scroll-view, creates a scrollable container with which users can interact using a native-influenced delegate system.

Developers can programmatically control the scroll-view to get the scroll position, scroll to bottom/top, zoom, or get information about the current scroll-view instances.


Besides the SDK, Ionic also provides services that developers can use to enable features, such as push notifications, A/B testing, analytics, code deploys, and automated builds.

Ionic also provides a powerful CLI, so developers can get started and create a project with a simple command. The CLI also allows developers to add Cordova plugins and additional front-end packages, enable push notifications, generate app Icons and Splash screens, and build native binaries. It is also managed through Github.

Supported Platforms

Ionic is focused on building for modern web standards and for modern mobile devices. For iOS, Ionic supports iOS 7 and up. For Android, Ionic supports Android 4.1 and up.

See more resources:

How To Handle User Authentication With AngularJS Inside Your Ionic App
Simple login example with ionic and AngularJS

Build My Site

Tracking our navigation with ScrollSpy and jQuery

Find out how Bootstrap can transform your standard HTML websites into inspired single-page designs. This course is a project-based approach to learning how to manipulate website layouts with the Bootstrap framework. Staff author Ray Villalobos tackles Bootstrap’s layout classes, like containers, rows, and columns, and shows what it takes to customize Bootstrap’s CSS and address layout challenges like multiple grids and columns. Plus, learn how to track navigation as users scroll, with the ScrollSpy plugin, and create a full-screen, responsive image carousel. See more at: Bootstrap Layouts: Responsive Single-Page Design.

Topics include:

  • Analyzing your markup
  • Creating simple column layouts
  • Creating basic navigation and a simple carousel
  • Modifying Bootstrap styles
  • Working with branding and toggle styles
  • Adding interactivity

Uses for Bootstrap

To use Bootstrap in an HTML page, the developer downloads the Bootstrap CSS stylesheet and includes a link in the HTML file.

(The developer can also compile the CSS file from the downloaded Less or Sass stylesheets, with a special compiler.)

If the developer wants to use the JavaScript components, they must be referenced along with the jQuery library in the HTML document.

The following example illustrates how this works. The HTML code defines a simple search form and a list of results in tabular form. The page consists of HTML 5 elements and CSS information according to the Bootstrap documentation.

A view of the example using Bootstrap, rendered in Google Chrome
<!DOCTYPE html>
    <title>Example of Twitter Bootstrap</title>
    <!-- Include the bootstrap stylesheets -->
    <link href="" rel="stylesheet">
    <div class="container">
      <label>Example for a simple search form.</label>
      <!-- Search form with input field and button -->
      <form class="well form-search">
        <input type="text" class="input-medium search-query">
        <button type="submit" class="btn btn-primary">Search</button>
      <!-- Table with alternating cell background color and outer frame -->
      <table class="table table-striped table-bordered">
            <td>Lorem ipsum dolor ...</td>
            <td>Ut enim ad minim veniam, ...</td>
            <td>Duis aute irure dolor ...</td>
    <!-- JavaScript placed at the end of the document so the pages load faster -->
    <!-- Optional: Include the jQuery library -->
    <script src=""></script>
    <!-- Optional: Incorporate the Bootstrap JavaScript plugins -->
    <script src=""></script>
Example of a webpage using Bootstrap framework rendered in Mozilla Firefox

Creating a simple fluid layout grid

    <div class="row">
       <div class="col-md-4">Text for column 1</div>
       <div class="col-md-4">Text for column 2</div>
       <div class="col-md-4">Text for column 3</div>

This will create three columns of equal width. This is a fluid layout: If the columns are too wide to fit on the screen, they will be stacked automatically.

See more resources:

Creating a Responsive Menu in WordPress for Mobile Devices
Flat UI Pro – Bootstrap Design Framework
Bootstrap grid examples
jQuery ScrollSpy

Build My Site

JavaScript Templating | What is Templating?

JavaScript templates take simple web apps to the next level, keeping your application logic separate from your presentation and your HTML and JS files clean. This course provides a look at popular JavaScript template solutions for modern web apps that consume and display data. Joe Marini reviews four popular templating libraries: JQuery Template, a simple solution that plugs straight into jQuery; Handlebars and Mustache, which provide greater flexibility; and Dust, the templating engine for more complex scenarios. Watch more at: JavaScript Templating.

Topics include:

  • What is templating?
  • Defining templates in jQuery Template
  • Using simple Mustache templates with sections and conditions
  • Adding conditionals and loops to Handlebars templates
  • Working with Dust templates

JavaScript Templating

JavaScript templating refers to the client side data binding method implemented with the JavaScript language. This approach became popular thanks to JavaScript’s increased use, its increase in client processing capabilities, and the trend to outsource calculus to the client’s web browser. Popular JavaScript templating libraries are AngularJS, Backbone.js, Ember.js, Handlebars.js, and Mustache.js. A frequent practice is to use double curly brackets (i.e. {{key}}) to call values of the given key from data files, often JSON objects.

Template Engine

The template engine is responsible for:

  • connecting to the data model;
  • processing the code specified in the source templates; and
  • directing the output to a specific pipeline, text file, or stream.

Additionally some template engines allow additional configuration options. A template engine is ordinarily included as a part of a web template system or application framework, and may be used also as preprocessor or filter.


A diagram illustrating all of the basic elements and processing flow of a template engine.

A template engine is a specific kind of template processing module that exhibits all of the major features of a modern programming language. The term template engine evolved as a generalized description of programming languages whose primary or exclusive purpose was to process templates and data to output text. The use of this term is most notably applied to web development using a web template system, and it is also applied to other contexts as well.

Benefits of using template engines

  • encourages organization of source code into operationally-distinct layers (see e.g., MVC)
  • enhances productivity by reducing unnecessary reproduction of effort
  • enhances teamwork by allowing separation of work based on skill-set (e.g., artistic vs. technical)

Templating becomes useful when the information distributed may change, is too large to be maintained in various HTML pages by available human resources and not large enough to require heavier server-side templating.

See more resources:

JavaScript Templates, Mozilla Developer Network
The client-side templating throwdown: mustache, handlebars, dust.js, and more
Best Practices When Working With JavaScript Templates

Build My Site

Introduction to the “Internet of Things”

In this course, Michael Lehman shows how to program these “things” and build companion apps to monitor and record their activities from iOS devices. Learn what’s inside a thing, how location-awareness technologies such as iBeacon connect the IoT in public spaces, and how you can create your own things with hardware like the Arduino and Raspberry Pi kits. Michael also shows how to use IFTTT services to control things on iOS, and muses on the future of IoT. Along the way, you’ll gain experience with real-world IOT-driven projects, like a mini weather station and a home lighting system. Watch more at: Programming the Internet of Things with iOS.

Topics include:

  • Exploring the IoT universe
  • Understanding sensors and effectors
  • Connecting inputs and outputs
  • Connecting to devices via Wi-Fi or Bluetooth
  • Using Apple iBeacon
  • Creating your own things with programmable hardware
  • Using IFTTT to program things
  • Exploring trends in IoT

Internet of Things

What are the “things”?

The “things” are programmable devices such as: home appliances, measuring environmental conditions (a thermostat turning the heat on at a specified temperature), automobiles, home security, headphones, audio, our phones, web applications, and almost anything you can imagine! Yes, you can program your own “thing” to do simple tasks for you.

internet of things

IFTTT (abbreviation of “If This Then That“) pronounced like “gift” without the “g”, is a web-based service which allows other services (e.g., Gmail, Google Reader, Instagram, Craigslist) to be programmed by means of simple conditional statements (called “recipes”).

IFTTT employs the following concepts:

  • Channel is called “basic building blocks of IFTTT”, it mainly describes a series of data from a certain web service such as Youtube or ebay. Beside, it can also describe some certain actions controlled with application program interface (API) like SMS. Sometimes, it means information supply in terms of weather or stocks. There are particular triggers and actions in each channel. Right now, 140 channels are available in total.
  • Recipe just means ” If this then that”. A recipe combines an action and a trigger in a specific channel. Users may create their own recipes. If any picture liked by you in Instagram, for example, the photo will be sent to your Dropbox file and saved in it.
  • Trigger is the “this” part of a recipe. It describes an assumptive event which could result in an action. What triggers you can choose always depend on which channel you select, for example, picking a RSS feed, you can select a new one that relates to reserved words.
  • Action is the “that” part of a recipe. It describes a consequence led by a specific trigger. Some examples are “save the graph in my file” or “the alarm rings”.
  • Ingredients are basic elements from a trigger. As the IFTTT official website gave an example: “The Ingredients of an Email Trigger could be: subject, body, attachment, received date, and the sender’s address.”

Usage examples

  • IFTTT can automatically automate web-application tasks, such as posting the same content on several social media.
  • IFTTT can be used to connect web applications and provide new functionality.

See more resources:

iOS 8 SDK New Features
Building a Note-Taking App for iOS 8
iOS App Development with Swift Essential Training
Disruptive IoT Innovation: Adding Value to Connected Devices
The Internet of Things – the way to sense, compute & connect

Build My Site

Elements of an Android App

Creating an app for Android doesn’t require a full-blown integrated development environment. There are several simple, easy-to-learn and easy-to-use tools that make programming Android apps a breeze. Michael Lehman introduces MIT App Inventor 2, Basic4android, and a few other entry-level development environments to build your own app. He’ll show how to test apps on an Android emulator or directly on your phone or tablet, and demonstrate tools for building hybrid apps that run on Android, Windows Phone, and iOS devices, as well as straight on the web. Start building your first app with these simple tools today. See more at: Simple Android Development Tools.

Topics include:

  • Understanding the elements of an Android app, such as controls, sensors, effectors, and storage
  • Exploring MIT App Inventor 2
  • Getting started with Basic4android
  • Building simple apps
  • Testing apps on Android emulators and devices
  • Sharing apps
  • Creating hybrid apps with Appy Pie, Make Me Droid, and AppMakr

App Inventor for Android

Google App Inventor
App Inventor for Android is an open-source web application originally provided by Google, and now maintained by the Massachusetts Institute of Technology (MIT).

It allows newcomers to computer programming to create software applications for the Android operating system (OS). It uses a graphical interface, very similar to Scratch and the StarLogo TNG user interface, which allows users to drag-and-drop visual objects to create an application that can run on Android devices. In creating App Inventor, Google drew upon significant prior research in educational computing, as well as work done within Google on online development environments.

App Inventor and the projects on which it is based are informed by constructionist learning theories, which emphasizes that programming can be a vehicle for engaging powerful ideas through active learning. As such, it is part of an ongoing movement in computers and education that began with the work of Seymour Papert and the MIT Logo Group in the 1960s and has also manifested itself with Mitchel Resnick’s work on Lego Mindstorms and StarLogo.

App Inventor includes:

  • A designer, in which a program’s components are specified. This includes visible components, such as buttons and images, which are placed on a simulated screen, and non-visible components, such as sensors and web connections.
  • A blocks editor, in which the program’s logic is created.
  • A compiler based on the Kawa language framework and Kawa’s dialect of the Scheme programming language, developed by Per Bothner and distributed as part of the GNU operating system by the Free Software Foundation.
  • An app for real-time debugging on a connected Android device.

On December 6, 2013 (the start of the Hour of Code), MIT released App Inventor 2, renaming the original version “App Inventor Classic” Major differences are:

  • The blocks editor in the original version ran in a separate Java process, using the Open Blocks Java library for creating visual blocks programming languages.
    Open Blocks is distributed by the Massachusetts Institute of Technology’s Scheller Teacher Education Program (STEP) and is derived from master’s thesis research by Ricarose Roque. Professor Eric Klopfer and Daniel Wendel of the Scheller Program supported the distribution of Open Blocks under an MIT License. Open Blocks visual programming is closely related to StarLogo TNG, a project of STEP, and Scratch, a project of MIT Media Laboratory’s Lifelong Kindergarten Group. App Inventor 2 replaced Open Blocks with Blockly, a blocks editor that runs within the browser.
  • The | MIT AI2 Companion app enables real-time debugging on connected devices via Wi-Fi, not just USB.

As of May 2014, there were 87 thousand weekly active users of the service and 1.9 million registered users in 195 countries for a total of 4.7 million apps built.

Build My Site