lunes, 29 de julio de 2013

Algunos comando de Maven


  • Crear un proyecto:  
mvn archetype:create -DgroupId=org.yaxche.blog.ejemplos -DartifactId=blog.ejemplos.maven.comandosutiles.web -DarchetypeArtifactId=maven-archetype-webapp
  • Compilar proyecto sin test: 
mvn -Dmaven.test.skip=true install
  • Cambiar versión: 
mvn versions:set -DnewVersion=1.0.1-SNAPSHOT
  • Empaquetar un proyecto: 
mvn package


 

viernes, 26 de julio de 2013

Algunos conceptos de pruebas unitarias

Primero vamos a definir algunos conceptos:
  • Objeto mock, stubs : es un objeto falso que simula el comportamiento de un objeto verdadero,o de un objeto que aún no ha sido creado, pero necesitamos saber como actuaría.
  • Tipos de test : hay dos formas de relizar los test por estado y por interacción de objetos:
    • Estados.
    • Interacción de objetos. 
Vamos las diferencias entre mock y stubs:
  • Stubs : cuando queremos realizar pruebas por estado se recomienda los stubs, el assert no se ejecuta sobre un objeto stub, puede haber más de uno en un test y no hace que fallen los mismos, estos objetos tambíen hacen que el componente devuelva lo que se necesite cuando ejecutamos la acción.
  • Mock : es como un stub pero en vez de devolver el valor que necesitemos, lo que hace es verificar que se ha llamado al componenete que estamos testeando,  se suelen utilizar en las pruebas por interacciones, no es posible hacer mocks de singleton, los assert se ejecutan sobre los mock y si pueden hacer fallar un test.
Veamos uno ejemplo de cada tipo para comprender mejor los conceptos:

public void testStub(){
ServicioPintar servicioPintar= new ServicioPintar();
Coche coche = stub(Coche.class);

when(servicioPintar.pintarCoche()).theReturn("Coche pintado");

assert servicio.pintarCoche().equals():"el coche no se ha pintado";
}

public void testMock(){
ServicioPintar servicioPintar= new ServicioPintar();
Coche coche = mock(Coche.class); 

servicioPintar.pintarCoche());

verify(servicio.pintarCoche());
}
     
     


jueves, 20 de junio de 2013

Problemas de arranque con eclipse

Si alguna vez cerrais mal el eclipse y luego no podeís abrirlo, probad esta solución :
En la carpeta workspace\.metadata\.plugins\org.eclipse.core.resources y borramos el borrar el archivo .snap

martes, 18 de junio de 2013

Borrar usuario de SVN

He tenido que borrarme el usuario con el cual accedía al SVN, para ello me he tenido que ir a la carpeta eclipse -> configuration -> or.eclipse.core.runtime , alli hay un archivo culto .keyring, lo borramos, cerramos el eclipse y cuando vayamos a conectarnos al SVN nos pedirá usuario y contraseña.

martes, 4 de junio de 2013

Git

Git es una sistema de control de versiones distribuido. Su forma de almacenar la información es de forma muy diferente a CVS, Subversion ..,pero su interfaz tiene una formar muy parecida.


Cada vez que se va a guardar, git hace una foto del aspecto de todos los archivos en ese momento, y guarda una referencia a esa instantánea, aquellos archivos que no han sido modificados, se guarda un enlace de la ultima copia que se tiene de ese archivo.
Otra ventaja es que casi todas sus operaciones son en local , lo que hace las operaciones más rápida, al no depender de ningun otro ordenador en la red.

Continuara......

martes, 28 de mayo de 2013

Direct Web Remoting (DWR)

Es una librería Javascript que permite el uso de Ajax  de forma mucho más simple, y sí vamos a usar Java para nuestra aplicación DWR es la mejor opción que podemos usar , otras de las ventajas de esta librería es que no necesitamos implementar servlets sino solo necesitamos clases Java POJO ya que DWR esta basado en servlets internamente.

sábado, 25 de mayo de 2013

ManagedBean

