jueves, 9 de agosto de 2018

Cursos de Programacion

En the coders center tenemos los mas completos cursos de programacion del mercado: 

No te quedes afuera del mundo, veni a the coders.

Qué es Python?

Lenguaje de programación de propósito general, orientado a objetos, que también puede utilizarse para el desarrollo web.

Queremos presentar un lenguaje de programación de propósito general, cuya expansión y popularidad es relativamente reciente. Se trata de Python, una apuesta por la simplicidad, versatilidad y rapidez de desarrollo. A continuación veremos unas notas imprescindibles del lenguaje, extractadas básicamente de la página de inicio del lenguaje que se puede ver en www.python.org


Python es un lenguaje de scripting independiente de plataforma y orientado a objetos, preparado para realizar cualquier tipo de programa, desde aplicaciones Windows a servidores de red o incluso, páginas web. Es un lenguaje interpretado, lo que significa que no se necesita compilar el código fuente para poder ejecutarlo, lo que ofrece ventajas como la rapidez de desarrollo e inconvenientes como una menor velocidad.


En los últimos años el lenguaje se ha hecho muy popular, gracias a varias razones como: 
  • La cantidad de librerías que contiene, tipos de datos y funciones incorporadas en el propio lenguaje, que ayudan a realizar muchas tareas habituales sin necesidad de tener que programarlas desde cero. 
  • La sencillez y velocidad con la que se crean los programas. Un programa en Python puede tener de 3 a 5 líneas de código menos que su equivalente en Java o C.  
  • La cantidad de plataformas en las que podemos desarrollar, como Unix, Windows, OS/2, Mac, Amiga y otros. 
  • Además, Python es gratuito, incluso para propósitos empresariales.  

De dónde viene Python 

El creador del lenguaje es un europeo llamado Guido Van Rossum. Hace ya más de una década que diseño Python, ayudado y motivado por su experiencia en la creación de otro lenguaje llamado ABC. El objetivo de Guido era cubrir la necesidad de un lenguaje orientado a objetos de sencillo uso que sirviese para tratar diversas tareas dentro de la programación que habitualmente se hacía en Unix usando C.

El desarrollo de Python duró varios años, durante los que trabajó en diversas compañías de Estados Unidos. En el 2000 ya disponía de un producto bastante completo y un equipo de desarrollo con el que se había asociado incluso en proyectos empresariales. Actualmente trabaja en Zope, una plataforma de gestión de contenidos y servidor de aplicaciones para el web, por supuesto, programada por completo en Python.


Características del lenguaje

Propósito general
Se pueden crear todo tipo de programas. No es un lenguaje creado específicamente para la web, aunque entre sus posibilidades sí se encuentra el desarrollo de páginas.

Multiplataforma
Hay versiones disponibles de Python en muchos sistemas informáticos distintos. Originalmente se desarrolló para Unix, aunque cualquier sistema es compatible con el lenguaje siempre y cuando exista un intérprete programado para él.

Interpretado
Quiere decir que no se debe compilar el código antes de su ejecución. En realidad sí que se realiza una compilación, pero esta se realiza de manera transparente para el programador. En ciertos casos, cuando se ejecuta por primera vez un código, se producen unos bytecodes que se guardan en el sistema y que sirven para acelerar la compilación implícita que realiza el intérprete cada vez que se ejecuta el mismo código.

Interactivo
Python dispone de un intérprete por línea de comandos en el que se pueden introducir sentencias. Cada sentencia se ejecuta y produce un resultado visible, que puede ayudarnos a entender mejor el lenguaje y probar los resultados de la ejecución de porciones de código rápidamente.

Orientado a Objetos
La programación orientada a objetos está soportada en Python y ofrece en muchos casos una manera sencilla de crear programas con componentes reutilizables.

Funciones y librerías
Dispone de muchas funciones incorporadas en el propio lenguaje, para el tratamiento de strings, números, archivos, etc. Además, existen muchas librerías que podemos importar en los programas para tratar temas específicos como la programación de ventanas o sistemas en red o cosas tan interesantes como crear archivos comprimidos en .zip.

Sintaxis clara
Por último, destacar que Python tiene una sintaxis muy visual, gracias a una notación identada (con márgenes) de obligado cumplimiento. En muchos lenguajes, para separar porciones de código, se utilizan elementos como las llaves o las palabras clave begin y end. Para separar las porciones de código en Python se debe tabular hacia dentro, colocando un margen al código que iría dentro de una función o un bucle. Esto ayuda a que todos los programadores adopten unas mismas notaciones y que los programas de cualquier persona tengan un aspecto muy similar.
 
Conclusión

