sábado, 22 de junio de 2013

OpenShot

Descubrí este editor de video por casualidad, mirando la grilla de charlas del FISL. Parece una buena opción para editar videos caseros. Algunas características destacables:
  • soporta multiples formatos de video, con asistencia de ffmpeg
  • multiples pistas
  • permite cortar y rescalar clips
  • transiciones
  • titulos
  • edicion y mezcal de audio
De lo que se ve en el sitio, la interfase de grafica es clara, bien terminada.Hay paquetes armados para varias distribuciones. Otro paquete que me anoto para probar. 

Una actualizacion de Moodle que se complicó

Unos meses atrás, encaré actualizar un servidor Moodle 1.9 con MySQL 5.1 a la versión 2.0. Seguí el procedimiento que postee en el blog.

Terminé la instalación procedi a configurar Moodle. Encuentro con un error de base de datos:
El mensaje de error hacia referencia al collation de dos tablas. Desde la consola, corrí un show table status. Había tablas con distintos collation. Decidí convertir las tablas a UTF-8, con collate utf8_unicode_ci. Utilice el siguiente alter table:

ALTER TABLE database.table CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; 

Como tenia que cambiar mas de 250 tablas, generé un script ad-hoc, partiendo de la salida del show tables, generando las sentencias SQL con AWK. Yo elegí como charset UTF-8, pero la receta aplica para cualquier combinación razonable de charset y collate.

sábado, 15 de junio de 2013

Lentes Radioactivos

Tengo unos cuantos lentes "Rosca pentax", que utilizo con mis reflex. Hace un tiempo escribí sobre las características de esta montura.

En foros donde se comenta sobre estos lentes, y otros producidos en los años 40 y 80 del siglo XX,  es frecuente encontrar referencias a "lentes radioactivos". Hacen referencia a que muchos de esos lentes cuentan con ópticas que contienen óxido de torio. Esta formulación mejora la transmisión de la luz. Como contrapartida, los lentes emiten radiación.

Esas emisiones pueden ser peligrosas, en un uso continuado de los lentes. No suele ser el caso de los fotógrafos aficionados.  Hay artículos que hablan de hasta una hora diaria de uso, sin riesgos para la salud.

En camerapedia hay un buen articulo (en ingles) que lista muchos lentes reportados como "radioactivos".  De los que tengo yo, el mas destacado es mi Pentax Super Takumar 50mm f/1.4.
Pentax Spotmatic con Lente 50 mm f/1.4
Pentax Spotmatic con Lente 50 mm f/1.4


martes, 11 de junio de 2013

Un año del BLOG

En el pasado mes de Mayo el blog cumplió su primer año de vida. Nace como una inquietud de incursionar en algo que no había hecho con anterioridad. Con el propósito adicional de ser un repositorio de conocimiento que he adquirido, o desarrollado, en mi trabajo. Con la esperanza de que este conocimiento le allane el camino a otros. También hay lugar para mis otros intereses, por ahora solo he publicado de fotografía.

He visto crecer el trafico a lo largo de los meses. Es un tráfico modesto, me hace acordar a Sanchez Padilla  y sus ocho espectadores. Algunas entrada me a sorprendido, por la cantidad de trafico generado, como la de Eloy Yerle.

No le dedico al blog lo que me gustaría, pero no quería pasar por alto esta fecha.


sábado, 8 de junio de 2013

ImapCreate - Administracion de casillas en Cyrus IMAP

Este script facilita el alta de casillas en servidores IMAP, basados en Cyrus  IMAP. Hace varios años le hice alguna modificación, esta funcionando en varios sitios. 

No existe un repositorio central para el mismo, lo dejo acá. La ventaja de usar este script, frente a cyradm, para crear casillas esta en que fue pensado para ser utilizado desde scripts. Esta programado en PERL, utilizando las APIs de Cyrus. Crea la casilla, carpetas adicionales y fija la cuota de disco del usuario.

