Translate
domingo, 6 de enero de 2019
Que es la Arquitectura hexagonal?
La arquitectura hexagonal es un estilo que habla sobre la organización en capas de una manera que aísla su lógica central de elementos externos.
La capa central es la de lógica del negocio, y los elementos externos son como puntos de integración, por ejemplo, DBs, APIs externas, UIs, y otros. Divide el software en las partes internas y externas. Las partes internas contienen la lógica empresarial principal y la capa de dominio. La parte exterior consta de IU, base de datos, mensajería y otras cosas. Las partes internas y externas se comunican entre sí mediante puertos y adaptadores.
Para resumir, la arquitectura hexagonal es un enfoque utilizado para dividir la aplicación en partes internas y externas. Están conectados a través de puertos (expuestos por el interior) y adaptadores (implementados por el exterior). Por lo tanto, al aplicar este enfoque, el código de caso de uso central permanece intacto y puede servir para múltiples canales, soportando diferentes protocolos. También ayuda a hacer la aplicación fácil de probar. Tampoco esta bien implementar todas las funcionalidades de esta manera deberíamos ser selectivos.
Si me permiten una opinion, no veo mayor innovación en esto, es un nombre bonito para un estilo arquitectónico que venimos utilizando hace tiempo.
Nuevos cursos de MongoDB University
Me llego el siguiente mail promocionando cursos de mongodb y la noticia de nuevos cursos:
|
sábado, 5 de enero de 2019
Las 10 mejores distros livianas para este año 2019
Leí este post y me resulto muy interesante hacer un post sobre distros linux livianas, no solo porque cuando desarrollamos necesitamos mucho hardware y una ditro liviana puede ser de gran ayuda, sino tambien porque esta buenisimo empezar con una distro liviana y básica y a medida que se va utilizando poder agregarle cosas. Terminas teniendo un sistema super personalizado y eficiente.
- Bodhi Linux
- Puppy Linux
- Linux Lite
- Ubuntu MATE
- Lubuntu
- Arch Linux + Lightweight Desktop environment
- LXLE
- Peppermint OS
- antiX
- Manjaro Linux Xfce Edition
Dejo link: https://maslinux.es/las-10-mejores-distros-livianas-para-este-ano-2019/
miércoles, 2 de enero de 2019
3 libros gratuitos de AWS Lambda, cybersecurity y React
lunes, 31 de diciembre de 2018
Minilibros gratuitos.
Quiero compartir estos 2 libros gratuitos de Java Code Geeks :
Download Minibooks!
|
|
jueves, 27 de diciembre de 2018
The Hundred-Page Machine Learning Book
Podemos bajarnos el libro "The Hundred-Page Machine Learning Book" la versión draf hasta que sea publicado.
Sin más dejo el link: http://themlbook.com/wiki/doku.php
lunes, 24 de diciembre de 2018
Feliz Navidad!!
Desde el blog queremos desearle una muy Feliz Navidad!!!
nano navidad.sh
#!/bin/bash
trap "tput reset; tput cnorm; exit" 2
clear
tput civis
lin=2
col=$(($(tput cols) / 2))
c=$((col-1))
est=$((c-2))
color=0
tput setaf 2; tput bold
# Tree
for ((i=1; i<20; i+=2))
{
tput cup $lin $col
for ((j=1; j<=i; j++))
{
echo -n \*
}
let lin++
let col--
}
tput sgr0; tput setaf 3
# Trunk
for ((i=1; i<=2; i++))
{
tput cup $((lin++)) $c
echo 'mWm'
}
new_year=$(date +'%Y')
let new_year++
tput setaf 1; tput bold
tput cup $lin $((c - 6)); echo FELICES FIESTAS
tput cup $((lin + 1)) $((c - 9)); echo Y mucho CODIGO en $new_year
let c++
k=1
# Lights and decorations
while true; do
for ((i=1; i<=35; i++)) {
# Turn off the lights
[ $k -gt 1 ] && {
tput setaf 2; tput bold
tput cup ${line[$[k-1]$i]} {column[$[k-1]$i]}; echo \*
unset line[$[k-1]$i]; unset column[$[k-1]$i] # Array cleanup
}
li=$((RANDOM % 9 + 3))
start=$((c-li+2))
co=$((RANDOM % (li-2) * 2 + 1 + start))
tput setaf $color; tput bold # Switch colors
tput cup $li $co
echo o
line[$k$i]=$li
column[$k$i]=$co
color=$(((color+1)%8))
# Flashing text
sh=1
for l in C O D I G O
do
tput cup $((lin+1)) $((c-3+sh))
echo $l
let sh++
sleep 0.01
done
}
k=$((k % 2 + 1))
done
Y ahora ejecutamos:
bash navidad.sh
domingo, 23 de diciembre de 2018
Operaciones comunes con collections en Kotlin
Vamos a revisar el conjunto de funciones que tiene kotlin para manejo de colecciones:
Vamos a empezar con 'filter'. Éste filtra el contenido de la lista y mantiene solo los elementos que satisfacen el predicado. Por ejemplo, aquí tenemos el predicado que comprueba que un número es par, y solo los números pares están presentes en la lista resultante.
val originalList = listOf(1, 2, 3, 4, 5, 6)
assertEquals(listOf(2, 4, 6), originalList.filter { it % 2 == 0 })
La función map() transforma una colección en una nueva, y transforma cada elemento en esta colección. Por ejemplo, aquí encontramos un cuadrado de cada número dado y la colección resultante es una colección de cuadrados. Tenga en cuenta que la colección resultante contiene tantos elementos como el primero.
val nums = listOf(1, 2, 3, 4, 5, 6)
val nums2 = nums.map { e -> e * 2 }
println(nums2)
Hay varios predicados que verifican si los hechos dados son verdaderos para los elementos. Por ejemplo, 'any' comprueba que hay al menos un elemento que satisface el predicado dado. all verifica si todos los elementos satisfacen el predicado, y none comprueba que ninguno de los elementos satisface el predicado dado.
val nums = listOf(4, 5, 3, 2, -1, 7, 6, 8, 9)
val r = nums.any { e -> e > 10 }
if (r) println("There is a value greater than ten")
else println("There is no value greater than ten")
r = nums.all { e -> e > 0 }
if (r) println("nums list contains only positive values")
else println("nums list does not contain only positive values")
r = nums.none { e -> e > 0 }
if (!r) println("nums list contains only positive values")
else println("nums list does not contain only positive values")
find() encuentra un elemento que satisface el predicado dado y lo devuelve como resultado. Si no hay ningún elemento (obligatorio) que devuelve null.
firstOrNull() busca el primer elemento te devuelve un elemento o 'null' como resultado. Mientras que first() solo toma un predicado y lanza una excepción si no hay tal elemento
val originalList = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val result = originalList.firstOrNull { it > 4 }
assertEquals(result, 5)
count() cuenta el número de elementos que satisfacen el predicado dado. max retorna el máximo, min el mínimo:
val nums = listOf(11, 5, 3, 8, 1, 9, 6, 2)
val len = nums.count()
val max = nums.max()
val min = nums.min()
val msg = """
max: $max, min: $min,
count: $len
"""
println(msg.trimIndent())
partition divide la colección en dos (colecciones) los que cumplen o no un predicado.
val nums = listOf(4, -5, 3, 2, -1, 7, -6, 8, 9)
val (nums2, nums3) = nums.partition { e -> e < 0 }
println(nums2)
println(nums3)
Si desea dividir la colección en varios grupos por clave dada, puede usar groupBy utilizando como argumento la forma de agrupar los elementos, cuál debería ser la clave. Por ejemplo
val nums = listOf(1, 2, 3, 4, 5, 6, 7, 8)
val res = nums.groupBy { if (it % 2 == 0) "even" else "odd" }
println(res)
AssociateBy también realiza la agrupación, pero devuelve un elemento como el valor del mapa. AssociateBy debe usarse solo si la clave es única. Si no es así, se eliminan los duplicados. De esta forma nos quedamos con el ultimo.
val nums = listOf(1, 2, 3, 4, 5, 6, 7, 8)
nums.associate { (if (it % 2 == 0) "greatest_even" else "greatest_odd") to it }
Otra forma de organizar de alguna manera un par de colecciones es zip. El cual las une :
val names = listOf("Jon", "John", "Jane")
val ages = listOf(23, 32, 28)
names.zip(ages)
// [(Jon, 23), (John, 32), (Jane, 28)]
val customerMap = mapOf(Pair(Customer("Jack", 25), Address("NANTERRE CT", "77471")),
Pair(Customer("Mary", 37), Address("W NORMA ST", "77009")),
Pair(Customer("Peter", 18), Address("S NUGENT AVE", "77571")),
Pair(Customer("Amos", 23), Address("E NAVAHO TRL", "77449")),
Pair(Customer("Craig", 45), Address("AVE N", "77587")))
val customerList = customerMap.flatMap { (customer, _) -> listOf(customer) }
customerList.forEach{ println(it) }
/*
Customer(name=Jack, age=25)
Customer(name=Mary, age=37)
Customer(name=Peter, age=18)
Customer(name=Amos, age=23)
Customer(name=Craig, age=45)
*/
Y a veces tenemos una lista de solo elementos como resultado. Entonces, lo que hace la función flatten, toma una lista de listas de elementos y la aplana retorna una lista plana
val list = listOf(
listOf(1, 2, 3),
listOf("one", "two", "three"),
listOf(Customer("Jack", 25), Customer("Peter", 31), Customer("Mary", 18))
)
var flattenList = list.flatten()
println(flattenList)
/*
[1, 2, 3, one, two, three, Customer(name=Jack, age=25), Customer(name=Peter, age=31), Customer(name=Mary, age=18)]
*/
Dejo link: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/
jueves, 20 de diciembre de 2018
70 libros gratuitos de javascript.
Ya que estoy recomendado libros quiero recomendarle este sitio donde pueden bajar varios libros sobre tecnologías que se utilizan en el front-end.
Dejo link: http://on.edupioneer.net/38ae0c8df8
Libro gratuito de CouchDb, HTML 5, JAXB y JavaFx
Quiero recomendar estos Libros gratuitos:
Download Dev Guides!
|
| ||||||
|
|
miércoles, 19 de diciembre de 2018
Herramientas Open Source front-end para Apache HBase.
Las herramientas open source que se pueden utilizar como clientes de Apache HBase son :
- Visualización de datos.
- Creación, eliminación y modificación de tablas y filas.
- Tablas estaticas
- Scans
Toad for Cloud
Databases: Es una herramienta muy versátil para diferentes productos
entre los que se encuentra hbase.
HareDB HBase Client:
Es un cliente de Hbase que tiene una interfaz amigable.
Hrider: Es una
aplicación super amigable que permite consultar y manipular datos de
hbase.
Hannibal: Es una
herramienta para monitoreo de regiones.
Performance
Monitoring & Alerting (SPM): SPM es una herramienta de monitoreo,
muy completa, tiene la filosofia de detección temprana de los
problemas. A la vez permite monitorear una amplia gama de productos
en los que podemos nombrar : Solr, Elasticsearch, Hadoop, HBase,
ZooKeeper, Kafka, Storm, Redis, JVM, etc.
Apache Phoenix: Es un
cliente embebido que permite consultas como si fuera un driver JDBC. Apache Phoenix permite OLTP y el análisis operativo en Hadoop para aplicaciones de baja latencia combinando lo mejor de ambos mundos: el poder de las API de SQL y JDBC estándar con capacidades de transacción ACID completa y
la flexibilidad de las capacidades de lectura y escritura de los últimos tiempos del mundo NoSQL aprovechando HBase como su tienda de respaldo; Apache Phoenix está totalmente integrado con otros productos de Hadoop como Spark, Hive, Pig, Flume y Map Reduce.
Apache Impala: Antes
una herramienta de Cloudera, pero la han liberado en el marco de la
organización apache. Impala es una herramienta de procesamiento de
consultas en paralelo, utiliza map-reduce y se pueden hacer consultas
a hbase o a archivos hdfs (como hive)
Apache Zeppelin: Notebook basado en la web que permite a los datos,
Análisis de datos interactivos y documentos de colaboración con SQL, Scala y más.
viernes, 14 de diciembre de 2018
Introducing the AI Transformation Playbook
Me llego este mail de Andrew Ng que es el profesor de un curso en coursera sobre machine learning y quiero compartirlo con ustedes ya que me resulto por demás interesante :
| ||||||||||
jueves, 13 de diciembre de 2018
Libro gratuitos sobre Linux, postgresql, jetty, jdbc
Download Dev Guides!
|
| ||||||
|
|
martes, 11 de diciembre de 2018
¿Como esta compuesto Apache HBase? Parte 4
En la ultima parte hablaremos de 2 componentes: Client y Catalog Table :
El Client es responsable de encontrar el RegionServer, que alberga la fila particular (datos). Se realiza consultando las tablas del catálogo. Una vez que se encuentra la región, el cliente se pone en contacto directamente con RegionServers y realiza la operación de datos. Una vez que se obtiene esta información, el cliente la almacena en caché para una recuperación más rápida. El cliente puede escribirse en Java o en cualquier otro lenguaje mediante API externas.
Las catalog tables son dos tablas que mantienen la información sobre todos los RegionServers y las regiones. Estas son un tipo de metadatos para el clúster HBase. Las siguientes son las dos tablas de catálogo que existen en HBase:
- -ROOT-: Esto incluye información sobre la ubicación de la tabla .META.
- .META. : Esta tabla contiene todas las regiones y sus ubicaciones.
Al comienzo del proceso de inicio, la ubicación .META se establece en la raíz desde donde se leen los metadatos reales de las tablas y la lectura / escritura continúa. Por lo tanto, cada vez que un cliente desea conectarse a HBase y leer o escribir en la tabla, estas dos tablas se remiten y la información se devuelve al cliente para lectura directa y escritura en los RegionServers y las regiones de la tabla específica.
Suscribirse a:
Entradas (Atom)