Building a Data-Driven App with AngularJS | Creating Your First Controller

Want to create web applications that can handle multiple users, registration, and real-time data? With these AngularJS tutorials, you’ll be quickly building apps with advanced features like these. Ray Villalobos starts the course with a Git, Node.js, and GitHub setup that will get you off on the right foot. Next, learn how to create your first controller, connect a Firebase database, and read, push, and delete data from that database. Ray then shows you how to set up user registration with Firebase’s simpleLogin service, so you can log users in and out and pass registration data back and forth from the app. With a few finishing touches, like custom directives, your Angular app will be ready to publish. Watch more: Building a Data-Driven App with AngularJS.

Note: This course was revised in March 2015 to reflect changes to Firebase’s database and simpleLogin services.

Topics include:

  • Installing Git and Node.js on Mac or Windows
  • Installing AngularJS and its models
  • Creating modules and routes
  • Working with controllers
  • Connecting to Firebase data
  • Adding user registration
  • Searching, filtering, and deleting records
  • Creating custom directives

Controllers

This is an excerpt from: LEARN ANGULAR BY BUILDING A GMAIL CLONE

Controllers are the middleman between the Model and the View, they drive the Model and View changes. Imagine that the controller is given some html from the route and a Javascript object from the dependency injection; with these two things, the controller will tell the view (the html) what it can do by giving it scope variables and maybe a few functions.

controllers

Let’s take a peek at what a Controller looks like.

A good Controller will have as little logic in it as possible, and should only be used for two things: Binding the Model to the View (initializing the View) and adding helper functions to the View.

app.controller('InboxCtrl', function () {
	
              // Model and View bindings
	     // Small helper function not needed anywhere else
});

If you go through the Angular documentation examples (available at AngularJS.org) you’ll notice Model data being declared in the Controller. While this is okay for examples, the Controller easily becomes the Model as well – which is very bad for many reasons:

  • All the pieces start to get more coupled together
  • More difficult to share business logic
  • Makes things difficult to test

Remember: A good Controller will have as little logic in it as possible.

Each controller has access to a $scope and some html. $scope is the most documented way of adding properties and methods to our view. Remember how we said each ‘ng-controller’ attribute specifies a scope of HTML to manage? Well, that scope has access to the same $scope as the Controller function.

Note: $scope isn’t the only way to pass data to the front end. Many developers use a combination of the “Controller As” configuration options along with the this keyword. For the purpose of this tutorial, we will stick with $scope as it’s been around for much longer than ‘Controller As’.

app.controller('InboxCtrl', function ($scope) {
	// initialize the title property to an array for the view to use
	$scope.title = "This is a title";
});

Note: Notice we’re injecting $scope inside the function.

We can then use this like so:

<div ng-controller="InboxCtrl">
	{{ title }}
</div>

Note: Here we’re accessing the title directly, however it is encouraged to always have at least one dot (.) in our view expression properties. Using the “controller as” with this syntax would solve this giving us the . like so . More info here.

In order to keep our controllers more reusable, we would hook up data in our controller via a Factory or Service.

See more resources:

Understanding Backbone and other Model-View-Controller (MVC) Libraries
Installing AngularJS, plus modules
Realtime AngularJS Pub/Sub Messaging using PubNub

Website:
Build My Site

Developing for the MEAN Stack and MongoDB – Using the Cloud9 Platform

The MEAN stack is a collection of tools for building robust web applications with JavaScript. It includes four main ingredients: MongoDB, ExpressJS, AngularJS, and Node.js. In this course, Michael Sullivan shows you what it “means” to develop on the MEAN stack, walking through setup, user authentication and security, routing, controller and view creation, data storage, and more—all the way up to app deployment. By the end of the course, you’ll have a clear picture of the MEAN stack workflow and its many advantages, including enhanced performance and the convenience of using a single programming language across every layer of your application. See more: Developing for the MEAN Stack and MongoDB

Topics include:

  • Getting your Node.js development environment set up
  • Creating an Express application
  • Configuring user authentication and strong password hashing
  • Accessing MongoDB collections in the shell and with Mongoose
  • Building a mini SPA (single-page application) with AngularJS
  • Adding custom form validation with AngularJS
  • Deploying an app to Heroku