Una clase java asociada a un formulario Jsf se les denomina ManagedBean, tenemos dos formas de declarar una clase como ManagedBean:
  • En el fichero face-config.xml:
  • @ManagedBean: 
                                       import javax.faces.bean.ManagedBean
                                       import javax.faces.bean.SessionScoped
                                      @ManagedBean
                                      @SessionScoped
                                       public class NombreBean {
                                      String mensaje="Hola";
                                     
                                          public String getMensaje() {
                                            return mensaje;
                                         }

                                         public void setMensaje(String mensaje) {
                                            this.mensaje = mensaje;
                                         }
                                       }
         Si no añadimos a la anotación (name="nombre") se utilizará por defecto el nombre de la clase en      minúscula y para usarlo en la clase jsf se utiliza la siguiente sintaxis  #{nombreBean.mensaje}

viernes, 24 de mayo de 2013

Ciclo de vida de un JSF

Cuando un usuario pincha en un botón o un link comienza el ciclo de vida de JSF, que contiene varias fases:
  1. Restore View:  se crea la vista con la información desde cero o la ya existente en los componentes si fue redireccionada desde otro control de jsf.
  2. Apply Request Values: se invocan los convertidores definidos, la funcionalidad del convertidor es transformar el dato String de la forma a uno de tipo Java y viceversa, también mantiene el dato String para seguirlo presentando en pantalla en la etapa de producir respuesta.
  3. Process Validations: se validan los valores pasado en la fase de aplicación llamando a los validadores de cada componente: validate(), marcando como error y creando el mensaje aquellos que no pasen la validación.
  4. Update Model Values: actualiza los valores del modelo con los nuevos valores pasados en la petición.
  5. Invoke Application: en esta fase, la implementación JSF maneja cualquier evento a nivel de aplicación, como enviar un formulario o enlazar a otra página.
  6. Render Response: se genera la respuesta Html.

jueves, 23 de mayo de 2013

Java Message Service (JMS)

Esta API es creada para solucionar los problemas de uso de colas de mensajería, permite a los componentes de aplicaciones basados en la plataforma Java2 crear, enviar, recibir y leer mensajes y hace posible la comunicación tanto de manera síncrona y asíncrona.
Forma parte de la plataforma J2EE para acceder a Sistemas de mensajería (MOM).

Existen 2 modelos de esta API:
  1. Modelo Punto a Punto:  uno envía el mensaje y otro lo recibe, el receptor envia un acuse de recibo y en caso de que no este disponible se queda guardado en un cola en espera.
  2. Modelo Publicador /Suscriptor: uno publica el mensaje y lo reciben todos los usuarios que estén suscripto al servicio donde se envió ese mensaje.
Los elementos de la Api se dividen en:
  • Clientes JMS: aplicaciones que envian o reciben mensajes a través de JMS
  • Mensajes: los mensajes que se intercambian, se componen de 3 elementos:
    • Header.
    • Properties.
    • Body.
  • Objetos administrados: para enviar o recibir mensajes los clientes tienen que conectarse por medio de los objetos. Hay dos tipos de objetos administrados en JMS:
    • ConnectionFactory: Se usa para crear una conexión al proveedor del sistema de mensajes.
    • Destination: Son los destinos de los mensajes que se envían y el recipiente de los mensajes que se reciben.
 Para enviar o recibir mensajes tienen que tener una serie de pasos :
  • Conseguir un objeto ConnectionFactory a través de JNDI.
  • Conseguir un destino, mediante el objeto Destination a través de JNDI.
  • Usar ConnectionFactory para conseguir un objeto Connection.
  • Usar Destination para crear un objeto Session.
Desde la versión 1.3 de la plataforma J2ee viene integrado esta API:

lunes, 20 de mayo de 2013

Colecciones

