Translate

domingo, 9 de diciembre de 2018

¿Que novedades nos trae Linux Mint 19.1 Tessa?


Muchos sabrán que soy bastante fanático de Mint, pero no hago un post por cada versión pero esta versión me resulto por demás interesante por pequeños cambios en la interfaz que son un gran paso a la usabilidad:

El gestor de archivos Nemo es ahora tres veces más rápido
Se incluye un nuevo diseño del escritorio mucho más simple, claro y moderno respecto a su predecesor. En la parte de abajo encontramos una barra de iconos más grande incluyendo el botón de inicio (Menú).



Iconos de las aplicaciones ahora se compactarán


Mint 19.1 se viene con todo, si bien no tenemos la versión estable todavía podemos bajar la versión beta. 

Dejo link para bajar: https://www.linuxmint.com/release.php?id=34

viernes, 7 de diciembre de 2018

¿Como esta compuesto Apache HBase? Parte 2

Ahora hablaremos del HMaster. Pero antes les tengo que recordar que un cluster Hadoop y Hbase, esta concebido sobre el paradigma maestro y esclavo. Es decir hay un maestro que es el encargado de coordinar las tareas de los nodos esclavos.

HMaster es el componente del cluster HBase que se puede considerar como el nodo maestro a la vez, actúa como un maestro para los Servidores de Región que se ejecutan en diferentes máquinas. Es responsable de monitorear todos los RegionServers en un cluster HBase y también proporciona una interfaz para todos los metadatos de HBase para las operaciones cliente.

También maneja el failover de RegionServer y las divisiones de región. Puede haber más de una instancia de HMaster en un clúster HBase esto lo configuraremos así para tener alta disponibilidad. Si tenemos más de un maestro, solo un maestro está activo a la vez; en el momento de la puesta en marcha, todos los maestros compiten para convertirse en el maestro activo en el cluster. Un nodo maestro ganara y todas las demás instancias maestras permanecen pasivas hasta que el maestro activo se bloquea, se apage o ZooKeeper lo decida. En resumen, HMaster es un componente de coordinación en un cluster HBase, que también administra y nos permite realizar una tarea administrativa en el cluster.

Discutamos ahora que pasa cuando inicia el servidor HMaster:

  1. Se bloquea (no atiende solicitudes) hasta que se active HMaster.
  2. Finaliza la inicialización.
  3. Atiende peticiones.
  4. Limpia los registros al finalizar.
En HBase, hay una tabla llamada .META. (nombre de la tabla en el sistema de archivos), que conserva toda la información sobre las regiones a las que HMaster hace referencia para obtener información sobre los datos. De forma predeterminada, HMaster se ejecuta en el número de puerto 60000 y su interfaz de usuario web HTTP está disponible en el puerto 60010, que siempre se puede cambiar por medio de configuración. 

Resumiendo, HMaster es encargado de : 

  • Supervisa los servidores regionales
  • Maneja el failover de los servidores de región.
  • Maneja los cambios de metadatos.
  • Asignación / desasignación de regiones
  • Interfaces todos los cambios de metadatos
  • Realiza balanceo de recarga en tiempo de inactividad
  • Publica su ubicación al cliente utilizando ZooKeeper.
  • La interfaz de usuario web de HMaster proporciona toda la información sobre el clúster HBase (tabla, regiones, RegionServers y así sucesivamente)

¿Como esta compuesto Apache HBase?


Bueno, Apache HBase esta compuesto por :
  • ZooKeeper
  • Hmaster
  • RegionServer
  • Client
  • Catalog Table


Empecemos con ZooKeeper:
ZooKeeper es un sistema de coordinación para aplicaciones distribuidas. El cual provee una sincronización de recursos distribuidos y un grupo de servicios para HBase.

Esto permite centrarnos en la lógica del nuestro negocio y no en la coordinación de los clusters. Este tambien provee un conjunto de APIS que permiten entre otras cosas desarrollar tareas de coordinación.

En HBase, ZooKeeper es usado para elegir el master de un cluster para mantener que servidor esta disponible y meta-informcación del cluster.

ZooKeeper provee Apis para :

  • Consistencia, orden y durabilidad
  • Sincronización
  • Concurrencia para clusters distribuidos. 

