Sunday, September 28, 2008

Remote Object Service in Flex

» Der Remote Object Service in Flex

Was unterscheidet den Remote Object Service vom HTTPService oder dem WebService?
Wie auch der HTTPService und der WebService greift der Remote Object Service über das HTTP Protokoll auf die Ressourcen des Servers zu. Im Gegensatz zu den erst genannten Services benutzt der RemoteObject Service aber nicht das auf Text basierende XML Format für den Informationsaustausch, sondern das proprietäre AMF (Action Message Format). Dieses codiert die auszutauschenden Informationen binär, die gesendete Nachricht wird dadurch wesentlich kleiner und kann schneller übertragen werden.
Java Entwickler mag diese Technik an die RMI API erinnern und der Vergleich ist durchaus angebracht. RMI nutzt jedoch statt des HTTP Protokolls (Port 80) ein eigenes Übertragungsprotokoll, scheitert damit an den meisten Firewalls und macht deshalb nur in firmeninternen (oder anderen geschlossenen) Umgebungen Sinn. Im Gegensatz dazu kann der Remote Object Service ohne Einschränkungen auch im Internet verwendet werden.

darstellung des RemoteObject Service mit dem Flex Data Service


Das POJO auf dem Tomcat
Um den Remote Object Service zu verwenden, muss zunächst ein Service Objekt in Java implementiert werden, welches die auf dem Client benötigten Methoden zur Verfügung stellt. Die Methoden, die der Client später verwenden soll, müssen als public deklariert werden. Die Klasse muss sich zudem im CLASSPATH des Flex Data Service befinden und einen leeren Konstruktor haben. Eine simple Testanwendung könnte wie folgt aussehen:

 Die Service Klasse auf dem Tomcat

public class RemoteObjectService {

public RemoteObjectService() {}

public String sayHello() {
return "Hallo Flexwelt";
}
}

Bekanntmachen der Klasse
Damit der Flex Data Service die erzeugte Klasse als RemoteObject erkennt, muss diese in der remote-config.xml bekannt gemacht werden. Die remote-config.xml befindet sich, genau wie die proxy-config.xml, im Verzeichnis WEB-INF/flex unterhalb des Context-Root.
Für die erzeugte Service Klasse wird eine neue Destination angelegt. Diese bekommt eine eindeutige Id, die später in der Flex Anwendung zur Referenzierung des entfernten Objektes gebraucht wird. Zusätzlich wird der vollständige Klassenname und der Scope deklariert.

 Auszug aus der remote-config.xml        



org.fleksray.samples.RemoteObjectService
application



Scoping
Die drei Möglichkeiten um einen Scope zu definieren sind application, session und request. Diese Varianten den Scope zu definieren sind Java Entwicklern hinreichend bekannt, deshalb hier nur eine kurze Erklärung.
Wird für das RemoteObject der Scope application definiert, wird für jede Serverinstanz nur eine einzige Klasse instantiiert. Alle Anwender der Applikation greifen also auf das gleiche Objekt zu. Im session Scope wird für jeden User ein eigenes Objekt angelegt. Dieser Scope wird deshalb in der Regel für Session Tracking, das Speichern von Warenkörben und Ähnlichem verwendet. Im request Scope wird für jeden HTTP Request ein neues Objekt erzeugt. Dieser Scope erhöht die Rechenlast des Servers empfindlich und sollte nur, wenn unbedingt notwendig angewendet werden.
21. Oktober 2007

» Aufruf entfernter Methoden

Verarbeiten der Daten auf dem Client mit Hilfe der Binding Expressions
Um die vom RemoteObject bereitgestellten Daten zu verarbeiten, stehen dem Entwickler zwei Möglichkeiten zur Verfügung: Binding Expressions und in ActionScript geschriebene Event Handler. Erstere Methode ist einfacher und weniger verbose. Werden dagegen eigene Event Handler benutzt stehen mehr Möglichkeiten zur Verfügung, die Daten zu verarbeiten.
Mit Hilfe der Binding Expression ist das entgegennehmen der Daten recht einfach.

 Auszug aus der MXML Datei die das RemoteObject verwendet






