sábado, 13 de junio de 2009

( Blogger, BlogSpot ) - Translate Manualy like QTranlate - Traducir Manualmente como QTranslate


Translation:


Mi Lengua nativa es el español, y a mí en lo personal me gusta publicar cosas que las otras personas pueden leer y a veces usarlas para sus proyectos personales, pero al principio solo posteaba en español así que mucha gente que entraba al blog se iba porque no entendía el Articulo.

Así que al principio me puse a buscar como traducir blogs y encontré Qtranslate y me gusto el sistema porque a veces los traductores al traducir, no expresa lo que realmente queremos decir PERO!!! Qtranslate solo serbia para WordPress y con el se traduce a mano osea escrito por el propio autor del Post. Así que empecé a buscar Qtranslate para Blogsport o blogger y nada salía.

Un buen día un amigo me dijo que ya que no hay Qtranslate para Blogspot que me creara tu uno (Alejandro Sanchez – www.internetdeveloping.blogspot.com) así que tome su consejo y conseguí a JQuery y con ese concepto me invente 2 clases en CSS para los tags div, uno para cada lenguaje que quería y me cree un pequeño menú.

La primera cosa que hice fue descargarme el JQuery y poner en Java Script en un hosting gratis. Podemos encontrar la última versión de JQuery en su pagina http://jquery.com/ o la versión que yo estoy usando en http://blog.jquery.com/2009/01/21/jquery-131-released/

La segunda cosa que hice fue importar el Java Script al Header de BlogSpot, eso se hace logueandonos a nuestro blog y vamos a Diseño - > Editar HTML y arriba del cierre del head Colocamos esta línea de código:

<script src='http://developyourdream.net/js/jquery.js' type='text/javascript'/>

Donde /js/jquery.js is es la ruta del Java Script de JQuery.
Ejemplo:


La tercera cosa que tenemos que hacer es crear nuestras clases en CSS, yo me cree 4 clases, 2 para manejar los eventos de cambio de idioma y 2 para la expresión en si del idioma. Vamos a colocar estas Clases dentro del CSS del BlogSpot yo lo puse cerca del debajo del Footer y arriba del Cierre del CSS estas son las clases que cree:

.english {display:none;}
.spanish {}
.englishHandler {}
.spanishHandler {}

Ejemplo:


La Última cosa que tenemos que crear en la Configuración es un Mini Java Script el cual lo vamos a escribir arriba del Cierre del Header y abajo de donde importamos el JQuery.

<script type='text/javascript'>
$(document).ready(function() {
$("english").hide();
$(".spanish").show();
$(".englishHandler").click(function() {
$(".english").show();
$(".spanish").hide();
});
$(&quot;.spanishHandler").click(function() {
$(".english").hide();
$(".spanish").show();
});
});
</script>
Ejemplo:


Ahora vamos a la parte de Publicación del Post

Yo me cree un pequeño menú de la siguiente forma:

<span style="color: rgb(255, 0, 0); font-weight: bold;">Translation:</span>
<ul><li class="spanishHandler"><a href="#">Spanish <img class="imgNoBorder" src="http://developyourdream.net/img/spanish_flags.jpg" /></a></li><li class="englishHandler"><a href="#">English <img class="imgNoBorder" src="http://developyourdream.net/img/english_flags.jpg" /></a>
</li></ul>

Con este menú podemos hacer 2 cosas, copiar y pegarlo al inicio de cada post o que se coloque automáticamente, esto lo podemos lograr en Configuración -> Formato colocando el menú en el texto de entrada que dice Plantilla de entrada al Final:
Example Image:

En el Nuevo Post que vamos a crear colocamos todo el texto que sea en español dentro de los tags

<div class="spanish">HOLA MUNDO</div>

y todo el texto que sea en Ingles dentro de los Tags

<div class="english">HELLO WORLD</div>

Nuestro post debe quedar algo así:



My Native language is Spanish, and i like publishing thing that other people can read and see, and even sometime the can use, but I started this blog only in Spanish, so some people cant understand this language.

So I start look how to translate this page, and I found Qtranstlate, Buy it was only for word Press. So I googled Qtranslate for Bloggers or for BlogSpot and nothing came up.

So a friend told me, if you want a Qtranslate way don’t you do it yourself. (Alejandro Sanchez – www.internetdeveloping.blogspot.com ) so I did, I found JQuery and I did made 2 class for my div tags, one for each language.

The first Thing we have to do is download JQuery put the JavaScript in a free hosting page, you can find the last release of JQuery in this page http://jquery.com/ and the one I use is http://blog.jquery.com/2009/01/21/jquery-131-released/