Python está en movimiento y en pleno desarrollo, pero ya es una realidad y una interesante opción para realizar todo tipo de programas que se ejecuten en cualquier máquina. El equipo de desarrollo está trabajando de manera cada vez más organizada y cuentan con el apoyo de una comunidad que está creciendo rápidamente.

Algunas empresas que utilizan Python son Yahoo, Google, Walt Disney, la NASA, Red Hat, etc. Se pueden ver más en www.python.org/community/users.html

Aunque la documentación de este lenguaje se encuentra en Inglés, poco a poco aparecen nuevas páginas que tratan de acercar el lenguaje a los usuarios hispanos. Se puede ver más información sobre el lenguaje en nuestra categoría en el buscador.

En the coders center te dictamos el curso mas completo de python que podras encontrar en el mercado.
No pierdas tiempo e inscribite.

martes, 29 de mayo de 2018

Solidity

El mundo de las criptomonedas tuvo sus inicios con la creación de Bitcoin en 2009 y junto a él llegó la tecnología Blockchain: una base de datos distribuida que contenía los registros de todas las transacciones que se realizaban en la red.
solidity para crear contratos inteligentes
Pocos años más tarde, gracias a Ethereum, llegó un proyecto mucho más potente y con mayores usos que el de ser un sistema de pago y una moneda digital descentralizada, como en el caso de Bitcoin. La gran baza de Ethereum respecto a éste son los llamados ‘smart contracts’ o
contratos inteligentes.

Los contratos inteligentes son programas informáticos que ejecutan acuerdos establecidos entre dos o más partes cuando se da una condición programada con anterioridad. Es decir, son contratos que se ejecutan y se hacen cumplir a sí mismos de manera automática y autónoma.

En palabras de uno de sus fundadores:

“Los smart contracts son una forma para que personas de todo el mundo hagan negocios entre sí, incluso si no hablan el mismo idioma o no utilizan la misma moneda”.
Para que los smart contracts se ejecuten necesitan instrucciones escritas en código.
Al igual que en el mundo real existen multitud de lenguajes en el mundo informático también existen multitud de lenguajes de programación.
En este artículo vamos a hablar de Solidity; pieza clave para el futuro de Ethereum, puesto que cuantas más personas aprendan este lenguaje, más serán capaces de crear contratos inteligentes y de supervisarlos contra posibles fallos en la escritura de su código.
Un lenguaje con tanto presente y futuro como el de su propio proyecto.


ethereum-solidity

Requisitos previos

– “¿Debería ser un experto en criptomonedas antes de estudiar Solidity y crear proyectos en Ethereum?”
Quizá no un experto, pero comprender bien la Blockchain antes de sumergirte en Solidity es una buena idea. La documentación de Bitcoin es, de momento, mejor que la que ha producido la comunidad de Ethereum.
Al estudiar Bitcoin, aprenderás la misma tecnología (cadena de bloques, criptografía, claves públicas/privadas, etc.) con recursos de desarrollo más fáciles de instalar y usar de lo que actualmente está disponible para Ethereum.
mastering bitcoin_portadaLa razón es simple: Bitcoin tiene casi 10 años mientras que Ethereum es mucho más joven. La mayoría de desarrolladores de Ethereum está mejorando el protocolo en vez de hacerlo accesible a un público más amplio.
Así que si realmente te interesa sumergirte en este mundo, la mejor manera de empezar es leyendo el libro Mastering Bitcoin. Es el mejor libro sobre desarrollo en la Blockchain.
Luego, aprendidas ya las bases, puedes pasar a Solidity.

Para hacer el camino más sencillo, es recomendable también tener ciertos conocimientos previos de Javascript.

¿QUÉ ES SOLIDITY Y PARA QUÉ SIRVE?

Solidity es un lenguaje de programación de alto nivel cuya síntesis es similar a otro de los lenguajes de programación más usados hoy en día: Javascript.
Este lenguaje está diseñado y compilado en código de bytes (bytecode) para crear y desarrollar contratos inteligentes que se ejecuten en la Máquina Virtual Ethereum (EVM de sus siglas en inglés).
Mediante Solidity, los desarrolladores pueden escribir aplicaciones descentralizadas que implementen automatizaciones en los negocios a través de los contratos inteligentes, dejando un registro irrefutable y autorizado de las transacciones.
En palabras menos técnicas, Solidity sirve para la creación de ‘smart contracts’ que permitan que muchas de las partes de un negocio funcionen perfectamente por sí solas y además se lleve un registro de las mismas.

Solidity es un lenguaje ‘Turing Complete’

