Spalis 23, 2007Miesteliai.lt \ 1-dalis

Kam rašyti apie miestelius.lt?
Miesteliai.lt buvo projektas gana ilgai brandintas Vidmanto galvoje. Su Vidmantu susipažinome 2007 pavasarį, o tų pačių metų Birželį prasidėjo darbai, nes Vidmantas mane įkalbino būti šio projekto programuotoju. Bėgo mėnesiai, ir 2007-08-28 paleidome viešam teismui skirtą versiją. Projektas gyvuoja beveik du mėnesius - tai per mažas laiko tarpas projektui virsti svarbiu ir įdomiu naršytojams, tačiau šis projektas yra labai stiprus ir tikiu, kad jo populiarumas vis augs. Šių įrašų eilės prasmė ir yra koncentruota ties tuo, kuo šis projektas yra unikalus. Manau ne vienam žmogui bus įdomu sužinoti kaip viskas buvo kuriama, kokios technologijos ir sprendimai buvo naudojami ir galbūt tai netgi suteiks idėjų naujiems projektams, nes kol kas Lietuvos interneto erdvėje dar sunku įžvelgti gerų produktų.
Technologijos.
Miesteliai.lt suprogramuoti PHP kalba. Ši kalba yra labai lanksti ir programuojant svetainę nekilo jokių problemų dėl nesuderinamumų ar pan. Žinoma ši kalba nebuvo pasirinkta ją lyginant su kitomis kalbomis, ji buvo pasirinkta todėl, kad aš ja programuoju, tačiau vis tiek (nors ir esu PHP fanas) ši kalba yra labai puiki. Svetainės kodas suskirstytas į kelias esmines dalis:
- Branduolys. Tai pagrindinės rinkmenos, kurios naudojamos ir kitose vietose. Branduolyje yra daugybė metodų, funkcijų ir sprendimų, kuriuos gali naudoti žemesnio lygio dalys (pvz.: moduliai), taigi moduliuose (apie kuriuos šiek tiek mažiau) nėra vis iš naujo perrašomi tie patys dalykai, o naudojami centralizuotai. Jei svetainę vaizduotume kaip namą, tai ši dalis būtų namo pamatai, sienos, stogas ir pan. Branduolį sudaro:
- Duomenų bazės sluoksnis (Adodb) - tik jis, ir niekas kitas, atsakingas už bendravimą su duomenų baze.
- HTML ruošinių sluoksnis (Smarty) - šis sluoksnis generuoja HTML kodą, skirta svetainės peržiūriai interneto naršyklėje (pvz.: Firefox, nes IE must die (: ).
- Visos svetainės pagrindinės bibliotekos aka framework’as - be šių rinkmenų neveiktų niekas, nes jos apsprendžia ką ir po ko reikia daryti, ką iš kur paimti, ką ir kam atiduoti ir t.t. Žodis framework’as nereiškia, kad čia buvo naudotas vienas iš esamų PHP frameworkų (Cake PHP, Zend Framework ir pan.), visos šios dalies rinkmenos buvo sukurtos specialiai šiam projektui ir niekur kitur dar nėra panaudotos.
- Priėjimai prie svetainės. Tai lyg namo durys, kurių name gali būti ne vienos. Svetainės branduolys realizuotas taip, kad priėjimus yra itin lengva kurti - tereikia vienoje rinkmenoje nurodyti, kad priėjimas bus vartotojų|administratorių ir parinkti kalbą, visą kitą darbą atlieka svetainės branduolys. Priėjimai prie svetainės šiuo metu yra šie:
- Administravimo. Svetainę prižiūrintiems asmenims skirtas įrankis, kuriame jie gali valdyti svetainę pagal jiems suteiktas teises - pildyti informaciją, redaguoti, trinti turinį ir t.t. Mūsų name tai būtų miegamasis, o kaip žinia į juos lysti nėra labai mandagu, taigi kol kas tiek apie administravimo įrankius, tačiau vėlesniuose straipsniuose tikriausiai aprašysiu ir juos, bei jiems panaudotas technologijas, kurios leido sukurti itin patogią valdymo įrangą.
- Vartotojų dalies. Viena vartotojų dalis yra www.miesteliai.lt, šis adresas naudoja visus esamus lietuviškus įrašus duomenų bazėje. Bus ir kitų durų, nes man buvo iškeltas tikslas, kad ši svetainė turi būti daugiakalbė, taigi sistema realizuota taip, kad vartotojų dalių gali būti neribotas kiekis. O šiuo metu be lietuvių kalbos ruošiamos ir kitos kalbos, taigi visas daugiakalbiškumo grožis dar atsiskleis. Jei ateityje atsirastų noro ir galimybių svetainę išversti į pvz: prancūzų kalbą tai nesukeltų problemų - sukurtume kitą vartotojo dalį ir nurodytume, kad ji naudotų prancūziškus tekstu (kuriuos, žinoma, reikia irgi parašyti).
- Moduliai. Sistemą sudaro ne viena didžiulė rinkmena, o daugybė mažų rinkmenyčių :), kurios mūsų name būtų skirtingi kambariai. Yra moduliai miestams, objektams, puslapio tekstams, google produktams ir t.t. Visi moduliai veikia beveik nepriklausomai vienas nuo kito, taigi jei net ir atsirastų klaida vienoje puslapio dalyje, ji tikriausiai neturėtų įtakos visam puslapio darbui. Žinoma, moduliai kalbasi tarpusavy, pvz: miestų modulis klausia objektų - “Duokš man Vilniaus miesto objektų sąrašą” ir jį gauna arba ne. Tačiau skirtingi moduliai nelenda į vienas kito daržą ir neatlieka veiksmų, kuriuos atlieka tam skirtas modulis, taigi sistema gali būti atnaujinama ir modifikuojama netolygiai ir koncentruotai (pvz jei pradėsime daryti forumą, tai nieko kito neliesime tik naują rinkmeną forumas.php).
Duomenų bazės struktūra
Duomenų bazei pasirinkome MySQL. Plačiai visos struktūros šiame straipsnyje nenagrinėsiu, tik pažymėsiu kelis svarbius faktus:
- Duomenų bazė suskirstyta į dvi sritis: nuo kalbos priklausantys duomenys ir nuo kalbos nepriklausantys duomenys. Paprastas pavyzdys : miestų lentelė. Kiekvienas miestas turės įrašą apie save lentelėje [miestai], tai bus miesto pavadinimas, savivaldybė ir t.t. Taip pat miestas turės arba ne (priklausomai nuo to ar miestas turi informaciją X kalba) įrašą lentelėje [X_miestai] (pvz - lt_miestai, en_miestai ir t.t.), čia bus saugoma informacija apie miestą kuri kiekvienoje kalboje rašoma skirtingai, tai - miesto aprašymas ir pan.
- Visi įrašai duomenų bazėje siejasi, t.y. nuotrauka siejasi su objektu, objektas siejasi su miestu, miestas siejasi ir savilvaldybe ir pan. Administratoriai įvesdami ar redaguodami informaciją susieja ją su kitais reikalingais objektais, o vartotojo dalyje informacija iš kart atvaizduojama pagal sąryšius - prie miesto rodomi jo objektai, su juo, jo objektais ar asmenybėm susietos nuotraukos, jo žemėlapis ir pan.
Atrodo tai tik du dalykai - kalbų lentelės ir sąryšiai, tačiau šie du dalykai kuria didžiulį sistemos efektyvumą ir lankstumą, nes tik tokia struktūra leidžia patogiai aprašyti ir rodyti informaciją įvairiomis kalbomis ir kuri yra susijusi su kitais objektais puslapio lange - svetainės puslapiuose nerodoma jokios padrikos informacijos.
Kas toliau?!
Toliau stengsiuosi koncentruotis ties konkretesniais dalykais - nuorodų sistema, galerijos struktūra, kilusios problemos ir t.t.
Šis straipsnis buvo tik įvadas į mano blogingą, taigi net neabejoju, kad jame dar reikės atlikti ir šiek tiek pataisymų :)
Patiko ką perskaitei? Užsiprenumeruok RSS srautą ir visada gauk mano naujausius įrašus pats pirmas! Tai ne tik, kad yra be galo patogu, tačiau ir leis tau nepraleisti nei vieno mano įrašo. Jei kiltų problemų - rašyk.


