April 17, 2019


Fernando Briano

Gleam – Nuevo lenguaje de programación funcional estáticamente tipado en BEAM

El pasado lunes 15 de abril se publicó la primera versión de Gleam (0.1): Gleam es un lenguaje de programación funcional estáticamente tipado diseñado para escribir sistemas concurrentes mantenibles y escalables. Compila a Erlang y tiene interoperabilidad directa con otros lenguajes de BEAM (la máquina virtual de Erlang) como Erlang, Elixir y LFE.

Obviamente es un lenguaje bastante nuevo, así que no está listo para usar en producción. Está interesante y ya se puede probar, programar alguna cosa divertida y aprender a usarlo. El código fuente está disponible en GitHub bajo licencia Apache 2.0, y chat del proyecto se encuentra en IRC en #gleam-lang de Freenode. Aplaudo el uso de IRC para proyectos de Software Libre en vez de Slack 👏
¡El compilador está escrito en Rust! Y si bien no conozco Rust, parece que saca algo de inspiración de ese lenguaje en la sintaxis y le veo también algunas cosas de Elixir.

Principios de Gleam

Ser seguro

Un sistema de tipados expresivo inspirado por la familia de lenguajes ML nos ayuda a encontrar y prevenir bugs en tiempo de compilación, mucho antes que el código llegue a los usuarios.

Para los problemas que no pueden ser resueltos con el sistema de tipos (como que le caiga un rayo al servidor) el runtime Erlang/OTP provee mecanismos bien testeados para manejar fallas.

Ser amigable

Perseguir bugs puede ser estresante así que la realimentación del compilador debe ayudar y ser lo más clara posible. Queremos pasar más tiempo trabajando en nuestra aplicación y menos tiempo buscando errores tipográficos o descifrando mensajes de error crípticos.

Como comunidad queremos ser amigables también. Personas de todos los orígenes, géneros y niveles de experiencia son bienvenidas y deben recibir respeto por igual.

Ser performante

El runtime Erlang/OTP es conocido por su velocidad y habilidad para escalar, permitiendo que organizaciones como WhatsApp y Ericsson manejen cantidades masivas de tráfico de manera segura con baja latencia. Gleam debería aprovechar por completo el runtime y ser tan rápido como otros lenguajes de la BEAM como Erlang y Elixir.

Ser un buen ciudadano

Gleam facilita el uso de código escrito en otros lenguajes BEAM como Erlang, Elixir y LFE, así que hay un ecosistema rico de herramientas y librerías para que los usuarios de Gleam aprovechen.

A cambio los usuarios de lenguajes BEAM deberían poder aprovechar Gleam, ya sea usando librerías escritas en Gleam de manera transparente, o agregando módulos Gleam a sus proyectos existentes con mínimo trabajo.

Instalación

Para instalarlo, debemos seguir esta guía, Necesitamos tener Rust, Erlang y rebar3 instalados de antemano, clonar el código con git, y compilar el compilador. El soporte para editores de texto todavía está un poco en pañales, pero ya hay modos para Emacs, Vim y Visual Studio Code.

Empezando a programar

Al ser un lenguaje tan nuevo, todavía no es un proceso tan directo crear un proyecto. De todas formas sólo hay que seguir estos pasos. El compilador puede trabajar con proyectos generados con rebar3, una herramienta de builds de Erlang.

Los tipos básicos de Gleam son String, Bool (True || && False), Int (enteros) y Float (decimales). Los valores pueden nombrarse con let para ser reusados después, pero los valores contenidos son inmutables:

let x = 1
let y = x
let x = 2

x // => 2
y // => 1

Tiene Tuplas, colecciones ordenadas de tamaño fijo con elementos que pueden ser de distintos tipos:

{"Texto", 2, True}

Y acá me empiezo a acordar de Elixir, podemos extraer los valores de la tupla así:

> valores = {"Texto", 2, True}
{"Texto", 2, True}
> {a, b, c} = valores
{"Texto", 2, True}
> a
"Texto"
> b
2
)> c
True

Otra estructura de datos son las Listas: Colecciones ordenadas de elementos del mismo tipo:

[7, 8, 9]
// Y para agregar nuevos valores, como en Elixir, se usa:
> ["N" | ["a", "n", "d", "o"]] 
["N", "a", "n", "d", "o"]

Por último están los Mapas, colecciones de nombre y valores que pueden ser de cualquier tipo:

{
  nombre = "Nicanor",
  edad = 20,
}

Y se puede acceder al valor con la sintaxis `mapa.nombre_del_campo`:

let persona = { nombre = "Nicanor", edad = 20 }
let nombre = persona.nombre

nombre // => "Nicanor"

Para actualizar o agregar valores a un mapa se usa la sintaxis: { mapa | nombre_del_campo = valor }:

let persona1 = { nombre = "Marcela", edad = 22 }
let persona2 = { persona1 | edad = 23, idioma: "español" }

persona1 // { nombre = "Marcela", edad = 22 }
persona2 // { nombre = "Marcela", edad = 23, idioma: "español" }

Los tipos del mapa dependen de los nombres y tipos de los campos. El compilador lleva un registro de los campos y valores de cada mapa y presenta un error en tiempo de compilación en caso de querer usar un campo que no exista o tenga el tipo incorrecto.

Las funciones con nombre se declaran con pub fn:

pub fn sumar(x, y) {
  x + y
}

pub fn multiplicar(x, y) {
  x * y
}

Y como son valores de primera clase se pueden asignar a variables, pasar a funciones y todo lo demás que se puede hacer con cualquier otro tipo de datos:

pub fn dos_veces(f, x) {
  f(f(x))
} // Wooooo!

También tiene funciones anónimas con una sintaxis similar:

pub fn ejecutar() {
  let sumar = fn(x, y) { x + y }
  sumar(1, 2)
}

No puedo evitar las comparaciones con Elixir, pero es a lo que me hace acuerdo… Hay una sintaxis corta para crear funciones anónimas que toman un argumento y lo pasan a otra función. Y esto se usa generalmente con pipes para crear una serie de transformaciones de datos:

pub fn sumar(x, y) {
  x + y
}

pub fn ejecutar() {
  // esto equivale a sumar(sumar(sumar(1,2), 4), 6)
  1
  |> sumar(_, 2)
  |> sumar(_, 4)
  |> sumar(_, 6)
}

Vistas las funciones otra cosa interesante es pasarles mapas como parámetros. El lenguaje apunta a ser muy permisivo con esto, y muestra un ejemplo de cómo funciona:

fn numero_siguiente(mapa) {
   mapa.numero + 1
}

El tipo de la función es fn({ a | numero = Int}) -> Int. La a en este caso puede ser “cualquier otro campo”, así que la función se puede llamar con cualquier mapa siempre y cuando tenga el campo numero con un valor del tipo Int.

let articulo = { nombre: "tenedor", numero: 17 }
let nintendo = { nombre: "gameboy", numero: 4 }
let fernando = { nombre: "Fernando", edad: 33 }

numero_siguiente(articulo) // => 18
numero_siguiente(nintendo) // => 5
numero_siguiente(fernando) // => Compile time error! No numero field

La expresión case se usa como estructura de control por medio de la técnica “pattern matching” (ya escribí algo sobre Pattern Matching en el blog antes). Cómo se usa:

case numero {
| 0 -> "Cero"
| 1 -> "Uno"
| 2 -> "Dos"
| n -> "Otro número" // machea todo lo que no sea lo anterior
}

Como alternativa al if else de otros lenguajes, hace pattern matching con los valores Bool:

case alguna_condicion {
| True -> "Es verdadera"
| False -> "Es falsa"
}

La expresión case retorna un valor por lo que podemos asignarle el resultado a una variable. El pattern matching me resulta una cosa mágica y feliz, pero debe ser porque no estoy acostumbrado a usarlo.

El lenguaje también cuenta con Enums, y el tipo Bool está definido como uno:

enum Bool =
  | True
  | False

Una variante que muestra como ejemplo para extraer valores es:

enum User =
  | LoggedIn(String)
  | Guest

let diego = LoggedIn("Diego")
let leticia = LoggedIn("Leticia")
let visitor = Guest

Los enums también pueden ser “patternmacheados” para asignarle nombres a distintas variantes y podemos usarlos en un let.
🤯

Por último, al ser un lenguaje de la BEAM, podemos usar funciones de otros lenguajes directamente ¡Santa interoperabilidad Batman! Al ser lenguajes distintos, el compilador no puede determinar el tipo de las funciones, así que es la responsabilidad del programador en esos casos de hacer las cosas bien o veremos hermosas explosiones en nuestra aplicación. Pero llamar funciones de otros lenguajes es bastante sencillo:

// Llamando a la función uniform del módulo rand de Erlang:
pub external fn random_float() -> Float = "rand" "uniform"

// Llamando a IO.inspect de Elixir:
pub external fn inspect(a) -> a = "Elixir.IO" "inspect"

Como si fuera poco, también podemos importar tipos externos.

Conclusión

Si bien está en una etapa muy temprana de desarrollo, Gleam me resultó un lenguaje súper interesante que iré siguiendo con atención. Al ser tan nuevo, todavía hay mucho por implementar, así que resulta un buen aprendizaje y bastante interesante ir viendo cómo se desarrollan nuevas funcionalidades.

Elixir, Crystal y ahora Gleam son los lenguajes que me interesaría usar más aparte de Ruby, y en algún momento me voy a poner a leer también sobre Rust.

Si quieren aprender más de Gleam, pueden visitar su sitio web.

by Fernando at April 17, 2019 12:30 PM

April 10, 2019


Fernando Briano

Spring – nueva película animada hecha con Blender

Spring es el 12° proyecto de la iniciativa Open Movies de Blender:

Spring es la historia de una niña pastora y su perro, que enfrentan espíritus antiguos para continuar el ciclo de la vida. Este poético y visualmente maravilloso cortometraje fue escrito y dirigido por Andy Goralczyk, inspirado por su niñez en las montañas de Alemania.

Blender es software de gráficos 3D libre usado para crear animaciones, efectos especiales, arte, modelos imprimibles 3D, aplicaciones y videojuegos. Mediante la Fundación Blender, se han producido varios proyectos de alta calidad con el objetivo de demostrar, validar y mejorar las capacidades del software.
Varios de ellos ya son bastante conocidos:
Elephants Dream, Big Buck Bunny, Sintel, Tears of Steel, Caminandes Gran Dilamma, Cosmos Laundromat, Glass Half, Caminandes Llamigos, Agent 327 Operation Barbershop, Daily Dweebs y Hero.

El equipo de producción de Spring usó la versión de desarrollo de Blender 2.80 durante toda la producción, incluso antes que el software estuviera oficialmente en Beta. Como con todas las películas anteriores de Blender, el proceso de producción entero y todos los archivos fuente están siendo compartido en la plataforma Blender Cloud. Si acceden al enlace, pueden ver una línea de tiempo de varias semanas de desarrollo y materiales que se van compartiendo como artwork, storyboards y demás materiales de producción. También se incluyen tutoriales, videos del proceso y mucho material más.

La imagen del corto es espectacular y el resultado final es excelente. Les recomiendo mirarlo. Y visiten este enlace si quieren ver más películas del estilo libres, gratuitas y totalmente legales de mirar como y dónde quieran.

Formato: película animada 3D, 7:44 minutos. sonido 5.1. Sin diálogos. Apta para audiencias de 6 años para arriba (PG).
Todo lo que se ve fue hecho con Blender, GIMP y Krita.

