8 de octubre de 2018

¿Qué es Ethereum? ¿Qué es un smart contract o contrato inteligente? ¿Qué es una ÐApp o aplicación descentralizada?


Bitcoin ha sido la primera blockchain, pero desde su creación han aparecido muchas otras, cada una con diferentes características y protocolos. Una de las más importantes es Ethereum, creada por Vitalik Buterin en 2014.

¿Qué es Ethereum?

Es una blockchain pública que tiene la particularidad de permitir la ejecución de código y guardar estructuras de datos de forma descentralizada.

¿Cómo funciona Ethereum?

Ethereum funciona gracias a una máquina virtual llamada Ethereum Virtual Machine (EVM) que ejecuta bytecode de forma descentralizada. Los desarrolladores escriben programas en lenguajes de programación de alto nivel de tipo Turing completo, como Solidity. Estos programas, llamados Smarts Contracts, son compilados a dicho bytecode y subidos a la red de Ethereum, donde pueden ser ejecutados por cualquier persona. Toda ejecución dentro de la red de Ethereum consume un determinado Gas que tiene un coste que se paga en Ethers, la moneda de Ethereum, como incentivo a los mineros en forma de comisión.

¿Qué ventajas tiene Ethereum?

La ventaja de Ethereum con respecto a otras blockchains es que no es necesario construir una nueva blockchain para cada nueva aplicación pues Ethereum permite el desarrollo potencial de cualquier tipo de aplicación descentralizada. Actualmente existen distintas blockchains que, como Ethereum, permiten ejecutar código de forma descentralizada, pero Ethereum es la más madura de todas ellas.

¿Qué desventajas tiene Ethereum?

Ethereum, al igual que el resto de blockchains, si lo comparamos con el software “tradicional”, es lento, y tiene problemas de escalabilidad. Parte de estos problemas se solucionan utilizando blockchains privadas o mixtas. Actualmente todas las blockchains están intentando solucionar estos problemas, pero no parece que la solución vaya a llegar en breve.

¿Qué es un smart contract o contrato inteligente?

Un smart contract o contrato inteligente es un programa informático imparable e inmutable que se ejecuta de forma autónoma y descentralizada dentro de una blockchain.

¿Qué características tiene un smart contract o contrato inteligente?

Imparable

Una vez subido a una blockchain va a poder ejecutarse siempre, a no ser que haya sido programado para dejar de hacerlo. Un contrato inteligente no puede ser censurado por entidad alguna.

Inmutable

Una vez subido a una blockchain, tanto si funciona correctamente como si no, ya no se puede modificar. Si se quiere añadir una funcionalidad nueva es necesario subir un nuevo contrato.

Autónomo

Una vez subido a una blockchain no necesita ningún servidor para poder ser ejecutado pues lo hace en la propia blockchain.

Descentralizado

Una vez subido a una blockchain no necesita ningún tercero de confianza para ser interpretado, simplemente cada vez que se lance ejecutará las instrucciones en él programadas.

Confiable

Al estar almacenados en una blockchain, la trazabilidad de los datos generados por los contratos inteligentes es muy confiable.

¿Qué es una ÐApp o aplicación descentralizada?

Una ÐApp (se escribe con esta Ð extraña) o aplicación descentralizada es una aplicación que no depende de un sistema central si no que interactúa con uno o varios contratos inteligentes alojados en una blockchain.

¿Qué diferencias existen entre una ÐApp o aplicación descentralizada y una aplicación web tradicional?

La arquitectura de una aplicación web tradicional consiste en:
  1. por un lado, el front-end, que se corresponde con la interfaz gráfica de la aplicación, que se suele programar con HTML, CSS y JavaScript y que se suele ejecutar en un navegador web;
  2. y por otro lado, el back-end, que se corresponde con la parte del servidor, osea con:
    1. los servicios web, que se suelen programar con Java, .NET, PHP, Python, Ruby, etc.;
    2. y las bases de datos en donde se guardan los datos.
