sábado, 29 de febrero de 2020

Ballerina un lenguaje pensado para la nube


Ballerina es un lenguaje de programación open-source y una plataforma para que los programadores de aplicaciones de la era de la nube escriban fácilmente software que simplemente funciona.

Durante décadas, los lenguajes de programación han tratado las redes simplemente como fuentes de entrada y salida. Ballerina presenta nuevas abstracciones fundamentales de objetos de clientes, servicios, funciones de recursos y oyentes para incorporar las redes al lenguaje de modo que los programadores puedan abordar directamente las problemática de la computación distribuida como parte de su lógica de aplicación. Esto facilita que las aplicaciones de red resistentes, seguras y de alto rendimiento estén al alcance de todos los programadores.

Los diagramas de secuencia han sido la herramienta favorita de todos para describir cómo funcionan los programas distribuidos y concurrentes. Sin embargo, ningún lenguaje de programación actual le permite escribir su lógica como un diagrama de secuencia en estas aplicaciones. En Ballerina, cada programa es un diagrama de secuencia que ilustra interacciones distribuidas y concurrentes automáticamente. El diagrama es el código y el código es el diagrama.

El tipado estático es el dolor de cabeza del programador de aplicaciones de red y el tipado dinámico es la pesadilla del ingeniero de aplicaciones confiables. El sistema de tipo estructural de tipo estático de Ballerina que está diseñado para ser compatible con el esquema de datos de red permite a los programadores de aplicaciones escribir código que se adhiera al Principio de Robustez: Sea conservador en lo que envía, sea liberal en lo que acepta.

En la era de la nube, ejecutar un programa ya no es solo una cuestión de compilación y ejecución, sino que se trata de compilar, construir la imagen, empujar la imagen, configurar la orquestación de contenedores y, finalmente, ejecutarla. Ballerina lleva todo el proceso de ejecución del programa a las manos del desarrollador con metadatos extensibles que se compilan en programas ejecutables para todas las principales plataformas en la nube.

Ballerina tiene todas las biblioteca estándar y la cadena de herramientas para ayudar a los desarrolladores a crear aplicaciones rápidamente. En el momento del desarrollo, Ballerina cubre documentación, pruebas, uso compartido, control de versiones y más.

Los programas en el mundo real se escriben una vez y se leen decenas a cientos de veces. Ballerina prioriza la conveniencia y productividad del programador con familiaridad, abstracciones más claras y conceptos más fáciles sobre el rendimiento del sistema.

Luego de leer todo esto, veamos un hola mundo, por lo menos :

import ballerina/io;

public function main() {
    io:println("Hello Ballerina!");
}

Si queres probar este codigo pode ir a : https://play.ballerina.io/

Dejo link: https://ballerina.io/

miércoles, 26 de febrero de 2020

Libros de Java Code Geeks

Download IT Guides!

 
There is a number of things that could potentially blow up and the complexity of systems rises considerably when concurrency is introduced.
However, the...
 
 
We have provided an abundance of tutorials here at Java Code Geeks, like Creating Your Own Java Annotations, Java Annotations Tutorial with Custom Annotation and Java...
 
 
The majority of the things you may be asked is collected in the list below. All core modules, from basic Spring functionality such as Spring Beans, up to Spring MVC framework are...
 
 
Android’s user interface is based on direct manipulation, using touch inputs that loosely correspond to real-world actions, like swiping, tapping, pinching and reverse pinching to...
 

martes, 25 de febrero de 2020

Generar sitios estáticos con Hugo


Hugo es uno de los generadores de sitios estáticos de código abierto más populares. Con su sorprendente velocidad y flexibilidad, Hugo hace que la creación de sitios web sea divertido.

Homebrew, un administrador de paquetes para macOS y linux, se puede instalar desde brew.sh. Luego de instalar brew

brew install hugo

Para verificar su nueva instalación:

hugo version

Ahora podemos crear el sitio : 

