2013/04/29

[offtopic] Medidor de distancias

De chico siempre me divertí mucho jugando con ojos. Los mios, claro. Así descubrí dos de los tres mecanismos que sirven para calcular la distancia a las cosas.


Uno de los mecanismos es el enfoque de cada ojo, que se usa a distancias cortas. Cuando el ojo esta enfocando correctamente, el cerebro sabe cuanto esfuerzo está haciendo y la distancia que corresponde.




El otro es la alineación de ambos. Para ver cerca uno vizquea, las lineas de visión convergen cerca si miramos algo cercano, tienden a ponerse paralelas al mirar a lo lejos. Este mecanismo funciona a corta y media distancia.


Existe un truco para extender la alineación, que es moverse lateralmente y viene a ser como separar los ojos.

El tercer mecanismo es la apreciación de la perspectiva y el tamaño aparente  que esperamos de las cosas que además, agrega la posibilidad de apreciar diferencias de distancias mayores.




Combinamos los tres mecanismos para tener el cuadro completo, es por eso que los tuertos no pueden apreciar ni las películas en 3d ni los estereogramas ni los ciegos ningún tipo de película.



Las ilusiones ópticas se basan en manipular algunos de estos mecanismos para engañar al cerebro.





En este caso tenemos varios indicios de que no se trata de un camello real:

  • Está fuera de foco.
  • Aunque parece estar entrando por la puerta, está sobre una de las hojas.
  • Es un poco pequeño en relación a la persona, más considerando que está pisando más cerca.
  • Y fundamentalmente, no es habitual ver camellos en los livings.
Esto no quita que alguna personita se lo haya creido.

Todo esto que he explicado se basa exclusivamente en mi experiencia y reflexión, no he recurrido a ninguna fuente. Calculo (y espero) que a grandes rasgos sea correcto.


Muchos años despues fui al museo naval en Tigre y vi un artefacto que era como un largavistas, pero con unos espejos que separaban las lineas de visión tres metros. Aunque no lo pude usar, intuí que manipulándo la alineación, cuando uno veía las dos imágenes coincidir, podía saber la distancia. Mientras buscaba una imagen, encontré un artículo muy interesante del '39 para hacer un mecanismo con un cartoncito. [1]

Finalmente, hace unos meses, imaginándome en el medio del campo, me pregunté que haría yo con los recursos con los que cuento para saber a que distancia estaban las cosas y ahí fue que nació este proyecto[2].





La idea es separar los ojos pero en lugar de usar un mecanismo óptico mecánico, usar cámaras conectadas a una computadora. Como está completamente fuera de mi habilidad ajustar y medir la alineación de las cámaras, trabajo superponiendo y alineando las imágenes generadas.



Esta manera tiene la ventaja de requerir muy poco ajuste y permite utilizar una distancia mucho mayor entre las cámaras, que en caso de proveer la resolución apropiada, podrían lograr una precisión bastante alta.

Muchas gracias a Greta Luna por las ilustraciones[3].

 

 

Implementación


Apesta.


No he tenido mucha oportunidad de utilizar ninguna metodología de desarrollo, el modelo se reduce a unas sencillas operaciones entre matrices y mantener unos pocos estados. La aplicación no es absolutamente sencilla y bien hecha por que no usé qt-designer, que me hubiera armado todo, pero yo no hubiera aprendido tanto. Conozco "la optimización prematura es la raiz de todo mal", lo sensato hubiese sido usar php, ruby o python y despues pasar a c++ en caso de necesidad. Trasca, los proyectos en lenguajes interpretados además son más fáciles de compartir. Lo hice en c++ por que deseaba practicar.

Elegí qt[4] por que encontré rápido que se llevaba bien[5] con vlc[6], asi me puedo abstraer totalmente de las fuentes de video, pudiendo ser cámaras, videos archivados (muy cómodos para hacer pruebas) y fundamentalmente streaming, lo que permite usar dos computadoras bastante alejadas entre si, cosa que sin embargo aún no he logrado.

Para hallar el modelo tomé medidas y aposté a que se resolvía con tres puntos de referencia y una cuadrática[7][8]. Puse las medidas en una planilla y comparé con la cuadrática que me daba el método de la matriz inversa y funcionó.


El uso del programa se reduce a ajustar las cámaras para que esten apuntando al mismo lugar, tomar referencias de tres puntos de distancia creciente y utilizar.

Lo que falta