The second thing we have to do is imported to the Header of our BlogSpot so we login in over blog and me go to Layout and then we go to Edit HTML and import with a script tag the JQuery, the tag should say something like this:


<script src='http://developyourdream.net/js/jquery.js' type='text/javascript'/>


were /js/jquery.js is your directory were you host the Java script of JQuery.

Example Image:



The next thing you have to do is to make is the CSS classes, I made 4 , 2 handlers and 2 expressions if we can called lake that and I route them at the end of the CSS close to the footer but you can write it any ware in the CSS and this classes are:

.english {display:none;}
.spanish {}
.englishHandler {}
.spanishHandler {}

Example Image:

The last thing is we have to in the layout is ouwer mini java script and we are going to write it over the end of the head and below the import of the JQuery.

<script type='text/javascript'>
$(document).ready(function() {
$(&quot;.english&quot;).hide();
$(&quot;.spanish&quot;).show();
$(&quot;.englishHandler&quot;).click(function() {
$(&quot;.english&quot;).show();
$(&quot;.spanish&quot;).hide();
});
$(&quot;.spanishHandler&quot;).click(function() {
$(&quot;.english&quot;).hide();
$(&quot;.spanish&quot;).show();
});
});
</script>


Example Image:



Know the publish part:

I did my menu like this:


<span style="color: rgb(255, 0, 0); font-weight: bold;">Translation:</span>
<ul><li class="spanishHandler"><a href="#">Spanish <img class="imgNoBorder" src="http://developyourdream.net/img/spanish_flags.jpg" /></a></li><li class="englishHandler"><a href="#">English <img class="imgNoBorder" src="http://developyourdream.net/img/english_flags.jpg" /></a>
</li></ul>


And We can do two things, we can copy and paste the menu HTML in all our post OR we can automatically put it in post just adding the html in SETTINGS -> FORMATING in the formating we can find a input text named Post Template:

Example Image:

In the new post we what to create if we want to write in Spanish we surround the text with

<div class="spanish">HOLA MUNDO</div>

and if we that to write in English we surround the text with

<div class="english">HELLO WORLD</div>

and our ports will lock like this:
Example Image:

Conectar Flex MySql amfPHP - Connect Flex MySql amfPHP - Flex 3

OBSERVACION: amfPHP 1.9 es soportado hasta Php 5.2.xxx

Translation:
En este tutorial vamos a hacer que un datagrid se llene con información de una base de datos en MySQL y además vamos a crear un formulario donde podamos dejar nuestro nombre y un mensaje.

Esto lo vamos a lograr con amfphp conectándose a MySQL y flex mostrando toda la interfaz.



Lo primero que vamos a crear es crear la lógica de Base de dato de MySQL, esta lógica fue creada por una Compañero de trabajo llamado “Joel Moya” quien me dio los scripts para crear seleccionar e insertar en la base de dato:

CREATE TABLE ‘DataGridMessageTutorial’ (
‘id’ int(11) NOT NULL auto_increment,
‘name’ varchar(30) default NULL,
‘message’ varchar(300) default NULL,
PRIMARY KEY  (‘id’)
) AUTO_INCREMENT=1 ;
SELECT * From DataGridMessageTutorial ORDER BY id DESC;
INSERT INTO DataGridMessageTutorial (
id,
name,
message
)
VALUES (
NULL , 'VARIABLE 1', 'VARIABLE 2'
);"

Ya que tenemos la base de datos podemos crear nuestras funciones remotas una para consultar de la base de datos y otra para insertar en ella:

<?php
Header('Cache-Control: no-cache');
Header('Pragma: no-cache');
class DataGridService
{
var $link;
function DataGridService(){ 
$this->link = mysql_connect("localhost", "verlasco_dydUser", "mypassword") or die ("No conecta con SQLSERVER");
mysql_select_db("verlasco_dyd", $this->link);
}
function getAllMessages(){
include_once("vo/com/dyd/tutorial/vo/MessageVO.php");
$Result = mysql_query("SELECT * From DataGridMessageTutorial ORDER BY id DESC;", $this->link );
while ($row = mysql_fetch_array($Result, MYSQL_ASSOC))
{
$my_user = new MessageVO();
$my_user->id = $row['id'];
$my_user->name = $row['name'];
$my_user->message = $row['message'];

$list_of_users[] = $my_user;
}
return $list_of_users;
}
function saveMessage($obj){
$sql = "INSERT INTO DataGridMessageTutorial (
id,
name,
message
)
VALUES (
NULL , '$obj->name', '$obj->message'
);";
return mysql_query(sprintf($sql));
}
}
?>

