Navegador Google

Por Cesar, Septiembre 1st, 2008, en FLOSS, browsers, javascript, web2.0, Google, internet. 1 Comentario.

Google anuncia su nuevo proyecto: Google Chrome. Un navegador Web. Así es, Google se enfrentará directamente con pesos pesados como Firefox e Internet Explorer por la batalla del porcentaje de uso. Entre sus monerías incluirá Google Gears por default (para acceso offline de los sitios que lo soporten), una nueva máquina virtual de JavaScript, tabs “especiales” que lo único de especial que tienen es que van por encima de la barra de dirección y no por debajo como lo son tradicionalmente, en vez de la “AwesomeBar” de Firefox ellos tienen la “Omnibox”, una página de inicio con algunas características interesantes, entre otras cosas. Pueden ver el anuncio en blogoscoped.

(vía Slashdot)

Pasatiempo de niño

Por Cesar, Julio 1st, 2008, en FLOSS, javascript, web2.0, Google. 3 Comentarios.

¿Y tu que hacías a los 13 años? Definitivamente impresionante y WTF. Me da pena tener el doble de su edad.

El fork de Ext: OpenEXT

Por Cesar, Abril 27th, 2008, en FLOSS, programacion, javascript. No hay comentarios.

Iba a pasar tarde o temprano: http://sourceforge.net/projects/openext/

La situación legal de Ext de la cual hablamos anteriormente provocó que algunos de los miembros de la comunidad Ext hicieran algo al respecto. En las propias palabras del autor, OpenEXT no es un fork sino que lanzarán parches encima de ExtJS 2.0.2 (la última versión LGPL) en vez de redistribuir versiones completas de Ext modificadas.

Veamos si esto es suficiente para atraer usuarios de Ext inconformes por el cambio de licencia.

(Via Ajaxian. Y lean el artículo original, dice muchas cosas muy interesantes)

Controversia con Ext JS

Por Cesar, Abril 23rd, 2008, en FLOSS, javascript. 7 Comentarios.

Ext JS es una gran libreria para Javascript, una de las mejores y más completas que he utilizado. Sin embargo, recientemente ha visto un poco de controversia debido a su elección de distribuir la librería bajo un esquema de licencia doble:

  1. LGPL para aquellos que planeen usar Ext de manera personal, sin ánimos de lucro o educacional.
  2. Si planeas distribuir a Ext como parte de un producto de desarrollo de software (como un toolkit, librería, lenguaje, etc) entonces no puedes obtener Ext bajo los términos de la LGPL y tendrás que adquirir una licencia comercial.

Hasta aquí todo bien ¿no? Pero la cosa se complica un poquito: la LGPL versión 3 especifica claramente que si tu obtienes un software con licencia LGPLv3 y tiene alguna restricción extra a aquellas impuestas por la propia LGPL, tu tienes el derecho de eliminar dichas restricciones extras.

Dicho de otra manera: cualquier software con licencia LGPLv3 no puede tener más restricciones que las que la LGPL especifica. Por lo anterior, Matthew Garrett, desarrollador de Debian, decidió redistribuir Ext pero únicamente con la licencia LGPL (sin la licencia propia de Ext).

Matthew dice que él va a usar Ext de manera personal, sin ánimo de lucro y por lo tanto es elegible para obtenerla con LGPL. Al momento de obtenerla con LGPL él es libre de distribuírla de cualquier manera, siempre y cuando se apegue a los términos de la LGPL.

Ni tardo ni perezoso Jack Slocum, autor de Ext, le dice que está en violación de su licencia, porque Ext no se distribuye con licencia LGPL sino con una licencia propia de Ext, que te permite usar Ext bajo los términos de la LGPL en caso de que seas elegible para ello. Esta licencia propia de Ext, de acuerdo a Jack, no le permite a Matthew redistribuir porque Matthew está distribuyendo Ext como parte de una herramienta de desarrollo (como una librería) cosa que la licencia propia de Ext explícitamente prohibe:

If you plan to distribute Ext in a product that will be packaged or sold as a software development library, toolkit or plug-in-based framework (LIBRARY), we require that you work with us to establish a specific license that is appropriate. Use of the open source license terms in a LIBRARY is not permitted without explicit permission.