Tenemos 2 interfaces centrales:

  • java.util.Collection,permite básicamente añadir, eliminar y recorrer la estructura gracias a un Iterator:
    • List: son listas, estructura de datos secuencial, en la que cada elemento tiene una posición o índice, y que permite elementos duplicados.
      • ArrayList: el tamaño de la lista se aumenta dinamicamente, permite valores nulos y se pueden realizar búsquedas rápidas, localizar cualquier elemento de la lista sin tener que recorrerla.No esta sincronizada.
      • LinkedList: permite grandes inserciones y eliminaciones de elementos rápidos y  permite que se agreguen o eliminen elementos en la lista al inicio o al final pero no se puede acceder a elementos intermedios sin recorrer antes la lista.
      • Vector: igual que ArrayList pero esta sincronizado..
    • Set: son conjuntos,los elementos no tienen un orden, y no se permiten elementos duplicados.
      • HashSet:almacena sus elementos en una tabla Hash(estructura clave valor) y su orden es aleatorio.
      • TreeSet:guardar sus elementos en un árbol, ordenando sus elementos en base a sus valores, y por lo tanto es más lento que un HashSet.
        • SortedSet --> interfaz que almacena elementos sin duplicados y ordenados.
      • LinkedHashSet: versión ordenada de HashSet.
  • java.io.Map no se trata de una colección sino de un mapeo, es la que define la interfaz Map,cada valor tiene asociado una clave, tenemos la posibilidad de sobreescribir los métodos equals() y hashcode().
    • HashMap:  es una tabla en la que podemos insertar claves. Implementa el interface Map, lo cual nos permite utilizar los métodos relativos a los mapas,los valores que se van insertando en la colección internamente no tendrán un orden especifico,no están sincronizados, no permite claves duplicadas,una clave nula y múltiples  valores  nulos.
    • TreeMap: un mapa ordenado de forma natural, puede definir un tipo de orden (a través de las interfaces Comparable y Comparator)
      • SortedMap --> sus elementos están ordenados.
    • LinkedHashMap:version ordenada de HashMap, pero mantiene los elementos ordenados. Y porque es un poco más lento para agregar o quitar elementos de la colección. Pero permite una iteración más veloz

Para cada una de las interfaces tenemos una clase abstracta.

viernes, 17 de mayo de 2013

Instalar wysiwyg y CKEditor

Para instalar wysywyg lo he hecho desde el panel de administración, primero de la web drupal.org me he descargado el módulo  y luego  me he ido a la pestaña Módulos --> Instalar nuevo módulo, le he indicado donde estaba la carpeta y se ha instalado.
El segundo paso ha sido descargarme el plugin CKEditor instalarlo igual que wysywyg y luego nos descargamos el editor y descomprimimos la carpeta en sites/all/libraries,(en caso de no existir la carpeta crearla.)

Nos vamos a la pestaña módulos, buscamos los componentes instalados y los activamos, una vez hecho esto podemos entrar en cada uno y configurar su apariencia,perfiles, quien tiene acceso etc...


jueves, 16 de mayo de 2013

Modificar texto

A trabajar con algún tema , los textos que contienen no son los que necesitamos,  para modificar estos textos nos vamos a la parte de Administración --> Configuración --> Traducir Interfaz, buscamos la palabra que queramos modificar editamos y la cambiamos por la nueva.

Tenemos que tener en cuenta que para poder hacer esto tenemos que tener activado el Módulo Locale.

martes, 14 de mayo de 2013

Instalando Drupal en local (Windows)

He decidido aprender Drupal, así que me instalé todo lo que necesitaba para comenzar.

Tenia instalado anteriormente el servidor XAMPP así que es el que he utilizado, primero me descargué de la url  http://drupal.org/project/drupal la última versión de drupal (en mi caso la 7.22), lo descomprimí en la carpeta xampp/htdocs y renombre la carpeta que se crea a prueba, ya cada uno le pone el nombre que más le guste.

Luego me cree la base de datos, lo primero que hice fue mover la carpeta phpMyAdmin de xampp a xampp/htdosc, luego puse en la url http://localhost/phpMyAdmin y me cree la base de datos.

Una vez terminado ponemos en la url http://localhost/prueba y accedemos a la configuración de drupal, primero nos sale el idioma que queremos instalar, por defecto solo está inglés, si queremos instalarlo en español debemos irnos a la url http://drupal.org/project/es y descargarnos la versión española y lo descomprimimos en  xampp\htdocs\drupal_prueba\profiles\standard\translations\ recargamos la página y ya vemos que nos sale la opción de español.

Seguimos los pasos que nos van indicando  y al final poniendo localhost/prueba nos debe salir el panel de control y un tema por defecto, en el siguiente post explicaré que significa temas, módulos etc....

miércoles, 24 de abril de 2013

Firmar una aplicación Android