Cuando hemos dicho que Solidity es un lenguaje de programación de alto nivel se refería a que era un lenguaje ‘Turing Complete’.
Este concepto, ideado por Alan Turing, se refiere en informática a aquel lenguaje que tiene un poder computacional equivalente a lo que se denomina una “Máquina de Turing Universal”.
La Ethereum Virtual Machine (EVM) es considerada una Máquina de Turing Universal, término que se refiere al software que es lo suficientemente hábil como para ejecutar cualquier código definido por el desarrollador.
Dicho de otro modo, el término Turing Complete aplicado a la tecnología Blockchain y especialmente a los contratos inteligentes, se refiere a la capacidad que tiene un lenguaje informático para resolver cualquier problema computacional y para añadir reglas complejas como, por ejemplo, los bucles.
Un bucle en informática es una instrucción de repetición que permite que los programas puedan realizar, como su nombre indica, tareas repetitivas por código. Para entenderlo pondremos un ejemplo:
Imagínate que queremos crear un contrato inteligente para preguntar el sueldo a los 50 empleados de una empresa y, a su vez, realizar un incremento salarial del 2% a todos ellos. Las dos variables (el sueldo y el incremento del 2%) se pondrían dentro de un bucle que se ejecute 50 veces (una por cada miembro de la empresa), sin necesidad de escribir el mismo código 50 veces para realizar la misma operación.
Este lenguaje de tipo ‘Turing Complete’ fue una de las razones que motivaron a Vitalik Buterin a crear el proyecto Ethereum, ya que Bitcoin no se diseñó para cumplir con esta propiedad.
Vitalik consideró que el lenguaje bajo el que opera la red Bitcoin llamado ‘Bitcoin Transaction Language’ (BTL) era insuficiente para evolucionar dicha red.
Él propuso incorporar un lenguaje de tipo ‘Turing Complete’ para mejorar el proyecto, pero el hecho de no recibir respuesta alguna por parte de la comunidad de desarrollo de Bitcoin hizo que se empezase a distanciar de esta plataforma y tomase la idea para su futuro proyecto: Ethereum.
curso solidity

Ethereum: Ventajas y desventajas de ser Turing Complete

Una de las ventajas de Ethereum de trabajar con un lenguaje Turing Complete es esa posibilidad de utilizar estructuras de codificación repetitivas (bucles) que permiten crear aplicaciones más complejas y de una manera más simple y eficiente. Como desventaja esto implica el tener que disponer de un mecanismo como el ‘Gas’ para evitar que el sistema pueda ser colapsado.
El Gas es la forma que tiene Ethereum de calcular el coste de las transacciones y no es ni más ni menos que el gasto computacional de procesar una transacción o contrato inteligente en la red, y las necesidades de su almacenamiento.
Es un método que surge para evitar que se den bucles infinitos y colapsar así el sistema. De no existir el Gas, nada impediría que una aplicación mal programada pudiera dejar el sistema inservible.
Otra ventaja es que, si comparamos un lenguaje de alto nivel como Solidity de Ethereum, con el BTL de Bitcoin, pronto salen a la luz las dificultades que presenta el segundo frente al primero, ya que sus scripts – los pequeños programas que ejecutan las transacciones- no son Turing Complete porque no permiten los mencionados bucles.

SOLIDITY VS JAVASCRIPT

JavaScript fue diseñado con una sintaxis similar al lenguaje informático C, aunque también adopta nombres y convenciones del lenguaje de programación Java.
JavaScript-logoSe suele usar del lado del cliente (client-side), formando parte de un navegador web y mejorando la interfaz del usuario y de páginas web de tipo dinámico.
No obstante, también es utilizado para enviar y recibir información del servidor (Server-side JavaScript o SSJS) junto con ayuda de otras tecnologías .
Todos los navegadores modernos como Google Chome o Internet Explorer interpretan el código JavaScript integrado en las páginas web. Sin embargo su uso en aplicaciones externas a la web es también significativo.

Diferencias entre JavaScript y Solidity

Como ya se mencionó anteriormente, Solidity es un lenguaje de alto nivel para la cadena de bloques pública de Ethereum y todas las aplicaciones basadas en Ethereum están escritas en este lenguaje. Solidity es de una sintaxis muy similar a JavaScript pero con sus diferencias entre sí como podemos ver a continuación:
  • Solidity es un tipo de lenguaje orientado a objetos (OO) como C++ y C#, mientras que Javascript se basa en HTML.
  • Solidity está diseñada específicamente para las aplicaciones Ethereum y se ejecuta sólo en la cadena de bloques Ethereum, mientras que JavaScript es un lenguaje universal para la web y se utiliza en un gran número de aplicaciones.
  • En caso de Solidity, el resultado final está disponible en todos los nodos de la red. A diferencia de esto, en el caso de JavaScript, el resultado sólo está disponible en un único nodo.