Hay un importante problema con la resolución derivado de la baja calidad de la solución. Por mis limitados conocimientos, yo estoy volcando el stream de vlc en un widget del cual hago un snapshot que proceso y pego en otro widget. Esto produce que en lugar de trabajar con la resolución del stream lo haga con la del render del widget. Es por eso que se ven las tres imágenes del mismo tamaño, cuando bien podría verse una sola o verse la central más grande. Había pensado en usar la resolución real en las vistas laterales y ocultarlas, pero vlc y qt tienen la suficiente inteligencia como para no hacer render de lo que no se vé. OpenCV[9] podría ayudar, pero recién lo consideré al pensar que el programa podría calcular distancias automáticamente, por ejemplo de caras.


Dado que el 95% del alcance original está alcanzado, por ahora estoy feliz. El que mucho abarca, poco aprieta.

La arquitectura actual es:

  stream --> vlc --> qt ----------------> render izquierda
                     +--> mixer -->qt --> render mezcla
  stream --> vlc --> qt ----------------> render derecha

mientras que la correcta sería:

  stream --> vlc opcional --> opencv -----------> qt --> render izquierda
                                +-----> mixer --> qt --> render mezcla
  stream --> vlc opcional --> opencv -----------> qt --> render derecha

Dejo vlc por el network streaming y puse opencv pero pudo haber sido otra cosa.


Hay algunas mejorías que quizás algún día haga:
  • Que funcionen bien los modos de refresco de la pantalla de mezcla, es el 5% que me falta. (me da mucha pereza, lo voy a dejar tras rehacer con qt-designer)
  • Rehacer usando qt-designer (útil para aprender)
  • Guardar y restaurar configuraciones (sencillo y útil)
  • Integrar con GPS (no tengo gps...)

Pasos


git clone https://github.com/cpantel/cheapRangeFinder.git

make -j3/5/x

Dependencias

make
g++
qt-designer (instala todo lo necesario para qt)
libvlc-dev

Referencias


[1] http://www.dofmaster.com/rangefinder.html
[2] https://github.com/cpantel/cheapRangeFinder
[3] http://lanilunatejidos.blogspot.com.ar/
[4] https://qt-project.org/
[5] https://wiki.videolan.org/LibVLC_SampleCode_Qt
[6] http://www.videolan.org/
[7] http://math.uww.edu/~mcfarlat/matrix.htm Inverse Matrix Method
[8] http://www.dr-lex.be/random/matrix_inv.html inverse and determinant of 2x2 and 3x3 matrices

[9] http://opencv.org

2013/04/28

FLISOL 2013


El evento


No pude llegar en hora, me metí en un taller, dí el mio y tuve que retirarme antes, así que no puedo decir gran cosa en general, pero parecía estar todo ok.


Scratch


Tuve la fortuna de asistir a la charla dada por Verónica Zambonnin de una plataforma llamada Scratch[1], está muy buena. Me llevé como explicarlo a no informáticos y saber que existe Scratch for Arduino[2], no bien llegué a casa conecté mi arduino nano y lo pude controlar con S4A en segundos. Uno de estos dias/semanas/meses voy comprobar que tan compatible es y reportar.

Scratch es como logo y similares pero enfocado a objetos, es mucho más usable y divertido.

S4A es una extensión que usa un programita en el arduino[3] para usar sus capacidades de entrada y salida. Hasta donde investigué, el procesamiento es en la pc, no sirve para programarlo pero si para comprender como se programa. Uno luego podría hacer programas en c muy parecidos para grabarlos.


Hacklab de Barracas


Estos muchachos[4] hicieron un scanner amigable para libros, con dos cámaras y una plataforma que permite fotografiar cada página por separado sin abrir mucho el libro. Es realmente muy bonito, tiene una estructura de madera muy prolija, muy nerd.

Aprovechando que estaba afuera, siempre es fácil opinar, les hice mi habitual crítica constructiva:

-En lugar de usar cámaras fotográficas usen cámaras web. Son más baratas,  se evitan transferir y además hacen el OCR inmediatamente y ya saben si se puede pasar de hoja- dije.- Incluso, usando Motion[5] no haría falta indicarle a la máquina que saque la foto, cuando lleva, no sé, tres segundos sin movimiento, saca sola.

-Lo que pasa es que no da la resolución- respondieron Nicolás y Mauricio.