by Fernando at April 10, 2019 02:59 PM

April 09, 2019


Fernando Briano

Kingdom Rush: Rift in Time ¡Juego de tablero de Kingdom Rush en Kickstarter!

La famosa saga de juegos Tower Defense, Kingdom Rush, llega al mundo de los juegos de tablero. Mediante una campaña en Kickstarter, Kingdom Rush: Rift in Time alcanzó la meta inicial de USD 20.000 en apenas media hora.

Kingdom Rush: Rift In Time

Los encargados de trasladar Kingdom Rush de los píxeles a cartón, plástico y madera son el equipo del estudio Lucky Duck Games, que ya tiene experiencia con varios títulos. El producto se describe como un juego de puzzle, completamente cooperativo, dirigido por una campaña y de proporciones épicas. Si ya han disfrutado Kingdom Rush, van a ver que se trata de una adaptación fiel a juego de mesa. En la página de Kickstarter pueden encontrar varias instrucciones y videos que explican cómo se juega. Pero la idea sigue siendo defender nuestra base de hordas de enemigos con torres, ¡pero cooperativo!

De 1 a 4 jugadores, para mayores de 12 años y con partidas de entre 60 y 90 minutos. Se incluyen varios tableros con caminos como para generar el escenario, fichas de corazones y diamantes, cartas para las hordas y torres, las formas a lo Tetris para atacar desde las torres, marcadores para torres, soldados y ¡héroes! En principio serán 4 héroes y dos jefes (figuras de plástico 😍).

Va a estar traducido a Inglés y Francés, y podemos elegir una de esas dos versiones si lo compramos durante la campaña. Pero también va a incluir un manual digital para Español, Italiano y Polaco. Aseguran que la mayor parte del contenido del juego es independiente del lenguaje. Así que con aprenderse las reglas, seguramente no va a ser necesario volver al manual.

Como varias campañas en Kickstarter, hay distintas metas que se van a ir alcanzando a medida que más gente invierta en el proyecto. Las metas son más héroes, hordas, torres y con suerte escenarios. Al momento de escribir esto, ya se superaron los USD 110.000 de recaudación, por lo que se desbloquearon al menos 7 de estas metas. El paquete básico, denominado Knight Pledge, cuesta USD 59 e incluye todo lo necesario para jugar + todas las metas que se desbloqueen. Pero también podemos comprar el King Pledge por USD 79, una edición de lujo y limitada que nunca va a estar disponible para comprar en otro lado. Incluye mejoras al paquete básico y un póster. Por ahora también hay un agregado disponible por USD 19 que incluye un héroe, un jefe, y una campaña nueva.

Me alegra muchísimo ver a Kingdom Rush en formato juego de tablero y ¡no puedo esperar a probarlo!

 

by Fernando at April 09, 2019 07:46 PM

April 03, 2019


Fernando Briano

Descarga gratis el número de abril de la revista Linux Journal

La revista Linux Journal cumple 25 años. Para celebrarlo, pusieron para descargar gratis en su sitio web. Simplemente hay que visitar esta página, ingresar una dirección de correo electrónico, y recibir un enlace de descarga. Les recomiendo inscribirse al newsletter de la revista, semanalmente envían artículos de interés a los usuarios de GNU/Linux y el software libre en general.

Este número en particular viene bastante cargado, entre otras cosas dos entrevistas a Linus Torvalds por el primer editor de la revista, Robert Young (quien luego fundara Red Hat). La primera una entrevista actual donde Linus habla de varias cosas. Interesante saber que cuando necesita portabilidad, usa una Dell XPS 13, el mismo modelo que uso en el trabajo. La segunda entrevista es la republicación de una entrevista publicada originalmente en el primer número de Linux Journal en 1994, con los mismos protagonistas.

Además hay artículos sobre el futuro de Linux, Software Libre y los niños, Kubernetes, cómo armar tu propio radio receptor, y más.
Pueden pedir el enlace de descarga en: https://www.linuxjournal.com/free_issue

Linux Journal 25

 

 

by Fernando at April 03, 2019 07:08 PM

Se viene ScaLATAM: la primera conferencia focalizada en Scala y Programacion Funcional de Latinoamérica

Scalatam

En mayo se organiza en Montevideo ScaLATAM: la primera conferencia focalizada en Scala y Programacion Funcional de Latinoamérica. Entre los oradores está Gabriel Claramunt, referente de la comunidad Scala y el culpable de que me empezara a interesar la programación funcional allá cuando éramos jóvenes y me apasionaba la programación. ¡Por más que no usen Scala les recomiendo asistir! Qué buenas conferencias está habiendo en Uruguay…
Más información:

El objetivo es reunir a developers, empresas y entusiastas en un ambiente pensado para el intercambio de conocimientos y aprendizaje. La conferencia consiste en dos días de charlas dadas por speakers reconocidos local e internacionalmente con experiencia y conocimiento de las nuevas tendencias. Elegimos Uruguay como sede ya que es uno de los principales exportadores de software y donde las empresas mas importantes de la región deciden instalarse. Si estás dando tus primeros pasos en Scala o si ya tenés experiencia, querés potenciar tus conocimientos y contactarte con empresas/personas que comparten tus intereses, esta conferencia es para vos!

Llamado a charlas

Está abierto el llamado a charlas para que envíes tu propuesta. Temas priorizados (pero no excluyentes, si tenés una idea, ¡enviala!): FP Foundations, FP Experience reports (Industrial adoption, Open source , Growing the Community),  Scala Libraries and applications (Distributed systems, ML, Big Data), Development Workflow, Scala Tooling. Se puede en este enlace.

Entradas

Hay entradas generales a USD 30 y para estudiantes a USD 15 y se pueden comprar acá.

Dónde y cuándo

Jueves 2 y Viernes 3 de Mayo
Universidad ORT Uruguay, Cuareim 1451, Montevideo, Uruguay

by Fernando at April 03, 2019 02:00 PM

March 23, 2019


Fernando Briano

Firefox Send (Beta) disponible en Android

Firefox Send, nuevo servicio gratuito para compartir archivos online de forma segura, ya tiene su aplicación beta para Android. La aplicación no está listada en Google Play, pero la pueden encontrar en el siguiente enlace:

https://play.google.com/store/apps/details?id=org.mozilla.firefoxsend

La interfaz es básicamente la misma que el sitio web. Al ser una versión Beta, todavía puede tener algún que otro detalle. Pero por ahora anda todo muy bien.

Firefox Send Android

Firefox Send Android

En lo personal vengo usando Firefox Send con éxito, es súper práctico para compartir archivos online.

Podemos usar la aplicación web desde cualquier dispositivo entrando en Firefox Send.

by Fernando at March 23, 2019 04:07 PM

March 20, 2019


Rodolfo Pilas

whois para nuevos TLDs

Los nuevos TLDs como guru, americanfamily, showtime y muchos otros son un desafío para el comando whois con cierta antigüedad, ya que no los pueden resolver y muestra el error:

No whois server is known for this kind of object.

La solución es configurar un archivo /etc/whois.conf con las referencias a los nuevos TLDs y los servidores whois que los resuelven.

Este gist es un archivo /etc/whois.conf pronto para pegar y tener resuelto el problema para la siguiente consulta whois que se haga con los nuevos TLDs.

by pilasguru at March 20, 2019 03:08 PM

March 14, 2019


Fernando Briano

Cómics Marvel – Leyendo a los Inhumanos: Black Bolt

Escrito por Saladin Ahmed y con arte de Christian Ward, Black Bolt fue la primera serie mensual del rey de los Inhumanos de Marvel Cómics. Se publicó originalmente en Mayo de 2017, y terminó en el #12 en Abril de 2018. Fue compilada en dos tomos: Hard Time y Home Free. A continuación les cuento de uno de mis cómics preferidos de Inhumans y que recomiendo ampliamente:

Tomo 1: Hard Time

Black BoltEsta historia se desarrolla entre Inhumans Vs X-Men y Royals. Pero puede ser leída sin tener contexto de lo que pasó antes (o lo que pasa después). Lo que tenemos que saber es que Black Bolt despierta en una prisión, todo lo demás nos iremos enterando más adelante. La narrativa se inclina hacia la ciencia ficción, donde el escritor Saladin Ahmed tiene bastante experiencia.

En un principio resulta de esos cómics que se apartan un poco de la continuidad, pudiendo tener más soltura a la hora de contar cosas. Pero eventualmente empiezan a aparecer referencias y conexiones de las que no se puede escapar del todo en un universo compartido. Por ese lado disfruté mucho que la historia fuera bastante independiente más allá del contexto, pero que lentamente empezara a conectarse con el universo Marvel con el que uno está familiarizado. Como dije antes, no se necesita de haber leído historias de Black Bolt que vinieron antes para disfrutarlo.

Esto no quiere decir que esté completamente despegado de la mitología Inhumana. Pero me da la impresión que no conocer mucho los personajes antes de leer este título no le quita disfrute. Aunque si son seguidores de Inhumans, seguro van a disfrutarlo más todavía.

Black BoltSi bien Black Bolt es el protagonista y centro de la trama, van apareciendo personajes de la prisión que generan dinámicas muy interesantes y entretenidas. Esto aporta mucho, algunos son viejos conocidos y otros nuevos, pero se ganan la empatía del lector más allá de las razones por las cuales se encuentran en la prisión.

La alianza de Black Bolt con sus compañeros cae en el recurso narrativo de la “banda de inadaptados que se une con un fin común”. Pero el libro tiene un muy buen balance entre “una historia sobre Black Bolt” y “una aventura de Black Bolt en un grupo”, más a lo Inhumans clásico. A través del desarrollo de los personajes, entre otras cosas se analiza el tema del bien y del mal y la redención. Algo que corre peligro de caer en clichés o historias simplistas. Pero cuando está bien escrito como en este caso, es un éxito.

Viendo la tapa del primer número y ojeando las primeras hojas, podemos notar que el arte es otro punto alto de la serie. Las primeras páginas del primer número son un deleite visual con poco texto que de a poco nos lleva de paseo a este mundo donde se desenvuelve la trama. Christian Ward se encarga de todo el arte, y lo hace de manera espectacular. La prisión juega un poco con la mente de sus prisioneros, y el estilo del artista es ideal para representar ciencia ficción medio psicodélica que en lo personal disfruto mucho.

Hace un buen uso dinámico de las viñetas y “splash pages” (las viñetas que ocupan todo un par de páginas abiertas, pero no sé la traducción). Es así que la historia y el arte se complementan perfectamente. Vale la pena tener en cuenta otros trabajos de Christian Ward, y si quieren tener una idea de qué va la cosa, visiten su sitio web.

Hard Time colecciona los números 1 al 6 de Black Bolt y pueden encontrarlo en Amazon. Es un excelente cómic y lo recomiendo mucho, más allá que conozcan a Black Bolt o los Inhumans.

Próximamente les cuento sobre el desenlace y segundo tomo: Home Free.

by Fernando at March 14, 2019 02:00 PM

March 13, 2019


Fernando Briano

Crystal: Lenguaje de programación inspirado en Ruby

Lenguaje de programación Crystal

Crystal es un lenguaje de programación de propósito general orientado a objetos. Su sintaxis está inspirada en Ruby pero no busca ser compatible. Surgió del amor a la eficiencia para escribir código de Ruby, y el amor a la eficiencia para ejecutar código C. Busca ser lo mejor de ambos mundos.

Entre las diferencias fundamentales con Ruby se encuentran:

El siguiente código nos muestra la inferencia de tipos en acción:

