# Gallery

Gallery es el nombre del producto principal del proyecto Gallery. Gallery es un programa para publicación de fotos en línea tipo álbum fotográfico libre, basado en PHP (y por lo tanto multiplataforma) y con licencia GPL
Entre sus características más notables se encuentra manejo fácil e intuitivo de las imágenes, creación de miniaturas o thumbnails en forma automática, ordenado, redimensionamiento, rotación de imágenes, búsquedas, conexión con base de datos, entre otras.
Gallery es fácilmente integrable con otros productos basados en web. Es fácilmente integrable con foros de discusiones, sistemas de administración de contenidos (téngase en cuenta que Gallery no es un administrador de contenidos, solo es un administrador de imágenes). Su facilidad de integración alcanza también la parte visual ya que separa la capa de manejo de las imágenes de la capa de presentación mediante “themes”. Estos “themes” pueden ser creados o modificados si no se encuentra alguno adecuado de entre los múltiples disponibles.
Existen dos versiones de Gallery, v1 y v2. Si bien ambas son GPL, tiene algunas diferencias que se verán más adelante.
También existe un “cliente” llamado “Gallery Remote” que permite la carga de imágenes en forma más sencilla e intuitiva para los usuarios. El Gallery remote es una aplicación Java (por lo tanto multiplataforma) que se puede instalar o si no se puede usar la versión applet.

## Historia del proyecto

A mediados de 2000, Bharat Mediratta (uno de los programadores fundadores del proyecto) se enfrentó frente a sus nuevas fotos digitales y se preguntó dónde podría publicarlas. De allí surgió la idea de Gallery. Mediratta junto con Chris Smith fundan el proyecto Gallery en mayo de 2000 y en junio lo hacen público en sourgeforge.
Por ese entonces los programadores involucrados en el proyecto Gallery no tenían conocimiento preciso de PHP, bases de datos, separación de capas de presentación e inteligencia de aplicación, pero aun así el desarrollo continuó no de la mejor manera. A pesar de eso se publicó la versión 1.x de Gallery que funciona bien, es estable y cumple sus metas pero internamente es un poco desorganizado.
Cuando los programadores involucrados en el proyecto se dieron cuenta de que Gallery realmente era de utilidad y productivo, tuvieron que encarar dos alternativas para su mejora. Revisar el código para corregir las múltiples secciones que estaban desprolijas y corregir los problemas (mayoritariamente internos) que tenía o comenzar a escribirlo nuevamente de cero.
Luego de largas discusiones se decidió que sólo una reescritura total del código podría arreglar problemas en forma definitiva, además de permitirles agregar nuevas funcionalidades que hasta aquel entonces no existían en Gallery. Es así como se inició el desarrollo del Gallery 2. x

## Desarrollo del Proyecto

El desarrollo del proyecto tiene las características más frecuentes de los proyectos de software libre. Se inician por la necesidad de una o pocas personas (en este caso Bharat Mediratta) y una vez publicado el trabajo se le van sumando nuevos programadores que aportan al proyecto.

## Cronología de versiones con novedades

Gallery 1: Primera versión original de la aplicación. Soportaba colecciones de fotos de tamaño medio a pequeño.
Funciones: Integración con otras aplicaciones (CMS, Blogs, Portales) Cuadros, marcos, utilidades y otras personalizaciones.

## Estructuras organizativas/asociativas o de decisión

La organización de los proyectos de software libre pueden parecer bastante desorganizadas en principio. Sin embargo cada programador tiene su función claramente asignada para el avance del proyecto.
El caso de Gallery no es la excepción. Las decisiones importantes se toman entre los programadores principales (Mediratta, Harder y Staudacher), aunque existen líderes de proyectos para ambas versiones de Gallery.
Los medios de comunicación utilizados son los foros, lista de correo, y las reuniones semanales (aparentemente mediante IRC) cuyos apuntes de resumen se publican en el sitio web de Gallery.

## Estado Actual

De acuerdo a las propias palabras de uno de sus fundadores (Mediratta) Gallery es usado en más de 300.000 sitios en todo Internet. Es cantidad crece a razón de 200-300 por día. La calidad del software es tal que sitios como care2.com tienen alojadas 1.3 millones de fotografías. Aunque existen también sitios intermedios con 8 mil fotos (menalto.com, sitio web de Mediratta).
Actualmente los miembros principales son 20. Se tienen también 10-15 usuarios clave que son los encargados de conocer a fondo el software desde el punto de vista del uso, cientos de contribuidores menores que aportan parches y pequeños desarrollos y miles de usuarios haciendo testing continuo.