Notemos que en la línea 16 hay un new MessageVO() y en la línea 32 se accede a 2 atributos dentro de un objeto, esto es debido a un VO o Value Object esto nos permite enviar y recibir objetos entre el cliente y el servidor, del lado del servidor se construye así:

<?php
class MessageVO {
var $_explicitType = "com.dyd.tutorial.vo.MessageVO";
var $id;
var $name;
var $message;
}
?>

Ahora que tenemos el lado del servidor listo podemos empezar a crear el lado del cliente.

Entonces creemos un Datagrid y un pequeño formulario que contenga nombre y un mensaje:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
width="600" height="630" backgroundColor="0xFFFFFF" borderStyle="solid"
borderThickness="2" borderColor="0x000000" cornerRadius="8" right="2"
left="2" top="2" bottom="2"
creationComplete="creationCompleteHandler(event)"
preloader="com.dyd.tutorial.utils.PathfinderCustomPreloader">
<mx:Script>
<![CDATA[
import com.dyd.tutorial.vo.MessageVO;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*---------------------------- START VARIABLES -------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

[Bindable]private var myArray:Array = []

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------- END VARIABLES --------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/


/******************************************************************************/


/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*-------------------------- START INIT FUNCTIONS ----------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

private function creationCompleteHandler(event:FlexEvent):void{
amf.getAllMessages.send();
}

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*--------------------------- END INIT FUNCTIONS -----------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/


/******************************************************************************/


/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*------------------------- START EVENT FUNCTIONS ----------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

/*-- START EVENT CAIRNGORM --*/



/*--- END EVENT CAIRNGORM ---*/

/***************************/

/*---- START EVENT FLEX -----*/

private function acceptHandler(event:MouseEvent):void{
if( myNameTextInput.text  && myNameTextInput.text.length>0 &&
myMessageTextArea.text  &&  myMessageTextArea.text.length>0){
var messageVO:MessageVO = new MessageVO;
messageVO.name = myNameTextInput.text.toString();
messageVO.message = myMessageTextArea.text.toString();
amf.saveMessage.send( messageVO );

}else{
Alert.show("Name or Messege is Empty","Message");
}
}
private function cancelHandler(event:MouseEvent):void{
myNameTextInput.text  = "";
myMessageTextArea.text = "";
} 
private function getAllMessageResultHandler(event:ResultEvent):void{
myArray = event.result as Array;
}
private function getAllMessageFaultHandler(event:FaultEvent):void{
Alert.show("Data Base Off Line - Refresh The Application", "Message");
}
private function seveMessageResultHandler(event:ResultEvent):void{
if(event.result == true){
myNameTextInput.text  = "";
myMessageTextArea.text = "";
amf.getAllMessages.send();
}else{
Alert.show("Data Base Can't Insert - Please Try Again", "Message");
}
}
private function seveMessageFaultHandler(event:FaultEvent):void{
Alert.show("Data Base Off Line - Refresh The Application", "Message");
}

/*----- END EVENT FLEX ------*/

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*------------------------- END EVENT FUNCTIONS ------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
]]>
</mx:Script>
<mx:RemoteObject id="amf" source="DataGridService" destination="amfphp">
<mx:method  name="getAllMessages"
result="getAllMessageResultHandler(event);"
fault="getAllMessageFaultHandler(event);"/>
<mx:method  name="saveMessage"
result="seveMessageResultHandler(event);"
fault="seveMessageFaultHandler(event);"/>
</mx:RemoteObject>
<mx:DataGrid  id="myDataGrid" width="100%" height="360"
dataProvider="{myArray}" rowHeight="65">
<mx:columns>
<mx:DataGridColumn  dataField="name" headerText="Name"
width="150" wordWrap="true"/>
<mx:DataGridColumn dataField="message" headerText="Message"
wordWrap="true"/>
</mx:columns>
</mx:DataGrid>
<mx:Form width="100%" height="183">
<mx:FormItem label="Name:" >
<mx:TextInput  id="myNameTextInput" width="330" restrict="a-z A-Z"
maxChars="30" />
<mx:Label text="Restrict: a-Z.    Max Chars: 30" color="red" />
</mx:FormItem>
<mx:FormItem label="Message:" >
<mx:TextArea  id="myMessageTextArea" width="330" height="75"
maxChars="200" />
<mx:Label text="Max Chars: 300" color="red" />
</mx:FormItem>
</mx:Form>
<mx:HBox width="300" horizontalAlign="right" >
<mx:Button label="Accept" click="acceptHandler(event);" />
<mx:Button label="Cancel" click="cancelHandler(event);" />
</mx:HBox>
</mx:Application>