La arquitectura de una aplicación descentralizada se diferencia en que en este caso el back-end se corresponde con la blockchain en donde:
  1. se ejecutan los contratos inteligentes que serían como los servicios web tradicionales;
  2. y se guardan los datos en forma de transacciones en la propia blockchain.

Imagen. Arquitecturas de una aplicación web tradicional y de una ÐApp o aplicación descentralizada.

Ver también

Bibliografía

Leer más

5 de octubre de 2018

¿Qué es Bitcoin? ¿Qué es una Blockchain? ¿Qué es el minado? ¿Qué mecanismos de consenso existen? ¿Qué tipos de blockchain existen?


Bitcoin nace en 2009 de la mano de Satoshi Nakamoto, siendo este último un seudónimo, por lo que se desconoce la verdadera identidad de su creador o creadores.

¿Qué es Bitcoin?

Bitcoin es un protocolo y una red entre pares distribuida que conforman un ecosistema de dinero digital, en donde los usuarios poseen claves privadas alojadas en sus wallets que les permiten transferir sus fondos a otros usuarios.

¿Cuales son las características de Bitcoin?

Una de las principales características del Bitcoin es que es descentralizado, es decir carece de una entidad central que lo gestione, y las transacciones no necesitan de un tercero de confianza para ser verificadas.

Otra de las principales características del Bitcoin es que guarda un histórico difícilmente falsificable de todas las transacciones realizadas.

¿Qué es una blockchain?

Bitcoin se sustenta en la tecnología de blockchain, que es una estructura de datos en forma de cadena de bloques, en donde cada bloque tiene información relativa al bloque anterior, de manera que la información contenida en un bloque sólo puede ser editada modificando todos los bloques anteriores. Esta propiedad permite la implementación de un registro contable difícilmente falsificable con un histórico de todas las transacciones realizadas.

Además, gracias al minado, la integridad de los datos es verificada por todos los participantes de la red sin necesidad de recurrir a una entidad de confianza que centralice la información.


