08 octubre 2010

Componentes de Androide

Un rasgo fundamental de Androide es que una aplicación puede hacer uso de los elementos de otras aplicaciones (siempre y cuando ésta lo permita). Por ejemplo si usted tiene que mostrar una lista de contactos y hay otra aplicación que lo hace y lo ha puesto a disposición de nosotros, usted puede pedir esta lista de contactos para que haga su trabajo. Su aplicación no incorpora el código de la otra aplicación, simplemente ejecuta el trozo de código necesario cuando se necesite.

Para esto el sistema debe ser capaz de iniciar un proceso de aplicación cuando este sea requerido e instanciar los objetos de Java para aquella parte. Por lo tanto a diferencia de muchas de las aplicaciones de otros sistemas, androide no tiene un punto de entrada único para toda la aplicación (no tiene la función main(), por ejemplo). En su caso presenta componentes esenciales que el sistema puede instanciar y correr cuando sean necesario. Existen cuatro de tipos de componentes:

1. Actividades (Activities)

Una actividad presenta una interfaz visual para el usuario mediante la cual éste puede realizar determinada tarea. Por ejemplo una aplicación de mensajería puede presentar una actividad con una lista de usuarios a enviar los mensajes, una segunda actividad para escribir el mensaje al usuario seleccionado y otras actividades para examinar viejos mensajes guardados o realizar algunos cambios. Cada actividad aunque trabajen en conjunto, es independiente de las demás, cada una es implementada como una subclase de la clase base Activity.

2. Servicios (Services)

Un servicio no presenta una interfaz visual para el usuario, corre en un segundo plano por un determinado período de tiempo. Por ejemplo, un servicio podría tocar la música de fondo mientras el usuario está realizando otras tareas, o podría calcular determinados datos y pasarle el resultado a alguna actividad que lo necesite. Un servicio extiende de la clase base Service.

3. Receptores de emisión (Broadcast receivers)

Un receptor de emisión solamente recibe y reacciona para recibir anuncios, por ejemplo, que la batería se está agotando o que el usuario cambió alguna preferencia de lenguaje. Una aplicación puede presentar cualquier número de receptores de emisión, todos heredan de la clase base BroadcastReceiver. Los receptores de emisión no muestran una interfaz de usuario. Sin embargo, ellos pueden iniciar una actividad en respuesta a la información que reciben, o pueden usar NotificationManager para alertar al usuario.

4. Proveedores de contenido (Content providers)

Un proveedor de contenido hace un específico juego de datos de la aplicación para hacerlos disponibles a otras aplicaciones, los datos pueden ser almacenados en un sistema de archivos o en una base de datos SQLite, o en cualquier otra manera que tenga sentido. Hereda de la clase base ContentProvider y pone a disposición una serie de métodos que permiten a otras aplicaciones recuperar y almacenar los datos que él controla, sin embargo las aplicaciones no llaman a estos métodos directamente, sino que usan un objeto del tipo ContentResolver que puede conectarse con cualquier ContentProvider y llamar a sus métodos.

Que es Androide

Androide es un software de pila diseñado para dispositivos móviles que incluye un sistema operativo, un software intermedio y aplicaciones claves. El Androide SDK proporciona los instrumentos y APIs necesarios para comenzar a desarrollar aplicaciones en la plataforma de Androide usando el lenguaje de programación de Java.