Las aplicaciones Android deben ser firmadas con un certificado digital para poder ser instaladas, en la fase de desarrollo se firman con un certificado en modo debug, pero a la hora de ser instaladas hay que crear el propio certificado digital, que es similiar al que se utiliza para los tramites de la administración, pero no necesita una autoridad de certificación que avale los datos del certificado, la firma nos garantiza que la apk no ha sido modificado.
Vamos a ver los pasos para instalarlo desde eclipse:
Abrimos el menú Windows/Preferences/Android/Build, vemos que tenemos cargado un certificado en modo debug, que es el que se instala automaticamente, pero este no es válido para publicar una aplicación.
Para poder publicar, en el menú archivo/exportar una aplicación android, seleccionamos el proyecto que queremos firmar, y vemos que tenemos dos opciones, utilizar un certificado existente o crear uno nuevo:
Una vez que tengamos el certificado creado o elegido, en el paso siguiente vemos que se nos va a crear la apk del proyecto seleccionado y este proyecto tiene su certificado digital incorporado.

Sockets

La interfaz socket define las reglas que un programa ha de seguir para utilizar los servicios del nivel de transporte en una red TCP/IP. Esta interfaz se basa en el concepto de socket. Un socket es el punto final de una comunicación bidireccional entre dos programas que intercambian información a través de Internet.
Un socket se va a identificar por la dirección IP del dispositivo donde está, más un número de puerto (de 16 bits).
Vamos a ver dos tipos de socket:
  1. Sockets stream (TCP): los sockets stream ofrecen un servicio orientado a conexión, donde los datos se transfieren como un flujo continuo, sin encuadrarlos en registros o bloques. Este tipo de socket se basa en el protocolo TCP, que es un protocolo orientado a conexión. Esto implica que antes de transmitir información hay que establecer una conexión entre los dos sockets. Mientras uno de los socketsatiende peticiones de conexión (servidor), el otro solicita la conexión (cliente). Una vez que los dos sockets están conectados, ya se puede transmitir datos en ambas direcciones. El protocolo incorpora de forma transparente al programador la corrección de errores. Es decir, si detecta que parte de la información no llegó a su destino correctamente, esta volverá a ser trasmitida. Además, no limita el tamaño máximo de información a transmitir.
  2. Sockets datagram (UDP): los sockets datagram se basan en el protocolo UDP y ofrecen un servicio de transporte sin conexión. Es decir, podemos mandar información a un destino sin necesidad de realizar una conexión previa. El protocolo UDP es más eficiente que TCP, pero tiene el inconveniente que no se garantiza la fiabilidad. Además, los datos se envían y reciben en datagramas (paquetes de información) de tamaño limitado. La entrega de un datagrama no está garantizada: estos pueden ser duplicados, perdidos o llegar en un orden diferente al que se envió.
  3. La gran ventaja de este tipo de sockets es que apenas introduce sobrecarga sobre la información transmitida. Además, los retrasos introducidos son mínimos, lo que los hace especialmente interesantes para aplicaciones en tiempo real, como la transmisión de audio y vídeo sobre Internet. Sin embargo, presenta muchos inconvenientes al programador: cuando transmitimos un datagrama no tenemos la certeza de que este llegue a su destino, por lo que, si fuera necesario, tendríamos que implementar nuestro propio mecanismo de control de errores. Otro inconveniente es el hecho de que existe un tamaño máximo de datagrama, unos 1500 bytes dependiendo de la implementación. Si la información a enviar es mayor, tendríamos que fraccionarla y enviar varios datagramas independientes. En el destino tendríamos que concatenarlos en el orden correcto.

    En conclusión, si deseas una comunicación libre de errores y sin preocupaciones para el programador es más conveniente que utilices sockets stream.

domingo, 7 de abril de 2013

Permisos en Android.