¿Entonces por qué Matthew se sintió con derecho de hacerlo? Porque él obtuvo Ext con licencia LGPL al planear usar Ext de manera personal, sin ánimos de lucro. Y como la LGPL le permite redistribuír, siempre y cuando se apegue a la LGPL (cosa que está haciendo) simplemente lo hace.

¿Entonces por qué Jack dice que no se puede? Porque él dice que si vas a usar Ext de manera personal, sin ánimos de lucro no obtienes Ext con licencia LGPL, sino que la licencia original de Ext te de da derecho de usar Ext bajo los términos de la LGPL.

¿Lo ven? es como si la licencia propia de Ext fuera una envoltura sobre la LGPL. La palabra clave es bajo los términos de la LGPL. ¿Eso que significa? ¿Es diferente otorgar uso bajo los términos de la LGPL a distribuír un software con licencia LGPL? Al parecer lo que intenta hacer la licencia de Ext es:

Si vas a usar Ext de manera personal, sin ánimos de lucro o si eres una organización educativa, puedes obtener Ext y usarla con los mismos derechos que te otorga la LGPL. Pero si decides distribuir Ext como parte de una librería de desarrollo, esos derechos se te eliminan y tienes que contactarnos para llegar a un acuerdo de licencia.

Aún si lo anterior es lo que en efecto quieren hacer, al momento de obtener los derechos otorgados por la LGPL tu puedes eliminar esa restricción que te intenta quitar esos derechos y hacer con Ext cualquier cosa que la LGPL permita.

No soy abogado, y habrá que estar atentos a la resolución de este problema, pero creo que Matthew tiene razón en esta. Si lo que Jack Slocum y los autores de Ext quieren hacer es proporcionar una licencia similar a la LGPL pero con algunas restricciones extras, deberían de tomar las secciones de la LGPL que le acomoden e incluirlas en la licencia de Ext y distribuir únicamente bajo esa licencia, y no otorgar uso bajo los términos de la LGPL, sea lo que sea que eso signifique.

Programando con Ext: Formularios

Por Cesar, Enero 23rd, 2008, en programacion, javascript. No hay comentarios.

ExtExt 2.0 es una gran librería de propósito general para JavaScript. Nos sirve tanto para efectos, como para GUI y lo que se necesite para construir aplicaciones Web bonitas, consistentes entre navegadores y con llamadas asíncronas al servidor de manera rápida y más sencilla que “a mano”.

Lo que vamos a ver ahora es cómo construir un formulario, validarlo, y enviarlo al servidor. Ya antes vimos como llenar un formulario automáticamente con datos que vienen del servidor, pues lo que vamos a hacer ahora es lo contrario: el usuario llena el formulario y nosotros lo enviamos al servidor para ser procesado y guardado. Es más fácil de lo que parece, veamos: Seguir leyendo

Llamadas asíncronas (AJAX) con Ext

Por Cesar, Noviembre 28th, 2007, en programacion, javascript. 1 Comentario.

Ext (disponible en la Web Extjs) es una librería Javascript bastante completa con la que podemos hacer desde bonitos efectos para la interfaz gráfica, hasta llamadas asíncronas al servidor (AJAX) de una manera muy sencilla como veremos a continuación. Definitivamente la parte que más me gusta de Ext es la manera en la que se hace una petición de datos al servidor y cómo maneja estos datos una vez que llegan al cliente. Pero basta de palabras, vayamos al grano.

Ext Form Supongamos que tenemos un formulario como el que se muestra en la imagen y queremos llenarlo con datos proveniente de una base de datos pero de manera dinámica (con AJAX, sin hacer refresh). Pueden utilizar sólo Javascript y manejar todas las incompatibilidades de los navegadores por su cuenta, y pueden usar una librería como Prototype que también es muy buena (y de hecho Ext tiene la opción para usarla) o, podemos usar Ext y facilitar tanto el código del lado del cliente como del lado del servidor. En Ext se usa el concepto de Data Stores que son objetos que nos facilitan el acceso a datos con un formato específico, y que después podemos usarlos para llenar por ejemplo una tabla, o un combo, o cualquier cosa. Para crear un Data Store:

  1. var marker_data = new Ext.data.Store({
  2.         proxy: new Ext.data.HttpProxy({url: ‘marcadores.php?accion=obtMarc’}),
  3.         reader: new Ext.data.JsonReader({},[ ‘id’, ‘nombre’, ‘direccion’, ‘latitud’, ‘longitud’, ‘descRed’, ‘descAmp’, ‘numCuartos’, ‘numBanos’, ‘tamano’, ‘colonia’, ‘precio’, ‘enlace’]),
  4.         remoteSort: false
  5. });

