Naujas mobilus – nauji džiaugsmai

Na štai nusipirkau naują mobilų – tikrą kompiuterasto svajonę.
Yra visos javos, GPRS, infrared, Bluetooth ir panašiai. Tai Ericsson T610. O kad
jei jau yra infraraudonųjų spindulių galimybė, ta galima išsibandyti ir
priversti Palmą dirbti su internetu. Na, daug privertinėt nereikėjo,
viskas veikia puikiai ir gražiai. Tai yra pats susijungimas veikia
puikiai ir gražiai, o vat su internetinėmis programomis tai šiek tiek
skurdžiau.

Pradžiai ieškojausi IRC
klientų. Radau jų keletą, bet visi jie shareware. Na,
pasibandymui užtenka. Tik labai jau nepatogu piešti visas raides kai
nori kalbėtis IRC – jau
galvojau nespėsiu identifikuotis su NickServ.

Toliau bandžiau ieškotis normalaus pašto kliento. Radau daiktą
pavadinimu GNU GotMai. Tai paprastas SMTP/POP3 klientas, kuris pats net negali skaityti laiškų
– tam reikia dirbti su (mano nuomone) itin nepatogia programa
Mail. Reikės giliau pasiknaisiot. Bet iš esmės savo funkcijas
GNU GotMail atlieka puikiai.

Su web naršyklėmis atrodo yra sudėtingiau (o aš labai daug ko
tikėjausi pamatęs offline naršyklę Plucker). Bet
šiandien tik pirmoji diena, reikės interneto platybėse pasižvalgyt
atidžiau.

Hmm, beje, šitame mobiliame yra ir fotoaparatas. Niekaip nerandu kaip
iš jo iškrapštyt nuotraukas nesiunčiant jų per MMS – čia konspiracija ar mano žioplumas?

Nokia Plugin

Visgi reikėjo pasidaryti telefono backupus. Po vakarykščio apsilankymo Forum Palace vykusiame Nokia Plugin kažkur pradanginau savo mobilų (Pavogė? Pamečiau? Mobilus įgijo
sielą ir žaviai mirksėdamas savo diodu išėjo ieškoti merginų?). Kad ir kaip ten bebūtų, mano mobiliam tai
turbūt patinka, nes bandant su juo susisiekti atsiliepia mergina vardu „balso paštas

Vis dar nevalingai siekiu kelnių kišenės, nes vis kyla noras įsijungti WAP ir pasižiūrėti ar šioje svetainėje padaugėjo komentarų ar bent jau pažvelgti į jo logotipą. Dar labiau suspaudžia širdį kai pagalvoji kad kartu dingo
visi telefono numeriai. Nors yra ir privalumų – niekas neskambina ir neklausia ar padarei tą ir aną. Be to
bus dabar proga įsigyti naują aparatą, kuris suprastų kas yra infraraudonieji spinduliai (Palmas jau seniai laukia
interneto).

Dabar kai žvelgiu į ant rankos mėlynuojantį apsitrynusį antspaudą „Nokia plugin“ manau, kad renginys
buvo puikus. Tik reikėjo pasidaryti backupus.

Myliu vim

Teko praleisti praeitą naktį prie kompiuterio stengiantis parašyti
kuo daugiau veikiančio PHP kodo. Apie kokią antrą valandą nakties
sėdejau su vim ir pamaniau kad turbūt nieko į jį
nekeisčiau. Yra tekę bandyt ir visokius GUI redaktorius ir
mcedit ir nano, ir pico, bet
niekas negali prilygti vim (nebent emacs
– reiktų tą irgi išbandyt normaliai).

Tiesa, vim yra gana baisus naujokams. Prisimenu aš pats
nemokėjau iš jo išeit kai pirmą kartą jį paleidau ;) Bet dabar sau
ramiai žongliruoju iki dešimties langų ir kokia 30 buferių, naudodamasis
įpraiškomis darau pakeitimus tekste ir pan. Štai keletas
vim komandų, kurias gal ne visi žino:

:w [byla]   įrašo buferį į bylą
:q          išeina iš dabartinio lango
:q!         išeina iš dabartinio lango, nesišsaugant buferio
:r [byla]   įterpia bylą į buferį
:![shell]   įvykdo shell komadą
:r ![shell] įvykdo shell komandą ir įterpia rezultatą į buferį
:ls         parodo buferių sąrašą
:bd [nr]    ištrina buferį nr [nr]
:sp [byla]  atidaro bylą redagavimui naujame lange
:clo        uždaro langą
:set nu!    įjungią eilučių numerių rodymą
:set ts=4   nustato tabstop = 4
:syn on     įjungia "Syntax highlighting"
ctrl+w o    padidina langą per visą ekraną
ctrl+w [rodykle] perkelia kursorių į kitą langą
/[zodis]    žodžio paieška buferyje
:%s/foo/bar/g pakeičia 'foo' visoje byloje į 'bar'

PLP: Perliškas PHP

