Translate

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 :





miércoles, 14 de noviembre de 2018

Extension functions en Kotlin

Si ya se "Extension functions" esta en ingles pero no sabia como traducirlo. Pero si vamos al grano, es solo un nombre. El concepto es muy simple: Kotlin permite extender clases existentes.

Es decir puedo tomar una lista o un String o un Entero o la clase que sea y agregarle un método, veamos un ejemplo con String :

fun String.removeFirstLastChar(): String =  this.substring(1, this.length - 1)

Entonces ahora String tendrá un nuevo método, y lo llamamos de esta manera: 

fun main(args: Array<String>) {
    val myString= "Hello Everyone"
    val result = myString.removeFirstLastChar()
    println("First character is: $result")
}

Si queremos aprovechar estas extensiones solo tenemos que importar el .java donde se programaron las extensiones. Y de esta manera nos ahorramos de tener clases Utils que agregan funcionalidad a clases del sdk. 

martes, 13 de noviembre de 2018

Apache HBase vs HDFS



Apache HBase esta ligada directamente con Hadoop, dado que funciona sobre el sistema de archivos HDFS. Dada esta relación HBase utiliza todas las ventajas y características de Hadoop. Es tolerante a fallos, utiliza map-reduce, distribuido, escala de forma horizontal, etc, etc.


Pero que ventajas tiene utilizar Apache HBase comparado con utilizar HDFS solo:


Hadoop/HDFS
HBase
Provee un file system distribuido. Provee un almacén de datos basado en columnas
Está optimizado para el almacenamiento de archivos de gran tamaño sin lectura/escritura aleatoria de estos archivos Esto está optimizado para datos tabulares con facilidad de lectura/escritura aleatoria
Utiliza archivos planos. Usa pares de datos clave-valor
El modelo de datos no es flexible. Esto utiliza almacenamiento tabular con soporte incorporado de Hadoop MapReduce
Está principalmente optimizado para escritura de una sola lectura Está optimizado para leer/escribir muchas veces

domingo, 11 de noviembre de 2018

Como se organiza una base Apache HBase?


Una tabla Apache HBase esta compuesta de filas, familia de columnas, columnas y celdas. La clave de fila es  única e identifica a la fila, familia de columnas son un grupo de columnas, la columna es un campo de la fila y la celda es el valor que tiene esa fila en esa columna determinada.

Características de Apache HBase


Apache HBase como habrán leído anteriormente es una base NoSql, la cual es orientada a columna.

Pero que características la hacen una base tan especial:

  • Balanceador de carga y recuperación de errores automático: HBase corre sobre el sistema de archivos de Hadoop, hdfs, el cual puede recuperarse dado a que cuenta con bloques de recuperación y servidores de replicación. 
  • Fragmentación automática: HBase maneja el concepto de región lo que permite tener replicaciones en una región determinada y compartir la información con dicha región. 
  • Integración con Hadoop: HBase corre sobre el sistema de archivos de Hadoop, por lo que cuenta con  una muy buena integración con el ecosistema Hadoop. 
  • Map-reduce: HBase utiliza Hadoop map-reduce framework para resolver problemas en paralelo. 
  • Java Api: los clientes java pueden utilizar toda la potencia de la jdk, ya que hbase fue escrito en java. 
  • Thrift o rest web services: HBase brinda 2 caminos para exponer funcionalidad una REST API o servicios Thrift
  • Soporta monitoreo: Igual que Hadoop, soporta software de monitoreo el cual nos indicara la salud de nuestra base de datos. 
  • Distribuida: Puede correr en varios servers. 
  • Escalabilidad lineal: es decir que podemos prever que va a crecer su performance agragando un servidor o cuanto cae si quitamos un servidor. 
  • Orientado a Columna: esto no es una ventaja es solo una característica. Pero quería hacer la lista larga. 
  • Soporta comandos de shell: Se puede administrar HBase totalmente desde una consola . 
  • Soporta versiones: soporta diferentes versiones, a la vez permite hacer snapshot, de versiones anteriores. A la vez soporta multilples versiones de un solo registro por medio de la snapshot que utiliza internamente


jueves, 8 de noviembre de 2018

Que viene en Java 12?


Ya tenemos Java 11 en el mercado, por lo tanto es hora de pensar en java 12 y estas son las nuevas características :

Un switch más inteligente: En java 12 vamos a poder hacer lo siguiente:

switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
    case TUESDAY                -> System.out.println(7);
    case THURSDAY, SATURDAY     -> System.out.println(8);
    case WEDNESDAY              -> System.out.println(9);
}

A la vez vamos a poder asignar un elemento de la siguiente manera:

int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};

o podríamos hacer algo así:

int j = switch (day) {
    case MONDAY  -> 0;
    case TUESDAY -> 1;
    default      -> {
        int k = day.toString().length();
        int result = f(k);
        break result;
    }
};

También va traer literales Raw String, que que seria? Podemos tener string en varias lineas:

String html = `<html>
                   <body>
                       <p>Hello World.</p>
                   </body>
               </html>
              `;

veamos otro ejemplo: 

String script = `function hello() {
                    print('"Hello World"');
                 }
                 hello();
                `;
Este string no solo permite varias líneas sino que tambien no es necesario el carácter de escape, para caracteres raros. 

Y luego tenemos algunos cambios menores. 

Estos cambios están en draft pero que piensa de ellos. 



miércoles, 7 de noviembre de 2018

10 cursos gratuitos de Java para principiantes y programadores experimentados.

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 10 cursos gratuitos de  Java para principiantes y programadores experimentados :

domingo, 4 de noviembre de 2018

java.util.stream en Java 8

Otra incorporación de Java 8 es la Streams API.

Permite junto con expresiones Lambda crear una composición de operaciones que se aplican a las colecciones. Un estilo Linq de .net pero en Java.

El procesamiento de los elementos de una colección se hace de forma declarativa. Permite manipular, realizar búsquedas y realizar conversiones en sets de datos grandes de forma eficiente.

Se componen operaciones al estilo SQL y admiten operaciones comúnmente utilizadas:
filter  map,  reduce,  find,  match,  sorted…

Los patrones de procesamiento de colecciones típicos son similares a las operaciones del estilo de las que se usan en SQL para "buscar" (por ejemplo, buscar la transacción de mayor valor) o "agrupar" (por ejemplo, agrupar todas las transacciones relacionadas con compras de almacén). La mayoría de las bases de datos permiten establecer operaciones como esas de manera declarativa. Por ejemplo, la siguiente consulta de SQL permite buscar la identificación de la transacción de mayor valor: "SELECT id, MAX(value) from transactions".


Veamos un ejemplo para tener una idea del nuevo estilo de programación que posibilitan los streams de Java SE 8. Imaginemos que necesitamos encontrar todas las transacciones del tipo grocery y obtener un listado de identificaciones de transacciones ordenadas de mayor a menor por valor de transacción. En Java SE 7, usaríamos el código que se muestra aquí:

List<Transaction> groceryTransactions = new Arraylist<>(); 
for(Transaction t: transactions){  
    if(t.getType() == Transaction.GROCERY){   
       groceryTransactions.add(t);  
    } 
}

Collections.sort(groceryTransactions, new Comparator(){  
    public int compare(Transaction t1, Transaction t2){   
        return t2.getValue().compareTo(t1.getValue());  
   } 
});
List<Integer> transactionIds = new ArrayList<>(); 

for(Transaction t: groceryTransactions){  
    transactionsIds.add(t.getId()); 
}

En Java SE 8, usaremos este código :

List<Integer> transactionsIds = transactions.stream()   
.filter(t -> t.getType() == Transaction.GROCERY)   
.sorted(comparing(Transaction::getValue).reversed())   
.map(Transaction::getId)   
.collect(toList());

Un stream es como una abstracción para expresar operaciones eficientes al estilo SQL con relación a una colección de datos. Además, esas operaciones pueden parametrizarse sucintamente mediante expresiones lambda.

Además en Java SE 8 es fácil usar tareas en paralelo solo es necesario reemplazar la instrucción stream() por parallel Stream(), y la API de streams descompondrá internamente la consulta para aprovechar los núcleos múltiples de la computadora.

List<Integer> transactionsIds =
transactions.parallelStream() 
.filter(t -> t.getType() == Transaction.GROCERY) 
.sorted(comparing(Transaction::getValue).reversed()) 
.map(Transaction::getId) 
.collect(toList());

Podemos entender un stream como una abstracción para expresar operaciones eficientes al estilo SQL con relación a una colección de datos. Además, esas operaciones pueden parametrizarse sucintamente mediante expresiones lambda.

