Ar VILIBOR fiktyvus: ką sako forvardai?

Berods dar vasarą su anarchistu diskutavome šia tema. Iš tiesų, 6 mėnesių VILIBOR palūkanų norma gali pasirodyti „fiktyvi“, mat bankai tarpusavyje nesudaro jokių sandorių tokiai trukmei. Tačiau bent jau teoriškai VILIBOR galima išvesti iš euro/lito forvardų kainų. Nežinau, kiek euro/lito 6 mėnesių forvardai (t.y. sandoriai pakeisti eurus ir litus sutarta kaina po 6 mėnesių) yra likvidūs, bet esu tikras, jog ši rinka turėtų būti gilesnė nei „fiktyvus“ VILIBOR.

Forwardų kainą galima apskaičiuoti pagal formulę:

Forvardo kaina = dabartinis kursas + palūkanų skirtumas
Forvardo kaina = dabartinis kursas + palūkanų skirtumas

Ši formulė reiškia, jog Euro/lito keitimo kursas po 6 mėnesių turėtų būti tie patys 3,4528 plius palūkanų skirtumas tarp litinių (VILIBOR) ir eurinių (EURIBOR) palūkanų: mat jei turiu litus, tai uždirbu daugiau kam nors juos paskolinęs, nei jei turėčiau eurus, o šis skirtumas forvardo kurse turėtų būti kompensuojamas, kad nebūtų arbitražo galimybių.

Išsitraukus forvardų kainas bei EURIBOR istoriją iš Bloombergo, galima paskaičiuoti teorinį 6 mėnesių VILIBOR. Lyginant su tikruoju VILIBOR, gavau tokį grafiką:

VILIBOR vs teorinis VILIBOR
VILIBOR vs teorinis VILIBOR

Iš tiesų, VILIBOR, skaičiuotas iš forvardų (raudona kreivė, implied VILIBOR), labai artimai atkartoja tikrąjį VILIBOR. Tad gal tas VILIBOR ir nėra toks „fiktyvus“, kaip kad bandoma teigti.

Atnaujinimas: Šališkas stebėtojas iš dienoraščio nematomaranka.lt pastebėjo klaidą: paveikslėlyje buvo sumaišyti VILIBOR ir implied VILIBOR kreivių pavadinimai. Apgailestauju dėl tokio žioplo neapsižiūrėjimo. Esminių išvadų tai nekeičia – VILIBOR iš esmės atkartoja iš forvardų išvedamas palūkanų normas.

Pasakojimas apie rinkas investuotojų asociacijoje

Vakar investuotojų asociacija paprašė pakalbėti apie tai, ką manau apie rinkas. Kadangi prašė kalbėti daugiau apie pasualio rinkas, tai apsiribojau JAV, ir dariau prielaidą, jog ji atsigaus tik tuomet, kai atsigaus JAV vartotojai. Bet jie kol kas pinigų neturi, nes didėja nedarbas, paskolų aptarnavimui reikia skirti vis dar skirti rekordiškai didelę pajamų dalį (mat skolų yra labai daug, tad net sumažintos palūkanos leidžia tik ribotai atsikvėpti), o net ir tie, kurie vis dar turi darbus ir nedaug skolų yra linkę taupyti (taupymo lygis šovė į viršų). Kol kas dar vienareikšmiškai pasakyti ar verta pirkti akcijas sunku, mat neaišku, ar ekonomikos atsigavimas jau užuodžiamas. O akcijos kainuoja tiek, lyg jau atsigavimas būtų už kampo. Prisegu savo pristatymo skaidres.

Dave Hitz: How to Castrate a Bull

Puiki trumpa, juokinga, bei įžvalgi knyga apie vadybą (ir šiek tiek apie raguočių priežiūrą). Dave Hitz joje pasakoja apie kompanijos NetApp, kuri užsiima duomenų saugojimo sprendimais, kūrimą ir evoliuciją, nors joje galima rasti ir visiškai nesusijusių su šios kompanijos istorija pasakojimų: tiesiog smagi minčių ir pamąstymų mišrainė, kurią gardžiai galima „suvalgyti“ per keletą valandų.