MEAN

Cloud9 IDE

Cloud9 IDE is a freeware online integrated development environment. It supports more than 40 programming languages, including PHP, Ruby, Python, JavaScript with Node.js, and Go. It enables developers to get started with coding immediately with pre-setup workspaces, collaborate with their peers with collaborative coding features, and web development features like live preview and browser compatibility testing.

It is written almost entirely in JavaScript, and uses Node.js on the back-end. The editor component uses Ace. As of July 2014, it uses Docker containers for its workspaces, and is hosted on Google Compute Engine.

MEAN

The MEAN Stack:

MongoDB is a cross-platform document-oriented database. Classified as a NoSQL database, MongoDB eschews the traditional table-based relational database structure in favor of JSON-like documents with dynamic schemas (MongoDB calls the format BSON), making the integration of data in certain types of applications easier and faster. Released under a combination of the GNU Affero General Public License and the Apache License, MongoDB is free and open-source software.

Express.js is a Node.js web application framework, designed for building single-page, multi-page, and hybrid web applications.

AngularJS, commonly referred to as Angular, is an open-source web application framework maintained by Google and a community of individual developers and corporations to address many of the challenges encountered in developing single-page applications. Its goal is to simplify both development and testing of such applications by providing a framework for client-side model–view–controller (MVC) architecture, along with components commonly used in rich internet applications.

Node.js is an open source, cross-platform runtime environment for server-side and networking applications. Node.js applications are written in JavaScript, and can be run within the Node.js runtime on OS X, Microsoft Windows, Linux, FreeBSD, and IBM i. Node.js provides an event-driven architecture and a non-blocking I/O API that optimizes an application’s throughput and scalability. These technologies are commonly used for real-time web applications.

See more resources:

Creating controllers and views in AngularJS
Single page Application with Angularjs, Minimalweb Node MVC and MongoDB
Delving into Node.js and Express web framework

Website:
Build My Site

Understanding Backbone and other Model-View-Controller (MVC) Libraries

Backbone.js is the key to keeping your JavaScript code neat, and separating your markup from the data powering your web applications. Although it has fantastic server-side capabilities, this course focuses on the most relevant features for front-end developers and web designers that want to learn how to build out their web pages and keep their code organized, move away from the DOM, and use Backbone’s useful JavaScript library. Start here and learn how to use models and collections to manage your data, and display it on your web page with views. Then use events and routers to create navigational logic in your web app. Author Kai Gittens shows you just what you need to get up and running with Backbone.js and get the job done. See more: Up and Running with Backbone.js.

Topics include:

  • What is Backbone.js?
  • Understanding how MVC libraries work
  • Adding properties to a model
  • Creating a collection of models
  • Adding properties to a model view
  • Loading model data on a web page
  • Configuring routes
  • Finding Backbone resources

Backbone.js is a JavaScript library with a RESTful JSON interface and is based on the model–view–presenter (MVP) and Actor model application design paradigm. Backbone is known for being lightweight, as its only dependency is on one JavaScript library, Underscore.js. It is designed for developing single-page web applications,(SPA) and for keeping various parts of web applications (e.g. multiple clients and the server) synchronized. Backbone was created by Jeremy Ashkenas, who is also known for CoffeeScript.

Model View Controller (MVC)

Model–view–controller (MVC) is a software architectural pattern for implementing user interfaces. It divides a given software application into three interconnected parts, so as to separate internal representations of information from the ways that information is presented to or accepted from the user.

backbone

Components

The central component of MVC, the model, captures the behavior of the application in terms of its problem domain, independent of the user interface. The model directly manages the data, logic and rules of the application. A view can be any output representation of information, such as a chart or a diagram; multiple views of the same information are possible, such as a bar chart for management and a tabular view for accountants. The third part, the controller, accepts input and converts it to commands for the model or view.

Interactions

In addition to dividing the application into three kinds of components, the model–view–controller design defines the interactions between them.

  • A controller can send commands to the model to update the model’s state (e.g., editing a document). It can also send commands to its associated view to change the view’s presentation of the model (e.g., by scrolling through a document).
  • A model notifies its associated views and controllers when there has been a change in its state. This notification allows the views to produce updated output, and the controllers to change the available set of commands. In some cases an MVC implementation may instead be ‘passive’ and other components must poll the model for updates rather than being notified.
  • A view requests information from the model that it uses to generate an output representation to the user.

