Tuesday, September 24, 2013

MeTroS

A lo largo de la historia ha surgido la necesidad de medir cosas, necesidad que hemos superado sin mayor esfuerzo, aunque quizás no de la mejor forma. La capacidad de medir las cosas nos hizo avanzar increíblemente como sociedad, abrió la posibilidad de duplicar cosas, transmitirlas a otros para que sean ellos los que hagan el duplicado, hacer modelos a escala, planos y un sin fin de cosas.

Como es lógico, a lo largo del tiempo hemos tenido varios sistemas de medición, afortunadamente estamos llegando al punto de la unificación total y el ganador es el sistema métrico decimal. Esto es importante porque permite un canal de comunicación paralelo al lenguaje tradicional, dos personas pueden no hablar el mismo idioma e igual entender cosas importantes como el límite de velocidad o la cantidad de medicamento a tomar.

Y es aquí donde Panamá falla, horriblemente. Por nuestra historia tenemos parte del sistema métrico decimal y parte del sistema anglosajón, mezclado sin piedad. Mayormente usamos metros para medir nuestra estatura y libras para nuestro peso y comida. Galones para la gasolina y tanques, litros para la leche y jugos, onzas para las bebidas y así.

Ese no es realmente el problema, lo que realmente molesta es su uso incorrecto y como al parecer se está adoptando cada vez más como si fuera así. Esto no es un sistema flexible, para poder lograr un entendimiento global es necesario seguir reglas, de la misma forma que nuestro idioma tiene reglas que procuramos seguir para que el que nos lea lo haga de forma fácil y fluida.

MTS no existe, M son megas (1000000) no metros, la forma correcta de expresar metros es con la letra m, sin importar si es uno o muchos. Es enfermizo y humillante ver como toda la ciudad está repleta de señales con M, MTS, Mts y demás absurdos. Para ser un país con el crecimiento que tenemos deberíamos hacer las cosas bien y más algo tan básico como esto.

La imagen que le damos a los turistas es de un pueblo carente de la educación más básica, porque más básico que esto es escribir y a lo mucho un par de cosas más.

Ver un anuncio o señal de, nada más ni nada menos que, el MOP incorrecto te hace pensar en la calidad de su trabajo, si sus ingenieros no son capaces de expresarse correctamente, qué se puede esperar de la obra y de sus planos. Luego ves el estado de las calles y...

Muchos dirán que no es tan importante, que estoy exagerando. Quizás, obviamente se entiende que MTS son metros, no un millón de TS (si es que existe algo como eso). Pero ese no es el punto, la idea de seguir las reglas es por nuestro beneficio, para que no sea necesario tener que detenerse ni un segundo en confirmar lo que se lee. Como pasa con el idioma, muchas veces se usa la tilde para no perder tiempo analizando si nos referimos al pasado u otra cosa, (reporté, reporte; lástima, lastima)

Y por encima de todas las cosas, porque soy ingeniero. Respeto profundamente la profesión y me apasiona, como sé que le ocurre a muchos. La sociedad avanza en gran parte gracias a los ingenieros, somos nosotros los que construimos, creamos, ejecutamos, hacemos que las cosas pasen, funcionen y sobre todo, que lo hagan bien.

Si tú como ingeniero usas MTS, M, Mts, Km/h, Km/H, KM/H, KPH, ltrs, Ltrs, LTRS o similar, eres una vergüenza para la profesión, para los demás, para ti mismo y para tu país, dedícate a otra cosa. Y si no eres ingeniero (o afín) regresa a secundaria, esto es material de noveno grado (o cerca).





Tuesday, August 27, 2013

Jamón Serrano


¿A dónde quieres ir ahora? -Pasemos por el supermercado, tengo que comprar unas cosas y te compro jamón serrano para que lleves a casa.

No te preocupes, no me gusta el jamón serrano, estoy bien así. -¿Qué? eso no puede ser, no hay gente a la que no le guste el jamón serrano, lo que sí hay es gente que no puede pagarlo.

Papá, llevo años siendo vegetariano, no como carne. -Oye, si eres maricón sabes que puedes decírmelo, soy tu padre y te voy a querer igual, no tienes que inventar tonterías.

Lo sé, pero no invento nada. En fin, ¿irás a Cuba siempre? -No lo sé aún, no estoy seguro si hay oportunidad de negocio allí... El comunismo es una mierda, eso de que todos somos iguales es una
estupidez, no todos somos iguales.