hugo new site quickstart

El sitio se llama quickstart. Ahora vamos a agregar un tema. Primero, debemos descargar el tema de Github y agregarlo al directorio de temas de su sitio Hugo. Podemos ver los temas en themes.gohugo.io. Vamos a utilizar el tema Ananke.

cd quickstart
git init
git submodule add https://github.com/budparr/gohugo-theme-ananke.git themes/ananke

El tema lo podemos descargar desde: https://github.com/budparr/gohugo-theme-ananke/archive/master.zip si no queremos usar git. Extraemos ese archivo .zip para obtener un directorio "gohugo-theme-ananke-master". Luego cambiamos el nombre de ese directorio a "ananke" y lo movemos al directorio "themes /".

Luego, agregue el tema a la configuración del sitio:

echo 'theme = "ananke"' >> config.toml

Ahora agregamos el contenido :

Se puede crear archivos de contenido manualmente (por ejemplo, como contenido / <CATEGORY> / <FILE>. <FORMAT>) y proporcionar metadatos en ellos, sin embargo, puede usar un comando:

hugo new posts/my-first-post.md

Edite el archivo de contenido recién creado si lo desea, comenzará con algo como esto:

---
title: "My First Post"
date: 2019-03-26T08:47:11+01:00
draft: true
---

Ahora, vamos a iniciar el servidor Hugo:

hugo server -D

                   | EN
+------------------+----+
  Pages            | 10
  Paginator pages  |  0
  Non-page files   |  0
  Static files     |  3
  Processed images |  0
  Aliases          |  1
  Sitemaps         |  1
  Cleaned          |  0

Total in 11 ms
Watching for changes in /Users/bep/quickstart/{content,data,layouts,static,themes}
Watching for config changes in /Users/bep/quickstart/config.toml
Environment: "development"
Serving pages from memory
Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
Web Server is available at http://localhost:1313/ (bind address 127.0.0.1)
Press Ctrl+C to stop

Podemos navegar en http://localhost:1313/

Podemos editar o agregar contenido nuevo y luego simplemente actualizar el navegador para ver los cambios.

Cuando el sitio este listo, debemos cambiar las configuraciones. Debemos editar config.toml y cambiar los valores:

baseURL = "https://example.org/"
languageCode = "en-us"
title = "My New Hugo Site"
theme = "ananke"

Además, si ya tenemos un dominio listo, podemos configurar baseURL. Tenga en cuenta que este valor no es necesario cuando se ejecuta el servidor de desarrollo local.

Luego debemos reconstruir nuestro sitio con:

hugo -D

La salida estará en el directorio ./public/ de forma predeterminada (-d / - marca de destino para cambiarlo, o establecer publicar dir en el archivo de configuración).

Dejo link: https://gohugo.io/


lunes, 24 de febrero de 2020

ZIO

ZIO es una biblioteca Scala de dependencia cero para programación asincrónica y concurrente. Y tiene un logo muuuuyyyy copado...

Su filosofía esta basada en fibras (que son como hilos de ejecución) altamente escalables y sin bloqueo que nunca desperdician ni pierden recursos, ZIO permite crear aplicaciones escalables, resistentes y reactivas que satisfagan las necesidades de su negocio. Entre las características podemos nombrar:
  • Alto rendimiento. 
  • Tipe-safe. 
  • Concurrente. 
  • Asincrónico. 
  • Seguridad en los recursos. 
  • Probable 
  • Elástico. 
  • Funcional. 
Antes de empezar debemos incluir a ZIO en el proyecto agregando la siguiente entrade en el build.sbt:

libraryDependencies += "dev.zio" %% "zio" % "1.0.0-RC17"

Si deseamos utilizar streams ZIO, también debe incluir la siguiente dependencia:

libraryDependencies += "dev.zio" %% "zio-streams" % "1.0.0-RC17"

Ahora veamos un pequeño ejemplo: 

import zio.App
import zio.console._

