08 mayo 2014

¿Qué es un HASH?

El día de ayer leía a través de meneame.net una entrada de blog de una compañía que desarrolla un bloqueador de malware intentando explicar ¿Qué es un HASH?(Inglés).

Dentro de la entrada, explicaban escencialmente algunas características del HASH MD5. En lo personal entiendo el motivo de la publicación, sin embargo, no me agradó demasiado que se mezclaran algunos conceptos que a la larga podrían dificultar la comprensión de un concepto que debería ser sencillo, por ejemplo la idea errónea que un "hash puede ser crackeado".

Posiblemente si estás en esta página aún no tengas claro ¿Qué es? y ¿Para qué sirve un HASH?, así que en los próximos párrafos intentaré explicarlo de la manera más sencilla posible y te explicaré también porqué "crackear un hash" no tiene sentido.

24 marzo 2014

Arduino y el XBee Series 1 - (Modo API)

En una entrada previa, les mostraba un muy corto video donde explicaba como configurar una XBee Series1 (XBee S1) en modo transparente. Este modo de configuración permite crear un enlace entre dos XBee muy rápidamente y prácticamente sin mayor configuración

Sin embargo, cuando queremos armar una red inalámbrica donde necesitamos que se comuniquen entre si varios dispositivos o simplemente queremos conocer algo tan sencillo como la dirección del dispositivo que nos está enviando datos, el modo transparente resulta sumamente limitado.

En esta entrada explicaremos un poco el funcionamiento de las redes con XBee y además les compartiremos un código muy fácil de usar y entender para utilizar las XBee Series
1 en modo API.

La entrada es un poco extensa pero para que se hagan una mejor idea de lo que se puede lograr con el modo API les dejo un corto video:


10 marzo 2014

Reto Electoral para Desarrolladores

Reto Electoral para Desarrolladores


Como algunos sabrán (y tal vez otros no), soy de El Salvador y el día de ayer se realizaron las elecciones presidenciales con un margen extremadamente ajustado (approx 6,000) de votos de diferencia de entre casi 3,000,000 de votos.

Al momento de escribir este post el ente colegiado encargado de organizar los comicios está comenzando el escrutinio final que dará el ganador definitivo.

Sin embargo, ya que mi blog es de código, soy programador y aprovechando que por primera vez tenemos acceso de manera pública a todas las actas escaneadas enviadas al TSE, se me ocurrió la idea de que podría ser un bonito "reto electoral": Verificar de manera independiente, participativa y totalmente anónima los resultados de las elecciones.


Este es el reto:


"Desarrollar una herramienta crowd-sourced, totalmente anónima, capaz de verificar los conteos que se encuentran en las actas de las Juntas Electorales Enviadas al TSE"

La propuesta y el concepto básico:

  • La herramienta funcionará como un re-captcha, cada usuario que la acceda se le mostrará una entrada como la siguiente:
  • En un campo de texto deberá ingresar el número, la idea es que el usuario no pueda "ver" a que partido pertenece el conteo.
  • Los conteos a mostrar se elegirían de un pool de conteos sin verificar completamente al azar, de tal manera que nadie sabrá de qué partido es el número que está verificando reduciendo las posibilidades de que alguien quiera alterar los resultados a su conveniencia.
  • El "conteo" se dará como válido cuando 2 digitaciones diferentes coincidan en el número.
  • La validación no terminará ahí el sistema debería seguir funcionando y mientras más verificaciones positivas reciba entonces su "score" de validación será mayor.
  • Todo deberá ser transparente, el código fuente deberá ser Open Source Software, las bases de datos deberán ser abiertas. Los "snapshots" del sistema deberán de incluir un dump de la base de datos donde se elabore para que cualquiera pueda auditar el código.

Retos técnicos por resolver (de dificultad mayor a menor):

  1. Convertir los PDFs a imágenes, cortar los conteos y asignarlos correctamente a cada partido. Esto podría realizarse de manera semi-automatizada.
  2. Ancho de banda y almacenamiento, si bien este es un reto "pequeño" en el remoto caso que se volviera popular al menos este servidor no tiene recursos suficientes para soportar una carga tan grande de datos.

Datos:

Trabajo previo y herramientas similares:

  • Actas Counter: Herramienta de validación de actas, Pros: Trabajo previo similar al reto actual. Cons: No es completamente anónimo utiliza Facebook para ingresar, los electores pueden ver a que partido corresponde el conteo por lo que deja abierta a "trolls" para modificar resultados para favorecer su preferencia política. https://github.com/corp/ActasCounter

Herramientas de Coordinación:

El premio:

  1.  Ninguno. Simplemente irse a casa pensando que se hizo algo diferente y divertido el día de hoy.