Zookeeper fue desarrollado por yahoo research y su nombre esta relacionado con que se encuadra en el marco del proyecto Hadoop, el cual sus subproyectos son todos animales. Es decir ZooKeeper es el encargado de cuidar estos animales.
ZooKeeper no solo simplifica el desarrollo sino que también es una capa de abstracción que facilita la mejor accesibilidad a los componentes del sistema.
ZooKeeper mantiene un árbol con datos llamados internamente znode. Esto puede ser de dos tipos:

  • Efímero, que es bueno para las aplicaciones que necesitan entender si un recurso distribuido específico está disponible o no.
  • El persistente se almacenará hasta que un cliente no lo elimine explícitamente y también almacene algunos datos de la aplicación.
ZooKeepers se basan en un principio de mayoría (quorum); requiere que tengamos un quórum de servidores para estar activo, donde el quórum es  (n / 2) + 1, para un conjunto de tres nodos significa que dos nodos deben estar funcionando en cualquier momento, y para un conjunto de cinco nodos, un mínimo de tres nodos debe estar arriba. También es importante para la elección del maestro ZooKeeper. 



 

martes, 4 de diciembre de 2018

Arquitectura de Apache HBase y los árboles LSM


Apache HBase almacena el archivo utilizando el árbol LSM, pero que es un árbol LSM?

En ciencias de la computación, el árbol de combinación estructurado de registro (o árbol LSM) es una estructura de datos con características de rendimiento que lo hacen atractivo para proporcionar acceso indexado a archivos con un alto volumen de inserción, como los datos de registro transaccional. Los árboles LSM, al igual que otros árboles de búsqueda, mantienen pares clave-valor. Los árboles LSM mantienen los datos en dos o más estructuras separadas, cada una de las cuales está optimizada para su respectivo medio de almacenamiento subyacente; los datos se sincronizan entre las dos estructuras de manera eficiente, en lotes.

Una versión simple del árbol LSM es un árbol LSM de dos niveles. Como lo describe Patrick O'Neil, un árbol LSM de dos niveles comprende dos estructuras en forma de árbol, llamadas C0 y C1. C0 es más pequeño y reside totalmente en la memoria, mientras que C1 reside en el disco. Los nuevos registros se insertan en el componente C0 residente en la memoria. Si la inserción hace que el componente C0 exceda un cierto umbral de tamaño, un segmento contiguo de entradas se elimina de C0 y se combina en C1 en el disco. Las características de rendimiento de los árboles LSM se derivan del hecho de que cada componente está sintonizado con las características de su medio de almacenamiento subyacente, y de que los datos se migran eficientemente a través de medios en lotes sucesivos, utilizando un algoritmo que recuerda el ordenamiento de fusión.



La mayoría de los árboles LSM utilizados en la práctica emplean múltiples niveles. El nivel 0 se mantiene en la memoria principal y puede representarse mediante un árbol. Los datos en el disco se organizan en series ordenadas de datos. Cada ejecución contiene datos ordenados por la clave de índice. Una ejecución se puede representar en el disco como un solo archivo, o como una colección de archivos con rangos de claves que no se superponen. Para realizar una consulta en una clave en particular para obtener su valor asociado, se debe buscar en el árbol de nivel 0 y cada ejecución.

Una clave en particular puede aparecer en varias ejecuciones, y lo que eso significa para una consulta depende de la aplicación. Algunas aplicaciones simplemente quieren el par más reciente de clave-valor con una clave dada. Algunas aplicaciones deben combinar los valores de alguna manera para obtener el valor agregado adecuado para devolver. Por ejemplo, en Apache Cassandra, cada valor representa una fila en una base de datos, y las diferentes versiones de la fila pueden tener diferentes conjuntos de columnas.

Para mantener bajo el costo de las consultas, el sistema debe evitar una situación en la que haya demasiadas ejecuciones.

Volviendo a Hbase, Apache HBase almacena el archivo utilizando el árbol LSM, que mantiene los datos en dos partes separadas que están optimizadas para el almacenamiento subyacente. Este tipo de estructura de datos depende de dos estructuras, una actual y una más pequeña en la memoria y una más grande en el disco persistente, y una vez que la parte en la memoria se vuelve más grande que un cierto límite, se fusiona con la estructura más grande que se almacena en el disco que utiliza un algoritmo de clasificación de mezcla y un nuevo árbol en memoria se crea para las solicitudes de inserción más nuevas. Transforma el acceso aleatorio a los datos en un acceso secuencial a los datos, lo que mejora el rendimiento de lectura, y la fusión es un proceso en segundo plano, que no afecta el procesamiento en primer plano.

Ventajas y desventajas de una base de datos orientada a columnas