Otra cosa importante es que stream es lazy es decir, no se ejecuta hasta que llamamos al metodo collect.

Dejo link: https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html



sábado, 3 de noviembre de 2018

Libros gratuidos de javacodegeeks

Download Dev Guides!

 
As more enterprises embrace DevOps practices and move workloads to the cloud, application architects are increasingly looking to design choices that maximize the speed of development and deployment. Two of the fastest growing are containers and microservices. Read this ebook to get an introduction to the benefits and use cases of Microservices, Containers, and APM. Download this ebook to learn: How containers and microservices work The benefits and challenges of using them How a unified view of the enterprise stack and effective application performance monitoring (APM) can help to maximize their benefits
 
 
The APM market has evolved substantially over the years, mostly in an attempt to adapt to changing application technologies and deployments. When we had very simple applications that directly accessed a database then APM was not much more than a performance analyzer for a database. As applications moved to the web and we saw the first wave of application servers then APM solutions really came into their own.This ebook will review five of the top performance metrics to capture to assess the health of your enterprise Java application: Business Transactions External Dependencies Caching Strategy Garbage Collection Application Topology
 
 
Vaadin is an open source web framework for rich Internet applications. In contrast to JavaScript libraries and browser-plugin based solutions, it features a server-side architecture, which means that the majority of the logic runs on the servers. Ajax technology is used at the browser-side to ensure a rich and interactive user experience. On the client-side Vaadin is built on top of and can be extended with Google Web Toolkit. Vaadin uses Java as the programming language for creating web content. The framework incorporates event-driven programming and widgets, which enables a programming model that is closer to GUI software development than traditional web development with HTML and JavaScript. In this ebook, we provide a compilation of Vaadin programming examples that will help you kick-start your own projects. We cover a wide range of topics, from Architecture and Best Practices, to Data Binding and Custom Components. With our straightforward tutorials, you will be able to get your own projects up and running in minimum time.
 
 
Spring Integration is an open source framework for enterprise application integration. It is a lightweight framework that builds upon the core Spring framework. It is designed to enable the development of integration solutions typical of event-driven architectures and messaging-centric architectures. Spring Integration extends the Spring programming model to support the well-known Enterprise Integration Patterns. Enables lightweight messaging within Spring-based applications and supports integration with external systems via declarative adapters. Those adapters provide a higher-level of abstraction over Spring’s support for remoting, messaging, and scheduling. In this book, you are introduced to Enterprise Application Integration patterns and how Spring Integration addresses them. Next, you delve into the fundamentals of Spring Integration, like channels, transformers and adapters. Furthermore, you will learn how Spring Integration works hand in hand with Web Services and Messaging Queues and finally you will develop a full-blown application from scratch.
 
Your Suggestions
Any ideas or suggestions? Shoot us an email at newsletter@javacodegeeks.com

martes, 30 de octubre de 2018

IBM se compro a Red Hat por $34 Billones

IBM se compro a Red Hat por $34 Billones de pesos, eehh, de dolares...

Increíble las compras de estos últimos años, Microsoft Github y ahora IBM Red hat. A las claras se ve la importancia que le están dando las grandes empresas al software libre y al negocio del software libre.

El software libre puede ser y es un modo de ganar plata. No se gana el dinero vendiendo copias, sino de una forma más ética.

Nada más, solo festejar los pasos que esta dando el software libre.

Dejo link:  https://www.infoq.com/news/2018/10/ibm-red-hat-34-billion

sábado, 27 de octubre de 2018

Quien usa Apache HBase y por qué?

Hbase es una base de datos escalable de forma horizontal, distribuida, open source y Mapa ordenado. La cual corre sobre el sistema de archivos HDFS. Hbase es una base de datos noSql, libre de esquema.

