# Overview of Rich Internet Applications

According to the Wikipedia entry "Rich Internet Application,"
Macromedia, the software company which makes, among other programs, Flash and Dreamweaver, is credited with introducing this term in a 2002 whitepaper.
RIAs represent a set of technologies that SLA researchers can use to create on-line environments. This section of the RIA Wikibook will present a specific set of technologies which may be used for research into individual, pair, and group second language acquisition.

## Relevant Technologies
### Flash MX 2004

Flash MX 2004 (hereafter, "Flash") is an authoring program which allows users to create applications (often called "movies" in the Flash literature) with varied user interfaces (UI), featuring still and animated graphics as well as audio elements. It features drawing tools (e.g. lines, boxes, ovals, shading, paint brushes), an animation timeline, and a programming language, ActionScript (version 2.0), which is based on the proposed standard for version 1.5 of Javascript. Applications authored with Flash are exported as Shockwave files (with .swf extension), which may then be run by the Flash Player plug-in or a stand-alone player.
GUI resources include...
* text fields (both plain text and HTML)
* buttons
* movie clips
* audio and video display and capture objects
* custom mouse pointers
* pull-down menus

#### Example GUI Designs

Text Chat: A collaborative application (see discussion of Flash Communication Server) may be easily authored using a multi-line text field (for display of the transcript), a single-line text field (for entry of messages), and a button (for sending a new message entered in the single-line text field).
Total Physical Response (TPR) Tasks: A solitary activity might use a collection of so-called "drag-and-drop" movie clips as items to be manipulated in response to text and/or audio prompts. Feedback would be provided when each item is moved to the proper location. For example, a learner might hear "Place the table to the left of the chair." Placing the table anywhere except to the left of the chair would result in the application informing the user that the table had been misplaced.
Asynchronous Audio/Video Electronic mail: Flash's audio and/or video capturing functions make it possible for learners to save their speech for later listening and viewing by others (i.e., partners or researchers).

### Flash Communication Server

Flash Communication Server 1.5 (hereafter, "FlashComm") provides real-time audio, video, and data exchange between connected applications running in the Flash Player plug-in from Macromedia. FlashComm servers may also interact with other FlashComm or web servers (e.g., the Apache server) in order to access dynamically generated data via a scripting language such as PHP, Perl, or ColdFusion. Such interaction is frequently used to retrieve, add, or update information to a database (e.g., MySQL or PostgreSQL). Though this scripting and database interaction is also available to SWF files running in the Flash Player, routing the interactions through FlashComm may be preferable when the results of each interaction should update all clients or when extra layers of security are desired.

### PHP

One of the possible readings of "P" in the common acronym "LAMP" (the first three letters standing for "Linux," "Apache," and "MySQL"), PHP is a scripting language that features a broad variety of capabilities such as text searching, database connections, file management, and HTML form processing (via CGI). In general, the LAMP suite of software is popular because it is free for anyone wishing to set up their own web hosting, and it allows web hosting companies to offer very cheap (under six U.S. dollars per month) web hosting. As noted in in the Wikipedia entry for the LAMP acronym, "Wikipedia, The Free Encyclopedia, runs software that can be characterized as a LAMP application. Wikipedia's MediaWiki software is developed primarily under Linux, using the Apache HTTP Server, with its content being stored in a MySQL database, and the program logic being implemented in PHP."

#### AMFPHP

One particular technology built with PHP, AMFPHP (available for free at http://www.amfphp.org), is especially useful for RIA-enabled research. This collection of scripts decodes and encodes Macromedia's Action Message Format (AMF), a data format that allows for the exchange of almost every type of data object defined in ActionScript such as numeric and string variables as well as custom objects. In contrast to extensible markup language (XML), also used to exchange a wide variety of data types, AMF is designed so that information may be transmitted quickly. An immediate benefit of this format is the time saved by not having to program conversions of the applications data into XML for transmission as well as conversion of XML from a server back into an application's data structures.
One of the most important reasons for using an implementation of AMF is the availability of AMF-compatible scripts libraries for the free scripting languages Perl and Python (the other possible readings of the "P" in the LAMP acronym) in addition to the native support for the format in Macromedia's proprietary ColdFusion scripting language. This almost guarantees that the particular model in which an RIA is deployed may be changed (e.g., using Perl and PostgreSQL instead of PHP and MySQL) with minimal alteration of the Flash and/or FlashComm code.

### MySQL

A free (for non-commercial use) database server, MySQL (or any other database) is primarily responsible for making Internet applications rich. The long-term, centralized, and rapidly searchable storage provided by a database enables an application to minimize, if not completely eliminate, the data it must contain within itself each time it is loaded. Once loaded and running in the Flash Player, for example, an application can request only those data sets which are needed at a given point in a user's interactions with the system. Free web-based utility applications such as PhpMyAdmin, installed with most scripting- and database-enabled hosting services, make modifying, archiving, and moving database entries easy for most moderately skilled users, thereby insuring data integrity and security.

## Use of These Technologies

Because PHP communicates easily with Flash Player applications and with FlashComm via multiple connection methods (e.g., AMFPHP), these connections allow PHP to return information retrieved from a database (e.g., MySQL). This functionality may be used for a variety of SLA research purposes such as...
* presenting pre-prepared texts to users
* logging user behavior (e.g., quiz results or text from chat sessions)
* tracking user behavior over time
* matching users by common interests, languages, skill levels, etc.

## Resources and Further Reading

* Wikibook: PHP Programming
* Wikibook: PHP and MySQL Programming
* Wikibook: Using PHPEclipse to install Apache, MySQL, and PHP
* http://www.php.org - Homepage for PHP
* http://www.mysql.com/ - Homepage for MySQL
* ISBN 0-596-00504-0 - Programming Flash Communication Server, by Lesser et al. (accompanying website: http://www.flash-communications.net)
* http://www.macromedia.com/software/flashcom/ - Macromedia's main page for FlashComm; features free developer's edition of FlashComm and documentation (HTML and Adobe Acrobat format)
* http://www.macromedia.com/software/flash/ - Macromedia's main page for Flash MX 2004; features trial edition (30 days) of Flash MX 2004 and documentation (HTML and Adobe Acrobat format)
* http://www.sephiroth.it - Useful source of information covering Flash Player and FlashComm applications that utilize AMFPHP and MySQL; features code for working examples of Flash and FlashComm connectivity
* http://www.amfphp.org - Homepage for AMFPHP open-source project; features code for working example of Flash connectivity
* http://sourceforge.net/projects/amfphp/ - Sourceforge project page for AMFPHP
* http://simonf.com/flap/ - AMF::Perl, Flash Remoting in Perl and Python project
* http://sourceforge.net/projects/openamf/ - Java port of AMFPHP