puts typeof("Fernando") #=> String
puts typeof(12) #=> Int32
puts typeof(42.0) #=> Float64

También podemos definir el tipo con anotaciones:

@nombre : String
@edad : Int32

Todo es un objeto: Al igual que en Ruby, en Crystal todo es un objeto (tiene un tipo, responde a algunos métodos).

Recién va por la versión 0.27.2, así que está creciendo y cambiando rápidamente todavía. De todas formas hay algunos valientes que se han animado a usarlo en producción. El proyecto cuenta con un Roadmap que define las cosas que quieren tener en el lenguaje, así como preguntas frecuentes y una excelente documentación.

Otras cosas interesantes de Crystal sobre las que me gustaría escribir más adelante: union types (tipos de datos especiales que pueden poseer varias representaciones), Macros (sistema para meta programación), Modelo de concurrencia e integración con librerías C (tiene una sintaxis dedicada para llamar a bibliotecas nativas de forma sencilla).

Instalar Crystal

Crystal puede ser instalado en Debian, Ubuntu, RedHat, CentOS, Arch Linux, Gentoo, Alpine, FreeBSD, y demás sistemas, desde un tar.gz o compilado desde el código fuente. Si usan el gestor de versiones asdf, hay un plugin para eso. Podemos ver las distintas instrucciones de instalación en la documentación.

El comando crystal

Una vez instalado, deberíamos tener el comando crystal disponible en nuestra terminal. Los archivos de código fuente Crystal tienen la extensión .cr. Para ejecutar un archivo de código fuente Crystal, escribimos:

$ crystal run archivo.cr

El comando `run` compila el código a un binario ejecutable en una ubicación temporal y lo ejecuta. Con el comando crystal build, podemos crear un binario ejecutable:

Crystal build

También existe crystal eval para pasarle código Crystal a crystal run desde la línea de comando o a través de un pipe por la entrada estándar. La lista completa de opciones está en la documentación usando el compilador.

Creando proyectos Crystal

El comando crystal también incluye el parámetro init, que inicializa un directorio con un proyecto. El primer parámetro de init es el tipo de proyecto. Las dos opciones son lib, una biblioteca reutilizable y app, una aplicación sin el objetivo de ser usada como dependencia:


$ crystal init app prueba
create prueba/.gitignore
create prueba/.editorconfig
create prueba/LICENSE
create prueba/README.md
create prueba/.travis.yml
create prueba/shard.yml
create prueba/src/prueba.cr
create prueba/spec/spec_helper.cr
create prueba/spec/prueba_spec.cr
Initialised empty Git repository in /home/fernando/workspace/crystal/prueba/.git/

Shards: Manejo de dependencias

Shards es a Crystal lo que las gemas son a Ruby. Las aplicaciones y bibliotecas Crystal cuentan con un archivo shard.yml que declara las dependencias del proyecto. Shards se distribuye con Crystal, así que lo tenemos disponible en nuestra terminal. Con shard init, creamos un archivo shard.yml de ejemplo, seguido de shard install para instalar las dependencias y especificarlas en un archivo shard.lock.

Por ejemplo en el proyecto recién creado, agrego las siguientes líneas al archivo shard.yml:

dependencies:
  cossack:
    github: crystal-community/cossack
    version: ~> 0.1
  

Cossack es un cliente HTTP bastante simple para Crystal. Se instala al ejecutar shards install y ya lo puedo usar en el código fuente. Dentro del archivo src/prueba.cr del mismo proyecto escribo:

require "cossack"

module Prueba
  VERSION = "0.1.0"

  def self.hola
    response = Cossack.get("https://picandocodigo.net/api")
    puts response.body
  end
end

Prueba.hola

Y podemos ejecutarlo con crystal run para ver los resultados:
crystal run src/prueba.cr

Testeando Código Crystal

Crystal viene equipado con una biblioteca de testing en el módulo Spec. Incluye un DSL (lenguaje de dominio específico) inspirado en RSpec, por lo que resulta súper familiar para programadores Ruby. Cuando inicié mi proyecto más arriba,ya se creó un directorio /spec con un archivo de ejemplo. Modificando un poco el archivo prueba.cr para que retorne el valor de lo que obtiene Cossack en vez de imprimirlo en pantalla con puts, podemos escribir un test bastante sencillo:

describe Prueba do
  it "calls Picando Código's API" do
    Prueba.hola.should eq "¡Chau!"
  end
end

Y si corremos los tests, tenemos una falla! (TDDeando, por supuesto):

$ crystal spec
F

Failures:

1) Prueba calls Picando Código's API
Failure/Error: Prueba.hola.should eq "¡Chau!"

Expected: "¡Chau!"
got: "¡Hola!"

# spec/prueba_spec.cr:5

Finished in 744.67 milliseconds
1 examples, 1 failures, 0 errors, 0 pending

Failed examples:

crystal spec spec/prueba_spec.cr:4 # Prueba calls Picando Código's API

Cambiando la expectativa del test a “¡Hola!” hacemos que pase:

describe Prueba do
  it "calls Picando Código's API" do
    Prueba.hola.should eq "¡Hola!"
  end
end
$ crystal spec
.

Finished in 861.99 milliseconds
1 examples, 0 failures, 0 errors, 0 pending

Como ven, es bastante sencillo empezar a usar Crystal. Espero con este post lograr despertar el interés por el lenguaje, y con suerte tener algún intercambio al respecto. Los comentarios están abiertos si quieren dejar su opinión, ¿conocían Crystal? ¿Le ven futuro?

Por mi parte voy a seguir investigando el lenguaje e intentar escribir algunos proyectitos, así como analizar las herramientas ya disponibles, e iré compartiéndolo por acá.

Más información sobre Crystal:

by Fernando at March 13, 2019 11:00 AM

Nuevo servicio gratuito para compartir archivos online de forma segura – Firefox Send

Este nuevo servicio de Mozilla se llama Firefox Send. Mediante cualquier navegador web, nos permite subir archivos de manera gratuita y compartirlos con otros usuarios. Tenemos bastante control de seguridad sobre los archivos que compartimos. Podemos limitar la cantidad de veces que puede ser descargado, y cuánto tiempo va a durar (para un máximo de 7 días). El archivo no va a quedar guardado indefinidamente en algún servidor en la nube. También podemos asignarle un password, para asegurarnos que solamente quienes sepan el password puedan descargarlo.

Firefox Send

La interfaz es bastante simple, podemos arrastrar archivos hacia la página o elegirlos desde un navegador de archivos, elegimos las opciones y lo(s) subimos. El servicio cuenta con encriptado de punta a punta, y podemos compartir archivos de hasta 1GB. Si queremos enviar hasta 2.5GB, podemos crear una cuenta gratuita Firefox.

Una vez subido, podemos enviar un enlace de descarga a otro usuario. Para la descarga no es necesario loguearse ni tener ningún tipo de cuenta. Tan simple y rápido como enviar un mail. Próximamente estará disponible como aplicación Android también.

Send fue diseñado por Mozilla con la privacidad como principio fundamental. Los archivos están protegidos y nuestra información es manejada de manera privada y segura. Mozilla es una fundación sin fines de lucro cuyo objetivo es que internet sea abierta y accesible para todos. No lucran con nuestros datos, así que de mi parte, son de las pocas marcas en las que confío por ahora.

El servicio empezó como un experimento de Test Pilot, y fue mejorando hasta que Mozilla decidió que era tiempo de promoverlo a un proyecto independiente. El código fuente está disponible en GitHub bajo la licencia libre Mozilla Public License Version 2.0.

Visita Firefox Send

 

by Fernando at March 13, 2019 10:00 AM

March 12, 2019


Fernando Briano

Awesome Rubies – Una colección de Rubies increíbles

Ruby

Awesome Rubies es una lista de “Rubys” (¿”Rubíes”?), o distintas implementaciones del lenguaje e información al respecto. La más conocida es MRI (Matz’s Ruby Interpreter), la implementación “de referencia” y probablemente la más usada. Actualmente se llama CRuby porque es un esfuerzo colaborativo y no “de Matz”, y existen además otras implementaciones como Rubinius, JRuby: Implementación de Ruby en la JVM y unas cuantas más.

Si has estado siguiendo Ruby, o has ido a conferencias recientemente, probablemente ya sepas de Ruby 3×3. Mi primer encuentro con el concepto “Ruby 3×3” fue en Euruko 2017. donde Matz abrió la conferencia con un Keynote sobre el futuro de Ruby. La idea es que la versión 3 de Ruby (esperada para el año que viene) va a ser 3 veces más rápida que la versión 2.0. Y con el trabajo que se viene haciendo para lograrlo, se vienen varias cosas interesantes en el lenguaje.

Siguiendo con Awesome Rubies, en la lista podemos ver las versiones principales (CRuby, JRuby, TruffleRuby), así como menores o próximas a salir (Topaz – Ruby en Python, GoRuby – Ruby en Go 🤦, etc) y versiones discontinuadas como IronRuby (.NET), MacRuby (Objective-C), y más. Desde ahí podemos acceder a más información sobre el recurso en particular. También encontraremos enlaces a investigaciones, papers, libros, benchmarks y otros recursos.

Algo que me resultó particularmente interesante fue ver en la lista dos lenguajes de programación que vengo siguiendo con interés desde hace un tiempo: Elixir y Crystal. No son exactamente versiones de Ruby, pero le veo sentido que estén listados como parte de la familia. Crystal tiene una sintaxis como Ruby, pero es estáticamente tipado y compila a código máquina (tengo un post sobre Crystal en borradores…). Elixir es un lenguaje de programación funcional que corre sobre la máquina virtual de Erlang, y su sintaxis está inspirada en la de Ruby.

También interesante ver en la lista Mirah, un lenguaje de programación que Charles Nutter presentó en Ruby Conf Uruguay 2010. Creo que la idea es algo así como una reimplementación de Java pero con la sintaxis de Ruby. Debería leer más…

Volviendo a Crystal y Elixir, obviamente no es coincidencia que venga estudiándolos y estén en la lista. Elixir es el más distinto de los dos, porque cambia el paradigma de programación mucho más radicalmente. Pero surgió de un miembro importante de la comunidad Ruby: José Valim. José parece seguir la filosofía de Ruby “Matz is nice and so we are nice”. Si bien Elixir todavía no ha agarrado mucha tracción como otros lenguajes o tecnologías que deben su éxito mayormente al apoyo de grandes corporaciones, es una buen lenguaje para aprender programación funcional. Y aunque sea lentamente, sigue creciendo, y Erlang no se va a ir a ningún lado por unos cuantos años. Por eso tiene sentido que varios rubistas “se hayan mudado” a Elixir o complementen su trabajo en Ruby con él.

Crystal es todavía bastante joven, pero también promete y mucho. Más adelante comentaré más al respecto.

Habiendo usado otros lenguajes, me sigue pareciendo importante la parte de la comunidad, abierta e inclusiva, además de “amable” como Matz. También que los lenguajes más allá de sus ventajas y decisiones técnicas, parecen seguir el paradigma -como Ruby- de ser diseñados para el programador y no para la computadora. O por lo menos así lo siento con Ruby, Elixir y eventualmente supongo que Crystal. Son lenguajes con ese “no sé qué” que por lo menos a mí me motiva aprender y disfruto usándolos. Así que no me parece una mala decisión de carrera especializarme en “Rubies”, e incluir Elixir y Crystal ahí.

Visiten Awesome Rubies para adentrarse más en este mundillo de rubíes.

by Fernando at March 12, 2019 02:00 PM