#!/usr/bin/perl -w
#
# imapcreate: create IMAP mailboxes with quotas
#            Reads user names from standard input.
# Originally found on http://cyrus-utils.sourceforge.net
# ©2001 Garry Mills
#
# Enhanced by Clement "nodens" Hermann <clement.hermann@free.fr>
# Minor enhacements by Andres Tarallo <atarallo@gmail.com>
#
# I'd like to consider this as GPL'd (cf www.gnu.org), but won't add any
# copyright without the original author's consent.
# last modification : 2005/11/03
# Changes :
# 2005/11/03 - Added the posibility to create specific folders.
# 2005/04/19 - Added non-0 exit code on error or warning.
# 2005/03/31 - Finally found out the original author's name.
# 2004/11/23 - removed LOGIN as a default mech, now use cyrus' default
# - Added --auth option to specify mech
#
# TODO : fix STDIN collision when reading password AND mailboxes name from STDIN
#
use Getopt::Long;
use Cyrus::IMAP::Admin;
#use strict;

# CLI options
my ($debug, $user, $pass, $quota, @part, $useunixhierarchy, @mailboxes, @folders, $delete, $cyrus, $authmech);

sub usage {
    print "imapcreate - create IMAP mailboxes with quotas\n";
   print " usage:\n";
    print " imapcreate [-d] [-u user] [--auth mechanism] [-p pass] [-m     mailbox1[,mailbox2] />[,mailbox]] [-q quota] [-t partition:list]\n";
    print " [-f folder1[,folder2][,folder][-s] [-v] \n";
    print "\n";
    print "if -s is set, we'll use the unix hierarchy separator (see imapd.conf(1))\n";
    print "if -d is set, we'll delete mailboxes instead of creating them\n";
   print "You can use M or ,m to specify quotas. e.g. 10M. By default,\n";
    print "the quota is expressed in Kbytes.\n";
   print "If no password is submitted with -p, we'll prompt for one.\n";
   print "if no mailbox name is specified with -m, read user names from standard input\n";
   print "if -v is set, we'll run in debug mode, and print information on stdout\n";
    print "\n";
    print "The default mechanism is used for authentication. If you need another\nmechanism, (try LOGIN), use --auth option\n";
    print "\n";
    print " example: \n";
    print " imapcreate -u cyradm -m foo,bar,joe -q 50000 -t p1:p2  mail.testing.umanitoba.ca\n";
   print "\n";
   exit 0;
}

# Create a mailbox... usage : &CreateMailBox(user,partition[,quota]).
# You have to be authentified already. We use "$cyrus" as the connection name.
# partition can be 'default'
sub CreateMailBox {
   my $mbuser = $_[0];
   my $mbpart = $_[1];
   my $mbquota = $_[2];
   my $retval = 0;

   print "Creating $mbuser on $mbpart\n" if $debug;
   if ($mbpart eq 'default') {
      $cyrus->createmailbox($mbuser);
   } else {
      $cyrus->createmailbox($mbuser, $mbpart);
   }
   if ($cyrus->error) {
      warn $cyrus->error;
      $retval = 1;
   }

# Set the quota
   if ($mbquota){
      print "Setting quota for $mbuser to $mbquota\n" if $debug
      $cyrus->setquota($mbuser, 'STORAGE', $mbquota);
      if ($cyrus->error) {
         warn $cyrus->error;
         $retval = 1;
      }
   }
   return $retval;
}

# Create a Folder. Usage: &CreateFolder($folder, $part)
sub CreateFolder {
   my $folder = $_[0];
   my $mbpart = $_[1];
   my $retval = 0;

   print "Creating $folder on $mbpart\n" if $debug;
   if ($folder eq 'default') {
      $cyrus->createmailbox($folder);
   } else {
      $cyrus->createmailbox($folder, $mbpart);
   }
   if ($cyrus->error) {
      warn $cyrus->error;
      $retval = 1;
   }
   return $retval;
}

