$you->said("Who needs tommorow?") while $we->have($tonight); $I = shift @closer for @love;
Berods įsimylėjau.
Petras Kudaras
$you->said("Who needs tommorow?") while $we->have($tonight); $I = shift @closer for @love;
Berods įsimylėjau.
Keletas naujienų iš naujų versijų pasaulio: ką tik išleistas Perl 5.005_04. Tai labai senas perlas, tačiau jei kartais sėdite prie senų dinozaurų, tai atsinaujinimas nepakenks. Daugiausia šioje versijoje yra klaidų pataisymai, bei pritaikymai naujesniems kompiliatoriams.
Kita, įdomesnė naujiena, yra Subversion 1.0 išleidimas. Subversion yra bylų versijų kontrolės sistema, kuri ruošiasi pakeisti CVS. Subversion išsprendžia problemas,
nuo kurių kenčia CVS – ji palaiko bylų pervadinimą, direktorijų struktūros pokyčius, dvejetaines bylas, metaduomenų pokyčius ir t.t.
Oh, ir dar šiek tiek krapštausi su moxwiki. Žiūrėsiu, kiek čia nenusibos.
Skaičiausi čia neseniai apie Perlo modulį Class::DBI ir šiandieną sumaniau jį šiek tiek išbandyti. Šis modulis yra duomenų bazės objektinė abstrakcija, ir viską daro tokiame aukštame lygyje (t.y. taip toli nuo pačios duomenų bazės), kad norint ja naudotis net nereikia mokėti SQL (OK, OK, SQL visada pravartu mokėti, bet labai paprastiems dalykams gali to ir neprireikti). Taigi išbandymui sugalvojau pasirašyti vartotojų prisijungimo sistemą.
Class::DBI
priverčia viską apgalvoti ir išdėlioti objektiškai, į atskirus modulius, tad atsiranda krūvos mažų failiukų, kuriuos reikia dėti kažkur į atskirą lib
direktoriją. Bet pirma pradėkim nuo SQL lentelės:
CREATE TABLE `vartotojai` ( `vartotojoid` int(11) NOT NULL auto_increment, `login` varchar(40) NOT NULL default '', `pass` varchar(32) NOT NULL default '', `status` int(11) NOT NULL default '0', `vartotojaskada` timestamp(14) NOT NULL, PRIMARY KEY (`vartotojoid`), UNIQUE KEY `login` (`login`) ) TYPE=MyISAM PACK_KEYS=0 AUTO_INCREMENT=1;
Tiesa, login
yra unikalus, tad realiai užtektų tik jį padaryt pirminiu raktu, bet man kažkodėl patinka turėti ir skaitinį vartotojo ID. Nevisai dar sugalvojau kodėl.
Pradedam apsirašinėti duomenų bazę. Byloje lib/Bilekas/DBI.pm
saugom duomenų bazės prisijungimo duomenis:
package Bilekas::DBI; use base 'Class::DBI'; Bilekas::DBI->set_db('Main', 'dbi:mysql:bilekas', "root", ""); 1;
Apsirašome klasę Bilekas::Vartotojas
ir išsaugom byloje lib/Bilekas/Vartotojas.pm
:
package Bilekas::Vartotojas; use base 'Bilekas::DBI'; Bilekas::Vartotojas->table('vartotojai'); Bilekas::Vartotojas->columns(All => qw/vartotojoid login pass status vartotojaskada/); 1;
Bilekas::Vartotojas
modulyje užtenka tik nurodyti kurią SQL lentelę naudoti, bei kokie yra tos lentelės stulpeliai (jeigu būtų ir daugiau lentelių tai reikėtų nurodyti ir ryšius tarp jų)
Galvojant apie ateitį, reikėtų pasirašyti ir vieną pagrindinį modulį Bilekas.pm
, kuris būtų atsakingas už bendrą visai svetainei kodą (reikiamų modulių užkrovimą, CGI objekto sukūrimą, sesijas ir pan). Štai ir Bilekas.pm
:
package Bilekas; use strict; use CGI; use CGI::Session; BEGIN { use Exporter (); our (@ISA, @EXPORT); @ISA = qw/Exporter/; @EXPORT = qw/$q $s/; } our $q = new CGI; our $s = new CGI::Session("driver:File", $q, {Directory => '/tmp'}); END { $s->close; } 1;
Šiame pakete yra šiek tiek magijos, kurią vertėtų paaiškinti. Pačioje pradžioje yra užkraunami moduliai CGI
ir CGI::Session
. Toliau eina BEGIN blokas, kuriuo iš paketo Bilekas
vardų srities (namespace) eksportuojami kintamieji $q
ir $s
– tai leidžia vėliau bet kurioje byloje parašius use Bilekas;
iš karto naudotis jau sukurtais ir užpildytais kintamaisiais $q
ir $s
(viename iš jų yra CGI objektas, o kitame – sesijos objektas).
Kitomis dvi eilutėmis yra sukuriami minėtieji eksportuojami kintamieji, o po to seka END blokas, kuri yra vykdomas paskutiniu programos gyvavimo metu. Jo pareiga yra teisingai įrašyti visus sesijos duomenis į bylą, kad jie neliktų laikinojoje atmintinėje (tą daro $s->close;
)
Kadangi turime šitus modulius, galima pradėti jais naudotis. Pirma parašome index.pl
, kuris nesant užsiregistravusio vartotojo rodys formą, kurios pagalba galima prisijungti prie sistemos:
#!/usr/bin/perl -w use strict; use lib './lib'; # Mūsų parašytieji moduliai use Bilekas; use Bilekas::Vartotojas; # Siunčiame HTTP antraštes (su sausainiuku su sesijos informacija) print $s->header; # Jeigu yra nustatytas sesijos kintamasis, pranešantis apie klaidą, tai ją išspausdiname if($s->param("bilekas_error")) { print "<h1>!!! " . $s->param("bilekas_error") . " !!!</h1>"; # Išspausdinę klaidos pranešimą ištriname šį sesijos kintamąjį, kad # nespausdintume klaidos keletą kartų $s->clear(['bilekas_error']); } # Jeigu yra nustatytas sesijos kintamasis 'user', reiškia vartotojas prisijungęs if($s->param('user')) { print "Esi isilogines kaip UID <em>", $s->param('user')->{vartotojoid}, "</em>"; } else { # Vartotojas neprisijungęs, rodome prisijungimo formą print <<EOHTML; <form action="login.pl" method="post"> <input type="text" name="user"><br> <input type="password" name="pass"><br> <input type="submit"> </form> EOHTML }
Beliko parašyti patį prisijungimo kodą login.pl
:
#!/usr/bin/perl -w use strict; use lib './lib'; use Bilekas; use Bilekas::Vartotojas; use Digest::MD5 qw/md5_hex/; my $location = $q->referer || 'index.pl'; if ($q->param('user') && $q->param('pass')) { my $user = Bilekas::Vartotojas->retrieve(login => $q->param('user'), pass => md5_hex($q->param('pass'))); if ($user) { $s->param('user', $user); $s->expire(user => "+15m"); } else { $s->param('bilekas_error', "Blogas login/pass"); } } print $s->header(-location => $location);
Harry Fuecks, PHPPatterns kūrėjas ir sitepoint PHP weblogo savininkas, pastebėjo minėtame webloge mano dabar palaikomą Perlo modulį PHP::Strings. Harry klaidingai mano, jog perlininkai priešiškai nusiteikę prieš PHP dėl to, kad pavydi jam sėkmės. Kiek teko bendrauti su viso pasaulio perlininkais, tai požiūris į PHP visada būdavo neigiamas ne dėl pavydo, o dėl to, kad PHP nelaikoma rimta kalba (dėl tokio įsitikinimo teisingumo, aišku, galima ginčytis, bet enterprise lygyje PHP vis dar neturi tokių stiprių pozicijų kaip Perl, Java ir panašiai). Na, tikiuosi neužvirs šventasis karas dėl mano palaikomo modulio. Juolab, kad stengsiuosi jį padaryti naudingesniu PHP programuotojams.
Taigi labai džiugu, kad atgimė Vaido Žilionio weblogas. O kartu su juo pasirodė ir moblogas. Gaila, kad moblogai dar vis reti Lietuvoje (o gal jie ne reti, gal tiesiog aš apie juos nieko nežinau? Atsiliepkt!), nes kartais norisi paspoksoti į kieno nors darytas prastos raiškos mažas nuotraukas. Ir, tiesa, visgi įdomu blogrolle pamatyti savo vardą ir pavardę, o ne slapyvardį – kai pats surašinėjau draugų pavardes, tai buvo mažiau keista nei matant savą pavardę. Bet prie to keistumo turbūt greit bus priprantama ir tai atrodys savaime suprantamas dalykas.
Dar šiandien sėdėdami Baltuose Drambliuose (jie tampa po truputį savais namais :-) su pirmoone bei txd sugalvojom paprastą testą, kuris parodo kiek gyvenimo yra susiję su internetu (ar bent jau su IRC). Pasiimkite savo mobilų telefoną ir suskaičiuokite kiek procentų žmonių jūsų telefonų knygelėje yra užrašyta slapyvardžiais, o ne vardais. Mano rezultatas 24.7 procentai ;-)
Pateko man į rankas Česlovo Kavaliausko straipsnių knyga „Tarp fizikos ir teologijos“. Pats autorius yra jau miręs iškilus kunigas ir mąstytojas, išvertęs iš senovės graikų kalbos Naująjį Testamentą. Knyga gana sudėtinga, bet įdomi, ji pilna idėjų apie netiesinį Jėzų, Giodelio teoremų svarbą ne vien krikščioniškajai bei ir apskritai filosofijai ir pan. Knygoje visur bandoma pasakyti, kad filosofija be matematinio ar loginio pagrindo yra niekam verta, ir turėtų būti laikoma tik pamąstymais, o ne rimtu mokslu. Na, į gilias filosofijas pats nepretenduoju, bet kol kas ši knyga man patinka (perskaičius jos pusę).
Ypač patiko štai ši mintis:
Jei tikėjimas būtų išbrauktas iš praktinio gyvenimo, visuomenė negalėtų egzistuoti. Tikėdami, jog žmonės sako tiesą, mes klausome jų nurodymų, įsakymų ir informacijos. Tikėdami dokumentais, mes darome teorinius ir praktinius apskaičiavimus. Tikėdami artimaisiais, mes gyvename šeimoje, etc. […] Kaip tik todėl, kad pažinimo procesas yra toks sudėtingas, pažinimu apsiriboti negalima. Jeigu pripažintume vien tai, ką pažįstame, reikėtų išsižadėti be galo daug dalykų.
Sako, kad reikia retkarčiais parašyti į dienoraštį ir ką nors ne visai kompiuterastiško, nes juk ne absoliučiai visą mano gyvenimą užima mastymai apie semantinį tinklą, Perlą bei kitokius kompiuterastizmus (hmm, gal ką ir nuvyliau tai pasakydamas, bet, kad ir kaip ten būtų keista, tai yra tiesa). Tad sėdžiu dabar autobuse, kuris tuoj pajudės link Vilniaus ir maigau Psiono mygtukus, o tuo pačiu metu galvoje neduoda ramybės nelabai miela ir įkyri kaip vaikas prašantis saldainių mintis „o ką gi aš po velnių galiu parašyti nekompiuterastiško?!“. Nedaug. Labai nedaug. Na, parašyti galima daug, bet vargu ar tai bus kam įdomu. Galima aprašyti, kaip ryte pabudau, nes jau seniai buvo laikas keltis, kaip atsikėliau, kaip aplankiau Perlmonks, kaip… Stop. Perlmonks jau yra kompiuterastiška.
Pati situacija gana keista: štai aš sėdžiu autobuse, rankose, kišenėse ir už diržo turėdamas bent keturis elektroninius prietaisus, iš kurių kiekvienas priverstų viduramžių inkviziciją paskelbti mane jei ne Antikristu, tai bent jau šėtono sugulovu. Sėdžiu ir bandau sumastyti ką nors, kas būtų toli nuo viso to, kas mane supa. Nelengvas darbas. Čia ne Perlinę įpraišką parašyti. Kalbant apie
Perlą, tai vakar kalbėjausi su Juerdu, kuris ką tik parašė ir testuoja perlinį modulį PHP::MySQL, kuris leidžia iš Perlo naudotis MySQL lygiai tokiomis pačiomis funkcijomis kaip ir iš PHP. Turim slaptą planą, kuriuo remiantis reiktų po truputį perrašyti visą PHP Perlu. Na, ne toks jau ir slaptas (o tuo labiau sunku jį pavadint planu), nes tai tik prieš porą dienų
pusiau juokais kilusi idėja. Ach, tiesa, žadėjau nerašyti apie kompiuterastizmą.
Pro langą keičiasi Lietuvos kaimo vaizdai, viena po kitos priešpriešais lekia mašinos, važiuoju į Vilnių. Darau tai kiekvieną savaitgalį, bet šį kartą tai ne sekmadienis, o vasario 16-oji. Ir be to važiuoju į pasimatymą. Žodis „pasimatymas“ man visada atrodė (ir vis dar
atrodo) labai baugus, kažkuo įpareigojantis, kažkaip visada lengviau pasakyti „einu kavos“ ar „einu į kiną“ nei „einu į pasimatymą“. Tad šį kartą irgi turbūt einu ne į pasimatymą, o į susitikimą su pirmoone bei į kiną (pradedu suprasti, kodėl vakarų pasaulis taip mėgsta kad viskas būtų politically correct – neduok dieve, kas nors iš nelabai kruopščiai parinktų žodžių
ištrauks kokią nors potekstę, kuri tau nė nesisapnavo, bet kitiems ji atrodys savaime suprantama). Taigi, einu į kiną. Kalbant apie kiną, šiandien buvau aptikęs labai įdomią svetainę, kurioje aprašomi kino filmuose pažeidžiami fizikos dėsniai (na, žinot, viena iš tų
geekiškų svetainių su daug matematinių formulių, bet, tiesa, juk pažadėjau – nieko kompiuterastiško).
Jeigu rimčiau, tai man šiandien didžiausią įspūdį padarė vieno kompiuterasto dienoraštyje aprašyta Valentino dienos proga gauta atvirutė nuo žmonos, kurios vienoje pusėje parašyta „I want you to treat me like you treat the Internet“, o kitoje – „I want you to spend the whole day with me“. Aš netgi tokios negavau. Tad reikia kažko imtis ir bent ja pabandyti parašyti ką nors nekompiuterastiško. Kaip matot ne kas išėjo :/
Happy unimaginative, consumer-oriented and entirely arbitrary, manipulative & shallow interpretation of romance day!
– http://www.meish.org/vd/
Bent jau pasirašiau skriptuką, kuris vis spausdina į konsolę „myliu tave, moxliuk!“.
perl -le 'print q[Myliu tave, moxliuk!] while 1'
Taigi visi trimituoja, kad Microsoft Windows 2000 ir NT4.0 kodas laisvai platinamas internete. Lietuvišką naujieną apie tai galima rasti
OMNI portale (ir delfyje). Įdomu, kad lietuviška naujiena omnyje ir delfyje skiriasi labai nedaug ir omnyje yra paliktas labai įdomus angliško termino lines of code vertimas:
“Microsoft” teigimu, jos operacinių sistemų “Windows NT” ir “Windows 2000” pirminio kodo kopijos buvo platinamos internetu, tačiau tose kopijose buvo mažytė milijonus brūkšnių turinčio kodo, naudojamo pagrindiniams jos produktams kurti, dalis.
Matyt Windows rašyti brūkšniniu kodu ;-)
Aš pats kodo nemačiau, bet bylų sąrašas tikrai įdomus – galima rasti net linuxinių coredumpų.
O štai ir galimas paaiškinimas iš kur nutekėjo informacija iš vieno laiško į securityfocus:
if someone have the code and take a look on this file.
./private/security/msv_sspi/core
( its not source code or part of windows , so not ilegal)gdb -c ./private/security/msv_sspi/core
Core was generated by `vi nlmain.c’.The file is realy old: Aug 3 2001
If you make an strings on it you could discover some extrange things..
HOSTNAME=voltaire
LOGNAME=eyala
REPLYTO=eyala@mainsoft.com
ORGANIZATION=Mainsoft Co. Ltd.
PWD=/usr/ms/win2k_sp1/private/security/msv_sspiQuote from mainsoft website
Mainsoft has been a long-time partner of Microsoft since 1994,
when Mainsoft and Microsoft first entered into a source code
licensing agreement whereby Mainsoft gained access and
distribution rights to Windows operating system source code.
Turbūt įdomybės dar tik prasideda ir galima tikėtis naujų skylių Windowsuose ir kitokių siurprizų.
Prie pietų stalo, sėdėdamas „Čili“ picerijoje ir belaukdamas kada man atneš ką nors pavalgyti, papildžiau santrumpų sąrašą. Be to sudėjau jį į YAML formatą, kad būtų jį lengviau parsisiuntus panaudoti.