object MyApp extends App {

  def run(args: List[String]) =
    myAppLogic.fold(_ => 1, _ => 0)

  val myAppLogic =
    for {
      _    <- putStrLn("Hello! What is your name?")
      name <- getStrLn
      _    <- putStrLn(s"Hello, ${name}, welcome to ZIO!")
    } yield ()
}

run debería devolver un valor ZIO que tenga todos sus errores manejados,

Como se puede ver myAppLogic, se plegó de tal forma que produce un valor si falla, habrá un 1; pero si tiene éxito, habrá un 0.

Si está integrando ZIO en una aplicación existente, utilizando inyección de dependencia, o no controla su función principal main, se puede crear un sistema de tiempo de ejecución para ejecutar sus programas ZIO:

import zio._
import zio.console._

object IntegrationExample {
  val runtime = new DefaultRuntime {}

  runtime.unsafeRun(putStrLn("Hello World!"))
}

ZIO proporciona un módulo para interactuar con la consola. Puede importar las funciones en este módulo con el siguiente fragmento de código:

import zio.console._

Si necesita imprimir texto en la consola, puede usar putStr y putStrLn:

// Print without trailing line break
putStr("Hello World")
// res8: ZIO[Console, Nothing, Unit] = zio.ZIO$Read@2ba3e0d1

// Print string and include trailing line break
putStrLn("Hello World")
// res9: ZIO[Console, Nothing, Unit] = zio.ZIO$Read@75e3acfe

Si necesita leer la entrada desde la consola, puede usar getStrLn:

val echo = getStrLn flatMap putStrLn
// echo: ZIO[Console, java.io.IOException, Unit] = zio.ZIO$FlatMap@72bc78be

Es importante utilizar la consola de zio porque cada fibra tiene sus propios recursos, y la consola de Zio soluciona la interacción con la consola. 

Dejo link : https://zio.dev/

viernes, 21 de febrero de 2020

Machine Learning. Curso básico de Machine Learning Gratis!!!


Quiero recomendar este curso gratuito de Machine Learning, donde aprenderas a usar Numpy, Pandas, Seaborn, Matplotlib, Plotly y Sckit-Learn con Python.

Entre los temas tenemos:

  • Usar Python para Machine Learning y Data Science
  • Implementar algoritmos de Machine Learning
  • Usar Scikit-learn, el módulo más utilizado para Machine Learning
  • Usar Plotly para hacer gráficos interactivos
  • Aprender Numpy para el procesamiento numérico
  • Aprender a usar Matplotlib para hacer gráficos con los datos
  • Aprender Regresión Lineal para Machine Learning
  • Aprender Regresión Logística para Machine Learning
  • Aprender Random Forest para Machine Learning
  • Aprender a contruir árboles de decisión para el aprendizaje de máquinas


Dejo link : https://www.udemy.com/course/curso-machine-learning/?fbclid=IwAR12pEVsdyfhcG-Aa35QOWFmgL2ATMhgEYPLF5WEACauP4a8G99RsVo9WMg

Kubernetes

Kubernetes es una plataforma de orquestación de contenedores. El origen de Kubernetes se remonta al data center de google. Todo comenzó con la plataforma llamada Borg. Borg era utilizado para la orquestación de aplicaciones. En 2014 google decide hacer open source a Borg con el nombre de “Kubernetes” que no es el más fácil de pronunciar pero así es google. En 2015, Kubernetes fue el primer proyecto donado a una joven organización llamada Cloud Native Computing Foundation. (CNCF)

De esta manera Kubernetes comenzó a tener cada vez más relevancia y su comunidad crecía rápidamente. Hoy en día, kubernetes es uno de los proyectos con más crecimiento en Github y se convirtió en una de las plataformas más utilizadas para orquestación de containers.


