jueves, 10 de julio de 2014

Pdmenu en Windows

,
En otra entrada comenté sobre Pdmenu, una herramienta que me pareció siempre tremendamente útil para una multitud de tareas en dónde resulta apropiado una interfaz en modo texto tipo menú o lista de opciones. Lamentablemente no encontré versiones para Windows, por lo que hice una prueba exitosa de bajar los fuentes y compilar directamente. Acá van las pautas:


  • Bajar el entorno Cygwin, instalar lo básico más las herramientas de desarrollo, como ser el compilador gcc.
  • Bajar el tar del pdmenu a una carpeta cualquiera.
  • Como en Linux, correr en la carpeta de pdmenu el script "./configure". esto generará el makefile necesario para realizar la compilación.
  • Hay dependencias que seguramente no están resueltas, por ejemplo las librerías de desarrollo de Slang y las de Native language support, buscarlas en el instalador de Cygwin e instalarlas. Sorprendentemente son dos o tres cosas que faltan, el configure luego corre elegantemente.
  • Una vez finalizado el "configure", se generó un Makefile. Hay que ejecutar entonces el make. No me interesa nada más que el ejecutable final, por lo que make -k está bien. Si surge un error con alguna referencia con la librería de Native language support, se puede editar el Makefile y agregar " -lintl" a la línea dónde se define la compilación.
  • Una vez finalizado, el la capeta src, deberíamos tener un pdmenu.exe !!!
  • Recordar que este Exe generado corre bajo el entorno Cygwin, por lo que requiere acceder a las librerías dinámicas Cyg*.dll. Corre estupendo en el entorno, e incluso corre en un Cmd común. Recordar que los scripts para definir el menú tengan el fin de línea de unix no el de windows. (De última usar dos2unix)
Para los "vagos" como yo, colgué en la red el port a Windows, descargar desde aquí. Probado en un 7, funciona sin problemas. Para probarlo: pdmenu.exe -c pdmenurc.sample

El ejecutable requiere de estas librerías de Cygwin
  • CYGGCC_S-1.DLL
  • CYGICONV-2.DLL
  • CYGINTL-8.DLL
  • CYGSLANG-2.DLL
  • CYGWIN1.DLL

Leer más →

jueves, 3 de julio de 2014

Bafici Resolver. Pensar el problema.

,
Continuando con esta serie dedicada al problema BAFICI y pensando un poco más el problema de forma más abstracta, lo primero que nos puede venir a la mente es verlo como un simple tema de combinaciones. Aplicando en cierta forma la fuerza bruta, podríamos generar todas las posibles combinaciones y verificar que cada una de las mismas sea correcta, para lo cual se deberían dar las siguientes condiciones:

  1. Todas las proyecciones de cada combinación deberían ser de distintas películas. Simplemente por que no queremos repetir películas.
  2. Ninguna de las proyecciones deberían solaparse, y además entre el inicio de una y el final de otra debería existir suficiente tiempo para trasladarse de una sala a otra.
Usando este algoritmo de "Combinaciones selectivas o complejas" podríamos generar primero todas las combinaciones de proyecciones posibles y luego recorrerlas  para ir descartando aquellas que no cumplan con los puntos anteriores. Al final nos quedarían aquellas válidas, y buscado las que tienen más elementos, llegaríamos a ver aquellas que nos acerquen a ver el conjunto de todas las películas deseadas. 

Esta fue mi primer aproximación al problema, ahora bien, cuando entran a jugar las combinaciones, entran los grandes volúmenes de datos y de tiempos de proceso. Pensemos un poco esta solución en términos matemáticos y con un ejemplo puntual:
  • Dijimos que en la edición 2014 había unas 350 películas, este número no importa tanto, porque el que verdaderamente importa es el de las películas seleccionadas, digamos unas 25, que es lo que habitualmente nos programamos para ir a ver.
  • Cada película tiene 3 proyecciones, o sea un conjunto de 75 elementos (25 x 3)
La formula para calcular las combinaciones de 25 (r) elementos  sobre un universo de 75 (n) es: 

n! / r!*(n-r)!

Esto se lee: el factorial de n, dividido el factorial de r menos el factorial de n menos r. Viene muy bien este enlace para el calculo. Con los número que manejamos en el ejemplo nos daría algo así:

5.25885471411489e+19

