Miesteliai.ltJau anksčiau rašiau, kad miesteliams darau funkciją, kuri paveikslėlyje rodytų miesto vietą. Šiandien ją baigiau, o rezultatus galite išvysti čia: http://www.miesteliai.lt/miestas/kaunas.html, http://www.miesteliai.lt/miestas/kernave.html.

Manau gavosi tikrai šauniai - tiek spalva dera prie bendro vaizdo, tiek žymeklis atrodo labai vykusiai. Be to žymeklis yra kintamo dydžio, kuris priklauso nuo miesto dydžio - kaimas, miestelis, miestas. O šis žemėlapiukas matomas visuose puslapiuose peržiūrint su miestu susijusią informaciją - objektų sąraše, galerijoje ir t.t. Žinoma, jis rodomas tik tada jei mes turime miesto koordinates (kurias turime beveik visų miestų, nes jas surasti gana lengva).

Galbūt įmanoma ateičiau pamąstyti tokią funkciją ir oficialiai leisti bet kam (pvz.: blogeriams, asmeninių svetainių savininkams, bibliotekoms ir t.t.) į savo svetainė įsidėti savo miesto vietą žemėlapyje, kuri automatiškai vestų į miesto aprašymą. Manau gautųsi visai šauni akcija, nes jau anksčiau esu matęs blogerių bandymų pažymėti savo gyvenamąją vietą Google žemėlapiuose, o mūsų siūloma funkcija leistų nurodyti ne kiek tikslią vietą (kurios skelbti nerekomenduočiau), o informaciją apie žmogaus gyvenamąją vietą? (Miesteliai bet kokiu atveju su laiku „subendruomenės“, nes ne be reikalo yra vartotojų registravimosi skiltis).

Lapkritis 9, 2007Miesteliai.lt \ 3-dalis

Miesteliai.lt Miesteliuose yra daug puikių dalykų, o šiandien papasakosiu apie informacijos atsiradimą pirmajame puslapyje ir naujienų sraute.

Pirmajame miestelių puslapyje rodoma naujausia informacija pagal tokias taisykles:

  1. Naujausias miestas (rodomas visada)
  2. 2 senesni miestai (rodomi tik tada jei jie ne senesni nei savaitė)
  3. 4 naujausi objektai (rodomi visada)
  4. 1 naujiena (rodoma tik tada, jei ji ne senesnė nei mėnuo)

Šios taisyklės pirmąjį puslapį padaro įdomų ir dinamišką, tačiau svarbiausia - šviežią, t.y. nerodoma daug jau senai parašytos informacijos. Be to, įrašai pirmajame puslapyje atsiranda tik jiems tai leidus - bloguose parašytas įrašas iš kart atsiranda pirmajame puslapyje, tačiau mums tai nėra naudinga, nes:

  • Sukūrę pvz.: miesto įrašą, ne visada jam turime aprašymą ar nuotraukų
  • Įkėlus aprašymą, galbūt jį reikia dar patikrinti, sudėti keywords (angl. raktažodžius)

Taigi kai mes sukuriame miesto įrašą ir įdedame jo aprašymą jis atsiranda miestų sąraše, tačiau jis automatiškai neatsiranda pirmajame puslapyje - ten jis atsiras tik tada, kai nuspręsime, kad jis ten vertas būti. Šis sprendimas kontroliuoja pirmąjį puslapį ir apsaugo jį nuo neišbaigtos informacijos, kuri dažnai pasitaiko rodant bet kokius (nefiltruotus) naujausius įrašus.

