Demrit

Miguel Vazquez Gocobachi



Hacks

  • Mail body decoded

    Una manera funcional de obtener el body de un mensaje de correo que quizá quiera ser analizado para otras tareas es la siguiente manera. Cabe aclarar que es una solución que generé por necesidad, claro esta, puede ser mejorado inclusive con mucho menos código... aunque, por el momento es útil para adaptarlo a nuestras aplicaciones.
    use strict;
    use Mail::Message;
    use HTML::Entities;
    my $rfc2822 = "";
    {local $/; $rfc2822 = <STDIN>;}
    sub getBody
    {
        my $data = shift;
        my $ret  = '';
        my $type = 'plain';
        my $obj  = Mail::Message->read($data->{mail});
        my $body = $obj->body;
        if ($body->isMultipart) {
            $type = 'html';
            my @matches = $body->decoded->string =~ m/charset=\"PERL\"\n{2}(.*?)--(?:[0-9a-zA-Z]+)/gsc;
            $ret  = encode_entities($matches[1]);
            $ret =~ s/^\s//;
            $ret =~ s/\s$//;
            $ret =~ s/^\n//;
            $ret =~ s/\n$//;
            $ret =~ s/\n\s*\n/<wbr \/>/g;
            $ret =~ s/\n/ /g;
            $ret =~ s/<wbr \/>/\n/g;
        } else {
            $ret = encode_entities($body->decoded->string);
        }
        $ret =~ s/& lt;/</g;
        $ret =~ s/& gt;/>/g;
        $ret =~ s/& quot;/"/g;
        $ret =~ s/& amp;quot;/& quot;/g;
        $ret =~ s/& amp;nbsp;/& nbsp;/g;
        my $result = {body => $ret, type => $type};
        return $result;
    }

    print getBody({mail => $rfc2822});
     
    Simple y funcional, si tienes una idea mejor por favor compartela face-smile.png
    Happy hacking!
  • Subject encoding

    Una manera simple y sencilla de decodificar un subject cuando estamos trabajando con mensajes de correo es de la siguiente manera. Aunque, en este ejemplo se utiliza el package Email::Simple se puede utilizar Mail::Message u otro.
    use strict;
    use Email::Simple;
    use Encode qw(decode);
    use HTML::Entities;
    my $msg = "";
    {
        local $/ = undef;
        $msg     = <STDIN>;
    }

    my $email    = Email::Simple->new($msg);
    my $subject  = decode('MIME-Header', $email->header('subject'));
    $subject = encode_entities($subject);
    print $subject, "\n";
     
    Muy simple y lo que es mejor, funcional. Me ha sacado de un gran problema. Pronto publicaré una forma sencilla de obtener el body del mensaje ya con su codificación interpretada.
  • ¿Cómo tener autoincrement en PostgreSQL?

    Este es un punto interesante, si utilizas MySQL y en cierto momento te ves obligado a usar PostgreSQL o simplemente por gusto te encontraras con algunas diferencias ligeramente importantes, una de ellas es el autoincrement que manejas en MySQL y que en PostgreSQL requieres hacer algo diferente face-smile.png
    Hay dos maneras de utilizar esta funcionalidad en PostgreSQL, la primera es crear una secuencia y la tabla, y la otra es asignarle directamente el tipo al campo de la tabla. En el ejemplo la tabla se llama "foo".
    1.- Creando la secuencia y la tabla
    CREATE SEQUENCE foo_id_seq;
    CREATE  TABLE foo (
        id integer DEFAULT  NEXTVAL('foo_id_seq') NOT  NULL,
        name character varying(8)  NOT  NULL
    );
     
    2.- Creando la tabla con el tipo "serial" para el campo "id".
    CREATE  TABLE foo (
        id serial,
        name character varying(8)  NOT  NULL
    );
     
    Interesante, ¿verdad? face-smile-big.png
  • Trim en Perl


    Muchas veces he utilizado la función trim() en PHP para eliminar espacios al principio y final de una linea. Esto se vuelve un problema cuando deseas hacer lo mismo en Perl, ¿por qué? Porque no existe función en perl que haga tal cosa, asi que aquí tenemos un ejemplo de como implementarlo en nuestras aplicaciones de Perl.
    sub trim {
        my  $str = shift;
        $str =~ s/^\s+//;
        $str =~ s/\s+$//;
        return  $str;
    }
     
    Y su uso es tan simple como lo siguiente:
    my  $string = trim(' Foo bar ');
     
    Happy hacking!
  • Serialización en Perl


    Una de las cosas que utilizo con mayor frecuencia es la serialización de datos en PHP. Ahora, trabajando con Perl he decidido utilizar dicha funcionalidad para el almacenamiento de cierta información en un sistema Web, así que utilizando el grandioso CPAN he obtenido el módulo correspondiente.
    Para poder serializar datos es necesario contar con el modulo PHP::Serialization, el cual puede ser instalado por medio del shell de perl para CPAN. A continuación, un sencillo ejemplo de su uso:
    use strict;
    use PHP::Serialization  qw(serialize unserialize);
    my  $serialized   = serialize({a => [1,2,3], b => 5});
    my  $deserialized = deserialize($serialized);
    print  $deserialized->{b};
     
    Su uso es muy simple, asi se que solo basta almacenar la información de $serialized en un campo text de SQL.

Calendario del Blog

Marzo 2010
Dom Lun Mar Mie Jue Vie Sab
28 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
rss
atom