Verwenden der Event Handler
Das RemoteObject löst bei erfolgreicher Datenübertragung ein ResultEvent aus. Lief etwas schief wird ein FaultEvent getriggert. Innerhalb der Event Handler können die Ergebnisse des entfernten Methodenaufrufes vielfältiger gehandhabt werden, als mit den Binding Expressions.

 Die MXML Datei verwendet nun Event Handler




handleResult(ev:ResultEvent):void {
_message = ev.result.toString();
}

private function handleFault(ev:FaultEvent):void {
_message = "das ging daneben: "
+ ev.fault.faultCode + " :: "
+ ev.fault.faultDetail + " :: "
+ ev.fault.faultString;
}
]]>


result="handleResult(event)"
fault="handleFault(event)"/>






Ein FaultEvent kann leicht ausgelöst werden, indem im click Handler des Buttons auf eine nicht existierende Methode des RemoteObject zugegriffen wird ( click="{myRemoteObject.sayGoodBye()}")
Result Handler Dispatching im RemoteObject
Wie geht man nun mit Service Objekten um, die dem Client eine ganze Reihe von Methoden zur Verfügung stellen. Im RemoteObject wird im oben gezeigten Beispiel nur einen Result Handler defininiert, der für genau eine Methode zuständig ist..
Ein erster, einfacher Ansatz wäre, im Result Handler eine switch-case Anweisung zu schreiben, die anhand des übergebenen Events die aufzurufende Methode erkennt.
Flex bietet eine elegantere Lösung. Innerhalb des RemoteObject können den Service Methoden jeweils unterschiedliche Result Handler zugeordnet werden.

 Dispatching der Events an unterschiedliche Handler




handleHelloResult(ev:ResultEvent):void {
_message = ev.result.toString();
}

private function handleDataResult(ev:ResultEvent):void {
_data = ev.result as ArrayCollection;
}

private function handleFault(ev:FaultEvent):void {
_message = "das ging daneben: "
+ ev.fault.faultCode + " :: "
+ ev.fault.faultDetail + " :: "
+ ev.fault.faultString;
}
]]>



name="sayHello" result="handleHelloResult(event)" />
name="getTestData" result="handleDataResult(event)" />




click="{myRemoteObject.sayHello()}"/>




click="{myRemoteObject.getTestData()}"/>



Im gezeigtem Beispiel wird für jede Methode des Service Objektes ein eigener Result Handler deklariert, der Fault Handler wird von allen Methoden gemeinsam benutzt. Es ist auch möglich, jeder Methode einen eigenen Fault Handler zuzuweisen.
31. September 2007

» Übergabe von Argumenten

In den meisten Fällen wird von einer Applikation mehr verlangt, als nur einfache Methoden aufzurufen. In der realen Welt müssen Eingaben des Benutzers an den Server weitergeleitet werden und zu einer entsprechenden Response umgesetzt werden. Die Eingaben werden, wie in bei Html auch, oft über Formulare entgegengenommen und dann verarbeitet.
Das RemoteObject muss also auch in der Lage sein, Argumente zu verarbeiten. Im folgendem Beispiel soll das Service Objekt auf dem Server aus zwei übermittelten Strings ein personalisierte Begrüßung bauen.

 Die Java Klasse übernimmt Argumente

public class AnsweringService {

public AnsweringService() {}

public String sayHello(String title, String name) {
return "Hallo " + title +" " + name;
}
}

In der MXML-Datei werden die Argumente innerhalb des <method> Tags deklariert. Hier können statische Werte oder Binding Expressions verwendet werden.
Das Tag erwartet ein Array mit Parametern. Wie diese Parameter benannt werden, ist unwesentlich. Der Konsistenz halber sollten sie aber wie die Argumente der Java Klasse benannt werden. Entscheidend ist die Reihenfolge der Argumente. Das zuerst deklarierte Element wird als erstes Argument an das Objekt auf dem Server übergeben.
Werden Argumente in der beschriebenen Weise übergeben, muss im Click EventHandler die Methode send() an der Remotemethode aufgerufen werden.

 Senden von Argumenten an das Objekt auf dem Tomcat Server









{myName.text}











id="title"
dataProvider="['Frau','Herr','Mrs.','Mr.']"/>


id="myName"/>



click="{myAnsweringObject.sayHello.send()}"/>

Building Flex Applications with JSPs

Problem Summary