Šiandien man akis užkliuvo už projekto pavadinimu PLP. Tai labai papratsas Perlo modulis,
kuris leidžia naudoti Perlą taip kaip PHP – be jokių chmod ir headerių
formavimų bei tiesiai HTML kode. Privalumų yra keletas: labai lengvas
įdiegimas (ypač jei mod_perl jau įdiegtas), greitis (2-5
kart greičiau nei PHP) ir aišku pats Perlas ;)

Tiesa, galimybėmis PLP vis dar stipriai nusileidžia
tokiems projektams kaip HTML::Mason
ar embperl, bet kartu jis
žymiai paprastesnis ir lengvesnis naudoti. Štai PLP pavyzdys:

<html>
<head>
<title>Test</title>
</head>
<body>
<: print "hey, veikia!<br>" for 1..10; :>
</body>
</html>

Patogus Perlo įpraiškų naudojimas

Tarkim jums reikia, kad pritaikyti įpraišką simbolių eilutei ir
rezultatus sudėti į masyvą. Perle tai labai lengva:

@masyvas = $eilute =~ m/(kazkas)/g;

Šitas kodo gabaliukas veikia, nes =~ turi didesnę
reikšmę nei = ir todėl įpraiška yra pritaikoma anksčiau.

Jeigu reikia sužinoti tik kiek kartų įpraiška atitiko eilutę galima
daryti taip:

$kiek_kartu = $eilute =~ m/(kazkas)/g;

Viskas labai paprasta: jeigu rezultatą priskiriame masyvui, tai
gauname atitikmenų masyvą, jeigu rezultatą priskiriame paprastam
skaliarui, tai gauname atitikmenų skaičių. Viską galima padaryti ir
vienu ypu:

$kiek_kartu = @masyvas = $eilute =~ m/(kazkas)/g;

Tad šituo pasinaudojant galima tarkim išsitraukti visas nuorodas iš
HTML:

@nuorodos = $html =~ m/<a[^>]+href\s*=\s*["']?([^"'> ]+)/ig;

Nors tokiai užduočiai gal ir geriau naudoti HTML::LinkExtor
modulį.

Įdomūs rytiniai virusai

Šiandieną ryte gavau porą labai įdomaus viruso kopijų. Štai kaip
atrodo headeriai:

From - Tue Sep 16 08:37:52 2003
X-UIDL: Y&5!!dV,!!P*V!!?l^!!
X-Mozilla-Status: 0001
X-Mozilla-Status2: 10000000
Return-path: <admin@duma.gov.ru>
Envelope-to: petras@lietuvoje.lt
Received: from [81.7.106.87] (helo=localhost)
	by www.lietuvoje.lt with smtp (Exim 3.35 #1 (Debian))
	id 19z0nf-0003vz-00
	for <petras@lietuvoje.lt>; Mon, 15 Sep 2003 23:22:23 +0200
From: "Microsoft" <security@microsoft.com>
To: <petras@lietuvoje.lt>
Subject: Use this patch immediately !
MIME-Version: 1.0
Content-Type: multipart/mixed;boundary="xxxx"
Message-Id: <E19z0nf-0003vz-00@www.lietuvoje.lt>
Date: Mon, 15 Sep 2003 23:22:23 +0200
X-UIDL: Y&5!!dV,!!P*V!!?l^!!
Status: U

--xxxx
Content-Type: text/plain;
Content-Transfer-Encoding: 7bit

Dear friend , use this Internet Explorer patch now!
There are dangerous virus in the Internet now!
More than 500.000 already infected!

--xxxx

Labai įdomus socialinės inžinerijos pavyzdys. From lauke nurodyta security@microsoft.com,
pačiame laiške prašoma atsinaujinti ir užsilopyti savo programinę įrangą. Tiesa, galėtų šiek tiek oficialesniu
tonu rašyt o ne „Dear friend…“, nors nežinau, gal Microsoft marketingistai ir bendrauja tokiu tonu?

Kitas įdomus dalykas yra tas, kad Return-path yra admin@duma.gov.ru. Įdomu čia tikrai rusai susiję
ar tiesiog mėtomos pėdos ir bandoma jiems suversti kaltę ar norima užfludinti rusų dūmos vargšą adminą?

Įdomūs lingvistiniai pastebėjimai

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.

Komentarų kaip ir nereikia ;-) Tiesa, lietuvių kalboje suprasti sudarkytus žodžius yra žymiai sunkiau (nes turim mes galūnes, be to mūsų žodžiai ilgesni). Štai parašiai perlinį skriptuką kuris išdarko žodžius:

#!/usr/bin/perl -w
use strict;

while (<>) {
        s/([^[:punct:][:space:][:digit:]]+)/keichiam($1)/ge;
        print;
}

sub keichiam {
        my @w = split //, $_[0];
        my $p = shift @w;
        my $l = pop @w;
        my %h;
        $h{$_} = rand for @w;
        @w = sort { $h{$a} <=> $h{$b} } @w;
        $p .= $_ for @w;
        $p.$l;
}

PHP fanams internete yra ir PHP versija (pradinis kodas).

Switch galimybės Perle

Kaip žinia, Perlo kalboje nėra switch konstrukcijos. Gal
kam ir keista, bet yra keletas (kaip visada Perle yra keletas būdų
atlikti tam pačiam daiktui ;) būdų kaip apsieiti be to.
Pirmas būdas gana man bjaurokas, nes naudoja goto (nors
šiaip tai labai primena įprastą switch:


SWITCH:{ # switch($option)
    $_='CASE_'.$option; eval("goto $_"); $_= 'DEFAULT' if ($@); goto $_;

        CASE_1:    print "Case 1\n";
                last SWITCH;
        CASE_4:    print "Case 4:\n";
                last SWITCH;
        CASE_FOUR:    print "Case FOUR\n";
                last SWITCH;
        CASE_9:    print "Case 9\n";
                return "Because I can";
        CASE_WHAT:    ;
        CASE_STR:    print "Case STRING on $option\n";
                last SWITCH;
        DEFAULT:    print qq|Undefined Case "$option"\n|;
    }    

Dažniausiai naudojama nuorodų lentelė (dispatch table):


my %switch = (
    default             => \&list_ads,
    submit_payment      => \&save_payment,
    set_duration        => \&set_duration,
    go_here             => sub {print 'hi'},
);
$switch{$value} ?
    $switch{$value}->() :
    $switch{'default'})->();

Dar vienas būdas:

for ($val)
{
    /^1$/       && do { do_something };
    /^abc$/     && do { do_something_else };
    /^d{2,4}$/ && do { do_something_further };
}

Arba galima naudotis Switch
moduliu. There is more than one way to do it.

XHTML 1.1

Vakar kaip įprasta skaitinėjausi W3C standartus ir pamaniau, kad gal vertėtų pereiti
prie XHTML 1.1 standarto. Didžiausias šio standarto
skirtumas nuo ankstesnių versijų yra tas, kad reikia nurodyti
Content-type: application/xhtml+xml. Pasirodo jeigu
nurodomas senas text/html tipas tai naršyklės
interpretuoja kodą kaip įprastą HTML košę, net jei tai ir yra standartus atitinkantis
XML. Priversti naršyklę
dirbti XML režimu nelengva – būtent tam ir reikia specialaus
Content-type. Tiesa, XML parseris yra negailestingas – viena
klaidelė ir matysis tik klaidų pranešimai. Bet gana smagu turėtų būti
ant peilio ašmenų ;)