Ypač man buvo įdomu paskaityti apie itin spartaus kompanijos NetApp augimo laikus: keletą metų iš eilės padvigubėjančią kompaniją nelengva suvaldyti. Neišvengiamai didėjant kompanijos darbuotojų skaičiui, ji nebegali išlikti tokia pat neformali, joje turi atsirasti procedūros, ją valdyti turi pradėti kiti žmonės, kurie turi didelių kompanijų valdymo sugebėjimų. Bet tuo pačiu reikia vadovautis sveiku protu ir stengtis išlaikyti kompanijos darbuotojų motyvaciją, kas gali būti nelengva.

Kompanijai augant, turi augti ir jos vertybės. Autorius pasakoja istoriją, kaip kompanijos gyvavimo pradžioje (tuo metu dirbo gal 20 darbuotojų) vienas inžinierius netyčia vėlai pasilikęs darbe sulaukė kliento skambučio, apie tai, jog klientui iškilo problema. Tuomet šis inžinierius pats nuėjo į gamybos cechą, paėmė nuo konvejerio serverį ir nuvežė jį pas klientą į kitą miestą, kur naktį jam viską sukonfigūravo ir iki ryto išsprendė problemą. Savaime suprantama, tokiu darbuotoju galima didžiuotis – tai net nebuvo jo darbas. Bet tokie herojai visiškai nereikalingi kai kompanijoje dirba 5 tūkstančių žmonių – tikrai niekas nenori kad koks nors inžinierius po darbo savo iniciatyva brautųsi į gamybos skyrių. Kai kompanija subręsta, jos elgesys keičiasi.

Knygoje Hitz rašo ir apie tai, kaip vadovauti žmonėms, juos rinktis ir juos motyvuoti, kas yra kompanijos vertybės (tai toks sąrašas dalykų, kuriuos priminęs bet kuris kompanijos darbuotojas gali realiai užginčyti bet kokį vadovo sprendimą: „taip daryti negalime, nes tai prieštarauja mūsų vertybėms“ – ir daugiau jokių diskusijų), kaip bendrauti su inžinieriais ir ko iš tiesų reikia klientams (dažniausiai, kad išspręstum jų problemą, o ne kokios nors konkrečios technologijos – pats pamenu, jog būdamas programuotoju dažnai įkrisdavau į šią mąstymo duobę).

Rekomenduotina perskaityti.

Nuorodos, nuorodos…

Visgi sesija, ir nėra laiko ilgesniems dienoraščio įrašams, bet štai
vėl krūva nuorodų, kurios gal kam bus įdomios:

Perlo objektų pradžiamokslis: pirmoji dalis

Objekto vaizdavimas

Dažniausiai Perle Paskalio įrašas arba C struktūra, arba C+ klasė yra
saugoma anoniminio asociatyvaus masyvo (hešo) pavidalu. Taip
saugoti yra patogu, nes heše galima saugoti neribotą kiekį
elementų, kuriuos galima pasiekti per unikalų hešo raktą.

Jeigu tik norite kažko panašaus į C struktūrą, tai galima daryti
taip:

$irasas = {
    vardas   => "Petras",
    amzius   => 21,
    kolegos  => [ "Juozas", "Nikolajus", "Vaidas"],
};

Jeigu norite lengviau perskaitomo kodo, galite hešo raktus
rašyti didžiosiomis raidėmis:

$irasas = {
    VARDAS   => "Petras",
    AMZIUS   => 21,
    KOLEGOS  => [ "Juozas", "Nikolajus", "Vaidas"],
};

Norėdami prieiti prie vardo „Petras“ galite rašyti
$irasas->{VARDAS}, o norėdami gauti kolegų masyvą galite
rašyti @{ $irasas->{KOLEGOS} }.

Labai panaši idėja yra naudojama ir objektams, tik nereikėtų prieiti
prie objekto sudėtinių dalių prieiti tiesiogiai – tam dažniausiai
yra naudojamos specialiai tam parašytos funkcijos. Galima sakyti kad
objektas turėtų būti tiesiog daiktas, prie kurio duomenų reiktų prieiti
tik per specialias jo funkcijas.

Klasės sąsaja

Tarkim, kad turim klasę Asmuo. Štai kaip būtų galima ja
naudotis:

    use Asmuo;

    $jo = Asmuo->naujas();
    $jo->vardas("Petras");
    $jo->amzius(21);
    $jo->kolegos( "Juozas", "Nikolajus", "Vaidas" );

    push @Visi_asmenys, $jo;  # išsaugom objektą vėlesniam naudojimui

    printf "%s turi %d metus.\n", $jo->vardas, $jo->amzius;
    print "Jo kolegos yra: ", join(", ", $jo->kolegos), "\n";

    printf "Paskutinis asmuo yra %s\n", $Visi_asmenys[-1]->vardas; 

