jueves, 4 de diciembre de 2014

NoSql

Nosql es el acronimo Not only Sql, las caracteristicas de la base de datos NoSQl son las siguientes:

  •  No usan SQL como el principal lenguaje de consultas.
  •  Los datos almacenados no requieren estructuras fijas
  •  No soporta Join y tampoco garantizan completamente ACID (atomicidad, consistencia, aislamiento y durabilidad).
  •  Escalan bien horizontalmente.


El teorema de CAP "es imposible para un sistema computacional distribuido ofrecer simultánamente las siguientes 3 garantías":

Consistencia : Todos los nodos ven los mismo datos al mismo tiempo.
Disponibilidad : Garantiza que cada petición recibe una respuesta acerca de si tuvo éxito o no
Tolerancia a la partición : El sistema continua funcionando a pesar de la pérdida de mensajes



Si queremos elegir una base de datos nosql, la cosa se pone un poco dificil porque actualmente hay 150 sistemas de base de datos nosql. ¿Cúal elegir? lo primero no todas las bases de datos nosql son iguales, podemos clasificar en 4 tipos diferentes:
  • Orientadas a documentos
  • Orientadas a columnas
  • Clave-valor
  • Grafos
Orientadas a documentos.

Almacena documentos en formatos XML, JSON o BSON, un ejemplo puede ser MongoDB

Orientadas a columnas.

Cada fila pude tener una configuración diferentes de columnas, un ejemplo puede ser HBase

Clave-valor

Una colección de pares clave/valor, un ejemplo pueder Redis

Grafos

Basadas en la teoría de grafos utilizan nodos y aristas para representar los datos almacenados, un ejemplo puede ser Neo4j

Como vemos tenemos un monton de tipos de bases de datos nosql para resolver cualquier tipo.
Actualemente la base de datos más usuada es mongodb debido a su modelo de datos y versatilidad


miércoles, 3 de diciembre de 2014

Cena de filósofos

Hola

Después de ver el tema de Thread safe, vamos a aplicar nuestro conocimientos para resolver un problema típico que el la cena de los filósofos.

El enunciado es el siguiente:

Cinco filósofos alrededor de una mesa pasan su vida comiendo o pensando. Cada filósofo tiene un plato de arroz y un palillo a la izquierda de su plato. Cuando un filósofo quiere comer, cogerá los dos palillos de cada lado del plato y comerá.





Si analizamos el problema podemos sacar las siguiente conclusión, solo pueden estar comiendo 2 filósofos a la vez:


  • El filósofo 0 puede comer con el filósofo 2 o con el 3.
  • El filósofo 1 puede comer con el filósofo 3 o con el 4.
  • El filósofo 2 puede comer con el filósofo 4 o con el 0.
  • El filósofo 3 puede comer con el filósofo 0 o con el 1.
  • El filósofo 4 puede comer con el filósofo 1 o con el 2.
 Con estas premisas he resulto el problema con la palabra reservada synchronized y clase Semaphore, como siempre el código esta subido a mi cuenta de github


martes, 18 de noviembre de 2014

Thread Safe

Hola

Hoy voy hablar sobre thread safe, es algo que siempre escuchamos cuando programamos, pero ¿Qué es thread safe?

Una clase Java es Thread safe cuando su compartamiento no sé ve interferidor y modificado por otros hilos de forma concurrente.

En una imagen se ve mejor esta definición (mía):

Como vemos tenemos dos hilos que accede al mismo objecto Counter. Si counter es thread safe su comportamiento no sé vee alterado sí llega primero thread 1 y despues thread 2.

Java tiene varios mecanismo de hacer thread safe una clase:
  • Uso de la palabra reservada synchronized
  • Uso de la palabra reservada volatile
  • Uso de la clase ThreadLocal
  • Uso de la clase Lock
  • Uso de la clase Semaphore
Un error que se produce con el uso de sincronización es el bloqueo mutuo (dead Lock), como siempre esto se ve mejor con un ejemplo.

lunes, 17 de noviembre de 2014

ElasitcSearch

Hola

En esta entrada vamos a usar como almacen de datos una base de datos de tipo NoSQL, El primero que vamos a usar es ElasticSearch un proyecto de Apache que el corazón de elasticSearch es Lucene.

Como la mayoría de gente ha trabajado con base de datos relacional vamos hacer una comparativa de conceptos entre los dos sistemas:

SQL ElasticSearch
Esquema Indice
Tabla Tipo
Fila Documento
Columna Propiedad

ElasticSearch esta  hecho en java completamente, esta basado en documentos en formato JSON, se puede escalar horizonatalmente, permiter crear un cluster de nodos, tambien nos ofrece una api rest para acceder a los datos:

server:port/indice/tipo/id

ElasticSearch cuando se guarda un documento, ademas de guardar las propiedades dicho documento se añade las siguientes:
  • _id : valor único de 22 caracteres en base 64
  • _version : indica el número de modificaciones ha sufrido el documento
  • _index : indica a que indice pertenece el documento
  • _type : indica a que tipo pertenece el documento