Use in web applications

Although originally developed for desktop computing, model–view–controller has been widely adopted as an architecture for World Wide Web applications in major programming languages. Several commercial and noncommercial web application frameworks have been created that enforce the pattern. These frameworks vary in their interpretations, mainly in the way that the MVC responsibilities are divided between the client and server.

Early web MVC frameworks took a thin client approach that placed almost the entire model, view and controller logic on the server. In this approach, the client sends either hyperlink requests or form input to the controller and then receives a complete and updated web page (or other document) from the view; the model exists entirely on the server. As client technologies have matured, frameworks such as AngularJS, Ember.js, JavaScriptMVC and Backbone have been created that allow the MVC components to execute partly on the client (also see Ajax).

Website:
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.

ScrollSpy

A view of the example using Bootstrap, rendered in Google Chrome

<!DOCTYPE html>
<html>
  <head>
    <title>Example of Twitter Bootstrap</title>
    <!-- Include the bootstrap stylesheets -->
    <link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
  </head>
 
  <body>
    <div class="container">
      <h1>Search</h1>
      <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>
      </form>
 
      <h2>Results</h2>
 
      <!-- Table with alternating cell background color and outer frame -->
      <table class="table table-striped table-bordered">
        <thead>
          <tr>
            <th>#</th>
            <th>Title</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>1</td>
            <td>Lorem ipsum dolor ...</td>
          </tr>
          <tr>
            <td>2</td>
            <td>Ut enim ad minim veniam, ...</td>
          </tr>
          <tr>
            <td>3</td>
            <td>Duis aute irure dolor ...</td>
          </tr>
        </tbody>
      </table>
    </div>
    <!-- JavaScript placed at the end of the document so the pages load faster -->
    <!-- Optional: Include the jQuery library -->
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
 
    <!-- Optional: Incorporate the Bootstrap JavaScript plugins -->
    <script src="http://netdna.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
  </body>
</html>
ScrollSpy

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>
    </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
ScrollSpy
jQuery ScrollSpy

Website:
Build My Site

Try jQuery (Level 1) at Code School

Learn the basic building blocks of jQuery 2.0 and enjoy new video tutorials for beginners with related programming challenges. “Learn by Doing”, at Code School. Play the entire course: Try jQuery at Code School

jQuery

Usage styles

jQuery has two usage styles:

  • Via the $ function, which is a factory method for the jQuery object. These functions, often called commands, are chainable as they all return jQuery objects.
  • Via $. -prefixed functions. These are utility functions, which do not act upon the jQuery object directly.

Access to and manipulation of multiple DOM nodes in jQuery typically begins with calling the $ function with a CSS selector string. This returns a jQuery object referencing all the matching elements in the HTML page. $(“div.test”), for example, returns a jQuery object with all the div elements of class test. This node set can be manipulated by calling methods on the returned jQuery object or on the nodes themselves.

No-Conflict Mode

jQuery also includes .noConflict() mode, which relinquishes control of $. This can be helpful if jQuery is used with other libraries that also use $ as an identifier. In no-conflict mode, developers can use jQuery as a replacement for $ without losing functionality.

Typical start-point

The typical jQuery usage is to put initialization code and event handling functions in .ready(). This is triggered when the browser has constructed the DOM and sends a load event.

<script type="text/javascript">
$(document).ready(function(){
        // jQuery code, event handling callbacks here
});
</script>

Callback functions for event handling are also included inside .ready() as anonymous functions but called when the event for the callback is triggered. For example, the following jQuery code adds an event handler for a mouse click on an img image element.

$(document).ready(function(){
        $('img').click ( function() { 
              // handle the click event on any img element in the page
        });
});

The following syntaxes are equivalent:

  • $(document).ready(handler)
  • $(handler)

Chaining

Each jQuery command returns a jQuery object, so commands can be chained:

$("div.test").add("p.quote").addClass("blue").slideDown("slow");

This line finds the union of all div tags with class attribute test and all p tags with class attribute quote, adds the class attribute blue to each matched element, and then increases their height with an animation. The $ and add functions affect the matched set, while the addClass and slideDown affect the referenced nodes.