Flex applications are client side applications which must communicate over the network to retrieve data from and store data in a database. There are many ways to communicate between the client and the server. If you are using Java you may already have JSPs which allow your users to view and modify data. How can you put a Flex UI front-end on top of your existing JSP based infrastructure?

Solution Summary

Flex can make requests to your existing JSPs using the HTTPService object. These requests can work with any JSPs. A Flex application contains all of the view logic so the JSPs should not return HTML but rather just serialized data.

Explanation

You might have a JSP similar to this one:

<%@page import="flex.samples.product.ProductService,
flex.samples.product.Product,
java.util.List"%>
<html>
<body>
<table>
<tr>
<th>Name</th>
<th>Description</th>
<th>Price</th>
<th>Image</th>
<th>Category</th>
<th>Quantity</th>
</tr>
<%
ProductService srv = new ProductService();
List list = null;
list = srv.getProducts();
Product product;
for (int i=0; i<list.size(); i++)
{
product = (Product) list.get(i);
%>    
<tr>
<td><%= product.getName() %></td>
<td><%= product.getDescription() %></td>
<td><%= product.getPrice() %></td>
<td><%= product.getImage() %></td>
<td><%= product.getCategory() %></td>
<td><%= product.getQtyInStock() %></td>
</tr>
<%
}
%>
</table>
</body>
</html>

This JSP just displays a simple HTML table of data which it fetched from the database. If you have a Flex application and want to display the same data in a tabular format you may just use a DataGrid in your mxml application. To get the data into your DataGrid you will need to modify the JSP so that it outputs serialized data rather than HTML:

<%@page import="flex.samples.product.ProductService,
flex.samples.product.Product,
java.util.List"%>
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<%
ProductService srv = new ProductService();
List list = null;
list = srv.getProducts();
Product product;
for (int i=0; i<list.size(); i++)
{
product = (Product) list.get(i);
%>    
<product productId="<%= product.getProductId()%>">
<name><%= product.getName() %></name>
<description><%= product.getDescription() %></description>
<price><%= product.getPrice() %></price>
<image><%= product.getImage() %></image>
<category><%= product.getCategory() %></category>
<qtyInStock><%= product.getQtyInStock() %></qtyInStock>
</product>
<%
}
%>
</catalog>

Since this JSP now outputs XML serialized data, Flex will be able to parse that data and turn it into objects which can then be displayed in the DataGrid. The entire Flex application to request the data and display it in a DataGrid could be as simple as:


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="srv.send()">
<mx:HTTPService id="srv" url="catalog.jsp"/>
<mx:DataGrid dataProvider="{srv.lastResult.catalog.product}"/>
</mx:Application>

The HTTPService tag instantiates an object which will make the request to the JSP and deserialize the results into object. The url property on the HTTPService should point to the JSP which returns the XML data. The DataGrid tag instanciates an object which will display objects in a tabular format. The dataProvider property on the DataGrid tells the DataGrid which data to display. In this case the value uses data binding. A binding expression goes between the curly braces. The data binding tells the DataGrid to watch the specified object for changes and when changes occur the DataGrid will refresh it's view of the data. In this case the dataProvider is set to bind to the lastResult property on the HTTPService object (srv is the referencable identifier of the HTTPService). The lastResult object contains an object named "catalog" which corresponds to the catalog node of the XML which is returned from the JSP. On the catalog node there is another array of nodes in the XML called "product". Thus the expression "srv.lastResult.catalog.product" corresponds to the array of product which are returned from the HTTPService request to the JSP. The finial piece of logic in the code is an event handler which causes the Flex application to make a request to the JSP. The "creationComplete" event handler is triggered when the Flex application has fully initialized. When this event is triggered the Flex application makes a request to the JSP by calling the send method on the HTTPService.

Computer Languages History

Computer Languages HistoryComputer Languages Timeline
Below, you can see the preview of the Computer Languages History (click on the white zone to get a bigger image):


