-->

Category Archives: Kūryba

Vistik perl’o programeriai nėra normalūs…

3
Filed under Kūryba, Laisvalaikis, Pasvarstymai

Taigi taip. O ką daugiau galima pasakyt apie tokius:

< kent\n> no,i don’t think there is a SIGMEOW
<...>
< kent\n> I recall seeing some weird IPC method that sent morse codes via SIGUSR1

Nu ir akurat:
http://search.cpan.org/~vpit/IPC-MorseSignals-0.15/lib/IPC/MorseSignals.pm
Blyn…

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

0
Filed under Darbas, Kūryba, Pasvarstymai

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ė =)

Gera failinė sistema, arba istorija “Nemuškit reiserio!”

0
Filed under Kūryba, Pasvarstymai

Šis varganas serveriukas buvo beveik parą offline dėl labai paprastos priežasties – prisireikė kitam Lietuvos gale pastatyt vieną silpną dėžę vien backupams, kadangi tokių kaukolinių nebepardavinėja – tai nusipirkau kai ką apyšviežio ir tuo pačiu sugalvojau upgradinti šitą dėžę. Kitaip sakant, į kitą Lietuvos galą norėjau išsiųsti puikiai veikusią tiek metų (tegu ir prasto gamintojo ir visokeriopai pasenusią) plokštę (su CPU, PSU, RAM) nei kad kažką naujo ką nusipirkau.
Rezultatas – permontuojam vietoj senučiuko Chaintech su VIA čipsetu, 800@900MHz PIII santykinai monstrą (lyginant su anuo, ne pagal šias dienas ;-) DFI LANParty UT nF3-250Gb su Athlon 64 3200. Kaip ir viskas normaliai, paleidžiant pamačiau keletą keistų dalykų, bet nekreipiau dėmesio. Parvažiuoju namo – ogi nepasiekiamas. Na, apsirengiam ir važiuojam čekinti…
Rezultate – dėka kažkokio MB+CPU nesusišnekėjimo (sunkiai dirba netgi dažniu pagal nutylėjimą) viskas ten gan stipriai grybavo. Tie “keisti dalykai” kuriuos pastebėjau vėliau peraugo į kernel panic. Kad viskas būtų smagiau – iš pradžių mėginau problemas spręsti kitu kerneliu. O ten turbūt kaip tik sutapo kad “atsijungė” ar visiškai nusišnekėjo kažkuri dalis atsakinga už failinę sistemą…
Rezultate – grub’as sako error 17. Ok, bootinamės iš ko papuolė po ranka, pasileidžiam grub shell – ogi unrecognized file system. Ok, imam kitą CD, bootinamės, su mdadm assemblinam raidą ir žiūrim kas viduj. O ten – nieko gero – superbloko nerasta, duomenų panašu kad irgi…
Na, remote backupą aš turiu, bet niekam nesinori atsistatinėt iš backupų. Kadangi patirties su reiseriu aš kaip ir turiu – imam hexeditorių, reiserfsck su visais –rebuild-sb ir –rebuild-tree. Valanda su trupučiu – ir visi duomenys savo vietoje. Tiesa, dar daugiau užtrukau pakol išsiaiškinau ko ten CPU+MB combo grybauja, bet – rezultate viskas veikia!

Girdėjau įvairiausių atsiliepimų apie reiserfs, bet kažkodėl manau kad dauguma problemų – arba dėl kreivos realizacijos (kai kurios distros tikrai persistengia bepatchindamos savo kernelius) arba dėl extreme naudojimo – belenkiek mount opcijų nesuprantant ką jos daro ir nuolatiniai reboot dėl elektros dinginėjimo ;-)

Žinau tiek – kažkada reiserfs panaudojimas vietoj ext3 buvo 6x performance boost (> 3 milijonai mažų failų, reik turėt omenyje kad tas buvo ~2003-2004 metus – taigi ir HW atitinkamai), iš reiserio aš be jokių problemų išsitraukiau failus ne kartą ir ne du esant hardwarinei problemai. Vienintelė bėda – kad FS autorius šiek tiek persistengė asmeniniame gyvenime ir dabar apie sparčią plėtrą galima pamiršti… Tiesa, nors Namesys kaipo toks panašu kad nebeegzistuoja, bet pati failinė sistema prižiūrima ir nepanašu kad nori numirt.

Turbūt pats laikas išsimėgint kokį btrfs – laikas augti, nėr čia ko vienoj vietoj užsiciklinus sėdėti =)

Kad juos kur, tuos mac’us

0
Filed under Kūryba, Pasvarstymai

Nuo vakar vakaro ir taip gan gausi mano mac’ų šeimyna pasipildė dar vienu – sugalvojau kad man reikia nešiojamojo kompiuterio šalia lovos (o ne tokio, kurį reiktų dar neštis iš darbo ar pan., kaip kad buvo su mano MacBook) – ir nusipirkau iBook. Kodėl Apple, o ne Asus su savo eee? Tiesiog taip jau gavosi, kad kažkada sugebėjau labai tvarkingai susidėti Terminus šriftą, nuo tada ir negalėjau nulipt…
Viskas, dėl ko pas mane dar yra tie mac’ai – tai mielas antialiasinimas terminale ir kitur. Visa kita… Nuo pat pradžių kaip visad pradėjau lipt ant grėblių – tai ten kur nors netinstalle problemos (NFS image seekinimas – ir problemos su buggy NFS serverio implementacija), tai virvelesas neveikia kaip turėtų (pasirodo, kad su Leopoldu atėjo bjaurus bugas – po sleep/reboot ar pan. operacijos jis nebesugeba prisijungti ir prisiminti tinklų su hidden SSID. Sprendimo nėr, workaround – “Off” ir “On” virvelesui), tai dar kas nors išlenda…
Ir kai jau pagaliau kitą dieną susidėjau viską kaip noriu – paaiškėjo kad tas šriftas tiesiog šiaip neveiks, ir kad arba aš ten buvau kažką labai mandro pribūręs, ko dabar jau nebeatsimenu, arba vistik senas geras CRT ir be jokių papildomų antialiasinimų daug gražiau atvaizduoja tą fontą. Screenshotų nebus, kadangi jie bus skirtingai matomi LCD ir CRT vartotojams, geriau jau pamėginsiu kada pafotkint – kur kas daugiau naudos iš to gaunas ;-)
Reziume – būčiau žinojęs kad taip gausis su tuo terminalo šriftu – nėėė, nebūčiau dar vieno kevaliuko namo tempęs ;-)

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

0
Filed under Kūryba

Ž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?

0
Filed under Kūryba

Š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ą?

AJAX ir paveiksliukai

0
Filed under Kūryba, Pasvarstymai

Kažkur susipainiojau… Susigaudžiau kad mano skonis labai specifinis – nesurandu sau kito tinkančio telefono, automobilio ar dar ko nors, tai dabar supratau kad ir elementarios paveikslėlių galerijos, atitinkančios mano poreikius nerasiu…

Buvo čia tokia viena. Photoframe vadinas. Problemos nedidelės… Naudoja frame’us, pagrindinis developeris jau labai seniai užsikasęs su Moodle ir nieko nejudina ta kryptim. Per paskutinius dvejus metus – tik smulkūs bugfix patchai.

Tuo tarpu, pasižvalgius aplink tikrai negalima sakyt, kad trūksta galerijų pasirinkimo. Jų yra kalnai – pradedant megagriozdais kurie daro ką tik nori, išskyrus patogų nuotraukų parodymą, bet užtat naudojančiais visas įmanomas duomenų bazes, ir turinčių kalnus skinų (ėėėė!!! Ko žmonės ateina pasižiūrėti į puslapį – naujų skinų, padailintų EXIF info ir mikroskopinio dydžio preview thumbnailso, ar fotografijų?) , tesiant lyg-ir-būtų-gerai-pagal-svorį-bet-nepatogu-naudotis, ir baigiant minimaliom galerijom, kur viskas daroma kliento pusėj ;-)

Tarkim… Paimkim eilines galerijas iš google pirmųjų rezultatų. Ir palyginkim su tuom, ko reikia tarkim, tokiam vartotojui kaip aš :

  • Jei kažkas man mestelėjo nuorodą į foto internete, tai aš ir noriu matyt tą foto internete. Ne kažkokį mega-giga-turbo aprašymą, su kalnu nieko nesakančių EXIF-info prie thumbnailso, bet būtent foto. Taigi, turėtų būt galimybė gauti nuorodą tiesiogiai į norimų gabaritų foto.
  • Aišku, jei man foto patiko (arba nepatiko) – turėtų būt galimybė palikti komentarą. Ir, savaime suprantama, be jokių registracijų – vardas, prierašas.
  • O jei man patiko… Aš noriu pasižiūrėt visą galeriją ta tema. Kaip tai turėtų būt realizuota? Geras klausimas ;-) Turi būt galimybė matyt visų foto mažas versijas (pas mane linija vis dar ne 10Gbps į visus tinklus), jei thumbnailsas sudomino – spaudžiam, matom kažkokių gabaritų, telpančių į ekraną versiją. Jei ji per maža – vėlgi, tada jau čiumpam originalą. Taigi, iš viso 3 foto variantai – mažytis thumbnailsas, vidutinių gabaritų foto, ir originalas.
  • Be abejo, galimybė keliauti per visas foto – sekanti – ankstesnė.

O daba pasižiūrėkim ką turim… Visokie didžiuliai griozdai, kurie foto resizina jau kliento pusėje, arba generuoja thumbnailsus serverio pusėje, bet tik juos ir rodo. Paspaudus ant kažkurio thumbnailso, 99% kad mes gausim vidutinių gabaritų foto, laukelį komentarams, ir tik du mygtukus – sekanti ir ankstesnė…. Bendro vaizdo, kas yra galerijoje nebeliks, o jei norėsis pamatyt visas – ilga paieška per nuorodas, pakol kuris nors nuves į galerijos indeksą, kur vėl ilgai ir nuobodžiai kraus galerijos thumbnailsus… Na, ir kas be ko, labai šaunus puslapiavimas, kad neduokdie nesusidarytum įspūdžio visas iškart pamatęs, o dar turėtum ilgai ir nuobodžiai brouzint per aplink.

Pažiūrim ko reiktų iš ‘galerijos administratoriaus pusės’ – t.y. to, kuris deda ten foto :

  • Atsikėliau iš po baliaus, nusiurbiam foto, gurkštelim kefyro, ir, kaip ir jau reiktų ir kitiems foto parodyti… Taigi, išmetam foto kurios nepraeina cenzūros, ir drebiam visą katalogą į serverį. Vartotojams tik paduodam nuorodą, ir einam toliau gurkšnot kefyro… Galerija turėtų pati pagal EXIF foto pasukti, sumažinti/padidinti, padaryti thumbnailsus ir pateikt norima forma vartotojui. Trumpai sakant – minimum konfigūravimo, maksimum rezultato.
  • Turiu aš kažkokį katalogą savo rinktinių foto. Norisi jas pateikti gražiai – na ir kągi, tada iškart kitas reikalavimas – resizinimas tik bicubic kaip minimum, galima pakeist stilių kiekvienam galerijos elementui. Trumpai – reikalui esant, tas ‘viskam tinkantis defoltas’ turi būt labai lanksčiai konfigūruojamas…
  • Viskas supaprastinta iki minimumo. Jokių duomenų bazių, jokių /lib katalogų su dešimtimis failų… Pasižiūrim į Photoframe – vienintelis failas, kuriame yra viskas.

Tiesą sakant, palaksčiau į vieną pusę, palaksčiau į kitą… Nusprendžiau kad nerasiu nieko tinkamo. Pagromuliavau savaitę idėją perrašyt photoframe šiuolaikiškai, bet, per gerą pusdienį sugebėjau su AJAX tik išgauti šiaip ne taip foto sukeitimą (click thumbnailsą – loadinam didesnį variantą), ir kaip ir nudrėbiau tą idėją. Vadinas, reikia imt kažkieno jau pradėtą darbą. Iš projektų arčiausiai idėjos pateko tik minishowcase – tik šviežiai pradėtas galerijos projektas, bet jau turintis kažką panašaus į tai ko reikia – kelių dydžių fotografijos, ajax-based atvaizdavimas, neperkrautas per daug. Parašiau autoriui, pasiteiravau dėl licenzijos ir kitų smulkmenų. Jei gausiu teigiamą atsakymą – lieka tik sėst ir lipdyt tai ko trūksta – komentarai, thumbnailsų vartymas, originalių foto pervertimas pagal EXIF data, na, ir kas be ko – kešavimas ;-)

Gal vieną gražią dieną pasaulį išvys kažkas, kas nenaudoja megabaitinio srauto atvaizduoti galerijos indeksui, kuo patogu naudotis, nereikia flash’inio pluginso, nėra apipintas skambiais šūkiais ‘web 2.0 compatible, only css and valid blablabla based!!!’ tuo tarpu prarandant funkcionalumą ir prisigaudant kalnus bugų (eee… Teko matyt daug tokių super-duper formų, meniu, lentelių ir visokio panašaus stufo, kuris yra gal ir ‘krūtas’ jei žiūrėt į tai KAIP tai padaryta, bet yra beviltiškai bugovas, jei žiūrėt iš vartotojo pusės), o bus tiesiog – paprastas ir funkcionalus. Toks, kaip dabar yra photoframe ;-)