lunes, 8 de octubre de 2012

Empezando con jQueryMobile

Para empezar vamos a hablar un poco de cómo está estructurado jQuery Mobile.

Debo decir que es uno de los frameworks que más me ha gustado para móviles, es sencillo de usar y tiene la mayoría de los componentes que en un móvil podríamos llegar a necesitar.
El sitio es http://jquerymobile.com/ y lo más interesante es que su documentación es para móviles, bueno, también se puede ver en un PC pero lo interesante se lo veo porque muchas cosas ya están ahí implementadas y podemos ir a ver cómo funcionan con el famoso "Click derecho - Ver código fuente".

la documentación está en este link http://jquerymobile.com/demos/1.1.1/

Lo primero que hay que saber es que está construido en HTML5, por lo tanto el doctype hay que dejarlo así < !DOCTYPE html > como en cualquier otra página que vaya a incluir etiquetas de HTML5, lo siguiente es agregar la estructura de las etiquetas así:

< html >
< head >
< title > Mi titulo < / title>
< / head >

Esta es la misma que hay que escribir para cualquier página web, y además debemos incluir un META nuevo para que nuestra página se pueda ver en dispositivos móviles cómodamente porque evita el zoom que normalmente hace un navegador móvil. El meta es el siguiente:
< meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no" >

Como les decía, este hace que el ancho de nuestra página sea el mismo del dispositivo y que la escala inicial sea 1 al igual que la escala inicial y la escala máxima y que el usuario no pueda escalar el sitio, en otras palabras limita el "pinchToZoom", que tan popular hizo el iPhone, que viene por defecto en las páginas web.
Esto es importante porque sino nuestra página no se verá como una para dispositivos móviles, sino que parecerá una página de escritorio común y corriente abierta desde un teléfono.

Lo siguiente que deben de hacer es incluír el archivo CSS y los JS necesarios:
< link rel="stylesheet" href="lib/jquery.mobile-1.1.0.min.css" / >
< script src="lib/jquery-1.7.2.min.js">< / script >
< script src="lib/jquery.mobile-1.1.0.min.js" >< / script >

La ubicación depende de dónde tengan los archivos, yo los guardo casi siempre en una carpeta llamada "lib".

Todo lo demás lo debemos incluir en el body de nuestra pagina.
Es muy importante mencionar que jQuery Mobile usa como base los atributos personalizados que nos permite tener HTML5 para interactuar facilmente con Javascript, por lo tanto lo que nosotros escribiremos para la interfaz de jQuery Mobile es html solamente.
¿Cómo funciona? pues para un header en la página necesitamos un div como el siguiente:
< div data-role="header" data-position="fixed" >
< h1 >Mi primera pagina< / h1 >
< / div >

El atributo personalizado es "data-role" que es donde se ubica qué tipo de componente será ese div, en este caso será un header y tiene otro atributo llamado data-position que al estar en "fixed" hace que nuestro header siempre esté hasta arriba, y el footer siempre esté abajo. Dentro tiene un H1, que es el que sirve para escribir el título a la página.

Para el contenido de la página podemos poner lo siguiente:
< div data-role="content" >
< h2 > Hola Mundo < / h2 >
< / div >


Ahora quitamos el "data-position" y sólo cambiamos el "data-role", esto formará parte del contenido de la página que podría ser "scrollable".

Para poner un footer necesitamos lo siguiente:

< div data-role="footer" data-position="fixed" >
< h3 > Mi barra inferior < / h3 >
< / div >



Volvemos a escribir el "data-position" y nuevamente cambiamos el "data-role" y el contenido.

Este código nos puede generar nuestra primera página, pero falta algo muy importante y una de las mejores cosas que tiene jQuery Mobile, los data-role="page".
Nuestro código de la página debe de estar dentro de uno, y por qué? pues simplemente porque en un mismo archivo podemos tener más de una "pantalla" y con anclas podemos hacer que jQuery Mobile nos oculte y muestre las "pantallas" que querrámos, pero esto lo mostraré más adelante.

Para ver el código del ejemplo dirígete hacia aquí

Si quieren verlo como se vería en un dispositivo móvil pueden hacer pequeña la ventana o usar este script, solo arrastrenlo a la barra de "bookmarks" en su navegador, es un script para probar sitios optimizados con "Responsive Design" y jQuery Mobile usa esa tecnología.

Responsive Test

martes, 24 de julio de 2012

Desarrollo Web para dispositivos móviles

Desde hace ya mucho tiempo me ha atraído mucho desarrollar alguna aplicación para un dispositivo móvil, la primera que hice fue en J2ME para un teléfono hace ya un par de años, pero no me convenció mucho el resultado porque era muy engorroso estar probando y la JVM en móviles era muy limitada, así que ya no seguí probando.