En "criollo" y si no me equivoco, sería: 52.588.547.141.148.900.000, ni siquiera sé como se lee un número de semejante magnitud. Pensar solo en generar esta cantidad de combinaciones me da vértigo, ni me imagino recorrer luego cada una para verificar si es válida.

La verdad que extraño en estos momento no tener un conocimiento más avanzado en matemática, por que intuyo que debería existir algún modelo que permita describir y resolver este tipo de problemas, se me ocurrieron matrices y grafos, pero me falta teoría, tal vez algún alma caritativa me de alguna orientación al respecto. 

Concluyendo, la fuerza bruta no parece ser aplicable, desde un punto de vista práctico. La solución debería llegar desde otro angulo.

Tengan paciencia, esto no termina todavía...

Enlaces relacionados

Leer más →

martes, 1 de julio de 2014

Bafici Resolver. El problema.

,
Algunos hacen sudokus, otros crucigramas, a mí me gusta pensar en soluciones a problemas. Seguramente una (de?)formación profesional. Uno de esos problemas que no me deja dormir hace rato, metafóricamente hablando ya que dudo que exista algo que me complique el sueño, es como resolver la cuestión "BAFICI". Vamos para atrás con un breve introducción.

Me gusta el cine, yo diría me gusta mucho, para colmo mi mujer comparte conmigo este gusto (no sé si incluso no es más fanática). Todos los años, desde hace unos dieciséis se realiza en Buenos Aires un conocido y bastante importante festival de cine independiente BAFICI. Esas cosas buenas que de vez en cuando transcienden los gobiernos. Una maravilla en todo sentido que alguna vez me permitió ver a Tom Waits, por ejemplo.

Volviendo al punto, Tanto mi mujer como el que escribe somos "habitues" del festival, incluso mucho antes de conocernos, por lo que todos los años se nos presentan dos grande problemas, que nos insumen mucho tiempo.

El primero, es elegir que películas ver, tarea complicada si las hay, estamos hablando, tomando como ejemplo la edición 2014, de unas casi 350 producciones entre cortos, medios y largometrajes, producciones variadas de todas las latitudes del planeta. Este problema se resuelve con paciencia, tiempo, un poco de investigación, un poco de criterio y algo de suerte.

Una vez resuelto que cosas ver, surge el segundo problema (el que me quita el sueño) que es como ver las películas elegidas. Acá ya entramos en el "meollo" de la cuestión, veamos el escenario primero:
  • El BAFICI presenta todos los años unas x cantidad de películas, digamos unas 350 por tomar un ejemplo del último año
  • Del total de las películas, generalmente mi universo de films seleccionados es de unos 25
  • Cada película puede tener de 1 a n proyecciones, normalmente 3
  • Cada proyección se realiza en distintas salas y por lo general en días y horarios también distintos
  • Las salas pueden en algunos casos ubicarse en un mismo complejo (por ej, Village Recoleta) pero también se ubican en lugares variados de la capital (Belgrano, Recoleta, Centro, Caballito, etc)
  • El trasladarse de una sala a otra insume un tiempo que puede ir desde unos pocos minutos hasta más de una hora
  • Si bien solemos tomarnos vacaciones para al menos una de las semanas del festival, hay horarios que descartamos definitivamente, los de la mañana sobre todo.
  • La gente del festival publica una grilla con todas las proyecciones.
Ahora está más claro el problema. Se necesita poder combinar las proyecciones de los films seleccionados de tal modo que nos permita poder verlos todos (o la mayor cantidad de estos) de una manera "humanamente" posible. Esto es un trabajo que hasta ahora venimos haciendo con lápiz y papel, la idea es poder automatizar este proceso con alguna herramienta informática.

Asi planteado, parece un problema "de facultad", esos que te plantean en las carreras de sistemas, invito a usarlo como tal.  

Esto sigue por aquí
Leer más →

viernes, 1 de marzo de 2013

Cuantos múltiplos de X hay en un rango n..m?

,
Parece increíble que a esta altura de mi carrera me este preocupando por esto, pero a raíz de un ejercicio propuesto y pensando en que la solución típica era bastante ineficiente me puse a pensar. Debe haber algo, fórmula o algoritmo mas eficiente que la clásica y querida fuerza bruta.

Veamos el problema:

Cuantos múltiplos de 3 hay entre 7 y 18988?


Solución típica, recorrer el rango y verificar cada número, en SQL simplemente por que lo tengo más a mano, pero es fácil de entender