Kubernetes ofrece un conjunto de primitivas distribuidas y técnicas de encapsulamiento para la creación de aplicaciones automatizables. Kubernetes ofrece un entorno de administración centrado en contenedores. Kubernetes orquesta la infraestructura de cómputo, redes y almacenamiento para que las cargas de trabajo de los usuarios no tengan que hacerlo. Esto ofrece la simplicidad de las Plataformas como Servicio (PaaS) con la flexibilidad de la Infraestructura como Servicio (IaaS) y permite la portabilidad entre proveedores de infraestructura.

Por ahora eso es todo...

Dejo links:
https://kubernetes.io
https://cloud.google.com/kubernetes/



Libros de Java Code Geeks

Download IT Guides!

 
Continuous intelligence (CI) gives businesses the information needed to react to events as they are happening. It is a form of real-time analytics that uses artificial intelligence to support decisions when actions must be taken in milliseconds to minutes. This eBook provides an overview to CI, the reasons to use it, and what it can do for your business.
 
 
Get the most important factors to consider when selecting an API management tool. This guide includes the key requirements for API creation and management along with an expert checklist of top features to consider when acquiring such a tool.
 
 
Cloud computing also grows more complex and multi-faceted daily. Getting onto the cloud is easy. Getting it right is trickier. You can probably see why a carefully thought-out and detailed approach to cloud computing
 
 
The best thing you can do for your business is to have a security-first mentality. No company is exempt from falling victim to a breach because of their size - both large and small companies are at risk. This resource includes

jueves, 20 de febrero de 2020

Guía de Raku en castellano

Quiero compartir esta pagina que es una guía rápida del lenguaje de programación Raku.
Para los novatos en Raku sería un punto de partida y puesta en marcha.

Y como todo buen tutorial comienza con un "Hola Mundo" : 

say 'hola mundo';

que también puede escribirse como:

'hola mundo'.say;

Dejo link: https://raku.guide/es/

Probar distribuciones linux sin instalarlas con DistroTest


Me gusta mucho probar distros de linux, por suerte ahora todo es más fácil con DistroTest. Es una pagina donde se lintan las dindtros, eliges una y las podes acceder por VNC. Sin instalar nada.

No más instalación!!!

Dejo link: https://distrotest.net/

lunes, 17 de febrero de 2020

El lenguaje de programación V, Parte 9

Seguimos con V


El modelo de concurrencia de V es muy similar a Go. Para ejecutar una función de modo concurrente simplemente se debe llamar con go foo (). En estos momentos se esta trabajando en rutinas y en un  planificador.


Si queremos probar nuestro codigo podemos hacerlo :

// hello.v
fn hello() string {
return 'Hello world'
}

// hello_test.v
fn test_hello() {
    assert hello() == 'Hello world'
}

Todas las funciones de prueba deben colocarse en archivos * _test.v y comenzar con test_.
Para ejecutar las pruebas, haga v hello_test.v. Para probar un módulo completo, haga v test mymodule.

Algo importante es que la palabra clave assert también se puede utilizar fuera de las pruebas.

Esto fue todo de V, si me piden una opinión es una buena combinación de Go y Rust. Que eso es bueno, pero no aporta mucho al mundo de la programación.


Dejo link: https://vlang.io/

sábado, 15 de febrero de 2020

El lenguaje de programación Raku

Hice un post de Raku, pero no mostré nada de código y quedo bastante incompleto. Por eso la idea de este post es mostrar un poco más. Vamos hacer una función que retorne el ultimo elemento de una lista :

use v6;

sub last-elem(@list) {
    @list[* - 1];
}

say last-elem(<a b c d e>);

nos retornará "e" veamos otro ejemplo, ahora vamos a retornar los 2 últimos elementos :

use v6;

sub last-two(@list)
{
    @list[* - 2, * - 1];
}

say "{last-two(<a b c d e>)}";

nos retornará "d" y "e", vamos hacer una función que busque un elemento por un indice pasado por parámetro :

use v6;

sub get-at(@list, $elem)
{
    @list[$elem];
}

