Retrospectiva de 2016

Finaliza un nuevo año y es hora de mirar hacia atrás para visualizar el camino recorrido. Este año sin dudas ha sido el menos «productivo». Prueba de ello es que este es el primer y último post del año.

Repositorios y código

También es testigo de esto Github que sigue listando casi los mismos repositorios del año pasado con poquísimas excepciones:

  • Open.NAT sigue siendo mantenido a duras penas y solo corrijo algunos defectos. El hecho que existan productos exitosos que utilicen esta librería, y el que sea mi proyecto con más «stars», me fuerza a mantenerla viva y dar soporte. Por desgracia cada router implementa el protocolo IGD como se le canta y eso hace que algo tan sencillo como Open.NAT reciba reporte de errores más de lo deseado.
  • Open.HttpProxy es un proyecto que comencé (hace mucho) con la idea implementar soluciones de seguridad y tareas comúnmente implementadas mediante reverse proxies. No la he tocado en meses pero pienso hacerlo cuando encuentre el tiempo. Este proyecto es el que más me ha enseñado técnicamente hablando. He aprendido sobre IP, TCP, HTTP, FTP y WebSocket lo que llevaría años de lectura, lo mismo con los sockets y sus diferentes implementaciones en .NET, el manejo de memoria que requieren, los pros y contras de async/await en lo que performance se refiere y un larguísimo listado de etcéteras.
  • Dragonchain es una plataforma basada en el patrón blockchain diseñada por la gente de Tecnologías Avanzadas de Disney en la cual estuve contribuyendo mientras el repositorio era privado. No obstante, una vez abierto no he continuado ayudando allí por cuanto existen mejores proyectos relacionados en los que prefiero contribuir con mi tiempo.
  • PyChainpoint es una librería Python para validar recibos de datos con timestamps en una blockchain, típicamente la de bitcoin. Me ayudó a aprender algo de python.
  • MerkleTools es una librería .NET para la creación merkle trees y validación de recibos chainpoint. Esto es para probar criptográficamente la existencia de algo.
  • NBitcoin es una librería para programar Bitcoin con .NET. Esta librería no es mia pero es por lejos la más activa y con mayor potencial en el ámbito .NET y además su creador es uno de los tipos más inteligentes que he conocido en toda mi vida así que se siente muy bien contribuir. Además, con solo 68 commits, 4757 linea agregadas y 7101 lineas eliminadas soy el primer contribuyente del proyecto, luego de su creador obviamente.
  • BitcoinLite es mi librería Bitcoin para .NET. Es una ultra-pequeña librería enfocada a ser utilizada «del lado del cliente» (expresión extraña para una tecnología peer-to-peer). Tengo un inmenso push que hacer pronto. La idea es aprender el protocolo Bitcoin y la criptografía asociada al más mínimo detalle.

Artículos

En cuanto a escribir artículos, lo único que he escrito es un artículo en codeproject.com: Bitcoin Traffic Sniffer and Analyzer el cual muestra a nivel de código cómo, en el contexto de ECDSA, pueden obtenerse las claves privadas para debloquear bitcoins a partir de las firmas digitales de transacciones que reutilizan un número r el cual debería ser aleatorio.

Lenguajes

He aprendido algo de Python este año. La verdad es que siempre supe que era un buen lenguaje y podía entender su sintaxis sin más trámite pero nunca había escrito más que un par de scripts de prueba, hoy debo decir que es un lenguaje fabuloso.

He querido aprender Rust y Elixir pero me ha sido realmente difícil, sobre todo Elixir. Claramente se me viene atrofiando el cerebro. Por otro lado, no iba a programar más en .NET pero me tira mucho Visual Studio, R# y casi 14 años de .NET encima. Creo que seguiré aprendiendo Python y volveré a C++, de esa manera con Javascript, C#, Python y C++ voy a donde quiero.

Aprendizaje

Este año he continuado aprendiendo sobre Bitcoin,  bastante matemática, criptografía de curva elípica (ECC), firmas digitales, matemática modular, algoritmos de hashing y funciones de derivación de claves (PBKDF2 y Scrypt), merkle trees, protocoles Tcp, Http y WebSocket, tipos de sockets en .NET, Python y algo de Rust (muy poco).

Para 2017

Voy a continuar estudiando y trabajando en todo lo relacionado a Bitcoin que esté a mi alcance, por mi cuenta o para terceros y seguiré dando guerra desde las trincheras del código.

Por otra parte, en 2017 cumpliré 39 años y creo será un año bisagra en mi vida, o debería serlo. Será el año en que las empresas, tanto tecnológicas como de salud prepaga me comenzarán a mirar como algo poco conveniente, una inversión dudosa. Será necesario evaluar esta situación con la cabeza fría.