DECLARE @Minimo INT
DECLARE @Maximo INT
DECLARE @Multiplo INT
DECLARE @I INT
DECLARE @Cant INT

SELECT @Minimo = 7
SELECT @Maximo = 18988
SELECT @Multiplo = 3
SELECT @I = @Minimo
SELECT @Cant = 0

WHILE @I < = @Maximo
BEGIN
   IF @I % @Multiplo = 0
   BEGIN
      SELECT @Cant = @Cant + 1
   END
   SELECT @I = @I + 1
END

-- Resultado final
SELECT @Cant
6327 es la cantidad de múltiplos de 3 entre 7 y 18988. Sin embargo este método es ineficiente, recorrer todos los números???!!!, debería haber algún teorema, alguna fórmula que permita calcular esto de manera más rápida. Lamentablemente con las matemáticas tengo una cierta relación de amor-odio, tal vez algún matemático que ande dando vueltas me pueda dar una pista. Encontré un algoritmo que hace una aproximación muy cercana de manera muy simple, en este ejemplo sería hacer: (( 18988-7 ) + 1) / 3 = 6327,33.... , se toma la parte entera del resultado y esa sería la cantidad. El problema es que a veces da bien y a veces uno menos,por ej entre 2 y 3 hay un solo mútiplo de 3, sin embargo esta fórmula nos daría ((3 - 2) + 1) / 3 = 0. Mejorando un poco esto, llegué al siguiente algoritmo
DECLARE @Minimo INT
DECLARE @Minimo  INT 
DECLARE @Maximo  INT
DECLARE @Multiplo INT
DECLARE @Cant  INT
DECLARE @PrimerMultiplo INT

SELECT @Minimo  = 7
SELECT @Maximo  = 18988
SELECT @Multiplo = 3


SELECT  @PrimerMultiplo = @Minimo + ( CASE WHEN @Multiplo - ( (@Minimo + @Multiplo) % @Multiplo ) = @Multiplo THEN 0 ELSE @Multiplo - ( (@Minimo + @Multiplo) % @Multiplo ) END )
SELECT  @Cant = CASE WHEN ( @Maximo - @PrimerMultiplo ) >= 0 THEN ( ( @Maximo - @PrimerMultiplo )  / @Multiplo ) + 1 ELSE 0 END

-- Resultado final
SELECT  @Cant
Es bastante claro, busco el primer múltiplo a partir del mínimo y divido la diferencia entre éste y el máximo por el múltiplo, en la parte entera estaría el valor buscado, hay un poco más de lógica para evitar una división por 0 cuando en el rango no existen múltiplos, en principio diría que funciona.



ACTUALIZACIÓN AL 23/04/2013 Hay que ser bobo, por suerte estos temas siempre me quedan "picando" en la "capocha", la forma más simple entiendo que es así
DECLARE @Minimo         INT 
DECLARE @Maximo         INT
DECLARE @Multiplo       INT
DECLARE @Cant           INT

SELECT @Minimo  = 7
SELECT @Maximo  = 18988
SELECT @Multiplo = 3


SELECT  @Cant = CONVERT(INT, ( @Maximo / @Multiplo ) ) - CONVERT(INT, ( @Minimo / @Multiplo ) )

-- Resultado final
SELECT  @Cant
Leer más →

miércoles, 2 de enero de 2013

Nikon D300s para video

,
Tal vez algunos ya lo sepan, pero eventualmente se me da por participar en alguna producción audiovisual, lo he hecho varias veces como asistente de dirección, sin embargo el lugar que más disfruto (si cabe esa posibilidad en cualquier producción) es en el de la fotografía (cámara y/o iluminación). Hace un tiempito terminé de trabajar en el mediometraje "Pecadores" de Pablo Padilla, un amigo de la casa. Bajos recursos y alta imaginación. Una comedia erótica almodovariana. Me toco hacer luz y cámara, poca planificación y mucho de "repentismo". La experiencia fue altamente satisfactoria en cuanto al aprendizaje: trabajé por primera vez con un DSLR en modo video, puntualmente una Nikon D300s prestada

 Recursos de cámara
  • Nikon D300s (prestada) 
  • 28mm 2.8 AF y 17-210VR (los aporte yo de mi equipo fotográfico) 
  • Tripode Manforto 520 
  • Baterías, prestada y propias 
  • Grip 
  • 2 tarjetas SD propias
  • 1 lector de tarjeta USB
 Recursos de Luz
  • 2 miniluces de Jardín de 1000w 
  • 1 "Fotola" de 500w + Globo Chino 
  • 2 Tripodes de luces 
  • Varios focos incandescentes de 200w para reemplazo 
  • Alargues 