Después de aclarar los conceptos básicos y de la explicación sobre Solidity y su mentor, JavaScrtipt, debemos hablar de los IDEs.

El IDE y su máquina virtual (EVM)

Una vez que establecemos un lenguaje de comunicación y unas instrucciones a llevar a cabo, es necesario formar un entorno propicio para realizar esas tareas.
Un IDE (Entorno de Desarrollo Integrado) como ya sabemos es la aplicación informática que proporciona las herramientas adecuadas a los programadores y desarrolladores para desarrollar un programa. Es decir, es el programa que facilita la creación de otros programas.
Suele consistir en un editor de código fuente, varias herramientas de construcción automáticas y un depurador, usado para probar y eliminar errores.
Estos IDEs también pueden añadir un compilador y un intérprete.
  • Un compilador es un programa informático cuya función es traducir lo que se ha escrito en un lenguaje de programación y pasarlo a un lenguaje de máquina (de bajo nivel).
  • Un intérprete es un programa informático capaz de analizar y ejecutar otros programas. Estos se diferencian de los compiladores en que, mientras el compilador traduce la totalidad de lo que se ha escrito, el intérprete solo analiza y traduce lo necesario, es decir, una instrucción concreta, por ejemplo.
Los programas interpretados suelen ser algo más lentos que los programas compilados debido a la necesidad de ir traduciendo el programa mientras se ejecuta.
compilador
Sin embargo, son más flexibles, permitiendo ofrecer al programa interpretado un entorno que no depende de la máquina física donde se ejecute, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).
Esto llevado a Ethereum, haría de la Maquina Virtual Ethereum (EVM) el intérprete de los diferentes IDEs disponibles para el lenguaje de programación Solidity.

En otras palabras, la EVM interpreta tanto los entornos de desarrollo de los contratos inteligentes como el lenguaje en el que se escriben (Solidity).

El IDE oficial de Ethereum: Remix

Remix, anteriormente conocido como Browser Solidity, proporciona un entorno de desarrollo integrado (IDE) que permite escribir contratos inteligentes basados en Solidity.
Es una solución perfecta si lo que buscamos es:
  • Crear contratos inteligentes y depurar su ejecución.
  • Tener acceso al estado y las propiedades de los smart contracts que ya hemos creado previamente.
  • Reducir errores de codificación y aplicar las mejores, previo análisis previo del código.
Se puede utilizar Remix ya sea en nuestro propio ordenador o de manera online. Si queremos descargarlo, es posible encontrar el último paquete desde este enlace.
Descomprimiremos el .zip y cargaremos el archivo “index.html” en el navegador.
Si preferimos trabajar de forma online, podemos visitar remix.ethereum.org.
Para la primera toma de contacto con Remix os dejamos esta guía que os ayudará bastante. Está en inglés, pero si lo preferís en castellano, aquí encontrarás nuestra propia traducción del manual.

Otros IDE’s e integraciones con Solidity

Aunque Remix es el entorno de desarrollo integrado oficial de Ethereum, existen otros IDEs que también guardan compatibilidad con el lenguaje de programación Solidity. A continuación algunos de ellos:

– Ethereum Studio

  • Ethereum Studio es otro IDE que se caracteriza por tener especialización proporcionando un acceso completo a la red Ethereum. Esto lo consigue a través de una especie de intérprete de comando llamado ‘shell’.Si queréis investigar más acerca de este IDE podéis echarle un ojo al manual online. También es posible descargarlo en PDF (está en inglés).Además, es posible acceder a través de YouTube a vídeos cortos para aprender en cuestión de segundos cómo empezar, cómo ejecutar e implementar Ethereum Studio, cómo hacer la prueba de unidad, cómo desarrollar la interfaz web y cómo iniciar el depurador.

– Plugin IntelliJ IDEA

  • Plugin de Solidity para IntelliJ IDEA (y el resto de IDEs de la plataforma JetBrains). Antes de descargar el plugin sería necesario descargar el IDE IntelliJ IDEA.Aquí dejamos también una amplia guía sobre este software (en inglés).

– Atom

  • Atom es un editor de texto moderno, accesible y a la vez, hackeable. En otras palabras, es una herramienta editable, que se puede personalizar para hacer cualquier cosa, pero que también se puede utilizar de forma productiva sin necesidad de tocar un archivo de configuración.En la sección de su web “packages” se pueden encontrar paquetes como Etheratom, un paquete hackeable para el IDE Atom que usa la biblioteca web3.js para interactuar con un nodo Ethereum.También hay otras secciones como la de “Documentation” en la que podremos encontrar cualquier tipo de documentación relevante a Atom, incluido por supuesto un manual. Para que no te tengas ni que molestar en buscarlo aquí tienes el manual.

