Moblogo patobulinimai

Atradau beeksperimentuodamas, kad galima nuotraukas siųsti iš
mobilaus ne per MMS, o
per paprastą elektroninį paštą (na kaip paprastą… per GPRS tiesiai iš
telefono). Tai reiškia, kad nereikės mokėti viso 1,50 Lt už vieną MMS žinutę (nuo spalio
pabaigos berods) ir bus galima apsiriboti paprastu GPRS. Kadangi viena
nuotrauka užima apie 15KB (su base64 kodavimu matyt apie 20KB), tai
vienos nuotraukos siuntimas į moblogą kainuoja apie 0,15 Lt (huh, 10
kart pigiau nei MMS)
dienos metu, o naktimis nemokamai. Plius dar yra berods 4 ar 5 MB
nemokami per mėnesį, tad mobloginimas nėra toks brangus
užsiėmimas.

Dar vienas geras dalykas – kai siunti per paprastą GPRS tai
gaunasi normalesnė el.pašto žinutė (neprideda keistų
application/smil (nors ten šiaip XML) priedų). Be to užsieniečiai kalba, kad per
MMS siunčiami
paveiksliukai serveryje dar kartą kompresinami ir dar labiau
nukenčia kokybė. Nežinau, to lyg ir nepastebėjau.

Padariau dar taip, kad su el.paštu siunčiama text/plain
dalis matytųsi mobloge kaip nuotraukos pavadinimas.

Tad technologinių kliūčių kaip ir nebeliko. why2liz čia labai krykštavo, kad
dėl šito moblogo lyg ir gerėja lietuviškų weblogų kokybė. Aš kaip tik
esu linkęs manyti priešingai. Dar kai rašai tekstą, tai turi pamąstyt ką
rašysi, apgalvot. O čia tik spusteli mygtuką ir viskas. Per daug lengva,
per maža pastangų, tad neabejotinai ir turinio kokybė mažesnė (be to aš
iš vis sunkiai įsivaizduoju ką kasdien galima kompiuterastiško pasakyti
nuotraukomis – per didelė pagunda daryti niekam neįdomias picų ar
sriubos nuotraukas su užrašu „noriu valgyt“). Tad jei ir
fotografuosiu bei taip pildysiu savo moblogą, kažkaip abejoju ar jis bus
naudingas ir manau kad jis bus labiau asmeniškesnis nei
kompiuterastinis. Na turbūt jei mano nuomone dėmesio vertų
kompiuterastinių vaizdelių atsiras mobloge tai turbūt reikės juos
plačiau pakomentuoti ir paprastame webloge. Žiūrėsim kaip
čia… tik per daug rimtai į tą moblogą nereiktų žiūrėt.

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;