Cassandra y HBase son las base de datos orientadas a columnas más utilizadas en el software libre, para saber si aplican a mi proyecto debemos saber las ventajas y desventajas de las base de datos orientada a columnas:

Entre las ventajas tenemos:

  • Tiene tiene soporte incorporado para la compresión eficiente de datos.
  • Es compatible con la recuperación rápida de datos.
  • La administración y configuración simplificada. Es fácil escalar horizontalmente.
  • Es buena para hacer consultas con agreegación (SUM, COUNT, AVG, MIN, etc)
  • Es buena para particionar datos, se puede contar con varios datacenter distribuidos
Como desventajas tenemos:
  • No soporta joins o no esta optimizadas para esto. 
  • Puede ser difícil diseñar modelos eficientes, ya que no aplica el modelo relacional al que estamos acostumbrados. 
  • Registra y elimina muchas actualizaciones y tiene que realizar compactaciones frecuentes y también se divide. Esto reduce su eficiencia de almacenamiento.

Apache ActiveMQ Cookbook y Amazon AWS Tutorial

Download Minibooks!

 
AWS Lambda is an event-driven, serverless computing platform provided by Amazon as a part of the Amazon Web Services. It is a computing service that runs code in response to events and automatically manages the computing resources required by that code. The purpose of Lambda, as compared to AWS EC2, is to simplify building smaller, on-demand applications that are responsive to events and new information. AWS targets starting a Lambda instance within milliseconds of an event. Node.js, Python, Java, Go and C# through .NET Core are all officially supported as of 2016, and other languages can be supported via call-outs. However, some runtimes, such as the Java Virtual Machine, may be slower than others to start. AWS Lambda was designed for use cases such as image or objects uploads to Amazon S3, updates to DynamoDB tables, responding to website clicks or reacting to sensor readings from an IoT connected device. AWS Lambda can also be used to automatically provision back-end services triggered by custom HTTP requests, and “spin down” such services when not in use, to save resources.Now, we provide a comprehensive guide so that you can develop your own Amazon Lambda based applications. We cover a wide range of topics to be able to get your own projects up and running in minimum time. Enjoy!
 
 
Apache ActiveMQ is an open source message broker written in Java together with a full Java Message Service (JMS) client. It provides “Enterprise Features” which in this case means fostering the communication from more than one client or server. Supported clients include Java via JMS 1.1 as well as several other “cross language” clients. The communication is managed with features such as computer clustering and ability to use any database as a JMS persistence provider besides virtual memory, cache, and journal persistency. The ActiveMQ project was originally created by its founders from LogicBlaze in 2004, as an open source message broker, hosted by CodeHaus. The code and ActiveMQ trademark were donated to the Apache Software Foundation in 2007, where the founders continued to develop the codebase with the extended Apache community. ActiveMQ employs several modes for high availability, including both file-system and database row-level locking mechanisms, sharing of the persistence store via a shared filesystem, or true replication using Apache ZooKeeper. A robust horizontal scaling mechanism called a Network of Brokers, is also supported out of the box. In the enterprise, ActiveMQ is celebrated for its flexibility in configuration, and its support for a relatively large number of transport protocols. 
 

domingo, 2 de diciembre de 2018

Bases de datos orientadas a filas vs orientadas a columnas



Notemos que bases de datos como HBase o Cassandra nos proponen un modelo basado en columnas mientras que nosotros venimos de un modelo basado en Filas. Por esa razón esta bueno confrontar estos modelos. 


Filas
Columnas
Es eficiente para agregar o modificar datos
Es eficiente para leer datos
Leen páginas que contienen filas enteras.
Sólo leen las columnas que es necesitan
Son las mejores para OLTP
No están tan optimizadas para OLTP todavía
Los datos de la fila se almacenan en páginas contiguas en la memoria o en el disco
Las columnas se almacenan en páginas en memoria o en disco.


Supongamos que los registros de una tabla se almacenan en las páginas o registros de la memoria. Cuando es necesario acceder a ellas, estas páginas se llevan a la memoria primaria, si aún no están presentes en la memoria.
Si una fila ocupa una página y necesitamos todas las columnas específicas, como el salario o la tasa de interés de todas las filas para algún tipo de análisis, cada página que contenga las columnas debe ingresarse en la memoria; por lo que esta página en la página de salida dará como resultado una gran cantidad de entradas y salidas, lo que puede resultar en un tiempo de procesamiento prolongado.
En las bases de datos orientadas a columnas, cada columna se almacenará en páginas. Si necesitamos recuperar una columna específica, habrá menos entradas y salidas, ya que solo las páginas que contienen la columna especificada deben incluirse en la memoria principal y leer, y no es necesario que aparezcan y lean todas las páginas que contienen filas / registros. De ahora en adelante en la memoria. Por lo tanto, el tipo de consultas en las que solo necesitamos obtener columnas específicas y no registros o conjuntos completos se realiza mejor en una base de datos orientada a columnas, lo que es útil para el análisis en el que podemos recuperar algunas columnas y realizar algunas operaciones matemáticas, como la suma y media.