– Extensión de Visual Studio

  • Plugin para Visual Studio que está diseñado para permitir el desarrollo de contratos inteligentes de Solidity en este IDE de Microsoft. Para ello primero hay que adquirir Visual Studio y luego pasar a instalar la extensión.Visual Studio es un entorno rico de programación, integrado para la creación de aplicaciones para Windows, Android y iOS, así como aplicaciones web modernas y servicios en la nube. Su integración con Solidity propone a los desarrolles ir un paso más allá, facilitándoles el poder crear contratos inteligentes como bien apunta Vitalik Buterin:
    “Facilitar a los desarrolladores el crear aplicaciones sobre Ethereum a través de herramientas de desarrollo ha sido siempre uno de nuestros principales focos de atención, y la integración de Solidity en Visual Studio ayudará a llevar Ethereum a una profundidad mayor en la comunidad de desarrolladores. Estoy deseando ver los resultados que aportarán esta colaboración”

RECURSOS

En este apartado añadiremos las webs, los frameworks, los clientes, y en general las herramientas que sean de relevancia a la hora de interactuar con Solidity.

Webs, artículos y cursos para su aprendizaje


  • Solidity.readthedocs.io: Recurso principal para el aprendizaje del lenguaje y desarrollo de Solidity. En esta web encontrarás todo lo que necesitas saber acerca de el lenguaje de programación de los contratos inteligentes. También es posible encontrar su traducción en español.
  • A 101 Noob Intro to Programming Smart Contracts on Ethereum: Tutorial para novatos sobre la programación de los contratos inteligentes de Ethereum.
  • Ethereum Stack Exchange: este portal se abrió para que la familia de desarrolladores de Ethereum lo utilizase como sitio de preguntas y respuestas. No obstante, si no eres desarrollador también puedes participar en él para preguntar otro tipo de dudas sobre el ecosistema Ethereum.
  • Blockchain Development: Un curso corto de Udemy para aprender de forma amena los fundamentos de Solidity y crear Smart Contracts para ÐApps.

Marcos de desarrollo (Frameworks)

  • Truffle: Framework autodenominado “la navaja suiza del ejército” para Ethereum. Un marco de desarrollo muy completo y muy utilizado entre los programadores de contratos inteligentes de Ethereum. Con manuales paso a paso en el apartado “Tutorials” de su web. Ésta es la dirección de su repositorio de Github, desde donde puedes descargarlo.
  • Embark: Junto con Truffle, los marcos de desarrollo más usados y extendidos en la red Ethereum. Ambos frameworks se encargan de compilar, desplegar e interconectar con los contratos inteligentes. Aquí puedes encontrar la guía más completa sobre Embark.
  • Dapp: Es una herramienta de línea de comandos sencilla para el desarrollo de contratos inteligentes. Apoya estos casos de uso común: gestión de paquetes, construcción del código fuente, pruebas de unidad e implementación simple de contratos

Nodos o Clientes Ethereum

  • Mist: La Wallet oficial de Ethereum. Con ella se puede implementar contratos inteligentes, pero además también sirve, entre otras cosas, para almacenar Ether, enviar/recibir transacciones e interactuar con la blockchain, ya sea en la red principal (mainnet) o en las redes de prueba (testnets).
  • Geth: Es una herramienta de línea de comandos multipropósito que ejecuta un cliente Ethereum completo y está implementado en Go, una de las tres implementaciones originales del protocolo Ethereum junto con C++ y Python.
  • Geth puede hacer cualquier cosa que Mist pueda hacer además de ofrecer tres interfaces diferentes: los subcomandos y opciones de la línea de comandos, un servidor JSON-Rpc y una consola interactiva. Aquí puedes encontrar su manual traducido al castellano.
  • Parity: Es otro cliente Ethereum, parecido a Geth, aunque los que lo han usado dicen que es mejor y más fácil de usar que éste, eso sí, más complejo en su instalación. Está creado por uno de los fundadores de Ethereum, Gavin Wood, y está escrito en el lenguaje de programación de bajo nivel Rust.
  • Además, Parity es un entorno perfecto para la creación de ÐApps y contratos inteligentes gracias a su tecnología y su entorno destinado para el desarrollo de Solidity, en el que se puede acceder a través de un navegador web.Si queréis acceder a la gran Biblia de información acerca de Parity no dudéis en pasaros por su portal en Github, donde se explica absolutamente todo sobre esta herramienta.
  • Metamask: Como ellos mismos dicen “Metamask es un puente que te permite visitar la web distribuida y descentralizada del mañana en tu navegador de hoy”. Y es que Metamask es una extensión para los navegadores Google Chome, Opera, Firefox y Brave cuya función es la de ejecutar ÐApps basadas en Ethereum desde el navegador, en vez de tener que descargarse un nodo completo (como en el caso de Geth o Parity). Es decir, no es un nodo completo en sí, pero hace sus funciones.
  • También hace las funciones de Wallet a la que poder pasar nuestros Ether e interactuar con aplicaciones descentralizadas como la ya famosa CriptoKitties. Además, es una herramienta que permitirá añadir tus smart contracts de Solidity.
  • Ethereum Javascript testrpc: Se trata de un nodo sencillo de Ethereum para testear y desarrollar smart contracts. Escribir código en la Blockchain de Ethereum cuesta Ether, y la idea es construir potentes contratos inteligentes sin tener que gastar mucho Ether. Para ello existe este cliente a modo de testnet, para realizar pruebas gastando Ether de prueba en vez de Ether real.
  • Una vez que hemos testeado y garantizado que el contrato inteligente funciona como debería, podemos publicarlo en la mainnet de Ethereum. A través de este enlace podéis encontrar tips para comenzar con este cliente.