Incluso si intentas igualarlo todo, terminas con desigualdad, porque las cosas buenas no alcanzan para todos, si lo hicieran no fueran consideradas buenas en primer lugar. Además, compara lo que cena Fidel
y sus allegados con lo que cena un cubano promedio. Eso es más cruel que el neocapitalismo más salvaje, pasaba también con Rusa y seguirá pasando.

Sólo espero que Cuba salga de eso algún día y poder estar allí para hacer negocio, es una mina de oro esperando a ser descubierta...

Monday, February 18, 2013

RSS

Tenía años sin usar RSS, principalmente porque dejé de seguir blogs, a lo mucho seguía uno o dos que podía visitar desde el navegador de mi teléfono sin mayor problema. Pero como todo en la vida, las cosas cambian y de dos pasamos a diecisiete.

Casi siempre leo desde el teléfono, justo antes de dormir y allí surge otro problema (bueno, dos si contamos el impacto del dispositivo en mi cara al quedar dormido), varios de los sitios que sigo no cuentan con una versión optimizada para teléfonos móviles, dificultando bastante la lectura.

Una solución rápida a todo esto es conseguir un buen lector de fuentes RSS para el dispositivo móvil y cargarlo con los enlaces a los sitios de interés. Al estar todo en XML, despegarlo en pantalla es responsabilidad del lector y no del sitio, por lo cual se suele tener más control y ajustarse mejor a las dimensiones de la pantalla.

El único problema con el que me he topado es esos sitios que sólo publican un resumen de la entrada vía RSS, forzándome a ir al sitio para leer el resto de la publicación. Por suerte son los menos y eventualmente termino sacándolos de la lista.


Tuesday, January 29, 2013

Primer Hackathon en Panamá

El fin de semana pasado (sábado 26 y domingo 20) se llevó a cabo el primer hackathon en Panamá, el Banco Mundial lo patrocinó y la Universidad Tecnológica de Panamá ofreció el lugar.

El tema del evento fue "contra la violencia doméstica", que a mi parecer, da para poco. La violencia doméstica es un problema serio que dista mucho de poder resolverse con tecnología, aun así se logró sacar tres problemas (o retos) sobre el tema.

El botón de pánico, una aplicación para teléfonos inteligentes que le da la opción a la víctima de pulsar un botón y alertar a las autoridades sobre su situación.

El único contexto en que veo que algo así funcionaría es llevado por una empresa de seguridad privada, al afiliarte a ella te dan la aplicación y si en algún momento tienes problemas al tocar el botón le llegarán las coordenadas y enviarán a alguien al rescate.

En cualquier otro contexto no lo veo útil, si se notifica a la policía como tal será un llamado más en la larga lista de casos que tienen, además no es como que el policía común (o cualquier ciudadano) pueda interpretar valores numéricos de longitud y latitud y saber a donde ir, para esto se requiere equipo y entrenamiento.

Fuera de que por más que nos guste pensar que todos tienen un teléfono móvil inteligente en sus bolsillos la realidad no es así. Facilitarle un dispositivo así a una persona de bajos recursos, víctima de violencia doméstica incluso la convierte en un blanco atractivo para delincuentes.

Y eso sin entrar en las consideraciones técnicas de la solución, ya que para lograr que funcione, la persona debe por lo menos contar con buena carga de batería y conexión de datos. Además, no se trata simplemente de leer información del GPS y enviarla, ya que obtener información del GPS puede tardar tiempo, no es precisamente una de las señales más fuertes y confiables del mundo.

Dependiendo de si estás o no en un lugar cerrado puede que incluso nunca las recibas. Lo que se tendría que hacer es mantener la aplicación en ejecución siempre, intentando captar información del GPS cada cierto tiempo, al momento en que se presiona el botón de pánico se envía la última posición y se mantiene enviando posiciones cada vez que se obtengan valores nuevos. Con el consecuente desgaste de batería que esto conlleva.

Una posible solución a esto es usar componentes electrónicos dedicados, una tarjeta principal, una batería, un modem 3g y un módulo GPS, todo lo más pequeño posible, que quepa en un brazalete. A la víctima se le da dicho brazalete que tendrá dos botones pequeños a los lados con una tarjeta móvil de sólo datos y un indicador de batería, se le pedirá que lo cargue siempre que pueda. En caso de pánico que presione ambos botones y una división especializada de la policía (que habrá que crear y capacitar) intentará llegar cuanto antes al lugar.