Miesteliuose yra ir RSS feed’as (naujienų srautas). Tačiau kaip ir kiti dalykai, ši funkcija yra realizuota gana gudriai. Pirmiausia, RSS srautas visiškai atitinka pirmąjį puslapį. RSS srautas veikia visiškai tuo pačiu principu - jis paima tik tą informaciją, kuri yra pažymėta kaip verta pirmojo puslapio. Skirtumas nuo pirmojo puslapio tas, kad įrašui norint patekti į RSS nereikia nieko žymėti - RSS srautas naudoja pirmojo puslapio duomenis. Pats RSS srautas suformuojamas paprastai - naujausi miestai, objektai, asmenybės ir naujienos sujungiamos į vieną sąrašą, surikiuojamas mažėjančiai pagal datą ir paimami pirmieji 10 įrašų. Taip mes gauname RSS srautą, kuriame yra ne tik visa šviežiausia informacija iš įvairių sričių, bet ir tik pilnai paruošti įrašai.

Vakar Vidmantas prasitarė, kad Miesteliams reikėtų tokios funkcijos, kuri paveikslėlyje rodyti miesto vietą Lietuvos žemėlapyje pagal globalias žemes koordinates. Iš pradžių tai pasirodė nesunki užduotis - tiesiog atidėti tašką paveikslėlyje, tačiau pradėjus daryti pasimatė, kad ne viskas taip paprasta,panaudojau šiek tiek mokslo žinių ir užduotis buvo įveikta, bet apie viską nuo pradžių.

I love googleMiesteliuose žemėlapis rodomas su Google Maps pagalba, nes tai turbūt vienintelė tokia paslauga, kuri leidžia bet kam talpinti dinamiškus žemėlapius savo svetainėje (prieš tai žinoma reikia tą leidimą gauti, bet tai nieko nekainuoja ir tam užtenka tik puslapio adreso), be to šis servisas leidžia pagal miesto pavadinimą gauti objekto koordinates, pavyzdžiui Vilniaus koordinatės yra 54.6896, 25.2799. Labai šaunu, viskas veikia, tačiau ką daryti, jei norime pavaizduoti objekto koordinates paveikslėlyje (aš naudojau 800×500 px. dydžio paveikslėlį)? Globalių koordinačių iš kart panaudoti nepavyks, nes jos tiesiog neatitiks paveikslėlio koordinačių - globali koordinatė Lietuvai kinta vos per kelis vienetus, o paveikslėlyje tai yra keli šimtai taškų.

Iš pradžių galvojau, kad įmanoma susirasti viršutinio dešiniojo ir apatinio kairiojo paveikslėlio kampo koordinates, tačiau tai iš vis beveik neįmanoma, nes Google Maps neturi tam reikalingų įrankių - tam prireiktų liniuotės, kampo ir kitų braižybos įrankių, nes reiktų Google žemėlapyje aplink Lietuvą nubraižyti tikslų kvadratą, kuris vienodai liečia mūsų šalies kraštus kaip ir paveikslėlis. Taigi šis būdas atkrito, nes net jei ir pavyktų kažką padaryti, būtų padaryta didžiulė paklaida ir visi tolesni naudojimai būtų labai netikslūs.

ŽemėlapisAntrasis bandymas buvo paremtas beveik vien Matematika. Jau minėjau, kad informatikoje be matematikos niekaip, o šiandien ir vėl įsitikinau. O sprendimas buvo paprastas - reikia surasti dviejų, kuo labiau vienas nuo kito nutolusių (kuo didesnis atstumas tuo tikslesnis atsakymas) taškų koordinates Google žemėlapyje ir paveikslėlyje, o vėliau belieka tik surašyti paprastą proporciją, kuri parodytų kiek kinta koordinatė paveikslėlyje kintant koordinatei žemėlapyje. Atsivėriau OpenOffice.org Spreadsheet (Microsoft Office Excel atitikmuo) ir pradėjau skaičiavimus. Pradėjau nuo dviejų taškų pasirinkimo: ieškojau kuo aiškesnio ir aštresnio iškilimo Lietuvos sienoje, kurį būtų galima įžiūrėti gana mažame paveikslėlyje. Galiausiai porą radau - vienas skalaujamas Kuršių marių, o kitas netoli Lietuvos „apendicito“ Dieveniškių (Lietuvos pietvakariuose). Viskas - susiradau šių taškų koordinates su Google Maps, o su Gimp susiradau koordinates paveikslėlyje, rastus duomenis suvedžiau į skaičiuoklę, sugalvojau formules, patikslinau koordinates pagal žinomus miestus ir rezultatas prieš akis. Dabar beliko juos panaudoti.
Gautus koordinatės kitimo koeficientus susirašiau į PHP rinkmeną apdorojančią Google žemėlapius, perrašiau formules ir bandau žiūrėti rezultatus… O gi veikia! Šiek tiek pavyzdžių:

