Obtuve mi invitacion al reto foo.bar de Google. Y planeo terminarlo!

Ayer, cuando buscaba una información básica sobre Python para poder enviarle un enlace a mi primo, que está viendo asignaturas de programación, Google hizo una animación que no había visto:

Google Foo Bar es el proceso secreto de reclutamiento de Google incrustado en su motor de búsqueda. Hay 5 niveles, cada uno con un número diferente de desafíos que siguen una historia.

Mi interfaz de foo.bar

Aquí, les estaré compartiendo mi experiencia y algunos tips:

Nivel 1

Me dieron 24 horas para completar este primer problema, y fue bastante simple. Era básicamente algo que verías en cualquier curso de ciencias de la computación de nivel universitario, y me tomó poco tiempo terminarlo.

Recomendaciones:

  • Sigue las mejores prácticas.
  • Usa buenos nombres de variables.
  • Agrega tus propios casos de prueba.
  • No temas hacer uso de un editor externo.
  • Valida las entradas y los casos especiales.
Reto 1

Infrastructure as Code – AWS Redshift (Boto3)

The following is an example/template of Infrastructure as Code (IAC) for deploying an AWS Redshift cluster using Python and Boto3. Here’s the target architecture:

Target Redshift AWS Architecture

For this to work, you will need to create an AWS account and IAM user with appropriate permissions to Redshift and S3. After that, just input your own user secret and key into the attached notebook.

You can download the ipynb notebook. Or just check the Jupyter notebook below:

On the next post, we will discuss how to Extract, Transform and Load (ETL) data into this Redshift Database via parallel imports using S3.

Criptomonedas: Qué son y cómo obtenerlas.

El mundo esta viviendo una gran revolución. El fin de las mafias financieras -en el que los gobiernos y bancos tienen el control de las monedas- esta cerca, y todos debemos prepararnos para ello. Es por esto que es importante entender varios conceptos asociados con la cripto-economia y sobre todo, ir creando nuestras propias cuentas que acepten monedas digitales.

«It is important that everybody gets on board and prepares themselves for the revolution set to take place in the business world through blockchains, smart contracts and digital currencies.»                     –  Mark Stalder, CEO – Ernst and Young

  • Criptomoneda (Cryptocurrency):   Es un medio digital de intercambio. La primera criptomoneda que empezó a operar fue Bitcoin en 2009 y desde entonces han aparecido muchas otras, con diferentes características y protocolos. Al comparar una criptomoneda con el dinero fiduciario la diferencia más notable es la forma en que ningún grupo o particular puede acelerar la producción de dinero y usar éste ilegal o abusivamente, ya que sólo se genera una cierta cantidad de unidades colectivamente, a una velocidad que está limitada por un valor definido con anterioridad y conocido públicamente. Funciona mediante transacciones persona a persona, sin intermediarios. Las transacciones se almacenan en bases de datos de tipo Blockchain alrededor del mundo.
  • Cadena de Bloques (Blockchain): Es una base de datos distribuida formada por cadenas de bloques diseñadas para evitar su modificación una vez que un dato ha sido publicado. Por esta razón es especialmente adecuada para almacenar de forma creciente datos ordenados en el tiempo y sin posibilidad de modificación ni revisión. En el campo de las criptomonedas, la cadena de bloques se usa como notario público no modificable de todo el sistema de transacciones a fin de evitar que una moneda se pueda gastar dos veces.