There is only 50 languages listed in this chartABC :
A Short Introduction to the ABC Language Ada :
Ada 95
Ada Home Page
AdaPower
Special Interest Group on Ada
Ada Information Clearinghouse ALGOL :
The ALGOL Programming Language AWK :
The AWK Programming Language by Alfred V. Aho, Brian W. Kernighan, and Peter J. Weinberger APL :
Apl Language
APL B :
The Programming Language B (abstract)
Users' Reference to B by Ken Thompson BASIC :
The Basic Archives
Visual Basic Instinct
Visual Basic Resource
True BASIC
REALbasic BCPL :
BCPL Reference Manual by Martin Richards C :
The Development of the C Language by Dennis Ritchie
Very early C compilers and language by Dennis Ritchie
The C Programming Language (book)
Programming languages - C ANSI by ISO/IEC (draft)
C Programming Course C++ :
The C++ Programming Language (book)
C and C++: Siblings (pdf) by Bjarne Stroustrup C# :
Visual C# Language by Microsoft. Caml :
The Caml language
Objective Caml
The Objective-Caml system CLU :
CLU Home Page COBOL :
IBM COBOL family
COBOL Portal
TinyCOBOL
COBOL User Groups - COBUG CORAL :
Coral66
Computer On-line Real-time Applications Language Coral 66 Specification for Compilers (pdf) CPL :
Combined Programming Language (Wikipedia) Delphi :
Delphi 2005 by Borland
Pascal and Delphi
A brief history of Borland's Delphi Eiffel :
Eiffel
EiffelStudio by Eiffel Software
Visual Eiffel by Object Tools
SmartEiffel
EiffelZone Flow-Matic :
Flow-Matic and Cobol Forth :
Forth Interest Group Home Page Fortran :
User notes on Fortran programming
Fortran 2000 draft
Fortran 2003 JTC1/SC22/WG5 Haskell :
Haskell Home Page Icon :
The Icon Programming Language
Icon
History of the Icon programming language J :
J software
A management perspective of the "J" programming language Java :
Java by Sun Microsystems
Java Technology: an early history
Programming Languages for the Java Virtual Machine
James Gosling's home page JavaScript :
Cmm History by Nombas
JavaScript Language Resources from Mozilla
Standard ECMA-262 Lisp :
The Association of Lisp Users
An Introduction and Tutorial for Common Lisp Mainsail :
Mainsail from Xidak.
Mainsail Implementation Overview by Stanford Computer Systems Laboratory. M (MUMPS) :
M technologies
M[UMPS] Development Committee
What is M Technology? ML :
Standard ML
Standard ML '97 Modula :
Modula-2
Modula-3 Home Page
Modula-2 ISO/IEC Oberon :
A Brief History of Oberon
A Description of the Oberon-2 Language
The Programming Language Oberon-2
Oberon Language Genealogy Tree Objective-C :
Objective-C
Objective-C FAQ
Introduction to The Objective-C Programming Language by Apple
Objective-C: Links, Resources, Stuff Pascal :
ISO Pascal (document)
Pascal and Delphi Perl :
Perl Home Page
Perl
Larry Wall's Very Own Home Page PHP :
PHP: Hypertext Preprocessor PL/I :
Multics PL/I
IBM PL/I family by IBM Plankalkül :
Plankalkül PostScript :
PostScript level 3 by Adobe
PostScript and GhostScript by Jim Land
GhostScript Home Page Prolog :
Prolog Programming Language
The Prolog Language Python :
Python Home Page Rexx :
IBM REXX Family by IBM
The Rexx Language Association Ruby :
Ruby Home Page
Ruby programming language (Wikipedia)
Ruby - doc Sail :
Sail (Stanford Artificial Intelligence Language) Sather :
Sather History
Sather
GNU Sather Scheme :
Scheme by MIT
The Revised5 Report on the Algorithmic Language Scheme (in PostScript)
Schemers Home Page
SCM Self :
Self Home Page from Sun Sh :
Korn Shell of David Korn
Bash from GNU
Zsh Simula :
Simula by Jan Rune Holmevik Smalltalk :
Smalltalk Home Page
Smalltalk FAQ
The Early History of Smalltalk
The Smalltalk Industry Council web site
VisualAge Smalltalk from IBM
VisualWorks from Cincom
The history of Squeak
ANSI Smalltalk SNOBOL :
Snobol4 Resources by Phil Budne
Introduction to SNOBOL Programming Language by Mohammad Noman Hameed
Snobol4 Tcl/Tk :
Tcl/Tk Information

Other links on same subject :
The Language List (about 2500 computer languages) by Bill Kinnersley
An interactive historical roster of computer languages by Diarmuid Pigott.
Programming languages by The Brighton University
Programming languages
Diagram of programming languages history
The Programming Languages Genealogy Project
History of Programming Languages
99 Bottles of Beer
Dictionary of Programming Languages
Wikipedia: Computer languages
Computer-Books.us: free computer books

A Brief History of Programming Languages






ArticlesA Brief History of Programming Languages




September 1995
/
20th Anniversary
/ A Brief History of Programming Languages


We've come a long way from computers programmed with wires and punch cards. Maybe not as far as some would like, though. Here are the innovations in programming.




ca. 1946


Konrad Zuse
, a German engineer working alone while hiding out in the Bavarian Alps, develops Plankalkul. He applies the language to, among other things, chess.




1949

Short Code
, the first computer language actually used on an electronic computing device, appears. It is, however, a "hand-compiled" language.



1951


Grace Hopper
, working for Remington
Rand, begins design work on the first widely known compiler, named A-0. When the language is released by Rand in 1957, it is called MATH-MATIC.



1952


Alick E. Glennie
, in his spare time at the University of Manchester, devises a programming system called AUTOCODE, a rudimentary compiler.



1957


FORTRAN
--mathematical FORmula TRANslating system--appears. Heading the team is John Backus, who goes on to contribute to the development of ALGOL and the well-known syntax-specification system known as BNF.



1958


FORTRAN II
appears, able to handle subroutines and links to assembly language.
John McCarthy
at M.I.T. begins work on LISP--LISt Processing.



The original specification for ALGOL
appears. The specific
ation does not describe how data will be input or output; that is left to the individual implementations.



1959


LISP 1.5
appears.
COBOL
is created by the Conference on Data Systems and Languages (CODASYL).



1960


ALGOL 60
, the first block-structured language, appears. This is the root of the family tree that will ultimately produce the likes of Pascal. ALGOL goes on to become the most popular language in Europe in the mid- to late-1960s.



Sometime in the early 1960s
, Kenneth Iverson begins work on the language that will become APL--A Programming Language. It uses a specialized character set that, for proper use, requires APL-compatible I/O devices.



1962


APL
is documented in Iverson's book,
A Pro
gramming Language
.


FORTRAN IV
appears.



Work begins
on the sure-fire winner of the "clever acronym" award, SNOBOL--StriNg-Oriented symBOlic Language. It will spawn other clever acronyms: FASBOL, a SNOBOL compiler (in 1971), and SPITBOL--SPeedy ImplemenTation of snoBOL--also in 1971.



1963


ALGOL 60
is revised.

Work begins on PL/1.



1964


APL\360
is implemented.

At Dartmouth University
, professors John G. Kemeny and Thomas E. Kurtz invent BASIC. The first implementation is a compiler. The first BASIC program runs at about 4:00 a.m. on May 1, 1964.


PL/1
is released.



1965


SNOBOL3
appears.




1966


FORTRAN 66
appears.



LISP 2
appears.



Work begins on LOGO
at Bolt, Beranek, & Newman. The team is headed by Wally Fuerzeig and includes Seymour Papert. LOGO is best known for its "turtle graphics."



1967


SNOBOL4
, a much-enhanced SNOBOL, appears.



1968


ALGOL 68
, a monster compared to ALGOL 60, appears. Some members of the specifications committee--including C.A.R. Hoare and Niklaus Wirth--protest its approval. ALGOL 68 proves difficult to implement.


ALTRAN
, a FORTRAN variant, appears.


COBOL
is officially defined by ANSI.


Niklaus Wirth
begins work on Pascal.



1969


500 people
attend an APL conference at IBM's headquarters in Armonk, New York. The demands for APL's distribution are so great that the event is later referred to as "The March on Armonk."



1970


Sometime in the early 1970s
, Charles Moore writes the first significant programs in his new language, Forth.


Work on Prolog
begins about this time.


Also sometime in the early 1970s
, work on Smalltalk begins at Xerox PARC, led by Alan Kay. Early versions will include Smalltalk-72, Smalltalk-74, and Smalltalk-76.


An implementation of Pascal
appears on a CDC 6000-series computer.


Icon
, a descendant of SNOBOL4, appears.



1972


