Archyvas: 2003

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š
href="http://moxliukas.esu.as/download/src/Perl/Num2LTWord-0.02.tar.gz">č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
href="http://computerbytesman.com/security/notepadpopups.htm">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.

Testai perl-dev

Pridėjau šiandien į perl-dev CVS kodo testus. Šiaip atrodo Lietuvoje niekas lyg ir
nedaro web aplikacijų kartu su testais (test based programming), nors
Perlmonksuose teko girdėti apie tai nemažai. Esmė yra tame, kad pakeitus
kažkokį failą automatiškai prasitestuojama ar viskas veikia kaip ir
turėtų, ar tie pakeitimai nesugriovė kokio nors kodo kuris seniau jau
veikė. Šiek tiek gal ir su eXtreme Programming susiję (ten pradžioj
parašomas testas kuris neveikia, o paskui stengiamasi padaryt kad jis
veiktų). Na, žiūrėsim kaip čia bus ir ar bus iš to naudos. Pagrindinis
šių testų tikslas (bent jau man atrodytų) būtų automatiškas patikrinimas
ar visa svetainė validuojasi su W3C validatoriais (tam parašiau labai
paprastą funkciją, kurią galima rasti href="http://perl.skopos.lt/cgi-bin/cvsweb/perl-dev/src/lib/W3Validate.pm?rev=1.1&content-type=text/x-cvsweb-markup">perl-dev/src/lib/W3Validate.pm)