http://www.miesteliai.lt/miestas/vilnius/1000-zemelapis.jpg
http://www.miesteliai.lt/miestas/kaunas/1000-zemelapis.jpg
http://www.miesteliai.lt/miestas/pabrade/1000-zemelapis.jpg
http://www.miesteliai.lt/miestas/jonava/1000-zemelapis.jpg

Beliko šiems paveikslėliams pridėti šiek tiek dailumo, parinkti gražų miesto žymeklį, kuris kistų priklausomai nuo to ar objektas yra miestas, miestelis ar kaimas. Be to reikės pasižiūrėti ar ne gražiau kartu su Smilepaveikslėliu mažinti ir žymeklį, nes pvz.: http://www.miesteliai.lt/miestas/vilnius/100-zemelapis.jpg čia žymeklis atrodo šiek tiek per griozdiškai.

Šis darbelis užtruko keletą valandų, tačiau jis tikrai buvo įdomus, nes reikėjo ne programavimo žinių, o teisingo metodo gauti duomenimis, kuriuos vėliau galima būtų panaudoti pačioje programoje. Kaip gerai, kad dar galiu sau leisti nedirbti monotoniškų ir nuobodžių darbų :)

Spalis 31, 2007Miesteliai.lt \ 2-dalis

Miesteliai.ltMiesteliuose yra realizuota gana nemažai įdomių ir naudingų funkcijų. Viena iš jų yra nuorodų sistema.

Nuorodų sistema

Nuoroda, tai adresas kuriuo patenkama į svetainę. Miesteliuose nėra nuorodos kuri būtų sukurta statiškai, t.y. tiesiog parašyta - visos nuorodos kuriamos dinamiškai, pasitelkiant centralizuotą nuorodų sistemą. Taigi norėdamas sukurti nuorodą į Vilniaus objektus aš nerašau nuorodos “/miestas/vilnius/objektai.html“ , aš prašau nuorodų sistemos - „duokš man Vilniaus miesto objektų nuorodą” ir ją gaunu! Žinoma, galima iš kart rašyti nuorodas tiesiai į HTML kodą, tačiau jei aš sugalvočiau pakeisti nuorodų struktūrą, pvz.: vietoje „/miestas/vilnius/objektai.html“ naudoti „/miestas/vilnius/objektai/“? Per keletą valandų gal ir išgaudyčiau visas nuorodas esančias HTML kode… Bet kam man taip švaistyti laiką, jei galiu viską daryti dinamiškai - nuorodų sistemoje tiesiog pakeičiu, kad nereikia prie nuorodų pridėt .html plėtinio ir viskas - visos nuorodos automatiškai pasikeičia. Be abejo, nuorodų formavimo taisyklės naudojamos ir nuorodų atpažinimui, o tai man duoda visišką nuorodų kontrolę, nes užtenka vienoje vietoje pakeisti kažkokį nuorodos struktūros parametrą, o jau pati nuorodų sistema pasirūpins, kad visi pakeitimai atsispindėtų puslapyje. Paprasta ir patogu!

Kaip veikia ?
Pateiksiu vieną nuorodos taisyklės pavyzdį:

%city%/%city_name%/%object%/%object_name%%end%