ecosistema solidity programadores

Bibliotecas y librerías

  • Web3.js: es una colección de librerías que nos permite interactuar con los clientes Ethereum mencionados anteriormente, ya sea de forma local (teniendo el cliente en nuestro propio ordenador) o de forma remota (estando el cliente instalado en otro ordenador) usando los protocolos Http o Ipc.
  • Web3 nos permite compilar, desplegar e interactuar con nuestros propios contratos inteligentes. En su página del portal readthedocs.io puedes encontrar todo sobre esta herramienta.
  • Zeppelin Solidity: OpenZeppelin es una biblioteca para escribir contratos inteligentes seguros sobre Ethereum. También se puede crear aplicaciones distribuidas (ÐApps) , protocolos y organizaciones (DAOs) escritos en Solidity. Además tiene integración el el IDE Truffle.
  • En su web podrás encontrar articulos que te facilitarán el aprendizaje de esta herramienta y éste es su repositorio de Github.

Otras herramientas (compiladores…)

  • Solidity Compiler, más conocido como Solc.js: es un software que actúa como compilador. Transforma lo que se ha escrito en Solidity a un bytecode de Ethereum.
  • Solium: la función de este software es de analizar el código del contrato inteligente de Solidity para corregir y evitar problemas de seguridad. Como hemos comentado, el crear código en la cadena de bloques no es gratis. Por lo tanto, aunque se utilicen testnets para probarlos antes, también es conveniente utilizar software como Solium, para asegurarte al 100% de que el smart contract que vamos a publicar es 100% seguro, está bien escrito y a prueba de fallos.
  • Strato BlockApps: es un software que ofrece la mejor manera de construir, administrar e implementar aplicaciones para cadenas de bloques específicas y personalizadas, que pueden ser propias o construidas sobre Ethereum. En la sección ‘Developers’ podrás encontrar toda la información para comenzar, empezando desde la instalación ya sea vía local, vía Microsoft Azure o vía Amazon AWS.

Loom Network

Loom Network es una red de herramientas de aplicación específica basadas en Ethereum pero que funcionan de forma paralela a ésta. Su objetivo es el de que los desarrolladores puedan crear y ejecutar sus aplicaciones descentralizadas aumentando su escalabilidad.
Como sabemos Ethereum es una cadena de bloques (blockchain) que permite la creación de otras cadenas de bloques construidas sobre ella. Ese es el caso de Loom Network.
loom estudiar solidity
La red principal de Ethereum está construida principalmente para aplicaciones financieras en las que los movimientos de Ether estén presentes. Sin embargo, no soporta ejecutar una aplicación de la magnitud de Twitter o un juego multitudinario online como World of Warcraft.
Por su parte, Loom Network está optimizado para aplicaciones no financieras. Al poder liberarse de transacciones financieras, dejando esa tarea a la red de Ethereum, Loom puede optimizar sus sidechains (cadenas de bloques paralelas a Ethereum) para aplicaciones que requieren altas velocidades y bajos costes.
Vitalik Buterin, creador de Ethereum, está encantado con proyectos como este:
“Sería posible ejectuar [el juego] StarCraft en la cadena de bloques. Esas cosas son posibles. El alto nivel de seguridad y escalabilidad permite que todas estas cosas se puedan construir sobre nuestra plataforma. Ethereum es la capa base que no tiene demasiadas características”.
Loom Network es una red de componentes, herramientas e idiomas que juntos hacen posible pensar en las aplicaciones web tradicionales como aplicaciones descentralizadas.
Algunas de estas herramientas son las siguientes:
  • EthFiddle es el lugar más popular de la comunidad Ethereum para compartir fragmentos de código de Solidity. Funciona a través del navegador web y permite compilar, probar y ejecutar código para ÐApps y smart contracts en un entorno fácil e intuitivo para cualquier desarrollador. Además tiene una total integración con otra de las herramientas de Loom Netwrork: EthDeploy.
  • EthDeploy se podría decir que es como el ‘Amazon Web Services’ de Ethereum. Se trata de una colección de servicios de computación que en su conjunto forman una plataforma en sí y que ayudan a los desarolladores de Ethereum a desplegar y administrar sus ÐApps y a aumentar su escalabilidad.
  • CryptoZombies es una escuela de código interactivo gratuita que te enseña a construir juegos en Ethereum. El curso está diseñado para principiantes en Solidity y las lecciones transcurren de forma interactiva, haciendo del aprendizaje algo divertido y ameno, alejado de los vídeos aburridos o largos textos.
  • La última de las herramientas de Loom Network es un lenguaje de programación compatible 100% con Solidity llamado, valga la redundancia, SolidityX. Es un lenguaje seguro por defecto, que compila de forma actualizada con todas las soluciones de seguridad.