Pero quien usa Hbase y por que?


  • Adobe : Tienen alrededor de 30 nodos que ejecutan HDFS, Hadoop y HBase en grupos que van de 5 a 14 nodos tanto en producción como en desarrollo.
  • Yahoo! : Tienen un grupo de unos pocos nodos que ejecutan HDFS, MapReduce, y HBase. La tabla contiene millones de filas; lo utiliza para consultar documentos duplicados con tráfico en tiempo real.
  • Apache : para su Wiki
  • Facebook : Facebook usa HBase para alimentar su infraestructura de mensajes.
  • Mozilla : movieron el proyecto Socorro a Hbase.
  • Mendeley : Mendeley está creando una plataforma para que los investigadores colaboren y compartan sus investigaciones en línea. HBase nos está ayudando a crear la colección de documentos de investigación más grande del mundo y se está utilizando para almacenar todos nuestros datos importados sin procesar.
  • Twitter : Twitter ejecuta HBase en todo su clúster de Hadoop. HBase proporciona una copia de seguridad distribuida de lectura / escritura de todas las tablas mysql en el backend de producción de Twitter, lo que permite a los ingenieros ejecutar trabajos de MapReduce sobre los datos mientras se mantiene la capacidad de aplicar actualizaciones periódicas de filas (algo que es más difícil de hacer con el HDFS de vainilla).


Dejo link: http://hbase.apache.org/poweredbyhbase.html

viernes, 26 de octubre de 2018

Kotlin for Java Developers


Quiero recomendarles este curso de cousera que es gratuito y a simple vista esta muy bueno.

La introducción al curso dice lo siguiente:

El lenguaje de programación Kotlin es un lenguaje moderno que le da más poder para sus tareas diarias. Kotlin es conciso, seguro, pragmático y se centra en la interoperabilidad con el código Java. Se puede usar en casi todos los lugares donde se usa Java hoy en día: para el desarrollo del lado del servidor, aplicaciones de Android y mucho más. Kotlin es 100% compatible con todos los marcos Java existentes y tiene un buen soporte de herramientas. Es un lenguaje pragmático con una curva de aprendizaje muy baja, y puede ser captado rápidamente por los desarrolladores de Java. El código Kotlin puede compilarse no solo para el código de bytes JVM sino también para JavaScript y código nativo, pero este curso se enfoca en Kotlin / JVM. Este curso tiene como objetivo compartir contigo el poder y la belleza de Kotlin. Tendremos una visión general básica del lenguaje, así como una discusión de muchos casos, especialmente en relación con la interoperabilidad de Java. El curso se basa en su experiencia Java; muestra las similitudes entre los dos idiomas y se centra en lo que será diferente. Tenga en cuenta que este curso no cubrirá los fundamentos de la programación. Discutiremos: sintaxis básica, nulabilidad, programación funcional con Kotlin, programación orientada a objetos con Kotlin, el poder de la biblioteca estándar de Kotlin e interoperabilidad de Java.

Dejo link:
https://www.coursera.org/learn/kotlin-for-java-developers/

jueves, 25 de octubre de 2018

The State of the Octoverse



Github publico el informe anual Octoverse, en el cual se pueden ver datos interesantes de los proyecto. El informe es grande y tiene muchos detalles.

En especial me intereso los lenguajes más utilizados:


No tengo mucho análisis para hacer javascript viene primero y es indiscutido. Y como lenguajes con mayor crecimiento podemos ver como impacto la decisión de Android de dar soporte a Kotlin :



Me llamo la atención no ver a Scala, pero bueno... dejen su opinión.

Dejo link: https://octoverse.github.com/

miércoles, 24 de octubre de 2018

Instalar un master y un nodo con spark.


La idea es instalar un cluster de spark, solo un nodo y un master. 

Primero los dos 2 servers deben verse por medio de ssh para esto sigan este post :  

Luego descargamos spark desde internet: 
wget https://www.apache.org/dyn/closer.lua/spark/spark-2.3.2/spark-2.3.2-bin-hadoop2.7.tgz

Luego desempaquetamos: 

tar -xzvf spark.tar.gz

Luego vamos a conf y copiamos a el template de spark-env pero sin ".template"

cp spark-env.sh.template spark-env.sh

Luego editamos spark-env y agregamos el java home y el ip del master : 

export JAVA_HOME=/path/java-openjdk

export SPARK_MASTER_HOST='xx.xx.xx.xx'

En SPARK_MASTER_HOST va la ip del master (esto hay que hacerlo en los dos servers)

Por ultimo levantamos todos los servicios :

$ ./start-all.sh 

Y listo! Podemos chequear su funcionamiento en el puerto 8080 del master : 


Correr una tarea en un cluster de spark.


Hemos hecho un proyecto con Spark  el cual cuenta palabras pero este utiliza spark como "local" es decir no utiliza un cluster spark.

Pero la potencia de Spark esta en utilizar esto en un Cluster para lo que tenemos que modificar nuestro Context para que permita ejecutar esto en el cluster.