Visi testai sėdi direktorijoje src/t/* – pirmasis
tik patikrina ar yra visos bylos savo vietose ir ar jas įmanoma
nuskaityti (o jei jos baigiasi .pl arba .t
– ar galima jas vykdyti), kitas patestuoja dhandler, o
trečias – autohandler (tiksliau index.html).
Testus galima paleisti arba iš src/t/ direktorijos po
vieną, arba visus iš karto skriptu ./runtests.pl (arba per
Makefilemake test)

Visus šiuos pakeitimus galima atsisiųsti per CVS arba href="http://moxliukas.esu.as/download/src/perl-dev/perl-dev-031110.tgz">čia
(tiesa, kol kas extractina į ‘.’ o ne į ‘perl-dev’ — jei bus
skundų tai pakeisiu

Perlinis alarm()

Turėjau šiokių problemų su perlific, mat jeigu jis kurį
laiką nevykdydavo jokios MySQL užklausos, MySQL uždarydavo ryšį su perlu
ir duomenų bazė tapdavo nebepasiekiama. Norint išlaikyti atvirą jungtį
su MySQL reikia kas kažkiek laiko papinginti duombazę
iškviečiant $dbh->ping();. Tai galima padaryti keleta
būdu (juk čia Perlas): fork()‘int ir atskirame procese
daryti while(1) { sleep(60); $dbh->ping(); }, galima
naudotis gijomis (jei Perlas kompiliuotas su jomis) – use
threads;
, galima apsirašyti funkciją on_ping (nes juk
tai IRC botas). Padariau dar kitaip. Štai tas kodas:

$SIG{ALRM} = \&on_alarm;
alarm(60);
sub on_alarm {
        $dbh->ping;
        $SIG{ALRM} = \&on_alarm;
        alarm(60);
}

Šis kodo gabaliukas aprašo funkciją, kuri turi būti iškviečiama kai
gaunamas sisteminis signalas SIGALARM. Paskui su alarm(60)
nurodoma operacinei sistemai kad ji praneštų kai praeis 60 sekundžių.
Pačioje funkcijoje reikia iš naujo nurodyti SIGALARM funkciją ir laiko
tarpą. Gaunasi poor man’s multithreading.

Pirmas Bluejack’inimas

Grįždamas namo troleibusu pirmą kartą sėkmingai
nubluejackinau“ vieną merginą. Bluejackinimas yra gana
paprastas ir smagus dalykas – paprasčiausiai tai tėra tik žinučių (ar
objektų) siuntinėjimas per Bluetooth, kai gavėjai dažnai net nežino, kad pas juos yra tas Bluetooth ;-) (plačiau apie tai href="http://bluejackq.com">http://bluejackq.com). Veiksmo eiga tokia:
susikuri savo mobiliajame telefone naują kontaktą, vietoj vardo įrašai žinutę
(na, aš kaip neturintis lakios vaizduotės tai įrašiau tik „hi“),
eini į „Send Contact“, pasirenki kad siųstų per
Bluetooth ir jis jau paskui ieško aplink esančių
Bluetooth suprantančių įrenginių. Teko tai daryt keletą kartų, bet
niekada nieko nerasdavo (Bluetooth traukia iki 10 metrų berods), o
štai šiandien pasisekė. Rado netgi du prietaisus, vienas iš jų
buvo
unknown (nespėjau ir į jį nusiųst kontakto, matyt jo savininkas(ė) išlipo
iš troleibuso), o kitas – Nokia 6310i, į kurį ir pasiunčiau
tą kontaktą.
Pasirodo savininkė stovėjo nuo manęs per vieną žmogų (kokie 1.5 - 2
metrai). Gana simpatiška mergina, deja, rusė (aš kaip tikras kaunietis rusiškai
silpnokai). Įrašiau dar jai šio dienoraščio adresą bei http://bluejackq.com adresą. Ji atrodė šiek tiek
sunerimus ir draugei parodė telefoną bei prasitarė šiek tiek virpančiu balsu jog
„čia jie su kompiuteriais šitaip daro“. Nespėjau pasiųst žinutės jai
„ne, ne su kompiuteriais daroma“, nes ji išlipo iš troleibuso.
Norėjau ir nufotografuoti (ir galbūt nusiųsti jai jos nuotrauką), bet buvo tamsu
ir ją užstojo jos draugė.

Tiesą sakant neįsivaizduoju kokią informaciją perduoda mano telefonas taip
siųsdamas žinutes. Įtariu kad mano telefono numerio neišduoda (na
bent jau aš
gavęs tokį daiktą tai atrašyčiau normalią SMS žinutę). Be to įdomu kokie ten
tose Nokijose Bluetooth nustatymai – bent jau mano Ericssone
reikia specialiai įjungti Bluetooth. Matyt Nokijose jis yra
įjungtas pagal nutylėjimą. Hmm… Įdomu kada prieisim iki to kai per
Bluetooth bus siuntinėjami kokie nors virusai ar dar kas nors, nes
kiek suprantu per Bluetooth galima dalintis ir bylomis, serial
prievadu, dial-up, ir dar viskuo kuo tik įmanoma.

Kelios naujienos ir Mac OS X

Pirma naujiena yra apie tai, jog išleistas Perl 5.8.2 Release
Candidate 2, krį galima parsisiųsti iš href="http://www.cpan.org/authors/id/N/NW/NWCLARK/perl-5.8.2-RC2.tar.bz2">http://www.cpan.org/authors/id/N/NW/NWCLARK/perl-5.8.2-RC2.tar.bz2.
Pagrindiniai pokyčiai nuo praeito Release Candidate: mod_perl dabar jau
lyg veikia normaliai su šia versija, keletas pataisymų Perlo gijose,
UNIVERSAL modulio pakeitimai bei %INC kešavimas buvo išimti, nes manoma
jog tai nepakankamai ištestuotas kodas. Galutinė Perl 5.8.2 versija
turėtų pasirodyti už kokios pusantros paros, jei nebus rasta kokių nors
klaidų.

Be to išleistas ir nauja href="http://www.php.net/NEWS_PHP_5_0_0b2.txt">PHP 5.0.0 beta 2, bet
šitą jau visi turbūt žino. Siųstis: href="http://www.php.net/get/php-5.0.0b2.tar.bz2/from/a/mirror">http://www.php.net/get/php-5.0.0b2.tar.bz2/from/a/mirror

Peržvelgiau kaip atrodo ši svetainė ant įvairių Mac OS X naršykių.
Ant Safari viskas href="http://moxliukas.esu.as/download/misc/safari.jpg">atrodo labai
normaliai, tuo tarpu href="http://moxliukas.esu.as/download/misc/iemac.jpg">Makintošinis
Internet Exploreris pjauna grybą, nes niekur CSS nenurodyta šriftų dydis pikseliais. Reikės dar
pasigooglint apie šį dalyką, nes kiek suprantu visi pasaulyje
vengia nurodyti dydžius pikseliais kadangi dėl to neveikia šriftų
didinimas/mažinimas Windowsiniame Internet Exploreryje.

Išleistas Parrot 0.0.13

Ką tik gavau laišką, pranešantį, jog išleista speciali href="http://parrotcode.org">Parrot versija Halloween
proga. Parsisiųsti galima iš href="http://www.cpan.org/authors/id/L/LT/LTOETSCH/parrot-0.0.13.tar.gz">http://www.cpan.org/authors/id/L/LT/LTOETSCH/parrot-0.0.13.tar.gz
arba per CVS href="http://dev.perl.org/cvs/">http://dev.perl.org/cvs/

Pagrindiniai pokyčiai: imcc dabar buildinamas kaip
parrot, objektai vis labiau pabaigti, isa ir
does metodai PMC,
extension galimybių pradžia, dinaminės operacijų kodų
bibliotekos, ekspermentinis tinklo funkcijų palaikymas, ncurses,
postgresql ir pcre bibliotekų palaikymas ir t.t.

Mažos naujovės

Noriu jau bėgt iš darbo, tad labai trumpai apie pakeitimus, kuriuos
padariau šiandien. Pirma, įdėjau paiešką savo dienoraštyje (ji egzistavo
jau senokai, tik apie ją žinojo gal kokie 3-4 žmonės). Kitas dalykas,
kurį padariau, tai šiek tiek apsitvarkiau savo
/home/moxliukas direktorijoj ir sudėjau viską ką esu
parašęs ir kas gali būti kam nors naudinga. Visa tai galima rasti adresu
href="http://moxliukas.esu.as/download/">http://moxliukas.esu.as/download.

Pirmasis mano Perlo lopas

Vakar nusiunčiau savo pirmąjį lopą į perl5-porters. Aišku, nebuvo jis
susijęs su visokiais sudėtingais perliniais dalykais ar C kodu –
lopiau tik perldelta582.pod (Kurio lietuvišką vertimą
galima rasti čia).
Na, bet vis tiek kažkaip geri jausmai užtvindo kai visgi priima tavo
lopą į stable šaką ;-)

Pats lopas pradžioje tik uždėjo nuorodą į vieną adresą, kuris buvo
paliktas kaip paprastas tekstas, tačiau vėliau paaiškėjo, jog visoje
perldeltoje naudojama F<>, kai turėtų būti naudojama
L<>. Šis naujasis lopas nepatiko
podchecker, kuris spjaudėsi pranešimais:

*** WARNING: node 'http://bugs.perl.org/' contains non-escaped | or
/ at line 143 in file pod/perldelta.pod [...]

Pasirodo tai buvo naujas pačio podchecker riktas, o mano
lopas viską darė teisingai. Na to pasekoje

Michael G Schwern

vėliau ir užlopė Pod::ParseUtils modulį.

MySQL lietuviška knyga: keletas klaidų

Perskaičiau jau 100 tos pirmos lietuviškos knygos apie MySQL
puslapių. Tolimesnis vaizdas šiek tiek pagerėjo, nes pereita prie
techniškesnių dalykų su kodo pavyzdžiais. Tiesa, vis dar pasitaiko ne
vietoje atsirandančių kvailų juokelių kaip kad štai 24 puslapyje:

Kitą rytą direktorius atrodo šiek tiek suglumęs,
paraudusiomis akimis ir kažką veblena apie gydytojo paskirtą
punšą.

Bet bendrai paėmus stilius labiau techniškėja ir gerėja.

Jau buvau bepradedąs džiaugtis, kad gal ir būtų galima šią knygą
įvertinti kokiais 7 balais iš dešimties, kai prėjau skyrių apie
įprastines išraiškas. Iš karto aišku mane pasitiko keistas juokelis 70
puslapyje (na, aš gi Perlininkas, įpraiškos yra mano meilė):

Daugumai žmonių sąvoka įprastosios išraiškos yra tas
pats, kaip viduramžių gydytojui žodis „maras“. Jie tuoj pat
suraukia kaktą, randa pasiteisinimą ir viltis atrodo
prarasta.

Na, su maru tai dar galiu sutikt, o kito sakinio prasmės ir reikšmės
dar iki šiol nesuprantu. Bet manęs laukė didesni siurprizai. Tame
pačiame 70 puslapyje yra santrauka ką reiškia kiekvienas simbolis
regexpuose. Na, galima blogai viską versti, galima rašyti
nerišliais sakiniais, galima laidyti kvailus juokelius, bet kai
pateikiama informacija neatitinka tikrovės tai jau negerai. Štai yra
toje lentelėje du įrašai:

š Nurodo, kad prieš šį ženklą parašytas simbolis
gali pasikartoti vieną kartą arba visai neegzistuoti

{n,| Eilutė turi pasikartoti ne mažiau n kartų

Kas moka naudotis įpraiškomis pastebės, jog čia turėtų būti ne
š, o ? (klaustukas), o vietoj
{n,| turėtų būti {n,}. Beje, ta š
raidė kartojasi visame skyrelyje apie įpraiškas tose vietose, kur turėtų
būti klaustukas (nors tekste simbolis teisingai vadinamas klaustuku).

Tokios klaidos tikrai klaidina žmones, tad parašiau lašką į jų href="mailto:office@smaltija.lt">redakciją. Lauksiu atsakymo ir
tikiuosi kituose knygos leidimuose tai bus pataisyta. ;-)

« Ankstesnis puslapisKitas puslapis »