Tiesa, ne viskas taip paprasta kad tik pakeiti
Content-Type ir viskas. XML neturi jokios prasmės naršyklei, tad jį parodo kaip
XML medį. Tad reikia
priskirti stilius naudojantis ne sena gera <link>
žyme o štai tokia konstrukcija:

<?xml-stylesheet alternate="no" href="alt.css" title="alt" 
media="screen" type="text/css"?>

Bet problemos tuo nesibaigia. Jos tik prasideda ;) Mat XML nežino, jog tarkim
<p> yra paragrafas ir jį reikia vaizduoti kaip bloką.
Arba aš kažką ne iki galo padariau su DTD arba pačiam reikia didelį CSS rašytis. tad atidedu vėlesniam laikui ;)

Oh, beje IE visai nesusitvarko su application/xhtml+xml
ir siūlo saugoti jį (arba atidaryti su kita programa… tarkim Mozilla
– truputį ironiška ;)

Graži Perlo programėlė

Kas čia vis sako, kad Perlo programos neįskaitomos dėl to kad pilna
visokių @$%&*; ? Pasirodo, kad galima rašyti ir labai
švarias ir tvarkingas Pelro programas – Perlmonksuose blockhead parašė
vieną geresnių
obfuscated“ programėlių
:

#!/usr/bin/perl

not exp log srand xor s qq qx xor
s x x length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq q q xor int
eval lc q m cos and print chr ord
for qw y abs ne open tied hex exp
ref y m xor scalar srand print qq
q q xor int eval lc qq y sqrt cos
and print chr ord for qw x printf
each return local x y or print qq
s s and eval q s undef or oct xor
time xor ref print chr int ord lc
foreach qw y hex alarm chdir kill
exec return y s gt sin sort split

Šito kodo pervarymas per O::Deparse irgi neduoda naudos, netgi kaip tik dar viską supainioja:

moxliukas@www:~$ perl -MO=Deparse,q obfu.pl
print ' ' and eval " undef or oct xor\ntime xor ref print chr int ord lc\nforeac
h qw y hex alarm chdir kill\nexec return y " gt sin sort(split(" ", $_, 0)) unle
ss not exp log srand xor s// /x xor s/ / length uc ord and print chr\nord for qw
 q join use sub tied q/ xor eval $_ xor print ' ' xor int eval " cos and print c
hr ord\nfor qw y abs ne open tied hex exp\nref y " xor scalar srand print(' ') x
or int eval " sqrt cos\nand print chr ord for qw x printf\neach return local x "
;
obfu.pl syntax OK

Atrodo visa idėja yra gudrus xor naudojimas ir alternatyvių simbolių eilučių delimiterių nešykštėjimas. Reikės pasiknist dar giliau truputį ;)