miércoles, 28 de noviembre de 2018

martes, 27 de noviembre de 2018

Comparando HBase con una base de datos relacional



Base de datos relacional
Apache HBase
Escala de forma horizontal
Escala de forma vertical
Usa SQL para leer registros en la tabla
Usa una API y Mapreduce para resolver las consultas
Esta organizada en tablas donde cada fila tienen el mismo numero de columnas que todas las filas de la tabla.
Esta organizada en tablas pero cada fila puede tener un numero variable de columnas.
La cantidad de datos que se pueden guardar dependen de la capacidad de un server
La cantidad de datos que se pueden guardar dependen de la capacidad del cluster de servidores
Tiene un esquema restrictivo
Tiene un esquema flexible
Soporta ACID, es decir soporta transacciones
No soporta ACID, no soporta transacciones
Es ideal para datos estructurados
Es ideal para datos estructurados y no estructurados.
Centralizada
Distribuida
Soporta joins
No soporta joins
Soporta integridad referencial
No soporta integridad referencial





Por lo visto son cosas totalmente diferentes, pensadas para casos de uso diferentes. Por lo tanto lo peor que podemos hacer es tomar un problema que se resuelve con una base de datos relacional y tratar de utilizar HBase.

lunes, 26 de noviembre de 2018

Como es streams en Kotlin?


En Java 8 tenemos los Streams que nos permiten convertir o filtrar colecciones.

Veamos un ejemplo:

List<String> names = Arrays.asList("Joe", "Jack", "William", "Averell");
List<String> jNames = names.stream()
                           .filter(name -> name.startsWith("J"))
                           .collect(Collectors.toList());

Veamos ahora como haríamos lo mismo con Kotlin:

val names = listOf("Joe", "Jack", "William", "Averell")
val jNames = names.filter { it.startsWith("J") }

La pregunta es por que escribimos mucho menos en Kotlin. Esto es una ventaja del azúcar sintáctico + convención ante configuración. Otro temita es que kothin no es lazy como streams de java. Pero eso es tema para otro post.

domingo, 25 de noviembre de 2018

Luchando contra NullPointerException con Kotlin - parte 2


Esta es la primera parte : https://emanuelpeg.blogspot.com/2018/11/luchando-contra-nullpointerexception.html

Como habíamos dicho Kotlin tienen diferente un montón de operadores para controlar los NullPointerException.

Veamos el operador ?. Un pequeño ejemplo:

val a = "Kotlin"
val b: String? = null
println(b?.length)
println(a?.length)

Esto devuelve b.length si b no es nulo, y nulo de lo contrario, por lo tanto esto retorna un valor de tipo : Int?

Esto es muy practico, ya que nos olvidamos de hacer muchas comprobaciones por ejemplo, si necesito el nombre del profesor del curso que esta haciendo juan :

juan?.curso?.profesor?.nombre

Como no estoy seguro que juan este haciendo un curso y el curso tenga un profesor y el profesor un nombre, uso ?.

Si queremos solo valores no nulos podemos usar let :

val listWithNulls: List<String?> = listOf("Kotlin", null)
for (item in listWithNulls) {
    item?.let { println(it) } // prints A and ignores null
}

let realiza la acción si no es nulo.

el operador ?. es útil para la asignación:

person?.department?.head = managersPool.getManager()

Si person o department es nulo no asigna nada.

El operador Elvis nos permite hacer acciones si los campos son nulos, veamos un ejemplo:

 fun foo(node: Node): String? {
    val parent = node.getParent() ?: return null
    val name = node.getName() ?: throw IllegalArgumentException("name expected")
    // ...
}

El operador de aserción no-nula (!!) convierte cualquier valor a un tipo que no sea nulo y lanza una excepción si el valor es nulo:

val l = b!!.length

Deberíamos manejar el NullPointerException.

Por ultimo tenemos unos chiches, por ejemplo si un valor es nulo y queremos castear nos va traer problema si este valor es null por lo tanto tenemos el as?

val aInt: Int? = a as? Int

