Moblogas

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. pašto apdorojimo programėlę. Pakeitimų ne tiek daug kaip atrodo ;)

Štai kodas, kuris apdoroja gautą el. paštą, surašo kur reikia attachmentu atėjusias JPG bylas ir įterpia reikiamus duomenų bazės įrašus:

#!/usr/bin/perl -w

use strict;use MIME::Parser;

use FileHandle;

use File::Path;

use DBI;

$|++; # Autoflush on

# Prisijungiam prie MySQL

my $dbh = DBI->connect("DBI:mysql:database=moxliukas;dbhost=localhost",

        'moxliukas', 'passwordas');

# katalogų keliai - laikinas ir output

my $tmp_dir = '/home/moxliukas/tmp';

my $output_dir = '/home/moxliukas/public_html/moblog/images';

my $parser = MIME::Parser->new;

$parser->output_dir($tmp_dir);

# Skaitom viską iš STDIN

my $entry = $parser->parse(*STDIN);

# Kiekvienai MIME daliai...

for my $part ($entry->parts) {

       # Žiūrim koks duomenų tipas

        my $mime = $part->mime_type;

        if($mime =~ /jpeg/) {  # jei tai JPG...

             # sukuriam bylos pavadinimą pagal unix timestamp

                my $url = time() . '.jpg';

                my $fh = FileHandle->new($output_dir . '/' . $url, 'w');

                binmode($fh);

                my $ifh = $part->open('r');

             # perkopijuojam bylas kur reikia

                $fh->print($ifh->getlines);

                $_->close for($fh, $ifh);

             # įterpiam į duombazę

                my $sql = "INSERT INTO moblogs SET kada=NOW(), url='$url'";

                $dbh->do($sql);

        } else {

          # Jei tai ne JPG, praleidžiam šią dalį

                next;

        }

}

$dbh->disconnect;

Susinervinau

Vat sėdėjau visą 40 minučių ir rašiau ilgą dienoraščio įrašą apie tai kaip lietuviškose interneto svetainėse retai tikrinami kintamieji gaunami per GET, POST, COOKIE ar kitokiais būdais iš vartotojo (su realiai egzistuojančiais pavyzdžiais, mandagias programutojų, kurių kodą paveldėjau, keiksnojimais bei patarimais kaip filtruoti viską ką gauni iš vartotojo) ir
netikėtai dingo elektra. Neilgam, kokiai 10 sekundžių :F. Tad straipsnio nebus :) Gal kitą kartą :)

Naršyklių statistika

Peržiūrėjau šiandieną naršyklių, besilankančių svetainėje statistiką. Labai įdomus neregėtas nematytas Mozillos augimas. Ar Jau mozilla pradeda rimtai įsitvirtinti paprastų, ne kompiuterastinių, žmonių kompiuteriuose? Aišku vis dar apie pusę serverio apkrovos tenka būtent mano svetainei, o čia renkasi kompiuterastai, bet vis tiek tendencijos gana ryškios.

%          birž.   liepa   rugp.
IE6.0      56.69   56.56   54.64
IE5.5       9.97    8.44    2.85
IE5.0      17.06   16.16    9.58
Mozilla     5.20   11.97   24.16
Opera7      0.50    0.97    1.17

Diena offline

Šiandien praleidau toli nuo interneto važinėdamasis dviračiu po Kauną ir keldamas avarines situacijas (taip, ir aš kartais turiu gyvenimą :)

Tiesa, esu patvarkęs svetainės kodą, ir galite jį atsisiųsti (ten jau su komentarais — gal ir ne visai stable, bet bent jau testing :)

Svetainės bugai

Kaip ir sakiau, taip ir įvyko. Komentaruose dar pilna bugų ;)