Hacer tanto énfasis en la seguridad es debido a que, hoy en día, grandes cantidades de dinero son depositados en smart contracts basados en Solidity, los cuales tienen vulnerabilidades que los hackers pueden aprovechar para robar los fondos depositados. Con SolidityX se erradican los problemas de seguridad con respecto a las vulnerabilidades ya sufridas.

¿VALE LA PENA ESTUDIAR SOLIDITY?

aprender solidityAhora mismo hay mucho entusiasmo en torno a proyectos basados en Blockchain dedicados a la inversión, innovación y desarrollo.
La cantidad de capital que está fluyendo hacia la industria (en forma de ICOs) ha puesto a los desarrolladores de contratos inteligentes en un pedestal.
Quizá Solidity no llegue a ser el lenguaje de facto para desarrollar smart contracts (nunca se sabe) pero ha empezado su camino con buen pie y los principios que rigen su escritura servirán para cualquier proyecto, así que vale la pena estudiarlo a fondo.

¿Es difícil su aprendizaje?

No tienes por qué sentirte intimidado antes de aprender a codificar contratos inteligentes. Es solo una nueva forma de pensar y escribir código para ayudar a los seres humanos a interactuar y compartir confianza y valor a través de Internet.
Recomendamos leer este artículo escrito en Medium para hacerte una idea de cómo será tu camino y si debes tomarlo o no.
Como siempre, para tener éxito en este aspecto necesitas determinación por encima de todo. En este momento, el mercado está pidiendo desarrolladores de smart contracts. Si decides abrocharte los cinturones y dedicarle tiempo, sabrás que existe una gran demanda de tus habilidades y recibirás a cambio ofertas con salarios muy interesantes.

Veni a the coders: http://thecoders.center/
y aprende solidity

lunes, 12 de marzo de 2018

¿Qué es Machine Learning?

Machine Learning es una disciplina científica del ámbito de la Inteligencia Artificial que crea sistemas que aprenden automáticamente. Aprender en este contexto quiere decir identificar patrones complejos en millones de datos. La máquina que realmente aprende es un algoritmo que revisa los datos y es capaz de predecir comportamientos futuros. Automáticamente, también en este contexto, implica que estos sistemas se mejoran de forma autónoma con el tiempo, sin intervención humana. Veamos cómo funciona.

Big Data y Machine Learning aplicado a la empresa

Una empresa de telefonía quiere saber qué clientes están en “peligro” de darse de baja de sus servicios para hacer acciones comerciales que eviten que se vayan a la competencia. ¿Cómo puede hacerlo? La empresa tiene muchos datos de los clientes, muchísimos: antigüedad, planes contratados, consumo diario, llamadas mensuales al servicio de atención al cliente, últimos cambios de planes contratados… pero seguramente los usa solo para facturar y para hacer estadísticas. ¿Qué más puede hacer con esos datos? Se pueden usar para predecir cuándo un cliente se va a dar de baja y gestionar la mejor acción que lo evite. En pocas palabras, con Machine Learning se puede pasar de ser reactivos a ser proactivos. Los datos históricos del conjunto de los clientes, debidamente organizados y tratados en bloque, generan una base de datos que se puede explotar para predecir futuros comportamientos, favorecer aquellos que mejoran los objetivos de negocio y evitar aquellos que son perjudiciales.
Esa cantidad ingente de datos son imposibles de analizar por una persona para sacar conclusiones y menos todavía para hacer predicciones. Los algoritmos en cambio sí pueden detectar patrones de comportamiento contando con las variables que le proporcionamos y descubrir cuáles son las que han llevado, en este caso, a darse de baja como cliente. La siguiente imagen es un ejemplo de una predicción simplificada basada en datos de una compañía de telefonía ficticia, pero usando una herramienta de Machine Learning real:

