Friday, August 31, 2012

El problema "magenta"

Después de comprarme una EOS 550D comencé a notar que, cuando editaba fotos con zonas "quemadas", estas zonas presentaban un color magenta. Este color magenta desaparecía cuando sobreexponía la foto (por software).

El problema es el siguiente, dcraw tiene una lista de cámaras soportadas. Dentro de las muchas cosas que se definen para cada cámara soportada, está el nivel de saturación de cada uno de los sensores.

Aparentemente, había un error en el nivel de saturación correspondiente al sensor de la 550D.

Afortunadamente, el programa dcraw sugiere una manera de conocer el nivel de saturación en una foto determinada.

Buscando por internet conseguí que, aplicándo ese procedimiento a fotos tomadas con ISO 100, podías conseguir el valor "absoluto" de nivel de saturación del sensor que hizo dicha fotografía.

El nivel de saturación es la máxima cantidad de luz que puede recibir el sensor de la cámara. Más allá de este nivel, el sensor es incapaz de percibir diferencias en la luz.

Como uso ufraw para procesar mis raw y este programa utiliza dcraw, el problema me aparecía cada vez que procesaba una foto con zonas quemadas.

Con esto en mente, voy a explicar como hice para conocer el valor del nivel de saturación del sensor de la EOS 550D y que me ha funcionado hasta ahora.

Nota: Este procedimiento está realizado y probado en linux utilizando dcraw, ufraw y netpbm.


Requisitos

Para realizar este procedimiento se necesita:
  • Linux
  • ufraw (fuentes)
  • dcraw (fuentes)
  • pamsumm (viene en el paquete netpbm. En Debian esto no es así por lo que habría que bajarse las fuentes y compilarlo)
  • Una colección de archivos raw tomados con ISO 100

Procedimiento

  1. Descargarse la versión más reciente de dcraw (fuentes) y compilarla

  2. Asegurarse de tener instalado el binario pamsumm que es parte del paquete netpbm. En Debian no lo es, así que hay que bajarse las fuentes y compilarlas.

  3. Con el dcraw compilado y un archivo raw a ISO 100,  correr el siguiente comando:

    ./dcraw -D -4 -j -c archivo.raw | pamsumm -max


  4. Este comando debería mostrar un mensaje como el siguiente:

    "the maximum of all samples is 13584"

    Este es el valor del nivel de saturación. Su equivalente hexadecimal es lo que tenemos que colocar en el archivo dcraw.cc en las fuentes de urfaw.


  5. En el archivo dcraw.cc de las fuentes de ufraw, reemplazar la línea
    { "Canon EOS 550D", 0, 0x3dd7, { 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 } },

    por la línea

    { "Canon EOS 550D", 0, 0x3510, { 6941,-1164,-857,-3825,11597,2534,-416,1540,6039 } },

    El valor 0x3510 es el equivalente hexadecimal de 13584.



  6. Compilar ufraw y hacer las pruebas

Friday, April 20, 2012

Configurar sendmail para que use a Gmail como smarthost con Debian Wheezy

Recientemente monté un "servidor multimedia" en la casa, básicamente una laptop vieja con debian Wheezy para utilizarla como servidor NAS y DLNA. Fue entonces cuando me surgió la idea de utilizar el SMTP de gmail como smarthost y de esa manera, todos los correos que se generen en el "servidor multimedia" saldrían por gmail ya que la mayoría de los ISP's colocan deliberadamente las IP's de los clientes en las listas negras de spam.

El procedimiento que explico lo realicé utilizando todo "out of the box", así que debería ser de muy fácil mantenimiento (debian way).

Elementos de software que utilicé
Distribución: Debian Wheezy
Sendmail: 8.14.4-2
sasl2-bin: 2.1.25.dfsg1-4
libsasl2-2: 2.1.25.dfsg1-4
libsasl2-modules: 2.1.25.dfsg1-4

Nota: Si falta algún otro paquete, por favor decirlo. No recuerdo si sendmail ya instala las librerías sasl.


Configuración

  1. Hacer un respaldo del /etc/mail/sendmail.mc

  2. Editar el /etc/mail/sendmail.conf y colocar MSP_MODE="None"

  3. Editar el /etc/sendmail.mc y colocar toda la sección de "Default Mailer setup" al final del archivo.

  4. Añadir la siguiente sección antes de "Masquerading options"


    dnl ###################################
    dnl # Comienzo pruebas de gmail
    dnl #
    dnl #
    dnl # Soporte para TLS (para pruebas de gmail)
    dnl #
    include(`/etc/mail/tls/starttls.m4')dnl
    dnl #
    dnl #
    dnl #
    define(`SMART_HOST',`smtp.gmail.com')dnl
    define(`RELAY_MAILER_ARGS',`TCP $h 587')dnl
    define(`ESMTP_MAILER_ARGS',`TCP $h 587')dnl
    FEATURE(`authinfo', `hash /etc/mail/client-info-gmail.db')dnl
    define(`confAUTH_MECHANISMS',`EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
    TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
    dnl #
    dnl #
    dnl # Fin de pruebas de gmail
    dnl ##################################


    Nota: Cuidado al copiar esto ya que aveces las comillas se malinterpretan. Yo recomiendo copiar secciones del .mc y luego editarlas para evitar problemas. Dicho queda.



  5. Editar el archivo (nuevo) /etc/mail/client-info-gmail y colocar la siguiente información:

    AuthInfo:smtp.gmail.com "U:root" "I:usuario@gmail.com" "P:password" "M:LOGIN PLAIN"
    AuthInfo:smtp.gmail.com:587 "U:root" "I:usuario@gmail.com" "P:password" “M:LOGIN PLAIN"

    Nota: Cuidado al copiar las comillas dobles, mejor hacerlo a mano, sendmail puede no entenderlas bien y el servidor de gmail nos mostrará un error diciendo "530-5.5.1 Authentication Required".

    Nota 2: Cada "AuthInfo" es una sola línea

  6. Hacer el mapa con el siguiente comando:
    makemap -r hash client-info-gmail.db < client-info-gmail

  7. Asegurarse de que saslauthd está arrancado (si no, arrancarlo) y verificar que arranque en el inicio (update-rc.d saslauthd defaults).

  8. Ejecutar sendmailconfig y verificar que no salga ningún error.

  9. Ejecutar update-rc.d sendmail defaults para que arranque en el inicio.


Eso debería ser todo, solo queda probar.