Humble Book Bundle: Libros de Linux por Wiley

Humble Bundle tiene un nuevo paquete de e-books sobre Linux, programación y varias certificaciones. Los ebooks están disponibles en PDF, ePUB y MOBI, por lo que pueden ser leídos en casi cualquier dispositivo. Como se acostumbra en los paquetes Humble Bundle, además de elegir el precio, podemos elegir dónde destinamos el dinero que pagamos, incluyendo una organización de beneficencia.

Humble Book Bundle: Linux by Wiley

Pagando USD 1 o más, el paquete incluye:
Linux Essentials, Ubuntu Linux Toolbox: 1000+ Commands for Power Users, Linux All-In-One For Dummies, Beginning Linux Programming.

Pagando USD 8, todos los anteriores más:
Linux Bible, Shell Scripting: Expert Recipes for Linux, Bash, and more, Linux Server Security: Hack and Defend,
CompTIA Linux+ and LPIC Practice Tests: Exams LX0-103/LPIC-1 101-400, LX0-104/LPIC-1 102-400, LPIC-2 201, and LPIC-2 202, Professional Linux Kernel Architecture

Finalmente, pagando USD 15 obtenemos el paquete completo con todos los anteriores y:
Linux Command Line and Shell Scripting Bible, CompTIA Linux+ Powered by Linux Professional Institute Study Guide: Exams LX0-103 and LX0-104, LPIC-1: Linux Professional Institute Certification Study Guide: Exams 101 and 102, LPIC-2: Linux Professional Institute Certification Study Guide: Exams 201 and 202, Red Hat Enterprise Linux 6 Administration: Real World Skills for Red Hat Administrators, Assembly Language Step-by-Step: Programming with Linux

Al momento de pagar, elegimos cómo repartir el dinero, con la opción de donar a la charidad “Freedom to Read”:
La Fundación Freedom to Read (FTRF) es una organización legal y educativa sin fines de lucro afiliada a la Asociación de Bibliotecas Americana. FTRF protege y defiende la Primera Enmienda de la Constitución y apoya el derecho de las bibliotecas de recolectara – y el acceso individual a – información.

La promoción termina el 25 de marzo, visita el Humble Book Bundle: Linux by Wiley

by Fernando at March 12, 2019 10:00 AM

March 08, 2019


Rodolfo Pilas

Sobre escribir variables al invocar el shell script

Todos utilizamos variables de tipo constantes en nuestros shell scripts, que en principio no son modificables pues están en el código, un ejemplo simple:

#!/bin/bash
HOLA="Hola, soy el script"
echo $HOLA

así en cada ejecución de este script se mostrará el contenido de la variable HOLA:

$ ./hola
hola soy el script
$

Pero al definir/crear la variable podemos hacerlo con un contenido por defecto, que se usa en caso que la variable no tenga otro valor, mediante esta sintaxis de definición:

HOLA=${HOLA:-"Hola, soy el script"}

de esta forma HOLA tomará el valor que ya traiga o, en caso de ser nula, asignará el string indicado luego del :-

Esta sintaxis para la definición de las variables en nuestros script permite que se le pueda cambiar el valor al invocar el script, así:

$ HOLA="Hola, soy el shell" ./hola
Hola, soy el shell
$

También esta sintaxis de valor por defecto de las variables puede ser asignado directamente al invocarlas, utilizando una sintaxis equivalente:

#!/bin/bash
echo ${HOLA:-"Hola, soy el script"}

lo que simplifica el script, aunque puede distribuir los valores de las variables a lo largo y ancho del código así que a usarlo con cuidado.

Obviamente es algo muy documentado y explicado, aquí unos ejemplos:

by pilasguru at March 08, 2019 07:08 PM

Fernando Briano

Se viene Rust Latam Montevideo 2019 – Conferencia latinoamericana de Rust

Los días 29 y 30 de marzo de 2019 en Montevideo, Uruguay, se realiza la primera conferencia latinoamericana del lenguaje de programación Rust: Rust Latam.

¿Qué es Rust?

Si tenés curiosidad por aprender sobre Rust, ¡éste es el lugar correcto!

Rust es un lenguaje de programación de sistemas que corre increíblemente rápido, previene segfaults, y garantiza seguridad en programación multihilos. La promesa es permitir construir software confiable y eficiente aprovechando potentes chequeos del compilador y un set de herramientas maduro que ayudará y asistirá durante todo el proceso.

Sobre la conferencia:

Rust Latam Montevideo

La Conferencia Rust Latam es el evento líder en América Latina por y para el movimiento Rust, y una de las oportunidades anuales más grandes de networking en la comunidad local de Rust. Esta conferencia de un fin de semana con sesiones interactivas, actividades prácticas, y charlas junta a más de 200 defensores, desarrolladores y entusiastas del lenguaje de programación Rust de todo el mundo. En marzo, la gente e ideas de la comunidad latinoamericana de Rust saltará de la pantalla para aprender, discutir, debatir y enfrentar Rust en persona. Nuestra primera conferencia Rust Latam anual empieza en Montevideo.

En marzo, tendremos ese mismo espíritu vehemente de las reuniones locales. También tendremos a la gente y recursos para hacer un gran impacto. Una conferncia de dos días – series de talleres y oradores – con decenas de expertos y principiantes significa que podemos avanzar el pensamiento en cómo tú y tu equipo pueden usar características de Rust para crear una amplia gama de nuevas aplicaicones de software, como motores de juegos, sistemas operativos, sistemas de archivos, componentes de navegadores web y motores de simulación para realidad virtual. Podemos forjar nuevas sociedades, podemos entrenar a los programadores del mañana y podemos alimentar a la construcción comunitaria a través de los países de América Latina.

Oradores

Docenas de expertos y principantes, lo que significa que podemos progresar mucho pensando en cómo tú y tu equipo pueden usar Rust.

Comunidad

Una meta compartida es conectar a la gente haciendo de Rust el mejor lenguaje de programación y la mejor comunidad.

Compromiso

Rust Latam Conf es sólo el comienzo. Para este primer año, esperamos dejar a Montevideo sintiéndose inspirado y comprometido.

Estimulando

Nos movemos hacia una comunidad más abierta e inclusiva para alimentar nuestra misión, el mejor Lenguaje de Programación Rust para todos.

La conferencia cuenta con un Código de Conducta, buscando ser un evento inclusivo, acogedor para todos y en contra de cualquier tipo de acoso u hostigamiento.

Charlas y Talleres

Va a haber dos keynotes, y charlas sobre Rust, Python, WebAssembly, Serverless, Macros y más. También un día entero de talleres incluyendo uno de Introducción a Rust:

El workshop introductorio está orientado a personas que desean conocer Rust y que tienen experiencia en otro lenguaje de programación. Este servirá de introducción a los conceptos fundamentales que hacen a Rust un lenguaje de progrmación diferente como; pertenencia, tiempos de vida y el sistema de tipos.

Al mismo tiempo los asistentes se podrán familiarizar con la sintaxis del lenguaje.

El workshop será una mezcla de conceptos teoricos y ejercicios cortos que apliquen a dichos conceptos.

Entradas y ubicación

La conferencia se realizará en el clásico Auditorio Torre de las Telecomunicaciones ANTEL, Calle Guatemala, 1075, Montevideo, Uruguay.

Hay dos tipos de entrada a la venta: Supporter por USD 100 (entrada con acceso total + aportar para que se haga la conferencia) y Regular USD 50 (entrada con acceso total a la conferencia). Las entradas se pueden comprar en este enlace.

La organización también está ofreciendo entradas gratis mediante un programa especial de becas. La idea es atraer nuevos entusiastas de Rust y darles la posibilidad que puedan descubrir más sobre este maravilloso lenguaje de programación:

Si eres un estudiante o profesor en latinoamérica, en áreas relacionadas con la ciencia y la ingeniería y te gustaría participar activamente en comunidades Open-Source y/o estás interesado en aprender sobre Rust, esta es una gran oportunidad para descubrir más acerca de este seguro, eficiente y rápido lenguaje de programación. Para ser seleccionado como beneficiario de este programa, hay que llenar este cuestionario antes del viernes 20 de marzo. El programa cubre el ingreso de manera gratuita al evento completo. Esto incluye workshops (29 de marzo) y la conferencia (30 de marzo, incluye almuerzo).

Más información

¡No se la pierdan! Ojalá pudiera ir…

by Fernando at March 08, 2019 02:30 PM

March 07, 2019


Fernando Briano

6ta edición de Rails Girls en Argentina – 22 y 23 de marzo en Buenos Aires

El 22 y 23 de Marzo se realiza una nueva edición de Rails Girls Argentina en el coworking AreaTres en Buenos Aires. El evento consta de un taller gratuito de fin de semana donde aprenderás sobre aplicaciones Web y programación con Ruby on Rails. ¡No es necesario tener conocimientos previos en programación!

Rails Girls Argentina 2019

Más sobre Rails Girls:

Rails Girls propone herramientas para que chicas y mujeres construyan sus sueños e ideas con código.

Aprenderás sobre diseño, prototipado y programación con la ayuda de nuestros coaches.

Podés aplicar para participar en este formulario.

También te podés sumar como Rails Coach:

Como Rails Coach, acompañarás a un equipo de 4/5 principiantes en aprender cómo se construye una aplicación Web, harás mentoring, compartirás tu experiencia como Web developer y nos ayudarás a transmitir la pasión por programar! Las participantes son principalmente mujeres, porque queremos sumar más programadoras al mundo tecnológico! No importa si sos mujer u hombre para ser coach, ni tener conocimientos muy avanzados de Ruby on Rails, ya que el taller es de introducción.

Nos juntaremos una tarde (o mediante Hangouts) antes del evento para terminar de organizar la jornada.

Anotate acá.

Más información en el sitio de Rails Girls Argentina, también pueden seguir su cuenta de Twitter y ver cómo se pasó en eventos anteriores para motivarte a participar!

by Fernando at March 07, 2019 01:00 PM

March 06, 2019


Fernando Briano

Basingstoke: Juego gratis de Puppy Games para Linux

Basingstoke

El estudio independiente de videojuegos Puppy Games es responsable de excelentes títulos como Droid Assault, Ultratron, Titan Attacks! y Revenge of the Titans. Su título más reciente es Basingstoke:

Basingstoke ha sido destruida y las ruinas se encuentran llenas de muertos reanimados y feroces monstruos extraterrestres. ¿Eres el único superviviente? ¡Explora la ciudad para descubrirlo! Escabúllete por las humeantes calles y edificios de Basingstoke, rebúscate sobre la marcha, y crea tu propio equipamiento para ayudarte en tu misión… Basingstoke es el único juego donde kebabs pueden ser usados como armas, y puedes saquear rollos de salchica de policías muertos. El juego es una mezcla entre sigilio furtivo y acción arcade, con un estilo distintivo que mezcla tiernos gráficos 3D con tensión espantosa.

Los desarrolladores han decidido publicar Basingstoke GRATIS en Linux:

Hemos decidido hacer GRATIS a Basingstoke para Linux, y en los próximos meses cuando tenga un poco de tiempo, voy a subir todos nuestros otros juegos a itch.io también, y van a ser GRATIS para usuarios de Linux también. Todas las donaciones se aceptan con agradecimiento por supuesto.

Y no se olviden de darle una mirada a nuestro Patreon. ¡Los juegos no se escriben solos! Estamos pasando la gorra, esperando juntar suficiente dinero para hacer Battledroid.

Pueden descargar Basingstoke en este enlace, eligiendo el precio que quieren pagar por él (incluyendo 0).