Un cluster Spark tiene un master el cual tiene una ip por ejemplo x.x.x.x con dicha ip vamos a modificar el Context de Spark:

package com.myCompania.app

import org.apache.spark.{SparkConf, SparkContext}

object SparkContext {

  //Create a SparkContext to initialize Spark
  val conf = new SparkConf()
 
  conf.setMaster("spark://x.x.x.x:7077")
  conf.setJars(Seq("path/nombreDelJar.jar"))

  conf.setAppName("Hexacta")
  val sc = new SparkContext(conf)

   def getSc = {
      sc
   }
}

En el puerto 7077 spark publica su servicio, por dicha razon escribimos esta linea:

conf.setMaster("spark://x.x.x.x:7077")

Luego tenemos que agregar el jar de nuestra aplicación porque spark no conoce las clases que utilizamos, y esto lo hacemos con :

conf.setJars(Seq("path/nombreDelJar.jar"))

Y listo!!

domingo, 21 de octubre de 2018

Jugando con Lisp y Racket

Hace rato que no juego con lisp, por lo tanto vamos a hacer una pequeña función para contar elementos de una lista:

(defun contar(lista)
  (cond
     ((null lista) 0)
     (T (+ 1 (contar (rest lista))))
  )
)

Si probamos esto:

CL-USER 1 > (contar '(1 2 3 4 5))
5

Veamos el mismo programa en Racket: 

(define (contar lista)
  (cond
     [(empty? lista) 0]
     [else (+ 1 (contar (rest lista)))] 
  )
)

> (contar (list 1 2 3))
3

Como se puede ver Racket es un hijo o nietos de lisp, por ende tienen la misma sintasis.  

¿Que letra del abecedario no se utilizo en un nombre de un lenguaje de programación?

Leyendo la lista de lenguajes de programación de wikipedia me percate de que había una letra que faltaba.

Esa letra en nuestra querida Ñ. Lo cual indica la falta de latinos en el diseño de nuevos lenguajes de programación.

No quiero ponerme critico de nuestra condición de hispano hablantes y nuestra educación. Ya que hay muchos sectores de las ciencias de la programación que esta copadas por latinos. Pero claramente faltan empresas o emprendedores que se identifiquen con nuestra cultura.

Vamos por un ñ++ !!

Dejo el link: https://en.wikipedia.org/wiki/List_of_programming_languages

miércoles, 17 de octubre de 2018

Cstar, una herramienta de orquestación de clusters Apache Cassandra


Spotify libero Cstar que es una herramienta de código abierto, basada en linea de comandos para la orquestación de clusters Apache Cassandra.

Trabajar con Cassandra no siempre es una tarea fácil. Tiene una gran cantidad de parametros que afectan el rendimiento, la seguridad, la consistencia de los datos, etc. Muy a menudo necesita ejecutar un conjunto específico de comandos de shell en cada nodo de un clúster, generalmente en cierta coordinación para evitar que el clúster se desactive. Esto se puede hacer manualmente para grupos pequeños, pero puede ser complicado y llevar mucho tiempo para grupos grandes.

Durante 2017, Spotify alcanzó 3000 nodos de Cassandra, por lo que era cada vez más urgente contar con una solución segura y eficiente para tareas de mantenimiento.

Por lo tanto Spotify desarrollo Cstar. Cstar es una herramienta de línea de consola que ejecuta una secuencia de comandos arbitraria en todos los hosts en un clúster de Cassandra en "forma topológica". Se basa en paramiko, la misma implementación ssh/scp que utiliza Fabric.

Cstar soporta los siguientes mecanismos de ejecución:

  • ONE: El script se ejecuta exactamente en un nodo por centro de datos en ese momento.
  • TOPOLOGY: Tantos nodos al mismo tiempo como lo permita la topología de Cassandra. Es decir, no se ejecutará en dos nodos en el mismo centro de datos si una réplica puede estar en ambos nodos. Si tiene N centros de datos con M nodos cada uno y un factor de replicación de X, esto ejecutará efectivamente el script en los nodos M / X * N en ese momento.
  • All: El script se ejecuta en todos los nodos al mismo tiempo, independientemente de la topología.


Dejo links: https://github.com/spotify/cstar
https://labs.spotify.com/2018/09/04/introducing-cstar-the-spotify-cassandra-orchestration-tool-now-open-source/

lunes, 15 de octubre de 2018

Corriendo Python en el browser con Brython


Brython está diseñado para reemplazar Javascript como el lenguaje de scripting para la Web. Como tal, es una implementación de Python 3 adaptada al entorno HTML5, es decir, con una interfaz para los objetos y eventos DOM.

El objetivo de Brython es reemplazar Javascript con Python, como el lenguaje de scripting para los navegadores web.

Veamos un ejemplo:

<html>
<head>
<script src="/brython.js"></script>
</head>
<body onload="brython()">
<script type="text/python">
from browser import document, alert

# bind event 'click' on button to function echo

def echo(ev):
    alert(document["zone"].value)

document["mybutton"].bind("click", echo)
</script>
<input id="zone">
<button id="mybutton">click !</button>
</body>
</html>

Dicha pagina imprime con un alert el texto que se encuentra en el input cuando hacemos click.

Para que el script de Python sea procesado, es necesario incluir brython.js y ejecutar la función brython () al cargar la página (usando el atributo onload de la etiqueta <BODY>).

Si el programa de Python es grande, otra opción es escribirlo en un archivo separado y cargarlo usando el atributo src de la etiqueta de script:

<html>

<head>
<script src="/brython.js"></script>
</head>

<body onload="brython()">
<script type="text/python" src="test.py"></script>
<input id="zone" autocomplete="off">
<button id="mybutton">click!</button>
</body>

</html>


Dejo link: https://brython.info

domingo, 14 de octubre de 2018

Helidon un framework para microservicios



Oracle ha introducido un nuevo framework de código abierto, Project Helidon, una colección de bibliotecas Java diseñadas para crear aplicaciones basadas en microservicios.

Originalmente llamado J4C (Java para la nube), Helidon fue diseñado para ser simple y rápido, y se compone de dos versiones: Helidon SE y Helidon MP. Helidon SE presenta tres API básicas para crear un microservicio (un servidor web, configuración y seguridad) para crear aplicaciones basadas en microservicios. No se requiere un servidor de aplicaciones. Helidon MP admite la especificación MicroProfile 1.1 para crear aplicaciones basadas en microservicios.

Inspirado por NodeJS y otros frameworks de Java, el servidor web de Helidon es una API asíncrona y reactiva que se ejecuta sobre Netty. La interfaz del servidor web incluye soporte para configuración, enrutamiento, manejo de errores y creación de métricas.

Vamos un ejemplo:

// starts the server on a random available port
public void startWebServerUsingRandomPort() throws Exception {
    WebServer webServer = WebServer
           .create(Routing.builder()
                   .any((req,res) -> res.send("It works!" + "\n"))
                   .build())
           .start()
           .toCompletableFuture()
           .get(10,TimeUnit.SECONDS);
    System.out.println("Server started at: http://localhost:" + webServer.port() + "\n");
    webServer.shutdown().toCompletableFuture();
    }

Config, carga y procesa las propiedades de configuración en formato clave/valor. De forma predeterminada, las propiedades de configuración se leerán desde un archivo application.properties o application.yaml definido ubicado en el directorio /src/main/resources.

// application.yaml
server:
 port: 8080
 host: 0.0.0.0

// starts the server on a port defined in application.yaml
public void startWebServerUsingDefinedPort() throws Exception {
    Config config = Config.create();
    ServerConfiguration serverConfig = ServerConfiguration.fromConfig(config.get("server"));
    WebServer webServer = WebServer
           .create(serverConfig,Routing.builder()
                   .any((req,res) -> res.send("It works!" + "\n"))
                   .build())
           .start()
           .toCompletableFuture()
           .get(10,TimeUnit.SECONDS);
    System.out.println("Server started at: http://localhost:" + webServer.port() + "\n");
    webServer.shutdown().toCompletableFuture();
    }

La verdad es que esta muy bueno y le da un aire nuevo a Java

Dejo link:
https://helidon.io/#/

jueves, 11 de octubre de 2018

Apache Jena

Si estas interesado sobre la web semantica o ontologías. Te tiene que sonar Apache Jena. Jena esta hecho en Java es de código abierto y gratuito y permite crear aplicaciones de Web Semántica y Linked Data.

Para consultar ontologías RDF utiliza SPARQL que es un acrónimo recursivo del inglés SPARQL Protocol and RDF Query Language. SPARQL se trata de un lenguaje estandarizado para la consulta de grafos RDF, normalizado por el RDF Data Access Working Group (DAWG) del World Wide Web Consortium (W3C). Es una tecnología clave en el desarrollo de la web semántica.

Si instalamos Apache Jena cuenta con varias herramientas una interesante es Fuseki el cual es un servidor de SPARQL y vamos a tener una aplicación web que permite hacer consultas SPARQL en una ontología RDF que debemos importar como modelo.

Dejo link: https://jena.apache.org/

martes, 9 de octubre de 2018

Nitrux y Nomad Desktop, linux con sabor a Mac


Existen muchas distros de linux que emulan la estética mac como Pear Os o Elementary Os. Siguiendo la misma estética se encuentra Nitrux, cuyo desarrollo continúa y cada vez se acerca más a lograr su primera versión estable.

Sin más les comparto un video :




Dejo link:
https://nxos.org/

domingo, 7 de octubre de 2018

Los 5 cursos gratuitos de programación en R


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 gratuitos de R :

Insertar datos en Apache HBase con Scala y Scalatra


Vamos hacer un ejemplo de una API Rest con scalatra que inserte datos en HBase.

Primero hacemos un proyecto en scalatra como ya hemos explicado:
https://emanuelpeg.blogspot.com/2018/08/haciendo-un-proyecto-con-scalatra.html

Luego agregamos las dependencias de hbase, en el archivo build.sbt agregando :

libraryDependencies ++= Seq(
  "org.apache.hbase" % "hbase-common" % "2.1.0" ,
  "org.apache.hbase" % "hbase-client" % "2.1.0"
)

Luego en la clase de ejemplo generamos el método get que inserta datos en la base hbase :

 get(s"/guardar/:rowKey/:str") {

    val conf : Configuration = HBaseConfiguration.create()
    // Se debe agregar en el archivo host el nombre de la base
    conf.set("hbase.zookeeper.quorum", "mybase")
    conf.set("hbase.zookeeper.property.clientPort", "2181")

    // seteamos los puertos de hbase.
    conf.set("hbase.master.port", "60000")
    conf.set("hbase.master.info.port", "60010")
    conf.set("hbase.regionserver.info.port", "60030")
    conf.set("hbase.regionserver.port", "60020")
    // cree la tabla
    // create 'TableTest', 'info'
    // put 'TableTest', 'rowkey1', 'info:test', 'ejemplo'
    val connection = ConnectionFactory.createConnection(conf)
    val table = connection.getTable(TableName.valueOf( "TableTest" ) )

    // Put example
    val put = new Put(Bytes.toBytes(params("rowKey")))
    put.addColumn(Bytes.toBytes("info"), Bytes.toBytes("test"), Bytes.toBytes(params("str")))

    table.put(put)

    Ok("ok")
  }

}