say get-at(<a b c d e>, 4);

nos retornará "e" veamos otro ejemplo, ahora vamos a retornar una lista de reversa :

use v6;

sub reverse-list(@list)
{
    @list.reverse;
}

say "{reverse-list(<a b c d e>)}";
va retornar "e d c b a"

Por ultimo vamos a hacer una función que retorne n números :

use v6;

sub lotto-select($n, $m)
{
    gather for ^$n
    {
        take (1 ... $m).pick(1).first;
    }
}

say "{lotto-select(6, 49)}";

A mi entender tantos símbolos como @, $, etc, hacen difícil leer el codigo, sobre todo a las personas que no venimos de Perl


Dejo link: https://examples.p6c.dev/index.html

jueves, 13 de febrero de 2020

Libros de Java Code Geeks

Download IT Guides!


Drools supports the JSR-94 standard for its business rule engine and enterprise framework for the construction, maintenance, and enforcement of business policies in an organization,...

In the following sections we will discuss about object-oriented programming and its characteristics, general questions regarding Java and its functionality, collections in Java, garbage...

We are going to explain what reflection is in general and how can be used in Java. Real uses cases about different reflection uses are listed in the next chapters.

The principle is sometimes stated as a recommendation to the programmer, but sometimes stated as requirement of the programming language, assuming it is self-understood why abstractions...

martes, 11 de febrero de 2020

Perl 6, mejor conocido como Raku

A Perl 6 le metieron tantos cambios que lo más coherente era llamarlo de otra manera y de esta forma nace Raku.

Raku tiene la intención de llevar adelante los altos ideales de la comunidad Perl. Raku ha sido desarrollado por un equipo de voluntarios dedicados y entusiastas, y continúa desarrollándose.

Raku se ve altamente influido por la programación funcional, de esta manera, tiene clausuras, lazy evaluation, patter matching.

Programación orientada a objetos tambien se hace presente y incluye genéricos, roles y polimorfismo.

Paralelismo, concurrencia y asincronía, tambien incluido el soporte multinúcleo

Gramáticas definibles para la coincidencia de patrones y el procesamiento de cadenas generalizado
Mecanografía opcional y gradual

Dejo link : https://www.raku.org/

lunes, 10 de febrero de 2020

El lenguaje de programación V, Parte 8

Seguimos con V

V puede manejar datos nulos con resultados opcionales :

struct User {
id int
name string
}

struct Repo {
users []User
}

fn new_repo() Repo {
return Repo {
users: [User{1, 'Andrew'}, User {2, 'Bob'}, User {10, 'Charles'}]
}
}

fn (r Repo) find_user_by_id(id int) ?User {
for user in r.users {
if user.id == id {
return user
}
}
return error('User $id not found')
}

fn main() {
repo := new_repo()
user := repo.find_user_by_id(10) or { // Los tipos de opciones deben manejarse mediante bloques `or`
return  // El bloque `or` debe terminar con` return`, `break` o` continue`
}
println(user.id) // "10"
println(user.name) // "Charles"
}

V combina Opcionales y Resultado en un solo tipo, por lo que no necesita decidir cuál usar.

Si no necesita devolver un error, simplemente puede devolver none.

Esta es la forma principal de manejar los errores en V. Es similar a Go, pero la ventaja es que los errores pueden ser manejados, y manejarlos es mucho menos complicado.

err se define dentro de un bloque or y se establece el mensaje de error. err está vacío si no se devolvió algún error.

user := repo.find_user_by_id(7) or {
println(err) // "User 7 not found"
return
}

También puede propagar errores:

resp := http.get(url)?
println(resp.body)

http.get devuelve? http.Response. Se llamó con?, Por lo que el error se propaga a la función de llamada (que debe devolver un opcional) o en caso de que los cables principales entren en pánico.

Básicamente, el código anterior es una versión más corta de

resp := http.get(url) or {
panic(err)
}
println(resp.body)