by Fernando at March 06, 2019 09:02 PM

March 05, 2019


Fernando Briano

Películas para ver en 2019

Ya estamos en Marzo y no había publicado nada en el blog en 2019. Una buena manera de empezar es la tradición de listar las películas que quiero ver este año, ¡aunque algunas ya se hayan estrenado! Más vale tarde que nunca… 😬

Al igual que años anteriores, 2019 promete ser un excelente año para películas de super héroes, ciencia ficción, animación y demás temas que tanto disfrutamos. En lo personal hay varias que vengo esperando con mucha anticipación desde hace mucho tiempo. Ordenadas más o menos por género, acá van las películas que quiero ver en 2019:

Shazam!

Shazam es el superhéroe antes conocido como Capitán Marvel (pueden leer más acá), y uno de mis personajes favoritos de los cómics. Primer tráiler de la lista porque junto con Captain Marvel, tengo muchísimas expectativas y estoy muy contento de poder verlos en el cine. El tono del tráiler parece coincidir con lo que quiero ver en una película de Shazam, así que espero no decepcione. En mi lista creo que ya está en el primer puesto de películas del universo DC y espero una de las mejores películas de super héroes. Pero midamos las exceptativas…

Estreno: 5 de abril.

Captain Marvel

Otra entrega del Universo Cinematográfico de Marvel (UCM), con Carol Danvers como protagonista. Tiene la particularidad de contar los hechos ocurridos en los 90’s, pero que tendrán repercusión en el presente como vimos en Infinity Wars. Además de ser la primera película del UCM con una mujer como protagonista (se supone que también vendría una película de Black Widow), introduce a los Skrulls -una raza de extraterrestres capaces de transformarse en otros seres vivos- que según tenía entendido eran propiedad de Fox. Con ellos y los Kree, está el potencial de ver adaptaciones de historias de los cómics como la Guerra Kree/Skrull o Secret Invasion, de la cual parecen haber sacado alguna idea por lo que muestran los tráilers. ¡Se estrena esta semana!

Estreno: 8 de marzo

Avengers: End Game

El UCM me ha dado mucho entretenimiento y alegría en sus más de 10 años, y los Avengers han sido una parte importante de eso. Esta película promete ser el cierre de este primer ciclo, y ni necesito ver más tráilers para saber qué pasa. Cada película fue más grande que la anterior e Infinity Wars fue gigante. Así que las expectativas están muy altas.

Estreno: 26 de abril

Spider-Man: Far From Home

Otro de mis superhéroes favoritos y cuya representación en el cine fue de horrible en las películas de Tobey Maguire, a bien en las películas con Andrew Garfield y excelentes y reivindicadas con Tom Holland. La alianza Sony/MCU logró el mejor Spider-Man cinematográfico live-action hasta ahora.

Estreno: 5 de julio

Glass

La última parte de la trilogía “Unbreakable” de M. Night Shyamalan. un thriller superheróico. Se estrenó en enero y aparentemente no tuvo muy buenas críticas. De todas formas tendría que mirar Unbreakable de nuevo y Split por primera vez antes de mirarla.

Ya estrenada

Brightburn

Una película de super héroes pero con toques de terror producida por James Gunn. Algo así como una versión alternativa de Superman, donde el personaje con super poderes es malo. No puedo evitar creer que está aunque sea un poco inspirado en Irredeemable, un excelente cómic por Mark Waid con la misma premisa.

Estreno: 24 de mayo

Dark Phoenix

Por alguna razón no logro conectar con los X-Men. Si bien he leído cómics que me han gustado, ninguna de las películas me han atrapado hasta ahora. Creo que voy a pasar de ver ésta en el cine, pero de todas formas merece estar en la lista.

Estrena: 7 de junio

New Mutants

Lo mismo que la anterior, más películas sobre los mutantes. Aunque ésta tiene un toque más de terror, lo que por lo menos asegura una fórmula distinta. Potencialmente puede ser muy buena. Al igual que Dark Phoenix, se iba a estrenar el año pasado pero se atrasó.

Estreno: 2 de Agosto

Hellboy

¿Necesitaba un reboot ya? No sé, nunca leí los cómics de Mignola. Sólo miré las dos películas anteriores, si recuerdo bien la segunda me gustó bastante. Por el tráiler parece prometedora, sin vergüenza de ser una película de acción y fantasía.

Estreno: 12 de abril

Star Wars Episode IX

The Force Awakens y The Last Jedi me encantaron, no puedo esperar a ver Episodio 9. La trilogía de trilogías que prometió George Lucas hace tantos años… Se cierra la historia Skywalker, además de ser la última película en la que compondrá John Williams. Vuelven Rey, Finn, Poe, BB-8, C-3PO y R2-D2. Seguro tengamos también a Luke en su forma “fantasma de la Fuerza” y la despedida de la Princesa Leia con las últimas escenas grabadas por Carrie Fisher 😢

Star Wars: Episode IX

Estreno: 20 de diciembre

Men In Black: International

Me gustó mucho la primera película de MiB. Tenía el VHS original y la debo haber mirado cientos de veces. No puedo decir lo mismo de la segunda, y si bien miré la tercera, no recuerdo mucho. Voy a intentar ver ésta en el cine, el concepto de comedia ciencia ficción puede ser muy efectivo para mí, y la tecnología en efectos especiales ha avanzado mucho desde la primera entrega. MiB 1 salió hace más de 20 años 👴

Estreno: 14 de junio

Iron Sky: The coming race

La secuela de Iron Sky, que cuenta con la participación de una de mis personas preferidas y con quien tuve el gusto de tomarme una cerveza una vez: Tom Green. En la primera película descubrimos que tras su derrota en 1945, los Nazis se estaban escondiendo en la Luna. Ahí construyeron una base y una flota espacial para volver a atacar la Tierra. Ahora, una colonia de humanos vive en la base en la Luna, con un gobierno fascista y religiones incluyendo una de las tantas que afectan nuestra actualidad: los “Jobistas”, un culto a Steve Jobs. Al volver a la Tierra se encuentran con dinosaurios y reptilianos liderados por Hitler. Todo dicho…

Estreno: Se estrenó en Finlandia en enero y se estrena en otros países en Marzo. Pueden ayudar a su distribución demandando que se estrene en su país en el siguiente enlace.

Terminator 6

Terminator 6

Sexta película de la saga Terminator. Aparentemente sería una secuela directa de Terminator y Terminator 2: Judgement Day, ignorando el resto de las películas como líneas de tiempo alternativas. También vuelve Arnold Schwarzenegger, Linda Hamilton y el John Connor original, pero todos pasados por CGI para hacerlos parecer jóvenes. Hollywood explotando al máximo la nostalgia y el miedo al cambio del público…

Alita: Battle Angel

Estuvo originalmente en la lista de películas para ver en 2018, pero se estrenó finalmente este año. Es una adaptación de un manga cyberpunk y se ve muy interesante. Las críticas han sido mezcladas, voy a tener que ir al cine a verla antes que salga de cartelera para formar mi propia opinión…

Estreno: Ya estrenada

Godzilla: King of the Monsters

Me gustó la primera película del nuevo “MonsterVerse” de Legendary. Aunque no tenía tanta acción o Godzilla como esperaba, siempre estoy a favor de películas con monstruos gigantes en la pantalla. Otra muy buena que recomiendo es Shin Godzilla, que me gustó más. En esta segunda entrega veremos muchos más monstruos, y con suerte sea todavía más entretenida que la primera. Y el año que viene cierra la trilogía con el encuentro de Godzilla Vs. Kong.

Estreno: 31 de mayo.

How to Train your Dragon: The Hidden World

Siguiendo con la temática monstruos y dragones, se estrenó en febrero la tercera entrega de “How to Train your Dragon”. Me encantan las primeras dos películas de esta saga. La animación es excelente, la historia y música son muy buenas y los dragones súper simpáticos. Todavía la están dando en el cine por acá, así que en una de esas esta semana me pego una vuelta.

Estreno: Ya estrenada

POKÉMON: Detective Pikachu

La premisa es tan ridícula que no sabía qué esperar de Detective Pikachu: Ryan Reynolds es la voz de Pikachu en una película live action con Pokemones realistas. Sus apariencias generaron reacciones encontradas entre el público, pero después de ver los trailers que han salido hasta ahora, compro. Se ve muy divertida y seguramente esté llena de guiños a los pokemaníacos.

Estreno: 10 de mayo

Mewtwo Strikes Back Evolution

Una remake CGi de la primera película de Pokémon. La animación se ve muy bien, tanto los Pokémon como los entrenadores. Lo hace a uno querer un juego de Pokémon así para Switch… Se estrena en Japón en julio, con suerte se estrene en más países.

Estreno: 12 de julio en Japón

Astérix: El secreto de la poción mágica

Estamos en el año 50 antes de Jesucristo. Toda la Galia está ocupada por los romanos… ¿Toda? ¡No! Una aldea poblada por irreductibles galos resiste, todavía y como siempre, al invasor. ¡Otra película animada de Astérix! Segunda película con animación en computadora, que se ve bastante bien. Se estrenó en Francia y otros países en diciembre del año pasado, España y México en enero, y llegará al Reino Unido en Agosto. Asumo que ya se habrá estrenado en otros países de América Latina también.

Estreno: Distintas fechas según la región.

Toy Story 4

Película de Pixar, tiene que estar en la lista. Y se trata de nada más y nada menos que la saga que empezó todo: Toy Story. La tercera parte me pareció un cierre correcto a la historia de los personajes, aunque debe ser la película que más me ha hecho llorar en un cine hasta ahora. De todas formas no tengo problema en volver a ver a Woody, Buzz, Jessie, Rex y los demás nombres clave de Debian en el cine. También me da una excusa para volver a ver las tres primeras 🤔

Estreno: 21 de junio

Frozen 2

La secuela de la excelente película animada de Disney que además de tremenda canción (Let it go! ¿No les queda la canción sonando en la cabeza?), dejó el mensaje que no todas las películas de princesas de Disney tienen que ser iguales. Elsa, Anna, Kristoff, Olaf y los renos viajan por ahí en una secuela que parece tener un toque más de aventura que la anterior. Ya me enteraré en el cine…

Estreno: 22 de noviembre

Lego Movie 2

Secuela de Lego Movie donde aparentemente “Everything is not awesome”. La original me entretuvo mucho así que la voy a mirar. Por cierto, si les gusta el humor en Lego Movie, les recomiendo la película de Ninjago, me resultó muy divertida también.

Estreno: Ya estrenada

Playmobil: The Movie

En mi infancia los Playmobil eran los juguetes “que no estaban tan buenos como los Lego”. Pero ahora que soy adulto, no mantengo esos conceptos infantiles. Excepto cuando peleo a un amigo fanático de Playmobil intentando hacerle entender lo superiores que son los Lego, algo que todos sabemos. Al igual que Lego, que no es competencia porque Lego es un juguete de armar cosas, que fomenta la creatividad y el desarrollo intelectual y Playmobil no, saltan a la pantalla grande con su propia película:

Estreno: 16 de agosto

Otras

Hay varias películas más que potencialmente podrían estar interesantes pero todavía falta ver más. La mascota de Sega, Sonic, tendrá su película pero todavía no está muy claro de qué va la cosa. En principio se publicó una imagen con la silueta de Sonic que no voy a compartir por acá para evitarle las pesadillas a quienes no la hayan visto. Y estos días se vió un supuesto “leak” de más imágenes. Me imagino que fue aprobada por un ejecutivo de Hollywood bajo los efectos de drogas fuertas. Es el tipo de película que -por ahora-, sólo me hace preguntarme “¿por qué?”.

