Translate
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.
Dejo link: https://www.elementscompiler.com/elements/oxygene/language.aspx
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.
sábado, 29 de septiembre de 2018
Machine Learning Yearning
Sigo publicando Machine Learning Yearning:
| ||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||
|
miércoles, 26 de septiembre de 2018
Pinta, un editor gráfico para Linux
Quiero recomendar un gran software para la edición de imagines para Linux. Se llama Pinta. Pinta es muy similar a Adobe fireworks.
Permite editar imagines de tipo mapa de bits o imagines vectoriales. Esta muy bueno e invito a utilizarlo.
Libros Gratuitos!!
Quiero recomendarles unos libros gratuitos que nos provee java code geeks :
Bienvenido Java 11
Si, si, si, Ya esta con nosotros Java 11 y con él nuevas mejoras.
- Los controles de acceso basados en Nest (nestmates) se encargan de revisita la implementación de las clases internas y elimina la necesidad de insertar métodos puente por parte de los compiladores.
- Las constantes dinámicas de archivo de clase reducen el coste y la disrupción de la creación de nuevas formas de constantes de ficheros de clase materializables y abren la puerta a nuevos enfoques centrados en la plataforma y el rendimiento.
- Soporte experimental de ZGC, que es el nuevo recolector de basura diseñado para tiempos de pausa inferiores a 10 milisegundos y tiene como objetivo que la penalización no supere el 15% del rendimiento.
- Flight Recorder es un framework de recolección de datos de bajos recursos para resolver problemas detectados en las aplicaciones de Java y HotSpot JVM.
- La nueva biblioteca estándar HTTP se encarga de estandarizar la API incubada y habilita el soporte para permitir flujos basados en HTTP/1.1 y HTTP/2.
- Implementación de TLS 1.3, cuyo estándar ha sido aprobado este año.
- Sintaxis de variable local para los Parámetros Lambda, actualizando así la sintaxis Lambda para usar la inferencia de tipo de variable introducida en Java 10.
- En GNU/Linux, a partir de ahora se cargarán por defecto las bibliotecas de GTK3 en lugar de las de GTK2. Un movimiento hecho para adaptarse a los entornos de escritorios basados en GTK más modernos en GNU/Linux, posiblemente con GNOME en mente.
- Se han eliminado características como Web Start, las Applets (que ya fueron marcadas como obsoletas y cuyas funciones están ya ampliamente cubiertas por HTML, CSS y JavaScript) y el mencionado módulo JavaFX.
Dejo links:
sábado, 22 de septiembre de 2018
What is the best ... ?
Encontré una pagina genial, lo que hace esta pagina es plantear que es lo mejor para un area determinada y los usuarios votan.
Por ejemplo:
Cual es el mejor lenguaje que compila a javascript?
Cual es la mejor distribución de Linux del 2018?
Cual es el mejor lenguaje de tipado dinámico?
etc...
Dejo link: https://www.slant.co
Por ejemplo:
Cual es el mejor lenguaje que compila a javascript?
Cual es la mejor distribución de Linux del 2018?
Cual es el mejor lenguaje de tipado dinámico?
etc...
Dejo link: https://www.slant.co
martes, 18 de septiembre de 2018
Libros Gratuitos sobre Python
Quiero compartir este post sobre libros de Python. Son 6 libros de temas variados pero todos sobre el lenguaje python. Además se pueden descargar en diferentes formatos.
Dejo link: http://unowp.com/free-python-programming-books-everyone/
domingo, 16 de septiembre de 2018
Concepto de ventana en Apache Spark Streaming
Hemos hecho un ejemplo con Apache Spark Streaming. Pero ahora, consideremos la idea de Windows. En Spark Streaming, tenemos pequeños lotes de datos que ingresan en un rango de tiempo o ventana de tiempo.
Spark hace un lote de los datos entrantes de acuerdo con el intervalo de tiempo, pero a veces debemos recordar cosas del pasado. Por ejemplo podemos querer mantener un promedio de treinta segundos para datos de entrada, pero queremos resultados cada cinco segundos. En este caso, desearía un intervalo de lote de cinco segundos, pero una longitud de ventana de treinta segundos. Spark proporciona varios métodos para realizar este tipo de cálculos.
La solución que tenemos tenemos que usar son funciones de ventana.
Windows nos permite tomar un primer lote y luego un segundo lote y luego un tercer lote y luego crear una ventana de todos los lotes en función del intervalo de tiempo especificado. De esta forma, siempre podemos tener el nuevo RDD y también el historial de los RDD que existieron en la ventana.
La función de ventana más simple es una ventana, que le permite crear una nueva DStream, calculada aplicando los parámetros de ventana al viejo DStream. Puede usar cualquiera de las operaciones de DStream en la nueva transmisión, para que tenga toda la flexibilidad que pueda desear.
Por ejemplo, desea PUBLICAR a todos los usuarios activos de los últimos cinco segundos, pero desea actualizar los resultados cada segundo.
sc = SparkContext(appName="ActiveUsers")
ssc = StreamingContext(sc, 1)
activeUsers = [
["Alice", "Bob"],
["Bob"],
["Carlos", "Dan"],
["Carlos", "Dan", "Erin"],
["Carlos", "Frank"],
]
rddQueue = []
for datum in activeUsers:
rddQueue += [ssc.sparkContext.parallelize(datum)]
inputStream = ssc.queueStream(rddQueue)
inputStream.window(5, 1)\
.map(lambda x: set([x]))\
.reduce(lambda x, y: x.union(y))\
.pprint()
ssc.start()
sleep(5)
ssc.stop(stopSparkContext=True, stopGraceFully=True)
Este ejemplo imprime todos los usuarios activos de los últimos cinco segundos, pero lo imprime cada segundo. No es necesario realizar un seguimiento manual del estado, ya que la función de ventana conserva los datos antiguos durante otros cuatro intervalos. La función de ventana le permite especificar la duración de la ventana y la duración de la diapositiva, o la frecuencia con la que desea que se calcule una nueva ventana.
Spark hace un lote de los datos entrantes de acuerdo con el intervalo de tiempo, pero a veces debemos recordar cosas del pasado. Por ejemplo podemos querer mantener un promedio de treinta segundos para datos de entrada, pero queremos resultados cada cinco segundos. En este caso, desearía un intervalo de lote de cinco segundos, pero una longitud de ventana de treinta segundos. Spark proporciona varios métodos para realizar este tipo de cálculos.
La solución que tenemos tenemos que usar son funciones de ventana.
Windows nos permite tomar un primer lote y luego un segundo lote y luego un tercer lote y luego crear una ventana de todos los lotes en función del intervalo de tiempo especificado. De esta forma, siempre podemos tener el nuevo RDD y también el historial de los RDD que existieron en la ventana.
La función de ventana más simple es una ventana, que le permite crear una nueva DStream, calculada aplicando los parámetros de ventana al viejo DStream. Puede usar cualquiera de las operaciones de DStream en la nueva transmisión, para que tenga toda la flexibilidad que pueda desear.
Por ejemplo, desea PUBLICAR a todos los usuarios activos de los últimos cinco segundos, pero desea actualizar los resultados cada segundo.
sc = SparkContext(appName="ActiveUsers")
ssc = StreamingContext(sc, 1)
activeUsers = [
["Alice", "Bob"],
["Bob"],
["Carlos", "Dan"],
["Carlos", "Dan", "Erin"],
["Carlos", "Frank"],
]
rddQueue = []
for datum in activeUsers:
rddQueue += [ssc.sparkContext.parallelize(datum)]
inputStream = ssc.queueStream(rddQueue)
inputStream.window(5, 1)\
.map(lambda x: set([x]))\
.reduce(lambda x, y: x.union(y))\
.pprint()
ssc.start()
sleep(5)
ssc.stop(stopSparkContext=True, stopGraceFully=True)
Este ejemplo imprime todos los usuarios activos de los últimos cinco segundos, pero lo imprime cada segundo. No es necesario realizar un seguimiento manual del estado, ya que la función de ventana conserva los datos antiguos durante otros cuatro intervalos. La función de ventana le permite especificar la duración de la ventana y la duración de la diapositiva, o la frecuencia con la que desea que se calcule una nueva ventana.
Libros gratuitos de Java code Geeks
|
| ||||||
|
|
|
| ||||||
|
|
jueves, 13 de septiembre de 2018
martes, 11 de septiembre de 2018
Presto
Presto es una herramiento diseñada para correr consultas sobre grandes cantidades de datos usando consultas distribuidas, trabajando en el orden de los petabytes de datos.
Permite interactuar con Hadoop y su HDFS. Fue diseñado como una alternativa a otras herramientas que consultaba el HDFS usando conexiones a los jobs de MapReduce, como lo hace Hive.
Pero Presto no solo se limita a trabajar sobre el HDFS, también tiene un API que permite definir diferentes tipos de fuentes de datos, incluidos base de datos relacionales, base de datos no relacionales, archivos locales, entre otras fuentes.
Fue pensado para manejar datawarehouses, analytics, análisis de datos, agregación de grandes cantidades de datos o generar reportes. Esas características, permite definir a Presco como un OLAP (Online analytical Processing).
Presto es una herramienta distribuida basada en un motor SQL para realizar análisis interactivos contra bases de datos de todos los tamaños posibles.
Entre las características podemos nombrar:
- Presto permite consultar datos desde varias fuentes, incluido Hive, Cassandra, bases de datos relacionales, archivos planos o incluso datastores privados, lo que permite cruzar datos desde muchas fuentes al mismo tiempo sin mucho esfuerzo.
- Esta herramienta está apuntada para análisis donde los tiempos de respuestas son críticos para las tomas de decisiones.
Existen 2 tipos de servidores, los coordinadores (coordinators) y los trabajadores (workers) y la comunicación entre ambos tipos de servidores es por REST API. Con fines de desarrollo y testeo, se puede configurar un nodo como coordinador y trabajador al mismo tiempo.
Los coordinadores son los nodos donde el “cliente” se conecta para enviarles las consultas que requiere. Son los responsables de parsear las sentencias, generar los planes de ejecución de las consultas, coordinar los trabajadores (mantiene un tracking de que está haciendo cada trabajador para coordinación).
Los trabajadores son responsables de ejecutar las tareas que el coordinador requiere y de procesar los datos para cumplirla. Se los configura que para que al momento de iniciar, se reporten al coordinador correspondiente para que éste los tenga en cuenta para las tareas futuras.
Un conector permite a los trabajadores conectarse a fuentes de datos, como Hive o una base de datos relacional. Se pueden pensar los mismos como un “driver” para cada base de datos en particular.
A la vez existe el concepto de catálogo este contiene esquemas que referencian a los datos a través del conector. Se configuran en archivos “properties” dentro de la carpeta de configuración de Presto.
Y un esquema es una manera de agrupación de tablas que pueden ser consultadas por los trabajadores. El mapeo de schemas queda delegado a cada tipo de conector en particular.
Y las tablas es un conjunto de filas desordenadas que se organizan en columnas con tipos definidos (parecido a una base de datos relacional). Este mapeo de datos a columnas y tipos lo define cada conector en particular.
Presto ejecuta consultas SQL basadas en el ANSI-SQL. Cuando Presto parsea una sentencia, convierte a esta en una consulta SQL y crea un plan de ejecución que va a distribuir entre sus trabajadores asociados.
La diferencia entre una sentencia y una consulta es que la sentencia es “texto plano” mientras que la consulta en si, es el plan asociado a esa sentencia. La consulta encapsula lo que son las etapas, tareas, splits, conectores y demás recursos necesarios para cumplir con esas sentencia.
Cuando Presto ejecuta una consulta, divide a ésta en etapas dentro del plan. Estas etapas quedan definidas como un árbol de ejecución, donde cada etapa tiene una etapa superior que se encarga de juntar los resultados de las etapas inferiores.
Y como si fuera poco Presto es open source.
Dejo link: https://prestodb.io/
lunes, 10 de septiembre de 2018
Dart 2 fue lanzado
Lo que más destaca de Dart 2 a nivel del propio lenguaje y las bibliotecas es que ahora está fuertemente tipado, las palabras clave de creación de instancias son ahora por lo general opcionales, el modo verificado ha sido eliminado y tanto el lenguaje como las bibliotecas principales han sido modificadas en parte como resultado de los cambios en los sistemas de tipos.
A nivel de herramientas, Pub ya no soporta transformadores, por lo que se recomienda utilizar el nuevo sistema de compilación en su lugar, además de haberse cambiado las herramientas relacionadas con el desarrollo web. Junto a todo lo introducido en Dart 2, también se ha publicado en el anuncio oficial el proceso general sobre cómo migrar proyectos de la primera a la segunda versión.
Si el relanzamiento funciona, seguiremos hablando de este lenguaje.
Por ahora dejo link: https://www.dartlang.org/dart-2
viernes, 7 de septiembre de 2018
Los mejores lenguajes de programación para Blockchain
Quiero compartir un post sobre lenguajes para programar en Blockchain, por que lo comparto? Porque es uno de los poco top que trae con sigo lenguajes originales hasta hay algunos que no conozco y ya voy a estudiar!
Claramente tienen que aparecer los lenguajes de moda y como están de moda existe una librería para casi todo: Java, C++, Python, javascript, Ruby.
Pero entre las novedades tenemos a : Solidity, Simplicity, Rholang.
Solidity es un lenguaje de alto nivel orientado a contratos. Fue influenciado por C ++, Python y JavaScript y está diseñado para la Máquina Virtual Ethereum (EVM).
Simplicity : un nuevo lenguaje para Blockchains. Y ya lo voy a estudiar.
Rholang es un lenguaje de programación concurrente, con un enfoque en el envío de mensajes y formalmente modelado por el cálculo ρ, una extensión reflexiva de orden superior del cálculo π. Está diseñado para ser utilizado para implementar protocolos y "contratos inteligentes" en una cadena de bloques de propósito general, pero también podría usarse en otros entornos.
Sin más dejo el post: https://www.geekboots.com/story/top-languages-that-are-best-for-blockchain-programming
Suscribirse a:
Entradas (Atom)