El método inserta los datos pasados por parámetro en la URL. Donde pasamos una key y un dato. De esta manera insertamos datos en una tabla TableTest.

Algo importante que se puede ver es que seteo los puestos dado que en las ultimas versiones cambiaron de  600X0 a 160X0. Depende de la versión de Hbase, hay que usar uno u otro, yo estoy usando HBase de la maquina virtual de cloudera.

Y Listo!!



sábado, 6 de octubre de 2018

Haciendo magia con Haxe!

Haxe es un lenguaje de programación multiplataforma de alto nivel, de código abierto y compilador que puede producir código fuente para distintas plataformas desde un único código fuente. El código escrito en Haxe puede ser compilado a código fuente en Adobe Flash, Javascript, Lua, Python, C++, C#, Hashlink,​ Java y Neko y de lado del servidor en PHP,​ Apache CGI y Node.js.

Haxe incluye un conjunto de funcionalidades comunes que son compatibles con todas las plataformas, como tipos de datos numéricos, texto, arrays, binarios y otros formatos de archivos comunes. Haxe también incluye APIs exclusivas de las plataformas, pero a partir de 2012, sólo admite un subconjunto de las funciones disponibles en cada plataforma, y solo la API de Flash es totalmente utilizable.

Haxe fue desarrollado por Nicolas Cannasse y otros colaboradores