He-Man volvería a tener una película de la mano de Sony. Pero entre que Mattel quiere empezar a hacer películas, licencias, y que hay poco y nada de información al respecto, no sé si veremos algo este año.

El reboot de Jumanji tendría una secuela, todavía no vi la primera, así que ni sé si merece estar en esta lista.

Los Locos Adams volverían en película animada, a estrenarse el 11 de octubre. Actualizaré este post ni bien aparezca algún trailer.

El villano más quemado del universo DC, el Joker (o Guasón), contará con su propia película este año protagonizada por Joaquin Phoenix, que me cae bien porque es vegano y hace campaña en defensa de los animales. Otra que ni bien haya tráiler la agrego a la lista, se estrena el 4 de octubre.

by Fernando at March 05, 2019 10:00 PM

December 27, 2018


Rodolfo Pilas

Rocket Chat super rápido con Vagrant

Rocket Chat es un excelente sistema corporativo de chat completamente software libre (clientes y servidores), con todo el glamour de un sistema de chat moderno (canales, integración, componentes embebitos, chatbots, etc. etc.)

En este Vagrantfile es posible levantarlo de forma tan simple como escribir vagrant up

# -*- mode: ruby -*-
# vi: set ft=ruby :

# https://rocket.chat/docs/installation/updating/#snap-installation
#
# Access Rocket.Chat:  http://localhost:3000

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"

  config.vm.network "forwarded_port", guest: 3000, host: 3000

  config.vm.provision "shell", inline: <<-SHELL
    snap install rocketchat-server
  SHELL
end

by pilasguru at December 27, 2018 01:51 AM

December 05, 2018


Fernando Briano

Nuevo evento de la comunidad de Datos Abiertos uruguaya: Datos y cogollos

El martes 11 de diciembre a partir de las 19:00, sumate a la comunidad de Datos Abiertos uruguaya en DATOS Y COGOLLOS. Se trata de un evento organizado por la comunidad de Datos Abiertos local, así que no le pertenece a ninguna organización en particular, y está más que abierto a su sigan sumando nuevas personas y organizaciones.

Datos y Cogollos

¿Qué es?

Es un evento para juntar a toda la comunidad trabajando alrededor (o cerca, o con interés) del tema Datos Abiertos, conocer los proyectos que hay en la vuelta, pero sobretodo conocer a las personas que estamos en eso y compartir una charla acompañada por alguna bebida para hacerlo más informal.

Es un formato que empezó en México en 2013, impulsado por SocialTIC bajo el nombre de “Datos y Mezcales” y que hace bastante rato que teníamos ganas de traer a Uruguay.

Está organizado por la comunidad de Datos Abiertos local, así que no le pertenece a ninguna organización en particular y está más que abierto a que se sigan sumando nuevas personas y organizaciones.

¿Qué va a pasar?

Ésta es la agenda que vamos a intentar seguir:

¿Cómo me anoto para presentar mi proyecto?

Comentá en este Meetup y decinos el nombre de persona que presentaría, un correo de contacto y el nombre del proyecto/organización/presentación que quieren compartir. Vamos a ir anotando la lista de oradores/as acá, donde también podés anotarte directamente si así lo preferís: http://bit.ly/DYCpresentaciones

Las presentaciones pueden ser con diapositivas/video/apoyo audiovisual y solicitamos que cada persona que presente la suba a la web (ej. Google Slides) y pegue el enlace a su presentación en el documento anterior.

Buscamos presentaciones y presentadores/as lo más diversas posibles, empezando por apuntar a la paridad de género, así que por favor no se ofendan si preguntamos si es posible que presenten otras personas llegado el caso. ☺

¿Porqué “cogollos”?

Básicamente porque podemos… El evento adapta su nombre a alguna bebida típica del país y así pasó por México (Datos y Mezcales), El Salvador (Datos y Cervezas), Bolivia (Datos y Singanis), Ecuador (Datos y Bielas), Colombia (Datos y Guaros), Costa Rica (Datos y Chiliguaros), Guatemala (Datos y Tragos) y España (Datos y Cañas).
Cuando le toca a Uruguay, optamos por algo que ninguna de las organizaciones amigas de todos esos países podría poner legalmente (o sea, es un poco un chiste interno).

¿Es obligatorio presentar/saber de datos abiertos/tomar/fumar porro?

No, para nada. Cada uno viene y hace lo que quiere 🤗

Visitá el evento en Meetup

by Fernando at December 05, 2018 01:15 PM

December 03, 2018


Fernando Briano

Montevideo: Conferencia Internet y Derechos Humanos

DATYSOC nos invita al siguiente evento:

Conferencia Internet y Derechos Humanos

El miércoles 13 de diciembre les invitamos a participar de una conferencia sobre Internet y Derechos Humanos.
A partir de las 17:30 horas y hasta las 19:30 les esperamos en el Espacio Interdisciplinario de la Universidad de la República en José Enrique Rodó 1843.

Se presentan Veridiana Alimonti, Analista Senior de Políticas en América Latina de la EFF. y Beatriz Busaniche, Presidenta de Fundación Vía Libre, Argentina.

Entrada libre y gratuita, y los esperamos con un brindis luego de la conferencia.

 

by Fernando at December 03, 2018 07:00 PM

November 28, 2018


Rodolfo Pilas

Publicar la llave pública SSH

Los principales repositorios (Gitlab y Github) exponen las llaves públicas SSH de sus usuarios de forma que están accesibles para descarga:

https://(gitlab|github).com/<usuario>.keys

Es la URL de donde se obtienen, y aquí las mías:

La ventaja es tener un sitio disponible donde está nuestra clave (y la de nuestros colegas) para usar en automatismos como esta task de Ansible:

- name: Enable pilasguru root access
  authorized_key:
    user: root
    state: present
    key: https://gitlab.com/pilasguru.keys
    validate_certs: False

by pilasguru at November 28, 2018 07:33 PM

November 21, 2018


Rodolfo Pilas

Fundamentos y doctrinas de la Guerra Fría

Tuve el gusto de presentar ante dos sextos años de la Escuela Elbio Fernandez un análisis de los fundamentos y las doctrinas de la Guerra Fría, con la idea de complementar el estudio que previamente ellos habían hecho sobre ese período histórico, pero acercando una visión desde la «academia», gracias a Von Neumann, claro.

Me divertí muchísimo contándoles cómo explota una bomba nuclear y explicando cómo la Teoría de Juegos de John Von Neumann y Oskar Morgenstern podía responder por qué la Guerra Fría fue, precisamente, fría.

Hasta nos hicimos tiempo para representar el dilema del prisionero y el equilibrio de Nash.

Agradezco a las maestras Irene y Annie que me permitieron estar frente a sus alumnos.

by pilasguru at November 21, 2018 08:28 PM

Fernando Briano

Lanzado ATuServicio Bogotá 🏥

El viernes 16 de noviembre de 2018 se lanzó ATuServicio Bogotá. Se trata de una replicación independiente e innovadora del proyecto que originalmente desarrolláramos con DATA y el Ministerio de Salud de Uruguay.

ATuServicio Bogotá

Si ya conocen ATuServicio, verán que la estética es bastante similar, pero no deja de tener un toque personalizado. El sitio cuenta con un mapa de servicios, donde los usuarios pueden explorar los 300 centros de salud principales de Bogotá, reportar su experiencia y ayudar a mejorar la calidad de los servicios en la ciudad. Y por supuesto, los datos están disponibles como Datos Abiertos.

Es genial ver que los proyectos de DATA sigan creciendo. Hemos hablado muchas ideas para ATuServicio, y con suerte para el año que viene podamos implementar varias y colaborar con más lugares. De la página:

A tu Servicio Bogotá es una iniciativa de innovación cívica que se fundamenta en alianzas público-privadas duraderas y de sociedad civil que permitan superar las barreras institucionales y de confianza que disminuyen la efectividad de la interacción entre ciudadanos y el gobierno.

La plataforma permite a los ciudadanos conocer y calificar la calidad, oportunidad y atención de los servicios que reciben en las Instituciones Prestadoras de Salud (IPS), públicas y privadas, que están habilitadas para funcionar en Bogotá.

Los aportes ciudadanos se convierten en insumos directos con los cuales la Secretaría Distrital de Salud generará cambios en las políticas, programas y/o medidas con el fin de mejorar la atención en el servicio de salud.

Esta plataforma surge de A Tu Servicio Uruguay, una buena práctica desarrollada en 2015 por Data Uruguay y Fundación Avina en alianza con el Ministerio de Salud de ese país. Anualmente los usuarios tienen la posibilidad de cambiar de asegurador, por esta razón, la plataforma cualifica la percepción ciudadana sobre el sistema para que su decisión esté intermediada por información de calidad.

A Tu Servicio Bogotá incorpora los aprendizajes de Uruguay y los adapta a las necesidades del contexto colombiano partiendo de los avances que tiene el Observatorio de la Secretaría Distrital de Salud en datos abiertos e incorporando la experiencia del programa Así Vamos en Salud, Fundación Corona, la Plataforma de Innovación con Sentido, Fundación AVINA, CAF y Wingu en el desarrollo de tecnologías cívicas para involucrar a la ciudadanía en la toma de decisiones públicas y de veeduría ciudadana.

La plataforma cuenta con las siguientes funcionalidades:

Visita ATuServicio Bogotá

by Fernando at November 21, 2018 01:30 PM

November 20, 2018


Fernando Briano

Rust Latam Montevideo 2019 – Conferencia latinoamericana de Rust

Santiago Pastorino anunció en el foro de Rust información sobre la conferencia Rust Latam 2019.

Rust Latam Montevideo

La primera edición de Rust Latam se va a realizar los días 29 y 30 de marzo de 2019 en Montevideo, Uruguay. Del sitio (traducción mía):

La Conferencia Rust Latam es el evento líder en América Latina por y para el movimiento Rust, y una de las oportunidades anuales más grandes de networking en la comunidad local de Rust. Esta conferencia de un fin de semana con sesiones interactivas, actividades prácticas, y charlas junta a más de 200 defensores, desarrolladores y entusiastas del lenguaje de programación Rust de todo el mundo. En marzo, la gente e ideas de la comunidad latinoamericana de Rust saltará de la pantalla para aprender, discutir, debatir y enfrentar Rust en persona. Nuestra primera conferencia Rust Latam anual empieza en Montevideo.

En marzo, tendremos ese mismo espíritu vehemente de las reuniones locales. También tendremos a la gente y recursos para hacer un gran impacto. Una conferncia de dos días – series de talleres y oradores – con decenas de expertos y principiantes significa que podemos avanzar el pensamiento en cómo tú y tu equipo pueden usar características de Rust para crear una amplia gama de nuevas aplicaicones de software, como motores de juegos, sistemas operativos, sistemas de archivos, componentes de navegadores web y motores de simulación para realidad virtual. Podemos forjar nuevas sociedades, podemos entrenar a los programadores del mañana y podemos alimentar a la construcción comunitaria a través de los países de América Latina.

Ya se confirmaron dos oradores: Niko Matsakis del Rust Core Team y Boats de Rust Language Team para las charlas keynote. Pero está abierto el llamado a charlas. Hay 7 espacios disponibles para charlas de hasta 35 minutos. La organización de la conferencia cubre gastos de viaje (vuelos + hotel) por hasta USD 1.300, pero también aceptan que una compañía cubra los costos como espónsor bronce, y hay más opciones según cada caso.