Lamentablemente esta opción no fue siquiera mencionada por el grupo, se limitaron a crear dos aplicaciones; para Windows Phone y Android. Segundo lugar para ellos.

Otro problema fue el de crear un sistema de integración. Resulta que en el país hay muchas entidades que participan en el proceso legal al momento de una agresión, nada malo con esto si no fuera por el hecho que no comparten información, por lo cual que pongas una denuncia en la entidad que te quede cerca no es garantía de que llegará a feliz término.

Posiblemente el reto más difícil, no tanto desde la parte tecnológica pero desde la implementación. Simplemente ninguna organización acepta cambios y mucho menos si los mismos son para revelar su propia ineficiencia, para esto se tendría que crear una organización central de datos que se encargue de crear los enlaces y almacenar la data y una (o varias) leyes que obliguen a todas las instituciones del gobierno a compartir su información, obviamente con los correspondientes permisos de lectura y/o escritura.

La parte técnica se hizo, pero lamentablemente no creo que algo así se implemente en un futuro cercano. Se llevaron el tercer lugar.

Y por último mi grupo, una encuesta anónima para las víctimas de la violencia doméstica. La idea es que al ir a buscar ayuda a una de las organizaciones que las brindan, la persona pueda llenar un formulario anónimo con la información de lo sucedido y de cómo se llevó el proceso.

El objetivo principal es bueno: poder identificar en qué parte el proceso falla o no, se busca identificar cuales son los obstáculos que pasan las víctimas para llevar a su agresor a la justicia. Sin embargo la implementación propuesta no permite dicho objetivo.

El hecho de que sea anónima impide actualizar la encuesta y es casi seguro que cuando la persona llegue a la ONG en cuestión, su caso no esté resuelto aún. (¿sino por qué iría en primer lugar?)

A mi parecer para que algo así funcione, la ONG debería encargarse de contactar a la víctima y preguntarle cómo va su caso y con esto realizar las actualizaciones a su encuesta, el papel (hasta donde entiendo) de la ONG es darle asesoría legal y guiar a la víctima por el largo, tedioso y mal diseñado proceso de denuncia (cosa de debería resolver el gobierno).

Incluso con esto es posible mantener el anonimato parcial de la encuesta, almacenando la misma con un número de identificación, la tabla que asocia el número de encuesta con la víctima permanecerá únicamente (de forma segura y por tiempo limitado) en la ONG.

Con todo y las múltiples limitaciones en el diseño y la implementación alejada de la realidad, nos llevamos el primer lugar.

Al final me quedo un poco inconforme, con esa sensación de que todo fue improvisado en una noche. Lo único bueno que saqué del evento fueron las risas con la gente de floss-pa y la oportunidad de hacer algo (una función) en java script, aprendí que en este lenguaje una función puede retornar otra función, como si fuera un objecto, incluso se puede sobrecargar al momento de usarse.

Y para finalizar debo darle crédito intelectual a dmaggot y aeperezt, ya que no todo lo que escribí aquí salió de mi cabeza, hay buena parte robada de sus opiniones vertidas verbalmente durante el evento.

Saturday, December 15, 2012

ZFS

Finally I managed to get my desktop PC back online, after changing its motherboard, memory and hard drive, it's ready to use. Besides regular use my idea is to store all the content here until I get a proper NAS (if that ever happens).

Eventually I came to the point where I had to choose which file system to use, I could stay with ext4, however that's not really the best out there, I mean it is a very popular and good file system for general use, but there are other options that provide, for example, better data integrity.

And everyone seems to agree that the safest file system is zfs. Originally developed by Sun it's supposed to provide excellent data integrity. Unfortunately for Linux users, due to license's conflicts can't be included in the kernel, nonetheless there is an implementation using fuse which I plan to use and show here.

The content that I plan to store is mostly family pictures, videos and music, all of them already have some kind of compression, so a file system with compression will not do much for me, zfs supports compression but I won't use it, if you plan to store text file or non compressed formats then probably it will be a good idea to give it a try.