Creamos el VO del Lado del Cliente también para poder recibir y enviar los mismos datos:

package com.dyd.tutorial.vo
{
[Bindable]
[RemoteClass(alias="com.dyd.tutorial.vo.MessageVO")]
public class MessageVO
{
public var id:String;
public var name:String;
public var message:String;
}
}

Y el XML que se encarga de llamar al servicio:

<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="amfphp-flashremoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">

<destination id="amfphp">
<channels>
<channel ref="my-amfphp"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
<endpoint uri="/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>

Y aquí les dejo dos imágenes en las cuales vemos como son las rutas de los archivos tanto del lado del cliente como del lado del Servidor:


Ejemplo:

In this Example we want a data grid that fills from a MySQL Database and also we want to save all the messages and name from a form so anybody can leave a message.

So for this we are going to use amfphp to connect to MySQL and flex to display everything.

The first thing we have to do is Database Logic for MySQL and a co worker and also a good friend “Joel Moya” gave me the script to create select and insert in the Database:

CREATE TABLE ‘DataGridMessageTutorial’ (
‘id’ int(11) NOT NULL auto_increment,
‘name’ varchar(30) default NULL,
‘message’ varchar(300) default NULL,
PRIMARY KEY  (‘id’)
) AUTO_INCREMENT=1 ;
SELECT * From DataGridMessageTutorial ORDER BY id DESC;
INSERT INTO DataGridMessageTutorial (
id,
name,
message
)
VALUES (
NULL , 'VARIABLE 1', 'VARIABLE 2'
);"

Know with the database ready we can create the remote function in php, we are going to create 2 function one to consult and one to Insert in the database:

<?php
Header('Cache-Control: no-cache');
Header('Pragma: no-cache');
class DataGridService
{
var $link;
function DataGridService(){ 
$this->link = mysql_connect("localhost", "verlasco_dydUser", "mypassword") or die ("No conecta con SQLSERVER");
mysql_select_db("verlasco_dyd", $this->link);
}
function getAllMessages(){
include_once("vo/com/dyd/tutorial/vo/MessageVO.php");
$Result = mysql_query("SELECT * From DataGridMessageTutorial ORDER BY id DESC;", $this->link );
while ($row = mysql_fetch_array($Result, MYSQL_ASSOC))
{
$my_user = new MessageVO();
$my_user->id = $row['id'];
$my_user->name = $row['name'];
$my_user->message = $row['message'];

$list_of_users[] = $my_user;
}
return $list_of_users;
}
function saveMessage($obj){
$sql = "INSERT INTO DataGridMessageTutorial (
id,
name,
message
)
VALUES (
NULL , '$obj->name', '$obj->message'
);";
return mysql_query(sprintf($sql));
}
}
?>

Notice that in the line 16 the is an new MessageVO() and in the line 32 I can access to properties from a object, that is because we made an VO or Value Object this value Object lets us pass Object in the functions and send it back to the client:

<?php
class MessageVO {
var $_explicitType = "com.dyd.tutorial.vo.MessageVO";
var $id;
var $name;
var $message;
}
?>

Know we have the remote side complete we need the client side.