2007-10-30 23:12:52
Ar tikrai esi PHP fanas? Sakyčiau, kad galėčiau save vadinti kokios nors kalbos fanu, turėčiau rimtai padirbėti bent su trim-keturiom kalbom. Ir ne šiaip probėgšmiais, bet po kelis panašaus sudėtingumo darbus.
2007-10-31 10:50:19
Taip, esu šios kalbos fanas :) Nemanau, kad pabuvęs prie Ruby ar Asp, patapčiau didesniu fanu.
2007-11-01 10:39:26
Kaip sakoma: abejonė - kelias link sumanumo. Taigi sakymas kad myli pirmą žinomą kalbą - solidumo nekeliantis teiginys.
2007-11-01 19:11:44
Tai nori pasakyt, kad ji man NEgali patikti, nes nesu bandęs daugiau kalbų (ir iš kur tu taip nusprendei…)? :)
2007-11-02 13:44:23
Ne, nepriimk mano nuomonės kaip įžeidimo :)
Nesakau, kad kalba negali patikti. Tačiau kalbos patikimas ir buvimas konkrečios kalbos fanu - du visiškai skirtingi dalykai, turėtum tai skirti. O dėl kitų kalbų - nežinau, gal ir esi bandęs, tačiau jeigu taip būtų/yra pats matytum, kad skirtingos kalbos gali būti daug geresniu įrankiu tam tikroms užduotims spręsti.
2007-11-02 14:23:28
Pavyzdys - Lryto fanai. Jie serga už komandą ir jiems visiškai dzin net ir jei Žalgiris surinktų geresnę komandą, jie vis tiek bus Lryto fanai (tikėtina). :)
Man kažkaip atrodo, kad tavo nuomone, buvimas fanu yra lygus tos kalbos laikymas geriausia. Tačiau ne visur ir ne visada taip yra.
2007-11-02 19:31:09
Programuotojas visų pirma turėtų bųti pragmatiškas, tuo mes ir skiriamės nuo normalių žmonių :-)
Na taip, iš esmės tu pataikei. Jeigu esu kažkieno fanas, tai tikrai tikiu kad kažkodėl tas dalykas yra geresnis negu kiti.
Manau supratai mane, o aš tave, baikim šią diskusiją su nuomonėm kurios yra. Sėkmingai pildyk blogą ir atrask savo skaitytoją :)