Para establecer permisos a una aplicación android, se hace en el archivo AndroidManifest.xml de la siguiente manera:
Los permisos mas usados en Android son:

  • CALL_PHONE Servicios por los que tienes que pagar – llamar directamente a números de teléfono (muy alta) Permite realizar llamadas sin la intervención del usuario.
  • SEND_SMS Servicios por los que tienes que pagar – envío SMS/MMS (muy alta) Permite a la aplicación mandar SMS.
  • WRITE_EXTERNAL_STORAGE Almacenamiento – modificar/borrar archivos en SD (alta) Permites la lectura de archivos y su modificación, típico en aplicaciones de backup.
  • READ_OWNER_DATA Tu información personal – leer datos de contacto (alta) Permiten leer información sobre el propietario del teléfono (nombre, correo electrónico, número de teléfono). Muy peligroso, algunas aplicaciones podrían utilizar esta información de forma no lícita.
  • READ_CALENDAR Tu información personal – leer datos de calendario (moderada) Solo da este permiso si consideras que la aplicación realmente lo necesita.
  • WRITE_CALENDAR Tu información personal – escribir datos de calendario (moderada) Este permiso no permite leer el calendario. Por las mismas razones que el anterior permiso, hay que plantearse si una aplicación nos pide este permiso con sentido o no.
  • READ_PHONE_STATE Llamadas de teléfono - leer estado del teléfono e identidad (alta) Muchas aplicaciones piden este permiso para ponerse en pausa mientras hablas por teléfono. Sin embargo, también permite el acceso al IMEI, IMSI y al identificador único de 64 bits que Google asigna a cada terminal. En las primeras versiones de SDK este permiso no era necesario.
  • ACCESS_FINE_LOCATION Tu ubicación – precisar la ubicación (GPS) (moderada) Localización basada en GPS.
  • ACCESS_COARSE_LOCATION Tu ubicación – ubicación común (basada en red) (moderada) Localización basada en telefonía móvil (Cel-ID) y Wi-Fi.
  • BLUETOOTH Comunicación de red crear conexión Bluetooth (baja) Conexión con otro dispositivo Bluetooth.
  • INTERNET Comunicación de red – acceso íntegro a Internet (muy alta) Permite establecer conexiones a través de Internet. Este es posiblemente el permiso más importante, en el que más hay que fijarse a quién se le otorga. Muchas aplicaciones lo piden, pero no todas lo necesitan. Cualquier malware necesita una conexión para poder enviar datos de nuestro dispositivo.
  • ACCESS_WIFI_STATE Comunicación de red – ver estado de conexión, ver estado de Wi-Fi(baja) Información sobre redes WiFi disponibles.
  • WAKE_LOCK Herramientas del sistema – Impedir que el teléfono entre en modo de suspensión (baja) Algunas aplicaciones pueden necesitar de este permiso, y realmente a lo único que puede afectar es a nuestra batería.
  • CHANGE_CONFIGURATION Herramientas del sistema – Modificar la configuración global del sistema (moderada) Permite cambiar la configuración (como locale). Pese a que es importante en sí, es muy común, así por ejemplo los widgets lo necesitan.
  • READ_SYNC_SETTINGS Herramientas del sistema – leer ajustes de sincronización (baja) tan solo permite saber si tienes sincronización en segundo plano con alguna aplicación (como con un cliente de Twitter o Gmail).
  • WRITE_APN_SETTINGS Herramientas del sistema – Escribir configuración del Punto de Acceso (moderada) Permite la configuración del punto de acceso a la red. Por ejemplo, encender y a apagar tu conexión de red o Wi-Fi.
  • MANAGE_APP_TOKENS Herramientas del sistema – recuperar aplicaciones en ejecución(moderada) Permite saber qué aplicaciones están corriendo en segundo plano y cambiar el orden.
  • SET_PREFERRED_APPLICATIONS Herramientas del sistema – establecer aplicaciones preferidas(moderada) Permite la asignación a una aplicación para que haga determinada tarea. Por ejemplo, la reproducción de vídeos.
  • VIBRATE Controles de hardware – control de la vibración (baja) Permite hacer vibrar al teléfono. Los juegos lo suelen utilizar bastante.
  • CAMERA Controles de hardware – realizar fotografías (baja) Permite acceso al control de la cámara y a la toma de imágenes.
  • RECORD_AUDIO Controles de hardware – grabar audio (moderada) Permite grabar sonido desde el micrófono del teléfono.

jueves, 28 de marzo de 2013

Manejadores de Eventos