So we are going to paint a Datagrid and a little form that contains a name and a message:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
width="600" height="630" backgroundColor="0xFFFFFF" borderStyle="solid"
borderThickness="2" borderColor="0x000000" cornerRadius="8" right="2"
left="2" top="2" bottom="2"
creationComplete="creationCompleteHandler(event)"
preloader="com.dyd.tutorial.utils.PathfinderCustomPreloader">
<mx:Script>
<![CDATA[
import com.dyd.tutorial.vo.MessageVO;
import mx.controls.Alert;
import mx.events.FlexEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*---------------------------- START VARIABLES -------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

[Bindable]private var myArray:Array = []

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------- END VARIABLES --------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/


/******************************************************************************/


/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*-------------------------- START INIT FUNCTIONS ----------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

private function creationCompleteHandler(event:FlexEvent):void{
amf.getAllMessages.send();
}

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*--------------------------- END INIT FUNCTIONS -----------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/


/******************************************************************************/


/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*------------------------- START EVENT FUNCTIONS ----------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

/*-- START EVENT CAIRNGORM --*/



/*--- END EVENT CAIRNGORM ---*/

/***************************/

/*---- START EVENT FLEX -----*/

private function acceptHandler(event:MouseEvent):void{
if( myNameTextInput.text  && myNameTextInput.text.length>0 &&
myMessageTextArea.text  &&  myMessageTextArea.text.length>0){
var messageVO:MessageVO = new MessageVO;
messageVO.name = myNameTextInput.text.toString();
messageVO.message = myMessageTextArea.text.toString();
amf.saveMessage.send( messageVO );

}else{
Alert.show("Name or Messege is Empty","Message");
}
}
private function cancelHandler(event:MouseEvent):void{
myNameTextInput.text  = "";
myMessageTextArea.text = "";
} 
private function getAllMessageResultHandler(event:ResultEvent):void{
myArray = event.result as Array;
}
private function getAllMessageFaultHandler(event:FaultEvent):void{
Alert.show("Data Base Off Line - Refresh The Application", "Message");
}
private function seveMessageResultHandler(event:ResultEvent):void{
if(event.result == true){
myNameTextInput.text  = "";
myMessageTextArea.text = "";
amf.getAllMessages.send();
}else{
Alert.show("Data Base Can't Insert - Please Try Again", "Message");
}
}
private function seveMessageFaultHandler(event:FaultEvent):void{
Alert.show("Data Base Off Line - Refresh The Application", "Message");
}

/*----- END EVENT FLEX ------*/

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*------------------------- END EVENT FUNCTIONS ------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
]]>
</mx:Script>
<mx:RemoteObject id="amf" source="DataGridService" destination="amfphp">
<mx:method  name="getAllMessages"
result="getAllMessageResultHandler(event);"
fault="getAllMessageFaultHandler(event);"/>
<mx:method  name="saveMessage"
result="seveMessageResultHandler(event);"
fault="seveMessageFaultHandler(event);"/>
</mx:RemoteObject>
<mx:DataGrid  id="myDataGrid" width="100%" height="360"
dataProvider="{myArray}" rowHeight="65">
<mx:columns>
<mx:DataGridColumn  dataField="name" headerText="Name"
width="150" wordWrap="true"/>
<mx:DataGridColumn dataField="message" headerText="Message"
wordWrap="true"/>
</mx:columns>
</mx:DataGrid>
<mx:Form width="100%" height="183">
<mx:FormItem label="Name:" >
<mx:TextInput  id="myNameTextInput" width="330" restrict="a-z A-Z"
maxChars="30" />
<mx:Label text="Restrict: a-Z.    Max Chars: 30" color="red" />
</mx:FormItem>
<mx:FormItem label="Message:" >
<mx:TextArea  id="myMessageTextArea" width="330" height="75"
maxChars="200" />
<mx:Label text="Max Chars: 300" color="red" />
</mx:FormItem>
</mx:Form>
<mx:HBox width="300" horizontalAlign="right" >
<mx:Button label="Accept" click="acceptHandler(event);" />
<mx:Button label="Cancel" click="cancelHandler(event);" />
</mx:HBox>
</mx:Application>

The VO we are sending we have to have it to in the client side so let’s made it:

package com.dyd.tutorial.vo
{
[Bindable]
[RemoteClass(alias="com.dyd.tutorial.vo.MessageVO")]
public class MessageVO
{
public var id:String;
public var name:String;
public var message:String;
}
}

And the XML that refers to the service:

<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="amfphp-flashremoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">

<destination id="amfphp">
<channels>
<channel ref="my-amfphp"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
<endpoint uri="/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>

Here are two image of the directory of the file from the server side and the client side:


Example:




Descargar Archivo y Ver Codigo Fuente:


Download File's and Source:

martes, 2 de junio de 2009

Cairngorm - Universal Mind Extension

Translation:
En este post se explicara paso por paso, como se lleva a cabo la ejecución de un ciclo completo de Cairngorm UM Extension. Universal Mind le agregaron una extensión al Cairngorm donde el diagrama cambia un poco.

Si queremos Ver el Cairngorm en su esquema básico podemos verlo en este interesante post en la pagina expuesta a continuación: http://internetdeveloping.blogspot.com/2009/05/ejemplo-cairngorm-agregar-contacto.html

El esquema de Universal Mind, se puede resumir en el siguiente diagrama:
This post will explain step by step, as performed by the execution of a complete cycle of UM Cairngorm Extension. Universal Mind Cairngorm Added an extension to a diagram and it change a bit from the original Cairngorm.

If we want to view the Cairngorm in its basic outline, we can visit this post that explains the bacis cicle: http://internetdeveloping.blogspot.com/2009/05/ejemplo-cairngorm-agregar-contacto.html

The scheme of Universal Mind, can be summarized in the following diagram: