Tag Archives: perl

Kada baigiasi “padėsiu kitiems” ir prasideda “patapau eiliniu fanatiku”

Kur eit pagalbos jei nesugalvoji algoritmo? Pirmai pradžiai – turbūt į mėgstamą IRC networką, tos kalbos kanalą.
Kadangi kokiame #php sėdžiu nuo ~2001 metų, tai labai puikiai matėsi evoliucija. Pradžiai buvo padedama. Paskui padedama retai. Paskui tiesiog “padedama”. Paskui be atodairos spardomi visi, kurie tik paminėjo phpnuke ar phpbb. Dabar gi, kartu su IRC apmirimu (musėt priešmirtiniu) kartu aprimo ir tiek kanalai bent jau lietuviškame Aitvare…
Ką gi, einam į freenode. Ten dar smagiau – nueini į kokį #php – amžinas bardakas, pradinukiškais klausimais “užmušami” visi specialistai ir rimtesnio lygio klausimai lieka neatsakyti. Na, toks jau tas PHP – dėl savo paprastumo ir populiarumo gavosi taip kad daugiausia problemų turi pradedantys, kurie mėgina suklijuoti 138876621 svetainę pasaulyje apie CS ar kažką panašaus.
Nukeliaujam į #perl. Na, sakykim neklausiu “parašykit kas programą kuri darytų tą ar aną”. Paklausiu idėjos, algoritmo. Prasideda diskusijos, trunkančios pora valandų, kurių eigoje paaiškėja, kad:

  • Man to nifiga nereikia (na, per pora valandų dar ne tokių dalykų įtikint galima)
  • Mano turimos idėjos sucks
  • 90% kanale sėdinčių nieko neišmano ir jų idėjos sucks taipogi
  • Programos kuri vos sudėtingesnė už “Hello world” kodas turėtų tilpt į dvi-tris eilutes, bet dėl sąmoningo obfuscatinimo, inline subsų, magic variables, backreference ir kalno kitokio crapo jinai būtų skaitoma tik aš-dešimtus-metus-mokinuosi-perlą specialistams
  • Jei tu galvoji kitaip tai pats ir daryk. Nuo nulio. Nes tą patį dalyką galima užrašyt n būdų, bet tik vienas teisingas!

…Rezultate vis tiek neturi to ko reikia.

Kokiam nors C, C++ kanale situacija dar liūdnesnė. Neduokdie nepataikysi paklaust… ;-)

Na, nelendu aš ten prašinėt pagalbos. Bent jau stengiuosi to nedaryt dažnai, paprastai būnu pasyvus stebėtojas. Bet kad situacija tokia smagi – kuo sudėtingiau išmokt kažką – tuo didesni fanatikai sėdi ir tuo aršiau jie gina savo nuomonę ;-)

Pats turbūt irgi taip darau, tik vat mėginu save pagaut – sunkiai sekasi. Iš kitos pusės, šiandien sukėlęs eilinį fleimą iš jo pabėgau – ir visai dzin, pasidariau “ūkišku” būdu. Nesvarbu kad specams tas kodas “sucks” – svarbu man smagu pasidarė =)

Oi jūs vaikai, nerūkykit to ką aš rūkau…

Žodžiu taip. Krapštinėju čia vieną tokią apmokėjimo sistemą (būna gi kartais tokių užsakovų norų – iš gero daikto padarykit fufelį), tai tarp debesies užklausų kurias pagimdžiau viena buvo tokia nenormali (sudėta į perl kintamąjį):

$disk_usage = "SELECT (SELECT
                        res.value*res.multiplier AS diskspace
                        FROM ve ve
                          LEFT JOIN resource AS r
                          ON ve.platform_id = r.platform_id
                          LEFT JOIN subscr_ve AS suve
                          ON ve.ve_id = suve.ve_id
                          LEFT JOIN subscr_orders AS sord
                          ON suve.subscr_id = sord.subscr_id
                          LEFT JOIN order_res AS res
                          ON sord.ar_doc_id = res.ar_doc_id
                          AND r.res_id = res.res_id
                        WHERE   ( suve.ve_id IS NOT NULL AND
                                sord.subscr_id IS NOT NULL AND
                                res.ar_doc_id IS NOT NULL AND
                                ve.ve_id=(SELECT ve_id
                                          FROM subscr_ve
                                          WHERE subscr_id='$sid'
                                          AND ve_id IS NOT NULL)
                        AND r.short_name IN ('diskspace'))
                        ORDER BY sord.start_date LIMIT 1) as space,
            (SELECT MAX(diskusage) AS diskusage
                    FROM ve_quota_stat_history
                    WHERE ve_id=(SELECT ve_id
                                 FROM subscr_ve
                                 WHERE subscr_id='$sid'
                                 AND ve_id IS NOT NULL)
                    AND interval_type=0
                    AND time_stamp BETWEEN '$times[0]' AND '$times[1]'
                    ORDER BY diskusage DESC LIMIT 1) as used;";

Kad dar nors kalba eitų apie MySQL 5.x – tada būtų galima labai supaprastinti reikalą. Betgi dabar turiu bėdą su 4.1, kurios negalima upgradinti ar keisti. Sutinku, kad užklausa neoptimali (ir turint laiko netgi žinau ką reiktų pakeisti), bet užtat veikia! =)
Iš vienos pusės – kapanotis po nedokumentuotus sistemos vidurius kaip ir neturėtų smarkiai vežti, iš kitos – užsivedžiau, ir galutiniame rezultate gavosi 2K eilučių monstras, kuris panašu kad jau daro tai ką reikia.
Sekant skaitytom frazėm:

  • Kiekviena programa turi bent vieną bugą
  • Kiekvieną programą galima sumažinti bent viena eilute

Padarom išvadą, kad kiekvieną programą galima sumažinti iki vienos eilutės, kurioje būtinai bus bugas…

Paskaičius tokių filosofijų bei parašinėjus tokias užklausas man nebereiks ir rūkyt (ko ir taip nedarau jau gerą laiką) – nuo skriptavojimo užsivesiu. Laiku tik į klubą kokį nulėkt! ;-)

Ar terorizmas tikrai toks kokį jį piešia?

Šiandien besiterliodamas su DBD::Sybase moduliu AMD64 perlui (jo nėra RPM pavidalu Centos/RHEL 5 sistemoms, taipogi ir iš CPAN nepavyks sudėti – bet pasižaidus su ‘RPM –relocate’ arba symlinkais iš /usr/lib64 į /usr/lib nebekilo problemų) kažkaip prisiminiau žemiau pavaizduotą paveiksliuką.

…Ir po kelių valandų visokio debuginimo, strace’inimo, hexdumpų aiškinimosi supratau, kad jei reiktų dabar rinktis RDBMS, tai vistik bėgčiau pas teroristus ;-)
P.S. paveiksliuką “nukosėjau” kažkur iš interneto. Priminsit jo originalų adresą?

Outgliukas – ką galvoja žmonės kurie jį mėgsta?

Remiantis vidaus informacinių sistemų naudojimosi politika darbe man tenka naudot Microsoft Outlook. Ne, net ne OE, kurį daugelis žino, o tą didžiulį griozdą. Na, nesiginčysim – savų “fyčiarų” jis turi, ko kiti esantys po ranka nepakeis (Visi tie public katalogai, kalendoriai (beje, kalendorius galima persimest kitur – VCAL -> iCal, na, o jau iCal tai daug kas “valgo”) ir pan. crapas), bet interneto platybėse galima sutikti žmonių, kurie naudojasi juo vien tik e-mailui ir yra patenkinti.
Jei toks kada nors apsilankytų, tai norėčiau jo paklausti – ką žmonės randa Outlook’e kaipo pašto kliente? Arba, gal man papasakoti su kokiomis problemomis susiduriu?

Išjungiame HTML’inius laiškus (nagi, nėra reikalo tam). Mėginam rašyti laišką. Nuorodos laužomos bet kaip, kaip papuolė, ilgesnės nuorodos “laužomos” dvejus kartus – vieną kartą wrapinama mano vizualiai matomame lange, kitą kartą – “rewrapinant” ties 72 simbolių riba. Sakykim, antrą problemą galima išspręsti paprastučio macroso pagalba – užtenka lango matmenis pakeisti prieš rašant laišką.

Mėginam atrašyti kam nors. Quote simboliai (“> “) išsilaksto bet kaip. Negana to, jis vėl paskaičiuoja tą rewrapinimo limitą, ir kai kur gaunam dvigubą quotinimą vietoj viengubo, o kai kas lieka nequotinta. Sprendžiant iš internetinių mailing listų bei kai kurių forumų – tai problema tempiasi nuo priešistorinių outlooko laikų.

… Ir jau visai nebeklausiu apie tokius dalykus, kaip tvarkingą teksto “perlaužymą” (kažkoks nevykęs terminas, galbūt žodis “rewrap” netgi ne taip turėtų būt verčiamas?) vartotojui pageidaujant (Seamonkey composeryje – Alt + E, V), signature kuris būtų apačioje, o ne viršuje, ar apskritai kvailą madą siūlyti top-postinti. Taip, kai ką galima išspręsti macros pagalba (aš be abejo google moku naudotis ;-) – bet tikrai ne viską.

Man kilo idėja – o gal galima outlookui pakišti išorinį redaktorių? T.y. toks kaip ir savotiškas pipe – spaudžiam ‘Reply’, gaunam tekstą ManoSuperDuperEditoriujeKurisNeturiMinėtųBugų, ten vėlgi išsaugom tekstą į tą patį pipe – išsiuntimas.
Žinau kad galima naudoti MSWord tam reikalui. O kitokį redaktorių?
Su Laimio iš omnitel.microsoft pagalba ir šiek tiek googlinėjimų gavosi tokie dalykai – Perl variantas bei vbscript. Kaip ir geriau nei nieko, bet normaliai mozilla seamonkey composerio priverst taip ir nepavyko dėl daugybės problemų. Tiesą sakant, turint daug laiko – manau kad išspręsčiau tas bėdas, bet kad to laiko nelabai yra ;-)