<?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:blogger='http://schemas.google.com/blogger/2008' 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-7521149585630145029</id><updated>2024-10-24T18:46:58.631-05:00</updated><category term="ExtJs"/><category term="Java"/><category term="PHP"/><category term="art"/><category term="inicio"/><category term="MySQL"/><category term="Web2.0"/><category term="comunidad"/><category term="start"/><category term="Appengine"/><category term="Facebook"/><category term="Netbeans"/><category term="menu"/><category term="webmatrix"/><category term="Gadget"/><title type='text'>Integracion Google</title><subtitle type='html'>Hello guys !&#xa;you&#39;re welcome to web development and Google technology</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-1436324826199625398</id><published>2013-03-01T02:55:00.000-05:00</published><updated>2017-02-26T11:28:22.281-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="comunidad"/><title type='text'>Integración Google</title><content type='html'>&lt;table&gt;
&lt;tr&gt;&lt;td width=&quot;100%&quot;&gt;
&lt;div id=&quot;longpicture&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/adonde-queremos-llegar.html&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5463830772812311090&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrdQsBi8nicH8CuHZV6GZDVoFHdevtZZn7nBJt0QejTU0FREvAPiN1746g5lUGisiq5mXWASQfUqMrUiksI3qMAZFT2_VXx39yFSxny6NQdgC9oS5ytVkdmm1WY9XOA_3dDDXek5FrG9z1/s1600/barra_lhorizontal.JPG&quot; style=&quot;cursor: pointer; float: left; height: 60px; margin: 0px 10px 10px 0px; width: 560px;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;100%&quot;&gt;
&lt;div id=&quot;text&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;text1&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #bc9a00; font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;&lt;b&gt;
Bienvenido a Integración Google&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;translation1&quot;&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;div id=&quot;text2&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #A3A3A3;&quot;&gt;latest Advancement: Working with &lt;span class=&quot;notranslate&quot;&gt; OAuth 2.0 protocol, GAE-Java, Google Apps Script&lt;/span&gt; and providing  &quot;&lt;span class=&quot;notranslate&quot;&gt;responsive design&lt;/span&gt;&quot; capabilities to our project !&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;translation2&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;text3&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Integracion Google &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
nuestra propuesta de ingreso al mundo del desarrollo web y de la tecnología Google...&lt;/div&gt;
&lt;div id=&quot;translation3&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;text4&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Nuestro Objetivo:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;translation4&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;text5&quot;&gt;
Una visita a las principales plataformas de desarrollo Web vigentes utilizando por el Front-side HTML y CSS Convencional, HTML5 y CSS3, Javascript: JQuery, Backbone.js y el framework ExtJS de sencha.com (en sus versiones Ext-3.x y ExtJS4), pasando por el uso del Back-End PHP+MySQL, Java(JSP)+MySQL, GAE-Python y GAE-Java ..y como una grata novedad, utilizando Apps Script y hojas de calculo de Google Docs (ahora Google Drive) como fuente de datos y Back-End para PYMES : pequeños e incluso medianos negocios, entre otros desarrollos; explorando el uso de servidores como Apache, Apache Tomcat, Glassfish, la plataforma GAE y Google Cloud Storage; y herramientas de desarrollo especializadas como Netbeans IDE y Eclipse IDE y en la que buscamos aprender las diversas técnicas de desarrollo Web y utilizarlos en nuestros proyectos personales y profesionales.. y aunque tenemos una especial predisposición respecto a Google y al mundo opensource en general...no hacemos exclusiones.. nuestro enfoque es de Integración de APIs y herramientas, donde todo aporte es bienvenido.. el mundo del desarrollo Web es realmente bastante amplio.&lt;/div&gt;
&lt;div id=&quot;translation5&quot;&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center; margin: 10px, 10px, 10px, 10px;&quot;&gt;
&lt;table width=&quot;100%&quot; bgcolor=&quot;E0ECFF&quot; border=0 align=&quot;center&quot;&gt;
&lt;td width=&quot;45%&quot; align=&quot;center&quot;&gt;
&lt;a href=&quot;javascript:void(dev_brochure());&quot; target=&quot;_demos&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; style=&quot;padding: 0px; margin-top: 10px;&quot;height=&quot;36&quot; width=&quot;56&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYZEKfRy8DtMreuNdXWpv6w4DY7V0oJa79s0U2_rYb1PBJzuVLVZvSIOvocAws5ARqI3ZAIAFJ_bHqhX0hbrz_is6K69JwhLqt-A5EDvulq4R9bz94r7s36BhI7ccfal629hLdQxB_XrxU/w702-h454-no/&quot;/&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;&lt;span class=&quot;notranslate&quot; style=&quot;margin-right:100px;&quot;&gt;
&lt;a href=&quot;javascript:void(dev_brochure());&quot; target=&quot;_demos&quot;&gt;&lt;h2&gt;knows who we are&amp;#32;!&lt;/h2&gt;&lt;/span&gt;&lt;/a&gt;
&lt;/td&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/p&gt;

&lt;div id=&quot;text6&quot;&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;Avances a la fecha:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div id=&quot;translation6&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;text7&quot;&gt;
&lt;b&gt;Importante: &lt;/b&gt; Por favor Seleccione en el recuadro superior derecho, correspondiente al Traductor de Google, el Idioma más adecuado para Usted..!&lt;/div&gt;
&lt;div id=&quot;translation7&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2009/11/primer-articulo.html&quot;&gt;Software Development and Web Development.&lt;/a&gt;&lt;/span&gt;&lt;br/&gt;
&lt;b&gt;(updated to 30/03/2013&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot;&gt;Get started from scratch. &lt;/a&gt;&lt;/span&gt;Aprendiendo a instalar y utilizar un servidor local de pruebas Apache+MySQL+PHP.&lt;br /&gt;
&lt;b&gt;(updated to 30/03/2013&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/herramientas-para-desarrollo.html&quot;&gt;Web Development tools. &lt;/a&gt;&lt;/span&gt;Apuntes acerca del uso de herramientas para desarrollo Web.&lt;br /&gt;
&lt;b&gt;(updated to 30/03/2013)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html&quot;&gt;ExtJs, a very powerful framework. &lt;/a&gt;&lt;/span&gt;Apuntes acerca del framework ExtJS-3.x y ExtJS4.&lt;br /&gt;
&lt;b&gt;(updated to 30/03/2013)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/un-avance-de-integracion-google.html&quot;&gt;A preview of Integration to Google, &lt;/a&gt;&lt;/span&gt;empezando a revisar de la amplia documentación de Google.&lt;br /&gt;
&lt;b&gt;(updated to 30/03/2013)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot;&gt;Integration with Google (1st. part)&lt;/a&gt;&lt;/span&gt;, Adaptando &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;stores&quot;&lt;/b&gt;&lt;/span&gt; a Visualizaciones Google y de Google Maps, sobre un modelo de Menu TreePanel que utiliza la API de Autenticacion de &lt;span class=&quot;notranslate&quot;&gt;Google Contacts&lt;/span&gt; para acceder a nuestras aplicaciones (ahora utilizando el protocolo &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html#oauth20&quot;&gt;Oauth 2.0&lt;/a&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;), desarrollo en que utilizamos el framework ExtJs y que incluye nuestro codelab en &lt;b&gt;código ExtJs4 (migración)&lt;/b&gt;, empleando &lt;b&gt;Arquitectura MVC de aplicaciones&lt;/b&gt;, y mostrando el&lt;b&gt; uso del SDK de sencha.com&lt;/b&gt; para optimizar nuestros desarrollos al ponerlos en producción....
&lt;p&gt;
&lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle01 demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;now you can test our &lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;_demos&quot;&gt;IntGoogle01 demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (must enable it!)&lt;br/&gt;
&lt;/p&gt;
&lt;b&gt;(updated to 30/03/2013)&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot;&gt;Integration with Google (2nd. part)&lt;/a&gt;&lt;/span&gt;, Utilizando &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Google SpreadSheets&lt;/b&gt;&lt;/span&gt; (hojas de calculo de &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Google Docs&lt;/b&gt;&lt;/span&gt;) como fuente de datos sobre el modelo anterior descrito, que utiliza la API de Autenticacion de &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Google Contacts&lt;/b&gt;&lt;/span&gt; para acceder a nuestras aplicaciones,desarrollado utilizando ExtJs.
&lt;p&gt;
&lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle02 demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;now you can test our &lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;_demos&quot;&gt;IntGoogle02 demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (must enable it!)&lt;br/&gt;
&lt;/p&gt;
&lt;b&gt;(updated to 30/03/2013)&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/localizacion-e-internacionalizacion-de.html&quot;&gt;Localization e Internationalization of our Blogs &amp; websites&lt;/a&gt;&lt;/span&gt;, una manera sencilla y rápida de Internacionalizar nuestros blogs, paginas web u otros desarrollos recurriendo a la Tecnología Google.&lt;br /&gt;
&lt;b&gt;(updated to 30/03/2013)&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/05/hablemos-sobre-facebook.html&quot;&gt;Let&#39;s talk about Facebook&lt;/a&gt;&lt;/span&gt;, comentarios respecto a Facebook, y desarrollo de algunas técnicas aplicados por nosotros para mejorar la participación de nuestros seguidores y empezar a programar algo en ese formato, que podríamos utilizar en nuestros desarrollos y proyectos (incluye referencia técnica).&lt;br /&gt;
&lt;b&gt;(updated to 01/03/2011)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/05/hablemos-de-twitter.html&quot;&gt;Let&#39;s talk about Twitter&lt;/a&gt;&lt;/span&gt;, comentarios respecto a twitter, el mas importante servicio de microblogging de la actualidad. Incluimos referencia técnica, y un código ejemplo referido a Twitter Anywhere, una técnica implementada por Twitter que sigue los estandares HTML y javascript que permite utilizar a Twitter en nuestras aplicaciones y desarrollos para mantener un mejor contacto con nuestros seguidores.&lt;br /&gt;
&lt;b&gt;(updated to 01/03/2011)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2012/09/lets-talk-about-google-apps-script.html&quot;&gt;Let&#39;s talk about Google Apps Script (GAS)&lt;/a&gt;&lt;/span&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;, una introducción a los conceptos, opciones y posibilidades del entorno de desarrollo de las Apps Scripts y el porque la elegimos para el desarrollo de nuestro proyecto &quot;Community OAuth 2.0 &amp; Business&quot; que compitió en el GADC 2012.&lt;br /&gt;
&lt;b&gt;(updated to 15/09/2012)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href = &quot;http://mlaynessanchez.blogspot.com/2010/05/web-20-los-negocios-y-las-redes.html&quot;&gt;Web 2.0: Social networks and Business&lt;/a&gt;&lt;/span&gt;, nuestros apuntes respecto al concepto Web 2.0 y las redes sociales que nos sirvieron de inspiración para nuestro proyecto &quot;Community OAuth 2.0 &amp; Business&quot;.&lt;br /&gt;
&lt;b&gt;(updated to 25/10/2012)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/07/google-gadgets.html&quot;&gt;Google Gadgets&lt;/a&gt;&lt;/span&gt;, que son y como ir aprendiendo a desarrollar nuestros propios gadgets utilizando el GGE (Google Gadget Editor) y sus herramientas... (Se adjunta ejemplo de 02 gadgets que muestran visualizaciones de una hoja de calculo de Google Docs, que podríamos pegar en nuestro escritorio usando &lt;span class=&quot;notranslate&quot;&gt;Google Desktop&lt;/span&gt;, en nuestra pagina iGoogle, o en cualquier pagina web).&lt;br /&gt;
&lt;b&gt;(updated to 23/07/2010)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-introduccion.html&quot;&gt;Using PHP-MySQL Back-End: Getting started&lt;/a&gt;&lt;/span&gt;, codelab desarrollado tomando como referencia un &lt;a href=&quot;http://www.sencha.com/learn/ext-js-grids-with-php-and-sql&quot; target=&quot;_demos&quot;&gt;tutorial&lt;/a&gt; de la pagina Oficial ExtJs, desarrollado con ExtJs-3.x y cuyo código hemos mejorado, y que  nos presenta un CRUD -opciones básicas de Crear, Modificar, Borrar, Buscar e Imprimir-, sobre una tabla de una base de datos MySQL y considerando componentes dinámicos (la que migraremos a ExtJs-4.x)..&lt;br /&gt;
&lt;b&gt;(updated to 22/11/2011)&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-wizard-safety.html&quot;&gt;Using PHP-MySQL Back-End: Issues of Acces &amp; Security&lt;/a&gt;&lt;/span&gt;, empezando a diseñar nuestros sistemas tomando en consideración pantallas de acceso (Wizards) y opciones de seguridad, sobre tablas de una base de datos MySQL.(tomando como referencia el modelo CRUD del codelab anterior)&lt;br /&gt;
&lt;b&gt;(updated to 22/11/2011)&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/04/integracion-google-3ra-parte.html&quot;&gt;Integration with Google (3nd Part))&lt;/a&gt;&lt;/span&gt;, nuestro modelo de pantalla de acceso y Menu TreePanel desarrollado con el framework ExtJS, que nos permite seleccionar visualizaciones Google y ExtJs, y de Google Maps, que hemos venido desarrollando en nuestros codelabs anteriores: Integracion Google 1ra y 2da parte; pero ahora, trabajados sobre el Back-End PHP+MySQL, y comparando cada caso con las visualizaciones que desarrollamos utilizando hojas de cálculo de &lt;span class=&quot;notranslate&quot;&gt;Google Docs&lt;/span&gt; como datasource. Codelab que muestra un modelo &quot;real&quot; de trabajo bajo dicho entorno ..imprescindible para completar nuestros conocimientos..&lt;br /&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab.freeserver.me/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle03 demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;now you can test our &lt;a href=&quot;http://igcodelab.freeserver.me/&quot; target=&quot;_demos&quot;&gt;IntGoogle03 demo&lt;/a&gt;&lt;br/&gt;
usuario: &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;passer&lt;/span&gt;&lt;/b&gt;, password : &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;passer&lt;/span&gt;&lt;/b&gt;&lt;br/&gt;
the demo may prompt popup window (must enable it!)&lt;br/&gt;
&lt;/p&gt;
&lt;b&gt;(updated to 22//11/2011)&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/09/using-back-end-javamysql-el-proyecto.html&quot;&gt;Using Java+MySQL Back-End: Getting started&lt;/a&gt;&lt;/span&gt;, nuestros apuntes para empezar a iniciarnos con el Back-End Java+MySQL. Incluye la instalación de un servidor local Tomcat y de Netbeans IDE como entorno de trabajo, y como codelab probamos como lanzar nuestros proyectos Integracion Google 1ra y 2da parte usando ahora al servidor Tomcat como proyectos Netbeans...&lt;br /&gt;
&lt;b&gt;(updated to 12/11/2012)&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/using-back-end-javamysql-instalando.html&quot;&gt;Using Java+MySQL Back-End: Installing sdsimple&lt;/a&gt;&lt;/span&gt;, consideraciones previas a tomar en cuenta en un proyecto &quot;Java Web&quot;: importación de una base de datos MySQL y manejo del concepto &quot;pool de conexiones&quot; que son utilizados en el &lt;b&gt;proyecto sdsimple&lt;/b&gt;, en otros conceptos de éste interesante proyecto desarrollado por Pedro Peña García (España), otorgado bajo licencia GPL.. y por supuesto, nuestros apuntes para lograr una instalación exitosa del proyecto en nuestro propio servidor local Tomcat utilizando Netbeans..&lt;br /&gt;
&lt;p&gt;
&lt;a href=&quot;http://free.hostingjava.it/-igcode&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot; title=&quot;sdSimple project on freehostingjava.it&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;test &lt;a href=&quot;http://free.hostingjava.it/-igcode&quot; target=&quot;_demos&quot;&gt;sdsimple project&lt;/a&gt; &lt;span style=&quot;color:red;&quot;&gt;(by troubles on service, we´re evaluating this one..)&lt;/span&gt;&lt;br/&gt;
usuario: &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;passer&lt;/span&gt;&lt;/b&gt;, password : &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;passer&lt;/span&gt;&lt;/b&gt;&lt;br/&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://mysdsimple.aws.af.cm/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot; title=&quot;sdSimple project running on appfog platform..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;now, our &lt;a href=&quot;http://mysdsimple.aws.af.cm/&quot; target=&quot;_demos&quot;&gt;sdsimple project&lt;/a&gt; running on AppFpg Cloud platform.&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
usuario: &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;passer&lt;/span&gt;&lt;/b&gt;, password : &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;passer&lt;/span&gt;&lt;/b&gt; (details in our &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/using-back-end-javamysql-instalando.html&quot;&gt;codelab&lt;/a&gt;).&lt;br/&gt;
&lt;/p&gt;
&lt;b&gt;(updated to 01/06/2013)&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/11/quercus-using-java-with-php.html&quot;&gt;Quercus: JavaWeb projects working with PHP on Tomcat server&lt;/a&gt;&lt;/span&gt;, nuestros apuntes respecto al uso y posibilidades de la librería Quercus de caucho.com, el cual nos permite la implementación de proyectos PHP como proyectos JavaWeb (cargarlos a nuestro Netbeans y hacerlos funcionar en un servidor Tomcat, como detallamos en este codelab), todo ello sin realizar variación o adecuación alguna del código PHP  empleado. El potencial de Quercus radica en que incluso permite la implementación de PHP en proyectos dentro de la infraestructura de &lt;b&gt;Google Appengine&lt;/b&gt;, efectuando algunas adecuaciones sencillas para acceder al datastore &lt;span class=&quot;notranslate&quot;&gt;&quot;big table&quot;&lt;/span&gt; de &lt;span class=&quot;notranslate&quot;&gt;GAE&lt;/span&gt;; y ahora, con la novedad del lanzamiento de &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Google Cloud SQL&lt;/b&gt;&lt;/span&gt;, que es una implementación de la base de datos MySQL en la plataforma cloud de Google, podremos conectarnos a ella, utilizando código PHP, lo que nos permitiría utilizar los múltiple desarrollos opensource para plataforma LAMP y WAMP disponibles; como son los servicios sociales y gestores de contenidos: Drupal, Wordpress, Elgg, phpBB, etc. entre otros proyectos importantes.&lt;br /&gt;
&lt;b&gt;(updated to 22/12/2011)&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/12/working-with-activevfp-56-on-webmatrix.html&quot;&gt;WebMatrix: Opensource plataform from Microsoft for Web Development&lt;/a&gt;&lt;/span&gt;, nuestros apuntes respecto a esta nobel e interesante plataforma &quot;opensource&quot; de Desarrollo Web de Microsoft, a objeto de evaluar su potencial y funcionamiento, y lograr integrarla a nuestros proyectos que hemos venido desarrollando : &lt;b&gt;Integración Google 1ra y 2da parte&lt;/b&gt; en este caso, los que corren satisfactoriamente en esta plataforma... agregando también como una novedad, &amp;nbsp;el &quot;empaquetado&quot; del programa demo del &lt;b&gt;proyecto ActiveVFP&lt;/b&gt;, un proyecto free and opensource que permite utilizar VFP (Visual FoxPro) por el lado del servidor, una nueva opción de back-end para satisfacción de la comunidad del zorro y que abre las posibilidades de opción de manejo de lenguajes por el lado del servidor para nuestros trabajos... especialmente, en lo que concierne al uso de las herramientas desarrollo del mundo Microsoft (como VisualStudio, WebDeveloper Studio, C#, etc)&lt;br /&gt;
&lt;b&gt;(updated to 30/03/2013)&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-using-php-on-iis-server.html&quot;&gt;WebMatrix: Working with PHP on IIS server&lt;/a&gt;&lt;/span&gt;, nuestros apuntes respecto a la instalación de PHP como un lenguaje integrado al servidor IIS dentro la plataforma de WebMatrix, a objeto de evaluar su potencial y funcionamiento, y lograr integrarla a nuestros proyectos sobre el Back-End PHP+ MySQL, los que hemos venido desarrollando con nuestros codelabs :&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Using the Back-End PHP+ MySQL (&lt;/b&gt;&lt;/span&gt;&amp;nbsp;inclinándonos,&amp;nbsp;y revisando los temas de seguridad y &lt;span class=&quot;notranslate&quot;&gt;&quot;Wizards&quot; ó acceso )&lt;/span&gt;; y con nuestro modelo de &lt;b&gt;Integración Google 3ra parte&lt;/b&gt;, los que también corren satisfactoriamente en esta plataforma... y por supuesto, presentando algunas mejoras y novedades en los códigos presentados respecto a sus pares iniciales.&lt;br /&gt;
&lt;b&gt;(updated to 28/10/2012)&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/12/working-with-activevfp-56-on-webmatrix.html&quot;&gt;WebMatrix: Working with activeVFP complement and VFP Back-End&lt;/a&gt;&lt;/span&gt;, un &quot;codelab&quot; corto, rápido y sencillo para empezar a trabajar con activeVFP en la plataforma de desarrollo de WebMatrix mostrando el típico &quot;libro de visitas&quot; de los ejercicios que muestra Google en sus proyectos GAE-Java y GAE-Python pero utilizando como Back-End código y tablas de VFP.. un aporte para la comunidad del zorro de quienes tenemos especial referencia.&lt;br /&gt;
&lt;b&gt;(updated to 30/03/2013)&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-appengine.html&quot;&gt;Integration with Google App Engine (GAE-Python)&lt;/a&gt;&lt;/span&gt;, Una primera integraciCn a &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt; utilizando la libreria estandard Webapp &lt;span class=&quot;notranslate&quot;&gt;GAE-Python&lt;/span&gt; y el SDK para &lt;span class=&quot;notranslate&quot;&gt;Phyton&lt;/span&gt; de &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt; versión 1.5.2 vigente a la fecha (que ahora requiere la identificación de la codificación utf-8, o la que utilicemos), que es una herramienta que nos permite &quot;lanzar&quot; las aplicaciones integradas a Google que hemos venido desarrollando con el framework ExtJS en nuestros codelabs&lt;span class=&quot;notranslate&quot;&gt; Integracion Google &lt;/span&gt;1ra y 2da parte.&lt;br /&gt;
&lt;b&gt;(updated to 26/12/2012)&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/12/working-with-gae-java-on-netbeans-ide.html&quot;&gt;GAE-JavaWeb projects working on Netbeans IDE&lt;/a&gt;&lt;/span&gt;, volviendo al tema de&lt;span class=&quot;notranslate&quot;&gt; Google App Engine &lt;/span&gt;,pero ahora usando el SDK para Java, y utilizando&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt; Netbeans IDE &lt;/b&gt;&lt;/span&gt; como herramienta de desarrollo, el cual se integra de manera bastante eficiente con la plataforma GAE-Java de Google, permitiendo el desarrollo, prueba y despliegue de nuestros proyectos en la plataforma cloud de Google, y manteniendo sus notables ventajas para la programación, depuración, optimización y mantenimiento que resaltamos al presentar nuestros proyectos JavaWeb.&lt;br /&gt;
&lt;b&gt;(updated to 01/06/2013)&lt;/b&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelabex01.appspot.com&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;a CRUD model with GAE-Java..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;now you can test this &lt;a href=&quot;http://igcodelabex01.appspot.com&quot; target=&quot;_demos&quot;&gt;CRUD model&lt;/a&gt; developed with GAE-Java using Ajax&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
and to access a important Codelabs about GAE-JavaWeb projects (developed on Eclipse IDE!)&lt;br/&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab04.appspot.com&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;GAE in action project!&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 30px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;now you can test our  &lt;a href=&quot;http://igcodelab04.appspot.com&quot; target=&quot;_demos&quot;&gt;GAE in action&lt;/a&gt; project built with GAE-Java Backend using ExtJS &amp; Ajax&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp; ..looking for a work model most appropriate for use Google App Engine in our developments..&lt;br/&gt;credentials : passer, passer (alternative : prueba, prueba)
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/12/using-php-in-appengine-javaweb-projects.html&quot;&gt;Quercus: GAE-JavaWeb projects working even with PHP&lt;/a&gt;&lt;/span&gt;, continuando con  al tema GAE-Java y utilizando&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt; Netbeans IDE &lt;/b&gt;&lt;/span&gt; como herramienta de desarrollo, mostramos como la librería Quercus también nos permite utilizar PHP en nuestros desarrollos GAE-Java; y presentamos también un proyecto presentado en el&lt;span class=&quot;notranslate&quot;&gt; Google I/O &lt;/span&gt;del 2009, que no tenido aún mucho apoyo de la comunidad pero que muestra el potencial de Quercus dentro de este entorno de trabajo: correr&lt;span class=&quot;notranslate&quot;&gt; Wordpress &lt;/span&gt;dentro de la plataforma GAE-JavaWeb de Google, utilizando el código PHP de&lt;span class=&quot;notranslate&quot;&gt; Wordpress &lt;/span&gt;y adecuándolo para utilizar las &quot;tablas&quot; del &lt;span class=&quot;notranslate&quot;&gt;datastore&lt;/span&gt; &lt;span class=&quot;notranslate&quot;&gt;&quot;big table&quot;&lt;/span&gt; de&lt;span class=&quot;notranslate&quot;&gt; de Google App Engine.&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;(updated to 22/12/2011)&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Working with Google Cloud SQL: Getting Started&lt;/b&gt;&lt;/span&gt;, donde aprenderemos a trabajar con el novedoso servicio &lt;a href=&quot;https://developers.google.com/cloud-sql/&quot; target=&quot;_blank&quot;&gt;Google Cloud SQL&lt;/a&gt;, que es una implementación de la base de datos MySQL dentro de la plataforma Google App Engine, el cual puede ser utilizado en nuestros proyectos GAE-Java ó GAE-Python. (en construcción)&lt;br /&gt;
&lt;span style=&quot;color:green&quot;;&gt;( pueden también remitirnos sus avances y pruebas! )&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Working with Google Cloud SQL with PHP: Advanced topics&lt;/b&gt;&lt;/span&gt;, donde buscamos aprovechar todo el potencial de desarrollo del SDK para Java de Google App Engine (proyectos GAE-Java ó GAE-JavaWeb), y con el apoyo de la librería &lt;a href=&quot;http://quercus.caucho.com/&quot; target=&quot;_blank&quot;&gt;Quercus&lt;/a&gt; de Caucho Resin, e incluso ahora, luego del anuncio en el Google I/O 2013, utilizando el &lt;a href=&quot;https://developers.google.com/appengine/docs/php/gettingstarted/&quot; target=&quot;_links&quot;&gt;GAE SDK para PHP&lt;/a&gt;, para llegar a implementar proyectos opensource muy difundidos como Wordpress, Drupal, Elgg, Magento, ó levantar cualquier proyecto LAMP ó WAMP, ahora dentro de la plataforma Cloud de Google App Engine 
&lt;br /&gt;
&lt;p&gt;
&lt;a href=&quot;https://gaeforphp-blog.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;GAE-PHP in action!&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 30px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;test this &lt;a href=&quot;https://gaeforphp-blog.appspot.com/&quot; target=&quot;_demos&quot;&gt;gaeforphp project&lt;/a&gt;: Wordpress running on Google App Engine platform&amp;nbsp;: Tips and tricks from the GAE-PHP team&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;
&lt;br/&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://developers.google.com/appengine/articles/wordpress&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;GAE-PHP in action!&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 30px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;details about How to &lt;a href=&quot;https://developers.google.com/appengine/articles/wordpress&quot; target=&quot;_demos&quot;&gt;install wordpress on GAE platform&lt;/a&gt; using GAE SDK for PHP and Google Cloud SQL&lt;b&gt;&lt;/b&gt;
&lt;br/&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://gaeforphp.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;GAE-PHP in action!&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 30px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;Registro de apps para utilizar PHP en la plataforma Cloud de Google&lt;b&gt;&lt;/b&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;b&gt;(updated to 01/06/2013)&lt;/b&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2012/09/lets-talk-about-google-apps-script.html&quot; target=&quot;_blank&quot;&gt;Working with Google Apps Script: our project &lt;b&gt;&quot;Community OAuth 2.0 and Business&quot;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color:red;&quot;&gt;&lt;/span&gt;,&amp;nbsp;donde discutiremos respecto al potencial de las &lt;a href=&quot;https://developers.google.com/apps-script/&quot; target=&quot;_blank&quot;&gt;Google Apps Script&lt;/a&gt; trabajando sobre Hojas de Calculo de Google Docs (ahora Google Drive), y de la ahora llamada &lt;a href=&quot;https://developers.google.com/google-apps/&quot; target=&quot;_blank&quot;&gt;Google Apps Plataform&lt;/a&gt; en general, y presentaremos con mayor detalle, mayor información técnica y con sus correspondiente enlaces de descarga, a nuestro proyecto &lt;a href=&quot;http://communytyproject.blogspot.com&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;&quot;Community OAuth 2.0 &amp; Business&quot;&lt;/span&gt;&lt;/a&gt; (disponible por el momento solo en inglés, con opción de traducción).&lt;br /&gt;
&lt;p&gt;
&lt;a href=&quot;http://communytyproject.blogspot.com/p/members-community.html&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;Community OAuth 2.0 &amp; Business project..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;now you can test our &lt;a href=&quot;http://communytyproject.blogspot.com/p/members-community.html&quot; target=&quot;_demos&quot;&gt;Community OAuth 2.0 &amp; Business project&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (must enable it!)&lt;br/&gt;
&lt;/p&gt;

&lt;span style=&quot;color:green;&quot;&gt;(en desarrollo)&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Importante..!&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Estimado lector.. si lee esta nota es porque ha revisado esta pagina...&amp;nbsp;y lo primero, es indicarles que este Blog estado desarrollado en idioma español... por lo que para poder entendernos es necesario que seleccione su lengua nativa, o el idioma de su preferencia, en nuestro&amp;nbsp;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;Google Traductor&lt;/span&gt;&lt;/b&gt;.&lt;br /&gt;
Entendemos que puede haber limitaciones en la traducción automatica, pero para nosotros, programadores y desarrolladores web, lo más importante son los códigos: ..un buen ejemplo es mejor que mil palabras...&lt;br /&gt;
&lt;br /&gt;
Bienvenidos y buen dia..!
&lt;br /&gt;&lt;br/&gt;
regards to all!&lt;br&gt;
@Mlaynes&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;span class=&quot;notranslate&quot;&gt;
&lt;span style=&quot;font-family:arial;color:gray;font-size:22px;&quot;&gt;Contact with me !&lt;/span&gt; ..for business, contracts or any interesting issues.&lt;/span&gt;&lt;br&gt;
&lt;br&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; title=&quot; contact to my personal mail.. &quot; href=&quot;javascript:void(mymail());&quot;&gt;&lt;img style=&quot;float:left; display:block; margin:0px auto 0px; text-align:left;cursor:pointer; cursor:hand;width: 50px; height: 50px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghHs4kySeeDXA5HHTdXUH2YTpTBZ8QSWiUOBdT1GKQHU7Jax2I_X7eDsDYFSMaOauvFaOOCfM7uIB6DulsS0Fe9Mfm7A3jXZun43FlcQTMII_4c72RrC0z1m3aFTEcivJU2zPEHZR4VgNy/s175/_Mail.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5461327404001030210&quot; /&gt;&lt;/a&gt;

&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;  href=&quot;https://www.facebook.com/mlaynessanchez&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;float:left; display:block; margin:0px auto 0px; text-align:left;cursor:pointer; cursor:hand;width: 50px; height: 50px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUCcSMSbdJnuYvEpL5gVO0zlfKZ3bO1aQ705ZhULqJyJHMtYnrGJDFIOYx9lS4oa6q05JXnN_8tcF6OlRVumhLvf4CG6iJiTqlDvkS88idkae3fCTJyVCXov2ODJ6eWGiRC_I-tMMAwtNU/s170/_Facebook.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5461327404001030210&quot; /&gt;&lt;/a&gt;

&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;  href=&quot;https://twitter.com/_Mlayns&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;float:left; display:block; margin:0px auto 0px; text-align:left;cursor:pointer; cursor:hand;width: 50px; height: 50px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4o7fmUBtRTxJwMfvt9xXqQFV-E7BghIbWqJxWOx4Fi2YvREQ59AF-bcRXCf3avcZVfMkytVgS9K0Dsoq1WL-yXP4vs1b8XO4wad_bOaUibmWNK9-WvtgbiG72qH3l9kto6S7YrkRVKweW/s170/_Twitter.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5461327404001030210&quot; /&gt;&lt;/a&gt;

&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;  href=&quot;https://plus.google.com/115783742058000048884/posts&quot; target=&quot;_blank&quot;&gt;&lt;img style=&quot;float:left; display:block; margin:0px auto 0px; text-align:left;cursor:pointer; cursor:hand;width: 50px; height: 50px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmjtKArU66zRXrgPkPiSF7xBqBZDB5ZTYn6bDz9jlDa7MQxrYzAlrfGuZSPmmDHZQP1_WUJrNHrKH1JGqdKI_0paNzTL6fZFMYIybFWC_gwZMq9kFArpjt19MVHB1mQZaTg412xtD69cEn/s300/_Google%252B.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5461327404001030210&quot; /&gt;&lt;/a&gt;

&lt;br /&gt;&lt;br/&gt;
&lt;br id=&quot;mybr&quot;&gt;&lt;br&gt;

&lt;div class=&quot;g-plus&quot; data-action=&quot;followers&quot; data-height=&quot;300&quot; data-href=&quot;https://plus.google.com/115783742058000048884&quot; data-source=&quot;blogger:blog:followers&quot; data-width=&quot;400&quot;&gt;
&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
      (function() {
        window.___gcfg = {&#39;lang&#39;: &#39;en&#39;};
        var po = document.createElement(&#39;script&#39;);
        po.type = &#39;text/javascript&#39;;
        po.async = true;
        po.src = &#39;https://apis.google.com/js/plusone.js&#39;;
        var s = document.getElementsByTagName(&#39;script&#39;)[0];
        s.parentNode.insertBefore(po, s);
      })();
    &lt;/script&gt;


&lt;br id=&quot;mybr&quot;&gt;
&lt;div id=&quot;translation&quot;&gt;
&lt;/div&gt;
&lt;script&gt;
var wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);

  // alert(&#39;hello all..! language : &#39; + wlang );

  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage.lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget; 
  };
  document.write(&#39;Navegador: &#39;+wlanguage );
 
  function initialize() {
    var nFlag = 0;
    var text = document.getElementById(&quot;text&quot;).innerHTML;
    google.language.translate(text, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;translation&quot;);
      if (result.translation) {
        translated.innerHTML = result.translation;
        nFlag = 1;
        $(&quot;#text&quot;).hide(); 
      };
      if (nFlag == 0 ) {
        translated.innerHTML = &#39;&lt;br/&gt;translating...&lt;br/&gt;&#39;;
     } else {
        nFlag = 0;
      } 
    });
    var text1 = document.getElementById(&quot;text1&quot;).innerHTML;
    google.language.translate(text1, &#39;es&#39;, wlanguage, function(result) {
      var translated1 = document.getElementById(&quot;translation1&quot;);
      if (result.translation) {
        translated1.innerHTML = &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #bc9a00; font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&#39;+result.translation +&#39;&lt;/span&gt;&lt;/span&gt;&#39;;
       nFlag = 1;
       $(&quot;#text1&quot;).hide(); 
      };
      if (nFlag == 0 ) {
       translated1.innerHTML = &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #bc9a00; font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Welcome to Integracion Google&lt;/span&gt;&lt;/span&gt;&#39;;
       $(&quot;#text1&quot;).hide(); 
      } else {
        nFlag = 0;
      } 
    });
    var text2 = document.getElementById(&quot;text2&quot;).innerHTML;
    google.language.translate(text2, &#39;es&#39;, wlanguage, function(result) {
      var translated2 = document.getElementById(&quot;translation2&quot;);
      if (result.translation) {
        translated2.innerHTML = &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #C0C5D3;&quot;&gt;&#39; + result.translation+&#39;&lt;/span&gt;&#39;;
        $(&quot;#text2&quot;).hide(); 
      } 
    });
    var text3 = document.getElementById(&quot;text3&quot;).innerHTML;
    google.language.translate(text3, &#39;es&#39;, wlanguage, function(result) {
      var translated3 = document.getElementById(&quot;translation3&quot;);
      if (result.translation) {
        translated3.innerHTML = result.translation;
        nFlag = 1;
       $(&quot;#text3&quot;).hide();
      } ;
      if ( nFlag == 0 ) {
         translated3.innerHTML = &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Integracion Google &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;a gateway to the world of Web Development and Google Technology..&#39;;
        $(&quot;#text3&quot;).hide(); 
      } else {
        nFlag = 0;
      } 
    });
    var text4 = document.getElementById(&quot;text4&quot;).innerHTML;
    google.language.translate(text4, &#39;es&#39;, wlanguage, function(result) {
      var translated4 = document.getElementById(&quot;translation4&quot;);
      if (result.translation) {
        translated4.innerHTML = &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&#39; + result.translation+&#39;&lt;/b&gt;&lt;/span&gt;&#39;;
        nFlag = 1;
        $(&quot;#text4&quot;).hide(); 
      };
      if ( nFlag == 0 ) {
         translated4.innerHTML = &#39;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Our Goal :&lt;/b&gt;&lt;/span&gt;&#39;;
        $(&quot;#text4&quot;).hide(); 
      } else {
        nFlag = 0;
      } 
    });
    var text5 = document.getElementById(&quot;text5&quot;).innerHTML;
    google.language.translate(text5, &#39;es&#39;, wlanguage, function(result) {
      var translated5 = document.getElementById(&quot;translation5&quot;);
      if (result.translation) {
        translated5.innerHTML = result.translation;
        nFlag = 1;
        $(&quot;#text5&quot;).hide(); 
      };
      if ( nFlag == 0 ) {
        translated5.innerHTML = &quot;A walk through the main current Web development platforms using by the Front-side the ExtJS framework of sencha.com (Ext-3.x and ExtJS4 versions), and also how to use the  PHP+MySQL and Java(JSP)+MySQL Back-End,  GAE-Phyton and GAE-Java environment ..with a welcome development: using Google Apps Script and spreadsheets as Back-End and datasource for small business, among others; exploring the use of servers such as Apache, Apache Tomcat, Glassfish, and specialized development tools such as Netbeans IDE, with which we can to learn the various techniques of existing Web development and to use them in our personal projects .. and though we have a special predisposition for the opensource and Google&#39;s world in general ... do not exclusions, any contribution is welcome ... the Web development world is really quite broad.&quot;;
        $(&quot;#text5&quot;).hide(); 
      } else {
        nFlag = 0;
      }
    });
    var text6 = document.getElementById(&quot;text6&quot;).innerHTML;
    google.language.translate(text6, &#39;es&#39;, wlanguage, function(result) {
      var translated6 = document.getElementById(&quot;translation6&quot;);
      if (result.translation) {
        translated6.innerHTML = &#39;&lt;br/&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size:large;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color:red;&quot;&gt;&#39;+result.translation+&#39;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&#39;;
        nFlag = 1;
       $(&quot;#text6&quot;).hide(); 
      } ;
      if ( nFlag == 0 ) {
        translated6.innerHTML = &#39;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;Progress to date :&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&#39;;
        $(&quot;#text6&quot;).hide(); 
      } else {
        nFlag = 0;
      }
    });
    var text7 = document.getElementById(&quot;text7&quot;).innerHTML;
    google.language.translate(text7, &#39;es&#39;, wlanguage, function(result) {
      var translated7 = document.getElementById(&quot;translation7&quot;);
      if (result.translation) {
        translated7.innerHTML = result.translation;
        nFlag = 1;
        $(&quot;#text7&quot;).hide(); 
      };
      if ( nFlag == 0 ) {
        translated7.innerHTML = &#39;&lt;b&gt; Important: &lt;/ b&gt;Please Select the top right box, corresponding to the Google translator, the language most appropriate for you ..! &#39;;
        $(&quot;#text7&quot;).hide(); 
      } else {
        nFlag = 0;
      }
    }); 
  };
  function enespanol() {
    $(&quot;#text&quot;).hide();
    $(&quot;#text7&quot;).hide();
  };
  if (wlanguage != &#39;es&#39;) {
    google.setOnLoadCallback(initialize);
  } else {
    google.setOnLoadCallback(enespanol);
  }
  function mymail() {
    email= &quot;mlaynessanchez@gmail.com&quot;;
    subject=&quot;My message..&quot;;
    body_message = &quot;Thank you for contacting with me ..%0DPlease consider normal rules of moderation, friendliness and good drafting&quot;;
    var errorMsg = &quot;error message&quot;; 
    body_message = &quot;%0D%0D%0D%0D%0D-----------------------------------------------------------------------%0D&quot;+body_message+&quot;%0D@Mlaynes&quot;;
    var mailto_link = &#39;mailto:&#39; + email + &#39;?subject=&#39; + 
      subject + &#39;&amp;body=&#39;+body_message ;
    win = window.open( mailto_link ); 
    // Abre ventana flotante
    var wbrowser = detecta_browser();
    //alert( wbrowser );
    // wbrowser == &#39;Chrome&#39; || 
    if(  wbrowser == &#39;Firefox&#39;) {
      if (win &amp;&amp; win.open &amp;&amp;!win.closed) win.close(); 
    }
    return mailto_link;
  }
&lt;/script&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1436324826199625398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1436324826199625398'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2009/12/integracion-google.html' title='Integración Google'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrdQsBi8nicH8CuHZV6GZDVoFHdevtZZn7nBJt0QejTU0FREvAPiN1746g5lUGisiq5mXWASQfUqMrUiksI3qMAZFT2_VXx39yFSxny6NQdgC9oS5ytVkdmm1WY9XOA_3dDDXek5FrG9z1/s72-c/barra_lhorizontal.JPG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-1915055790747858745</id><published>2012-09-17T20:04:00.002-05:00</published><updated>2013-04-10T00:42:48.057-05:00</updated><title type='text'>Let&#39;s talk about Google Apps Script</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login please wait a few seconds and try again  \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_links&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    // avf-guestbook.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEMzE3MGE1ZWMtMTEwYy00N2EzLThiMWItZDk1NTBlMmM5MjAw&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //activevfp_5.6.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYWI4YzA5ZGItMmQ3NC00OWVkLWE0ZjQtOTA4NDY0NGNiYmZh&quot;;
    my_link(w_link);
  };
  function my_link03() {
  // myproject.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENTBmZDhhYzQtYzQwNy00NDhiLTlhMTctYzA2Mjg5YTUzNzUy&quot;;
    my_link(w_link);
  };
  function my_link04() {
  //avfp-CRUD
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZGNjNjZjZmYtMzk1ZC00OTVmLThhNWMtYWQ1NmJkYjdjYmFl&quot;;
    my_link(w_link);
  };
  function my_link05() {
  // free
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENWE0MDUxYzktN2MxNC00NjAzLWEwNjQtZTY4NDdlZWE0ODFl&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;https://developers.google.com/apps-script/&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilLJgO720zSaEsd0VsGqQxwEOpvvUbdQgqlYqWlA2iHjJbQuB-OzoXvWfadZZ9uy290B7tVoyZ6OhhynoBuiJ_0qaerpHF-yTBzB90P70Iw5Ko45oD2HVtH-zSbEPsQ3Oj8OcnVZ6RaYhK/s360/_AppsScript.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 100px; margin: 22px 15px 22px 0px; width: 116px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
Esta es una pequeña y rápida introducción a como utilizar las &lt;span class=&quot;notranslate&quot;&gt;Google Apps Script (GAS)&lt;/span&gt;,&amp;nbsp; herramienta con la que construimos nuestro proyecto&amp;nbsp;&lt;a href=&quot;http://communytyproject.blogspot.com/p/welcome.html&quot; target=&quot;_links&quot;&gt;&quot;Community OAuth 2.0 &amp; Business&quot;&lt;/a&gt; que compitió en el&amp;nbsp; &lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://www.google.com/events/gadc2012/&quot; target=&quot;_links&quot;&gt;Google Apps Developer Challenge 2012&lt;/a&gt;&lt;/span&gt;, en realidad no llegamos a las finales de la competencia ..pero uno de sus jueces dijo este comentario respecto a nuestro proyecto, y pensamos que resume muy bien y en muy pocas palabras nuestro concepto, y creemos que también el potencial de las &lt;span class=&quot;notranslate&quot;&gt;Google Apps Scripts&lt;/span&gt; y el porque nos interesa el tema :&lt;br/&gt;&lt;br/&gt;
&lt;span class=&quot;notranslate&quot; style =&quot;color:blue;&quot;&gt;The app brings an opportunity for small business to create and control online selling. With little UX improvement the app can be use in scale by any micro business.
&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;
Nuestra experiencia en el desarrollo de aplicaciones cliente-servidor comerciales nos ha permitido observar la enorme dificultad que tienen las organizaciones y empresas para iniciar de una manera adecuada y ordenada el registro de sus movimientos ordinarios, más aún de una correcta administración y control de sus operaciones; o que los costos y tiempos de desarrollo para informatizarse escapen de sus presupuestos y no sean de fácil implementación (ERP, soluciones cloud computing, otros), a la par de la existencia de malas experiencias de implementación y desarrollos no satisfactorios .. lo mismo puede decirse de muchas empresas que recién empiezan.. y realmente las estadísticas respecto a las PYMES y fracaso empresarial es realmente impresionante y citamos algunos datos proporcionados por el&amp;nbsp;&lt;a href=&quot;http://www.gestiopolis.com/canales5/emp/ochentapy.htm&quot; target=&quot;_links&quot;&gt;portal Gestiopolis&lt;/a&gt;:
&lt;p&gt;
Las cifras disponibles de fracaso de las Pymes son abrumadoras en cualquier país que se analicen..  4 de cada 5 no sobreviven 3 años; en España, para García Ordóñez de la Universidad de Cadiz, “el 80% de las empresas quiebran en los primeros cinco años&quot;; para Francisco Yañez (México) &quot;al cumplir 10 años, solamente el 10% de las empresas maduran, tienen éxito y crecen”; de acuerdo con Cetro-Crece, también de México, “el 75% de las nuevas empresas mexicanas debe cerrar sus operaciones apenas después de dos años en el mercado&quot;; para &lt;a href=&quot;http://www.degerencia.com/articulos.php?artid=545&quot; target=&quot;_links&quot;&gt;degerencia.com&lt;/a&gt;: “la experiencia demuestra que el 50% de las empresas quiebran durante el primer año de actividad, y no menos del 90% antes de cinco años”.. &lt;/p&gt;
&lt;p&gt;En los Estados Unidos de América, según Samuelson y Nordhaus, “el promedio de vida de las empresas es de seis años y más de un 30% no llega al tercer año”.. La Asociación Argentina para el desarrollo de la Pequeña y Mediana Empresa afirma taxativamente que: “Sólo el 7% de los emprendimientos llega al 2º año de vida y sólo el 3% de los emprendimientos llega al 5º año de vida”.. y finalmente, para no abrumar con más cifras, en Chile, según informa Rodrigo Castro F., un estudio en el que se le dio seguimiento a 67.310 empresas creadas en 1996, indicó que el 25% de ellas desapareció en el primer año, un 17% en el segundo año, el 13% en el tercer año y un 11% en el cuarto año.. y el caso peruano pues aparte del fracaso empresarial habría que añadir el tema de formalización, pues miles y miles de &quot;pequeños negocios&quot; prácticamente no tributan, no registran las planillas de su personal contratado y se manejan sin mayor información y control de sus operaciones..&lt;/p&gt;
&lt;p&gt;
Por supuesto, el objetivo de nuestra entrada no es analizar las causas de esta situación, sino como técnicos informáticos tratar de contribuir en revertir estas cifras, y así como existen muchas personas que actualmente estan revisando y discuten respecto a&amp;nbsp; &lt;a href=&quot;http://www.ingresosalcuadrado.com/como-evitar-el-fracaso-empresarial/&quot; target=&quot;_links&quot;&gt;como evitar el fracaso empresarial&lt;/a&gt;, pues nosotros creemos que proporcionar una manera sencilla, practica y de alcance global para poder promocionar y administrar nuestros negocios y servicios, pues de hecho, también contribuye al mismo objetivo.. y parece que lo hemos logrado utilizando las &amp;nbsp; &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Apps Script&lt;/b&gt;&lt;/span&gt;&amp;nbsp; y la plataforma Blogger de Google en nuestro proyecto.&lt;/p&gt;
&lt;p&gt;
Para interesados en el tema hay aquí unos enlaces que pueden revisar (&lt;span class=&quot;notranslate&quot;&gt;in English&lt;/span&gt;):
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sitepronews.com/2011/06/01/11-astonishingly-simple-steps-to-avoid-business-failure/&quot; target=&quot;_links&quot;&gt;11 Astonishingly Simple Steps To Avoid Business Failure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cpaireland.ie/UserFiles/File/Technical%20Resources/SME%20Resource/FEE%20Avoiding%20business%20failure.pdf&quot; target=&quot;_links&quot;&gt;AVOIDING BUSINESS FAILURE A Guide for SMEs&lt;/a&gt; (FEE)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.google.com.pe/search?q=evitar+fracaso+empresarial+PYMES&quot; target=&quot;_links&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;Googlea este tema (en español)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.google.com.pe/search?q=How+to+avoid+business+failure&quot; target=&quot;_links&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;google about this (in English)&lt;/span&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;h1&gt;El potencial GAS&lt;/h1&gt;
&lt;br/&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirCcrL9gCVoI4c4SQHiz5ie2ajtkklsSnECIkQFSSVD_Gspm9C-F5xT4q5Dmxu2a9ja8M_-aqrxyWXK2f0xGmAIbB-1-cnoYd6SBFo1ENfrArYPeYeVi1yQkptGZ5wiZNXxnlmlHYWZ-Fd/s640/_AppsScript01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;150&quot; width=&quot;600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirCcrL9gCVoI4c4SQHiz5ie2ajtkklsSnECIkQFSSVD_Gspm9C-F5xT4q5Dmxu2a9ja8M_-aqrxyWXK2f0xGmAIbB-1-cnoYd6SBFo1ENfrArYPeYeVi1yQkptGZ5wiZNXxnlmlHYWZ-Fd/s640/_AppsScript01.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br/&gt;
Como indicamos, con Google Apps Script podemos construir de una manera rápida y facilmente comprensible todas las operaciones que requiere el manejo de un negocio :
&lt;ul&gt;
&lt;li&gt;Registrar a nuestros clientes&lt;/li&gt;
&lt;li&gt;Registrar los pedidos de nuestros clientes.&lt;/li&gt;
&lt;li&gt;Registrar las compras (al contado, al credito), u otros gastos que requiera nuestro negocio y atender los pedidos de nuestros clientes.&lt;/li&gt;
&lt;li&gt;Registrar las ventas (al contado, crédito), u otros ingresos de nuestro negocio.&lt;/li&gt;
&lt;li&gt;sumarizar y analizar toda la información registrada para ver como marcha nuestro negocio..&lt;/li&gt;
&lt;/ul&gt;
y por supuesto, que el objeto de las Apps Script no solo es para negocios.. sino automatizar cualquier procedimiento que queramos realizar utilizando las&amp;nbsp; &lt;a href=&quot;https://developers.google.com/apps-script/storing_data_spreadsheets&quot; target=&quot;_links&quot;&gt;hojas de calculo de Google&lt;/a&gt;, y ahora también, utilizando una base de datos llamada &lt;a href=&quot;https://developers.google.com/apps-script/scriptdb&quot; target=&quot;_links&quot;&gt;ScriptDB&lt;/a&gt;; en ambos casos existe una limitación en la capacidad de almacenamiento brindada: las hojas de calculo de Google soportan tablas de hasta 400,000 celdas y nos permiten trabajar hasta con 200 hojas por cuenta google; las ScriptDB permiten hasta 50Mb por cuenta Google, 100Mb por cuenta de Google Apps, y hasta 200Mb por cuenta de Google Apps for Business/Education/Government.. estas limitaciones de almacenamiento de datos en las&amp;nbsp; &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Apps Script&lt;/b&gt;&lt;/span&gt;&amp;nbsp;nos indican claramente que el enfoque de esta herramienta es automatizar operaciones específicas de una organización o empresa, pero se muestran suficientes para el caso de las PYMES (small and micro business), ó para cuando nos iniciamos en algún negocio o emprendimiento..&lt;br/&gt;
&lt;br/&gt;
&lt;h1&gt;Que mas nos brinda GAS..&lt;/h1&gt;
&lt;br/&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBR3NkNi4L1ZULBECcJWD-Hf8SvYxPCLJBCn5nF6Xl2quT_fJXei_6e0HGmZbWXjOHYvXp63Y627KKsfKVxYLs5SEELWObvxdvvy1VaVe8e7bLKSzKt7P1rRYtZXFHvBe_D8ayacymRQt7/s640/_AppsScript02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBR3NkNi4L1ZULBECcJWD-Hf8SvYxPCLJBCn5nF6Xl2quT_fJXei_6e0HGmZbWXjOHYvXp63Y627KKsfKVxYLs5SEELWObvxdvvy1VaVe8e7bLKSzKt7P1rRYtZXFHvBe_D8ayacymRQt7/s640/_AppsScript02.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br/&gt;
Debemos tener claro que&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Apps Script&lt;/b&gt;&lt;/span&gt;&amp;nbsp; nos permite el empleo de un lenguaje de programación: &lt;b&gt;Javascript&lt;/b&gt;, y el acceso a varias fuente de datos: &lt;b&gt;Google spreadsheets&lt;/b&gt; y &lt;b&gt;ScriptDB&lt;/b&gt; principalmente, teniendo en consideración por supuesto la limitación de capacidad de almacenamiento de cada caso, pero vale resaltar que Apps Script tiene habilitado la capacidad de conectarnos a base de datos como MySQL, SQL Server u Oracle utilizando su&amp;nbsp;&lt;a href=&quot;https://developers.google.com/apps-script/jdbc&quot; target=&quot;_links&quot;&gt;servicio JDBC&lt;/a&gt;; y esto permite limpiar nuestra fuente de datos utilizando bases de datos mas escalables (programando cortes en nuestras operaciones cuando sea necesario: por falta de capacidad almacenamiento, por los ciclos normales de gestión de nuestra organización o negocio, vale decir cortes anuales principalmente).
&lt;p&gt;
las Apps Script nos permiten también aprovechar los servicios de Google App Engine y conectarnos a la&amp;nbsp; &lt;span class=&quot;notranslate&quot;&gt;GAE datastore&lt;/span&gt;,&amp;nbsp; para lo que nos resulta conveniente revisar y seguir con detalle este&amp;nbsp;&lt;a href=&quot;https://developers.google.com/apps-script/articles/appengine&quot; target=&quot;_links&quot;&gt;tutorial&lt;/a&gt;.
&lt;/p&gt;
Pero las Apps Script nos proporciona también habilidades realmente importantes :
&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;Construir interfaces de usuario para desplegar nuestros desarrollos, y para lo que disponemos de los siguientes servicios :&lt;/li&gt;&lt;br/&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://developers.google.com/apps-script/uiapp&quot; target=&quot;_links&quot;&gt;servicio UI&lt;/a&gt;, que nos proporciona elementos ó &quot;widgets&quot; tal como botones, radiobuttons, listbox, grids, paneles, entre otros para que a través de código javascript podamos construir nuestra pagina.&lt;/li&gt;
&lt;li&gt;Utilizando &lt;a href=&quot;https://developers.google.com/apps-script/gui_builder&quot; target=&quot;_links&quot;&gt;GUI Builder&lt;/a&gt;, que es una herramienta para la construcción de nuestra interface sin utilizar código y facilitar nuestro trabajo.&lt;/li&gt;
&lt;li&gt;y ahora también, utilizando el &lt;a href=&quot;https://developers.google.com/apps-script/html_service&quot; target=&quot;_links&quot;&gt;servicio HTML&lt;/a&gt;, que nos permite crear y servir una página HTML convencional a partir de nuestro código Apps script ..al mismo modo que cuando trabajamos con nodeJS por poner una referencia, y decimos esto porque de esta manera podremos trabajar con Javascript como Back-End y por el front-side dentro del entorno  Apps Script.&lt;/li&gt;
&lt;/ol&gt;&lt;br/&gt;
&lt;li&gt;Publicar nuestros desarrollos como aplicaciones web, y esta puede ser una página stand-alone (desplegada directamente a través de la URL proporcionada) ó embebida en una &lt;a href=&quot;https://developers.google.com/apps-script/execution_gadgets#embedding&quot; target=&quot;_links&quot;&gt;página de Google Sites&lt;/a&gt;; siendo tambien posible utilizar la misma hoja de calculo que aloja nuestro desarrollo.&lt;/li&gt;
&lt;li&gt;Activar nuestro código GAS de acuerdo a los eventos de uso de la hoja de calculo que aloje nuestro desarrollo ó a eventos de tiempo (un día/hora específica, secuencias diarias, semanales, etc.)&lt;/li&gt;
&lt;li&gt;y por supuesto, acceder a los diferentes servicios y API proporcionados por Google como los calendarios, gráficos, correos, mapas, manejo de las cuentas de Google, de las cuentas de Google Apps, entre otros..
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Vale también destacar que Google como parte de su política de limpieza de verano (anunciado el 03 de junio pasado), esta cerrando algunos servicios importantes como la&amp;nbsp; &lt;span class=&quot;notranslate&quot;&gt;Google Finance API&lt;/span&gt;, entre otras que puede consultar en&amp;nbsp; &lt;a href=&quot;http://googlecode.blogspot.com/2011/05/spring-cleaning-for-some-of-our-apis.html&quot; target=&quot;_links&quot;&gt;este enlace&lt;/a&gt;; lo que significa, en el caso de la información financiera, que ya no podremos acceder a dicha información a través de servicios de Google (debiéndose tal vez ahora utilizar el servicio YQL de Yahoo Developer Network u otros); pero resulta que, para este caso mencionado, la mayoría de la información de la Finance API ha sido cargada como una&amp;nbsp; &lt;a href=&quot;https://support.google.com/docs/bin/answer.py?hl=en&amp;answer=155178&quot;&gt;funcion Google Finance&lt;/a&gt; en las hojas de calculo de Google, vale decir, podremos acceder a datos de bolsa y otros más específicos para nuestros desarrollos, como es el caso de la cotización del tipo de cambio de cualquier moneda del mundo a través de dicha función (lo que puede ser muy útil e imprescindible considerar en proyectos y aplicaciones multi-moneda).
&lt;/p&gt;
&lt;h1&gt;Algunas conclusiones.&lt;/h1&gt;
&lt;br/&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWXz-fP7zpg8-sg1uS9U7iE8FP_-BLeg9abJVqpszHYsiiztPzHGFaYCydJXXxcgskv2hYjyikLdqBIGh3i3ADqsorERNieAmhIk9sXiAIV8bsBtAJl5sH3uhOsypu5GXnkTWc_rA2KJB4/s640/_AppsScript03.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWXz-fP7zpg8-sg1uS9U7iE8FP_-BLeg9abJVqpszHYsiiztPzHGFaYCydJXXxcgskv2hYjyikLdqBIGh3i3ADqsorERNieAmhIk9sXiAIV8bsBtAJl5sH3uhOsypu5GXnkTWc_rA2KJB4/s640/_AppsScript03.JPG&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br/&gt;
Todo lo anterior nos muestra un fuerte apoyo de Google a las &lt;span class=&quot;notranslate&quot;&gt;Apps Script&lt;/span&gt;&amp;nbsp; y éste puede llegar a convertirse en un entorno de desarrollo de aplicaciones realmente bastante importante, vale pues tenerlo en cuenta y revisar con detenimiento los enlaces que nos detallan su funcionamiento, especialmente en lo que concierne al almacenamiento de datos en &lt;a href=&quot;https://developers.google.com/apps-script/storing_data_spreadsheets&quot; target=&quot;_links&quot;&gt;hojas de calculo&lt;/a&gt; (las librerías principalmente), y utilizando &lt;a href=&quot;https://developers.google.com/apps-script/scriptdb&quot; target=&quot;_links&quot;&gt;ScriptDB&lt;/a&gt;.
&lt;p&gt;
Es cierto también que, en estos momentos los desarrollos Apps Script como aplicaciones Web no tienen un perfomance lo bastante rápido que quisieramos, pero es algo que Google parece estar mejorando, por cuanto, al plantear algun problema al respecto en la&amp;nbsp; &lt;a href=&quot;http://code.google.com/p/google-apps-script-issues/issues/list&quot; target=&quot;_links&quot;&gt;pagina de cuestiones&lt;/a&gt;&amp;nbsp;de Google Apps Script, usualmente se nos solicita la ID de nuestra hoja de calculo que aloja nuestra aplicación y ésta mejora notablemente su rendimiento.. no nos sorprendería un mejor perfomance de Apps script en el tiempo, ni tampoco  el incremento de las limitaciones de capacidad de almacenamiento actualmente vigentes.
&lt;/p&gt;
En lo que se refiere a la perfomance de nuestros desarrollos Apps Scripts conviene revisar con detalle los siguientes enlaces:
&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/apps-script/uiapp&quot; target=&quot;_links&quot;&gt;UI service&lt;/a&gt;, poniendo especial atención a los temas referidos al uso de los ServerHandler y ClientHandler, por cuanto los primeros son de ejecución notoriamente más lenta que los manejadores del cliente; por supuesto, los ServerHandlers son obligatorios cada vez que se accede a nuestra fuente de datos u otras operaciones de lado del servidor.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/apps-script/class_serverhandler.html&quot; target=&quot;_links&quot;&gt;clase createServerHandler&lt;/a&gt;, que corresponde al detalle de los métodos soportados de los ServerHandlers, y nos muestra un ejemplo sencillo de como se utiliza.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.google.com/apps-script/class_clienthandler&quot; target=&quot;_links&quot;&gt;clase createClientHandler&lt;/a&gt;, que corresponde al detalle de los métodos soportados cuando utilizamos ClientHandlers, y también nos muestra un ejemplo sencillo de como trabaja.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Esta introducción a las Apps Script no puede terminar sin animarlos a&amp;nbsp; &lt;a href=&quot;https://developers.google.com/apps-script/overview&quot; target=&quot;_links&quot;&gt;revisar la documentación&lt;/a&gt;&amp;nbsp; y probar los&amp;nbsp; &lt;a href=&quot;https://developers.google.com/apps-script/articles&quot; target=&quot;_links&quot;&gt;tutoriales&lt;/a&gt;&amp;nbsp; referidos al tema y disponibles en la pagina web de esta herramienta.. quedando para una próxima oportunidad el detalle de nuestro proyecto y código utilizado, para lo cual les solicitamos su participación registrandose y probando nuestro&amp;nbsp; &lt;a href=&quot;http://communytyproject.blogspot.com/p/welcome.html&quot;&gt;proyecto&lt;/a&gt;.. por supuesto, sus comentarios e impresiones son bienvenidos y muy importantes para la mejora y replanteo de nuestro modelo..&lt;/p&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYdAw4IbPDkphnEgWK5AJYgEMuKoTs6YaSazi91IEk7aJMeMQ2R3ogy_IJo09zshXaQ4Ofn-2moRwyrOpWB57z9Edb6I7ulNp5gzlqRvXBrVoWPM5W2T7Emeo3wk9YLyvIfz2SIy_-bU6b/s640/_AAproject00.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYdAw4IbPDkphnEgWK5AJYgEMuKoTs6YaSazi91IEk7aJMeMQ2R3ogy_IJo09zshXaQ4Ofn-2moRwyrOpWB57z9Edb6I7ulNp5gzlqRvXBrVoWPM5W2T7Emeo3wk9YLyvIfz2SIy_-bU6b/s640/_AAproject00.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;p&gt;Aparte de seguir y probar los&amp;nbsp; &lt;a href=&quot;https://developers.google.com/apps-script/articles&quot; target=&quot;_links&quot;&gt;tutoriales&lt;/a&gt;&amp;nbsp; de la pagina de Apps Script, conviene que revisemos estos codelabs :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.eforcers.com/2011/06/llenando-un-filecabinet-con-google-apps.html&quot; target=&quot;_links&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;Llenando un filecabinet con Google Apps Script&lt;/span&gt;&lt;/a&gt;, en español (Eforcers-Colombia)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.eforcers.com/2012/08/building-google-apps-script-web-app.html&quot; target=&quot;_links&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;creating surveys with ScriptDB and Apps Script&lt;/span&gt;&lt;/a&gt;, en ingles (Eforcers-Colombia)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jellybend.com/&quot; target=&quot;_links&quot;&gt;JellyBend Tutorials&lt;/a&gt;, en ingles&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Nota : continuaremos agregando enlaces y ejercicios a esta entrada.
&lt;/p&gt;
saludos&lt;br/&gt;
@Mlaynes&lt;br/&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  //document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;!-- script&gt;
window.fbAsyncInit = function() {
FB.init({appId: ‘138465519521758”, status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement(‘script’); e.async = true;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
document.getElementById(‘fb-root’).appendChild(e);
}());
&lt;/script&gt;  &lt;br /&gt;
&lt;div id=&quot;fb-root&quot;&gt;
&lt;/div&gt;
&lt;script src=&quot;http://connect.facebook.net/en_US/all.js#xfbml=1&quot;&gt;
&lt;/script&gt;&lt;fb:comments href=&quot;http://mlaynessanchez.blogspot.com/2012/09/lets-talk-about-google-apps-script.html&quot; num_posts=&quot;20&quot; width=&quot;475&quot;&gt;&lt;/fb:comments&gt;  &lt;/div&gt;
--&gt;


&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;
&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2012/09/lets-talk-about-google-apps-script.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1915055790747858745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1915055790747858745'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2012/09/lets-talk-about-google-apps-script.html' title='Let&#39;s talk about Google Apps Script'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilLJgO720zSaEsd0VsGqQxwEOpvvUbdQgqlYqWlA2iHjJbQuB-OzoXvWfadZZ9uy290B7tVoyZ6OhhynoBuiJ_0qaerpHF-yTBzB90P70Iw5Ko45oD2HVtH-zSbEPsQ3Oj8OcnVZ6RaYhK/s72-c/_AppsScript.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-3892722479643237101</id><published>2011-12-11T22:32:00.001-05:00</published><updated>2017-02-26T11:16:52.110-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="webmatrix"/><title type='text'>working with ActiveVFP 5.6 on WebMatrix</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login please wait a few seconds and try again  \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    /* if(my_status==true) {
        document.write(&quot;conectado&quot;);
    */
      window.open(w_url,&quot;_blank&quot;);
    /* } else {
      //document.write(&quot;NO conectado&quot;);
      //alert( w_mess );
    };
    */
    return(w_url);
  };
  function my_link01() {
    // avf-guestbook.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEMzE3MGE1ZWMtMTEwYy00N2EzLThiMWItZDk1NTBlMmM5MjAw&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //activevfp_5.6.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYWI4YzA5ZGItMmQ3NC00OWVkLWE0ZjQtOTA4NDY0NGNiYmZh&quot;;
    my_link(w_link);
  };
  function my_link03() {
  // myproject.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENTBmZDhhYzQtYzQwNy00NDhiLTlhMTctYzA2Mjg5YTUzNzUy&quot;;
    my_link(w_link);
  };
  function my_link04() {
  //avfp-CRUD
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZGNjNjZjZmYtMzk1ZC00OTVmLThhNWMtYWQ1NmJkYjdjYmFl&quot;;
    my_link(w_link);
  };
  function my_link05() {
  // free
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENWE0MDUxYzktN2MxNC00NjAzLWEwNjQtZTY4NDdlZWE0ODFl&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://activevfp.codeplex.com/&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA0v4q8KVZQ6bQ42nJlMB2tuK_-kqNAhYNMZ1pU8kJNhmjHCw9MQHj7bsSd8pmywfExDHwpihIbyRpK0-VLoSrGkD9RR2-E1xRrgZkvjmvz4ExiBV2LaN3FORymMcSoWnmJBDjsmDPM4qW/s1600/activeVFP.JPG&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
Esta es pequeña y rápida introducción a como utilizar &lt;b&gt;ActiveVFP&lt;/b&gt; en su versión 5.6 vigente al 15/12/2011 (la ultima lanzada es la versión 6.03 del 29 de Enero del 2013, pero dicha versión solo corre sobre Windows Vista o superior, y por ello solo disponible en algunos servicios hosting.. las versiones 5.x si funcionan sobre cualquier versión de Windows y sobre cualquier servicio hosting Microsoft, y es &lt;u&gt;en la practica lo mismo que la versión 6.x&lt;/u&gt;); y con lo que pretendemos saldar una deuda con los miembros de la comunidad del zorro, por cuanto, durante nuestro desarrollado profesional, y para el desarrollo de aplicaciones cliente-servidor de escritorio, muchas veces hemos recurrido a usar &lt;b&gt;VisualFoxpro (VFP)&lt;/b&gt; en nuestros proyectos, y por supuesto, reconocemos las ventajas que nos proporciona utilizar el entorno de desarrollo VFP para lograr rápidamente productos de alcance profesional.. y al haberse indicado que una de las limitaciones de este entorno es su falta de integración al mundo del desarrollo Web, presentamos este codelab, que pretende mostrar en esta primera etapa, en un sencillo modelo, que también es posible trabajar rápidamente con ActiveVFP usando WebMatrix, utilizando comandos, funciones y clases VFP en nuestros proyectos Web, por el lado del servidor.&lt;br /&gt;
&lt;P&gt;
Para seguir este codelab solo se requiere tener conocimientos básicos de HTML, VFP y  Javascript (no ExtJs que es el framework javascript que más utilizamos en nuestros codelabs), pues lo que buscamos es que se llegue a tener una visión completa de como trabaja ActiveVFP, y por supuesto vale reiterar, que ActiveVfp es un complemento que se encuentra correctamente integrado al desarrollo Web, y nos permite trabajar con tecnologías vigente como Ajax, Json, etc.. y a través de javascript y CSS, trabajar con  frameworks como Jquery, ExtJs y toda la tecnología ligada a esas tecnologías.
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Instalando nuestro codelab &quot;avfp-guestbook&quot; en WebMatrix&lt;/b&gt;&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
Como se indica, tenemos por supuesto que haber instalado en nuestro ordenador &lt;b&gt;WebMatrix&lt;/b&gt; tal como se indica en nuestra entrada &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-la-plataforma-opensource-de.html&quot; target=&quot;_blank&quot;&gt;WebMatrix: la plataforma opensource de desarrollo Web de Microsoft&lt;/a&gt;, por lo que si no lo han realizado, deben seguir los pasos detallados en dicho codelab; y luego, proceder a cargar nuestro material de apoyo en una carpeta que podriamos llamar &quot;AVFP&quot; ó &quot;ActiveVFP&quot;, como estimemos conveniente (..y por supuesto, si no deseamos instalar WebMatrix podríamos trabajar sobre un servidor IIS instalado en nuestro equipo Windows, pero su correcta configuración y uso tiene sus cosas.. por supuesto existe documentación y discusiones al respecto, por lo que también podríamos considerar como una opción).
&lt;/P&gt;
&lt;P&gt;
Continuando pero sobre la plataforma WebMatrix, lo primero es proceder a crear un nuevo &quot;site&quot; en WebMatrix a partir de la carpeta creada al extraer los archivos de nuestra descarga (denominada &quot;avfp-guestbook&quot;). El proceso de carga y configuración de nuestro servidor IIS es realizado en forma automática por WebMatrix, por lo que luego solo debemos seleccionar nuestro navegador de preferencia para ejecutar el ejercicio y éste será lanzado al navegador seleccionado a través de un puerto que se encuentre disponible ( http://localhost:xxxxx ).
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;b style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link01();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot;&gt;&lt;/a&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;avfp-guestbook.rar&lt;/span&gt;,&lt;/b&gt;&amp;nbsp;que corresponde a una adaptación de un &quot;libro de visitas&quot; bajo un formato que ya hemos utilizado utilizado en nuestros codelabs referidos al uso del datastore de Google App Engine, pero ahora utilizando como Back-End a Visual Foxpro, mediante ActiveVFP, y desplegando nuestro proyecto sobre un servidor IIS incluído en la plataforma de WebMatrix; debiendo reiterarse que nuestro Back-End es VFP, por cuanto utilizamos las tablas &lt;b&gt;*.dbf&lt;/b&gt; de dicha plataforma, y los comandos, funciones y clases de VFP requeridos para interactuar con ella.
&lt;/P&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrweL7x1OEtJxZyBh2Y9TZfzFE-ZnV-XqlSdtGM0uVVSvR6-Ru4J7A5ip8pDgneNiHL9HN0riNGPiqLeLMVJFK5zcBP_a70bYX615bQll8IMStPpnSohaS3l2z9n3z5tNCUiWOKLG8HGnf/s400/avfp-guestbook01.jpg&quot; width=&quot;400&quot;&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhynkxDOFtBujodmRndgjiSY3kM3vHxsX3kUX4pIkoqTObtcRZEJosObXPVaOrREFshF2ybWa72_thnBqYHNiOlyg40RjhcddzyoJKhyXgOk2kYRjxaVKHtVqHy1eG8H7paaKosQA2xPx1p/s400/avfp-guestbook02.jpg&quot; width=&quot;400&quot;&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXtd9mKCQn-AWcFHjGeBhY0bgP4cxuO6_DOGmIVnOcwwwVwsod7funsawuqevh1gPenllIdIc7Uzac0xtQUsWYoZ_0StLfXYLIejgXLT4-IJP__ts1eyiC6D-VntwXzVQRI-GecwDpR9PE/s400/avfp-guestbook03.jpg&quot; width=&quot;400&quot;&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8uuZTzK-Nz_i-XaxpolckU8gTfE7iXolC9I2c9hbz4pPk4CrV85pnlaiOR5hCzGW2wNsy_sLPGtggbW3rgrHumqFG6jZPVj9RGjPhy-3xfxd5xgAG7DhOABg433uH-SfCxBBjOXejFmwf/s400/avfp-guestbook04.jpg&quot; width=&quot;400&quot;&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;b&gt;ActiveVFP&lt;/b&gt; es una implementación en lenguaje ASP y ASP.Net de Visual Foxpro (como por ejemplo, tambien lo es la librería &lt;b&gt;Quercus&lt;/b&gt; que nos permite trabajar con PHP en el mundo Java), vale decir que nuestros comandos, funciones y clases VFP son interpretados como comandos ASP que son los que si reconoce y ejecuta un servidor IIS, y el nivel de adecuación de esta herramienta es bastante completa y eficiente, abarcando incluso la versión 9 de VisualFoxpro.. otro punto importante, es que el proyecto ActiveVFP es bastante activo y vigente, siendo su ultima actualización realizada a fecha 29/01/2013 (versión 6.03 como hemos indicado, y la que se puede descargar directamente del homepage del proyecto &lt;a href=&quot;http://activevfp.codeplex.com/&quot; target=&quot;_links&quot;&gt;activeVFP en codeplex&lt;/a&gt;).
&lt;/P&gt;
&lt;P&gt;
Las instrucciones y clases para la interpretación de VFP se encuentran contenidas en los archivos &lt;b&gt;activevfp.dll&lt;/b&gt;, &lt;b&gt;VFP9RENU.dll&lt;/b&gt; y otros archivos *.dll contenidos en el complemento, y los que deben incluirse en la carpeta principal de cada uoo de nuestros proyectos, &lt;u&gt;siendo también necesaria la existencia de una carpeta &quot;prg&quot;, que es la que va a contener como mínimo, a nuestro archivo &lt;b&gt;&quot;main.prg&quot;&lt;/b&gt;, la que pone en funcionamiento la librería (mediante la función &quot;AVFPinit()&quot;), y en la cual podremos configurar las principales variables de entorno disponibles por la librería&lt;/u&gt;, entre las que podemos destacar:
&lt;/P&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;oProp.DataPath&lt;/b&gt;, para indicar en que carpeta de nuestro &quot;servidor&quot; ó equipo se encuentra alojada la data de nuestro proyecto.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;oProp.HtmlPath,&lt;/b&gt;&amp;nbsp;para indicar en que carpeta se alojaran nuestros archivos HTM, que este caso han sido ruteados hacia &quot;oProp.AppStartPath&quot;, que contiene la carpeta de donde se llama a nuestro proyecto.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;oProp.Action,&lt;/b&gt;&amp;nbsp;en donde podemos indicar el nombre del script llamado en cada proceso, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;P&gt;
En ese mismo archivo podremos definir nuestras propias funciones VFP que utilizaremos  en el proyecto.. en este caso no necesitamos ninguno (excepto el que estamos utilizando para mostrar el código de nuestra página), pero conviene que en la documentación de ActiveVFP revisemos la clase AVFPproperties (casi al final de lista de clases).
&lt;/P&gt;
&lt;P&gt;
En este codelab tambien estamos trabajando con la clase &lt;b&gt;AVFPrequest&lt;/b&gt;, para capturar los datos de los FORM de nuestras páginas HTML (*.avfp en este caso), y asimismo a la clase &lt;b&gt;AVFPresponse&lt;/b&gt; para redirigirnos a una dirección ó URL, pero para mayores detalles también conviene que revisemos la documentación al respecto.
&lt;/P&gt;
&lt;P&gt;
Considérese que nuestras tablas &lt;b&gt;*.dbf&lt;/b&gt; en la ruta indicada en la ruta de&amp;nbsp;&lt;b&gt;oProp.DataPath&lt;/b&gt;&amp;nbsp;se encuentran disponibles para su uso, y &quot;abiertas&quot; en &lt;u&gt;modo &lt;/u&gt;&lt;span class=&quot;notranslate&quot;&gt;&lt;u&gt;shared&lt;/u&gt;, &lt;/span&gt;porque aún estando en ejecución nuestro proyecto, podremos acceder a ellas, abriéndolas desde la pantalla de comandos VFP, pero verificando que también usemos modo&lt;span class=&quot;notranslate&quot;&gt; &quot;shared&quot;; &lt;/span&gt;asimismo, si hicieramos alguna modificación en las mismas no olvidemos de ejecutar el comando &quot;flush&quot; desde nuestra ventana de comandos (ó código de nuestros programas y sistemas) para que se carguen nuestras modificaciones a las tablas y los podamos observar al refrescar nuestro navegador.
&lt;/P&gt;
&lt;P&gt;
Este último punto muestra uno de los retos de programación referidos a desarrollo Web en cuanto a que las modificaciones que puedan estar efectuando nuestros usuarios no son reflejados automáticamente en nuestras &quot;tablas&quot; ó &quot;grids&quot;, excepto que nuestro código contemple un periodo de refresco (pudiendo utilizar Ajax con esa finalidad), ó adecuando nuestra lógica para que considere probables modificaciones de la data que puedan efectuar nuestros usuarios.. ests técnicas también son consideradas cuando trabajamos a nivel cliente-servidor con bases de datos externas a VFP como MySQL, postgressSQL, SQLServer, etc. por lo que ahora debemos mantener las mismas formas pero en desarrollo Web.
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Instalando la demo de ActiveVFP 5.6 en nuestro WebMatrix&lt;/b&gt;&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
Para los que han tenido alguna dificultad en la correcta configuración del ruteo de los enlaces del demo de ActiveVFP 5.6, les pasamos nuestra versión corregida para que puedan trabajar con ella sin mayores contratiempos; debiendo resaltarse que, para el correcto funcionamiento de algunas de sus opciones (como el despliegue de gráficos e impresión de reportes VFP en formato PDF, eben efectuarse las instalaciones y configuraciones indicadas en el mismo demo, las que también son detalladas en la documentación disponible en el mismo demo.
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;b style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link02();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot;&gt;&lt;/a&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;activeVFP_5.6.rar&lt;/span&gt;,&lt;/b&gt;&amp;nbsp;correspondiente a la demo de la versión 5.6 de ActiveVFP, lista para instalar sobre WebMatrix.. y a la que le hemos agragado la &quot;impresión de algunas variables de entorno para su revisión..
&lt;/P&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUDyD_ECF2OdCFL5LlG1sVyQEdF3CUlETT9C1zKilH50UMXc5LfEYUlDcegdMpLdITkb7tSQaDhPGziBB3teVD1qMJx_kQdg5Dyru0rQjXPV2FuQUBQEV_yqzj3DcFJeZt2LQB90bE3EW0/s400/activeVFO_5.6.jpg&quot; width=&quot;400&quot;&gt;
&lt;/div&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;P&gt;
&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-large; text-align: -webkit-auto;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Instalando una plantilla para nuevos proyectos ActiveVFP 5.6 en WebMatrix.&lt;/span&gt;&lt;/b&gt;
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;b style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;BR/&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link03();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #448888; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot;&gt;&lt;/a&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;myproject.rar&lt;/span&gt;,&lt;/b&gt;&amp;nbsp;que corresponde a un proyecto &quot;vacío&quot; que solo contiene un &lt;b&gt;Hola Mundo&lt;/b&gt; para que lo podamos utilizar para iniciar nuestros propios proyectos, debiendo destacar que, para el caso de la creación de las &quot;tablas&quot; debemos crearlas desde la ventana de comandos de nuestro VFP directamente sobre la carpeta &quot;mydata&quot; de la descarga de éste material de apoyo ó configurar en el archivo &quot;main.prg&quot; la ruta de ubicación de nuestra data, y de los otros componentes de nuestro proyecto si lo&amp;nbsp;estimásemos&amp;nbsp;necesario.
&lt;/P&gt;
&lt;P&gt;
Descarguemos este material de apoyo en la misma carpeta donde estemos trabajando este codelab, y luego al crear un sitio en nuestro WebMatrix a partir de la carpeta &quot;myproject&quot; creada con la descarga, pongamoslo en funcionamiento en nuestro navegador y tendremos una pagina como la mostrada.. y dispondremos de una plantilla ActiveVFP 5.6 que podremos utilizar para hacer nuestras propias pruebas ó proyectos.
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGx1FhHgVN1O78oSzkSz7130C9A5XqBRY6MCX2dB3nd9w8RRfSCW1U5MTv5NIN_6FPQA7xegXx-jDH2S8etdLmbDFtNsVtEhfQobYQ5Bk-ElsS_avrfSe9Az5iS6DsA5nyahyphenhyphenme0hlYmdf/s400/myproject.jpg&quot; width=&quot;400&quot;&gt;
&lt;/div&gt;
&lt;/P&gt;
&lt;/div&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;extjs&quot; style=&quot;text-align: left;&quot;&gt;
&lt;P&gt;
&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-large; text-align: -webkit-auto;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Trabajando con el Back-End VFP en un modelo CRUD usando Ext-JS v.3.4.0&lt;/span&gt;&lt;/b&gt;
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;b style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;BR/&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link04();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #448888; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot;&gt;&lt;/a&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;avfp-CRUD.rar&lt;/span&gt;,&lt;/b&gt;&amp;nbsp;que corresponde a nuestro modelo CRUD (&lt;span class=&quot;notranslate&quot;&gt;Create&lt;/span&gt;, &lt;span class=&quot;notranslate&quot;&gt;Read&lt;/span&gt;, &lt;span class=&quot;notranslate&quot;&gt;Update&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;Delete&lt;/span&gt;), de una Tabla VFP que contiene a los presidentes de &lt;span class=&quot;notranslate&quot;&gt;U.S.A.&lt;/span&gt; llamada &lt;span class=&quot;notranslate&quot;&gt;presidents.dbf&lt;/span&gt;, la cual utiliza a otra Tabla llamada &lt;span class=&quot;notranslate&quot;&gt;parties.dbf&lt;/span&gt; que contiene a los partidos políticos que respaldaron a cada presidente. Este es un modelo sencillo que nos muestra como utilizando un framework, como ExtJS version 3.4.0 en este caso, se puede &quot;ordenar&quot; nuestros proyectos, separando nuestros códigos del lado del cliente (HTML, Javascript, CSS), de nuestro código el lado del servidor ó &lt;span class=&quot;notranslate&quot;&gt;Back-End.&lt;/span&gt;
&lt;/P&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFjPgZvDiARgRNFPnJekH3b2lgtEmwFovUNYAuBMDWPeemMBzg8D29iLhNujUsPMXdYYCfV6ReExA1YtLLa8A9A9jQlYmtWUz0KZYsorgIPUViDyJRxfohTj4llWA0dw51KxmCFtM-oSIy/s1600/avfp-crud.jpg&quot; width=&quot;400&quot;&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyt_SUFhCSdawleRljG1O5lmS2HswHD_5uIkWBHFrxiQtw4m6vLAWoAY_2I5d4dmt0zQ9a8y_rc1g4-FdHZfvNnHieVziGpCNSXAnWMtSM-OWVd6-Jf3OHTzvYEc7YbCruaFeOfx9fcnib/s400/avfp-crud01.jpg&quot; width=&quot;400&quot;&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLPvTFSpNCvTI1DfWYX_VjSBo0CVmOrJxpSnLSkIAzzooQUfJliv-54gK5pe4XbUYSfIxG40MPjSKg7cvYLV6nU0yhG6GhWFkoS8ACiS0ZjVGBOZpoyjKVlO16fOo2XpT-4YUj8Ml1bmFv/s400/avfp-crud02.jpg&quot; width=&quot;400&quot;&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;P&gt;
En este caso, los códigos del manejo de nuestra base de datos NO se &quot;incrustan&quot; en el código HTML de nuestro proyecto; y nuestro código VFP del lado del servidor se muestra más ordenado y comprensible, los que se encuentran alojados en la carpeta &quot;prg&quot;, y comprende a los siguientes archivos:&lt;br /&gt;
&lt;/P&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;main.prg&lt;/span&gt;&lt;/b&gt;, archivo principal de nuestro proyecto, de ejecución automática al iniciarse el proyecto, y que aparte de contener la lógica principal de manejo y gestión de nuestras tablas VFP, permite la configuración de las principales variables y objetos del entorno de desarrollo activeVFP.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;updatepr.prg&lt;/span&gt;&lt;/b&gt;, archivo PRG que contiene el código VFP que permite la modificación y actualización de nuestra tabla de presidentes.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;createpr.prg&lt;/span&gt;&lt;/b&gt;, archivo PRG que contiene el código VFP que permite la creación de nuestra tabla de presidentes.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;deletepr.prg&lt;/b&gt;, archivo PRG que contiene el código VFP que permite el borrado &quot;lógico&quot; de uno ó varios de los registros de nuestra tabla de presidentes. En este caso vale destacar que las tabla VFP son abiertas por defecto en modo &lt;span class=&quot;notranslate&quot;&gt;SHARED&lt;/span&gt; por activeVFP, por lo que restringe el borrado físico de registros, por lo que debemos adecuar la lógica de nuestros proyectos a esta condición.&lt;/li&gt;
&lt;li&gt;Las opciones de búsqueda son aplicadas directamente sobre el código de nuestro archivo &lt;b&gt;main.prg&lt;/b&gt;, los que deberá revisar para mayor detalle.&lt;/li&gt;
&lt;/ul&gt;
&lt;P&gt;
Los archivos javascript que componen el proyecto se encuentran alojados en la carpeta &amp;nbsp;&quot;javascript&quot; y comprende a los siguientes archivos:
&lt;/P&gt;
&lt;P&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;mainscript.js,&lt;/b&gt; archivo JS que contiene el código ExtJS que permiten la creación,visualización y manejo de nuestra ventana, grilla, y otros componentes de nuestro proyecto (ventanas de creación de registros, búsqueda, etc), y que además contienen la lógica del proyecto por el lado del &quot;cliente&quot;, referidos a los procesos necesarios para que un usuario pueda realizar las operaciones CRUD de nuestro listado de presidentes desde el navegador de su preferencia.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;searchfield.js,&lt;/b&gt; archivo JS que contiene el código ExtJS que permiten la búsqueda rápida de un nombre o apellido ingresado.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GridPrint.js,&lt;/b&gt; archivo JS que contiene el código ExtJs y Javascript que permiten la impresión de un listado simple de nuestra lista de presidentes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/P&gt;
&lt;P&gt;
Otros componentes del proyecto:
&lt;/P&gt;
&lt;ul&gt;
&lt;li&gt;carpeta &quot;CSS&quot;, contiene a los archivos style.css, que controla las imagenes de nuestra grilla;, y GridPrint.css, que controla los estilos de nuestra impresión.&lt;/li&gt;
&lt;li&gt;carpeta &quot;ext-3.4.0&quot;, contiene los archivos javascript y css que comprenden al framework ExtJS de la verión que se indica (los que son llamados desde el archivo index.html de nuestro proyecto.&lt;/li&gt;
&lt;li&gt;y por supuesto, la carpeta &lt;span class=&quot;notranslate&quot;&gt;&quot;data&quot;&lt;/span&gt;, que contiene a las tablas &lt;b&gt;presidents.dbf &lt;/b&gt;y &lt;b&gt;parties.dbf &lt;/b&gt;que son las utilizadas en este ejercicio.&lt;/li&gt;
&lt;/ul&gt;
&lt;P&gt;
Inicio del proyecto:
&lt;/P&gt;
&lt;ul&gt;
&lt;li&gt;El archivo de inicio de este ejercicio es el archivo &quot;index.html&quot; que se encuentra alojado en la ruta &lt;b&gt;oProp.AppStartPath&lt;/b&gt;, es decir la carpeta desde donde &quot;arranca&quot; nuestro proyecto. Los otros archivos que se encuentran en dicha carpeta son componentes de activeVFP y no pueden ser borrados.&lt;/li&gt;
&lt;/ul&gt;

&lt;P&gt;
las carpetas &lt;span class=&quot;notranslate&quot;&gt;&quot;bin&quot;&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;&quot;temp&quot;&lt;/span&gt; son también del proyecto activeVFP y no conviene eliminarlas.. y hay otra carpetas que parecen en la demostración del proyecto activeVFP pero que hemos eliminado porque no las utilizamos en este ejercicio.
&lt;/P&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;P&gt;
&lt;div&gt;
&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;Saludos&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
@Mlaynes&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br class=&quot;Apple-interchange-newline&quot; /&gt;&lt;/div&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;NOTAS DE TRABAJO :&lt;/b&gt;&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;1.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Para abrir un documento *.avfp ó *.prg desde WebMatrix, haga click derecho sobre el archivo requerido y seleccionemos la opción &quot;abrir con WebMatrix&quot;
&lt;/P&gt;
&lt;P&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;2.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Resulta interesante observar que para hacer nuestra prueba y seguir este &quot;codelab&quot; no es necesario incluso que tengamos VFP instalado en nuestro ordenador... activeVFP compila automáticamente el archivo &quot;main.prg&quot; y las modificaciones que podamos realizar sobre ella, aunque por supuesto, resulta necesario tener instalado VFP para inspeccionar y/o modificar nuestras tablas *.dbf. Pero vale indicar que, si trabajamos con varios PRG, llamados a traves de &lt;span class=&quot;notranslate&quot;&gt;SET PROCEDURE TO&lt;/span&gt;, activeVFP no compila automáticamente esos archivos, y resultó necesario compilar esos archivos desde la ventana de comandos de VFP (updatepr.prg, deletepr.prg, etc).
&lt;/P&gt;
&lt;P&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;3.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Por lo expuesto en el punto anterior, conviene que durante nuestros desarrollos, realicemos y probemos nuestros códigos incrustados en nuestro &quot;main.prg&quot; (que se compila automáticamente), y luego, si resultase necesario, y no sobrecargar nuestro main.prg, crear los *.prg que necesitemos.
&lt;/P&gt;
&lt;P&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;4.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;No olvidemos que podemos modificar en la opción configuración de nuestro &lt;span class=&quot;notranslate&quot;&gt;&quot;Site&quot;&lt;/span&gt; el puerto que utilizaremos para lanzar nuestro proyecto a nuestro navegador (opción Configurar)
&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;5.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Conviene también que ejecutemos la opción &quot;Informe&quot; de nuestro &lt;span class=&quot;notranslate&quot;&gt;&quot;Site&quot;&lt;/span&gt;, que nos indicará en forma bastante detallada la manera de optimizar nuestros proyectos.
&lt;/P&gt;
&lt;P&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;6.-&lt;/span&gt;&lt;/b&gt;&amp;nbsp;La opción database de nuestro &quot;Site&quot; la utilizaremos para trabajar con una base de datos &lt;span class=&quot;notranslate&quot;&gt;SQL Server compact&lt;/span&gt;, que es una versión ligera y liberada de SQLServer de Microsoft que viene integrada a WebMatrix (como MySQL en las plataformas LAMP ó WAMP).
&lt;/P&gt;
&lt;br /&gt;

&lt;/div&gt;

&lt;div&gt;
&lt;script src=&quot;https://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  //document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;&lt;/div&gt;
&lt;/div&gt;
  
  &lt;br&gt;
  &lt;hr&gt;
  &lt;br&gt;&lt;br&gt;

  &lt;!--
  &lt;iframe src=&quot;https://groups.google.com/forum/embed/?place=forum/publicesvfoxpro#!topic/publicesvfoxpro/E35Og051mbc&quot; 
     id=&quot;scrollDiv&quot; 
     marginheight=&quot;0&quot; 
     frameborder=&quot;0&quot; 
     width=100% 
     height=&quot;700&quot; 
     style=&quot;overflow:auto;&quot; 
     scrolling=&quot;auto&quot;&gt;
  &lt;/iframe&gt;
   --&gt;
   &lt;!--
    &lt;object type=&quot;text/html&quot;
        data=&quot;https://groups.google.com/forum/embed/?
          place=forum/publicesvfoxpro#!topic/publicesvfoxpro/E35Og051mbc&quot;
        marginheight=&quot;0&quot; 
        frameborder=&quot;0&quot; 
        width=&quot;100%&quot; height=&quot;750&quot;
        style=&quot;border:1px solid #000; overflow : auto; border-style:none;&quot;&gt;
        &lt;span style=&quot;padding:10px;&quot;&gt;
        No se pudo mostrar foro de discusión en Google Groups sobre activeVFP.&lt;br&gt;
        Visita este &lt;a href=&quot;https://groups.google.com/forum/?
             hl=es#!starred/publicesvfoxpro/E35Og051mbc&quot;
            rel=&quot;external&quot; target=&quot;_links&quot;&gt;enlace&lt;/a&gt;.
       &lt;/span&gt;
    &lt;/object&gt;
    &lt;br&gt;
    &lt;br&gt;
    &lt;hr&gt;
    &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
    --&gt;

&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/12/working-with-activevfp-56.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/3892722479643237101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/3892722479643237101'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/12/working-with-activevfp-56-on-webmatrix.html' title='working with ActiveVFP 5.6 on WebMatrix'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA0v4q8KVZQ6bQ42nJlMB2tuK_-kqNAhYNMZ1pU8kJNhmjHCw9MQHj7bsSd8pmywfExDHwpihIbyRpK0-VLoSrGkD9RR2-E1xRrgZkvjmvz4ExiBV2LaN3FORymMcSoWnmJBDjsmDPM4qW/s72-c/activeVFP.JPG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-7450873931766169453</id><published>2011-12-11T10:10:00.001-05:00</published><updated>2013-04-10T09:27:52.103-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Appengine"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>Using PHP on Appengine-JavaWeb projects</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login please wait a few seconds and try again  \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    // gae-phpwithjava.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENjVjYTEwMDYtMGIyOC00NGEyLWFjMTgtOWNlNTMwNmU3NGJl&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //gae-phpguestbook.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYzg0YWQwZTYtZGYzNS00MGE1LWEzNzEtZTY3MWRkZjMxYjkz&quot;;
    my_link(w_link);
  };
  function my_link03() {
  // gae-intGoogle02.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYmFiZWEzZmYtYWIzYS00YTUzLTg3OTgtOTg5ZGY5ZjVjYjJj&quot;;
    my_link(w_link);
  };
  function my_link04() {
  //Wizard-sample.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENDViNDA2NjUtZmJjYi00MjJhLWFmMTEtNDBhNDdkOTM1N2Qy&quot;;
    my_link(w_link);
  };
  function my_link05() {
  //Int-Google03.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENWE0MDUxYzktN2MxNC00NjAzLWEwNjQtZTY4NDdlZWE0ODFl&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://blog.caucho.com/2009/04/28/quercus-on-the-google-app-engine/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfBSznqaO0ZcMxKYYi5NGvoFaerOP2mZE6LfK8DylyNLTmMUsw_8vCicAsOwFB0wkDlOqF-Rv9_lQ7LkJ9hMq3gA94YU5mrvnfgAxX35Jy-j_8PjACXMQkBZmOYS6QCeNnPlvxJe9sbQq-/s240/ResinaQuercus.JPG&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot; /&gt;&lt;/a&gt;

&lt;br /&gt;

Continuando con nuestros codelabs referidos al entorno &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt;, pasamos ahora a detallar como trabajar con PHP en proyectos &lt;span class=&quot;notranslate&quot;&gt;Appengine-JavaWeb&lt;/span&gt;, utilizando Netbeans IDE como herramienta de desarrollo tal como lo hicimos en nuestra entrada anterior &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/12/working-with-gae-java-on-netbeans-ide.html&quot; target=&quot;_blank&quot;&gt;Working &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; projects with Netbeans&lt;/a&gt;, pues esta herramienta nos permite un mejor control de los procesos de construcción, compilación, depuración, optimización y despliegue de nuestros proyectos tanto en nuestro servidor local de pruebas, como para su lanzamiento en la plataforma cloud de Google. Si Ud. no esta familiarizado a trabajar con Netbeans en desarrollos Appengine para Java, conviene que de primero una revisión a los codelabs de la mencionada entrada.&lt;br&gt;
&lt;P&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;PREPARANDO NUESTRO ENTORNO DE DESARROLLO.&lt;/span&gt;&lt;/b&gt;
&lt;/P&gt;
&lt;P&gt;
Para trabajar con PHP en &lt;span class=&quot;notranslate&quot;&gt;GAE&lt;/span&gt;, como hicimos en nuestros proyectos JavaWeb, debemos descargar la última versión del WAR de Quercus desde la pagina oficial de caucho.com (versión 4.0.18 vigente al 15/12/2011), y grabarla en nuestra carpeta &quot;appengine&quot; que utilizamos en nuestro codelab anterior (para mantener un orden y porque allí también descargamos el SDK de Java).. y listo! ...el resto de operaciones es configurar.
&lt;/P&gt;
&lt;P&gt;
Empecemos con nuestro &quot;build.xml&quot; de cada uno de los proyectos que instalemos ó desarrollemos, y allí debemos indicar la ruta de nuestras descargas tal como tambien hicimos en nuestro codelab anterior; pero en esta oportunidad, también debemos agregar las instrucciones ANT requeridas para que nuestro proyecto Java Web reconozca a PHP-Quercus, ...y para que &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt; reconozcan nuestros archivos &lt;b&gt;*.php&lt;/b&gt;, por cuanto, en la infraetructura GAE, todos los archivos que no sean *.jsp, contenidos dentro de la estructura de nuestra carpeta WAR, estos son considerados &quot;estáticos&quot;, y solo los reconocerá como archivos TXT, y por supuesto, no ejecutará los comandos PHP que contengan.. vale pues resaltar que debemos revisar las instrucciones de nuestros archivos &quot;web.xml&quot; y &quot;appengine-web.xml&quot; alojados en &quot;web/WEB-INF&quot; de la carpeta de nuestro material de apoyo descargado.
&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Instalando nuestro codelab &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-phpwithjava&lt;/span&gt;&quot; en Netbeans IDE&lt;/b&gt;&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
Como se indica, tenemos por supuesto que haber instalado en nuestro ordenador Netbeans y haberlo habilitado para trabajar con un servidor local Appengine, mediante la instalación de los &lt;span class=&quot;notranslate&quot;&gt;plug-ins&lt;/span&gt; necesarios, y de nuestro servidor local Appengine de pruebas, como ya hemos descrito en nuestro codelab anterior.
&lt;/P&gt;
&lt;P&gt;
Resumiendo el proceso, &amp;nbsp;tenemos que crear un proyecto JavaWeb vacío sobre la carpeta &quot;appengine&quot;, &amp;nbsp;donde descargamos nuestro SDK de Java y el WAR de Quercus,&amp;nbsp;indicando que vamos a utilizar el servidor Appengine en él. Este proyecto recomendamos llamar &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-phpwithjava&lt;/span&gt;&quot;, y luego de creado y probado corriendo el mismo, procedemos a &quot;borrarlo&quot; (deteniendo primero el servidor), y sobre la carpeta &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-phpwithjava&lt;/span&gt;&quot;, correspondiente a nuestro proyecto &quot;vacío&quot; creado, descargar nuestro material de apoyo proporcionado, verificar nuestro archivo &quot;build.xml&quot; (la ruta de nuestras descargas del SDK y del WAR de quercus), ...y listo, carguemos nuestro codelab como un proyecto JavaWeb con &quot;fuentes existentes&quot; (indicando que utilizaremos nuestro build.ml), y podremos correr nuestro proyecto &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-phpwithjava&lt;/span&gt;&quot; sobre nuestro servidor local Appengine de pruebas utilizando Netbeans IDE....
&lt;/P&gt;
&lt;P&gt;
&lt;b style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;gae-phpwithjava.rar&lt;/span&gt;,&lt;/b&gt;&amp;nbsp;que corresponde a nuestra adaptación del proyecto &quot;php-withjava&quot; que describimos en nuestro codelab: &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/11/quercus-using-java-with-php.html&quot; target=&quot;_blank&quot;&gt;Using PHP on JavaWeb projects&lt;/a&gt;&quot;, pero ahora corriendo sobre la plataforma de &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt;.&lt;/div&gt;
&lt;/P&gt;
&lt;P&gt;
Al correr este proyecto podrán observar que podemos ejecutar dentro de la infraestructura &lt;span class=&quot;notranslate&quot;&gt;GAE&lt;/span&gt; archivos &lt;b&gt;*.php&lt;/b&gt; (de la versión 5.3.2 para la versión de Quercus 4.0.18 vigente a la fecha), inclusive conviviendo con archivos &lt;b&gt;*.jsp&lt;/b&gt; y &quot;servlets java&quot;.. y en el siguiente codelab observarán como integrar java con PHP en una misma aplicación...
&lt;/P&gt;

&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrr_Lfn58MD3SZ854-Z3wOT5U4Lr7izhxBdT463W7Zss9bqHJARnoANzU95-o7HoU5pcV94rlm_pQF7F5c0pLJenwVKcJdnxgkufvbryU_qar-gfdjICrHyyx_dIBAskn4zJPImzyLbcGk/s400/GAE-PHPJava.jpg&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;

&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;

&lt;P&gt;
&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-large; text-align: -webkit-auto;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Instalando nuestro codelab &quot;gae-PHPguestbook&quot; como proyecto Appengine JavaWeb en Netbeans IDE&lt;/span&gt;&lt;/b&gt;
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
procederemos ahora a correr nuestro codelab que presenta como cambiar el proyecto &quot;guestbook&quot; de los ejemplos de &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt; para que trabaje usando PHP (y aprovechando las clases java empleadas en él)... y por supuesto, debemos cargar nuestro material de apoyo a nuestro Netbeans como ya hemos indicado.&lt;/div&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
Resumiendo el proceso, &amp;nbsp;tenemos que crear un proyecto JavaWeb vacío sobre la carpeta &quot;appengine&quot;, &amp;nbsp;donde descargamos nuestro SDK de Java y el WAR de Quercus,&amp;nbsp;indicando que vamos a utilizar el servidor Appengine en él. Este proyecto recomendamos llamar &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-phpguestbook&lt;/span&gt;&quot;, y luego de creado y probado corriendo el mismo, procedemos a &quot;borrarlo&quot; (deteniendo primero el servidor), y sobre la carpeta &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-phpguestbook&lt;/span&gt;&quot;, correspondiente a nuestro proyecto &quot;vacío&quot; creado, descargar el material de apoyo proporcionado, verificar nuestro archivo &quot;build.xml&quot; (la ruta de nuestras descargas del SDK y del WAR de quercus), ...y listo, carguemos nuestro codelab como un proyecto JavaWeb con &quot;fuentes existentes&quot; (indicando que utilizaremos nuestro build.ml), y podremos correr nuestro proyecto &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-phpguestbook&lt;/span&gt;&quot; sobre nuestro servidor local Appengine de pruebas utilizando Netbeans IDE....&lt;/div&gt;
&lt;/P&gt;
&lt;BR id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;b style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;BR/&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;

&lt;P&gt;
&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #448888; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;gae-phpguestbook.rar&lt;/span&gt;,&lt;/b&gt;&amp;nbsp;que nos muestra el clásico ejemplo &quot;&lt;span class=&quot;notranslate&quot;&gt;guestbook&lt;/span&gt;&quot; de &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt; (que utilizan tanto en su plataforma para Java como Phyton, y ahora&amp;nbsp;también&amp;nbsp;en lenguaje &quot;Go&quot; desarrollado por el propio Google), pero ahora utilizando PHP para el manejo de las clases Java que componen el proyecto. Conviene a este respecto que revisemos esta entrada del blog de Caucho.com que nos presenta con mayor detalle la construcción del proyecto:
&lt;/P&gt;
&lt;P&gt;

&lt;a href=&quot;http://blog.caucho.com/2009/04/28/quercus-on-the-google-app-engine/&quot; target=&quot;_blank&quot; style=&quot;text-align: -webkit-auto;&quot;&gt;http://blog.caucho.com/2009/04/28/quercus-on-the-google-app-engine/&lt;/a&gt;
&lt;/P&gt;

&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3mTqFjPzdnEL59OJCIWsyg-dSw4ySLbd2YuvmOrL9Q8ndXzJ33B_lg2ZfDvStValxwDFU9HSJ3NnFLSuFb-kOdI_eUkpqkXhy7zKnZNGn65ta1lt1wEhUSjceQLhJgbgHWBQuQjsu2em-/s1600/GAE-PHPJava01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3mTqFjPzdnEL59OJCIWsyg-dSw4ySLbd2YuvmOrL9Q8ndXzJ33B_lg2ZfDvStValxwDFU9HSJ3NnFLSuFb-kOdI_eUkpqkXhy7zKnZNGn65ta1lt1wEhUSjceQLhJgbgHWBQuQjsu2em-/s400/GAE-PHPJava01.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
...resulta interesante observar como con Quercus pueden interactuar sin mayores conflictos códigos y datos PHP con Java, y ese potencial es el que utilizaremos en el desarrollo de nuetro próximo codelab referido a &lt;span class=&quot;notranslate&quot;&gt;Google Cloud SQL&lt;/span&gt;, que es una implementación de la base de datos MySQL sobre la infraestructura &lt;span class=&quot;notranslate&quot;&gt;cloud&lt;/span&gt; de Google, y por supuesto, para cualquier desarrollador Web resulta &amp;nbsp;fácilmente&amp;nbsp;comprensible trabajar con PHP+MySQL.(los que son utilizados por proyectos sociales muy difundidos como Drupal, Wordpress, Elgg, phpBB, etc. &amp;nbsp;..una larga lista de proyectos, pues veremos que si es posible trabajar manteniendo algunas de esas modalidad pero dentro de la infraestructura de &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt;...&lt;/div&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
pero aún hay más, porque en el mismo blog de caucho.com presentan un ejercicio de como implementar Wordpress para ser instalado y ejecutado completamente sobre la infraestructura de &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt; (utilizando Quercus para utilizar las instrucciones PHP propias del proyecto, pero adecuando la conexión a la base de datos para trabajar con el &lt;span class=&quot;notranslate&quot;&gt;datastore&lt;/span&gt; de &lt;span class=&quot;notranslate&quot;&gt;Google Appengine&lt;/span&gt;... éste proyecto creemos que vale propiciar su desarrollo, así que en brevedad, y sobre esta misma página, liberaremos nuestro código respectivo (el cual ya estamos terminando de depurar), ..y realmente esperamos se propicie el&amp;nbsp;interés&amp;nbsp;para adecuar el proyecto a versiones vigentes de Wordpress...&lt;/div&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Pueden revisar los detalles del proyecto en el blog de caucho.com, en la siguiente dirección:&lt;/div&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://blog.caucho.com/2009/05/31/quercus-on-google-app-engine/&quot; target=&quot;_links&quot;&gt;http://blog.caucho.com/2009/05/31/quercus-on-google-app-engine/&lt;/a&gt;&lt;/div&gt;

&lt;P&gt;
Ahora es importante resaltar que, este proyecto ha sido actualizado por lo que conviene revisar con detalle el siguiente enlace :
&lt;/P&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://blog.caucho.com/2012/12/06/quercus-on-google-app-engine-20/&quot; target=&quot;_links&quot;&gt;http://blog.caucho.com/2012/12/06/quercus-on-google-app-engine-20/&lt;/a&gt;&lt;/div&gt;

&lt;P&gt;
las fuentes del proyecto se pueden descargar de GitHub :
&lt;/P&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://github.com/diablonhn/quercus_on_gae_2&quot; target=&quot;_links&quot;&gt;https://github.com/diablonhn/quercus_on_gae_2&lt;/a&gt;&lt;/div&gt;

&lt;P&gt;
..y su demo :
&lt;/P&gt;

&lt;P&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://wordpress-on-quercus-2.appspot.com/&quot; target=&quot;_links&quot;&gt;http://wordpress-on-quercus-2.appspot.com/&lt;/a&gt;&lt;/div&gt;
&lt;/P&gt;

&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBDvZCti92ARbcOFrzArOs55V_S4G2j1ssuTu_EqWoe4ij4MdfpBPH67bB7wg6CosQEUBVgqqWKFhTZe1fzRgEPJt_pBkaroPmNXW3bTjoyBSK0rxg5m1DyyDkGIsS6KYn5m-ctxokX45t/s320/Wordpress3.4.2+on+GAE%E2%80%932.0-Quercus+Rocks!.png&quot; /&gt;
&lt;/div&gt;


&lt;br id=&quot;pos01&quot;&gt;


&lt;P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;NOTAS DE TRABAJO :&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;1.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;No debemos olvidar que para &quot;abrir&quot; un proyecto debemos previamente cerrar el que tengamos abierto, e indicar que el proyecto que vamos a desplegar sea seleccionado como nuestro &lt;span class=&quot;notranslate&quot;&gt;&quot;Main project&quot;&lt;/span&gt;. Si no lo hacemos, al correr un proyecto se compilará nuestro proyecto, pero se lanzará a nuestro navegador el proyecto que este marcado como &lt;span class=&quot;notranslate&quot;&gt;&quot;Main project&quot;&lt;/span&gt;, lo que podría confundirnos.
&lt;/P&gt;
&lt;P&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;2.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;En caso que no hayamos cerrado nuestro servidor Appengine en algún&amp;nbsp;proyecto, y ya no lo podamos cerrar con Netbeans, entonces podemos utilizar la herramienta &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Java VisualVM&lt;/b&gt;&lt;/span&gt;, y el &lt;span class=&quot;notranslate&quot;&gt;plug-in&lt;/span&gt; &quot;killApplication&quot; que debemos haber instalado en ella, y cerrar los procesos Java que correspondan (solo basta cerrar uno de los procesos pues se eliminan en bloque para una aplicación desplegada)
&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;3.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Podemos configurar nuestros proyectos para utilizar diferentes puertos de salida y &lt;span class=&quot;notranslate&quot;&gt;&quot;debug&quot;&lt;/span&gt;, y tener abiertos en forma simultanea al hacer nuestras pruebas. La configuración se realiza en el archivo &quot;build.xml&quot;
&lt;/P&gt;
&lt;P&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;4.-&lt;/span&gt;&lt;/b&gt;&amp;nbsp;Para correr nuestro proyecto utilizando ANT, en su pantalla de comando debe dirigirse a la carpeta que contiene nuestro proyecto (que debe contener a la carpeta &lt;span class=&quot;notranslate&quot;&gt;build.xml&lt;/span&gt; por supuesto), y alli ejecutar el comando : &lt;span class=&quot;notranslate&quot;&gt;ant runserver (enter)&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;5.-&lt;/span&gt;&lt;/b&gt;&amp;nbsp;Para correr nuestro proyecto utilizando los comandos del SDK de Java, conviene que agreguemos a la ruta de descarga de nuestro SDK (y a la carpeta &quot;bin&quot; en particular&quot; como una variable de entorno &lt;span class=&quot;notranslate&quot;&gt;PATH&lt;/span&gt; (opciones avanzadas de propiedades de myPC en Windows), y en la misma posición donde ejecutamos el comando anterior debemos ejecutar el comando : &lt;span class=&quot;notranslate&quot;&gt;dev_appserver.cmd web (enter)&lt;/span&gt;. Caso contrario, debemos indicar en nuestro comando toda la ruta de nuestro SDK: &lt;span class=&quot;notranslate&quot;&gt;(%pathSDK%)/bin/dev_appserver.cmd web(enter)&lt;/span&gt;.
&lt;/P&gt;
&lt;/div&gt;
&lt;br =&quot;pos01&quot;&gt;
&lt;P&gt;
Saludos
@Mlaynes&lt;br /&gt;
&lt;/P&gt;
&lt;br /&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;div&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;/div&gt;

&lt;script&gt;
window.fbAsyncInit = function() {
FB.init({appId: ‘138465519521758”, status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement(‘script’); e.async = true;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
document.getElementById(‘fb-root’).appendChild(e);
}());
&lt;/script&gt;
&lt;div id=&quot;fb-root&quot;&gt;
&lt;/div&gt;
&lt;script src=&quot;http://connect.facebook.net/en_US/all.js#xfbml=1&quot;&gt;
&lt;/script&gt;&lt;fb:comments href=&quot;http://mlaynessanchez.blogspot.com/2011/12/using-php-in-appengine-javaweb-projects.html&quot; num_posts=&quot;20&quot; width=&quot;600&quot;&gt;&lt;/fb:comments&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/7450873931766169453/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/12/using-php-in-appengine-javaweb-projects.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/7450873931766169453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/7450873931766169453'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/12/using-php-in-appengine-javaweb-projects.html' title='Using PHP on Appengine-JavaWeb projects'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfBSznqaO0ZcMxKYYi5NGvoFaerOP2mZE6LfK8DylyNLTmMUsw_8vCicAsOwFB0wkDlOqF-Rv9_lQ7LkJ9hMq3gA94YU5mrvnfgAxX35Jy-j_8PjACXMQkBZmOYS6QCeNnPlvxJe9sbQq-/s72-c/ResinaQuercus.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-67534050031625794</id><published>2011-12-07T22:42:00.001-05:00</published><updated>2013-07-13T12:02:50.855-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Appengine"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><title type='text'>Working GAE-Java projects on Netbeans IDE</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login please wait a few seconds and try again  \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    // gae-guestbook.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEMGZlYTc1ODQtYmIwNy00NDFlLWJmOWMtODNmZmJmOWY4MWRi&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //gae-intGoogle01.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZDZjMjExYmMtMDU0Yy00YTg5LTkzOTAtMzdkNWY5MjE0NzVl&quot;;
    my_link(w_link);
  };
  function my_link03() {
  // gae-intGoogle02.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYmFiZWEzZmYtYWIzYS00YTUzLTg3OTgtOTg5ZGY5ZjVjYjJj&quot;;
    my_link(w_link);
  };
  function my_link04() {
  //Wizard-sample.rar
    var w_link = &quot;&quot;;
    my_link(w_link);
  };
  function my_link05() {
  //Int-Google03.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEVjBybVlXX2FKMXM&quot;;
    my_link(w_link);
  };
  function my_link06() {
  //Int-Google03.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoETENrNHFXZ3JPcVk&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://code.google.com/intl/en/appengine/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF9QS1UUOzF-dRLZnPBqjlqrQpJJMp57OllR54wsZqZHhX5qjr-JiAXDNegNJFYJ-EjuVuOhujbH3OY8AJsBOebABtXA0hloJGQDyqqztn5lbOlFKDDsZbpgtP82CXFuhWljRRjJ9SHQk9/s1600/appengine.jpg&quot; style=&quot;float: left; height: 120px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 22px; width: 140px;&quot; /&gt;&lt;/a&gt;
&lt;p&gt;
Continuando con nuestras investigaciones y pruebas de tecnologías Web vigentes, volvemos ahora con Google App Engine (&lt;b&gt;GAE&lt;/b&gt;), pero en esta oportunidad utilizando el entorno de desarrollo Java (correspondiente a utilizar el SDK de Google App Engine para Java versión 1.6.0 vigente al 15/12/2011); y este es el primero de una saga de 03 codelabs en que trabajaremos proyectos GAE-Java utilizando la herramienta de desarrollo Netbeans IDE, en virtud a sus bondades y facilidades proporcionadas para el manejo de este entorno, que ya hemos utilizado en nuestros codelabs referentes al manejo del &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/09/using-back-end-javamysql-el-proyecto.html&quot; target=&quot;_blank&quot;&gt;Back-End Java(JSP)+MySQL&lt;/a&gt; y para la &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/using-back-end-javamysql-instalando.html&quot; target=&quot;_blank&quot;&gt;instalación del proyecto sdSimple&lt;/a&gt;, ...y si han seguido y desarrollado dichos codelabs, pues creemos que deben haber observado las ventajas de trabajar con Netbeans IDE en nuestros proyectos JavaWeb, y de manejo de servidores de aplicaciones y contenedores de servlets como Tomcat ó Glassfish (que utilizamos incluso para &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/11/quercus-using-java-with-php.html&quot; target=&quot;_blank&quot;&gt;trabajar con PHP en dicha plataforma&lt;/a&gt; mediante &lt;b&gt;Quercus&lt;/b&gt;), y en esta oportunidad, vamos a integrar a la plataforma de desarrollo de Appengine, y del servidor &amp;nbsp;Jetty que es un servidor HTTP contenedor de servlets 100% basado en Java, y que son utilizados por Google App Engine para integrar el lenguaje Java en su infraestructura de desarrollo.&lt;/p&gt;&lt;br&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;PREPARANDO NUESTRO ENTORNO DE DESARROLLO.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
Existen hasta 04 formas para trabajar con proyectos GAE-Java, y que podemos resumir en:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizando &lt;b&gt;ANT&lt;/b&gt;, que es una herramienta opensource que nos permite facilitar el proceso de creación, compilación, configuración del despliegue y lanzamiento de nuestros proyectos Java y &amp;nbsp;JavaWeb en un servidor de aplicaciones ó contenedor de servlets que trabaje con Google App Engine, como el servidor Jetty que viene incluído en el SDK para Java.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;ANT&lt;/b&gt; se puede descargar de &lt;a href=&quot;http://ant.apache.org/&quot; target=&quot;_blank&quot;&gt;http://ant.apache.org&lt;/a&gt;, y es quizá una de las formas mas difundidas de trabajo en proyectos Java ..y es que con un formato de directorios ya estandarizado, (las conocidas carpetas WAR y SRC), y mediante el archivo &quot;&lt;b&gt;build.xml&quot;&lt;/b&gt; (donde indicamos las etiquetas que conforman las diversas tareas de nuestro proceso de formación e nuestros proyectos y sus dependencias entre ellos), disponiendo así &amp;nbsp;de todas las instrucciones necesarias para construir y desplegar nuestros proyectos, y sobre cualquier sistema operativo (lo que no se puede hacer utilizando scripts o archivos *.bat), y dependiendo de nuestra modalidad de trabajo, pues casi siempre con un mismo archivo &quot;build.xml&quot;, y con pocas modificaciones referidos a los datos específicos de cada proyecto, lo podemos adecuar  para trabajar en todos nuestros proyectos Java, y en el caso de los proyectos &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;GAE-Java&lt;/b&gt;&lt;/span&gt;, dicha manera se mantiene, adecuando por supuesto, nuestro código a los requerimientos, necesarios para poner en funcionamiento un proyecto GAE-Java en nuestro servidor local de pruebas; y luego, para poderlos desplegar sobre la infraestructura de Google, como si se tratase de un servicio de hosting externo. Todo ello por supuesto, trabajando desde nuestra ventana de comandos, sobre Windows, Linux ó MAC-Apple, pues como ya debiéramos tener presente, Java es un lenguaje multiplataforma y corre sin problemas en cualquier sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Para correr con &lt;b&gt;ANT&lt;/b&gt; nuestros proyectos Java, JavaWeb y GAE-Java, después de haber descargado ANT desde la ruta indicada, debemos ubicarnos en la carpeta de nuestro proyecto donde se encuentra el archivo &quot;build.xml&quot; y correr la instrucción:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;b&gt;%path-ANT%/bin/ANT runserver (enter)&lt;/b&gt;, donde &quot;runserver&quot; es el nombre la etiqueta de nuestro archivo &lt;b&gt;build.xml&lt;/b&gt; que ejecuta nuestro proyecto con el comando &quot;dev_appserver&quot; del SDK para Java de Google App Engine, y que usualmente depende de otras etiquetas necesarias para la construcción y ejecución de nuestro proyecto las que podemos revisar con detalla al abrir el archivo build.xml con nuestro editor de preferencia.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Utilizando los comandos proporcionados por el mismo SDK para Java, para cual solo es necesario que nuestro proyecto se encuentre correctamente configurado y construido (pudiendo utilizar &lt;b&gt;ANT&lt;/b&gt; para ello), y luego utilizando el comando :&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;(%path_sdk%)/bin/dev_appserver.cmd (%path_war%)&lt;/b&gt;&lt;/span&gt;, se procederá con el lanzamiento de nuestros proyectos a nuestro servidor local de pruebas, y por supuesto, de manera similar podemos lanzar nuestro proyecto a la infraestructura de Google una vez probados y aprobados &amp;nbsp;nuestros proyectos. El SDK de Java los podemos descargar de la pagina oficial de Google de la siguiente dirección:&amp;nbsp;&lt;a href=&quot;http://code.google.com/intl/en/appengine/downloads.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/en/appengine/downloads.html&lt;/a&gt;, y es uno de los componentes básicos del entorno &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; porque ademas de contener las clases que permiten nos permiten trabajar con el datastore &quot;big table&quot; de Google, entre otras herramientas para trabajar en dicho entorno, pues contiene al servidor local Appengine que nos permite realizar nuestras pruebas (el servidor Jetty como hemos indicado)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Utilizado el IDE&amp;nbsp;&lt;b&gt;Eclipse&lt;/b&gt;, para lo cual Google ha lanzado un plug-in oficial para trabajar nuestros proyectos &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; sobre dicha plataforma de desarrollo, y que tiene como principal ventaja y desventaja, que &quot;automatiza&quot; algunos procesos de configuración de nuestros proyectos, y muchas veces creemos que es mejor que observemos y tengamos un mejor control de todos los procesos y componente de nuestros proyectos para mantener un desarrollo más limpio y eficiente (los codelabs de Google App Engine presentados en la pagina oficial de Google como el &lt;a href=&quot;https://sites.google.com/site/gdevelopercodelabs/app-engine/java-codelab&quot; target=&quot;_blank&quot;&gt;Developer Codelabs&lt;/a&gt; y el propio &lt;a href=&quot;http://code.google.com/intl/es/appengine/docs/java/gettingstarted/&quot; target=&quot;_blank&quot;&gt;tutorial&lt;/a&gt; contenido en la documentación referidos a GAE-Java, se muestran utilizando esta herramienta, por lo que pueden revisarlos si les resulta conveniente).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;y por supuesto, utilizando &lt;b&gt;Netbeans IDE&lt;/b&gt;, el cual a nuestro criterio presenta algunas ventajas no solo tal vez&amp;nbsp;porque&amp;nbsp;ya los estemos utilizando en nuestros proyectos Java, sino que para los procesos de detección y solución de errores, y depuración, optimización y refactoring, Netbeans es bastante amigable, intuitivo y eficiente como tal vez ya lo hayan podido comprobar.. y por supuesto con Netbeans también se podemos automatizar todo el proceso construcción y lanzamiento de nuestros proyectos GAE-Java a nuestro servidor local de pruebas (sin tener que recurrir a digitar comandos), y también realiza el despliegue de nuestros proyectos en la infraestructura &lt;span class=&quot;notranslate&quot;&gt;&quot;cloud&quot;&lt;/span&gt; de Google App Engine (que por supuesto requiere que previamente hayamos registrado nuestra cuenta Google y obtengamos una cuenta Appengine, y que registremos el nombre de nuestra aplicación y dominio propio, siendo éste último solo si lo estimasemos necesario.. Google nos provee un subdominio&lt;b&gt; &quot;appspot.com&quot;&lt;/b&gt; que incluso lo podríamos utilizar en forma permanente).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
No es nuestro objetivo en estos momentos comparar ni calificar las ventajas o desventajas de cada método de trabajo, menos comparar plataformas de desarrollo como GAE-Phyton y GAE-Go con GAE-Java; si no por el contrario, mostrar que todos estos procesos pueden de alguna manera complementarse y que es necesario conocer su funcionamiento para tener un completo concepto del funcionamiento de la plataforma de desarrollo Appengine y GAE-Java en particular, y así poder manejar todos sus detalles y componentes, más aún cuando como hemos indicado al principio, éste codelab es la antesala de otros dos en que presentaremos (además de trabajar con Java y el datastore &quot;big table&quot; de Google App Engine (que corresponde a éste codelab), a como trabajar con Java y PHP sobre esta misma plataforma usando Quercus (que ya hemos utilizado para trabajar con PHP en nuestros proyectos Java Web)&lt;b&gt;;&lt;/b&gt; e incluso para trabajar con Java y PHP sobre &lt;b&gt;Google Cloud SQL&lt;/b&gt;, que es una implementación de la base de datos relacional MySQL sobre la infraestructura cloud de Google, que junto a la implementación del lenguaje Go para Google App Engine, corresponden a lo últimos desarrollos lanzados por Google para Appengine.&lt;br /&gt;
En todos estos casos vamos a trabajar con Netbeans IDE como herramienta de desarrollo para mantener un&amp;nbsp;estándar&amp;nbsp;de trabajo..así que sin mayores preámbulos empecemos con nuestro codelab...&lt;/p&gt;&lt;br&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;PREPARANDO&amp;nbsp;NETBEANS&amp;nbsp;PARA&amp;nbsp;TRABAJAR&amp;nbsp;PROYECTOS&amp;nbsp;GAE-JAVA&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
Recomendamos trabajar con &lt;a href=&quot;http://netbeans.org/&quot; target=&quot;_blank&quot;&gt;Netbeans versión 7&lt;/a&gt; en lugar de las versiones&amp;nbsp;anteriores&amp;nbsp;por el hecho que sus scanning son más rápidos y amigables que sus predecesoras de la versión 6.9 y anteriores, y en lo respecta para trabajar GAE-Java, pues también cabe resaltar que, en este tipo de proyectos debe indicarse, antes de lanzarlos a nuestro servidor local de pruebas, cual es nuestro &lt;span class=&quot;notranslate&quot;&gt;&quot;Main project&quot;&lt;/span&gt; ...ello porque en &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt;, nuestros proyectos excepto los configuremos adecuadamente, serán lanzados por un mismo puerto, el 8080 por defecto, y para poder &quot;cerrar&quot; uno y &quot;abrir&quot; otro, además de cerrar nuestro servidor local de pruebas, deberá establecerse que proyecto desplegaremos al servidor, y en Netbeans 7, el IDE nos indica&amp;nbsp;también&amp;nbsp;de manera más amigable si nuestro proyecto ya ha sido seleccionado..&lt;/p&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;NOTAS IMPORTANTES : &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Al instalarse Netbeans 7, se nos indicará durante el proceso si queremos cargar los proyectos JavaWeb desplegados en versiones anteriores (que no son necesario desinstalar), y estos serán agregados a los proyectos de nuestro IDE instalado.. ahora también se nos solicitará que indiquemos si requerimos instalar las ultimas versiones de los servidores Apache Tomcat y Glassfish, los que podremos instalar a nuestro requerimiento, en una carpeta adecuada para nuestro caso, y que durante su instalación, Netbeans IDE efectuará las configuraciones necesarias para evitar conflictos de puertos entre ellos, no siendo tampoco necesario desinstalar los servidores de Aplicaciones u otros contenedores de servlets que tengamos instalados.&lt;/li&gt;
&lt;li&gt;
Para el caso que nuestro proyecto haya sido lanzado a nuestro servidor local de pruebas, y no hayamos cerrado nuestro servidor antes de pasar a otro proyecto, nos conviene tener una herramienta como &lt;b&gt;&lt;a href=&quot;http://visualvm.java.net/&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;Java VisualVM&lt;/span&gt;,&lt;/a&gt;&amp;nbsp;&lt;/b&gt;para observar los procesos Java que han sido desplegados, e incluso poder cerrarlos o eliminarlos &quot;manualmente&quot; de presentarse algún contratiempo en nuestra lógica de programación sin necesidad de reiniciar nuestro ordenador. Esta herramienta la podemos descargar de&amp;nbsp;&lt;a href=&quot;http://visualvm.java.net/download.html&quot; target=&quot;_blank&quot;&gt;http://visualvm.java.net/download.html&lt;/a&gt;. y asimismo, una vez instalada, conviene que le agreguemos el &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;plug-in&lt;/span&gt; KillApplication,&lt;/b&gt; que viene listo para ser instalado en la opción del menú: &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;Tools&lt;/span&gt;&lt;/b&gt;,&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; plug-ins&lt;/span&gt;&lt;/b&gt; lengüeta &lt;b&gt;avaible &lt;span class=&quot;notranslate&quot;&gt;plug-ins&lt;/span&gt;&lt;/b&gt;; y con ello en la pantalla de visualización de nuestros procesos Java, y solo haciendo click derecho con el mouse, se mostrará la opción &lt;span class=&quot;notranslate&quot;&gt;&quot;Kill Application&quot;&lt;/span&gt;, con lo podremos cerrar nuestros procesos Java facilmente, y sin necesidad de digitar en nuestra pantalla de comandos: &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Taskkill /pid=nn&lt;/b&gt;&lt;/span&gt;&amp;nbsp;(donde &quot;nn&quot; es el numero de identificación que nos muestra &lt;span class=&quot;notranslate&quot;&gt;Java VisualVM&lt;/span&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgszXTv_LpqZq6cHiWxfXtnlSD9fFoW3eiXl1JxeU7wkyR5e-VmqEHbv9fqUa2AqBgC4YEWyn9ROERnGxVBaxIySYGbCkzenHlxn5jojOKqyM0g4Lf62Hg_Jmpt1vt39gUvr0iRa4296q_q/s640/JavaVisualVM.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgszXTv_LpqZq6cHiWxfXtnlSD9fFoW3eiXl1JxeU7wkyR5e-VmqEHbv9fqUa2AqBgC4YEWyn9ROERnGxVBaxIySYGbCkzenHlxn5jojOKqyM0g4Lf62Hg_Jmpt1vt39gUvr0iRa4296q_q/s640/JavaVisualVM.jpg&quot; width=&quot;400&quot; /&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Si trabajamos con la version 1.7.2 ó superior del SDK para Java de Appengine debemos asegurarnos que en el archivo &lt;b&gt;appengine-web.xml&lt;/b&gt; se encuentre el siguiente script:&lt;br&gt;
&lt;div style=&quot;padding:15px; color:brown;&quot;&gt;
        &amp;#60;!--&lt;br/&gt;
        Allows App Engine to send multiple requests to one instance in parallel:&lt;br/&gt;
        --&amp;#62;&lt;br/&gt;
        &amp;#60;threadsafe&amp;#62;true&amp;#60;/threadsafe&amp;#62;&lt;br/&gt;
&lt;/div&gt;Incluso para la muestra &quot;guestbook&quot; que viene con el SDK para Java debemos verificar que se encuentre este script para que funcione correctamente..
&lt;/li&gt;
&lt;li&gt;Si trabajamos con la version 1.7.3 del SDK para Java de Appemgine debemos asegurarnos que en carpeta WEB-INF-lib se encuentre grabado el archivo &lt;b&gt;appengine-endpoint.jar&lt;/b&gt;, y que se encuentre cargado en nuestro proyecto para que el SDK se encuentre completo.&lt;/li&gt;
&lt;/ol&gt;
&lt;br/&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;INSTALANDO EL SDK PARA JAVA EN NUESTRO NETBEANS&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
Debemos ahora cargar el servicio Appengine a nuestro Netbeans, y para ello debemos ir también al menú de Netbeans: &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Tools&lt;/b&gt;&lt;/span&gt;, &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;plug-ins&lt;/b&gt;&lt;/span&gt;, y a la lengüeta &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Settings&lt;/b&gt;&lt;/span&gt;; allí no debe aparecer la opción de &lt;span class=&quot;notranslate&quot;&gt;&quot;Google AppEngine&quot;.&lt;/span&gt; Esta pantalla corresponde a la pantalla de configuración automática de actualización de los &lt;span class=&quot;notranslate&quot;&gt;plug-ins&lt;/span&gt; de Netbeans, y nuestro &lt;span class=&quot;notranslate&quot;&gt;plugi-in&lt;/span&gt; no aparece por cuanto aún no la hemos instalado ...para ello, elijamos la opción &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;&quot;Add&quot;&lt;/span&gt;&lt;/b&gt; de esta pantalla para poder agregarlo, pongamosle como nombre &quot;Google Appengine&quot;, y en la ruta URL indiquemos :&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;http://kenai.com/downloads/nbappengine/NetBeans69/updates.xml,&lt;/b&gt; que corresponde a la dirección del &lt;span class=&quot;notranslate&quot;&gt;plug-in&lt;/span&gt; del fabricante para la version 6.9 y superior (válida&amp;nbsp;también&amp;nbsp;para Netbeans 7, aunque puede revisar la pagina de&lt;a href=&quot;http://kenai.com/downloads/nbappengine&quot; target=&quot;_blank&quot;&gt; kenai.com&lt;/a&gt; para mayor verificación.&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrcaWa2lNsyPWbgc9LTWa5z9wXa72b51BOG55G-4ELoaGXRXoh8A0usbIlbuu0qEhcXG5WB8ZfcIAuzTmTl1qKADzjQyytmIDvS9z6222Uj0B3EZjCxIo_MmLjCDMkhS67rD-RV9bjGQgT/s640/Netbeans01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrcaWa2lNsyPWbgc9LTWa5z9wXa72b51BOG55G-4ELoaGXRXoh8A0usbIlbuu0qEhcXG5WB8ZfcIAuzTmTl1qKADzjQyytmIDvS9z6222Uj0B3EZjCxIo_MmLjCDMkhS67rD-RV9bjGQgT/s640/Netbeans01.jpg&quot; width=&quot;400&quot; /&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
Aunque realmente vale destacar que Kenai ya no esta brindado un adecuado soporte a su plugin y a las contantes actualizaciones del SDK para Java de Google App Engine, por ello en varias oportunidades estuvimos buscando y revisando varias alternativas, y la mas adecuada que encontramos es la siguiente:
&lt;br&gt;
&lt;/p&gt;
&lt;div style=&quot;padding: 20px; margin:0 auto; width: 80%; background-color:#EEEEEE; border-radius:10px; border: 1px black solid;&quot;&gt; 
&lt;br&gt;
&lt;h1&gt;Importante !&lt;/h1&gt;
&lt;br&gt;
from &lt;a href=&quot;http://stackoverflow.com/questions/10423861/google-app-engine-wont-launch-on-netbeans-stuck-on-deploy/16925640#16925640&quot; target=&quot;_link&quot;&gt;stackOverflow&lt;/a&gt; :&lt;br&gt;
&lt;br&gt;
it&#39;s possible obtain a good plug-in for Netbeans 7.3 and GAE Java SDK v.1.8  from this repository:&lt;br&gt;
&lt;a href=&quot;https://github.com/Valery-Sh/NbAppEngine&quot; target=&quot;_link&quot;&gt;https://github.com/Valery-Sh/NbAppEngine&lt;/a&gt;
&lt;br&gt;&lt;br&gt;
with this plugin, GAE projects like guestbook sample or new personal projects are running very fine..
&lt;br&gt;&lt;br&gt;
&lt;h2&gt;Method of use:&lt;/h2&gt;&lt;br&gt;
1. delete completely App Engine server of your Netbeans (I had to reinstall Netbeans to remove the service completely, but there must be a way to do)&lt;br&gt;
2. download plug-in from : &lt;a href=&quot;https://code.google.com/p/nb-gaelyk-plugin/downloads/list&quot; target=&quot;_link&quot;&gt;https://code.google.com/p/nb-gaelyk-plugin/downloads/detail?name=nbappengine-7.3-gae1.8.x.zip or last plugin versions&lt;/a&gt; to any folder..&lt;br&gt;
3. install plug-in : Tools / Plugins / Downloaded&lt;br&gt;
4. verify update of plugins..&lt;br&gt;
&lt;br&gt;
&lt;h2&gt;latest News: &lt;/h2&gt;test on Netbeans 7.3.1 Ok.! (July 2013)
&lt;br&gt;
&lt;br&gt;

&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
A. Con lo anterior, debemos haber cargado el &lt;span class=&quot;notranslate&quot;&gt;plug-in&lt;/span&gt; Google Appengine de Kenai.com a nuestro Netbeans, y ahora debemos activarlos (en caso hayamos utilizado el plugin Valery-nbappengine, &lt;b&gt;éste no requiere ser activado&lt;/b&gt; sino que directamente debemos crear nuestro servidor local como se indica en el parrafo &quot;B&quot; siguiente ), de ser el caso, debemos ir a la lengueta &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;avaible plug-ins&quot;&lt;/b&gt;&lt;/span&gt; de la misma pantalla, y seleccionemos todos los &lt;span class=&quot;notranslate&quot;&gt;plug-ins&lt;/span&gt; disponibles para Google App Engine (&lt;span class=&quot;notranslate&quot;&gt;&quot;server&quot;&lt;/span&gt;, &lt;span class=&quot;notranslate&quot;&gt;&quot;configuration&quot;&lt;/span&gt;, &lt;span class=&quot;notranslate&quot;&gt;&quot;deployment&quot;&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;&quot;samples&quot;&lt;/span&gt;); si su Netbeans ya hubiese estado preparado para trabajar con &lt;span class=&quot;notranslate&quot;&gt;&quot;Java Hints&quot;&lt;/span&gt;, podrá tambien instalar el plug-in &lt;span class=&quot;notranslate&quot;&gt;&quot;Google App Engine Eitor Hints&quot;&lt;/span&gt;, pero si no es el caso, no marque esta opción... los &lt;span class=&quot;notranslate&quot;&gt;plug-ins&lt;/span&gt; requeridos mencionados funcionarán sin mayores contratiempos.&lt;/p&gt;
&lt;p&gt;
B. Con el paso anterior descrito, tenemos los &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;plugins&lt;/b&gt;&lt;/span&gt; instalados listos para trabajar con Netbeans, pero aún nos falta como debemos crear nuestro &lt;b&gt;servidor local Appengine&lt;/b&gt; para nuestras pruebas, y para ello debemos &lt;a href=&quot;http://code.google.com/intl/en/appengine/downloads.html&quot; target=&quot;_blank&quot;&gt;descargar el SDK de Java&lt;/a&gt; en una carpeta que podríamos llamar &quot;appengine&quot;, en donde también descargaremos los códigos que corresponden a nuestro codelab ...entonces, descargado el SDK de Java, debemos implementar el servidor, y para ello debemos recurrir a la lengüeta &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;services&quot;&lt;/b&gt;&lt;/span&gt; de nuestra pantalla principal de Netbeans (al lado de donde se despliegan nuestros proyectos y &lt;span class=&quot;notranslate&quot;&gt;&quot;Files&quot;&lt;/span&gt; de los mismos). Allí debemos hacer click derecho sobre la opción &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;servers&quot;&lt;/b&gt;&lt;/span&gt; para poder adicionar uno nuevo, la pantalla a continuación nos indicará que servidores tenemos disponibles para instalar, y debe aparecer &lt;span class=&quot;notranslate&quot;&gt;&quot;Google App Engine&quot;&lt;/span&gt; por cuanto nuestro &lt;span class=&quot;notranslate&quot;&gt;plug-in&lt;/span&gt; ya ha sido instalado..Al seleccionarla, en la parte inferior de la pantalla,  se nos permitirá modificar el nombre de nuestro servidor, y conviene que indiquemos la version de nuestro SDK descargado, por ejemplo &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Appengine SDK 1.6.0&lt;/b&gt;&lt;/span&gt; (podremos agregar nuevos servidores Appengine segun las nuevas versiones del SDK disponibles, y no descartar las existentes hasta que hayamos probado completamente nuestros proyectos) ...sigamos entonces las instrucciones de Netbeans y listo.. ya tendremos a nuestro servidor local GAE listo para trabajar...&lt;/p&gt;
&lt;p&gt;
C. Adicionalmente si queremos probar que todo esta correctamente instalado, en el Menu de Netbeans indiquemos que queremos crear un nuevo proyecto... pero en lugar de seleccionar un proyecto &quot;JavaWeb&quot;, vayamos a la opción &quot;ejemplos&quot;, allí busquemos el ejemplo de &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt;, y la instalación de nuestro &lt;span class=&quot;notranslate&quot;&gt;plug-in&lt;/span&gt; debe ahora permitirnos mostrar la opción &lt;span class=&quot;notranslate&quot;&gt;Guest Book&lt;/span&gt; (que corresponde a un libro de Visitas que Google muestra como ejercicio en su página oficial), siga los pasos e indique que va instalar el proyecto en la carpeta &quot;appengine&quot;, donde también descargamos el SDK de Java para mantener nuestros proyectos en un mismo lugar.. y listo, debe crearse el proyecto &lt;span class=&quot;notranslate&quot;&gt;&quot;guestbook&quot;&lt;/span&gt; así que ahora corramos el proyecto y debería desplegarse en nuestro navegador de preferencia...&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOmigksvW-mCiv4TxqTydG1eEd49r6wY9nzBE5eW3zL0A4biQnmWSgKwBUfdwoaK_qFAgocXkOuL3Tt355f48RU7H4cadJ3ZBQFuC4BNesdaxEiank7LBUo9a3WJ8mUoGWvQSgo0PJ_8gA/s640/Netbeans02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOmigksvW-mCiv4TxqTydG1eEd49r6wY9nzBE5eW3zL0A4biQnmWSgKwBUfdwoaK_qFAgocXkOuL3Tt355f48RU7H4cadJ3ZBQFuC4BNesdaxEiank7LBUo9a3WJ8mUoGWvQSgo0PJ_8gA/s640/Netbeans02.jpg&quot; width=&quot;400&quot; /&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMmxwPOH04OyUNWnJbHL-mX-h128H-n3gkynD5HNoylzMgcv4tKlRNgzwLsAEhtnDN1OxEcO2Iwv5u_wcEw0i3u7YNFSibEce2bpnvjLciLbC3cnHuNa546fIOMKEcUBPWfh9mz4P_QOm8/s640/Netbeans03.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMmxwPOH04OyUNWnJbHL-mX-h128H-n3gkynD5HNoylzMgcv4tKlRNgzwLsAEhtnDN1OxEcO2Iwv5u_wcEw0i3u7YNFSibEce2bpnvjLciLbC3cnHuNa546fIOMKEcUBPWfh9mz4P_QOm8/s640/Netbeans03.jpg&quot; width=&quot;400&quot; /&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
podemos consultar con nuestro &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Java VisualVM&lt;/b&gt;&lt;/span&gt; que nuestro proyecto ha sido desplegado (tiene 03 componentes, el proceso ANT, el proceso de despliegue, y el &lt;span class=&quot;notranslate&quot;&gt;&quot;debug&quot;&lt;/span&gt;, cada uno con un numero de proceso diferente), ..y para detener al servidor puede recurrir al botón rojo al lado de la pantalla de salida &lt;span class=&quot;notranslate&quot;&gt;&quot;output&quot;&lt;/span&gt; de Netbeans o cerrar el proceso con &quot;KillApplication&quot; de &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Java VisualVM&lt;/b&gt;&lt;/span&gt;, en cualquier caso, si selecciona uno de los procesos desplegados se cerrarán los otros (no cierre el proceso Netbeans pues cerrará al IDE)
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrkk5b7k4LwTbv7cN5DmcpgsnwtsMbgTXREH3fDzj25RP19hz2tNLw2Rsy-RyMGmKX5ip6dxY-JvwWIVlt9l7yB3fRkO526dOCKE597LKHV22GIMI6QLqX9QeTq9UX883Yrs3T0DHkh21y/s640/Netbeans04.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrkk5b7k4LwTbv7cN5DmcpgsnwtsMbgTXREH3fDzj25RP19hz2tNLw2Rsy-RyMGmKX5ip6dxY-JvwWIVlt9l7yB3fRkO526dOCKE597LKHV22GIMI6QLqX9QeTq9UX883Yrs3T0DHkh21y/s640/Netbeans04.jpg&quot; width=&quot;400&quot; /&gt;
&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
Si revisamos las propiedades de nuestro proyecto &lt;span class=&quot;notranslate&quot;&gt;&quot;guestbook&quot;&lt;/span&gt; cargado automáticamente como ejemplo de una aplicación &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; en Netbeans (botón derecho el mouse sobre el nombre de nuestro proyecto), podrán observar que se mantienen las opciones básicas de un proyecto JavaWeb, pero que se nos permite seleccionar/deseleccionar nuestro proyecto como &lt;span class=&quot;notranslate&quot;&gt;&quot;Main project&quot;&lt;/span&gt;, y asimismo, que al final de la lista, antes de las propiedades, se encuentra activada la opción &lt;span class=&quot;notranslate&quot;&gt;&quot;Deploy to Google App Engine&quot;&lt;/span&gt; (para lanzar nuestros proyecto directamente a la plataforma cloud de Google); conviene tambien que le demos una revisión a las propiedades de nuestro proyecto, en especial a la pestañas &quot;source&quot; y &quot;run&quot;, donde podremos indicar la versión de JDK y codificación que utilizaremos (JDK5 y UTF-8 por defecto) ..y el servidor que utilizaremos para desplegar nuestro proyecto... si tuviesemos varios SDK Java instalados podremos cambiar entre ellos y ver los resultados antes de eliminar alguno de ellos...&lt;/p&gt;
&lt;p&gt;
Hasta aquí.. ya tenemos nuestro entorno de desarrollo &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; listo para trabajar nuestros propios proyectos con Netbeans en esta plataforma.. pero como hay algunas &quot;inconsistencias&quot; respecto a trabajar con &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; en Netbeans, vamos a detallar paso a paso como cargar nuestro codelab &lt;b&gt;&quot;&lt;span class=&quot;notranslate&quot;&gt;gae-guestbook&lt;/span&gt;&quot;&lt;/b&gt; a nuestra plataforma &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; de Netbeans que hemos instalado...&lt;/p&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Instalando nuestro codelab &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-guestbook&lt;/span&gt;&quot; en Netbeans IDE&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;
Como se indica, tenemos por supuesto que haber instalado en nuestro ordenador Netbeans y haberlo habilitado para trabajar con un servidor local Appengine, mediante la instalación de los &lt;span class=&quot;notranslate&quot;&gt;plug-ins&lt;/span&gt; necesarios y de nuestro servidor local Appengine de pruebas, como hemos descrito en los pasos anteriores.&lt;/p&gt;
&lt;p&gt;
&lt;b style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;br/&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;gae-guestbook.rar&lt;/span&gt;,&lt;/b&gt;&amp;nbsp;que corresponde a nuestra adaptación del proyecto &quot;guestbook&quot; básico presentado en nuestra instalación del ejemplo de Netbeans, y donde les presentamos como trabajar con tipos de datos &lt;span class=&quot;notranslate&quot;&gt;string&lt;/span&gt;, numéricos, &lt;span class=&quot;notranslate&quot;&gt;date &lt;/span&gt;y &lt;span class=&quot;notranslate&quot;&gt;user &lt;/span&gt;con el datastore de &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt;, y presentándolos sobre un &lt;span class=&quot;notranslate&quot;&gt;&quot;table&quot;&lt;/span&gt; HTML, pero a diferencia de todos nuestros codelabs anteriores, nuestro códigos no están contenidos en una carpeta que descargar e importar como un proyecto &quot;JavaWeb con fuentes existentes&quot; directamente sobre Netbeans IDE... es allí donde se comienza lo que podríamos llamar algunas &quot;inconsistencia&quot; en el manejo de proyectos &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; que espero logren adecuar en versiones futuras del IDE, pero que podemos y debemos superar para poder trabajar con Netbeans sin mayores contratiempos.&lt;/div&gt;&lt;/p&gt;

&lt;div style=&quot;padding: 20px; margin:0 auto; width: 80%; background-color:#EEEEEE; border-radius:10px; border: 1px black solid;&quot;&gt; 
&lt;br&gt;
&lt;h1&gt;Nota importante:&lt;/h1&gt;
&lt;br&gt;
en caso estemos trabajando con el &lt;b&gt;plugin Valery-nbappengine&lt;/b&gt; y lo utilicemos para crear nuestro servidor GAE-Java utilizando el SDK para Java version 1.8, pues tenemos una grata e importante noticia:&lt;br&gt;
&lt;ol&gt;
&lt;li value=&quot;1&quot;&gt;En este caso ya no es necesario crear un proyecto vacio para &quot;sobreescribir sobre ella&quot; las fuentes de nuestra descarga dado que este plugin nos permite crear proyectos GAE-Java sin mayores problemas utilizando su opción: &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;New Project/Java Web/Web Application with existing sources&lt;/span&gt;&lt;/b&gt;
&lt;/li&gt;
&lt;li&gt;Asimismo, para desplegar nuestra aplicación en la plataforma GAE solo basta con hacer click derecho sobre nuestro proyecto y utilizar la opción &lt;span class=&quot;notranslate&quot;&gt;&quot;Deploy To Google App Engine&quot;&lt;/span&gt; (debe por supuesto crearse primero nuestra cuenta GAE y registrar nuestro proyecto, como corresponde), con las versiones del plugin disponibles en kenai.com esta opción tampoco trabajaba correctamemte para las nuevas versiones de Netbeans y del SDK para Java
&lt;/li&gt;
&lt;li&gt;y es tambien una buena noticia que en la version 7.3 de Netbeans ya no resulta necesario y no existe la opción &quot;set/unset as main project&quot;, con lo que el manejo de proyectos GAE-Java en Netbeans resulta ahora mucho mas sencillo, rápido y eficiente; y por lo que varios de los pasos detallados a continuación deben obviarse segun corresponda..
&lt;/li&gt;
&lt;/ol&gt;
&lt;br&gt;
&lt;/div&gt;

&lt;p&gt;
El caso es que para proyectos &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt;, resulta necesario que creemos primero en nuestro Netbeans un proyecto JavaWeb y que le indiquemos que utilizaremos un servidor Appengine que ya debemos haber instalado (y en este caso ponerle &amp;nbsp;el nombre &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-guestbook&lt;/span&gt;&quot; ( por supuesto, este es un nombre sugerido.. puede ser cualquier otro)&lt;/p&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYTxQIRTOTG57WWcxiNw99UxuyacKVv82w0ci6H9Ygw556qPTU7D6yPNarjkzlnwLx6BLE5GplpRFiLZ5cGwGo2bVs_nnI87OOeqDMHEX7JncDawiscz129v4r6mB838yZvwn3vFNY-mHw/s1600/GAE-Java01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYTxQIRTOTG57WWcxiNw99UxuyacKVv82w0ci6H9Ygw556qPTU7D6yPNarjkzlnwLx6BLE5GplpRFiLZ5cGwGo2bVs_nnI87OOeqDMHEX7JncDawiscz129v4r6mB838yZvwn3vFNY-mHw/s640/GAE-Java01.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;1. Creando nuestro proyecto Java-Web&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjemENTn-rWEEGK6BQYiYZF3nKLs7-dndFj-QEv0fuNG7Soa1hO95hAM1BkSH2Y6TOPjZ43cZFh5tAVl_0-MXqEz5dMFGYLwawpaqxZrg-H3nWj4znwxPGuhCCpMkedIONHOEMsi3UZ1qUZ/s1600/GAE-Java02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjemENTn-rWEEGK6BQYiYZF3nKLs7-dndFj-QEv0fuNG7Soa1hO95hAM1BkSH2Y6TOPjZ43cZFh5tAVl_0-MXqEz5dMFGYLwawpaqxZrg-H3nWj4znwxPGuhCCpMkedIONHOEMsi3UZ1qUZ/s640/GAE-Java02.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;2. Indicando el nombre y la ruta de nuestro proyecto...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsBKTCETAplANBqoXQMmWxXIlNWytBHupLHa4iSECR79gPO1xOZJOA6qTfwn6W5-g5v0brq8Xp_rax7jqSbVNPBRrROnKs7KuFvRPC1_y7Jsm1mhZBawNIeun7V9-smeW-brcG7X0jNwZU/s1600/GAE-Java03.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsBKTCETAplANBqoXQMmWxXIlNWytBHupLHa4iSECR79gPO1xOZJOA6qTfwn6W5-g5v0brq8Xp_rax7jqSbVNPBRrROnKs7KuFvRPC1_y7Jsm1mhZBawNIeun7V9-smeW-brcG7X0jNwZU/s640/GAE-Java03.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;3. Seleccionando el servidor...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiCN8iP0LouH424_LizkUvV6djbSGrtjSh-WIZ7TazjGCa5HRqGDamuB7tX4l9_KYmY4NUgSFYFUSBn8B3iAw0BO_hG2kq-P_dm0PNdozbNtL-ZJ7fdaRtgZeKZVK0NxImQpJ62zOmynjI/s1600/GAE-Java04.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiCN8iP0LouH424_LizkUvV6djbSGrtjSh-WIZ7TazjGCa5HRqGDamuB7tX4l9_KYmY4NUgSFYFUSBn8B3iAw0BO_hG2kq-P_dm0PNdozbNtL-ZJ7fdaRtgZeKZVK0NxImQpJ62zOmynjI/s640/GAE-Java04.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;4. Termiando nuestro proyecto &lt;span class=&quot;notranslate&quot;&gt;gae-guestbook&lt;/span&gt; &quot;vacío&quot;...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Hasta este punto, lo que hemos hecho es crear un proyecto &quot;vacío&quot;, &amp;nbsp;por defecto Netbeans nos presenta un simple &quot;Hello World&quot; para verificar que todo ha sido correctamente configurado y lo podamos desplegar en nuestro servidor local Appengine de pruebas... En la imagen a continuación pueden observar que a este código le hemos agregado una simple descripcion a este proyecto antes de lanzarlo a nuestro navegador...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4lKgzuHCP_XFLbPgFfW3Acq5osfVcIhTevq4OT3LLPVQonnZ0aeW0DYETIT5gMVpLd3mlB3r7gCCPsz3zCm4ZmEfyVa8p1k9Y65W-cBfuARSCstlb9xa5nx3-_Rm0zJTEUeD75sKRrjlr/s1600/GAE-Java05.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4lKgzuHCP_XFLbPgFfW3Acq5osfVcIhTevq4OT3LLPVQonnZ0aeW0DYETIT5gMVpLd3mlB3r7gCCPsz3zCm4ZmEfyVa8p1k9Y65W-cBfuARSCstlb9xa5nx3-_Rm0zJTEUeD75sKRrjlr/s640/GAE-Java05.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;5. Agregando una descripción a nuestro&amp;nbsp;código&amp;nbsp;generado...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKoVH1LFQCcOfjmPKLuOerxqVH2rh-ies7IvcXchbPvNh8jeLLXNq08XUUDDUrZsidSA1GCop8mJb59N19r3EmE3HAZSHBhyphenhyphenAVtw51poWgbpuRMRzkUm19sPu8tiLXB-nsJCTNloZgXI10/s1600/GAE-Java06.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKoVH1LFQCcOfjmPKLuOerxqVH2rh-ies7IvcXchbPvNh8jeLLXNq08XUUDDUrZsidSA1GCop8mJb59N19r3EmE3HAZSHBhyphenhyphenAVtw51poWgbpuRMRzkUm19sPu8tiLXB-nsJCTNloZgXI10/s640/GAE-Java06.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;6. Ejecutandi nuestro proyecto...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicjk6CIZesev8kyqnFF769ZqTvNlDnwp58U_qW9G3WRLRJYMqDgRnTUfKs7aKiu7KkZhGBuGaKPZ2fkzmyNZ1JmFdjfqBVNifmtAREwRL_Z5hzgYlZZhl14i58pD9BbvVQI5AAL7CI6AyM/s1600/GAE-Java07.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicjk6CIZesev8kyqnFF769ZqTvNlDnwp58U_qW9G3WRLRJYMqDgRnTUfKs7aKiu7KkZhGBuGaKPZ2fkzmyNZ1JmFdjfqBVNifmtAREwRL_Z5hzgYlZZhl14i58pD9BbvVQI5AAL7CI6AyM/s640/GAE-Java07.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;7. Nuestro proyecto en nuestro navegador de preferencia..&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Hasta este punto lo que hemos conseguido es mostrar nuestro proyecto JavaWeb en nuestro servidor local Appengine de pruebas y todo parece funcionar correctamente.. vale entonces &quot;cargar&quot; ahora nuestro proyecto, pero continuando con las &quot;inconsistencias&quot; mencionadas, vale indicar que Netbeans mantiene algun problema para cargar directamente nuestro proyecto, y todo porque aún no le encuentro una opción para cargar a Netbeans un &lt;span class=&quot;notranslate&quot;&gt;&quot;Main Project&quot;&lt;/span&gt; &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; a su lista &quot;interna&quot; de proyectos.. pero eso lo hemos conseguido creando este proyecto &quot;vacío&quot;... ahora tenemos que &quot;borrarlo&quot;.. pero indicando que no se eliminen las &quot;fuentes&quot; del mismo (debe quedar desmarcada la opción al respecto).. asimismo, es importante que tambien &quot;detengamos nuestro servidor&quot;, por cuanto, al ejecutar nuestro proyecto &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-guestbook&lt;/span&gt;&quot; este se encuentra en funcionamiento (puede comprobarlo observando los procesos Java desplegados mediante &lt;span class=&quot;notranslate&quot;&gt;&quot;Java VisualVM&quot;&lt;/span&gt;), y esto lo podemos hacer mediante el mismo Netbeans o mediante &lt;span class=&quot;notranslate&quot;&gt;&quot;Java VisualVM&quot;&lt;/span&gt;.. si no efectuamos este paso, al querer eliminar nuestro proyecto no se permitirá &quot;borrar&quot; las carpetas en uso de nuestro proyecto y tendremos que eliminarlas manualmente.. luego de detener al servidor, pues en eso caso, al estar los archivos en uso tampoco podrá ser efectuado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjATsoLJCLp7Q7dqNxBNzLiPSyeVP6txrnniMo292ScJ1PBtEb03MAZjv5Mmv0kkBih2z79cSOoFd_7qwGX8eOF4YiVv6lox-3EGfI6XBqUmSYGHk_Ba_5fh54G6_h29Uk2lOVBODQn5iyV/s1600/GAE-Java08.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjATsoLJCLp7Q7dqNxBNzLiPSyeVP6txrnniMo292ScJ1PBtEb03MAZjv5Mmv0kkBih2z79cSOoFd_7qwGX8eOF4YiVv6lox-3EGfI6XBqUmSYGHk_Ba_5fh54G6_h29Uk2lOVBODQn5iyV/s640/GAE-Java08.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;8. observando nuestros procesos activos con &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Java VisualVM&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGoUnWpPQffwbOXhQu6xJfmWsURIkVJJ-RV36HGourHfubfUUp7wGqQuFOG9vULF_aqSPPGbAi0SZp3K7lAm85hP7gqjoN5vZ2A4yn-mIUMRotDNM3WGG0OB5wybW5XNCWdE-fgJpPJUcf/s1600/GAE-Java09.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGoUnWpPQffwbOXhQu6xJfmWsURIkVJJ-RV36HGourHfubfUUp7wGqQuFOG9vULF_aqSPPGbAi0SZp3K7lAm85hP7gqjoN5vZ2A4yn-mIUMRotDNM3WGG0OB5wybW5XNCWdE-fgJpPJUcf/s640/GAE-Java09.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;9. cerrando nuestros servidor eliminando los procesos Java con &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Java VisualVM&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiexqwYMQ3PL-k2E00DBTlBGyrcMahyphenhyphenVg9-MsEHqlT4kwoNwmfmNrUVso-Y5dfKv5vXeLHduALntCg-7CWJ97luzErYVieposRHkduzj3Fw221dzFPChFk-nTmQZghQuM3io8rb4o7rWB5i/s1600/GAE-Java10.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiexqwYMQ3PL-k2E00DBTlBGyrcMahyphenhyphenVg9-MsEHqlT4kwoNwmfmNrUVso-Y5dfKv5vXeLHduALntCg-7CWJ97luzErYVieposRHkduzj3Fw221dzFPChFk-nTmQZghQuM3io8rb4o7rWB5i/s640/GAE-Java10.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;10. cerrando nuestro servidor con el mismo Netbeans...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Cc0J8Qixhiu9flZwm_0df3p0mLXyLQFJsNgBO-dHSu1K8U6YTF9Zbs4Mxw_TUy-bPXWWX7vptlkmPxoRymOQDu7V0O0dvwBfFGcL5dsFkWXk4-GgyvBitIRqMa2CYnVFZH0uaAdtaoPv/s1600/GAE-Java11.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Cc0J8Qixhiu9flZwm_0df3p0mLXyLQFJsNgBO-dHSu1K8U6YTF9Zbs4Mxw_TUy-bPXWWX7vptlkmPxoRymOQDu7V0O0dvwBfFGcL5dsFkWXk4-GgyvBitIRqMa2CYnVFZH0uaAdtaoPv/s640/GAE-Java11.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;11. Borrando nuestro proyecto &quot;vacio&quot;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Si todo lo&amp;nbsp;hubiésemos&amp;nbsp;efectuado correctamente, en la carpeta &quot;&lt;span class=&quot;notranslate&quot;&gt;gae-guestbook&lt;/span&gt;&quot; donde se ha creado nuestro proyecto solo se debería observar a las carpetas WEB y SRC (que son los requiere nuestro proyecto para ser desplegado en Netbeans).. e incluso podemos probar ahora cargar esta carpeta como un proyecto JavaWeb con &quot;fuentes existentes&quot; en nuestro servidor Appengine, y podrán observar que éste ahora si podrá ser creado sin mayores contratiempos..y que se creará con el nombre de nuestra carpeta como cuando creamos nuestros proyectos JavaWeb...&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNRgMJ977Xz7KuNQxJMWyTL6RAd2nTg1M3qR3fjj0tcd0TI4VDB-0f8c17_j-ocpK9nV3QNDOO5iNPQbU3ZJiWYSt1X9-znttAzn9D1lTa8q79RlgVjGYFTXKk5jHji75tztTTk31PXo19/s1600/GAE-Java12.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNRgMJ977Xz7KuNQxJMWyTL6RAd2nTg1M3qR3fjj0tcd0TI4VDB-0f8c17_j-ocpK9nV3QNDOO5iNPQbU3ZJiWYSt1X9-znttAzn9D1lTa8q79RlgVjGYFTXKk5jHji75tztTTk31PXo19/s640/GAE-Java12.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;12. Carpetas basicas de un proyecto &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; en Netbeans..&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
El caso es que para nuestros propósitos conviene que nuestros proyectos muchas veces reconozcan el formato ANT (y con el archivo build.xml incluído), y para observar como hacer éste proceso podemos entonces &quot;descargar&quot; nuestras fuentes a la carpeta de este proyecto vacío, sobreescribiendo las carpetas y archivos que existan (por supuesto, previamente nuestro proyecto ha sido borrado de nuestro Netbeans)&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDAFgVClIn6LMx-YDuHhXC7yLhihTcbIZB_Bplp9fw5RJNVl8nH-c7Nopw0ZBSajDCIJcP2PzgUeNLDt5_ndxN8iaro2AYR1rfkX04F8gJWWbk7Wm6ZD-KjMrBa8CkcTyE7dVr2d4iKEJA/s1600/GAE-Java13.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDAFgVClIn6LMx-YDuHhXC7yLhihTcbIZB_Bplp9fw5RJNVl8nH-c7Nopw0ZBSajDCIJcP2PzgUeNLDt5_ndxN8iaro2AYR1rfkX04F8gJWWbk7Wm6ZD-KjMrBa8CkcTyE7dVr2d4iKEJA/s640/GAE-Java13.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
Efectuada esta operación conviene que revisemos nuestro archivo build.xml descargado y indiquemos correctamente la ruta de descarga de nuestro SDK de Java.. y listo! ya estamos listo para cargar nuestro proyecto en Netbeans:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc00Ho-nU2ism2IQvEN-OWecxeMsRypV4lo5_lAxviVMmwdfZL69dkcpa3Ees8Q8PzrlOrEy27fe9lErmG9R0LtEaNTFclYcBcCBFa7FQXSlunHqb8lMQskJdjoB7ybEhTMw4L07MNXmq3/s1600/BuildXML.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc00Ho-nU2ism2IQvEN-OWecxeMsRypV4lo5_lAxviVMmwdfZL69dkcpa3Ees8Q8PzrlOrEy27fe9lErmG9R0LtEaNTFclYcBcCBFa7FQXSlunHqb8lMQskJdjoB7ybEhTMw4L07MNXmq3/s640/BuildXML.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;14. Verificando la ruta de nuestro SDK de Java en build.xml&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnzuxMyAXTbelm5paleae8cw9043Bu6RcRY4UUO0Uc6d-2Spgmgl_ig5mtQe0XXKMrZub3iRKkNCy1Mmuv9EKGEfwL_WCVDh-SAYjylcPm8Rv9cFEXCNVgTyduyp1QsQ8r1KvBmWmjyBd1/s1600/GAE-Java14.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnzuxMyAXTbelm5paleae8cw9043Bu6RcRY4UUO0Uc6d-2Spgmgl_ig5mtQe0XXKMrZub3iRKkNCy1Mmuv9EKGEfwL_WCVDh-SAYjylcPm8Rv9cFEXCNVgTyduyp1QsQ8r1KvBmWmjyBd1/s640/GAE-Java14.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;15. Cargando nuestro proyecto &lt;span class=&quot;notranslate&quot;&gt;gae-guestbook&lt;/span&gt;...&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Nuestro Netbeans detectará que existe un archivo build.xml al cargar nuestro proyecto así que seleccionemos Ok cuando se nos pregunte al respecto...&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1adoGwwcY56uyW4XxI_NTQc4S018kSe-UUq_QrRhgrV3dfV8NjYi1HbWPGQwV6G_tQ6CE4BA6iGrGNhGvU0ZxbmaufC2nV319o7O9GDqDdgqrc3KP28xn8uNWQUuR2NgGQ7IrM9fKAash/s1600/GAE-Java16.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1adoGwwcY56uyW4XxI_NTQc4S018kSe-UUq_QrRhgrV3dfV8NjYi1HbWPGQwV6G_tQ6CE4BA6iGrGNhGvU0ZxbmaufC2nV319o7O9GDqDdgqrc3KP28xn8uNWQUuR2NgGQ7IrM9fKAash/s640/GAE-Java16.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Como podemos observar, Netbeans carga todo nuestro proyecto sin mayores cambios puesto que la carpeta WAR propios de los proyectos JavaWeb la hemos nombrado WEB (que reconoce automáticamente Netbeans), y asimismo, en nuestro build.xml se han efectuado las modificaciones necesarias para que trabajemos con esta carpeta... así que corremos nuestro proyecto y listo! ya podemos cargar proyectos &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt; como proyectos JavaWeb de Netbeans, y revisarlos, modificarlos, ejecutarlos y cargarlos a la plataforma Cloud de &lt;span class=&quot;notranslate&quot;&gt;GAE&lt;/span&gt; directamente desde Netbeans.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0nVe_8V8cHXF3nwQj-pYOwiwB7oeenNVhiCmZLMpkithmwfODrO3HC1qRe6euIWvFiBA-hfWDLuIfBeCkACHdRynLObkDz5vN8FDk6OQVTRxHx5r8703OxWu6zdUfC0vxN1Lf1NsrIn3P/s1600/GAE-Java17.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0nVe_8V8cHXF3nwQj-pYOwiwB7oeenNVhiCmZLMpkithmwfODrO3HC1qRe6euIWvFiBA-hfWDLuIfBeCkACHdRynLObkDz5vN8FDk6OQVTRxHx5r8703OxWu6zdUfC0vxN1Lf1NsrIn3P/s640/GAE-Java17.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5KCY4kq4YQXliMysEew5ZFF7hqgHKWWyjmZwP5Vs-AHICDKF7b9sR-wacGR_Oi_6L4rEqWAbka5rIGEu4NJdC6YBPY87IkDHVLpdvtTw3OFHPlWrARLr3LCBlAWaBhtwjncyWSVXYTwKW/s1600/00.+gae-guestbook.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5KCY4kq4YQXliMysEew5ZFF7hqgHKWWyjmZwP5Vs-AHICDKF7b9sR-wacGR_Oi_6L4rEqWAbka5rIGEu4NJdC6YBPY87IkDHVLpdvtTw3OFHPlWrARLr3LCBlAWaBhtwjncyWSVXYTwKW/s640/00.+gae-guestbook.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJhyCrobGuPKHLBSS2omek544_git6Lgf1UcNtEG6yXpges0ZfjM9HC1thCjCKo5JAoZ-T8LNevx9vN4UC07T28rdKFjQOXhbyA-8fPeemnJTK-zmAzxKwUle-nEQNWKtE5AbOBVuBQaK7/s1600/00xgae-guestbook.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJhyCrobGuPKHLBSS2omek544_git6Lgf1UcNtEG6yXpges0ZfjM9HC1thCjCKo5JAoZ-T8LNevx9vN4UC07T28rdKFjQOXhbyA-8fPeemnJTK-zmAzxKwUle-nEQNWKtE5AbOBVuBQaK7/s640/00xgae-guestbook.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsIahVxC1fJ0vyTKrA2vM-beZbR00ePdzh4oxyulFYIUbdlCDLHwyuxZWm0rItifH8VGAFlsIKHUK1FXOHVAXAXa16R6yS8VFm5ZLHj69NIlPP78CiZ-rcbN26xr8D7w3aLfmYVwaQ40WH/s1600/00ygae-guestbook.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsIahVxC1fJ0vyTKrA2vM-beZbR00ePdzh4oxyulFYIUbdlCDLHwyuxZWm0rItifH8VGAFlsIKHUK1FXOHVAXAXa16R6yS8VFm5ZLHj69NIlPP78CiZ-rcbN26xr8D7w3aLfmYVwaQ40WH/s640/00ygae-guestbook.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
Al probar nuestro proyecto &lt;span class=&quot;notranslate&quot;&gt;&quot;gae-guestbook&quot;&lt;/span&gt; podrán observar que al &quot;firmar el libro de Visitas&quot;, y para las 10 primeras entradas, se nos lanzará a una página similar a la del ejemplo &lt;span class=&quot;notranslate&quot;&gt;&quot;guestbook&quot;&lt;/span&gt; instalado inicialmente al preparar nuestro Netbeans... Asimismo, que con la opción &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;LIKE Search&quot;&lt;/b&gt;&lt;/span&gt; hemos implementado una busqueda &lt;b&gt;&quot;%like%&quot;&lt;/b&gt; sobre el datastore de &lt;span class=&quot;notranslate&quot;&gt;GAE&lt;/span&gt;. Cabe destacar que &lt;span class=&quot;notranslate&quot;&gt;&quot;big table datastore&quot;&lt;/span&gt; de AppEngine es una potente base de datos &quot;escalable&quot; y de alta disponibilidad (sin límites y siempre disponible aún cuando se &quot;caigan&quot; alguno de los servidores que la soportan.. y que por diseño soporta &quot;persistencia&quot; de datos, lo que nos permite incluso miles de conexiones simultaneas sin desmejorar el rendimiento del sistema; pero el costo de estas bondades, es que algunas operaciones de la base de datos están limitadas o restringidas (como es el caso de las consultas &quot;%Like%&quot; indicada, entre otras), por lo que nos conviene revisar con detalle lo siguiente :&lt;br /&gt;
&lt;h2 id=&quot;Unsupported_Features_of_JDO&quot; style=&quot;background-color: white; border-top-color: rgb(51, 102, 204); border-top-style: solid; border-top-width: 1px; font-family: Helvetica, Arial, sans-serif; font-size: 17px; margin-bottom: 0px; margin-left: -10px; margin-right: 0px; margin-top: 2em; padding-bottom: 1px; padding-left: 3px; padding-right: 3px; padding-top: 1px; position: relative; text-align: -webkit-auto;&quot;&gt;
Unsupported Features of JDO&lt;/h2&gt;
&lt;div style=&quot;background-color: white; font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em; text-align: -webkit-auto;&quot;&gt;
The following features of the JDO interface are not supported by the App Engine implementation:&lt;/div&gt;
&lt;ul class=&quot;doublespace&quot; style=&quot;background-color: white; font-family: Helvetica, Arial, sans-serif; font-size: small; line-height: 16px; margin-bottom: 0px; margin-left: 15px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: -webkit-auto;&quot;&gt;
&lt;li style=&quot;margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;Unowned relationships. You can implement unowned relationships using explicit Key values. JDO&#39;s syntax for unowned relationships may be supported in a future release.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;Owned many-to-many relationships.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&quot;Join&quot; queries. You cannot use a field of a child entity in a filter when performing a query on the parent kind. Note that you can test the parent&#39;s relationship field directly in query using a key.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;JDOQL grouping and other aggregate queries.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;Polymorphic queries. You cannot perform a query of a class to get instances of a subclass. Each class is represented by a separate entity kind in the datastore.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;code style=&quot;color: #007000; font-size: 10pt;&quot;&gt;IdentityType.DATASTORE&lt;/code&gt;&amp;nbsp;for the&amp;nbsp;&lt;code style=&quot;color: #007000; font-size: 10pt;&quot;&gt;@PersistenceCapable&lt;/code&gt;&amp;nbsp;annotation. Only&amp;nbsp;&lt;code style=&quot;color: #007000; font-size: 10pt;&quot;&gt;IdentityType.APPLICATION&lt;/code&gt;&amp;nbsp;is supported.&lt;/li&gt;
&lt;li style=&quot;margin-bottom: 0px; margin-left: 1.5em; margin-right: 0px; margin-top: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;There is currently a bug preventing owned one-to-many relationships where the parent and the child are the same class, making it difficult to model tree structures. This will be fixed in a future release. You can work around this by storing explicit Key values for either the parent or children.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
Por supuesto, para la conexión al &lt;span class=&quot;notranslate&quot;&gt;GAE Datastore&lt;/span&gt; hemos utilizado &quot;JDO&quot;, y conviene también tener presente la documentación al respecto:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/en/appengine/docs/java/datastore/jdo/overview.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/en/appengine/docs/java/datastore/jdo/overview.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue; font-size: x-large;&quot;&gt;&lt;b&gt;Instalando nuestros codelabs:&lt;br&gt;&quot;Int-Google01&quot; e &quot;Int-Google02&quot; como proyectos GAE-JavaWeb en Netbeans IDE&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
Nuestros proyectos &lt;span class=&quot;notranslate&quot;&gt;Integración Google &lt;/span&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; style=&quot;color: #448888; font-family: Verdana, Arial, sans-serif; line-height: 16px;&quot; target=&quot;_blank&quot;&gt;1ra&lt;/a&gt; y&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; style=&quot;color: #448888; font-family: Verdana, Arial, sans-serif; line-height: 16px;&quot; target=&quot;_blank&quot;&gt;2da.&lt;/a&gt;&amp;nbsp;parte son desarrollados exclusivamente con HTML y Javascript (considérese que el &lt;span class=&quot;notranslate&quot;&gt;framework &lt;/span&gt;ExtJs utilizado en esos proyectos es Javascript), pueden entonces cargarse estos ejercicios como proyectos JavaWeb de Netbeans, como hicimos en nuestro codelab referido al &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/09/using-back-end-javamysql-el-proyecto.html&quot; target=&quot;_blank&quot;&gt;Back-End Java(JSP)+MySQL&lt;/a&gt;, ó como lo hicimos &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-la-plataforma-opensource-de.html&quot; target=&quot;_blank&quot;&gt;sobre WebMatrix&lt;/a&gt;, correspondiente al uso de servidores IIS de Microsoft; y por supuesto, tambien pueden cargarse como proyectos &lt;b&gt;&quot;Appengine JavaWeb&quot;&lt;/b&gt; en nuestro Netbeans (y poder luego colgarlos en la&amp;nbsp;infraestructura cloud de Google), pero para ello, debemos configurar su presentación para que trabajen como proyectos &lt;span class=&quot;notranslate&quot;&gt;GAE-Java&lt;/span&gt;, y los cambios realmente son mínimos, como ya hemos indicado, debemos adecuar la ruta de descarga de nuestro SDK en &quot;build.xml&quot;, y además, verificar el contenido de los archivos &quot;web.xml&quot; y &quot;appengine-web.xml&quot; de la carpeta &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;web/WEB-INF&lt;/b&gt;&lt;/span&gt;, que es donde se alojan los archivos de configuración de nuestros proyectos GAE-Java. En el caso de &quot;web.xml&quot;, tal como en cualquier proyecto JavaWeb, se ha indicado que el archivo de partida de nuestro proyecto es &quot;index.html&quot;; y en &quot;appengine-web.xml&quot;, indicamos el nombre de nuestra aplicación... y eso es todo, el código utilizado respecto a nuestros proyectos iniciales que corrimos sobre una plataforma LAMP ó WAMP no varían en nada...&lt;/p&gt;&lt;br&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br/&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #448888; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;gae-IntGoogle01.rar (1.7Mb),&lt;/b&gt;&amp;nbsp;que nos muestra Visualizaciones Google sobre ExtJs (la versión Ext-3.4.0 en este caso), correspondiente a dicho codelab, ahora adecuados a un formato &quot;Java Web&quot; para poder cargarlos como un proyecto de Netbeans. Puede revisar nuestra entrada&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; style=&quot;color: #448888;&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;Integracion Google 1ra parte&lt;/a&gt;&amp;nbsp;para mayores detalles de sus componentes y forma de desarrollo. Asimismo recuerde qu, por el momento, primero debemos crear un proyecto Appengine JavaWeb&quot;vacio&quot; con nuestro Netbeans, sobre la carpeta appengine que descargamos el SDK de Java, y luego de verificar su funcionamiento, para el servidor Appengine, borrarlo con Netbeans, escargar en la carpeta creada nuestro material de apoyo, y finalmente, crear nuestro proyecto JavaWeb con &quot;fuentes existentes&quot; indicando por supuesto que vamos a utilizar como servidor a &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt;... y eso es todo.&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiClfX9IU7fsSU1VhTj_2xz6tRFRHlBlKxSO8nl54js0zzRLMdufQLO_RGPR7IX3bP5rIyOw8RZOfY3Ieo1tmWmEjMUjlk3fL8RQOyK0zNStzR3vx67ih2aB6FRU90HcCNqimVf8po-P4Uf/s1600/01+gae-intGoogle01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiClfX9IU7fsSU1VhTj_2xz6tRFRHlBlKxSO8nl54js0zzRLMdufQLO_RGPR7IX3bP5rIyOw8RZOfY3Ieo1tmWmEjMUjlk3fL8RQOyK0zNStzR3vx67ih2aB6FRU90HcCNqimVf8po-P4Uf/s640/01+gae-intGoogle01.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;a href=&quot;javascript:void(my_link03());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #448888; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;
&lt;b&gt;gae-IntGoogle02.rar (2.3Mb),&lt;/b&gt;&amp;nbsp;que nos muestra Visualizaciones Google y ExtJs de nuestro documento &lt;span class=&quot;notranslate&quot;&gt;&quot;Spreadsheet&quot;&lt;/span&gt; de &lt;span class=&quot;notranslate&quot;&gt;Google Docs&lt;/span&gt;, Puede revisar nuestro codelab&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; style=&quot;color: #448888;&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;Integracion Google&lt;/span&gt; 2da. parte&lt;/a&gt;para mayores detalles de sus componentes y forma de desarrollo. Se adjunta la copia de hoa de calculo en formato &quot;xls&quot; para que podamos nuestras propias sobre un documento propio que podríamos cargar en nuestro &lt;span class=&quot;notranslate&quot;&gt;Google Docs&lt;/span&gt;, para ello, pueden revisar nuestro mencioando codelab &lt;span class=&quot;notranslate&quot;&gt;Integracion Google&lt;/span&gt; 2da parte para mayores detalles de los componentes y la forma de desarrollo del proyecto.&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9fDXg7ZQCKEBHIsreHc-V3UU1a-KUK6NTBgpgsNC4HLM7CPRu9RFC7pywUdBttGlsrBCO1FzFfgCucikpv95K9PxnCMIy7TMH9VqeqnZeKWLrlKcBE2sDcSNHMj1eBqAtOPYRWpJQVBtb/s1600/02.+gae-intGoogle02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9fDXg7ZQCKEBHIsreHc-V3UU1a-KUK6NTBgpgsNC4HLM7CPRu9RFC7pywUdBttGlsrBCO1FzFfgCucikpv95K9PxnCMIy7TMH9VqeqnZeKWLrlKcBE2sDcSNHMj1eBqAtOPYRWpJQVBtb/s640/02.+gae-intGoogle02.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
Para cargar estos proyectos a Netbeans como proyectos &quot;Appengine JavaWeb&quot;, como ya hemos indicado, debemos crear primero sendos proyectos &quot;vacios&quot; que podemos llamar &quot;gae-intGoogle02&quot; y &quot;gae-intGoogle02&quot; respectivamente; y luego, de manera similar a como &quot;cargamos&quot; nuestro proyecto &quot;gae-guestbook&quot;, eliminar estos proyectos y descargar en las carpetas correspondientes nuestro material de apoyo. Luego procedemos a crearlos nuevamente pero como proyectos JavaWeb con &quot;fuentes existentes&quot;, que utilizarán el servidor &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt;, y listo.. podremos ejecutar niestros proyectos &lt;span class=&quot;notranslate&quot;&gt;Integración Google&lt;/span&gt; 1ra y 2da parte en la infraestructura local de pruebas de &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt; para Java, y posteriormente cargarlos a la plataforma Cloud de Google..aunque respecto a este último proceso, vale reiterar que Google solo nos otorga un servicio libre limitado a 10 proyectos, y de hasta 500Mb de espacio de uso del datastore, entre otras limitaciones que tambien debemos tener en cuenta, y que podemos consultar en la &lt;a href=&quot;http://code.google.com/intl/en/appengine/&quot; target=&quot;_blank&quot;&gt;documentación &lt;/a&gt;respectiva.&lt;/p&gt;




&lt;p&gt;
&lt;h1&gt;&lt;span style=&quot;color:red;&quot;&gt;&lt;b&gt;NOTA IMPORTANTE : &lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;/p&gt;
&lt;p&gt;Resulta que el sistema de autorización &quot;AuthSub for JavaScript&quot; de Google ya no se encuentra disponible (pueden revisar el siguiente &lt;a href=&quot;https://developers.google.com/gdata/docs/js-authsub&quot; taregt=&quot;_blank&quot;&gt;enlace&lt;/a&gt;), por lo que nuestro botón &quot;Login&quot; de nuestro codelab no permite el acceso a nuestro ejercicio; asimismo, la documentación de Google nos recomienda que utilicemos ahora &quot;OAuth 2.0 for client-side applications&quot;, vale decir, tendremos que utilizar&amp;nbsp;&lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;Google API Javascript Client&lt;/a&gt;&amp;nbsp;para poder acceder a nuestras aplicaciones (u otra API cliente según la plataforma back-end que utilicemos, tal como PHP, Java, .NET, entre otros), pero en nuestro caso, como solo estamos trabajando aplicaciones por el lado del cliente, tendremos que recurrir a la librería cliente para Javascript indicada.
&lt;/p&gt;
&lt;p&gt;Por lo que, mientras adecuamos nuestro código, resulta conveniente que NO CONSIDEREN el proceso de acceso a la aplicación de la siguiente manera:
&lt;blockquote&gt;&lt;span class=&quot;notranslate&quot;&gt;
 function activando(auth) {&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;var c = Ext.getCmp(&#39;center&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:red;&quot;&gt;//google.accounts.user.login(&#39;http://www.google.com/m8/feeds/&#39;);&lt;/span&gt;&lt;br/&gt; 
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:blue;&quot;&gt;auth = true;&lt;/span&gt;&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.update(&#39;&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;if (auth) { &lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vistree.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;};&lt;br/&gt;
 };&lt;br/&gt;
&lt;br/&gt;
within from : MenuGVisualization_01.js / MenuGVisualization_02.js where appropiate!&lt;br/&gt;
&lt;/span&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;div id=&quot;oauth20&quot;&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;h1&gt;&lt;span style=&quot;color:darkBlue;&quot;&gt;&lt;b&gt;TRABAJANDO CON OAUTH 2.0 : &lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;
&lt;p&gt;por supuesto, a la brevedad actualizaremos todos nuestros códigos para que trabajen con el protocolo &lt;b&gt;OAuth20&lt;/b&gt;, y les presentamos en esta oportunidad el código y su demo de nuestro codelab que hemos cargado a la plataforma GAE (Google App Engine), pero que usted también puede probar en su servidor local de pruebas utilizando el SDK para Java de Google App Engine..
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle01-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle01-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)
&lt;/p&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link05();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle01-OAuth20.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 3.05Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro codelab pero adecuado al protocolo OAuth version 2.0, utilizando la &lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;&quot;Google API Javascript Client&quot;&lt;/a&gt;, la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle02-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle02-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)
&lt;/p&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link06();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle02-OAuth20.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 3.20Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro codelab pero adecuado al protocolo OAuth version 2.0, utilizando la &lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;&quot;Google API Javascript Client&quot;&lt;/a&gt;, la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.
&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;
&lt;/span&gt;Es importante indicar que la documentación de Google nos indica que ahora debemos trabajar con OAuth 2.0 que se esta convirtiendo en el estándar de autenticación y autorización para acceder a nuestras cuentas y poder utilizar todas las API de Google, por ello hemos adecuado nuestro codelab a dicho estándar debiéndose tener en cuenta lo siguiente:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Crear un nuevo proyecto en el &lt;a href=&quot;https://code.google.com/apis/console/&quot; target=&quot;_blank&quot;&gt;Google API Console&lt;/a&gt;, con el nombre mas adecuado que queramos &lt;/li&gt;
&lt;li&gt;Crear una &quot;OAuth 2.0 Client ID&quot; en la opción &lt;b&gt;API Access&lt;/b&gt; de la consola.. allí podremos indicar el nombre de nuestra aplicación y la URL de un logo que la represente ..a continuación debemos indicar el tipo de nuestra aplicación (&quot;web application&quot; en nuestro caso), y la URL de nuestra aplicación (acepta http://localhost ó http://localhost:8080 para trabajar con nuestro servidor local de pruebas, debiendo verificar que se elija correctamente el protocolo &lt;b&gt;&quot;http ó https&quot;&lt;/b&gt; y la ruta completa de acceso a nuestra aplicación para que todo funcione correctamente); por lo que al crear nuestra &lt;b&gt;API Access&lt;/b&gt; se nos indicará la carpeta &quot;Redirect URI&quot; donde se realizará el proceso de autenticación y autorización OAuth 2.0 solicitado (si no ha sido creada debemos editar la configuración y registrar manualmente la carpeta donde se realizará el proceso, puede ser cualquiera dentro de &quot;www&quot; o crear la carpeta &quot;oauth2callback&quot; indicada)..   &lt;/li&gt;
&lt;li&gt;..y finalmente, en la misma &quot;Google API Console&quot; debemos seleccionar a la opción &quot;Services&quot; y activar la &lt;span class=&quot;notranslate&quot;&gt;&quot;Google+ API&quot;&lt;/span&gt; (debe estar &quot;ON&quot; y de color verde), lográndose con ello finalmente crear nuestra &quot;API key&quot; en forma automática.&lt;/li&gt;
&lt;li&gt;y todo ya está listo! ..ahora al volver a la opción &quot;API Access&quot; de nuestra aplicación, ya tendremos disponible nuestro &quot;Client ID&quot; y la &quot;API Key&quot; (dentro de &quot;Simple Access API&quot;), estos datos son las que debemos utilizar y reemplazar en el archivo &quot;index.html&quot; de nuestra aplicación para que todo pueda funcionar correctamente.&lt;p&gt;Conviene también revisar las diferentes opciones que nos presenta la &quot;Google API Console&quot; pues nos puede ser necesarias como crear, modificar, renombrar, eliminar proyectos principalmente.&lt;/p&gt;
&lt;/li&gt;
&lt;p&gt;
&lt;li&gt;&lt;b&gt;..y ahora a probar nuestra aplicación IntGoogle01-Oauth20 y IntGoogle01-Oauth20 como proyectos GAE-JavaWeb !&lt;/b&gt;&lt;/li&gt;
&lt;/p&gt;
&lt;li&gt;y una ultima indicación.. Como estamos trabajando con la Google Maps API v2, tenemos que activar el servicio &quot;Google Maps API v2&quot; en la API consola, y registrar nuestra &lt;b&gt;API Key&lt;/b&gt; al importar la API en nuestro proyecto antes de subirlo a un servicio de hosting con un dominio personalizado y así puedan funcionar los mapas de nuestro proyecto sin mayores inconvenientes (aunque la Google Maps API v2 solo estará activa hasta Marzo 2013, por lo que debemos programar nuestras actualizacion a la API v.3)..por supuesto, al trabajar con nuestro servidor local &lt;b&gt;&quot;localhost&quot;&lt;/b&gt; no se presentan problemas.. el asunto es, como indicamos, al cargar nuestros proyectos a un servicio de hosting externo cualquiera.. como es el caso de la plataforma GAE (Google App Engine), que es donde esta corriendo nuestra demo)
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt9CCbbmHovkXVU333kquj3_txRXMEVz6UsSlIMjjr5KUXPHydoChOTwoDMlOITrkK428TDwo8ljyrv7nuZh6iQrfJfyAnoCIyIZx9_mCNywGYsB2pUsHvStWGHhzTKl277MtAC89B0hm3/s1600/Oauth20-0A.jpg&quot; imageanchor=&quot;1&quot; style=&quot; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt9CCbbmHovkXVU333kquj3_txRXMEVz6UsSlIMjjr5KUXPHydoChOTwoDMlOITrkK428TDwo8ljyrv7nuZh6iQrfJfyAnoCIyIZx9_mCNywGYsB2pUsHvStWGHhzTKl277MtAC89B0hm3/s400/Oauth20-0A.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4_ttlzmsW5TC_6OyHw9qv_gat1l3_9wGwidrygs5BjcDfCnuJlBkDUnrFrwbVdJIzZ0RLNJBluMplL9g9oGHo7wTPT1SOE1_foCqfey4jxZDJY9ynIkhDeKn1SaaTLd_65yzV3Ot2f8b/s1600/Oauth20-01.jpg&quot; imageanchor=&quot;1&quot; style=&quot; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4_ttlzmsW5TC_6OyHw9qv_gat1l3_9wGwidrygs5BjcDfCnuJlBkDUnrFrwbVdJIzZ0RLNJBluMplL9g9oGHo7wTPT1SOE1_foCqfey4jxZDJY9ynIkhDeKn1SaaTLd_65yzV3Ot2f8b/s400/Oauth20-01.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br/&gt;






&lt;p&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;NOTAS DE TRABAJO :&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;1.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;No debemos olvidar que para &quot;abrir&quot; un proyecto debemos previamente cerrar el que tengamos abierto, e indicar que el proyecto que vamos a desplegar sea seleccionado como nuestro &lt;span class=&quot;notranslate&quot;&gt;&quot;Main project&quot;&lt;/span&gt;. Si no lo hacemos, al correr un proyecto se compilará nuestro proyecto, pero se lanzará a nuestro navegador el proyecto que este marcado como &lt;span class=&quot;notranslate&quot;&gt;&quot;Main project&quot;&lt;/span&gt;, lo que podría confundirnos.&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;2.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;En caso que no hayamos cerrado nuestro servidor Appengine en algún&amp;nbsp;proyecto, y ya no lo podamos cerrar con Netbeans, entonces podemos utilizar la herramienta &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Java VisualVM&lt;/b&gt;&lt;/span&gt;, y el &lt;span class=&quot;notranslate&quot;&gt;plug-in&lt;/span&gt; &quot;killApplication&quot; que debemos haber instalado en ella, y cerrar los procesos Java que correspondan (solo basta cerrar uno de los procesos pues se eliminan en bloque para una aplicación desplegada)&lt;/p&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;3.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Podemos configurar nuestros proyectos para utilizar diferentes puertos de &quot;salida&quot; y &quot;debug&quot;, y tener abiertos en forma simultanea al hacer nuestras pruebas. La configuración se realiza en el archivo &quot;build.xml&quot;&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;4.-&lt;/span&gt;&lt;/b&gt;&amp;nbsp;Para correr nuestro proyecto utilizando ANT, en su pantalla de comando debe dirigirse a la carpeta que contiene nuestro proyecto (que debe contener a la carpeta build.xml por supuesto), y alli ejecutar el comando : &lt;span class=&quot;notranslate&quot;&gt;ant runserver (enter)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;5.-&lt;/span&gt;&lt;/b&gt;&amp;nbsp;Para correr nuestro proyecto utilizando los comandos del SDK de Java, conviene que agreguemos a la ruta de descarga de nuestro SDK (y a la carpeta &quot;bin&quot; en particular&quot; como una variable de entorno PATH (opciones avanzadas de propiedades de myPC en Windows), y en la misma posición donde ejecutamos el comando anterior debemos ejecutar el comando : &lt;span class=&quot;notranslate&quot;&gt;dev_appserver.cmd web (enter)&lt;/span&gt;. Caso contrario, debemos indicar en nuestro comando toda la ruta de nuestro SDK: &lt;span class=&quot;notranslate&quot;&gt;(%pathSDK%)/bin/dev_appserver.cmd web(enter)&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;6.-&lt;/span&gt;&lt;/b&gt;&amp;nbsp;Podemos observar asimismo, la diferencia de &quot;pesos&quot; de nuestros codelabs gae-intGoogle01 (1.7Mb) y gae-intGoogle02 (2.3Mb); a pesar que en realidad son parecidos y el código Javascript que utilizan son casi del mismo peso ...ocurre que en el primero caso utilizamos ExtJs4-MVC &quot;comprimido&quot; con el SDK de Sencha, y en el otro empleamos ExtJs-3.4 &amp;nbsp;Al correr estos ejercicios podrá comprobar que nuestros desarrollos bajo ExtJs4 son mucho mas&amp;nbsp;rápidos&amp;nbsp;para cargar y ejecutarse, en comparación que los desarrollados con ExtJs-3.x., y esto a nuestro criterio es una de las principales mejoras de ExtJs4, que incluso es aún más eficientes en su versión ExtJs-4.1, de próxima liberación en su formato GPL. Puede ver con más detalle nuestro codelab &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;Integracion Google 1ra parte&lt;/span&gt;&lt;/a&gt; donde explicamos con más detalle la construcción del código ExtJs4 de este ejercicio.&lt;/p&gt;
&lt;br /&gt;
Saludos&lt;br /&gt;
@Mlaynes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;



&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/12/working-with-gae-java-on-netbeans-ide.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/67534050031625794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/67534050031625794'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/12/working-with-gae-java-on-netbeans-ide.html' title='Working GAE-Java projects on Netbeans IDE'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF9QS1UUOzF-dRLZnPBqjlqrQpJJMp57OllR54wsZqZHhX5qjr-JiAXDNegNJFYJ-EjuVuOhujbH3OY8AJsBOebABtXA0hloJGQDyqqztn5lbOlFKDDsZbpgtP82CXFuhWljRRjJ9SHQk9/s72-c/appengine.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-4193329715544948778</id><published>2011-11-23T03:00:00.000-05:00</published><updated>2013-03-30T23:34:56.709-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Using PHP like a JavaWeb Project on Tomcat server</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login wait a few seconds and try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    //myQuercus.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENjQ3MGVjNzQtYjM0OS00NTE1LWI1OTAtMGZmZjRjNWVjYjMy&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //PHP-with-Java.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZGJmMjY1M2ItYzkzMy00YmZhLTgyNzEtMTA3OTlhY2I2MDYz&quot;;
    my_link(w_link);
  };
  function my_link03() {
  //Grid-PHP-MySQL.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEMDYzMDEzNjYtMGUzYi00ODY1LWIwZGUtNjFmODRiMzQyMGVi&quot;;
    my_link(w_link);
  };
  function my_link04() {
  //Wizard-sample.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENDViNDA2NjUtZmJjYi00MjJhLWFmMTEtNDBhNDdkOTM1N2Qy&quot;;
    my_link(w_link);
  };
  function my_link05() {
  //Int-Google03.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENWE0MDUxYzktN2MxNC00NjAzLWEwNjQtZTY4NDdlZWE0ODFl&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://www.caucho.com/&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfBSznqaO0ZcMxKYYi5NGvoFaerOP2mZE6LfK8DylyNLTmMUsw_8vCicAsOwFB0wkDlOqF-Rv9_lQ7LkJ9hMq3gA94YU5mrvnfgAxX35Jy-j_8PjACXMQkBZmOYS6QCeNnPlvxJe9sbQq-/s1600/ResinaQuercus.JPG&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
Continuando con nuestras investigaciones y pruebas de tecnologías Web vigentes, nos encontramos con la librería&amp;nbsp;&lt;a href=&quot;http://quercus.caucho.com/&quot; target=&quot;_blank&quot;&gt;Quercus&lt;/a&gt;, que es una implementación Java de PHP (de PHP &amp;nbsp;versión 5.3.2 para Quercus 4.0.18 vigente a fecha 30.09.2011), aunque aunque debemos tener presente que la &lt;a href=&quot;http://www.caucho.com/&quot; target=&quot;_blank&quot;&gt;Tecnología Caucho&lt;/a&gt;&amp;nbsp;promotora de la librería, y del &lt;b&gt;servidor Resina,&lt;/b&gt; se muestra bastante vigente y activa, principalmente a causa que éste servidor puede ser &amp;nbsp;utilizado para soportar PHP en desarrollos Java y de Google Appengine, como una librería en el primer caso y como una aplicación en el caso del&amp;nbsp;&lt;u&gt;SDK de Google Appengine para Java&lt;/u&gt; (resaltando que Quercus es uno de los componentes principales del servidor Resina, que es un servidor de aplicaciones JSP y servlets similar a Tomcat ó Glassfish, y que puede colaborar de manera transparente con el servidor Jetty empleado por GAE).&lt;br /&gt;
&lt;br /&gt;
Lla infraestructura cloud de Google Appengine soporta actualmente Python y Java; lenguajes que nos permiten entre otras cosas, conectarnos y trabajar con&amp;nbsp;el &lt;b&gt;datastore de Appengine&lt;/b&gt;, que es una base de datos escalable y de alta confiabilidad desarrollada Google (definido con el concepto&amp;nbsp;&quot;big table&quot;&amp;nbsp;); asimismo, a partir de&amp;nbsp;Octubre del 2011, Appengine también&amp;nbsp;soporta lo que se ha denominado&amp;nbsp;&lt;a href=&quot;http://googleappengine.blogspot.com/2011/10/google-cloud-sql-your-database-in-cloud.html&quot; target=&quot;_blank&quot;&gt;Google Cloud SQL&lt;/a&gt;, que corresponde a la base de datos relacional MySQL, adecuada para obtener de ella una alta disponibilidad y confiabilidad dentro de la infraestructura de Google ( libre de mantenimiento y administración de parte de los usuarios de nuestros aplicativos ), y ya nos debe resultar familiar que dentro el entorno de desarrollo Java usualmente resulta&amp;nbsp;fácil&amp;nbsp;conectamos a estas bases de datos utilizando JDBC, método que ahora&amp;nbsp;también&amp;nbsp;es soportado por Google Appengine (en el caso de usuarios Phyton se puede utilizar DB-API con el mismo propósito).&lt;br /&gt;
&lt;br /&gt;
Resulta&amp;nbsp;también&amp;nbsp;cierto afirmar que, para los desarrolladores Web en general, hablar de conexiones a bases de datos MySQL es hacer referencia a &amp;nbsp;un proceso ahora muy difundidos, y que esta base de datos da soporte a muchos proyectos opensource muy difundidos&amp;nbsp;como son los gestores de contenidos Drupal, Wordpress, Elgg, Joomla; phpBB y muchas otras aplicaciones desarrollados para el Back-End.PHP+MySQL, y es importante destacar asimismo que, si nuestra plataforma de desarrollo mantiene soporte a PHP, pues &amp;nbsp;nos permitiría tener acceso a todos esos proyectos y &quot;servicios sociales&quot;. Sería &amp;nbsp;entonces posible la opción de poder utilizar todos estos desarrollos dentro de la infraestructura de Java, y de los servidores de servlets y JSP como Tomcat ó Glassfish (los que son&amp;nbsp;también&amp;nbsp;muy difundidos en empresas y organizaciones corporativas), e incluso&amp;nbsp;también&amp;nbsp;dentro de la infraestructura de Google Appengine mediante el SDK de Java, y conectarnos con la novedosa infraestructura &lt;a href=&quot;http://code.google.com/intl/es/apis/sql/&quot; target=&quot;_blank&quot;&gt;Google Cloud SQL&lt;/a&gt;, e incluso con el mismo datastore de Google Appengine, y para ello, en primer lugar, &lt;u&gt;debemos conseguir utilizar PHP como parte de un proyecto JavaWeb,&lt;/u&gt;&amp;nbsp;y dentro de la plataforma de desarrollo de un servidor de aplicaciones ( al igual como en el entorno de los servidores IIS utilizamos PHP con ASP.Net y C# mediante &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-using-php-on-iis-server.html&quot; target=&quot;_blank&quot;&gt;WebMatrix&lt;/a&gt;&amp;nbsp;)..... y todo esto es posible mediante &lt;b&gt;Quercus..&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Tenemos que tener en cuenta que al ser Quercus una codificación Java del lenguaje PHP, nuestros proyectos que utilicen código PHP ya no se comportaría como un lenguaje interpretado, sino como &quot;lenguaje compilado&quot; durante su ejecución en un servidor de aplicaciones, con ello se lográ mejorar el rendimiento y tiempo de &amp;nbsp;respuesta de nuestros aplicativos desarrollados con PHP dentro de un proyecto JavaWeb, mejorando todo el rendimiento de nuestro aplicativo, y con ese objetivo (y para que podamos efectuar nuestras comparaciones), es que vamos a &quot;migrar&quot; nuestros codelabs que presentamos como parte de nuestras pruebas del Back-End PHP+MySQL para que trabajen ahora en un servidor Tomcat, cargándolos como proyectos JavaWeb usando el IDE Netbeans, que como ya hemos indicado, nos facilita la configuración y despliegue de nuestros desarrollos en dicha plataforma.&lt;br /&gt;
&lt;br /&gt;
Quercus es una tecnología que vió la luz desde el año 2006, &amp;nbsp;y el 2009 tuvo relevancia junto con el lanzamiento del SDK de Java para Google &amp;nbsp;Appengine, y después de una difusión bastante promisoria, &amp;nbsp;inclusive con una presentación en el &quot;Google I/O&quot; de ese año (donde mostraron una &lt;a href=&quot;http://blog.caucho.com/2009/05/31/quercus-on-google-app-engine/&quot; target=&quot;_blank&quot;&gt;&quot;migración&quot; de Wordpress&lt;/a&gt; que corre completamente dentro de infraestructura de Google con cambios mínimos de código PHP, y aunque la aplicación &lt;a href=&quot;http://wordpress-on-quercus.appspot.com/wordpress-2.7.1/&quot; target=&quot;_blank&quot;&gt;colgada en Appengine&lt;/a&gt; a veces sobrepasa la cuota libre proporcionada por Google para su desarrollador, nos consta su funcionamiento), pues parece&amp;nbsp;que la aplicación no ha tenido suficiente soporte de parte de sus desarrolladores &amp;nbsp;y de la comunidad en general, para lograr las correspondientes facilidades y poder continuar con las pruebas y el desarrollo de aplicaciones, pero creo que todo puede variar con el reciente lanzamiento de &lt;b&gt;Google Cloud SQL&lt;/b&gt;, con lo que poder utilizar PHP dentro de proyectos JavaWeb tanto en aplicaciones para nuestros propios servidores y dentro de la infraestructura de Google, y ahora en ambos casos, &amp;nbsp;prácticamente sin cambiar nada de código PHP, pues ahora desde esta perspectiva, &amp;nbsp;pensamos que ésta tecnología si puede llegar a convertirse en una opción bastante importante para considerar y creemos importante aportar al respecto... y por ello hicimos nuestras propias pruebas que ahora presentamos.&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.caucho.com/about/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_links&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;330&quot; title =&quot;check out the Caucho tech !&quot; src=&quot;https://s3.amazonaws.com/caucho-web/Timeline3.gif&quot; width=&quot;450&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Para nuestros codelabs de esta oportunidad, vamos a mantener la opción de poner en cada proyecto lo necesario para que funcionen directamente ( solo siendo necesario configurar nuestras&amp;nbsp;conexiones&amp;nbsp;a MySQL en los codelabs que lo requieran, pero por ello el peso de nuestros proyectos se han incrementado a casi 10Mb, y &amp;nbsp;que corresponden casi todo al archivo &lt;b&gt;resin.jar&lt;/b&gt; de Quercus que pesa mas dei 9Mb); entonces, para disfrutar de este codelab solo será necesario cargar los proyectos a nuestro Netbeans, como &amp;nbsp;proyectos JavaWeb con fuentes existentes. Vale decir, en el caso de los dos primeros codelabs que nos muestran la forma de uso de Quercus y de código PHP sobre una plataforma de desarrollo Java, pues deberá cargar y ejecutar directamente los proyectos... pero en los casos de nuestros codelabs &lt;b&gt;Grid-MySQL&lt;/b&gt;, &lt;b&gt;Wizard-sample&lt;/b&gt; e Integración Google 3ra. parte (&lt;b&gt;Int-Google03&lt;/b&gt;), pues si ya&amp;nbsp;hubiésemos&amp;nbsp;instalado y puesto en funcionamiento nuestros codelabs anterioires correspondientes al uso del Back-End PHP+MySQL (ó del uso de PHP sobre servidores IIS mediante WebMatrix), en ese caso, los ejercicios podrán ser ejecutados y probados directamente, pero si Ud. estimado lector, ha llegado directamente a este codelab, deberá crear las bases de datos MySQL requeridas y verificar sus respectivos&amp;nbsp;parámetros&amp;nbsp;de conexión (host, usuario, password y las bases de datos utilizadas en estos), para lo cual&amp;nbsp;también&amp;nbsp;entregamos los achivos *.sql &amp;nbsp;correspondientes.&lt;br /&gt;
&lt;br /&gt;
Ya desde nuestra primera entrada &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;empezando desde cero&lt;/a&gt; que dió inicio a las investigaciones de nuestro proyecto &lt;b&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/&quot; target=&quot;_blank&quot;&gt;Integración Google&lt;/a&gt;&lt;/b&gt;, les habíamos indicado que el &lt;b&gt;lenguaje PHP&lt;/b&gt;, integrado completamente al &lt;b&gt;servidor Apache&lt;/b&gt; en nuestra instalación de &lt;b&gt;Appserv&lt;/b&gt;, como un componente del servidor, y que incluso podía ser instalado de manera independiente; el caso es que al instalar Appserv, u otro servidor similar LAMP, WAMP, etc, el lenguaje PHP ya viene configurado y listos para usar en nuestros desarrollos; pero ahora, para nuestras pruebas de Quercus, &amp;nbsp;y &amp;nbsp;ver nuestros códigos PHP trabajando en un proyecto JavaWeb, no requerimos instalar ni configurar nada nada sobre el servidor... Quercus como ya hemos indicado, es una librería que viene&amp;nbsp;incluida&amp;nbsp;en el servidor Resina, y a la que podemos acceder copiando el archivo &lt;b&gt;resin.jar&lt;/b&gt; desde &amp;nbsp;la carpeta &lt;b&gt;bin&lt;/b&gt; de nuestra descarga del servidor (ó tambien del war de nuestra descarga de Quercus; que como podrán observar, son el mismo archivo). Asi que en esta oportunidad, nuestro primer codelab es nuestro proyecto myQuercus, creado a partir del war de Quercus versión 4.0.18 (30.09.2010), el cual para adecuarlo a las nuevas versiones de la biblioteca, solo bastará con reemplazar el archivo &lt;b&gt;resin.jar&lt;/b&gt; por el correspondiente de nuestras descargas de la pagina oficial de caucho.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Instalando nuestros codelabs &quot;myQuercus y PHP-with-Java&quot; en Netbeans para ejecutar sobre el servidor Tomcat.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Como se indica, tenemos por supuesto que haber instalado en nuestro ordenador Netbeans y el servidor Tomcat, y si no lo han efectuado, conviene que den una lectura detallada e incluso ejecuten nuestro codelab &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/09/using-back-end-javamysql-el-proyecto.html&quot; target=&quot;_blank&quot;&gt;Usando el Back-End Java+MySQL: Iniciandonos&lt;/a&gt;, donde se detalla el proceso y se ejecuta nuestros codelabs Integración&amp;nbsp;Google&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;1ra.&lt;/a&gt;&amp;nbsp;y&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_blank&quot;&gt;2da.&lt;/a&gt;&amp;nbsp;parte, los que al no contener codificación Java ni PHP, son directamente ejecutados sobre esta plataforma y nos muestran el funcionamiento de los elementos del framework ExtJs que venimos empleando en nuestros desarrollos ( como maquetación utilizando viewport, Menu TreePanel, windows, paneles, stores y grillas, etc), y el empleo de algunas de las API de Google como autenticación, manejo de spreadsheets de Google Docs, visualizaciones y Mapas de Google...&lt;br /&gt;
&lt;br /&gt;
Estos codelabs para ser instalados en nuestro IDE Netbeans y ser ejecutados sobre el servidor Tomcat, deben ser primero descargados sobre una carpeta que podríamos denominar &quot;Quercus&quot; ( el material de apoyo indicado a continuación ), &amp;nbsp;y con &amp;nbsp;lo que podremos crear nuestros proyectos a partir de las fuentes proporcionadas, y asimismo debenos indicar, durante el proceso y en la pantalla de configuración correspondiente, que utilizaremos el servidor Tomcat para ejecutar nuestros proyectos..&lt;br /&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;myQuercus.rar,&lt;/b&gt;&amp;nbsp;que corresponde a nuestra adaptación del war descargado de la pagina oficial de Quercus para ser utilizado con Netbeans, y que al ejecutar como proyecto JavaWeb podrán observar&amp;nbsp;la información disponible proporcionada&amp;nbsp;que hemos adecuado, especialmente la correspondiente a la forma de actualización a las nuevas versiones de la librería, pues al ser un proyecto bastante vigente y activo, como hemos indicado por su empleo en el entorno de desarrollo del SDK Java de Google Appengine, es continuamente actualizado... e incluso, en este año 2011 han logrado el reconocimiento &lt;b&gt;Java EE6 Web Profile Certified with Healht System &amp;amp; Cloud Support &lt;/b&gt;(pueden revisar la cronologia),&lt;b&gt;&amp;nbsp;&lt;/b&gt;lo que nos puede dar una idea del real potencial y las posibilidades de esta librería.&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXgfmYTsO5_I-R_COQa8Lldu0RT1MJo6tfsCsIdpnQrqpB_5JMIBE1TJDcWDjxGfKdH9V3D194zesx6wYSbWM11xu48zDPwwp1AUFrs4WP8__859REW1C5usvUaj18yNG8Ef9bai2A42SC/s400/myQuercus.jpg&quot; width=&quot;400&quot; /&gt;
&lt;/div&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;PHP-with-Java.rar,&lt;/b&gt;&amp;nbsp;que corresponde a nuestra muestra de como utilizar código PHP conjuntamente con Java, y para ello ejecutamos la función &lt;b&gt;phpinfo()&lt;/b&gt; que nos muestra la versión PHP que utiliza nuestra librería Quercus instalada (que puede ser diferente dependiendo de nuestra version de Quercus que utilicemos); además de datos y variables del entorno PHP disponibles para nuestros desarrollos. Este codelab&amp;nbsp;también&amp;nbsp;solo necesita ser cargado y ejecutado a nuestro Netbeans para funcionar.&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixv6qBb_4mq2_RncAtGYF5gPwCC834HpFd7JwokuhB4HCLpudUsxPZEd5S9LOvYx3viyrsgeTkA3Z2W_5enauhHqF8neUUaqSUWP2UN6G4tcZ86fgFllPHe6CVZDOYGbtQMjhpPU2cvcQ_/s400/PHP-With-Java.jpg&quot; width=&quot;400&quot; /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;instalando&quot;&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Instalando nuestros codelabs &quot;Grid-MySQL, Wizard-sample e Integracion Google 3ra parte&quot; del Back-End PHP + MySQL, en Netbeans para ejecutar sobre Tomcat:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Nuestros codelabs referidos al uso del Back-End PHP+ MySQL esta dividido en tres partes, los que son:&lt;b&gt;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;1.- Iniciándonos (&lt;/b&gt;&lt;b&gt;Grid-MySQL.rar &lt;/b&gt;&lt;b&gt;),&lt;/b&gt; que nos muestra un modelo CRUD&amp;nbsp;-opciones básicas de Crear, Modificar, Borrar, Buscar e Imprimir-, sobre una tabla de una base de datos MySQL, considerando componentes dinámicos, y es el que corresponde a nuestro codelab Grid-MySQL indicado.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.- Temas de Seguridad y Wizards (&lt;/b&gt;&lt;b&gt;Wizard.sample.rar),&lt;/b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt; que muestra el mismo desarrollo anterior pero considerando una pantalla de acceso para poder utilizar dicha aplicación...y a la que le hemos acondicionado componentes dinámicos respecto al manejo de idioma de nuestro navegador ( la API language de Google, cuyo efecto podemos observar al cambiar el idioma de nuestro navegador...para ello, siga la ruta : Herramientas, Opciones, Avanzado, Contenido Web y Configuración de Idiomas en &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&lt;b&gt;Google Chrome&lt;/b&gt;&lt;/span&gt; si están utilizando dicho navegador por supuesto);&lt;br /&gt;
&lt;br /&gt;
y por último, tenemos:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3.-&amp;nbsp;&lt;/b&gt;&lt;b&gt;N&lt;/b&gt;&lt;b&gt;uestro codelab&lt;/b&gt; &lt;b&gt;Integración Google 3ra parte (&lt;/b&gt;&lt;b&gt;Int-Google.rar), &lt;/b&gt;que nos muestra un Modelo TreePanel de visualizaciones Google y del framework ExtJs, además de Google Maps, y a nuestro modelo CRUD de Mantenimiento de la tabla de presidentes utilizada en los dos primeros codelabs referidos, la que hemos unido al ejercicio en este caso, como muestra de como integrar nuestros componente desarrollado en nuestros proyectos.&lt;br /&gt;
&lt;br /&gt;
Cabe reiterar que estos codelabs corresponden a los considerados en nuestros ejercicios sobre el Back-End PHP+ MySQL pero ahora instalados sobre el IDE Netbeans para ser ejecutados sobre el servidor Tomcat, para lo que debemos crear los proyectos a partir de las fuentes proporcionadas (y que como ya hemos indicado, debemos descargar sobre una carpeta que podemos denominar &quot;Quercus&quot;), y asimismo no debernos olvidarnos de indicar durante el proceso y en la pantalla de configuración correspondiente, que utilizaremos el servidor Tomcat para ejecutar nuestros proyectos..&lt;br /&gt;
&lt;br /&gt;
Vale recordar que, como estos codelabs corresponden al uso de la base de datos MySQL, éste es un componente nativo de un &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&lt;b&gt;servidor AppServ;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;entonces para el caso de las bases de datos requeridas para los ejercicios, recomendamos crearlas sobre el mismo servidor MySQL ya instalado con &amp;nbsp;Appserv, pues sobre un mismo ordenador no tiene ningún sentido tener instalado varios servidores MySQL ) aunque es posible, si se configuran para puertos diferentes ); y asimismo, que para crear las bases de datos debemos utilizar la herramienta &lt;b&gt;phpMyAdmin &lt;/b&gt;también disponible en nuestro servidor &lt;b&gt;Appserv&lt;/b&gt;&amp;nbsp;con los archivos *.sql entregados en cada ejercicio.&lt;br /&gt;
&lt;P&gt;
&lt;b style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(my_link03());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Grid-PHP-MySQL.rar,&lt;/b&gt;&amp;nbsp;que corresponde a nuestro codelab &lt;b&gt;&quot;iniciándonos&quot;&lt;/b&gt; sobre el Back-End PHP+ MySQL,&amp;nbsp;&amp;nbsp;proyecto desarrollado tomando como referencia un tutorial de la&amp;nbsp;&lt;b&gt;pagina Oficial ExtJs&lt;/b&gt;, cuyo código por supuesto hemos mejorado y que utiliza la versión ExtJs-3.4.0; y que nos presenta un modelo CRUD -opciones básicas de Crear, Modificar, Borrar, Buscar e Imprimir-, sobre una tabla de una base de datos MySQL, considerando componentes dinámicos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Using the Back-End PHP+MySQL (Getting Started) corriendo como proyecto JavaWeb sobre nuestro servidor local Tomcat :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a alt=&quot;Go to Grid-MySQL Codelab&quot; href=&quot;http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-introduccion.html&quot; target=&quot;_links&quot;&gt;
&lt;img alt=&quot;Go to Grid-MySQL Codelab&quot; border=&quot;0&quot; height=&quot;280&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPvRGmu2Jy-czh7BNyJ8QcED4Wq_1amWPZcGDu53wuWYgCktRvalgER1B6tpU-mpYqPgUivBGN7cWm68C5YLHy2NEFsNwCjwW4yBZM3omWdClKfPY3_uGU7kmRVTZOYv1Xt0FtQcMdnrXC/s320/Back-End+PHP+MySQL.JPG&quot;  title=&quot;Go to Grid-PHP-MySQL Codelab..&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Este codelab trabaja con la base de datos &lt;b&gt;&quot;tutorial&quot;&lt;/b&gt;, que si no la hemos creado para nuestros otros codelabs, deberá crearla primero con la herramienta phpMyAdmin de Appserv, y luego importar sobre ella las tablas y datos requeridos desde el archivo &lt;b&gt;pdtes_usa.sql&lt;/b&gt; incluído en la descarga.&lt;br /&gt;
&lt;br /&gt;
Recuérdese asimismo que en el archivo &lt;b&gt;database.php&lt;/b&gt;, y en la instrucción &lt;b&gt;msql_connect&lt;/b&gt; debemos indicar los datos para conectarnos a la base de datos (host, usuario y password), y en la instrucción &lt;b&gt;msql_select_db,&amp;nbsp;&lt;/b&gt;&amp;nbsp;indicar el nombre de la base de datos donde hemos importado las tablas y datos contenidos en &lt;b&gt;pdtes_usa.sql &lt;/b&gt;(&quot;&lt;b&gt;tutorial&quot;&amp;nbsp;&lt;/b&gt;es el nombre de la base de datos que hemos utilizado).&lt;br /&gt;
&lt;br /&gt;
Pueden también revisar nuestra entrada &lt;b&gt;:&lt;/b&gt;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff9e7; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px;&quot;&gt;&lt;a class=&quot;GA10RCSOB&quot; href=&quot;http://www.blogger.com/blogger.g?blogID=7521149585630145029#editor/target=post;postID=1425355286680514633&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0647ab; font-family: inherit; font-size: 13px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Using the Back-End PHP+MySQL ( Getting Started )&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;donde mostramos con mayor detalle el contenido de cada componente de este codelab, aunque en esa oportunidad, las mostramos para instalar y hacer funcionar este proyecto sobre el entorno de desarrollo de Appserv ( servidor Apache+ PHP+ MySQL), pero cuyos conceptos son completamente compatibles para utilizarlos sobre este&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-using-php-on-iis-server.html&quot; target=&quot;_blank&quot;&gt; entorno de desarrollo de WebMatrix&lt;/a&gt;, por cuanto, en dicha plataforma, en ese caso, solo utilizamos al servidor IIS &amp;nbsp;y el lenguaje PHP instalado sobre ella... y el funcionamiento del servidor IIS es similar al del servidor Apache al desplegar código PHP, y esto porque en nuestro codelab no estamos utilizando ningún código ASP.Net ó C#.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(my_link04());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Wizard-sample.rar,&lt;/b&gt;&amp;nbsp;que corresponde a nuestro codelab &lt;b&gt;&quot;Temas de Seguridad y Wizards (acceso)&quot; &lt;/b&gt;referidos al Back-End PHP+ MySQL,&amp;nbsp;&amp;nbsp;donde mostramos los fundamentos para empezar a diseñar nuestros sistemas y proyectos tomando en consideración pantallas de acceso (Wizards) y revisando que opciones de seguridad debemos empezar a considerar en ellos. Este codelab hace referencia a como poder acceder (ó restringir el acceso a usuarios no autorizados) a nuestro modelo CRUD del codelab anterior, y para ello hace uso de los datos registrados en la tabla usuarios creada al importar pdtes_usa.sql sobre la base de datos &quot;tutorial&quot; ya creadas. Todo el código empleado en el codelab es PHP sobre HTML y Javascript, los que mediante Quercus on ahora soportados como proyecto JavaWeb, que cargaremos sobre Netbeans y ejecutaremos sobre nuestro servidor local Tomcat.&lt;br /&gt;
&lt;br /&gt;
Para este codelab en la base de datos &lt;b&gt;Tutorial &lt;/b&gt;debemos agregar manualmente la tabla &lt;b&gt;usuarios &lt;/b&gt;que debe tener como&amp;nbsp;mínimo&amp;nbsp;los campos: &lt;b&gt;ID&lt;/b&gt; (int, primary key e auto-incremental(, &lt;b&gt;usuario&lt;/b&gt;, varchar(15); y &lt;b&gt;password&amp;nbsp;&lt;/b&gt;también&amp;nbsp;varchar(15)... y allí indicar los valores de nuestro usuario y password de acceso (passer, passer por ejemplo). Las generalidades de configuración y&amp;nbsp;conexión&amp;nbsp;a la base de datos Tutorial los podemos observar al inicio del archivo&lt;b&gt; index.php&lt;/b&gt; (donde nos conectamos a la base de datos mediante &lt;b&gt;mysql_connect&lt;/b&gt; y &lt;b&gt;mysql_select_db&lt;/b&gt;), y a partir de la línea 242 del código, donde se verifica que nuestro nombre de usuario y password se encuentren registrados en la tabla &lt;b&gt;usuarios.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Using the Back-End PHP+MySQL (Wizard and safety themes) corriendo como proyecto JavaWeb sobre nuestro servidor local Tomcat :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a alt=&quot;Go to Wizard-Sample Codelab...&quot; href=&quot;http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-wizard-safety.html&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;Go to Wizard-Sample Codelab...&quot; border=&quot;0&quot; height=&quot;280&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3KtWAaZg28tZw5bsX8Iih8ef7KWFJKTR8KXGIKZjSHTrjXA3eZ0Edu6-Ps7qHoJjk8yNPD6lpnam0r9dhLCE3HrN4N5KCCD0tLGguMgbP4G_zEnmcxoDyYRNXGmW9AS9-ECYQdwbYx84L/s400/Wizard-sample.JPG&quot;  title=&quot;Go to Wizard-Sample Codelab..&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Pueden también revisar nuestra entrada&amp;nbsp;&lt;b&gt;:&lt;/b&gt;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff9e7; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px;&quot;&gt;&lt;a class=&quot;GA10RCSOB&quot; href=&quot;http://www.blogger.com/blogger.g?blogID=7521149585630145029#editor/target=post;postID=6913892482410064261&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0647ab; cursor: pointer; font-family: inherit; font-size: 13px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Using the Back-End PHP+MySQL ( Wizard &amp;amp; Safety themes)&amp;nbsp;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;donde mostramos con mayor detalle el contenido de cada componente de este interesante codelab, y en que se detallan una de la principales formas de uso del lenguaje PHP en lo que respecta al manejo de base de datos, cookies y enlace entre diferentes páginas PHP.. y por supuesto, como ya hemos indicado, este proyecto lo podemos correr desde WebMatrix como ya hemos indicado...
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:void(my_link05());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Int-Google03.rar,&lt;/b&gt;&amp;nbsp;que corresponde a nuestro codelab &lt;b&gt;&quot;Integracion Google 3ra parte&quot;&lt;/b&gt; referidos al Back-End PHP+ MySQL, donde mostramos los fundamentos para empezar a diseñar nuestros sistemas y proyectos tomando el consideración el enfoque de uso que nos ofrece el framework ExtJs (maquetación utilizando viewport, uso de un menu TreePanel, al que se accede mediante una pantalla de acceso ó Wizard, permite la declaración y manejo de stores, &amp;nbsp;y mostramos la forma de conectarnos a una base de datos MySQL utilizando PHP en este caso, lo que finalmente nos permiten acceder a las diferentes visualizaciones &amp;nbsp;Google y ExtJs que hemos venido presentando en nuestros codelabs anteriores, incluyendo&amp;nbsp;también&amp;nbsp;al Modelo CRUD de Mantenimiento del listado de presidentes de los dos ejercicios anterioires que forman parte de esta entrega.&lt;br /&gt;
&lt;br /&gt;
Este ejercicio trabaja con las bases de datos &lt;b&gt;IGCodelab &lt;/b&gt;contenidos en &lt;b&gt;igcodelab.sql&lt;/b&gt; (datos de productos de belleza), y la base de datos &lt;b&gt;Tutorial &lt;/b&gt;(donde tenemos registrados a los presidentes USA contenidos en &lt;b&gt;pdtes_usa.sql&lt;/b&gt;). Pero en esta oportunidad, el nombre y password del usuario para acceder al Modulo son los contenidos en la tabla &lt;b&gt;usuarios &lt;/b&gt;de la base de datos &lt;b&gt;IGCodelab&lt;/b&gt;. Los datos que&amp;nbsp;conexión&amp;nbsp;a la base de datos IGCodelab, y la grabación de cookies empleadas a lo largo del modulo, son detalladas en &lt;b&gt;drivers.php&lt;/b&gt;, y el chequeo del usuarios se detalla en &lt;b&gt;database.php&lt;/b&gt; en la&amp;nbsp;función&amp;nbsp;getuser(), a partir de la linea 63 del&amp;nbsp;código.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Integracion Google 3ra. Parte corriendo como proyecto JavaWeb sobre nuestro servidor local Tomcat :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/04/integracion-google-3ra-parte.html&quot; target=&quot;_links&quot;&gt;
&lt;img alt=&quot;Go to Int-Google03 Codelab..&quot; border=&quot;0&quot; height=&quot;280&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHLzsFwLarnqdfhgm0CbKJjwiH_Sy7f8Ezf88RBKvsRXrp5Z1KTxRCtepO2avar8LFBiU-AADOlYNEYfg2jkHJ7Q2D5gdAto7c9WSd3RA3mIjit-ggd_0SdcZh51UovECKBrHw40YMaFIZ/s400/Int-Google03b.JPG&quot; title=&quot;Go to Int-Google03 Codelab..&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Pueden también revisar nuestra entrada&amp;nbsp;&lt;b&gt;:&amp;nbsp;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff9e7; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px;&quot;&gt;&lt;a class=&quot;GA10RCSOB&quot; href=&quot;http://www.blogger.com/blogger.g?blogID=7521149585630145029#editor/target=post;postID=8263314742378102621&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0647ab; cursor: pointer; font-family: inherit; font-size: 13px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Integracion Google (3ra parte)&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;donde mostramos con mayor detalle el contenido de cada componente de este ejercicio...&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;NOTAS DE TRABAJO :&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;1.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Los ejercicios de este codelab funcionan sin mayor problema tal como los presentamos, pero para los codelabs Grid-MySQL e Int-Google03, como podrá observarse, los archivos *.php involucrados utilizan codificación &lt;b&gt;UTF-8 (en el Back-End PHP+MySQL sobre servidores Apache&amp;nbsp;utilizábamos&amp;nbsp;codificación ANSI).&lt;/b&gt;&amp;nbsp;... Ocurre que cuando se trabaja con &lt;b&gt;cookies &lt;/b&gt;(como es el caso de estos codelabs), puede haber restricciones para el uso de la función setcookie(), por cuanto PHP por defecto, en un servidor Apache, restringe las salidas del buffer del servidor luego que se haya cargado o ejecutado algun script HTML... y en el caso de estos proyectos JavaWeb, que implementan PHP mediante el uso de Quercus, &lt;u&gt;no existen estan restricciones&lt;/u&gt;, ello aún cuanto, como podrán observar, en el archivo de configuración &lt;b&gt;web.xml&lt;/b&gt; se ha configurado a nuestros archivos y scripts *.php para que trabajen con codificación UTF-8.&lt;br /&gt;
&lt;br /&gt;
Cuando trabajamos con WebMatrix no ocurren estos problemas y es indiferente que nuestros archivos *.php sean codificados UTF-8 ó ANSI, pero como siempre, debe verificarse al ejecutarlos su correcto funcionamiento incluso antes de su puesta en producción para evitar contratiempos.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;2.-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Si revisan ahora con detalle los códigos de nuestros ejercicios, podrán observar, tal vez con sorpresa, que no hay ninguna variación respecto a los códigos presentados para ser ejecutados en &amp;nbsp;las otras que hemos venido utilizando &amp;nbsp;( servidor Apache - PHP con Appserv, y servidor IIS + PHP con WebMatrix), y realmente sólo cambia la presentación de cada proyecto, vale decir, la adaptación que hemos efectuado para adecuarlos como &lt;b&gt;proyectos JavaWeb&lt;/b&gt;, con la inclusión de la carpetas WEB-INF (donde se encuentra la &lt;b&gt;carpeta lib&lt;/b&gt; que contiene nuestra librería &lt;b&gt;resin.jar&lt;/b&gt;, y donde configuramos a través de &lt;b&gt;web.xml&lt;/b&gt; el despliegue de nuestros servlets y librerías de nuestra aplicación en el servidor Tomcat); y de la carpeta META-INF, que contiene a &lt;b&gt;context.xml,&lt;/b&gt; mediante el cual identificamos a nuestra aplicación en el servidor.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;3.-&lt;/b&gt;&lt;/span&gt; Cabe resaltar que utilizando esta librería, y en la forma como lo utilizamos en nuestros codelabs (sobre un servidor como Tomcat ó sobre Glassfish),&amp;nbsp;podríamos&amp;nbsp;instalar en nuestros servidores de aplicaciones locales a proyectos sociales bastante conocidos como Drupal, Wordpress, Joomla, phpBB, etc. sin cambiar en nada el código de esos aplicativos y consiguiendo incluso un mejor rendimiento al trabajar PHP como un &quot;lenguaje compilado&quot; (apúntese&amp;nbsp;que en las plataformas de desarrollo LAMP ó WAMP, PHP es un &quot;lenguaje interpretado&quot;). Lo mismo&amp;nbsp;podríamos&amp;nbsp;hacer si se considera utilizar el servidor Resina, y correr nuestros desarrollos Java y PHP, ó proyectos combinados de ambos, sobre dicha plataforma.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;4.-&lt;/span&gt;&lt;/b&gt; Como indicamos, el archivo&lt;b&gt; resin.jar&lt;/b&gt; puede ser copiado de la descarga del servidor Resina (carpeta bin), ó del &lt;b&gt;war &lt;/b&gt;de la descarga de la &lt;a href=&quot;http://quercus.caucho.com/&quot; target=&quot;_blank&quot;&gt;página de Quercus&lt;/a&gt;. Recomendamos bajarla desde esta última opción por cuanto, en un proyecto JavaWeb instalado en nuestro IDE Netbeans, no resultan necesarios los componentes de java que se incluyen en el war, pero al trabajar con Google Appengine, con el SDK de Java y también con el IDE Netbeans, en ese caso, la carga de nuestros proyectos principalmente al hacer nuestras pruebas, en ese caso puede ser necesario trabajar con ANT y considerar todos los componentes de Java incluídos en el war de nuestra descarga, y los que utilizaremos en nuestra próxima entrada que nos mostrará como trabajar con PHP en Google Appengie, utilizando por supuesto, el SDK de Java de GAE y Quercus...&lt;br /&gt;
&lt;br /&gt;
Saludos&lt;/div&gt;
@Mlaynes&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;/div&gt;&lt;/div&gt;


&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/11/quercus-using-java-with-php.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/4193329715544948778/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/11/quercus-using-java-with-php.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/4193329715544948778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/4193329715544948778'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/11/quercus-using-java-with-php.html' title='Using PHP like a JavaWeb Project on Tomcat server'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfBSznqaO0ZcMxKYYi5NGvoFaerOP2mZE6LfK8DylyNLTmMUsw_8vCicAsOwFB0wkDlOqF-Rv9_lQ7LkJ9hMq3gA94YU5mrvnfgAxX35Jy-j_8PjACXMQkBZmOYS6QCeNnPlvxJe9sbQq-/s72-c/ResinaQuercus.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-779175141259187503</id><published>2011-10-09T14:25:00.000-05:00</published><updated>2017-02-26T11:32:40.611-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><category scheme="http://www.blogger.com/atom/ns#" term="webmatrix"/><title type='text'>WebMatrix : Using PHP on IIS Server</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login wait a few seconds and try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    /*
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
    */
      window.open(w_url,&quot;_blank&quot;);
    /*
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    */
    return(w_url);
  };
  function my_link01() {
    //Grid-PHP-mySQL.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEM2MyMTI3MmQtMzdmNy00MzdlLThmZjYtMTQyYzZhYjc1ZjE2&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //Wizar-sample.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENGYxMjNkYTEtNTg4Zi00OGE4LWI0MDMtN2Y1MmMyMjRmMTQx&quot;;
    my_link(w_link);
  };
  function my_link03() {
  //Int-Google03.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZjc3ODc2YjgtYjIyMi00MDc5LTliOTQtNDM1NGYzYmI5MzA0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://www.microsoft.com/web/webmatrix/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit7PSnpvMfjcd1d3zeACqCfi6chMTU9_G3x4TiBtuHpQTvjZTy-nyxxH2MYvwwUiHDFVC_rwucMImdCMD88x5jx9QbFmySrvAGIRa-wbHQT6HFp3Xr1iYKXCLJLKxN0JJ-cE2mqliwdxNF/s200/php.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
...y continuando con nuestra investigación respecto a WebMatrix: la plataforma opensource de Desarrollo Web de Microsoft, empezamos ahora a revisar las ventajas y posibilidades que nos presenta instalar y trabajar con el lenguaje PHP dentro del entorno de Desarrollo del servidor IIS y el lenguaje ASP.Net (aparte que nos permite integrarnos y trabajar fácilmente con la base de datos SQLServer compact instalado en la plataforma... y que cuyas formas de conexión y funcionamiento se encuentran detallados en el Tutorial WebMatrix cuyas direcciones adjuntamos en &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-la-plataforma-opensource-de.html&quot; target=&quot;_blank&quot;&gt;nuestra entrega anterior&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Ya desde nuestra primera entrada &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;empezando desde cero&lt;/a&gt; que dió inicio a las investigaciones de nuestro proyecto &lt;b&gt;Integración Google&lt;/b&gt;, les habíamos indicado que el &lt;b&gt;lenguaje PHP&lt;/b&gt;, integrado completamente al &lt;b&gt;servidor Apache&lt;/b&gt; en nuestra instalación de &lt;b&gt;Appserv&lt;/b&gt;, es sólo un componente del servidor, y que incluso podía ser instalado de manera independiente; el caso es que al instalar Appserv, u otro servidor similar como XAMP, WAMP, etc, el lenguaje PHP ya viene integrado a nuestro entorno de desarrollo, pero ahora con WebMatrix, es propicia la oportunidad para ver a PHP trabajando en otro entorno de desarrollo distinto al servidor Apache.&lt;br /&gt;
&lt;br /&gt;
En el caso de WebMatrix, el proceso de instalación de PHP al servidor IIS Express es totalmente automático... Solo basta ingresar a la opción &quot;configuración&quot; de alguno de nuestros proyectos o &lt;b&gt;&quot;sites&quot;&lt;/b&gt;, y allí marcar la opción correspondiente. El hecho es que, al hacer esa indicación, WebMatrix, nos solicitará que le indiquemos que versión del lenguaje deseamos instalar, la versión 5.2 ó 5.3, en nuestro caso elegimos la versión 5.2 pues nuestros desarrollos no tienen ninguna figura especial del lenguaje PHP que hayamos utilizado... pero bien pueden seleccionar la versión 5.3 que ya es estable....y listo, el proceso se empieza a realizar en forma automática (toma sus minutos.. pero no hay nada más que hacer), al final va a aparecer marcada nuestra casilla PHP, habilitada en la versión que elegimos... tal vez si vale resaltar, que una vez instalado PHP, el lenguaje estará disponible para todos nuestros proyectos y no solo para uno en particular, vale decir, se habilita el servicio para todo nuestro entorno de desarrollo, como es que caso en Appserv,. por mencionar un servidor que ya nos debe resultar cada vez más familiar...&lt;br /&gt;
&lt;br /&gt;
Cabe también resaltar que, PHP no solo es instalable en el entorno de desarrollo de un servidor &lt;b&gt;Apache &lt;/b&gt;e &lt;b&gt;IIS&lt;/b&gt; ...no forma parte de los alcances de este codelab revisar al detalle de todas las posibilidades de PHP, pero vale resaltar que, al descargar PHP, para ser instalado de forma independiente desde su pagina oficial, y al efectuar el proceso, PHP, durante su instalación, nos pedirá que seleccionemos el servidor Web sobre el cual trabajará, y aparte de los ya mencionados, tenemos al servidor Xiami, Microsoft PWS.. y hay una opción &lt;b&gt;otros&lt;/b&gt;, y en la cual, la configuración por la parte del servidor tendría que efectuarse de forma manual.. como es el caso si deseamos instalar PHP sobre un servidor Tomcat, que tiene sus pasos, pero también es posible... el caso es que tener al lenguaje PHP, sobre el servidor que utilicemos, representa enormes ventajas, por cuanto PHP es un lenguaje bastante consolidado, y que nos presenta múltiples herramientas ya desarrolladas y listas para poderlas usar (como el manejo del formato JSON entre otros, ó la instalación de &quot;servicios sociales&quot; o de gestión de contenidos muy populares como Wordpress, Drupal, etc. los que han sido desarrollados utilizando PHP, y que varios de ellos, han sido completamente integrados a la plataforma de Desarrollo de WebMatrix, facilitando su instalación, adecuación y uso), y todo ello nos debe permitir que, unido a los conocimientos que podamos ó requerir tener de alguna otra plataforma de desarrollo en particular, pues puede facilitarnos bastante nuestro trabajo, tiempos de programación e integración de proyectos...( como un ejemplo, pueden revisar este &lt;a href=&quot;http://www.webtaller.com/construccion/lenguajes/php/lessons/phpiss/phpiss.php&quot; target=&quot;_blank&quot;&gt;enlace&lt;/a&gt; que nos muestra el proceso de instalación de PHP sobre un servidor IIS &quot;convencional&quot;, es decir, el que viene instalado en WindowsNT Server ó Windows XP ó Window 7, etc. )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;instalando&quot;&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Instalando nuestros codelabs &quot;Using the Back-End PHP+MySQL e Integracion Google 3ra parte&quot; sobre WebMatrix:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
(Una vez instalado WebMatrix en nuestro ordenador, por supuesto)&lt;br /&gt;
&lt;br /&gt;
Nuestros codelabs referidos al uso del Back-End PHP+ MySQL esta dividido en tres partes, los que son:&amp;nbsp;&lt;b&gt;1.- Iniciándonos,&lt;/b&gt; que nos muestra un modelo CRUD&amp;nbsp;-opciones básicas de Crear, Modificar, Borrar, Buscar e Imprimir-, sobre una tabla de una base de datos MySQL, considerando componentes dinámicos; &lt;b&gt;2.- Temas de Seguridad y Wizards (acceso),&lt;/b&gt; que muestra el mismo desarrollo anterior pero considerando una pantalla de acceso para poder utilizar dicha aplicación...y a la que le hemos acondicionado componentes dinámicos respecto al manejo de idioma de nuestro navegador ( la API language de Google, cuyo efecto podemos observar al cambiar el idioma de nuestro navegador...para ello, siga la ruta : Herramientas, Opciones, Avanzado, Contenido Web y Configuración de Idiomas en &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&lt;b&gt;Google Chrome&lt;/b&gt;&lt;/span&gt; si están utilizando dicho navegador por supuesto); y por último, tenemos a nuestro codelab &lt;b&gt;Integración Google 3ra parte,&lt;/b&gt;&amp;nbsp;que muestra un Modelo TreePanel de visualizaciones Google y ExtJs, además de visualización de Google Maps, y nuestro modelo CRUD de Mantenimiento de la tabla de presidentes utilizada en los dos primeros codelabs referidos, la que hemos unido al ejercicio en este caso, como muestra de como unir componentes ExtJs sobre en nuestros propios proyectos.&lt;br /&gt;
&lt;br /&gt;
Cabe resaltar asimismo que, estos codelabs son referidos al Back-End PHP+ MySQL corriendo sobre WebMatrix, pero como solo involucran a los componentes nativos de un &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;&lt;b&gt;servidor AppServ;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;entonces para el caso de las bases de datos requeridas para los ejercicios recomendamos efectuarlas sobre el mismo servidor MySQL ya instalado con &amp;nbsp;Appserv, pues cabe indicar que, sobre un mismo ordenador, no tiene ningún sentido tener instalado varios servidores MySQL - aunque es posible, si se configuran para puertos diferentes - y para ello, debemos utilizar la herramienta phpMyAdmin también disponible en nuestro servidor Appserv.&lt;br /&gt;
&lt;br /&gt;
Y por supuesto, como tal vez han podido intuir, también es posible correr en el entorno de desarrollo de &lt;b&gt;Appserv&lt;/b&gt; éste material de apoyo que les entregamos para probar sobre &lt;b&gt;WebMatrix&lt;/b&gt;, y con la ventaja de que, como en WebMatrix, cada proyecto o &quot;site&quot; es independiente, pues en esta oportunidad, los descargables de cada &quot;codelab&quot; contienen todo lo necesario para su funcionameinto ( incluido la versión &quot;liviana&quot; de ExtJs-3.4.0 utilizada en esta oportunidad para cada codelab). Por ello, conviene descargar o copiar nuestro material de apoyo dentro de la carpeta &quot;www&quot; de nuestro servidor Appserv (u otro servidor equivalente utilizado), y con ello, los&amp;nbsp;podríamos&amp;nbsp;poner en funcionamiento inclusive en ambas plataformas en forma simultánea... llamando desde el localhost, más nuestra ruta de descarga, en la barra de direcciones de nuestro navegador... ó desde WebMatrix, al cargar estos proyectos o &quot;sites&quot;, llamarlos desde esta posición de descarga directamente a WebMatrix, y ejecutarlos de allí, como se indicó en el codelab anterior, referido a nuestros primeros conceptos respecto a WebMatrix, y de donde ya debemos haber ejecutado nuestros proyectos Integración Google&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;1ra.&lt;/a&gt;&amp;nbsp;y&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_blank&quot;&gt;2da.&lt;/a&gt;&amp;nbsp;parte... vale decir, si en esta oportunidad va ejecutar por primera vez los codelabs, y si por supuesto utilizamos las bases y tablas MySQL requeridas ( adjuntamos para ello los archivos sql necesarios ), pues nuestros ejercicios deberían funcionar directamente sin necesidad de hacer alguna configuración adicional; pero en el caso de haber ya realizado la instalación de los codelabs anteriores mencionados, podrá &quot;sobreescribir&quot; las bases de datos requeridas con la misma información de los archivos sql contenidos en el material de la descarga.&lt;br /&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link01();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Grid-PHP-MySQL.rar,&lt;/b&gt;&amp;nbsp;que corresponde a nuestro codelab &lt;b&gt;&quot;iniciándonos&quot;&lt;/b&gt; sobre el Back-End PHP+ MySQL,&amp;nbsp;&amp;nbsp;proyecto desarrollado tomando como referencia un tutorial de la&amp;nbsp;&lt;b&gt;pagina Oficial ExtJs&lt;/b&gt;, cuyo código por supuesto hemos mejorado y que corre ahora sobre la versión ExtJs-3.4.0; y que nos presenta un modelo CRUD -opciones básicas de Crear, Modificar, Borrar, Buscar e Imprimir-, sobre una tabla de una base de datos MySQL, considerando componentes dinámicos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Using the Back-End PHP+MySQL (Getting Started) corriendo sobre WebMatrix :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-introduccion.html&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;280&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPvRGmu2Jy-czh7BNyJ8QcED4Wq_1amWPZcGDu53wuWYgCktRvalgER1B6tpU-mpYqPgUivBGN7cWm68C5YLHy2NEFsNwCjwW4yBZM3omWdClKfPY3_uGU7kmRVTZOYv1Xt0FtQcMdnrXC/s320/Back-End+PHP+MySQL.JPG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; title=&quot;Go to Grid-PHP-mySQL Codelab..&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
Este codelab trabaja con la base de datos &lt;b&gt;&quot;tutorial&quot;&lt;/b&gt;, para ello deberá crear primero con la herramienta phpMyAdmin dicha base de datos, y luego importar sobre ella las tablas y datos requeridos desde el archivo &lt;b&gt;pdtes_usa.sql&lt;/b&gt; incluído en la descarga ( si ya tiene instalada la base de datos tutorial, la importación borrará las tablas &quot;&lt;b&gt;presidents&quot;&lt;/b&gt;, &quot;&lt;b&gt;parties&quot;&lt;/b&gt; y &quot;&lt;b&gt;usuarios&quot;&lt;/b&gt; requeridas, e insertará la data necesaria para realizar ejecutar nuestro ejercicio.&lt;br /&gt;
&lt;br /&gt;
Recuérdese&amp;nbsp;asimismo que en el archivo database.php, y con el comando &lt;b&gt;msql_connect&lt;/b&gt; debemos verificar nuestros datos para conectarnos a la base de datos (host, usuario y password), y con el comando &lt;b&gt;msql_select_db&lt;/b&gt; se indica el nombre de la base de datos donde hemos importado las tablas y datos contenidos en pdtes_usa.sql (tutorial es el que hemos utilizado).&lt;br /&gt;
&lt;br /&gt;
Pueden también revisar nuestra entrada &lt;b&gt;:&lt;/b&gt;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff9e7; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px;&quot;&gt;&lt;a class=&quot;GA10RCSOB&quot; href=&quot;http://www.blogger.com/blogger.g?blogID=7521149585630145029#editor/target=post;postID=1425355286680514633&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0647ab; font-family: inherit; font-size: 13px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Using the Back-End PHP+MySQL ( Getting Started )&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;donde mostramos con mayor detalle el contenido de cada componente del codelab, aunque en esa oportunidad, las mostramos para instalar y hacer funcionar este proyecto sobre el entorno de desarrollo de Appserv ( servidor Apache+ PHP+ MySQL), pero cuyos conceptos, como ya hemos indicado, son completamente compatibles para utilizarlos sobre este entorno de desarrollo de WebMatrix, por cuanto, de dicha plataforma, en esta oportunidad solo estamos utilizando al servidor IIS &amp;nbsp;y el lenguaje PHP instalado sobre ella... y el funcionamiento del servidor IIS es similar al del servidor Apache para este caso, por cuanto no estamos utilizando ningún código ASP.Net ó C# asociado a dicho entorno.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link02();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Wizard-sample.rar,&lt;/b&gt;&amp;nbsp;que corresponde a nuestro codelab &lt;b&gt;&quot;Temas de Seguridad y Wizards (acceso)&quot; &lt;/b&gt;referidos al Back-End PHP+ MySQL,&amp;nbsp;&amp;nbsp;donde mostramos los fundamentos para empezar a diseñar nuestros sistemas y proyectos tomando en consideración pantallas de acceso (Wizards) y revisando que opciones de seguridad debemos empezar a considerar en ellos. Este codelab hace referencia a como poder acceder (ó restringir el acceso a usuarios no autorizados) a nuestro modelo CRUD del codelab anterior, y para ello hace uso de los datos registrados en la tabla usuarios creada al importar pdtes_usa.sql sobre la base de datos &quot;tutorial&quot; ya creadas.&lt;br /&gt;
&lt;br /&gt;
Para este codelab en la base de datos &lt;b&gt;Tutorial &lt;/b&gt;debemos agregar manualmente la tabla &lt;b&gt;usuarios &lt;/b&gt;que debe tener como&amp;nbsp;mínimo&amp;nbsp;los campos: &lt;b&gt;ID&lt;/b&gt; (int, primary key e auto-incremental(, &lt;b&gt;usuario&lt;/b&gt;, varchar(15); y &lt;b&gt;password&amp;nbsp;&lt;/b&gt;también&amp;nbsp;varchar(15)... y allí indicar los valores de nuestro usuario y password de acceso (passer, passer por ejemplo). Las generalidades de configuración y conexion a la base de datos Tutorial los podemos observar al inicio del archivo index.php (donde nos conectamos a la base de datos mediante mysql_connect y mysql_select_db), y a partir de la línea 242, donde se verifica que nuestro nombre de usuario y password se encuentren registrados en la tabla &lt;b&gt;usuarios.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Using the Back-End PHP+MySQL (Wizard and safety themes) corriendo sobre WebMatrix :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-wizard-safety.html&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;280&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3KtWAaZg28tZw5bsX8Iih8ef7KWFJKTR8KXGIKZjSHTrjXA3eZ0Edu6-Ps7qHoJjk8yNPD6lpnam0r9dhLCE3HrN4N5KCCD0tLGguMgbP4G_zEnmcxoDyYRNXGmW9AS9-ECYQdwbYx84L/s400/Wizard-sample.JPG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; title=&quot;Go to Wizard-sample Codelab..&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
Pueden también revisar nuestra entrada&amp;nbsp;&lt;b&gt;:&lt;/b&gt;&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff9e7; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px;&quot;&gt;&lt;a class=&quot;GA10RCSOB&quot; href=&quot;http://www.blogger.com/blogger.g?blogID=7521149585630145029#editor/target=post;postID=6913892482410064261&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0647ab; cursor: pointer; font-family: inherit; font-size: 13px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Using the Back-End PHP+MySQL ( Wizard &amp;amp; Safety themes)&amp;nbsp;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;donde mostramos con mayor detalle el contenido de cada componente de este interesante codelab, y en que se detallan una de la principales formas de uso del lenguaje PHP en lo que respecta al manejo de base de datos, cookies y enlace entre diferentes páginas PHP.. y por supuesto, como ya hemos indicado, este proyecto lo podemos correr desde WebMatrix ó desde el entorno de desarrollo de Appserv, como ya hemos indicado...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link03();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; width: 12px;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Int-Google03.rar,&lt;/b&gt;&amp;nbsp;que corresponde a nuestro codelab &lt;b&gt;&quot;Integracion Google 3ra parte&quot;&lt;/b&gt; referidos al Back-End PHP+ MySQL, donde mostramos los fundamentos para empezar a diseñar nuestros sistemas y proyectos tomando el consideración el enfoque de uso que nos ofrece ExtJs (uso de un menu TreePanel, al que se accede por una pantalla de acceso Wizard, y de manejo de stores y la forma de conexión utilizando &amp;nbsp;PHPa la base de datos MySQL, lo que finalmente nos permiten acceder a las diferentes visualizaciones &amp;nbsp;Google y ExtJs que hemos venido presentando en nuestros codelabs, incluyendo en esta oportunidad, al Modelo CRUD de Mantenimiento de listado de presidentes que hemos utilizado en los dos codelabs anteriores que forman parte de esta entrega.&lt;br /&gt;
&lt;br /&gt;
Este ejercicio trabaja con las bases de datos &lt;b&gt;IGCodelab &lt;/b&gt;contenidos en &lt;b&gt;igcodelab.sql&lt;/b&gt; (datos de productos de belleza), y la base de datos &lt;b&gt;Tutorial &lt;/b&gt;(donde tenemos registrados a los presidentes USA contenidos en &lt;b&gt;pdtes_usa.sql&lt;/b&gt;). Pero en esta oportunidad, el nombre y password del usuario para acceder al Modulo son los contenidos en la tabla &lt;b&gt;usuarios &lt;/b&gt;de la base de datos &lt;b&gt;IGCodelab&lt;/b&gt;. Los datos que&amp;nbsp;conexión&amp;nbsp;a la base de datos IGCodelab, y la grabación de cookies empleadas a lo largo del modulo, son detalladas en &lt;b&gt;drivers.php&lt;/b&gt;, y el chequeo del usuarios se detalla en &lt;b&gt;database.php&lt;/b&gt; en la&amp;nbsp;función&amp;nbsp;getuser(), a partir de la linea 63 del&amp;nbsp;código.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Integracion Google 3ra. Parte corriendo sobre WebMatrix :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/04/integracion-google-3ra-parte.html&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;280&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHLzsFwLarnqdfhgm0CbKJjwiH_Sy7f8Ezf88RBKvsRXrp5Z1KTxRCtepO2avar8LFBiU-AADOlYNEYfg2jkHJ7Q2D5gdAto7c9WSd3RA3mIjit-ggd_0SdcZh51UovECKBrHw40YMaFIZ/s400/Int-Google03b.JPG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; title=&quot;Go to Int-Google03 Codelab..&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pueden también revisar nuestra entrada&amp;nbsp;&lt;b&gt;:&amp;nbsp;&lt;/b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff9e7; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 13px;&quot;&gt;&lt;a class=&quot;GA10RCSOB&quot; href=&quot;http://www.blogger.com/blogger.g?blogID=7521149585630145029#editor/target=post;postID=8263314742378102621&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #0647ab; cursor: pointer; font-family: inherit; font-size: 13px; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 10px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline; vertical-align: baseline;&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Integracion Google (3ra parte)&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;donde mostramos con mayor detalle el contenido de cada componente del codelab...&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;NOTA:&lt;/b&gt;&lt;/span&gt; los ejercicios funcionan sin mayor problema tal como los presentamos, pero para los codelabs Grid-MySQL e Int-Google03, como podrá verificar, los archivos *.php involucrados utilizan codificación &lt;b&gt;ANSI&lt;/b&gt;, aún cuando lo recomendado cuando trabajemos en nuestros proyectos web es que como norma todos nuestros archivos sean construidos con la codificación &lt;b&gt;UTF-8&lt;/b&gt;.... Ocurre que cuando se trabaja con &lt;b&gt;cookies &lt;/b&gt;(como es el caso de estos codelabs), puede haber restricciones para el uso de la función setcookie(), por cuanto PHP por defecto, restringe las salidas del buffer del servidor luego que se haya cargado o ejecutado algun script HTML... (puede revisar la &lt;a href=&quot;http://www.php.net/manual/es/function.setcookie.php&quot; target=&quot;_blank&quot;&gt;documentación&lt;/a&gt; al respecto): y en el caso de los dos codelabs mencionados, como puede&amp;nbsp;fácilmente&amp;nbsp;observar, por la forma en que se encuentran construidos los ejercicios, primero se cargan a los archivos index.html, y luego durante el proceso se invoca a los respectivos archivos *.php para interactuar con la base de datos MySQL. Esta restricción puede superarse convirtiendo a codificación ANSI los archivos *.php que invocan a las funciones setcookie(), o configurando nuestro archivo PHP.ini, indicando a la directiva: &amp;nbsp;&lt;b&gt;output_buffering=on&lt;/b&gt; (su valor por defecto es &lt;b&gt;off&lt;/b&gt;).&lt;br /&gt;
&lt;br /&gt;
La documentación no indica al detalle la causa de esta salvedad pero pueden verificar - utilizando Firebug de Firefox para hacer sus pruebas - que al convertir los archivos *.php del &lt;b&gt;proyecto Int-Google03&lt;/b&gt;&amp;nbsp;a codificación UTF-8 (utilizando notepad++ u otro editor), y en especial al archivo drivers.php que se utiliza primero para la grabación de los cookies, este arroja &amp;nbsp;por la consola de inspección el warning : &quot;Cannot modify header information - header alreaqdy sent by..&quot;,.y nos indica las líneas de nuestras instrucciones setcookies(); y por supuesto, no funciona la carga de datos, o mas propiamente dicho, se bloquea la salida de datos desde el buffer del servidor, aún cuando la información haya sido &quot;capturada&quot;...&lt;br /&gt;
&lt;br /&gt;
Este impase, como hemos indicado, se soluciona al convertir nuevamente a &lt;b&gt;ANSI &lt;/b&gt;nuestro archivo drivers.php... o&amp;nbsp;también&amp;nbsp;podemos reconfigurar nuestro &lt;b&gt;PHP.ini&lt;/b&gt; en la directiva: output_buffering=on, y en este ultimo caso, aún cuando nuestros archivos PHP sean codificados UTF-8 si se&amp;nbsp;permitirá&amp;nbsp;la &quot;salida&quot; de la información y el ejercicio funcionará sin inconvenientes.&lt;br /&gt;
&lt;br /&gt;
Lo indicado anteriormente ocurre al trabajar con un servidor Apache en una plataforma LAMP o WAMP, pero &lt;u&gt;cuando trabajamos con WebMatrix NO ocurren estos problemas&lt;/u&gt;, y es indiferente que nuestros archivos *.php sean codificados UTF-8 ó ANSI, pero como siempre, para nuestros proyectos, debemos verificar su funcionamiento antes de su &amp;nbsp;puesta en producción para evitar contratiempos.&lt;br /&gt;
&lt;br /&gt;
Saludos&lt;/div&gt;
@Mlaynes&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-using-php-on-iis-server.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/779175141259187503/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/10/webmatrix-using-php-on-iis-server.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/779175141259187503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/779175141259187503'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/10/webmatrix-using-php-on-iis-server.html' title='WebMatrix : Using PHP on IIS Server'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit7PSnpvMfjcd1d3zeACqCfi6chMTU9_G3x4TiBtuHpQTvjZTy-nyxxH2MYvwwUiHDFVC_rwucMImdCMD88x5jx9QbFmySrvAGIRa-wbHQT6HFp3Xr1iYKXCLJLKxN0JJ-cE2mqliwdxNF/s72-c/php.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-8948131370723533538</id><published>2011-10-02T18:20:00.000-05:00</published><updated>2017-02-26T11:33:48.709-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><category scheme="http://www.blogger.com/atom/ns#" term="webmatrix"/><title type='text'>WebMatrix: la plataforma opensource de Microsoft para Desarrollo Web</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login wait a few seconds and try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    /*
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
    */
      window.open(w_url,&quot;_blank&quot;);
    /*
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    */
    return(w_url);
  };
  function my_link01() {
    //int-Google01.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEODAxM2ZlODAtOGMzMC00YzIzLThlNjgtMDc1MzAwOWQyNTg2&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //int-Google02.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEODEwNmY0N2UtMjlhNy00OGFmLWJlNjMtNWQ0NjU2ZmQ4YjM1&quot;;
    my_link(w_link);
  };
  function my_link03() {
  //ActiveVFP.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEMmE5MzRmNmUtNjEwMC00NmQwLWIwZjktOTEzNDE1MzMxY2Mw&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
  function my_link05() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEUC1kWFpEcmZVVnM&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://www.microsoft.com/web/webmatrix/&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh65OH5csVCCJJEx2tie4GQmuNmL_tF3NpgFpvrOF9xem8kx9gQtsJsKdfbOZW6G5uV2puzn8PkJvzzSHh3wOf2_FFZAPxXmjcPr89uWMmP3LApha2YYdYMwWYA_DXFKqIqTDzXFCXnhThP/s1600/webmatrix.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
...y continuando con nuestra investigación de los diferentes entornos de Desarrollo Web y uso de la Tecnología Google, junto a mis labores habituales de consultor, analista y desarrollador de sistemas y soluciones informáticas ( y de cloud computing en general ); en la practica, ya había dejado de lado al mundo &quot;Microsoft&quot; para lo que es Desarrollo Web, aún cuando en muchas de las soluciones cliente-servidor que he desarrollado e implementado he utilizado bastante Foxpro y VFP, habiendo incursionado tambien en C++, Clipper, FiveWin, PowerBuilder; y en los proyectos Harbour, X-Harbour para desligarnos algo del mundo Microsoft, trabajando con base de datos externas como MySQL principalmente e instaladas incluso sobre servidores Linux para que el deslinde fuese más notorio aún...&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt; :-/)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;; y es que en realidad realmente siempre había considerado al entorno de desarrollo Web de Microsoft, y a su servidor IIS en particular, como algo demasiado amarrado a Windows (una versión de IIS según cada versión Windows que lanzaban..), y por supuesto,&amp;nbsp;a sus propias herramientas de Desarrollo Web como&amp;nbsp;Visual Studio, Web Developer, etc. &amp;nbsp;...demasiado amarre al mundo Microsoft para mi gusto.. y por supuesto, bastante desligado de los principales proyectos opensource y GPL propios del mundo de Desarrollo Web...
&lt;P&gt;
pero debo reconocer que Microsoft me ha sorprendido con el lanzamiento de WebMatrix 2.0 beta; y ahora ultimo, a finales de junio 2012 liberó WebMatrix versión 2.0 Release Candidate que tiene como importante novedad que, aparte de ASP.Net y PHP, integra como lenguajes de desarrollo a NodeJS :
&lt;/P&gt;
&lt;P&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://www.microsoft.com/web/webmatrix&quot; target=&quot;_links&quot;&gt;http://www.microsoft.com/web/webmatrix&lt;/a&gt;
&lt;/P&gt;
&lt;P&gt;
con &lt;b&gt;Microsoft WebMatrix&lt;/b&gt; todas las principales herramientas opensource del mundo de Desarrollo Web, y también las &quot;opensource&quot; que ha &quot;liberado&quot; Microsoft, son integradas en un entorno de trabajo bastante apropiado para hacer Desarrollo Web.. y ahora, al igual que cuando se trabaja con un servidor Apache con PHP y MySQL (Appserv, Xamp, Wamp, etc)... Microsoft ha integrado IISExpress, SQLServer Compact, ASP.Net, C#, &amp;nbsp;e incluso a PHP en una &quot;plataforma&quot; de desarrollo bastante interesante (y ahora tambien noeJS como ya hemos indicado); debiendo tener en cuenta que, al considerar a PHP en su entorno de trabajo, WebMatrix nos permite integrarnos tambien a servicios sociales y de gestión de contenidos, muy&amp;nbsp;difundidos como Wordpress, Joomla, Drupal, etc. ..y debo reconocer que el resultado impresiona bastante&amp;nbsp; ..y hasta ofrecen servicio de Hosting desde US$1.67 mensual para alojar en la nube nuestros desarrollos directamente desde esta plataforma... como para tomar en cuenta...
&lt;/P&gt;
&lt;P&gt;
En el propio tutorial de la pagina oficial de WebMatrix - que es bastante detallado - nos muestra como hacer paginas web dinámicas muy fácilmente utilizando la base de datos SQLServer Compact incorporada al proyecto ( y por supuesto que es posible conectarse a otras bases de datos como mySQL, Postgress, SQLServer, etc. recurriendo al código PHP que es el más utilizado para dicho efecto); y presenta como novedad: la&lt;b&gt; sintaxis Razor&lt;/b&gt;, que nos muestra como utilizar código ASP totalmente integrado a HTML y CSS para lograr páginas dinámicas incluso sin recurrir al manejo de una base de datos ...realmente interesante &amp;nbsp;y para tomar en serio...&lt;br /&gt;
...como un miembro más de la comunidad del zorro (Visual Foxpro ó VFP), que aún utiliza esa plataforma para desarrollos de escritorio, pues vale mencionar que manejar un servidor Web IIS es &amp;nbsp;nuestra puerta de entrada para poder instalar&amp;nbsp;&lt;a href=&quot;http://activevfp.codeplex.com/&quot; target=&quot;_links&quot;&gt;ActiveVFP&lt;/a&gt; fácilmente y sin muchas complicaciones ( y poder utilizar VFP como Back-End ), lo que era un obstáculo algo difícil de superar. &lt;b&gt;ActiveVFP&lt;/b&gt; que es una herramienta free y opensource ya con varios años de desarrollo y soporte, permite el uso de código VFP, incluso de la versión 9.0, por el lado del servidor, vale decir, como hemos mostrado a lo largo de este proyecto, que nos permite utilizar comandos VFP y variables de dicho entorno, dentro de una etiqueta adecuada, la que podemos incrustar en nuestros códigos HTML, y así poderlas utilizar en nuestras páginas y desarrollos Web &amp;nbsp;.. es realmente un camino abierto para poder integrar nuestros desarrollos VFP al mundo Web utilizando la lógica, los códigos y las bases de datos y tablas con que hemos desarrollado &amp;nbsp;nuestros sistemas y proyectos con VFP.&lt;br /&gt;
...retomando el tema,&lt;b&gt; WebMatrix&lt;/b&gt; es un entorno de Desarrollo Web que puede instalarse independientemente de la versión de Windows que tengamos instalado en nuestro ordenador, como a nuestro criterio siempre debió haber sido, aunque aún creo que es demasiado pedirle a Microsoft que pueda ser instalado incluso en otras plataforas como Linux, Unix, Mac, etc; (pero eso lo convertiría en un verdadero proyecto opensource). WebMatrix, puede ser instalado en equipos con Windows XP service pack 3 en adelante;, aparte de las herramientas mencionadas (servidor IIS, base de datos SQLServer compact, y lenguajes ASP.Net y PHP, y que por supuesto también reconoce HTML, CSS,y Javascript), viene integrado a un editor bastante practico (que pueden mejorar), pero lo que resulta interesante es el manejo interno que hace lograndose una configuración correcta de nuestros proyectos; y así, como cuando hemos utilizado Netbeans en el &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/09/using-back-end-javamysql-el-proyecto.html&quot;&gt;&lt;b&gt;entorno de desarrollo Java-Tomcat&lt;/b&gt;&lt;/a&gt; se nos facilita la construcción, prueba y lanzamiento de nuestros proyectos; con WebMatrix sucede algo similar, y no tendremos que preocuparnos en la configuración de nuestros &quot;context path&quot; ni del manejo de servidores virtuales para construir y lanzar nuestros proyectos, incluyendo la &quot;bajada&quot; y &quot;subida&quot; a nuestro servicio de hosting externo (como se realiza con Dreamweaver por ejemplo); y al hacer nuestras pruebas, podemos incluso seleccionar el navegador por el cual lanzar nuestro proyecto y observar su resultado...
&lt;/P&gt;
&lt;P&gt;
Cabe reiterar asimismo que el tutorial que acompaña a WebMatrix está bastante detallado y muestra en pocos pasos y con casos prácticos el manejo de la plataforma y de sus componentes (HTML, CSS, ASP.Net, conexión a base de datos, etc. lo que podría constituirse en una nueva puerta de ingreso al mundo de Desarrollo Web que vale considerar ...diferente al convencional que hemos planteado en este nuestro proyecto &lt;b&gt;Integración Google,&amp;nbsp;&lt;/b&gt;&amp;nbsp;(puede revisar el &lt;a href=&quot;http://mlaynessanchez.blogspot.com/&quot; target=&quot;_links&quot;&gt;&lt;b&gt;Home&lt;/b&gt;&lt;/a&gt; de nuestro proyecto), debiendo resaltar que resulta necesario tener también una visión completa de lo que significa y abarca el mundo de Desarrollo Web ( si no queremos quedarnos exclusivamente con las herramientas Microsoft ), lo que podemos lograr dando una re-lectura a nuestra entrada &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_links&quot;&gt;empezando desde cero&lt;/a&gt; que planteamos al iniciar nuestro proyecto...y asimismo también, a los conceptos que hemos venido tocando a lo largo de su desarrollo..
&lt;/P&gt;
&lt;BR/&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;http://www.microsoft.com/web/webmatrix/features.aspx&quot; target=&quot;_links&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;275&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;http://www.microsoft.com/web/media/hmbanner/sayhello/main-family-img.jpg&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; title=&quot;Go to the official website of WebMatrix ..&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: large; font-weight: bold; line-height: 25px;&quot;&gt;Contenido del tutorial WebMatrix (pagina oficial)&lt;/span&gt;
&lt;/P&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; line-height: 1.6em; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 7px; padding-left: 0px; padding-right: 0px; padding-top: 7px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/web/post/web/post/Web-Development-101-Part-1-Getting-Started-with-WebMatrix&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; color: #1e85be; cursor: pointer; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_links&quot;&gt;Part 1&lt;/a&gt;&amp;nbsp;introduces you to WebMatrix and how you can install and use it.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;
&lt;!-- br / --&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; line-height: 1.6em; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 7px; padding-left: 0px; padding-right: 0px; padding-top: 7px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/web/post/web/post/Web-Development-101-Part-2-Create-your-first-Web-Page&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; color: #1e85be; cursor: pointer; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_links&quot;&gt;Part 2&lt;/a&gt;&amp;nbsp;teaches you how to create your first Web Page using WebMatrix.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;
&lt;!-- br / --&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; line-height: 1.6em; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 7px; padding-left: 0px; padding-right: 0px; padding-top: 7px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/web/post/web/post/Web-Development-101-Part-3-Getting-some-style&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; color: #1e85be; cursor: pointer; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_links&quot;&gt;Part 3&lt;/a&gt;&amp;nbsp;gets you started with CSS and style sheets so you can make your page more beautiful.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;
&lt;!-- br / --&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; line-height: 1.6em; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 7px; padding-left: 0px; padding-right: 0px; padding-top: 7px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/web/post/web/post/Web-Development-101-Part-4-Using-Layout&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; color: #1e85be; cursor: pointer; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_links&quot;&gt;Part 4&lt;/a&gt;&amp;nbsp;teaches you layout and how you can use layout in WebMatrix for common code across your pages.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;
&lt;!-- br / --&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; line-height: 1.6em; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 7px; padding-left: 0px; padding-right: 0px; padding-top: 7px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/web/post/web/post/Web-Development-101-Part-5-Using-Data&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; color: #1e85be; cursor: pointer; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_links&quot;&gt;Part 5&lt;/a&gt;&amp;nbsp;is all about data, where you’ll learn how to use a database in your web page, and make it more dynamic.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;
&lt;!-- br / --&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; line-height: 1.6em; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 7px; padding-left: 0px; padding-right: 0px; padding-top: 7px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/web/post/web/post/Web-Development-101-Part-6-Creating-an-Add-Data-page&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; color: #1e85be; cursor: pointer; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_links&quot;&gt;Part 6&lt;/a&gt;&amp;nbsp;shows you how to build a page that allows your users to add data to your database, so your site can render it.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;
&lt;!-- br / --&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; line-height: 1.6em; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 7px; padding-left: 0px; padding-right: 0px; padding-top: 7px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/web/post/web/post/Web-Development-101-Part-7-Creating-an-Edit-Data-Page&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; color: #1e85be; cursor: pointer; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_links&quot;&gt;Part 7&lt;/a&gt;&amp;nbsp;builds on this to show you how you can have a page to&amp;nbsp;&lt;em style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;edit&lt;/em&gt;&amp;nbsp;your database, and see the changes updated automatically.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;
&lt;!-- br / --&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; line-height: 1.6em; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 7px; padding-left: 0px; padding-right: 0px; padding-top: 7px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/web/post/web/post/Web-Development-101-Part-8-Creating-a-Delete-Data-page&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; color: #1e85be; cursor: pointer; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_links&quot;&gt;Part 8&lt;/a&gt;&amp;nbsp;finishes off the application by showing you how to create a delete page for your data&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;
&lt;!-- br / --&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; font-family: inherit; font-size: 11px; font-style: inherit; line-height: 1.6em; margin-top: 1em; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 7px; padding-left: 0px; padding-right: 0px; padding-top: 7px; vertical-align: baseline;&quot;&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/web/post/web/post/Web-Development-101-Part-9-Deploying-your-site&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-style: initial; border-top-width: 0px; color: #1e85be; cursor: pointer; font-family: inherit; font-style: inherit; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;&quot; target=&quot;_links&quot;&gt;Part 9&lt;/a&gt;&amp;nbsp;shows you how to publish your site to the internet using WebMatrix.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4b4b4b; font-family: Verdana, Tahoma, Helvetica, Arial, sans-serif; line-height: 11px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;
&lt;!-- br / --&gt;
&lt;/div&gt;
&lt;div style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;&quot;&gt;
&lt;/div&gt;
&lt;P&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nota : &lt;/span&gt;&lt;/b&gt;solo se requiere que tengamos una buena maquina para que no se pierda rendimiento (el entorno Java y de Netbeans también lo requiere, y es un apunte que olvidé detallar en su debido momento),  y también se requiere un poco de paciencia pues el proceso de instalación e WebMatrix me parece algo largo comparado con instalar un servidor AppServ u otro similar (especialmente si no tenemos instalado ninguna herramienta de desarrollo web de Microsoft) ...pero no se necesita tener pre-instalado nada previo y todo el proceso esta automatizado, como cuando instalamos programas con la herramienta &quot;Google Pack&quot;, que indicamos en nuestra entrada &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/herramientas-para-desarrollo.html&quot; target=&quot;_links&quot;&gt;herramientas para Desarrollo Web&lt;/a&gt; ); y luego, una vez instalada la plataforma, &amp;nbsp;podemos continuar con cada uno de los pasos del tutorial indicado, &amp;nbsp;...hacer nuestras pruebas ...y refrescar e incrementar nuestros conocimientos básicos y del entorno del Back-End ASP.Net y SQLServer compact. ...planteado así, creo vale la pena darle una mirada a este entorno de Microsoft...&lt;/P&gt;
&lt;div id=&quot;instalando&quot;&gt;
&lt;/div&gt;
&lt;P&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Instalando nuestros proyectos Integracion Google 1ra y 2da Parte sobre WebMatrix:&lt;/span&gt;&lt;/b&gt;&lt;br/&gt;
(Una vez instalado WebMatrix en nuestro ordenador)&lt;/P&gt;
&lt;P&gt;
Nuestros proyectos Integración Google &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_links&quot;&gt;1ra.&lt;/a&gt; y &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_links&quot;&gt;2da.&lt;/a&gt; han sido desarrollados exclusivamente con HTML y Javascript ( recuerde que ExtJs es un &quot;framework&quot; de Javascript, vale decir una extensión o mejora pero hecha en código javascript), por lo que para que corran sobre WebMatrix no requieren mayor preparación sino estar completos (tal como se cargarían a la Web a través de un servicio de Hosting)&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 12px; margin: 05px 15px 0px 0px; width: 12;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle-01.rar,&lt;/b&gt; que nos muestra Visualizaciones Google sobre ExtJs (versión Ext-3.4.0 en este caso) correspondiente a dicho codelab, para cargarlo como un Sitio Web de WebMatrix. Pueden revisar nuestra entrada&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot;&gt; Integracion Google 1ra parte&lt;/a&gt; para mayores detalles.del ejercicio..en ese caso, corriendo sobre un servidor &quot;convencional&quot; Apache (instalado con Appserv)&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 12px; margin: 05px 15px 0px 0px; width: 12;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle-02.rar,&lt;/b&gt; que nos muestra Visualizaciones Google y ExtJs de nuestro documento &quot;Spreadsheet Productos&quot; correspondiente a dicho codelab (adjuntamos también nuestro modelo de hoja de calculo en formato &quot;xls&quot; para que puedan realizar sus pruebas con un documento propio que puedan modificar o acondicionar a sus necesidades, cargando por supuesto este archivo a Google Docs)... Pueden revisar nuestro codelab &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot;&gt;Integracion Google 2da. parte&lt;/a&gt; para mayores detalles de este ejercicio como en el caso anterior descrito.&lt;/div&gt;&lt;/P&gt;
&lt;P&gt;


&lt;p&gt;
&lt;h1&gt;&lt;span style=&quot;color:red;&quot;&gt;&lt;b&gt;NOTA IMPORTANTE : &lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;/p&gt;
&lt;p&gt;Resulta que el sistema de autorización &quot;AuthSub for JavaScript&quot; de Google ya no se encuentra disponible (pueden revisar el siguiente &lt;a href=&quot;https://developers.google.com/gdata/docs/js-authsub&quot; taregt=&quot;_links&quot;&gt;enlace&lt;/a&gt;), por lo que nuestro botón &quot;Login&quot; de nuestro codelab no permite el acceso a nuestro ejercicio; asimismo, la documentación de Google nos recomienda que utilicemos ahora &quot;OAuth 2.0 for client-side applications&quot;, vale decir, tendremos que utilizar&amp;nbsp;&lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_links&quot;&gt;Google API Javascript Client&lt;/a&gt;&amp;nbsp;para poder acceder a nuestras aplicaciones (u otra API cliente según la plataforma back-end que utilicemos, tal como PHP, Java, .NET, entre otros), pero en nuestro caso, como solo estamos trabajando aplicaciones por el lado del cliente, tendremos que recurrir a la librería cliente para Javascript indicada.
&lt;/p&gt;
&lt;p&gt;Por lo que, mientras adecuamos nuestro código, resulta conveniente que NO CONSIDEREN el proceso de acceso a la aplicación de la siguiente manera:
&lt;blockquote&gt;&lt;span class=&quot;notranslate&quot;&gt;
 function activando(auth) {&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;var c = Ext.getCmp(&#39;center&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:red;&quot;&gt;//google.accounts.user.login(&#39;http://www.google.com/m8/feeds/&#39;);&lt;/span&gt;&lt;br/&gt; 
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:blue;&quot;&gt;auth = true;&lt;/span&gt;&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.update(&#39;&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;if (auth) { &lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vistree.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;};&lt;br/&gt;
 };&lt;br/&gt;
&lt;br/&gt;
within from : MenuGVisualization_01.js / MenuGVisualization_02.js where appropiate!&lt;br/&gt;
&lt;/span&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;div id=&quot;oauth20&quot;&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;h1&gt;&lt;span style=&quot;color:darkBlue;&quot;&gt;&lt;b&gt;TRABAJANDO CON OAUTH 2.0 : &lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;
&lt;p&gt;por supuesto, a la brevedad actualizaremos todos nuestros códigos para que trabajen con el protocolo &lt;b&gt;OAuth20&lt;/b&gt;, y les presentamos en esta oportunidad el código y su demo de nuestro codelab que hemos cargado a la plataforma GAE (Google App Engine), pero que usted también puede probar en su servidor local de pruebas utilizando el SDK para Java de Google App Engine..
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle01-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle01-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)
&lt;/p&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link05();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle01-OAuth20.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 3.05Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro codelab pero adecuado al protocolo OAuth version 2.0, utilizando la &lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_links&quot;&gt;&quot;Google API Javascript Client&quot;&lt;/a&gt;, la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle02-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle02-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)
&lt;/p&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link06();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle02-OAuth20.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 3.20Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro codelab pero adecuado al protocolo OAuth version 2.0, utilizando la &lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_links&quot;&gt;&quot;Google API Javascript Client&quot;&lt;/a&gt;, la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.
&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;
&lt;/span&gt;Es importante indicar que la documentación de Google nos indica que ahora debemos trabajar con OAuth 2.0 que se esta convirtiendo en el estándar de autenticación y autorización para acceder a nuestras cuentas y poder utilizar todas las API de Google, por ello hemos adecuado nuestro codelab a dicho estándar debiéndose tener en cuenta lo siguiente:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Crear un nuevo proyecto en el &lt;a href=&quot;https://code.google.com/apis/console/&quot; target=&quot;_links&quot;&gt;Google API Console&lt;/a&gt;, con el nombre mas adecuado que queramos &lt;/li&gt;
&lt;li&gt;Crear una &quot;OAuth 2.0 Client ID&quot; en la opción &lt;b&gt;API Access&lt;/b&gt; de la consola.. allí podremos indicar el nombre de nuestra aplicación y la URL de un logo que la represente ..a continuación debemos indicar el tipo de nuestra aplicación (&quot;web application&quot; en nuestro caso), y la URL de nuestra aplicación (acepta http://localhost ó http://localhost:8080, indicando en lugar del puerto 8080 el que nos indique que va utilizar WebMatrix para desplegar nuestro proyecto, debiendo resaltar que la plataforma WebMatrix permite que modifiquemos el puerto en su opción configuración de cada proyecto.. y que conviene que para hacer nuestras pruebas, utilicemos el mismo puerto por lo menos para nuestros proyectos WebMatrix que requieran el uso de APIs de Google (y así no estar creando diferentes proyectos en la consola por cada uno de ellos), asimismo para trabajar con la plataforma WebMatrix debemos verificar que se elija correctamente el protocolo &lt;b&gt;&quot;http ó https&quot;&lt;/b&gt; que utilizaremos (generalmente &quot;http&quot;), y la ruta completa de acceso a nuestra aplicación, que en este caso será http://localhost:xxxx (el puerto utilizado), para que todo funcione correctamente; por lo que al crear nuestra &lt;b&gt;API Access&lt;/b&gt; se nos indicará la carpeta &quot;Redirect URI&quot; donde se realizará el proceso de autenticación y autorización OAuth 2.0 solicitado (si no ha sido creada debemos editar la configuración y registrar manualmente la carpeta donde se realizará el proceso, puede ser cualquiera dentro de &quot;www&quot; o crear la carpeta &quot;oauth2callback&quot; indicada)..   &lt;/li&gt;
&lt;li&gt;..y finalmente, en la misma &quot;Google API Console&quot; debemos seleccionar a la opción &quot;Services&quot; y activar la &lt;span class=&quot;notranslate&quot;&gt;&quot;Google+ API&quot;&lt;/span&gt; (debe estar &quot;ON&quot; y de color verde), lográndose con ello finalmente crear nuestra &quot;API key&quot; en forma automática.&lt;/li&gt;
&lt;li&gt;y todo ya está listo! ..ahora al volver a la opción &quot;API Access&quot; de nuestra aplicación, ya tendremos disponible nuestro &quot;Client ID&quot; y la &quot;API Key&quot; (dentro de &quot;Simple Access API&quot;), estos datos son las que debemos utilizar y reemplazar en el archivo &quot;index.html&quot; de nuestra aplicación para que todo pueda funcionar correctamente.&lt;p&gt;Conviene también revisar las diferentes opciones que nos presenta la &quot;Google API Console&quot; pues nos puede ser necesarias como crear, modificar, renombrar, eliminar proyectos principalmente.&lt;/p&gt;
&lt;/li&gt;
&lt;p&gt;
&lt;li&gt;&lt;b&gt;..y ahora a probar nuestra aplicación IntGoogle01-Oauth20 e IntGoogle02-Oauth20 sobre WebMatrix !&lt;/b&gt;&lt;/li&gt;
&lt;/p&gt;
&lt;li&gt;y una ultima indicación.. Como estamos trabajando con la Google Maps API v2, tenemos que activar el servicio &quot;Google Maps API v2&quot; en la API consola, y registrar nuestra &lt;b&gt;API Key&lt;/b&gt; al importar la API en nuestro proyecto antes de subirlo a un servicio de hosting con un dominio personalizado y así puedan funcionar los mapas de nuestro proyecto sin mayores inconvenientes (aunque la Google Maps API v2 solo estará activa hasta Marzo 2013, por lo que debemos programar nuestras actualizacion a la API v.3)..por supuesto, al trabajar con nuestro servidor local &lt;b&gt;&quot;localhost&quot;&lt;/b&gt; no se presentan problemas.. el asunto es, como indicamos, al cargar nuestros proyectos a un servicio de hosting externo cualquiera.. como la plataforma GAE (Google App Engine), que es el caso de nuestra demo)
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt9CCbbmHovkXVU333kquj3_txRXMEVz6UsSlIMjjr5KUXPHydoChOTwoDMlOITrkK428TDwo8ljyrv7nuZh6iQrfJfyAnoCIyIZx9_mCNywGYsB2pUsHvStWGHhzTKl277MtAC89B0hm3/s400/Oauth20-0A.jpg&quot; /&gt;
&lt;/div&gt;

&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;280&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4_ttlzmsW5TC_6OyHw9qv_gat1l3_9wGwidrygs5BjcDfCnuJlBkDUnrFrwbVdJIzZ0RLNJBluMplL9g9oGHo7wTPT1SOE1_foCqfey4jxZDJY9ynIkhDeKn1SaaTLd_65yzV3Ot2f8b/s400/Oauth20-01.jpg&quot; /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br/&gt;

&lt;P&gt;
&lt;b&gt;Integracion Google Parte No.1 corriendo sobre WebMatrix :&lt;/b&gt;&lt;/P&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;280&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK9DjmiF_4SklgmRPAhSCdKZcg1s8XQbSkO8jS8N3t5L9kPDkBBdM4VFWXII9yD28Y-MdlNVloFyFdnA8CJSSwn67phZJNWdYpHvl4dlnyNnNdvNwUkvBuGVjoTt3mY9cWWVK1MdBmz1_-/s640/Int-Google01.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; title=&quot;Go to Int-Google01 Codelab..&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;P&gt;
&lt;b&gt;Integracion Google Parte No.2 corriendo sobre WebMatrix :&lt;/b&gt;&lt;/P&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;280&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin-OqXXgcytcySvW0aEVl4AlM2Nn18VM-A2fNbK6yGqHm8GFrGVTCelwosnqDhoO0ljc9YWzSZSEqwmzU1iDbIaetZlmJ1el1vQ31gX3S3TqhkOBvuCqpaofRP-rsrnSXF2XekHMLFkYHY/s640/Int-Google02_MiExtJsPanel.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; title=&quot;Go to Int-Google02 Codelab..&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;P&gt;
&lt;h1&gt;&lt;b&gt;ActiveVFP 5.5 instalado sobre WebMatrix&lt;/b&gt;&lt;/h1&gt;
&lt;/P&gt;
&lt;p&gt;
ActiveVFP es un proyecto que requiere del lenguaje ASP.Net por el lado del servidor: y su &quot;demo&quot; utilza HTML y CSS por el front, y el lenguaje ASP.Net integrado a la plataforma  WebMatrix nos permite a su vez utilizar VFP y tablas VFP como Back-End en nuestros proyectos. WebMatrix es un servidor IIS que soporta ASP.Net y C# por lo que si en nuestros proyectos requerimos ó utilizamos codigo VFP y tablas VFP, podemos entonces integrarlos y darles rápida salida a la Web como &quot;sites&quot; o proyectos WebMatrix.. El único requisito es que nuestro proyecto se presente completo tal como se cargará a la Web (incluyendo todas las librerías y complementos que lo compongan); ale decir, contener en nuestro proyecto al componente activeVFP completo.
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;a href=&quot;http://thetechconsult.com/demo/default.aspx&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;activeVFP 5.5 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;now you can test the  &lt;a href=&quot;http://thetechconsult.com/demo/default.aspx&quot; target=&quot;mydemo&quot;&gt;activeVFP 5.5.1 demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
(like a codeplex project..)
&lt;/p&gt;


&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link03();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;activeVFP 5.5.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 2.99Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro codelab para instalar el demo del proyecto activeVFP en nuestro servidor local WebMatrix.
&lt;/p&gt;&lt;br/&gt;
&lt;P&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;280&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUDyD_ECF2OdCFL5LlG1sVyQEdF3CUlETT9C1zKilH50UMXc5LfEYUlDcegdMpLdITkb7tSQaDhPGziBB3teVD1qMJx_kQdg5Dyru0rQjXPV2FuQUBQEV_yqzj3DcFJeZt2LQB90bE3EW0/s400/activeVFO_5.6.jpg&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; title=&quot;Go to ActiveVFP Project in Codeplex..&quot; width=&quot;400&quot; /&gt;
&lt;/div&gt;
&lt;/P&gt;
&lt;br /&gt;
&lt;P&gt;
&lt;b&gt;&lt;h1&gt;Pasos para instalar los Codelabs..&lt;/h1&gt;&lt;/b&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;br/&gt;
Tenemos que descargar estos proyectos en la carpeta de proyectos de WebMatrix( &quot;My Web Sites&quot; de Mis Documentos), ó en otra carpeta que creamos conveniente como C:/WebMatrix por ejemplo; se crearán 3 carpetas de nombres Int-Google01, Int-Googlw02 y ActiveVFP_5.5 (también IntGoogle01-OAuth20, intGoogle02-OAuth20 respectivamente); luego hay que cargar estos proyectos a WebMatrix; y el proceso es bastante simple, para ello, al abrir WebMatrix debemos seleccionar la opción &quot;&lt;b&gt;Sitio a partir de carpeta&quot;&lt;/b&gt;, ó en el caso que ya estemos sobre un proyecto abierto, seleccionar el botón azulino de la parte superioir izquierda (al lado de &quot;Página principal&quot;), luego  &lt;b&gt;Nuevo Sitio,&lt;/b&gt;&amp;nbsp;y allí aparece y elegimos la opción &quot;&lt;b&gt;Sitio a partir de carpeta&quot;&lt;/b&gt;;  se nos indicará que ubiquemos la carpeta que contiene nuestro proyecto (&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Int-Google01&lt;/span&gt; por ejemplo), y al seleccionarla, WebMatrix creará nuestro proyecto o &quot;website&quot;.  WebMatrix pondrá como nombre de nuestro proyecto la carpeta que estemos cargando, e internamente hará las configuraciones necesarias para que el &quot;directorio virtual&quot; y un puerto disponible sean direccionados a nuestro proyecto (&amp;nbsp;también&amp;nbsp;podemos adecuar esos datos en la opción &quot;configuración&quot; del proyecto ya cargado); luego debemos proceder a &lt;b&gt;&quot;ejecutar&quot;&lt;/b&gt; nuestro proyecto, y al seleccionar la pestaña con ese nombre, nos aparecerá una lista con los navegadores que tenemos instalado en nuestro ordenador, seleccionemos la de nuestra preferencia ...y listo... nuestro proyecto será lanzado a nuestro navegador elegido...&lt;/P&gt;
&lt;P&gt;
Debemos hacer lo mismo con nuestro proyecto &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Int-Google02&lt;/span&gt;, y con esto veremos corriendo nuestros ejercicios&amp;nbsp; (si han seguido todos los pasos de nuestro proyecto),&amp;nbsp;&amp;nbsp;hasta en 04 plataformas distintas: sobre un servidor HTTP Apache, sobre AppEngine, sobre un servidor Apache Tomcat, y ahora sobre WebMatrix; y con lo que podemos sacar como una clara conclusión - como ya habiamos indicado - que dentro del mundo Web no hay problemas de compatibilidad si trabajamos con sus elementos básicos:&amp;nbsp;refiriéndonos&amp;nbsp;a HTML, CSS y Javascript (reiteramos que ExtJs es un framework de javascript.. escrito en javascript nativo).. y con WebMatrix al ser bastante sencillo el proceso, conviene también  &quot;ejecutemos&quot; nuestros proyectos en diferentes navegadores, pues como hemos indicado desde los inicios de nuestro proyecto &lt;b&gt;Integración Google&lt;/b&gt;, a veces nuestros desarrollos no se ejecutan igual en un navegador u otro - dependiendo de la codificación javascript que utilicemos, ó la versión del framework que usemos ...cosas del mundo Web que debemos tomar en cuenta...&lt;/P&gt;
&lt;P&gt;
Deben realizar lo mismo con ActiveVFP_5.5 (que también debemos haber descargado en la carpeta de nuestra preferencia indicada, y verán en este caso, como se esperaba, que el proyecto ActiveVFP corre sin problemas en el servidor IIS Express version 7.5 en este caso que tiene anexado por el Back-End al lenguaje ASP.Net 2.0. Como una curiosidad pueden consultar la opción &quot;Acerca de&quot; de WebMatrix y verán que aún muestra los datos de la versión 1 de dicha plataforma... bueno, se supone que esta es la versión 2.0 beta, así que esperemos y estemos atentos a sus actualizaciones..&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;NOTA :&lt;/b&gt;&lt;/span&gt; el readme de ActiveVFP indica que para versión 1.0 de ASP.Net debemos registrar la librería de ActiveVFP, pero suponemos que el proceso también debe realizarse para la versión ASP.Net 2.0 - porque esa librería es externa y no pertenece a Windows - para ello; llamemos a la línea de comandos DOS ó &quot;simbolo del sistema&quot; (como prefieran llamarlo), vayamos hasta la carpeta donde hemos descargado nuestro proyecto ActiveVFP_5.5 y verifiquemos que allí se encuentre la librería &lt;b&gt;activevfp.dll&lt;/b&gt;, luego ejecutemos el comando:&lt;/P&gt;
&lt;P&gt;
&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;regsvr32 &amp;nbsp;activevfp.dll&lt;/span&gt;&lt;/b&gt;. ..y listo, ya no deberíamos tener ningún problema...&lt;/P&gt;
&lt;P&gt;
Otro punto que debemos tomar en consideración (y que debemos observar al revisar la opción &quot;configuración&quot; de nuestros proyectos), es que además del numero de puerto que WebMatrix asigna a cada una de nuestras aplicaciones - que podemos cambiar si lo deseamos - ;prestemos atención a la lista de archivos bajo el título &lt;b&gt;&quot;Administrar páginas predeterminadas&quot;&lt;/b&gt;, haciendo referencia al nombre de los archivos &quot;inicio&quot; del proyecto y que se ejecutarán automáticamente al invocarse el proyecto.. en el caso de nuestros proyectos Integración Google 1ra y 2da parte, nuestros archivos de &quot;arranque&quot; son &lt;b&gt;index.html&lt;/b&gt; (porque son proyectos web que solo involucran HTML, CSS y Javascript); y en el caso de ActiveVFP, el archivo de arranque es &lt;b&gt;&quot;default.aspx&quot;&lt;/b&gt;, que corresponde a un proyecto que contiene código y datos ASP.Net 2.0.. conviene que revisemos que estos archivos se encuentren en la lista de nuestros respectivos proyectos, caso contrario debemos agregarlos manualmente o nó arrancará el proyecto desde la pantalla del &quot;Sitio&quot; (y sería necesario ubicarnos en el archivo de inicio que queremos ejecutar y de allí ejecutar el proyecto, como cuando hemos hecho al seguir el tutorial de WebMatrix...por supuesto, si lo han seguido, caso contrario, siempre es recomendable que sigan esos tutoriales y los prueben, pues consideramos que están bastante buenos e interesantes..)&lt;/P&gt;
&lt;P&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;NOTA: &lt;/span&gt;&lt;/b&gt; No realizamos en este codelab lo mismo con nuestro proyecto:&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/04/integracion-google-3ra-parte.html&quot; target=&quot;_links&quot;&gt;Integración Google 3ra. parte&lt;/a&gt;, que describe un modelo CRUD de Mantenimiento de una tabla utilizando como Back-End el lenguaje PHP y la base de datos MySQL (con su respectiva pantalla de acceso ó &quot;wizard&quot;). y en este caso, con esta plataforma de desarrollo, no existe ningún problema respecto a trabajar con la base de datos MySQL y utilizar PHP para comunicarnos con ella (WebMatrix soporta PHP como indica su documentación y como hemos podido observar en la pantalla de configuración de nuestros proyectos), pero como la base de datos es externa a WebMatrix, y estamos recomendando esta plataforma de desarrollo de Microsoft  como una alternativa para poder iniciarnos en Desarrollo Web, pues lo haremos en nuestra siguiente entrada, para detallar con más cuidado el proceso y los conceptos involucrados...&lt;/P&gt;
&lt;br /&gt;
Saludos&lt;br /&gt;
@Mlaynes
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;


&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-la-plataforma-opensource-de.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/8948131370723533538/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/10/webmatrix-la-plataforma-opensource-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/8948131370723533538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/8948131370723533538'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/10/webmatrix-la-plataforma-opensource-de.html' title='WebMatrix: la plataforma opensource de Microsoft para Desarrollo Web'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh65OH5csVCCJJEx2tie4GQmuNmL_tF3NpgFpvrOF9xem8kx9gQtsJsKdfbOZW6G5uV2puzn8PkJvzzSHh3wOf2_FFZAPxXmjcPr89uWMmP3LApha2YYdYMwWYA_DXFKqIqTDzXFCXnhThP/s72-c/webmatrix.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Lima, Perú</georss:featurename><georss:point>-12.134755 -76.9970124</georss:point><georss:box>-12.1366955 -76.9994799 -12.1328145 -76.994544900000008</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-6942517275075374479</id><published>2011-10-02T12:51:00.000-05:00</published><updated>2013-06-26T18:33:44.063-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Using the Back-End Java+MySQL: Instalando sdsimple..</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login wait a few seconds and try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    //my-project.rar
    var w_link = &quot;https://docs.google.com/file/d/0B9R0zfbQHqoEZmIwOWMzOTktYzM2Yi00ODk0LTg2ZjQtODAyMDAwYmRiZjE1/edit&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //leeme.txt
    var w_link = &quot;https://docs.google.com/document/d/1yEjuYrSXjT-KI6OcX-zK1qRWfLINZGtdgtmv8s9y5d0/edit&quot;;
    my_link(w_link);
  };
  function my_link03() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYTQ5YzY2NWEtMmIxMi00YjZkLTliMDYtNDA3ZDE5OGQ5Y2U0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };

&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://free.hostingjava.it/-igcode/&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbfA33U_wn-zQJempLHzRRooYxdjyqeJDml8mR0EApLrwcevSRiMozbzn0y4KWTaCRmqKvEEc4rVqPf5AdbsUtauC1poTMoCF61WAa_3641KdrhsTJ4KS8v8c_NOvEltSqTPKgC-p0oF4n/s1600/sdsimple.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
...y bueno amigos, continuando con el Back-End Java(JSP)+MySQL, pero continuando con nuestra modalidad de presentación de &quot;codelabs&quot;, vamos ahora a poner la valla bien alta presentando en esta oportunidad al &lt;b&gt;proyecto sdsimple.&lt;/b&gt;&lt;br /&gt;
&lt;p&gt;
&lt;b&gt;Que es el proyecto sdsimple? &lt;/b&gt;es una aplicación administrativa desarrollado bajo la modalidad &quot;Todo a la Web&quot; bastante compacta y completa para facilitar la administración y gestión de PYMES que se distribuye bajo los términos de la &lt;a href=&quot;http://es.wikipedia.org/wiki/GNU_General_Public_License&quot; target=&quot;_blank&quot;&gt;Licencia Pública General GNU&lt;/a&gt; (tal como está publicada por la Free Software Foundation; ya sea la versión 3 de la licencia, o (según su elección) cualquier otra versión posterior). Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; incluso sin las garantías de COMERCIALIZACIÓN o USABILIDAD O UTILIDAD PARA USOS PARTICULARES... las anotaciones son las textuales indicadas por Pedro Peña García (desarrollador del proyecto), a quien de esta humilde comunidad presentamos nuestros respetos... &lt;b&gt;sdSimple&lt;/b&gt; se presenta como un sistema de facturación on-line y como la &quot;gestión eficaz de tu negocio&quot;, y en este caso vamos a precisar los alcances del proyecto sdsimple para que sepamos que tenemos entre manos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No solo es facturación, abarca compras, ventas, cobranzas, pagos y gestión de caja y bancos; que considero un modelo muy interesante y apropiado para empresas de servicios, o empresas que &quot;legalmente&quot; conforme a la legislación de cada país, por el monto de sus ventas y/o activos, no son obligadas a mantener control de Stocks ni activos (basicamente lo que conocemos como PYMES). Sdsimple no hace control de stocks -el costo de los stocks y de ventas se tendría que calcular por diferencia de inventario, como es usual y legalmente establecido para este tipo de negocios-&amp;nbsp; pero si registra los impuestos basicos involucrados en el proceso (IVA y retenciones), por supuesto todo esto depende de cada país y &amp;nbsp;puede ser suficiente, pero por poner un ejemplo, en Argentina parece existen mas impuestos y/o retenciones que considerar respecto al caso peruano, de acuerdo a solicitudes de amigos de esta comunidad que han llegado a instalar el proyecto y ponerlo en funcionamiento de acuerdo a sus necesidades.&lt;/li&gt;
&lt;li&gt;El proyecto en sí tiene soporte multiempresa, pero nos da opción a un único código de acceso a cada una de ellas, asimismo solo considera un único correlativo para la facturación y otro para las compras, vale decir, tal como esta diseñado solo soporta un&amp;nbsp;único&amp;nbsp;punto de venta y de registro; es decir, esta realmente diseñado para ser usado directamente por los administradores del negocio.&lt;/li&gt;
&lt;li&gt;No presenta un modulo de contabilidad pero por supuesto que conociendo al detalle el modo de funcionamiento del sistema, y las bases de datos que la componen (las que son intuitivamente identificables), pues podría&amp;nbsp;fácilmente&amp;nbsp;enlazar a una aplicación contable..&lt;/li&gt;
&lt;li&gt;Esta desarrollado utilizando como Back-End Java(JSP) + MySQL, y por el front utiliza ExtJs-2.2, una versión bastante estable y totalmente compatible con la ultima version ExtJs-3.4 de su tipo distribuido por sencha.com&lt;/li&gt;
&lt;/ul&gt;&lt;br/&gt;
&lt;div id=&quot;testing&quot;&gt;
  &lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;h1&gt;Prueba SdSimple on line:&lt;/h1&gt;&lt;/blockquote&gt;
  &lt;br /&gt;
  &lt;ul&gt;
    &lt;li&gt;URL : &lt;a href=&quot;http://free.hostingjava.it/-igcode/&quot; target=&quot;_mysd&quot;&gt;http://free.hostingjava.it/-igcode/&lt;/a&gt; &lt;span style=&quot;color:blue;&quot;&gt;( en evaluación por fallas en el servicio)&lt;/span&gt;&lt;br&gt;&lt;br&gt;

    &lt;/li&gt;
    &lt;li&gt;Alternativa :&lt;br&gt;&lt;br&gt;
    URL : &lt;a href=&quot;http://mysdsimple.aws.af.cm/&quot; target=&quot;_mysd&quot;&gt;http://mysdsimple.aws.af.cm/&lt;/a&gt; &lt;span    style=&quot;color:red;&quot;&gt;( New! )&lt;/span&gt;&lt;br&gt;
    ( nuestro proyecto sdsimple corriendo sobre la plataforma Cloud de AppFog )&lt;br&gt;&lt;br&gt;
    &lt;/li&gt;
    &lt;li&gt;credenciales: usuario &lt;b&gt;passer&lt;/b&gt;, password &lt;b&gt;passer&lt;/b&gt;, para ambos casos&lt;/li&gt;
    &lt;li&gt;al ingresar, lea detalles de funcionamiento en la sección &lt;span class=&quot;notranslate&quot;&gt;&quot;readme&quot;&lt;/span&gt; del menú..
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;1&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-bxhXxB88LbWof6NUmygb7iO_M3MQ1tCdXR4LLr2toIo3BzmvDHiWukwDVWmq-xkEVw94kuHXlzPmyPdbt9LlzG7mRuLiy-I3VKg6-_h6CmOJ9tzYMLC63div5aSexdcYMP2Nm4Mn2l3W/s400/06+myProjectInicio.jpg&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;

&lt;div style=&quot;padding: 20px; margin:0 auto; width: 80%; background-color:#EEEEEE; border-radius:10px; border: 1px black solid;&quot;&gt; 
&lt;br&gt;
&lt;h2&gt;sdsimple on AppFog Cloud&lt;/h2&gt;
&lt;br&gt;
Algunas limitaciones de servicio teníamos con la instalación de nuestro proyecto sdsimple sobre &lt;b&gt;freehostingjava.it&lt;/b&gt;, así que decidimos aprovechar la &lt;a href=&quot;http://appfog.com&quot; target=&quot;_links&quot;&gt;plataforma Cloud de AppFog&lt;/a&gt;, una PaaS publica muy difundida que acepta incluso servicios clouds privados, y que por supuesto, nos proporciona una cuota free mas generosa: hasta 2Gb de source code, 100Mb de almacenamiento MySQL (soporta también otras bases de datos SQL y No-SQL), 5Gb de data transfer mensual, y otros detalles que pueden revisar en el siguiente &lt;a href=&quot;https://www.appfog.com/pricing/&quot; target=&quot;_links&quot;&gt;enlace&lt;/a&gt;)
&lt;br&gt;
&lt;br&gt;
Vale destacar en este punto que a diferencia de un servicio de hosting java convencional, en este caso, al tratarse de una PaaS, resulta imprescindible averiguar el nombre de la base de datos, del usuario y la contraseña que el servicio Cloud de AppFog nos proporciona al activar nuestra cuenta y crear nuestro servicio de base de datos (MySQL en este caso), y para ello nos resultó conveniente crear una aplicación &quot;phpmyAdmin&quot; y enlazarla (&lt;span class=&quot;notranslate&quot;&gt;Bind it&lt;/span&gt;) al servicio MySQL creado y que utilizamos para nuestro &quot;proyecto mysdsimple&quot;, y ya con phpmyAdmin instalado podemos crear, consultar y trabajar con nuestras tablas y datos de manera mucho mas fácil y eficiente, teniendo presente que para este caso, no consideramos ninguna opción de seguridad para la creación de las vistas al utilizar &lt;span class=&quot;notranslate&quot;&gt;CREATE VIEW&lt;/span&gt;, con el objeto de simplificar su creación (los nombre de las bases de datos y usuarios autogeneradas son generalmente bastante largos).
&lt;br&gt;
&lt;br&gt;
Este ultimo punto indicado es importante para considerar porque el nombre de nuestra base de datos &lt;u&gt;NO es el nombre del servicio MySQL&lt;/u&gt; que creamos, sino que éste se encuentra definido dentro de la variable &lt;b&gt;VCAP_SERVICES&lt;/b&gt; que se crea al utilizar los servicios cloud de AppFog, y una forma muy practica de obtener este dato es creando en nuestra aplicación &quot;phpmyAdmin&quot; un archivo PHP que podemos llamar &lt;b&gt;info.php&lt;/b&gt; (puede ser cualquier nombre), y que contenga como única instrucción phpinfo(); al ejecutarlo directamente desde nuestro navegador, desde la dirección de nuestra aplicacion &quot;phpmyAdmin&quot; por supuesto, obtendremos la pantalla de información PHP, y en ella, los valores de la variable &lt;b&gt;VCAP_SERVICES&lt;/b&gt; (pueden también utilizar los métodos de código indicados en la documentación de AppFog)
&lt;br&gt;
&lt;br&gt;
Detalles de &lt;b&gt;mysdsimple app&lt;/b&gt; desplegada en AppFog Cloud:
&lt;ul&gt;
    &lt;li&gt;Servidor Apache Tomcat 6.0.35&lt;/li&gt;
    &lt;li&gt;JDK 7, version 1.7.0&lt;/li&gt;
    &lt;li&gt;mySQL version 5.5.31&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
y finalmente, hay que considerar que al trabajar con JDK7, al ejecutar nuestros comandos sql, debemos preparar nuestra declaraciones considerando el parámetro: &lt;b&gt;Statement.RETURN_GENERATED_KEYS&lt;/b&gt; ó utilizar el método &lt;b&gt;preparedStatement&lt;/b&gt; considerando ese mismo parámetro; y que con el objeto de recuperar las conexiones que se van agotando en el tiempo (time out), y durante la carga de nuestros proyectos JavaWeb, no olvidemos de considerar en la configuración de nuestro &quot;pool de conexiones&quot; los parámetros: &lt;b&gt;validationQuery=&quot;SELECT 1&quot; testOnBorrow=&quot;true&quot;&lt;/b&gt;, que resuelven estos problemas y evitan excepciones que podrían afectar el funcionamiento de nuestro proyecto..
&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;Consideradas y planteadas las &quot;limitaciones&quot; del modelo de nuestro &lt;b&gt;proyecto sdsimple&lt;/b&gt;, pasaremos a hablar de sus &quot;virtudes&quot; por cuando sdsimple es un verdadero proyecto&lt;span class=&quot;notranslate&quot;&gt; cloud-computing &lt;/span&gt;que fácilmente podríamos adaptar para una gestión completa de un negocio o empresa PYME, por supuesto que haciendo las correcciones y/o adiciones que se requieran, pero principalmente considera que sdsimple nos facilita considerablemente todas las cosas que hay que tener presentes en un proyecto &quot;completo&quot; usando el Back-End Java + MySQL, y nos puede resultar un buen modelo para nuestros propios proyectos.
&lt;/p&gt;
&lt;p&gt;
Debe resaltarse asimismo que, trabajar con Java no es lo mismo que trabajar con PHP que es un lenguaje de programación interpretado, diseñado originalmente y principalmente para la creación de páginas web dinámicas. PHP se usa principalmente para la interpretación del lado del servidor (server-side scripting) y por supuesto, para las conexiones con una diversidad bases de datos.. pero PHP se adapta muy bien con el servidor HTTP Apache -de uso casi generalizado- y viene ahora completamente integrado con él, como podrá&amp;nbsp;fácilmente&amp;nbsp;comprobar al revisar los miles de servicios hosting website y webservers que se promocionan por la red (y actualmente a costos bastante acequibles que incluso pueden ser menores US$5.00 mensuales, y en muchos casos &lt;b&gt;Unlimited storage, unmetered transfer, and of course.. Unlimited domains.&lt;/b&gt;) ..pero el mundo Java no solo va asociado al mundo Web, con él pueden hacerse desde simples hasta complejos sistemas de escritorio, y con una perfomance comparable a la del lenguaje C, y por supuesto que con ella podemos desarrollar de todo: aplicaciones de escritorio, proyectos WEB, para moviles, y realmente para todo lo que se pueda conectar y/o asociar a una computadora... es un lenguaje muy potente, y su curva de aprendizaje no es tan sencilla, pero si usted estimado amigo lector ya ha llegado hasta etapa de nuestros codelabs (y se ha tomado la molestia de instalarlos, ejecutarlos y llegado a comprender), pues ya habra notado y convencido que mucho de lo que es desarrollo Web es como manejar una serie de multiples &quot;paquetes&quot; en diversos lenguajes y bajo determinados formatos y convenciones, que ya varios de ellos ya están desarrollados y listos para su uso... un ejemplo básico para nuestro caso es el manejo del formato JSON, que como han podido comprobar, las librerías que utilizamos para PHP ya están hechas y solo las utilizamos -como cuando utilizamos widgets, iframes, etc.- ..pues lo mismo sucede en el mundo Java... y lo mismo tambien con el mundo Python y otros ..y conociendo y manejando todos esos &quot;paquetes&quot; o modelos transversales a los entornos de desarrollo web, pues nos resultará mas sencillo, por poner un ejemplo, conectarnos a cualquier base de datos.. &quot;leer&quot;, trabajar y mostrar su contenido como planteamos en nuestro proyecto, utilizando cualquier entorno de desarrollo, y utilizando frameworks como con ExtJs que hemos venido trabajando en nuestros codelabs.. y por supuesto que con otros frameworks también se puede llegar a lo mismo, pero la facilidad que pueda uilizar un mismo framework para diferentes entornos: PHP+MySQL, Java+MySQL, GAE-Python (Google AppEngine), e incluso con el &quot;modernísimo&quot; node-js/V8, que es Javascript pero por el lado del servidor, pues eso aún solo lo he comprobado con ExtJs.. aunando a lo anterior la posibilidad de integrarnos también a desarrollos para móviles utilizando Sencha Touch..
&lt;/p&gt;
&lt;p&gt;
...volviendo al tema, finalmente ahora veremos como instalar el &lt;b&gt;proyecto sdSimple&lt;/b&gt; en nuestro servidor local Tomcat, utilizando el IDE Netbeans para facilitarnos el trabajo, y poder tener al proyecto en un entorno &quot;profesional&quot; de desarrollo listo para que lo empecemos a revisar ..y empezar a planificar y realizar nuestras propias modificaciones y mejoras.... .por supuesto, que si han revisado nuestra entrada anterior ya deben tener una idea de como realizar todo el proceso, pero en esa oportunidad &quot;cargamos&quot; un proyecto que no estaba ligado al mundo Java (nuestros codelabs &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Integración Google 1ra y 2da parte&lt;/span&gt;), pero en esta oportunidad si vamos a utilizar códigos java y la base de datos MySQL que debemos haber instalado en los inicios de este proyecto &lt;b&gt;Integración Google&lt;/b&gt; junto con &lt;b&gt;Appserv&lt;/b&gt; (ó el entorno HTTP Apache, PHP y MySQL que hayamos elegido (WAMP ó LAMP), así que ahora solo quedan algunas cosas propias de dicho entorno que debemos considerar antes de proceder con la instalación.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;el caso es que el entorno de desarrollo&lt;b&gt; Tomcat-Java-Netbeans&lt;/b&gt; no viene anexado a una base de datos en particular, así que podemos conectar a cualquier base de datos ya sea &quot;local&quot; o &quot;remota&quot; , es decir, disponible en nuestro equipo, en nuestra intranet  o en la &quot;nube&quot; (además que desde el comienzo se menciono que el entorno de desarrollo AppServ no era  sino la unión de tres grandes &quot;sistemas&quot; que nos facilitaba el proceso de configuración y enlace entre ellos, el servidor HTTP Apache, la base de datos mySQL y el lenguaje de programación PHP; pues ahora vamos a comunicarnos y mostrar a la base de datos MySQL sin utilizar HTTP Apache ni PHP &amp;nbsp;...usando ahora Apache Tomcat y Java a través del entorno de desarrollo de Netbeans.
&lt;/p&gt;
&lt;p&gt;
Si no tenemos instalado &quot;Appserv&quot; podemos proceder a instalar unicamente MySQL (si es posible), pero si no queremos trabajar directamente en el editor de comandos de MySQL, y trabajar con un entorno &quot;gráfico&quot; para el manejo de la base de datos como phpmyAdmin, pues necesitaremos también instalarlo por separado (también es posible), pero si queremos facilitarnos las cosas ..y probar todos nuestros &quot;codelabs&quot; anteriores, mejor procéda a la instalación de Appserv (u otro &quot;servidor&quot; similar), cuyos conceptos describimos en nuestro post &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot;&gt;empezando desde cero&lt;/a&gt;....
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Material de Apoyo&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link01();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 12px; margin: 05px 15px 0px 0px; width: 12;&quot; /&gt;&lt;/a&gt;&lt;b&gt;myProject.rar (24,1Mb),&lt;/b&gt; que son las fuentes del proyecto SdSimple modificadas para corregirle unos defectos no críticos - la selección de tipo de &quot;tema&quot; por ejemplo - y para darle algunas prestaciones adicionales que a nuestro entender pueden ser importantes para el uso de SdSimple, como permitir que el IVA acepte decimales ( muchas gracias a &#39;Nash Bridges&#39; de Argentina, amigo de esta comunidad ), y por supuesto, también hemos actualizado el framework ExtJs empleado a su versión Ext-3.4.0, la última compatible de sencha.com al código empleado en el proyecto SdSimple. Pueden revisar nuestra entrada&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html&quot;&gt; el Potencial de ExtJs&lt;/a&gt; para mayores detalles al respecto.
&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link02();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 12px; margin: 05px 15px 0px 0px; width: 12;&quot; /&gt;&lt;/a&gt;&lt;b&gt;leeme.txt,&lt;/b&gt; archivo readme elaborado por el desarrollador, que detalla el proceso de instalación original sugerido para el proyecto sdSimple ( para referencia ).&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
Cabe asimismo reiterar que estas &quot;mejoras&quot; efectuadas al proyecto sdSimple son mínimas y no definitivas ( a modo de demostración de las modificaciones que se quieran implementar ), y desde esta comunidad valoramos el esfuerzo y mérito de Pedro Peña García, desarrollador del proyecto, por haber realizado su diseño y programación, y para declararlo bajo licenciamiento GPL, hecho que apreciamos y reconocemos, y que nos permite ahora ponerlos a su alcance, que lo podamos instalar en nuestros propios servidores, &amp;nbsp;y que así realmente podamos observar con el debido detalle y en funcionamiento, un modelo &quot;cloud computing&quot; para la gestión administrativa de negocios PYME, y por supuesto, para que lo puedan considerar y/o emplear en sus proyectos y desarrollos personales bajo la plataforma Apache Tomcat + Java(JSP) + MySQL
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;NOTA :&lt;/span&gt;&lt;/b&gt; el empaquetado del proyecto es de 24.6Mb, y ha resultado algo pesado por la actualización a ExtJs-3.4.0 y por que hemos dejado en el proyecto todas las librerías necesarias para que el proyecto SdSimple pueda instalarse y funcionar sin mayores problemas ...es lo que esperamos, y lo que ha sido uno de los principales &quot;problemas&quot; de proyecto, por cuanto, instalar un proyecto Java tiene sus cosas... y ahora, solo queda empezar a detallar los pasos necesarios para su instalación en nuestro servidor local, lo que como hemos indicado y podrán intuir, es un proceso bastante similar a lo planteado para correr nuestros proyectos Integración Google 1ra y 2da sobre Apache Tomcat utilizando Netbeans, descrito en nuestro Codelab anterior de introducción al &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/09/using-back-end-javamysql-el-proyecto.html&quot;&gt;manejo básico del entorno de desarrollo Java(JSP)&lt;/a&gt;... a los que solo falta agregar algunas consideraciones propias de manejo del IDE Netbeans y de la base de datos MySQL.
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Pasos para ejecutar la instalación.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green;&quot;&gt;( proceso resumido )&lt;/span&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Paso 1&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Crear la base de datos mySQL del proyecto&lt;/b&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
..desde nuestro servidor Appserv u otro similar, crear utilizando phpMyAdmin la base de datos &lt;b&gt;myproject&lt;/b&gt;&amp;nbsp;( se crea vacía por supuesto), y cargar con la utilidad de importación, las tablas necesarias desde el archivo &lt;b&gt;sdsimple.sql&lt;/b&gt; proporcionado y disponible en la carpeta descargada del proyecto. Solo la tabla &lt;b&gt;&quot;empresa&quot;&lt;/b&gt; debe tener registrada la información de nuestra empresa de prueba, así como los datos &lt;b&gt;usuario &lt;/b&gt;y &lt;b&gt;password &lt;/b&gt;para acceder al sistema; &quot;passer&quot; y &quot;passer&quot; respectivamente por defecto, pero podemos modificarlos a nuestro criterio.. asimismo, podemos verificar el año de &lt;b&gt;ejercicio &lt;/b&gt;y otros datos generales (solo los datos resaltados son críticos y necesarios para los efectos del caso).&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color:blue;&quot;&gt;NOTA IMPORTANTE :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Antes de iniciarse la importacion del archivo *.sql proporcionado, debe revisarse con detalle el caso de las vistas utilizadas; en este caso, el proyecto original sdsimple utiliza vistas con &lt;span class=&quot;notranslate&quot;&gt;&quot;Create View&quot;&lt;/span&gt;, y a las que ha agregado la opción: &lt;span class=&quot;notranslate&quot;&gt;SQL SECURITY DEFINER&lt;/span&gt; que hace referencia al usuario con que nos conectamos a MySQL - root u otro que estemos utilizando - El caso es que, debemos cerciorarnos que el proceso de creación de las vistas sea efectuado correctamente sino tendremos probemas para trabajar las opciones de presupuestos, ventas, compras, cobros, pagos y movimientos bancarios.. puede tambien obviarse la opción de seguridad planteada eliminando la sentencia &lt;span class=&quot;notranslate&quot;&gt;DEFINER=`admin`@`%` SQL SECURITY DEFINER&lt;/span&gt; en cada creación de vista.
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxPKHd7JWYZOlpcdMjDu98r-k_a355lZK4RHhmHzv0uhHDok6eNZ2zhrJ2RNFaAsuo8Utd_0z9Iknc57ivG_MGkn2nfnIBpFZG201xFL13XhiER3n4S5Aj9KIQGv1WhWA7-q6JP9nkXtjB/s400/11+PhpMyAdmin.jpg&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBzFBd6JXG38Y_5FhrkNVd8RZj4Y-C6vohj-PxxakgvxJg4eRLNViz28S6CnD-9Nub5FzlpqINtCHFoq56UfJkj3TxPANcHIJZ7ByBlYUkz0rXflT2m6Hlxdp05v3_sxOFtDzThHcz_1Um/s400/17+phpMyAdmin.jpg&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #274e13; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Paso 2&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Cargar nuestro proyecto al Netbeans&lt;/b&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
... un paso similar al realizado al &quot;cargar&quot; nuestros proyectos Integracion Google 1ra y 2da parte...recuerde que en este caso nuestro proyecto se denominará &lt;b&gt;myproject&lt;/b&gt;, y debe indicar correctamente la ubicación de nuestra carpeta &quot;web&quot; y las otras solicitadas.. una vez cargado nuestro proyecto debemos ingresar las &quot;propiedades&quot; de nuestro proyecto e indicar que el formato de nuestra fuente Java será JDK5 ó superior; y asimismo que utilizaremos el servidor Tomcat para lanzar nuestro proyecto...&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span style=&quot;color:blue;&quot;&gt;NOTA IMPORTANTE :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;las fuentes proporcionadas del proyecto sdsimple son casi las mismas de las originales del proyecto pero adecuados para trabajar con la version 3.4.0 de ExtJS, pero los &quot;jar&quot; proporcionados solo permiten el correcto funcionamiento del proyecto sobre un servidor Tomcat 5.x y utilizando JDK5.. pero el proyecto puede facilmente actualizarse para que trabaje con Tomcat versiones 6.x y 7.x (incluso con JDK7 de Java); para ello, debe revisarse la &lt;a href=&quot;http://tomcat.apache.org/migration-6.html#Migrating_from_5.5.x_to_6.0.x&quot; target=&quot;_links&quot;&gt;Guia de Migración Tomcat&lt;/a&gt;, y que para nuestro caso significa que debemos grabar el archivo &lt;b&gt;commons-logging-api.jar&lt;/b&gt;, de la librería &lt;a href=&quot;http://commons.apache.org/logging/&quot; target=&quot;_links&quot;&gt;Apache Commons Logging&lt;/a&gt; en la carpeta &lt;b&gt;WEB-INF/lib&lt;/b&gt; de nuestro proyecto, dado que este servicio ya no es soportado directamente en los servidores Tomcat 6.x y 7.x (entre otros cambios que conviene revisar..).&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxMD9VsmqTHFvi9GH0P9kLUFOp4qV_cMV9_Rxu_fPkH9K-H99tC9cHx3gMCWN35BUKqt5wMvTOssypDcLX2gZsZ08xtDBBzctjnMCsXO0FTL1Vjc1VEc7Q998ChjSNi0qBdxAff8FY4ScC/s400/12+CargaNetbeans.jpg&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTWpn0VXxG9a2ZVgcy1ONNwtWnmr1quVphwuJyPaY-s8bd0_jTAXHoiTEs41xZUDf6lQ7ATEpZK05hw2ce-54gUHKh5px9_349nsElGiKE8opAC87z2wqTAMB_zrdYGDpW-vIuXFa2cJhF/s400/15+ConfigSource.jpg&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLpYjTU8iR0S9hsyRm_ZpfC0beC0aIIqZJFBAESavN59Umumn6NOQNBfeEOK_-XXX75eUmMCcSWZdv3XYbBsu575I24jhdphUoOGAUvc1J8RKbaRYII6yDYtHZcym92HUn_M93pZh9-FIW/s400/16+ConfigRun.jpg&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #274e13; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Paso 3&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Configuración del &quot;Pool de Conexiones&quot;&lt;/b&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Paso muy importante que requiere una explicación del porque del proceso, y es el que nos permitirá finalmente ingresar al sistema y poder utilizarlo (caso contrario, solo podremos acceder a la pantalla de acceso y se nos denegará el acceso).. la configuración se realiza sobre el archivo &quot;context.xml&quot; que pueden ubicar en la carpeta &quot;configuration files&quot; del proyecto cargado ( ó dentro de la carpeta META-INF de &quot;web&quot; ); y allí deben verificar los datos de conexión a la base de datos MySQL que hemos creado en el primer paso (&lt;b&gt;usuario&lt;/b&gt; y &lt;b&gt;password&lt;/b&gt; principalmente, el contexto es &lt;b&gt;Datasource&lt;/b&gt; por defecto por lo que no debemos cambiarlo excepto si llegásemos a instalar el proyecto en un servicio de hosting externo, en que generalmente se nos proporciona un nombre de contexto personalizado (o modifiquemos nosotros el contexto).&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2xgslNPG0nBEmd744K7uVl6feyFPQIIpfFaVUs3duMW98mAFoxz7M0Mosjv1W1Wos8h0C-0H7ffkLT3v_pTSoOlUBE1q2RS1RlTCQGXitQUxTKvS7kRNL3IAOkYuIG0fjdWOMvMyr7NWV/s400/13+ContextXml.jpg&quot; width=&quot;400&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #274e13; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Paso 4&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Configuración del Log del proyecto...&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Paso importante para monitorear el funcionamiento &quot;interno&quot; del sistema a través de los mensajes de servidor Tomcat, especialmente si no llegásemos a realizar una instalación exitosa del proyecto y allí podremos detectar y corregir los principales errores de nuestra instalación ( observe que en nuestro caso configuramos la salida de nuestro log en la carpeta &quot;Logs&quot; de nuestro servidor Tomcat indicando la ruta completa; y por supuesto que podemos grabarla donde querramos, pero es importante revisar, con el editor de nuestra preferencia, los &quot;mensajes&quot; que arroja nuestro proyecto durante su carga y funcionamiento )&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPPp1nsjhYzNyEqyt83Kcd187m2ElU4WwAdaLRZlAQezohYY_iieWT5uFIXugxDIHSZMi-_0rBS9OBoZE8KhvmhSWx1i0IuU_4MzS72Yu3ccFMtNjTivWsl0xi4pMIRVSafvUYqc21cG6N/s400/14+ConfigLog.jpg&quot; width=&quot;400&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #274e13; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Paso 5&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;disfrutemos de nuestra instalación, y por supuesto...&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;que podemos hacer con SdSimple ?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;
&lt;/span&gt;
&lt;/p&gt;&lt;br /&gt;&lt;p&gt;
si ya llegamos a ingresar al proyecto... aparte de la satisfacción de haber culminado el proceso ( observe que hay un historial bastante grande de casos de instalaciones no exitosas que pueden revisar en el mismo blog de la misma página oficial del proyecto SdSimple, que incluso ahora ya no esta activo ); pues aún quedan varios puntos pendientes y muy interesantes por revisar, como por ejemplo:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El método de acceso al sistema..&lt;/li&gt;
&lt;li&gt;El modelo de conexion y trabajo con la base de datos MySQL (altas, bajas, modificaciones)&lt;/li&gt;
&lt;li&gt;El método de impresión utilizado...&lt;/li&gt;
&lt;li&gt;Manejo de servicios proporcionados como por mail.jar..&lt;/li&gt;
&lt;li&gt;otros métodos utilizados...&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN6eCtTCPZvCTrzsgIszUgJh_tmgYPbXj-DY3wzH9VzLWHGL6P4NUtfh2dIMAMKczezy-2k6a0GPA7t4ohFq4www5fNsMmgSQuu_TmQZuNoOkkYy8J3j34HdCeGi3AhYDvnllFhG6r2Fh4/s400/09+FacturaVenta.jpg&quot; width=&quot;400&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
..y ahora ..a planificar nuestras modificaciones y mejoras...&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;:/)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Saludos&lt;br /&gt;
@Mlaynes&lt;/div&gt;
&lt;/div&gt;

&lt;br /&gt;

&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;br /&gt;


&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/10/using-back-end-javamysql-instalando.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/6942517275075374479/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/10/using-back-end-javamysql-instalando.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/6942517275075374479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/6942517275075374479'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/10/using-back-end-javamysql-instalando.html' title='Using the Back-End Java+MySQL: Instalando sdsimple..'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbfA33U_wn-zQJempLHzRRooYxdjyqeJDml8mR0EApLrwcevSRiMozbzn0y4KWTaCRmqKvEEc4rVqPf5AdbsUtauC1poTMoCF61WAa_3641KdrhsTJ4KS8v8c_NOvEltSqTPKgC-p0oF4n/s72-c/sdsimple.jpg" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Lima, Perú</georss:featurename><georss:point>-12.134755 -76.9970124</georss:point><georss:box>-12.1366955 -76.9994799 -12.1328145 -76.994544900000008</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-1762309203303289577</id><published>2011-09-22T14:29:00.000-05:00</published><updated>2013-03-30T21:42:03.586-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Netbeans"/><title type='text'>Using the Back-End Java+MySQL : Getting Started</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login wait a few seconds and try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    //Int-Google01.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZDEzYzNhMmMtZDhjMS00NzI1LWI5MjMtMTI5ZDgwYjAwNDQy&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //Int-Google02.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZDNiZjI3NjEtMDFmZi00MjU1LWFmZGItOTA3MWMwNjhmYmVk&quot;;
    my_link(w_link);
  };
  function my_link03() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYTQ5YzY2NWEtMmIxMi00YjZkLTliMDYtNDA3ZDE5OGQ5Y2U0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
  function my_link05() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZ25sZ285ZFNab3c&quot;;
    my_link(w_link);
  };
  function my_link06() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEa2JvVDRQMmt5OWM&quot;;
    my_link(w_link);
  };

&lt;/script&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;
&lt;/div&gt;
&lt;a href=&quot;http://es.wikipedia.org/wiki/Tomcat&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDoxve0sZ4IHk_0ftgkTDfT18u3ePsSs32FYysMStT0WDjf7DG5Q5oJnmJRXCsP-Cwzrhge6zjDsTCcFPjNNvMrhdaWLtW7IfhiJp1vDVKLQoXJOXSElkocXMa4k48UdSGjgKSu6Y9YqVF/s1600/tomcat-power.gif&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
y empecemos ahora con el Back-End Java+MySQL, y su manejo no es por supuesto igual al de los servidores HTTP Apache que hemos venido utilizando.. y nuestra idea 
es presentar del entorno de desarrollo Web de Java de una manera practica, pues al tratarse de un lenguaje de programación orientado a objetos bastante especializado tanto para aplicaciones de escritorio, en sistemas de servidor (con las especificaciones &lt;b&gt;Servlets &lt;/b&gt;y &lt;b&gt;JSP&lt;/b&gt;, los que son de uso muy difundido), e incluso como aplicaciones &lt;span class=&quot;notranslate&quot;&gt;&quot;&lt;b&gt;applets&lt;/b&gt;&quot; &lt;/span&gt; incrustadas en código HTML.. estamos entonces frente a un lenguaje muy potente no solo orientado a aplicaciones Web.. pero es también bastante polémico respecto a la comunidad opensource, pues desde Abril del 2009, Oracle adquirió Sun Microsystems, lo que ocasionó el temor de las posibles y probables variaciones del licenciamiento GNU/GPL de Java, las cuales desde la versión 6 del lenguaje, ya se encuentran bajo el completo control de Oracle.. aunque Oracle aún mantiene el licenciamiento GNU/GPL de sus productos (incluído JDK 7 y del llamado OpenJDK).&lt;br /&gt;
&lt;br /&gt;
Trabajar con el entorno Java para desarrollo Web, además de un servidor HTTP convencional, requiere que dispongamos de un contenedor y compilador de servlets y páginas JSP (ó servidores de aplicaciones tipo JBoss), y uno de los servidores más utilizados es el servidor&lt;span class=&quot;notranslate&quot;&gt; &lt;b&gt;Apache Tomcat&lt;/b&gt;&lt;/span&gt;, que es un servidor Web con soporte a objetos servlets y JSP, que ha sido desarrollado por supuesto en Java e incluye el compilador Jasper, que compila JSPs convirtiéndolas en servlets... vale decir, hablar de Tomcat es hablar de un contenedor de servlets que denominan &lt;b&gt;catalina&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;1er paso:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Instalar Nuestro Servidor Tomcat&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
(Nota : recomendamos lea primero completamente los dos primeros pasos y luego recien proceda a realizar las instalaciones que correspondan)&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://tomcat.apache.org/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp2OkeVm8oo7859JSvbnELJl6m4qQiiDOuyiAf_3dIFxnQPZfXkV84etR32zmaHJuqPfgsTwCcu7KfXb9vVLzLfIVh10oxUZRBouaIwD4wWEVYTuFMhkwosFWwvMEsC7o8KoVePDtmNYNm/s400/01+Servidor+Tomcat.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
lo primero que debemos de tener en cuenta es que un servidor Apache Tomcat o jakarta Tomcat (como también suelen llamarlo), no es lo mismo que nuestro servidor HTTP Apache que hemos venido trabajando.. Tomcat es también un servidor Web y al instalarlo al igual que tenemos una carpeta &quot;www&quot;, con Tomcat tendremos una carpeta &quot;ROOT&quot; contenido dentro de otra denominada &quot;webapps&quot; donde podremos poner nuestros archivos con extensión &quot;jsp&quot;, los que serán interpretados y lanzados a nuestro navegador de preferencia (o por defecto).. pero para nosotros desarrolladores como ya debemos tener instalado un servidor HTTP Apache en el puerto 80, pues la instalación de Apache Tomcat la tendremos que hacer sobre otro puerto para evitar conflictos (uno recomendable puede ser 8080, 8090, etc. o realmente el que queramos pero que no sea utilizada por alguna otra opción o servicio web, proxy, etc; incluyendo por supuesto los puertos que utilizaremos con nuestro launcher de Google AppEngine (GAE).&lt;br /&gt;
&lt;br /&gt;
Instalar Tomcat es realmente como instalar Apache con Appserv u otro similar (Wamp, Xamp, etc); pero es imprescindible indicar que primero debe haberse instalado el JDK de Java, para ello puede resultar conveniente revisar primero esta tabla requerimientos de JDK dependiendo de nuestra version Tomcat:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://tomcat.apache.org/whichversion.html&quot; target=&quot;_blank&quot;&gt;http://tomcat.apache.org/whichversion.html&lt;/a&gt;,&lt;br /&gt;
&lt;br /&gt;
y como siempre, podemos elegir y trabajar con las ultimas versiones, las que como pueden ver ya son bastante estables: Otra cosa que debemos de tener en cuenta es que al instalar, Tomcat, a diferencia de HTTP Apache, el servicio no se carga en automático, excepto lo hayamos configurado expresamente para ello, por eso, concluída la instalación del servidor el primer paso imprescindible seleccionar en &quot;Todos los programas&quot;, la opción &lt;b&gt;Apache Tomcat&lt;/b&gt;, &lt;b&gt;configurar Tomcat&lt;/b&gt;, y&lt;b&gt; arrancar el servidor&lt;/b&gt;; y configurarlo en &quot;automatico&quot; si deseamos que siempre se cargue al inciar nuestro sistema operativo.&lt;br /&gt;
&lt;br /&gt;
Para instalar Tomcat sobre window puede tener algunas peculiaridades (como tambien las tiene sobre Linux y Unix, pues varias cosas se tienen que ingresar comandos de consola, especialmente para dar atrbutos a nuestras carpetas y desempaquetar los archivos tar requeridos),..pero realmente trabajar sobre Linux tiene sus ventajas respecto a la perfomance de nuestro servidor Web, realmente es más rapido, lo que es conveniente si lo vamos a utilizar Tomcat en un ambiente de producción; pero si vamos a hacer nuestras pruebas, y siendo a este nivel indiferente que trabajemos sobre Linux o Windows, entonces les paso un enlace de como hacer la instalación sobre Window7, que como es característico Microsoft siempre pone algunas restricciones de &quot;seguridad&quot; que debemos de tomar en cuenta.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://profesor.antonio.com.mx/?p=129&quot; target=&quot;_blank&quot;&gt;http://profesor.antonio.com.mx/?p=129&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Solo basta reiterar que no utilicemos para la instalación el puerto 80 que probablemente la estemos utilizando para nuestro servidor HTTP Apache, ni tampoco del 20 al 25 /FTP y otros), ni 1433 no 3306 (de SqlServer y MySQL respectivamente); podemos utilizar&amp;nbsp; puertos mayores a 8000 por poner un ejemplo, ó de 5 digitos que tambien puede hacerse, tamién pueden utilizar un &lt;a href=&quot;http://www.internautas.org/w-scanonline.php&quot; target=&quot;_blank&quot;&gt;scaner de puertos&lt;/a&gt; on-line si tienen dudas que algunos puertos puedan estan siendo utilizados, es decir, si tienen equipos o servicios como &lt;span class=&quot;notranslate&quot;&gt; proxys &lt;/span&gt;instalados en su equipo que requieran conexiones a puertos; ó mejor aún, hacer un monitoreo de los puertos en uso y así seleccionar puertos que no estén siendo utilizados (en Windows podemos utilizar &lt;a href=&quot;http://www.nirsoft.net/utils/cports.html&quot; target=&quot;_blank&quot;&gt;CurrPorts v2.02&lt;/a&gt; el cual es bastante práctico y eficiente, y solo requiere ser desempaquetado para ejecutarlo)... asimismo, es conveniente tener presente que tanto el JDK de Java como nuestro Tomcat esten instalados sobre una carpeta raiz de alguna de nuestras unidades de disco, pues hay varias cosas del mundo Java que pueden configurarse directamente sobre archivos específicos (server.xml, context.xml, user.xml, entre otros), y es necesario que estos sean fácilmente identificables y accesibles...&lt;br /&gt;
&lt;br /&gt;
Vale también indicar que un &lt;b&gt;servidor Tomcat&lt;/b&gt; es en varios aspectos mucho mas flexible y configurable que un &lt;b&gt;servidor Apache HTTP&lt;/b&gt;, en el sentido por ejemplo que no necesariamente un &quot;proyecto&quot; deba estar grabado en la carpeta ROOT (equivalente a nuestra carpeta &quot;www&quot; que hemos venido trabajando); e inclusive es factible configurar a Tomcat para que directamente llamando a http://localhost/myproject por ejemplo (y este sea un proyecto JSP-Java, este corra automáticamente sin indicar el puerto de escucha al que ha sido direccionado nuestro servidor Tomcat... esto por supuesto es muy útil y necesario si nuestro servidor Web es un servidor de producción (pueden revisar el siguiente &lt;a href=&quot;http://chuwiki.chuidiang.org/index.php?title=Instalaci%C3%B3n_de_Tomcat_en_Windows&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt; al respecto), pero como no es nuestro caso no ahondaremos sobre las diferentes opciones de configuración que puede brindarnos un servidor Tomcat, que realmente son interesantes pero basta por el momento que sepamos que, aún trabajando con un servidor Apache HTTP y un servidor Tomcat en forma simultanea, es posible que, dentro de un ambiente intranet tengan acceso a nuestra aplicación ingresando directamente la IP de nuestro servidor y el nombre de nuestra aplicación: por ejemplo 192.1681.100/myproject;  (o también el nombre de nuestro dominio interno configurado); y en el caso de un ambiente internet, indicando nuestro dominio y la aplicación, como por ejemplo: www.mydominio.com/myproject; no importando en ningún caso las indicaciones respecto al puerto que utilicemos y donde se encuentre grabada la carpeta que contiene a nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;2do. paso:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Instalar Netbeans y trabajar con Apache Tomcat.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://netbeans.org/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIELDP1a_ecQ4x7MGuki-DuV0u0GpZrWEDThpjTcsa5DBgRMo1AcgEuZuYA9fMsMdbKk-5ypXJY-lH4trpzWk1XjwHowDQQvNlDXAQgSVcNK_bQn6Ab_nC_dm0RvrwWKvCmx-sT2SYGOd3/s400/02.+Netbeans.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Cabe mencionar también que cuando instale por primera vez Netbeans (que es un IDE bastante eficiente para realizar nuestros desarrollos sean estos Java, PHP, Phyton, C++ o Groovy, etc.), este solo incluía un servidor de aplicaciones llamado Glassfish (similar al Tomcat), y que luego había que indicarle que trabajase también con Tomcat; pero observo como una agradable sorpresa que ahora Netbeans 7 incluye como servidores tanto a Glassfish 3.x como Tomcat 7.0.x; y que incluso es posible instalar todo el paquete (Netbeans, los servidores Glassfish y Tomcat y el JDK de Java en un unico paquete, como cuando instalamos Appserv o Xamp -pero con el adicional de tener un IDE completamente integrado y listo para su uso en nuestros proyectos... estas son ventajas del desarrollo opensource y de la vigencia y actividad de esta plataforma que podemos disfrutar ahora.. como siempre, mi única recomendación al respecto es que hagamos toda la instalación en una carpeta directamente en la raíz de una de las unidades de disco de nuestro ordenador (para facilitar la identificación y ubicación de los componentes del servidor).&lt;br /&gt;
&lt;br /&gt;
Download Netbeans :&amp;nbsp;&lt;a href=&quot;http://netbeans.org/downloads/&quot; target=&quot;_blank&quot;&gt;http://netbeans.org/downloads/&lt;/a&gt;&lt;br /&gt;
(elegir la opcion JavaEE ó All, o sigamos este enlace para descargar el&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #333333; font-family: Verdana, &#39;Verdana CE&#39;, Arial, &#39;Arial CE&#39;, &#39;Lucida Grande CE&#39;, lucida, &#39;Helvetica CE&#39;, sans-serif; font-size: 11px;&quot;&gt;&lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html&quot; style=&quot;background-color: #cae8ed; color: #1e2a60; text-decoration: underline;&quot; target=&quot;_blank&quot;&gt;JDK de Java junto con el IDE NetBeans en un solo paquete&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #333333; font-family: Verdana, &#39;Verdana CE&#39;, Arial, &#39;Arial CE&#39;, &#39;Lucida Grande CE&#39;, lucida, &#39;Helvetica CE&#39;, sans-serif; font-size: 11px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
pero antes la aclaración a una pregunta importante... &lt;b&gt;Porque utilizar un IDE como Netbeans, Eclipse u otro asociado al mundo Java? ..y porque &lt;b&gt;Netbeans&lt;/b&gt; en particular?&lt;/b&gt; ...no pretendo dar una explicación de las ventajas de trabajar con un IDE en paticular porque eso creo que depende bastante de la pericia y experiencia del programador con uno u otro entorno de desarrollo... pero trabajar en Java con un IDE especializado es particularmente util porque nos facilita herramientas para la configuración, manipulación, modificación, mejora y/o adición de nuevas opciones a nuestros proyectos (especialmente si son proyectos &quot;grandes&quot;)... y la idea de nuestros &quot;codelabs&quot; es que dispongamos de ellos para que lo adaptemos y mejoremos de acuerdo a nuestras necesidades... pues planteado así, &lt;b&gt;Netbeans&lt;/b&gt; nos permite &quot;cargar&quot; directamente las &quot;fuentes&quot; de cualquier proyecto JavaWeb como un &quot;proyecto Netbeans&quot;, y luego utilizando las pantallas de edición de sus componentes, se nos facilitará su revisión, depuración y adecuación; pero sobre todo, para ejecutar el proyecto (y lanzarlo a nuestro navegador por defecto), sencillamente debemos seleccionar nuestro proyecto e indicar la opción Run y listo.. si todo esta correcto el proyecto se lanzara a nuestro navegador... y si nuestro servidor fuera de producción internamente el IDE hace las configuraciones necesarias y nuestro proyecto podrá ser accesible directamente desde el navegador de preferencia de los &quot;usuarios&quot; que accesen a nuestro proyecto , ya sea a nivel intranet o internet... y eso si es para tomar en cuenta..&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;3er. paso:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Hablemos sobre Java y como trabaja...&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkS1UmmkgUcQfVv0C-Kj5OZqg0PO82DSXH_q2yIQfx_oH7aRcekBdLuzqc3sTCP4u69GX2pGljcngvRpprvyg2d5xyBjkhqr3FBnnRuxf9csg0wWdsYzogGuRIdetyOtipjVaX4Vw4Cvae/s1600/04+HelloWorld.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkS1UmmkgUcQfVv0C-Kj5OZqg0PO82DSXH_q2yIQfx_oH7aRcekBdLuzqc3sTCP4u69GX2pGljcngvRpprvyg2d5xyBjkhqr3FBnnRuxf9csg0wWdsYzogGuRIdetyOtipjVaX4Vw4Cvae/s400/04+HelloWorld.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
Como ya les indique anteriormente, trabajar con código Java tiene una curva de aprendizaje mas compleja que utilizar HTML, CSS, Javascript, PHP, etc. (y bastante similar a otros lenguajes &quot;compilados&quot; como Phyton, esto por supuesto si queremos llegar a dominar todas sus posibilidades), pero no perdamos animos por ello, solo miremos a este entorno de desarrollo como un &quot;paquete&quot; asociado al mundo de desarrollo Web que podemos incluso integrar a nuestros proyectos, y poco a poco, y con la experiencia que ya debemos haber desarrollado al haber investigado y hacer uso de HTML, CSS, Javascript, PHP, las API de Google, de Facebook, de Twitter, etc.. pues mas rápido de lo pudiera pensarse se lograrán despejarán nuestras dudas e incomprensiones.. debiendo tener presente primordialmente que, como en el caso de PHP, para tener acceso a los comandos e instrucciones de dicho lenguaje utilizabamos las etiquetas del tipo : &lt;b&gt;&quot;&amp;lt;?php -my-codePHP- ?&amp;gt;&quot;&lt;/b&gt;, pues ahora con Java, en nuestros archivos JSP, para hacer referencia a nuestros codigos y variables utilizamos la etiqueta &lt;b&gt;&amp;lt;% --my-codeJava-- %&amp;gt;&lt;/b&gt; ..y con esta rápida introducción creo ya estamos listos para empezar nuestras investigaciones respecto a este entorno &quot;profesional&quot; de desarrollo.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Nuestro Hello World en Java?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;&amp;lt;% out.println(&quot;Hola mundo&quot;); %&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This is my first test&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
..observan mucha diferencia a nuestro Hello World de nuestro servidor HTTP Apache? ..pues realmente no (excepto que hemos colocado nuestra &quot;Hola Mundo&quot; dentro de las etiquetas &amp;lt;% %&amp;gt; que indica que lo contenido es un código Java, y el servidor &quot;compilará&quot; esa instrucción, lo ejecuta y mostrará en nuestro navegador) .. solo basta grabar este código en un archivo tipo texto con el nombre &lt;b&gt;prueba.jsp&lt;/b&gt;, y ejecutarlo en nuestro servidor Tomcat, una vez lo tengamos instalado y puesto en servicio por supuesto, digitando en la barra de direcciones de nuestro navegador de preferencia : &lt;b&gt;http://localhost:8090/prueba.jsp, &lt;/b&gt;(nótese que indicamos el puerto con que hemos configurado a nuestro Tomcat al realizar nuestra instalación; y tambien por supuesto, debe resultarnos claro que ya todo lo que manejamos con HTML, CSS, e incluso con Javascript, también lo podremos usar en el mundo Java.. algo similar es con el &quot;mundo Phyton&quot;,..y también con el mundo &quot;Microsoft&quot; (que plantea el uso de otro tipo de servidores -el IIS- y otro lenguaje por el back-end -ASP.Net en este caso- y que detallo por cuanto hemos tomado conocimiento del lanzamiento de WebMatrix 2.0 beta, un entorno de desarrollo que junta diversas herramientas opensource y de Microsoft para hacer desarrollos Web que involucra las herramientas mencionadas, y otras todas integradas con HTML, CSS, Javascript e incluso PHP, lo que le permite el manejo e instalación de varios proyectos sociales tambien opensource muy conocidos como Wordpress, Drupal, Joomla, etc.. incluye su propio editor y &quot;lanzador&quot; de aplicaciones (de una manera similar al &quot;launcher&quot; de Appengine), así que tenemos otro entorno de desarrollo por revisar...&lt;br /&gt;
&lt;br /&gt;
Otro de los temas que tocaremos mas adelante es que también podemos &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/11/quercus-using-java-with-php.html&quot;&gt;utilizar PHP en entornos Java&lt;/a&gt; (y mantener el mismo acceso a los servicios sociales y otros desarrollos opensource como los indicados pero ahora desde el entorno Java, con el uso de Netbeans IDE y de servidores como Tomcat ó Glassfish.. y volviendo a nuestro tema, vale destacar que por supuesto esto es solo el principio, pero con este sencillo ejercicio &quot;Hola Mundo&quot; creo que podemos llegar a tener una idea real de como funciona Java en nuestros desarrollos Web, el resto es hacer nuestras pruebas e investigaciones personales, y para ello les presento este link de un curso bastante completo e interesante de Java EE hecho por Abraham Otero, del portal &lt;a href=&quot;http://www.javahispano.org/&quot; target=&quot;_blank&quot;&gt;Javahispano.org&lt;/a&gt;; el cual además de mostrarnos todo lo básico de desarrollo Web (como es el manejo de HTML y CSS), pues nos detalla todos los secretos de Java de manera bastante práctica, y no dudo que comprensible para todos los interesados... de hecho, no solo detalla los &quot;secretos&quot; de Java sino que nos explica y muestra porque resulta recomendable trabajar con el IDE Netbeans para facilitar nuestros desarrollos en esta plataforma -y las que soporte Netbeans-, utiliza videos bastante apropiados, y esta en español... tal vez el único &quot;inconveniente&quot; es que los videos estan colgados en Parleys.com (que es una plataforma e-learning free asociada a Adobe), pero para optimizar el uso de esta plataforma basta con que instalemos &quot;Parleys Desktop&quot; (que instala un SDK y baja los videos a nuestro ordenador, y agiliza la presentación y calidad de ejecución de los mismos), para ello revise el &lt;b&gt;&quot;Home&quot;&lt;/b&gt; de la pantalla de Parleys cuando accedamos a los enlaces de video indicados; lo que le permitirá también revisar con mas detalle y dar una mirada a otros videos y cursos de Javahispano.org, y tambien de otros expositores disponibles en esta plataforma&lt;br /&gt;
&lt;br /&gt;
Curso Basico de JavaEE :&amp;nbsp;&lt;a href=&quot;http://www.javahispano.org/storage/contenidos/JavaEE.pdf&quot; target=&quot;_blank&quot;&gt;http://www.javahispano.org/articulos/JavaEE.pdf&lt;/a&gt;&lt;br /&gt;
ó mejor aún, revisar el &lt;a href=&quot;http://www.javahispano.org/contenidos/es/tutorial_basico_de_java_ee__por_abraham_otero/&quot; target=&quot;_blank&quot;&gt;Tutorial JavaEE de JavaHispano&lt;/a&gt; completo.&lt;br/&gt;
(language = spanish)&lt;br/&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;4to. paso&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Instalando nuestro primer proyecto JavaWeb&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
...empecemos con armar nuestro primer proyecto Web con Netbeans... es realmente sencillo...&lt;br /&gt;
&lt;br /&gt;
si ya hemos instalado nuestro servidor Tomcat y Netbeans con cualquiera de las formas antes indicadas, solo basta que elijamos la opción &lt;b&gt;File&lt;/b&gt;, &lt;b&gt;New Project&lt;/b&gt; y en la pantalla de indicación de proyectos nuevos verifiquemos que esten seleccionados &lt;b&gt;Java Web&lt;/b&gt; y &lt;b&gt;Web Application&lt;/b&gt;, y luego elijamos &lt;b&gt;Next&lt;/b&gt; (hay unos ejemplos alli que podremos revisar también); luego la pantalla nos solicitará el nombre y la ubicación de nuestro proyecto (por defecto una carpeta de Mis Documentos en Windows), podemos indicarle un nombre apropiado como &quot;myHello&quot; así como cualquier carpeta, lo más adecuado a nuestros intereses... el resto de opciones de esta pantalla las podemos dejar como están...&lt;br /&gt;
&lt;br /&gt;
Luego pasamos a la configuración de nuestro servidor, y allí indicamos que utilizaremos Tomcat (si hubiésemos instalado Glassfish aparecerá esa opción por defecto); la versión de JavaEE indicada la dejamos por defecto, y podemos cambiar el &lt;b&gt;Context Path&lt;/b&gt; a uno adecuado (&quot;myHello&quot; en este caso para referirnos al nombre de nuestro proyecto), teniendo presente que ese nombre es que corresponde al que utilizaremos como dirección en nuestros navegadores.. y con toda esta información nuestro proyecto &quot;vacío&quot; será creado..&amp;nbsp; Netbeans creará nuestro proyecto con todas las carpetas MVC requeridas para un proyecto Java Web, y asimismo observaremos al archivo &lt;b&gt;index.jsp&lt;/b&gt; creado por defecto que solo tiene en HTML el mensaje &quot;Hello World&quot;...&lt;br /&gt;
&lt;br /&gt;
Revisemos con detalle alguna de las carpetas creadas por el Netbeans, especalmente los archivos contenidos en WEB-INF (web.xml), y META-INF (context.xml); que han sido creadas con lo indicado al &quot;armar&quot; nuestro proyecto y que vamos a tener que utilizar y manipular cuando carguemos cualquier proyecto que tengamos sus fuentes.. y listo.. seleccionemos nuestro proyecto, botón derecho del mouse e indiquemos &lt;b&gt;Run&lt;/b&gt;.. Netbeans procederá a construir y lanzar nuestro proyecto a nuestro navegador de preferencia y allí debe aparecer nuestro Hello World... &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Instalando nuestros proyectos Integracion Google 1ra y 2da parte en Netbeans:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Aun cuando nuestros proyectos Integración Google &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot;&gt;1ra.&lt;/a&gt; y &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot;&gt;2da.&lt;/a&gt; parte son desarrollados exclusivamente con HTML y Javascript (recuerde que usamos ExtJs que es un framework de Javascript), puede entonces cargarse estos trabajos como proyectos del Netbeans pero acondicionando su presentación para que respete la distribución de archivos convencional de un proyecto &lt;b&gt;&quot;Java Web&quot;&lt;/b&gt;... y las condiciones son faciles de implementar, y se resumen en este caso en crear una carpeta &quot;web&quot; que contenga todo nuestro proyecto ( no estamos utilizando ningún código Java que efectúe alguna operación por el lado del servidor en este caso), y asimismo que dentro de esta carpeta pondremos nuestra versión &quot;liviana&quot; del framework (carpeta Ext-3.4.0 en este caso); y además 02 carpetas denominadas META-INF y WEB-INF, quienes alojarán a los archivos &quot;context.xml&quot; y &quot;web.xml&quot; respectivamente (y en donde se indicará el nombre de nuestro &quot;context-path&quot; y archivo de arranque del proyecto, que en este caso es &lt;b&gt;index.html&lt;/b&gt;)...&lt;br /&gt;
&lt;P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Material de Apoyo :&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 12px; margin: 05px 15px 0px 0px; width: 12;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle-01.rar,&lt;/b&gt; que nos muestra Visualizaciones Google sobre ExtJs (la versión Ext-3.4.0 en este caso) correpondiente a dicho codelab, ahora adecuados a un formato &quot;Java Web&quot; para poder cargarlos como un proyecto de Netbeans. Puede revisar nuestra entrada&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot;&gt; Integracion Google 1ra parte&lt;/a&gt; para mayores detalles.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 12px; margin: 05px 15px 0px 0px; width: 12;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle-02.rar,&lt;/b&gt; que nos muestra Visualizaciones Google y ExtJs de nuestro documento &quot;Spreadsheet Productos&quot;:&amp;nbsp;correspondiente a dicho codelab&amp;nbsp;(adjuntamos&amp;nbsp;también&amp;nbsp;nuestro modelo de hoja de calculo en formato xls para que puedan realizar pruebas con un documento propio, cargando este archivo a Google Docs)... Puede revisar nuestro codelab &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot;&gt;Integracion Google 2da. parte&lt;/a&gt; para mayores detalles.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Integracion Google Parte No.1 corriendo sobre Netbeans-Tomcat :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;275&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK9DjmiF_4SklgmRPAhSCdKZcg1s8XQbSkO8jS8N3t5L9kPDkBBdM4VFWXII9yD28Y-MdlNVloFyFdnA8CJSSwn67phZJNWdYpHvl4dlnyNnNdvNwUkvBuGVjoTt3mY9cWWVK1MdBmz1_-/s400/Int-Google01.PNG&quot; title=&quot;Go to Int-Google01 Codelab..&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Integracion Google Parte No.2 corriendo sobre Netbeans-Tomcat :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;275&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin-OqXXgcytcySvW0aEVl4AlM2Nn18VM-A2fNbK6yGqHm8GFrGVTCelwosnqDhoO0ljc9YWzSZSEqwmzU1iDbIaetZlmJ1el1vQ31gX3S3TqhkOBvuCqpaofRP-rsrnSXF2XekHMLFkYHY/s400/Int-Google02_MiExtJsPanel.PNG&quot; title=&quot;Go to Int-Google02 Codelab..&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br /&gt;

&lt;p&gt;
&lt;h1&gt;&lt;span style=&quot;color:red;&quot;&gt;&lt;b&gt;NOTA IMPORTANTE : &lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;/p&gt;
&lt;p&gt;Resulta que el sistema de autorización &quot;AuthSub for JavaScript&quot; de Google ya no se encuentra disponible (pueden revisar el siguiente &lt;a href=&quot;https://developers.google.com/gdata/docs/js-authsub&quot; taregt=&quot;_blank&quot;&gt;enlace&lt;/a&gt;), por lo que nuestro botón &quot;Login&quot; de nuestro codelab no permite el acceso a nuestro ejercicio; asimismo, la documentación de Google nos recomienda que utilicemos ahora &quot;OAuth 2.0 for client-side applications&quot;, vale decir, tendremos que utilizar&amp;nbsp;&lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;Google API Javascript Client&lt;/a&gt;&amp;nbsp;para poder acceder a nuestras aplicaciones (u otra API cliente según la plataforma back-end que utilicemos, tal como PHP, Java, .NET, entre otros), pero en nuestro caso, como solo estamos trabajando aplicaciones por el lado del cliente, tendremos que recurrir a la librería cliente para Javascript indicada.
&lt;/p&gt;
&lt;p&gt;Por lo que, mientras adecuamos nuestro código, resulta conveniente que NO CONSIDEREN el proceso de acceso a la aplicación de la siguiente manera:
&lt;blockquote&gt;&lt;span class=&quot;notranslate&quot;&gt;
 function activando(auth) {&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;var c = Ext.getCmp(&#39;center&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:red;&quot;&gt;//google.accounts.user.login(&#39;http://www.google.com/m8/feeds/&#39;);&lt;/span&gt;&lt;br/&gt; 
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:blue;&quot;&gt;auth = true;&lt;/span&gt;&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.update(&#39;&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;if (auth) { &lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vistree.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;};&lt;br/&gt;
 };&lt;br/&gt;
&lt;br/&gt;
within from : MenuGVisualization_01.js / MenuGVisualization_02.js where appropiate!&lt;br/&gt;
&lt;/span&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;div id=&quot;oauth20&quot;&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;h1&gt;&lt;span style=&quot;color:darkBlue;&quot;&gt;&lt;b&gt;TRABAJANDO CON OAUTH 2.0 : &lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;
&lt;p&gt;por supuesto, a la brevedad actualizaremos todos nuestros códigos para que trabajen con el protocolo &lt;b&gt;OAuth20&lt;/b&gt;, y les presentamos en esta oportunidad el código y su demo de nuestro codelab que hemos cargado a la plataforma GAE (Google App Engine), pero que usted también puede probar en su servidor local de pruebas utilizando el SDK para Java de Google App Engine..
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle01-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle01-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)
&lt;/p&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link05();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle02-OAuth20.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 3.14Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro codelab pero adecuado al protocolo OAuth version 2.0, utilizando la &lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;&quot;Google API Javascript Client&quot;&lt;/a&gt;, la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle02-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle02-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)
&lt;/p&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link06();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle02-OAuth20.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 3.14Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro codelab pero adecuado al protocolo OAuth version 2.0, utilizando la &lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;&quot;Google API Javascript Client&quot;&lt;/a&gt;, la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.
&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;
&lt;/span&gt;Es importante indicar que la documentación de Google nos indica que ahora debemos trabajar con OAuth 2.0 que se esta convirtiendo en el estándar de autenticación y autorización para acceder a nuestras cuentas y poder utilizar todas las API de Google, por ello hemos adecuado nuestro codelab a dicho estándar debiéndose tener en cuenta lo siguiente:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Crear un nuevo proyecto en el &lt;a href=&quot;https://code.google.com/apis/console/&quot; target=&quot;_blank&quot;&gt;Google API Console&lt;/a&gt;, con el nombre mas adecuado que queramos &lt;/li&gt;
&lt;li&gt;Crear una &quot;OAuth 2.0 Client ID&quot; en la opción &lt;b&gt;API Access&lt;/b&gt; de la consola.. allí podremos indicar el nombre de nuestra aplicación y la URL de un logo que la represente ..a continuación debemos indicar el tipo de nuestra aplicación (&quot;web application&quot; en nuestro caso), y la URL de nuestra aplicación (acepta http://localhost ó http://localhost:8080 para trabajar con nuestro servidor local de pruebas, debiendo verificar que se elija correctamente el protocolo &lt;b&gt;&quot;http ó https&quot;&lt;/b&gt; y la ruta completa de acceso a nuestra aplicación para que todo funcione correctamente); por lo que al crear nuestra &lt;b&gt;API Access&lt;/b&gt; se nos indicará la carpeta &quot;Redirect URI&quot; donde se realizará el proceso de autenticación y autorización OAuth 2.0 solicitado (si no ha sido creada debemos editar la configuración y registrar manualmente la carpeta donde se realizará el proceso, puede ser cualquiera dentro de &quot;www&quot; o crear la carpeta &quot;oauth2callback&quot; indicada)..   &lt;/li&gt;
&lt;li&gt;..y finalmente, en la misma &quot;Google API Console&quot; debemos seleccionar a la opción &quot;Services&quot; y activar la &lt;span class=&quot;notranslate&quot;&gt;&quot;Google+ API&quot;&lt;/span&gt; (debe estar &quot;ON&quot; y de color verde), lográndose con ello finalmente crear nuestra &quot;API key&quot; en forma automática.&lt;/li&gt;
&lt;li&gt;y todo ya está listo! ..ahora al volver a la opción &quot;API Access&quot; de nuestra aplicación, ya tendremos disponible nuestro &quot;Client ID&quot; y la &quot;API Key&quot; (dentro de &quot;Simple Access API&quot;), estos datos son las que debemos utilizar y reemplazar en el archivo &quot;index.html&quot; de nuestra aplicación para que todo pueda funcionar correctamente.&lt;p&gt;Conviene también revisar las diferentes opciones que nos presenta la &quot;Google API Console&quot; pues nos puede ser necesarias como crear, modificar, renombrar, eliminar proyectos principalmente.&lt;/p&gt;
&lt;/li&gt;
&lt;p&gt;
&lt;li&gt;&lt;b&gt;..y ahora a probar nuestra aplicación IntGoogle01-Oauth20 e IntGoogle02-Oauth20 como JavaWeb projects corriendo sobre un servidor Tomcat !&lt;/b&gt;&lt;/li&gt;
&lt;/p&gt;
&lt;li&gt;y una ultima indicación.. Como estamos trabajando con la Google Maps API v2, tenemos que activar el servicio &quot;Google Maps API v2&quot; en la API consola, y registrar nuestra &lt;b&gt;API Key&lt;/b&gt; al importar la API en nuestro proyecto antes de subirlo a un servicio de hosting con un dominio personalizado y así puedan funcionar los mapas de nuestro proyecto sin mayores inconvenientes (aunque la Google Maps API v2 solo estará activa hasta Marzo 2013, por lo que debemos programar nuestras actualizacion a la API v.3)..por supuesto, al trabajar con nuestro servidor local &lt;b&gt;&quot;localhost&quot;&lt;/b&gt; no se presentan problemas.. el asunto es, como indicamos, al cargar nuestros proyectos a un servicio de hosting externo cualquiera.. como sobre la plataforma GAE (Google App Engine), que es donde esta corriendo nuestra demo)
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt9CCbbmHovkXVU333kquj3_txRXMEVz6UsSlIMjjr5KUXPHydoChOTwoDMlOITrkK428TDwo8ljyrv7nuZh6iQrfJfyAnoCIyIZx9_mCNywGYsB2pUsHvStWGHhzTKl277MtAC89B0hm3/s1600/Oauth20-0A.jpg&quot; imageanchor=&quot;1&quot; style=&quot; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;450&quot; width=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt9CCbbmHovkXVU333kquj3_txRXMEVz6UsSlIMjjr5KUXPHydoChOTwoDMlOITrkK428TDwo8ljyrv7nuZh6iQrfJfyAnoCIyIZx9_mCNywGYsB2pUsHvStWGHhzTKl277MtAC89B0hm3/s400/Oauth20-0A.jpg&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4_ttlzmsW5TC_6OyHw9qv_gat1l3_9wGwidrygs5BjcDfCnuJlBkDUnrFrwbVdJIzZ0RLNJBluMplL9g9oGHo7wTPT1SOE1_foCqfey4jxZDJY9ynIkhDeKn1SaaTLd_65yzV3Ot2f8b/s1600/Oauth20-01.jpg&quot; imageanchor=&quot;1&quot; style=&quot; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; width=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4_ttlzmsW5TC_6OyHw9qv_gat1l3_9wGwidrygs5BjcDfCnuJlBkDUnrFrwbVdJIzZ0RLNJBluMplL9g9oGHo7wTPT1SOE1_foCqfey4jxZDJY9ynIkhDeKn1SaaTLd_65yzV3Ot2f8b/s400/Oauth20-01.jpg&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;br/&gt;

&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Pasos para realizar el Codelab..&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Descargados estos proyectos en la carpeta de proyectos de Netbeans (en Mis Documentos en caso de Windows, u en otra crapeta que creamos conveniente), hay que cargar estos proyectos a Netbeans; para ello, debemos seleccionar la opción &lt;b&gt;File&lt;/b&gt;, &lt;b&gt;New Project&lt;/b&gt;; y en ella debemos seleccionar &lt;b&gt;Java Web&lt;/b&gt; y &lt;b&gt;Web Application with Existing Sources&lt;/b&gt;; luego al seleccionar &lt;b&gt;Next&lt;/b&gt;, se nos indicará que ingresemos la carpeta que contiene nuestro proyecto (&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Int-Google01&lt;/span&gt; por ejemplo), y al seleccionarla, Netbeans nos pondrá como nombre de nuestro proyecto y su ubicación las de nuestra fuente que estemos cargando, pero que podemos cambiar si estimamos necesario (no en este caso); luego indicando &lt;b&gt;Next&lt;/b&gt; nuevamente, Netbeans nos pedirá los datos de configuración del proyecto, el servidor a utilizar (Tomcat en este caso), la versión de JavaEE (que dejaremos la indicaba pues no estamos utilizando Java en este caso); y nuestro &quot;Context-Path&quot;, que tendrá el nombre del proyecto que estemos cargando...y al indicar &lt;b&gt;Next&lt;/b&gt; nuevamente, ahora Netbeans nos solicitará la configuración de nuestro &quot;codigo fuente&quot;, vale decir, la ubicación de nuestra carpeta web que debe aparecer ya predeterminada  (sino debemos ubicarla y seleccionarla), la ruta de nuestra carpeta WEB-INF, que tambien debería aparecer ya predeterminada, sino habra que realizar el mismo proceso indicado.. y listo; en este caso, al ser nuestro proyecto exclusivamente un proyecto &quot;web&quot; (y que no contiene nada de código Java), no es necesario indicar librerías complementarias ni otros datos, luego entonces al indicar &lt;b&gt;&quot;finish&quot;&lt;/b&gt;, Netbeans creará nuestro proyecto con una estructura similar al de nuestro primer proyecto... luego solo basta seleccionar al proyecto, hacer click derecho con el mouse y seleccionar &lt;b&gt;Run&lt;/b&gt;, y Netbeans construirá y lanzará nuestro proyecto a nuestro navegador de preferencia...

Debemos hacer lo mismo con nuestro proyecto &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;Int-Google02&lt;/span&gt;, y con esto veremos corriendo nuestros ejercicios&amp;nbsp;&amp;nbsp;(si han seguido todos los pasos de nuestro proyecto),&amp;nbsp;&amp;nbsp;hasta en 03 plataformas distintas: sobre un servidor HTTP Apache, sobre AppEngine como proyecto Python, y ahora sobre un servidor Apache Tomcat como proyecto JavaWeb; y con lo que podemos sacar como una clara conclusión que dentro del mundo Web no hay problemas de compatibilidad si trabajamos con sus elementos básicos:&amp;nbsp;refiriéndonos&amp;nbsp;a HTML, CSS y Javascript, y de manera simultanea, ahora ya tenemos mas claro como cargar proyectos a Netbeans con &quot;códigos existentes&quot;.. que es el caso del proyecto sdsimple que detallamos en nuestro siguiente codelab ó cualquier otro proyecto JavaWeb..&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Nota Importante:&lt;/span&gt;&lt;/b&gt; No realizamos lo mismo con nuestro proyecto &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/04/integracion-google-3ra-parte.html&quot;&gt;Integración Google 3ra. parte&lt;/a&gt;, que describe un modelo CRUD de una tabla utilizando como Back-End PHP y la base de datos MySQL. En este caso no existe ningún problema respecto a trabajar y manejar la base de datos MySQL - y cualquier otra, como PostgresSQL, SQL Server, Oracle, Acces, etc.- el problema esta por el lado del lenguaje que utilizamos para &quot;comunicarnos&quot; con ella, que en este caso es PHP; pues nuestro servidor de servlets Tomcat no viene preparado para trabajar con PHP,  pero vale mencionar que si es posible &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/11/quercus-using-java-with-php.html&quot;&gt;hacer que nuestro entorno Java reconozca PHP&lt;/a&gt;, pero hay que trabajar con un &quot;paquete&quot; complementario a nuestro proyecto para así ocurra ( y eso escapa los alcances del presente codelab ), pero es bueno tenerlo en cuenta si se nos presenta el caso de proyectos que involucren códigos java, y soluciones y códigos PHP... pues ya habrán podido darse cuenta, en el mundo Web todo se puede configurar, interconectar y utilizarse en forma conjunta de alguna u otra manera..&lt;br /&gt;
&lt;br /&gt;
Asimismo cabe destacar que, usualmente los proyectos &quot;Java Web&quot; se inician con un archivo &lt;b&gt;&quot;index.jsp&quot;&lt;/b&gt; (y que por supuesto, probablemente debe y puede contener códigos y variables java; pero en este caso, como hemos indicado, no estamos tocando nada de ese entorno por el lado del back-end, y en el caso de nuestro codelab &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot;&gt;Integracion Google 2da. parte&lt;/a&gt;, pues nuestro &quot;back-end&quot; es una hoja de cálculo de Google Docs que es externa a nuestro entorno de Desarrollo, y nos estamos conectando a ella utilizando únicamente código javascript (el&lt;span class=&quot;notranslate&quot;&gt; API Ajax Javascript &lt;/span&gt;de Google para ser mas exactos, cuya biblioteca resumen de ejercicios para muestra podemos consultar en el llamado &lt;a href=&quot;http://code.google.com/apis/ajax/playground/&quot; target=&quot;_blank&quot;&gt;Google Palyground&lt;/a&gt;); y es así como también podemos trabajar en nuestros proyectos personales... conectando nuestros aplicativos a bases de datos externas grabadas en la nube (internet), sean propias o de terceros que nos proporcionen un API de conexión y enlace, o también conectandonos a otros equipos en forma remota, para lo que debemos tener nuestro correspondiente usuario y password de acceso con los derechos necesarios, utilizando internet por supuesto...&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Saludos&lt;br /&gt;
@Mlaynes&lt;/div&gt;

&lt;br /&gt;
&lt;br /&gt;

&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;


&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/09/using-back-end-javamysql-el-proyecto.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/1762309203303289577/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/09/using-back-end-javamysql-el-proyecto.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1762309203303289577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1762309203303289577'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/09/using-back-end-javamysql-el-proyecto.html' title='Using the Back-End Java+MySQL : Getting Started'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDoxve0sZ4IHk_0ftgkTDfT18u3ePsSs32FYysMStT0WDjf7DG5Q5oJnmJRXCsP-Cwzrhge6zjDsTCcFPjNNvMrhdaWLtW7IfhiJp1vDVKLQoXJOXSElkocXMa4k48UdSGjgKSu6Y9YqVF/s72-c/tomcat-power.gif" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-8263314742378102621</id><published>2011-04-24T13:21:00.000-05:00</published><updated>2013-03-30T17:58:05.704-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Integracion a Google (3ra parte)</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login wait a few seconds and try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    //Int-Google03.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEMmE4ZGIzY2UtZjRlMC00MDI0LWEyNmMtNDgyNzE2NDMwODU4&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //de WebMatrix
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZjc3ODc2YjgtYjIyMi00MDc5LTliOTQtNDM1NGYzYmI5MzA0&quot;;
    my_link(w_link);
  };
  function my_link03() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYTQ5YzY2NWEtMmIxMi00YjZkLTliMDYtNDA3ZDE5OGQ5Y2U0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://www.appservnetwork.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=7&quot; target=&quot;_links&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHfh5pIMTvHdpluodhnq6uXGds4U_YkG2s5nkCCupYOxqRzLN3ahxUgJgrR4CRv6JAeEigj5wHoR35kRNxrJw8ZiWsZ4UqPXmGu6df3Ku7YDRw2jYl86h1bSPdOy2vKGUYUYQNfUK4PaT3/s1600/Back-End+PHP-MySQL.JPG&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
...y continuando con el entorno del Back-End PHP+MySQL pasamos a mostrar nuestro modelo de visualizaciones Google y ExtJs mostrado en nuestros codelabs Integracion Google 1ra y 2da parte, pero utilizando una base de datos llamada IGCodelab creada sobre MySQL (cuyo archivo IGCodelab.sql si proporcionamos en esta oportunidad para facilitar el desarrollo del ejercicio), y en la que la&amp;nbsp;respectiva Tabla de Usuarios tiene registrados nuestro &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;username&lt;/b&gt;&lt;/span&gt;&amp;nbsp;y &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;password&lt;/b&gt;&lt;/span&gt; de acceso al Modulo (puede probar con &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;prueba&lt;/b&gt;&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;prueba&lt;/b&gt;&lt;/span&gt;, o &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;passer&lt;/b&gt;&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;passer&lt;/b&gt;&lt;/span&gt;), entonces, y solo así, podremos acceder a las opciones de nuestro &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;TreePanel&lt;/b&gt;&lt;/span&gt; que muestra ls diversas opciones de visualizacion utilizando las API de Google y de ExtJS que henos preparado, y creo suficientes para observar el potencial de ExtJS integrado a Google para el desarrollo de aplicaciones reales, y que incluye el manejo de Wizard cuyo modelo básico fue desarrollado en un &lt;a href=&quot;http://www.quizzpot.com/2010/10/creando-un-wizard/&quot; target=&quot;_blank&quot;&gt;tutorial del Quizzpot&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Con que contamos en estos momentos?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
Si siguieron el desarrollo de nuestros codelabs desde el inicio, y por supuesto los anteriores respecto al Back-End PHP-MySQL, ya deben tener instalado en sus ordenadores un servidor de pruebas Apache con PHP+MySQL, y PHPMyAdmin (para administrar nuestras bases de datos), por lo que solo basta que verifiquen que tengan completo acceso a MySQL a través de PHPMyAdmin, accediendo a la misma y poder observar las tablas de la base de datos Tutorial creada en el ejercicio anterioir... y bueno, ahora nuevamente ya estamos listos para empezar nuestro codelab.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Audiencia&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Se recomienda que, para entender este codelab, tengamos los suficientes conocimientos de ExtJs y desarrollo Web (HTML, Javascript ...y algo de &lt;b&gt;PHP&lt;/b&gt; (que si no dominamos o desconocemos, pues no debería preocuparnos tanto puesto que en este modelo solo se utilizan instrucciones fáciles de comprender y su sintaxis es bastante sencilla, además que si nuestro interes va por el empleo de este Back-End, debe ser un buen motivo para empezar a explorar este lenguaje).&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Asimismo se recomienda haber leído y probado: &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;Integracion a Google (1ra parte)&lt;/a&gt; e &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_blank&quot;&gt;Integración a Google (2da parte)&lt;/a&gt;, especialmente para comprender las herramientas utilizadas para integrar de las API de Google a ExtJs (y viceversa), que en este caso no se emplean pero se hacen referencia.&lt;br /&gt;
&lt;P&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;a href=&quot;javascript:void(my_link01());&quot; target=&quot;_blank&quot;&gt;Material de Apoyo&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;b&gt;Int-Google03.rar,&lt;/b&gt;&amp;nbsp;&lt;/span&gt;Descomprimir&amp;nbsp;&amp;nbsp;el material de apoyo en una carpeta de &lt;b&gt;www&lt;/b&gt; de nuestro servidor local AppServ u otro compatible Apache-PHP-MySQL, y se creara la carpeta &lt;b&gt;&quot;Int-Google03&quot;&lt;/b&gt; que contiene los archivos correspondientes al presente codelab (si no entiende este paso favor consulte &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;&quot;empezando desde cero&#39;&lt;/a&gt;).Luego en éste código debemos proceder a la configuración de las rutas de importación de nuestra versión del framework ExtJs que utilicemos ( recomendado cualquier versión Ext-3.x, la versión ExtJs4 no es soportada por éste código ).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Int-Google03.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 2.6Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde al material de apoyo utilizado para instalar el presente codelab pero en la&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-using-php-on-iis-server.html&quot; target=&quot;_blank&quot;&gt;plataforma de Desarrollo WebMatrix&lt;/a&gt;. ( compatible con el servidor Appserv en este caso, pues este codelab sólo involucra al Back-End PHP+ MySQL que&amp;nbsp;también&amp;nbsp;es soportada por WebMatrix ). &amp;nbsp;El resultado de éste código es una versión mejorada del material presentado primero, y comprende al proyecto completo, es decir, se ha adicionado y configurado para su uso, a la versión &quot;liviana&quot; del framework &amp;nbsp;ExtJs versión 3.4.0, y si se desempaqueta éste código en una carpeta de&amp;nbsp;&lt;b&gt;&quot;www&quot;&lt;/b&gt;&amp;nbsp;en nuestro servidor local AppServ (dentro de otra carpeta que podemos llamar &quot;WebMatrix&quot; como hemos indicado ), podremos ver directamente los resultados al llamarlo desde la barra de direcciones de nuestro navegador usando :&amp;nbsp;&lt;b&gt;&quot;http://localhost/WebMatrix/Int-Google03&quot; (previa configuración de los&amp;nbsp;parámetros&amp;nbsp;de&amp;nbsp;conexión&amp;nbsp;a la base de datos&lt;/b&gt;, tal como se indica a continuación&lt;b&gt;)&lt;/b&gt;, y en este caso,&amp;nbsp;también&amp;nbsp;deben tenerse en cuenta las instrucciones para la correcta configuración de nuestra base de datos &quot;igcodelab&quot; empleada en este codelab, y para lo cual se anexa el archivo &lt;b&gt;igcodelab.sql&lt;/b&gt;.&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;NOTA :&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Entre las mejoras planteadas con este segundo código, cabe resaltar que ahora en nuestro modelo de Menu TrrePanel hemos adicionado a nuestro modelo CRUD de Mantenimiento y Listado de Presidentes empleado en los codelabs anteriores referidos al tema del Back-End PJP+MySQL a efectos de mostrar como se puede &quot;integrar&quot; estos modelos de manejo de base de datos en nuestros proyectos personales...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Pasos para ejecutar el Codelab...&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Para ejecutar el tutorial debemos primero debe realizar lo siguiente:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Crear la base de datos &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;IGCodelab&lt;/b&gt;&lt;/span&gt;. Esta base de datos contiene las tablas &lt;span class=&quot;notranslate&quot;&gt;drivers, productos y usuarios&lt;/span&gt; que son las necesarias para ejecutar el codelab (utilice el archivo &lt;b&gt;igcodelab.sql&lt;/b&gt; que incluimos en el material de apoyo).&lt;/li&gt;
&lt;li&gt;Para los que&amp;nbsp;están&amp;nbsp;ejecutando el ejercicio en su versión &quot;completa&quot;, la sugerida para probar sobre la plataforma &lt;b&gt;WebMatrix&lt;/b&gt;, sin haber realizado los&amp;nbsp;anteriores&amp;nbsp;referidos al Back-End PHP+MySQL, deben crear la base de datos&lt;b&gt; Tutorial&lt;/b&gt;, y cargar las tablas y datos desde el archivo &lt;b&gt;pdtes_usa.sql&lt;/b&gt; el cual es utilizada en ese ejercicio.&lt;/li&gt;
&lt;li&gt;Creada nuestra base de datos, puede observar que la tabla usuarios tiene registrado los usuarios &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;prueba&lt;/b&gt;&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;passer&lt;/b&gt;&lt;/span&gt; con la que podremos acceder al Modulo.&lt;/li&gt;
&lt;li&gt;Con nuestro &lt;b&gt;explorador&lt;/b&gt; debemos ingresar a la carpeta &lt;b&gt;&quot;Int-Google03&quot;&lt;/b&gt; creada en la carpeta &lt;b&gt;www&lt;/b&gt; del Appserv, y alli &quot;editar&quot; el archivo &lt;b&gt;&quot;drivers.php&quot;&lt;/b&gt;. Este archivo en sus primeras lineas tiene en su inicio las intrucciones de conexion a nuestra base de datos:&lt;br /&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
// Database connection information&lt;br /&gt;
$host = &quot;localhost&quot;;          // Host name&lt;br /&gt;
$user = &quot;root&quot;;          // User default for MySQL access&lt;br /&gt;
$pwd  = &quot;..yourPassword..&quot;;  // put your PHPMyAdmin Password&lt;br /&gt;
$db   = &quot;igcodelab&quot;;          // Our Database of exercise&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;En ella debemos modificar los parametros &lt;b&gt;$user&lt;/b&gt; (si nuestro usuario de ingreso no es root sino otro personalizado); y &lt;b&gt;$pwd&lt;/b&gt;, donde debemos poner nuestro Password de conexion a MySQL (el que utilizamos para nuestro PHPMyAdmin); en &lt;b&gt;$db&lt;/b&gt; va el nombre nuestra base de datos (si no corresponde a &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;igcodelab&quot;&lt;/b&gt;&lt;/span&gt; como se indica debemos cambiarlo a como corresponda); y finalmente debemos tener en cuenta que si nuestra prueba la realizamos directamente en un servicio hosting externo con dominio propio, entonces en &lt;b&gt;$host&lt;/b&gt;, en lugar de &lt;b&gt;localhost&lt;/b&gt; debemos colocar nuestra direccion web correspondiente: &lt;b&gt;www.mydominio.com&lt;/b&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;..y ahora nuevamente ya estamos listo para ejecutar nuestro ejercicio...!&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
Ahora, si con nuestro navegador ingresamos a &lt;b&gt;&quot;localhost&quot;&lt;/b&gt;, y luego al ingresar a la carpeta a carpeta&amp;nbsp;&lt;b&gt;&quot;Int-Google03&quot;&lt;/b&gt;&amp;nbsp; siguiendo la ruta donde hayamos descargado el material de apoyo (pero que debe dentro de la carpeta www de AppServ); pues al ingresar esta carpeta que contiene a nuestro archivo index.html, deberá aparecer una pantalla como la que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm3jhllRjdsrTBbOFEqMfnw63DxjZLXeyiA7X9_dqJBmjFpLtLA-Ru3Vt6DJA3-aZKkABhqsBf-eQjYgYt_ElUzHCjkoStCdYTEJcxen4nNzGSs6cLJ9gyvioXqNhi4G7FdhrLNel7obax/s1600/Int-Google03a.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm3jhllRjdsrTBbOFEqMfnw63DxjZLXeyiA7X9_dqJBmjFpLtLA-Ru3Vt6DJA3-aZKkABhqsBf-eQjYgYt_ElUzHCjkoStCdYTEJcxen4nNzGSs6cLJ9gyvioXqNhi4G7FdhrLNel7obax/s400/Int-Google03a.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Esto nos indica que nuestra descarga y copia ha sido correcta, y ya estamos listos para revisar el material de apoyo descargado y descubrir como hemos desarrollado nuestro codelab de Integracion Google empleando Wizards y Visualizaciones desarrollados con la API de Google y ExtJs.&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHLzsFwLarnqdfhgm0CbKJjwiH_Sy7f8Ezf88RBKvsRXrp5Z1KTxRCtepO2avar8LFBiU-AADOlYNEYfg2jkHJ7Q2D5gdAto7c9WSd3RA3mIjit-ggd_0SdcZh51UovECKBrHw40YMaFIZ/s1600/Int-Google03b.JPG&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHLzsFwLarnqdfhgm0CbKJjwiH_Sy7f8Ezf88RBKvsRXrp5Z1KTxRCtepO2avar8LFBiU-AADOlYNEYfg2jkHJ7Q2D5gdAto7c9WSd3RA3mIjit-ggd_0SdcZh51UovECKBrHw40YMaFIZ/s400/Int-Google03b.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nota.-&lt;/span&gt;&lt;/b&gt; si no aparece la primera pagina mostrada es probable que no hayamos descargado nuestra version completa o &quot;liviana&quot;de ExtJs en la carpeta &quot;www&quot;, como mostramos en &quot;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html&quot; target=&quot;_blank&quot;&gt;el potencial de ExtJs&lt;/a&gt;&quot;; o tal vez, estemos usando una versión de ExtJs diferente de la indicada en nuestro archivo HTML (..ahora estamos usando la versión ext-3.3.1 vigente al 01/03/2011). Observe la ruta rerlativa a &lt;b&gt;www&lt;/b&gt; que utilizamos para acceder dichos archivos &quot;../../extjs/extjs-3.1.1&quot; en este caso (que indica 2 carpetas sobre nuestra descarga del tutorial). Efectúe los cambios de la ruta necesarios en el archivo &lt;b&gt;index.html&lt;/b&gt; del tutorial y pruebe nuevamente hasta que aparezca la pantalla indicada.&lt;br /&gt;
&lt;br /&gt;
La segunda imagen nos muestra nuestro modelo de Pantalla de Acceso o &lt;span class=&quot;notranslate&quot;&gt;Login&lt;/span&gt;, la cual en su parte inicial, al seleccionar el drivers de nuestra conexion, al mismo tiempo verifica la conexion a nuestra base de datos (si no aparece la opcion MySQL es porque aún cuando nuestra configuración de ExtJs es correcta, nuestra conexion a nuestra base de datos MySQL no lo es, y debemos revisar los parametros indicados de nuestro archivo &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;drivers.php&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Asimismo, si no nos aparece nada, o al ingresar nuestros datos de acceso no se activa nuestro treePanel, o si la consola de nuestro browser nos muestra mensajes de problemas de conexion a la base de datos o conexion a MySQL, pues debemos revisar con mas detalle nuestra configuración y observar si los datos indicados han sido correctamente ingresados...&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: green; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Nota (22/11/2011).-&lt;/b&gt;&lt;/span&gt;&amp;nbsp;los ejercicios mostrados sobre uso del Back-End PHP+MySQL funcionan sin mayor problema tal como los presentamos, pero para los codelabs Grid-MySQL :Using the Bak-End PHP+MySQL (Getting Started), y en este codelab:&amp;nbsp;Int-Google03, como podrá comprobarse, los archivos *.php involucrados utilizan codificación&amp;nbsp;&lt;b&gt;ANSI&lt;/b&gt;, aún cuando lo recomendado cuando trabajemos en nuestros proyectos web es que como norma todos nuestros archivos sean construidos con la codificación&amp;nbsp;&lt;b&gt;UTF-8&lt;/b&gt;.... Ocurre que cuando se trabaja con&amp;nbsp;&lt;b&gt;cookies&amp;nbsp;&lt;/b&gt;(como es el caso de estos codelabs), puede haber restricciones para el uso de la función setcookie(), por cuanto en PHP por defecto, al trabajar sobre un servidor Apache, se encuentran restringidas las salidas del buffer del servidor luego que se haya cargado o ejecutado algun script HTML... y en el caso de los dos codelabs mencionados, como puede&amp;nbsp;fácilmente&amp;nbsp;observar por la forma en que se encuentran construidos los ejercicios, primero se cargan a los archivos index.html, y luego durante el proceso se invoca a los respectivos archivos *.php para interactuar con la base de datos MySQL.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Esta restricción puede superarse convirtiendo los archivos *.php que invocan a las funciones setcookie()&amp;nbsp;a codificación &lt;b&gt;ANSI&lt;/b&gt;, o como otra alternativa, reconfigurar nuestro archivo &lt;b&gt;PHP.ini&lt;/b&gt;, indicando la directiva: &amp;nbsp;&lt;b&gt;output_buffering=on&lt;/b&gt;&amp;nbsp;(su valor por defecto es&amp;nbsp;&lt;b&gt;off&lt;/b&gt;).&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
La documentación no indica al detalle la causa de esta salvedad pero puede ser verificado - utilizando Firebug de Firefox para hacer sus pruebas - que al convertir los archivos *.php del&amp;nbsp;&lt;b&gt;proyecto Int-Google03&lt;/b&gt;&amp;nbsp;a codificación UTF-8 (utilizando notepad++ u otro editor). Por ejemplo, pueden probar con el archivo&lt;b&gt; drivers.php&lt;/b&gt; que se utiliza primero para la grabación de los cookies, al cual a variar a codificación UTF-8 éste arroja &amp;nbsp;por la consola de inspección el warning : &quot;Cannot modify header information - header alreaqdy sent by..&quot;,.y nos indica las líneas de nuestras instrucciones setcookies(); y por supuesto, no funciona la carga de datos, o mas propiamente dicho, se bloquea la salida de datos desde el buffer del servidor, aún cuando la información haya sido &quot;capturada&quot;...&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Esto reiteramos, como hemos indicado, se soluciona al convertir nuevamente a&amp;nbsp;&lt;b&gt;ANSI&amp;nbsp;&lt;/b&gt;nuestro archivo drivers.php, o&amp;nbsp;también&amp;nbsp;podemos reconfigurar nuestro &lt;b&gt;PHP.ini&lt;/b&gt;&amp;nbsp;la directiva: &lt;b&gt;output_buffering=on&lt;/b&gt;, y en este ultimo caso, aún cuando nuestros archivos PHP sean codificados UTF-8 si se&amp;nbsp;permitirá&amp;nbsp;la &quot;salida&quot; de la información y el ejercicio funcionará sin ningún contratiempo.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Cabe anotar asimismo, que esta situación no ocurre si trabajamos con PHP sobre un servidor IIS (como WebMatrix), pero como hemos indicado al inicio de esta entrada que podemos bajar el codelab correspondiente a dicha plataforma para probar el ejercicio sin realizar mayores onfiguraciones para la importación de las librerías ExtJs, entonces, hemos cargado en ese codelab los archivos *.php que involucren el manejo de cookies en codificación ANSI para evitar cualquier problema en su funcionamiento.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Saludos&lt;br /&gt;
@Mlaynes&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;a href=&quot;javascript:void(rut_facebook_20());&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 5px 0px 0px; text-align: left; width: 40px;&quot; /&gt;Opina en nuestro foro §FB..!&lt;/a&gt;&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;&lt;/div&gt;



&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/04/integracion-google-3ra-parte.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;

&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/8263314742378102621/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/04/integracion-google-3ra-parte.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/8263314742378102621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/8263314742378102621'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/04/integracion-google-3ra-parte.html' title='Integracion a Google (3ra parte)'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHfh5pIMTvHdpluodhnq6uXGds4U_YkG2s5nkCCupYOxqRzLN3ahxUgJgrR4CRv6JAeEigj5wHoR35kRNxrJw8ZiWsZ4UqPXmGu6df3Ku7YDRw2jYl86h1bSPdOy2vKGUYUYQNfUK4PaT3/s72-c/Back-End+PHP-MySQL.JPG" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>Ayacucho, Lima, Perú</georss:featurename><georss:point>-12.131390006248221 -76.994354724884033</georss:point><georss:box>-12.133330506248221 -76.996822224884028 -12.129449506248221 -76.991887224884039</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-6913892482410064261</id><published>2011-03-10T14:52:00.000-05:00</published><updated>2013-03-30T17:46:13.903-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Using the Back-End PHP+MySQL ( Wizard &amp; Safety themes )</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login wait a few seconds and try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    //Wizard-sample.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEOWYyOGE3MTMtMTlkMy00ZTZjLWE3MDMtNzMyNGY1MTRmN2I3&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //de WebMatrix
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENGYxMjNkYTEtNTg4Zi00OGE4LWI0MDMtN2Y1MmMyMjRmMTQx&quot;;
    my_link(w_link);
  };
  function my_link03() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYTQ5YzY2NWEtMmIxMi00YjZkLTliMDYtNDA3ZDE5OGQ5Y2U0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://www.appservnetwork.com/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHfh5pIMTvHdpluodhnq6uXGds4U_YkG2s5nkCCupYOxqRzLN3ahxUgJgrR4CRv6JAeEigj5wHoR35kRNxrJw8ZiWsZ4UqPXmGu6df3Ku7YDRw2jYl86h1bSPdOy2vKGUYUYQNfUK4PaT3/s1600/Back-End+PHP-MySQL.JPG&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
...y continuando con el entorno del Back-End PHP+MySQL pasamos a mostrar el mismo modelo de la &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-introduccion.html&quot; target=&quot;_blank&quot;&gt;entrada anterior&lt;/a&gt; que nos muestra un mantenimiento basico de Tablas (Altas, Bajas,&amp;nbsp;Modificación, Consulta e Impresion); pero en este caso mostrando previamente una pantalla de acceso o Wizard, mediante el cual, de habernos registrado previamente en una respectiva Tabla de Usuarios (en donde debe estar registrados nuestro &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;username&lt;/b&gt;&lt;/span&gt;&amp;nbsp;y su respactivo &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;password&lt;/b&gt;&lt;/span&gt; de acceso al Modulo), entonces, y solo así, podremos acceder a nuestro GridEditor que nos muestra una lista de Presidentes de U.S.A y los partidos a los que pertenecen...&lt;br /&gt;
&lt;br /&gt;
El hecho de utilizar &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Wizards&lt;/b&gt;&lt;/span&gt; o Pantallas de Acceso a nuestros modulos o sistemas, va asociado de manera ineludible a temas de seguridad por lo que debemos empezar a tomar en cuenta las siguientes consideraciones:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;No debe permitirse el &quot;acceso directo&quot; a nuestras paginas&lt;/b&gt;&lt;/u&gt;, en este caso a nuestro modelo &quot;grideditor&quot; de presidentes, vale decir que si alguien obtuviese la direccion URL de nuestro&amp;nbsp;GridEditor (como debe ser con cualquier otra pagina de nuestros sistemas), estos no deben poder acceder a ellas, sino que deberán ser redirigidos a la Pantalla de Acceso de nuestro modulo o sistema, y acceder a nuestras opciones solo si hubiesen sido debidamente registrados.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Debe asimismo tomarse en cuenta acciones de&amp;nbsp;&lt;u&gt;&lt;b&gt;Auditoria de Datos&lt;/b&gt;&lt;/u&gt;, es decir, que&amp;nbsp;deberíamos&amp;nbsp;a empezar a registrar en una Tabla de diseño adecuado, todas las operaciones que estan efectuando nuestros usuarios (Alta, Baja, Modificacion, Consulta, y su fecha y hora de operación), y así poder hacer un seguimiento de ellas (este tema no forma parte del presente &quot;codelab&quot; pero lo mencionamos para su consideración)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Debe tambien tomarse en cuenta una &lt;b&gt;&lt;u&gt;Validacion de Datos&lt;/u&gt;&lt;/b&gt; pensando en el &amp;nbsp;funcionamiento del sistema (no solo en las condiciones estáticas de las mismas); es decir por ejemplo, si en nuestro ejercicio se quisiera eliminar un partido poltico (que trabaja en este caso como una Tabla de Datos), primero se debe verificar si no esta siendo utilizada en la tabla de Presidentes (que para los efectos expuestos trabaja en este caso como si se tratase de una Tabla de Transacciones); de no hacerlo así y se procediera a borrar un partido que esta siendo utilizado.. sencillamente los presidentes que pertenecen a dicho partido &quot;desaparecerían&quot; de nuestra Vista (por la condicion Where del Query), y eso seria&amp;nbsp;erróneo. pues la data&amp;nbsp;seguiría&amp;nbsp;grabada en nuestra base de datos pero no se mostraría (la &amp;nbsp;codificación&amp;nbsp;del presente codelab tampoco contempla lo indicado,&amp;nbsp;pero&amp;nbsp;también&amp;nbsp;reiteramos que debe tenerse en cuenta.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;y finalmente, debe tomarse en cuenta&amp;nbsp;&lt;u&gt;&lt;b&gt;temas de seguridad de la WEB&lt;/b&gt;&lt;/u&gt; y evitar la acción de virus y hackers... PHP nos presenta varias opciones y temas de seguridad que debemos empezar a revisar y considerar para nuestros proyectos, y para lo cual detallaremos algunas referencias tecnicas que esperamos que con su aporte se puedan mejorar aún mas, por cuanto, en lo que respecta a estos temas en particular, los diversos software de desarrollo &amp;nbsp;permanentemente presentan mejoras en sus formas y opciones... y en lo que respecta a este &quot;codelab&quot;, hemos considerado un Modelo Básico pero bastante practico, el cual esperamos &amp;nbsp;mejorar aun mas para cuando presentemos nuestro modelo de Integracion a Google utilizando el manejo de las API de visualizaciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Con que contamos en estos momentos?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Si siguieron el desarrollo de nuestros codelabs desde el inicio, y por supuesto el anterior respecto al Back-End PHP-MySQL, ya deben tener instalado en sus ordenadores un servidor de pruebas Apache con PHP+MySQL, y PHPMyAdmin (para administrar nuestras bases de datos), por lo que solo basta que verifiquen que tengan completo acceso a MySQL a través de PHPMyAdmin, accediendo a la misma y poder observar las tablas de la base de datos Tutorial creada en el ejercicio anterioir... y bueno, ahora nuevamente ya estamos listos para empezar nuestro codelab.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-size: large;&quot;&gt;Audiencia&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Se recomienda que, para entender este codelab, tengamos los suficientes conocimientos de ExtJs y desarrollo Web (HTML, Javascript ...y algo de &lt;b&gt;PHP&lt;/b&gt; (que si no dominamos o desconocemos, pues no debería preocuparnos tanto puesto que en este modelo solo se utilizan instrucciones fáciles de comprender y su sintaxis es bastante sencilla, además que si nuestro interes va por el empleo de este Back-End, debe ser un buen motivo para empezar a explorar este lenguaje).&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
Asimismo se recomienda haber leído y probado: &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;Integracion a Google (1ra parte)&lt;/a&gt; e &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_blank&quot;&gt;Integración a Google (2da parte)&lt;/a&gt;, especialmente para comprender las herramientas utilizadas para integrar de las API de Google a ExtJs (y viceversa), que en este caso no se emplean pero se hacen referencia.&lt;br /&gt;
&lt;P&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;a href=&quot;javascript:void(my_link01());&quot; target=&quot;_blank&quot;&gt;Material de Apoyo&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;b&gt;Wizard-sample.rar,&lt;/b&gt;&amp;nbsp;&lt;/span&gt;Descomprimir el material de apoyo en una carpeta de &quot;&lt;b&gt;www&quot;&lt;/b&gt; de nuestro servidor local AppServ u otro compatible Apache-PHP-MySQL, y se creara la carpeta &lt;b&gt;&quot;Wizard-sample&quot;&lt;/b&gt; que contiene los archivos correspondientes al presente codelab (si no entiende este paso favor consulte &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;&quot;empezando desde cero&#39;&lt;/a&gt;). Luego en éste código debemos proceder a la configuración de las rutas de importación de nuestra versión del framework ExtJs que utilicemos ( recomendado cualquier versión Ext-3.x, la versión ExtJs4 no es soportada por éste código ).&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Wizard-sample.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 2.6Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde al material de apoyo utilizado para instalar el presente codelab pero en la&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-using-php-on-iis-server.html&quot; target=&quot;_blank&quot;&gt;plataforma de Desarrollo WebMatrix&lt;/a&gt;.( compatible con el servidor Appserv en este caso, pues este codelab sólo involucra al Back-End PHP+ MySQL que&amp;nbsp;también&amp;nbsp;es soportada por WebMatrix ).&amp;nbsp;El resultado de éste código es una versión mejorada del material presentado en el enlace anterior, y comprende al proyecto completo, es decir, se ha adicionado y configurado para su uso, a la versión &quot;liviana&quot; del framework &amp;nbsp;ExtJs versión 3.4.0, y si se desempaqueta éste código en una carpeta de&amp;nbsp;&lt;b&gt;&quot;www&quot;&lt;/b&gt;&amp;nbsp;en nuestro servidor local AppServ (dentro de otra carpeta que podemos llamar &quot;WebMatrix&quot; como hemos indicado ), podremos ver directamente los resultados al llamarlo desde la barra de direcciones de nuestro navegador usando :&amp;nbsp;&lt;b&gt;&quot;http://localhost/WebMatrix/wizard-sample&quot; (previa configuración de los&amp;nbsp;parámetros&amp;nbsp;de&amp;nbsp;conexión&lt;/b&gt;, tal como se indica a continuación a la&amp;nbsp;base de datos &quot;tutorial&quot; (empleada en este codelab), y el archivo&amp;nbsp;&lt;b&gt;pdtes_usa.sql&lt;/b&gt;&amp;nbsp;anexado corresponde al mismo empleado por el codelab anterior Grid-PHP-MySQL, y en la que debemos crear a la tabla &quot;usuarios&quot; y registrar el nombre y password de nuestro usuario para acceder al sistema, y lo debemos crear &quot;manualmente&quot; como una manera de familiarizarnos con el manejo de la herramienta &lt;b&gt;phpMyAdmin &lt;/b&gt;que viene instalado con el servidor Appserv.&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;NOTA :&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Entre las mejoras planteadas con este segundo código, cabe resaltar que ahora nuestra pantalla de acceso presenta en su codificación condiciones dinámicas respecto al lenguaje de nuestro navegador para lo cual, hemos procedido a determinar mediante instrucciones HTML el lenguaje utilizado por nuestro navegador... y con instrucciones javascript, y empleando la Google API language, mostrar la información desplegada en nuestra pantalla de acceso en español, inglés e incluso otros idiomas (prueben con cambiar el lenguaje de su navegador Ingresando a Herramientas, Opciones, Avanzado, Contenido Web, Configuración del Idioma - si estamos utilizando Google Chrome - &amp;nbsp;; asimismo, en nuestros archivos php, se esta utilizando toda la información cargada en los &quot;cookies&quot;, para así poder recuperar en cada &quot;pagina php&quot;, los datos de acceso a nuestra base de datos MySQL...&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;NOTA (22/11/2011) :&lt;/b&gt;&lt;/span&gt; Desde Mayo del 2011, Google ha declarado en proceso de obsolescencia de la API Language v.1 que utilizamos en este codelab (y de forma definitiva a partir del 01/12/2011&amp;nbsp;según&amp;nbsp;la &lt;a href=&quot;http://code.google.com/intl/es/apis/language/translate/v1/getting_started.html&quot; target=&quot;_blank&quot;&gt;documentación respectiva&lt;/a&gt;); y ha considerado la versión de la Google API Language v.2 como un &lt;u&gt;servicio exclusivo de paga&lt;/u&gt; - así es en estos momentos, sin cuotas libres... algo extraño en el mundo Google, pero esa es la realidad por el momento - y la actual versión 1 de la API Language de Google no se muestra estable en su funcionamiento, por lo que hemos modificado nuestro código para que, en caso de efectuarse la traducción, se muestre nuestro mensaje en ingles... es una restricción que&amp;nbsp;también&amp;nbsp;hemos tenido que efectuar a los mensajes de bienvenida y de alertas de nuestro Blog, los que eran multi-lenguaje -incluyendo chino, japonés, etc.- los que ahora, de no funcionar la API de traducción (por motivos de cuota, restricción, etc.), pues por lo menos muestren los mensajes en Inglés... Google informa que el gadgets Google Traductor seguirá siendo un servicio libre, pero mientras no contemos con&amp;nbsp;algún&amp;nbsp;proyecto opensource de fuerza para traducciones libres (como si existe para el caso de &lt;a href=&quot;http://www.openstreetmap.org/?mlat=-12.131460578575&amp;amp;mlon=-76.994376179481&amp;amp;zoom=5&amp;amp;layers=M&quot; target=&quot;_blank&quot;&gt;servicios de Mapas&lt;/a&gt; por ejemplo), pues ., .increible!... pero también podemos recurrir a la &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ff512385.aspx&quot; target=&quot;_blank&quot;&gt;Microsoft API Language&lt;/a&gt;, la cual nos brinda una cuota de subscripción libre de hasta 5M de caracteres por mes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Pasos para ejecutar el Codelab...&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Para ejecutar el tutorial debemos primero debe realizar lo siguiente:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Crear en nuestra base de datos TUTORIAL la tabla &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;usuarios&lt;/b&gt;&lt;/span&gt;. Esta base de datos fue creada en el ejercicio anterior (importada de pdts_usa.sql), y en esta oportunidad no les proporcionamos un archivo para su creación con el objeto que sean creadas directamente utilizando nuestro PHPMyAdmin o DBManager. Los requisitos de nuestra tabla de usuarios es que tenga definido como mínimo los siguientes campos: &lt;b&gt;ID&lt;/b&gt; : Int(10), primary_key, auto_increment y unique; el campo&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;usuario&lt;/b&gt;&lt;/span&gt;: varchar(15), y el campo&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;password:&lt;/b&gt;&lt;/span&gt; varchar(15); adicionalmente podemos crear otros campos de diferentes tipo como Apellidos completos -o separado Paterno, Materno- Nombre completo, e-mail, telefono fijo, móvil, id_skype, direccion, o cualquier forma de contactar con nuestros usuarios, etc.. siempre dependiendo de los requerimientos de diseño de nuestro modulo o sistema ( &lt;u&gt;los tres primeros campos deben tener exactamente ese nombre&lt;/u&gt; -respetando minusculas y mayusculas para mejor identificacion- caso contrario, debemos cambiar la respectiva codificación en nuestro archivo &lt;b&gt;index.php&lt;/b&gt; que controla el acceso a nuestro ejercicio).&lt;/li&gt;
&lt;li&gt;Creada nuestra tabla usuarios, pues ahora debemos registrar 2 o mas usuarios para hacer nuestras pruebas; puede ser uno llamado &lt;b&gt;prueba&lt;/b&gt; con nombre &lt;b&gt;prueba&lt;/b&gt; y password &lt;b&gt;prueba&lt;/b&gt; (para hacer mas facil nuestro ingreso de datos), o como sea de nuestro agrado.&lt;/li&gt;
&lt;li&gt;Con nuestro &lt;b&gt;explorador&lt;/b&gt; debemos ingresar a la carpeta &lt;b&gt;&quot;Wizard-sample&quot;&lt;/b&gt; creada en la carpeta &lt;b&gt;www&lt;/b&gt; del Appserv, y alli &quot;editar&quot; el archivo &lt;b&gt;&quot;index.php&quot;&lt;/b&gt;. Este archivo en sus primeras lineas tiene en su inicio las intrucciones de conexion a nuestra base de datos:&lt;br /&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
// Database connection information&lt;br /&gt;
$host = &quot;localhost&quot;;          // Host name&lt;br /&gt;
$user = &quot;root&quot;;          // User default for MySQL access&lt;br /&gt;
$pwd  = &quot;..yourPassword..&quot;;  // put your PHPMyAdmin Password&lt;br /&gt;
$db   = &quot;tutorial&quot;;          // Our Database of exercise&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;En ella debemos modificar los parametros &lt;b&gt;$user&lt;/b&gt; (si nuestro usuario de ingreso no es root sino otro personalizado); y &lt;b&gt;$pwd&lt;/b&gt;, donde debemos poner nuestro Password de conexion a MySQL (el que utilizamos para nuestro PHPMyAdmin); en &lt;b&gt;$db&lt;/b&gt; va el nombre nuestra base de datos (si no corresponde a &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;tutorial&quot;&lt;/b&gt;&lt;/span&gt; como se indica debemos cambiarlo); y finalmente debemos tener en cuenta que si nuestra prueba la realizamos directamente en un servicio hosting externo con dominio propio, entonces en &lt;b&gt;$host&lt;/b&gt;, en lugar de &lt;b&gt;localhost&lt;/b&gt; debemos colocar nuestra direccion web correspondiente: &lt;b&gt;www.mydominio.com&lt;/b&gt;&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;..y ahora nuevamente ya estamos listo para ejecutar nuestro ejercicio...!&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
Ahora, si con nuestro navegador ingresamos a &lt;b&gt;&quot;localhost&quot;&lt;/b&gt;, y luego al ingresar a la carpeta a carpeta&amp;nbsp;&lt;b&gt;&quot;Wizard-sample&quot;&lt;/b&gt;&amp;nbsp; siguiendo la ruta donde hayamos descargado el material de apoyo (pero que debe dentro de la carpeta www de AppServ); pues al ingresar esta carpeta que contiene a nuestro archivo index.html, deberá aparecer una pantalla como la que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3KtWAaZg28tZw5bsX8Iih8ef7KWFJKTR8KXGIKZjSHTrjXA3eZ0Edu6-Ps7qHoJjk8yNPD6lpnam0r9dhLCE3HrN4N5KCCD0tLGguMgbP4G_zEnmcxoDyYRNXGmW9AS9-ECYQdwbYx84L/s400/Wizard-sample.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;270&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3KtWAaZg28tZw5bsX8Iih8ef7KWFJKTR8KXGIKZjSHTrjXA3eZ0Edu6-Ps7qHoJjk8yNPD6lpnam0r9dhLCE3HrN4N5KCCD0tLGguMgbP4G_zEnmcxoDyYRNXGmW9AS9-ECYQdwbYx84L/s400/Wizard-sample.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Esto nos indica que nuestra descarga y copia ha sido correcta, y ya estamos listos para revisar el material de apoyo descargado y descubrir como hemos desarrollado nuestro Wizards de conexion a nuestra aplicacion descrita en el post anterior, correspondiente a un Modelo Basico de mantenimiento de Tablas con opciones de Alta, Baja, Modificacion, Consulta, Impresion, Busquedas, etc, bajo un formato clasico.&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPvRGmu2Jy-czh7BNyJ8QcED4Wq_1amWPZcGDu53wuWYgCktRvalgER1B6tpU-mpYqPgUivBGN7cWm68C5YLHy2NEFsNwCjwW4yBZM3omWdClKfPY3_uGU7kmRVTZOYv1Xt0FtQcMdnrXC/s400/Back-End+PHP+MySQL.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;270&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPvRGmu2Jy-czh7BNyJ8QcED4Wq_1amWPZcGDu53wuWYgCktRvalgER1B6tpU-mpYqPgUivBGN7cWm68C5YLHy2NEFsNwCjwW4yBZM3omWdClKfPY3_uGU7kmRVTZOYv1Xt0FtQcMdnrXC/s400/Back-End+PHP+MySQL.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Nota.-&lt;/b&gt; si no aparece la primera pagina mostrada es probable que no hayamos descargado nuestra version completa o &quot;liviana&quot;de ExtJs en la carpeta &quot;www&quot;, como mostramos en &quot;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html&quot; target=&quot;_blank&quot;&gt;el potencial de ExtJs&lt;/a&gt;&quot;; o tal vez, estemos usando una versión de ExtJs diferente de la indicada en nuestro archivo HTML (..ahora estamos usando la versión ext-3.3.1 vigente al 01/03/2011). Observe la ruta rerlativa a &lt;b&gt;www&lt;/b&gt; que utilizamos para acceder dichos archivos &quot;../../extjs/extjs-3.1.1&quot; en este caso (que indica 2 carpetas sobre nuestra descarga del tutorial). Efectúe los cambios de la ruta necesarios en el archivo &lt;b&gt;index.html&lt;/b&gt; del tutorial y pruebe nuevamente hasta que aparezca nuestra pantalla de acceso.&lt;br /&gt;
&lt;br /&gt;
La segunda imagen nos muestra nuestro modelo de mantenimiento de una tabla desarrollado en el post anterior, si hacemos click sobre dicha imagen nos remitirá a la pagina indicada en la web oficial de ExtJs para la demostracion, pero en nuestro aplicativo, en el toolbar le hemos agregado un boton adicional para salir del Modulo (y que nos redirigirá a nuestra pantalla inicial de acceso); asimismo vale indicar que nuestras pruebas las debemos realizar sobre nuestro servidor local ( &lt;a href=&quot;htpp://localhost&quot; target=&quot;_blank&quot;&gt;htpp://localhost&lt;/a&gt; ), pues en este caso se&amp;nbsp;trata&amp;nbsp;de&amp;nbsp;una version mejorada como indicamos.&lt;br /&gt;
&lt;br /&gt;
Asimismo, si al ingresar nuestros datos definidos en la tabla usuarios no aparece nuestra pantalla de mantenimiento del ejercicio anterior, y nuestro browser nos muestra mensajes de problemas de conexion a la base de datos o conexion a MySQL, pues debemos revisar con mas detalle si nuestra tabla usuarios ha sido correctamente creada y definida, y si los datos de acceso registrados en ella son a su vez tambien correctamente ingresados...&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Detalle del Modulo.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Al revisar los archivos desempaquetados de nuestro Material de Apoyo encontraremos los siguientes archivos:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Readme.txt&lt;/b&gt;, donde encontraremos informacion respecto a este tutorial y los foros que nos sirvieron de apoyo y referencia para desarrollar este ejercicio.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pdts_usa.sql&lt;/b&gt;, archivo tipo texto en formato de lenguaje SQL con que se crearon &amp;nbsp;las tablas &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;presidents&lt;/b&gt;&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;parties &lt;/b&gt;&lt;/span&gt;&amp;nbsp;de nuestra base de datos&lt;b&gt; tutorial&lt;/b&gt; (la ponemos de referencia, pues como indicamos antes, nuetra tabla de usuarios requerida para este ejercicio deberá ser creada directamente con PHPMyAdmin o DBManager de nuestro servidor MySQL).&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;database.php&lt;/b&gt;, archivo de tipo texto en formato de lenguaje PHP con el cual actua del lado del servidor para interactuar con nuestra base de datos, en ella hemos comentado las partes que corresponden a la carga de datos de acceso a nuestra base de datos, así como las funciones&amp;nbsp;correspondiente&amp;nbsp;a cada caso como es la actualizacion, creación, borrado, busqueda e impresion de nuestra &lt;span class=&quot;notranslate&quot;&gt;data&lt;/span&gt;; las formas de este codigo puede ser facilmente comprendido y ajustado anuestros desarrollos propios.&lt;br /&gt;
Se presenta asimismo las funciones getlist() y getparties() que son las ejecutan nuestras consultas de las tablas MySQL, habiendose comentado las adiciones efectuadas por el caso de efectuar &quot;Conteo de Paginas&quot; y &quot;Busquedas rapidas&quot;.&lt;br /&gt;
Se presenta asimismo a las funciones JEncode y codeDate, la primera para llamar a las funciones standard de codificacion del formato Json, y la segunda para el tratamiento de los campos tipo fecha al formato mm/dd/yyyy empleado en el GridEditor de presidentes de nuestro ejercicio..&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JSON.php&lt;/b&gt;, archivo de tipo texto en formato PHP que es una libreria clasica de PHP para el manejo del formato JSON con el que se trabaja las base de datos y tablas de MySQL (y que  siempre debemos utilizar en nuestros proyectos que trabajemos con MySQL)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Index.php&lt;/b&gt;, archivo de tipo texto en formato PHP, HTML y Javascript debidamente etiquetados por cada grupo de codificación. Este archivo es de&amp;nbsp;ejecución&amp;nbsp;automatica y en ella se define nuestra pantalla de acceso al Modulo, y la correspondiente consulta a nuestra tabla de usuarios respecto a que si los datos ingresados (nombre y password), son correctos y corresponden a los registrados en nuestra tabla &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;usuarios&lt;/b&gt;&lt;/span&gt;, lo que permitira el acceso a nuestro GridEditor de presidentes.&lt;br /&gt;
&lt;br /&gt;
Las instrucciones de contacto vía mail y redireccionamiento a nuestra &lt;span class=&quot;notranslate&quot;&gt;Fan Page Facebook&lt;/span&gt; son detallados en nuestro post referido a&amp;nbsp;técnicas&amp;nbsp;de &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/localizacion-e-internacionalizacion-de.html&quot; target=&quot;_blank&quot;&gt;Localización e Internacionalizacion&lt;/a&gt;. (y  próximamente a este &lt;b&gt;codelab&lt;/b&gt; le agregaremos también la técnica de traduccion automatiza del &lt;span class=&quot;notranslate&quot;&gt;API Language&lt;/span&gt; de Google, conforme al lenguaje de nuestro navegador, para completar el manejo del referido tema).&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Grid-PHP-MySQL.php,&lt;/b&gt; en formato PHP y HTML en donde la parte PHP del mismo realiza el control de acceso a nuestra aplicación (para evitar los &quot;accesos&quot; directos sin haber utilizado el Wizard), y asimismo, la parte HTML indica las directivas de inicio de nuestro ejercicio para la importacion de las librerias de ExtJS y las de nuestro ejercicio.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;presidentslist.html&lt;/b&gt;, archivo en formato HTML que nos muestra una Tabla, la cual se genera al ejecutar la opcion impresion de nuestro ejercicio: luego en las instrucciones de nuestro archivo database.php podrá observar la&amp;nbsp;técnica&amp;nbsp;de como se manda a imprimir dicho documento.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;mainscript.js&lt;/b&gt;, archivo en formato ExtJs debidamente empaquetado utilizando namespace, que nos muestra las funciones e instrucciones ExtJs que permiten el funcionamiento de las opciones de Actualizacion, Creacion, Modificacion, Consulta, Impresion y Busqueda, entre otras opciones, de nuestra aplicacion de mantenimiento (no varia del codelab anterior).&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;searchfield.js&lt;/b&gt;, archivo en formato ExtJs que exclusivamente contiene las funciones que nos muestran el recuadro de Busqueda Rapida de nuestro codelab anterioir (no varía).&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;style.css&lt;/b&gt;, archivo en formato CSS que permite la llamada a las imagenes que utilizaremos en los botones de acceso a las opciones de nuestro ejercicio mostradas en la barra superior de nuestra ventana (toolbar) de nuestra aplicacion de mantenimiento (no varía del codelab anterior).&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;carpetas &lt;span class=&quot;notranslate&quot;&gt;icons&lt;/span&gt; e &lt;span class=&quot;notranslate&quot;&gt;images&lt;/span&gt;&lt;/b&gt;, la primera contiene el icons mostrado en la pestaña de nuestro navegador; y el segundo, las imagenes jpg personales utilizadas en el ejercicio y los dos estilos de celdas que hemos presentado en este caso para mejorar la presentación de las celdas del Grid. No varía del codelab anterior.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;APUNTES TECNICOS&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Si ya han probado con exito nuestro pantalla de acceso a nuestro modelo básico de mantenimiento de Tablas, al revisar los archivos del ejercicio debe tenerse presente lo siguiente :&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Si revisan el codigo de &lt;b&gt;Index.php&lt;/b&gt;&amp;nbsp;observarán que como herramienta de &quot;control&quot; de nuestros accesos utilizamos las &quot;cookies&quot;, en la cual grabamos la informacion necesaria para verificar que &amp;nbsp;nuestro usuario ha utilizado el Wizard de acceso de nuestro ejercicio; reiteramos que este se trata de un modelo basico y que en este caso solo pregunta si nuestra cookie del nombre esta vacia, y por supuesto que nuestra logica de verificacion puede y debe ser mejorado (como adicionando la verificacion de nuestro usuario y password de acceso, o verificando y poniendo un limite al tiempo trascurrido desde nuestra &amp;nbsp;ultima operacion para evitar que las cookies grabadas en nuestros ordenadores y no borradas al salir cerrando nuestro navegador pues sean mal utilizadas, entre otros posibles casos).&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Si hemos salido correctamente de nuestro modelo de mantenimiento, y digitasemos en la barra de direcciones nuestro navegador la direccion exacta de nuestro modelo http://localhost/tutorial/Wizard-samples/Grid-PHP-MySQL.php para nuestro caso, nos remitirá a nuestra pantalla de acceso (porque las cookies estan vacias), de ingresar al modulo es porque las cookies no han sido borradas al salir directamente al cerrar el browser.&lt;/li&gt;
&lt;li&gt;Nuestro modelo nos muestra que podemos utilzar todas las cookies que querramos y asimismo, que nuestros passwords, como cualquier otro dato, pueden ser encriptados y desencriptados con el objeto que terceros no &quot;vean&quot; y utilicen indebidamente nuestros datos utilizando para ello las instrucciones:&lt;br /&gt;
&lt;b&gt;&amp;nbsp;$pwd = base64_encode($pwd);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;en index.php&lt;br /&gt;
$my_pwd = base64_decode($pwd);&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;en database.php&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Resulta interesante asimismo, observar con la opcion &quot;Inspeccionar Elemento&quot; del navegador Google Chrome (opcion del boton derecho del mouse sobre nuestra pantalla del browser), y con el Firebug de Mozila Firefox (que debe ser instalado como un plug-in de dicho navegador, y es el utilizado en los videos tutoriales del Quizzpot), pues que los recursos de nuestras paginas web (la pantalla de acceso y la de nuestra pantalla de mantenimiento para este codelab) no nuestran los codigos PHP en la parte &quot;cliente&quot; de nuestros navegadores (revise opcion recursos de nuestra pagina web al Inspeccionar elemento con Google Chrome o Firebug de Firefox, cuando esten cargadas), y con esto nos estamos asegurando que los datos de informacion de acceso a nuestro servidor HTTP no se muestran a los usuarios (refiriendonos a los que hemos escritos al inicio de index.php), pero sería mas interesante que efectuesemos nuevas pruebas con capturadores de paginas web (con herramientas como&amp;nbsp;HTTrack,&amp;nbsp;WebRipper o el mismo Dreamweaver, entre otros), para que observemos que archivos y que informacion &amp;nbsp;pueden bajar y utilizar terceros no autorizados por nosotros.&lt;/li&gt;
&lt;li&gt;Con la misma herramienta podemos revisar las &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;cookies&lt;/b&gt;&lt;/span&gt; de nuestro modelo y verificar que nuestras contraseñas se encuentran encriptadas y no disponibles para terceros, quedando pendiente revisar diversas tecnicas de encriptacion disponibles para dicha función, así como otras opciones del propio PHP.(como el uso de sesiones, que son como las &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;cookies&lt;/b&gt;&lt;/span&gt; pero por el lado del servidor y totalmente invisibles a los usuarios o clientes).&lt;/li&gt;
&lt;li&gt;Cabe resaltar asimismo que este modelo de codificacion no es muy recomendada por no mantener el criterio de separar nuestras validaciones (archivos PHP) de nuestros form (HTML y Javascript), o  seguir un modelo de desarrollo MVC (Models, Views, Controlers), que en desarrollos grandes nos facilitarían bastante el desarrollo por componentes trabajando en equipo, mejorando así la comprensión y mantenimiento de los mismos; &amp;nbsp;pero este modelo que presentamos es muy practico y nos permite comprender espero facilmente toda la logica planteada con muy pocos archivos, y por eso nuestra elección para utilizarlo en este codelab.&lt;/li&gt;
&lt;li&gt;Ponemos a su consideración las siguientes direcciones:&lt;br /&gt;
&lt;br /&gt;
1.&amp;nbsp;Pagina del &lt;a href=&quot;http://foros.cristalab.com/script-de-login-php-con-mysql-t2025/&quot; target=&quot;_blank&quot;&gt;foro de www.cristalab.com&lt;/a&gt; que sirvió de base para este modelo, entrada antigua pero que aun mantiene vigencia y que en sus comentarios muestra enlaces a temas de seguridad muy importantes (agradecimiento a &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;azelito&lt;/span&gt;, usuario de dicho foro).&lt;br /&gt;
2.&amp;nbsp;Pagina de &lt;a href=&quot;http://blogdephp.com/php-login/&quot; target=&quot;_blank&quot;&gt;Blogdephp.com&lt;/a&gt; que nos muestra un login a MySQL empleando empleando el modelo MVC, y que utiliza el &lt;span class=&quot;notranslate&quot;&gt;framework&lt;/span&gt; codeigniter para PHP (que es bastante utilizado comercialmente), y cuya presentacion en el &lt;a href=&quot;http://www.cristalab.com/tutoriales/como-hacer-un-login-de-usuarios-en-php-c95129l/&quot; target=&quot;_blank&quot;&gt;foro&lt;/a&gt; de Cristalab.fue motivo de comentarios apasionados pero interesantes que finalmente nos pueden ayudar a mejorar nuestros codigos.&lt;br /&gt;
3.&amp;nbsp;..y no olvidemos revisar las opciones de manejo de las &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;cookies&lt;/b&gt;&lt;/span&gt; y de las &lt;b&gt;&lt;b&gt;sesiones &lt;/b&gt;&lt;/b&gt;en PHP, que sin dudar son interesantes para mejorar la seguridad de nuestras desarrollos y proyectos.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Espero que estos dos últimos &lt;b&gt;codelab&lt;/b&gt; de introduccion al manejo del entorno del Back-End PHP-MySQL sea suficiente para completar y entender su forma básica de funcionamiento, y nos animemos a hacer nuestras propias investigaciones y pruebas sobre este entorno de uso tan difundido.. especialmente ahora que los servicios de Hosting PHP+MySQL externos se muestran tan accesibles a nivel de costos (..desde US$20.00 anuales), e ilimitados respecto a los tamaños, velocidad y nivel de transferencia de datos que nos proporcionan, vale decir, que nos permitirían llevar todos nuestros requerimientos de base de datos y aplicativos a la web (&lt;span class=&quot;notranslate&quot;&gt;cloud computing&lt;/span&gt;)&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Saludos&lt;br /&gt;
@Mlaynes&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:void(rut_facebook_20());&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 5px 0px 0px; text-align: left; width: 40px;&quot; /&gt;Opina en nuestro foro §FB..!&lt;/a&gt;&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;&lt;/div&gt;


&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-wizard-safety.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/6913892482410064261/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-wizard-safety.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/6913892482410064261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/6913892482410064261'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-wizard-safety.html' title='Using the Back-End PHP+MySQL ( Wizard &amp; Safety themes )'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHfh5pIMTvHdpluodhnq6uXGds4U_YkG2s5nkCCupYOxqRzLN3ahxUgJgrR4CRv6JAeEigj5wHoR35kRNxrJw8ZiWsZ4UqPXmGu6df3Ku7YDRw2jYl86h1bSPdOy2vKGUYUYQNfUK4PaT3/s72-c/Back-End+PHP-MySQL.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-1425355286680514633</id><published>2011-03-09T00:55:00.000-05:00</published><updated>2013-03-30T17:38:50.497-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Using the Back-End PHP+MySQL ( Getting Started )</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login wait a few seconds and try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    //Grid-PHPMySQL.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEMzMwZThkNTQtMTFlYy00NmI2LWJiZGEtMTI0ZTEzNzhjNTdh&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //de WebMatrix
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEM2MyMTI3MmQtMzdmNy00MzdlLThmZjYtMTQyYzZhYjc1ZjE2&quot;;
    my_link(w_link);
  };
  function my_link03() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYTQ5YzY2NWEtMmIxMi00YjZkLTliMDYtNDA3ZDE5OGQ5Y2U0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://www.appservnetwork.com/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHfh5pIMTvHdpluodhnq6uXGds4U_YkG2s5nkCCupYOxqRzLN3ahxUgJgrR4CRv6JAeEigj5wHoR35kRNxrJw8ZiWsZ4UqPXmGu6df3Ku7YDRw2jYl86h1bSPdOy2vKGUYUYQNfUK4PaT3/s1600/Back-End+PHP-MySQL.JPG&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 120px; margin: 22px 15px 0px 0px; width: 140px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
y bueno amigos, ya estamos en el momento en que debemos empezar a experimentar con el Back-End PHP-MySQL (que viene integrado y listo para utilizar con AppServ u otras herramientas similares que tenga integrado un servidor Apache con PHP y la Base de Datos MySQL).&lt;br /&gt;
&lt;br /&gt;
Recordemos que al instalar AppServ, e ingresar con nuestro navegador a &lt;a href=&quot;http://localhost/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;http://localhost&lt;/b&gt;&lt;/a&gt;, nuestro navegador nos muestra una &lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj77YjUZqingea_fi_xRCJtjG4i2sN2FF48kC97e6KtveBy8dZdjL3z3jDl0JaWDySDlAIalCF4t1h5ltR34d-rFquMKgd5F_xlo-ph_ffgKa7MUCtzB95epXpmlAWAoUYWPz7X9Xdd2qW6/s1600-h/ServidorHTTP.PNG&quot; target=&quot;_blank&quot;&gt;pantalla de Bienvenida&lt;/a&gt; que entre otros enlaces, nos permite ingresar a &lt;b&gt;PHPMyAdmin&lt;/b&gt;, y al enlace de Configuracion de nuestro servicio PHP instalado en nuestro servidor de pruebas (todo ya viene integrado al servidor Apache), ..y ahora es el momento de empezar a comprenderlos y utilizarlos.. para lo cual debemos tener en cuenta lo indicado a continuacion:&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Para ingresar a &lt;b&gt;PHPMyAdmin&lt;/b&gt; usualmente el usuario de ingreso es &lt;b&gt;&quot;root&quot;&lt;/b&gt;, y la clave de acceso corresponde a la clave que utilizamos al instalar &lt;b&gt;AppServ&lt;/b&gt; (si no pusimos clave alguna, nuestra clave de acceso sera una cadena vacia). Alli debemos a experimentar para crear nuestras propias bases de datos y tablas, y a practicar nuestro lenguaje SQL.&lt;br /&gt;
Si no recuerda su clave de phpMyAdmin (que realmente es de MySQL), puede utilizar las opciones &lt;span class=&quot;notranslate&quot;&gt;Reset MySQL Root Password&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;MySQL Command Line Client&lt;/span&gt;, ambas en la opcion Appserv de Menu Inicio (Windows); la primera es para registrar un nuevo password para MySQL, y la segunda para verificar rápidamente si la clave es correcta (realmente me resulta mas conveniente trabajar MySQL con phpMyAdmin o DBManager, y no directamente desde la linea de comandos, esto especialmente si trabajamos con otros servidores de aplicaciones como Tomcat o GlassFish)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;La configuracion por defecto de PHP de los servidores locales AppServ y otros, es que los archivos &lt;b&gt;&quot;index&quot;&lt;/b&gt; con extension &lt;b&gt;&quot;php&quot;&lt;/b&gt; y &lt;b&gt;&quot;html&quot;&lt;/b&gt; sean de ejecucion automatica; pero esto a veces no es así, y cuando trabajamos con servidores o hosting externos (como con &amp;nbsp;www.x10hosting.com por ejemplo), donde a veces solo los archivos &lt;b&gt;index.php&lt;/b&gt; son de ejecucion automatica, pero esto no debe incomodarnos, por cuanto esa opcion es configurable (a traves del enlace de configuracion de PHP, que es bastante complejo pero con ayuda de algunos tutoriales puestos en la web -y que algunos indicamos en nuestro post &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;empezando desde cero&lt;/a&gt;- pues, ya podemos ir cambiando algunas cosas, pero si no podemos asi, pues tampoco nos preocupemos, puesto que PHP esta integrado a los lenguajes scripting instalados en nuestro servidor, y a HTML por supuesto; entonces, basta que renombremos nuestro archivo &lt;b&gt;index.html&lt;/b&gt; por &lt;b&gt;index.php&lt;/b&gt; ..y listo.. esto ocurre por cuanto el &lt;b&gt;compilador PHP&lt;/b&gt; reconocerá las etiquetas html y aun siendo un archivo &lt;b&gt;&quot;php&quot;&lt;/b&gt;, sencillamente ejecutara &lt;b&gt;html&amp;nbsp;&lt;/b&gt;...interesante no?&lt;/li&gt;
&lt;li&gt;...y ahora empezaremos a manejar hasta 03 lenguajes en forma simultanea y interrelacionada: HTML, PHP y Javascript (ExtJs es una libreria Javascript). PHP nos permitira trabajar del lado del servidor (principalmente a conectarnos y trabajar con nuestras bases de datos, aunque todo lo podriamos hacer con PHP si quisieramos); y luego con HTML y Javascript -y con la importante ayuda de ExtJs- nos manejaremos nuestras pantallas y presentaciones de nuestro navegador, en la que interactuaran nuestros usuarios..&lt;/li&gt;
&lt;li&gt;Este manejo de lenguajes que ahora se ha convertido en lo basico en lo que corresponde al mundo de desarrollo Web, esta siendo revolucionado con el &lt;u&gt;ingreso de Javascript al lado del servidor&lt;/u&gt; (con n&lt;b&gt;ode.js&lt;/b&gt; y el &lt;b&gt;motor de desarrollo V8&lt;/b&gt;, cuyo perfomance y versatibilidad son realmente sorprendentes.. asi que anímense y continuen con la investigacion y desarrollo de estos lenguajes que serán muy importantes en el futuro.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Con que contamos en estos momentos?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Si siguieron el desarrollo de los codelabs desde el inicio, ya deben tener instalado su servidor de pruebas Apache+PHP+MySQL, y PHPMyAdmin (para administrar nuestras bases de datos), por lo que solo basta que verifiquen que tengan completo acceso a MySQL a través de PHPMyAdmin -pruebe con crear alguna base de datos de prueba y algunas tablas para que verifiquen su funcionamiento, asi como hacer algunas consultas SQL de prueba.. si ese es el caso, ya estamos listos para empezar nuestro codelab.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-size: large;&quot;&gt;Audiencia&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
Se recomienda que, para entender este&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; codelab&lt;/span&gt;&lt;/b&gt;, tengamos los suficientes conocimientos de ExtJs y desarrollo Web (HTML, Javascript; o en su defecto, haber seguido el &lt;a href=&quot;http://www.quizzpot.com/2009/01/ext-js-framework/&quot; target=&quot;_blank&quot;&gt;curso de ExtJs&lt;/a&gt; que nos ofrece Crysfel Villa de México en su pagina del Quizzpot.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Asimismo se recomienda haber leído y probado: &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;Integracion a Google (1ra parte)&lt;/a&gt; e &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_blank&quot;&gt;Integración a Google (2da parte)&lt;/a&gt;,  especialmente para comprender las herramientas utilizadas para integrar de las API de Google a ExtJs (y viceversa), que en este caso no se emplean pero si se hacen referencia en este tutorial.&lt;/div&gt;
&lt;br /&gt;
&lt;P&gt;
&lt;a href=&quot;javascript:void(my_link01());&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Material de Apoyo&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;
&lt;/P&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;b&gt;Grid-PHP-MySQL.rar,&lt;/b&gt;&amp;nbsp;&lt;/span&gt;Descomprimir este material de apoyo en la carpeta &quot;www&quot; de nuestro servidor local AppServ u otro compatible Apache-PHP-MySQL, y se creara la carpeta &quot;Grid-PHP-MySQL&quot; (si no entiende este paso favor consulte &quot;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;empezando desde cero&lt;/a&gt;&#39;). Con éste código debemos verificar que la configuración de las rutas de importación del framework ExtJs sea correctamente efectuada a nuestra ubicación y versión del framework ExtJs que utilicemos (recomendado cualquier versión ExtJs-3.x, éste código no soporta la versión ExtJs4).&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Grid-PHP-MySQL.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 2.4Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde al material de apoyo utilizado para instalar el presente codelab pero en la&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-using-php-on-iis-server.html&quot; target=&quot;_blank&quot;&gt;plataforma de Desarrollo WebMatrix&lt;/a&gt;&amp;nbsp;(conviene que la descarguemos en una carpeta &amp;nbsp;llamada WebMatrix para diferenciarla del código anterior).&amp;nbsp;El resultado de éste código es una versión mejorada del material presentado primero, y comprende al proyecto completo, es decir, se ha adicionado y configurado para su uso, a la versión &quot;liviana&quot; del framework &amp;nbsp;ExtJs versión 3.4.0, y si se desempaqueta éste código en una carpeta de&amp;nbsp;&lt;b&gt;&quot;www&quot;&lt;/b&gt;&amp;nbsp;en nuestro servidor local AppServ (dentro de otra carpeta que podemos llamar &quot;WebMatrix&quot; ), podremos ver directamente los resultados al llamarlo desde la barra de direcciones de nuestro navegador usando&amp;nbsp;&lt;b&gt;&quot;http://localhost/WebMatrix/Grid-PHP-MySQL&quot;&lt;/b&gt;, pero en este caso, si deben tenerse en cuenta las instrucciones para la configuración de nuestra base de datos &quot;tutorial&quot; (empleada en este codelab), y el archivo &lt;b&gt;pdtes_usa.sql&lt;/b&gt; adicinado en este segundo código contiene además a la tabla &quot;usuarios&quot; que en el detalle del codelab habíamos propuesto&amp;nbsp;que se creara &quot;manualmente&quot; como una manera de familiarizarnos con el manejo de la herramienta phpMyAdmin que viene instalado en el servidor Appserv.&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;NOTA :&lt;/b&gt;&lt;/span&gt; Entre las mejoras planteadas en el segundo código, cabe resaltar que ahora todos nuestros combobox empleados para seleccionar los partidos políticos son &quot;dinámicos&quot; (conectados a los datos de nuestra tabla &quot;parties&quot; de la base de datos &quot;tutorial&quot;), con ello logramos que, si se efectuase alguna modificación en esta tabla - agregar un partido político ó modificar su nombre por ejemplo - estos cambios se verán reflejados en los combobox que lo requieran...&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Pasos para ejecutar el Codelab...&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Para ejecutar el tutorial debemos primero realizar lo siguiente:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Crear nuestra base de Datos:&lt;/b&gt; utilizando PHPMyAdmin debemos crear la base de datos &lt;b&gt;&quot;tutorial&quot;&lt;/b&gt; (asi es el nombre que le hemos dado en nuestro ejercicio, si utiliza otro nombre debera recordarlo y registrarlo en nuestro archivo php que nos comunica a nuestra base de datos.&lt;br /&gt;
Para crear la base de datos se debe ingresar a MySQL con PHPMyAdmin, y en su primera pantalla seleccionar la opcion correspondiente, &amp;nbsp;digitar el nombre de nuestra base de datos, &amp;nbsp;y elegir el boton &quot;&lt;b&gt;Crear&quot;&lt;/b&gt;..y listo, ..nuestra base de datos será creada y su nombre aparecerá en la lista situada al lado izquierdo. ...luego debemos ingresar a nuestra base de datos creada y seleccionar la lengueta &lt;b&gt;&quot;Importar&quot;&lt;/b&gt;, alli hay una opcion para seleccionar nuestro archivo bajo &lt;b&gt;formato sql&lt;/b&gt;, la cual debemos buscar en la carpeta &lt;b&gt;&quot;Grid-PHP-MySQL&quot;&lt;/b&gt; desempaquetada de &lt;b&gt;www&lt;/b&gt;, el nombre de nuestro archivo es &lt;b&gt;&quot;pdts_usa.sql&quot;&lt;/b&gt; y corresponde a una tabla con la relacion de presidentes de los Estados Unidos de Norteamerica (tabla &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;presidents&lt;/b&gt;&lt;/span&gt;), y de partidos politicos (tabla &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;parties&lt;/b&gt;&lt;/span&gt;), con la realizaremos opciones alta, baja, modificacion, consulta e impresion...&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Con nuestro &lt;b&gt;explorador&lt;/b&gt; debemos ingresar a la carpeta &lt;b&gt;&quot;Grid-PHP-MySQL&quot;&lt;/b&gt; creada en la carpeta www del Appserv, y alli &quot;editar&quot; el archivo &lt;b&gt;&quot;database.php&quot;&lt;/b&gt;. Este archivo en sus primeras lineas tiene en su inicio las intrucciones de conexion a nuestra base de datos:&lt;br /&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
// This will connect us to our database...&lt;br /&gt;
mysql_connect(&quot;localhost&quot;, &quot;root&quot;, &quot;myPassword&quot;) or&lt;br /&gt;
&amp;nbsp; die(&quot;Could not connect: &quot; . mysql_error());&lt;br /&gt;
mysql_select_db(&quot;tutorial&quot;);&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;En ella debemos modificar los parametros root (si nuestro usuario de ingreso no es root sino otro personalizado, y poner nuestro Password de conexion a MySQL (el que utilizamos en PHPMyAdmin), asimismo poner en la clausula &lt;b&gt;mysql_select_db&lt;/b&gt; el nombre nuestra base de datos, si no corresponde a &quot;tutorial&quot; como se indica. Si nuestra prueba la realizamos directamente en un servidor externo como www.x10hosting.com con dominio propio, entonces en lugar de &lt;b&gt;localhost&lt;/b&gt; debemos colocar nuestra direccion web correspondiente: &lt;b&gt;www.mydominio.com&lt;/b&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;..y ya estamos listo para ejecuatr nuestro ejercicio...!&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
Ahora, si con nuestro navegador ingresamos a &lt;b&gt;&quot;localhost&quot;&lt;/b&gt;, y luego al ingresamos a la carpeta &lt;b&gt;&quot;Grid-PHP-MySQL&quot;&lt;/b&gt;&amp;nbsp;( o donde quiera hayamos descargado el material de apoyo dentro &quot;www&quot; de AppServ ); pues al ingresar esta carpeta, que contiene a nuestro archivo &quot;index.html&quot; en este caso, deberá aparecer una pantalla como la que se muestra a continuación:&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPvRGmu2Jy-czh7BNyJ8QcED4Wq_1amWPZcGDu53wuWYgCktRvalgER1B6tpU-mpYqPgUivBGN7cWm68C5YLHy2NEFsNwCjwW4yBZM3omWdClKfPY3_uGU7kmRVTZOYv1Xt0FtQcMdnrXC/s400/Back-End+PHP+MySQL.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;250&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPvRGmu2Jy-czh7BNyJ8QcED4Wq_1amWPZcGDu53wuWYgCktRvalgER1B6tpU-mpYqPgUivBGN7cWm68C5YLHy2NEFsNwCjwW4yBZM3omWdClKfPY3_uGU7kmRVTZOYv1Xt0FtQcMdnrXC/s400/Back-End+PHP+MySQL.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Esto nos indica que nuestra descarga y copia ha sido correcta, y ya estamos listos para revisar el material de apoyo descargado y descubrir como hemos efectuado nuestro conexion a MySQL utilizando PHP, HTML y Javascript para trabajar con ella funciones basicas de mantenimiento de Tablas como Ingreso,&amp;nbsp;Modificación&amp;nbsp; Eliminación, Consulta, Impresion, Busquedas, etc, bajo un formato clasico.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Nota.-&lt;/b&gt; si no aparece la pagina mostrada es probable que no hayamos descargado nuestra version completa o &quot;liviana&quot;de ExtJs en la carpeta &quot;www&quot;, como mostramos en &quot;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html&quot; target=&quot;_blank&quot;&gt;el potencial de ExtJs&lt;/a&gt;&quot;; o tal vez, estemos usando una versión de ExtJs diferente de la indicada en nuestro archivo HTML (..ahora estamos usando la versión ext-3.3.1 vigente al 01/03/2011). Observe la ruta rerlativa a &lt;b&gt;www&lt;/b&gt; que utilizamos para acceder dichos archivos &quot;../../extjs/extjs-3.1.1&quot; en este caso (que indica 2 carpetas sobre nuestra descarga del tutorial). Efectúe los cambios de la ruta necesarios en el archivo &lt;b&gt;index.html&lt;/b&gt; del tutorial y pruebe nuevamente hasta que aparezca la ventana con nuestro Grid como indica la figura (haga click sobre esa figura, &amp;nbsp;y se dirigirá a una pantalla de prueba indicada en el propio tutorial de la &lt;a href=&quot;http://www.sencha.com/learn/ext-js-grids-with-php-and-sql&quot; target=&quot;_blank&quot;&gt;pagina oficial &lt;/a&gt;de ExtJs, aunque reiteramos que, debemos hacer nuestras pruebas sobre nuestro servidor local ( &lt;a href=&quot;htpp://localhost&quot; target=&quot;_blank&quot;&gt;htpp://localhost&lt;/a&gt; ), pues en este caso nuestro código es una version mejorada de la mostrada en dicho tutorial...&lt;/div&gt;
&lt;br /&gt;
Y en caso que aparezca el Grid, pero sin &quot;data&quot;, entonces lo que debemos revisar es nuestra configuración a la base de datos &quot;tutorial&quot; que debimos haber creado con phpMyAdmin en nuestro servidor Appserv (el nombre de nuestro usuario de acceso a MySQL, el password, el nombre de la base de datos, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Detalle del Modulo.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
1. Al revisar los archivos desempaquetados de nuestro Material de Apoyo encontraremos los siguientes archivos:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Readme.txt&lt;/b&gt;, donde encontraremos informacion respecto a este tutorial en la &lt;a href=&quot;http://www.sencha.com/learn/ext-js-grids-with-php-and-sql&quot; target=&quot;_blank&quot;&gt;pagina web oficial de ExtJs&lt;/a&gt;, por cuanto este ejercicio ha sido bajado y adaptado de allí; teniendo como principal mejora que ahora estamos trabajando con &quot;stores&quot; tanto para la base de datos de presidentes, como con la de partidos (vale decir que si corregimos en la Base de Datos el nombre de un partido esto debe verse reflejado en los &quot;combobox&quot; utilizados, no ocurria asi en el tutorial original donde el store de partidos es un dataarray &quot;local&quot; y estatico; asimismo se ha corregido algunos errores para que el ejercicio trabaje bien en todas sus opciones (en especial en el grabado del nombre del partido de cada presidente, donde el combobox del Grideditor no trabajaba bien por un error simple: &amp;nbsp;en el tutorial original: se indicaba como PartyValue del combobox a PartryID en vez de PartyName, pero si revisa la logica de la funcion &lt;b&gt;updatePresident()&lt;/b&gt; de &lt;b&gt;database.php&lt;/b&gt;, observará que para encontrar un registro se utiliza el nombre del partidoy &amp;nbsp;no su codigo o ID..).. pero en general este tutorial ExtJs esta muy bien explicado, por lo que para consultas detalladas de todo el desarrollo del mismo paso a paso, pues puede tambien seguir y revisar el enlace indicado.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;pdts_usa.sql&lt;/b&gt;, archivo tipo texto en formato de lenguaje SQL con el, una vez creada nuestra base de datos &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;tutorial&lt;/b&gt;&lt;/span&gt;, se crearan las tablas &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;presidents&lt;/b&gt;&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;parties&lt;/b&gt;&lt;/span&gt;, y la &lt;span class=&quot;notranslata&quot;&gt;data&lt;/span&gt; correspondiente para iniciar el ejercicio.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;database.php&lt;/b&gt;, archivo de tipo texto en formato de lenguaje PHP con el cual actua del lado del servidor para interactuar con nuestra base de datos, en ella hemos comentado las partes que corresponden a cada caso: modo de Conexion inicial y funciones de actualizacion, creación, borrado, busqueda e impresion de nuestra &lt;span class=&quot;notranslate&quot;&gt;data&lt;/span&gt;; las formas de este codigo pueden ser facilmente comprendido y ajustado anuestros desarrollos propios.&lt;br /&gt;
Se presenta asimismo las funciones getlist() y getparties() que son las ejecutan nuestras consultas de las tablas MySQL, habiendose comentado las adiciones efectuadas por el caso de efectuar &quot;Conteo de Paginas&quot; y &quot;Busquedas rapidas&quot;.&lt;br /&gt;
Se presenta asimismo a las funciones JEncode y codeDate, la primera para llamar a las funciones standard de codificacion del formato Json, y la segunda para el tratamiento de los campos tipo fecha.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JSON.php&lt;/b&gt;, archivo de tipo texto en formato PHP que es una libreria clasica de PHP para el manejo del formato JSON con el que se trabaja las base de datos y tablas de MySQL (y que  siempre debemos utilizar en nuestros proyectos que trabajemos con MySQL)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Index.htm&lt;/b&gt;l, archivo de tipo texto en formato HTML de ejecucion automatica donde se encuentran las directivas de inicio de nuestro ejercicio para la importacion de las librerias de ExtJS y las de nuestro ejercicio.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;presidentslist.html&lt;/b&gt;, archivo en formato HTML que nos muestra una Tabla, la cual se genera al ejecutar la opcion impresion de nuestro ejercicio: luego en las instrucciones PHP correspondientes podrá observar como se manda a imprimir dicho documento.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;mainscript.js&lt;/b&gt;, archivo en formato ExtJs debidamente empaquetado utilizando namespace, que nos muestra las funciones e instrucciones ExtJs que permiten el funcionamiento de las opciones de Actualizacion, Creacion, Modificacion, Consulta, Impresion y Busqueda, entre otras opciones, de nuestro tutorial.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;searchfield.js&lt;/b&gt;, archivo en formato ExtJs que exclusivamente contiene las funciones que nos muestran el recuadro de Busqueda Rapida del ejercicio.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;style.css&lt;/b&gt;, archivo en formato CSS que permite la llamada a las imagenes que utilizaremos en los botones de acceso a las opciones de nuestro ejercicio mostradas en la barra superior de nuestra ventana (toolbar).&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;carpetas &lt;span class=&quot;notranslate&quot;&gt;icons&lt;/span&gt; e &lt;span class=&quot;notranslate&quot;&gt;images&lt;/span&gt;&lt;/b&gt;, la primera contiene el icons mostrado en la pestaña de nuestro navegador; y el segundo, las imagenes jpg personales utilizadas en el ejercicio y los dos estilos de celdas que hemos presentado en este caso para mejorar la presentación de las celdas del Grid...&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;APUNTES TECNICOS&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Si ya han probado todas las opciones de nuestro modelo de mantenimiento de Tablas, al revisar el Codigo debe tenerse presente los siguientes puntos:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Si revisan el codigo de &lt;b&gt;mainscript.js&lt;/b&gt; notarán que, la codificación del form de busqueda, en el combobox de partidos, mantiene una estructura estatica y de carga &quot;local&quot; a partir de un simplestore que carga un array con los ID y nombre de los partidos. Vale como ejercicio que recodifiquen dicho combobox con el store de partidos ya creado (al modo de como se ha efectuado en el combobox del grideditor de presidentes), para que el ejemplo sea mas real, es decir, que si efectua una modificacion de algun dato de la Tabla de Partidos (como cambiar el nombre), entonces &quot;dinamicamente&quot; los cambios se vean reflejados al cargar los combobox.&lt;/li&gt;
&lt;li&gt;En el grideditor de presidentes podrán observar que algunas columnas pueden estar definidas pero no mostrarse mediante las clausulas &amp;nbsp;&lt;b&gt;hidden:false&lt;/b&gt; o &lt;b&gt;hidden:true&lt;/b&gt;, como es el caso del IDparty. Y Este es un apunte que debemos tener muy en cuenta especialmente al trabajar tablas cuya ID a veces no queremos mostrar en nuestra pantalla, como si quisieramos que no se muestre el ID de los presidentes en nuestro ejemplo; en estos casos, casi como norma, resulta imprescindible definir como primera columna de nuestros Grids el ID de nuestras tablas, por cuanto si observan con detalle la codificacion de Actualizacion de Datos en &lt;b&gt;database.php&lt;/b&gt;, la logica de ubicación de nuestros registros se basa en un &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;Where&quot;&lt;/b&gt;&lt;/span&gt; que utiliza al ID para especificar el registro...&lt;/li&gt;
&lt;li&gt;Cabe resaltar asimismo, que los ID de nuestras tablas en nuestra base de datos (MySQL en este caso), son por defecto definidas con tipo de datos &lt;b&gt;INT&lt;/b&gt;, modalidad &lt;b&gt;&quot;auto_increment&quot;&lt;/b&gt; y del tipo &lt;b&gt;&quot;primaryKey&quot;&lt;/b&gt;; es decir, que corresponden a los campos con los usualmente efectuaremos &quot;relaciones&quot; con otras tablas (como es nuestro caso de la Tabla Partidos con la de Presidentes).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Espero que este Codelab de introduccion al entorno del Back-End Apache, PHP, MySQL sea suficiente para entender el esquema de su funcionamiento, y nos animemos a efectuar nuestras propias pruebas, y en el como siempre, les entregamos modelos de codificación, librerias y herramientas muy utiles para el desarrollo de casos reales; en lo que corresponde a nosotros, nos comprometemos a la brevedad a desarrollar otro ejercicio que contenga un &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Wizard&lt;/b&gt;&lt;/span&gt; para el control de acceso a nuestras aplicaciones, y siguiendo la línea de los ejercicios anteriores nos Integremo a Google, empleando por el momento visualizaciones (pero que bien podriamos utilizar otras API como &lt;span class=&quot;notranslate&quot;&gt;Google Language&lt;/span&gt; que utilizamos en todas las paginas de este Blog); pero al respecto cabe indicar que el proceso indicado de utilizar visualizaciones Google esta practicamente solucionado, por cuantro al ya tener nuestra &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;data&quot;&lt;/b&gt;&lt;/span&gt; cargadas en &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;stores&quot;&lt;/b&gt;&lt;/span&gt; entonces, ya es posible utilizar nuestras extensiones ya desarrolladas en nuestros post &lt;b&gt;Integracion a Google &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;1ra&lt;/a&gt; y &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;notranslate&quot;&gt;2da&lt;/a&gt; parte&quot;&lt;/b&gt;.&amp;gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Saludos&lt;br /&gt;
@Mlaynes&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:void(rut_facebook_20());&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 5px 0px 0px; text-align: left; width: 40px;&quot; /&gt;Opina en nuestro foro §FB..!&lt;/a&gt;&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;


&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-introduccion.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;510&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;

&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/1425355286680514633/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-introduccion.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1425355286680514633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1425355286680514633'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2011/03/using-back-end-phpmysql-introduccion.html' title='Using the Back-End PHP+MySQL ( Getting Started )'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHfh5pIMTvHdpluodhnq6uXGds4U_YkG2s5nkCCupYOxqRzLN3ahxUgJgrR4CRv6JAeEigj5wHoR35kRNxrJw8ZiWsZ4UqPXmGu6df3Ku7YDRw2jYl86h1bSPdOy2vKGUYUYQNfUK4PaT3/s72-c/Back-End+PHP-MySQL.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-7345922807258155696</id><published>2010-06-01T01:06:00.000-05:00</published><updated>2013-04-22T09:17:48.305-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><category scheme="http://www.blogger.com/atom/ns#" term="Gadget"/><title type='text'>Google Gadgets</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (on the bottom Bar of this screen..or Membershipt Box,top right of this page.. )\nof course, after login wait a few seconds and try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    //IG-Productos.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENGYyMmMxYmYtZTVjYi00YjUwLWFjNjUtYmFiYmQ0ZjI3NGJm&quot;;
    my_link(w_link);
  };
  function my_link02() {
    //IG-Clientes.rar
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoENWE2ZTcyZjEtYmEzNi00MGI1LWIwMzctMDM5YjE0ZDA0YjU1&quot;;
    my_link(w_link);
  };
  function my_link03() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYTQ5YzY2NWEtMmIxMi00YjZkLTliMDYtNDA3ZDE5OGQ5Y2U0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;div id=&quot;talerta&quot;&gt;&lt;/div&gt;&lt;div id=&quot;talerta1&quot;&gt;&lt;/div&gt;&lt;div id=&quot;alerta&quot;&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;alerta1&quot;&gt;Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;&lt;script type=&quot;text/javascript&quot;&gt;
// seleccion de wikigadget
function rut_wikigadget() {
  var wurl_wikipedia = &#39;&#39;;
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  switch(wlanguage) {
  case &#39;es&#39;:
    wurl_wikipedia = &quot;http://es.wikipedia.org/wiki/Gadget&quot;; break;
  case &#39;pt&#39;:
    wurl_wikipedia = &quot;http://pt.wikipedia.org/wiki/Gadget&quot;; break;
  default:
    wurl_wikipedia = &quot;http://en.wikipedia.org/wiki/Gadget&quot;; break;
  };
  window.open(wurl_wikipedia,&quot;_blank&quot;);
  return wurl_wikipedia;
};
&lt;/script&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/es/apis/gadgets/index.html&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s200/google_logo.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 35px; margin: 22px 15px 0px 0px; width: 100px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
En términos generales, Los gadgets de Google son objetos o aplicaciones en miniatura desarrollados para ofrecer contenidos dinámicos que pueden ser ubicados en cualquier lugar de&amp;nbsp;cualquier página web. Los Gadgets pueden ser muy útiles para su uso en el trabajo (como lista de tareas, conversor de monedas, calendario), en la escuela (calculadora, Wikipedia, herramientas de traducción), o simplemente pasar el tiempo (noticias, blogs, juegos).&lt;br /&gt;
&lt;br /&gt;
El término gadget (o widget), también se ha dado a una nueva categoría de mini aplicaciones, diseñadas para proveer de información o mejorar una aplicación o servicios de un ordenador o computadora, o bien cualquier tipo de interacción a través de Internet, por ejemplo una extensión de alguna aplicación de negocios, que nos provea información en tiempo real del estatus del negocio u organización.&lt;br /&gt;
&lt;br /&gt;
Un ejemplo de gadgets en una computadora serían los gadgets del Dashboard de Apple sobre Mac OS X Leopard, o los de la barra lateral de Windows, que viene incluida en el nuevo sistema operativo de Microsoft: Windows 7 y Microsoft: Windows Vista; y por supuesto, los Gadgets de Google, que pueden ser instalados en iGoogle, Google Desktop o en cualquier pagina Web que desarrollemos.&lt;br /&gt;
(fuente: &lt;a href=&quot;javascript:void(rut_wikigadget());&quot;&gt;Wikipedia&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
Los Gadgets de Google son en especifico aplicaciones desarrolladas en XML, HTML y JavaScript, en donde un archivo XML es el contenedor de la aplicación (y en el se describe datos estructurados que tanto los programadores y las computadoras podrán leer y ejecutar), y que soporta instrucciones HTML para dar formato al espacio de la pagina web utilizado por el gadget, y como ya conocemos en el estandard opensource, también permite que nuestro código HTML soporte Javascript, que es un lenguaje de comandos que utilizamos para añadir comportamientos dinámicos a nuestras paginas y desarrollos web.&lt;br /&gt;
&lt;br /&gt;
En resumen entonces, desarrollar Gadgets es muy similar a desarrollar paginas web, y de hecho debe resultar mas sencillo, pues en este caso se trata de objetos o aplicaciones especificas que luego ubicaremos adecuadamente en nuestras paginas web... pero en el cual debemos poner especial cuidado en las sintaxis y opciones que nos proporciona el contenedor XML, el cual también podrá interactuar con nuestros códigos HTML y Javascript.&lt;br /&gt;
&lt;br /&gt;
Como una practica de aprender a utilizar y desarrollar los gadgets de Google, recomedamos seguir paso por paso los avances del &lt;a href=&quot;http://www.seoish.com/how-to-make-google-gadgets/&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Tutorial de Seoish&lt;/span&gt;&lt;/a&gt;, el cual presenta las siguientes ventajas:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Nos alecciona para trabajar con iGoogle, y nos explica paso por paso como ir preparando la pagina inclusive para desarrollar y probar en ella misma nuestros Gadgets utilizando nuestra cuenta Google (y ya hemos reiterado que, con dicha cuenta podemos utilizar los múltiples servicios que Google nos brinda, como GMail, YouTube, Google Docs, App Engine, Albumnes de Picasa, Blogger, Google Maps, Google Earth, etc. entre los que podemos haber usado siguiendo los casos propuestos por nuestros códigos hasta la fecha).&lt;/li&gt;
&lt;li&gt;Tambien nos explica al detalle como usar el &lt;span class=&quot;notranslate&quot;&gt;Google Gadget Editor (GGE)&lt;/span&gt;, e inclusive nos indica algunas peculiaridades del editor que debemos superar (lean con detalle los comentarios, asi como el manejo del caché de Google).&lt;/li&gt;
&lt;li&gt;Asimismo, nos explica las partes del código Gadget (XML), y como se utilizan con un caso practico (Hello World e il Tiger).&lt;/li&gt;
&lt;li&gt;Detalla como utilizar los tipos de contenidos actuales de XML para Gadgets: HTML y URL (ejemplo Big Brother 9 - Live Cams), y a ver a los Gadgets como mini-webs, así como a ver a todas las aplicaciones web como Gadgets.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.seoish.com/how-to-make-google-gadgets/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijexXI1KYhJK9VPvnN1AMRaRKLlDfttvhAL62VFs4AcQZfWlE1FzoJH9pf2P9zQY2PYQM6sk8L_Cjs48pILp1ZJMiiEgUhmINnHWn4Xwog68sZjIHSnANNivxClShCP4V_e3tDt-f12yrS/s320/PageSeoish.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
Y continuando con nuestra secuencia de casos para utilizar Google Spreadsheets como fuente de datos, les alcanzo el&amp;nbsp;código&amp;nbsp;de un Gadgets para &quot;consultar&quot; utilizando visualizaciones Google, en un formato mas adecuado para los tamaño de algunos Gadgets (pero que debemos ajustar para casos específicos dependiendo como los presentemos en iGoogle o en nuestras webs)&lt;br /&gt;
):&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 12px; margin: 05px 15px 0px 0px; width: 12;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IG_Productos.rar,&lt;/b&gt; que nos muestra una Visualización tipo Tabla de nuestro documento &quot;Spreadsheet Productos&quot;: los productos y su fecha de venta.&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 12px; margin: 05px 15px 0px 0px; width: 12;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IG_Clientes.xml,&lt;/b&gt; que nos muestra Visualizaciones tipo Tabla y PieChart de nuestro documento &quot;Spreadsheet Productos&quot;: nuestros clientes, monto de venta, cantidad de productos vendidos y monto cobrado...&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://www.google.com/support/websearch/bin/answer.py?answer=25551&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0aML9AxcBXIm66r8ziHCZOtWkulBla_H3V2d7g1mZFrCzMktxnlS-Zh3QF8nvvHzuo5aA3WtwRekOpuBU2UWiudN4ZTBd39K-liORO9uyugQomTYWXwsiCmb9tmGJB2-NmzxltkFhHtg/s320/PageIGoogle.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;


&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2010/07/google-gadgets.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/7345922807258155696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/7345922807258155696'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/07/google-gadgets.html' title='Google Gadgets'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s72-c/google_logo.jpg" height="72" width="72"/><georss:featurename>Ayacucho, Lima, Perú</georss:featurename><georss:point>-12.131390006248221 -76.9943118095398</georss:point><georss:box>-12.133330506248221 -76.996779309539789 -12.129449506248221 -76.9918443095398</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-2632283486071130910</id><published>2010-05-15T18:08:00.000-05:00</published><updated>2013-03-29T23:33:22.284-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="art"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="Web2.0"/><title type='text'>Web 2.0: Los negocios y las redes sociales.</title><content type='html'>&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://es.wikipedia.org/wiki/Web2.0&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5463830772812311090&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZDRxQTD3EMK6ipia-CNs5JJgpfgxuQqxjeURd8dkp8Y4ZpFf5TesgS3UDRzjJNxgM9k0dD9Vw13YGeGq3scZt25X-ykAL4vDOLKaAG0OZAf3-AAFepu3fwrjpQ9ucacZ2_P-fOWLTBXQZ/s1600/Web20_logo.png&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 100px; margin: 23px 10px 1px 0; width: 150px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
En este post vamos a comentar un poco sobre el concepto de Web2.0, y que representa el uso de las redes sociales para los negocios... &lt;br /&gt;
&lt;br /&gt;
El termino Web 2.0 (vigente desde el año 2003) está comúnmente asociado con un fenómeno social, basado en la interacción que se logra a partir de diferentes aplicaciones web, que facilitan el compartir información, la interoperatividad, el diseño centrado en el usuario y la colaboración a través de Internet. Ejemplos de la Web 2.0 son las comunidades web, los servicios web, las aplicaciones Web, los servicios de red social, los servicios de alojamiento de videos, las wikis, blogs, mashups y folcsonomías. Un sitio Web 2.0 permite a sus usuarios interactuar con otros usuarios o cambiar contenido del sitio web, en contraste a sitios web no-interactivos donde los usuarios se limitan a la visualización pasiva de información que se les proporciona.&lt;br /&gt;
(fuente: wikipedia)&lt;br /&gt;
&lt;br /&gt;
Bajo estos conceptos, una aplicación nativa del concepto de Web2.0 aplicada a los negocios serían las campañas de mercadeo y publicidad con la participación de los mismos &quot;clientes&quot; o &quot;consumidores&quot; de nuestros productos o servicios, pero debe considerarse que, también se le puede utilizar con bastante acierto dentro del campo motivacional, de instrucción y capacitación, y para el seguimiento de &quot;casos&quot; ó temas específicos, tanto en forma &quot;pública&quot; (toda la red), como a nivel &quot;intranet&quot;, dentro de una organización, con los empleados y colaboradores de dicha organización o  empresa, entre otras aplicaciones.&lt;br /&gt;
&lt;br /&gt;
Ya centrándonos en lo que respecta los negocios, el principal empleo del concepto Web2.0 se orienta principalmente, como ya hemos indicado, en el campo de la publicidad y mercadeo, pero resulta conveniente considerar los siguientes aspectos:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;primero&lt;/b&gt;, debe tenerse en cuenta el uso combinado en forma armoniosa de elementos tipo Blog (como Blogger, WordExpress o Ning por ejemplo), con herramientas ma &quot;ligeras&quot; pero de uso muy difundido y vigentes.. como Facebook y Twitter, así como de otras redes sociales que puedan tener importancia y aceptación en nuestro medio local como Yahoo, Sonico, Netlog, etc.; pues juntos van a constituir nuestra manera &quot;corporativa&quot; de penetración social a los mercados y &quot;nichos&quot; donde tengamos presencia ó queramos &amp;nbsp;incursionar, el cual ha de transformarse en nuestro &quot;comunidad social&quot;. Cada uno de estos elementos que utilicemos tiene un objeto distinto: así podemos utilizar &lt;span style=&quot;color:blue;&quot;&gt;Blogger&lt;/span&gt; para contactar directamente a nuestros clientes y profundizar una idea, producto, concepto ó servicio con nuestros &lt;b&gt;&quot;usuarios consumidores&quot;&lt;/b&gt;; ó &lt;span style color:blue;&quot;&gt;Facebook&lt;/span&gt; para difundir lo mismo, pero de manera &quot;global&quot; (tratando de aprovechar su cartera de casi mil millones de usuarios), y todo ello de una manera sumamente atractiva y sugestiva; y por supuesto, utilizar &lt;span style=&quot;color:blue;&quot;&gt;Twitter&lt;/span&gt; para &quot;perifonearlas&quot; y causar el efecto &quot;virulencia&quot;; y prácticamente creo que, con todas estas herramientas, todas gratuitas en lo que concierne a su uso&amp;nbsp;estándar (pues existen servicios de pago como son los Avisos de &lt;a href=&quot;http://www.facebook.com/ads/create/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt; o &lt;a href=&quot;https://www.google.com/accounts/ServiceLogin?service=adwords&amp;amp;hl=es_ES&amp;amp;ltmpl=adwords&amp;amp;passive=false&amp;amp;ifr=false&amp;amp;alwf=true&amp;amp;continue=https://adwords.google.es/um/gaiaauth%3Fapt%3DNone%26ugl%3Dtrue&amp;amp;error=noacct&amp;amp;ed=mlaynessanchez@gmail.com&quot; target=&quot;_blank&quot;&gt;Google Adwords&lt;/a&gt;); son más que suficientes para iniciar verdaderas campañas de mercadeo tanto para pequeñas y medianos negocios, pues considérese que las grandes compañías ya buen tiempo las vienen empleando... y revisando algunas experiencias al respecto, podemos observar que el &quot;elegante&quot; y muy vigente formato de Facebook, la facilidad de difusión de mensajes a través de Twitter y los contactos personales que podamos desarrollar a través de nuestros Blogs, bien podría hacer prácticamente innecesario el desarrollo de paginas web propias, excepto que por temas de seguridad se llegue al e-commerce o manejo de información que requiera discreción como manejo de pagos, claves de acceso, ó información técnica ó sensible de nuestros productos, servicios o del negocio.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;segundo&lt;/b&gt;, debe tenerse presente que si consideramos utilizar un mercadeo social, pues este debe ser monitoreado de forma permanente manteniendo un adecuado nivel de comunicación y respuesta con nuestros usuarios, seguidores y clientes, pues si lo dejamos para &quot;cuando tengamos tiempo&quot;, los usuarios y seguidores de nuestro servicio web&amp;nbsp;rápidamente&amp;nbsp;van a notarlo, y por supuesto, dejar de seguir nuestros &quot;servicios sociales&quot;. Interesante la idea del empleado de mostrador que muchas veces dispone de mucho tiempo &quot;no productivo&quot; para nuestros negocios.. a quienes podríamos recurrir previa capacitación respecto a los objetivos de nuestro negocio, y de &quot;modales sociales&quot;, pues debe mantenerse un estilo de comunicación y respuesta que pueda identificarnos; asimismo, debe tenerse presente los conceptos de Asistencia Virtual y tele-trabajo, mediante el cual podemos recurrir a servicios de terceros que podrían asesorarnos y ayudarnos a definir el perfil social de nuestro negocio, diseñar las formas de&amp;nbsp;interrelación&amp;nbsp;de las redes sociales que utilicemos, y además, dedicarse a revisar y responder las múltiples entradas y comentarios de nuestros usuarios, clientes y seguidores, e informar directamente a los encargados de la dirección del negocio respecto a los resultados tangibles de nuestra red de mercadeo social.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;tercero&lt;/b&gt;, reiterar que si nuestra empresa o negocio va a utilizar bondades de los servicios Web2.0 resulta necesario definir y establecer un formato ó modelo &quot;propio&quot; conveniente para cada caso, pensando inclusive hasta en la posibilidad de empleo de&amp;nbsp;múltiples&amp;nbsp;idiomas, pagos &quot;on line&quot;, y servicios de entregas directas a domicilio... dependiendo en cada caso y por supuesto, de nuestros productos y/o servicios ofertados, aunque esto signifique muchas veces incluso cambiar y/o adecuar nuestros canales vigentes de comercialización&lt;br /&gt;
&lt;br /&gt;
Otro plano es el control y manejo administrativo, Internet ya prácticamente nos ha demostrado que es bastante estable y que soporta sin mayor problema millones y millones de datos y de usuarios, y con niveles bastante aceptables de seguridad (dependiendo de los navegadores, herramientas y modo de desarrollo que utilicemos), pero su empleo a nivel administrativo contable, prácticamente es bastante escaso ,y su empleo es aún mayoritariamente a nivel de mercadeo, y por eso termino esta entrada indicando que necesariamente va a existir Web3.0, que es cuando no solo las aplicaciones sociales de las organizaciones, empresas y personas estén en la red.. sino cuando inclusive los aplicativos de organización, gestión y control administrativo también lo estén, aunque esto ya tienen nombre y apellido: &lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://googleamericalatinablog.blogspot.com/2010/12/todo-web.html&quot; target=&quot;_blank&quot;&gt;&quot;Cloud Computing&quot;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;y &lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Computaci%C3%B3n_grid&quot; target=&quot;_blank&quot;&gt;&quot;Grid Computing&quot;&lt;/a&gt;&lt;/span&gt; (los enlaces indicados están escritos en español, pero recomendamos su lectura usando las diferentes opciones de lenguaje de wikipedia ó haciendo uso de su traductor de idiomas preferido)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #274e13; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;UN CASO PRACTICO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Para redondear mejor la idea presentemos un caso practico que ya hemos planteado durante el desarrollo de nuestros codelabs:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Como Manejar y Controlar un Negocio &quot;retail&quot; de venta de productos&amp;nbsp;Cosméticos, de Belleza, y otros Articulos diversos para el Hogar.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Planteado el caso vale destacar que nos conviene recurrir a las redes sociales para difundir nuestro negocio.. mejor aún si es posible utilizar dicha plataforma para facilitar nuestro manejo y control del negocio, y el cual básicamente debe centrarse en las siguientes operaciones:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Registrar y Controlar los pedidos ó solicitudes de nuestros clientes y usuarios..&lt;/li&gt;
&lt;li&gt;Registrar y Controlar nuestras Compras.. para que podamos tener idea de lo que tenemos en stock, lo podamos ofertar.. y atender los pedidos de nuestros usuarios.&lt;/li&gt;
&lt;li&gt;Registrar y Controlar nuestras Ventas y Cobranzas.. para que podamos tener idea de lo que cuanto hemos vendido, cobrado.. y por supuesto cuando tenemos por cobrar y a quienes..&lt;/li&gt;
&lt;li&gt;y por supuesto, aprovechar las ventajas de la Web 2.0 para difundir y afiliar mas clientes a nuestro negocio, y por supuesto, hacer mas &quot;moderno&quot;, ameno y&amp;nbsp;fácil&amp;nbsp; la interrelación con todos ellos... y por supuesto&amp;nbsp;también, (porque no), pensar en eBusiness y eCommerce para facilitar el registro de pedidos, pagos, entre otras posibilidades..&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Pues, todo lo descrito puede realizarse utilizando portales especializados (si desean recurrir por esta opción conviene &amp;nbsp;que revisen proyectos tipo &lt;a href=&quot;http://www.magentocommerce.com/&quot; target=&quot;_blank&quot;&gt;Magento&lt;/a&gt;, que incluso tiene su opción opensource), donde por supuesto, había que adquirir nuestro propio dominio (nuestro nombre ó dirección personalizada en Internet como minegocio.com, minegocio.net, minombre.pe, otronombre.us, denuevo.la, etc..como estimemos conveniente y no olvidando considerar el alcance y las posibilidades de nuestra organización o negocio), y esto ahora &lt;b&gt;ya no es caro&lt;/b&gt;, desde US$10 al año; pero también sería necesario adquirir un servicio de hosting (que tampoco ya no es caro: desde US$10-15 dolares mensuales dependiendo mucho del tiempo de contrato de 1 o mas años); y por supuesto, el costo de desarrollo y personalización del portal, que nos puede costar de US$1,000 a $10,000, dependiendo del desarrollador que contratemos, y donde el costo principalmente dependerá, del tipo de gestión administrativa asociado a nuestro proyecto&lt;b&gt;:&lt;/b&gt; solo compras con pago on-line adelantado, que es el más convencional; con pagos contra-entrega, con opción de&amp;nbsp;créditos&amp;nbsp;y cobranzas, inclusión de flujo y cierre de caja, con todo lo anterior, etc.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Pero debemos tener presente que existen maneras de &lt;b&gt;reducir los precios y tiempos de desarrollo&lt;/b&gt; de nuestros proyectos &lt;u&gt;recurriendo a las mismas redes sociales &quot;convencionales&quot; que ahora conocemos&lt;/u&gt;, y a otros desarrollos que ya están empezando a mostrar sus bondades, y nos referimos principalmente al empleo de la plataforma &lt;b&gt;blogger&lt;/b&gt; de Google y las &quot;fanpages&quot; de &lt;b&gt;Facebook&lt;/b&gt;, las que incluso dependiendo del menor o mayor grado de especialización de nuestro negocio o servicio, pues podrían incluso trabajar juntos (consideramos que el uso de blogs es para poder explicar temas de manera mas detallada de lo que podríamos hacer en las entradas que ofrece Facebook).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
El caso es que trabajando con la plataforma blogger de Google tenemos acceso a &quot;entradas&quot; y &quot;páginas&quot; que podemos desarrollar utilizando HTML, CSS y Javascript de la misma forma convencional con que se desarrolla cualquier pagina Web, y utilizando algunos servicios sociales disponibles para dicha plataforma, como &quot;Google Friend Connect&quot; y la API Opensocial, pues podríamos identificar a cada uno de nuestros usuarios (y por supuesto a los administradores del negocio), a través de una &lt;b&gt;&quot;ID&quot;&lt;/b&gt; única, lo que constituye la base para poder iniciar cualquier tipo de &quot;sistema de gestión&quot; en la web.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Lo mismo ocurre si trabajamos con Facebook, donde empleando el SDK Javascript y otros que se nos provee (el SDK para PHP como back-end por ejemplo), pues también podríamos identificar a todos nuestros usuarios y clientes empleando la &lt;b&gt;&quot;UID&quot;&lt;/b&gt; de cada uno de ellos..&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Ambas plataformas son &quot;gratuitas&quot; (e indican que siempre lo seguirán siendo), pero vale preguntarnos como poder asociar a estos entornos de desarrollo la gestión y control de nuestros proyectos.. y como indique al inicio de esta entrada, podríamos recurrir a proyectos eCommerce ya consolidados, pero en este caso, estos proyectos principalmente se instalan sobre servicios de hostings convencionales bajo plataforma LAMP ó WAMP (de Linux ó Windows + servidor Apache + base de datos MySQL + lenguaje PHP), y con una estructura de desarrollo ya establecida (y tal vez bastante complicada para usuarios o programadores promedio). &amp;nbsp;..vale entonces preguntarnos si sería posible comenzar con estos servicios sobre plataformas más &quot;faciles&quot;, de uso más difundido y accesible para muchas personas, como son las &quot;hojas de cálculo&quot; ..y vale resaltar también, que esto es totalmente posible, utilizando los &lt;a href=&quot;https://support.google.com/docs/bin/topic.py?hl=es&amp;amp;topic=1360904&quot; target=&quot;_blank&quot;&gt;&quot;formularios&quot;&lt;/a&gt; y los servicios UI y GUI Builder de las &lt;a href=&quot;https://developers.google.com/apps-script/guide&quot; target=&quot;_blank&quot;&gt;App Script&lt;/a&gt; de Google, con la ventaja que su formatos nativo es &quot;https&quot;, lo que le permite incluso ser incluidos dentro de las aplicaciones facebook como aplicaciones iframes externas, cuyo principal requisito desde octubre del 2011, es que los desarrollos que realicemos para ser incluidos dentro de Facebook, como URL ó servicios &quot;canvas&quot;, deben contar una URL segura propia, por lo que si deseamos, que algunas páginas o desarrollos de nuestros servicios web alojados en un servicio de hosting externo, y bajo nuestro dominio, puedan ser &quot;cargados&quot; dentro de facebook, pues ese servicio de hosting debe proveernos URL seguras &quot;https&quot;.. y no solo las convencionales &quot;http&quot;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Algo que vale también resaltar, es que la plataforma blogger de Google no provee URL seguras, por lo que no podríamos colocar &quot;paginas&quot; o desarrollos blogger dentro de Facebook.. pero tampoco es necesario recurrir a un servicio de hosting de &quot;paga&quot; que nos provea el servicio para poder incluir nuestros desarrollos dentro de Facebook.. pues por grata coincidencia y junto a todo el &quot;enojoso&quot; cambio de los estándares de programación de Facebook, y que desde el 01 de Junio del 2012 implica la deshabilitación definitiva del &lt;b&gt;entorno de desarrollo FBML&lt;/b&gt; (de uso bastante popular y difundido actualmente en cientos de miles de &quot;fanpages&quot; en todo el mundo).. pues Facebook ahora también provee para el registro de sus aplicaciones, la opción de utilizar URL de hosting &quot;gratuitos&quot; (hasta cierta cuota bastante razonable).. y este es el caso de &lt;a href=&quot;https://devcenter.heroku.com/articles/facebook&quot; target=&quot;_blank&quot;&gt;Heroku,&lt;/a&gt; que es una plataforma cloud para el desarrollo de aplicaciones basado en Git, que podemos utilizar en nuestras propias aplicaciones Facebook, que nos brinda la opción de selección de nuestro lenguaje de programación back-end favorito (Ruby, Python, NodeJS y PHP disponibles).. a lo que he podido probar que, PHP está bastante bueno, por cuanto, el SDK para PHPproveído por Facebook ya esta bastante probado, consolidado y estable.. y que incluso, al instalar nuestra propia aplicación &quot;Heroku&quot;, se nos provee de una &quot;plantilla de muestra&quot; bastante entendible, que nos permite observar las posibilidades de desarrollo con el SDK del lenguaje que seleccionemos...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
Y Aún cuando nuestro proyecto &lt;b&gt;Integracion Google&lt;/b&gt; principalmente investiga y presenta codelabs y pruebas respecto a las herramientas y API de Google, no hemos resaltado las bondades de &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;Google+&lt;/span&gt;&lt;/b&gt; tanto como una plataforma social .2.0 sobria y elegante (que también permite la &lt;a href=&quot;https://plus.google.com/pages/create?hl=es&quot; target=&quot;_blank&quot;&gt;creación de paginas&lt;/a&gt; para instituciones, empresas, negocios, otros), y de mucho potencial especialmente por el manejo de streaming en lo que se conoce como &lt;a href=&quot;https://developers.google.com/+/hangouts/&quot; target=&quot;_blank&quot;&gt;Hangoust API&lt;/a&gt;, pero por el momento, aparte de sus &lt;a href=&quot;https://developers.google.com/+/plugins/+1button/&quot; target=&quot;_blank&quot;&gt;plug-ins&lt;/a&gt; y &lt;a href=&quot;https://developers.google.com/+/api/&quot; target=&quot;_blank&quot;&gt;REST API&lt;/a&gt; (para autenticación de cuentas Google desde sitios web externos), Google+ no provee aún de &quot;canvas&quot; donde podamos anexar desarrollos ó aplicaciones propias.. y que luego poder difundirla por la red social de Google+, lo que consideramos, constituye por el momento una clara ventaja de Facebook sobre el tema, pero que no dudamos que Google+, en plena evolución, y sobre todo, desarrollado sobre una plataforma más robusta, escalable y limpia que Facebook ..pues si será una opción muy interesante para el futuro.. no se, yo imagino que Google+ hasta podría asociar dominios propios a sus &quot;fanpages&quot; ó alguna otra sorpresa que no dudo será bastante importante en el mundo de las redes sociales..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;CONCLUSIONES :&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Podemos empezar con el desarrollo sobre &quot;Hojas de Calculo&quot; para gestionar y controlar pequeños y medianos negocios de manera menos compleja que desarrollando aplicaciones sobre bases de datos, y recurrir a los &quot;formularios&quot; e incluso a &quot;Interface de Usuario&quot; para facilitar el registro y el proceso de la data ingresada..&lt;/li&gt;
&lt;li&gt;Podemos &quot;insertar&quot; esos desarrollos dentro plataformas Web 2.0 bastante populares como blogger o las &quot;Fanpage&quot; de Facebook, para facilitar el acceso de nuestros clientes y facilitar la gestión y administración de nuestros negocios (hasta pudiendo ingresar &quot;data&quot; desde equipos móviles), incluyendo el desarrollo de gadgets ó widgets de consulta de datos para facilitar nuestros procesos de ventas (para consultar nuestros stocks), y de cobranza (para consultar nuestros saldos por cobrar), y por supuesto finalmente consolidar y sumarizar la información disponible para monitorear los resultados de nuestra organización o negocio (utilidad, ratios, otros) los que por supuesto, también podríamos acceder incluso desde equipos móviles..&lt;/li&gt;
&lt;li&gt;..realmente me ha impresionado el potencial de las &quot;App Scripts&quot; (en pleno proceso de evolución), pero vale también resaltar que estas opciones tienen un limite, ahora de 10,000 lineas, hasta 256 columnas, y un máximo de 400,000 celdas por tabla; que es una cuota importante (debiéndose programar cortes anuales, semestrales ó mensuales según la carga de nuestro proyecto), y aún cuando esta cuota pueda incrementarse, la realidad, es que esta es una herramienta apropiada para pequeños y medianos negocios (como hay varios cientos de miles de estos negocios por aquí en Perú, y Latinoamérica en general), pero para las empresas medianas que tengan aspiraciones de crecer, por supuesto pueden utilizar estas herramientas para iniciarse ó en temas específicos y/o complementarios, pero considero que para la gestión total de estos negocio, necesariamente los responsables y dueños de estos negocios necesariamente deben empezar a presupuestar, dentro de sus costos de operación y funcionamiento, a personal de Desarrollo y Soporte TI permanente, para enfocar sus respectivos casos y sus respectivas soluciones informáticas bajo parámetros mas convencionales (empleo de Base de Datos, y considerar un adecuado diseño y departamentalización de la organización o negocio, con la correspondiente automatización de procesos de las área críticas (producción, ventas, cobranzas, contabilidad), todo por supuesto bajo un enfoque de sistemas, y tomando en consideración todas las herramientas y entornos cliente-servidor, &quot;cloud ó grid computing&quot;, vigentes y disponibles en el ahora interesante e importante mercado del desarrollo de software.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
..y para finalizar, les presentamos algunas&amp;nbsp;imágenes&amp;nbsp;del proyecto planteado sobre Facebook, para lo que hemos creado una&lt;a href=&quot;https://www.facebook.com/pages/create.php?ref_type=sitefooter&quot; target=&quot;_blank&quot;&gt; &quot;fanpage&quot;&lt;/a&gt; de Facebook, y desarrollado una &lt;a href=&quot;https://developers.facebook.com/apps&quot; target=&quot;_blank&quot;&gt;aplicación &quot;canvas&quot;&lt;/a&gt; utilizando &lt;a href=&quot;https://developers.facebook.com/apps&quot; target=&quot;_blank&quot;&gt;Heroku&lt;/a&gt;, la que hemos &lt;a href=&quot;https://developers.facebook.com/docs/reference/dialogs/add_to_page/&quot; target=&quot;_blank&quot;&gt;adicionado a una pestaña &lt;/a&gt;de nuestra fanpage utilizando la &lt;a href=&quot;https://developers.facebook.com/docs/reference/dialogs/&quot; target=&quot;_blank&quot;&gt;interface de Dialogos&lt;/a&gt;&amp;nbsp;también proporcionado por Facebook, y en la cual, para todos los usuarios de nuestro servicio, les damos acceso a nuestras aplicaciones de presentación, promoción y compra de nuestros productos (como pantallas informativas o eCommerce si es el caso), y sólo para los administradores, acceder a las opciones de registro y consulta de las operaciones de nuestro negocio... todo ello, solo utilizando nuestra cuenta Facebook (todas las herramientas empleadas son free).. a lo que se debe considerar por supuesto, el tiempo que demore nuestro desarrollo ... un buen reto!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPebmn8ouXmiGDv8Nyxqrngukt4KkrVebiFh-uUxY8vHHqOZVCF4Bc3IScxU37F340VhQBQUd2SgOnyJ-xgLHzCMVwkjVm5Xhez4Fiz1Ec8uZqHLVlZ4_RoFdCRiYxR0aRAYXeiUbIJyxr/s1600/bAZar+De+la+GaTa01.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPebmn8ouXmiGDv8Nyxqrngukt4KkrVebiFh-uUxY8vHHqOZVCF4Bc3IScxU37F340VhQBQUd2SgOnyJ-xgLHzCMVwkjVm5Xhez4Fiz1Ec8uZqHLVlZ4_RoFdCRiYxR0aRAYXeiUbIJyxr/s640/bAZar+De+la+GaTa01.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Esta en una &quot;fanpage&quot; de Facebook a la que le hemos agregado nuestra aplicación &quot;Intranet&quot; desarrollada utilizando la plataforma Cloud de Heroku
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9zU2cDofoqtVv-QN4Xnk998CdnLELIwEeOI37a4lkpQ9MXZz7lQnGCemW2S23GTQcJhlzVx24SXXzh0E8RJG8iQaRv19TUjKKAEn6ZGzw-JqyqCk-kEsH1LKsbZhK9QXAQgXhbuKMgHpL/s1600/BazarGataAplicacion.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9zU2cDofoqtVv-QN4Xnk998CdnLELIwEeOI37a4lkpQ9MXZz7lQnGCemW2S23GTQcJhlzVx24SXXzh0E8RJG8iQaRv19TUjKKAEn6ZGzw-JqyqCk-kEsH1LKsbZhK9QXAQgXhbuKMgHpL/s640/BazarGataAplicacion.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Esta es la pantalla principal de nuestra aplicación &quot;montada&quot; dentro de Facebook como un iframe &quot;canvas&quot;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb_Bf84nckxW9UJpoL32f40xZXjbb5JFCTpByh2PsAbvyIRB7B0aGGQzRN912yCQ23PxSLtb7R1zL4O9GN4DrP1nNjM59cXNuiXM6gm_j7_xpEI47T8rFPOWEZ4T-l9O4E52vMegoS1CxH/s1600/Registro+de+Egresos.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb_Bf84nckxW9UJpoL32f40xZXjbb5JFCTpByh2PsAbvyIRB7B0aGGQzRN912yCQ23PxSLtb7R1zL4O9GN4DrP1nNjM59cXNuiXM6gm_j7_xpEI47T8rFPOWEZ4T-l9O4E52vMegoS1CxH/s640/Registro+de+Egresos.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Nuestra Aplicación e Registro de Datos desarrollada utilizando la GUI Builders de las App Scripts proporcionadas por las Hojas de Calculo de Google Docs
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0AX7TcAfmSTw6hMHMRz7TpGSqmigaOCckYfV9ACi6KFeaaLFx9wGJigwLPwqmNYxPauMILIwucjisbh15RxVCg89mUp3OHHBAX_K0CKZKweEs0nSbrgPNF8YLptQVH3cKXloJeboUPil/s1600/Registro+de+Egresos+Spreadsheet.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN0AX7TcAfmSTw6hMHMRz7TpGSqmigaOCckYfV9ACi6KFeaaLFx9wGJigwLPwqmNYxPauMILIwucjisbh15RxVCg89mUp3OHHBAX_K0CKZKweEs0nSbrgPNF8YLptQVH3cKXloJeboUPil/s640/Registro+de+Egresos+Spreadsheet.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Esta es nuestro Registro de Egresos, una de las tablas de Google Docs que comprende el proyecto donde se graba lo registrado en la pantalla de Registro de Compras, Gastos y Otros Egresos anterior..
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
..y para la gestión de Ventas, Cobranzas y Otros Ingresos :&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghnWyn1UNoWJExvXQ3H8LuqbSdVCuR8koCRtFEZGIIztMgd9cM3NV23SuY2i9f1q9hL6E77E-Q5jDg3SwLDyYTBgsv0CALfqEdYIjKnyATDvzLbdxXQc1s5pYQB63TlqOzfUbbe5JROA-P/s1600/Registro+de+Ingresos.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghnWyn1UNoWJExvXQ3H8LuqbSdVCuR8koCRtFEZGIIztMgd9cM3NV23SuY2i9f1q9hL6E77E-Q5jDg3SwLDyYTBgsv0CALfqEdYIjKnyATDvzLbdxXQc1s5pYQB63TlqOzfUbbe5JROA-P/s640/Registro+de+Ingresos.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJVziHPFCJjNUXcjz1nAo4Jka3rouUpA58zegZNJVRK_fC_94TzdW5h8yt7mKZZ_2H-D8TSUaQsVOU36_7NzbP4vxOCPKrRzXlW3RASvSPMg9mF92cnARiHUS2JrLPh49QzULElTztwvZL/s1600/Registro+de+Ingresos+Spreadsheets.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJVziHPFCJjNUXcjz1nAo4Jka3rouUpA58zegZNJVRK_fC_94TzdW5h8yt7mKZZ_2H-D8TSUaQsVOU36_7NzbP4vxOCPKrRzXlW3RASvSPMg9mF92cnARiHUS2JrLPh49QzULElTztwvZL/s640/Registro+de+Ingresos+Spreadsheets.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
..como pueden observar en las imágenes mostradas, las &quot;App Scripts&quot; de Google nos permiten mantener nuestro de Registro de Información basica de nuestro negocio (Egresos e Ingresos), nuestro Flujo de Caja (en otra tabla de diseño adecuado), y el &quot;Modelo&quot; puede aun perfeccionarse incluyendo una manejo de Cuentas Corrientes (Cuentas por Cobrar, Cuentas por Pagar); vale decir, todos los requerimientos de nuestra organización ó negocio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvfah3NUhkst27GjVR4JPKWQDxQNoXlrqgw3rQMuGc_FIYlCQMRE_NE5eIFEWG-0aU_uRsSz57e9GgaGrIdQW7mFTkbVrscW3OQvrRAio3jFifYOupXMq1DNwZON1fwXBJgIh8q51esHDT/s1600/Flujo+de+Caja.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvfah3NUhkst27GjVR4JPKWQDxQNoXlrqgw3rQMuGc_FIYlCQMRE_NE5eIFEWG-0aU_uRsSz57e9GgaGrIdQW7mFTkbVrscW3OQvrRAio3jFifYOupXMq1DNwZON1fwXBJgIh8q51esHDT/s640/Flujo+de+Caja.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para mayores detalles&amp;nbsp;técnicos también&amp;nbsp;pueden&amp;nbsp;revisar nuestras entradas:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/05/hablemos-sobre-facebook.html&quot;&gt;Hablemos sobre Facebook&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/05/hablemos-de-twitter.html&quot; target=&quot;_blank&quot;&gt;Hablemos sobre Twitter&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2012/09/lets-talk-about-google-apps-script.html&quot;&gt;Hablemos de las &lt;span class=&quot;notranslate&quot;&gt;Google Apps Script&lt;/span&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
En las próximas entradas vamos a comentar mas respecto a estos conceptos que están muy asociados al mundo Google en general por cuanto, hacia ese concepto de desarrollo web de manejo total es hacia donde estamos apuntamdo...
&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;
&lt;span style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;NUESTRO PROYECTO: &lt;span class=&quot;notranslate&quot;&gt;Community OAuth 2.0 &amp; Business&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Continuando con el desarrollo de nuestro caso practico, pero ampliado y considerando el uso del protocolo OAuth 2.0 empleado para la Autenticación y Autorización de acceso a los datos de los usuarios, protocolo que es utilizado ahora tanto por Google como en redes sociales muy difundidas como Facebook, Twitter, OpenID, otros.. y utilizando  como describimos, hojas de Calculo y Apps Script de Google Docs (ahora Google Drive) ó de Google Apps, éste ultimo de uso ahora bastante difundido a nivel de instituciones, corporaciones y en especial a nivel académico-universitario; resulta que también es posible acceder a los principales datos de contacto de un usuario a objeto que dicha información quede grabada y disponible en nuestras propias base de datos a objeto de conformar &quot;comunidades&quot; con que podamos interactuar, ofertar nuestros productos o servicios, y hacer seguimiento detallado de su participación en nuestros proyectos.. eso quiere decir que, previa autorización de un usuario, podremos tener acceso a su &lt;b&gt;&quot;ID&quot;&lt;/b&gt; utilizada dentro de la red social que utilicemos&lt;b&gt;:&lt;/b&gt; su nombre, nickname.. y su correo electrónico principalmente, entre otros datos que se nos permita acceder (la URL de su imagen o perfil por ejemplo); y con dicha información, podríamos entonces de manera mas sencilla diseñar y entregar a nuestros usuarios, formularios para que actualicen sus datos de contacto (dirección, teléfono, otros); que registren sus preferencias respecto a nuestros servicio ó negocio, así como invitarlos a que hagan pedidos on-line de nuestros productos y servicios ofertados, pudiendo controlar sus pagos y saldos por cobrar, otorgarles regalos, ofrecerles promociones, más ofertas, etc.. el potencial es increíble.. y esto por supuesto, puede ser utilizado desde diferentes back-end (Java, PHP, Python, otros ..y utilizando base de datos MySQL, Postgres, otros, ó el datastore de Google App Engine).&lt;/p&gt;
&lt;p&gt;
Nuestro proyecto &lt;a href=&quot;http://communytyproject.blogspot.com/p/welcome.html&quot; target=&quot;_blank&quot;&gt;Community OAuth 2.0 and Business&lt;/a&gt; realiza todo ello, pero utilizando como bcak-end &lt;b&gt;hojas de calculo&lt;/b&gt; de Google Docs y su servicio &lt;b&gt;Apps Script&lt;/b&gt;, que permite el uso de javascript para interactuar con el datastore (las tablas de nuestras hojas de calculo en este caso) ..y consideramos que el potencial de este proyecto es bastante importante por cuanto:&lt;br&gt;
&lt;ul&gt;&lt;li&gt;las Hojas de Calculo de Google Docs son de uso libre hasta 5Gb (400,000 celdas por hoja de Calculo y hasta 200 hojas por cuenta Google), suficiente para el manejo de PYMES (pequeñas y medianas empresas)&lt;/li&gt;
&lt;li&gt;Trabajar con las Apps Script es bastante sencillo y hay hasta 03 maneras de utilo
izar la API: &lt;b&gt;UI Service &lt;/b&gt;(que es la forma básica de emplear la API), utilizando &lt;b&gt;GUI Builder &lt;/b&gt;(que permite diseñar nuestras &quot;pagina&quot; Web a desplegar utilizando un interface gráfico que nos facilita su construcción y desarrollo), y ahora desde Agosto 2012, utilizando el denominado &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;HTML service&lt;/span&gt;&lt;/b&gt;, que significa que ahora incluso podemos construir nuestros desarrollos directamente desde una pagina HTML en blanco (utilizando todas las ventajas de uso de HTML, CSS y javascript por el front-side de nuestra pagina, incluyendo el empleo de frameworks como JQuery, JQueryUI, ExtJS, Sencha Touch u otro de nuestra preferencia en nuestros desarrollos.&lt;/li&gt;
&lt;li&gt;..y por el back-end, utilizamos también Javascript con todos los servicios que nos brinda las Apps Script, como los servicios de email, manejo del calendario, de los Mapas, de las Visualizaciones para hacer nuestros gráficos, API Contact otros.. e incluso de conexión a otras bases de datos vía &lt;b&gt;&quot;Jdbc&quot;&lt;/b&gt; con lo que podríamos conectarnos y trasladar nuestra data a bases de datos más escalables como MySQL o el mismo datastore de Google App Engine.. y trabajar con la data de ambas plataformas (la de nuestras hojas de calculo.. y la &quot;guardada&quot; en nuestra base de datos corporativa).&lt;/li&gt;
&lt;li&gt;y finalmente, para acceder al protocolo OAuth 2.0 utilizamos la &lt;span style=&quot;font-weight: bold;&quot; class=&quot;notranslate&quot;&gt;Google API Javascript Client&lt;/span&gt;, y logramos con ello que nuestro proyecto finalmente solo utilice como lenguaje de programación Javascript.. al mismo modo que nodeJS !!
&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;
Nuestro proyecto como hemos indicado nos permite el manejo de todas esas opciones, y como podrán revisar y probar, se forma una &quot;comunidad&quot; en la cual haciendo click sobre las imágenes de las personas registradas se puede tener acceso a las paginas &lt;span class=&quot;notranslate&quot;&gt;Google+ &lt;/span&gt;de los integrantes; y a diferencia de lo expuesto en nuestro CASO PRACTICO planteado, ahora si podemos remitir a nuestros &quot;usuarios registrados&quot; nuestras ofertas, promociones, novedades, etc. (como campañas de ventas), directamente a su mail ó mostrándolos en una página web para invitar a los usuarios no registrados todavía (sobre la plataforma Blogger en este caso); y lo que buscamos es que ellos puedan registrar on-line sus requerimientos (ordenes de compras).. interesante no?&lt;/p&gt;
&lt;p&gt;
Pueden revisar nuestro proyecto en el siguiente enlace:&lt;br&gt;
&lt;br&gt;&lt;a href=&quot;http://communytyproject.blogspot.com/p/welcome.html&quot; target=&quot;_blank&quot;&gt;http://communytyproject.blogspot.com/p/welcome.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
..ó también pueden dirigirse a la &lt;a href=&quot;http://tinyurl.com/9emw6zk&quot;&gt;pagina Google+ &lt;/a&gt;que promociona nuestro proyecto en el GADC 2012 para que puedan comentar sus pruebas, opiniones y las posibilidades de este proyecto.. y al hacer click sobre la siguiente imagen mostrada accederemos a algunos screenshots.&lt;br&gt;&lt;br/&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://plus.google.com/photos/115783742058000048884/albums/5786652159723390177&quot; target=&quot;_blank&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; width=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6fa3vW58fQ-iI2YgXWJBfID_GJ10ED3XZpO458DOaIUWhq6pqfaCyCIj-U4GdAeiv6j9yzKn4R1gJJPyK-ePF-dhU9SIakE9BM4Gws30fWun8Kkm3nW9k8KKoZaoX0UbLeuve3AuVU3Xk/s640/_AAproject.jpg&quot; title=&quot;Go to project screenshots..&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
El proyecto cuenta con su propio Mini-Manual y resumen técnico, pero al estar compitiendo en el &lt;span style=&quot;font-weight: bold;&quot; class=&quot;notranslate&quot;&gt;Google Apps Developer Challenge GADC-2012&lt;/span&gt;, no tenemos disponible por el momento enlaces de descarga de las &quot;fuentes&quot; del modelo.. pero por supuesto, el tema es bastante amplio por lo que toda dicha información será proporcionada en un futuro próximo en una nueva entrada de éste nuestro proyecto &lt;b&gt;Integracion Google&lt;/b&gt;.. por lo que estas lineas solo tienen carácter introductorio.&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
&lt;span style=&quot;color: blue; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;SIGUIENTES PASOS&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Si ha llegado a revisar completamente esta entrada debe haberse convencido, o intuir con entusiasmo, que el potencial de todas estas herramientas mencionadas es realmente importante; y todo este desarrollo tiene un nombre: &lt;span class=&quot;notranslate&quot;&gt;&quot;Community Management&quot;&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;&quot;Social Media Management&quot;&lt;/span&gt;; vale decir, todo el proceso descrito busca que nuestras organizaciones, negocios ó emprendimientos que estemos involucrados (propios ó de terceros), lleguen a conformar una &quot;Comunidad&quot; con la que podamos interactuar y fidelizar con nuestros productos, servicios, conceptos.. es el comienzo de lo que se también se conoce como &quot;marketing digital&quot;, y reitero que es solo el comienzo por cuanto la labor de &quot;Community Manager&quot; va a convertirse poco a poco en un puesto de trabajo relevante y de importancia en toda organización o negocio.. como se indica, no solo es atender el blog, los anuncios, el chat.. sino establecer verdaderas campañas y estrategias.. y por supuesto cuantificar, monitorear, reportar y monetizar resultados.. todo ello acorde a las reales posibilidades y expectativas de la institución o negocio.. realmente todo un reto..
&lt;/p&gt;
&lt;p&gt;
Conviene entonces den una revisión a los siguientes artículos:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.maestrosdelweb.com/editorial/que-es-un-community-manager/&quot; target=&quot;_links&quot;&gt;Que es Community Manager?&lt;/a&gt; (en español)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sproutsocial.com/insights/2012/08/social-media-community-manager/&quot; target=&quot;_links&quot;&gt;Social Media Manager vs Community Manager&lt;/a&gt; (in English)&lt;/li&gt;
&lt;li&gt;y por supuesto, &lt;a href=&quot;https://www.google.com.pe/search?q=que+es+community+manager&amp;oq=que+es+community+manager&amp;q=difference+between+social+media+manager+and+community+manager&amp;oq=social+media+manager+and+community+manager&quot; target=&quot;_links&quot;&gt;googlear&lt;/a&gt; sobre el tema..&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
y finalmente, vale destacar que a lo largo del desarrollo del tema nos hemos entusiasmado con respecto al empleo de las &lt;b&gt;Apps Script&lt;/b&gt; y las Google spreadsheet especialmente en lo que concerniente a la gestión de micro y pequeñas empresas (que abundan en nuestra zona Latam, y por supuesto en todo el planeta.. y que en lo personal, también me interesa mucho para algunos proyectos personales), pero eso es también solo un comienzo.. la realidad concreta es que en el desarrollo de todo nuestro proyecto hemos logrado conseguir disponer de información de contacto de nuestros seguidores por el &lt;u&gt;&quot;front-side&quot; ó lado del cliente&lt;/u&gt; (como variables javascript) las que hemos almacenado sobre hojas de calculo Google; pero dependiendo de la envergadura y del crecimiento de nuestros proyectos bien fácilmente podríamos &quot;cambiar&quot; nuestro &lt;b&gt;Back-End&lt;/b&gt; por uno convencional PHP+MySQL, Java+MySQL (u otra base de datos como Postgress, Oracle, otros); e incluso utilizar servicios &quot;escalables&quot; y de &quot;alta disponibilidad&quot;, como el servicio Amazon C3 ó el datastore de Google App Engine.. no existe limite para utilizar el &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;online storage web service&quot;&lt;/b&gt;&lt;/span&gt; de nuestra preferencia de acuerdo a nuestros requerimientos, preferencias y presupuestos.. pero nuestro desarrollo del lado del cliente &lt;u&gt;no tendría que variar sino en muy pocas líneas.. y en algunos casos no variar en lo absoluto&lt;/u&gt;, dependiendo de las técnicas de desarrollo por el lado del cliente que utilicemos en nuestro proyecto.. y hacia ello es que apunta todo el concepto de desarrollo de nuestro proyecto &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Integración Google&lt;/b&gt;&lt;/span&gt;.. en la que con un mismo &quot;interface&quot; (pero por supuesto con las respectivas adecuaciones según el Back-End que utilicemos), pues un mismo proyecto puede correr en las diferentes plataformas de desarrollo web vigentes.. tal vez en las futuras por desarrollarse.. y trabajando con PHP, Java, Python, nodeJS (Javascript), DART, GO u otro lenguaje del lado de servidor que dominemos, nos sea solicitado, o sea de nuestra preferencia.. y ésta si es una magnifica meta!.
&lt;/p&gt;
&lt;p&gt;Una muestra de ello es nuestro codelab &lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot;&gt;Integration with Google (1st. part)&lt;/a&gt;&lt;/span&gt;, que ahora utiliza el protocolo &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html#oauth20&quot;&gt;Oauth 2.0&lt;/a&gt;&amp;nbsp; para la autenticación y autorización de nuestros usuarios, desarrollo en que utilizamos el framework ExtJs, JQuery y otras herramientas &quot;javascript&quot; de geolocalización y disponer de una información básica de contacto con nuestros seguidores que utilicen nuestros &quot;demos&quot;.. por supuesto, en el enlace indicado ponemos a disposición la descarga del código empleado con el cual podrá realizar sus propias pruebas en un servidor local convencional HTTP Apache (como Appserv por ejemplo) ..pero que en nuestro caso, como podrá observar, lo hemos podido desplegar sin mayores inconvenientes sobre la plataforma Google App Engine..
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;_demos&quot;&gt;
&lt;img border=&quot;0&quot;  title=&quot;IntGoogle01-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;now you can test our &lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;_demos&quot;&gt;IntGoogle01-Oauth2.0 demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (must enable it!)&lt;br/&gt;
&lt;/p&gt;
&lt;br /&gt;
Saludos&lt;br /&gt;
@Mlaynes&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;br /&gt;

&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2010/05/web-20-los-negocios-y-las-redes.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/2632283486071130910/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/05/web-20-los-negocios-y-las-redes.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/2632283486071130910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/2632283486071130910'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/05/web-20-los-negocios-y-las-redes.html' title='Web 2.0: Los negocios y las redes sociales.'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZDRxQTD3EMK6ipia-CNs5JJgpfgxuQqxjeURd8dkp8Y4ZpFf5TesgS3UDRzjJNxgM9k0dD9Vw13YGeGq3scZt25X-ykAL4vDOLKaAG0OZAf3-AAFepu3fwrjpQ9ucacZ2_P-fOWLTBXQZ/s72-c/Web20_logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-5268760729042167555</id><published>2010-05-15T13:25:00.000-05:00</published><updated>2013-03-27T23:38:57.779-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Web2.0"/><title type='text'>Let&#39;s talk about Twitter</title><content type='html'>&lt;div id=&quot;talerta&quot;&gt;&lt;/div&gt;&lt;div id=&quot;talerta1&quot;&gt;&lt;/div&gt;&lt;div id=&quot;alerta&quot;&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div id=&quot;alerta1&quot;&gt;Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;javascript:rut_twitter();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin: 20px 15px 0px 0px;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;100&quot; src=&quot;http://twitter-badges.s3.amazonaws.com/t_logo-b.png&quot; width=&quot;100&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;MUY BUENAS NOTICIAS... (nuestra experiencia con Twitter - 29/05/2010)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El equipo de Twitter, despues de meditar nuestros descargos remitidos durante casi 02 semanas, decidió levantar la suspensión de nuestra cuenta Twitter en Inglés que nos había impuesto, lo que habla muy bien de dicha red social, por cuanto, atendió nuestros argumentos, (el cual principalmente se centró en indicarles que nuestro proyecto trata de integrar a la comunidad GTUG mundial para formar una biblioteca de codigos, y que por tanto, resulta imprescindible tratar de comunicarnos con toda dicha comunidad, y por supuesto no somos spam..!); y bueno, Twitter trata de mantener un manejable rango de relación y control de los seguidores de su red que debemos destacar... y esto, unido a su pronunciamiento &lt;a href=&quot;http://twitter.com/about/opensource&quot; target=&quot;blank_&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;Twitter loves open source&lt;/span&gt;&lt;/a&gt;, (el cual compartimos en esta humilde comunidad), y el lanzamiento de &lt;a href=&quot;http://dev.twitter.com/&quot; target=&quot;_blank&quot;&gt;@anywhere&lt;/a&gt;, y con el reconocimiento que Twitter es la principal red de microblogging vigente en el momento, pues en verdad nos alegra contar ahora con todas nuestras cuentas Twitter completamente operativas, en &lt;a href=&quot;http://twitter.com/IGCodelab_es&quot; target=&quot;_blank&quot;&gt;español&lt;/a&gt;,&lt;a href=&quot;http://twitter.com/IGCodelab_en&quot; target=&quot;_blank&quot;&gt; inglés &lt;/a&gt;y &lt;a href=&quot;http://twitter.com/IGCodelab_pt&quot; target=&quot;_Blank&quot;&gt;portugués&lt;/a&gt;... por lo que les detallamos a continuación nuestros tips respecto a nuestros avances al jugar con el API que Twitter nos proporciona...&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;REFERENCIA TECNICA (18/07/2010)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Como siempre, les indicamos las paginas oficiales de Twitter para que las revisemos continuamente y estemos atentos a los cambios y mejoras que nos brindan los servicios de esta red social (y que realmente nos conviene revisar para mantener al día y sin problemas nuestras aplicaciones).&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://twitter.com/widgets&quot; target=&quot;_blank&quot;&gt;Extras de Twitter&lt;/a&gt;, que nos proporciona diversos widgets y botones para emplear en nuestras paginas web, y en la que resaltamos el widget de perfil, que nos muestra en cualquier un listado de los tweets de la cuenta Twitter que indiquemos; pero debemos destacar que dependiendo de cada caso, bien podriamos utilizar los otros widgets tanto para nuestros sitios web como para Facebook, que Twitter nos proporciona... (solo basta ingresar los datos que nos indican y luego probar y observar el resultado, y al terminar y guardar el código, se nos proporciona el mismo para pegarlo en nuestros documentos HTML)&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;TWITTER ANYWHERE&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: blue;&quot;&gt;IMPORTANTE: Twitter Anywhere dejo de funcionar desde el 01 de Marzo del 2013 !&lt;/span&gt;&lt;br&gt;
Consulte este enlace: &lt;a href=&quot;https://dev.twitter.com/blog/sunsetting-anywhere&quot; target=&quot;_links&quot;&gt;https://dev.twitter.com/blog/sunsetting-anywhere&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
A diferencias de los Extras, con Anywhere, Twitter busca que interactuemos directamente con nuestra cuenta Twitter en nuestras paginas web, sin ingresar directamente a Twitter, logrando así facilitar el uso de nuestras cuentas, incrementar el trafico de las mismas y su difusión.&lt;br /&gt;
&lt;br /&gt;
Para ello, el &lt;a href=&quot;http://dev.twitter.com/&quot; target=&quot;_blank&quot;&gt;APIde Twitter&lt;/a&gt; requiere como primer paso que registremos nuestra aplicación (debemos tener presente que si tenemos varias cuentas twitter siempre estemos conectados con la misma para que nuestros desarrollos se muestren agrupados, o que las asignemos a la cuenta Twitter de su respectiva aplicación, el caso es que para poder acceder a los datos de nuestra aplicación luego de creadas -especialmente a nuestro &lt;span class=&quot;notranslate&quot;&gt;API Key, Consumer Key, Consumer Secret&lt;/span&gt; u otros datos que necesitemos-, basta con que ingresemos a la cuenta Twitter con la que accedimos al registrar nuestra aplicación e ingresar a nuestra &lt;a href=&quot;http://dev.twitter.com/&quot; target=&quot;_blank&quot;&gt;cuenta de desarrollor&lt;/a&gt; utilizando la opción &lt;span class=&quot;notranslate&quot;&gt;&quot;Siqn&quot;&lt;/span&gt;, y luego ingresemos a los datos de nuestra aplicación usando la pestaña &lt;span class=&quot;notranslate&quot;&gt;&quot;Your Apps&quot;&lt;/span&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green;&quot;&gt;&lt;b&gt;NOTA : &lt;/b&gt;&lt;/span&gt;Al registrar nuestra aplicación es importante que indiquemos en &lt;span class=&quot;notranslate&quot;&gt;&quot;Registered Callback URL&quot;&lt;/span&gt; la dirección exacta de nuestra pagina web a partir de la cual se va a tener acceso a Anywhere, y asimismo, que indiquemos el &lt;span class=&quot;notranslate&quot;&gt;&quot;Default Acces Type&quot;&lt;/span&gt; (&lt;span class=&quot;notranslate&quot;&gt;read only&lt;/span&gt; o &lt;span class=&quot;notranslate&quot;&gt;write &amp;amp; read&lt;/span&gt;, dependiendo si deseamos que solo se tenga acceso de lectura o se pueda escribir en la cuenta twitter que acceda a la aplicación... nosotros elegimos write&amp;amp;read)&lt;br /&gt;
&lt;br /&gt;
Registrada nuestra aplicación, podemos utilizar en la pagina web que desarrollemos las diversas &lt;a href=&quot;http://dev.twitter.com/anywhere/begin&quot; target=&quot;_blank&quot;&gt;aplicaciones Anywhere&lt;/a&gt; que nos presenta la API, y entre las que destacamos las &quot;Hovercards&quot; (que a diferencia de las linkifyUsers, no solo nos direccionan a nuestras paginas Twitter, sino que nos permite mostrar el logo e&amp;nbsp;información&amp;nbsp;básica, y opción a seguirlas, y en un formato bastante apropiado, con solo pasar sobre el &lt;span class=&quot;notranslate&quot;&gt;link&lt;/span&gt; el mouse), las &lt;span class=&quot;notranslate&quot;&gt;&quot;Twitter Box&quot;&lt;/span&gt;, que nos permiten escribir en el muro de la cuenta Twitter de nuestros usuarios, y &lt;span class=&quot;notranslate&quot;&gt;&quot;User login &amp;amp; SignUp&quot;&lt;/span&gt;, para controlar el acceso y salida de la cuenta Twitter de nuestro usuario.&lt;br /&gt;
&lt;br /&gt;
Detallamos a continuación el codigo de nuestra aplicación Anywhere que hemos detallado en nuestra pagina &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2009/12/ayudanos-difundir-nuestra-comunidad.html&quot; target=&quot;_blank&quot;&gt;&quot;Ayudenos a difundir nuestra comunidad&quot;&lt;/a&gt;, la cual considera en forma conjunta la aplicación de las figuras de Anywhere que les hemos recomendado, y en la que debemos destacar los siguientes aspectos:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Utilizamos Anywhere sobre una misma pagina HTML, por lo que las instrucciones de conexion las colocamos en el mismo documento (a diferencia de utilizar el &lt;span class=&quot;notranslate&quot;&gt;HEAD&lt;/span&gt; recomendado en la documentación de Twitter Anywhere), lo que es muy util cuando consideremos el desarrollo de widgets, gadgets o paginas independientes que utilizen Anywhere.&lt;/li&gt;
&lt;li&gt;Utilizamos la conexion a la librería &quot;jsapi&quot; de Google para tener acceso al framework JQuery que ésta nos proporciona (necesario para hacer uso de los comandos JQuery que utilizamos)&lt;/li&gt;
&lt;li&gt;y bueno, se requiere tener conocimientos basicos de JavaScript y JQuery, por lo que aprovecho la oportunidad para indicarles la direccion de un &lt;a href=&quot;http://www.w3schools.com/js/default.asp&quot; target=&quot;_blank&quot;&gt;tutorial javascript&lt;/a&gt; para consultas rapidas; y en lo que respecta a JQuery, les indico una &lt;a href=&quot;http://www.maestrosdelweb.com/editorial/javascript-facil-y-rapido-con-jquery/&quot; target=&quot;_blank&quot;&gt;pagina de introducción&lt;/a&gt; bastante util.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Detalle de nuestro codigo :&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt; &amp;lt;!-- loading ID de Aplicacion Twitter --&amp;gt;&lt;br /&gt;
&amp;lt;script charset=&#39;utf-8&#39; src=&#39;http://platform.twitter.com/anywhere.js? id=nQjC8OfVtcUWjVjKW1ATlw&amp;amp;v=1&#39; type=&#39;text/javascript&#39;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;
twttr.anywhere(function (T) {&lt;br /&gt;
//T(&quot;##main-content&quot;).linkifyUsers();&lt;br /&gt;
T(&quot;#main-content&quot;).hovercards();&lt;br /&gt;
})&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!-- Twitter Hovercards div --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&quot;main-content&quot;&amp;gt;&lt;br /&gt;
..and now, with Twitter @Anywhere you can connect directly with us: @IGCodelab_en&lt;br /&gt;
&amp;lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&amp;gt;&amp;lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&amp;gt;(Put the mouse on the links)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- Twitter Anywhere --&amp;gt;&lt;br /&gt;
&amp;lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;
google.load(&quot;jquery&quot;, &quot;1&quot;);&lt;br /&gt;
twttr.anywhere(function (T) {&lt;br /&gt;
var currentUser,&lt;br /&gt;
screenName,&lt;br /&gt;
profileImage,&lt;br /&gt;
profileImageTag;&lt;br /&gt;
&lt;br /&gt;
T(&quot;#tbox&quot;).tweetBox({&lt;br /&gt;
height: 100,&lt;br /&gt;
width: 400,&lt;br /&gt;
label: &#39;Post on your Twitter Wall...&#39;,&lt;br /&gt;
defaultContent: &quot;I like Integracion Google. Check out our fan page into http://tinyurl.com/35ac3on\nhelp us to disseminate our project..!&quot;&lt;br /&gt;
});&lt;br /&gt;
T(&quot;#withus&quot;).tweetBox({&lt;br /&gt;
height: 100,&lt;br /&gt;
width: 400,&lt;br /&gt;
label: &#39;Tell us your thoughts ....&#39;,&lt;br /&gt;
defaultContent: &quot;@IGCodelab_en ...&quot;&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function isConectado() {&lt;br /&gt;
$(&quot;#twitter-connect-placeholder&quot;).show();&lt;br /&gt;
$(&quot;#tbox&quot;).show();&lt;br /&gt;
$(&quot;#withus&quot;).show();&lt;br /&gt;
};&lt;br /&gt;
function noConectado() {&lt;br /&gt;
$(&quot;#twitter-connect-placeholder&quot;).hide();&lt;br /&gt;
$(&quot;#tbox&quot;).hide();&lt;br /&gt;
$(&quot;#withus&quot;).hide();&lt;br /&gt;
};&lt;br /&gt;
function myAvatar() {&lt;br /&gt;
document.getElementById(&#39;twitter-connect-placeholder&#39;).innerHTML=&quot;&quot;;&lt;br /&gt;
if (T.isConnected()) {&lt;br /&gt;
currentUser = T.currentUser;&lt;br /&gt;
screenName = currentUser.data(&#39;screen_name&#39;);&lt;br /&gt;
profileImage = currentUser.data(&#39;profile_image_url&#39;);&lt;br /&gt;
profileImageTag = &quot;&amp;lt;img src=&#39;&quot; + profileImage + &quot;&#39; style=&#39;cursor: hand; cursor: pointer; display: block; float: left; margin: 0px 10px 5px 0px; text-align: left;&#39;/&amp;gt;&quot;;&lt;br /&gt;
$(&#39;#twitter-connect-placeholder&#39;).append(&#39;&amp;lt;p&amp;gt;&#39; + profileImageTag + &#39;&amp;lt;b&amp;gt;&#39; + screenName + &#39;&amp;lt;/b&amp;gt; esta conectado..!&amp;lt;/p&amp;gt;&#39;);&lt;br /&gt;
$(&quot;#twitter-connect-placeholder&quot;).append(&#39;&amp;lt;p&amp;gt;&amp;lt;button id=&quot;signout&quot; type=&quot;button&quot;&amp;gt;Sign out&amp;lt;/button&amp;gt;&amp;lt;p&amp;gt;&#39;);&lt;br /&gt;
$(&quot;#twitter-connect-placeholder&quot;).bind(&quot;click&quot;, function () {&lt;br /&gt;
twttr.anywhere.signOut();&lt;br /&gt;
});&lt;br /&gt;
};&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
if (T.isConnected()) {&lt;br /&gt;
myAvatar();&lt;br /&gt;
isConectado();&lt;br /&gt;
} else {&lt;br /&gt;
noConectado();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
T(&quot;#connect&quot;).connectButton( {&lt;br /&gt;
authComplete: function(user) {&lt;br /&gt;
// alert(&quot;It&#39;s Connected&quot;);&lt;br /&gt;
myAvatar();&lt;br /&gt;
isConectado();&lt;br /&gt;
},&lt;br /&gt;
signOut: function() {&lt;br /&gt;
// alert(&quot;It&#39;s not Connected&quot;);&lt;br /&gt;
noConectado();&lt;br /&gt;
}&lt;br /&gt;
});&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;span id=&quot;connect&quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span id=&quot;twitter-connect-placeholder&quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;div id=&quot;tbox&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&quot;withus&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
(Tenga cuidado con las instrucciones de inicio y fin de parrafo en &lt;b&gt;html&lt;/b&gt; (&lt;b&gt; &amp;lt;p&amp;gt; y &amp;lt;/p&amp;gt; )&lt;/b&gt;, pues el editor de Blogger usualmente corta la linea despues del primer &lt;b&gt;&amp;lt;p&amp;gt;&lt;/b&gt; cuando editamos nuestras paginas, y eso debe corregirse antes de grabarlas, sino nuestras pruebas y desarrollos no funcionaran).&lt;br /&gt;
&lt;br /&gt;
Con dicho código, y si accedemos a nuestra cuenta Twitter, se mostraría los &lt;span class=&quot;notranslate&quot;&gt;Tweet Box &lt;/span&gt;en nuestra pagina como lo indicamos a continuación (si utiliza su propia pagina web, recuerde que debe ingresar el ID de su propia &lt;span class=&quot;notranslate&quot;&gt;API KEY&lt;/span&gt; en el inicio del código):&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2009/12/ayudanos-difundir-nuestra-comunidad.html&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZQi17EChmdTU-T5Ax36rmCG4tAcjnBjTZTIUBvQyNsdtWcoGAndPcbs_5MbemNfHIebNmpDGdNuEUKiBl6fGm15JnOVGBDPZhHZuaTm_L2OQnqFqAZxSqg0STBHZbB1qLmeCzlrXJcDgO/s400/TAnywhere.JPG&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Les indicamos asimismo, la pagina de la&lt;a href=&quot;http://dev.twitter.com/doc&quot; target=&quot;_blank&quot;&gt; documentación general de la API &lt;/a&gt;(disponible en la pagina del desarrollador), en la cual, además de Twitter Anywhere, podremos revisar todas las opciones de desarrollo que nos presenta Twitter; así como la documentación de &lt;a href=&quot;http://business.twitter.com/twitter101&quot; target=&quot;_blank&quot;&gt;Twitter para Negocios&lt;/a&gt;, cuya lectura tambien nos debe interesar y debemos tener presente.&lt;br /&gt;
&lt;br /&gt;
@Mlaynes&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:rut_facebook_110();&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 05px 09px 0px; text-align: left; width: 40px;&quot; /&gt; Hablemos sobre Twitter..&lt;/a&gt;&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;script&gt;
window.fbAsyncInit = function() {
FB.init({appId: ‘138465519521758”, status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement(‘script’); e.async = true;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
document.getElementById(‘fb-root’).appendChild(e);
}());
&lt;/script&gt;


&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;
&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2010/05/hablemos-de-twitter.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/5268760729042167555/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/05/hablemos-de-twitter.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/5268760729042167555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/5268760729042167555'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/05/hablemos-de-twitter.html' title='Let&#39;s talk about Twitter'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZQi17EChmdTU-T5Ax36rmCG4tAcjnBjTZTIUBvQyNsdtWcoGAndPcbs_5MbemNfHIebNmpDGdNuEUKiBl6fGm15JnOVGBDPZhHZuaTm_L2OQnqFqAZxSqg0STBHZbB1qLmeCzlrXJcDgO/s72-c/TAnywhere.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-2392162792707327327</id><published>2010-05-07T22:31:00.000-05:00</published><updated>2013-03-27T22:55:46.660-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><category scheme="http://www.blogger.com/atom/ns#" term="Web2.0"/><title type='text'>Let&#39;s talk about Facebook...</title><content type='html'>&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;script&gt;
var wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;script type=&quot;text/javascript&quot;&gt;
// seleccion de facebook wall
function rut_invitar() {
  var wurl_facebook = &#39;&#39;;
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  switch(wlanguage) {
  case &#39;es&#39;:
     wurl_facebook = &quot;http://mlaynessanchez.blogspot.com/2009/12/ayudanos-difundir-nuestra-comunidad.html&quot;;
     break;
  case &#39;pt&#39;:
     wurl_facebook = &quot;http://mlaynessanchez.blogspot.com/2009/12/ajude-nos-nossa-comunidade-muito-maior.html&quot;;
     break;
  default:
     wurl_facebook = &quot;http://mlaynessanchez.blogspot.com/2010/05/help-us-make-our-community-much-larger.html&quot;;
  };
  window.open(wurl_facebook,&quot; &quot;);
  return wurl_facebook;
};
&lt;/script&gt;&lt;br /&gt;
Al estar haciendo las modificaciones a nuestro Blog, para adicionarles servicios sociales y propiciar la difusión de nuestra comunidad utilizando Facebook, twitter, Google Buzz, etc.; y leyendo diversos comentarios al respecto, realmente nos resultan muy impresionantes las cifras asociadas a Facebook: a inicios del 2010, mas de 400 millones de usuarios y mas de US$300 millones anuales de ingresos, y las cifras siguen en aumento... al mes de Julio 2010 reportan mas de 500 millones de usuarios...en Marzo del 2011 ya son 600 millones, y a Julio del 2011 se habla ya de 750 millones de usuarios y alrededor de US$ 2,000 millones de dolares de ingresos &amp;nbsp;..&lt;br&gt;
&lt;br&gt;..por supuesto, nuestras felicitaciones a Facebook, es innegable que brilla con luz propia y lo convierte en un servicio con vigencia para bastante tiempo.. pero no todo lo referido a Facebook brilla... y también encontré por ahí este post, y se los presento para su consideración:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://techtastico.com/post/10-razones-para-no-estar-en-facebook/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5468753294112858658&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8oyMErO547ILj_Uts0hBPSPKuvtqxsqLIIcdV2mFM3E42TCdsAoiasjbyeMGtZpo-YQhQWAne1rCPU069yu5WprASPmNInsmTaOkHOMKCcdla0WzppsKickWuIJbqgcbkiCjopjw5Vg1D/s200/No-usar-Facebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 28px; margin: 5px 10px 10px 0; width: 28px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;10 razones para no estar en Facebook&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Los términos del servicio de Facebook solamente benefician a Facebook.&lt;/li&gt;
&lt;li&gt;El CEO de Facebook (Mark Zuckerberg) tiene un historial documentado de comportamiento no ético.&lt;/li&gt;
&lt;li&gt;Facebook ha declarado la guerra contra la privacidad.&lt;/li&gt;
&lt;li&gt;Facebook constantemente está cambiando cual información se comparte y cual no sin tu consentimiento.&lt;/li&gt;
&lt;li&gt;Facebook no tiene buenas intenciones (..uy!)&lt;/li&gt;
&lt;li&gt;Toda tu información se comparte a través de las aplicaciones&lt;/li&gt;
&lt;li&gt;Facebook tiene muchos problemas técnicos (..uuy!)&lt;/li&gt;
&lt;li&gt;Es muy difícil eliminar tu cuenta de Facebook&lt;/li&gt;
&lt;li&gt;Facebook no soporta una Web abierta de verdad&lt;/li&gt;
&lt;li&gt;Facebook apesta (...que fuerte esto, no??)&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
y bueno, ...aunque no son necesarias las exageraciones, de todo esto algo hay de cierto, (pueden revisar informacion general, y sobre las políticas, criticas e impactos referidos a Facebook en &lt;a href=&quot;http://en.wikipedia.org/wiki/Facebook&quot; target=&quot;_blank&quot;&gt;wikipedia&lt;/a&gt;, la cual es un poco mas escueta pero también incisiva en su versión en &lt;a href=&quot;http://es.wikipedia.org/wiki/Facebook&quot; target=&quot;_blank&quot;&gt;español&lt;/a&gt;, siendo igual en las paginas para otros idiomas)&lt;br /&gt;
&lt;br /&gt;
Facebook es una herramienta muy poderosa e importante, pero los últimos cambios efectuados durante el 2010, 2011 y los programados para el 2012, confirman la variación del estándar &quot;Facebook&quot; y la comprensible saturación de su plataforma de desarrollo ahora que se acerca a los mil millones de usuarios registrados; y aun cuando ahora recurren a conceptos &quot;opensource&quot;, como el uso de un SDK Javascript (con soporte al estandard OAuth 2.0 para la autenticación, registro de usuarios y uso compartido de información), con soporte y manejo de &quot;canvas&quot; e iframes dentro de la red social, e incluso con soporte para otros entornos de desarrollo como Java, PHP, Python, entre otros.&lt;br/&gt;
&lt;br/&gt;
Pero el gran cambio de Facebook va a ser resaltado a partir del 01 de Junio del este 2012, con la desactivacion de la aplicación &lt;b&gt;&lt;a href=&quot;http://developers.facebook.com/docs/reference/fbml/&quot; target=&quot;_blank&quot;&gt;Static FBML&lt;/a&gt;&lt;/b&gt; (en la que estan hechas miles y tal vez millones de &quot;fanpages&quot; de negocios, profesionales e instituciones de todo tipo que difunden sus actividades a través de la Red Social de Facebook.. Facebook requiere ahora que todas las aplicaciones que trabajen dentro de su red social utilizen los recursos de terceros (colgado sus widgets o servicios sociales a nuestras paginas webs), ó pegando como &quot;canvas&quot; nuestros desarrollos dentro de tabuladores de Facebook.&lt;br/&gt;
&lt;br/&gt;
Ahora se requiere que todas nuestras paginas web en donde las utilicemos el SDK de Javascript de Facebook deban ser previamente &quot;registradas&quot; en &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Facebook Developers&lt;/b&gt;&lt;/span&gt;... y bueno, estas maneras no son propios de desarrollos abiertos sino &#39;propietarios&#39; (tipo Microsoft para ser mas exactos), y aunque las principales criticas a Facebook van referidas a sus políticas de Privacidad y manejo de su ahora apetecible y gigantesca base de datos de &quot;gustos&quot; de sus usuarios, a nivel técnico, Facebook se muestra bastante errático y cambiante respecto a sus estándares de desarrollo, los que como ahora, puede continuar cambiando cuando así lo estimen.. aunque en estos ultimos 02 años realmente han habido ya muchos cambios.. así que debemos empezar a ponernos al día....&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
En resumen, como se indica, parece que Facebook solo piensa en Facebook, pero como consecuencia de su innegable éxito, y por los parámetros propios del negocio publicitario, es muy difícil que se convierta en un servicio por el que los usuarios tengamos que pagar..(así lo anuncian.!); aparte que su entorno para instituciones y empresas (las llamadas &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;fan pages&quot;&lt;/b&gt;&lt;/span&gt;), es ahora realmente bastante sólido y eficiente, y deben ser considerados muy seriamente para su empleo en toda campaña publicitaria y de difusión a nivel local y/o global (por supuesto, siempre tomando nuestras respectivas precauciones respecto a temas de seguridad empresarial, institucional o personal principalmente en lo que respecta al manejo de información sensible o confidencial).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Considérese entonces que los comentarios presentados no deben significar que mantengamos una&amp;nbsp;posición&amp;nbsp;anti-Facebook, y reiteramos que e trata de una opción social muy eficiente y un innegable medio de mercadeo y difusión en plena vigencia y expansión... así que no dudemos en utilizar ese potencial para comunicar nuestros propios conceptos personales, empresariales o institucionales.. y así pensamos que debe hacerse... y por ello ahora también tenemos nuestra propia &lt;a href=&quot;javascript:rut_facebook();&quot; target=&quot;_blank&quot;&gt;pagina Facebook&lt;/a&gt;, bajo el formato &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;fan page&quot;&lt;/b&gt;&lt;/span&gt;, que como hemos indicado, Facebook ha mejorado notablemente (y que creo, es uno de las grandes &quot;olvidos&quot; del recién lanzado Google+), y que ahora nos permite una captación ilimitada de seguidores, y hace que la interacción entre las entidades y sus seguidores sea mas fácil para opinar, sugerir, hacer difusión y seguimiento de enlaces, publicación y etiquetado de fotos con comentarios personales o institucionales, etc.), y que por supuesto, también incluye modificaciones en su entorno de programación para desarrolladores, temas que tocaremos a continuación...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-size: large;&quot;&gt;REFERENCIAS TECNICAS&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Para averiguar como agregar botones, enlaces y otros servicios sociales Facebook a nuestras paginas Web, existen múltiples foros y blogs dedicados al tema, pero manteniendo nuestro estilo de contribuir al estudio y la investigación, le pasamos los links &quot;oficiales&quot; de Facebook al respecto, y que en este caso toman particular relevancia, por cuanto, como indicamos en el principio de este post, FaceBook ha modificado bastante los parametros para desarrolladores desde mediados del año 2010 (..este 2011 ha continuado y en el futuro se espera mas modificaciones). Así que nos conviene revisar periódicamente los siguientes enlaces:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://developers.facebook.com/&quot; target=&quot;_blank&quot;&gt;Facebook Developers&lt;/a&gt;, imprescindible revisar el segmento &quot;Add Facebook to my site&quot;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://es-es.facebook.com/pages/create.php&quot; target=&quot;blank&quot;&gt;Crear una Pagina&lt;/a&gt;, para crear paginas FaceBook (&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;fan page&quot;&lt;/b&gt;&lt;/span&gt;), para negocios, instituciones, de la comunidad, etc., &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.facebook.com/twitter/index.php&quot; target=&quot;_blank&quot;&gt;de FaceBook a Twitter&lt;/a&gt;, para vincular nuestras paginas Facebook a Twitter, haciendo que lo publicado por los administradores de nuestra pagina en el Muro se repliquen en Twitter...&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.facebook.com/facebook-widgets/index.php&quot; target=&quot;_blank&quot;&gt;Insignias de Facebooks&lt;/a&gt;, una colección completa de widgets de insignias, botones y otros servicios sociales de Facebook, que podemos pegar en nuestras paginas Web personales e institucionales, siendo esta una manera directa y fácil para empezar a utilizarlos.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.facebook.com/apps&quot; target=&quot;_blank&quot;&gt;Pagina de Desarrollador Facebook&lt;/a&gt;, la cual en el nuevo concepto de desarrollo de aplicaciones cobra bastante importancia por cuanto en ella podremos registrar nuestras paginas Web en donde querramos correr las insignias y servicios &quot;enriquecidos&quot; de Facebooks utilizando iframes y el SDK&amp;lt; de Javascript, entre otros entornos los que podemos empezar a revisar en el siguiente &lt;a href=&quot;https://developers.facebook.com/docs/&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt;, y probar su funcionamiento en su sección &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;Tools&quot;&lt;/b&gt;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developers.facebook.com/tools/console/&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;Javascript Test Console&lt;/span&gt;&lt;/a&gt;, que en su link &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;examples&quot;&lt;/b&gt;&lt;/span&gt; podemos seleccionar diversos ejercicios y ejemplos sencillos de aplicaciones del SDK Javascript de Facebook que podemos poner en nuestras websites o aplicaciones iFrames de nuestras &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;fan pages&lt;/b&gt;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Ya no existe Directorio de Aplicaciones&lt;/b&gt;, para acceder a las aplicaciones existentes basta con utilizar la opción &lt;b&gt;Buscar&lt;/b&gt; digitando su nombre, o acceder a ellas a través de las invitaciones de nuestras amistades directamente desde las entradas de nuestro Muro.&lt;/li&gt;
&lt;/ul&gt;
Todas estos links, y otros que conviene revisar, están disponibles desde nuestra propia cuenta personal Facebook, allí observe y revise las opciones del pie de página. opción &lt;a href=&quot;http://developers.facebook.com/?ref=pf&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Desarrolladores&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-size: large;&quot;&gt;&lt;b&gt;Prepárate para tu página &quot;optimizada&quot; Facebook.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
A partir del 23 de agosto del 2010, y continuando los cambios durante el presente año, Facebook simplificará sus páginas &quot;para que sea más fácil navegar por ellas&quot;, confirmándose los siguientes cambios:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;El menú de usuarios en la parte superior de nuestras entradas es ahora de manejo exclusivo para aplicaciones de Facebook, ya no se puede poner aplicaciones propias o de terceros en las pestañas o &quot;tabs&quot; de la parte superior del Perfil de usuarios (ahora las &quot;pestañas&quot; de nuestras aplicaciones o terceros se ubican en la lista de aplicaciones de la pantalla de Inicio, en la barra izquierda, y en algunos casos, si tenemos varias aplicaciones instaladas, hay que expandir la vista para que aparezcan.. es decir..nuestras pestañas pueden estar ahora bastante escondidas ..y no muy accesibles para nuestros seguidores sino tenemos en cuenta la capacidad de espacio otorgado, es por ello que ahora el desarrollo de aplicaciones bajo Facebook utiliza mas el concepto de Aplicaciones por invitación sobre publicaciones en nuestro Muro como ocurre con los Juegos u otros...&lt;/li&gt;
&lt;li&gt;El espacio otorgado para la presentación de nuestros desarrollos se reducen ahora a 520 píxeles. Lo que debemos tener en cuenta al realizar nuestros desarrollos y realizar los ajustes necesarios en caso de anexar iframes, imagenes o cajas (las que debemos dimensionar al espacio disponible) ...&lt;/li&gt;
&lt;li&gt;Se ha efectuado mejoras para el formato personal y &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;fan pages&quot;&lt;/b&gt;&lt;/span&gt;. Ahora es bastante mas atractiva la interacción como el etiquetado de fotos pues estas se mostrarán en una barra en la parte superior de nuestra pagina personal o institucional; y para el caso de paginas personales, se ha mejorado bastante los datos de perfil profesional y de trabajo (los que también se muestran en la parte superior de nuestra pagina; y en el caso de las &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;fan pages&quot;&lt;/b&gt;&lt;/span&gt;, ahora podemos mostrarnos como indica nuestro nick, e incluso hacer comentarios como &quot;representantes&quot; de nuestra pagina (y con la imagen de perfil que registremos), como si se tratase de un usuario &quot;normal&quot;, aunque esto aun no se habilita completamente para los foros, donde las publicaciones de los &quot;administradores&quot; son etiquetados como de la &quot;pagina&quot;, y no se pueda hacer comentarios en foros de terceros como &quot;representantes&quot;.&lt;/li&gt;
&lt;li&gt;Pero uno de los cambios principales para los desarrolladores es que a partir de&lt;b&gt; Marzo 2011&lt;/b&gt; Facebook ha desactivado las pestañas y aplicaciones FBML estático (que es una de las formas principales en que se adicionaban &quot;pestañas&quot; a nuestras paginas), por lo que ahora para crear &quot;tabs&quot; y aplicaciones para nuestras &lt;span class=&quot;no translate&quot;&gt;&lt;b&gt;fans page&lt;/b&gt;&lt;/span&gt; de Facebook, debemos recurrir a los iFrames y al SDK de Javascript... (a la fecha sigue habiendo soporte a las aplicaciones FBML existentes pero con una funcionalidad reducida... pueda que algunos desarrollos FBML no funcionen correctamente..).&lt;/li&gt;
&lt;li&gt;Pueden revisar en nuestro foro mas información al respecto:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href=&quot;http://tinyurl.com/3vyqwvp&quot; target=&quot;_blank&quot;&gt;http://tinyurl.com/3vyqwvp&lt;/a&gt; (en español)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href=&quot;http://tinyurl.com/3nrafbs&quot; target=&quot;_blank&quot;&gt;http://tinyurl.com/3nrafbs&lt;/a&gt; (in English)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
Algo imortante que debemos tomar a consideración respecto a este último punto descrito es al trabajar con iframes &quot;propias&quot; o de &quot;terceros&quot; en nuestras paginas facebook significa que ahora para &quot;programar&quot; las presentaciones de dichas páginas debemos utilizar lo convencional en desarrollo Web, vale decir, basicamente HTML, CSS y Javascript; pero dependiendo de la fuente de nuestra iframes, de ser propia por ejemplo, podremos utilizar herramientas propias de nuestro entorno de desarrollo como el empleo de back-end tipo PHP+MySQL u otros JSP, Java y MySQL, etc, con lo que nuestras &quot;paginas&quot; podrian convertirse en aplicaciones full dinámicas... vale decir, al fin Facebook se apertura a todas las opciones de desarrollo Web, aunque debemos de tomar muy en cuenta las &quot;politicas de desarrollo&quot; que nos plantea:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Actually, there is one exception: Facebook policy is that you ARE NOT ALLOWED have autoplaying media in a tab. So no autoplaying videos, songs, etc. in the tab.&lt;/b&gt; &lt;/li&gt;
&lt;/ul&gt;
Asi podremos observar que algunas funciones &quot;autoplay&quot; son incluso bloqueadas, por lo que debemos probar con detalle todos los desarrollos que realicemos para paginas Facebook.&lt;br /&gt;
&lt;br /&gt;
En resumen... Facebook ha mejorado bastante su presentación y perfil de &quot;usuario&quot; personal y de negocios con herramientas que son muy utiles para la gestión y mercadeo de nuestros proyectos personales, empresariales o institucionales .. todo es muy interesante.. pero el diseño general de la pagina es como siempre inamovible.. al estilo de Facebook..&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-size: large;&quot;&gt;&lt;b&gt;Agregando Facebooks a nuestras paginas Web&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;a href=&quot;javascript:rut_invitar();&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5448928392447543314&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmzGCNYbItGZ8LhKdCoraFBPxJKEKakaa2TySuy4M0pnQdcEK_5DUFJsT9gDocqrKQtQ7Tf-Xc_lCDmkPdGmMeWuDIabljja5oo2pFNfYGqdFWBJP8VJwrwCTwYZs54t2dHJBJhVonjEgY/s640/facebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 450px; margin: 0px auto 10px; text-align: center; width: 640px;&quot; /&gt;..&lt;/a&gt;&lt;/div&gt;
Este es una forma de agregar plug-ins de Facebook a nuestras paginas, y las hemos utilizado para mantener una mejor interaccion con nuestros usuarios, y para que también nos puedan ayudar a &lt;a href=&quot;javascript:rut_invitar();&quot; target=&quot;_blank&quot;&gt;difundir nuestra comunidad&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Como lo hicimos?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
La imagen nos muestra como hemos efectuamos un enlace para que nuestros seguidores puedan efectuar comentarios en sus propios Muros personales, así como tambien muestra una caja con las entradas de nuestra &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Fan page, &lt;/b&gt;la que aparece en nuestro Blog. D&lt;/span&gt;etallamos a continuación el&amp;nbsp;código&amp;nbsp;utilizado para que sirva de referencia:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt; &amp;lt;script&amp;gt;&lt;br /&gt;
function fbs_click() {&lt;br /&gt;
u=location.href;&lt;br /&gt;
t=document.title;&lt;br /&gt;
window.open(&#39;http://www.facebook.com/sharer.php?u=&#39;+encodeURIComponent(u)+&#39;&amp;amp;t=&#39;+encodeURIComponent(t),&#39; sharer&#39;, &#39;toolbar=0, status=0, width=626, height=436&#39;);&lt;br /&gt;
return false;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a href=&quot;http://www.facebook.com/share.php?u=http%3A%2F%2Fmlaynessanchez.blogspot.com&quot; onclick=&quot;return fbs_click()&quot; target=&quot;_blank&quot; title=&quot;Coment about us on Facebook..!&quot;&amp;gt; &lt;br /&gt;
&amp;lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFi4uZqjZ9Sju6d8aaSYMNAgy3PoYobPKKvPAh0ouk1I5qWskr83o6oCtHSPdykZj6LI0n0axlIm0DoAc8xsSst15sgfHiqicblLQ1SINFURH5s5PdDsgibOn4Bdy4OB03rhpLfLPasWzG/s1600/FbSobreNosotros.JPG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 150px; margin: 0px 10px 5px 0px; text-align: left; width: 120px;&quot; /&amp;gt;&amp;lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&amp;gt;Comments about us..!&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Your support is very important to disseminate our project and bring together our users, fans GTUG, web developers and freelancers who are already using, or would like to use, the technology than Google puts at our disposal ...&lt;br /&gt;
&amp;lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&amp;gt;&amp;lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&amp;gt;(click on the link or in the left image)&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
..&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;iframe allowtransparency=&quot;true&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.facebook.com/plugins/likebox.php?id=120321264650448&amp;amp;amp;width=430&amp;amp;amp;height=650&amp;amp;amp;connections=10&amp;amp;amp;stream=true&amp;amp;amp;header=true&quot; style=&quot;border: none; height: 650px; overflow: hidden; width: 430px;&quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
Asimismo, al final de esta entrada podran observar un Plug-in para comentarios que ha sido desarrollado utilizando la&amp;nbsp;técnica&amp;nbsp;SDK de Javascript que ahora proporciona Facebook...&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Este plug-in de Comentarios de Facebook permite al usuario hacer incluso &quot;comentarios de los comentarios&quot; en cualquier página web. Los comentarios pueden ser referidos a una página, artículo, foto o cualquier contenido que indiquemos; y los comentarios que se hagan en páginas externas ahora también pueden aparecer en tu perfil de Facebook (si así lo desea el &quot;comentarista&quot;, pues tiene la opción de activar o desactivar el posteo a su Muro)&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Como lo hicimos?&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
Detallamos también a continuación nuestro codigo para que les sirva de referencia:&lt;/div&gt;
&lt;br /&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt; &amp;lt;script&amp;gt;&lt;br /&gt;
window.fbAsyncInit = function() {&lt;br /&gt;
FB.init({appId: ‘138465519521758”, status: true, cookie: true,&lt;br /&gt;
xfbml: true});&lt;br /&gt;
};&lt;br /&gt;
(function() {&lt;br /&gt;
var e = document.createElement(‘script’); e.async = true;&lt;br /&gt;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;&lt;br /&gt;
document.getElementById(‘fb-root’).appendChild(e);&lt;br /&gt;
}());&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&quot;fb-root&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script src=&quot;http://connect.facebook.net/en_US/all.js#xfbml=1&quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;fb:comments href=&quot;http://mlaynessanchez.blogspot.com/2010/05/hablemos-sobre-facebook.html&quot; num_posts=&quot;5&quot; width=&quot;450&quot;&amp;gt;&amp;lt;/fb:comments&amp;gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
La primera parte, correspondiente a la definición FB.init, inicializa el SDK de Javascript vinculado a nuestra pagina Web, debiendo utilizar como &lt;b&gt;appId&lt;/b&gt; el numero obtenido al registrar la URL y la pagina específica donde se va a mostrar nuestra caja de comentarios; operación que debemos realizar la &lt;a href=&quot;https://developers.facebook.com/apps&quot; target=&quot;_blank&quot;&gt;Pagina del Desarrollador Facebook&lt;/a&gt; indicada.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Pueden tener mayor explicación del proceso revisando el siguiente link:&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.faceblog.es/desarrollo-aplicaciones-para-facebook/fbjs/fbjs-como-instanciar-el-sdk/&quot; target=&quot;_blank&quot;&gt;http://www.faceblog.es/desarrollo-aplicaciones-para-facebook/fbjs/fbjs-como-instanciar-el-sdk/&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
La segunda parte corresponde al codigo XFBML que crea el plug-in de comentarios, el cual podemos generar de:  &lt;a href=&quot;http://developers.facebook.com/docs/reference/plugins/comments/&quot; target=&quot;_blank&quot;&gt;http://developers.facebook.com/docs/reference/plugins/comments/&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Realmente el código es bastante corto, y hay mas cosas que pueden ser consideradas, como &quot;localizar&quot; los mensajes a nuestro idioma ( por defecto la indicación &lt;b&gt;en_US&lt;/b&gt; muestra el formato &amp;nbsp;&quot;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Like&quot;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;en vez de &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;Me gusta&quot;&lt;/b&gt;&lt;/span&gt;, para lo que tenemos que utilizar &lt;b&gt;es_LA&lt;/b&gt;), pero una opción que voy a empezar a revisar con detenimiento es respecto a las traducciones que por ejemplo se encuentra disponible en el widgets de comentarios del servicio Open Social de Google, con esto esta herramienta sería aún mas interesante... lo indicado son solo algunas de las opciones que ahora son posibles de considerar utilizando los enriquecidos &quot;plug-ins&quot; de Facebook.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Para los que por urgencia requieran continuar trabajando con FBML, conviene revisen el siguiente link:&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.cuentamelared.com/alternativas-static-fbml/&quot; target=&quot;_blank&quot;&gt;http://www.cuentamelared.com/alternativas-static-fbml/&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
..y para empezar a revisar em manejo de iFrames conviene revisar este enlace:&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.cuentamelared.com/como-crear-pestana-con-iframe/&quot; target=&quot;_blank&quot;&gt;http://www.cuentamelared.com/como-crear-pestana-con-iframe/&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Hablar de Facebook es hablar de difusión y mercadeo, por eso los invito a continuar con mayor detenimiento las nuevas herramientas y funcionalidades proporcionadas por Facebook, y también  revisar nuestra entrada referente a conceptos de &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/05/web-20-los-negocios-y-las-redes.html&quot; target=&quot;_blank&quot;&gt;Web2.0: los negocios y las redes sociales&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Saludos.&lt;br /&gt;
@Mlaynes&lt;/div&gt;
&lt;br /&gt;
&lt;script&gt;
  var wlang;
  var wlanguage;
  var wValor;
  wlang=navigator.language;
  //document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  //wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  wValor = &#39;en_US&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
    switch( wlanguage ) {
      case &#39;en&#39;:
        wValor = &#39;en_US&#39;;
        break;
      case &#39;pt&#39;:
        wValor = &#39;pt_BR&#39;;
        break;
      case &#39;it&#39;:
        wValor = &#39;it_IT&#39;;
        break;
      case &#39;fr&#39;:
        wValor = &#39;fr_FR&#39;;
        break;
      case &#39;de&#39;:
        wValor = &#39;de_DE&#39;;
        break;
      case &#39;nl&#39;:
        wValor = &#39;nl_NL&#39;;
        break;
      case &#39;sv&#39;:
        wValor = &#39;sv_SE&#39;;
        break;
      case &#39;ja&#39;:
        wValor = &#39;ja_JP&#39;;
        break;
      case &#39;ru&#39;:
        wValor = &#39;ru_RU&#39;;
        break;
      case &#39;ko&#39;:
        wValor = &#39;ko_KR&#39;;
        break;
      case &#39;th&#39;:
        wValor = &#39;th_TH&#39;;
        break;
      case &#39;es&#39;:
        wValor = &#39;es_LA&#39;;
        break;
      default:
        wValor = &#39;en_US&#39;;
    }
  } else {
    wlanguage = ltarget;  
    wValor = &#39;en_US&#39;;
  };
  document.write(&#39;wlang : &#39;+wlang+&#39; - Browser : &#39;+ wlanguage + &#39; - &#39;);
  document.write(&#39;Locale : &#39; + wValor );

  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };

  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };

  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script&gt;
window.fbAsyncInit = function() {
  FB.init({appId: ‘138465519521758”, status: true, cookie: true,
  xfbml: true});
};
(function() {
  var e = document.createElement(‘script’); e.async = true;
  e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
  document.getElementById(‘fb-root-01’).appendChild(e);
}());
&lt;/script&gt;
&lt;div id=&quot;fb-root-01&quot;&gt;&lt;/div&gt;
&lt;br /&gt;

&lt;a href=&quot;javascript:rut_facebook_100();&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 0px 0px 0px; text-align: left; width: 40px;&quot; /&gt;Hablemos sobre Facebook..&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;
&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2010/05/hablemos-sobre-facebook.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/2392162792707327327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/2392162792707327327'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/05/hablemos-sobre-facebook.html' title='Let&#39;s talk about Facebook...'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8oyMErO547ILj_Uts0hBPSPKuvtqxsqLIIcdV2mFM3E42TCdsAoiasjbyeMGtZpo-YQhQWAne1rCPU069yu5WprASPmNInsmTaOkHOMKCcdla0WzppsKickWuIJbqgcbkiCjopjw5Vg1D/s72-c/No-usar-Facebook.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-2488387715531149096</id><published>2010-04-22T08:32:00.000-05:00</published><updated>2012-01-12T11:51:30.001-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="art"/><title type='text'>Adonde queremos llegar...</title><content type='html'>&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;https://sites.google.com/site/gdevelopercodelabs/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s200/google_logo.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 35px; margin: 37px 15px 20px 0px; width: 100px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Hi my friend.. Thanks so much for your interesting in our  &lt;span class=&quot;notranslate&quot;&gt;Integracion Google&lt;/span&gt; project.. para las personas como tú que han revisado nuestro Blog y les interese los temas propuestos, debe saber tambien cuales son nuestras inquietudes y expectativas respecto a nuestro proyecto.&lt;br /&gt;
&lt;br /&gt;
Queremos llegar a ser un &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Developer Codelab Group, &lt;/b&gt;&lt;/span&gt; por cuanto, aunque pertenezco a GTUG-Peru (Grupo de Usuarios de la Tecnología Google), y &amp;nbsp;allí nos dedicamos a la investigación y aprendizaje de las herramientas y API de Google, muchas veces no contamos con una biblioteca de casos prácticos que &quot;funcionen&quot;, que sean lo suficientemente explicados y que no sean excesivamente extensos, para que nos sirvan como modelos o tips de desarrollos propios.. aparte que el mundo Google y del desarrollo Web es realmente bastante grande, y las agendas de los GTUG pues  a veces tienen agendas específicas, que por cierto son importantes, pero que tal vez no coincida con nuestras urgencias e intereses, ..o incluso algunas veces se pierde algo del entusiasmo del grupo y no se avanza como se quisiera, o se nos presentan tantas cosas que avanzamos varias cosas pero no profundizamos mucho.. en fin.. hasta el propio &lt;a href=&quot;https://sites.google.com/site/gdevelopercodelabs/&quot; target=&quot;_blank&quot;&gt;Google Developer Cpdelabs&lt;/a&gt; es aun a nuestro criterio, bastante corto para todo lo que comprende el mundo Google y el Desarrollo Web en general.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVUdOfhPx64BxSdaZimPTj8oExGfJAHL2hDSwrA8Cef1Bl3VFUSUZl0MvNg-v7sJCtGGiVg2eL81E2FNkiR3od6CUNnqkhry7J0Eut62DNEZP4JvUDTgXvoZKaCgSBidEqQXDinx-Fom3c/s1600/23+NuestraMeta.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;257&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVUdOfhPx64BxSdaZimPTj8oExGfJAHL2hDSwrA8Cef1Bl3VFUSUZl0MvNg-v7sJCtGGiVg2eL81E2FNkiR3od6CUNnqkhry7J0Eut62DNEZP4JvUDTgXvoZKaCgSBidEqQXDinx-Fom3c/s400/23+NuestraMeta.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPMR2TaVX2L9Zpjo9vamvvyjwe_Ft5glTWOuznaISw26kEq7TgKRlRbidcKBvH4-ygtLaqBrX5B6NTSjpl0BL9i7Zt5BkKvAWJmSu4E5vlECLK-pOhsM9JsFpmNqjKK0etpscsX1KkcPgr/s1600/24+NuestraMeta.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPMR2TaVX2L9Zpjo9vamvvyjwe_Ft5glTWOuznaISw26kEq7TgKRlRbidcKBvH4-ygtLaqBrX5B6NTSjpl0BL9i7Zt5BkKvAWJmSu4E5vlECLK-pOhsM9JsFpmNqjKK0etpscsX1KkcPgr/s400/24+NuestraMeta.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
..si hacen click en la imagen de Google de inicio de esta entrada, ó en la pestaña Codelab del menu de nuestro blog,&amp;nbsp;también&amp;nbsp;serán dirigidos a la pagina&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Google Developer Codelab&lt;/b&gt;&lt;/span&gt;, que como verán, tiene unos ejemplos prácticos de introducción (y esos casos son los que a veces se llevan en los GTUG), pero considero que tomando en cuenta el enorme aporte de Google al desarrollo Web, esto aún esta iniciándose... (hay otros Tutoriales diseminados en las diversas paginas de&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;Google Code&lt;/span&gt;&amp;nbsp;que son muy importantes: como es el caso de&amp;nbsp;&lt;a href=&quot;http://code.google.com/intl/es/appengine/docs/python/gettingstarted/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;Google AppEngine&lt;/b&gt;&lt;/a&gt;&amp;nbsp;y&amp;nbsp;&lt;a atrget=&quot;_target&quot; href=&quot;http://code.google.com/intl/es/webtoolkit/doc/1.6/tutorial/index.html&quot;&gt;&lt;b&gt;Google GWT&lt;/b&gt;&lt;/a&gt;, entre otros)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge_VPZgsQtpeJyaKWvjJwtJ9MjTIVSreSUkv5s0y0nUUWcJY8chIBft2mR4ne33IFOSimlbT_KolOpGOn1lScblhlhRREITILsqW-gMEhnJYfIqtJGdM62cIJUjYpTdiZiItpCGMfKwn3F/s1600/22+GoogleCodelab.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEge_VPZgsQtpeJyaKWvjJwtJ9MjTIVSreSUkv5s0y0nUUWcJY8chIBft2mR4ne33IFOSimlbT_KolOpGOn1lScblhlhRREITILsqW-gMEhnJYfIqtJGdM62cIJUjYpTdiZiItpCGMfKwn3F/s640/22+GoogleCodelab.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Así nació este Blog y el proyecto&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Integración&amp;nbsp;Google&lt;/b&gt;&lt;/span&gt;, para que aparte del grupo que pertenezcamos, o de nuestro interés personal ó profesional, pues tal vez lleguemos a formar una biblioteca de casos prácticos y códigos &quot;completos&quot; (ó que requieran realizar configuraciones menores), y que podamos instalar y probar en nuestros servidores locales de prueba, y que se nos explique los fundamental de su construcción y funcionamiento..y sobre todo, que funcionen !.. y así considero que se logrará agilizar nuestra curva de aprendizaje y &amp;nbsp;realmente aprenderemos... y hasta incluso usar los códigos como modelos, &amp;nbsp;los podremos utilizar en nuestros propios desarrollos Web..&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;IMPORTANTE:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #2a8c00;&quot;&gt;La idea es que revisen de vez en cuando los temas planteados pues ingresaremos comentarios o información en cada tema cuando sea necesario, mejoras del código, en fin... formar nuestra biblioteca de códigos.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Mucho me gustaría que se difunda el interés por participar en este tipo de proyectos.. por lo que si tienen algún código que deseen compartirlo será bienvenido, indiquemos un link de donde bajarlo (a través de Google Docs, de sus blogs o paginas personales por ejemplo), o envíelos a nuestros mails (imagen &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Contact Us&lt;/b&gt;&lt;/span&gt; de nuestro blog), ..y nosotros nos comprometemos a revisarlos, probarlos, mejorarlos si es posible, ..y por supuesto... publicarlos en este Blog, ahora si la comunicación y afinidad con nosotros se hace mas fluída, no duden que podrán participar en la administración y publicación de temas y entradas.. y tambien por supuesto que el dominio de este Blog será cambiado a otro más alusivo a este anhelo: &lt;span class=&quot;notranslate&quot;&gt;Integracón Google Codelab Group.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Mucho nos gustaría hacer crecer rapidamente este proyecto pero las cosas siempre tienen su tiempo y su costo para organizarse, y formar una organización &quot;sin fines de lucro&quot; no debe significar que se trabaje a pérdida.. ..y bueno, como era de esperar, ya formamos parte del mundo de la publicidad que propicia Google a través de Adsense e Infolinks para ver si logramos financiarnos algo, vamos a ver como va así (y esperamos que tomen en especial consideración los anuncios y links que les presentamos en nuestro blog, para contribuir de alguna manera en su mantenimiento...)&lt;br /&gt;
&lt;br /&gt;
un &quot;Developer Codelab Group&quot; requiere un espacio, una infraestructura, uso de tiempo y servicios para la preparación de los eventos, contactar y ayudar en la preparacion de los expositores, etc., ya se nos ocurrirá algo pero comparto la idea de hacer un Developer Codelab presencial (para los que sean de la localidad) y otro on line con su respectiva biblioteca de Codigos (para los interesados), ..y &amp;nbsp;esos&amp;nbsp;códigos&amp;nbsp;tambien &amp;nbsp;deben ser publicados en el Blog... ya veremos.. descontando nuestro interés y entusiasmo ... no depende solo de nosotros ...también depende de todos ustedes...&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;LA COMUNIDAD &lt;span class=&quot;notranslate&quot;&gt;INTEGRACION GOOGLE&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUTwV8UGjFFXfS3kCEHCGXuzNjjl7Novf6zABVCCdydtUf0AH2P0kkV5cI3R-sBfxyORRzKdCn05Epi-QjmgGyXNhoAcwwnvvPC-pLrRfPyHBZBDVZ9C7nEQbXLeDaG56FynFcJfwPFrut/s1600/14+Comunidad+Web.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUTwV8UGjFFXfS3kCEHCGXuzNjjl7Novf6zABVCCdydtUf0AH2P0kkV5cI3R-sBfxyORRzKdCn05Epi-QjmgGyXNhoAcwwnvvPC-pLrRfPyHBZBDVZ9C7nEQbXLeDaG56FynFcJfwPFrut/s400/14+Comunidad+Web.JPG&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
A partir de diciembre del 2011 para poder acceder a nuestros códigos de laboratorio  de nuestros diferentes temas (codelabs) &lt;u&gt;va a ser requisito haberse previamente registrado&lt;/u&gt; como miembro de la &lt;a href=&quot;http://mlaynessanchez.blogspot.com/p/members-community.html&quot;&gt;Comunidad &lt;span class=&quot;notranslate&quot;&gt;Integración&amp;nbsp;Google&lt;/span&gt;&lt;/a&gt; para así poder mantener un mejor contacto entre todos nosotros, y vale la oportunidad de indicarles que se va mantener una mejor estadística y control de nuestros usuarios... realmente hemos tenido varios pedidos demasiado específicos (que amerita una sección &quot;pedidos&quot;); y asimismo varios de nuestros codelabs requieren ser migrados a nuevas técnicasó versiones de los lenguajes que utilizamos (como es el caso de ExtJs4 en particular), y como todo requiere tiempo y esfuerzo, pues una solución posible es poner cuotas de donaciones a los codelabs que lo ameriten.. por supuesto, van a haber exoneraciones para los colaboradores de la comunidad.. pero parece que por alli va ser el camino a seguir...&lt;br /&gt;
&lt;br /&gt;
Mientras tanto, los temas que propongamos van a continuar con seguir nuestro camino inicialmente propuesto:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Ingresar al mundo Google y Web por el tema de manejo de sus API y visualizaciones (mostrar datos en la mayor cantidad de opciones web que sean posible).&lt;/li&gt;
&lt;li&gt;Interactuar con bases de datos (que comprende las clásicas opciones de mantenimiento de ingreso, modificación, consulta (visualizaciones), e impresión en la mayor cantidad de opciones web posibles)&lt;/li&gt;
&lt;li&gt;Ingresar al mundo de los dispositivos móviles y su integración al mundo Web y Google en particular...&lt;/li&gt;
&lt;li&gt;Desarrollo en el MundoWeb en general.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;Nota Agregada: &lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #2a8c00;&quot;&gt;Considerando el interes del uso de las redes sociales en el mundo de los negocios, también tocaremos respecto a ese punto, como programar para esos entornos, ...y como integrarlos a nuestros proyectos, aparte que Google nos proporciona varias herramientas Opensocial que incluso ya estamos empleando en el desarrollo de nuestro Blog..&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
...Bienvenidos a la Comunidad&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;Integracion Google..!&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Saludos&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
@Mlaynes&lt;/div&gt;
&lt;/div&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translator you can adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script&gt;
window.fbAsyncInit = function() {
  FB.init({appId: ‘138465519521758”, status: true, cookie: true,
  xfbml: true});
};
(function() {
  var e = document.createElement(‘script’); e.async = true;
  e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
  document.getElementById(‘fb-root-01’).appendChild(e);
}());
&lt;/script&gt;&lt;br /&gt;
&lt;div id=&quot;fb-root-01&quot;&gt;
&lt;/div&gt;
&lt;script src=&quot;http://connect.facebook.net/en_US/all.js#xfbml=1&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;fb:comments href=&quot;http://mlaynessanchez.blogspot.com/2010/04/adonde-queremos-llegar.html&quot; num_posts=&quot;15&quot; width=&quot;475&quot;&gt;&lt;/fb:comments&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/2488387715531149096/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/04/adonde-queremos-llegar.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/2488387715531149096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/2488387715531149096'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/04/adonde-queremos-llegar.html' title='Adonde queremos llegar...'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s72-c/google_logo.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-6672930636064056603</id><published>2010-04-19T22:26:00.001-05:00</published><updated>2013-04-02T09:46:06.232-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Web2.0"/><title type='text'>Localización e Internacionalización de nuestro Blog y Paginas Web</title><content type='html'>&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://www.google.com/webelements/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s200/google_logo.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 35px; margin: 22px 15px 0px 0px; width: 100px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Preparándonos para poder atender consultas de amigos extranjeros, especialmente de algunos de habla inglesa que conocemos, y con quienes compartimos la idea de preparar estas practicas tipo &lt;span class=&quot;notranslate&quot;&gt;&quot;Developer Codelabs&quot;,&lt;/span&gt; hemos recurrido nuevamente a la Tecnología Google para tratar de internacionalizar nuestro Blog...
&lt;br /&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;h1&gt;&lt;span class=&quot;notranslate&quot;&gt;Google Traductor&lt;/span&gt;&lt;/h1&gt;
&lt;/P&gt;
&lt;P&gt;
Google Traductor es una herramienta interesante para evitarnos una traducción pagina por pagina de nuestros desarrollos, aún no lo hemos probado integrado a ExtJs, pero consideramos que no debe haber ningún inconveniente, por cuanto, si han revisado el &lt;span class=&quot;notranslate&quot;&gt;Code Playground&lt;/span&gt; de Google, ya deben haber identificado, y tal vez probado, algunas opciones de Traducción utilizando el &lt;a href=&quot;http://code.google.com/apis/ajax/playground/#translate&quot; target=&quot;_blank&quot;&gt;API language&lt;/a&gt; que nos ofrece Google.
&lt;/P&gt;
&lt;P&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;NOTA IMPORTANTE:&lt;/span&gt;&lt;/b&gt; desde el 01 de Diciembre del 2011, Google ha cerrado definitivamente el uso de la&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt; API language v.1&lt;/b&gt; (&lt;/span&gt;incluso ya no se encuentra disponible en el Google Playground como tal vez han podido comprobar). Ahora Google propicia el uso de la &lt;a href=&quot;https://developers.google.com/translate/v2/getting_started&quot; target=&quot;_links&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;API language v.2&lt;/b&gt;&lt;/span&gt;&lt;/a&gt; que es un servicio de paga (y ahora no hay cuotas libres, algo extraño con Google pero esa es la situacion actual).. asimismo, propicia el uso del gadget de Google Traductor, desarrollado en Javascript asi que se puede implementar en cualquier pagina web y que Google indica que siempre será una versión de uso libre, y cuyas opciones pueden revisar en el siguiente &lt;a href=&quot;https://translate.google.com/manager/website/&quot; target=&quot;_links&quot;&gt;link&lt;/a&gt;&lt;/blockquote&gt;
&lt;/P&gt;
&lt;p&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
A la brevedad adecuaremos nuestro codigo a opciones de traducción como hemos realizado, de &quot;emergencia&quot; en nuestro blog... antes daremos revisión a algunos proyectos opensources respecto al tema para una mejor presentación.&lt;/blockquote&gt;
&lt;/P&gt;
&lt;P&gt;
En esta oportunidad utilizamos el&lt;span class=&quot;notranslate&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;a href=&quot;https://translate.google.com/manager/website/settings&quot; target=&quot;_links&quot;&gt;      &amp;nbsp;Website Translator Gadget&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;,&amp;nbsp;mediante el cual insertado un código Javascript, Google nos permite que nuestros usuarios y lectores seleccionen el idioma que les sea más familiar para leer nuestras paginas web.. más aún, dependiendo del idioma predeterminado de nuestro navegador y del idioma en que esté hecha las páginas web, Google podría hacer una traducción automática (solo se cambia un parámetro &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;style&quot;&lt;/b&gt;&lt;/span&gt;; pero como no me convenció su desempeño, he preferido mantener la web en su fuente original (el español), y que Uds. amigos, seleccionen el idioma que más les convenga... además creemos que es importante que se reconozca que nuestra lengua materna es el español.
&lt;/P&gt;
&lt;P&gt;
Nos conviene utilizar esta herramienta por cuanto, &lt;b&gt;en primer lugar&lt;/b&gt;, mejoraremos nuestra redacción, por cuanto mientras mejor escribamos mejor será la traducción; &lt;b&gt;en segundo lugar&lt;/b&gt;, porque si no nos convence la traducción podremos remitir nuestras propias trducciones las que son utilizadas por Google para que vaya mejorando su herramienta de traducción automatica, &lt;b&gt;y en tercer lugar&lt;/b&gt;, porque en nuestro proceso de aprendizaje de diversos idiomas, Google nos ofrece la opción de&amp;nbsp;&lt;a href=&quot;http://translate.google.es/#auto|en|Nuestro%20blog%20esta%20escrito%20en%20espa%C3%B1ol%2C%20pero%20ahora%20puedes%20seleccionar%20el%20idioma%20que%20sea%20m%C3%A1s%20f%C3%A1cil%20de%20emplear%20para%20ti&quot; target=&quot;_links&quot;&gt;escuchar&amp;nbsp;su pronunciación&lt;/a&gt; (disponible para inglés, español, portugues, frances, coreano, chino, entre otras y Google va adicionando poco a poco más idiomas, y aunque los parrafos&amp;nbsp;aún&amp;nbsp;deben ser cortos, son lo suficiente para que esta herramienta nos sea sumamente útil... interesante no?
&lt;/P&gt;
&lt;P&gt;
&lt;b&gt;Como lo hicimos?&lt;/b&gt;
&lt;/P&gt;
&lt;P&gt;
Este Blog es Blogger (que es de Google también), y al seleccionar la opción acceder/personalizar/diseño añadimos un Gadget &lt;b&gt;HTML/Javascript&lt;/b&gt; (que nos permite digitar directamente nuestros propios códigos para lo que queramos). 
&lt;/P&gt;
&lt;P&gt;
Y alli ingresamos el siguiente código:
&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
&amp;lt;!-- Google Translate Element --&amp;gt;&lt;br /&gt;
&amp;lt;id=&quot;google_translate_element&quot; style=&quot;display:block&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;script&amp;gt;&lt;br /&gt;
function googleTranslateElementInit() {&lt;br /&gt;
new google.translate.TranslateElement({pageLanguage: &quot;es&quot;}, &quot;google_translate_element&quot;);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Source: Español (Spanish)&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;script src=&quot;http://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/P&gt;
&lt;P&gt;
El código es tan corto que realmente hay poco por explicar...&lt;br /&gt;
tal vez indicar que es indispensable indicar el idioma original de nuestra pagina &lt;span class=&quot;notranslate&quot;&gt;(&quot;pageLanguage&quot;)&lt;/span&gt;; y que si indicamos &lt;span class=&quot;notranslate&quot;&gt;style=&quot;display:none&quot;&lt;/span&gt;, el manual indica que la traducción sería automática respecto al idioma predeterminado de nuestro navegador.. pero he encontrado foros con dudas y mejoras del código porque esa opción no parece funcionar muy bien... bueno, pero tambien podemos hacer que aparezcan solo algunos idiomas.. por que conviene que revisen el &lt;a href=&quot;http://translate.google.com/translate_tools&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt; de la pagina que indicamos en la nota agregada referido al tema, aunque como siempre, hay para investigar y probar para mayor detalle...
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;h1&gt;Que es esto ? &lt;/h1&gt;
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;div id=&quot;longvideo&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;350&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.openstreetmap.org/export/embed.html?bbox=-77.00349,-12.13622,-76.99227,-12.12705&amp;amp;layer=mapnik&amp;amp;mlat=-12.131460578575&amp;amp;mlon=-76.994376179481&quot; style=&quot;border: 1px solid black;&quot; width=&quot;425&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;small&gt;&lt;a href=&quot;http://www.openstreetmap.org/?mlat=-12.131460578575&amp;amp;mlon=-76.994376179481&amp;amp;zoom=5&amp;amp;layers=M&quot; target=&quot;_blank&quot;&gt;Go to OpenstreetMaps&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longvideo&quot;&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;350&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;yes&quot; src=&quot;http://www.openstreetmap.org/?minlon=22.3418234&amp;amp;minlat=57.5129102&amp;amp;maxlon=22.5739625&amp;amp;maxlat=57.6287332&amp;amp;box=yes&amp;amp;mlat=57.5529102&amp;amp;mlon=22.5148625&quot; style=&quot;border: 1px solid black;&quot; width=&quot;425&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;small&gt;&lt;a href=&quot;http://www.openstreetmap.org/?mlat=-12.131460578575&amp;amp;mlon=-76.994376179481&amp;amp;zoom=5&amp;amp;layers=M&quot; target=&quot;_blank&quot;&gt;Go to OpenstreetMaps&lt;/a&gt;&lt;/small&gt;
&lt;br /&gt;
&lt;P&gt;
Es una aplicacion opensource para poder usar mapas y trabajar geolocalizacion sin interferencias ni restricciones de ningun tipo (incluidas las de &lt;span class=&quot;notranslate&quot;&gt;Google Adsense&lt;/span&gt;).&lt;br /&gt;
Para utilizar esta herramienta solo basta ir a la pagina web del proyecto, seleccionar el area a mostrar y elegir la opcion &quot;exportar&quot; (a HTML), el cual nos genera un codigo HTML de un iframe que podemos pegar en nuestra web, y lo que es bastante importante, hasta en nuestras &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;fan pages&quot;&lt;/b&gt;&lt;/span&gt; de Facebook (y por eso le hacemos referencia)
&lt;/P&gt;
&lt;P&gt;
Puedes revisar el siguiente link;
&lt;/P&gt;
&lt;P&gt;
&lt;a href=&quot;http://www.facebook.com/pages/Integration-ourselves-to-Google/120321264650448?sk=app_249347133607&quot; target=&quot;_blank&quot;&gt;http://www.facebook.com/pages/Integration-ourselves-to-Google/120321264650448?sk=app_249347133607&lt;/a&gt;
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;h1&gt;direccionando nuestros &lt;span class=&quot;notranslate&quot;&gt;&quot;links&quot;&lt;/span&gt;..&lt;/h1&gt;
&lt;/P&gt;
&lt;P&gt;
y para concluir el proceso, hemos abierto varias &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;fans page&lt;/b&gt;&lt;/span&gt; en facebook, como el caso de nuestra pagina en ingles, así que los seguidores con idioma de navegador diferente del español, sus accesos a facebook serán dirigidos a dicha página (incluido su foro); los seguidores en español son dirigidos a la pagina facebook en español por supuesto..
&lt;/P&gt;
&lt;P&gt;
&lt;b&gt;Como hicimos esto?&lt;/b&gt;
&lt;/P&gt;
&lt;P&gt;
Pues similar al caso anterior, agregamos otro gadget HTML/Javascript a nuestro Blog e insertamos el siguiente código:
&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
wlang=navigator.language;&lt;br /&gt;
//document.write(\&#39;Navegador: \&#39;+wlang);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Choosing facebook wall..&lt;br /&gt;
function rut_facebook() {&lt;br /&gt;
var wurl_facebook = \&#39;\&#39;;&lt;br /&gt;
var wlanguage = wlang;&lt;br /&gt;
wlanguage = wlang.substr(0,2);&lt;br /&gt;
if(wlanguage==\&#39;es\&#39;){&lt;br /&gt;
wurl_facebook = &quot;http://www.facebook.com/group.php? gid=118999028117456&amp;amp;amp;v=wall&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
wurl_facebook =   &quot;http://www.facebook.com/group.php?gid=106728576035212&amp;amp;v=wall&quot;;&lt;br /&gt;
};&lt;br /&gt;
/*&lt;br /&gt;
alert(\&#39;wlang: \&#39;+wlang+\&#39;\n\&#39;+\&#39;wlanguage: \&#39;+ wlanguage+\&#39;\n\&#39;+wurl_facebook);&lt;br /&gt;
*/&lt;br /&gt;
window.open(wurl_facebook,&quot;_blank&quot;);&lt;br /&gt;
return wurl_facebook;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// Choosing facebook forum&lt;br /&gt;
function rut_facebook_00() {&lt;br /&gt;
var wurl_facebook = \&#39;\&#39;;&lt;br /&gt;
var wlanguage = wlang;&lt;br /&gt;
wlanguage = wlang.substr(0,2);&lt;br /&gt;
if(wlanguage==\&#39;es\&#39;){&lt;br /&gt;
wurl_facebook = &quot;http://www.facebook.com/group.php?gid=118999028117456&amp;amp;v=app_2373072738&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
wurl_facebook =   &quot;http://www.facebook.com/group.php?gid=106728576035212&amp;amp;v=app_2373072738&quot;;&lt;br /&gt;
};&lt;br /&gt;
window.open(wurl_facebook,&quot;_blank&quot;);&lt;br /&gt;
return wurl_facebook;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//our image code..&lt;br /&gt;
&amp;lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;javascript:rut_facebook();&quot; target=&quot;_blank&quot;&amp;gt;&amp;lt;img style=&quot;display:block; margin:0px auto 0px; text-align:center;cursor:pointer; cursor:hand;width: 145px; height: 25px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl3MkFzl9Ju5nMeLnvyMamsaYLCmdfraIDX2mSaOCM19nYiXEfLkqCa7hv1gqp3h02PJpWVjQofdY69RxcBdfPQVTtyMq2Zlv17s2LkBx3BLFzLniEbnjDx2aJx7wmR_j4tv5VWIENHd1t/s200/inFacebook.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5461327404001030210&quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;/P&gt;
&lt;P&gt;
Las direcciones indicadas apuntan por supuesto a las paginas de facebook en español e ingles según el caso.. y asimismo modifico el parametro &lt;span class=&quot;notranslate&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&quot;href&quot;&lt;/span&gt;&lt;/span&gt; del codigo que carga la imagen de facebook insertada en el gadget, pasando como vinculo a la función javascript que nos dirigirá a las rutas que les hemos indicado...
&lt;/P&gt;
&lt;P&gt;
En realidad, en ese mismo gadget hemos cargado hasta 15 funciones, que son las que me dirigen a cada foro al hacer click en los logos de facebook que aparecen en algunos temas (solo basta modificar el vinculo &lt;span class=&quot;notranslate&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&quot;href&quot;&lt;/span&gt;&lt;/span&gt; de la imagen que carguemos para que llame a nuestra función), eso nos facilita el mantenimiento de la pagina sin recurrir al &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;head&lt;/b&gt;&lt;/span&gt; de nuestra pagina html.. y el asunto funciona bien... (lo que podremos aplicar al llegar desarrollo de Gadgets y Widgets), así que así lo dejamos por el momento, hasta ver posibilidades de nuevas mejoras..
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;h1&gt;..el Boton &lt;span class=&quot;notranslate&quot;&gt;&quot;Translatethis&quot;&lt;/span&gt;&lt;/h1&gt;
&lt;/P&gt;
&lt;ul&gt;
&lt;li&gt;Considerando una mejora utilizar una traducción empleando medios visuales, también hemos probado la herramienta &lt;a href=&quot;http://translateth.is/&quot;&gt;TranslateThis Button&lt;/a&gt;, desarrollada empleando Ajax y el API language de Google, es free, permite varias opciones de configuración (lea la documentación al respecto), y funciona bien para muchos casos; con el siguiente código:&lt;/li&gt;
&lt;/ul&gt;
&lt;P&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
&amp;lt;!-- Begin TranslateThis Button --&amp;gt;&lt;br /&gt;
&amp;lt;span class=&quot;notranslate&quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&quot;translate-this&quot;&amp;gt;&amp;lt;a href=&quot;http://translateth.is/&quot; class=&quot;translate-this-button&quot;&amp;gt;Translate&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&quot;text/javascript&quot; src=&quot;http://x.translateth.is/translate-this.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;
TranslateThis({&lt;br /&gt;
&amp;nbsp;&amp;nbsp;fromLang : &#39;es&#39;, // Native language of your site&lt;br /&gt;
&amp;nbsp;&amp;nbsp;busyText: &#39;Preparing the translation...&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;GA : true, // Google Analytics tracking&lt;br /&gt;
//cookie: &#39;tt-lang&#39;, // Name of the cookie, 0 = disable&lt;br /&gt;
&amp;nbsp;&amp;nbsp;ddLangs : [ // Languages in the dropdown&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;es&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;en&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;pt-PT&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;fr&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;it&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;ru&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;ar&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;zh-CN&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;ja&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&#39;ko&#39;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; ],&lt;br /&gt;
&amp;nbsp;&amp;nbsp;noBtn: false, //whether to disable the button styling&lt;br /&gt;
&amp;nbsp;&amp;nbsp;btnImg : &#39;http://x.translateth.is/tt-btn1.png&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;btnWidth : 148,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;btnHeight : 18,&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;h1&gt;..el idioma de nuestro navegador&lt;/h1&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;ul&gt;
&lt;li&gt;En nuestros enlaces a Facebook, ahora en 3 idiomas: español, inglés y portugues; hemos hecho variaciones para absolver unas incompatibilidades del Internet Explorer que no reconoce el idioma del navegador empleando la propiedad language del objeto navigator.(sino navigator.browserLanguage), y asimismo que no reconoce directamente a las funciones javascript en las referencias (para lo que hemos utilizado el&amp;nbsp;método&amp;nbsp;&quot;void&quot;), y el código indicado tiene las siguientes variaciones:&lt;/li&gt;
&lt;/ul&gt;
&lt;/P&gt;
&lt;P&gt;
--&amp;gt; Para indicar el idioma del navegador hemos utilizado los condiciones de IE y las propiedades navigator.language y navigator.browserLanguage indicadas:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
wlang=navigator.language;&lt;br /&gt;
//document.write(&#39;Navegador: &#39;+wlang);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
wlang=navigator.browserLanguage;&lt;br /&gt;
//document.write(&#39;Navegador: &#39;+wlang);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; ...y para las referencias de las imagenes que nos dirigen a cada pagina Facebook, utilizamos el metodo void, como se indica:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
&amp;lt;a href=&quot;javascript:void(rut_facebook());&quot;&amp;gt;myPicture&amp;lt;/a&amp;gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;h1&gt;..nuestra opcion &lt;span class=&quot;notranslate&quot;&gt;&quot;Contact us&quot;&lt;/span&gt;&lt;/h1&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;ul&gt;
&lt;li&gt;Para contartarse con nosotros vía correo GMail, utilizamos el siguiente codigo:&lt;/li&gt;&lt;/ul&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;
function emailForm(){&lt;br /&gt;
var daReferrer = document.referrer; &lt;br /&gt;
var email = &quot;&quot;; &lt;br /&gt;
var wlanguage = wlang;&lt;br /&gt;
var body_message = &quot;&quot;;&lt;br /&gt;
wlanguage = wlang.substr(0,2);&lt;br /&gt;
switch(wlanguage) {&lt;br /&gt;
case &#39;es&#39;:&lt;br /&gt;
email= &quot;gicodelab.es@gmail.com&quot;; &lt;br /&gt;
body_message = &quot;Gracias por contactarse con Integracion Google..%0DFavor considere las normas normales de moderacion, trato cordial y buena redacción&quot;;&lt;br /&gt;
break;&lt;br /&gt;
case &#39;pt&#39;:&lt;br /&gt;
email= &quot;igcodelab.pt@gmail.com&quot;;&lt;br /&gt;
bodu_message = &quot;Obrigado por contactar a Integração Google ..%0DPor favor, considere as regras normais de moderacao, simpatia e boa redacao&quot;;&lt;br /&gt;
break;&lt;br /&gt;
default:&lt;br /&gt;
email= &quot;igcodelab.en@gmail.com&quot;;&lt;br /&gt;
body_message = &quot;Thank you for contacting Google Integration ..%0DPlease consider the normal rules of moderation, friendliness and good drafting&quot;;&lt;br /&gt;
break;&lt;br /&gt;
};&lt;br /&gt;
var errorMsg = &quot;error message&quot;; &lt;br /&gt;
var subject = &quot;Exception Error&quot;; &lt;br /&gt;
var body_message = &quot;%0D%0D%0D%0D:%0D-----------------------------------------------------------------------%0D&quot;+body_message+&quot;%0D@IG-Codelab Group&quot;;&lt;br /&gt;
var mailto_link = &#39;mailto:&#39;+email+&#39;? subject=&#39;+subject+&#39;&amp;amp;body=&#39;+body_message;&lt;br /&gt;
win = window.open(mailto_link,&#39;emailWin&#39;); &lt;br /&gt;
//window.open(&#39;mailto:gicodelab.es@gmail.com&#39;)&lt;br /&gt;
/* Abre ventana flotante */&lt;br /&gt;
if (win &amp;amp;&amp;amp; win.open &amp;amp;&amp;amp;!win.closed) win.close(); &lt;br /&gt;
return mailto_link;&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Form directo OnClick&lt;br /&gt;
&amp;lt;div style=&quot;border:1px solid black;padding:2px;&quot;&amp;gt; &lt;br /&gt;
&amp;lt;a href=&quot;#&quot; onclick=&quot;emailForm();&quot;&amp;gt;Contact us&amp;lt;/a&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;javascript:void(emailForm());&quot;&amp;gt;&amp;lt;img style=&quot;float:left; display:block; margin:0px auto 0px; text-align:left;cursor:pointer; cursor:hand;width: 148px; height: 37px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitM3auTML0_Qbm9wNJcwkpjoe3FeDFUSNqhZobtX3hMVNM6YudLAgKG4DEDLFFosl-RP49RSuXAR-DP9PjxuZYy_Y4P7PELbMnEMLldUAa9CcPfg6Lmx7i6Nje4tVkdDz5WLzz5fWWcn1V/s1600/IgContactUs.JPG&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5469673187419347922&quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;b&gt;Nota:&lt;/b&gt; En el cuerpo del mail evite en lo posible el uso de caracteres acentuados: áéíóú u otros especiales como dierises, acentos inversos, simbolos u otros, por cuanto &quot;cuelgan&quot; la aplicacion (aún no he encontrado como evitar este efecto y poder utilizar cualquier codigo ascii, habiendo probado incluso utilizando directamente codigos hexadecimales).
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;h1&gt;..el &lt;span class=&quot;notranslate&quot;&gt;API language&lt;/span&gt; de Google&lt;/h1&gt;
&lt;/P&gt;
&lt;P&gt;
En lo que respecta a las traducciones de la &quot;alerta&quot; de uso del recuadro de Google Traductor (para seguidores de distintos idiomas), hemos utilizado la API de Google Language y la libreria JQuery (con lo podriamos dar diversos efectos a dicha alerta), utilizando el siguiendo codigo:
&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
&amp;lt;div id=&quot;talerta&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&quot;talerta1&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&quot;alerta&quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&amp;gt;&amp;lt;b&amp;gt;Recuerde que..&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&quot;alerta1&quot;&amp;gt;&lt;br /&gt;
Este blog esta desarrollado en idioma español pero utilizando &amp;lt;b&amp;gt;&amp;lt;span class=&quot;notranslate&quot;&amp;gt; Google Traductor &amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &amp;lt;span class=&quot;notranslate&quot;&amp;gt;Integracion Google.&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
y en cualquier otra parte de nuestra pagina html:
&lt;/P&gt;
&lt;P&gt;
&lt;span class=&quot;notranslate&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #6600cc;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;br /&gt;
&amp;lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
wlang=navigator.language;&lt;br /&gt;
//document.write(&#39;Navegador: &#39;+wlang);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br /&gt;
google.load(&quot;jquery&quot;, &quot;1&quot;);&lt;br /&gt;
google.load(&quot;language&quot;, &quot;1&quot;);&lt;br /&gt;
var wlanguage = wlang;&lt;br /&gt;
wlanguage = wlang.substr(0,2);&lt;br /&gt;
document.write(&#39;Navegador: &#39;+wlanguage );&lt;br /&gt;
var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;&lt;br /&gt;
var ltarget = &#39;en&#39;;&lt;br /&gt;
var npos = cadlanguage. lastIndexOf(wlanguage);&lt;br /&gt;
if (npos&amp;gt;0) {&lt;br /&gt;
wlanguage = cadlanguage.substr(npos,2); &lt;br /&gt;
} else {&lt;br /&gt;
wlanguage = ltarget;  &lt;br /&gt;
};&lt;br /&gt;
function enespanol() {&lt;br /&gt;
jQuery(&quot;#alerta&quot;).hide();&lt;br /&gt;
$(&quot;#alerta1&quot;).hide();&lt;br /&gt;
};&lt;br /&gt;
function initialize() {&lt;br /&gt;
var texto = document.getElementById(&quot;alerta&quot;).innerHTML;&lt;br /&gt;
google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {&lt;br /&gt;
var translated = document.getElementById(&quot;talerta&quot;);&lt;br /&gt;
if (result.translation) {&lt;br /&gt;
translated.innerHTML = result.translation;&lt;br /&gt;
}&lt;br /&gt;
});&lt;br /&gt;
var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;&lt;br /&gt;
google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {&lt;br /&gt;
var translated = document.getElementById(&quot;talerta1&quot;);&lt;br /&gt;
if (result.translation) {&lt;br /&gt;
translated.innerHTML = result.translation;&lt;br /&gt;
}&lt;br /&gt;
});&lt;br /&gt;
enespanol();&lt;br /&gt;
};&lt;br /&gt;
if (wlanguage != &#39;es&#39;) {  &lt;br /&gt;
google.setOnLoadCallback(initialize);&lt;br /&gt;
} else {&lt;br /&gt;
google.setOnLoadCallback(enespanol);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;ranslate&quot;&amp;gt;Integracion Google.&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/P&gt;
&lt;P&gt;
&lt;b&gt;Nota:&lt;/b&gt; Este codigo utiliza una&lt;span class=&quot;notranslate&quot;&gt; API Key &lt;/span&gt;de Google, la cual debemos personalizar para nuestras propias paginas web, al igual como hicimos con la API de Google de Maps en nuestros post de&lt;span class=&quot;notranslate&quot;&gt; Integracion Google &lt;/span&gt;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_links&quot;&gt;1ra&lt;/a&gt; y &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_links&quot;&gt;2da&lt;/a&gt; parte (en este caso nos referimos a la &lt;a href=&quot;https://developers.google.com/loader/signup&quot; target=&quot;_links&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;API Key&lt;/span&gt; de Google&lt;/a&gt;, la cual nos permite emplear las diversas API de Google, entre ellas&lt;span class=&quot;notranslate&quot;&gt; Google Language &lt;/span&gt;y otras Librerias y&lt;span class=&quot;notranslate&quot;&gt; frameworks), &lt;/span&gt;esta ultima que nos permite tener acceso a JQuery, Dojo, Prototype, entre otros)
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;h1&gt;&lt;b&gt;Geolocalizacion&lt;/b&gt;&lt;/h1&gt;
&lt;/P&gt;
&lt;P&gt;
Es indudable que las diferentes tecnicas de localización son herramientas muy utiles para el desarrollo Web, permitiendonos entre otras cosas, identificar el país de nuestros usuarios, el idioma a utilizar con ellos, elegir la moneda para realizar transacciones, otros. Pero resulta que las tecnicas de geolocalizacion son cada vez mas precisas (especialmente en medios moviles donde incluso de apoyan en servicios de localización GPS), resulta entonces conveniente considerar ambas posibilidades:
&lt;/P&gt;
&lt;P&gt;
&lt;b&gt;Tecnicas de geolocalización &quot;casi exactas&quot;&lt;/b&gt;
&lt;/P&gt;
&lt;P&gt;En este punto resalta las técnicas de geolocalización HTML5, las que realmente tienen una notable precisión, aparte de tenerla disponible en todos los navegadores modernos, y aquí tenemos un enlace que nos mostrará su nivel de precisión, y por supuesto, el código utilizado:
&lt;/P&gt;
&lt;P&gt;
&lt;a href=&quot;http://html5demos.com/geo&quot; target=&quot;_links&quot;&gt;http://html5demos.com/geo&lt;/a&gt;
&lt;/P&gt;
&lt;P&gt;
Tal vez vale resaltar que esta técnica tiene como principal requisito que el usuario permita la geolocalización aunque sea una vez (no es de uso &quot;transparente&quot; al usuario), y esto puede de alguna forma ser una limitación..
&lt;/P&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;P&gt;
&lt;b&gt;Otras tecnicas de geolocalizacion..&lt;/b&gt;
&lt;/P&gt;
&lt;P&gt;
Vale resaltar como primer punto que estas técnicas si son de uso &quot;transparente&quot; al usuario (no requieren de su autorización), y se basan principalmente en la identificación de la&lt;span class=&quot;notranslate&quot;&gt; IP &lt;/span&gt;del usuario y la ubicación del mismo en tablas prediseñadas; por supuesto, estas técnicas no son precisas como la descrita anteriormente pero tienen un buen rango de eficacia, generalmente a nivel ciudad, lo cual puede resultar bastante conveniente para identificar el país, el idioma y moneda para interactuar con nuestros usuarios y clientes..
&lt;/P&gt;
&lt;P&gt;
Hay varios servicios de geolocalización de este tipo, pero de las que podemos destacar por su vigencia y precisión son:
&lt;/P&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.searchnc.com/atlas.html&quot; target=&quot;_links&quot;&gt;Geo Atlas service&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://isithackday.com/hacks/geo/yql-geo-library/&quot; target=&quot;_links&quot;&gt;YQL Geo service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ipinfodb.com/&quot; target=&quot;_links&quot;&gt;IPinfodb&lt;/a&gt;, entre otras.&lt;/li&gt;
&lt;/ul&gt;

&lt;P&gt;
Saludos&lt;br /&gt;
@Mlaynes&lt;br /&gt;
&lt;/P&gt;

&lt;a href=&quot;javascript:void(rut_facebook_60());&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 5px 0px 0px; text-align: left; width: 40px;&quot; /&gt;Opina sobre las herramientas y API de Google..!&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;&lt;p id=&quot;pos01&quot;&gt;Navegador: &#39;+wlanguage +&#39;&lt;/p&gt;&#39; );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;script&gt;
window.fbAsyncInit = function() {
FB.init({appId: ‘138465519521758”, status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement(‘script’); e.async = true;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
document.getElementById(‘fb-root’).appendChild(e);
}());
&lt;/script&gt;
&lt;br /&gt;


&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;
&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2010/04/localizacion-e-internacionalizacion-de.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/6672930636064056603/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/04/localizacion-e-internacionalizacion-de.html#comment-form' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/6672930636064056603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/6672930636064056603'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/04/localizacion-e-internacionalizacion-de.html' title='Localización e Internacionalización de nuestro Blog y Paginas Web'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s72-c/google_logo.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-1500257789849146377</id><published>2010-04-15T11:47:00.000-05:00</published><updated>2012-12-26T12:50:26.271-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Appengine"/><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><title type='text'>Integracion a Google AppEngine</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our site and logged in to download these files (Membershipt Box,top right of this page.. or on the bottom Bar of the screen)\nof course, after login try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEMTU1NGYxZTEtMzViNC00OWIyLTg5NjItMGNjYzAwMGU3ZWNl&quot;;
    my_link(w_link);
  };
  function my_link02() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEODEwNmY0N2UtMjlhNy00OGFmLWJlNjMtNWQ0NjU2ZmQ4YjM1&quot;;
    my_link(w_link);
  };
  function my_link03() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYTQ5YzY2NWEtMmIxMi00YjZkLTliMDYtNDA3ZDE5OGQ5Y2U0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s200/google_logo.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 35px; margin: 22px 15px 0px 0px; width: 100px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Y bueno amigos, a lo que finalmente queríamos llegar.. y que fue motivo de una consulta en el foro de Quizzpot que ha tenido muchas visitas pero pocas ayudas técnicas: la integración de nuestras aplicaciones&amp;nbsp;a Google App Engine, utilizando ExtJs o cualquier otro framework,..&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Los que han revisado este Blog desde el principio han de recordar que les propuse la vista de un vídeo de Google sobre App Engine en la que se nos presenta las atractivas ventajas de utilizar &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt; para nuestros desarrollos web:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=9Ocjqxhh3RQ&quot; target=&quot;_blank&quot;&gt;www.youtube.com/watch?v=9Ocjqxhh3RQ&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
En su parte inicial, este vídeo nos explica claramente la importancia y ventajas de utilizar Google App Engine en nuestros proyectos.. pero siguiendo el desarrollo del video, vemos después que el ejemplo que nos presentan no nos resultó suficiente para entusiasmarnos (no se plantea claramente los resultados buscados con el ejercicio que desarrollan y se pierde algo de la visión de las ventajas innegables de AppEngine); por lo que aprovechando en efectuar nuestras propias pruebas, les presentamos en esta entrada algunos tips para poder iniciarnos en &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt;, y que por supuesto, que incluya todo lo que hemos avanzado en nuestro proceso de Integración a Google utilizando el &lt;span class=&quot;notranslate&quot;&gt;framework&lt;/span&gt; ExtJs mostrados en las entradas anteriores.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;Nota agregada: &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #2a8c00;&quot;&gt;Conviene también que después revisen con mayor detenimiento nuestro enlace a&lt;span class=&quot;notranslate&quot;&gt;&amp;nbsp;&quot;Google Codelabs&quot;&amp;nbsp;&lt;/span&gt;(último botón derecho del menú superior de esta página), allí se detalla con mayor detalle el ejemplo que presentan en el vídeo y lo profundizan más mostrándonos la utilización de algunas de las principales librerías de Phyton (incluida su almacenamiento de datos); asimismo, también pueden probar AppEngine sobre Java, para los que desarrollen en dicha plataforma)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
A este respecto resulta conveniente revisar la siguiente documentación:&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;a href=&quot;http://code.google.com/intl/es/appengine/docs/whatisgoogleappengine.html&quot; target=&quot;_blank&quot;&gt;code.google.com/intl/es/appengine/docs/whatisgoogleappengine.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/es/appengine/docs/python/overview.html&quot; target=&quot;_blank&quot;&gt;code.google.com/intl/es/appengine/docs/python/overview.html&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/intl/es/appengine/docs/python/runtime.html&quot; target=&quot;_blank&quot;&gt;code.google.com/intl/es/appengine/docs/python/runtime.html&quot;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Instalando Google App Engine&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Instalar Google App Engine nos permite instalar una infraestructura de pruebas similar a instalar nuestro servidor HTPP local, pero sin utilizar la combinación Apache+PHP+ MySQL que hemos venido utilizando con &lt;b&gt;Appserv&lt;/b&gt;, y que por supuesto representa una nueva alternativa a considerar así como tambien tenemos la combinación Apache Tomcat (servidor de aplicaciones)+Java+MySQL -puede ser con cualquier otra base de datos como MS-SQL Server, PostGreSQL, Oracle, Access, etc.- Todas estas combinaciones entre otras, nos permiten crear, probar, publicar y mantener nuestros proyectos Web.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
En este caso, vamos a utilizar el Kit de Desarrollo de software (SDK) de Google App Engine para Python: GoogleAppEngine_1.5.2.msi para plataforma Windows (de 16.5Mb, vigente al 20/Julio/2011; pero&amp;nbsp;también&amp;nbsp;puede utilizar la versiones correspondiente para equipos con Mac o Linux instalado), la que podemos descargar de la siguiente&amp;nbsp;dirección:&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;a href=&quot;http://code.google.com/intl/es/appengine/downloads.html&quot; target=&quot;_blank&quot;&gt;code.google.com/intl/es/appengine/downloads.html&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Antes de iniciar la instalacion del SDK de Google AppEngine, debemos asegurarnos que tengamos Phyton 2.5.x instalado en nuestro ordenador, para lo cual el mismo instalador nos indicara de donde bajar primero e instalar dicha version de Phyton (version 2.5.5.7 de 24Mb, vigente al 01/03/2011). Finalmente toda version completa de AppEngine ocupara unos 150Mb, incluido los instaladores del SDK y Phyton...&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
La ventaja del Kit SDK para Python es que simultáneamente instala un&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; &quot;launcher&quot; &lt;/span&gt;&lt;/b&gt;(lanzador de aplicaciones de GoogleAppEngine), el cual nos facilita las pruebas de nuestros desarrollos:&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWZEBvqr6h5Nnjm8N6stVMlcmMoTdI7MuCAT_4g68E2uw3B_cJySUJeYyvHJzFoCyQR5Ws0VFk2u-47Sz11QXkZC4JGkx5Yhz_6G9Yh0fbWJdsaI-OHypTR_NLqftW8VW_-0Z83qfYGdWr/s1600/launcher+GoogleAppEngine.PNG&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5460419206716315010&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWZEBvqr6h5Nnjm8N6stVMlcmMoTdI7MuCAT_4g68E2uw3B_cJySUJeYyvHJzFoCyQR5Ws0VFk2u-47Sz11QXkZC4JGkx5Yhz_6G9Yh0fbWJdsaI-OHypTR_NLqftW8VW_-0Z83qfYGdWr/s200/launcher+GoogleAppEngine.PNG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 225px; margin: 0px auto 10px; text-align: center; width: 300px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;Audiencia&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Se recomienda que, para entender este&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; codelab&lt;/span&gt;&lt;/b&gt;, tengamos suficientes conocimientos de ExtJs y herramientas básicas desarrollo Web (HTML, CSS, Javascript; o en su defecto, haber seguido el &lt;a href=&quot;http://www.quizzpot.com/2009/01/ext-js-framework/&quot; target=&quot;_blank&quot;&gt;curso de ExtJs&lt;/a&gt; que nos ofrece Crysfel Villa de México en su pagina del Quizzpot.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Asimismo se recomienda haber leído y probado nuestras entradas: &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;Integracion a Google (1ra parte)&lt;/a&gt; e &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_blank&quot;&gt;Integración a Google (2da parte)&lt;/a&gt;,  especialmente para comprender las herramientas utilizadas para integrar de las API de Google a ExtJs (y viceversa), que se emplean en este tutorial.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;javascript:void(my_link01());&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Material de Apoyo&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Appengine.rar,&lt;/b&gt;&amp;nbsp;&lt;/span&gt;Descargar el material de apoyo desde &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Google Docs&lt;/b&gt;&lt;/span&gt;, que es donde tenemos cargado el archivo appengine.rar (elegir pestaña &lt;b&gt;&quot;File&quot;&lt;/b&gt;), y en la raíz de nuestro disco de trabajo o donde estimemos conveniente se creara la carpeta &lt;b&gt;&quot;appengine&quot;&lt;/b&gt;, dentro de la cual tendremos las siguientes carpetas:&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEE5VhUETPnsG6xU_hhLVbmMZ0hb3ArG7DN2Kr1-nhJ_JvRss2GcYf0C7aXfKOIHIzO0Q7BRweTueKYhG2I5BmSucOnAINfHm3qwH7h4WXg34PWWiuArmcOuzebCDEwlJinwfuwdXeonvd/s1600/Carpeta+AppEngine.PNG&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5460419783468603074&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEE5VhUETPnsG6xU_hhLVbmMZ0hb3ArG7DN2Kr1-nhJ_JvRss2GcYf0C7aXfKOIHIzO0Q7BRweTueKYhG2I5BmSucOnAINfHm3qwH7h4WXg34PWWiuArmcOuzebCDEwlJinwfuwdXeonvd/s200/Carpeta+AppEngine.PNG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 225px; margin: 0px auto 10px; text-align: center; width: 300px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;carpeta prueba&lt;/b&gt;, contiene un ejemplo sencillo que nos muestra una visualizacion de una Hoja de Calculo de Google Docs (un grafico líneal en este caso), y que su codigo lo hemos tomado del &lt;a href=&quot;http://code.google.com/apis/ajax/playground/#using_the_query_language&quot; target=&quot;_blank&quot;&gt;Code Playground&lt;/a&gt; de Google, pero bajo App Engine.&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2bFmVYRphnraAexdMTpahQdZW575aTkIZlJ3X9V1wxi1g4QzgiL0q9RP37knDALssoTI7pU1ynqvq1_Uk8r14J9AN4eQt-5sGNZHB_GLvQn_J0rJAvkDcZ4r7XFuy_1armdM1qj3GTWIU/s1600/AppEng_01.PNG&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5460421533788333554&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2bFmVYRphnraAexdMTpahQdZW575aTkIZlJ3X9V1wxi1g4QzgiL0q9RP37knDALssoTI7pU1ynqvq1_Uk8r14J9AN4eQt-5sGNZHB_GLvQn_J0rJAvkDcZ4r7XFuy_1armdM1qj3GTWIU/s200/AppEng_01.PNG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 225px; margin: 0px auto 10px; text-align: center; width: 300px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;carpeta prueba01&lt;/b&gt;, que nos muestra un ejemplo de visualizacion de nuestra &quot;tabla de productos&quot; de Google Docs utilizada en nuestra entrada &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_blank&quot;&gt;Integración a Google (2da.parte)&lt;/a&gt;, y a los que he agregado un manejo básico de eventos que nos proporciona el API de Visualizaciones Google entre la Tabla y el PieChart mostrados, que son interesantes para poderlas revisar con mas detalle.&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI9UgsEpjrp3FR8oBz0P1LcGjsYq5VOZeu2CD6u2SsrrWYxef9CcI7XbT3LQfytiPHhwkMhQZ2LknKZ7YoBAvADAqo55uSo84JGnPjYBZYO-_Onhl8_XizzOpXfgwIkRAs_LaTUWGLob4M/s1600/AppEng_02.PNG&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5460422951026649330&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjI9UgsEpjrp3FR8oBz0P1LcGjsYq5VOZeu2CD6u2SsrrWYxef9CcI7XbT3LQfytiPHhwkMhQZ2LknKZ7YoBAvADAqo55uSo84JGnPjYBZYO-_Onhl8_XizzOpXfgwIkRAs_LaTUWGLob4M/s200/AppEng_02.PNG&quot; style=&quot;display: block; height: 225px; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center; width: 300px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;&lt;b&gt;Nota agregada: &lt;/b&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #2a8c00;&quot;&gt;Después de algunas pruebas realizadas por miembros de nuestro grupo, parece que para que funcionen estos ejercicios debe previamente haber accedido a cualquier servicio con nuestra cuenta personal de Google:. La tabla &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Spreadsheet Productos &lt;/b&gt;&lt;/span&gt;que utilizamos en este ejercicio está compartida en &lt;span class=&quot;notranslate&quot;&gt;Google Docs&lt;/span&gt; para que &lt;b&gt;&quot;todos la vean sin acceder&quot;&lt;/b&gt;, pero parece que para Google, &quot;sin acceder&quot; significa que la tabla no aparezca en nuestra lista personal de documentos de &lt;span class=&quot;notranslate&quot;&gt;Google Docs&lt;/span&gt;, pero que necesariamente se tiene que haber ingresado primero con nuestra cuenta a algún servicio de Google como GMail por ejemplo, o con la opción &quot;acceder&quot; de la barra del menú de www.google.com), sino el ejercicio propuesto posiblemente no trabaja bien y arroje un mensaje de error de acceso al Query.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #2a8c00;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #2a8c00;&quot;&gt;Estos ejercicios deben funcionar aún cuando con nuestra cuenta Google nunca hayamos utilizado Google Docs, por cuanto, las cuentas de Google, no son solo nuestra puerta de ingreso a GMail sino a una larga lista de servicios de Google que nos debe resultar interesante considerar para nuestro uso cotidiano: &lt;span class=&quot;notranslate&quot;&gt;Google Calendar&lt;/span&gt;, Blogger, Picassa, &lt;span class=&quot;notranslate&quot;&gt;Google Sites&lt;/span&gt;, &lt;span class=&quot;notranslate&quot;&gt;CheckOut&lt;/span&gt; (tipo &lt;span class=&quot;notranslate&quot;&gt;pay-pal&lt;/span&gt;), &lt;span class=&quot;notranslate&quot;&gt;Google Maps&lt;/span&gt;, &lt;span class=&quot;notranslate&quot;&gt;Google Talk&lt;/span&gt;, y por supuesto &lt;span class=&quot;notranslate&quot;&gt;Google App Engine&lt;/span&gt;, entre otros)&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;carpeta intGoogle1&lt;/b&gt;, que nos muestra lo mismo que nuestro post &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;Integración a Google (1ra.parte)&lt;/a&gt;, pero corriendo sobre AppEngine (nuestro archivo 01.GVisualizaton-sample.html se encuentra &quot;insertado&quot; dentro de IntGoogle1.py (de Phyton), y el resto de archivos js y de Extjs se encuentran grabados en la carpeta&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;static&quot;&amp;nbsp;&lt;/b&gt;&lt;/span&gt; de IntGoogle1.&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0-3dekSkJyFqBVoNH1HS8UHPWTQ1HTGaT6PWtTZNhAemsjIFjndnJedN75cGik6rXqaJeQAevySATg1uYU00Cdu7-unBy25YBXyLIuP3-F2bAasfHemBbZ7dCicZnJHtO5HnTiwQOaxeh/s1600/AppEng_03.PNG&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5460425059733536818&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0-3dekSkJyFqBVoNH1HS8UHPWTQ1HTGaT6PWtTZNhAemsjIFjndnJedN75cGik6rXqaJeQAevySATg1uYU00Cdu7-unBy25YBXyLIuP3-F2bAasfHemBbZ7dCicZnJHtO5HnTiwQOaxeh/s200/AppEng_03.PNG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 225px; margin: 0px auto 10px; text-align: center; width: 300px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;carpeta intGoogle2&lt;/b&gt;, que nos muestra lo mismo que nuestro post &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_blank&quot;&gt;Integración a Google (2da.parte)&lt;/a&gt;, pero corriendo sobre AppEngine (nuestro archivo 02.GVisualizaton-sample.html se encuentra &quot;insertado&quot; dentro de IntGoogle2.py (de Phyton), y el resto de archivos js y de Extjs se encuentran grabados en la carpeta&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;static&quot;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;de IntGoogle2.&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9HmCGw8gBvFhm_MD_vvBo-RU8Mtjxs9oXotT6YpmF5zeeOMqHn3Mh8B4HlKdXCuQ45OPhF-2GUOsDkInqFGoKkM31YgQSEEo0YDJMpdL3MvyfMTBStytRqlk4Ih_cKR2NTCJ7d6MosGzr/s1600/AppEng_04.PNG&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5460426464059789650&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9HmCGw8gBvFhm_MD_vvBo-RU8Mtjxs9oXotT6YpmF5zeeOMqHn3Mh8B4HlKdXCuQ45OPhF-2GUOsDkInqFGoKkM31YgQSEEo0YDJMpdL3MvyfMTBStytRqlk4Ih_cKR2NTCJ7d6MosGzr/s200/AppEng_04.PNG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 225px; margin: 0px auto 10px; text-align: center; width: 300px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;

&lt;br /&gt;
&lt;p&gt;
&lt;h1&gt;&lt;span style=&quot;color:red;&quot;&gt;&lt;b&gt;NOTA IMPORTANTE : &lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;/p&gt;
&lt;p&gt;Resulta que el sistema de autorización &quot;AuthSub for JavaScript&quot; de Google ya no se encuentra disponible (pueden revisar el siguiente &lt;a href=&quot;https://developers.google.com/gdata/docs/js-authsub&quot; taregt=&quot;_blank&quot;&gt;enlace&lt;/a&gt;), por lo que nuestro botón &quot;Login&quot; de nuestro codelab no permite el acceso a nuestro ejercicio; asimismo, la documentación de Google nos recomienda que utilicemos ahora &quot;OAuth 2.0 for client-side applications&quot;, vale decir, tendremos que utilizar&amp;nbsp;&lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;Google API Javascript Client&lt;/a&gt;&amp;nbsp;para poder acceder a nuestras aplicaciones (u otra API cliente según la plataforma back-end que utilicemos, tal como PHP, Java, .NET, entre otros), pero en nuestro caso, como solo estamos trabajando aplicaciones por el lado del cliente, tendremos que recurrir a la librería cliente para Javascript indicada.
&lt;/p&gt;
&lt;p&gt;Por lo que, mientras adecuamos nuestro código, resulta conveniente que NO CONSIDEREN el proceso de acceso a la aplicación de la siguiente manera:
&lt;blockquote&gt;&lt;span class=&quot;notranslate&quot;&gt;
 function activando(auth) {&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;var c = Ext.getCmp(&#39;center&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:red;&quot;&gt;//google.accounts.user.login(&#39;http://www.google.com/m8/feeds/&#39;);&lt;/span&gt;&lt;br/&gt; 
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:blue;&quot;&gt;auth = true;&lt;/span&gt;&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.update(&#39;&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;if (auth) { &lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vistree.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;};&lt;br/&gt;
 };&lt;br/&gt;
&lt;br/&gt;
within of: MenuGVisualization_01.js / MenuGVisualization_02.js where appropriate!&lt;br/&gt;
&lt;/span&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;div id=&quot;oauth20&quot;&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;h1&gt;&lt;span style=&quot;color:darkBlue;&quot;&gt;&lt;b&gt;TRABAJANDO CON OAUTH 2.0 : &lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;
&lt;p&gt;por supuesto, a la brevedad actualizaremos todos nuestros códigos para que trabajen con el protocolo OAuth20, pero presentamos lo demos de nuestro codelab que hemos cargado a la plataforma GAE (Google App Engine), pero que usted puede probar en su servidor local de pruebas utilizando el SDK de Python (una vez adecuado el código a OAuth2.0 como indicamos en nuestros codelab Int-Google &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html#oauth20&quot; target=&quot;_links&quot;&gt;1ra&lt;/a&gt; y &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html#oauth20&quot; target=&quot;_links&quot;&gt;2da&lt;/a&gt; parte.. ó realizando el cambio indicado para &quot;puentear&quot; el proceso de autenticación)
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle01-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle01-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle02-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle02-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;
&lt;b&gt;&lt;h1&gt;Pasos para ejecutar el codelab&lt;/h1&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;div&gt;
Para ejecutar los ejemplos mostrados solo basta ejecutar el launcher de Google App Engine (hay un icono en el desktop luego de instalación), y seleccionar la opción&lt;span class=&quot;notranslate&quot;&gt;&amp;nbsp;&quot;File/Add Existing Aplication..&quot;&lt;/span&gt; del menú, dicha opción nos muestra una ventana en la cual el boton&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;Browse&quot;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;nos permite seleccionar la carpeta appengine que contiene nuestro proyecto (&lt;span class=&quot;notranslate&quot;&gt;prueba, prueba01, IntGoogle1 y IntGoogle2 en este caso&lt;/span&gt;), elijamos cada una de nuestras carpetas y seleccionar el botón &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;Add&quot;&lt;/b&gt;&lt;/span&gt;, se cargaran nuestras aplicaciones al &quot;launcher&quot;; luego seleccionemos nuestro proyecto y elijamos el botón &quot;&lt;b&gt;Run&lt;/b&gt;&quot;, que direccionará nuestra aplicación a un puerto específico, y activará al botón &quot;&lt;b&gt;Browse&lt;/b&gt;&quot;, el cual al ser seleccionado ejecutará nuestro navegador web predeterminado, y ejecutará nuestra aplicación (este proceso es sencillísimo y no creo que tengan inconvenientes para hacerlos).&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilFiKXocb_gX4Rrb0YggWoKzy4H9PnqGPhxfivQ2mt3Ubza4mILt27K_JM5ZFiJBLUwhHZBSSQE64PF4efOcXuSRiL1n1nMwmVaO2CZJwLcY9z1q3ZGbA2uxdzVnyEpUGDjnZbYZYXuzjW/s1600/AppEng_05.PNG&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5460430796480511330&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilFiKXocb_gX4Rrb0YggWoKzy4H9PnqGPhxfivQ2mt3Ubza4mILt27K_JM5ZFiJBLUwhHZBSSQE64PF4efOcXuSRiL1n1nMwmVaO2CZJwLcY9z1q3ZGbA2uxdzVnyEpUGDjnZbYZYXuzjW/s200/AppEng_05.PNG&quot; style=&quot;cursor: hand; cursor: pointer; display: block; height: 215px; margin: 0px auto 10px; text-align: center; width: 300px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;APUNTES TECNICOS:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Al revisar con más detalle los archivos de cada carpeta notarán lo siguiente:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;nuestras&amp;nbsp;imágenes, iconos y otros archivos &quot;externos&quot; utilizados en cada ejercicio, están grabadas en la carpeta&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&amp;nbsp;static&amp;nbsp;&lt;/b&gt;&lt;/span&gt;(hay que revisar un poco de la documentación al respecto, pero vale indicar que la razon principal de este procedimiento es que a diferencia de nuestras aplicaciones probadas en un servidor Apache, con Google AppEngine no todos los archivos de nuestra carpeta del proyecto se cargan en la web, y de nuestra estructura de directorios, solo algunas carpetas se ejecutan exclusivamente por el lado del servidor.&lt;/li&gt;
&lt;li&gt;por el motivo indicado, grabamos también los archivos de ExtJs en la carpeta &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;static&quot;&lt;/b&gt;&lt;/span&gt;, y que en este caso corresponden a la version ext-3.1.0; realmente tuvimos algunos problemas al utilizar versiones a partir de etx-3.2.x, e inclusive con la versión vigente de ExtJs-3.3.1 a la fecha (no cargaba la&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&quot;datatable&quot;&lt;/span&gt; requeridas para las visualizaciones Google desde los&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&quot;stores&quot;&lt;/span&gt;) ..pero este &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;bug&quot;&lt;/b&gt;&lt;/span&gt;&amp;nbsp;producto a una revisión de una de las clases de ExtJs ya ha sido corregido, por lo que pueden revisar el post respectivo a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google&lt;/span&gt;&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;1ra&lt;/a&gt; y &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; target=&quot;_blank&quot;&gt;2da&lt;/a&gt;&amp;nbsp;que corresponden a estos mismos ejercicios que estamos probando sobre &lt;span class=&quot;notranslate&quot;&gt;AppEngine&lt;/span&gt;, pero funcionando sobre un servidor &lt;span class=&quot;notranalate&quot;&gt;Apache&lt;/span&gt;&amp;nbsp;estándar, en dicho caso, ambos ejercicios &lt;b&gt;IntGoogle1 &lt;/b&gt;e &lt;b&gt;IntGoogle2&lt;/b&gt;, ya han sido modificados a la versión extjs-3.1.1. vigente al 01/03/2011, así que esperamos que como haciendo sus pruebas personales deberían poder actualizar estos ejercicios para utilizar una versión actualizada de Extjs (la disponible en estos momentos), y verificar su funcionamiento.&lt;/li&gt;
&lt;li&gt;al cargar nuestras aplicaciones con el boton&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;Run&quot;&lt;/b&gt;&lt;/span&gt;, a la vez que se activa el botón &lt;b&gt;&quot;Browse&quot;&lt;/b&gt; (que lanzará automáticamente nuestro browser preferido y nos permitirá observar los resultados de nuestra aplicación). Vale también revisar los botones &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;Logs&quot;&lt;/b&gt;&lt;/span&gt; y &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;SDK Console&quot;&lt;/b&gt;&lt;/span&gt;, el primero nos indica si todo esta correcto (y nos indica incluso los errores de compilación phyton de haberlos); &amp;nbsp;el &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;SDK Console&lt;/b&gt;&lt;/span&gt; nos servirá luego, especialmente cuando utilizemos la biblioteca de almacenamiento de datos de Google AppEngine y otras librerías incorporadas de la biblioteca estandard de Phyton.&lt;/li&gt;
&lt;li&gt;Para lanzar a la web nuestra aplicación, solo basta utilizar el botón &lt;b&gt;&quot;Deploy&quot;&lt;/b&gt;, y si no tenemos un dominio propio, Google nos proporcionará un dominio provisional, pero nuestra aplicación bien podría ahí mismo subirse a la web (solo se necesita haber registrado nuestra cuenta Google en &lt;span class=&quot;notranslate&quot;&gt;App Engine&lt;/span&gt;, para lo que se necesita registrar nuestro código de confirmación recepcionado via sms utilizando un telefono celular de la empresa Claro, para el caso de Perú (para otros países debemos consultar la lista de compañías de comunicaciones correspondiente); pero actuemos con mesura, pues Google nos permite hasta 10 subidas &quot;gratuitas&quot;, y tal vez no nos convenga desaprovecharlas por el momento.&lt;/li&gt;
&lt;li&gt;Al igual como hemos cargado la versión&amp;nbsp;3.1.1&amp;nbsp;&quot;liviana&quot; de ExtJs, podríamos hacer lo mismo si se desea utilizar cualquier cualquier otro &lt;span class=&quot;notranslate&quot;&gt;framework&lt;/span&gt;&amp;nbsp;JavaScript, pero téngase presente que Google tiene ya &lt;a href=&quot;http://code.google.com/intl/es/apis/libraries/&quot; target=&quot;_blank&quot;&gt;disponibles&lt;/a&gt; versiones de &lt;span class=&quot;notranslate&quot;&gt;frameworks&lt;/span&gt; como JQuery, Prototype, Dojo, entre otros. Aunque también debemos resaltar que ahora tambien resulta importante practicar y utilizar Javascript puro.. opción que debemos tener en cuenta, ahora que poco a poco se va a imponer el manejo de este lenguaje por el lado del servidor, debido a la versatibilidad y perfomance mostradas de&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;Node.js&amp;nbsp;&lt;/b&gt;&lt;/span&gt;y el &lt;a href=&quot;http://code.google.com/intl/es/apis/v8/&quot; target=&quot;_blank&quot;&gt;motor de desarrollo &lt;b&gt;V8&lt;/b&gt;&lt;/a&gt;, los que inclusive han sido utilizados en el desarrollo del navegador Google Chrome.&lt;/li&gt;
&lt;li&gt;Cabe resaltar asimismo que para efectuar el &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;&quot;Deploy&quot;&lt;/span&gt;&lt;/b&gt; con el &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;launcher&lt;/b&gt;&lt;/span&gt; AppEngine, de ser el caso, nuestro &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;Logs&lt;/span&gt;&lt;/b&gt; nos indicará que debemos tener instalado y operativo&amp;nbsp;&lt;b&gt;&quot;openssl&quot;&lt;/b&gt;, &amp;nbsp;correspondiente a las herramientas que permiten a nuestros proyectos AppEngine &amp;nbsp;implementar &lt;b&gt;SSL&lt;/b&gt; (&lt;span class=&quot;notranslate&quot;&gt;Secure Socket Layer&lt;/span&gt;), &lt;b&gt;TLS&lt;/b&gt; (&lt;span class=&quot;notranslate&quot;&gt;Transport &amp;nbsp;Layer Security&lt;/span&gt;) así como otros protocolos relacionados con la seguridad. Para ello puede seguir los pasos indicados &lt;a href=&quot;http://forums.tutorialized.com/windows-122/openssl-installation-on-windows-tutorial-by-herong-5467.html&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;, o a mejor parecer, nos conviene instalar completamente &lt;a href=&quot;http://gnuwin32.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;GnuWin32&lt;/a&gt;,  que además de darnos acceso a comandos Linux, y entre otros paquetes, nos implementa &lt;span class=&quot;notranslate&quot;&gt;openssl 0.9.8r&lt;/span&gt; vigente a la fecha (esto sobre windows; en otras plataformas como Linux o Mac debe verificarse si openssl ya se encuentra instalado, caso contrario debe implementarse el paquete &lt;a href=&quot;http://www.openssl.org/&quot; target=&quot;_blank&quot;&gt;openssl&lt;/a&gt; correspondiente).&lt;/li&gt;
&lt;li&gt;Para nuestras pruebas personales debemos indicar también que, el nombre de nuestras aplicaciones que pongamos en el archivo&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;app.yaml&lt;/b&gt;&lt;/span&gt; debe seguir el estandar &lt;span class=&quot;notranslate&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Camel_casing&quot; target=&quot;_blank&quot;&gt;&quot;camel casing&quot;&lt;/a&gt;&lt;/span&gt;, por lo que dicho nombre debe empezar en minusculas...&lt;/li&gt;
&lt;li&gt;y bueno, estas son opciones de Google AppEngine que corresponden únicamente al manejo del&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&amp;nbsp;framework webapp&lt;/b&gt;&lt;/span&gt;&amp;nbsp;proporcionado por la biblioteca estandard de Phyton, pero debemos tener en cuenta que uno de los recursos mas interesantes de Google AppEngine es su almacenamiento de datos (y que corresponden al concepto Big Table descrito en el video indicado al comienzo del post), punto muy importante que nos encontramos desarrollando con bastante interés..&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;div&gt;
&lt;h1&gt;Porque GAE-Python ?&lt;/h1&gt;
&lt;p&gt;la plataforma GAE permite en estos momentos el uso de hasta 03 lenguajes por el lado del servidor: Python, Java y Go; y tal vez pueda ser bastante difícil invocar a los desarrolladores a optar por un lenguaje en particular, pero lo cierto es que Python es el lenguaje con que se inició la plataforma GAE y tal vez la que mantiene aún &quot;en exclusividad&quot; algunos desarrollos importantes como son la &lt;a href=&quot;https://developers.google.com/appengine/docs/python/tools/uploadingdata&quot; target=&quot;_links&quot;&gt;carga y descarga de datos&lt;/a&gt; (vía remote_api) , y en particular de &lt;a href=&quot;https://developers.google.com/appengine/docs/python/dataprocessing/&quot; target=&quot;_links&quot;&gt;la herramienta MapReduce&lt;/a&gt; (aún experimental), para trabajar procesos de datos en forma optimizada en nuestros GAE datastores. Vale entonces destacar que si nuestro interés en hacer desarrollos en la plataforma GAE conviene que mantengamos un conocimiento básico de desarrollo GAE utilizando su SDK para Python.. y a la par, dedicarnos a nuestras investigaciones y desarrollos en la platagorma GAE-Java ó GAE-Go (según nuestra especialización).&lt;/p&gt;
&lt;p&gt;Otro punto a tomar en cuenta es que para desarrollos para móviles (y para Android en particular), es necesario tomar conocimientos de desarrollo en la plataforma Java y esto induce a muchos desarrolladores a considerar como punto de partida de sus investigaciones y desarrollos a la plataforma GAE-Java, vale entonces reiterar nuestro apunte anterior, en que aún cuando la plataforma Java de desarrollo es bastante importante y de muy buen soporte, pues no debemos considerar que hay algunas herramientas Appengine que solo trabajan, por el momento, exclusivamente en la plataforma GAE-Python, por lo que vale considerar y dar una periódica revisión a este entorno de desarrollo.
&lt;/p&gt;
Saludos...&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
@Mlaynes&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:void(rut_facebook_90());&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 5px 0px 0px; text-align: left; width: 40px;&quot; /&gt;Opina sobre Google AppEngine en nuestro foro..!&lt;/a&gt;&lt;/div&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;script&gt;
window.fbAsyncInit = function() {
FB.init({appId: ‘138465519521758”, status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement(‘script’); e.async = true;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
document.getElementById(‘fb-root’).appendChild(e);
}());
&lt;/script&gt;

&lt;div id=&quot;fb-root&quot;&gt;
&lt;/div&gt;
&lt;script src=&quot;http://connect.facebook.net/en_US/all.js#xfbml=1&quot;&gt;&lt;/script&gt;&lt;fb:comments href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-appengine.html&quot; num_posts=&quot;15&quot; width=&quot;600&quot;&gt;&lt;/fb:comments&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/1500257789849146377/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/04/integracion-google-appengine.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1500257789849146377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/1500257789849146377'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/04/integracion-google-appengine.html' title='Integracion a Google AppEngine'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s72-c/google_logo.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-48211062027091563</id><published>2010-04-04T16:10:00.000-05:00</published><updated>2013-03-31T17:04:56.900-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><category scheme="http://www.blogger.com/atom/ns#" term="Facebook"/><title type='text'>Integracion a Google (2da parte)</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register/sign-in as a member of our community with Google Friend Connect to download these files (Membershipt Box, top right of this page.. or on the bottom Bar of the screen)\nof course, after login try again please \n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYzMxYzRiOWItYzU4Mi00MDViLTlhNDAtYjg5OGFiNGZmZWMx&quot;;
    my_link(w_link);
  };
  function my_link02() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEODEwNmY0N2UtMjlhNy00OGFmLWJlNjMtNWQ0NjU2ZmQ4YjM1&quot;;
    my_link(w_link);
  };
  function my_link03() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYTQ5YzY2NWEtMmIxMi00YjZkLTliMDYtNDA3ZDE5OGQ5Y2U0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
  function my_link05() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEelVNNENMeGtqemc&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;
&lt;/div&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s200/google_logo.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 35px; margin: 22px 15px 0px 0px; width: 100px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
(Actualizado al 21/04/2012)
&lt;br /&gt;
Esta es la segunda parte de nuestro proyecto de Integración de Google al entorno de desarrollo del framework ExtJs, tal como habíamos prometido realizar, y cuyo objeto es unir las ventajas que nos ofrece ExtJs, y el innegable aporte de Google al desarrollo del mundo Web, y en esta oportunidad vamos a centrar nuestra atención en el uso de&lt;span class=&quot;notranslate&quot;&gt; &lt;b&gt;Spreadsheets&lt;/b&gt; &lt;/span&gt;de Google como fuente de datos, y esto porque es una forma bastante rápida para familiarizarnos con el uso de las herramientas de desarrollo que nos brindan tanto ExtJs como Google para el desarrollo de aplicaciones &quot;sencillas&quot;, que fácilmente bien podríamos desarrollar para pequeños negocios y otros.. &lt;br /&gt;
&lt;p&gt;
En este caso, he considerado para este codelab el uso de una Hoja de Calculo con una única tabla, y que se diseñó para que personas ligadas a un negocio &quot;retail&quot; de Productos de Belleza y Cosmética pueda controlar su negocio: Ventas y Cobranza, con la &quot;ventaja&quot; que todo el &quot;ingreso y actualización de datos&quot; se puede realizar digitando directamente sobre una Hoja de Calculo usando Google Docs (ahora llamado Google Drive), pero que le permite consultar sus stocks de productos para venta, y los recordar los saldos por cobrar de sus clientes desde cualquier lugar con acceso a Internet (incluido s por supuesto teléfonos celulares, tablets, otros), y creemos que ya pueden imaginar que, esta simple herramienta resultó bastante importante, especialmente cuando ya se tiene varias decenas de clientes y cientos de productos colocados en plaza..
&lt;/p&gt;
&lt;p&gt;
Este simple ejercicio puede aún complementarse con el empleo de &lt;a href=&quot;https://developers.google.com/apps-script/guide?hl=es&quot; target=&quot;_blank&quot;&gt;&quot;Google Apps Script&quot;&lt;/a&gt;, los que trabajan perfectamente dentro del entorno de las hojas de Calculo de Google Docs, y con el que podemos organizar el registro y captura de nuestros datos (compras, cobranzas, gastos, ventas, cobranzas, encuestas, citaciones, registro para eventos, etc.), validarlos, procesarlos, calcular nuestros stocks de productos y saldos por cobrar, y finalmente consolidar y sumarizar la información disponible para monitorear los resultados de nuestro negocio (utilidad, saldo en caja, etc), e incluso interactuar de una manera bastante sencilla con nuestros clientes remitiéndo en forma periódica ofertas, saldos, adeudos, promociones, etc.&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;..realmente me ha impresionado el potencial de las &quot;Apps Script&quot; (en pleno proceso de evolución), pero vale también resaltar que estas opciones tienen un limite, ahora de 10,000 lineas u operaciones por tabla, hasta 256 columnas, y un máximo de 400,000 celdas; que siendo una cuota importante (programándose cortes anuales ó mensuales según la carga de trabajo), y aún pudiendo esta cuota incrementarse, la realidad, es que esta es una herramienta apropiada para micro y pequeños negocios (hay varios cientos de miles de ellas aquí en Perú y Latinoamérica en general), pero para las empresas medianas, y las que tengan aspiraciones de crecer, por supuesto pueden utilizar estas herramientas para temas específicos y complementarios, pero tal ez ya no para la gestión completa del negocio, y por supuesto, estas empresas deben necesariamente, empezar a programar dentro de sus costos de operación y funcionamiento, a personal de Desarrollo y Soporte TI permanente, para enfocar sus respectivos casos y sus soluciones informáticas, bajo parámetros mas convencionales (empleo de Base de Datos, Departamentalización de procesos y Automatización de las área críticas (producción, ventas, cobranzas, contabilidad, etc.), todo por supuesto bajo un enfoque de sistemas, y tomando en consideración todas las herramientas y entornos cliente-servidor,&lt;span class=&quot;notranslate&quot;&gt; &quot;cloud &amp;amp; grid computing&quot; &lt;/span&gt;vigentes y disponibles en el ahora interesante e importante mercado del desarrollo de software.
&lt;/p&gt;
&lt;p&gt;
Pero lo que si debo destacar es que, las &quot;Apps script&quot; tiene como ventaja que su API permite entre otras, dos opciones importantes: la creación de Interfaz de Usuario personalizados (utilizando&amp;nbsp;&lt;a href=&quot;https://developers.google.com/apps-script/guide_user_interfaces&quot; target=&quot;_blank&quot;&gt;UI Service&lt;/a&gt; y &lt;a href=&quot;https://developers.google.com/apps-script/guide_gui_builder&quot;&gt;GUI Builder&lt;/a&gt;), los que permiten que diseñemos nuestros pantallas de captura de datos y proceso de la información al grabarlas en nuestras tablas, así como&amp;nbsp;también&amp;nbsp;permiten la conexión a cualquier bases de datos mediante &lt;a href=&quot;https://developers.google.com/apps-script/jdbc_overview&quot; target=&quot;_blank&quot;&gt;JDBC&lt;/a&gt; (lectura y escritura), con lo que podemos utilizar fácilmente esta herramienta para facilitar el acceso de nuestros usuarios y procesar correctamente y validar nuestra data antes de cargarlas a bases de datos corporativas o de nuestras aplicaciones.&amp;nbsp;(para un mejor alcance de estos conceptos pueden revisar nuestra entrada: &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/05/web-20-los-negocios-y-las-redes.html&quot; target=&quot;&quot;&gt;Web2.0: los Negocios y las redes sociales&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Audiencia&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
Se recomienda que, para entender este tutorial, tengamos los suficientes conocimientos de ExtJs y desarrollo Web (HTML, Javascript, y manejo básico del &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;back-end PHP-MySQL, instalado sobre un servidor HTTP Apache&lt;/a&gt;, o haber seguido los capitulos iniciales del &lt;a href=&quot;http://www.quizzpot.com/2009/01/ext-js-framework/&quot; target=&quot;_blank&quot;&gt;curso de ExtJs&lt;/a&gt; que nos ofrece Crysfel Villa de México en su pagina del Quizzpot.
&lt;/p&gt;
&lt;p&gt;
Asimismo se recomienda haber leido y probado: &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; target=&quot;_blank&quot;&gt;Integracion a Google (1ra parte)&lt;/a&gt;, especialmente para comprender todo el proceso de integracion de las herramientas Google a ExtJs (y viceversa), que se emplean en este tutorial.
&lt;/p&gt;
&lt;span style=&quot;font-family: Arial,Helvetica,sans-serif;font-size: large;&quot;&gt;&lt;b&gt;&lt;a href=&quot;javascript:void(my_link01());&quot; target=&quot;_blank&quot;&gt;Material de Apoyo&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;&lt;/span&gt;

&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(my_link01());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;b&gt;IntGoogle-02.rar,&lt;/b&gt;&amp;nbsp;&lt;/span&gt;Descomprimir este material de apoyo sobra la carpeta &lt;b&gt;&quot;www&quot;&lt;/b&gt; de nuestro Servidor Web Local (seguir los pasos de la 1ra. parte de este tutorial de Integración a Google), si ya ha instalado éste módulo anteriormente sobre-escriba todos los archivos que así lo indiquen ( se ha efectuado &amp;nbsp;algunas adiciones, modificaciones y mejoras que se han tenido que realizar sobre algunas funciones y extensiones para adaptarlos a la versión 3.4.0 (la ultima v3.x ofrecida por Sencha.com antes del lanzamiento de ExtJS4), o si usted lo desea, descomprimalos en una nueva carpeta con un nombre apropiado.
&lt;/p&gt;
&lt;div&gt;
(si no entiende este paso favor consulte &quot;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;empezando desde cero&lt;/a&gt;&#39;).&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(my_link02());&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle-02.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 2.4Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde al material de apoyo utilizado para instalar el presente codelab pero en la&amp;nbsp;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-la-plataforma-opensource-de.html&quot; target=&quot;_blank&quot;&gt;plataforma de Desarrollo WebMatrix&lt;/a&gt;.&amp;nbsp;El resultado de éste código es idéntico al material presentado primero, pero en este caso, comprende al proyecto completo, es decir, se ha adicionado y configurado para su uso, a la versión &quot;liviana&quot; del framework &amp;nbsp;ExtJs versión 3.4.0, y si se desempaqueta éste código en una carpeta de&amp;nbsp;&lt;b&gt;&quot;www&quot;&lt;/b&gt;&amp;nbsp;en nuestro servidor local AppServ (dentro de otra carpeta que podemos llamar &quot;WebMatrix&quot; ), podremos ver directamente los resultados al llamarlo desde la barra de direcciones de nuestro navegador usando&amp;nbsp;&lt;b&gt;&quot;http://localhost/WebMatrix/Int-Google02&quot;&lt;/b&gt;, y esto porque el archivo inicio del codelab en este caso es &quot;index.html&quot;, el cual es de ejecución automática al llamar a la carpeta que los contienen...&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;p&gt;
Ahora, si trabajamos con el primer código, y si con nuestro navegador ingresamos a &lt;b&gt;&quot;http://localhost&quot;&lt;/b&gt;, y luego a la carpeta &quot;Int-Google02&quot; ( o donde hayamos descargado el material de apoyo), y ejecutamos el archivo &quot;02.GVisualization-sample.html&quot;, debe aparecer una pantalla como la que se muestra a continuación:
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456413582344825906&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha1-C0_Sexjgg58r2N6d294CWKUepZi0fFp33AhackHla6pUkg4GC5xPrPufaQS3UT3DhD1f0D9YGigG1SBSclmJBdwGgwcanfbvbe8C4KCbcReUByel_0bwWIMdb1jbLRvYNwPYij_ilk/s400/Int-Google02.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
Esto nos indica que nuestra descarga y copia ha sido correcta así tambien es correcta el ruteo para la importación de las librerías de ExtJs, y ya estamos listos para revisar el material de apoyo instalado.. y descubrir como hemos Integrado ExtJs con las SpreadSheets de Google (hojas de calculo).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d;&quot;&gt;Nota.-&lt;/span&gt;&lt;/b&gt; si no aparece la pagina es probable que no hayamos descargado a ExtJs en la carpeta &lt;b&gt;&quot;www&quot;&lt;/b&gt;, como mostramos en &quot;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html&quot; target=&quot;_blank&quot;&gt;el potencial de ExtJs&lt;/a&gt;&quot;; o tal vez, estemos usando una versión de ExtJs diferente de la indicada en nuestro archivo HTML (..ahora estamos usando la versión ext-3.3.1, pero si estamos trabajando con otra versión debemos cambiar los nombres y la ruta de la carpeta que lo contiene si fuera necesario). Asimismo, observe que ahora tambien utilizamos la libreria &lt;b&gt;&quot;Groupsummary.js&quot;&lt;/b&gt; de ExtJs (en la ruta ../extjs/extjs-3.x.x/examples/ux, que asi corresponde en los archivos de la versión completa ExtJs que hayamos bajado.. si esta utilizando una version &quot;liviana&quot; como se indica en el Curso ExtJs de Quizzpot, cerciorese de copiar este archivo en la ruta indicada.. u otra cualquiera conveniente que nos rutee adonde este se encuentre dicho archivo).&lt;br /&gt;
&lt;br /&gt;
Observe asimismo que, como se indica en el Curso ExtJs, resulta conveniente &lt;u&gt;copiar solo los archivos de ExtJs que necesitemos&lt;/u&gt; y evitar, cuando carguemos nuestros ejercicios, pruebas o desarrollos en un servidor web real (como x10hosting.com u otros de los muchos que se ofertan en internet, como indicamos en el post anterior), pues así lograremos que nuestros proyectos solo &quot;pesen&quot; lo justo.. quitando los &quot;&lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;examples&quot;&lt;/span&gt;&lt;/b&gt; propios del&lt;span class=&quot;notranslate&quot;&gt; framework &lt;/span&gt;así como los&amp;nbsp;&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;themes&quot;&lt;/b&gt; &lt;/span&gt;o lenguajes &lt;b&gt;&quot;locale&quot;&lt;/b&gt; que no emplearemos.&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;h1&gt;&lt;span style=&quot;color:red;&quot;&gt;&lt;b&gt;NOTA IMPORTANTE : &lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;/p&gt;
&lt;p&gt;Resulta que el sistema de autorización &quot;AuthSub for JavaScript&quot; de Google ya no se encuentra disponible (pueden revisar el siguiente &lt;a href=&quot;https://developers.google.com/gdata/docs/js-authsub&quot; taregt=&quot;_blank&quot;&gt;enlace&lt;/a&gt;), por lo que nuestro botón &quot;Login&quot; de nuestro codelab no permite el acceso a nuestro ejercicio; asimismo, la documentación de Google nos recomienda que utilicemos ahora &quot;OAuth 2.0 for client-side applications&quot;, vale decir, tendremos que utilizar&amp;nbsp;&lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;Google API Javascript Client&lt;/a&gt;&amp;nbsp;para poder acceder a nuestras aplicaciones (u otra API cliente según la plataforma back-end que utilicemos, tal como PHP, Java, .NET, entre otros), pero en nuestro caso, como solo estamos trabajando aplicaciones por el lado del cliente, tendremos que recurrir a la librería cliente para Javascript indicada.
&lt;/p&gt;
&lt;p&gt;Por lo que, mientras adecuamos nuestro código, resulta conveniente que NO CONSIDEREN el proceso de acceso a la aplicación de la siguiente manera:
&lt;blockquote&gt;&lt;span class=&quot;notranslate&quot;&gt;
 function activando(auth) {&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;var c = Ext.getCmp(&#39;center&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:red;&quot;&gt;//google.accounts.user.login(&#39;http://www.google.com/m8/feeds/&#39;);&lt;/span&gt;&lt;br/&gt; 
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:blue;&quot;&gt;auth = true;&lt;/span&gt;&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.update(&#39;&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;if (auth) { &lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vistree.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;};&lt;br/&gt;
 };&lt;br/&gt;
&lt;br/&gt;
within from : MenuGVisualization_02.js&lt;br/&gt;
&lt;/span&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;div id=&quot;oauth20&quot;&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;h1&gt;&lt;span style=&quot;color:darkBlue;&quot;&gt;&lt;b&gt;TRABAJANDO CON OAUTH 2.0 : &lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;
&lt;p&gt;por supuesto, a la brevedad actualizaremos todos nuestros códigos para que trabajen con el protocolo OAuth20, y les presentamos en esta oportunidad el código y su demo de nuestro codelab que hemos cargado a la plataforma GAE (Google App Engine), pero que usted puede probar en su servidor local de pruebas..
&lt;/p&gt;
&lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle02-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab02.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle02-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)&lt;br/&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link05();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle02-OAuth20.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 3.14Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro codelab pero adecuado al protocolo OAuth version 2.0, utilizando la &lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;&quot;Google API Javascript Client&quot;&lt;/a&gt;, la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.
&lt;/p&gt;
&lt;p&gt;
&lt;/span&gt;Es importante indicar que la documentación de Google nos indica que ahora debemos trabajar con OAuth 2.0 que se esta convirtiendo en el estándar de autenticación y autorización para acceder a nuestras cuentas y poder utilizar todas las API de Google, por ello hemos adecuado nuestro codelab a dicho estándar debiéndose tener en cuenta lo siguiente:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Crear un nuevo proyecto en el &lt;a href=&quot;https://code.google.com/apis/console/&quot; target=&quot;_blank&quot;&gt;Google API Console&lt;/a&gt;, con el nombre mas adecuado que queramos &lt;/li&gt;
&lt;li&gt;Crear una &quot;OAuth 2.0 Client ID&quot; en la opción &lt;b&gt;API Access&lt;/b&gt; de la consola.. allí podremos indicar el nombre de nuestra aplicación y la URL de un logo que la represente ..a continuación debemos indicar el tipo de nuestra aplicación (&quot;web application&quot; en nuestro caso), y la URL de nuestra aplicación (acepta http://localhost ó http://localhost:8080 para trabajar con nuestro servidor local de pruebas, debiendo verificar que se elija correctamente el protocolo &lt;b&gt;&quot;http ó https&quot;&lt;/b&gt; y la ruta completa de acceso a nuestra aplicación para que todo funcione correctamente); por lo que al crear nuestra &lt;b&gt;API Access&lt;/b&gt; se nos indicará la carpeta &quot;Redirect URI&quot; donde se realizará el proceso de autenticación y autorización OAuth 2.0 solicitado (si no ha sido creada debemos editar la configuración y registrar manualmente la carpeta donde se realizará el proceso, puede ser cualquiera dentro de &quot;www&quot; o crear la carpeta &quot;oauth2callback&quot; indicada)..   &lt;/li&gt;
&lt;li&gt;..y finalmente, en la misma &quot;Google API Console&quot; debemos seleccionar a la opción &quot;Services&quot; y activar la &lt;span class=&quot;notranslate&quot;&gt;&quot;Google+ API&quot;&lt;/span&gt; (debe estar &quot;ON&quot; y de color verde), lográndose con ello finalmente crear nuestra &quot;API key&quot; en forma automática.&lt;/li&gt;
&lt;li&gt;y todo ya está listo! ..ahora al volver a la opción &quot;API Access&quot; de nuestra aplicación, ya tendremos disponible nuestro &quot;Client ID&quot; y la &quot;API Key&quot; (dentro de &quot;Simple Access API&quot;), estos datos son las que debemos utilizar y reemplazar en el archivo &quot;index.html&quot; de nuestra aplicación para que todo pueda funcionar correctamente.&lt;p&gt;Conviene también revisar las diferentes opciones que nos presenta la &quot;Google API Console&quot; pues nos puede ser necesarias como crear, modificar, renombrar, eliminar proyectos principalmente.&lt;/p&gt;
&lt;/li&gt;
&lt;p&gt;
&lt;li&gt;&lt;b&gt;..y ahora a probar nuestra aplicación IntGoogle01-Oauth20 !&lt;/b&gt;&lt;/li&gt;
&lt;/p&gt;
&lt;li&gt;y una ultima indicación.. Como estamos trabajando con la Google Maps API v2, tenemos que activar el servicio &quot;Google Maps API v2&quot; en la API consola, y registrar nuestra &lt;b&gt;API Key&lt;/b&gt; al importar la API en nuestro proyecto antes de subirlo a un servicio de hosting con un dominio personalizado y así puedan funcionar los mapas de nuestro proyecto sin mayores inconvenientes (aunque la Google Maps API v2 solo estará activa hasta Marzo 2013, por lo que debemos programar nuestras actualización a la API v.3)..por supuesto, al trabajar con nuestro servidor local &lt;b&gt;&quot;localhost&quot;&lt;/b&gt; no se presentan problemas.. el tema se presenta al cargar nuestros proyectos a un servicio de hosting externo cualquiera.. como la plataforma &lt;span class=&quot;notranslate&quot;&gt;GAE&lt;/span&gt; (Google App Engine), que es donde esta corriendo nuestra demo.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; width=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt9CCbbmHovkXVU333kquj3_txRXMEVz6UsSlIMjjr5KUXPHydoChOTwoDMlOITrkK428TDwo8ljyrv7nuZh6iQrfJfyAnoCIyIZx9_mCNywGYsB2pUsHvStWGHhzTKl277MtAC89B0hm3/s400/Oauth20-0A.jpg&quot; /&gt;&lt;/div&gt;

&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; width=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4_ttlzmsW5TC_6OyHw9qv_gat1l3_9wGwidrygs5BjcDfCnuJlBkDUnrFrwbVdJIzZ0RLNJBluMplL9g9oGHo7wTPT1SOE1_foCqfey4jxZDJY9ynIkhDeKn1SaaTLd_65yzV3Ot2f8b/s400/Oauth20-01.jpg&quot; /&gt;&lt;/div&gt;

&lt;br/&gt;

&lt;p&gt;&lt;div style=&quot;font-family: Arial,Helvetica,sans-serif;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Detalle del Modulo.&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;div&gt;
1. Para poder utilizar el modulo,como ya se indicó en la primera parte, debe tenerse una cuenta activa en Google,.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
2. Al revisar los archivos desempaquetados de nuestro material de ayuda encontraremos los siguientes archivos:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;02.GVisualization-sample.html, que contiene las instrucciones HTML para llamar a la biblioteca ExtJs y las API de Google, entre otras llamadas y configuraciones.&lt;/li&gt;
&lt;li&gt;MenuGVisualization_02.js, que contiene las instrucciones Javascript en ExtJs que visualizan el Menú y Árbol de opciones de nuestro ejemplo, así como el código que nos permite el acceso a las opciones del Modulo, por medio de la API Contacts de Google.&lt;/li&gt;
&lt;li&gt;SpreadSheet-ExtJs.js , que contiene las instrucciones Javascript en ExtJs, que nos permiten visualizar , en esta oportunidad, una tabla u hoja de Calculo de Google (creada a través de Google Docs), pero utilizando Visualizaciones Google y de ExtJs, que representan para nosotros, nuestro segundo nivel de Integración al mundo Google.&lt;/li&gt;
&lt;li&gt;GVisualizationPanel.js, que contiene las instrucciones Javascript en ExtJs que construyen las &quot;extensiones&quot; que nos permiten utilizar Visualizaciones Google sobre ExtJs, y en este caso, funciones ExtJs que nos permiten &quot;migrar&quot; la data de la tabla Google a objetos &quot;store&quot; que puedan ser manipulados desde ExtJs.&lt;/li&gt;
&lt;li&gt;GroupSummary.js, que como hemos indicado debe estar contenida en las carpetas de &quot;extjs-3.31&quot; y la necesitamos para importar la libreria ExtJs GroupSummary en el archivo &quot;02.GVisualization-sample.htm&quot;, (podemos revisar su contenido en cualquier editor de textos como Notepad++)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
3. En el archivo &quot;02.GVisualization-sample.html&quot;, se encuentra comentadas casi todas las líneas explicando paso por paso que realizan.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
4. ( &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;New!&lt;/span&gt;&lt;/b&gt; ) Hemos añadido en esta oportunidad el archivo &lt;b&gt;Spreadsheet productos.xls&lt;/b&gt; en formato Excel estandard, para los que deseen efectuar sus pruebas sobre una hoja de calculo propia, pues simplemente ingresen a Google Docs y carguen este archivo, por supuesto que adaptado al formato de Google Docs; luego solo basta copiar en la variable &lt;b&gt;&quot;dataSourceUrl&lt;/b&gt;&quot; que corresponda la dirección web de nuestra hoja de claculo de Google Docs (la que se indica en la barra de direcciones de nuestro navegador cuando ingresemos a nuestro documento cargado a Google Docs)&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
Este archivo no forma parte del &quot;proyecto&quot; así que solo debe ser considerado como referencia.. asimismo debemos tener en cuenta que a Google Docs se puede cargar diversos formatos de hojas de calculo los que automáticamente traducirá al formato de Google Docs, como CSV, Openoffice, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
5. En el archivo &quot;SpreadSheet-ExtJs.js&quot;, se encuentran  detalladas cada una de las funciones llamadas desde  &quot;MenuGVisualization_02.js&quot;, que muestran el código de cada Visualización  mostrada, y entre las que tenemos:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Integracion.Google.SpreadSheetExtJs&lt;/b&gt;, que muestra un &quot;grid&quot; completo de nuestra Tabla Google, y para lo cual utilizamos la extensión &quot;Ext.ux.EVisualizationPanel&quot;, detallada en nuestro archivo GVisualizationPanel.js,  y que a diferencia de la extensión &quot;Ext.ux.GVisualizationPanel&quot; que empleamos para adaptar nuestro &quot;store&quot; creado a partir de un &quot;data array&quot;,  y crear nuestra visualización Google; pues, como en este caso vamos a mostrar data Google sobre una visualización Google, no es necesario adaptar la data, y nuestra extensión nos permite mostrar la visualizacion sobre el panel ExtJs, y si indicamos un dataQuery,  realizar la operación SQL que querramos...&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456417840138218114&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6t6MV-nAB9RQxav4FHGaN0WEUHkJIXZU_49SdSBYjtK550fh8moMdksAbJqmbkX5chPEwOOkADm44dISXlEZgjhxZNz0XFwk1Kohrzo1Rp7-Bely6aQz2dtCaM3oEixzsJathaDO7Orym/s400/Int-Google02_MiSpreadSheet.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
En este caso, hemos utilizado como Query: &#39;select * where A is not null&#39;, esto porque, muchas veces, al final de nuestras hojas de calculo podemos poner resúmenes, cálculos especiales, anotaciones, etc... y para que estos no aparezcan en nuestra visualización, pues sencillamente ignoramos dichas lineas (por supuesto que en este caso, implica que no pongamos nada en la columna A de nuestra tabla si se trata de comentarios o resúmenes)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Integracion.Google.SpreadSheet_01&lt;/b&gt;, que muestra un Query un poco mas complejo tal como: &#39;select G ,sum(J), sum(L)+sum(N)+sum(P), count(A) where A is not null and K &amp;lt;&amp;gt; 0 group by G &#39;, al que le hemos agregado otras propiedades como &quot;order by&quot;, &quot;label&quot; y &quot;format&quot;, siendo interesante notar que posteriormente nosotros vamos a utilizar esos &quot;labels&quot; o etiquetas de nuestro Query, como nombre o &quot;id&quot; de nuestras &quot;Grids ExtJs&quot;.&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456421103265185618&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0Ae_wmim3DriV3kBWEjZwEDzimzKKE7J-KQ09dZe1rxDCxxrjfY-_hAwgfAynz2taz1FyMnTKc2qaG_J0F91F_LNBNnTTkH1E7guYXDga_d0nUxJ1qgYMGiwn1YJolwkPLbewZnnEUGlu/s400/Int-Google02_MiQuerySpreadSheet.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Integracion.Google.SpreadSheet_02&lt;/b&gt;, que muestra el mismo Query anterior pero en un formato PieChart de los campos &quot;comprador&quot; y &quot;monto&quot; (que corresponde al monto que nuestro cliente ha comprado a la fecha).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456423973618405410&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZZKI6i9NT-Bo2zpNUGjynYx2cZS_M-ZrjtElDMnogkfU9y0LUG4asvdxbJ0C3ZsOToTD2fnvDwJDs_DoAJhtUwwQeVVwFA0Zu-J-jh2xoOPna1x29h7do2CX6lCE5BAK4A05Hri8AdvrK/s400/Int-Google02_MiPieQuerySpreadSheet.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Integracion.Google.SpreadSheet_03&lt;/b&gt;, que muestra el mismo Query anterior pero en un formato panel que contiene un Table y un PieChart de los campos &quot;comprador&quot;,  &quot;monto&quot;, &quot;cobrado&quot; y &quot;cantidad&quot; (que corresponde a lo que nuestros clientes han comprado a la fecha).&lt;/div&gt;
&lt;div&gt;
Nótese asimismo que he implementado eventos sobre el PieChart y el Table, y al hacer click sobre algún componente del Pie o de la Table se ve reflejada la operación en ambas gráficas.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456425584818246802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL-dSy7qqIid7JVU8ONsaE3KrMotY28uenO-rgni-0QIsM2-2iXQG0zzQl-upoBtqb98Oa9y1zkGd5UluJm-3HdVfc73HLgjo6Dd5UYDsWQ8_cwnVGVW4qLowGR77l5sHptCxtyjErXfQn/s400/Int-Google02_MiPanelSpreadSheet.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Hasta aqui, estamos utilizando la extensión &quot;Ext.ux.EVisualizationPanel&quot; de forma similar a como utilizamos &quot;Ext.ux.GVisualizationPanel&quot; en la 1ra parte de este tutorial para mostrar Visualizaciones Google sobre ExtJs (pero con data de un &quot;store array&quot;), y por supuesto, que podemos utilizar esta extensión para utilizar cualquiera de las visualizaciones Google que mostramos en la &lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery.html&quot; target=&quot;_blank&quot;&gt;Galeria de Visualizaciones Google&lt;/a&gt;, pero utilizando como datasource a las hojas de Calculo de Google.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Resulta también conveniente a este respecto, revisar los siguientes enlaces:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/reference.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/reference.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/querylanguage.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/querylanguage.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/examples.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/examples.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Integracion.Google.SpreadSheet_04&lt;/b&gt;, que utiliza el mismo Query anterior pero en este caso nuestro formato panel contiene graficas ExtJs de los campos &quot;comprador&quot;, &quot;monto&quot; y &quot;cobrado&quot;, y para ello empleamos una nueva extension que hemos llamado &quot;Integracion.Google.GoogleStorePanel&quot;, y cuya principal función va a ser adaptar los datos de la tabla Google al formato &quot;store&quot; de ExtJs, y colocarlas en los paneles correspondientes.&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456431207723921618&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin-OqXXgcytcySvW0aEVl4AlM2Nn18VM-A2fNbK6yGqHm8GFrGVTCelwosnqDhoO0ljc9YWzSZSEqwmzU1iDbIaetZlmJ1el1vQ31gX3S3TqhkOBvuCqpaofRP-rsrnSXF2XekHMLFkYHY/s400/Int-Google02_MiExtJsPanel.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Como mostramos, ExtJs tambien tiene opciones interesantes en sus gráficas o visualizaciones que podriamos utilizar, y una de ellas es la capacidad de poder agrupar filas y columnas en sus &quot;grids&quot;, por ello vamos a mostrar &quot;paso a paso&quot; como poder utilizar una agrupacion de filas en las visualizaciones que siguen a continuación.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Integracion.Google.SpreadSheet_05&lt;/b&gt;, en esta visualizacion vamos a mostrar como deberíamos &quot;crear&quot; nuestros querys para poder agruparlos, por ello, si en este caso, quisieramos agrupar los productos comprados por cada uno de nuestros clientes, y mostrar el detalle de lo vendido, lo pagado, y el saldo correspondiente (por cada producto y del total del cliente), pues nuestro campo de agrupamiento seria el &quot;comprador&quot;, y nuestro Query seria el siguiente:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
select B, G, I, J, L+N+P where A is not null and K &amp;lt;&amp;gt; 0 &lt;/div&gt;
&lt;div&gt;
order by G &lt;/div&gt;
&lt;div&gt;
label B &quot;Producto&quot;, G &quot;Comprador&quot;, I &quot;FVenta&quot;, J &quot;Monto&quot;, L+N+P &quot;Cobrado&quot;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
En este caso detallo las etiquetas, por cuanto esos nombres los vamos a utilizar como campos (fields), de nuestro &quot;store&quot; a crear.&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456434260282081970&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsSlvLmSG9Wc0JlC8B5ZAyL56NkUh1K8PmPVvO-IqeEDF9D3uAETEspb1butITHUxgRGXyx91YAAMoQSNxz3z4la8JgdaYG_-bpNdfEuDJN_fUY0PSdR9ej4jdbbr1pHmaHyTjHffvH_CT/s400/Int-Google02_MiExtJsGrid_1.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;
Estoy mostrando nuestro dataquery en una visualización Google tipo Table utilizando la extensión &quot;Ext.ux.EVisualizationPanel&quot;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Integracion.Google.SpreadSheet_06&lt;/b&gt;, ahora mostramos el mismo dataquery pero sobre un Grid ExtJs, utilizando la extensión &quot;Integracion.Google.GoogleStoreGrid&quot;, que va a realizar la adaptación de la data Google al formato &quot;store&quot; mediante la función &quot;Ext.ux.GoogleStoreAdapter&quot;, que utiliza la función &quot;EditorGridPanel&quot; de ExtJs (utilizo esa función aunque en este caso no editamos los valores, pero he dejado algunas lineas comentadas para que puedan probar que es posible editar los grids ExtJs)&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456437072687316322&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5EiV9SgOT2YCXMpwO_tvYzIUjtjhs0x8Q93Z-OwId_uI1ffjbp6JESK6zStSLvbWkp1PSoBVxIDEnFMStHNcBk0BCmgLfjyWCKhqxUdq21kJmXJJ51xrnCTzpu_DVe9ntFfvgx0CIx27D/s400/Int-Google02_MiExtJsGrid_2.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
Nótese que nuestro adaptador &quot;Ext.ux.GoogleStoreAdapter&quot;, crea un campo &quot;id&quot;, al estilo del formato Json, y que utilizamos como numero o identificador de registro; y asimismo que, nuestro adaptador devuelve el &quot;store&quot; completo de nuestra data requerida (campos y datos incluidos); esto no es lo único requerido para realizar &quot;data grouping&quot;, pero si en la gran mayoría de sus visualizaciones y gráficas.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Integracion.Google.SpreadSheet_07&lt;/b&gt;, ahora si preparamos nuestro Query para poder realizar nuestro agrupamiento, y modificamos nuestro adaptador, al que hemos llamado &quot;Ext.ux.GoogleStoreAdapterComplete&quot;, por cuanto, no solo crea el &quot;store&quot;, sino el &quot;reader&quot; y la &quot;data&quot; (que son componentes que crean al store), y los muestra disponibles para poder utilizarlos en la función &quot;Ext.data.GroupingStore&quot; de nuestra extensión&quot;Integracion.Google.GoogleStoreGrouping&quot; que crea nuestra StoreGrouping Visualization&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456441475374552066&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsHwkDHDCBH-qGT44jIGi2-9IRC-ir2v18FkVWpAbW42RSc5Levdrrn6Xx8AgT-7b9Db4vPLZP5gP-iTkhA9kMc7E7TEQkfeCr6bCuI6r-Mb6Ilgu3QBoEE9gw2K3DyDqoY_LuX5QKgFlc/s400/Int-Google02_MiExtJsGrid_3.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Cabe anotar como un adicional que nuestro adaptador aparte del campo &quot;id&quot; que representa nuestro numero de registro, tambien ha adicionado un campo &quot;resumen&quot; (igual para todos los registros), esto es para poder tener la capacidad de &quot;agrupar&quot; toda la data en un solo bloque y poder mostrar un campo de sumarizacion resumen total tal como indicamos a continuación:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Integracion.Google.SpreadSheet_08&lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5456443085859726146&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFYrDIRxxXISmv0hRy8ojQDhPEYF08ns-koAaQi1Vf9iOR5Zx34ujxQKz6gj2DE_-sq5vphcazJEul5UfQdAWcQkfN73oS4tRUOMlh_oSpSVadzmXY7lb8fONE_1oImucDVaczlBCxDUKH/s400/Int-Google02_MiExtJsGrid_4.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Bueno amigos, hasta aquí nuestra 2da parte de Integración a Google, y hay bastante para probar hasta lo avanzado, pero creo imprescindible que realicen sus pruebas empleando sus propias tablas, por lo que resulta importante que empiecen a revisar Google Docs y inicien sus propias aplicaciones, ejemplos hay demasiados...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Por mencionar solo una, todos los negocios pequeños o personales &amp;nbsp;(micro-empresas), la mayoría están afiliados a sistemas simplificados de declaración y recaudación fiscal, (régimen RUS de la SUNAT aquí en Lima-Peru), y solo requieren para sus declaraciones contables contar con un registro de ventas, que fácilmente se podría desarrollar en hojas de calculo de Google Docs, y que complementado con un registro de Compras y Gastos fácilmente podrían llevar el manejo administrativo contable de un pequeño negocio, &quot;on line&quot; colgado sobre Internet y literalmente &quot;indestructible&quot;, y con posibilidades de consulta remota desde cualquier lugar de la ciudad, del país y del mundo... con lo que se tendría una poderosa herramienta de control para los miles de &quot;emprendedores&quot; que han hecho negocios pero que actualmente tienen bastantes problemas de administración y control..&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Personalmente, en mi experiencia con PYMES realmente he observado muchos negocios que emplean hojas de calculo para sus procesos de administración y control, y asimismo tambien en varios casos les he planteado solución a varios negocios de este tipo (boutiques, salones spa, tiendas o bodegas, etc.), utilizando exclusivamente &lt;b&gt;&lt;u&gt;spreadsheets de Google Docs&lt;/u&gt;&lt;/b&gt;&amp;nbsp;en donde solo se requiere una computadora con acceso a Internet (y que también se pueden complementar a &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/05/web-20-los-negocios-y-las-redes.html&quot; target=&quot;_blank&quot;&gt;soluciones Web2.0&lt;/a&gt; para mercadeo y publicidad de nuestros productos/servicios, y para la fidelización de clientes), ..respecto a este tema, ahora resulta importante destacar que la principal red social de estos momentos: Facebook, había decretado en octubre del 2011 &lt;a href=&quot;http://developers.facebook.com/docs/reference/fbml/&quot; target=&quot;_blank&quot;&gt;la obsolescencia de su lenguaje FBML nativo&lt;/a&gt;, &lt;b&gt;pero para el 01 de Junio de este año 2012 ha programado su cese&lt;/b&gt;, lo que afectará a varios cientos de miles y tal vez millones de negocios y profesionales en todo el mundo, cuyas paginas &quot;fanpage&quot; estan actualmente hechas en lenguaje FBML, utilizando la plataforma de desarrollo de Facebook.. lo que orientará el mercado de desarrollo de las pequeñas empresas hacia otras herramientas como son el empleo del SDK Javascript y &quot;canvas&quot; de Facebook, y por supuesto, hacia Google Docs (ahora Google Drive), y con uso de &quot;Apps Script&quot;..    claro que para varios desarrolladores tal vez estas sean soluciones simples, pero realmente pueden llegar a ser más económicas y efectivas.. e incluso bastante complejas y especializadas.&lt;br /&gt;
&lt;br /&gt;
En lo que respecta a nuestro proyecto&lt;span class=&quot;notranslate&quot;&gt; Integracion Google, &lt;/span&gt;en próximos codelabs vamos a plantear el mismo ejercicio pero sobre otras plataformas...y entre las que me parecen muy interesantes para utilizar tenemos el Back-End PHP+MySQL (muy popular en servicios de Hosting externos y utilizados para instalar y desplegar &quot;servicios sociales&quot; muy difundidos como Wordpress, Elgg, phpBB, Drupal &amp;nbsp;y otros, y que por supuesto, bien podriamos integrar a nuestros desarrollos); tambien tenemos a la combinación JSP(Java)+MySQL, que es bastante empleado para desarrollos &quot;complejos&quot; y profesionales; y asimismo ya dentro del mundo&lt;span class=&quot;notranslate&quot;&gt; Google Cloud &lt;/span&gt;tenemos el &lt;b&gt;&quot;datastore&quot;&lt;/b&gt; de Google App Engine, que involucra el manejo del concepto&lt;span class=&quot;notranslate&quot;&gt; &lt;b&gt;&quot;Big Table&quot;&lt;/b&gt;. &lt;/span&gt;Para todos los casos planteados, tenemos como principal requisito que, primero debe desarrollarse un modelo básico de mantenimiento o gestión de base de datos (altas, bajas, modificación, consulta, impresión, etc), por cuanto, a diferencia de partir de una tabla de Google Docs, en dichas plataformas debe &quot;programarse&quot; el registro y manejo de nuestra data, el cual debe realizarse a través de &lt;u&gt;base de datos&lt;/u&gt;, y nuestra información no debe ser ingresada directamente a las tablas, sino a través de formularios y/o grids editables o la combinación de ambos, los que bien pueden ser diseñados con ExtJs.&lt;br /&gt;
&lt;br /&gt;
Saludos&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:void(rut_facebook_80());&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 5px 0px 0px; text-align: left; width: 40px;&quot; /&gt;Opina en nuestro foro §FB..!&lt;/a&gt;&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;&lt;p id=&quot;pos01&quot;&gt;Navegador: &#39;+wlanguage +&#39;&lt;/p&gt;&#39; );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;script&gt;
window.fbAsyncInit = function() {
FB.init({appId: ‘138465519521758”, status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement(‘script’); e.async = true;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
document.getElementById(‘fb-root’).appendChild(e);
}());
&lt;/script&gt;
&lt;br /&gt;

&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;
&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;

&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/48211062027091563/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/48211062027091563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/48211062027091563'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/04/integracion-google-2da-parte.html' title='Integracion a Google (2da parte)'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s72-c/google_logo.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-276225209075787324</id><published>2010-03-16T07:00:00.000-05:00</published><updated>2013-03-31T14:38:35.651-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><title type='text'>Integracion a Google (1ra parte)</title><content type='html'>&lt;script type=&quot;text/javascript&quot;&gt;
  function my_link(w_url) {
  w_sign = &quot;                                                   IGCodelab Group Team&quot;;
  w_mess = &quot;Dear reader\nYou must register as a member of our community and logged in to download the codelabs (with Friend Connect on top or bottom Bar of the screen)\nof course, after login please try again\n..and thanks so much for your visit to Integracion Google.\n\n&quot; + w_sign;
    if(my_status==true) {
      //document.write(&quot;conectado&quot;);
      window.open(w_url,&quot;_blank&quot;);
    } else {
      //document.write(&quot;NO conectado&quot;);
      alert( w_mess );
    };
    return(w_url);
  };
  function my_link01() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZjYyOGRiYmEtNThmMS00YmRjLWIxYzYtMTU0OGRjNmM5Zjdi&quot;;
    my_link(w_link);
  };
  function my_link02() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEODAxM2ZlODAtOGMzMC00YzIzLThlNjgtMDc1MzAwOWQyNTg2&quot;;
    my_link(w_link);
  };
  function my_link03() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEYTQ5YzY2NWEtMmIxMi00YjZkLTliMDYtNDA3ZDE5OGQ5Y2U0&quot;;
    my_link(w_link);
  };
  function my_link04() {
    var w_link = &quot;https://docs.google.com/open?id=0B9R0zfbQHqoEZWI0NTc0NGMtNWZjZi00MmY3LWJiMGMtMWJiZDViNGY4ZmQ0&quot;;
    my_link(w_link);
  };
  function my_link05() {
    var w_link = &quot;https://docs.google.com/file/d/0B9R0zfbQHqoEUC1kWFpEcmZVVnM/edit&quot;;
    my_link(w_link);
  };
&lt;/script&gt;
&lt;br /&gt;
&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s200/google_logo.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 35px; margin: 20px 15px 0px 0px; width: 100px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Esta es la primera parte de nuestro proyecto utilizando el framework ExtJs, cuyo objetivo es unir las ventajas que éste nos ofrece, junto con el innegable aporte de Google al Desarrollo Web, y así poco a poco, llegar a proponer proyectos de alcance profesional... ocurre que Google no sólo es el popular buscador que todos utilizamos en nuestros ordenadores ó equipos móviles con acceso a Internet, sino que existen muchos servicios como Google Maps, Google Earth, Google Docs, Google Calendar, YouTube, Google Translate, Google Visualizations, y otros cuyo resumen los podemos disfrutar a través en el llamado &lt;a href=&quot;http://code.google.com/apis/ajax/playground/&quot;&gt; Google Code Playground&lt;/a&gt;, vale decir, Google también nos provee diversas &lt;b&gt;API&lt;/b&gt;, principalmente utilizando tecnología  &lt;b&gt;Ajax de Javascript&lt;/b&gt;, los que nos permiten acceder a varios servicios, y utilizarlos y presentarlos en nuestras páginas y desarrollos Web, estas API casi siempre son de uso libre y gratuito (excepto las que involucren  fuerte consumo de recursos de la infraestructura Google como &lt;span class=&quot;notranslate&quot;&gt; Google App Engine&lt;/span&gt;, la nueva&lt;span class=&quot;notranslate&quot;&gt; Google Cloud SQL &lt;/span&gt;ó la API&lt;span class=&quot;notranslate&quot;&gt; Google Language&lt;/span&gt;, la cual desde este Diciembre 2011 es ahora un servicio de paga.
&lt;p&gt;
Planteado de esta manera, en esta oportunidad lo que mostramos es como crear los &lt;span class=&quot;notranslate&quot;&gt;&quot;stores&quot; &lt;/span&gt;que utilizamos con ExtJs, adaptándolos a los formatos de datos de Google, y así poder utilizar Visualizaciones de Google en nuestros desarrollos con ExtJS. Este es un procedimiento realizado a través de una extensión en código Javascript del framework ExtJS denominada &lt;b&gt;GVisualizationPanel&lt;/b&gt;; y asimismo, mediante otra extensión que hemos llamado &lt;b&gt;GVisualizationMaps&lt;/b&gt;, hemos adaptado nuestros datos desde ExtJs para acceder a la API de Google Maps; logrando trabajar con una variedad de visualizaciones Google y de Google Maps en &lt;b&gt;&quot;paneles&quot; ExtJs&lt;/b&gt;(en sus versiones Ext-3.x y ExtJS4); y éste es un primer paso donde mostramos como trabajar con los &quot;stores&quot; de ExtJS, y mostrarlos sobre diferentes visualizaciones y procedimientos Google. Asimismo, estamos presentando todas estas visualizaciones en un &lt;b&gt;TreePanel menú&lt;/b&gt;, en que para acceder a la aplicación utilizamos nuestra Cuenta Google datos de &lt;b&gt;usuario &lt;/b&gt;y &lt;b&gt;password &lt;/b&gt;de acceso, método que corresponde al uso de la API de Autenticación de Cuentas de Google, el que también puede ser replicado para utilizar sobre &lt;b&gt;Google Apps&lt;/b&gt;, sólo permitiendo el acceso a cuentas de los miembros de comunidades específicas.&lt;/p&gt;
&lt;p&gt;
Este codelab fue desarrollado inicialmente con código de la versión Ext-2.x, y se tuvo que realizar pequeñas modificaciones para adaptar nuestras extensiones a la versión Ext-3.x (actualmente nuestro código trabaja bien con la versión Ext-3.4.0, la última de la serie Ext-3.x lanzada por &lt;b&gt;sencha.com&lt;/b&gt;); y ahora también  entregamos nuestro codelab con su código adaptado a la versión Ext-4.0.7, la última versión opensource ExtJs4 disponible a la fecha 15/12/2011 (aunque Sencha ya menciona la próxima liberación de Ext-4.0.8 y el lanzamiento de Ext-4.1 aún en etapa &quot;beta&quot;) ...pueden entonces  ahora disfrutar nuestros  códigos, que hemos intentado documentar lo mejor posible, y así poder observar las diferencias..&lt;/p&gt;&lt;BR/&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #38761d; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;&lt;b&gt;Audiencia&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
Se recomienda que, para entender este &#39;codelab&#39;, tengamos los suficientes conocimientos de ExtJs y desarrollo Web (HTML y Javascript básicamente, y tengamos instalado nuestro servidor HTTP Apache local para pruebas; o en su defecto, haber seguido los capítulos inicales del &lt;a href=&quot;http://www.quizzpot.com/2009/01/ext-js-framework/&quot; target=&quot;_blank&quot;&gt;curso de ExtJs&lt;/a&gt; que nos ofrece Crysfel Villa de México en su pagina del Quizzpot (donde también describen como instalar un servidor local), o al menos haber revisado con detalle nuestro post &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;&quot;empezando desde cero&quot;&lt;/a&gt;.&lt;/p&gt;&lt;BR/&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Material de apoyo&lt;/span&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;span class=&quot;notranslate&quot;&gt;( do click on blue icons to download )&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link01();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;
&lt;b&gt;IntGoogle-01.rar,&lt;/b&gt;&amp;nbsp;Descomprimir este material de apoyo en la carpeta&lt;b&gt; &quot;www&quot; &lt;/b&gt;de nuestro servidor local AppServ u otro compatible Apache-PHP-MySQL (LAMP ó WAMP), y se creara la carpeta &quot;Ynt-Google01&quot; (si no entiende este paso favor consulte &quot;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot; target=&quot;_blank&quot;&gt;empezando desde cero&lt;/a&gt;&#39;). Este código en su archivo &quot;index.html&quot; se debe terminar de configurar correctamente las rutas para la importación de las librerías de ExtJS a la versión con que trabajemos siguiendo los pasos del codelab detallados a continuación. ( código compatible versión ExtJs-3.x ).&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link02();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; title=&quot;download this support material..&quot;  src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle-01.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 2.4Mb ),&lt;/b&gt;&amp;nbsp;Este código corresponde al material de apoyo utilizado para instalar el presente codelab pero en la&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2011/10/webmatrix-la-plataforma-opensource-de.html&quot; target=&quot;_blank&quot;&gt; plataforma de Desarrollo WebMatrix&lt;/a&gt;.&amp;nbsp;El resultado de éste código es idéntico al material presentado primero y totalmente compatible para ejecutar sobre una plataforma LAMP ó WAMP, pero en este caso (por exigencia de la plataforma WebMatrix), el proyecto se presenta completo, es decir, se ha adicionado y configurado para su uso, a la versión &quot;liviana&quot; del framework &amp;nbsp;ExtJs versión 3.4.0, y si se desempaqueta éste código en una carpeta de &lt;b&gt; &quot;www&quot; &lt;/b&gt;en nuestro servidor local AppServ (dentro de otra carpeta que podemos llamar &quot;WebMatrix&quot; ), podremos ver directamente los resultados del ejercicio al llamarlo desde la barra de direcciones de nuestro navegador usando &lt;b&gt; &quot;http://localhost/WebMatrix/Int-Google01&quot;&lt;/b&gt;, y esto ocurre porque el archivo inicio del ejercicio, es en este caso también &lt;b&gt;&quot;index.html&quot;&lt;/b&gt;, el cual como debemos tener presente, es de ejecución automática al llamar a la carpeta que los contienen...&lt;/p&gt;
&lt;div id=&quot;ExtJs4&quot;&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link03();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Int-Google01-ExtJs4.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 1.2Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro mismo &quot;codelab&quot;, pero la codificación utilizada corresponde a&lt;b&gt;&amp;nbsp;ExtJs4 versión Ext-4.0.7,&lt;/b&gt;&amp;nbsp;vigente al 15/12/2011, la cual en esta oportunidad deberá&lt;a href=&quot;http://www.sencha.com/products/extjs/download?page=a&quot; target=&quot;_blank&quot;&gt;&lt;b&gt; &quot;descargar&quot;&lt;/b&gt;&lt;/a&gt;&amp;nbsp;de la pagina oficial de sencha y copiarla en su servidor local de pruebas (en nuestro caso &quot;&lt;b&gt;D:\_Appserv\www\ext-4.0.7&lt;/b&gt;&quot; ...por poner un ejemplo, ruta que debemos considerar en la importación de las librerias ExtJS en &quot;&lt;b&gt;index.html&lt;/b&gt;&quot;).&amp;nbsp;Este codelab corresponde a nuestras experiencias de migración a código ExtJs4, y realmente tuvimos varios obstáculos que superar pues&lt;b&gt; ExtJs4 &lt;/b&gt;es bastante diferente a &lt;b&gt;Ext-3.x;&lt;/b&gt;&amp;nbsp;pero consideramos que ExtJs4 es un gran esfuerzo de&lt;b&gt; sencha.com&lt;/b&gt;&amp;nbsp;para integrar toda la tecnología de Desarrollo Web disponible a la fecha ( incluído HTML5 y CSS3, entre otros );y realmente vale empezar a considerar la versión ExtJs4 para nuestros proyectos, mas aún que a la fecha, ya se han corregido varios &quot;bugs&quot; y otras anormalidades observadas, y no dudamos que el producto va a ser muy eficiente como sus predecesoras  de la versión&lt;b&gt; Ext-3.x&lt;/b&gt;&amp;nbsp; ..aún observamos algunas cosas que no funcionan igual en Google Chrome y Firefox por ejemplo, pero son cosas ahora notoriamente menores y &quot;solucionables&quot; respecto a las versiones anteriores, y el resultado es bastante estable (solo los hemos probado sobre Google Chrome y Firefox reiteramos) ...y en esta oportunidad les mostramos los resultados del uso del novedoso &lt;b&gt; SDK de sencha&lt;/b&gt;&amp;nbsp; y para ello, en las fuentes entregadas deben observar con detalle a los archivos &lt;b&gt; index.html&lt;/b&gt;&amp;nbsp;e&amp;nbsp;&lt;b&gt;index-prod.html&lt;/b&gt;. Al correr el codelab con index.html (de ejecución automática), observarán que el proyecto demora algo al cargar en nuestro navegador.. pero como podrán observar al revisar su contenido que en nuestro desarrollo hemos utilizado el archivo ext-debug.js, el cual nos permite detectar y solucionar todas las declaraciones &quot;require&quot; que necesite nuestro proyecto para la carga dinámica de los componentes de ExtJs que utilizaremos... y por supuesto, al ejecutar el &quot;SDK de Sencha&quot;, se crearán los archivos &quot;app-all.js&quot; y &quot;all-classes.js&quot;, que contienen &amp;nbsp;los elementos de ExtJs y de nuestro código que necesitaremos para instalar &amp;nbsp;nuestro proyecto para producción... el cual por supuesto será notoriamente de menor peso (hasta mas de 50% menos al considerar únicamente los componentes ExtJs que utilizaremos), también será notoriamente más rápido para su carga y respuesta, e incluso nuestro código utilizado será &quot;ofuscado&quot;... El archivo&lt;b&gt;&amp;nbsp;index-prod&lt;/b&gt;&amp;nbsp;no se genera automáticamente y para la prueba deberá llamar directamente al archivo mediante :&amp;nbsp;&lt;b&gt;http://localhost/ExtJs4/Int-Google01-ExtJs4/index-prod.html&lt;/b&gt;&amp;nbsp;&amp;nbsp;(en nuestro caso), pero los cambios que deben efectuarse son realmente sencillos, conviene para ello que revisemos la guía ExtJs4 de sencha.com:&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://docs.sencha.com/ext-js/4-0/#!/guide/getting_started&quot; target=&quot;_blank&quot;&gt;http://docs.sencha.com/ext-js/4-0/#!/guide/getting_started&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;(recomendamos descargar este código en una carpeta independiente a las anteriores que podriamos llamar ExtJs4 por ejemplo).&lt;/p&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link04();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;Int-Google01-MVC.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 1.3Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro mismo codelab, pero la codificación utilizada corresponde a&lt;b&gt;&amp;nbsp;ExtJs4 utilizando la arquitectura MVC de aplicaciones&lt;/b&gt;, la cual es ampliamente recomendada para facilitar la comprensión, mantenimiento y re-utilización de componentes de nuestros proyectos, especialmente si se tratase de proyectos grandes, con la participación de varios desarrolladores, los que finalmente deban integrar sus componentes desarrollados para la elaboración del producto. El ejercicio nos muestra que realmente podemos &quot;desagregar&quot; nuestro proyecto hasta el nivel que querramos... y en nuestro caso, hemos presentado los &quot;models&quot; de nuestras extensiones que adecuan nuestra data a &quot;stores&quot; como clases externas de ExtJs, las cuales incluso presentan sus propios &quot;requires&quot; para la correspondiente carga dinámica de componentes de ExtJs. A este punto vale también nuestra recomendación que revisen con detalle la guía ExtJs4 de sencha.com:
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://docs.sencha.com/ext-js/4-0/#/guide/application_architecture&quot; target=&quot;_blank&quot;&gt;http://docs.sencha.com/ext-js/4-0/#/guide/application_architecture&lt;/a&gt;
&lt;/p&gt;&lt;BR /&gt;
&lt;p&gt;
&lt;span style=&quot;color: red; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;&lt;b&gt;Desarrollo del ejercicio&lt;/b&gt;&lt;/span&gt;&lt;p&gt;
&lt;p&gt;
Luego de descargado nuestro Material de Apoyo, debemos ingresar a las carpetas que se han creado y con nuestro editor de preferencia (como &lt;a href=&quot;http://notepad-plus-plus.org/&quot; target=&quot;_blank&quot;&gt;Notepad+&lt;/a&gt; u otros), como primer paso, revisar con detalle el contenido del archivo&amp;nbsp;&lt;b&gt;&quot;index.html&quot;&amp;nbsp;&lt;/b&gt;, que corresponde a los archivos principales de ejecución automática de cada proyecto al ingresar con nuestro navegador a la carpeta que los contienen (ó el archivo&lt;span class=&quot;notranslate&quot;&gt;&amp;nbsp;01.GVisualization-sample.html &lt;/span&gt;para el caso del primer código, que no es de ejecución automática y debemos seleccionar para su ejecución). Ya dentro de nuestro archivo &quot;html&quot; debemos prestar atención a las etiquetas&lt;span class=&quot;notranslate&quot;&gt; &quot;link&quot;&lt;/span&gt; y&lt;span class=&quot;notranslate&quot;&gt; &quot;script&quot;&lt;/span&gt; que nos permiten &quot;importar&quot; y utilizar en nuestros proyectos, a los componentes y clases javascript del framework ExtJS (como los archivos ext-all.css ó ext-all.js entre otros según la versión ExtJS que trabajemos) ..Debemos entonces verificar que las &quot;rutas relativas&quot; desde la carpeta &quot;www&quot; de nuestro servidor  sean correctas (las que corresponden a la dirección &lt;span class=&quot;notranslate&quot;&gt;&quot;http://localhost&quot; &lt;/span&gt;de nuestro navegador) ..y listo. Ahora si con nuestro navegador ingresamos a&amp;nbsp;&lt;b&gt;&quot;http://localhost&quot;&lt;/b&gt;, y luego a la carpeta &quot;Int-Google01&quot; ( ó las carpetas &quot;WebMatrix/Int-Google02&quot;, &quot;Int-Google01-ExtJs4&quot; ó &quot;Int-Google01-MVC&quot; donde hayamos descargado nuestro material de apoyo), debe aparecer una pantalla como la que se muestra a continuación:
&lt;/p&gt;
&lt;p&gt;
&lt;div id=&quot;longpicture&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5448928392447543314&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyk9VrqNrqh-AQgmAUkFa6OgLhdvY162BL_ljPb4GxYGXKNCGZvtkUKMXzWe8uWPWhlIr03KHa_kYuctLbm3YtTF8s2X5lL0jJj116sIpqELQqTLvNr3nxsaQaMxQtL8sy3u5E8bc-WGfa/s640/Integ-Google01.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;
Esto nos indica que nuestra descarga y configuración de nuestra copia ha sido correcta (y que las rutas indicadas para la importación de las librerías de ExtJs tambien lo son), y ya estamos listos para revisar el material de apoyo instalado en nuestro codelab.. y descubrir como hemos empezado a Integrar ExtJs con Google.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Nota1.-&lt;/b&gt; si no aparece la pagina es probable que no hayamos descargado a ExtJs en la carpeta &quot;www&quot;, como mostramos en &quot;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html&quot;&gt;el potencial de ExtJs&lt;/a&gt;&quot;; o tal vez, estemos usando una versión de ExtJS descargada en una ruta diferente de la indicada en nuestro archivo HTML (..nuestro código proporcionado en la primera descarga, como podrá observar, esta configurado para trabajar con la versión  extjs-3.3.1, y por supuesto ya hemos verificado que esta versión es completamente compatible con la última versión ExtJs-3.4 que es la recomendamos debe utilizar). Reiteramos que no olvide verificar las rutas relativas a &quot;www&quot; de nuestra carpeta AppServ sean correctas a las indicadas en las directivas de nuestros archivos &quot;index.html&quot;, ó el archivo &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; script &lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;notranslate&quot;&gt;&amp;nbsp;01.GVisualization-sample.html&lt;/span&gt; para el caso de la primera descarga.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Nota2.-&lt;/b&gt; si va a realizar directamente sus pruebas sobre un servicio de Hosting Apache-PHP-MySQL externo -como www.x10hosting.com u otro-&amp;nbsp;Cerciórese&amp;nbsp;primero de registrar correctamente su dominio; y asimismo de Registrar su propia &lt;a href=&quot;http://code.google.com/intl/es/apis/maps/signup.html&quot; target=&quot;_blank&quot;&gt;API Key de Google Maps&lt;/a&gt;&amp;nbsp;(si sigue el enlace indicado observará que para acceder a una API Key de Google Maps deberá indicar la dirección web de la website donde será empleada, por supuesto que Ud. podrá registrar varias website o dominios si es necesario), caso contrario, la API de&lt;span class=&quot;notranslate&quot;&gt; Google Contacts &lt;/span&gt;al acceder a su pagina le mostrará respectivos mensajes de error y no le permitirá el acceso a su aplicación; pero en caso de servidores locales Google permite el uso de cualquier API Key registrado con su cuenta Google o cualquiera de las API &quot;públicas&quot; que se utilizan en el&lt;span class=&quot;notranslate&quot;&gt; Google Code Playground&lt;/span&gt;, como es el caso que se utiliza en el material de apoyo de nuestra descarga)
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Nota3.-&lt;/b&gt; Obsérvese que la API de Google Contacs se encuentran definidas en&amp;nbsp;&lt;b&gt;http://www.google.com/jsapi&lt;/b&gt;, y no requiere de un registro personalizado como en el caso de Google Maps (lo mismo ocurre con la&amp;nbsp;&lt;a href=&quot;http://code.google.com/intl/es/apis/loader/signup.html&quot; target=&quot;_blank&quot;&gt;API Ajax de Google &lt;/a&gt;-para usar Javascript y sus framework como JQuery, Dojo, Prototype, etc- , así como Google language, Google Search, Blogger, entre otros (herramientas que utilizamos incluso en el desarrollo de este Blog), y para lo cual se necesita registrar un API Key personalizado asociado al dominio donde se colgara nuestra aplicación, y para obtener estas &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; API Keys &lt;/span&gt;&lt;/b&gt;solo es necesario como requisito tener una cuenta Google (refiriéndonos por ejemplo a una cuenta gmail)
&lt;/p&gt;&lt;BR /&gt;
&lt;p&gt;
&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;Detalle del Modulo.&lt;/span&gt;&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
1. Para poner en funcionamiento el modulo necesitamos en primer lugar, tener una cuenta activa en Google, si no tenemos una, pues sigamos las indicaciones de la pantalla de acceso de &lt;span class=&quot;notranslate&quot;&gt;Google Accounts&lt;/span&gt;, luego de haber seleccionado la opción &lt;span class=&quot;notranslate&quot;&gt;&quot;login&quot;&lt;/span&gt;, y así tener acceso a las opciones del módulo, y observar su funcionamiento.
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5450028192783725554&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUv5i4s6PnYoeIRS6DluPcImkVNVN1_2SVbrE-n3c7JWjDufIZj_wWiOHGXGCnuU_KFYteU3uiAupkgdZTn7SjZU9_Bkq-wj-QdtO-oZwsmfJiKYMWeeAap8FA1B-xI1RWLcX-Zqd4isbg/s640/Int-Google01_Login.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
Si desea revisar algo de teoría respecto a Autenticación de Cuentas Google ya les había sugerido revisar el siguiente link que emplea Javascript para dicho propósito:
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/gdata/docs/js-authsub.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/gdata/docs/js-authsub.html&lt;/a&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;br/&gt;
&lt;h1&gt;&lt;span style=&quot;color:red;&quot;&gt;&lt;b&gt;NOTA IMPORTANTE : &lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;
&lt;/span&gt;Resulta que, si siguen el enlace indicado, podrán observar que el sistema de autorización &quot;AuthSub for JavaScript&quot; de Google ya no se encuentra disponible, por lo que nuestro botón &quot;Login&quot; de nuestro codelab no permite el acceso a nuestro ejercicio.. asimismo, la documentación de Google nos recomienda que utilicemos ahora &quot;OAuth 2.0 for client-side applications&quot;, vale decir, tendremos que utilizar&amp;nbsp;&lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;Google API Javascript Client&lt;/a&gt;&amp;nbsp;para poder acceder a nuestras aplicaciones (u otra API cliente según la plataforma back-end que utilicemos, tal como PHP, Java, .NET, entre otros), pero en nuestro caso, como solo estamos trabajando aplicaciones por el lado del cliente, tendremos que recurrir a la librería cliente para Javascript indicada. 
&lt;p&gt;Por lo que, mientras adecuamos nuestro código, resulta conveniente que NO CONSIDEREN el proceso de acceso a la aplicación de la siguiente manera:
&lt;/p&gt;
&lt;blockquote&gt;&lt;span class=&quot;notranslate&quot;&gt;
 function activando(auth) {&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;var c = Ext.getCmp(&#39;center&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:red;&quot;&gt;//google.accounts.user.login(&#39;http://www.google.com/m8/feeds/&#39;);&lt;/span&gt;&lt;br/&gt; 
 &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:blue;&quot;&gt;auth = true;&lt;/span&gt;&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;c.update(&#39;&#39;);&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;if (auth) { &lt;br/&gt;
 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vistree.enable();&lt;br/&gt;
 &amp;nbsp;&amp;nbsp;};&lt;br/&gt;
 };&lt;br/&gt;
&lt;br/&gt;
within from : MenuGVisualization_01.js&lt;br/&gt;
&lt;/span&gt;&lt;/blockquote&gt;
&lt;/p&gt;
&lt;div id=&quot;oauth20&quot;&gt;&lt;/div&gt;
&lt;br/&gt;
&lt;h1&gt;&lt;span style=&quot;color:darkBlue;&quot;&gt;&lt;b&gt;TRABAJANDO CON OAUTH 2.0 : &lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;
&lt;p&gt;por supuesto, a la brevedad trataremos de actualizar todos nuestros códigos para que trabajen con el protocolo OAuth20, pero como adelanto tenemos este código y su demo que hemos cargado a la plataforma GAE (Google App Engine), pero que usted puede probar en su servidor local de pruebas..
&lt;/p&gt;
&lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;_demos&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;IntGoogle01-Oauth20 Demo..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg9RUM-6XzxJRX6Mto4VSsnhsMsjS_MEzi3D6kxZH142Lm3PYqrlfsMeZ07gRc1AtdJ13sh6bmzHKQWqlk-BOhY2uCSSS6kteN0yjF12snaCte94b-c0LPb1m5xFxy9ZB3_1Ar3yDn1XsL/s24/Demo.JPG&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&amp;nbsp;..now you can test our &lt;a href=&quot;http://igcodelab01.appspot.com/&quot; target=&quot;mydemo&quot;&gt;IntGoogle01-Oauth demo&lt;/a&gt;&amp;nbsp;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;(New!)&lt;/span&gt;&lt;/b&gt;&amp;nbsp;.&lt;br/&gt;
the demo may prompt popup window (you must enable it)&lt;br/&gt;
&lt;p&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #333333; font-family: Verdana, Arial, sans-serif; font-size: 10px; line-height: 16px;&quot;&gt;&lt;a href=&quot;javascript:void(0);&quot; onclick=&quot;javascript:my_link05();&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; color: #888855; margin-bottom: 1em;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot;  title=&quot;download this support material..&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRLHg-vNoLoLkNsW4ofvCsAU2aFLitkG_gk7vEND4CKVwKdmRSN6vkIBB5jyWv9FKiUjoEx4B0wEhGByZnE5cFcE5vH65JWkP7wq1G3K6usdgiWeFOqNg5oT_FC5VCEIlcpaFfx6Ni5R_D/s200/disk.png&quot; style=&quot;border-bottom-color: rgb(153, 187, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(153, 187, 153); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(153, 187, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(153, 187, 153); border-top-style: solid; border-top-width: 1px; cursor: pointer; float: left; height: 12px; margin-bottom: 0px; margin-left: 0px; margin-right: 15px; margin-top: 5px; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px;&quot; /&gt;&lt;/a&gt;&lt;b&gt;IntGoogle01-OAuth20.rar&lt;/b&gt;&amp;nbsp;&lt;b&gt;( 2.06Mb ),&lt;/b&gt;&lt;/span&gt;&amp;nbsp;Este código corresponde a nuestro mismo codelab pero adecuado al protocolo OAuth 2.0 version 2, utilizando la &lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_blank&quot;&gt;&quot;Google API Javascript Client&quot;&lt;/a&gt;, la cual en esta versión, incluso nos permite acceder directamente al email de nuestros usuarios.
&lt;/p&gt;
&lt;p&gt;
&lt;/span&gt;Es importante indicar que la documentación de Google nos indica que ahora debemos trabajar con OAuth 2.0 que se esta convirtiendo en el estándar de autenticacion y autorización para acceder a nuestras cuentas y poder utilizar las API de Google, por ello hemos adecuado nuestro codelab a dicho estandar debiéndose tener en cuenta lo siguiente:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Crear un nuevo proyecto en el &lt;a href=&quot;https://code.google.com/apis/console/&quot; target=&quot;_blank&quot;&gt;Google API Console&lt;/a&gt;, con el nombre mas adecuado que queramos &lt;/li&gt;
&lt;li&gt;Crear una &quot;OAuth 2.0 Client ID&quot; en la opción &lt;b&gt;API Access&lt;/b&gt; de la consola.. allí podremos indicar el nombre de nuestra aplicación y la URL de un logo que la represente ..a continuación debemos indicar el tipo de nuestra aplicación (&quot;web application&quot; en nuestro caso), y la URL de nuestra aplicación (acepta http://localhost ó http://localhost:8080 para trabajar con nuestro servidor local de pruebas, debiendo verificar que se elija correctamente el protocolo &lt;b&gt;&quot;http ó https&quot;&lt;/b&gt; y la ruta completa de acceso a nuestra aplicación para que todo funcione correctamente); por lo que al crear nuestra &lt;b&gt;API Access&lt;/b&gt; se nos indicará la carpeta &quot;Redirect URI&quot; donde se realizará el proceso de autenticación y autorización OAuth 2.0 solicitado (si no ha sido creada debemos editar la configuración y registrar manualmente la carpeta donde se realizará el proceso, puede ser cualquiera dentro de &quot;www&quot; o crear la carpeta &quot;oauth2callback&quot; indicada)..   &lt;/li&gt;
&lt;li&gt;..y finalmente, en la misma &quot;Google API Console&quot; debemos seleccionar a la opción &quot;Services&quot; y activar la &lt;span class=&quot;notranslate&quot;&gt;&quot;Google+ API&quot;&lt;/span&gt; (debe estar &quot;ON&quot; y de color verde), lográndose con ello finalmente crear nuestra &quot;API key&quot; en forma automática.&lt;/li&gt;
&lt;li&gt;y todo ya está listo! ..ahora al volver a la opción &quot;API Access&quot; de nuestra aplicación, ya tendremos disponible nuestro &quot;Client ID&quot; y la &quot;API Key&quot; (dentro de &quot;Simple Access API&quot;), estos datos son las que debemos utilizar y reemplazar en el archivo &quot;index.html&quot; de nuestra aplicación para que todo pueda funcionar correctamente.&lt;p&gt;Conviene también revisar las diferentes opciones que nos presenta la &quot;Google API Console&quot; pues nos puede ser necesarias como crear, modificar, renombrar, eliminar proyectos principalmente.&lt;/p&gt;
&lt;/li&gt;
&lt;p&gt;
&lt;li&gt;&lt;b&gt;..y ahora a probar nuestra aplicación IntGoogle01-Oauth20 !&lt;/b&gt;&lt;/li&gt;
&lt;/p&gt;
&lt;li&gt;y una ultima indicación.. Como estamos trabajando con la Google Maps API v2, tenemos que activar el servicio &quot;Google Maps API v2&quot; en la API consola, y registrar nuestra &lt;b&gt;API Key&lt;/b&gt; al importar la API en nuestro proyecto antes de subirlo a un servicio de hosting con un dominio personalizado y así puedan funcionar los mapas de nuestro proyecto sin mayores inconvenientes (aunque la Google Maps API v2 solo estará activa hasta Marzo 2013, por lo que debemos programar nuestras actualizacion a la API v.3)..por supuesto, al trabajar con nuestro servidor local &lt;b&gt;&quot;localhost&quot;&lt;/b&gt; no se presentan problemas.. el asunto es, como indicamos, al cargar nuestros proyectos a un servicio de hosting externo cualquiera.. como Godaddy, HostGator, myHosting, otros ó sobre plataforma GAE (Google App Engine), que es donde esta corriendo nuestra demo..
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; width=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt9CCbbmHovkXVU333kquj3_txRXMEVz6UsSlIMjjr5KUXPHydoChOTwoDMlOITrkK428TDwo8ljyrv7nuZh6iQrfJfyAnoCIyIZx9_mCNywGYsB2pUsHvStWGHhzTKl277MtAC89B0hm3/s400/Oauth20-0A.jpg&quot; /&gt;&lt;/div&gt;

&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; width=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX4_ttlzmsW5TC_6OyHw9qv_gat1l3_9wGwidrygs5BjcDfCnuJlBkDUnrFrwbVdJIzZ0RLNJBluMplL9g9oGHo7wTPT1SOE1_foCqfey4jxZDJY9ynIkhDeKn1SaaTLd_65yzV3Ot2f8b/s400/Oauth20-01.jpg&quot; /&gt;&lt;/div&gt;

&lt;br/&gt;
&lt;p&gt;
2. Al revisar con mayor detalle los archivos desempaquetados de nuestro material de apoyo encontraremos los siguientes archivos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;01.GVisualization-sample.html (ó index.html), &lt;/b&gt;que contiene las instrucciones y etiquetas HTML necesarias para &quot;llamar&quot; a los componentes del framework ExtJs y a las API de Google, entre otras importaciones y configuraciones.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MenuGVisualization_01.js, &lt;/b&gt;que contiene las instrucciones Javascript en ExtJs que visualizan el Menú y Árbol de opciones de nuestro ejemplo, así como el código que nos permite el acceso a las opciones del Modulo, por medio de la API Contacts de Google.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GoogleCharts.js, &lt;/b&gt;que contiene las instrucciones Javascript en ExtJs, que nos permiten visualizar, en esta primera parte del proyecto, data asignada en simples &quot;array&quot;, pero utilizando las Visualizaciones Google, que representará para nosotros, nuestro primer nivel de Integración al mundo Google.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GVisualizationPanel.js, &lt;/b&gt;que contiene las instrucciones Javascript en ExtJs que construyen las &quot;extensiones&quot; que nos permiten utilizar Visualizaciones Google sobre ExtJs&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GVisualizationMaps.js, &lt;/b&gt;que contiene las instrucciones Javascript en ExtJs que construyen la &quot;extensión&quot; que nos permiten utilizar Google Maps sobre ExtJs&lt;/li&gt;
&lt;li&gt;&lt;b&gt;carpeta icons, &lt;/b&gt;que contiene archivos gráficos GIF, PNG que utilizamos en este ejemplo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
En nuestro archivo HTML resulta curiosa la instrucción mediante el cual, cargamos sin mayor propósito un archivo gráfico (en este caso&lt;b&gt; &quot;icons/mypic.gif&quot;&lt;/b&gt;, aunque pudo ser cualquier otro), y esto es porque uno de los requisitos para la autenticación de una cuenta, es brindar a Google un objeto que pertenezca al entorno del servidor que esta solicitando el servicio de acceso, para identificar su ubicación &amp;nbsp;y detectar si la ruta del mismo se encuentre registrada, caso contrario emitirá un mensaje de seguridad al respecto, pero nos permitirá continuar; pero de eliminarse esta línea, Google sencillamente emitirá un mensaje de error y abortará el proceso.&lt;/p&gt;
&lt;p&gt;
3. Cabe resaltar que en este proyecto estamos utilizando métodos de desarrollo que emplearíamos en proyectos reales como es el uso de &quot;&lt;a href=&quot;http://www.quizzpot.com/2009/03/paquetes-y-namespace/&quot; target=&quot;_blank&quot;&gt;namespace&lt;/a&gt;&quot;, compartiendo las aplicaciones en diferentes archivos js (imagínense si todos nuestro código lo escribamos en un único archivo js. sería inmanejable), así como mostramos el uso de extensiones, funciones &quot;&lt;a href=&quot;http://www.quizzpot.com/2009/11/que-es-el-xtype/&quot; target=&quot;_blank&quot;&gt;xtype&lt;/a&gt;&quot;, manejo de &quot;&lt;a href=&quot;http://www.quizzpot.com/2010/01/border-layout/&quot; target=&quot;_blank&quot;&gt;regiones&lt;/a&gt;&quot; y viewports, entre otros puntos cuyo detalle podemos revisar en diversos capitulos del Curso ExtJs de Quizzpot..&lt;/p&gt;
&lt;p&gt;
4. En el archivo &quot;01.GVisualization-sample.html&quot; (ó archivos &quot;index.html&quot; según nuestra descarga), se encuentran comentadas casi todas las líneas explicando paso a paso que realizan, especialmente las empleadas para la importación de las librerías del framework ExtJs, y las correspondientes a las API de Google.&lt;/p&gt;
&lt;p&gt;
5. En el archivo &quot;GoogleCharts.js&quot;, se encuentran detalladas cada una de las funciones llamadas desde &quot;MenuGVisualization_01.js&quot;, que muestran el código de cada Visualización Google empleada, y entre ellas tenemos:&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Integracion.Google.GoogleTable&lt;/b&gt;, que muestra un simple &quot;grid&quot; &amp;nbsp;a partir de un &lt;b&gt;store&lt;/b&gt; elaborado por un array de datos que muestra los nombres de los empleados de una empresa (tabla que despues utilizamos para mostrar como integrar una visualización tipo organigrama utilizando esta misma data) ..debiendo indicar que todas las opciones vigentes para la Visualización Table de Google, se encuentran detalladas en :&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/table.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/table.html&lt;/a&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5449763878077749026&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSnGcLpSVImFTRjBB3bmkKB9r0DpYff6zM3MYTQ3YF3lwK3y3xKjeT1vKFCAZy8LgyN9Rzb20bm_dvFnGSZ-TsFljoDi5xWvfcfpXC201v3QlMVHrQJS0FUplGAcBQazg1bumOr4CPMqll/s640/Int-Google01_Table.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;b&gt;Integracion.Google.lineChartLink&lt;/b&gt;, que muestra un simple &quot;LineChart&quot; elaborado a partir de otro &lt;b&gt;store &lt;/b&gt;elaborado a partir de las compras y ventas por años de una empresa cualquiera,&amp;nbsp;&amp;nbsp;cuyas opciones de configuración,&amp;nbsp;métodos, manejo de eventos y otros aspectos de esta visualización de Google, los que se encuentran detallados en :&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/linechart.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/linechart.html&lt;/a&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5449764571477866434&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie-03N4spEZJbdn2mVzjwlJ_14uofkRw4tioAm9p00d3Wva7zuUoH1SCQGzD2kWTvC4JPcFnpW-oOixI2lmBZs9erzv6sQlo9BoMzRrOahWt6fa54VTeTW2p48VUWy7Ax2E1FuMeRq4v46/s640/Int-Google01_LineChart.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;b&gt;Integracion.Google.pieChartLink&lt;/b&gt;, que muestra un &quot;PieChart&quot;, cuyas opciones vigentes de configuración, manejo de eventos y otros aspectos se encuentran detalladas en :&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://code.google.com/apis/visualization/documentation/gallery/piechart.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/apis/visualization/documentation/gallery/piechart.html&lt;/a&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5449761409850353442&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK9DjmiF_4SklgmRPAhSCdKZcg1s8XQbSkO8jS8N3t5L9kPDkBBdM4VFWXII9yD28Y-MdlNVloFyFdnA8CJSSwn67phZJNWdYpHvl4dlnyNnNdvNwUkvBuGVjoTt3mY9cWWVK1MdBmz1_-/s640/Int-Google01.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;b&gt;Integracion.Google.gaugesLink&lt;/b&gt;, que muestra ejemplo de uso de Gauges, y cuyas opciones vigentes de configuración y manejo de eventos encuentran detalladas en :&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/gauge.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/gauge.html&lt;/a&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5450006270416540114&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIoHUcpY6ERIaeK-FYFtWivNroiIMLqaQBFtbo9r-7MSuc528bW-IGG5u_1GaFn6DEVT11hktX6huBaaFZFxmNU2bUYYlqRSOQK8IEvSSSHKm7hRkxSwFfx4ybzdjj8XjdoOeSAXkW6cXG/s640/Int-Google01_Gauges.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;b&gt;Integracion.Google.intensityMapLink&lt;/b&gt;, que muestra un ejemplo de uso de Mapas mundiales con &quot;carga de data&quot;... cuyas opciones de configuración y detalle vigentes para esta visualización se encuentran detalladas en :&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://code.google.com/apis/visualization/documentation/gallery/intensitymap.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/apis/visualization/documentation/gallery/intensitymap.html&lt;/a&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5450006876699856914&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibUqXoPBCBBa14-gZy8aj48KkRBhkf8UoBa7qjMAk_Su9rC4RiGD09ydg6IiRqk0OvtNneDTxnQM3kWlE2gtcZecHAOwjHIG1_aHQqTmuLVLALjDbcTN5IgIjAVe7j6brnF14ZKufUt9So/s640/Int-Google01_IntensityMap.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;b&gt;Integracion.Google.orgChartLink&lt;/b&gt;, que muestra un ejemplo de &quot;Organizational Chart&quot; cargado sobre la misma data que se uso en la primera visualización Table, y dividiendo el sector en 02 regiones, y con el adicional de mostrarnos una introducción del manejo de eventos (nótese que al seleccionar un nombre de organigrama se selecciona también su correspondiente en la Tabla, y viceversa). Todas las opciones de configuración y detalle de esta visualización se encuentran detalladas en :&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/orgchart.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/orgchart.html&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5450007382389616498&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgvBeqNZLqHLP9NSPaUHeU2r0Qp8ABZ7HGYw9HrUL14dG8tFh3gnFBH6kJEcjeIb0NlwkKvV54oja1aiAk9MhsZpSBkxO9JxmckLll2T41vnnpkUh5S4AfmsWO2uLA5gtd47L6VWGEaOxG/s640/Int-Google01_OrgChart.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;b&gt;Integracion.Google.myGoogleMaps&lt;/b&gt;, que nos muestra un ejemplo de uso del API de Google Maps, y que al ser tratada como una visualización, nos muestra como utilizarlos dentro de paneles ExtJS, y a los que se ha adicionado una simple barra de botones para agregar algun plano adicional ó una Visualizacion StretView, cuya forma de construcción, configuración, manejo de eventos y otros conceptos son detallados en la documentación del API de Google Maps, la que podemos revisar en :&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/map.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery/map.html&lt;/a&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5450007961572790290&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBU7E7qdgn8cgs3GJ5HOXz3FioQGlNzUW1UmSGDZyPBYhPllDLxQcAJb-FUuwJjuYCFk_1wk5x3W0V3Xgn3iwqdqhzVRmChaF9jNuksFfed4oh0inFMVX6dJSDBvDuOKBAgU-dzpKAqMur/s640/Int-Google01_GMaps.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
Cabe reiterar asimismo, que para poder utilizar Google Maps hay que utilizar una API Maps Key, y que preferentemente deba ser propia (para que Google nos registre, mida la cantidad de uso de nuestras aplicaciones y &quot;nos vaya reconociendo&quot;)... la API key que estamos utilizando en este codelab corresponde a una API Key &quot;pública&quot; tomada de los ejercicios del Code Playground la que debe funcionar sin ningun problema en nuestros servidores locales.&lt;/p&gt;
&lt;p&gt;
Estas son solo alguna de las opciones de Visualización Google que les estamos presentando, pero en realidad Google tiene varias opciones que vale la pena revisar en :&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/gallery.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Por supuesto que ExtJs tiene sus &lt;a href=&quot;http://www.quizzpot.com/2009/05/graficas-en-ext-js-3/&quot; target=&quot;_blank&quot;&gt;propias visualizaciones&lt;/a&gt;, y algunas son muy interesantes y potentes, como es el caso de las  opciones de &quot;agrupación&quot; y &quot;filtrado&quot; de Tablas (que mostraremos posteriormente en nuestro siguiente &quot;codelab&quot;), pero es interesante mostrar que podemos Integrar las opciones Google dentro de ExtJs sin mayores contratiempos, y ello lo efectuamos a través de las &quot;extensiones&quot; detalladas en :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;GVisualizationPanel.js&lt;/b&gt;, para las Visualizaciones Google en general (compatible para utilizar con cualquier visualizacion detallada en la galería indicada), y cuyas generalidades de implementación, sin considerar ExtJs, podemos empezar a revisar en: &lt;a href=&quot;http://code.google.com/intl/es-ES/apis/visualization/documentation/index.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/visualization/documentation/index.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;GVisualizationMaps.js&lt;/b&gt;, para la Visualizacion de Google Maps en particular, por cuanto esta es una implementación del API de Google Maps, cuyas generalidades podemos empezar a revisar en: &lt;a href=&quot;http://code.google.com/intl/es-ES/apis/maps/&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/maps/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;BR/&gt;
&lt;p&gt;
&lt;span style=&quot;color: red; font-family: Arial, Helvetica, sans-serif; font-size: x-large;&quot;&gt;&lt;b&gt;Algunas conclusiones&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
Esta es la primera parte del proceso de Integración Google utilizando al entorno de desarrollo del framework ExtJs, y su objetivo es mostrar que dentro del entorno Google es posible utilizar nuestras cuentas (direcciones de gmail en este caso), como nombre de usuario - con su respectivo password - para poder tener acceso a nuestros proyectos (a nuestro modulo de visualizaciones en este caso), del mismo modo como lo hacemos con nuestros programas y sistemas de escritorio, algo que debemos tomar muy en cuenta cuando se trabaja por ejemplo con &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;Google Apps&quot;&lt;/b&gt;&lt;/span&gt;, que es actualmente una opción que esta empezando a ser muy utilizada por empresas y organizaciones de todo tipo. Asimismo, este ejercicio permite mostrarnos un modelo simplificado de un Menu Tree-panel bastante utilizado en desarrollos web.&lt;/p&gt;
&lt;p&gt;
En nuestro próximo ejercicio detallaremos como Integrarnos con Google utilizando &lt;span class=&quot;notranslate&quot;&gt;Google Spreadsheets &lt;/span&gt;como fuentes de datos (hojas de calculo), con un caso practico que nos permita empezar con el manejo de &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;datasources&quot;&lt;/b&gt;&lt;/span&gt; y bases de datos de uso más difundido como MySQL u otros.&lt;/p&gt;
&lt;p&gt;
y finalmente como podrán observar, nuestro codelab esta completamente desarrollado con herramientas Javascript, y en particular, en nuestro código que muestra el uso del protocolo OAuth 2.0 utilizamos las siguientes herramientas:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/wiki/GettingStarted&quot; target=&quot;_link&quot;&gt;Google API Javascript Client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jquery.com/&quot; target=&quot;_link&quot;&gt;JQuery framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sencha.com/&quot; target=&quot;_link&quot;&gt;ExtJS framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://google-developers.appspot.com/chart/interactive/docs/quick_start&quot; target=&quot;_link&quot;&gt;Google API Visualizations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;algunas herramientas de Geolocalización básica, como &lt;a href=&quot;http://www.searchnc.com/atlas.html&quot; target=&quot;_link&quot;&gt;Atlas geolocation service&lt;/a&gt; y &lt;a href=&quot;http://developer.yahoo.com/yql/console/&quot; target=&quot;_link&quot;&gt;YQL service&lt;/a&gt;, que podríamos afinar incluso utilizando HTML5 Geolocation (pero este ultimo caso también requiere autorización del usuario)&lt;/li&gt;
&lt;/ul&gt;
Que ventaja obtenemos? ..teniendo toda nuestra información requerida en la capa cliente (variables javascript en este caso), podremos &quot;grabarla&quot; en la base de datos de nuestra elección, y utilizando un lenguaje de programación de lado del servidor de nuestra preferencia (PHP, Java, Python, nodeJS, DART, Go, otros.)..vale decir, crear nuestra &quot;comunidad&quot; anexa a nuestra organización empresa ó emprendimiento; y empezar a interactuar con ella.. y por poner un ejemplo, en nuestro caso, al tratarse nuestro proyecto de una comunidad bastante especializado, que tal vez no llegue a millones de usuarios, ó que definitivamente tomaría bastante tiempo para llegar a ese nivel, hemos elegido como Back-End: &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2012/09/lets-talk-about-google-apps-script.html&quot;&gt;Google Apps Script(GAS)&lt;/a&gt; y las &lt;b&gt;Google Spreadsheets&lt;/b&gt;.. vale decir, cada vez que un usuario se registre en nuestros demos, su información básica de contacto será grabada en una hoja de calculo con una capacidad de almacenamiento máxima de 400,000 celdas vigente en el momento, suficiente para iniciar nuestra primera experiencia &lt;b&gt;Social Media management&lt;/b&gt; con nuestros propios seguidores.. 
&lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
Saludos&lt;br /&gt;
@Mlaynes&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:void(rut_facebook_70());&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 5px 0px 0px; text-align: left; width: 40px;&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;javascript:void(rut_facebook_70());&quot;&gt;Opina en nuestro foro §FB..!&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;&lt;p id=&quot;pos01&quot;&gt;Navegador: &#39;+wlanguage+ &#39;&lt;/p&gt;&#39; );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
  
&lt;/script&gt;
&lt;script&gt;
window.fbAsyncInit = function() {
FB.init({appId: ‘138465519521758”, status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement(‘script’); e.async = true;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
document.getElementById(‘fb-root’).appendChild(e);
}());
&lt;/script&gt;


&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;
&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot; data-num-posts=&quot;15&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;

&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/276225209075787324/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html#comment-form' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/276225209075787324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/276225209075787324'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html' title='Integracion a Google (1ra parte)'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s72-c/google_logo.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-3413330919038569455</id><published>2010-03-13T14:27:00.000-05:00</published><updated>2012-01-14T19:48:24.391-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="art"/><title type='text'>Google busca bronca</title><content type='html'>&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;Un comentario respecto al articulo &quot;Google busca bronca&quot; escrito por Sergio LLerena, y publicado por la revista Somos del diario ElComercio, Lima PE..&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKqh6TZBr0Tj176ecwCSmcFyXm2BlMy1FZ_tsR9PCctvBh22l5UO85UKUpAaHMToASREGe80BwqN2kox_BBDgsdxYs3MEWC2tit9iWTLbcEGkT62XzZoZ0F99exftGW41kJ5WrpWV_JjaR/s1600/35+Google.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKqh6TZBr0Tj176ecwCSmcFyXm2BlMy1FZ_tsR9PCctvBh22l5UO85UKUpAaHMToASREGe80BwqN2kox_BBDgsdxYs3MEWC2tit9iWTLbcEGkT62XzZoZ0F99exftGW41kJ5WrpWV_JjaR/s400/35+Google.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKYZ8U-yFWw5OuTdE090QagpbatC9qg2I9bzrpjHQp05moAz8eXfGHBFa8Sf0jX5t9pVWo3HeJW_xf_qt7IlSL4WtKii_VZBK1yyetKdexDoOa4J7h25PgJEK9HT05xyl4JlCBKP2i_RyD/s1600/bronca-google.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKYZ8U-yFWw5OuTdE090QagpbatC9qg2I9bzrpjHQp05moAz8eXfGHBFa8Sf0jX5t9pVWo3HeJW_xf_qt7IlSL4WtKii_VZBK1yyetKdexDoOa4J7h25PgJEK9HT05xyl4JlCBKP2i_RyD/s400/bronca-google.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;Aunque el articulo hace más referencia respecto a lo que son los navegadores (los que son nuestra puerta de entrada a Internet), pues tanto Google como Microsoft no solo desarrollan navegadores, pues como algo se menciona, también estamos hablando de sistemas operativos (Windows 7 vs Chrome OS), suites (MS-Office vs Google Docs), redes sociales (Windows Live vs Google Buzz), lenguajes de programación (VB, .Net, ASP vs Go, Phylon, Android, y todo el mundo de desarrollo opensource: como HTML, Java, PHP, Javascript, etc. de los que Google es un verdadero promotor), y muchos otros productos .. pues es importantísimo resaltar que mientras Microsoft es software &quot;propietario&quot;, por lo que hay que pagar para poder utilizarla; pues Google Inc. es una marca registrada cuyos productos informáticos en su mayoría operan bajo licenciamiento opensource o de código abierto, es decir, por lo que &quot;no tenemos que pagar para poder utilizarla&quot;, y como ya es una realidad, resulta estupendo ver como dicho software, es tanto o mejor que por los que teníamos que pagar.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih9emp9BntpMGxA7CzfvZL17plttFypl06isBMlS1ZVd09lmX-BfJLA3TtH8y4Md7w1thx842M1VPYyIl_8bB5BsZI_xImU7ZG50RKpWqN7e4dNxDTn9MV8p5p5N6fngTweuqu42-oSDFr/s1600/33+mundoGoogle.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;372&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEih9emp9BntpMGxA7CzfvZL17plttFypl06isBMlS1ZVd09lmX-BfJLA3TtH8y4Md7w1thx842M1VPYyIl_8bB5BsZI_xImU7ZG50RKpWqN7e4dNxDTn9MV8p5p5N6fngTweuqu42-oSDFr/s640/33+mundoGoogle.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;Y bueno, bajo estos conceptos, esto no solo es una pelea.. sino una verdadera guerra por la supervivencia; Google, como indica el articulo, no solo es un producto post-Internet, sino que, como Facebook, Twitter, Netlog, etc. y miles de proyectos  (en la destaca por brillo propio el proyecto GNU/Linux y sus múltiples distribuciones), todos ellos son hijos de la &quot;era opensource&quot; (que poco o nada utilizan de la tecnología microsoft), y no les interesa y no les resulta necesario cobrar a sus &quot;usuarios&quot;,  por el contrario, los invita a participar en sus desarrollos y pruebas, y por supuesto que tienen ingresos. Google es también un gigante multimillonario, pero su negocio no es vender software, sino publicidad, aunque ahora le entra a todo lo que es tecnología, incluido las comunicaciones (telefonía celular), la energía, y un largo etc..&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxXZdO5E898PZSND3RvTGsPiLkhH5YDzzwCvC0whOYP_9w1jXx7Dl7qZ9xvnbQi3wsrFmzJs_02czhqOyz_K8Fz4WooQS8XgfdW9YTl3yXStbLKHR_x0KYLfYR4tiKNW5AkDDU8SPxmTnR/s1600/34+cloudComputing.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;479&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxXZdO5E898PZSND3RvTGsPiLkhH5YDzzwCvC0whOYP_9w1jXx7Dl7qZ9xvnbQi3wsrFmzJs_02czhqOyz_K8Fz4WooQS8XgfdW9YTl3yXStbLKHR_x0KYLfYR4tiKNW5AkDDU8SPxmTnR/s640/34+cloudComputing.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;El mundo de la informática ha cambiado y va a seguir cambiando nuestras formas de ver el mundo y &quot;hacer negocios&quot;, pero creo que ya es hora que se empiece a tomar en serio al mundo del software libre, que se mueve muy bien dentro del ambiente universitario (ya se merece su artículo!!), en donde quienes participamos de este enfoque, nos preocupa más investigar, desarrollar, promover y mejorar aplicativos que sean &quot;útiles&quot; para su uso comercial, social, gubernamental ó lúdico, sin pensar si nos alcanza la billetera para adquirir las herramientas para poder crearlas.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;script&gt;
window.fbAsyncInit = function() {
FB.init({appId: ‘138465519521758”, status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement(‘script’); e.async = true;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
document.getElementById(‘fb-root’).appendChild(e);
}());
&lt;/script&gt;

&lt;br /&gt;
&lt;div id=&quot;fb-root&quot;&gt;
&lt;/div&gt;
&lt;script src=&quot;http://connect.facebook.net/en_US/all.js#xfbml=1&quot;&gt;
&lt;/script&gt;&lt;fb:comments href=&quot;http://mlaynessanchez.blogspot.com/2010/03/google-busca-bronca.html&quot; num_posts=&quot;15&quot; width=&quot;475&quot;&gt;&lt;/fb:comments&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/3413330919038569455/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/03/google-busca-bronca.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/3413330919038569455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/3413330919038569455'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/03/google-busca-bronca.html' title='Google busca bronca'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKqh6TZBr0Tj176ecwCSmcFyXm2BlMy1FZ_tsR9PCctvBh22l5UO85UKUpAaHMToASREGe80BwqN2kox_BBDgsdxYs3MEWC2tit9iWTLbcEGkT62XzZoZ0F99exftGW41kJ5WrpWV_JjaR/s72-c/35+Google.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-4477545377313347796</id><published>2010-03-13T04:00:00.000-05:00</published><updated>2013-03-31T13:38:28.786-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="inicio"/><category scheme="http://www.blogger.com/atom/ns#" term="start"/><title type='text'>Un avance de Integración a Google</title><content type='html'>&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461157504050576802&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s200/google_logo.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 35px; margin: 22px 15px 0px 0px; width: 100px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
Habiendo revisado con mas detalle lo correspondiente al mundo Google, observo que para facilitar su aprendizaje e integración al mundo Web, podría ser conveniente seguir los siguientes pasos:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;P&gt;
1.- Aprender ahora si a utilizar las API Ajax de Google&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;Las API AJAX de Google nos permiten crear sitios web completos y dinámicos utilizando únicamente Javascript y HTML. Pudiéndose insertar mapas, graficos o un cuadro de búsqueda dinámico en tu sitio web, o descargar feeds con tan solo unas líneas de JavaScript:
&lt;/P&gt;
&lt;P&gt;
para revisar las diferentes opciones ofrecidas:&lt;/P&gt;&lt;P&gt;
&lt;a href=&quot;https://developers.google.com/products/&quot; target=&quot;_links&quot;&gt;https://developers.google.com/products/&lt;/a&gt;&lt;/P&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpGU_OvLQQ84mOujg8kUmBsgFyz8X5u9HMSXkMqLfz7VdsOJU-7FjgrJMBV5mcBBLGyqIY8La6twWtEBf4m8FCLfKOoUUfkSXXtCrKUo4nUBs_aqwgLNc51HBbiwh2KanFm_XvwzU_mfOp/s640/GoogleProducts.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;P&gt;
para revisar la parte práctica :&lt;/P&gt;
&lt;P&gt;&lt;a href=&quot;http://code.google.com/apis/ajax/playground/&quot; target=&quot;_blank&quot;&gt;http://code.google.com/apis/ajax/playground/&lt;/a&gt;&lt;/P&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR4SxWV1Bldh53Ca8PxWXchY6eJD20LjN-aMcC5rgkCE4RqrHJJaSGbjOjBhgMNMOrYWDmCMN0iuM8y8o1uqIAHFTumihZuEenEVKEU1Lc_7ZYtvD8mQIR2rveOSf2RXi1QskNfZj6TJcV/s640/19+GooglePlayground.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;P&gt;
Para que hagamos nuestras pruebas, solo basta con copiar los archivos html que nos presenta el&lt;span class=&quot;notranslate&quot;&gt; Code Playground &lt;/span&gt;de Google, y grabarlos con nombres apropiados en una carpeta que podríamos llamar &quot;Apicode&quot; dentro de &quot;www&quot; de nuestro servidor local ( &lt;b&gt;htpp://localhost&lt;/b&gt; ), y ejecutarlos con nuestro navegador, como hacemos con los ejemplos del &lt;a href=&quot;http://www.quizzpot.com/2009/01/ext-js-framework/&quot; target=&quot;_links&quot;&gt;curso ExtJs de Quizzpot&lt;/a&gt;.&lt;/P&gt;
&lt;p&gt;
El&lt;span class=&quot;notranslate&quot;&gt; Code Playground &lt;/span&gt;de Google es también bastante interesante porque tiene entre sus opciones la posibilidad de cambiar el código y hacer nuestras propias pruebas desde el mismo entorno&lt;span class=&quot;notranslate&quot;&gt; Playground, &lt;/span&gt;y no presenta mayores dificultades para su manejo y comprensión; no ocurre lo mismo con el entorno de desarrollo de&lt;span class=&quot;notranslate&quot;&gt; Gadgets &lt;/span&gt;de Google GGE (el&lt;span class=&quot;notranslate&quot;&gt; Google Gadget Editor), &lt;/span&gt;el cual si es un poco problemático para usar, y que espero que cuando veamos las&lt;span class=&quot;notranslate&quot;&gt; API Gadgets &lt;/span&gt;de Google, pues ojala haya mejorado algo, bueno.. tambien algunos tips para trabajar y no tener mayores problemas.&lt;/P&gt;
&lt;P&gt;
2.- De las&lt;span class=&quot;notranslate&quot;&gt; API Visualization &lt;/span&gt;de Google en particular resulta interesante observar que se puede integrar estas visualizaciones (Herramientas de&lt;span class=&quot;notranslate&quot;&gt; Google Charts), &lt;/span&gt;a diferentes fuentes de datos, lo que podemos revisar con mas detalle en:&lt;/P&gt;
&lt;P&gt;
&lt;a href=&quot;https://developers.google.com/chart/interactive/docs/dev/implementing_data_source/&quot; target=&quot;_links&quot;&gt;https://developers.google.com/chart/interactive/docs/dev/implementing_data_source/&lt;/a&gt;&lt;/P&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjekHN4ah7-I3nAcv9j2BZ0KOxpkI7sXiZ0EMvwU-XD6T40BFyym8ZHEViffL-ofdtb9SxuNBaH3W59GDlAWVR3lHqM8b7GH7ujegT_WwHdi7dMAhijJPZBa-G2YyjA5FnucXazyFFZgcya/s640/ImplementingDatasource.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;P&gt;
...pero como tal vez nos resulte un poco complicado entender todas las opciones de fuente de datos disponibles para investigar, y tal vez sea conveniente empezar utilizando&lt;span class=&quot;notranslate&quot;&gt; &lt;b&gt;&quot;spreadsheets&quot;&lt;/b&gt; (&lt;/span&gt;hojas de Cálculo) de Google Docs como fuente de datos :&lt;/P&gt;&lt;P&gt;
&lt;a href=&quot;https://developers.google.com/chart/interactive/docs/dev/implementing_data_source&quot; target=&quot;_links&quot;&gt;https://developers.google.com/chart/interactive/docs/dev/implementing_data_source/&lt;/a&gt;&lt;/P&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRl51KVIP3CsRPMiT6XLdlHCsO7_kl_lb2N5iV-tEtEfmxPYSE2gaohvLu2mrRLzo9GxlEU7OANKggq15efMlQWZnkv6Dn5BtkoKnUgyeQyfwEuvcKpRNWhOTM7s2_J8pL2xtrLUmLXgmn/s640/SpreadsheetsAsDatasource.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;P&gt;
3.- Después de revisar toda lo indicado en el punto anterior, resulta necesario probar algunos ejemplos para ver como implementar una fuente de datos, y como ya hemos sugerido resulta más fácil y conveniente empezar utilizando&lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt; Spreadsheets&lt;/b&gt;&amp;nbsp;&lt;/span&gt;de Google Docs como fuente de datos, así que revisemos con detalle los siguientes ejemplos del Code Playground :&lt;/P&gt;
&lt;P&gt;
&lt;a href=&quot;http://code.google.com/apis/ajax/playground/?type=visualization#data_source_request&quot; target=&quot;_blank&quot;&gt;http://code.google.com/apis/ajax/playground/?type=visualization#data_source_request&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;
&lt;a href=&quot;http://code.google.com/apis/ajax/playground/?type=visualization#using_the_query_language&quot; target=&quot;_blank&quot;&gt;http://code.google.com/apis/ajax/playground/?type=visualization#using_the_query_language&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;
&lt;a href=&quot;http://code.google.com/apis/ajax/playground/?type=visualization#more_query_options&quot; target=&quot;_blank&quot;&gt;http://code.google.com/apis/ajax/playground/?type=visualization#more_query_options&lt;/a&gt;, aunque esta ultima opción utiliza formatos predeterminados de Google.&lt;/P&gt;
&lt;P&gt;
El empleo de las Hojas de Calculo Google resulta bastante interesante por cuanto, &lt;b&gt;en primer lugar&lt;/b&gt;, son ejemplos sencillos y fáciles de probar (sin necesidad de haber instalado un motor de base de datos como MySQL, SQL Server, Firebird, Oracle, etc); y con ella también podemos fácilmente crear nuestras propias tablas en Google Docs, y utilizarlas  en nuestras pruebas (y así podremos realmente observar la funcionalidad de utilizar&lt;span class=&quot;notranslate&quot;&gt; Google Spreadsheet &lt;/span&gt;como fuente de datos); &lt;b&gt;y en segundo lugar&lt;/b&gt;, porque para un pequeño negocio, facilmente se puede llevar su manejo administrativo empleándolas en lugar de base de datos como MySQL, SQLite, PostgreSQL, Oracle o SQLServer; cuya integración para su uso son algo más complejos, y fácilmente ya podríamos iniciarnos en el manejo de aplicaciones comerciales prácticas y sencillas, que bien ya podríamos implementar.&lt;/P&gt;
&lt;P&gt;
4.- Ya en este punto resulta necesario empezar con una revisión de la API de Cuentas de Google por lo es bueno ir leyendo:&lt;/P&gt;
&lt;P&gt;
&lt;a href=&quot;https://developers.google.com/accounts/&quot; target=&quot;_links&quot;&gt; https://developers.google.com/accounts/ &lt;/a&gt;
&lt;/P&gt;
&lt;br&gt;
&lt;P&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQRj4oWfFLR4b4eU6RTNRGHyQrNYpFhW6nnZtASALZiLonHUIBSX2L1VuhqT0ljeIPSC081dLA2UcPO7FTpzkfGbCm-ObAImPYG0HK2dLVsM4DwVurN4Q-cRklN-W86z45_ZI8-IwPaxZa/s640/AccountAuthorization.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;/P&gt;
&lt;P&gt;
Esto con el objeto de aprender a utilizar nustra Cuenta Google para Autenticarnos y Autorizar el acceso o uso de nuestros datos personales, el acceso a nuestras aplicaciones, a nuestras hojas de calculo y otros, a los que se debe permitir su uso ó ser revisadas, solamente por las personas quienes se les quiera dar acceso (además de compartir tablas con atributos de modificación o solo lectura dentro de los entorno de Google Docs ó Google Apps), resultando con todo ello que nuestras aplicaciones sean mas interesantes.
&lt;/P&gt;
&lt;P&gt;
Téngase presente que a este nivel, ya nos resulta imprescindible tener nuestra Cuenta Google propia (la podemos crear utilizando nuestra cuenta hotmail u otra que utilicemos, pero conviene una gmail por cuanto nos permite el acceso a todas los elementos y herramientas de&lt;span class=&quot;notranslate&quot;&gt; Google+), &lt;/span&gt;por lo que es recomendable crear una cuenta &quot;gmail&quot; nueva, con nuestro nombre y datos verdaderos, diferente a las que tengamos para otros usos, y anexar nuestras otras cuentas a esta nueva cuenta.&lt;/P&gt;
&lt;P&gt;
Anteriormente, era importante prestar bastante atención en revisar lo correspondiente al Protocolo de Uso de AuthSub en la Biblioteca de datos de Google de JavaScript de cliente, en el siguiente link:&lt;/P&gt;
&lt;P&gt;
&lt;a href=&quot;http://code.google.com/intl/es-ES/apis/gdata/docs/js-authsub.html&quot; target=&quot;_blank&quot;&gt;http://code.google.com/intl/es-ES/apis/gdata/docs/js-authsub.html&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;
..pero como podrán observar, este servicio ya no se encuentra disponible, y esto porque Google, en una gran cambio que ha efectuado respecto al manejo de sus cuentas, a implementado como elemento principal de toda su plataforma, el uso del protocolo OAuth (OAuth v2.0 en particular), por lo que muchos otros protocolos implementados anteriormente por Google ya han sido descartados.. pero Oauth v2.0 no solo esta disponible para diversos clientes como PHP, Java, Python, Go, NodeJS.. sino que también para Javascript, lo que nos permite su uso por el front-side en cualquier aplicación o desarrollo web, por lo que conviene empezar con revisar el siguiente enlace:
&lt;/P&gt;
&lt;P&gt;
&lt;a href=&quot;https://code.google.com/p/google-api-javascript-client/&quot; target=&quot;_links&quot;&gt; https://code.google.com/p/google-api-javascript-client/&lt;/a&gt;
&lt;/P&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6qEjl7Rj9I6EGz2hTHS-V2Nkpb8Vn6P860SicJ0Tm6SEWQGSeCEd3n6wKsEtducpyK5Nb6Y4nR1uEPB53R9LV4jZlagfZMo5_VmYVihdkXNNOf7S6l1qZ3-YBCJIKP1wKD4xfSQLD56jd/s640/GoogleApiJavascriptClient.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;P&gt;
Bueno, a estas alturas ya nos debe resultar mas sencillo comprender todo el manejo del entorno de Google en lo que respecta a sus herramientas e integracion a aplicaciones Web... las que iremos profundizando poco a poco en los siguientes posts, donde les voy a presentar un ejemplo, completo y sencillo que ya tengo casi terminado, de como integrar todas estas herramientas de Google dentro de una aplicación desarrollada con ExtJS, que incluya autenticacion de cuenta Google (para acceder al modulo), empleo de visualizaciones Google dentro de paneles ExtJS, empleo de&lt;span class=&quot;notranslate&quot;&gt; Spreadsheets, &lt;/span&gt;uso indistinto de Grids Google y Grids ExtJS, utilizando por el momento a&lt;span class=&quot;notranslate&quot;&gt; Google Spreadsheet &lt;/span&gt;como fuente de datos.&lt;/P&gt;
&lt;P&gt;
Pero no se preocupen si por ahora solo estamos utilizando las hojas de calculo de Google para empezar nuestro proceso de integración a integrarnos a Google; también vamos a presentar más adelante, un ejemplo detallado y sencillo de conexión utilizando como back-end PHP-MySQL, Java-MySQL, utilizando el datastore &quot;big table&quot; de la plataforma Google App Engine (GAE); y para lo cual utilizaremos la fuente de datos que instalaremos en nuestro Servidor Local de Pruebas, como Appserv (vea el post &quot;&lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/por-donde-empezar.html&quot;&gt;empezando desde cero&lt;/a&gt;&quot;), y otros que iremos descubriendo..
&lt;/P&gt;
&lt;P&gt;
Como siempre no duden en postear cualquier inconveniente o interés que tengan.. y comentarnos sus pruebas y desarrollos, ahora en nuestras cajas de comentarios Facebook que hemos añadido a cada una de nuestras entradas.&lt;/P&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;javascript:void(rut_facebook_60());&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0 solid blue&quot; id=&quot;BLOGGER_PHOTO_ID_5461483657647786530&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil_fSv87mnJB2SZa1uKAPO4DmuFQV-e9FlLy12UIp1rCg4AiVJ96xVUjdx7XQPwKJCulI0QuQfhyphenhyphenvggUsNW4KTjqZTusl45vTHI0WffHANDu0TF0emcomdt6nJcMm14-YD8XIahSKK3zAD/s200/lgFacebook.jpg&quot; style=&quot;cursor: hand; cursor: pointer; display: block; float: left; height: 40px; margin: 0px 0px 0px 0px; text-align: left; width: 40px;&quot; /&gt;Opina sobre las herramientas y API de Google&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;script&gt;
wlang=navigator.language;
//document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;&lt;p id=&quot;pos01&quot;&gt;Navegador: &#39;+wlanguage +&#39;&lt;/p&gt;&#39;);
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
&lt;/script&gt;
&lt;script&gt;
window.fbAsyncInit = function() {
FB.init({appId: ‘138465519521758”, status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement(‘script’); e.async = true;
e.src = document.location.protocol + ‘//connect.facebook.net/en_US/all.js’;
document.getElementById(‘fb-root’).appendChild(e);
}());
&lt;/script&gt;
&lt;br /&gt;


&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;
&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2010/03/un-avance-de-integracion-google.html&quot; data-num-posts=&quot;15&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/4477545377313347796/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/03/un-avance-de-integracion-google.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/4477545377313347796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/4477545377313347796'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/03/un-avance-de-integracion-google.html' title='Un avance de Integración a Google'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRTruQ45c4j5lX9Umh7JoY45wytMYQqqgYhTEH6QzM34Ys7kz94MdXhIwrtKx0BfV9_ZP3d4xTrRvZeJGRjFIe5mQ-WPIeu3fesw2N0I1P6kxYFJT5Vx0EHl-Q1e3cjxrj_ARfiy5Yk_YZ/s72-c/google_logo.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7521149585630145029.post-3083278609394233790</id><published>2010-03-12T12:45:00.001-05:00</published><updated>2013-03-31T03:10:24.620-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ExtJs"/><title type='text'>El potencial de ExtJS</title><content type='html'>&lt;div id=&quot;talerta&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;talerta1&quot;&gt;
&lt;/div&gt;
&lt;div id=&quot;alerta&quot;&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Recuerde que..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;alerta1&quot;&gt;
Este blog esta desarrollado en idioma español pero utilizando &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt; Google Traductor &lt;/span&gt;&lt;/b&gt;puede adecuarlo al lenguaje de su preferencia.. Favor utilice la opcion del recuadro superior derecho... y Bienvenido a &lt;span class=&quot;notranslate&quot;&gt;Integracion Google.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.extjs.com/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5461164658996765522&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl7aTmjGsRGUJpubHyty5FhCvXsSAk6pr_2u7XDPl_RE-MF-Vryc6Re5anpD5f-3Wo5szyc0BF0b2pXxK90jBA2sXtWthgoBVL9GDz5Rx8u8rcHl-JU1F_sK_WMGYprkZbQF42V8YUtYbY/s200/ExtJs.jpg&quot; style=&quot;cursor: hand; cursor: pointer; float: left; height: 50px; margin: 5px 10px 30px 0; width: 80px;&quot; /&gt;&lt;/a&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Si Ud. amigo lector ha revisado los post anteriores y han empezado con el Curso de EXtJS que nos brinda Crysfel Villa en su página web del Quizzpot, pues entonces creo que resulta necesario que puedan observar porque realmente nos resultó interesante &lt;b&gt;ExtJS &lt;/b&gt;y lo consideramos un &lt;span class=&quot;notranslate&quot;&gt;framework &lt;/span&gt;bastante importante...&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Cursos Ext-3.x del Quizzpot :&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class=&quot;notranslate&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;Curso ExtJs-3.x en español :&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;b style=&quot;background-color: white; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;&quot;&gt;&lt;a href=&quot;http://tinyurl.com/d4x75u&quot; target=&quot;_blank&quot;&gt;http://tinyurl.com/d4x75u&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;notranslate&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;ExtJs-3.x Course in English:&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;b style=&quot;background-color: white; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px;&quot;&gt;&lt;a href=&quot;http://tinyurl.com/885v8w4&quot; target=&quot;_blank&quot;&gt;http://tinyurl.com/885v8w4&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;A estas alturas, ya deben haber instalado su servidor Apache+MySQL +PHP+PHPMyAdmin y debe estar en funcionamiento, por lo que al ingresar &lt;b style=&quot;font-family: arial;&quot;&gt;&quot;http://localhost&quot;&lt;/b&gt; en la barra de direcciones de su navegador les debe aparecer lo siguiente:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;tools01&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5447807925224979362&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj77YjUZqingea_fi_xRCJtjG4i2sN2FF48kC97e6KtveBy8dZdjL3z3jDl0JaWDySDlAIalCF4t1h5ltR34d-rFquMKgd5F_xlo-ph_ffgKa7MUCtzB95epXpmlAWAoUYWPz7X9Xdd2qW6/s640/ServidorHTTP.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Dicha imagen nos indica que nuestro servidor local esta funcionando sin mayores contratiempos.. y aparece así porque en la carpeta &quot;www&quot; de &lt;span class=&quot;notranslate&quot;&gt;c:/Appserv &lt;/span&gt;(o la carpeta donde hayamos elegido instalar nuestro servidor), están los archivos &lt;b&gt;index.php&lt;/b&gt; y &lt;b&gt;phpinfo.php&lt;/b&gt;; resulta necesario aclarar, si aún no es de su conocimiento, que los archivos &quot;index&quot; (sean php, html,  entre otros), son de ejecución automática cuando se ingrese a las carpetas que los contienen, porque así puede ser configurado por defecto (el standard es index.php), lo que podemos comprobar empezando a examinar la información que nos presenta el link &quot;PHP Information&quot; de la pagina mostrada en la figura...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Si no desea que aparezca esta pagina al ingresar a nuestro servidor local (&quot;localhost&quot;), pues sencillamente ingrese con su explorador a la carpeta en &quot;www&quot; y renombre &lt;b&gt;index.php&lt;/b&gt; por &lt;b&gt;Server.php&lt;/b&gt; por ejemplo.. y con ello lograra que cuando ingrese a &quot;localhost&quot; aparezca directamente el directorio del servidor (como aparecen en el Curso ExtJS de Quizzpot).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;No le recomendamos eliminar esos archivos, por cuanto nos van a ser útiles cuando queramos trabajar con la base de datos MySQL ( y utilicemos PHPMyAdmin para administrarla), ó cuando queramos ver  o revisar la configuración de nuestro servidor Apache y de PHP ( mediante PHPInfo.php, ...pero ténganse en cuenta, que para ingresar a los servicios del servidor, debe ahora hacer click en el ahora archivo &lt;b&gt;Server.php &lt;/b&gt;(o abrirlo en otra pestaña).&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Si ya han seguido y probado los primeros capítulos del Curso de ExtJS, y siguiendo las recomendaciones de Crysfel, deben haber bajado la &lt;a href=&quot;http://www.sencha.com/products/extjs/download/&quot; target=&quot;_blank&quot;&gt;ultima versión de ExtJS&lt;/a&gt; de su pagina oficial, aunque debo reiterarles que la ultima versión compatible 100% con la versión ExtJs utilizada en el primer curso de Crysfel es la &lt;a href=&quot;http://www.sencha.com/products/extjs3/download/&quot; target=&quot;_blank&quot;&gt;versión ExtJs-3.4.0&lt;/a&gt;, y es en la que debemos utilizar y copiar en nuestra carpeta &quot;Ext-3.4.0&quot; los archivos básicos de ExtJs indicados en el curso (si queremos que los ejemplos funcionen tal como están). Cabe indicar asimismo que los capítulos iniciales del curso y de manejo básico del framework funcionan tal como están con ExtJs3 y ExtJs4 (por cuanto ExtJs4 reconoce las formas basicas de declaración de clases de Ext-3.x), aunque esta ultima versión sugiere una implementación MVC, y una forma de declaración de componentes de ExtJs orientada a agilizar la carga de los mismos.. y bueno.. nuestra recomendación al respecto es que el curso lo trabajen con la &lt;a href=&quot;http://www.sencha.com/products/extjs3/download/&quot; target=&quot;_blank&quot;&gt;versión Extjs-3.4.0&lt;/a&gt;&amp;nbsp;y sencillamente a la hora de importar la biblioteca de ExtJs en nuestras aplicaciones o ejemplos, reemplacemos la ruta de ExtJs-2.2 que indican en el tutorial de Crysfel, y pongamos el nombre de la carpeta que corresponda a la versión de ExtJs-3.x que estemos utilizando...&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Asimismo, también les recomiendo crear en la carpeta &lt;b&gt;&quot;www&quot;&lt;/b&gt; de nuestro servidor Appserv, una carpeta que podriamos llamar &lt;b&gt;GoogleCode&lt;/b&gt;, y en donde podríamos guardar nuestros propios archivos HTML que podamos copiar los ejercicios del &lt;a href=&quot;http://code.google.com/apis/ajax/playground/&quot; target=&quot;_blank&quot;&gt;&lt;span class=&quot;notranslate&quot;&gt;Code Playground&lt;/span&gt;&lt;/a&gt; de Google y probar en nuestro propio servidor las herramientas y API de Google que queramos integrar a nuestros desarrollos Web, e inclusive por supuesto a nuestros desarrollos con ExtJs.
&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Pero hoy les propongo hacer algo más interesante... cuando hayamos bajado nuestra versión de ExtJs (la versión ExtJs-4.0.7 vigente al 02/01/2012, la versión ExtJs-4.1 aún esta en su etapa &quot;beta&quot; ), probablemente la hemos hecho en una carpeta cualquiera.. y de allí hayamos copiado los archivos como nos indicó Crysfel en la carpeta &quot;Curso&quot;... pues, mejor copiemos toda la carpeta que contiene todo nuestro ExtJs que hemos bajado también en &quot;www&quot;, siempre revisando la web oficial de ExtJS para asegurarnos que estemos trabajando con la &lt;a href=&quot;http://www.sencha.com/products/extjs/download/&quot; target=&quot;_blank&quot;&gt;ultima versión vigente de ExtJs&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot;&gt;
&lt;img alt=&quot;tools02&quot; border=&quot;0&quot; height=&quot;310&quot; id=&quot;BLOGGER_PHOTO_ID_5449789172933183954&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAAO764pP96EcRxYSGKgZAOrLB5K5lcX_QahZtvki0RCcWgMrrVXqGi5O3ecYfDNyHGk3umpM74S_IY3kfNsYVD6kP3HamVsfuY6BDij2fCQaAc-QTJ_9J46SoweVmok65Ln47RE5ip9u_/s640/CarpetaWWW.PNG&quot; style=&quot;display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;&quot; width=&quot;450&quot; /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;Ingresemos ahora a nuestro navegador y en la barra de direcciones  coloquemos los links:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;b&gt;  localhost/Ext-4.0.7&lt;/b&gt;&amp;nbsp;(o la versión que hayamos bajado), y revisemos allí su opción &lt;span class=&quot;notranslate&quot;&gt;&lt;b&gt;&quot;View the Examples&quot;&lt;/b&gt;&lt;/span&gt;, equivalente a la ruta: &lt;b&gt;localhost/Ext-4.0.7/examples&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikVN-0PaFc4bSoe9TWS3MK6vLElsyJN4mW1fZ2I8gxO3EdJca8w-0Xrq2mbVr3qf5K-Hj4FDnD5hOL6Asojo84teFpLyiY2E-aK31c-6DYwBWd3X_lkSm1CLicuOXSdq7nSxbvyrOHuM7P/s640/09+Ext-4.0.7.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Si no tenemos algun contratiempo debemos observar la web de ejemplos de ExtJS correspondiente a la versión que estemos utilizando... si es la última versión debe coincidir con la que muestra ExtJS en su pagina oficial:&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.extjs.com/deploy/dev/examples/&quot; target=&quot;_blank&quot;&gt;http://www.extjs.com/deploy/dev/examples/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ6e2B8OFz1SGAjxsdPF5l28N9BezLb6Ea5OQRaceOg6TtsPYAZC57WaaevTQ5PtCQWwEdAzxemklRh_bllClh4v7vz1qKNNXQqBh66f2OmcqLBVfGa39CdRIaqVcZJxvFLNG3OY5IslgJ/s640/10+Ext-4.0.7+samples.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Si observamos la barra de direcciones de nuestro navegador de nuestra primera carga, nos daremos cuenta que hacemos referencia a archivos grabados en nuestro disco (como puede observar estimado lector, toda la web oficial de ExtJs ha sido programada íntegramente en ExtJs, y la parte correspondiente a los ejemplos, la tenemos ahora grabada en nuestro disco); y sabiendo cuales son esos archivos, sencillamente los podremos revisar, copiar, modificar y utilizar durante nuestro proceso de aprendizaje... y de paso, observar las equivalencias y diferencias entre el código ExtJs-3.x del tutorial del Quizzpot, con el código de la versión ExtJs4, y así poder actualizarnos y realmente observar todo el potencial de éste &lt;span class=&quot;notranslate&quot;&gt;framework&lt;/span&gt;, y que lo hace sumamente útil para desarrollar aplicaciones administrativas de &quot;apariencia&quot; similar a los que nos presentan cualquiera de los lenguajes de desarrollo convencionales, con el uso de ventanas, menús, grillas, formularios, etc... pero integrado completamente a la web.. y a bases de datos... asimismo, ExtJs abarca y hace posible el desarrollo de opciones que observamos en las mejores paginas web.&lt;br /&gt;
&lt;br /&gt;Ahora si revisamos las muestras nos encontraremos que varias de ellas nos permiten trabajar con pantallas muy similares a cuando hacemos nuestros desarrollos para sistemas de escritorio con ventanas, grids, forms, manejo de eventos, etc.. vale decir, todo lo necesario para empezar a desarrollar &quot;sistemas&quot; todo a la Web !&lt;/span&gt;&lt;/span&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuJ3AkuSr9Rgy5-19WzeKVf0-acGactnC47B1sFpmfm5iVTrax7EYV4STQ_-P1KjyOaw4vPcSBvvXAyo_MoqV0aqE9QK3rMjVjndS7LH5OoKaQNszGgUzgCRN6zbfvjfi_TgdqB3CumTv6/s640/17+ExtJS4%2527sample.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Algo similar ocurre si en lugar de utilizar ExtJs-4.0 empleamos la ultima &lt;a href=&quot;http://www.quizzpot.com/2009/01/ext-js-framework/&quot; target=&quot;_blank&quot;&gt;versión de ExtJs-3.4&lt;/a&gt; disponible, y cuya link hemos indicado, y observar la documentación de la versión y los ejemplos que nos muestran bajo el codigo de la version ExtJs-3.x, y que son equivalentes a los utilizados en el Tutorial de Crysfel, pero cabe dar una revisión a las características y mejoras de ExtJs-4.0, y empezar tambien nuestras pruebas bajo esta versión.. que nos presenta varias ventajas que para nosotros desarrolladores Web debemos empezar a revisar, pues nos permite un mejor manejo interno de los componentes del framework, y por supuesto, una increíble mejora de nuestro potencial de programación.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitrwAJ32Emv0OhkWmCp4UQzLSw5bcbGoVxHmx9GJsxM384L5U6-UKvkosUHver-1PCHjzwEb_nXV44nCK_OR4BkyUyTt6hsHDtUfgMKMU9Xianj8hZgTEiCtAsO4nwvgMl0l_kLGMVOVrR/s640/11+Ext-3.4.0.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;310&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDiAhCbfNyqwbbUfW-aoqIzvuBmspc_kGj0HpHqFKDyNPqzbKiU6u8EMdKwv9COrwtJ2UZjTtXexcJKTKcReafCWqSDo_2_DFem3k2P3TFBGzfJKABMxIEwLDxmT0r6edE7GhvVZBitd8Q/s640/12+Ext-3.4.0+samples.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;b&gt;NOTA IMPORTANTE:&lt;/b&gt;&lt;/span&gt; Si deseamos empezar a trabajar con ExtJs4 y empezar a utilizar esta versión con los ejercicios propuestos por el Curso ExtJs-3.x de Quizzpot, debemos tener presente que para crear nuestra versión &quot;liviana&quot; de ExtJs4 debemos copiar dentro de una carpeta ExtJs-4 el archivo &lt;b&gt;ext-all.js&lt;/b&gt; y la carpeta &lt;b&gt;resources&lt;/b&gt; de nuestra fuente descargada de ExtJs4. Asimismo, para la importación de las librerías de ExtJs4 solo es necesario importar a ext-all.js mediante en siguiente script que va dentro del Head de nuestra aplicación:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;html&quot; name=&quot;code&quot; style=&quot;background-color: white; line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #4c1130; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Georgia, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px; white-space: normal;&quot;&gt;&lt;pre name=&quot;code&quot; style=&quot;white-space: pre-wrap;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot;&amp;gt;
  &amp;lt;title&amp;gt;Ext.Panel&amp;lt;/title&amp;gt;
  &amp;lt;!-- Importar los estilos --&amp;gt;
  &amp;lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;../js/Ext/resources/css/&lt;wbr&gt;&lt;/wbr&gt;ext-all.css&quot; /&amp;gt;

  &amp;lt;!-- Importar el ext-all-dev.js --&amp;gt;
  &amp;lt;script type=&quot;text/javascript&quot; src=&quot;../js/Ext/ext-all-dev.js&quot;&lt;wbr&gt;&lt;/wbr&gt;&amp;gt;&amp;lt;/script&amp;gt;

  &amp;lt;script type=&quot;text/javascript&quot; &amp;gt;
      Ext.onReady(function(){
          alert(&quot;ExtJs4 esta instalado correctamente!&quot;);
      });
  &amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;div id=&quot;center&quot;&amp;gt;&lt;/pre&gt;
&lt;pre name=&quot;code&quot; style=&quot;white-space: pre-wrap;&quot;&gt;&amp;lt;h1&amp;gt;Bienvenido ExtJs4...&amp;lt;/h1&amp;gt;&lt;/pre&gt;
&lt;pre name=&quot;code&quot; style=&quot;white-space: pre-wrap;&quot;&gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/pre&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;
&lt;/span&gt;
&lt;pre class=&quot;html&quot; name=&quot;code&quot; style=&quot;background-color: white; line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;
&lt;/span&gt;
&lt;pre class=&quot;html&quot; name=&quot;code&quot; style=&quot;background-color: white;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: normal;&quot;&gt;(en la&amp;nbsp;versión&amp;nbsp;ExtJs4 ya no existe ni es necesario importar el &quot;adapter&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;
&lt;/span&gt;
&lt;pre class=&quot;html&quot; name=&quot;code&quot; style=&quot;background-color: white; line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nota:&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;
&lt;/span&gt;
&lt;pre class=&quot;html&quot; name=&quot;code&quot; style=&quot;background-color: white;&quot;&gt;&lt;ul&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Curso ExtJs4 en español:&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;b style=&quot;font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; white-space: normal;&quot;&gt;&lt;a href=&quot;http://tinyurl.com/bvh6kte&quot; target=&quot;_blank&quot;&gt;http://tinyurl.com/bvh6kte&lt;/a&gt;&lt;/b&gt; &lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 20px;&quot;&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Curso ExtJs4 in English : &lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: whitesmoke; color: #333333; font-family: arial, sans-serif; white-space: normal;&quot;&gt;Under Construction..!&lt;/span&gt; &lt;/li&gt;
&lt;/span&gt;&lt;/ul&gt;
&lt;/pre&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;ExtJs es un framework de Javascript realmente potente.. y por eso mi interés de integrarlo con el mundo Google, el cual también es bastante importante... además, si han revisado los primeros links presentados referidos al mundo Google, deben notar que ExtCore esta completamente integrado a Google a través de sus &lt;a href=&quot;http://code.google.com/intl/es-ES/apis/ajaxlibs/&quot; target=&quot;_blank&quot;&gt;API de Biblioteca AJAX&lt;/a&gt;&lt;/span&gt;; por ello los invito a bajar ExtCore y grabarlo también en &quot;www&quot;, y observe los ejemplos que nos presenta... ExtCore no ocupa mucho espacio de disco y presenta algunos ejemplos interesantes que podemos probar y unir a nuestros proyectos...&lt;/span&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;El Potencial de ExtJs4&lt;/b&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;desde este 2011 Sencha lanza al mercado ExtJs4, y realmente esta si es una gran renovación y cambio de conceptos respecto a las versiones ExtJs-3.x..anteriores; y los cambios se plantean desde de los propios fundamentos del framework, como es la declaración de Clases y modos de Herencia y Manejo de prototipos, y aunque las formas de declaración y uso de clases de las versiones anteriores son soportadas en ExtJS4....este es realmente the New Way ExtJs4 con evidentes ventajas por supuesto... y es que ExtJS4 busca abarcar todos los conceptos vigentes de Desarrollo Web como es HTML5 y CSS3, y lo que es muy importante, el uso de la Arquitectura MVC para el desarrollo de aplicaciones sustentado en el propio diseño y concepto del framework, y no en el desarrollador como esta planteado en la mayoría de&lt;span class=&quot;notranslate&quot;&gt; frameworks;&lt;/span&gt;&amp;nbsp;lo que facilita su uso en el desarrollo, mantenimiento e integración de componentes en desarrollos grandes, con la participación incluso de varios desarrolladores. Se une a todo lo anterior, el lanzamiento del &lt;b&gt;SDK de Sencha&lt;/b&gt;, el cual es una herramienta que nos permite optimizar nuestros desarrollos antes de ponerlos en producción, lograndose que solo se grabe en nuestro &quot;hosting&quot; los componentes de ExtJs necesarios para nuestro proyecto, y &quot;ofuscando&quot;: incluso nuestro código, lográndose una notable mejora en el tiempo de carga y respuesta de nuestros desarrollos (hasta 2 veces mas rápido) ..y por supuesto, una mejora del &quot;peso&quot; de nuestras aplicaciones - hasta 50% menos de espacio de disco - y consideramos que todas estas novedades hacen a ExtJs4 un framework bastante importante.&lt;/span&gt;&lt;/span&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;En lo que respecta a estas novedades conviene que revisemos y sigamos con detalle los conceptos expresados en la documentación de ExtJs4 :&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://docs.sencha.com/ext-js/4-0/#!/guide/getting_started&quot;&gt;http://docs.sencha.com/ext-js/4-0/#!/guide/getting_started&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;y asimismo, revisemos el resto de temas relacionados al &lt;span class=&quot;notranslate&quot;&gt; framework&lt;/span&gt;, de la misma documentación, especialmente los temas respecto al Sistema de Clases y la Arquitectura MVC para aplicaciones, donde se detalla a manera de codelabs casos practicos para mayor entendimiento de cada tema..&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial; font-size: x-large;&quot;&gt;&lt;b&gt;una mirada al mundo ExtJS...&lt;/b&gt;&lt;/span&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;longpicture&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf8aKjP9isiTu503gsgtoHCNms9LJVr0wQq7GU5rr8bNfInFHEa0u3xVoAQDqaH8NLoBjym7JfhHgAOb5RlDXSTNL_amUhZoNXwIrHmhASvbn7wHfqwse3oG-VP6mG6bGXMRgRODvYEDmO/s640/32+senchaProducts.jpg&quot; width=&quot;450&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Google como hemos indicado utiliza tambien una version liviana de ExtJS como ExtCore, pero el potencial de este framework radica en que partiendo de las formas de esta librería  Javascript se ha desarrollado &lt;b&gt;Sencha Touch,&lt;/b&gt; que es una variación de ExtJs especializada para desarrollos web para móviles &lt;b&gt;&lt;span class=&quot;notranslate&quot;&gt;Apple, iOS &lt;/span&gt;y Android&lt;/b&gt;, (teléfonos celulares, tablets, pockets, etc.); y lo que es una interesante novedad, ExtJs4 inicia la integración del manejo de ExtJs con &lt;b&gt;Sencha Touch&lt;/b&gt;. Asimismo en este &lt;span class=&quot;notranslate&quot;&gt;framework &lt;/span&gt;tenemos &lt;b&gt;Ext-GWT&lt;/b&gt;, como un &lt;span class=&quot;notranslate&quot;&gt;framework &lt;/span&gt;especializado para el entorno Java y el desarrollo web usando &lt;span class=&quot;notranslate&quot;&gt;Google Web Toolkit (Java software development framework)&lt;/span&gt;; y no debemos perdernos la oportunidad de revisar Ext-Designer (un IDE gráfico para diseño de aplicaciones ExtJs), Ext-Animator y Sencha.io versión beta; y cabe resaltar que con &lt;b&gt;Node.js y el motor V8&lt;/b&gt; ya estamos en el camino para emplear &lt;b&gt;Javascript&lt;/b&gt; desde el lado de Servidor (como un back-end con capacidades asincronas de alto rendimiento), y Sencha.com ya esta incursionando por ese lado con &lt;b&gt;Ext-Direct&lt;/b&gt;, así que como podrá observarse, aún se espera mucho en el desarrollo de este framework.&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: arial;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;En nuestro siguiente post: &lt;a href=&quot;http://mlaynessanchez.blogspot.com/2010/03/integracion-google-1ra-parte.html&quot;&gt;Integracion Google 1ra. parte&lt;/a&gt;, mostraremos como empezar a integrar ExtJs con alguna de las API de Google (en versión ExtJs-3.x y ExtJs4), por lo que si están siguiendo el Curso de Crysfel, los animo a continuar... pues como indique, ese curso es uno de los más completos que hemos encontrado (y bastante practico en lo que respecta a la teoría de manejo de clases asociados a la programación orientada a objetos POO), esto por la forma que esta planteado, y aunque no siempre  hay ayudas visuales, pues no se preocupen, si tienen dudas o no funciona algo... posteen en el mismo curso, el foro de Quizzpot, o por nuestro bloque de comentarios facebook si lo desean...los que siempre serán bienvenidos y considerados en lo posible...&lt;/span&gt;&lt;/span&gt;
&lt;br id=&quot;pos01&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;http://www.google.com/jsapi?key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q&quot;&gt;
&lt;/script&gt;
&lt;script&gt;
wlang=navigator.language;
document.write(&#39;Navegador: &#39;+wlang);
&lt;/script&gt;&lt;br /&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  google.load(&quot;jquery&quot;, &quot;1&quot;);
  google.load(&quot;language&quot;, &quot;1&quot;);
  var wlanguage = wlang;
  wlanguage = wlang.substr(0,2);
  document.write(&#39;Navegador: &#39;+wlanguage );
  var cadlanguage = &#39;,en,pt,it,fr,de,nl,sv,ja,ru,ko,th,es&#39;;
  var ltarget = &#39;en&#39;;
  var npos = cadlanguage. lastIndexOf(wlanguage);
  if (npos&gt;0) {
    wlanguage = cadlanguage.substr(npos,2); 
  } else {
    wlanguage = ltarget;  
  };
  function enespanol() {
    jQuery(&quot;#alerta&quot;).hide();
    $(&quot;#alerta1&quot;).hide();
  };
  function initialize() {
    var nFlag = 0;
    var texto = document.getElementById(&quot;alerta&quot;).innerHTML;
    google.language.translate(texto, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
         nFlag = 1;
      };
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: green; font-size: large;&quot;&gt;&lt;b&gt;Remember..&lt;/b&gt;&lt;/span&gt;&#39;;
       } else {
         nFlag = 0;
       }
    });
    var texto1 = document.getElementById(&quot;alerta1&quot;).innerHTML;
    google.language.translate(texto1, &#39;es&#39;, wlanguage, function(result) {
      var translated = document.getElementById(&quot;talerta1&quot;);
      if (result.translation) {
          translated.innerHTML = result.translation;
          nFlag = 1;
      } ;
      if( nFlag == 0 ) {
          translated.innerHTML = &#39;This blog is developed in Spanish but using Google Translatorcan adapt the language of your choice .. Please use the top right of the box option ... Welcome to &lt;span class=&quot;notranslate&quot;&gt; Integracion Google.&lt;/ span&gt;&#39;;
       }
    });
    enespanol();
  };
  if (wlanguage != &#39;es&#39;) {  
      google.setOnLoadCallback(initialize);
  } else {
      google.setOnLoadCallback(enespanol);
  }
  
&lt;/script&gt;
&lt;br /&gt;
&lt;/div&gt;

&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;
&lt;script&gt;(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = &quot;//connect.facebook.net/es_LA/all.js#xfbml=1&amp;appId=497153403630454&quot;;
  fjs.parentNode.insertBefore(js, fjs);
}(document, &#39;script&#39;, &#39;facebook-jssdk&#39;));&lt;/script&gt;

&lt;blockquote&gt;
&lt;div class=&quot;fb-comments&quot; data-href=&quot;http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html&quot; data-num-posts=&quot;10&quot; data-width=&quot;470&quot;&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;

&lt;div class=&quot;blogger-post-footer&quot;&gt;@Mlaynes
IGCodelab Group&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mlaynessanchez.blogspot.com/feeds/3083278609394233790/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html#comment-form' title='5 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/3083278609394233790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7521149585630145029/posts/default/3083278609394233790'/><link rel='alternate' type='text/html' href='http://mlaynessanchez.blogspot.com/2010/03/el-potencial-de-extjs.html' title='El potencial de ExtJS'/><author><name>Miguel Angel Laynes Sanchez</name><uri>http://www.blogger.com/profile/05138365926545966434</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl7aTmjGsRGUJpubHyty5FhCvXsSAk6pr_2u7XDPl_RE-MF-Vryc6Re5anpD5f-3Wo5szyc0BF0b2pXxK90jBA2sXtWthgoBVL9GDz5Rx8u8rcHl-JU1F_sK_WMGYprkZbQF42V8YUtYbY/s72-c/ExtJs.jpg" height="72" width="72"/><thr:total>5</thr:total></entry></feed>