jueves, mayo 31, 2007

Progresos, progresos, progresos

Cuando te pones a programar una aplicacioncilla como la que tengo en mente, llega un momento que después de pensarlo, hay que ponerse a ello y tirar lineas de código, además, como te falta todo no sabes por donde empezar.

Yo he decidido lo siguiente:
  1. importar directamente desde el mismo ordenador (de momento sin que sea a través de la web) todos los ficheros fotográficos.
  2. Archivar los ficheros en la estructura descrita anteriormente.
  3. Crear los thumnails asociados.
  4. Visualizar vía web, los ficheros fotográficos.
  5. Manejar distintas revisiones por ficheros.
  6. Visualizar distintas revisiones de un fichero.
  7. Introducir manualmente ficheros.
  8. .....
De momento casi tengo el primer punto, espero a final de semana tener hassta el punto 4 por lo menos. Ya veremos

De momento pongo la última foto que subí a flickr. en la que utilicé unos tubos de expansión que me dejaron.

Agua de Rosas

sábado, mayo 26, 2007

Organización física

Con todo lo expuesto, solo me queda ya un punto para empezar a codificar las primeras lineas de código, que es la organización física de todos los ficheros.

Las principal característica en la que pienso: Tiene que estar agrupado de tal forma que sea fácil hacer backup, para poder disponer de distintas copias.

Personalmente me gusta la organización DirectorioAño/DirectorioMes/DirectorioDía para los negativos, lo que no tengo muy claro que hacer con las versiones, si ponerlas en el mismo directorio que los negativos y renombrar si es necesario, crear un directorio por foto tratada o replicar la estructura para las fotos procesadas como tengo ahora.

Segun voy escribiendo, la opción que me parece mejor es la primera, aunque renombrando el fichero, poniendo un prefijo, con el idFoto y el número que ocupa en la tabla de versiones, teniendo en cuenta que todos los negativos van ha empezar por IMG o _IMG, me permitiría que estando en la misma localización estuvieran separados.

Sigo pensando mientras escribo..... Mejor todas las fotos poner el prefijo adecuado, ya que todas las fotos van a estar en la tabla de versiones el prefijo sería de forma P15V1_IMG_1050.CR2.

Decidido, voy a empezar así, el prefijo para todas las fotos y luego los thumnails simplemente P15V1.jpg.

Ahora, a empezar, que ya tengo tajo :-P

Organización de las tablas

Con la información expuesta en la entrada anterior, creo que existirán dos tablas principales, fotos y versiones.

La tabla de fotos tendría la información descrita en la entrada anterior, y además tendría la información de la foto, ExposureTime, ISO, FNumber, es decir toda la información común a todas las versiones, por si acaso la primera foto que se introdujera en el sistema no fuera la versión original de la foto, siempre que localicemos una foto que YA está en el sistema, comprobaremos que estos campos son iguales, y en caso que no lo séan informaremos, no séa que me haya dejado alguna forma de identificación de la foto.

La tabla de versiones, tendría, la localización física del fichero y del thumbnail mostrado, tamaño de la foto, formato de la misma así como un link con la tabla de fotos. Trataremos el negativo como la versión original, osea que estará reflejada también en esta tabla, que se ordenará dentro de cada foto, por fecha.

Clasificación de las fotos por el exif

Creo que ya tengo un modelo inicial para identificar una foto, así como sus respectivas versiones.

La intención es hacerlo con las etiquetas más generales posibles, para que esté en todos los formatos y en todos los exif.

Una foto se identificará por las etiquetas Make (Marca de la cámara), Model (Modelo de la cámara) y DateTimeOriginal (fecha de la foto), si en un futuro se crearan distintos usuarios de la aplicación, identificaríamos también el usuario de la aplicación.

Negativos y versiones: Los negativos (fotos tal y como salen de la cámara) con las posibles versiones/rebelados de la misma, tendrán los parámetros anteriores iguales, la forma mas facil de ordenarlos es por la etiqueta DateTime, en el caso del negativo será igual a DateTimeOriginal y en el resto de casos será distinta.

jueves, mayo 24, 2007

Para mejorar programando en Python

Para hacer mi programa, no tengo mas remedio que mejorar mis conocimientos de python, lenguaje que me encanta, pero que de momento solo he utilizado para pequeños scripts en el curro para para tratar textos (ficheros, expresiones regulares y demás). Son muchos años programando en C.

He encontrado una forma bastante adictiva de aprender, el python challenge. Un pasatiempo que te dan pistas para resolver distintos niveles, mediante scripts cortos de python.

Voy por el nivel 4 de 33, aun me queda....

Didáctico y adictivo.

Iremos alternando el resolver niveles con ir haciendo cosas para mi aplicación.

martes, mayo 22, 2007

Comunicación entre procesos

Como ya sabeis, intento llamar desde python a la aplicación exifgrep y recoger los resultados de la misma para rellenar los datos de la foto en la base de datos.

Buscando por la documentación de python he encontrado 2 opciones.

  1. Dentro del módulo os está popen3, que executa y devuelve 3 descriptores de fichero en los cuales tienes los flujos de entrada, salida y error de la aplicación llamada. El único problema que he visto es que no se la forma de saber cuando el proceso hijo ha terminado.
  2. Existe otra forma. el módulo popen2 con la clase Popen3, digamos que tiene una propiedad fromchild que te devuelve los datos de salida del proceso hijo, Popen4 devuelve en este flujo tanto error como salida. La ventaja de esta clase es que tiene el método wait() que espera a que termine el proceso hijo. Desventaja, solo está disponible en unix