The manuscript
for Konrad Zuse's Plankalkul (see 1946) is finally published.


Denni
s Ritchie
produces C. The definitive reference manual for it will not appear until 1974.

The first implementation of Prolog
-- by Alain Colmerauer and Phillip Roussel -- appears.



1974


Another ANSI
specification for COBOL appears.



1975


Tiny BASIC
by Bob Albrecht and Dennis Allison (implementation by Dick Whipple and John Arnold) runs on a microcomputer in 2 KB of RAM. A 4-KB machine is sizable, which left 2 KB available for the program.



Bill Gates and Paul Allen
write a version of BASIC that they sell to MITS (Micro Instrumentation and Telemetry Systems) on a per-copy royalty basis. MITS is producing the Altair, an 8080-based microcomputer.


Scheme
, a LISP dialect by G.L. Steele and G.J. Sussman, appears.


Pascal User Manual
and Report
, by Jensen and Wirth, is published. Still considered by many to be the definitive reference on Pascal.


B.W. Kerninghan
describes RATFOR--RATional FORTRAN. It is a preprocessor that allows C-like control structures in FORTRAN. RATFOR is used in Kernighan and Plauger's "Software Tools," which appears in 1976.



1976


Design System Language
, considered to be a forerunner of PostScript, appears.



1977


The ANSI standard for MUMPS
-- Massachusetts General Hospital Utility Multi-Programming System -- appears. Used originally to handle medical records, MUMPS recognizes only a string data-type. Later renamed M.



The design competition that will produce Ada
begins. Honeywell Bull's team, led by Jean Ichbiah, will win the competition.



Kim Harris
and others set up FIG, the FORTH interest group. They develop FIG-FORTH, which they sell for around $20.



Sometime in the late 1970s
, Kenneth Bowles produces UCSD Pascal, which makes Pascal available on PDP-11 and Z80-based computers.



Niklaus Wirth
begins work on Modula, forerunner of Modula-2 and successor to Pascal.



1978


AWK
-- a text-processing language named after the designers, Aho, Weinberger, and Kernighan -- appears.



The ANSI standard
for FORTRAN 77 appears.




1980


Smalltalk-80
appears.


Modula-2
appears.


Franz LISP
appears.


Bjarne Stroustrup
develops a set of languages -- collectively referred to as "C With Classes" -- that serve as the breeding ground for C++.



1981


Effort begins
on a common dialect of LISP, referred to as Common LISP.


Japan begins
the Fifth Generation Computer System project. The primary language is Prolog.



1982


ISO Pascal
appears.


PostScript
appears.



1983


Smalltalk-80: The Language and Its Implementation
by Goldberg et al is published.

Ada appears
. Its name comes from Lady Augusta Ada Byron, Countess of Lovelace and daughter of the English poet Byron. She has been called the first computer programmer because of her work on Charles Babbage's analytical engine. In 1983, the Department of Defense directs that all new "mission-critical" applications be written in Ada.


In late 1983
and early 1984, Microsoft and Digital Research both release the first C compilers for microcomputers.


In July
, the first implementation of C++ appears. The name is coined by Rick Mascitti.


In November
, Borland's Turbo Pascal hits the scene like a nuclear blast, thanks to an advertisement in BYTE magazine.



1984


A reference manual
for APL2 appears. APL2 is an extension of APL that permits nested arrays.



1985


Forth
controls the submersible sled that locates the wreck of the Titanic.


Vanilla SNOBOL4
for microcomputers is released.

Methods
, a line-oriented Smalltalk for PCs, is introduced.



1986


Smalltalk/V
appears--the first widely av
ailable version of Smalltalk for microcomputers.


Apple releases Object Pascal
for the Mac.


Borland
releases Turbo Prolog.


Charles Duff
releases Actor, an object-oriented language for developing Microsoft Windows applications.


Eiffel
, another object-oriented language, appears.


C++
appears.



1987


Turbo Pascal
version 4.0 is released.



1988


The specification for CLOS
-- Common LISP Object System -- is published.


Niklaus Wirth
finishes Oberon, his follow-up to Modula-2.



1989


The ANSI C
specification is published.

C++ 2.0
arrives in the form of a draft reference manu
al. The 2.0 version adds features such as multiple inheritance and pointers to members.