Las entradas “supporter” cuestan USD 100, un tipo de entrada para ayudar a que la conferencia se lleve a cabo de la mejor manera posible. Pero también van a haber entradas regulares a USD 50.

Pueden visitar el sitio web por más información, comprar su entrada, o seguir a la conferencia en Twitter para enterarse de las novedades.

 

by Fernando at November 20, 2018 09:32 PM

Rodolfo Pilas

Enviar correo SMTP por telnet

Nada nuevo, esto está por todo internet explicado en muchas formas, tamaños y colores. Pero sucede que lo utilizo mucho y lo que siempre hago es entrar a mi blog y hacer una búsqueda por el término «telnet» y ahi me doy cuenta que tengo todas las formas de telnet para correo, menos la común y corriente. Eso motiva este artículo.

Como enviar un correo electrónico al puerto 25 por telnet:

# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 mail.mydomain.com ESMTP

HELO yourdomain.com
250 mail.mydomain.com

MAIL FROM: you@server.com
250 2.1.0 Ok

RCPT TO: rpilas@mydomain.com
250 2.1.5 Ok

DATA
354 End data with <CR><LF>.<CR><LF>
From: "Some One" <you@server.com>
To: "Rodolfo Pilas" <rpilas@mydomain.com>
Subject: Testing
MIME-Version: 1.0
Content-Type: multipart/alternative;
        boundary="boundary-type-1234567892-alt"
--boundary-type-1234567890
--boundary-type-1234567892-alt
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


Testing the text to see if it works!

--boundary-type-1234567892-alt
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


<html>Does this actually work?</html>

--boundary-type-1234567892-alt--
--boundary-type-1234567890
Content-Transfer-Encoding: base64
Content-Type: text/plain;name="Here2.txt"
Content-Disposition: attachment;filename="Here2.txt"

KiAxMyBGRVRDSCAoQk9EWVtURVhUXSB7NjU5fQ0KLS1fZjZiM2I1ZWUtMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXw0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQ0KDQoNCkp1c3Qgc2VlaW5nIHdoYXQgdGhpcyBhY3R1
YWxseSBjb250YWlucyEgCQkgCSAgIAkJICA9DQoNCi0tX2Y2YjNiNWVlLTIwN2EtNGQ3Yi04NDU4LTQ2OWJlZTQ5MThkYV8NCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJpc28tODg1OS0xIg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQ0KDQo8aHRtbD4NCjxoZWFkPg0KPHN0eWxlPjwhLS0N
Ci5obW1lc3NhZ2UgUA0Kew0KbWFyZ2luOjBweD0zQg0KcGFkZGluZzowcHgNCn0NCmJvZHkuaG1tZXNzYWdlDQp7DQpmb250LXNpemU6IDEwcHQ9M0INCmZvbnQtZmFtaWx5OlRhaG9tYQ0KfQ0KLS0+PC9zdHlsZT48L2hlYWQ+DQo8Ym9keSBjbGFzcz0zRCdobW1lc3NhZ2UnPjxkaXYgZGlyPTNEJ2x0cic+DQpKdXN0IHNlZWluZyB3aGF0IHRo
aXMgYWN0dWFsbHkgY29udGFpbnMhIAkJIAkgICAJCSAgPC9kaXY+PC9ib2R5Pg0KPC9odG1sPj0NCg0KLS1fZjZiM2I1ZWUtMjA3YS00ZDdiLTg0NTgtNDY5YmVlNDkxOGRhXy0tDQopDQpmbHlubmNvbXB1dGVyIE9LIEZFVENIIGNvbXBsZXRlZA


--boundary-type-1234567890--


.
QUIT
250 2.0.0 Ok: queued as 1EDE71400DE

221 2.0.0 Bye
Connection closed by foreign host.

(esto lo he extraido de internet)

by pilasguru at November 20, 2018 03:34 PM

November 17, 2018


Fernando Briano

R-Ladies Madrid y NoLegalTech: Legal Analytics para democratizar el acceso a las leyes

Les dejo la información del próximo evento de R-Ladies Madrid y NoLegalTech en Madrid, a realizarse el martes 20 de noviembre. Todo lo que ayude a democratizar el acceso a información del estado y le de poder a la gente sobre sus gobernantes es bueno:

 R-Ladies Madrid y NoLegalTech: Legal Analytics para democratizar el acceso a las leyes

A la democracia le ha llegado la hora tecnológica

El Boletín Oficial del Estado (BOE) es el diario oficial para la publicación de las normas y las leyes en el territorio español. Recogida en el artículo 9 de la Constitución, la publicidad de las normas es un principio básico de seguridad jurídica de los ciudadanos. Solo, pues, si los ciudadanos conocen las normas pueden ejercer sus derechos y deberes dentro de la sociedad.

Si bien este principio nace como esencial en una sociedad democrática, hoy en día la cantidad de normas aplicables en tiempo y lugar se ha multiplicado hasta tal punto que ni la profesión del abogado puede llegar a alcanzarlas en su plenitud. Desde las directivas y reglamentos que dicta la Unión Europea, hasta las diversas normas que pueden dictar tanto las Cortes Generales como el propio Gobierno (Leyes Orgánicas, Leyes Ordinarias, Reales Decretos…) el puzzle del sistema legal español llega a ser incomprensible bajo los sistemas tradicionales de ejercer la profesión.

En los últimos años el Estado de Derecho, empleando una estructura burocrática alejada del ciudadano y un lenguaje ininteligible e incluso enigmático, se ha ido alejando cada vez más del objetivo principal de la sociedad: la convivencia normativa y la sujeción de los poderes públicos a la norma.

Sin embargo, con la irrupción de la tecnología en nuestras vidas y la generación de datos a lo largo y ancho del globo, el estudio y el aterrizaje de las normas al ciudadano ya es posible.

Habiéndose generado en los dos últimos años más datos que en toda la historia de la humanidad, a través del machine learning y el entrenamiento de textos jurídicos masivos (leyes, normas, disposiciones…), se puede crear lo que por primera vez en España puede traer poder legislativo: conocimiento real de las leyes a través de la ciencia y al margen de los intereses políticos. Hoy en día podemos alcanzar a conocer la normativa vigente española (tan solo conocer qué normas y qué preceptos están en vigor en todas las ramas del Derecho ya es un paso adelante), detectar incompatibilidades normativas… e incluso comprobar, con un análisis social, si una ley es efectiva en el tiempo y lugar en que se ha aplicado.

El próximo 20 de noviembre, bajo el paraguas de la comunidad R-Ladies Madrid y NoLegalTech, celebramos el primer evento Legal Analytics, donde tendrán cabida todas estas cuestiones.

Programa

18:00 Presentación
18.30 Bárbara Román (Nolegaltech): charla “Panorama legal y datos”
19.30 Mesa redonda moderada por Bárbara Román: Gloria Sánchez (Banco Santander), Sara Molina (Marketingnize) y Elen Irazábal (R-Law Geeks)
20.30 Presentación del grupo R-Law Geeks. Será una presentación tanto jurídica como técnica, como un ejemplo de legal analytics.
21.15 Preguntas
21.30 Despedida

Más información e inscripciones

by Fernando at November 17, 2018 08:10 AM

September 21, 2018


Rodolfo Pilas

fingerprint de certificados ssh

Con el tiempo uno va coleccionando muchos certificados, algunos dedicados a un determinado proyecto, otros dedicados a algun cliente y, por supuesto los propios. En ese repositorio de certificados que suele ser la carpeta ~/.ssh/ hay que agregar los certificados que por algun motivo distribuimos en algunos servidores… en fin, llegará el día que necesitemos identificar algun certificado privado.

Así que estos son los comandos para obtener el fingerprint (huella dactilar) de certificados privados.

Certificado ssh

$ openssl rsa -in id_rsa -pubout -outform DER | openssl md5 -c
Enter pass phrase for .ssh/id_rsa:
writing RSA key
a2:d7:19:27:fa:89:43:aa:59:fd:ac:eb:71:3f:fb:a8

Como ven, mi certificado privado tiene passphrase y, para leerlo se require que la escriba.

Certificado pem (AWS)

openssl pkcs8 -in .ssh/proyectoX  -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
d3:ff:c0:cf:6f:25:a1:88:b5:c7:9e:9b:ba:b9:57:a4:bb:45:62:68

Los certificados que creamos en AWS se suelen guardar sin passphrase y el fingerprint se muestra inmediatamente.

by pilasguru at September 21, 2018 01:11 PM

September 17, 2018


Rodolfo Pilas

FIX AWS cli «An error occurred (AuthFailure)»

Uno de los deployments que estoy automatizando con aws-cli funcionaba perfectamente cuando utilizaba recursos RDS, por ejemplo:

$ aws rds describe-db-snapshots --db-instance-identifier production
{
    "DBSnapshots": []
}

lo que significa que estaban correctamente configuradas las credenciales y los permisos dentro de IAM.

Pero al ejecutar comandos sobre EC2 obtenía un error, en algo tan sencillo como listar las instancias

$ aws ec2 describe-instances

An error occurred (AuthFailure) when calling the DescribeInstances operation: 
AWS was not able to validate the provided access credentials

y es un poco desconcertante, porque algunos comandos/servicios funcionan y otros no.

Una prueba que hice fue dar de alta las variables

export AWS_ACCESS_KEY_ID="AKIAIW......A"
export AWS_SECRET_ACCESS_KEY="GOvDvOPvjBW0n.........."

pero el error continúaba.

El problema es que la máquina local necesita tener una hora correctamente configurada:

$ date
Sat Sep 15 16:12:01 UTC 2018

$ sudo apt install -y ntp

$ date
Sat Sep 15 16:23:57 UTC 2018

Esos 9 minutos de retraso que tenía mi máquina local evitaba el uso de EC2.

Hay muchas formas de ajustar la hora, el servicio NTP no es la única solución y puede no ser la mejor. Tal vez un simple

$ sudo date 091516232018

hubiera sido una solución más adecuada; pero la idea es la misma, poner el host local en hora

by pilasguru at September 17, 2018 01:45 PM

September 12, 2018


Rodolfo Pilas

Deepin

Ya hace tiempo que vengo utilizando Deepin como mi distribución de escritorio de Linux. Es algo que podemos cambiar, pero hace tiempo que Deepin es mi distribución preferida a la hora de montar un desktop.

Se trata de una distribución para desktop que busca ser elegante y fácil de utilizar para el usuario promedio.

No solo viene out-of-the-box con el software que uno espera (navegador Chrome, Correo Thunderbird, etc.) sino que trae algunas aplicaciones propias que buscan seguir la misma idea de sencillez y elegancia como un centro de aplicaciones (Deepin Store), Deepin ScreenShot y multimedia con Deepin Music y Deepin Movie.

Para ofimática viene ya pre-instalado todo el WPS Office que busca seguir la estética de los ciéntos de íconos y sub-menúes del MS-Office.

La base es GNU/Debian Linux, por lo que esta todo, todo lo demás que quieras instalar para personalizar tu deepin.

Hay una barra de aplciaciones preferidas donde puedes anclar tus aplicaciones más usadas y un launcher para buscar y lanzar tus aplciaciones.

El Centro de Control es un panel que se despliegua a la derecha y permite hacer tus configuraciones.

Es lindo, me gusta y lo uso y recomiendo y aquí está el enlace al sitio en español.

by pilasguru at September 12, 2018 07:44 PM

September 10, 2018


Rodolfo Pilas