# Delete a mailbox. Usage: &DeleteMailBox($user)
# Assuming we use $user as the admin.
sub DeleteMailbox {
    my $mbuser = $_[0];
    my $delacl = "c";
    my $retval = 0;

    print "Deleting $mbuser\n" if $debug;
    $cyrus->setaclmailbox($mbuser, $user, $delacl);
    $cyrus->deletemailbox($mbuser);
    if ($cyrus->error) {
       warn $cyrus->error;
       $retval = 1;
    }
    return $retval;
}

GetOptions( "d|delete" => \$delete,
    "u|user=s" => \$user,
    "auth=s" => \$authmech,
    "p|pass=s" => \$pass,
    "f|folders=s" => \@folders,
    "m|mailboxes=s" => \@mailboxes,
    "q|quota=s" => \$quota,
    "s|UnixHierarchy" => \$useunixhierarchy,
    "t|part=s" => \@part,
    "v|verbose" => \$debug );

@part = split(/:/, join(':', @part));
push @part, 'default' unless @part;
my $pn = 0;
@mailboxes = split(/,/, join(',', @mailboxes));
@folders = split(/,/, join(',', @folders));
my $server = shift(@ARGV) if (@ARGV);

usage unless $server;

# quotas formatting:
if ($quota) {
   if ($quota =~ /^(\d+)([mk]?)$/i) {
      my $numb = $1;
      my $letter = $2;
      if ($letter =~ /^m$/i) {
         $quota = $numb * 1024;
         print "debug: quota=$quota\n" if $debug;
      } elsif ($letter =~ /^k$/i) {
         $quota = $numb;
         print "debug: quota=$quota\n" if $debug;
      } else {
         die "malformed quota: $quota (must be at least one digit eventually followed by m, M, k or K\n";
      }
  } else {
      die "malformed quota: $quota (must be at least one digit eventually followed by m, M, k or K\n";
  }
}

# Authenticate
$cyrus = Cyrus::IMAP::Admin->new($server);
die "Can't connect to $server\n" if ( ! (defined $cyrus) );
if ($authmech) {
    $cyrus->authenticate(-mechanism => $authmech,
       -user => $user,
       -password => $pass);
} else {
    $cyrus->authenticate(
       -user => $user,
       -password => $pass);
}
die $cyrus->error if $cyrus->error;
# if there isn't any mailbox defined yet, get them from standard input
if (! (defined $mailboxes[0])) {
# For all users
   while (<>) {
      chomp;
      my $mbox = $_;
      push @mailboxes, $mbox;
   }
}
# create/delete mailboxes for each user
my $return = 0;
foreach my $mailbox (@mailboxes) {
   my $username = $mailbox;
   if ($useunixhierarchy) {
      $mailbox = 'user/' . $mailbox;
   } else {
        $mailbox = 'user.' . $mailbox;
   }
   if ($delete) {
       my $retval = 0;
      # We should delete childrens
      if (defined $folders[0]) {
         foreach my $folder (@folders) {
            my $f;
            if ($useunixhierarchy) {
               $f = $mailbox.'/'.$folder;
            } else {
              $f = $mailbox.'.'.$folder;
            }
            $retval = &DeleteMailbox($f);
         }
      }
# Finally we delete the Mailbox
     $retval = &DeleteMailbox($mailbox);
     $return = $retval if ($retval != 0);
   } else {
# Select the partition
     my $pt = $part[$pn];
     $pn += 1;
     $pn = 0 unless $pn < @part;
     my $retval = &CreateMailBox($mailbox,$pt,$quota);
     # Creation of aditional Folders.
     if ($retval == 0 && (defined $folders[0]) ) {
        foreach my $folder (@folders) {
           my $f;
           if ($useunixhierarchy) {
              $f = $mailbox.'/'.$folder;
           } else {
              $f = $mailbox.'.'.$folder;
           }
           $retval = &CreateFolder($f,$pt);
           last if $retval;
        }
     }
# We've created the mailbox and eventually aditional folders.
    if ($retval == 0 ) {
       my @acl;
       $cyrus->setacl($mailbox, 'cyrus' => "all");
       $cyrus->setacl($mailbox, $username => "all");
    }
    $return = $retval if ($retval != 0);
  }
}
exit $return;