De momento me decantaré por la segunda opción en un futuro ya veremos. Desde luego, un día y ya mi aplicación no es multiplataforma :-(

Como siempre, si a alguién se le ocurre algo mejor, encantado de escucharos

domingo, mayo 20, 2007

Día 1: Lectura de los datos exif.

Bueno, empecemos con temas ya de programación del wephonizer.....

El primer problema que voy a intentar abordar es la lectura de los ficheros exif asociados con cada foto. Para ello, por lo que he visto, voy a llamar desde python a la la aplicación exifprobe o a su versión exifgrep.

Para ello es muy interesante la información de las siguientes webs:
Para verificar la unicidad del fichero (en el caso de los negativos) y luego para linkar las distintas versiones me estoy fijando en las siguientes etiquetas:
  • DateTimeOriginal
  • Las que marcan la cámara.
Tendrían que intentar ser etiquetas que definieran la foto y a ser posible lo mas génericas posibles. ¿alguna idea?

El nombre

Bueno, ya he decidido un nombre para mi monstruo.
Web Photo Organizer ¿Original no?.
Bueno he decidido acortarlo un poquito y mezclar todas las palabras:

wephonizer

Se puede decir y si lo buscas en google no tiene ningún resultado, con lo que espero que pronto enlace este blog. además tiene cierta similud fonética con un proyecto que estuve involucrado, sentimental que es uno.

sábado, mayo 19, 2007

Las herramientas

Pues eso, las herramientas a utilizar van a ser las siguientes.

  • El servidor va a ser un ordenador con Unbuntu 7.04
  • Como lenguaje de programación python 2.5
  • Para hacer el servidor web, utilizaré django 0.96 (última estable o igual me atrevo con la de desarrollo).
  • La base de datos, al ser bastante pequeña, me conformaré con sqlite que ya lleva el python 2.5 el soporte "de serie"
  • En cuanto a la lectura de los datos exif de las fotos voy a intentar usar el exifprobe, que parece muy completo y que soporta gran cantidad de cámaras de fotos, instalado además desde la distribución.
  • En el caso de hacer una herramienta cliente, utilizaría el entorno kiwi que va sobre gtk y glade también en python.
  • Igual al python habrá que añadirle la librería PIL para manejo de imágnes, en fin ya lo descubriré mas adelante.
De momento empezaremos con esto, todo de la instalación estandar de ubuntu excepto el django.

La aplicación

Quiero hacer una aplicación que tenga las siguientes características:
  1. Maneje al menos los negativos de mi Canon 350D tanto ficheros CR2 como los xmp creados con photoshop
  2. Maneje los ficheros jpg de mi ixus 500 y mi 350D
  3. Organice en el disco duro todos estos negativos con formato fecha por directorios AAAA\MM\DD (año\mes\día\nombre fichero).
  4. Pueda haber distintas versiones (rebelados) de la misma foto y se puedan ver todas las versiones. Se puede hacer dentro de AAAA\MM\DD\NOMBRE_FICHERO\VERSION1...
  5. Dentro de las versiones, se manejaran también ficheros con formato TIFF
  6. Se incluyan todas las etiquetas y rating que se quieran por foto ¿Se puede reconocer las etiquetas puestas por photoshop o f-spot?
  7. Accesible a través de web (incluir todas las fotos que tengo dispersas por todos los ordenadores)
  8. El interfaz web, debe ser capaz de dejarnos navegar en los distintos directorios, tener thumnails de las fotos y añadir nuevas fotos.
  9. Presentaciones de los distintos directorios de fotos?
  10. Backup automático del directorio de fotos, mas la base de datos.
  11. Posibilidad de que exista una aplicación cliente para facilitar la posibilidad de envíos múltiples.
  12. Posibilidad de múltiples usuarios.
Como veis, son muchas cosas para programar yo solo, la aplicación la describiría como un f-spot con interfaz web, para poder subir fotos desde múltiples ordenadores, además de manejar las versiones de la foto de forma distinta.

Ya veremos a donde llega todo esto.

Nuevos tiempos.....

Cuando abrí esta cuenta, no tenía intención de escribir nada, pero ahora he creido que erá buen momento ya que tengo una inquietud y creo que puede valer para exponer las ideas que me vayan surgiendo, y si alguien quiere aportar sus sugerencias, bienvenidas sean.

En este blog, iré comentando los avances, ideas que vaya teniendo para la construcción de una herramienta opensource, para la organización de fotos a través de la web, (OTRA!!!!!!).

De momento, por no tener no tiene ni nombre, solo unas ideas claras, para que quiero que sirva. Cuando tenga un código medio usable, lo haré disponible desde mi casa en donde será el sitio donde haga las pruebas.

En principio solo tengo claro el fín y un poco las herramientas que voy a usar para hacer el código, si a alguien le interesa, que sigua sintonizado..... a ver hasta donde llego.

También iré poniendo enlaces a alguna de las fotos que tengo publicadas en flickr, os dejo la última que puse.

Avenida Cataluña 1 (II)