Creating new DOM elements

Besides accessing DOM nodes through jQuery object hierarchy, it is also possible to create new DOM elements if a string passed as the argument to $() looks like HTML. For example, this line finds an HTML select element with ID carmakes, and adds an option element with value “VAG” and text “Volkswagen”:

$('select#carmakes').append($('<option />').attr({value:"VAG"}).append("Volkswagen"));

See more resources:

JavaScript
Your first jQuery-enabled page
Up and Running with jQuery UI

Website:
Build My Site

CSS: Animation Basics

This course presents a short series of CSS animation techniques, such as looping, playing, and pausing, and puts them together in a small project: an animated infographic. Author Val Head also addresses using CSS preprocessors, adding transitions, handling vendor prefixes, and understanding the best uses for CSS animations. Plus, discover how to measure the performance and current level of browser support for CSS animations and how we can expect the technology to change. See more: CSS Video Courses and Tutorials from lynda.com.

Topics include:

  • Understanding delay and fill-mode
  • Dictating an animation’s direction
  • Using easing
  • Adding keyframes
  • Looping an animation
  • Chaining multiple animations on one element
  • Setting up the HTML structure
  • Adding interactivity with JavaScript

CSS Animations

CSS Animations affect computed property values. During the execution of an animation, the computed value for a property is controlled by the animation. This overrides the value specified in the normal styling system. Animations override all normal rules, but are overriden by !important rules.

If at one point in time there are multiple animations specifying behavior for the same property, the animation whose name occurs last in the value of ‘animation-name’ will override the other animations at that point.

An animation does not affect the computed value before the application of the animation, before the animation delay has expired, and after the end of the animation.

css

Computation of animated property values

The diagram above shows how property values are computed. The intrinsic style is shown at the top of the diagram. The computed value is derived from intrinsic style at the times when an animation is not running and also when an animation is delayed (see below for specification of animation delay). During an animation, the computed style is derived from the animated value.

An animation applies to an element if the element has a value for ‘animation-name’ that references a valid keyframes rule. Once an animation has started it continues until it ends or the ‘animation-name’ is removed. The values used for the keyframes and animation properties are snapshotted at the time the animation starts. Changing them during the execution of the animation has no effect. Note also that changing the value of ‘animation-name’ does not necessarily restart an animation (e.g., if a list of animations are applied and one is removed from the list, only that animation will stop; The other animations will continue). In order to restart an animation, it must be removed then reapplied.

The end of the animation is defined by the combination of the ‘animation-duration’, ‘animation-iteration-count’ and ‘animation-fill-mode’ properties.

Some Examples of CSS Transitions and Animations

I have seen some remarkable work done purely with CSS, no additional graphics. Developers and designers are doing some amazing things with CSS. CSS is a powerful language. Below, I have compiled some of the most intriguing and inspirational projects using only CSS. They are all really good but the first one is truly my favorite!

The Simpsons in Pure CSS by Chris Pattle

See the Pen azBbEL by Darlene Tate (@D-Pens) on CodePen.



CSS Animated Gallery With Persistent Images By Dudley Storey

See the Pen CSS Animated Gallery With Persistent Images by Dudley Storey (@dudleystorey) on CodePen.

3D Solar System by Julian Garnier

See the Pen CSS 3D Solar System by Julian Garnier (@juliangarnier) on CodePen.

CSS Animate By Kevin Bourke (changing animation and colour using keyframes)

See the Pen CSS Animations by Kevin Bourke (@bourkekev) on CodePen.

See more resources:

The guide to CSS animations for the web
CSS 3D Folding Animation
CSS Animation Tricks: State Jumping, Negative Delays, Animating Origin, and More

Website:
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.

templating

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

Website:
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

Website:
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

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.

Website:
Build My Site

MIT Opencourseware – OCW

MIT OpenCourseWare makes the materials used in the teaching of almost all of MIT’s subjects available on the Web, free of charge. With more than 2,200 courses available, OCW is delivering on the promise of open sharing of knowledge.

More Resources:

Women in STEM
Up and Running with C
A Gentle Introduction to Programming Using Python
New Course: Object-Orientated Python

Website:
Build My Site