Imagen. Cómo funciona la Blockchain para realizar pagos.
(Fuente: https://miethereum.com/blockchain/)

¿Qué es el minado?

A la generación de nuevos bloques en una blockchain se le denomina proceso de minado. Todos los miembros de la red pueden participar en este proceso. A los que lo hacen se les denomina mineros. El problema surge a la hora de elegir cuál de los distintos bloques generados por los mineros es el correcto. Para ello se utilizan los mecanismos de consenso.

¿Qué mecanismos de consenso existen?

Existen diferentes mecanismos de consenso, siendo los dos principales los siguientes:

Mecanismo de consenso de prueba de trabajo

El mecanismo de consenso usado en Bitcoin y en la mayoría de las blockchains es el de prueba de trabajo, también denominado PoW, del inglés Proof-of-Work. Consiste en imponer para el minado del siguiente bloque de la cadena, la resolución de un problema que conlleva un gasto computacional elevado, pero que, a su vez, una vez resuelto, la verificación del mismo es casi inmediata. El primer minero que resuelve dicho problema es recompensado con un incentivo.

El mayor problema de este mecanismo de consenso es su elevado gasto energético.

Mecanismo de consenso de prueba de participación

Para intentar solucionar los problemas de PoW, surgen los mecanismos de consenso de prueba de participación, también denominados PoS, del inglés Proof-of-Stake. En este caso, la probabilidad de minar un bloque y conseguir el incentivo correspondiente es directamente proporcional a la cantidad de monedas que uno tiene acumuladas.

El problema más importante de este mecanismo, es que no sirven para alcanzar el consenso en caso de una bifurcación de la cadena, puesto que los mineros podrían seguir minando en ambas cadenas al no suponerles un gasto extraordinario. Para mitigar este tipo de problemas se suelen utilizar técnicas que perjudican de alguna forma a los mineros que intentan bifurcar la cadena.

¿Qué tipos de blockchain existen?

Según el acceso a los datos, existen tres tipos de blockchains:

Blockchains públicas

Están accesibles para cualquier usuario. Las más conocidas son Bitcoin y Ethereum.

Blockchains privadas

No están abiertas al público, solo se puede acceder a ellas por invitación. La más conocida es Hyperledger.

Blockchains mixtas

Son una combinación de las públicas y las privadas. Solo se puede ser minero por invitación, pero todas las transacciones son públicas.

Ver también

Bibliografía

Leer más

30 de septiembre de 2018

Qué hacer después de una instalación mínima de Ubuntu 18.04

Acabo de hacer una instalación mínima de Ubuntu 18.04 y he ido apuntando los pasos que ido dando justo después a modo de recordatorio para mi para una futura instalación, pero espero que sea de utilidad a otras personas.

  1. Enlazo mi propio post con las nuevas teclas rápidas de Ubuntu 18.04, pues algunas han cambiado con respecto a versiones anteriores.
  2. Enlazo mi propio post con la configuración de escritorio de Ubuntu 18.04 que he utilizado.
  3. Enlazo mi propio post con la configuración de Firefox que he utilizado.
  4. Enlazo mi propio post con la instalación de software que he utilizado.
Leer más

Instalación de software después de una instalación mínima de Ubuntu 18.04

Acabo de hacer una instalación mínima de Ubuntu 18.04 y estoy recopilando el software que he instalado justo después a modo de recordatorio para mi, pero espero que sea de utilidad a otras personas.

  1. Enlazo mi propio post en donde explico cómo instalar y configurar ZSH y Oh My ZSH en Ubuntu.

  2. Instalar y configurar el control de versiones Git:

    • Primero instalarlo:

      $ sudo apt install git
    • Luego configurarlo:

      $ git config --global user.name "Tu Nombre"
      $ git config --global user.email tu@mail.com
    • Y finalmente configurar tus claves SSH.

  3. Instalar las net-tools que es donde viene, entre otros, el famoso ifconfig:

    $ sudo apt install net-tools
  4. Instalar el gestor de contraseñas PasManGen:

    • Primero descargarlo:

      $ git clone git@github.com:pasmangen/pasmangen.github.io.git
    • Luego se abre el index.html desde el navegador.

  5. Enlazo mi propio post en donde explico cómo instalar Docker en Ubuntu.

  6. Instalar el generador de slides y libros a partir de ficheros Markdown MarkdownSlides:

    • Primero descargarlo:

      $ git clone git@github.com:asanzdiego/markdownslides.git
    • Luego compilar la imágen de Docker:

      $ docker build -t asanzdiego/markdownslides .
    • Luego añadir el comando al fichero ~/.bashrc o ~/.zshrc:

      function markdownslides() {
        docker run --rm -it -v "${PWD}":/home/markdownslides-master/"${PWD##*/}" asanzdiego/markdownslides ./build.sh "$@"
      }
    • Bonus track: comanado para eliminar los containers e imagenes de docker::

      function rmdocker() {
        # Delete all containers
        docker rm $(docker ps -a -q)
        # Delete all images
        docker rmi $(docker images -q)
      }
  7. Instalar el editor Visual Studio Code:

    $ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    $ sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
    $ sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
    $ sudo apt install apt-transport-https
    $ sudo apt update
    $ sudo apt install code # or code-insiders
  8. Instalar el navegador Chromium:

    $ sudo apt install chromium-browser
  9. Instalar el paquete ofimático de Libre Office:

    • Primero instalar el paquete propiamente dicho:

      $ sudo apt install libreoffice
    • Luego instalar los paquetes de idiomas:

      $ sudo apt install libreoffice-help-es libreoffice-l10n-es
    • Luego instalar los diccionarios para la corrección ortográfica:

      $ sudo apt install hunspell-es aspell-es
    • Luego instalar los icono breeze:

      $ sudo apt install libreoffice-style-breeze
    • Para terminar configurar los iconos desde Herramientas > Opciones > LibreOffice > Ver > Etilo de iconos.

  10. Instalar el convertidor de formatos ssconvert que viene con la hoja de cálculo gnumeric:

    $ sudo apt install gnumeric
  11. Instalar el editor de imágenes GIMP y varios plugins que uso a veces:

    $ sudo apt install gimp gimp-plugin-registry
  12. Instalar el reproductor de vídeo VLC:

    $ sudo apt install vlc
  13. Instalar el capturador de pantallas Shutter:


  14. Instalar el programa para escanear simple-scan:

    $ sudo apt install simple-scan
  15. Instalar el editor de vídeo Kdenlive:

    $ sudo apt install kdenlive
  16. Instalar la herramienta de screencasts Kazam:

    $ sudo apt install kazam
  17. Instalar la herramienta Vokoscreen que uso para capturar la webcam:

    $ sudo apt install vokoscreen
  18. Instalar el configurador de teclas rápidas AutoKey:

    $ sudo apt install autokey-gtk
Leer más

Configuración de Firefox

Acabo de hacer una instalación de Ubuntu 18.04 y estoy recopilando ciertas cosas a modo de recordatorio para mi, pero espero que sea de utilidad a otras personas. En este caso la configuración de Firefox:

  1. General > Inicio > Restaurar sesión previa - seleccionado
  2. General > Archivo y aplicaciones > Descargas > Preguntar siempre donde guardar archivos - seleccionado
  3. General > Aplicaciones > mailto > GMail - seleccionado
  4. Buscar > Buscador predeterminado > DuckDuckGo - seleccionado
  5. Privacidad y seguridad > Formularios y contraseñas > Preguntar para guardar contraseñas e inicios de sesión de sitios web - no seleccionado
  6. Privacidad y seguridad > Formularios y contraseñas > Protección contra el rastreo > Siempre - seleccionado
  7. Luego instalo 2 extensiones: la de buffer y la de MetaMask
Leer más

29 de septiembre de 2018

Configuración del escritorio de Ubuntu 18.04


Acabo de hacer una instalación de Ubuntu 18.04 y han cambiado algunas opciones de configurarción, así que pongo aquí la nueva configuración que he usado yo a modo de recordatorio para mi, pero espero que sea de utilidad a otras personas.

  1. Abrir la configuración y cambiar:
    • El fondo de esritorio:
    • El tamaño de los iconos del dock a 32:
    • En dispositivos, activar la luz noctura del monitor de forma automática:

  2. Instalar el configurador de escritorio gnome-tweak-tool:

    sudo apt install gnome-tweak-tool
  3. Instalar la extensión gnome-shell-extension-system-monitor que nos permite ver el estado (CPU, RAM, Red, Disco, etc.) en la barra superior de herramientas:

    sudo apt install gnome-shell-extension-system-monitor
  4. Abrir la aplicación retoques (gnome-tweak-tool):
    • Apariencia > Temas > Aplicaiones > Radiance:
    • Barra superior > Reloj > Fecha activada:
    • Extensiones > Activar "System-monitor":
    • En configuración de la extensión de "system-monitor", cambiar los colores a tonos de grises, cambiar el ancho del gráfico a 32, seleccionar "Mostrar en el menú" a todo, y seleccionar "Mostrar" a CPU, Memoria, Intercambio, Red, Disco y Temperatura (está última el "Estilo mostrado" a modo numérico:
    • Ventanas > Botones de la barra de título > Colocación > Izquierda:
Leer más

Atajos de teclado de Ubuntu 18.04


Acabo de hacer una instalación de Ubuntu 18.04 y han cambiado algunas de los atajos de teclado que solía utilizar, así que pongo aquí los nuevos atajos de teclado a modo de recordatorio para mi, pero espero que sea de utilidad a otras personas.

  • Super: Ver todas las ventanas.
  • Super+D: Minimizar todas las ventanas.
  • Super+D: Minimizar la ventana activa.
  • Super+Flechas: Gestionar ventanas.
  • Super+A: Ver el menú de aplicaciones.
  • Super+L: Bloquear pantalla.
  • Super+Page Up/Down: Cambiar de escritorio.
  • Shift+Super+Page Up/Down: Cambiar ventana de escritorio.
  • Alt+F4: Cerrar la ventana activa.
  • Alt+Tab: Cambiar a la ventana siguiente.
  • Alt+Shift+Tab: Cambiar a la ventana anterior.
  • Alt+Tecla arriba Tab: Cambiar a la ventana de la misma aplicación anterior.
  • Alt+Shift+Tecla arriba Tab: Cambiar a la ventana de la misma aplicación anterior.
  • Control+Alt+T: Abrir terminal.
  • Shift+Control+C: Copiar texto de un terminal.
  • Shift+Control+V: Pegar texto en una terminal.
  • Control+Alt+Supr: Cerrar sesión.
  • Print: Capturar pantalla.
  • Alt+Print: Capturar ventana.
  • Shift+Print: Capturar area.
Leer más

26 de septiembre de 2018

Cómo instalar docker en ubuntu


1. Actualizar:

$ sudo apt update
2. Instalar paquetes necesarios:

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common
3. Añadir la clave oficial GPG de Docker:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4. Verificar la clave:

$ sudo apt-key fingerprint 0EBFCD88
Tiene que salir algo así:

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22
5. Añadir el repositorio:

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
6. Actualizar de nuevo:

$ sudo apt update
7. Instalar la última version de Docker Community Edition:

$ sudo apt install docker-ce
8. Si queremos usar docker como un usuario que no sea root, tenemos que crear el grupo docker:

$ sudo groupadd docker
Luego añadir tu usuario a dicho grupo:

$ sudo usermod -aG docker $USER
Y por último cerrar sesión y volver a loguearse.

9. Verificar que se ha instalado correctamente:

$ docker run hello-world
Leer más

8 de abril de 2018

Instalar y configurar ZSH y Oh My ZSH en Ubuntu


Hoy vengo a contar como instalar y configurar en Ubuntu la shell ZSH y el framework Oh My ZSH, herramientas que han conseguido mejorar mi productividad con la consola.

Escribo este post un poco para mi yo del futuro cuando tenga que volver a instalar y configurar de nuevo dichas herramientas, pero de paso espero que el post sea útil para más gente.

Instalar ZSH

ZSH es una shell que mejora a BASH en algunos aspectos como el autocompletado y la navegación entre directorios.

Para instalarlo:

sudo apt install git zsh

Poner ZSH como shell por defecto

Para poner ZSH como shell por defecto hay que ejecutar el siguiente comando:

chsh -s $(which zsh)
Y luego cerrar sesión y volver a entrar.

Instalar Oh My ZSH

Oh My ZSH es un framework con una gran comunidad detrás con muchos temas y plugins para añadir funcionalidad a ZSH.
Para instalarlo:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Tema agnoster

Oh My ZSH tiene muchos temas y a mi uno de los que más me gusta es agnoster.
Para activarlo hay que modificar el fichero de configuración ~/.zshr:

ZSH_THEME="agnoster"
Y para que funcione correctamente también hay que instalar fonts-powerline:

sudo apt install fonts-powerline

Tema honukai

Otro tema que me gusta mucho es honukai.


Plugins

Como he dicho antes Oh My ZSH tiene muchos plugins.

Para activarlos hay que modificar el fichero de configuración ~/.zshr:

plugins=(
  git common-aliases colored-man-pages zsh-autosuggestions zsh-syntax-highlighting
)
Algunos plugins, además de activarlos hay que instalarlos. A continuación describo y muestro como instalar los plugins que yo uso.

Plugin git

Viene instalado por defecto y añade un montón de alias de git como:

gl para git pull
gp para git push

Plugin common-aliases

Añade ciertos alias interesantes, entre ellos:

G para añadir | grep al final de un comando

Plugin colored-man

Este plugin colorea las páginas del manual.


Plugin extract

Permite descomprimir cualquier tipo de archivo comprimido de una forma común:

x nombre-fichero-comprimido

Plugin zsh-autosuggestions

Este plugin busca en el historial tus últimos comandos y te va autocompletando los mismos.

Para instalarlo:

git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions

Plugin zsh-syntax-highlighting

Este plugin colorea los comandos en verde o en rojo dependiendo de si son correctos o no.

Para instalarlo:

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-autosuggestions

Bibliografía

http://www.zsh.org/
http://ohmyz.sh/
https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
https://github.com/agnoster/agnoster-zsh-theme
https://github.com/powerline/fonts
https://github.com/oskarkrawczyk/honukai-iterm-zsh
https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins
https://github.com/zsh-users/zsh-autosuggestions
https://github.com/zsh-users/zsh-syntax-highlighting
https://vmcreativo.com/como-instalar-oh-my-zsh-en-tu-consola-y-algunos-plugins-utiles/
https://hackernoon.com/oh-my-zsh-made-for-cli-lovers-bea538d42ec1

Leer más

3 de enero de 2018

Mis propósitos para el 2018



Como otros años, y después de hacer mi retrospectiva del 2017, toca ahora plasmar mis propósitos para este 2018, que son muy parecidos a los que me propuse hace un año, con algún que otro cambio:

1. Primero, quiero seguir intentando tener una vida más saludable. Este propósito tiene otros propósitos secundarios:

  1. Reducir el consumo de azúcares, grasas y alcohol.
  2. Aumentar el consumo de frutas, verduras y agua.
  3. Dormir al menos 7 horas diarias.
  4. Andar al menos 5 kilómetros diarios.
  5. Hacer deporte (correr/nadar) al menos 2 veces por semana.
  6. Bajar mi peso al menos 2 kilos y no volverlos a coger.
2. Segundo, quiero seguir dando lo mejor de mi como Asesor Técnico Docente en el servicio TIC de la Dirección Genaral de Infrastucturas y Servicios de la Consejería de Educación, Juventud y Deporte de la Comunidad de Madrid.

3. Tercero, quiero entregar en tiempo y forma mi Proyecto Fin de Máster del Máster Universitario en Ingeniería del Software para la Web en el que me he matriculado en la Universidad de Alcalá. El proyecto va a consistir en desarrollar una DApp con la Blockchain de Ethereum.

4. Cuarto, quiero seguir ayudado a mi gran amigo Fernando con Pronoide. Tengo la impresión que este 2018 va a ser un año todavía mejor que el 2017 para Pronoide.

5. Quinto, quiero seguir colaborando con la Universidad de Alcalá como profesor de algún Máster.

6. Sexto, me encantaría seguir siendo ponente, como otros años, ya sea en algún meetup, en el t3chfest, en el OpenExpo, en el Codemotion, o dando algún curso como formador técnico.

7.Séptimo, quiero buscar un nuevo líder que me sustituya en Hackathon Lovers. Yo estoy cansado de organizar hackathones. Creo que gente nueva con ideas nuevas y con fuerzas lo podría hacer mucho mejor que yo.

8. Octavo, quiero mejorar mi política de compartir. Quiero escribir en mi Blog, crear repositorios en mi GitHub y subir presentaciones en mi SlideShare, etc. Me conformo con un par de posts, un par de repos y un par de presentaciones.

9. Noveno, quiero no empeorar mi nivel de inglés. Me conformo con ver series, películas y charlas en inglés.

10. Y por último, pero no por eso menos importante, quiero pasar todavía más tiempo con mi familia y mis amigos, sobre todo quiero pasar más tiempo con mis hijas. Tengo que seguir con la progresión del año pasado.

Espero seguir con la tendencia del año pasado y conseguir si no son todos, la mayor parte de mis propósitos.
Leer más