After installing it and get it running (it has a daemon called zfs-fuse), zfs is more than just a file system, it is also a volume manager, which means that you don't even need to partition the disk, you can just give the whole disk for it to use, or a partition, or even a file, and a file is what I will use for testing here.

First lets create the file, I'll use a 512MB file as data store:
# dd if=/dev/zero of=rawdisk.1 bs=4096 count=131072
After that we create a pool, which is like a container that can store (or not) multiple volumes, for this test I will use it as it is:
# zpool create testpool /home/paco/zfs-test/rawdisk.1
This not only creates the file system but it also mounts it on /testpool so it is ready to use, the information of the pool is stored in /var/lib/zfs/

The status of the pool can be visualized with:
# zpool status
 pool: testpool
 state: ONLINE
 scrub: none requested
config:

    NAME                             STATE     READ WRITE CKSUM
    testpool                         ONLINE       0     0     0
      /home/paco/zfs-test/rawdisk.1  ONLINE       0     0     0

errors: No known data errors
So far so good, now I have couple of images that I will copy there, after that, let's unmount the device:
# zfs unmount /testpool
Now I'll try to simulate a data corruption, since the device that I'm using for the pool is a file, I can modify some bytes of it and see how it goes, the images I took start with "JFIF" so let's try to find that on the file:
# hexdump -C rawdisk.1 | less 

0040ac00  ff d8 ff e0 00 10 4a 46  49 46 00 01 02 01 00 48  |......JFIF.....H|
0040ac10  00 48 00 00 ff e1 1d 7a  45 78 69 66 00 00 49 49  |.H.....zExif..II|
0040ac20  2a 00 08 00 00 00 0f 00  0f 01 02 00 09 00 00 00  |*...............|
0040ac30  c2 00 00 00 10 01 02 00  10 00 00 00 cb 00 00 00  |................|
0040ac40  12 01 03 00 01 00 00 00  01 00 00 00 1a 01 05 00  |................|

Let's add some disturbance on "JFIF", let's change the "IF" part with random data:
# echo $(((0x0040ac00)+8))

 4238344

# dd if=/dev/random of=rawdisk.1 seek=4238344  bs=1 count=2 conv=notrunc 

Let me explain this a bit, the first column of the hexdump is the offset, in our case it is 0x0040ac00 (hexadecimal) which represents the first byte "ff" from that we start counting, 1 is d8, 2 is ff, 3 is e0 and so on until we get to "IF" which is 49 and 46 (man ascii if you want to double check). With this information we use dd to introduce random data from /dev/random in that position, you can for example close it and hexdump it again and grep for 0040ac00, you will notice that "JFIF" will be "JF**" where * is something random.

I repeat it a couple of times and then mounted it again:
# zfs mount testpool

So far so good, now let's do a check:
# zpool scrub testpool

And let's check the output:
# zpool status testpool   
  pool: testpool
 state: ONLINE
status: One or more devices has experienced an error resulting in data
    corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
    entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scrub: scrub completed after 0h0m with 2 errors on Fri Dec 14 23:59:27 2012
config:

    NAME                             STATE     READ WRITE CKSUM
    testpool                         ONLINE       0     0     2
      /home/paco/zfs-test/rawdisk.1  ONLINE       0     0     4

errors: 2 data errors, use '-v' for a list

It managed to detected 2 errors, let see more:
# zpool status -v testpool
  pool: testpool
 state: ONLINE
status: One or more devices has experienced an error resulting in data
    corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
    entire pool from backup.
   see: http://www.sun.com/msg/ZFS-8000-8A
 scrub: scrub completed after 0h0m with 2 errors on Fri Dec 14 23:59:27 2012
config:

    NAME                             STATE     READ WRITE CKSUM
    testpool                         ONLINE       0     0     2
      /home/paco/zfs-test/rawdisk.1  ONLINE       0     0     4

errors: Permanent errors have been detected in the following files:

        /testpool/1920-1200-11295.jpg
        /testpool/1920-1200-217.jpg

These are the two image files that we modified. Very impressive!, I'm not using it with a mirror, so it can't restore them, but it is possible to add another disk/partition/file as a mirror, in which case it will recover the files from it.

References:
  1. Wikipedia's article about ZFS
  2. ZFS implementation for Linux using fuse
  3. Solaris ZFS Administration Guide 
Versión en español aquí (linuxlatino)