Android captura los distintos eventos de usuario de forma homogénea y se los pasa a la clase encargada de recogerlos para ello se utiliza un objeto de tipo View y dispone de dos técnicas para recoger los eventos:
  • Escuchadores de eventos (Event Listener) : es una interfaz de la clase View que contiene un método callback que ha de ser registrado,este método será llamado por Android cuando se produzca la acción correspondiente. Para registrar un escuchador disponemos de dos formas:

      - Button boton = (Button)findViewById(R.id.boton); 
      boton.setOnClickListener( new OnClickListener() {
      public void onClick(View v) {
      // Acciones a realizar
      }
      });

      - La segunda alternativa consiste en implementar la interfaz OnClickListener como parte de tu clase y recoger los eventos en el método onClick(). public class Ejemplo extends Activity implements OnClickListener{ protected void onCreate(Bundle savedValues) { Button boton = (Button)findViewById(R.id.boton); boton.setOnClickListener(this); } public void onClick(View v) { // Acciones a realizar } }
Diferentes escuchadores de eventos:
    • onClick():Método de la interfaz View.OnClickListener. Se llama cuando el usuario selecciona un elemento. Se puede utilizar cualquier medio como la pantalla táctil, las teclas de navegación o eltrackball.
    • onLongClick():Método de la interfaz View.OnLongClickListener. Se llama cuando el usuario selecciona un elemento durante más de un segundo.
    • onFocusChange():Método de la interfaz View.OnFocusChangeListener. Se llama cuando el usuario navega dentro o fuera de un elemento.
    • onKey():Método de la interfaz View.OnKeyListener. Se llama cuando se pulsa o se suelta una tecla del dispositivo.
    • onTouch():Método de la interfaz View.OnTouchListener. Se llama cuando se pulsa o se suelta o se desplaza en la pantalla táctil.
    • onCreateContextMenu():Método de la interfaz View.OnCreateContextMenuListener. Se llama cuando se crea un menú de contexto.
  • Manejadores de eventos (Event Handler):Si estás creando un descendiente de la clase View, podrás utilizar varios métodos (callback) directamente usados como manejadores de eventos por defecto (Event Handlers). En esta lista se incluye:
    • onKeyDown(int keyCode, KeyEvent e) Llamado cuando una tecla es pulsada.
    • onKeyUp(int keyCode, KeyEvent e) Cuando una tecla deja de ser pulsada.
    • onTrackballEvent(MotionEvent me) Llamado cuando se mueve el trackball.
    • onTouchEvent(MotionEvent me) Cuando se pulsa en la pantalla táctil.
    • onFocusChanged(boolean obtengoFoco, int direccion, Rect prevRectanguloFoco) Llamado cuando cambia el foco.
    Es la forma más sencilla, dado que no hace falta usar una interfaz, ni registrar el método callback. Como en nuestro ejemplo estamos creando JuegoView, que es un descendiente de View, podremos utilizar directamente manejadores de evento.

sábado, 2 de marzo de 2013

APIs gráficas

Para trabajar en  2D se utilizan:
  • Canvas: representa una superficie donde dibujar.
  • Paint: define color,estilo,grosor del trazado de un gráfico vectorial.
  • Path: permite definir un trazado a partir de segmentos de rectas y curvas.
  • Drawable: abstracción que representa algo que puede ser dibujado.
Para trabajar en 3D se utilizan:
  • OpenGL
  • Renderscript.

sábado, 23 de febrero de 2013

Estilos y temas

Vamos a ver ahora como podemos darle estilos a nuestras aplicaciones Android.
Tenemos la posibilidad de darle estilos a algo concreto como un botón ,textos etc... o a toda una actividad mediante la creación de temas.

En primer lugar vamos a ver como creamos estilos.
Por ejemplo si queremos dar estilo a un botón lo podemos hacer añadiendo a la etiqueta Button las siguientes lineas:

android:layout_width="fill_parent"
    android:layout_height="wrap_content"

    android:textColor="#00FF00"
    android:typeface="monospace"
    android:text="Mi estilo" 

Si tenemos varios botones tenemos la posibilidad de crear un estilo en el archivo style.xml y añadirlo al botón style="@style/MiEstilo.Botones" y no tener que estar repitiendo el código anterior en todos los botones que tengamos.Para ello en el archivo style.xml añadimos las siguientes lineas:



De esta manera creamos el estilo, tenemos que tener en cuenta que tiene que heredar de un estilo ya existente como vemos en parent y con las siguientes lineas podemos modificar las propiedades del estilo que heredamos.
También tenemos la opción de crear un estilo que herede de nuestro estilo ya creado,para esto no hay que utilizar la etiqueta parent simplemente poniendo en el name el nombre del estilo y el nuevo nombre como vemos en la imagen de abajo:


Ahora vamos a ver los temas, debemos saber que los temas son estilos pero que se van a utilizar en toda una actividad:

Como vemos en la imagen, se crea igual que un estilo pero en vez de heredar de otro estilo hereda de un tema.En el AndroidManifest.xml a la actividad que queramos que utilice estos estilo le añadimos  android:theme="@style/miTema".

miércoles, 20 de febrero de 2013

Intenciones

Las intenciones se utiliza para que las actividades se ejecuten.Existen dos tipos de intenciones:

  1. Intenciones explícitas:se indica exactamente el componente a lanzar. Su utilización típica es la de ir ejecutando los diferentes componentes internos de una aplicación.
  2. Intenciones implícitas:pueden solicitar tareas abstractas, como “quiero tomar una foto” o “quiero enviar un mensaje”. Además las intenciones se resuelven en tiempo de ejecución, de forma que el sistema mirará cuantas aplicaciones han registrado la posibilidad de ejecutar ese tipo de actividad. Si encuentra varias el sistema puede preguntar al usuario la actividad que prefiere utilizar.
Hay varias formas de utilizar las intenciones :

  • Con este código se lanza una actividad:
Intent intent =new Intent(this, MI_CLASE.class);
intent.putExtra("usuario", "Pepito Perez");
intent.putExtra("edad", 27);
startActivity(intent);

  • Para recoger los datos una vez lanzada la actividad utilizamos el siguiente código:

Bundle extras = getIntent().getExtras();
String s = extras.getString("usuario");
int i = extras.getInt("edad");

  • Cuando la actividad lanzada termina también podrá devolver datos que podrán ser recogidos por la actividad lanzadora de la siguiente manera.

Intent intent = new Intent(this, MI_CLASE.class);
startActivityForResult(intent, 1234);
@Override protected void onActivityResult (int requestCode, int resultCode, Intent data){
if (requestCode==1234 && resultCode==RESULT_OK) {
String res = data.getExtras().getString("resultado"); }
}
En la actividad llamada has de escribir:
Intent intent = new Intent();
intent.putExtra("resultado","valor");
setResult(RESULT_OK, intent);
finish();

lunes, 18 de febrero de 2013

Actividad

Una actividad es una interacción del usuario con una parte de la aplicación, son las responsables de crear el interfaz de usuario. Una aplicación suele estar formada por una serie de actividades, el usuario puede ir navegando entre actividades.
Una actividad consta de una serie de características:
  • Esta asociado a un layout.
  • La clases tiene que descender de la clase Activity. En esta clase se indicará que layout es el suyo.
  • Cada clase (Actividad) no comparte sus variables.
  • Todas las actividades creadas se deben registrar en el AndroidManifest.xml.

sábado, 9 de febrero de 2013

Layouts

Un layout es un contenedor de uno o varias vistas y también puede contener más layouts.Podemos encontrar los diferentes layouts:
  • LinearLayout: Dispone los elementos en una fila o en una columna.
  • TableLayout: Distribuye los elementos de forma tabular.
  • RelativeLayout: Dispone los elementos en relación a otro o al padre.
  • AbsoluteLayout: Posiciona los elementos de forma absoluta.(esta obsoleto)
  • FrameLayout: Permite el cambio dinámico de los elementos que contiene.

Atributos de la clase TextView

Para las vistas que contienen texto en su interior tenemos los siguientes atributos:


Basicos:
  • text: texto que se va a mostrar. se puede poner directamente "Hola" o utilizando @string/saludo, este último es muy util a la hora de tener distintos idiomas.
  • text_style: bold/italic.....
  • typerface: fuentes.
  • gravity: alineación de los textos.
  • text_apparence: estilos sólo atributos de texto
  • hint: texto que se mostrará normalmente en un EditText, por ejemplo en las cajas de texto que aparecen "Introduzca dni".
Tamaños
  • text_size: tamaño del texto.
  • width: ancho final del texto
  • height: alto final del texto
  • text_scale_x: deforma el texto en escala horizontal
  • max_lenght: máximo de caracteres permitidos.
  • lines: numero de lineas que se visualiza, min_lines y max_lines.
Color
  • text_color: color del texto
  • text_color_link: color de los enlaces
  • text_color_highlight: color de texto cuando es seleccionado
  • text_color_hint: color de texto de hint
Para definir los colores podemos utilizar "#FFFFF", colores definidos por el sistema"@android:color/blue", o colores definidos por el usuario."@color/micolor"




Atributos de la clase View

la clase View es la  principal en la jerarquica de vistas y tienes una series de atributos para su buen uso.

Tenemos los de posicionamiento:

  • layout_width: ancho.
  • layout_height: alto.
Aunque lo habitual es utilizar:
  • wrap_content: ajusta el tamaño al contenido
  • fill_parent: ajusta el tamaño al máximo. En el nivel API 8 se renombra a match_parent
Los siguientes atributos para los margenes exteriores:
  • layout_margin.
  • layout_margin_botton
  • layout_margin_left.
  • layout_margin_right.
  • layout_margin_top.
Para centrar o justificar la vista tenemos el atributo layout_gravity y para repartir el espacio disponible entre las vistas utilizamos layout_weight.

Tenemos atributos que definen el comportamiento de las vistas:
  • id: identifica a la vista, para crear uno nuevo se utiliza @id+/nombre del identificador para acceder a este dientificador se utiliza solo @id/nombre y también tenemos la posibilidad de utilizar identificadores ya definidos por el sistema  @android:id/tab.
  • tag:string que utilizará el programador para lo que el necesite.
  • content_description: describe contenido de la vista
  • clickable: para indicar si la vista reacciona ante eventos clickables
  • onclick: el metodo que se invoca será el onClick
  • long_clickable: si la vista reacciona a eventos clickables largos.
  • focusable: indica que elemento de la vista tome al foco
  • focusable_in_touch_mode:donde se pusle se colocará el foco.
  • next_focus_up, next_focus_down, next_focus_right, next_focus_left, se coloca el foco cuando utilizamos las teclas del cursor.
Para los aspectos visuales de la vista tenemos:
  • visibility: para la visibilidad de la vista:
    • visible.
    • invisible
    • gone: la vista es invisible pero no ocupa lugar.
  • background: permite imagen en la vista.
  • style: permite que la vista se le definan estilos.
  • min_width,min_height : alto y ancho minimo de la vista.
  • padding, paddingBottom, paddingTop,paddingLeft, paddingRight: margen interior de la vista.
Todos estos atributos se pueden modificar desde Xml o desde código java.


miércoles, 16 de enero de 2013

ITIL (Biblioteca de Infraestructura de Tecnologías de la Información)

Conjunto de libros que establecen los mejores procesos para desarrollar servicios de forma óptima recomendables para las distintas organizaciones.
ITIL se desarrolló para conseguir los siguientes objetivos:
  1. Alinear los servicios IT con las necesidades actuales y futuras del negocio y sus clientes.
  2. Mejorar la calidad de los servicios entregados.
  3. Reducir el coste a largo plazo de la provisión de los servicios.
Dentro de ITIL nos encontramos con los siguientes conceptos:
  • Proceso: conjunto estructurado de actividades diseñado para cumplir un objetivo y obtener resultados.
  • Ciclo de vida: distintas fases de un servicio:
    • Estrategia.
    • Diseño.
    • Transición.
    • Operación.
    • Mejora continua.
  • Función: subdivisión de una organización especializada en un tipo concreto de trabajo y con responsabilidad de obtener resultados concretos con sus propios recursos y capacidades.
  • Rol: conjunto de responsabilidades,actividades y autoridades de una persona o equipo.Diferenciamos 3 tipos de roles:
    • Dueño del Proceso > responsable de que el proceso cumpla su objetivo.
    • Gestor del Proceso > responsable de que el proceso funcione correctamente.
    • Dueño del Servicio > responsable del proceso frente al cliente.
                  Para la definición de roles se us ala herramienta Matriz RACI:
    • Responsible: ejecuta la tarea.
    • Accountable: responsable de la tarea.
    • Consult: persona a la que se le consulta sobre una decisión o tarea.
    • Inform: persona que recibe el informe del resultado de la tarea.
  • Servicio: formar de proporcionar valor al cliente.
  • Valor: es el resultado de la combinación de utilizad(servicio hace lo que quiero que haga) y garantía(el servicio funciona como debe.).
  • Paquete de Servicio:toda la información referente para suministrar el servicio al cliente,este paquete incluye un paquete de nivel de servicio,uno o mas servicios  y servicios de soporte
  • Paquete de Nivel de Servicio:define la utilidad y garantía para un paquete de servicio.
  • Gestión de Servicios: transforma recursos en servicios que aporten valor a los clientes.
La esencia de ITIL V3 es el ciclo de vida.Iré desarrollando las distintas fases en los siguientes post.