Kaip šią taisyklė panaudoti apdorojant nuorodą „/miestas/kedainiai/objektas/sv-juozapo-baznycia-3.html“? Pirmiausia, pasitelkiant kalbos rinkmeną, reikia nurodyt, kad %city% atitinka „miestas“, o %object% - „objektas“, taigi po kalbos rinkmenos panaudojimo ši nuoroda virsta:Url

/miestas/%city_name%/objektas/%object_name%%end%

Dabar nurodome, kad mūsų nuorodos baigsis „.html“ , taigi %end% - „.html“ ir mūsų taisyklės formavimas beveik baigtas, dabar turime nuorodą:

/miestas/%city_name%/objektas/%object_name%.html

Paskutinis žingsnis yra nurodyti, kad %city_name% ir %object_name% dalis atitinka bet kokį žodį. Viskas! Taip apdorojus nuorodas (apdorojus jos išsaugomos kaip kešas (ang. cache), kad nereikėtų vis iš naujo apdoroti) jas galima naudoti tiek nuorodų formavimui, tiek jų atpažinimui. Atpažinant aukščiau pateiktą nuorodą(/miestas/kedainiai/objektas/sv-juozapo-baznycia-3.html) gautume rezultatą:

city_name - kedainiai
object_name - sv-juozapo-baznycia-3

Dabar objektų modulis (nuorodų taisyklės yra priskirtos konkrečiam moduliui ir jo veiksmui) įvykdys veiksmą „rodyti objektą“ panaudodamas miesto ir objekto pavadinimą. Vartotojui visiškai neįdomu koks modulis ir kokį veiksmą vykdys, jam svarbu tai, kad jam rodys objektą Šv. Juozapo Bažnyčia, taigi atsisakom tokių nuorodų:

/index.php?module=objects&action=display_object&city_name=kedainiai&object_name=sv-juozapo-baznycia-3Seo

ir naudojam:

/miestas/kedainiai/objektas/sv-juozapo-baznycia-3.html

Tokios nuorodos ne tik aiškesnės ir logiškesnės, bet jos labiau patinka ir Google paieškos sistemai, taigi jos ir labiau SEO. Matome, kad miesteliuose nuorodos realizuotos pasitelkiant lanksčią ir patogią vartotojui sistemą, tačiau tai ne vienintelis puikus dalykas miestelių sistemoje, sekite straipsnius ir sužinosite daugiau ;)

welcometo.lt Sveiki atvykę į Lietuvą, kreipiasi angliška miestelių.lt versija Welcometo.Lt.

Praėjus šiek tiek mažiau nei dviem mėnesiams po miestelių.lt paleidimo, šiandien oficialiai pasirodė ir welcometo.lt. Jeigu pirmoji svetainė buvo skirta lietuviams, tai ši - anglakalbiams, kurie domisi Lietuva. Žinoma, informacijos kol kas dar nėra daug, tačiau kaip ir miesteliuose ji nuosekliai ruošiama ir talpinama tik kruopščiai atrinkta. Kvietėme ir kviečiame visus prisidėti prie šio projekto - susisiekite el. paštu info@meisteliai.lt ir pasidalinkite turima informacija (nuotraukomis, straipsniais ir pan.) apie Lietuvą.

Antrajame šio blogo įraše rašiau apie miestelių galimybes, o su angliškos versijos pasirodymu jos dar geriau atsiskleidžia - abi svetainėse naudojasi ta pačia sistema, tačiau pateikia dvi skirtingas puslapio versijas. Smagu, kai apie viską pagalvojama iš anksto ir tolesnis projekto plėtimasis nėra varžomas sistemos galimybių.

Sakykit jei aš klystu, bet nei www.miesteliai.lt, nei www.welcometo.lt analogų nėra :)

Spalis 23, 2007Miesteliai.lt \ 1-dalis

Miesteliai.lt

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:

  1. 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.
  2. 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).
  3. 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ų :)


© 2008 Juozo Kaziukėno blogas | TextNData dizainas | Wordpress variklis