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 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 č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 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š 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 PHP 5.0.0 beta 2, bet
šitą jau visi turbūt žino. Siųstis: 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 atrodo labai
normaliai
, tuo tarpu 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 Parrot versija Halloween
proga. Parsisiųsti galima iš http://www.cpan.org/authors/id/L/LT/LTOETSCH/parrot-0.0.13.tar.gz
arba per CVShttp://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
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ų redakciją. Lauksiu atsakymo ir
tikiuosi kituose knygos leidimuose tai bus pataisyta. ;-)

perldelta582 vertimas

Štai kas pasikeitė Perlo 5.8.2 versijoje:

=head1 PAVADINIMAS

perldelta - kas naujo perl v5.8.2

=head1 SANTRAUKA

Šis dokumentas aprašo skirtumus tarp perlo 5.8.1 ir 5.8.2 versijų.

Pirma perskaitykite L<perl58delta>, jeigu jūs atnaujinate perlą iš
senesnės versijos (kaip kad 5.6.1). L<perl58delta> aprašo 
skirtumus tarp
5.6.0 ir 5.8.0 versijų, o  L<perl581delta> -- skirtumus tarp 5.8.0 ir
5.8.1.

=head1 Nesuderinami pokyčiai

Tikimės, kad jokių.

=head1 Branduolio patobulinimai

=head2 Asiociatyviųjų masyvų atsitiktinė tvarka

Pataisyta asociatyviųjų masyvų atsitiktinė tvarka, kuri buvo įvesta 5.8.1
versijoje. Pasirodo, jog 5.8.1 versija buvo suderinama su 5.8.0 pirminių 
tekstų
lygyje, tačiau kai kuriais atvejais kompiliuotas kodas nebuvo suderinamas.
5.8.2 versijoje yra keletas patobulinimų, kurių pagalba kodas tiek 
kompiliuotame,
tiek pirminiame lygyje yra pilnai suderinamas tiek su 5.8.0, tiek su 5.8.1
versija. Tuo pačiu šis sprendimas išsprendžia potencialią atakos 
galimybę, dėl
kurios ir buvo tobulinamaa asociatyviųjų masyvų atsitiktinė tvarka.

Mes dėkojame Debian projektui už suteiktą pagalbą sprendžiant šias 
problemas.
Žiūrėkite L<perlsec/"Algorithmic Complexity Attacks"> jei norite 
daugiau sužinoti
apie pačią potencialią ataką.

=head2 Gijos

Pataisyta keletas atminties nutekėjimo klaidų, susijusių su kintamųjų 
dalinimusi
tarp keleto gijų.

=head1 Moduliai ir Pragmos

=head2 Atnaujinti Moduliai ir Pragmos

Šie moduliai buvo atnaujinti lyginant su Perl 5.8.1 versija:

=over 4

=item Devel::PPPort

=item Digest::MD5

=item ExtUtils::MakeMaker

Dabar galima generuoti SIGNATURE bylą perduodant WriteMakefile()
funkcijai (SIGN => 1) jei yra įdiegtas Module::Signature. (Šis
patobulinimas padarytas Autrijus Tang iš The Perl Foundation
gautos stipendijos dėka)

=item I18N::LangTags

=item libnet

=item MIME::Base64

=item Pod::Perldoc

=item strict

Pagerinta dokumentacija

=item Tie::Hash

Pagerinta dokumentacija

=item Time::HiRes

=item Unicode::Collate

=item Unicode::Normalize

=item UNIVERSAL

=back

=head1 Rinktiniai klaidų pataisymai

C<require> dabar laiko rezultatus laikinojoje atmintinėje taip 
kaip ir buvo
tikėtasi, jei keletą kartų nesėkmingai bandoma pakrauti modulį.

Parsris dabar teisingai interpretuoja keletą neatpažintų bylų testavimo
operatorių sintaksės klaidų.

=head1 Vidiniai pokyčiai

Interpretatoriaus inicializacija dabar vyksta korektiškiau, kai išjungta
-DMULTIPLICITY. Tai turėtų padėti išspręsti problemą, kai Perlo
interpretatorius buvo keletą kartų inicializuojamas ir sunaikinamas tame
pačiame procese.

dup2() dabar naudoja PerlLIO abstrakcijos lygmenį

=head1 Problemos, susijusios su kai kuriomis platformomis

Pakeisti dinaminiai linkerio nustatymai Soliaris ir OS X sistemose.
Tai turėtų išspręsti kai kurias XS modulių kompiliavimo problemas.

Pataisyti OS/2 lizdų (sockets) ir laikinųjų bylų riktai.

OS X C<setreuid> ir panašios funkcijos nelabai veikia -- perlas dabar
stengiasi kuo geriau apeiti apie šią problemą.