Veamos un ejemplo de haxe :

class Test {
    static function main() {
        var people = [
            "Elizabeth" => "Programming",
            "Joel" => "Design"
        ];
       
        for (name in people.keys()) {
            var job = people[name];
            trace('$name does $job for a living!');
        }
    }
}

Par instalarlo en versiones ubuntus solo tienes que hacer :

sudo add-apt-repository ppa:haxe/releases -y
sudo apt-get update
sudo apt-get install haxe -y
mkdir ~/haxelib && haxelib setup ~/haxelib

Vamos hacer un hola mundo y luego lo traducimos a javascript.

Escribimos un archivo llamado "Hola.hx" :

$ nano Hola.hx

y escribimos:

class Hola {
    static public function main() {
        trace("hola!!");
    }
}

guardamos y salimos.

Ahora vamos a generar hola.js :

$ haxe -main Hola -js Hola.js

y si hacemos un cat de Hola.js : 

 $ cat Hola.js 
// Generated by Haxe 3.4.7
(function () { "use strict";
var Hola = function() { };
Hola.main = function() {
console.log("Hello World");
};
Hola.main();
})();

Ahora a PHP: 
haxe -main Hola -php Hola.php

En php nos genera todo un directorio con archivos. 

Dejo link: https://haxe.org/