V no tiene una forma de forzar el desenvolvimiento de un opcional (como el desenvolvimiento de Rust () o el de Swift). Tienes que usar o {panic (err)} en su lugar.

V también tienen generics :

struct Repo<T> {
db DB
}

fn new_repo<T>(db DB) Repo<T> {
return Repo<T>{db: db}
}

// Esta es una función genérica.
fn (r Repo<T>) find_by_id(id int) ?T {
table_name := T.name // en este ejemplo, obtener el nombre del tipo nos da el nombre de la tabla
return r.db.query_one<T>('select * from $table_name where id = ?', id)
}

db := new_db()
users_repo := new_repo<User>(db)
posts_repo := new_repo<Post>(db)
user := users_repo.find_by_id(1)?
post := posts_repo.find_by_id(1)?


Dejo link: https://vlang.io/


viernes, 7 de febrero de 2020

El lenguaje de programación V, Parte 7



Seguimos con V

V es un lenguaje muy modular. Se recomienda crear módulos reutilizables y es muy simple hacerlo. Para crear un nuevo módulo, crea un directorio con el nombre del módulo y los archivos .v con código:

cd ~/code/modules
mkdir mymodule
vim mymodule/mymodule.v

module mymodule

pub fn say_hi() {
println('hola desde mi modulo!')
}

Puede tener tantos archivos .v en mymodule / como desee.
Compílelo con v build module

~/code/modules/mymodule.

Eso es todo, ahora puedes usarlo en tu código:

module main

import mymodule

fn main() {
mymodule.say_hi()
}

Tenga en cuenta que debe especificar el módulo cada vez que llama a una función externa. Esto hace que el código sea mucho más legible y fácil de entender, ya que siempre está claro qué función se llama desde qué módulo. Especialmente en proyectos grandes.

Los nombres de los módulos deben ser cortos, de menos de 10 caracteres. No se permiten importaciones circulares.

Puede crear módulos en cualquier lugar.

Todos los módulos se compilan en un solo ejecutable.

Si desea escribir un módulo que invoque automáticamente algún código de configuración cuando se importe (tal vez desee llamar a algunas funciones de la biblioteca C), escriba una función de inicio del módulo dentro del módulo:

fn init() {
// your setup code here ...
}

La función init no puede ser pública. Se llamará automáticamente.

Un tipo implementa una interfaz mediante la implementación de sus métodos. No hay una declaración explícita de intención, no hay palabras clave "implementa".

struct Dog {}
struct Cat {}

fn (d Dog) speak() string {
return 'woof'
}

fn (c Cat) speak() string {
return 'meow'
}

interface Speaker {
speak() string
}

fn perform(s Speaker) {
println(s.speak())
}

dog := Dog{}
cat := Cat{}
perform(dog) // "woof"
perform(cat) // "meow"

V también tiene enums :

enum Color {
red green blue
}

fn main() {
mut color := Color.red
// V sabe que color es un color por ende podemos suprimir Color.
color = .green
println(color) // "1"
if color == .green {
println("it's green")
}
}

Dejo link: https://vlang.io/

Dé un vistazo a cómo se verá el futuro con IA


Me llego el siguiente mail de microsoft, sobre un ebook gratuito :

Microsoft
 
Dé un vistazo a cómo se verá el futuro con IA
Dé un vistazo a cómo se verá el futuro con IA
 
 
 
Futuro calculado: la inteligencia artificial y la sociedad
 
Lea este e-book, El futuro calculado, para obtener una perspectiva detallada sobre la inteligencia artificial (IA) y su promesa de ampliar el ingenio humano en las generaciones actuales y futuras. Los temas incluyen:
  • El futuro de la IA y su potencial para ayudar a la sociedad.
  • Principios y políticas para el uso responsable de la IA.
  • El impacto de la IA y las tecnologías relacionadas en el lugar de trabajo del futuro.
 
Descargue el eBook gratuito >