=head1 Ateities planai

Nuo 5.8.3 mes tikimės išeisti perlo kodą su mažesniais pokyčiais, bet 
dažniau.
Tikimės kad taip greičiau galėsime perkelti riktų pataisymus į 
stabiliąją kodo
šaką ir kartu padarysime perlo atnaujinimo procesą įprastesnį ir ne tokį
skausmingą. Tai leis patiems vartotojams geriau pasirinkti kada jiems
patogiau atsinaujinti perlą. Dabartinis kodo užšaldymo planas yra toks:

=over 4

=item *

5.8.3 23:59:59 GMT, trečiadienis, Gruodžio 31, 2003

=item *

5.8.4 23:59:59 GMT, trečiadienis, Kovo 31, 2004

=item *

5.8.5 23:59:59 GMT, trečiadienis, Birželio 30, 2004

=back

Po kodo užšaldymo vyks testavimas, o po to greitai bus išleidžiamas
ir galutinis kodas.

Daugiau informacijos: L<perl581delta/"Future Directions">

=head1 Pranešimai apie riktus

Jeigu jūs manote kad radote riktą, pirma reiktų peržvelgti straipsnius
comp.lang.perl.misc naujienų grupėje bei perlo riktų duomenų bazėje
F<http://bugs.perl.org/>.  Taipogi informacijos galima rasti adresu
F<http://www.perl.com/>.

Jeigu manote kad radote riktą, apie kurį dar nebuvo pranešta, pasinaudokite
B<perlbug> programa, kuri yra kartu su perlu. Pasistenkite 
sumažinti savo
rikto aprašymą iki kuo mažesnio testinio scenarijaus.
Jūsų pranešimas apie riktą, kartu su C<perl -V> rezultatu bus 
nusiųstas
adresu perlbug@perl.org, kur jį išanalizuos perlo programuotojai. Riktus
galima naršyti adresu http://bugs.perl.org/

=head1 Tolimesnė informacija

Byloje F<Changes> yra išsami informacija apie visus pokyčius.

Byloje F<INSTALL> yra aprašymas kaip įdiegti Perlą.

Byloje F<README> yra bendra informacija.

Bylose F<Artistic> ir F<Copying> yra autorinių teisių 
informacija.

=cut

Lietuviškos knygos

Vakar nusipirkau MySQL ir PHP
knygas
, išleistas Smaltijoje. Dar per daug jų nežiūrinėjau, nors
tiesą sakant, per duag ir nesitikiu būtent iš PHP knygos. MySQL knygos
perskaičiau apie 10 puslapių ir ganėtinai įstrigo prastas vertimas.
Žodžiai atrodo palikti sakiniuose tokia tvarka kaip jie buvo angliškame
tekste, o ir terminų vertimai gana keistoki (tarkim file ir
palikti failu, o support verčiama kaip parama
– neturėtų būti palaikymas ar dar koks nors žodis,
esantis arčiau tiesos?). Skaitant tą vertimą galima iš kart matyti ir
anglišką sakinį. Be to, bent jau įvadas ir pati pradžia yra parašyta
truputį „…žaliems“ knygų serijos stiliumi su keletu niekam
nereikalingų juokelių, kurių niekada nebūna taip visų kompiuterastų
mėgstamose O’Reilly knygose. Aišku tuo siekiama, kad knyga būtų
įdomi naujokams, bet kaip kažkas yra pasakęs, techninė knyga ir turi
būti sudėtinga bei be juokelių, nes techniški dalykai yra rimtiems
žmonėms, kurie nebijo nugalėti sunkumus.

Aišku išsamesnę nuomonę apie knygas susidarysiu, kai jas
perskaitysiu, o štai keletas įdomių vertimo pavyzdžių iš MySQL knygos:

Yra labai nedaug priežasčių, dėl kurių neturėtumėte
svarstyti galimybės naudoti MySQL savo duomenų bazės sprendime.
„MySQL AB“, MySQL kurianti bendrovė, siūlo veiksmingą ir
nebrangią paramą, ir, kaip ir daugelyje atvirojo kodo bendruomenių,
internete rasite gausybę nemokamos paramos.

Daugelis senesnių duomenų bazių kenčia dėl palikimo problemų, be
reikalo paversdamos administravimą sudėtingu darbu.

Jeigu jūsų administratorius atrodo sutrikęs arba jūs patys ką tik
įdiegėte MySQL, tuomet jūs arba jūsų administratorius, norėdami pradėti
darbą, turite įvykdyti vieną iš žemiau pateiktų komandų sekų.

Esant tokiai struktūrai, duomenų bazė pateikia jums būdą šiuos
duomenis apdoroti: SQL