Excepción de responsabilidades:

  • Yo, Mario Enrique Gómez Argueta de Nacionalidad Salvadoreña, lanzo este reto con fines única y exclusivamente "educativos" los datos proporcionados mediante este blog son datos públicos, disponibles mediante acceso libre a través de la página del Tribunal Supremo Electoral y amparados bajo la ley de Acceso a la Información Pública y el Código Electoral vigente de El Salvador. Proporciono los datos obtenidos de dicha institución tal y como fueron publicados a través de su página web por medio de un "backup" estático de la página web a la hora que se especifica. No puedo hacerme responsable de que los datos estén completos o que cuenten con toda la información necesaria, sin embargo se proporcionan los métodos para crear un "backup similar" y verificar la validez de la información.
  • Declaro que no estoy afiliado a NINGÚN PARTIDO POLÍTICO y los resultados obtenidos de este ejercicio NO PRETENDEN ni DEBERÁN SER UTILIZADOS para poner en duda la validez de los resultados oficiales. El único ente colegiado con atribuciones legales para validar resultados oficiales es el Tribunal Supremo Electoral por lo que cualquier resultado obtenido de este ejercicio NO TIENE NI TENDRÁ NINGUNA VALIDEZ LEGAL y deberá ser tratado como información poco confiable y secundaria, para participar de este reto usted se compromete a NO UTILIZAR LOS RESULTADOS PARA FINES POLÍTICOS.

23 febrero 2014

Utilizando los XBee Series 1 en Modo Transparente.

Las conexiones inalámbricas siempre resultan un poco complicadas de establecer. Buscando en Internet podemos encontrar módulos de conexión inalámbrica que funcionan a muy bajo nivel pero que tienen la desventaja que no podemos conectar varios entre sí o tenemos que implementar algún algoritmo para reducción de interferencia en caso que queramos leer datos desde distintos puntos a la vez.

Las XBee son una solución sencilla de utilizar que es capaz de funcionar de paquete, toda la parte del establecimiento de red e interconexión es manejado por el módulo así que nos permite dedicarnos exclusivamente a trabajar en la aplicación.

El módo más sencillo de utilización de este tipo de módulos es el modo "transparente", en este modo los módulos XBee funcionan como una conexión "serial" inalámbrica. Los datos serán enviados y recibidos a la dirección de los módulos que tengamos configurados en los mismos.

Les comparto en esta entrada un cortísimo video sobre como utilizar los XBee Series 1 en modo transparente. ¡Espero les guste!

08 febrero 2014

Controlando una LCD de caracteres 16x2 con I2C y Arduino

Actualmente estoy trabajando en un pequeño proyecto que requiere de una simple pantalla para mostrar información.

Una de las formas más comunes de mostrar información es utilizar una simple pantalla de caracteres, siendo las más comunes las que pueden mostrar 16 caracteres en dos líneas, o las famosas "16x2".

Es muy común encontrar este tipo de pantallas controladas por el driver HD44780 de interfaz paralela. Sin embargo el problema de lo anterior es que terminamos utilizando muchas líneas de nuestro Arduino que podríamos utilizar para hacer cosas más interesantes.

En esta entrada vamos a utilizar un sencillo ATmega328 para controlar una de estas LCDs, pero lo más interesante es que lo vamos a configurar como "esclavo" en la interfaz I2C para que podamos utilizar este bus sin gastar los preciados pines de E/S digital de nuestro Arduino.

¡Comencemos!

29 enero 2014

Construyendo un Arduino Compatible pt2 - Diseñando la PCB

En la entrada anterior les explicámos un poco acerca del funcionamiento básico de la Luxeon Triple Play Driver de SparkFun Electronics que utilizaremos para construir una lampara de LEDs de alta intensidad programable.

En esta entrada nos vamos a centrar en el proceso de elaboración de la tableta impresa o PCB. Debo advertir que tal vez no sea una guía paso a paso sino más bien algunos comentarios sobre las decisiones de diseño que se tomaron y algunos "tips" que esperamos harán más fácil su vida al momento que les toque diseñar algo similar.

Lo mejor de todo es que conoceremos las ventajas del Open Source Hardware ya que partiremos de un diseño previo, en este caso de la gente de SparkFun Electronics.

Habiendo dicho eso ¡Comencemos!

28 enero 2014

Construyendo un Arduino Compatible pt1 - La historia de una lámpara

Desde hace bastante soy alguien que siempre ha pensado que el conocimiento es útil cuando es libre y he apoyado siempre las iniciativas de fuentes abiertas/libres aunque lastimosamente por mi trabajo me toca que usar herramientas privativas.

El año pasado tuve el encuentro con el "Open Source Hardware", o Hardware de Fuentes Abiertas. Esta filosofía intenta replicar un poco de las prácticas del Open Source en el ámbito del desarrollo de dispositivos electrónicos.

Si algo me encanta del Open Source Hardware es la capacidad que te otorga para adaptar, crear e inventar soluciones a tu medida.

El mes pasado, fuimos con mi novia al cumpleaños de una amiga de la universidad. El restaurante de comida mexicana que visitamos estaba decorado por unas lamparas colgantes hechas de mimbre que le encantaron a mi novia. Y me hizo la pregunta obvia: ¿Podemos fabricar una?

De pronto, esa idea de una lámpara que comenzó como una cesta de mimbre se convirtió en un mini-proyecto de una lampara colgante de LED de alta intensidad, controlable vía bluetooth y completamente reprogramable a través de Arduino.

En esta serie de entradas, voy a contarles la historia de los pasos que he seguido para elaborar este dispositivo Open Source Hardware, desde su concepción, los materiales elegidos hasta la propia elaboración de la PCB y el montaje de la lampara final.

La idea es hacer una tarjeta Arduino-Compatible desde cero. Estoy seguro de que si yo puedo lograrlo ustedes también lo podrán hacer fácilmente.

Así que ¡Comencémos!