miércoles, 3 de octubre de 2018

¿Cuáles son los mejores lenguajes que se ejecutan en la JVM?


Quiero compartir este ranking de lenguajes que corren en la JVM. Al parecer viene ganando Kotlin, claramente ayudado por android.

Lo que me sorprende es que en segundo lugar este Clojure, es una grata sorpresa.  Sin más...

Dejo link: https://www.slant.co/topics/397/~best-languages-that-run-on-the-jvm


domingo, 30 de septiembre de 2018

Oxygene

Oxygene (anteriormente conocido como Chrome) es un lenguaje de programación desarrollado por RemObjects Software para Common Language Infrastructure de Microsoft, Java Platform y Cocoa. Oxygene está basado en Object Pascal, pero también tiene influencias de C#, Eiffel, Java, F# y otros lenguajes.

En comparación con Delphi.NET, ahora obsoleto, Oxygene no enfatiza la compatibilidad total hacia atrás, sino que está diseñado para ser una "reinvención" del lenguaje y aprovechar todas las características y tecnologías proporcionadas por el runtimes de .NET y Java.

Oxygene es un producto comercial, y ofrece integración completa en Visual Studio IDE de Microsoft en Windows, así como su propio IDE, Fire para uso en macOS. El compilador de línea de comandos está disponible gratis.

Oxygene no usa "Unidades" como Delphi, pero usa .NET-namespaces para organizar y agrupar tipos. Un espacio de nombre puede abarcar varios archivos (y ensamblajes), pero un archivo solo puede contener tipos de un espacio de nombres. Este espacio de nombre se define en la parte superior del archivo:

namespace ConsoleApplication1;

Los archivos Oxygene están separados en una interfaz y una sección de implementación, que es la estructura conocida de Delphi. La sección de interfaz sigue a la declaración del espacio de nombres. Contiene la cláusula uses, que en Oxygene importa tipos de otros espacios de nombres:

uses
  System.Linq;

Los espacios de nombres importados deben estar en el proyecto mismo o en los ensamblados a los que se hace referencia.

Siguiendo la cláusula uses un archivo contiene declaraciones de tipo, como se conocen de Delphi:

interface

type
  ConsoleApp = class
  public
    class method Main;
  end;

Al igual que en C#, el método principal es el punto de entrada para cada programa. Puede tener un parámetro args: Array of String para pasar argumentos de línea de comando al programa.

Se pueden declarar más tipos sin repetir la palabra clave type.

La implementación de los métodos declarados se ubica en la sección de implementación:

implementation

class method ConsoleApp.Main;
begin
  Console.WriteLine('Hola');
end;

end.

Por último veamos el ejemplo "hola mundo" completo:

namespace HelloWorld;

interface

type
  HelloClass = class
  public
    class method Main;
  end;

implementation

class method HelloClass.Main;
begin
  System.Console.WriteLine('Hello World!');
end;

end.

La verdad no me gusta nada, soy más proclive a escribir menos y tal vez muchas cosas se pueden resolver por convención. Pero confieso que el espíritu de revivir a pascal es muy bueno, dado que era un lenguaje muy bueno y fácil de usar. 

Dejo link: https://www.elementscompiler.com/elements/oxygene/language.aspx