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.
Monday, February 18, 2013
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.
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:
The status of the pool can be visualized with:
I repeat it a couple of times and then mounted it again:
References:
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=131072After 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.1This 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 errorsSo far so good, now I have couple of images that I will copy there, after that, let's unmount the device:
# zfs unmount /testpoolNow 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=notruncLet 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 testpoolSo far so good, now let's do a check:
# zpool scrub testpoolAnd 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 listIt 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.jpgThese 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:
- Wikipedia's article about ZFS
- ZFS implementation for Linux using fuse
- Solaris ZFS Administration Guide
Friday, November 2, 2012
Código ajeno
Semana difícil, como han sido las últimas, el trabajo aprieta pero de momento sigue siendo divertido. Llegué a la conclusión que disfruto modificando o retomando código ajeno más que el propio.
La magia detrás de esto es que puedo (de alguna forma) meterme en la mente del autor original, descifrar las razones por las cuales escogió implementar tal o cual cosa de esa o aquella forma.
Se aprende mucho de una persona leyendo su código, cada vez que pasa termino enfocándome más en la mente detrás del código que él... Lo cual laboralmente hablando no es del todo bueno.
En fin, últimamente me ha tocado ver código bastante malo, pero incluso el proceso de rehacerlo y optimizarlo es altamente gratificante.
Lo nuevo de esta semana fue identificar si una dirección IP (IPv4) pertenece a una red y máscara de red específica.
La magia detrás de esto es que puedo (de alguna forma) meterme en la mente del autor original, descifrar las razones por las cuales escogió implementar tal o cual cosa de esa o aquella forma.
Se aprende mucho de una persona leyendo su código, cada vez que pasa termino enfocándome más en la mente detrás del código que él... Lo cual laboralmente hablando no es del todo bueno.
En fin, últimamente me ha tocado ver código bastante malo, pero incluso el proceso de rehacerlo y optimizarlo es altamente gratificante.
Lo nuevo de esta semana fue identificar si una dirección IP (IPv4) pertenece a una red y máscara de red específica.
Tuesday, July 3, 2012
drg to sbg
After releasing version 1.2.11 I thought my job was done, wasn't planning to improve it in any way, until I received an email with a bug report. My first thought was "wait, people are still using this?" and it seems they do. The project has close to 5k downloads in total and after 3 days of releasing 1.2.12 the download count was already at 19.
Since people are still using it, I'll try to do my best to improve it, this is my TODO list (for version 2.0):
Since people are still using it, I'll try to do my best to improve it, this is my TODO list (for version 2.0):
- Migrate to git (I like git a lot)
- Drop ChangeLog (git log will provide that)
- Change version schema (2 digits instead of 3)
- Allows raw output (I use a small function to parse the original output to be SBaGen friendly)
- Allow dumping the image (every drg file has an image)
- Drop openssl dependency (currently only used for base64 decoding, seems overkill)
- Build drg (if you have an image, description and SBaGen code, you can make your own .drg file)
Subscribe to:
Comments (Atom)