Kaip matote, klasės Asmuo vartotojas nežino (ir neturi
žinoti) kaip yra saugomi duomenys klasėje Asmuo. Visus
duomenis vartotojas pasiekia tik per metodus (t.y. funkcijas, kurios
priklauso klasei)

Konstruktoriai ir objekto metodai

Tačiau kažkas turi žinoti, kaip duomenys saugomi klasėje, ir
tas kažkas yra pati klasė. Klasė aprašo metodus, kuriais
naudojanti galima prieiti prie prie objekto duomenų. Štai kaip galima
aprašyti klasę Asmuo naudojantis standartiniu duomenų
saugojimo hešo nuorodoje būdu. Aprašysime klasės metoda
naujas(), kuris bus objekto konstruktorius, bei tris
objekto metodus vardas(), amzius() ir
kolegos() per kuriuos bus galima prieiti prie objekte
saugomų duomenų.

    package Asmuo;
    use strict;

    ####################################################
    ## objekto konstruktorius (supaprastinta versija) ##
    ####################################################
    sub naujas {
        my $mano  = {};
        $mano->{VARDAS}   = undef;
        $mano->{AMZIUS}    = undef;
        $mano->{KOLEGOS}  = [];
        bless($mano);           # bet zr. zemiau
        return $mano;
    }

    ##############################################
    ## metodai objektu duomenis pasiekti        ##
    ##                                          ##
    ## Metodai nustato reikšmę, jei perduodamas ##
    ## argumentas, ir tik grąžina reikšmę jei   ##
    ## argumentai neperduodami                  ##
    ##############################################

    sub vardas {
        my $mano = shift;
        if (@_) { $mano->{VARDAS} = shift }
        return $mano->{VARDAS};
    }

    sub amzius {
        my $mano = shift;
        if (@_) { $mano->{AMZIUS} = shift }
        return $mano->{AMZIUS};
    }

    sub kolegos {
        my $mano = shift;
        if (@_) { @{ $mano->{KOLEGOS} } = @_ }
        return @{ $mano->{KOLEGOS} };
    }

    1;  # Tam kad 'use' arba 'require' nesikeiktų

Sukūrėme tris metodus, per kuriuos galima prieiti prie objekto duomenų:
vardas(), amzius() ir kolegos().
Jie labai panašūs. Jei nustato reikšmę jeigu iškviečiami su argumentu,
ir grąžina reikšmę jeigu iškviečiami be argumentų.

ActivePerl build 807

Pasirodė populiaros Perlo distribucijos Windows platformai ActivePerl
versija. Ši versija yra kurta 5.8.1 Perlo versijos pagrindu ir turi
nemažai atnaujintų modulių. Patys didžiausi atnaujinti moduliai yra
XML::Parser ir Archive::Tar. Visi ActivePerl
vartotojai turbūt turėtų atsinaujinti Perlo versijas į šią naująją.

Num2LTWord Perlu

Kai kam prireikė funkcijos, kuri
verstų skaičius į lietuvių kalbą. Tad parašiau Perlinį moduliuką –
gal bus dar kam nors naudingas. (Parsiųsti kaip normalų modulį galima iš
čia)

#!/usr/bin/perl -w
package Num2LTWord;

=head1 Num2LTWord -- skaičiai lietuviškai

Modulis verčiantis (sveikus) skaičius į lietuvių kalbą

=head2 NAUDOJIMAS

    use Num2LTWord;
    num2ltword(2003);

=head2 FUNKCIJOS

=head3 num2ltword ( skaičius )

Ši funkcija grąžina suformuotą lietuvišką skaičiaus pavadinimą.

=head2 RIKTAI IR APRIBOJIMAI

Funkcija C<num2ltword> supranta tik sveikus skaičius intervale
(- 1 000 000 000; 1 000 000 000)

=head2 AUTORIUS

Petras Kudaras aka moxliukas (moxliukas@delfi.lt)

=cut

use strict;
use warnings;
use Exporter;
our @ISA = qw/Exporter/;
our @EXPORT = qw/num2ltword/;
our $VERSION = 0.02;