Pirmiausia noriu padėkoti godzhirra_da_mc už tai, kad atrado problemą postinantdidelius komentarus (pasirodo problema  buvo ne tame, bet tai padėjo išaiškinti teisybę). Problema standartinė — neteisingai eskeipinamos viengubos kabutės (dėl to pradeda strigti MySQL kodas, ir labai lengva padaryti “SQL injection“). Atrodo sutvarkiau šį klausimą.

Kitas dalykas, kurį pastebėjau — blogas komentarų formatavimas, kai jame yra didelių žodžių be tarpų (tarkim pora šimtų ‘a’ raidžių). Ateityje padarysiu, kad žodžius skaidys jei jie bus per didelio ilgio (nebent tai URL… čia dar reikės pakrapštyt galvą).

Idėja svetainės kodo pateikimui

scooox pasiūlė idėją, kad šios svetainės kodas būtų automatiškai generuojamas ir pateikiamas parsisiuntimui. Manau kad tai gera idėja. Turbūt reikės pasirašyti perlinį skriptą ir pakabinti jį ant cron kad kas kokias 6 valandas subuildintų ir supakuotų naują versiją. Na bet pradžioj reikia sutvarkyt tą komentarinę košę ;)

Šios dienos svetainės pakeitimai

Š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. Vat to rezultatas — MySQL serveris pasakė ‘Too many connections’ ir pakratė kojas. Dabar atitinkamą prisijungimo prie serverio kodą $dbh = DBI->connect(... pakeičiau į $dbh ||= DBI->connect(... Programuoji ir mokaisi.

Kitas dalykas, kurį šiandien įdėjau — komentarai. Tiesa, jų neplanavau paleisti anksčiau nei dar po poros dienų, bet taip jau gavosi. To pasekmė — kodas pradėjo atrodyti tikrai Perliškai, t.y. visai neįskaitomai. Be to keletas dalykų pačiame kode man kol kas kelia nerimą, tad bent jau porą dienų, kol viską sutvarkysiu, nereiktų stebėtis jei čia atsiras klaidų. Nors pirmą svetainės kodo versiją ir galite atsisiųsti, bet nepatarčiau naudoti dėl tos MySQL problemos (na arba jei labai labai norit naudot, tai pakeiskit tą prisijungimo eilutę, arba naudokit tik CGI aplinkoje. Kai tik pats būsiu šiek tiek labiau patenkintas komentarų kodo kokybe, įdėsiu viską kad būtų galima parsisiųsti.

Startas…

Po kieto disko mirties ir visiškos laiko stokos visgi pagaliau susiruošiau perdaryti savo svetainę. Nusprendžiau perdaryti ją visiškai iš naujo — su nauju dizainu (jei vien tik programuotojo kuriamą svetainę galima priskirti prie iš vis dizainą turinčių darbų) ir su nauja koncepcija (ech, skamba išdidžiai). Kaip ir visų žmonių interneto svetainėse, čia bus krūva nuorodų į man svarbius puslapius (kadangi esu interneto programuotojas, tai jos turbūt bus naudingos ir kitiems užsiimančiais panašiais dalykais). Taip pat čia turėtų būti ir šūsnis mano minčių (nors žinau, kad jų niekas turbūt ir neskaitys — programuotojiškos kompiuterastinės mintys mažai ką domina).

Tiek apie idėja. Dabar apie technologijas. Tikiuosi, kad ši svetainė taps mano paties žaidimų vieta. XML, XML-RPC, XSL, XHTML, RSS/RDF, WAP/WML… Viskas kas normaliam žmogui skamba kaip keiksmažodžiai, o ir programuotojui kol kas naujos technologijos. Jau dabar stengiausi, kad svetainė atitiktų XHTML1.0 Transitional standartą. Pačiame HTML elementų išdėstyme nepanaudojau nei vienos lentelės — viskas padaryta CSS stilių pagalba. Kai svetainė bus daugiau ar mažiau baigta, pateiksiu jos programinį kodą visiems norintiems — man patinka atviro kodo idėjos.