Ventajas de las Cryptomonedas.

  • Pagos móviles fáciles: Bitcoin le permite pagar con un dispositivo móvil en dos sencillos pasos: escanear y pagar. No hay necesidad de pasar la tarjeta, teclear un PIN o firmar nada. Todo lo que necesita para recibir pagos con Bitcoin es mostrar el código QR ​​en su aplicación de monedero y dejar que su amigo escanee su móvil o juntar los dos teléfonos (usando la tecnología NFC).
  • Seguridad y control sobre el dinero: Las transacciones de Bitcoin están aseguradas mediante criptografía militar. Nadie puede cobrarle dinero o hacer un pago en su nombre. Tan pronto como tome los pasos requeridos para proteger su monedero, Bitcoin podrá darle control sobre su dinero y un fuerte nivel de protección contra muchos tipos de fraude.
  • Funciona en todas partes y en cualquier momento: Al igual que con el correo electrónico, no es necesario pedir a su familia que utilice el mismo software o los mismos proveedores de servicio. Deje que usen sus favoritos. No hay problema; todos ellos son compatibles, ya que utilizan la misma tecnología. La red Bitcoin nunca duerme ni tiene vacaciones!
  • Pagos rápidos internacionales: Bitcoins puede ser transferido de África a Canadá en 10 minutos. No existe un banco que retrase el proceso, honorarios escandalosos o congelar la transferencia. Usted puede pagarle a sus vecinos de la misma manera que usted puede pagarle un miembro de su familia en otro país.
  • Sin comisiones: Bitcoin permite enviar y recibir pagos a casi coste cero. Salvo en casos especiales, como en pagos diminutos, no existen tasas. Sin embargo, puede optar pagar una pequeña tasa voluntaria para aumentar la prioridad de su transacción y remunerar a las personas que hacen funcionar la red Bitcoin.
  • Proteccion de identidad: Con Bitcoin, no existe un número de tarjeta de crédito que alguien pueda usar para hacerse pasar por ti. De hecho, es posible hacer un pago sin revelar tu identidad, casi como el dinero físico. Aún así deberías tomar nota sobre qué se necesita para proteger tu privacidad.

Las principales criptomonedas.

Como mencioné anteriormente, existen múltiples criptomonedas. Se diferencian principalmente en el código usado para su implementación, la adopción del publico y su valor.

Las 5 principales criptomonedas. Tomado de http://coinmarketcap.com/ el 24/01/2017

Como usar Bitcoins.

  1. El primer paso para quienes desean entrar en el mundo de los pagos con criptomonedas, es crear una cartera (Wallet). Existen muchos clientes y sitios web que nos facilitan este proceso. Se debe elegir consiensudamente el cliente a elegir. Para facilitar la decision, recomiendo el siguiente vínculo: https://bitcoin.org/es/elige-tu-monedero.
  2. El siguiente paso es quiza el mas importante: Asegurar nuestra cartera. Las criptomonedas son seguras en su funcionamiento, pero si alguien mas llegara a acceder a nuestra cartera, podra hacer transacciones por nosotros. Para ello, los protocolos de Bitcoin tienen caracteristicas se seguridad, como la creacion de frases de acceso, autenticacion multiple, cifrado de clientes, etc. El mejor recurso para conocer mas al respecto es: https://bitcoin.org/es/asegure-su-monedero.
  3. Comprar monedas puede hacerse desde casas de cambio oficiales, o a traves de servicios online, que compraran dinero tradicional a cambio de la cantidad de bitcoins correspondiente al cambio oficial. Un listado de servicios puede encontrarse en: https://bitcoin.org/en/exchanges. Personalmente hago mis compras desde https://changelly.com/.

 

Gestión de proyectos con Kanban en Taiga.io

Taiga.io es una herramienta SAAS para la gestión Ágil de proyectos. Permite trabajar con Scrum o con Kanban. La recomiendo ampliamente para equipos de desarrollo de software, ya que permite optimizar las comunicaciones, las interacciones y entregas rápidas.

image
Kanban en Taiga

image
Scrum en taiga

Lo mejor: Es gratis para proyectos públicos. Si deseas proyectos privados, tienen diversos planes según conveniencia…

Documentar Software con Markdown y MDWiki

Recientemente tuve el requerimiento de crear una web tipo wiki que permita documentar los diversos desarrollos de software, la plataforma y las configuraciones de una empresa. El único requerimiento: Que sea fácil de escribir, de tal manera que el desarrollador/editor no se fastidie haciéndolo.

Mi primera idea: Markdown!:

Markdown es un lenguaje de marcado ligero que trata de conseguir la máxima legibilidad y facilidad de publicación tanto en su forma de entrada como de salida, usando texto plano.

Es así como hallé un excelente proyecto que genera páginas totalmente dinámicas a partir de sencillos documentos .md. Se trata de MDWiki, un excelente proyecto consistente en un solo archivo .html que genera todo el procesamiento del lado del cliente. De modo que quien genera el contenido, solo se debe preocupar por crear el documento .md, dejarlo en el servidor web, y listo!.

Una captura de como se ve el producto final:
mdwiki screenshot

El archivo index.md que lo genera:
index.md file