-Tengo una teoría, viste la luneta trasera de los colectivos, que suelen pegarle unos carteles con agujeritos? Bien, si observás detenidamente verás que si todo está quieto no se vé casi nada, pero no bien se mueven las cosas, se puede distinguir mucho mejor. Entonces, si usás una cámara de resolución insuficiente pero sacás muchas fotos muy cercanas entre sí, seguramente se podrá aumentar la resolución. Para mover imperceptiblemente las cámaras, poné un motorcito con una rueda descentrada, sacá N fotos, identificá las que te aportan información y combinalas.

Uno de estos días, prometo que lo voy a implementar y se los enviaré.

Números Romanos


Y ahora mi dolor, el taller de TDD.

Tuve dos fallos terribles y dos motivos de orgullo de consuelo.

Marketing


Con un nombre como "Números Romanos", a quién le puede interesar? Veamos algunos de los otros nombres:

“Exploit Pack - Proyecto de seguridad informatica open-source
“Moviendo cosas en el aula con Scratch
“Perdiéndole el miedo a la consola - Comandos básicos en GNU/Linux”

Debí haber puesto "Taller de TDD con Número Romanos" o algo parecido. Esto ayudó a que no viniera casi nadie. Igual no es un tema que suscite pasiones desenfrenadas. ¿Será por eso que hay tan poco Desarrollo Seguro?

Asistieron dos muchachos muy jóvenes que apenas sabían programar y un estudiante de UTN que sí. Aproveché para darles a los dos niños una introducción a los conceptos mínimos de programación como para que comprendieran de que se trataba lo siguiente.


Ensayo

Gracias al primer error, el segundo no fué tan terrible, ya que no es lo mismo encontrarse en esta situación con tres personas que con un centenar.

Ensayé antes, claro, no soy tan tonto, pero en otra máquina. Cuando ejecuté el primer test comenzaron a fallar las dependencias. Encima, cuando había preparado el entorno en la máquina original no tenía acceso a Internet, o sea que no sabía que era lo que  había que instalar con pear pues había instalado a mano y era muy desalentante, pues sabía que me podía llevar mucho tiempo.

Este fué mi primer motivo de orgullo. Logré atinarle en el primer intento al paquete que faltaba y conectar pear por medio del proxy, cosa que nunca había hecho antes y en menos de diez minutos ya había arreglado todo e incluso lo convertí en parte del taller: "así se soluciona este problema".

Sensación íntima


La baja concurrencia y la falta de coincidencia con mis expectativas del perfil de asistentes, sumando el fallo de las dependencias, me produjo en un momento una sensación de derrota inexorable, de querer levantarme, decir "lo lamento" y retirarme. Los latosos new age quizás me hubieran dicho "tenés que aceptar la derrota", "aprenda a decir no" o alguna otra gansada de autoayuda. En ese punto decidí mi propia gansada: para convertir mi derrota en victoria, tenía que transitarla hasta el final y haberlo logrado fué mi segundo orgullo.


Es difícil saber si los asistentes se fueron satisfechos, dijeron que si, pero siempre mienten. Yo me llevé un par de items más para mi checklist de charla o taller. Uno es probar en las condiciones más parecidas y el otro es usar la checklist, ya que el primero ya estaba. La recursividad me está haciendo mal.



[1] http://scratch.mit.edu
[2] http://seaside.citilab.eu/scratch
[3] http://arduino.cc/
[4] http://lab.hackcoop.com.ar/
[5] http://en.wikipedia.org/wiki/Motion_%28surveillance_software%29

2013/04/07

Owasp Latam Tour 2013 BsAs

Comparto mi opinión y experiencia en el citado evento [1]. Salvo el que yo expuse, que dada mi posición no puedo evaluar objetivamente, me parecieron todas las exposiciones muy buenas, detallo cualquier desviación y detalle especial luego.

La organización impecable, normalmente en todos los eventos tengo ocasión de refunfuñar por algo, no esta vez. El cronograma no fue tan violado como en el 2012, buenísismo!


Trucos para jugar con la criptografía en los desarrollos

Cristian Borghello

De un modo un tanto rápido y superficial, coherente con el poco tiempo, mostró criptografía con claves privadas y públicas y luego hashing y cual es su papel en un desarrollo web.

CMS el paraíso de los atacantes

Claudio Caracciolo

Presentó de modo general los resultados que "otras personas" obtuvieron tras explorar el espacio de ips de Ecuador y Argentina, mostrando el buen criterio que habría que tener al usar un CMS no corporativo.

Hacking the Cloud

Matias Katz

Mostró la experiencia de ownear a un proveedor de servicios cloud (a pedido del mismo proveedor), extremadamente divertido.

Secure infrastructure as code: How I built w3af.org [2]