Rasgos:

  • Marco de aplicación: permite la reutilización y reemplazo de componentes.
  • Máquina virtual Dalvik: optimizada para dispositivos móviles.
  • Navegador integrado: basado en el motor WebKit de código abierto.
  • Gráficos optimizados: impulsada por una biblioteca de gráficos 2D y una de gráficos 3D basada en las especificaciones de OpenGL ES 1.0 (aceleración de hardware opcional)
  • SQLite: para el almacenamiento de los datos.
  • Soporte de audio y video: para archivos comunes de audio, video y archivos de imágenes (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
  • Telefonía GSM: (dependiente del hardware)
  • Bluetooth, EDGE, 3G, y WiFi: (dependiente del hardware)
  • Cámara, GPS, brújula y acelerómetro: (dependiente del hardware)
  • Ambiente de desarrollo rico: incluye dispositivo emulador, herramientas para depuración, memoria e interpretación copiadora y plugins para Eclipse.

Aplicaciones

El androide cuenta con un juego de aplicaciones principales, incluso un cliente de correo electrónico, programa de SMS, calendario, mapas, navegador, contactos, y otros. Todas las aplicaciones son escritas usando el lenguaje de programación de Java.

Marco de Aplicación (Framework)

Los desarrolladores tienen un completo acceso al mismo marco APIs usado por las aplicaciones principales. La arquitectura de aplicación es diseñada para simplificar la reutilización de componentes; cualquier aplicación puede publicar sus capacidades para que cualquier otra pueda hacer entonces uso de ellas (sujeto a políticas de seguridad a cumplir por el marco). Este mismo mecanismo permite que muchos componentes sean sustituidos por el usuario.

Por debajo de todas las aplicaciones corren un juego de servicios y sistemas:

  • Un rico y extensible juego de Vistas (Views): que puede ser usado para construir una aplicación, incluso listas, grillas, cuadros de texto, botones, y hasta un navegador web.
  • Content Providers: permiten a las aplicaciones tener acceso a datos de otras aplicaciones (como Contactos), o compartir sus propios datos.
  • Resource Manager: proporciona acceso a los recursos sin código como cadenas localizadas, gráficos, y archivos de capas.
  • Notification Manager: permite a todas las aplicaciones mostrar mensajes de alarmas en la barra de estado.
  • Activity Manager: maneja los ciclos de vida de las aplicaciones y proporciona una navegación común.

07 octubre 2010

Parciales en symfony

Cuando usted necesite reutilizar alguna parte del código de una plantilla, usted necesita crear un parcial, Un parcial es eso, un trozo de código de plantilla que puede ser compartido entre varias plantillas. Un parcial es justamente otra plantilla que comienza con subrayar (_).

Por ejemplo:

Cree el archivo _list.php:

//apps/frontend/modules/students/templates/_list.php

Usted puede incluir el parcial usando el helper include_partial():

php include_partial('students/list', array('students' => $students))

El primer argumento del método include_partial() es el nombre del parcial (nombre del módulo, / y el nombre del parcial sin el subrayar (_) delante). El segundo argumento es un arreglo de las variables a pasar para utilizar en el parcial.

Formularios en Symfony

El Framework para formularios

En todo sitio Web es son necesarios los formularios, algunos muy simples y otros muy complejos, con varios campos y varias reglas de validación. Escribir los formularios es una de las tareas más complejas y tediosas para un programador Web: necesita escribir el código HTML del formulario, implementar las reglas de validación para cada campo, procesar cada valor para guardarlo en la base de datos, mostrar los mensajes de error, rellenar los campos válidos en caso de error, y mucho más… Por supuesto, en vez de hacer todo esto una y otra vez, symfony presenta un framework para hacer mucho más fácil la creación de formularios. El framework de symfony está compuesto de tres partes:

1. validation: El sub-framework de validación proporciona clases para la validación de las entradas de datos (enteros, cadenas, correo electrónico, contraseñas, etc.).

2. widgets: El sub-framework widget proporciona clases para la salida HTML de los campos (entrada de texto, áreas de textos, listas desplegables, etc.).

3. forms: Las clases de los formularios representan formularios compuestos por widgets y validadores y proporcionan métodos para ayudarnos a manejar el formulario. Cada campo del formulario posee su propio validador y su propio widget.

Formularios

Un formulario en symfony es una clase compuesta por uno o varios campos, cada campo tiene un nombre, un validador y un widget. Por ejemplo, un formulario para contacto puede ser definido por la siguiente clase:

class ContactForm extends sfForm

{

public function configure()

{

$this->setWidgets(array(

'email' => new sfWidgetFormInputText(),

'message' => new sfWidgetFormTextarea(),

));

$this->setValidators(array(

'email' => new sfValidatorEmail(),

'message' => new sfValidatorString(array('max_length' => 255)),

));-----------------

}

}

Los campos del formulario son configurados en el método configure(), usando los métodos setValidators() y setWidgets().

Por defecto todos los campos son requeridos, por lo tanto la definición de la validación para el email es equivalente a: sfValidatorEmail(array('required' => true)).