1990

C++ 2.1
, detailed in
Annotated C++ Reference Manual
by B. Stroustrup et al, is published. This adds templates and exception-handling features.

FORTRAN 90
includes such new elements as case statements and derived types.


Kenneth Iverson
and Roger Hui present J at the APL90 conference.



1991


Visual Basic
wins BYTE's Best of Show award at Spring COMDEX.



1992


Dylan
-- named for Dylan Thomas -- an object-oriented language resembling Scheme, is released by Apple.




1993


ANSI releases the X3J4.1 technical report
-- the first-draft proposal for (gulp) object-oriented COBOL. The standard is expected to be finalized in 1997.



1994


Microsoft
incorporates Visual Basic for Applications into Excel.



1995


In February
, ISO accepts the 1995 revision of the Ada language. Called Ada 95, it includes OOP features and support for real-time systems.



1996

Anticipated release of
first ANSI C++ standard
.



Her HindSight and ForeSight Were Both 20/20


photo_link (36 Kbytes)


"It's better to ask forgiveness than it is to get permission."--The Late Rear Admiral Grace Hopper, who led the effort to create COBOL




Also see this links

I am getting money from this links after signing in for free. Don't wast time just join and earn without any hard word.....
Hello Friends,
     I want to tell you about great site I found. They pay me to read e-mail, visit web sites and much more.
JOIN A CERTIFIED LEGITIMATE ONLINE BIZ!!!!
Would you like to Earn money without spending even a single penny?
Now! It is possible..
No Registration Fee
No Credit Cards required
No Hassle
No Risk
Not Nesseary to Join others
It's free to join and easy to sign up! CLICK THIS LINK TO VISIT:
Earn money without Investment
Earn money for getting ads to u r cell phone numbers what u want to get.

1) http://earnbyads.co.in/PI1.aspx?RC=5ba4f5ae
2) http://www.mginger.com/index.jsp?inviteId=883819
3) http://www.youmint.com/network-ramu4all_31
4) http://www.sms2earn.com?refid=5713
5) www.sms2india.co.in/?user=ramu4all_31
6) http://www.admad.mobi/112411-ThulasiramS.admad
7) http://www.mgarlic.com/?invite=222242142
The more time you spend surfing, the more chances of earning money.
1) http://www.earnptr.com/pages/index.php?refid=ramu4all31
3. Each time you refer a new user, you earn 10% of their image views forever!
http://www.capitalmails.net/pages/index.php?refid=ramu4all31

capitalmails.net
http://www.homepagepublicity.com/?referer=166996
http://www.jaxtr.com/ramu4all_31
Earn money without Investments:
Login for free and Earn money without any investment by clicking the below links...
I really getting money from this websites
I just joined Shelfari to connect with other book lovers. Come see the books I love and see if we have any in common. Then pick my next book so I can keep on reading. See by clicking the below link...
http://www.shelfari.com/invite/RJNuEo$a2-E6REr8y2iIPQ
http://ramu4all31.sulit.com.ph
http://www.resource-a-day.net/member/index.cgi?ramu4all_31
Earn money for reading E-mails:
The easiest way to make more money is to let others make them for you. Cashfiesta pays you for your referrals up to the 8th level. See for yourself how much you can earn, click on the Fiesta Calculator.
http://www.cashfiesta.com/php/join.php?ref=ramu4all_31
http://rolex-mails.com/pages/index.php?refid=ramu4all31
rolex-mails.com
Get paid to take surveys! Get $6 after signing up! Get $1.25 per referred friend. Low Payout! Create your account absolutely free!

http://www.AWSurveys.com/HomeMain.cfm?RefID=ramu4all31

http://www.earnptr.com/pages/index.php?refid=ramu4all31
http://www.advercash.net/signup.php?ref=ramu4all_31
http://bux.to/?r=ramu4all_31
Payout : US$ 10.00
Per Click : US$ 0.01
Per Sign up : US$ 0.30
Referrals : 50%
http://www.masterbux.com/?r=ramu4all_31
http://www.bux3.com/?r=ramu4all31
http://www.just-click.us/?r=ramu4all_31
http://clix4coins.com/index1.php?ref=ramu4all_31

http://www.gjobsdataservice.com/affiliate/idevaffiliate.php?id=812