Pero ahora existen muchas posibilidades, hacer apps para Android, para iOS (que es más costoso $$), para Windows Phone, o una aplicación web compatible con alguno de estos dispositivos, que incluya HTML5.

Cabe aclarar que HTML5 no es el que logró que los teléfonos pudieran ver páginas web, sólo llegó a mejorar la experiencia por sus nuevos estándares, y a enriquecer la programación de aplicaciones web.

Hay varios frameworks para elegir en este campo, los que yo conozco mejor y he probado son sólo dos: Sencha Touch y jQuery Mobile, me gustan mucho y me decidí por probarlos porque no dependen de un lenguaje de servidor, por lo tanto se pueden complementar casi con cualquiera (yo prefiero usar PHP).

De esos dos, el más sencillo de implementar es jQuery Mobile (jQM), pero también tiene menos componentes que Sencha Touch (STouch).
jQM se basa en una codificación semántica y al cuando el navegador está listo, renderiza todas las etiquetas que encuentre en la página. Esto ayuda mucho porque no es necesario tener un conocimiento profundo de Javascript para poder generar nuestra página.

Sencha Touch tiene una estructura parecida a la de ExtJS, la versión para aplicaciones web de escritorio. Por lo tanto hay que tener un poco de conocimientos de POO y Javascript para no perderse mucho al principio, ya que hay muchas maneras de llegar al resultado que queremos.


Y a esto se le puede agregar que ha surgido una tecnología desde hace ya un tiempo que permite programar en Javascript y poder construír una app nativa para cada OS móvil, ya sea Android, iOS, Windows Phone, Blackberry, Palm WebOS, Bada o Symbian. Este se llama PhoneGap y utiliza un servidor apache interno para servir páginas web localmente dentro de la app. Usa una versión de Apache llamada Córdova y es muy fácil de implementar. Bueno, que sea fácil de implementar PhoneGap no quiere decir en ningún momento que desarrollar la aplicación lo sea también, ya que desde aquí no poseemos un "PHP" que nos preconstruya nuestra página, todo lo debemos hacer con Javascript para el entorno, JSONP para peticiones a servidores de datos, CSS para el estilo y alguno que otro evento que nos brinda PhoneGap. Sólo el hecho de que no tengamos un lenguaje de servidor nos hace que debamos cambiar nuestro estilo de programación.
Tiene sus ventajas, y una de las mejores es que no hay que escribir el código para cada plataforma, sino que se desarrolla una sóla vez y luego se usa la versión de PhoneGap adecuada para cada una de las plataformas en las que queremos tener nuestra app. 



domingo, 15 de julio de 2012

Sombras y bordes con CSS3

Sin duda una de las mejores cosas que hay ahora es CSS3, junto con HTML5.
Antes, cuando un diseñador web quería agregar un botón en una página que tuviera un aspecto agradable, como tener un degradado o sombras cuando se posicionaba el mouse sobre él, se debía de hacer uso de ciertos "trucos" como insertar imágenes en las esquinas para que tuviera bordes redondeados o que el fondo completo del botón sea una imagen para poder tener un degradado, o en su defecto usar un botón hecho en flash.

Por experiencia, todo esto era algo engorroso, ya que se debía de hacer muchas cosas a la vez y se sobrecargaba el archivo de código HTML, porque se tenía que recurrir a tablas, imágenes, eventos de los objetos, javascript para los "hovers", plugins, etc.... Pero ahora, existe CSS3, que aun no es completamente estándar pero va avanzando, que nos permite dar degradados distintos a nuestras etiquetas, agregarles sombras, insertarle elementos antes o después, bordes redondeados, sombras, pseudoclases en css (esto ya estaba desde antes pero se han agregado nuevas), animaciones, podemos jugar con los bordes y hacer triángulos, flechas, una infinidad de cosas que podemos lograr ahora y que han venido a darle un poco de flexibilidad a esa web "cuadrada" a la que estabamos acostumbrados.

En un ejemplo se pueden ver algunas de estas cosas, principalmente los bordes redondeados y las sombras, queda algo así como el siguiente:


Este botón tiene tres características "nuevas": el degradado gris, los bordes redondeados y la sombra en el hover.
Las tres cosas existían desde hace algún rato en los navegadores basados en webkit, que si no me fallan mis conocimientos son Safari, Chrome, Chromium, Safari mobile, el navegador de Android, y probablemente otros de los que no estoy completamente familiarizado. También estuvieron disponible en Firefox y Firefox Mobile para Android y he leído un poco que también en Opera Desktop.
Bueno, desde hace mucho estaban en todos los navegadores, con su forma peculiar de declarar, MENOS en el IE < 9.