Con los conceptos claros procedemos ha crear un proyecto que nos permita hacer las operaciones CRUD, como siempre el proyecto se encuentra en github

miércoles, 8 de octubre de 2014

Anotaciones Java

Hola

Esta entrada voy a explicar como crear  nuestras propias anotaciones java y usarlo. Las anotaciones Java aparecieron en la version 1.5 de java, seguro que lo habéis usado por ejemplo:

  • @Override
  • @SuppresWarning
  • @Deprecated
Para crear nuestro anotación tenemos que crear una interface pero un poco especial como podemos ver en ejemplo tenemos que poner la @ delante de la palabra interface.


@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnotacion{
String valorInicial() default "algo";
}

Vamos a analizar el codigo, lo primero el @Target es donde determinamos donde podemos usar nuestra anotación a nivel de clase, metodo, campos, etc. Los valores posibles son los siguientes:
  • ANNOTATION_TYPE
  • CONSTRUCTOR
  • FIELD  
  • LOCAL_VARIABLE 
  • METHOD  
  • PACKAGE 
  • PARAMETER  
  • TYPE
Como se puede ver el mismo nombre nos indica donde podemos usar nuestras anotaciones, tambien podemos usar combinaciones por ejemplo

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})

La siguiente linea analizar es @Retention determina cuanto tiempo deben estar disponibles los datos de la anotación, los valores posible son los siguientes:
  • SOURCE : Solo visible en source ignorada por el compilador y JVM
  • CLASS : El compilador lo puede ver y actuar pero es ignorada JVM
  • RUNTIME : La JVM puede ver la anotacion y utilizar en tiempo de ejecucion por reflection
Con esto ya tenemos nuestra anotación como podeis ver se puede asignar valores por defecto usando la palabra reservada default.

Como simpre esto se ve mejor con un ejemplo, tengo un ejemplo subido a github.com 

martes, 7 de octubre de 2014

Oauth 2.0 (seguridad nuestra Api Rest)

Hola

En esta entrega vamos a hablar Oauth (Open Authorization) es un protocolo abierto,
que permite autorización segura de una API de modo estándar y simple para aplicaciones de escritorio, móviles y web.

En como siempre vamos a explicar lo que es oauth version 2.0 y posteriormente un ejemplo. A continuación se muetra una imagen mostrando el baile de Oauth 2.0



El acceso de los clientes a su aplicación (1) y hace que la solicitud para acceder a un recurso protegido (2).
 El servidor de autenticación devuelve un token de acceso basado en las credenciales de usuario publicado (3).  Después, el usuario realiza una solicitud para acceder a los recursos con el token obtenido anteriormente (4).  Una vez que el token se valida, el servidor de recursos devuelve el recurso protegido a la aplicación cliente (5).

Asi se tiene una idea global del funcionamiento de Oauth 2.0, ahora vamos a ver un diagramas que muestra mas claro el funcionamiento








Este ejemplo muestra como sería usando grant_type "password y refresh_token", hay más opciones que no vamos a ver aquí pero si quereís más información.

Como véis la primera petición se envía la información de usuario, contraseña, client_id y password, la respuesta es el access_token y token_refesh. El access_token es el token que vamos a usar para poder acceder a los recursos, como podemos ver en la segunda petición.

Los tokens tiene un tiempo de duración, cuando accedemos a los recursos y obtenemos el mensaje “invalid_token” debemos solicitar un nuevo token usando el token_refresh que obtenimos anteriormente.





Como veis la petición de refresco del token es muy parecida a la de obtención de token (no enviamos el usuario y contraseña)

Como se puede ver es muy intuitivo el protocolo oauth 2.0 como siempre hay varias implementaciones de oauth 2.0:


  • Spring Oauth
  • Apache Oltu
  • Picketlink
El ejemplo que tenemos hemos usado Spring Oauth 2.0, como siempre esta subido a github.com

viernes, 8 de agosto de 2014

Full Stack Developer

Hola

Hoy voy hablar sobre un perfil que se esta demandado mucho en los últimos años, que es Full Stack Developer.¿Qué es un Full Stack Developer?

En pocas palabras "el puto amo", es decir una persona que sabe de todo y tiene un conocimiento medio ó alto de tecnologías, heramientas, paradigmas, metodologias, servidores, redes, etc y gran facilidad de aprender. ¡Casi nada!

En el mundo del desarrollo web (donde estoy actualemente trabajanado) son muchas las tecnologías y las herramientas que hay para el desarrollo web, dependiendo del tamaño del softtware se puede utilizar un conjunto de tecnologías y herremientas para su desarrollo.

Para un desarrollo pequeño o mediano este sería el stack tecnologico

y para un desarrollo grande


Como veis son un monton de tecnologías, falta las herremientas, metodologías, servidores, etc. como veis hay que saber de muchas cosas para poder ser un Full Stack Developer.¿Se puede ser un Full Stack Developer?

Sí, pero no se hace de noche de la mañana, se tarda varios años y siempre se tiene que estar actulizando, probando y evaluando. Como he dicho al principio para ser FSD (Full Stack Developer) tienes que ser el puto amo.