Experiencia con la cámara
  • Foco: Manual. El autofoco durante la grabación es inusable. Sin follow focus ni asistente se complica muchísimo. Preferentemente planos fijos. Se ajusta por Liveview haciendo zoom sobre la zona a hacer foco.
  • El visor obvio no es usable por que en modo video se levanta el espejo.
  • Exposición: Se puede bloquear, pero ISO, Shutter speed y demás no son configurables manualmente. Se puede establecer eso si un ajuste de exposición. Ningún cambio se puede hacer durante la toma.
  • Tiempos de grabación: No más de 5 minutos. Las malas lenguas hablan del calor excesivo del sensor que genera ruido en la imagen, por lo que Nikon, limita a 5 minutos cada toma.
  • Mucha bateria, una jornada de 6 horas requiere 4 o 5 baterías bien cargadas.
  • Memoria? depende obvio, en nuestro caso de 4 a 6 gigabytes por jornada.
  • Profundidad de campo, hermosa, al estilo fotográfico. Nunca vi nada igual en video.
  • Video Banding: raro, no debería ocurrir, me tomé el trabajo de quitar toda fuente de luz fluorescente, solo incandescentes comunes que en teoría deberían minimizar este efecto, sin embargo en algunas tomas ocurren las molestas bandas más oscuras, son sutiles pero el ojo acostumbrado las ve.
  • Rolling Shutter. Y... si.. se lo ve con "paneos" rápidos u objetos que se mueven lateralmente
  • Ruido: La verdad nada que llegue a molestar.
  • Bloqueo de espejo: Puede ocurrir al descargarse una batería que el espejo quede bloqueado, se cambia la batería y de todas formas el "liveview" no funciona, el display marca "Err". Solución: disparar como si se tratase de una foto.
  • Casi todo resuelto con el 28mm. Personalmente prefiero los lentes fijos, es una cuestión diría casi ética con la imagen. Más gimnasia a la hora de encontrar el encuadre pero la relación de distancia objeto / espectador es totalmente distinta a lo que se logra con el Zoom. La verdad que el 28mm es un lente muy versátil y luminoso. En la cámara representa un 42 mm, o sea un ligero angular o un normal a los ojos de Cartier Bresson. Para interiores, con tiro corto, es ideal, buen bokeh además.
Algunas capturas de video







































Leer más →

martes, 20 de noviembre de 2012

Escritorio remoto

,


En linux conectarse a un escritorio remoto (protocolo RDP) a entornos Windows es relativamente fácil, hay una multitud de opciones, basta "googlear" un poco. Hay opciones muy completas como Remmina que engloban varios protocolos de acceso remoto, pero si la cosa pasa por conectarse únicamente a un escritorio remoto Windows, la opción más sencilla y rápida es rdesktop.








Para instalarlo:
sudo apt-get install rdesktop

Para ejecutarlo
rdesktop -u [usuario] -p [contraseña] -k es -f -a 16 -N -P -z [servidor:port] -r disk:[recursocompartido]=[path local]

Para solucionar problemas de teclado españoles/latinoamericanos, el truco que me funcionó es configurar el cliente con el layout de teclado español (-k es ) y el escritorio remoto con la distribución Español Internacional.

Enlaces interesantes

Leer más →

miércoles, 14 de noviembre de 2012

Samsung Galaxy Y Pro Trucos

,
Eliminar animación de Personal
  • Rootear
  • Instalar ES File Manager y en configuración habilitar las opciones de root
  • Renombrar en /system/media, los archivos : bootsamsung.qmg y bootsamsungloop.qmg
  • Los archivos del shutdown  en: /system/media/video/shutdown (shutdown.qmg)
  • El archivo de sonido del shutdown esta en /system/media/audio/ui - se llama shutdown.ogg
  • El archivo de sonido de cuando se prende esta en: /system/etc - Se llama poweron.ogg
  • Backup de tarjeta Sd a disco sudo dd if=/dev/sdb of=~/sd-card-copy.bin
  • Restore de backup a otra tarjeta: sudo dd if=~/sd-card-copy.bin of=/dev/sdb
Aplicaciones "Must have"
  • ES Explorer
  • ES Task Manager
  • Dropbox
  • Super SU

Leer más →