sub num2ltword {
    my $ka = shift;
    my $result = '';

    return "Nežinau kaip čia paverst" unless $ka eq int($ka);
    return "nulis" if $ka == 0;
    my $kam = abs $ka;
    $result .= "minus " if $ka < 0;
    if($kam >= 1_000_000_000) {
        return "Per didelis man čia skaičius";
    } else {
        $result .= __iki1e9($kam);
        $result =~ s/\s+$//;
        $result =~ s/\s+/ /g;
        return $result;
    }
}

sub __iki10 {
    my $ka = shift;
    my @skaitmenys =     ("", "vienas", "du",
                 "trys", "keturi", "penki",
                 "šeši", "septyni", "aštuoni",
                 "devyni", "dešimt");
    return $skaitmenys[$ka];
}

sub __iki20 {
    my $ka = shift;
    my @lika =     ("vienuolika", "dvylika", "trylika",
             "keturiolika", "penkiolika", "šešiolika",
             "septyniolika", "aštuoniolika", "devyniolika");
    if ($ka <= 10) {
        return __iki10($ka);
    } else {
        return $lika[$ka % 10 - 1];
    }
}

sub __iki100 {
    my $ka = shift;
    my @desimt = ("", "", "dvi", "tris", "keturias", "penkias",
            "šešias", "septynias", "aštuonias", "devynias");
    if ($ka < 20) {
        return __iki20($ka);
    } else {
        if($ka % 10 == 0) {
            return $desimt[int($ka/10)] . "dešimt";
        } else {
            return $desimt[int($ka/10)] . "dešimt " . __iki10($ka % 10);
        }
    }
}

sub __iki1000 {
    my $ka = shift;
    return __iki100($ka) if ($ka < 100);
    if(int($ka / 100) == 1) {
        return __iki10(int($ka/100)) . " šimtas " . __iki100($ka % 100);
    } else {
        return __iki10(int($ka/100)) . " šimtai " . __iki100($ka % 100);
    }
}

sub __iki1e6 {
    my $ka = shift;
    return __iki1000($ka) if ($ka < 1000);
    my $t = __iki1000(int($ka/1000));
    if ($t =~ /vienas$/) {
        return "$t tūkstantis " . __iki1000($ka % 1000);
    } elsif ($t =~ /(?:lika|šimtai|imt)\s*$/) {
        return "$t tūkstančių " . __iki1000($ka % 1000);
    } else {
                return "$t tūkstančiai " . __iki1000($ka % 1000);
    }
}

sub __iki1e9 {
    my $ka = shift;
        return __iki1e6($ka) if ($ka < 1_000_000);
        my $t = __iki1e6(int($ka/1_000_000));
        if ($t =~ /vienas$/) {
                return "$t milijonas " . __iki1e6($ka % 1_000_000);
        } elsif ($t =~ /(?:šimtai|lika|imt)\s*$/) {
                return "$t milijonų " . __iki1e6($ka % 1_000_000);
        } else {
                return "$t milijonai " . __iki1e6($ka % 1_000_000);
        }
}                                                   
1;

IE įdomybės ir bluejackinimas

Labai įdomus dalykas, kurį šiandien aptikau benaršydamas internetą
buvo Internet Explorerio featuras, kurio pagalba galima
išsikviesti Notepad. Tereikia parašyti kažką panašaus į:

<img 
src="view-source:file:///C:/WINNT/system32/shell32.dll">

Ir jei jūsų Windows sėdi kataloge C:WINNT, greit pajausite kaip
Notepad pradeda prakaituoti stengdamasis parodyti bylą
shell32.dll. O juk galima įdėti ir kelias tokia nuorodas ir
staiga swape gali atsirasti kokia pora gigabaitų duomenų. Įdomu
dar ir tai, kad tokių dalykų nepagauna jokios Popup blokavimo
programos. Tiesiog tai vienas iš Internet Explorer featurų. :-) (Plačiau
http://computerbytesman.com/security/notepadpopups.htm)

Šiandien pietaudamas nubluejackinau antrą žmogų. Vėlgi Nokijos
turėtojas, tačiau šį kartą ne jaunutė mergina, o gana pagyvenęs
kostiumuotas verslininkas. Labai buvo įdomi jo reakcija: viską jis
priėmė labai natūraliai (na, aš jam tik pasiunčiau „you have been
bluejacked“) ir ramiai. Parodė savo partneriui savo telefoną ir
pasakė „tos reklamos visur jau lenda“. Matyt žmogus nulipęs
nuo Internet Explorerio su šokinėjančiais langais.