La visualización en árbol (en esta imagen está simplificado, la predicción real tiene muchos más nodos) permite ver los patrones que han seguido ciertos clientes que se han dado de baja. En este caso está resaltada una de las ramas centrales, que indican un patrón en el que el cliente:

  • Tiene más de 3 llamadas al servicio de atención al cliente.
  • Llama menos de 171,95 minutos al día.
  • Las llamadas en horario nocturno son inferiores a 189,02 minutos.

Este es un análisis de los datos históricos, pero… ¿dónde está la predicción? Vamos a ello: si los clientes que tienen estas características ya se han dado de baja de la compañía, es previsible que los que todavía son clientes y tienen este mismo comportamiento estén en riesgo de irse. Según este modelo predictivo, es bastante probable que esto suceda (se dice que la predicción tiene una confianza, en este caso, de 91,97%). Si el departamento de marketing tuviera esta información, podría proponerles proactivamente un cambio de plan de tarificación o podría revisar por qué han llamado al servicio de atención al cliente para intentar mantenerlos.
El árbol de predicción completo sería el siguiente. En este caso hemos resaltado una predicción falsa (es decir, no se daría de baja) con una confianza del 90,59%. A la derecha de la imagen se puede ver el patrón de comportamiento de este grupo de clientes:

¿Por qué es importante?

La cantidad de datos que se generan actualmente en las empresas se está incrementado de forma exponencial. Extraer información valiosa de ellos supone una ventaja competitiva que no se puede menospreciar. En Baires Python pensamos que es una oportunidad a la que se le debe prestar especial atención. La gran ventaja es que actualmente no hace falta ser un gurú de los datos para poder aprovechar este tipo de tecnologías. Existen en el mercado herramientas de uso muy sencillo (incluso para profanos en análisis de datos) y asequibles económicamente para cualquier tamaño de empresa que permiten hacer predicciones como las descritas en el apartado anterior.
El reto de sacar partido de los datos se ha simplificado enormemente. El Machine Learning de hoy no es como antes. Esto quiere decir que con datos de calidad, tecnologías adecuadas y análisis propicios es posible actualmente crear modelos de comportamiento para analizar datos de gran volumen y complejidad. Además, los sistemas proporcionan resultados rápidos y precisos sin intervención humana, incluso a gran escala. El resultado: predicciones de alto valor para tomar mejores decisiones y desarrollar mejores acciones de negocio.
Sin embargo, no debe distraer nuestra atención el volumen de datos. No es necesario tener tantos datos como Facebook o como un gran banco para hacer modelos que ayuden al negocio. Es mejor tener datos de calidad (fiables y útiles) que tener miles de millones de datos de los que no se puede extraer valor.

Ámbitos de aplicación del Machine Learning

Muchas actividades actualmente ya se están aprovechando del Machine Learning. Sectores como el de las compras online – ¿no te has preguntado alguna vez cómo se decide instantáneamente los productos recomendados para cada cliente al final de un proceso de compra? –, el online advertising – dónde poner un anuncio para que tenga más visibilidad en función del usuario que visita la web – o los filtros anti-spam llevan tiempo sacando partido a estas tecnologías.
El campo de aplicación práctica depende de la imaginación y de los datos que estén disponibles en la empresa. Estos son algunos ejemplos más:

  • Detectar fraude en transacciones.
  • Predecir de fallos en equipos tecnológicos.
  • Prever qué empleados serán más rentables el año que viene (el sector de los Recursos Humanos está apostando seriamente por el Machine Learning).
  • Seleccionar clientes potenciales basándose en comportamientos en las redes sociales, interacciones en la web…
  • Predecir el tráfico urbano.
  • Saber cuál es el mejor momento para publicar tuits, actualizaciones de Facebook o enviar las newsletter.
  • Hacer prediagnósticos médicos basados en síntomas del paciente.
  • Cambiar el comportamiento de una app móvil para adaptarse a las costumbres y necesidades de cada usuario.
  • Detectar intrusiones en una red de comunicaciones de datos.
  • Decidir cuál es la mejor hora para llamar a un cliente.

 La tecnología está ahí. Los datos también. ¿Por qué esperar a probar algo que puede suponer una puerta abierta a nuevas formas de tomar decisiones basadas en datos? Seguro que has oído que los datos son el petróleo del futuro. Ahora ya puedes empezar a bombearlo.