## Radiografía

Los datos presentados a continuación nos permitirán conocer un poco más del interior de Gallery v2. La evaluación presentada a continuación se realizó con la herramienta SLOCCount disponible en la plataforma GNU/Linux.
La cantidad de líneas de Gallery v2 es del entorno de las 44.000. Dicho volumen de líneas requeriría de 1 persona trabajando alrededor de 10,6 años. Según SLOCCount, la cantidad de desarrolladores simultáneos podría ser de 8, lo que reduciría el tiempo de desarrollo a 1,3 años de desarrollo.
Como se puede ver esto no coincide con los datos reales ya que el proyecto tiene alrededor de 6 años y en él han trabajado más de 8 programadores en forma simultánea. Esto se explica por las características del modelo de desarrollo del software libre.
Una vez que tenemos el tiempo necesario para desarrollar el fuente analizado y la cantidad de personas involucradas, se puede calcular fácilmente el costo que tendría una empresa privada de desarrollar este software.
El costo de desarrollo es de: 1.430.306 dólares estadounidenses.
Dicho valor se llega mediante la estimación del salario promedio de un programador en Estados Unidos (56,286 dólares al año), multiplicado por un coeficiente que simboliza el costo de todo lo que necesita un programador para realizar su trabajo. De acuerdo al modelo COCOMO ese coeficiente es de 2,4.
Datos sobre Gallery v2 :
| Página web | http://gallery.menalto.com/ |
| Fecha de Inicio | Mayo de 2000 |
| Versión actual | 2.1.2 (del 16/08/2006) |
| Líneas de código fuente | 43.823 |
| Esfuerzo de desarrollo (persona-años) | 10,59 |
| Estimación de desarrolladores en paralelo | 8 |
| Estimación de tiempo (años) | 1,31 |
| Estimación de costo | $1.430.306 dólares |
Como era razonable pensar la gran mayoría del proyecto se desarrolla en lenguajes interpretados (ya que es una aplicación WEB). En este caso el lenguaje predominante es PHP, seguido muy de lejos por shell scripting (SH) y por perl.
Datos sobre lenguajes utilizados :
| Lenguaje | Cant. líneas |
| PHP | 43.090 (98,33 %) |
| sh | 535 (1,22 %) |
| perl | 198 (0,45 %) |

## Como instalarlo

Dado que es una aplicación Web, no existe un proceso de instalación como podemos estar acostumbrados usualmente (estilo wizard en Windows o estilo ejecución de un script en Linux), la instalación se reduce a copiar los archivos del Gallery al servidor WEB para después realizar la configuración necesaria. No existen mayores diferencias entre una instalación en Windows o en Linux ya que Gallery está escrito principalmente en PHP.
La gran mayoría de los hostings proveen forma de subir archivos en forma masiva a un directorio del servidor web mediante FTP (por ejemplo). Una vez que se copió todo el contenido del Gallery a un directorio del servidor web, debemos navegar con el navegador hasta la página de instalación (/install/index.php) y allí comienza un cuestionario que nos ayuda a configurarlo.

## Descripción del código

El código está al día de hoy con las siguientes versiones estables. Para el Gallery V2 en la versión 2.1.2 y para el Gallery v1 en la versión 1.5.5-pl1 El contenido de ambas versiones es similar ya que ambos contienen los archivos (de extensión .php) y directorios que se deben copiar en el servidor web para que el Gallery funcione. Para el caso de la V2 el paquete que se puede bajar del sitio contiene los siguientes directorios:
* images (Logotipos de la aplicación)
* install (Todos los archivos necesarios para realizar la parametrización)
* lib (Librerías varias)
* modules
* themes (Temas para el cambio de apariencia)
* upgrade
Para el caso de la V1 el paquete contiene una lista bastante más extensa de directorios (y archivos) que no aporta enumerarla aquí.

## Proceso de compilación en plataformas Linux

No se aplica ya que está desarrollado en PHP.

## Últimas versiones

* Gallery v2
    2.0.4 puesta al público el 10 de marzo de 2006
    2.1.2 puesta al público el 16 de agosto de 2006
* Gallery v1
    1.5.5 puesta al público el 13 de noviembre de 2006