<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-34726151</id><updated>2011-04-21T16:02:49.359-07:00</updated><title type='text'>redirect to</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-34726151.post-116031809885475109</id><published>2006-10-08T07:32:00.000-07:00</published><updated>2006-10-15T11:16:34.263-07:00</updated><title type='text'>HAXE :: Web oriented universal language</title><content type='html'>&lt;h1&gt;Introduction&lt;/h1&gt; &lt;div class="level1"&gt;  &lt;p&gt; haXe is a high-level object-oriented programming language mainly focused on helping programers develop Websites and Web applications. haXe has been designed to be easily portable across several &lt;strong&gt;platforms&lt;/strong&gt;. The haXe compiler supports the following platforms :  &lt;/p&gt; &lt;ul&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; &lt;strong&gt;JavaScript&lt;/strong&gt; : you can generate a single &lt;code&gt;.js&lt;/code&gt; file from a set of haXe classes. You can access browser &lt;acronym title="Dynamic HyperText Markup Language"&gt;DHTML&lt;/acronym&gt; &lt;acronym title="Application Programming Interface"&gt;API&lt;/acronym&gt; as well as crossbrowser APIs such as Xml, Date or XmlHttpRequest... haXe is one of the best available languages to develop middle and large scale &lt;acronym title="Asynchronous JavaScript and XML"&gt;AJAX&lt;/acronym&gt; Web Applications.&lt;/div&gt; &lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; &lt;strong&gt;Flash&lt;/strong&gt; : haXe can compile a SWF file for Flash Players 6 to 9. The language has great features and is at the same time both strict and dynamic. Using haXe increases productivity compared to ActionScript. All the Flash APIs are available unchanged in haXe so you will quickly get used to the language, and porting your existing code to haXe will be easy.&lt;/div&gt; &lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; &lt;strong&gt;Neko&lt;/strong&gt; : haXe can compile bytecode that runs on the Neko Virtual Machine. An haXe program can then be run into the Apache web server (using &lt;code&gt;mod_neko&lt;/code&gt;). This allows you to develop the server-side of your website using haXe. haXe has access to all Neko libraries such as filesystem, network, databases... and much more. Since it can easily be extended with additional libraries, haXe can be used to develop full-fledged desktop applications.&lt;/div&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;/div&gt;  &lt;a name="haxe_features"&gt;&lt;/a&gt;&lt;h1&gt;haXe Features&lt;/h1&gt; &lt;div class="level1"&gt;  &lt;p&gt;  The haXe &lt;strong&gt;Syntax&lt;/strong&gt; is similar to the one used in Java/JavaScript/ActionScript, so it’s very easy to learn and get used to haXe. haXe can also integrate easily in your favorite editor or IDE. &lt;/p&gt;  &lt;p&gt; The haXe &lt;strong&gt;Type System&lt;/strong&gt; is strictly typed, enabling the compiler to detect most errors at compile-time. At the same time, it’s very different from classic strictly typed languages since you don’t have to write types everywhere in your program, thanks to &lt;em&gt;type inference&lt;/em&gt;. It makes you feel like you are programming in a dynamically typed language while you are getting the security of a strictly typed language. The &lt;em&gt;best of both worlds&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt; The haXe &lt;strong&gt;Standard Library&lt;/strong&gt;, including Date, &lt;acronym title="Extensible Markup Language"&gt;XML&lt;/acronym&gt;, data structures... is specified to behave the same across all platforms. This enables you to share and reuse code logic between different platforms without needing to rewrite the same thing again and again. &lt;/p&gt;  &lt;p&gt; haXe is easily &lt;strong&gt;Extensible&lt;/strong&gt; : you can add additional libraries and wrappers for platform-specific features. Thanks to &lt;em&gt;conditional compilation&lt;/em&gt; you can have different implementation for a given &lt;acronym title="Application Programming Interface"&gt;API&lt;/acronym&gt; depending on the platform you want to compile to. &lt;/p&gt;  &lt;p&gt; haXe has a &lt;strong&gt;Remoting&lt;/strong&gt; library that provides cross platform serialization and &lt;acronym title="Remote Procedure Call"&gt;RPC&lt;/acronym&gt;, enabling you to directly call methods between platforms. For example calls may be made between the client and the server or between different client modules. Everything is handled transparently. &lt;/p&gt;  &lt;p&gt; haXe can be used to develop portable &lt;strong&gt;Desktop&lt;/strong&gt; applications by using &lt;strong&gt;&lt;a href="http://www.haxe.org/swhx" class="wikilink1" title="swhx" onclick="return svchk()" onkeypress="return svchk()"&gt;SWHX&lt;/a&gt;&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt; haXe is &lt;strong&gt;Open Source&lt;/strong&gt; software and has an active and enthusiastic &lt;strong&gt;Community&lt;/strong&gt; which supports the language by developing content and additional libraries. &lt;/p&gt;  &lt;/div&gt;  &lt;a name="conclusion"&gt;&lt;/a&gt;&lt;h1&gt;Conclusion&lt;/h1&gt; &lt;div class="level1"&gt;  &lt;p&gt;  haXe is a &lt;strong&gt;Toolbox&lt;/strong&gt; for the web developer. Since the compiler has support for several platforms you can choose the most suitable one to get your job done without having to learn and use a new language everytime. Although using haXe on both the client and server simplifies things thereby boosting productivity, haXe may be used exclusively on the client or the server. You can use haXe where it makes sense for you. &lt;/p&gt;  &lt;p&gt; Want to learn &lt;strong&gt;more&lt;/strong&gt; ?  &lt;/p&gt;  &lt;p&gt; Read the haXe &lt;a href="http://www.haxe.org/doc" class="wikilink1" title="doc" onclick="return svchk()" onkeypress="return svchk()"&gt;Documentation&lt;/a&gt; and have a look at the &lt;a href="http://www.haxe.org/ref" class="wikilink1" title="ref" onclick="return svchk()" onkeypress="return svchk()"&gt;Language Reference&lt;/a&gt;. If you have any questions or remarks, don’t hesitate to join the haXe &lt;a href="http://www.haxe.org/ml" class="wikilink1" title="ml" onclick="return svchk()" onkeypress="return svchk()"&gt;Community&lt;/a&gt;.  &lt;/p&gt;  &lt;/div&gt;&lt;br /&gt;from : &lt;a href="http://www.haxe.org/intro" title="haxe"&gt;http://www.haxe.org/intro&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-116031809885475109?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/116031809885475109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=116031809885475109' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/116031809885475109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/116031809885475109'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/10/haxe-web-oriented-universal-language.html' title='HAXE :: Web oriented universal language'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115998325604646458</id><published>2006-10-04T10:26:00.000-07:00</published><updated>2006-10-04T10:55:25.740-07:00</updated><title type='text'>Google Web Toolkit</title><content type='html'>&lt;h2&gt;What is Google Web Toolkit?&lt;/h2&gt;  &lt;p&gt;Google Web Toolkit (GWT) is a Java development framework that lets you escape the matrix of technologies that make writing AJAX applications so difficult and error prone. With GWT, you can develop and debug AJAX applications in the Java language using the Java development tools of your choice. When you deploy your application to production, the GWT compiler to translates your Java application to browser-compliant JavaScript and HTML.&lt;/p&gt;  &lt;p&gt;Here's the GWT development cycle:&lt;/p&gt; &lt;ol class="spaced"&gt;&lt;li&gt;Use your favorite Java IDE to write and debug an application in the Java language, using as many (or as few) GWT libraries as you find useful.&lt;/li&gt;&lt;li&gt;Use GWT's Java-to-JavaScript compiler to distill your application into a set of JavaScript and HTML files that you can serve with any web server.&lt;/li&gt;&lt;li&gt;Confirm that your application works in each browser that you want to support, which usually takes no additional work.&lt;/li&gt;&lt;/ol&gt;   &lt;a name="Why"&gt;&lt;/a&gt; &lt;h2&gt;Why Translate Java Code to JavaScript?&lt;/h2&gt;  &lt;p&gt;Java technologies offer a productive development plaform, and with GWT, they can instantly become the basis of your AJAX development platform as well. Here are some of the benefits of developing with GWT:&lt;/p&gt;  &lt;ul class="spaced"&gt;&lt;li&gt;You can use all of your favorite Java development tools (Eclipse, IntelliJ, JProfiler, JUnit) for AJAX development.&lt;/li&gt;&lt;li&gt;Static type checking in the Java language boosts productivity while reducing errors.&lt;/li&gt;&lt;li&gt;Common JavaScript errors (typos, type mismatches) are easily caught at compile time rather than by users at runtime.&lt;/li&gt;&lt;li&gt;Code prompting/completion is widely available.&lt;/li&gt;&lt;li&gt;Automated Java refactoring is pretty snazzy these days.&lt;/li&gt;&lt;li&gt;Java-based OO designs are easier to communicate and understand, thus making your AJAX code base more comprehensible with less documentation.&lt;/li&gt;&lt;/ul&gt;   &lt;a name="Using"&gt;&lt;/a&gt; &lt;h2&gt;Using Google Web Toolkit&lt;/h2&gt;  &lt;p&gt;You can use GWT's set of UI components (called &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Widget.html"&gt;Widgets&lt;/a&gt;) to construct the UI elements that make up your AJAX application. Like traditional UI frameworks, Widgets are combined in &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Panel.html"&gt;Panels&lt;/a&gt; that determine the layout of the widgets contained within them. This is a complete GWT application that displays a button with a click handler:&lt;/p&gt;  &lt;pre class="code"&gt;public class Hello implements EntryPoint {&lt;br /&gt;  public void onModuleLoad() {&lt;br /&gt;    Button b = new Button("Click me", new ClickListener() {&lt;br /&gt;      public void onClick(Widget sender) {&lt;br /&gt;        Window.alert("Hello, AJAX");&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;    RootPanel.get().add(b);&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;  &lt;p&gt;GWT supports a variety of built-in Widgets that are useful for AJAX applications, including &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Tree.html"&gt;hierachical trees&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.TabBar.html"&gt;tab bars&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.MenuBar.html"&gt;menu bars&lt;/a&gt;, and &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.DialogBox.html"&gt;modal dialog boxes&lt;/a&gt;.  GWT also has built-in support for remote procedure calls and other more sophisticated web application features.  See the &lt;a href="http://code.google.com/webtoolkit/overview.html#Features"&gt;complete list of features&lt;/a&gt; for more information.&lt;/p&gt;  &lt;a name="Modes"&gt;&lt;/a&gt; &lt;h3&gt;Debugging and Deploying GWT Applications&lt;/h3&gt;  &lt;p&gt;GWT applications can be run in two modes:&lt;/p&gt;  &lt;ul class="spaced"&gt;&lt;li&gt;&lt;b&gt;Hosted mode&lt;/b&gt; - In hosted mode, your application is run as Java bytecode within the Java Virtual Machine (JVM). You will typically spend most of your development time in hosted mode because running in the JVM means you can take advantage of Java's debugging facilities and remain within an IDE like &lt;a href="http://www.eclipse.org/" rel="nofollow"&gt;Eclipse&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Web mode&lt;/b&gt; - In web mode, your application is run as pure JavaScript and HTML, compiled from your original Java source code with the GWT Java-to-JavaScript compiler. When you deploy your GWT applications to production, you deploy this JavaScript and HTML to your web servers, so end users will only see the web mode version of your application.&lt;/li&gt;&lt;/ul&gt;   &lt;p&gt;To support hosted mode, GWT ships with a special web browser with hooks into the JVM.  See the &lt;a href="http://code.google.com/webtoolkit/overview.html#Architecture"&gt;GWT architecture diagram&lt;/a&gt; below for more information.&lt;/p&gt;  &lt;p&gt;For a step-by-step installation and usage guide, please see the &lt;a href="http://code.google.com/webtoolkit/gettingstarted.html"&gt;Getting Started Guide&lt;/a&gt;.&lt;/p&gt;  &lt;a name="Architecture"&gt;&lt;/a&gt; &lt;h3&gt;Google Web Toolkit Architecture&lt;/h3&gt;  &lt;p&gt;GWT has four major components: a Java-to-JavaScript compiler, a "hosted" web browser, and two Java class libraries:&lt;/p&gt;  &lt;div class="diagram"&gt;&lt;img src="http://code.google.com/webtoolkit/images/gwt-architecture.png" alt="Google Web Toolkit (GWT) architecture" /&gt;&lt;/div&gt;  &lt;p&gt;The components, from bottom to top, are:&lt;/p&gt;  &lt;ul class="spaced"&gt;&lt;li&gt;     &lt;div class="heading"&gt;GWT Java-to-JavaScript Compiler&lt;/div&gt;     &lt;div&gt;The GWT Java-to-JavaScript compiler translates the &lt;a href="http://java.sun.com/" rel="nofollow"&gt;Java&lt;/a&gt; programming language to the &lt;a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm" rel="nofollow"&gt;JavaScript&lt;/a&gt; programming language.  You use the GWT compiler to run your GWT applications in &lt;a href="http://code.google.com/webtoolkit/overview.html#Modes"&gt;web mode&lt;/a&gt;.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;GWT Hosted Web Browser&lt;/div&gt;     &lt;div&gt;The GWT Hosted Web Browser lets you run and execute your GWT applications in &lt;a href="http://code.google.com/webtoolkit/overview.html#Modes"&gt;hosted mode&lt;/a&gt;, where your code runs as Java in the Java Virtual Machine without compiling to JavaScript. To accomplish this, the GWT browser embeds a special browser control (an Internet Explorer control on Windows or a Gecko/Mozilla control on Linux) with hooks into the JVM.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;JRE emulation library&lt;/div&gt;     &lt;div&gt;GWT contains JavaScript implementations of the most widely used classes in the Java standard class library, including most of the &lt;a href="http://code.google.com/webtoolkit/documentation/java.lang.html"&gt;java.lang&lt;/a&gt; package classes and a subset of the &lt;a href="http://code.google.com/webtoolkit/documentation/java.util.html"&gt;java.util&lt;/a&gt; package classes.  The rest of the Java standard library isn't supported natively within GWT. For example, packages like &lt;code&gt;java.io&lt;/code&gt; don't apply to web applications since they access the network and local file system.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;GWT Web UI class library&lt;/div&gt;     &lt;div&gt;The GWT web UI class library is a set of custom interfaces and classes that let your create web browser "widgets," like buttons, text boxes, images, and text. This is the core user interface library used to create GWT applications. GWT ships with the complete source code for the library under an open source license.&lt;/div&gt;   &lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;For a step-by-step installation and usage guide, please see the &lt;a href="http://code.google.com/webtoolkit/gettingstarted.html"&gt;Getting Started Guide&lt;/a&gt;.&lt;/p&gt;   &lt;a name="HowWell"&gt;&lt;/a&gt; &lt;h2&gt;How Well Does It Work?&lt;/h2&gt;  &lt;p&gt;We're biased, but we think it works pretty darn well. The primary metrics we use to evaluate GWT's effectiveness relative to traditional AJAX development are:&lt;/p&gt;  &lt;ul class="spaced"&gt;&lt;li&gt;     &lt;div class="heading"&gt;Compiler-generated JavaScript size&lt;/div&gt;     &lt;div class="details"&gt;A typical, full-featured GWT application will require the user to download about 100K of cacheable JavaScript, which is in line with most hand-written AJAX applications.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;End-user performance&lt;/div&gt;     &lt;div class="details"&gt;GWT applications are almost always as fast as hand-written JavaScript. The GWT compiler avoids adding any wrappers around any functionality that is implemented natively in the browser.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;Development time&lt;/div&gt;     &lt;div class="details"&gt;With so little time spent debugging problems in individual web browsers, you can spend much more of your time on application functionality. Development time efficiency is our favorite part of GWT.&lt;/div&gt;   &lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;&lt;a href="http://code.google.com/webtoolkit/gettingstarted.html"&gt;Try it out for yourself&lt;/a&gt;, and &lt;a href="http://groups.google.com/group/Google-Web-Toolkit"&gt;let us know&lt;/a&gt; what you think.&lt;/p&gt;   &lt;a name="Features"&gt;&lt;/a&gt; &lt;h2&gt;Google Web Toolkit Features&lt;/h2&gt;  &lt;ul class="spaced"&gt;&lt;li&gt;     &lt;div class="heading"&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.UserInterface.html"&gt;Dynamic, reusable UI components&lt;/a&gt;&lt;/div&gt;     &lt;div class="description"&gt;Create a &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Widget.html"&gt;Widget&lt;/a&gt; by compositing other Widgets. Lay out Widgets automatically in &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.ui.Panel.html"&gt;Panels&lt;/a&gt;. Send your Widget to other developers in a JAR file.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.RemoteProcedureCalls.html"&gt;Really simple RPC&lt;/a&gt;&lt;/div&gt;     &lt;div class="description"&gt;To communicate from your web application to your web server, you just need to define serializable Java classes for your request and response. In production, GWT automatically serializes the request and deserializes the response from the server. GWT's RPC mechanism can even handle polymorphic class hierarchies, and you can throw exceptions across the wire.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.user.client.History.html"&gt;Browser history management&lt;/a&gt;&lt;/div&gt;     &lt;div class="description"&gt;No, AJAX applications &lt;i&gt;don't&lt;/i&gt; need to break the browser's back button. GWT lets you make your site more usable by easily adding state to the browser's back button history.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Fundamentals.HostedMode.html"&gt;Real debugging&lt;/a&gt;&lt;/div&gt;     &lt;div class="description"&gt;In production, your code is compiled to JavaScript, but at development time it runs in the Java virtual machine. That means when your code performs an action like handling a mouse event, you get full-featured Java debugging, with exceptions and the advanced debugging features of IDEs like &lt;a href="http://www.eclipse.org/" rel="nofollow"&gt;Eclipse&lt;/a&gt;.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Fundamentals.WebMode.html"&gt;Browser compatible&lt;/a&gt;&lt;/div&gt;     &lt;div class="description"&gt;Your GWT applications automatically support IE, Firefox, Mozilla, Safari, and Opera with no browser detection or special-casing within your code in most cases.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.JUnitIntegration.html"&gt;JUnit integration&lt;/a&gt;&lt;/div&gt;     &lt;div class="description"&gt;GWT's direct integration with &lt;a href="http://junit.org/"&gt;JUnit&lt;/a&gt; lets you unit test both in a debugger and in a browser...and you can even unit test asynchronous RPCs.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.Internationalization.html"&gt;Internationalization&lt;/a&gt;&lt;/div&gt;     &lt;div class="description"&gt;Easily create efficient internationalized applications and libraries.&lt;/div&gt;   &lt;/li&gt;&lt;li&gt;     &lt;div class="heading"&gt;&lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.JavaScriptNativeInterface.html"&gt;Interoperability and fine-grained control&lt;/a&gt;&lt;/div&gt;     &lt;div class="description"&gt;If GWT's class library doesn't meet your needs, you can mix handwritten JavaScript in your Java source code using our &lt;a href="http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.DeveloperGuide.JavaScriptNativeInterface.html"&gt;JavaScript Native Interface (JSNI)&lt;/a&gt;.&lt;/div&gt;   &lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;For a step-by-step installation and usage guide, please see the &lt;a href="http://code.google.com/webtoolkit/gettingstarted.html"&gt;Getting Started Guide&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;from: &lt;a href="http://code.google.com/webtoolkit/overview.html"&gt;http://code.google.com/webtoolkit/overview.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115998325604646458?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115998325604646458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115998325604646458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115998325604646458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115998325604646458'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/10/google-web-toolkit.html' title='Google Web Toolkit'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115977579798936852</id><published>2006-10-02T00:56:00.000-07:00</published><updated>2006-10-02T00:57:03.233-07:00</updated><title type='text'>Ruby</title><content type='html'>&lt;div id="head-wrapper-1"&gt;               &lt;div id="head-wrapper-2"&gt;           &lt;div id="head"&gt;                    &lt;h1&gt;About Ruby&lt;/h1&gt;                &lt;/div&gt;               &lt;/div&gt;             &lt;/div&gt;              &lt;p&gt;Wondering why Ruby is so popular? Its fans call it a beautiful, artful language. And yet, they say it’s handy and practical. What gives?&lt;/p&gt;    &lt;h3&gt;The Ideals of Ruby’s Creator&lt;/h3&gt;    &lt;p style="float: right;"&gt;&lt;img src="http://redhanded.hobix.com/images/ruby-lang-matz.png" style="padding-left: 8px;" alt="" /&gt;&lt;/p&gt;    &lt;p&gt;Ruby is a language of careful balance.  Its creator, &lt;a href="http://www.rubyist.net/%7Ematz/"&gt;Yukihiro “matz” Matsumoto&lt;/a&gt;, blended parts of his favorite languages (Perl, Smalltalk, Eiffel, Ada, and Lisp) to form a new language that balanced functional programming with imperative programming.&lt;/p&gt;    &lt;p&gt;He has often said that he is “trying to make Ruby natural, not simple,” in a way that mirrors life.&lt;/p&gt;    &lt;p&gt;Building on this, he adds:&lt;/p&gt;    &lt;blockquote&gt;   &lt;p&gt;Ruby is simple in appearance, but is very complex inside, just like our human body&lt;sup&gt;&lt;a href="http://www.ruby-lang.org/en/about/#fn1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;  &lt;/blockquote&gt;    &lt;h3&gt;About Ruby’s Growth&lt;/h3&gt;    &lt;p&gt;Since its public release in 1995, Ruby has drawn devoted coders worldwide. In 2006, Ruby achieved mass acceptance. With active user groups formed in the world’s major cities and Ruby-related conferences filled to capacity.&lt;/p&gt;    &lt;p style="float: right;"&gt;&lt;img src="http://gmane.org/plot-rate.php?group=gmane.comp.lang.ruby.general&amp;width=280&amp;amp;height=140&amp;title=Ruby-Talk+Activity+over+4+Years" style="padding-left: 8px;" title="Graph courtesy of Gmane." alt="Graph courtesy of Gmane." /&gt;&lt;/p&gt;    &lt;p&gt;Ruby-Talk, the primary &lt;a href="http://www.ruby-lang.org/en/community/mailing-lists/"&gt;mailing list&lt;/a&gt; for discussion of the Ruby language has climbed to an average of 200 messages per day.&lt;/p&gt;    &lt;p&gt;The &lt;span class="caps"&gt;TIOBE&lt;/span&gt; index, which measures the growth of programming languages, ranks Ruby as #13 among programming languages worldwide. Citing its growth, they predict, “Chances are that Ruby will enter the top 10 within half a year.” Much of the growth is attributed to the popularity of software written in Ruby, particularly the Ruby on Rails web framework&lt;sup&gt;&lt;a href="http://www.ruby-lang.org/en/about/#fn2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;    &lt;p&gt;Ruby is also &lt;a href="http://www.ruby-lang.org/en/about/license.txt"&gt;totally free&lt;/a&gt;.  Not only free of charge, but also free to use, copy, modify, and distribute.&lt;/p&gt;    &lt;h3&gt;Seeing Everything as an Object&lt;/h3&gt;    &lt;p&gt;Initially, Matz looked at other languages to find an ideal syntax. Recalling his search, he said, “I wanted a scripting language that was more powerful than Perl, and more object-oriented than Python&lt;sup&gt;&lt;a href="http://www.ruby-lang.org/en/about/#fn3"&gt;3&lt;/a&gt;&lt;/sup&gt;.”&lt;/p&gt;    &lt;p&gt;In Ruby, everything is an object. Every bit of information and code can be given their own properties and actions. Object-oriented programming calls properties by the name &lt;em&gt;instance variables&lt;/em&gt; and actions are known as &lt;em&gt;methods&lt;/em&gt;.  Ruby’s pure object-oriented approach is most commonly demonstrated by a bit of code which applies an action to a number.&lt;/p&gt;   &lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="number"&gt;5&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;times&lt;/span&gt; &lt;span class="punct"&gt;{&lt;/span&gt; &lt;span class="ident"&gt;print&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;We *love* Ruby -- it's outrageous!&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt; &lt;span class="punct"&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;   &lt;p&gt;In many languages, numbers and other primitive types are not objects. Ruby follows the influence of the Smalltalk language by giving methods and instance variables to all of its types. This eases one’s use of Ruby, since rules applying to objects apply to all of Ruby.&lt;/p&gt;    &lt;h3&gt;Ruby’s Flexibility&lt;/h3&gt;    &lt;p&gt;Ruby is seen as a flexible language, since it allows its users to freely alter its parts. Essential parts of Ruby can be removed or redefined, at will. Existing parts can be added upon. Ruby tries not to restrict the coder.&lt;/p&gt;    &lt;p&gt;For example, addition is performed with the plus (&lt;code&gt;+&lt;/code&gt;) operator.  But, if you’d rather use the readable word &lt;code&gt;plus&lt;/code&gt;, you could add such a method to Ruby’s builtin &lt;code&gt;Numeric&lt;/code&gt; class.&lt;/p&gt;   &lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;Numeric&lt;/span&gt;&lt;br /&gt; &lt;span class="keyword"&gt;def &lt;/span&gt;&lt;span class="method"&gt;plus&lt;/span&gt;&lt;span class="punct"&gt;(&lt;/span&gt;&lt;span class="ident"&gt;x&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt;   &lt;span class="constant"&gt;self&lt;/span&gt;&lt;span class="punct"&gt;.+(&lt;/span&gt;&lt;span class="ident"&gt;x&lt;/span&gt;&lt;span class="punct"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="ident"&gt;y&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="number"&gt;5&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;plus&lt;/span&gt; &lt;span class="number"&gt;6&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;# y is now equal to 11&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;   &lt;p&gt;Ruby’s operators are syntactic sugar for methods. You can redefine them as well.&lt;/p&gt;    &lt;h3&gt;Blocks, a Truly Expressive Feature&lt;/h3&gt;    &lt;p&gt;Ruby’s block are also seen as a source of great flexibility. A programmer can attach a closure to any method, describing how that method should act. The closure is called a &lt;em&gt;block&lt;/em&gt; and has become one of the most popular features for newcomers to Ruby from other imperative languages like &lt;span class="caps"&gt;PHP&lt;/span&gt; or Visual Basic.&lt;/p&gt;    &lt;p&gt;Blocks are insipired by functional languages.  Matz said, “in Ruby closures, I wanted to respect the Lisp culture&lt;sup&gt;&lt;a href="http://www.ruby-lang.org/en/about/#fn4"&gt;4&lt;/a&gt;&lt;/sup&gt;.”&lt;/p&gt;   &lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="ident"&gt;search_engines&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt;&lt;br /&gt; &lt;span class="punct"&gt;%w[&lt;/span&gt;&lt;span class="string"&gt;Google Yahoo MSN&lt;/span&gt;&lt;span class="punct"&gt;].&lt;/span&gt;&lt;span class="ident"&gt;map&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;engine&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;&lt;br /&gt;   &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;http://www.&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="ident"&gt;engine&lt;/span&gt;&lt;span class="punct"&gt;.&lt;/span&gt;&lt;span class="ident"&gt;downcase&lt;/span&gt; &lt;span class="punct"&gt;+&lt;/span&gt; &lt;span class="punct"&gt;"&lt;/span&gt;&lt;span class="string"&gt;.com&lt;/span&gt;&lt;span class="punct"&gt;"&lt;/span&gt;&lt;br /&gt; &lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;   &lt;p&gt;In the above code, the block is described inside the &lt;code&gt;do ... end&lt;/code&gt; construct.  The &lt;code&gt;map&lt;/code&gt; method applies the block to the provided list of words. Many other methods in Ruby leave a hole open for a coder to write their own block to fill in the details of what that method should do.&lt;/p&gt;    &lt;h3&gt;Ruby and the Mixin&lt;/h3&gt;    &lt;p&gt;Unlike many object-oriented languages, Ruby features single inheritance only, &lt;strong&gt;on purpose&lt;/strong&gt;. But Ruby knows the concept of modules (called Categories in Objective-C). Modules are collections of methods.&lt;/p&gt;    &lt;p&gt;Classes can mixin a module and receive all its methods for free.  For example, any class which implements the &lt;code&gt;each&lt;/code&gt; method can mixin the &lt;code&gt;Enumerable&lt;/code&gt; module, which adds a pile of methods that use &lt;code&gt;each&lt;/code&gt; for looping.&lt;/p&gt;   &lt;pre class="code ruby-code"&gt;&lt;code&gt;&lt;span class="keyword"&gt;class &lt;/span&gt;&lt;span class="class"&gt;MyArray&lt;/span&gt;&lt;br /&gt; &lt;span class="ident"&gt;include&lt;/span&gt; &lt;span class="constant"&gt;Enumerable&lt;/span&gt;&lt;br /&gt;&lt;span class="keyword"&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;   &lt;p&gt;Generally, Rubyists see this as a much clearer way than multiple inheritance, which is complex and can be too restrictive.&lt;/p&gt;    &lt;h3&gt;Ruby’s Visual Appearance&lt;/h3&gt;    &lt;p&gt;While Ruby often uses very limited punctuation and usually prefers English keywords, some punctuation is used to decorate Ruby. Ruby needs no variable declarations. It uses simple naming conventions to denote the scope of variables.&lt;/p&gt;    &lt;ul&gt;&lt;li&gt;&lt;code&gt;var&lt;/code&gt; could be a local variable.&lt;/li&gt;&lt;li&gt;&lt;code&gt;@var&lt;/code&gt; is an instance variable.&lt;/li&gt;&lt;li&gt;&lt;code&gt;$var&lt;/code&gt; is a global variable.&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;These sigils enhance readability by allowing the programmer to easily identify the roles of each variable. It also becomes unnecessary to use a tiresome &lt;code&gt;self.&lt;/code&gt; prepended to every instance member.&lt;/p&gt;    &lt;h3&gt;Beyond the Basics&lt;/h3&gt;    &lt;p&gt;Ruby has a wealth of other features, among which are the following:&lt;/p&gt;    &lt;ul&gt;&lt;li&gt;Ruby has exception handling features, like Java or Python, to make it easy to handle errors.&lt;/li&gt;&lt;/ul&gt;    &lt;ul&gt;&lt;li&gt;Ruby features a true mark-and-sweep garbage collector for all Ruby objects. No need to maintain reference counts in extension libraries.  As Matz says, “This is better for your health.”&lt;/li&gt;&lt;/ul&gt;    &lt;ul&gt;&lt;li&gt;Writing C extensions in Ruby is easier than in Perl or Python, with a very elegant &lt;span class="caps"&gt;API&lt;/span&gt; for calling Ruby from C.  This includes calls for embedding Ruby in software, for use as a scripting language.  &lt;span class="caps"&gt;A SWIG&lt;/span&gt; interface is also available.&lt;/li&gt;&lt;/ul&gt;    &lt;ul&gt;&lt;li&gt;Ruby can load extension libraries dynamically if an OS allows.&lt;/li&gt;&lt;/ul&gt;    &lt;ul&gt;&lt;li&gt;Ruby features OS independent threading. Thus, for all platforms on which Ruby runs, you also have multithreading, regardless of if the OS supports it or not, even on MS-DOS!&lt;/li&gt;&lt;/ul&gt;    &lt;ul&gt;&lt;li&gt;Ruby is highly portable: it is developed mostly on &lt;span class="caps"&gt;GNU&lt;/span&gt;/Linux, but works on many types of &lt;span class="caps"&gt;UNIX&lt;/span&gt;, Mac &lt;span class="caps"&gt;OS X&lt;/span&gt;, Windows 95/98/Me/NT/2000/XP, &lt;span class="caps"&gt;DOS&lt;/span&gt;, BeOS, OS/2, etc.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;from: &lt;a href="http://www.ruby-lang.org/en/about/"&gt;http://www.ruby-lang.org/en/about/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115977579798936852?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115977579798936852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115977579798936852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115977579798936852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115977579798936852'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/10/ruby.html' title='Ruby'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115937876590932881</id><published>2006-09-27T10:39:00.000-07:00</published><updated>2006-09-27T11:01:20.456-07:00</updated><title type='text'>Prado</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;font&gt;PRADO is a component-based and event-driven framework&lt;br /&gt;for rapid Web programming in PHP 5.&lt;br /&gt;PRADO reconceptualizes Web application development in terms of components,&lt;br /&gt;events and properties instead of procedures, URLs and query&lt;br /&gt;parameters.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;A PRADO component is a combination of a specification file (in XML), an HTML template and a PHP class. PRADO components are combined together to form larger components or complete PRADO pages.&lt;br /&gt;&lt;br /&gt;Developing PRADO Web applications mainly involves instantiating prebuilt and application-specific component types, configuring them by setting their properties, responding to their events by writing handler functions, and composing them into application tasks.&lt;br /&gt;&lt;br /&gt;&lt;font&gt;PRADO provides the following benefits for Web application developers:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;br /&gt;&lt;li&gt;&lt;em&gt;reusability&lt;/em&gt; - Codes following the PRADO component protocol are highly reusable. Everything in PRADO is a reusable component.&lt;/li&gt; &lt;li&gt;&lt;em&gt;ease of use&lt;/em&gt; - Creating and using components are extremely easy. Usually they simply involve configuring component properties.&lt;/li&gt; &lt;li&gt;&lt;em&gt;robustness&lt;/em&gt; - PRADO frees developers from writing boring, buggy code. They code in terms of objects, methods and properties, instead of URLs and query parameters. The latest PHP5 exception mechanism is exploited that enables line-precise error reporting.&lt;/li&gt; &lt;li&gt;&lt;em&gt;performance&lt;/em&gt; - PRADO uses a cache technique to ensure the performance of applications based on it. The performance is in fact comparable to those based on commonly used template engines.&lt;/li&gt; &lt;li&gt;&lt;em&gt;team integration&lt;/em&gt; - PRADO enables separation of content and presentation. Components, typically pages, have their content (logic) and presentation stored in different files.&lt;/li&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/ul&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;&lt;font&gt;from: &lt;a href="http://www.xisc.com/" title="Prado"&gt;http://www.xisc.com&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115937876590932881?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115937876590932881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115937876590932881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115937876590932881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115937876590932881'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/09/prado.html' title='Prado'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115920614992113823</id><published>2006-09-25T10:38:00.000-07:00</published><updated>2006-09-25T10:42:30.383-07:00</updated><title type='text'>PEAR - PHP Extension and Application Repository</title><content type='html'>&lt;p&gt;&lt;acronym title="PHP Extension and Application Repository"&gt;PEAR&lt;/acronym&gt; is a framework and distribution system for reusable PHP&lt;br /&gt;components. More &lt;b&gt;information&lt;/b&gt; about PEAR can be found in the&lt;br /&gt;&lt;a href="/manual/en/"&gt;online manual&lt;/a&gt; and the&lt;a href="/manual/en/faq.php"&gt; FAQ&lt;/a&gt;.&lt;/p&gt;If you are a first time user, you might be especially interested in the manual chapter "&lt;a href="/manual/en/about-pear.php"&gt;About PEAR&lt;/a&gt;".&lt;br /&gt;&lt;br /&gt;Recent &lt;b&gt;news&lt;/b&gt; about PEAR can be found &lt;a href="/news/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;PEAR provides the above mentioned PHP components in the form of socalled "Packages". If you would like to &lt;b&gt;download&lt;/b&gt; PEAR packages, you can &lt;a href="/packages.php"&gt;browse the complete list&lt;/a&gt; here.  Alternatively you  can  search for packages by some keywords using the search box above. Apart from simply downloading a package, PEAR also provides a command-line interface that can be used to automatically &lt;b&gt;install&lt;/b&gt; packages. The manual &lt;a href="/manual/en/installation.cli.php"&gt;describes this procedure&lt;/a&gt; in detail.&lt;br /&gt;In case you need &lt;b&gt;support&lt;/b&gt; for PEAR in general or a package in special, we have compiled a list of the available&lt;a href="/support/"&gt; support resources&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;from: &lt;a href="http://pear.php.net"&gt;http://pear.php.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115920614992113823?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115920614992113823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115920614992113823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115920614992113823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115920614992113823'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/09/pear-php-extension-and-application.html' title='PEAR - PHP Extension and Application Repository'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115910394298643311</id><published>2006-09-24T06:17:00.000-07:00</published><updated>2006-09-24T06:19:09.843-07:00</updated><title type='text'>CakePHP</title><content type='html'>&lt;span style="font-weight: bold;"&gt;What is CakePHP?&lt;/span&gt;&lt;br /&gt;Cake is a rapid development framework for PHP which uses commonly known design patterns like ActiveRecord, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility.&lt;br /&gt;&lt;br /&gt;from: &lt;a href="http://www.cakephp.org/"&gt;http://www.cakephp.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115910394298643311?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115910394298643311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115910394298643311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115910394298643311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115910394298643311'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/09/cakephp.html' title='CakePHP'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115901748962519344</id><published>2006-09-23T06:06:00.000-07:00</published><updated>2006-09-23T06:29:44.246-07:00</updated><title type='text'>Ruby on Rails</title><content type='html'>Ruby on Rails is an open-source web framework that's optimized for programmer happiness and sustainable productivity. It lets you write beautiful code by favoring convention over configuration&lt;br /&gt;&lt;h3&gt;What's in the package?&lt;/h3&gt;Rails is a full-stack framework for developing database-backed web applications according to the Model-View-Control pattern. From the Ajax in the view, to the request and response in the controller, to the domain model wrapping the database, Rails gives you a pure-Ruby development environment. To go live, all you need to add is a database and a web server.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Who is already on Rails?&lt;/h3&gt;Everyone from startups to non-profits to enterprise organizations are using Rails. Rails is all about infrastructure so it's a great fit for practically any type of web application Be it software for collaboration, community, e-commerce, content management, statistics, management, you name it. Examples:&lt;br /&gt;&lt;br /&gt;&lt;table class="productgrid" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="padding-right: 15px;"&gt;&lt;a class="no_link_hover" href="http://www.basecamphq.com/"&gt;&lt;img alt="Basecamp" src="http://www.rubyonrails.org/images/applications/basecamp.gif" height="110" width="175" /&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.basecamphq.com/"&gt;Basecamp&lt;/a&gt;: Project management.&lt;br /&gt;The  original Rails app by 37signals.&lt;/p&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="no_link_hover" href="http://www.campfirenow.com/"&gt;&lt;img alt="Campfire" src="http://www.rubyonrails.org/images/applications/campfire2.gif" height="110" width="175" /&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.campfirenow.com/"&gt;Campfire&lt;/a&gt;: Group chat for  biz.&lt;br /&gt;Pushing the limits of Ajax in Rails.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="padding-right: 15px;"&gt;&lt;a class="no_link_hover" href="http://www.43things.com/"&gt;&lt;img alt="43things" src="http://www.rubyonrails.org/images/applications/43things.gif" height="110" width="175" /&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.43things.com/"&gt;43things&lt;/a&gt;: Achieve your goals in  life.&lt;br /&gt;&lt;/p&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="no_link_hover" href="http://www.odeo.com/"&gt;&lt;img alt="Odeo" src="http://www.rubyonrails.org/images/applications/odeo.gif" height="110" width="175" /&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.odeo.com/"&gt;ODEO&lt;/a&gt;: Record and share  audio.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="padding-right: 15px;"&gt;&lt;a class="no_link_hover" href="http://www.shopify.com/"&gt;&lt;img src="http://www.rubyonrails.org/images/applications/shopify.gif" height="110" width="175" /&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.shopify.com/"&gt;Shopify&lt;/a&gt;: E-commerce made easy.&lt;/p&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="no_link_hover" href="http://www.fluxiom.com/"&gt;&lt;img src="http://www.rubyonrails.org/images/applications/fluxiom.gif" height="110" width="175" /&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://www.fluxiom.com/"&gt;Fluxiom&lt;/a&gt;: Digital asset  management.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="padding-right: 15px;"&gt;&lt;a class="no_link_hover" href="http://www.strongspace.com/"&gt;&lt;img alt="Strongpace" src="http://www.rubyonrails.org/images/applications/strongspace.gif" height="110" width="175" /&gt;&lt;/a&gt;  &lt;p style="margin-bottom: 5px;"&gt;&lt;a href="http://www.strongspace.com/"&gt;Strongspace&lt;/a&gt;: Secure file  hosting.&lt;/p&gt;&lt;/td&gt; &lt;td&gt;&lt;a class="no_link_hover" href="http://www.typosphere.org/"&gt;&lt;img alt="Typo" src="http://www.rubyonrails.org/images/applications/typo.gif" height="110" width="175" /&gt;&lt;/a&gt;  &lt;p style="margin-bottom: 5px;"&gt;&lt;a href="http://www.typosphere.org/"&gt;Typo&lt;/a&gt;: Put  your weblog on Rails.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td colspan="2"&gt; &lt;p style="text-align: center;"&gt;&lt;i&gt;&lt;a href="/applications"&gt;See more  applications&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;What else do I need?&lt;/h3&gt;Rails works with a wealth of web servers and databases. For web server, we recommend &lt;a href="http://httpd.apache.org/"&gt;Apache&lt;/a&gt; or &lt;a href="http://www.lighttpd.net/"&gt;lighttpd&lt;/a&gt;, running either FastCGI or SCGI, or &lt;a href="http://mongrel.rubyforge.org/"&gt;Mongrel&lt;/a&gt;. For database, you can use MySQL, PostgreSQL, SQLite, Oracle, SQL Server, DB2, or Firebird. Just about any operating system will do, but we recommend a 'nix-based one for deployment.&lt;br /&gt;&lt;br /&gt;If you need hosting, &lt;a href="http://www.textdrive.com/"&gt;TextDrive&lt;/a&gt; is the official Ruby on Rails host, offering fantastic plans with a knowledgeable staff. Whether you need shared or dedicated hosting, these guys are experts in Ruby on Rails. For alternatives, see the wiki for a &lt;a href="http://wiki.rubyonrails.com/rails/pages/RailsWebHosts"&gt;full list of Rails web hosts&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;from: &lt;a href="http://www.rubyonrails.org"&gt;http://www.rubyonrails.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115901748962519344?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115901748962519344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115901748962519344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115901748962519344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115901748962519344'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/09/ruby-on-rails.html' title='Ruby on Rails'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115886181854655615</id><published>2006-09-21T11:00:00.000-07:00</published><updated>2006-09-21T11:03:51.040-07:00</updated><title type='text'>Spry framework for Ajax</title><content type='html'>&lt;p&gt;The Spry framework for Ajax is a JavaScript library for web designers that provides functionality that allows designers to build pages that provide a richer experience for their users. It is designed to bring Ajax to the web design community who can benefit from Ajax, but are not well served by other frameworks.&lt;/p&gt;     &lt;p&gt;The first release of the Spry framework was a preview of the data capabilities that enable designers to incorporate XML data into their HTML documents using HTML, CSS, and a minimal amount of JavaScript, without the need for refreshing the entire page. The Spry framework is HTML-centric, and easy to implement for users with basic knowledge of HTML, CSS and JavaScript. The framework was designed such that the markup is simple and the JavaScript is minimal. The Spry framework can be used by anyone who is authoring for the web in their tool of choice. &lt;/p&gt;     &lt;p&gt;This is the 4th pre-release of Spry. In this release, we are introducing Spry Effects: javascript behaviors that provide animation and color effects for page elements. &lt;/p&gt;     &lt;div class="columns-2-Abb-A"&gt;         &lt;p&gt;This is just the start of the project. We're releasing a preview build now so that you have plenty of time to give us feedback on what’s working for you, and what isn't. Your feedback and participation is important to us as we build out the framework.&lt;/p&gt;       &lt;/div&gt;     &lt;div class="columns-2-Abb-bb"&gt;         &lt;div class="options-pod"&gt;           &lt;div class="op-head"&gt;             &lt;h3&gt;Download and Discuss &lt;/h3&gt;           &lt;/div&gt;           &lt;div class="op-body"&gt;             &lt;p class="iconmarker-16x16"&gt;&lt;a title="Download" href="http://www.macromedia.com/go/labs_spry_download"&gt;&lt;img src="http://labs.adobe.com/images/icons/download.gif" alt="Download" height="16" width="16" /&gt;Get prerelease 1.3 of Spry framework now&lt;/a&gt;&lt;/p&gt;             &lt;p class="iconmarker-16x16"&gt;&lt;a href="http://www.adobe.com/go/labs_spry_pr1_forum" title="Discuss" target="mmwindoiw"&gt;&lt;img src="http://labs.adobe.com/images/icons/discussion.gif" alt="Download" height="16" width="16" /&gt;Discuss Spry in the Labs forums&lt;/a&gt;&lt;/p&gt;           &lt;/div&gt;         &lt;/div&gt;       &lt;/div&gt;     &lt;p&gt;To see what is possible using Spry, check out our &lt;a href="http://labs.adobe.com/technologies/spry/demos/" target="_blank"&gt;Demos&lt;/a&gt; that       show the Spry framework in action. &lt;/p&gt;     &lt;ul&gt;&lt;li&gt;&lt;a href="http://labs.adobe.com/technologies/spry/demos/gallery/" target="_blank"&gt;Photo Gallery&lt;/a&gt;—An XML-based photo           gallery. &lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.adobe.com/technologies/spry/demos/products/" target="_blank"&gt;Product Table&lt;/a&gt;—An interactive           data grid displaying XML-based data. &lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.adobe.com/technologies/spry/demos/rssreader/" target="_blank"&gt;RSS Reader&lt;/a&gt;—An RSS reader showing how multiple XML files can be used to build a rich interface.&lt;/li&gt;&lt;li&gt;&lt;a href="http://labs.adobe.com/technologies/spry/demos/effects/" target="_blank"&gt;Effects Demo&lt;/a&gt;—A series of sample effects.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;from: &lt;a href="http://labs.adobe.com/technologies/spry/"&gt;http://labs.adobe.com/technologies/spry/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115886181854655615?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115886181854655615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115886181854655615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115886181854655615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115886181854655615'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/09/spry-framework-for-ajax.html' title='Spry framework for Ajax'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115881249494415193</id><published>2006-09-20T21:21:00.000-07:00</published><updated>2006-09-20T21:21:34.956-07:00</updated><title type='text'>Ajax: A New Approach to Web Applications</title><content type='html'>&lt;p&gt;If anything about current interaction design can be called “glamorous,” it’s creating Web applications. After all, when was the last time you heard someone rave about the interaction design of a product that wasn’t on the Web? (Okay, besides the iPod.) All the cool, innovative new projects are online.&lt;/p&gt;  &lt;p&gt;Despite this, Web interaction designers can’t help but feel a little envious of our colleagues who create desktop software. Desktop applications have a richness and responsiveness that has seemed out of reach on the Web. The same simplicity that enabled the Web’s rapid proliferation also creates a gap between the experiences we can provide and the experiences users can get from a desktop application.&lt;/p&gt;  &lt;p&gt;That gap is closing. Take a look at &lt;a href="http://www.google.com/webhp?complete=1&amp;hl=en"&gt;Google Suggest&lt;/a&gt;. Watch the way the suggested terms update as you type, almost instantly. Now look at &lt;a href="http://maps.google.com/"&gt;Google Maps&lt;/a&gt;. Zoom in. Use your cursor to grab the map and scroll around a bit. Again, everything happens almost instantly, with no waiting for pages to reload.&lt;/p&gt;  &lt;p&gt;Google Suggest and Google Maps are two examples of a new approach to web applications that we at Adaptive Path have been calling Ajax. The name is shorthand for Asynchronous JavaScript + XML, and it represents a fundamental shift in what’s possible on the Web.&lt;/p&gt;  &lt;h2&gt;Defining Ajax&lt;/h2&gt;  &lt;p&gt;Ajax isn’t a technology. It’s really several technologies, each flourishing in its own right, coming together in powerful new ways. Ajax incorporates:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.adaptivepath.com/publications/essays/archives/000266.php"&gt;standards-based presentation&lt;/a&gt; using XHTML and CSS;&lt;/li&gt;&lt;li&gt;dynamic display and interaction using the &lt;a href="http://www.scottandrew.com/weblog/articles/dom_1"&gt;Document Object Model&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;data interchange and manipulation using &lt;a href="http://www-106.ibm.com/developerworks/xml/library/x-xslt/?article=xr"&gt;XML and XSLT&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;asynchronous data retrieval using &lt;a href="http://www.xml.com/pub/a/2005/02/09/xml-http-request.html"&gt;XMLHttpRequest&lt;/a&gt;;&lt;/li&gt;&lt;li&gt;and &lt;a href="http://www.crockford.com/javascript/javascript.html"&gt;JavaScript&lt;/a&gt; binding everything together.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The classic web application model works like this: Most user actions in the interface trigger an HTTP request back to a web server. The server does some processing — retrieving data, crunching numbers, talking to various legacy systems — and then returns an HTML page to the client. It’s a model adapted from the Web’s original use as a hypertext medium, but as fans of &lt;a href="http://www.jjg.net/elements/"&gt;The Elements of User Experience&lt;/a&gt; know, what makes the Web good for hypertext doesn’t necessarily make it good for software applications.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.adaptivepath.com/images/publications/essays/ajax-fig1.png"&gt;&lt;img src="http://www.adaptivepath.com/images/publications/essays/ajax-fig1_small.png" alt="Ajax Overview 1" border="0" height="455" width="475" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Figure 1: The traditional model for web applications (left) compared to the Ajax model (right).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This approach makes a lot of technical sense, but it doesn’t make for a great user experience. While the server is doing its thing, what’s the user doing? That’s right, waiting. And at every step in a task, the user waits some more.&lt;/p&gt;  &lt;p&gt;Obviously, if we were designing the Web from scratch for applications, we wouldn’t make users wait around. Once an interface is loaded, why should the user interaction come to a halt every time the application needs something from the server? In fact, why should the user see the application go to the server at all?&lt;/p&gt;  &lt;h2&gt;How Ajax is Different&lt;/h2&gt;  &lt;p&gt;An Ajax application eliminates the start-stop-start-stop nature of interaction on the Web by introducing an intermediary — an Ajax engine — between the user and the server. It seems like adding a layer to the application would make it less responsive, but the opposite is true.&lt;/p&gt;  &lt;p&gt;Instead of loading a webpage, at the start of the session, the browser loads an Ajax engine — written in JavaScript and usually tucked away in a hidden frame. This engine is responsible for both rendering the interface the user sees and communicating with the server on the user’s behalf. The Ajax engine allows the user’s interaction with the application to happen asynchronously — independent of communication with the server. So the user is never staring at a blank browser window and an hourglass icon, waiting around for the server to do something.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.adaptivepath.com/images/publications/essays/ajax-fig2.png"&gt;&lt;img src="http://www.adaptivepath.com/images/publications/essays/ajax-fig2_small.png" alt="Ajax Overview 2" border="0" height="598" width="475" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Figure 2: The synchronous interaction pattern of a traditional web application (top) compared with the asynchronous pattern of an Ajax application (bottom).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Every user action that normally would generate an HTTP request takes the form of a JavaScript call to the Ajax engine instead. Any response to a user action that doesn’t require a trip back to the server — such as simple data validation, editing data in memory, and even some navigation — the engine handles on its own. If the engine needs something from the server in order to respond — if it’s submitting data for processing, loading additional interface code, or retrieving new data — the engine makes those requests asynchronously, usually using XML, without stalling a user’s interaction with the application.&lt;/p&gt;  &lt;h2&gt;Who’s Using Ajax&lt;/h2&gt;  &lt;p&gt;Google is making a huge investment in developing the Ajax approach. All of the major products Google has introduced over the last year — &lt;a href="http://www.orkut.com/"&gt;Orkut&lt;/a&gt;, &lt;a href="http://www.gmail.com/"&gt;Gmail&lt;/a&gt;, the latest beta version of &lt;a href="http://groups-beta.google.com/"&gt;Google Groups&lt;/a&gt;, &lt;a href="http://www.google.com/webhp?complete=1&amp;hl=en"&gt;Google Suggest&lt;/a&gt;, and &lt;a href="http://maps.google.com/"&gt;Google Maps&lt;/a&gt; — are Ajax applications. (For more on the technical nuts and bolts of these Ajax implementations, check out these excellent analyses of &lt;a href="http://johnvey.com/features/gmailapi/"&gt;Gmail&lt;/a&gt;, &lt;a href="http://serversideguy.blogspot.com/2004/12/google-suggest-dissected.html"&gt;Google Suggest&lt;/a&gt;, and &lt;a href="http://web.archive.org/web/20050331002145/jgwebber.blogspot.com/2005/02/mapping-google.html"&gt;Google Maps&lt;/a&gt;.) Others are following suit: many of the features that people love in &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt; depend on Ajax, and Amazon’s &lt;a href="http://www.a9.com/"&gt;A9.com&lt;/a&gt; search engine applies similar techniques.&lt;/p&gt;  &lt;p&gt;These projects demonstrate that Ajax is not only technically sound, but also practical for real-world applications. This isn’t another technology that only works in a laboratory. And Ajax applications can be any size, from the very simple, single-function Google Suggest to the very complex and sophisticated Google Maps.&lt;/p&gt;  &lt;p&gt;At Adaptive Path, we’ve been doing our own work with Ajax over the last several months, and we’re realizing we’ve only scratched the surface of the rich interaction and responsiveness that Ajax applications can provide. Ajax is an important development for Web applications, and its importance is only going to grow. And because there are so many developers out there who already know how to use these technologies, we expect to see many more organizations following Google’s lead in reaping the competitive advantage Ajax provides.&lt;/p&gt;  &lt;h2&gt;Moving Forward&lt;/h2&gt;  &lt;p&gt;The biggest challenges in creating Ajax applications are not technical. The core Ajax technologies are mature, stable, and well understood. Instead, the challenges are for the designers of these applications: to forget what we think we know about the limitations of the Web, and begin to imagine a wider, richer range of possibilities.&lt;/p&gt;  &lt;p&gt;It’s going to be fun.&lt;/p&gt;  &lt;hr /&gt;  &lt;a name="qanda"&gt;&lt;h2&gt;Ajax Q&amp;amp;A&lt;/h2&gt;&lt;/a&gt;  &lt;p&gt; &lt;strong&gt;March 13, 2005:&lt;/strong&gt; Since we first published Jesse’s essay, we’ve received an enormous amount of correspondence from readers with questions about Ajax. In this Q&amp;A, Jesse responds to some of the most common queries. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Did Adaptive Path invent Ajax? Did Google? Did Adaptive Path help build Google’s Ajax applications? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; Neither Adaptive Path nor Google invented Ajax. Google’s recent products are simply the highest-profile examples of Ajax applications. Adaptive Path was not involved in the development of Google’s Ajax applications, but we have been doing Ajax work for some of our other clients. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Is Adaptive Path selling Ajax components or trademarking the name? Where can I download it? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; Ajax isn’t something you can download. It’s an approach — a way of thinking about the architecture of web applications using certain technologies. Neither the Ajax name nor the approach are proprietary to Adaptive Path. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Is Ajax just another name for XMLHttpRequest? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; No. XMLHttpRequest is only part of the Ajax equation. XMLHttpRequest is the technical component that makes the asynchronous server communication possible; Ajax is our name for the overall approach described in the article, which relies not only on XMLHttpRequest, but on CSS, DOM, and other technologies. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Why did you feel the need to give this a name? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; I needed something shorter than “Asynchronous JavaScript+CSS+DOM+XMLHttpRequest” to use when discussing this approach with clients. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Techniques for asynchronous server communication have been around for years. What makes Ajax a “new” approach? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; What’s new is the prominent use of these techniques in real-world applications to change the fundamental interaction model of the Web. Ajax is taking hold now because these technologies and the industry’s understanding of how to deploy them most effectively have taken time to develop. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Is Ajax a technology platform or is it an architectural style? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; It’s both. Ajax is a set of technologies being used together in a particular way. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; What kinds of applications is Ajax best suited for? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; We don’t know yet. Because this is a relatively new approach, our understanding of where Ajax can best be applied is still in its infancy. Sometimes the traditional web application model is the most appropriate solution to a problem. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Does this mean Adaptive Path is anti-Flash? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; Not at all. Macromedia is an Adaptive Path client, and we’ve long been supporters of Flash technology. As Ajax matures, we expect that sometimes Ajax will be the better solution to a particular problem, and sometimes Flash will be the better solution. We’re also interested in exploring ways the technologies can be mixed (as in the case of Flickr, which uses both). &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Does Ajax have significant accessibility or browser compatibility limitations? Do Ajax applications break the back button? Is Ajax compatible with REST? Are there security considerations with Ajax development? Can Ajax applications be made to work for users who have JavaScript turned off? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; The answer to all of these questions is “maybe”. Many developers are already working on ways to address these concerns. We think there’s more work to be done to determine all the limitations of Ajax, and we expect the Ajax development community to uncover more issues like these along the way. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Some of the Google examples you cite don’t use XML at all. Do I have to use XML and/or XSLT in an Ajax application? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; No. XML is the most fully-developed means of getting data in and out of an Ajax client, but there’s no reason you couldn’t accomplish the same effects using a technology like &lt;a href="http://www.crockford.com/JSON/"&gt;JavaScript Object Notation&lt;/a&gt; or any similar means of structuring data for interchange. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Are Ajax applications easier to develop than traditional web applications? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; Not necessarily. Ajax applications inevitably involve running complex JavaScript code on the client. Making that complex code efficient and bug-free is not a task to be taken lightly, and better development tools and frameworks will be needed to help us meet that challenge. &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;Q.&lt;/strong&gt; Do Ajax applications always deliver a better experience than traditional web applications? &lt;/p&gt;  &lt;p&gt; &lt;strong&gt;A.&lt;/strong&gt; Not necessarily. Ajax gives interaction designers more flexibility. However, the more power we have, the more caution we must use in exercising it. We must be careful to use Ajax to enhance the user experience of our applications, not degrade it. &lt;/p&gt;    &lt;p&gt;&lt;em&gt;&lt;a href="http://www.adaptivepath.com/aboutus/jjg.php"&gt;Jesse James Garrett&lt;/a&gt; is the Director of User Experience Strategy and a founder of Adaptive Path. He is the author of the widely-referenced book &lt;a href="http://www.jjg.net/elements/"&gt;The Elements of User Experience&lt;/a&gt;. Jesse’s other essays include &lt;a href="http://www.adaptivepath.com/publications/essays/archives/000242.php"&gt;The Nine Pillars of Successful Web Teams&lt;/a&gt; and &lt;a href="http://www.adaptivepath.com/publications/essays/archives/000331.php"&gt;Six Design Lessons From the Apple Store&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Form: &lt;a href="http://www.adaptivepath.com/publications/essays/archives/000385.php"&gt;http://www.adaptivepath.com/publications/essays/archives/000385.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115881249494415193?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115881249494415193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115881249494415193' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115881249494415193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115881249494415193'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/09/ajax-new-approach-to-web-applications.html' title='Ajax: A New Approach to Web Applications'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115873593677067010</id><published>2006-09-20T00:05:00.000-07:00</published><updated>2006-09-20T00:05:36.773-07:00</updated><title type='text'>AMFPHP</title><content type='html'>&lt;p&gt;AMFPHP is an open-source Flash Remoting gateway. It’s fast, reliable, 100% free and open-source. Flash Remoting is a technology built into the Flash player core that enables sending data between the server and the client seemlessly. If you've built XML-based RIAs you know how much of a pain it can be to serialize the data, debug, and integrate into your application.With Flash Remoting, you can call remote methods from the Flash client and the arguments will end up in the native remote language, and will come back to Flash correctly typed, so there's no messing with serialization at all. &lt;/p&gt;   &lt;p&gt;You also get to use the wonderful NetConnection debugger, which shows you exactly what's being sent between the client and server. Remoting uses AMF, a very lightweight binary format that cuts the bulk out of packets, meaning data exchange is a lot faster than with XML. All in all, Remoting is the way to go if you're looking to build robust, fast and secure Rich Internet Applications. &lt;/p&gt;   &lt;p&gt;AMFPHP is a complete implementation of Remoting for PHP with tons of features built-in to make creating Remoting apps a whole lot simpler. A distinguishing feature of AMFPHP is the built-in service browser, &lt;a href="http://www.5etdemi.com/amfphp/browser/"&gt;which you can test out live here&lt;/a&gt;, which makes testing asynchronous apps and generating stub code a click away. You can read more about &lt;a href="http://www.amfphp.org/amfphprocks.html"&gt;why AMFPHP and Remoting rock&lt;/a&gt;. Or read more &lt;a href="http://www.amfphp.org/about.html"&gt;about the AMFPHP project&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;from: &lt;a href="http://www.amfphp.org"&gt;http://www.amfphp.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115873593677067010?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115873593677067010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115873593677067010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115873593677067010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115873593677067010'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/09/amfphp.html' title='AMFPHP'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115873589745654892</id><published>2006-09-20T00:03:00.000-07:00</published><updated>2006-09-20T00:04:57.456-07:00</updated><title type='text'>Flash Remoting MX</title><content type='html'>Macromedia Flash Remoting MX provides the connection between Macromedia Flash and your web application server, making it fast and easy to create Rich Internet Applications. With its powerful yet simple programming model, you can easily integrate rich Macromedia Flash content with applications built using Macromedia ColdFusion MX, Microsoft .NET, Java, and SOAP-based web services.&lt;br /&gt;&lt;br /&gt;from:  &lt;a href="http://www.adobe.com/products/flashremoting/"&gt;http://www.adobe.com/products/flashremoting/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115873589745654892?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115873589745654892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115873589745654892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115873589745654892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115873589745654892'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/09/flash-remoting-mx.html' title='Flash Remoting MX'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34726151.post-115873579592424458</id><published>2006-09-20T00:02:00.000-07:00</published><updated>2006-09-20T00:03:15.933-07:00</updated><title type='text'>Hello</title><content type='html'>Hello&lt;br /&gt;&lt;br /&gt;My first blog in real life.&lt;br /&gt;&lt;br /&gt;Started  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34726151-115873579592424458?l=redirectto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://redirectto.blogspot.com/feeds/115873579592424458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34726151&amp;postID=115873579592424458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115873579592424458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34726151/posts/default/115873579592424458'/><link rel='alternate' type='text/html' href='http://redirectto.blogspot.com/2006/09/hello.html' title='Hello'/><author><name>redirectto</name><uri>http://www.blogger.com/profile/12068050848718984473</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