Lo que se puede usar para poner un degradado es los siguiente:
background: -webkit-linear-gradient(top, #FFF, #BBB);
Que es exactamente el que se usa en el estilo del botón, pero este funciona para navegadores basados en webkit, para hacerlo un poco más "multinavegador" debemos piner las siguientes lineas

background: #FFF; 
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#FFF), to(#BBB));
background: -webkit-linear-gradient(top, #FFF, #BBB);
background: -moz-linear-gradient(top, #FFF, #BBB);
background: -ms-linear-gradient(top, #FFF, #BBB);
background: -o-linear-gradient(top, #FFF, #BBB);
En este caso, el que entienda el navegador es el que se va a aplicar.

Para el borde redondeado es un poco más corto y sencillo, de la siguiente forma:

-webkit-border-radius: 5px 5px; 
-moz-border-radius: 5px 5px; 
border-radius: 5px 5px;
Este es para webkit, mozilla y el estándar. Los pixeles son para el tamaño del radio que tendrá la esquina, se puede pasar un valor para que lo tome en todas las esquinas, dos valores para arriba y abajo, y los cuatro valores de cada esquina.

Y por último para la sombras es el siguiente código:
-webkit-box-shadow: #666 0px 0px 5px; 
-moz-box-shadow: #666 0px 0px 5px; 
box-shadow: #666 0px 0px 5px;
Este recibe el color de la sombra, la posición en X y la posición en Y con respecto al objeto que lo muestra y la longitud de la sombra.

Teniendo todas estas opciones, lo que hace falta es imaginación y creatividad para utilizarlo, y ganas de experimentar con cosas nuevas también, creo que eso es más importante.

El código completo esta en el siguiente enlace:
Ejemplo de botón


viernes, 6 de julio de 2012

JSON y el intercambio de datos

En muchos de los frameworks de javascript se usa el formato JSON, y tambien en muchos objetos comunes a la hora de codificar en este mismo lenguaje.

JSON significa "JavaScript Object Notation", y es una de las formas de crear objetos en javascript, de hecho para mi es una de las más sencillas, aunque no sean objetos instanciables.

van más o menos así
<script>


var miObjeto = {
   miPropiedad:'valor',
   miMetodo:function(){
       return this.miPropiedad;
   }
}
alert(miObjeto.miMetodo());


</script>

El código anterior declara un objeto, asignándole una propiedad y un método que devuelve el valor de la propiedad. Luego de terminar la declaración se manda a llamar la función alert() de javascript y se le pasa por parámetro el resultado del método que declaramos en nuestro objeto.

En esto se basa el intercambio de datos con el servidor por AJAX, aunque es muy raro que se devuelvan métodos, pero es posible. En la mayoría de los casos se devuelven sólo propiedades que luego pueden ser parseadas por el framework que usemos o por funciones que hayamos elaborado. Claro que esto tiene la limitante, por usar el objeto xmlHttpRequest, de recibir datos solamente de peticiones hacia el mismo nombre de dominio, por cuestiones de seguridad.

A pesar de eso, hay otra forma de hacer una llamada de este estilo hacia otro servidor o nombre de dominio, llamada JSONP (JavaScript Object Notation with Padding).
Este se basa en la capacidad que tienen los navegadores de incluir scripts de otros dominios para ejecutarse dentro del entorno en el que se esta trabajando. Para usarlo del lado del servidor no hay mucha variante, sólamente debemos agregar nuestro objeto JSON como parámetro de una función que se ejecutará en el cliente.
Un ejemplo de esto es el siguiente

Una respuesta en JSON (en el mismo dominio) debería mirarse como esta:
{ idDato:"1", nombreDato:"Mi Dato" }


En cambio una respuesta en JSONP (en otro dominio) se vería como esta:
funcionDelCliente({ idDato:"1", nombreDato:"Mi Dato" })

En el caso de usar JSONP debemos tener una función llamada "funcionDelCliente(obj)" que reciba un objeto como parámetro, y para poder mandarlo a llamar deberíamos de crear la siguiente etiqueta dinámicamente con javascript
<script src="http://mi.otro.dominio.com/scripts/devolverDatos.php?type=JSONP" language="JavaScript"> </script> 
Más información acerca del uso de JSONP con jQuery Aqui



Estas son unas opciones de intercambio de datos que para mi son un poco más prácticas que usar otros formatos estándares como xml, tomando en cuenta que para generar un objeto json con PHP existe una función llamada json_encode que recibe como parámetro un array, de preferencia asociativo, para convertirlo a texto con la nomenclatura de JSON, además algunos Frameworks traen implementadas las funciones necesarias para parsear  estas peticiones, como jQuery o ExtJS que son los que más conozco.