• Une page se tourne...

    Je viens de finir mon rapport de stage en anglais !

    I just finished my internship report in english ! 🙂

    desmon_a-roguelink.pdf

  • Business::OnlinePayment::PayPal

    Here is a Perl module I wrote providing a Business::OnlinePayment interface for PayPal. It uses Business::PayPal::API for doing PayPal DirectPayments (using credit cards) so it’s transparent for the end-user that will not even now that we use PayPal. It should be used with Freeside (Open-source billing software and outsourced billing services for ISPs) but I used it only with the paypal sandbox so it might need some adjustements.

    package Business::OnlinePayment::PayPal;
    
    use strict;
    use warnings;
    use Carp;
    use Business::OnlinePayment;
    use Data::Dumper;
    use Business::PayPal::API qw(DirectPayments);
    
    our @ISA = qw(Business::OnlinePayment);
    our @EXPORT = qw();
    our @EXPORT_OK = qw();
    our $VERSION = '0.1';
    
    # Since there's no standard format for expiration dates, we try to do our best
    # (copied from Business::OnlinePayment::InternetSecure
    
    sub parse_expdate {
            my ($self, $str) = @_;
    
            my ($y, $m);
            if ($str =~ /^(\d{4})\W(\d{1,2})$/ ||# YYYY.MM  or  YYYY-M
                $str =~ /^(\d\d)\W(\d)$/ ||# YY/M  or  YY-M
                $str =~ /^(\d\d)[.-](\d\d)$/) {# YY-MM
                    ($y, $m) = ($1, $2);
            } elsif ($str =~ /^(\d{1,2})\W(\d{4})$/ ||# MM-YYYY  or  M/YYYY
                     $str =~ /^(\d)\W(\d\d)$/ ||# M/YY  or  M-YY
                     $str =~ /^(\d\d)\/?(\d\d)$/) {# MM/YY  or  MMYY
                    ($y, $m) = ($2, $1);
            } else {
                    croak "Unable to parse expiration date";
            }
    
            $y += 2000 if $y content();
            my $pp = new Business::PayPal::API
              ( Username   => $content{login},
                Password   => $content{password},
                Signature  => $self->signature,
               sandbox    => $self->test_transaction());
                );
            my ($y, $m) = $self->parse_expdate($content{expiration});
            warn Dumper \%content;
            my %response = $pp->DoDirectPaymentRequest ( PaymentAction => 'Sale',
                                                         OrderTotal => $content{amount},
                                                         CreditCardType => $content{type},
                                                         CreditCardNumber => $content{card_number},
                                                         ExpMonth => $m,
                                                         ExpYear => $y,
                                                         CVV2 => '123',
                                                         FirstName => $content{first_name},
                                                         LastName => $content{last_name},
                                                         Street1 => $content{address},
                                                         CityName => $content{city},
                                                         StateOrProvince => $content{state},
                                                         PostalCode => $content{zip},
                                                         Country => 'US',
                                                         Payer => $content{email},
                                                         CurrencyID => 'USD',
                                                         IPAddress => '127.0.0.1',
                                                         );
            unless ($response{Ack} ne 'Success' ) {
                for my $error ( @{$response{Errors}} ) {
                    warn "Error: " . $error->{LongMessage} . "\n";
                }
            }
            $self->authorization($response{TransactionID});
            $self->is_success(1);
    }
    
    1;
    
    __END__
    
    
    =head1 NAME
    
      Business::OnlinePayment::PayPal - PayPal backend for Business::OnlinePayment
    
    =head1 SYNOPSIS
    
      use Business::OnlinePayment;
    
      my $transaction = new Business::OnlinePayment(PayPal,
                                            signature => 'BiPC9PjkCyDFQXbSkoZ...'
                                    );
    
    =cut
    
  • Crater Lake (le retour)

    Cette fois je vais essayer d’être un peu plus prolixe que pour Lava Beds (bien que Lionel était la pour rattraper le coup avec son histoire de piraniania…).

    Crater Lake c’est comme, vous pouviez un peu vous en douter, un lac dans un cratère. « Tu connais pas comme cratère ? ». J’y étais déjà allé en Mars mais on avait vite du faire demi-tour à cause de la météo. Cette fois la température était ni trop tiède ni pas assez. C’était donc impecable pour cette petite promenade dominicale d’environ 3 heures autour du cratère (où du lac :-)).

    Crater Lake est le 7eme lac le plus profond du monde et le plus profond des Etats-Unis (597 mètres). Il culmine à 2100 mètres. Ces conditions combinées à la pureté de son eau donnent ce bleu intense. Il est tellement clair qu’il est possible de voir des objets à 30 mètres de profondeur à l’œil nu.

    Voila pour les détails techniques. C’est vrai que c’est beau en tout cas ! Regardez plutot

    « Ça glissait sa mère » avec mes baskets et ces petits gravillions. Ça donne pas trop envie de tomber hein ?

    Ici, du bleu avec un peu de vert

    Ici, du bleu

    Ici, du bleu avec un peu de marron

    Quand on regarde à l’exterieur on se rend compte qu’on est en altitude

    Un bonhomme de neige est passé par la 🙂

    Moi. Je suis beau.

    Dans ces zones la il n’y a même plus la radio. J’ai donc été privé de country music pendant près de deux heures sur les cinqs du trajet aller-retour.

  • Lionel 6 ans nous parle de...

  • Lava Beds National Monument

    Petite excursion touristique ce week-end au parc de Lava Beds en Californie à 3h de route de Grants Pass. Voila ma sélection de photos :

    Ce lac la, il faut le voir pour y croire 🙂

    Toutes les photos sont ici

  • How to feed Bogofilter with ham and spam thanks to IMP

    Here is a little, but very efficient, script that feed bogofilter with ham (non-spam). Every mail coming from someone in any address book of the IMP webmail will be considered as ham (check that you add automatically people in address books when sending mail to those people from the webmail). For the spam you can use the « report as spam » functionnality in IMP.

    <pre style="background-color: #eee;overflow: auto;border-radius: 10px;padding: 0.5em;-moz-border-radius: 10px;display: block;border: 1px solid #bbb; width:500px;font-size: 85%">#!/usr/bin/perl
    
    use Mail::Audit;
    use DBI;
    use POSIX qw(tmpnam);
    
    my $dbh = DBI->connect("dbi:SQLite2:dbname=/var/horde/db");
    my $mail = Mail::Audit->new();
    
    $mail->noexit(1);
    if (my ($email) = ($mail->from =~ /([^\s]*)/)) {
        my $sth = $dbh->prepare("SELECT count(*) FROM ".
                  "turba_objects WHERE LOWER(object_email)=?");
        $sth->bind_param(1, lc($email));
        $sth->execute;
        if (($sth->fetchrow)) {
            $mail->pipe("/usr/bin/bogofilter -n -l");
            $mail->pipe("/usr/sbin/sendmail -i @ARGV");
            exit;
        }
    }
    
    my $tmp = tmpnam();
    $mail->pipe("/usr/bin/bogofilter -l -p -O " . $tmp .
           " || /usr/sbin/sendmail -i @ARGV 
    <p>With postfix you can edit /etc/postfix/master.cf :</p>
    <pre style="background-color: #eee;overflow: auto;border-radius: 10px;padding: 0.5em;-moz-border-radius: 10px;display: block;border: 1px solid #bbb; width:500px;font-size: 85%">smtp inet n - - - - smtpd -o content_filter=filter:
    filter unix - n n - - pipe
     flags=R user=filter argv=/opt/postfix-filter.pl -f ${sender} -- ${recipient}
    
    
  • Vulture 1.91

    One month after the last version of my own branch of Vulture. Here is the 1.91 thanks to a lot more contributors this time :

    • Debian packaging (thanks to Oeufdure)
    • Suffix and prefix for SSO forward profile variables
    • URL attribute name (optional) in LDAP and SQL
    • Translation updates
    • Fedora directory server support

    You can download it here. Comments and feature requests are more than welcome. Screenshots are also available.

  • Adsutil et mkw3site sont vos amis

    C:\

    Quelle joie de trouver des scripts sous Windows. Avec un .bat j’ai pu créer plusieurs centaines de sites automatiquement avec mkw3site et changer la page par défaut avec adsutil (IIS 5 ou inférieur uniquement) : http://www.microsoft.com/technet/…

  • American dream

    J’avais tout dessus ! Sur ce petit bout de mémoire, toutes mes photos de Seattle, écrasées par une voiture (c’est toujours mieux que volées et c’était uniquement le memory stick). J’avais toute la panoplie du touriste à Seattle : Pike place Market, la ville vue depuis les ferries avec space needle et les buildings. J’avais même d’autres photos plus originales comme celles des écrans plats au dessus des urinoires dans un restaurant de Bremerton (une ville voisine de Seattle accessible en Ferrie). But it was fun anyway…

    A l’aller, l’avion a attérit seulement 5mn avant le départ de ma correspondance. Je ne m’en étais même pas rendu compte. Eh ben même pas le temps de stresser ! L’hotesse appelle Mister Desmons pour qu’on l’escorte jusqu’à son avion directement. Ça change de la SNCF 🙂

    Au retour, dans l’avion, mon voisin commence à me parler et fini par me donner sa carte et me propose de venir bosser dans la boite d’ingéniérie civile (spécialisée dans l’étude pour les pipelines d’essence) dont il est vice président. Un domaine porteur selon lui avec l’escalade du prix du pétrole. 🙂

    Walla walla

  • C'est peut être un détail pour vous...

    Aujourd’hui, pour la première fois depuis 3 mois. J’ai réussi à épeler mon nom au Mac Donald (ça permet d’être appelé quand c’est prét). J’ai d’habitude toujours un problème avec le R. Le pire que j’ai eu est Alanoe (j’ai gardé le ticket). La dernière fois je m’étais même fait passer pour John !

  • Stone Ridge

    Il pleuvait depuis plus d’une semaine, la météo ne prédisait rien de bon pour ce week-end et pourtant… J’ai pu aller jouer au golf de Stone Ridge à Medford avec deux autres Américains. Le parcours était un tout petit peu en dessous de celui de Grants Pass, je trouve, mais au moins cette fois j’avais mon appareil photo :


    Près des lacs on entendait les bull frog. Ce n’est pas que pour leur taille qu’on les appelle comme ça mais aussi pour leurs beuglements. Beaucoup de Hérons aussi, comme à Grants Pass, certainement justement à cause des grenouilles. C’était la minute Hushaïa Nature et vous vous en fichez, vous n’aviez qu’à pas cliquer !


    Le mont McLoughlin au loin


    Ces américains ne loupent pas une occasion de faire de la pub…

    Le truc cool ici : la « beverage girl » qui circule avec sa voiturette pour distribuer des rafraichissements. On a pris quelques bières. Ça, avec les megots de cigares un peu partout « it was such a cliché » ! J’avais des pompes classiques (sans clous) ce qui m’a causé une petite douleur à la hanche (pense vraiment qu’à se plaindre celui la). J’ai bien joué en fait et c’était vraiment sympa.

    Pour conclure à la Nicolas Hulot je dirais juste, tsssssssshhtt, rendez-vous le week-end prochain pour de nouvelles aventures à Seattle !

    PS : Je viens de compter, je n’aurai que 2 jours fériés pendant mon stage aux USA contre 6 pour vous en France 🙁 (http://www.amb-usa.fr/ambassade/jferies.htm) !

  • VultureNG 1.90 patch #2

    Already… I know… But it’s pretty tested now (I mean, by other people than me ;-))

    Go to the download page or use the patch.
    A new branch is now on freshmeat.net : http://freshmeat.net/branches/64805/
    The roadmap is now :

    • Include oeufdure’s patches
    • Translate the documentation
    • Get a debian package