Vagrant cheat sheet

Hace ya un tiempo que hice y vengo manteniendo un

Vagrant cheat sheet

con la lista ordenada de los comandos vagrant.

Si te interesa Vagrant, este resúmen puede ayudarte.

by pilasguru at September 10, 2018 01:11 PM

September 06, 2018


Rodolfo Pilas

Tabla periódica del DevOps

La empresa XebiaLabs mantiene una tabla periódica de las herramientas para DevOps que es una forma muy interesante de tener tanto nombre y herramientas ordenados en una forma visual y comprensible.

Las herramientas listadas tiene cada una un enlace que lleva a información adicional.

Fuente: PERIODIC TABLE OF DEVOPS TOOLS

by pilasguru at September 06, 2018 07:05 PM

¿cómo evitar subirse al tren de la desinformación en las redes sociales?

No compartas sin antes filtrar la información por estos cinco puntos

by pilasguru at September 06, 2018 05:10 PM

September 03, 2018


Rodolfo Pilas

Instalar Docker con Ansible

Instalar en Ubuntu 16.04 con Ansible docker engine y docker-compose.

- hosts: all
  become: true

  tasks:
    - name: ensure repository key is installed
      apt_key:
        id: "58118E89F3A912897C070ADBF76221572C52609D"
        keyserver: "hkp://p80.pool.sks-keyservers.net:80"
        state: present

    - name: ensure docker registry is available
      # Ubuntu 16.04 LTS
      apt_repository: repo='deb https://apt.dockerproject.org/repo ubuntu-xenial main' state=present

    - name: ensure docker and dependencies are installed
      apt: name={{ item }} update_cache=yes
      with_items:
        - docker-engine
        - docker-compose

    # To enable insecure registries with Docker
    #- name: ensure docker can use insecure registries in 10.1.0.0/16
    #  lineinfile: "dest=/etc/default/docker regexp=^DOCKER_OPTS line=DOCKER_OPTS='--insecure-registry 10.1.0.0/16'"

    # Optional if you are provisioning vagrant
    #- name: add vagrant to docker group
    #  user: name=vagrant groups=docker append=yes

    - service: name=docker state=restarted

Configuración de provision con Vagrant:

  config.vm.provision "ansible_local" do |ansible|
    ansible.playbook = "playbook.yml"
    ansible.compatibility_mode = "2.0"
  end

by pilasguru at September 03, 2018 01:32 PM

August 31, 2018


Rodolfo Pilas

Detener la ejecución de Ansible

Ansible (version >2.2) provee el módulo meta para configurar sus acciones y con una task como esta:

- name: stop processing task
   meta: end_play

se puede detener la ejecución de un playbook e ignorar todo las tareas siguientes.

Referencias

by pilasguru at August 31, 2018 02:46 PM

July 29, 2018


Rodolfo Pilas

246 días y renace

Si, fueron 246 días off-line. Más concretamente 5907 horas, 51 minutos y 5 segundos en que este blog ha estado off-line, según mi sistema de monitoreo.

La baja del blog se debió al cierre de la capa gratuita del servicio RedHat OpenShift en octubre, cuando procesaron un cambio de versión (tengo entendido que la capa gratuita se ha restaurado, pero no estoy seguro).

Aprovechando este “apagón” decidí migrar toda la plataforma a una infraestructura de docker y entre los tiempos que puede dedicar, las pruebas, los armados, que ahora dedico tiempo al podcast deployando.me y si …. pasó mucho tiempo.

Primero levanté el wiki pi.lastr.us, luego el sistema de certificados Let’s Encrypt y por último este blog. Pero lo que más pruebas me llevó fue armar un sistema de respaldos coherente para todo lo que voy levantando.

La estructura armada es de la siguiente forma:

En el host se levantan un conjunto de contenedores docker:

Las dos aplicaciones

que están detrás de un proxy reverso que atiende las conexiones de los navegantes

que recibe los certificados y configuración SSL gestionada por

el blog que guarda datos en un volumen definido en una carpeta del host y en una base de datos

que se respalda a un espacio de disco diariamente mediante un contenedor

que es invocado desde una tarea diaria en el crontab.

Estoy muy conforme con el resultado, pues es un sistema coherente para mantener y respaldar y escalable para agregar eventualmente más aplicaciones.

Volver a ver mi blog online fue la culminación de un proyecto personal bastante lindo para mi.

by pilasguru at July 29, 2018 07:52 PM

January 16, 2018


Andres Tarallo

Adios, Hemingway - Leonardo Padura

Es verano en esta parte del mundo. El año recién comenzó, todo transcurre con un ritmo más tranquilo. Algunos están de vacaciones, otros ya retornamos al trabajo. Época para leer alguna novela, cuando no se puede estar bajo el sol. 

Ordenando los libros que se apilan en mi mesa de luz, encontré una novela de Leonardo Padura, que lei el pasado verano. Padura es un escritor cubano, de su imaginación nace el Teniente Mario Conde de la Policía de Investigación de Cuba. Un Detective/Investigador con aspiraciones de escritor, con un variopinto grupo de amigos. Adiós Hemingway integra la serie de "Mario Conde", es la quinta novela de la serie. Las cuatro primeras fueron llevadas a televisión en una miniserie llamada "Cuatro estaciones en la Habana". La miniserie esta disponible en NETFLIX, me despertó la curiosidad y salí a recorrer librerías donde encontré a la novela que motivó este post. 

Tapa de la edicion de Tusquets Editores (foto del autor)
Esta quinta novela encuentra a Mario Conde retirado de la Policía, intentando escribir una novela. Recibe una llamada de quien fuera su compañero de tareas. Luego de una tormenta apareció un cadáver en Finca Vigia, la que fuera residencia de Ernest Hemingway. El cadaver fué enterrado a fines de los 50, cuando Hemingway residía allí.Conde no puede resistir a ese misterio.

by Andres Tarallo (noreply@blogger.com) at January 16, 2018 11:00 PM

November 26, 2017


Andres Tarallo

2 articulos: History of Linux - Getting Started with FreeBSD

Hace un rato Federico nos compartía (a algunos amigos y colegas) dos articulos de DigitalOcean. Los acabo de terminar y quiero dejarlos en una entrada del blog. Estan especialmente interesantes para quien esta dando sus primeros pasos en Linux o FreeBSD, así como para docentes y alumnos de cursos de Sistemas Operativos o Linux.

El primero, History of Linux, nos presenta un relato desde la previa a  la creacion de Linux. Linux existe por que existe el proyecto GNU. Pero antes existió Minix, que debe sus raíces a BSD y a UNIX. Y no olvidarse de MULTICS. Pero no se queda en la sumatoria de hechos históricos, va a los datos técnicos, a las innovaciones que hicieron que UNIX desde un origen tuviera la relevancia que tiene. Y como eso repercutió en los sistemas operativos inspirados o desarrollados a partir de el.

El otro articulo, es un listado de una serie de artículos para facilitar el primer contacto con FreeSBD a quien tiene experiencia con Linux.  En Getting Started with FreeBSD van a encontrar una introduccion amena y actual varios de las primeras tareas que van a tener que enfrentar en nuevo sistema: crear usuarios y claves de SSH, instalar paquetes o tareas de mantenimiento de rutina.

¡Disfruten la lectura! Espero pronto subir algún articulo más largo.


by Andres Tarallo (noreply@blogger.com) at November 26, 2017 02:23 PM

November 06, 2017


Santiago Ferreira

SysAdmin

El mundo de la desolación, el control, el alma y el espíritu, la tecnología , los valores y el clon-az-epam.
Mientras funcione, los usuarios no se tienen que dar cuenta de los cambios en el sistema.
OK.
Wearables, horas de sueño, el tiempo es oro,demasiado ego, la máquina de ser feliz.
SED-AWK -Vi -uptime #uname -a

by Sanux at November 06, 2017 05:13 AM

October 10, 2017


Andres Tarallo

C elements of Style

Programar es análogo a escribir. De pequeños aprendemos poner letra tras letra para formar palabras y estas forman frases.  Análogamente quien aprende a programar escribe programas cortos, aprendiendo a manejar archivos o familiarizarse con las estructuras de control. 

Cuando pasamos la etapa de programas cortos, de unos cientos del lineas, a programas más complejos, bibliotecas o sistemas completos es necesario aprender a estructurar estos programas.A lo largo del ciclo de vida un programa este va a sufrir modificaciones. Para poder modificar un programa es necesario entender su funcionamiento, hablamos allí de "código legible". Hay quien compara el código difícil de leer con un plato de tallarines, hablamos de "spaghetti code".

En producción escrita se habla de "estilo" para redactar bien y con propiedad. Si hablamos de programar también se habla de estilo. Y pasa por cosas que escuchamos hasta el hartazgo: comentar el código, nombres de variables y  funciones claros, acordes al contexto y tarea. 

El Kernel de Linux tiene un documento con pautas para sus desarrolladores: Linux Kernel coding Style. Las pautas están inspiradas fundamentalmente en El lenguaje de programación C, de  Kernighan y Ritchie. Un viejo libro, escrito por Kernighan y Plunger, sobre el tema es The Elements of Programming Style. Un libro viejo, con muchos ejemplos en Fortran, pero con una serie de lecciones aun validas y aplicables en lenguajes mas modernos como Python o Go. Lo menciono ademas por haber influido Libros y Papers sobre el tema. Uno de esos Papers es Recommended C Style and Coding Standards

Hace algunas semanas buscando otra cosa llegué a la página de Steve Oualline, autor con varios libros publicados sobre C, C++ y PERL. Tengo (y lei) Practical C Programming y Practical C++ Programming. Me impresionó muy bien cuando los leí por el énfasis en escribir programas claros, bien documentados y mantenibles. En el sitio del autor me encontré una copia de C Elementos of Style, de rápida lectura y muy recomendable.

http://www.oualline.com/books.free/style/index.html

by Andres Tarallo (noreply@blogger.com) at October 10, 2017 02:48 PM

October 06, 2017


Andres Tarallo

Pan de Banana

El pan de Banana es de los llamados Panes rápidos, utilizan polvo de hornear en vez de levadura biológica. Este pan tiene origen en USA, en la década de los años 30 del pasado siglo. Una de las explicaciones de su origen afirma que lo inventaron amas de casa, como una forma de aprovechar bananas demasiado maduras para su consumo.

En una tarde lluviosa, buscando hacer algo distinto y rápido, encaré una receta de pan de banana, que saqué del Libro del Crandon. A la que hice algunos cambios: sustituí parte de la harina por harina integral y la manteca la cambié por aceite vegetal; este ultimo usé aceite de Girasol, lo que tenia en casa en ese momento; puede ser interesante hacerlo con aceite de oliva.

Tamizar y Mezclar:
 Mezclar en otro Bowl:
Mezclamos los ingredientes líquidos con los secos y vertemos en un molde enmantecado. Luego llevamos a horno caliente  (180 grados) por unos 50 minutos.

Pan de Banana recien desmoldado  (Foto del autor)

Conclusiones

El pan es agradable de gusto, apto para untarlo o utilizarlo en Sándwiches. Se puede tostar, si bien no es usual esto último. Envuelto en film se conserva varios días.  Hay variantes de esta receta, vi en un envase de salvado una receta interesante y otra en el blog de Silvia Pirez, concursante de la primera edición de MasterChef Uruguay. Esta última receta utiliza levadura biológica, lo que la hace interesante para probarla.

by Andres Tarallo (noreply@blogger.com) at October 06, 2017 08:52 PM