Andres Riancho


Explicó el punto de vista de considerar el despliegue como si fuera un proyecto de software, con versiones y tests. Lo que él hizo fue aplicarlo a w3af.org, el sitio relacionado a la aplicación de pentesting w3af.

La idea es que todas las acciones de despliegue, ya sea creación y activación de imágenes en Amazon, instalación de dependencias, configuración del sistema operativo, configuración del sitio y restauración a partir de un backup sean ejecutadas mediante scripts. Esto permite tener un set de scripts versionable.

A esto se le suman tests de seguridad como ser controlar que sólo estén abiertos los puertos que se espera estén abiertos mediante la invocación de nmap, probar que las constraseñas de los servicios no sean las que vienen por default y cosas similares.

Lo que me llamó la atención fué que aunque contrastó bastante con las charlas anteriores en términos de colorido, fué la que más preguntas generó.

Del USB a la web: cómo tu sitio propaga malware[3]

Pablo Ramos

Fue una exposición en mi opinión muy marketinera, sin sorpresas, pero interesante al dar luz sobre el interior de un laboratorio como el de ESET.

 

Test Driven Secure Development[4][5]

Carlos Pantelides

Por algún motivo que no he dilucidado aun, estaba en estado de pánico escénico total. Esto produjo que comenzara de modo disperso y me olvidara de mencionar algunos puntos primordiales:

La demo se detiene cuando el modo de test comienza a meterse de modo cualitativo en la aplicación, cosa que yo ya sabía, pero debía decirlo.

Tampoco mencioné mis objetivos, que aunque más o menos se pueden deducir, viene bien explicitarlos:

  • Mostrar a quien no conoce que es TDD
  • Mostrar como se puede incorporar en el día a día de TDD seguridad
  • Recalcar que seguridad es un aspecto de calidad. Al código de calidad  se le puede agregar seguridad pero al código seguro sin calidad no se le puede mantener al seguridad

De todos modos en las próximas semanas, teniendo más tiempo y habiendo transitado esta experiencia, probablemente voy a mostrarla completa en la reunión del del lunes 13 de mayo, 18:30 en el MUG y en SVC algún otro día. Si alguien quiere asistir, me avisa.


De POET a CRIME y los BEASTies que se vienen

Juliano Rizzo

Hizo un repaso por sus grandes éxitos, realmente muy revelador, pude entender bien en que consiste el ataque crime, no me comprometo, pero intentaré implementarlo.


Problematicas en el Ciclo de Vida de Desarrollo seguro Panel de Oradores

Cristian Borghello, Hernan Raciatti, Fabio Cerullo, otro caballero que no recuerdo el nombre y con la moderación de otro que tampoco recuerdo.

Estos paneles no me resultan muy satisfactorios, prefiero mil veces los diálogos y discusiones que se dan en los agile open[6] con formato open space[7]. En realidad todo el evento adolesce de esta falencia, la falta de participación general. El que expone no se lleva casi nada, el público no llega a opinar y preguntar todo lo que tiene. Aunque haya información de alta calidad, es la catedral.

Sigo apostando a que los Agile Open Seguridad [8] [9] [10] prosperen, a ver si este año logramos que salgan del estado larvario.




[1] www.owasp.org/index.php/LatamTour2013 -> Buenos Aires
[2] www.owasp.org/index.php/LatamTour2013-SecureInfrastructureAsCode
[3] www.owasp.org/index.php/LatamTour2013-USBalaweb_Malware
[4] www.owasp.org/index.php/LatamTour2013-TDSD
[5] seguridad-agile.blogspot.com.ar/2012/09/cafein.html
[6] www.agiles.org/agile-open-tour
[7] www.agiles.org/agile-open-tour-open-space-technology
[8] www.agiles.org/agile-open-tour/agile-open-buenos-aires-2010---seguridad
[9] www.agiles.org/agile-open-tour/agile-open-buenos-aires-2011---seguridad
[10] www.agiles.org/agile-open-tour/agile-open-buenos-aires-2012---seguridad

2013/04/01

Disposable pick tools for the office

Bored?

You can make your own pick tools at the office, with a few elements, fast and cheap.




You need a hole punch, some binders and an optional scissor.



Peel off the binders:



Make some half holes with the hole punch:



Take care of the edge:


Then, a little cut:


Finally, file the pick with another one in order to avoid damaging the lock.



Now you can show off!


These two did not need a scissor.



They work fine with wafer locks and padlocks.

(Original spanish version)