Dentro del Data Store estamos creando otros dos objetos: HttpProxy y JsonReader. El primero nos sirve para indicarle la URL que nos regresará los datos que necesitamos, y el segundo es un objeto que, como su nombre nos indica, nos sirve para consumir datos en formato JSON. Esto es muy conveniente ya que, al estar usando JSON, podremos evaluar la respuesta del servidor, convertirla a un objeto Javascript y accesar sus propiedades como lo hacemos con cualquier otro objeto (aunque Ext hace este trabajo por nosotros automágicamente).

Ya que tenemos el Data Store, ahora hay que indicar que pasa una vez que los datos llegan al cliente:

  1. marker_data.on(‘load’,function(){
  2.         fillForm(marker_data);
  3. });

Aquí solamente estamos tomando el objeto marker_data que creamos anteriormente (el Data Store) y le asignamos un manejador de evento. El evento es “load”, es decir, cuando se cargan los datos, y le estamos asignando una función anónima que a su vez llama a otra función (fillForm) que no voy a mostrar aquí por motivos de espacio pero que simplemente toma los valores regresados por el servidor y llena el formulario. Por último hay que decirle al Data Store que haga la llamada y pida los datos:

  1. marker_data.load();

Eso es todo. Al recibir todos los datos del servidor se ejecutará la función creada anteriormente. Donde esto brilla es en la parte del servidor, especialmente si antes utilizabas XML para regresar datos. Siguiendo el mismo ejemplo, el código del servidor en PHP quedaría de la siguiente manera:

  1. $query = mysql_query(“SELECT * FROM marcadores”);
  2. if(!$query){
  3.         die(‘No se pudo conectar a la base de datos: <br />’.mysql_error());
  4.         mysql_close();
  5. }else{
  6.         $arr = array();
  7.         while($obj = mysql_fetch_object($query))
  8.                 $arr[] = $obj; 
  9.         Echo .json_encode($arr).;
  10. }

Bastante sencillo ¿no? aprovechando la función json_encode de PHP enviamos la respuesta con el formato que Ext la espera. Una vez en el cliente podemos utilizar estos datos así:

  1. marker_data.getAt(0).data.colonia

Este objeto una vez que se invoca el método load contiene los datos regresados por el servidor. Utilizando el método getAt y la propiedad totalLength podemos iterar los resultados sin mucho esfuerzo. Y no hay más que decir del tema, Ext simplifica bastante el desarrollo de aplicaciones Web con Javascript y nos permite abstraer cosas como evaluar cadenas JSON o parsear respuestas en formato XML, así como también despreocuparnos por las incompatibilidades entre los diferentes navegadores. Por el lado malo, la documentación es bastante completa pero a mi ver le hacen falta más ejemplos para poder aprender a utilizar la librería de manera más rápida.

Aplicaciones grandes con Javascript

Por Cesar, Noviembre 23rd, 2007, en programacion, javascript, opinion. 3 Comentarios.

Programar aplicaciones grandes (no triviales) con Javascript es un gran PITA. A aquellos que se dedican a hacer esto (por gusto, trabajo o masoquismo) ¿Cual es el principal problema de la dependencia de Javascript en las nuevas aplicaciones Web? ¿Que librería o framework prefieren (si es que usan una)? ¿Cual es la desventaja de otras tecnologías (GWT, Flash, Silverlight, Flex) frente a Javascript? y por último ¿Que debería tener el lenguaje para mejorar la experiencia del programador?

Gears of Google

Por Cesar, Mayo 30th, 2007, en noticias, aplicaciones, javascript, web2.0. No hay comentarios.

Google ha lanzado su nuevo kit de desarrollo: Google Gears. Se trata de una extensión para el navegador la cuál le permite correr aplicaciones web en modo offline, efectivamente acercando aún más las aplicaciones web al escritorio. Hacer funcionales a las aplicaciones web sin conexión ha sido un problema del que mucho se ha hablado últimamente. Ya se han propuesto algunas soluciones y de hecho es una de las características anunciadas para Firefox 3.