Si tenemos una lista que permite nulos y queremos solo los valores no nulos contemos con filterNotNull :

val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull()

Y ya esta, que más queres?

Dejo link:
https://kotlinlang.org/docs/reference/null-safety.html

sábado, 24 de noviembre de 2018

Workshop de Laravel framework PHP

El principal objetivo del Workshop Framework PHP (Laravel) es generar un espacio de intercambio, discusión y presentación de experiencias en la temática de Framework para el desarrollo de aplicaciones Web y la tecnología Laravel que permita  enriquecer  los conceptos individuales de cada uno de los asistentes.

Lugar:
Facultad de Ciencia y Tecnología, Sede de Oro Verde – Ruta Provincial N° 11, Km 5 y ½. Salón de Acceso principal.

Fecha y Hora:  
Viernes 30 de Noviembre de 2018, a partir de las 15:00 horas.

Agenda / Cronograma:
15:00 a 15:45 horas– Acreditaciones y armado de grupos
15:45 a 16:00 horas– Presentación del evento
16:00 a 17:00 horas– Introducción a los frameworks
17:00 a 18:00 horas– Framework Laravel
18:00 a 18:30 horas– Coffee Break
18:30 a 19:10 horas– Desafíos en laboratorio – PARTE 1
19:10 a 19:50 horas– Desafíos en laboratorio – PARTE 2
19:50 a 20:00 horas– Sorteos, entrega de premios y cierre del Evento

Inscripciones:

Costo:
El Evento es Libre y Gratuito. Los asistentes que deseen recibir una certificación de asistencia al mismo deberán abonar ($100) cien pesos al momento de matricularse.

Cabe destacar que el evento fue declarado de interés institucional por el Consejo Directivo de la Facultad de Ciencia y Tecnología de la UADER bajo la resolución número 675/2018 de fecha 13 de noviembre de 2018.



miércoles, 21 de noviembre de 2018

Luchando contra NullPointerException con Kotlin


La excepción que más se encuentra en los logs de la aplicaciones Java es NullPointerException, y esto es esperable ya que java no trae mecanismos de chequeo de nulos. Solo el if, pero es muy manual y al no ser null un objeto, se hace bastante difícil tener que checkear nulos con un if todo el tiempo.

En cambio kotlin aprendió de esto y ha implementado varios mecanismos para prevenir los NullPointerException.

El primero, no podemos asignar null a un tipo común, no compila:

var a: String = "abc"
a = null // error de compilación

Tenemos que expresamente indicar que este tipo permite nulos :

var b: String? = "abc"
b = null // ok
print(b)

Ahora bien si nosotros llamamos a un método de b y no comprobamos que no sea nulo, no funciona:

val l = b.length // error: variable 'b' can be null

Tira error de compilación. Nosotros debemos comprobar que esto no sea nulo:

val l = if (b != null) b.length else -1

Bueno, hasta aquí un primer paso, en próximo post seguimos con los operadores antinull.

domingo, 18 de noviembre de 2018

Resultados de una encuesta sobre java

Hace unos días vi los resultados que lanzo java magazine con respecto a una encuesta que hizo. Y paso a mostrar las cosas que más me llamaron la atención las que no también:

Lenguajes que se utilizan en la plataforma java, primero esta Java, luego Clojure y Kotlin :

Para mi es una sorpresa no me imagine a Clojure tan usado. 

Ide más usado: IntelliJ IDEA ganando por 7 puntitos a eclipse. 



La base de datos más utilizada en un entorno Java es Oracle y luego MySQL : 


 El ORM más usado en Java es Hibernate, cantado :


El server más utilizado es Tomcat, tambien cantado: 


Otra dato que me pareció cantado, es el lenguaje que se utiliza en entorno Java (que no es propio de este entorno) : javascript y sql pero me llamo la atención que aparezca Python, C, C#, Go, etc


La herramienta para la gestión y construcción de proyectos Java : 


 El framework para presentación más utilizado:


Dejo link: http://www.javamagazine.mozaicreader.com/NovemberDecember2018/Default/15/0#&pageSet=15&page=0&contentItem=0




sábado, 17 de noviembre de 2018

5 cursos de TensorFlow


Si queremos aprender una tecnología nueva lo mejor es empezar por un libro o un curso y luego ir a tutoriales de internet. Saltar de tutorial en tutorial, nos da el conocimiento pero nos falta el orden. Con un curso o un libro aprendemos ordenadamente, como debe ser.

Por lo tanto dejo 5 cursos de TensorFlow :