Dar vieno analitiko svetainė
Petras Kudaras
Perl
Vakar gavau laišką iš žmogaus, kuris ruošiasi standartizuoti Perlo programavimo kalbos dokumentacijos vertimo sistemą. Kadangi prieš kokius trejus metus aktyviai tame reiškiausi, tai jis pakvietė mane prisidėti:
I am currently planning to create a platform/repository for the
translation of the Perl documentation. I would like to invite you to
join the “core team” that does the initial planning and will hopefully
co-ordinate the translations as well as contribute to them.
Skaityti toliau…
Šiandien darbe pasikūriau dar vieną nedidelę wiki sistemėlę visokiems greitiems užrašams susikategorizuoti. Savaime suprantama (na, savaime suprantama, jeigu pažįstate mane), ji rašyta Perlu. Labiausiai maloniai nustebino jos įdiegimas. Tereikia instaliuotis modulį per CPAN ir parašyti tris eilutes konsolėje:
moxliukas@bluecarrot:~$ mkdir public_html/kwiki moxliukas@bluecarrot:~$ cd public_html/kwiki moxliukas@bluecarrot:~/public_html/kwiki$ kwiki-install Kwiki software installed! Point your browser at this location. Paprasčiau nebūna. Beje, ši wiki sistema vadinasi Kwiki, o ją galima rasti čia.
Pastarąją savaitę Perl susirašinėjimo sąrašuose labai aštriai diskutuojama viena Perl klaida, kuri ką tik buvo ištaisyta. Kai kurie sako, kad tai visai ne klaida, kad viskas turėtų būti palikta kaip ir buvo. Na, gal kas galit pasakyti, kur čia klaida šitame sakinyje:
my $foo = 1 if $bar; Problema yra tame, kad $foo yra leksinis kintamasis, ir nelabai aišku, kaip apibrėžti jo galiojimo sritį. Jeigu tą patį perrašysime kitaip, tai srities ribos žymiai paaiškės:
Skaityti toliau…
Po PHP konferencijos jau kokie trys žmonės manęs teiravosi, ar aš nesiruošiu daryti kokios nors atsakomosios konferencijos Perl tema. Tiesą sakant tokia maža ir neryžtinga mintis buvo kilus, paskui labai greitai jos atsisakiau, o vat dabar tie klausinėjimai vėl privertė ją prisiminti.
Konferenciją suorganizuoti gal ir nėra taip sudėtinga, tačiau pats neaiškiausias dalykas būtų tokios konferencijos reikalingumas (na… kiek žmonių iš vis tai būtų įdomu… Lietuvoj ta Perlo kalba yra primiršta ir entuziastų kaip ir nedaug) bei jos kokybė (Tarkim Perlo pradmenis aš moku gal ir neblogai, bei moku pritaikyti jį web aplinkoje, bet su sistemų administravimo moduliais nesu dirbęs… ir ar atsirastų žmonių kurie sutiktų aukoti savo laiką ir būtų pasiruošę pašnekėti apie vieną ar kitą niuansą).
Skaityti toliau…
Vakar išleista pirma jau kiek rimtesnė Parrot versija – v0.1.0. Parrot yra platforma, šiek tiek panaši į .NET bei JVM, skirta interpretuojamoms kalboms kaip PHP, Ruby, Python, TCL, Basic, LISP, o ypač Perl6. Šioje naujoje versijoje svarbiausi pokyčiai yra gijų palaikymas (threads), bei svarbiausia – objektai. Taipogi atsirado daug daugiau dokumentacijos. Parsisiųsti
galima adresu http://www.cpan.org/authors/id/L/LT/LTOETSCH/parrot-0.1.0.tar.gz,
o daugiau apie patį Parrot – http://parrotcode.org.
Tuo tarpu Damian Conway išleido septintą egzegezę (Perl6 sintaksės aprašymą) apie tai, kas Perl6 pakeis Perl5 formatus.
Skaityti toliau…
$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.
Skaityti toliau…
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ą.
Skaityti toliau…
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).
Skaityti toliau…
Perlo konferencijoje buvo iškeltas pasiūlymas, kad į standartinius Perlo modulius reiktų įtraukti ir kokią nors šablonų sistemą. Tiesa, ši idėja priimta nelabai gerai, nes paskutiniu metu stengiamasi Perlą sumažinti kiek įmanoma paliekant tik svarbiausius modulius, kurių reikia pačiam Perlui bei kitų modulių pasiėmimui per CPAN.
Tačiau šioje diskusijoje iškilo dar viena labai idomi idėja – galbūt reikėtų nuportinti Smarty ant Perl. Štai citata:
By the way, has anyone written a perl module to correctly interpret the
Skaityti toliau…
Paskutinėmis praeitų metų dienomis staiga mirė vienas iš Perlo programuotojų, perlreref autorius (lietuviškas vertimas
čia) Iain „Spoon“ Truskett. Jam tebuvo tik 24 metai.
Taip viskam atsitikus, liko keletas jo CPAN modulių, ir Perlo bendruomenė pradėjo rūpintis, kad jie nebūtų apleisti. Vienas modulis patraukė mano dėmesį, nes panašių minčių turėjau ir aš. Tai PHP::Strings, kuriuo implementuojama daugelis PHP funkcijų Perlu. Pasisiūliau jį prižiūrėti, jei neatsiras kas nors labiau patyręs ;-)
Pačiame modulyje yra keletas įdomių nuorodų, kur aprašomi PHP trūkumai, štai jie:
Skaityti toliau…
Vakar vakare buvo išleistas Perl 5.8.3. Didelių problemų su
Release Candidate lyg ir nebuvo, tad nėra ir didelių pakeitimų.
Lietuvišką pokyčių aprašymą galite rasti čia (HTML
variantas)
Kadangi jau turbūt ryt ar poryt bus išleistas pirmas Perl 5.8.3
Release Candidate, tai išverčiau pokyčių sąrašą, kurį galima
pamatyti adresu http://moxliukas.esu.as/download/doc/perl583delta.pod
The URL http://moxliukas.esu.as/download/src/Perl/Asmens-Kodas-0.01.tar.gz has entered CPAN as file: $CPAN/authors/id/K/KU/KUDARASP/Asmens-Kodas-0.01.tar.gz size: 1859 bytes md5: 14269ea9efca41e0559951ac20152858 No action is required on your part Request entered by: KUDARASP (Petras Kudaras) Request entered on: Mon, 29 Dec 2003 09:07:23 GMT Request completed: Mon, 29 Dec 2003 09:09:13 GMT Thanks, -- paused, v460 Reikės dar padaryt normalesnį datų tikrinimą Asmens kodui :/
Pagal perldoc perlhist šiandien yra 16-asis perlo gimtadienis. Šia gimtadienio proga Richard Clamp nubraukė dulkes nuo senojo perlo ir išleido 1.0_16 versiją (su pataisymais, kad kompiliuotųsi ant gcc 3.3)
Dar viena naujiena iš Perl pasaulio svetainėje http://use.perl.org:
žodis „Perl“ įtrauktas į Oksfordo anglų kalbos žodyną. Įraše sakoma, jog nereiktų rašyti PERL, kad Perl yra kalbos pavadinimas, o perl – interpretatoriaus, kad pirmą kartą žodis oficialiai panaudotas Larry Wall Usenet žinutėje 1987 metų gegužės 13 dieną.
Va ką šiandien užtikau:
Posted today on PerlMonks was an interesting tool. Eventually, I
hope you Python monkeys will come to your senses and turn to Perl
for sanity. To ease such transition, see the Perthon project:
/http://perthon.sourceforge.net
Now, your Python code can be reborn as the Perl it always should
have been.
Komentarų turbūt nereikia ;-) Šiaip įdomus projektukas (bet kaip
ir dauguma kalbų vertėjų turbūt nelabai pritaikomas praktikoje)
Pagalvojimai apie ateitį: geresni konstruktoriai Nors šiuo metu dar gal ir nežinote kas yra paveldimumas, bet kažkada ateityje matyt teks su tuo susidurti. Tam, kad paveldimumas veiktų kaip turėtų, reikia naudoti bless() sudviem argumentais. Antruoju argumentu yra perduodama klasė, į kurią bus „palaiminama“. Tuo pačiu padarysime konstruktorių lankstesnį, kad būtų jį galima iškviesti tiek kaip klasės, tiek kaip ir objekto metodą. T.y. kad būtų galima rašyti:
$as = Asmuo->naujas(); $ji = $as->naujas(); Viskas ką mums reikia padaryti, tai patikrinti ar į konstruktorių buvo perduota nuoroda (reference) ar ne.
Skaityti toliau…
Kaip ir pernai metais, Mark Fowler sudarė perlinį advento kaledorių,
kuris kiekvieną dieną iki Kalėdų pasakos apie vis naują Perlo modulį ir
aiškins kaip jsuo naudotis. Kalendorių galima rasti adresu http://www.perladvent.org/2003/
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
Skaityti toliau…
Vakar IRC buvau paklaustas, kaip yra daromi objektiniai Perlo moduliai. Parašiau ir paprastą moduliuką, kuris parodo kaip veikia visas Perlo objektiškumas. Štai modulis Modulis.pm:
package Modulis; use strict; use warnings; sub naujas { bless {}; } sub vardas { my $self = shift; $_[0] ? $self->{'vardas'} = $_[0] : $self->{'vardas'}; } 1; Modulis prasideda paketo apibrėžimu (package Modulis;) bei aprašo dvi funkcijas (tiksliau vieną funkciją ir vieną metodą). Funkcija naujas sukuria ir grąžina naują objektą Modulis.
Skaityti toliau…
Nagi šiandien tapau 236-uoju Perlmonks šventuoju. Tai vat. Pasigyriau.
Acme::Apache::Werewolf yra naujas ir labai naudingas Perlo modulis, kuris leidžia apsaugoti Apache serverio direktorijas nuo vilkolakių. io modulio pagalba galima uždrausti priėjimą prie Apache direktorijų mėnulio pilnaties metu, tereikia į httpd.conf įrašyti:
<Directory /fullmoon> PerlAccessHandler Acme::Apache::Werewolf PerlSetVar MoonLength 4 </Directory> Tris kart valio CPAN, nes dabar mano Apachei nebaisūs jokie vilkolakiai.
Šeštadienį buvo išleista 5.6.2 Perlo versija. Perlo 5.6.x šaka nėra mirusi, ji vis dar palaikoma. Pagrindinis šios versijos tikslas buvo galimybė sukompiliuoti Perlą su naujais įrankiais (kaip kad gcc 3.3) ir operacinėmis sistemomis, kurios atsirado jau po Perl 5.6.1 išleidimo (AIX 5 ir Mac OS X). Tuo pačiu buvo atnaujinti ir kai kurie moduliai. Parsisiųsti 5.6.2 galima iš čia.
Vakar naktį pasidariau moblogą. Tai turbūt vienas iš tų projektų kur dariau nes galiu padaryt, o ne todėl kad reikia. Faktiškai Perlo kodo rašymas visada malonus, net jei ir nepildysiu to moblogo ateityje – iš manęs fotografas tai kaip iš mano bobulės perlininkė.
Visam šitam daiktui tiesiog persikopijavau savo svetainės kodą į kitą direktoriją, šiek tiek pataisiau šablonus (bet ne iki galo, nes vakar jau labai norėjosi miego), sukūriau porą SQL lentelių, pataisiau kodą, kad dirbtų su tomis naujomis lentelėmis ir parašiau el.
Skaityti toliau…
Pastarosiomis dienomis internete sklando šis tekstas:
Aoccdrnig to a rscheearch at an Elingsh uinervtisy, it deosn’t mttaer in waht oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht frist and lsat ltteer is at the rghit pclae. The rset can be a toatl mses and you can sitll raed it wouthit a porbelm. Tihs is bcuseae we do not raed ervey lteter by it slef but the wrod as a wlohe.
Skaityti toliau…
Jau keletą kartų esu minėjęs Perlo modulį HTML::Mason, kurio dėka galima rašyti web skriptus PHP stiliumi. HTML::Mason geriausiai veikia ant mod_perl, bet tik ant pirmos Apache versijos. Nežinau ar tai gerai, bet stengiuosi po truputį pereiti prie Apache2, o ten pasirodo HTML::Mason dar nėra palaikomas per mod_perl. Bet visgi sprendimas yra – naudotis CGI sąsaja.
Beje, Oreilly knyga apie HTML::Mason kabo nemokamai internete adresu masonbook.com. Tai šiandieną turbūt paskirsiu jos skaitymui (nors ir gimtadienis mano ;).
Skaityti toliau…
Bevaikštinėdamas po interneto svetaines aptikau nuorodą į labai puikų skaidrių rinkinį, kuris labai aiškiai paaiškina, kaip veikia įpraiškų variklis Perle (na, ar bet kur kitur, kur veikia Perlo įpraiškos). Jeigu naudojatės įpraiškomis, bet tiksliai nežinote kaip jos veikia, tai labai naudinga pasiskaityti. Skaidres
galima ir parsisiųsti.
EnC manęs PHP forume paprašė paaiškint, kaip veikia Perlo „range“ operatorius. Nesinori PHP forumą teršti perliniais dalykais, tad bandysiu tai paaiškinti čia. Beje, visa tai ką čia rašau galima rasti Perlo dokumentacijoje (konsolėje tereikia surinkt perldoc perlop).
Perlo „range“ operatorius žymimas dviem taškais, ir reiškia faktiškai du dalykus. Pirmoji reikšmė yra labai paprasta – parašius 1..10 gausime reikšmių nuo 1 iki 10 sąrašą (list). Būtent ši operatoriaus reikšmė naudojama masyvų kontekste (list context – kai reikia jog išraiška grąžintų masyvą, o ne skaliarą).
Skaityti toliau…
Vienam žmogui iš PerlMonks kilo panaši problemą kaip ir man, darant šią svetainę – jis, uždavęs MySQL užklausą SELECT * FROM users WHERE id=100 norėjo naudotis rezultatais pateiktais hešais (t.y. $user{username}, $user{email} ir panašiai). PHP tai būtų padaroma su mysql_fetch_assoc() funkcija. Perle pasirodo tai nėra nei kiek sudėtingiau (net šiek tiek gėda pačiam pasidarė, kad pats nesugalvojau) – my %user = %{ $sth->fetchrow_hashref } padaro tai ko reikia.
Visiems gi pasitaiko tokių proto nušvitimo akimirkų ;)
use.perl.org rašo apie naują svetainę pradedantiems mokytis Perl. Ši svetainė bando surinkti visas nuorodas į pradžiamokslius, straipsnius, dokumentaciją, Perlo portus, modulius, knygas ir daug daugiau. Tiesą sakant, ta svetainė labai panaši į mano lietuviškos svetainės apie Perl viziją (maniškė vizija dar turi kažkokį „naujienų“ skyrelį pirmame puslapyje).
Hmm… aišku bėdos su MySQL nesibaigia. To $dbh ||= triuko nepakako, teko skripto gale nutraukinėt ryšį su MySQL naudojant $dbh->disconnect; — tai veikia gerai, bet niekas nebekešuojama.
Ir čia į pagalbą atėjo Apache::DBI. Pasirodo užtenka jį užkrauti httpd.conf failiuke ir magiškai visos jungtys su MySQL tampa ‘persistant‘. Smagu ;)
Šiandien čia padariau nemažai pakeitimų, bet ne viskas taip gerai ėjosi, kaip būtų galima pagalvoti.
Pirmiausia tai ką tik baigiau tvarkyti (atrodo lyg sutvarkiau) MySQL serverio problemą, mat jis ėmė ir užlinko. Na, čia aišku yra mano programavimo klaida, nes pirmą kartą Perlu darau webinę aplikaciją, kuri nėra rašyta CGI. Ši svetainė naudoja mod_perl, o tai reikškia, kad automatiškai visas Perl kodas (ir ne tik kodas) yra kešuojamas. Svetainės kodą aišku rašiau kaip CGI aplikaciją, nekreipdamas jokio dėmesio į tai kad viskas kešuojama.
Skaityti toliau…
Taip, žinau. Vis neprisiruošiu pabaigti normaliai to straipsnio apie RegExpus. Iki šiol jis buvo labai nepilnas. Šiandien bent jau pabandžiau labai labai (na tikrai jau labai) trumpai sudėti informaciją apie tai, ko dar neminėjau jame. Ten faktiškai gale tik krūva pavyzdžių (netgi ne krūva… tiesiog keletas) dabar. Reikėtų juos aprašyt normaliai. Na o po to reiktų ir antrą dalį parašyt, apie ‘extended’ sintaksę. Ir pritaikyt viską Perlui ;).
Molotov davė man nuorodą į PHP kodo tvarkymo programą, rašytą Perlu (kažkas panašaus į visiems programuotojams žinomas lint programas). Ši programa gana gražiai parodo Damian Conway rašyto Parse::RecDescent modulio galimybes. Yra tik vienas trūkumas. Ji lėėėėta. Pasak kūrėjų “several hours for one of our 800 line examples on a gHz CPU“. Manau galima ta programėlę dar rimtai paoptimizuoti, nes pora valandų 800 eilučių kodui iš tikrųjų daugoka. Ech, jei tik turėčiau laisvo laiko…
Skaityti toliau…
Pastarieji metai Lietuvos Perlo programuotojams turbūt buvo apsnūdimo metai (Na, aišku aš galiu kalbėti tik apie IRC bei konferencijose dalyvaujančius žmones). Interneto programavime stipriose pozicijose įsitvirtino PHP, ir tam didelės reikšmės turėjo ir stipri Lietuvos PHP bendruomenė. Daugelis pripažįsta, kad PHP lengvai išmokstama kalba, labai tinkanti pradedantiesiems, bet dideliems projektams ji netinka. Tuo tarpu Perlas – galinga, bet sudėtinga kalba.
Norint išpopuliarinti Perlą reikia bent paprastos lietuviškos jo dokumentacijos bei straipsnių pradedantiesiems – Perlas ir taip sudėtinga, vos ne „write-only“ kalba.
Skaityti toliau…