Google Gears te ofrece una manera de guardar y servir recursos localmente, sin necesidad de conexión a Internet. También se puede hacer uso de una base de datos SQL para indexar los recursos, hacer búsquedas y otras monerías con SQL y por último te permite utilizar código javascript asíncrono para hacer esa “magia” que es AJAX. Google Gears se encuentra en fase beta como prácticamente todas las aplicaciones de Google.

¿Para qué queremos aplicaciones web que funcionen online? bueno, por ejemplo para usar gmail como cliente de correo “de escritorio” es decir, poder leer, organizar y escribir correo (aunque no enviarlo) aún sin conexión. Como nota muy personal, yo pienso que la tendencia de usar aplicaciones web de manera offline podría perder importancia cuando más y más aplicaciones de escritorio aprovechen todo el poder del hardware disponible y principalmente la aceleración gráfica, para hacer aplicaciones bonitas y muy funcionales con una interfaz innovadora. Lo que sí sería bastante interesante es ver servicios web populares (gmail, netvibes, last.fm, otros que no uso) crear aplicaciones de escritorio que aprovechen al máximo el hardware como dije anteriormente.

Haciendo peticiones asíncronas entre distintos dominios (cross-domain) utilizando GWT

Por Cesar, Febrero 27th, 2007, en programacion, javascript. 3 Comentarios.

(o como hacer que el modo hosted se lleve bien con php)

Nota
Este tutorial es centrado en Linux, pero no veo porque no pueda ser aplicado a GWT bajo Windows o OSX. Después de todo, ¡es Java! También es importante notar que esta solución es para hacer que el modo hosted trabaje con una instalación local de php. Si lo que quieres es utilizar APIs populares como Google Maps o Yahoo! Search entonces esto no es para ti. De hecho se puede hacer que funcione pero solamente serviría para modo hosted ya que cuando la aplicación es emplazada, se pierde el contenedor tomcat (donde sucede la magia).

Introducción
GWT incluye en sus propias clases la clase HTTPRequest. Esta clase se utiliza para hacer peticiones HTTP asíncronas al servidor de origen. La clase HTTPRequest tiene 4 métodos estáticos que manejan tanto peticiones GET y POST y todos los 4 métodos regresan false si la petición falla.

El escenario típico del uso de HTTPRequest es comunicarse con una API remota (como Google Maps o Yahoo! Search) o con tus propios scripts del lado del servidor (php, asp, jsp, etc). En cualquier caso, el usar el modo hosted de GWT para hacer llamadas asíncronas NO será algo facil a menos que tu petición sea dirigida al mismo dominio (otro puerto cuenta como un dominio distinto y por lo tanto localhost y localhost:8888 se encuentran en dominios distintos). Para obscurecer el horizonte aún más, el modo hosted de GWT corre un servidor tomcat embebido y por lo tanto si tienes algunos scripts php locales y quieres llamarlos utilizando HTTPRequest va a fallar, ya que el servidor de origen (el servidor que tiene el script que hace la petición) es tomcat corriendo en un puerto distinto de tu servidor php (típicamente apache en el puerto 80).

Yo creo que la solución presentada aquí es la mejor opción de entre otras alternativas, dado que solo modifica el servidor tomcat embebido en GWT y no el servidor que mantiene los scripts o el servidor de emplazamiento. Además, también es posible hacerlo sin la necesidad de modificar la URL pedida. Pero suficiente teoría, pasemos al código.
Seguir leyendo

Civilization Ajaxificado

Por Cesar, Febrero 26th, 2007, en aplicaciones, javascript. No hay comentarios.

Listado en varios sitios especializados en videojuegos se encuentra “Vox Imperium“, un clon del juego Civilization. Lo realmente impresionante del asunto es que se encuentra hecho totalmente con JavaScript (AJAX).

Los bloggers de Ajaxian nos dicen que “te diviertas viendo el código fuente de la página principal del juego”.

Más aún, el primer torneo de Vox Imperium se encuentra abierto en estos momentos.

Posts anteriores

Comentarios Recientes

Los autores

Creative Commons

Paskola Estudio Creativo
Help the authors