2010 m. spalio 26 d., antradienis

Programos kūrimas greitai, vizualiai ir daugeliui platformų? Taip.

Taigi, kaip anksčiau žadėjau, trumpai papasakosiu, ką ir kaip naudoju KZod žodyno kūrime. Trys pagrindiniai dalykai:
  1. pačios programos kūrimas;
  2. žinyno kūrimas;
  3. diegimo paketų kūrimas.

Tad čia šiuos dalykus ir pabandysime apžvelgti.

Pačios programos kūrimas

2002, kai pradėjau kurti KZod žodyną naudojau Delphi dėl to, kad buvo ypač patogu kurti vartotojo aplinką, plius Object Pascal kalba mažai mokančiam programuoti buvo patraukli dėl to, kad galima buvo apsieiti be rodyklių ir kitų sudėtingesnių dalykų (tačiau juos galima naudoti, jeigu nori).

Apie 2006 metais nusprendžiau, kad verta programą perkelti į Linux OS. Tada reikėjo tikrai nedaug pakeitimų, kad pavyktų sukompiliuoti programą su Kylix ir šiokia tokia (nebaigta) žodyno versija veikė! Tačiau jau tada Kylix buvo beveik pasenęs, tad tai neteikė daug vilčių.

Kita alternatyva, kurią bandžiau jau 2006 metais, tai buvo Free Pascal kompiliatorius su Lazarus integruotąja kūrimo aplinka. Tada vizualioji dalis veikė, pavadinkime, prastai. Tačiau jau apie 2008 m. pabandęs iš naujo, buvau nustebintas didelio kokybės pagerėjimo ir tais pačiais metais turėjau veikiančią žodyno versiją, kuri buvo sukompiliuota su Free Pascal.

Tad iš tiesų, kas yra Lazarus ir kuo jis geras? Keli punktai (tikrai ne visi svarbiausi :) ):

  • spartaus kūrimo aplinka (angl. RAD - Rapid Application Development);
  • vizualaus, komponentinio kūrimo aplinka;
  • atviro kodo - reiškia gali pats susitvarkyti ar pakeisti dalykus, kurie tau nepatinka;
  • skirta daugeliui platformų;
  • gaunama sukompiliuota savoji (angl. native) programa.

O kas svarbiausia - užtenka turėti vieną išeities tekstą ir gali susikompiliuoti savąsias programas Windows, Linux (GTK1&2, QT) ir OSX (ir dar kelioms) operacinėms sistemoms.

Tikrai! Naujausia KZod žodyno versija turi ~14 000 gryno kodo eilučių (išties, nedaug) ir IFDEF'ai naudojami vos poroje vietų, t. y. ten kur yra kodas, skirtas reaguoti į iškarpinę. Ir visa tai be problemų susikompiliuoja Windows, Linux ir OSX operacinėse sistemose. Windows ir Linux ekrano vaizdai yra senesniame mano pranešime, o OSX čia:

KZod OSX sistemoje

Verta pastebėti, kad čia ne naujausia žodyno versija, tačiau tai dėl laiko trūkumo ir techninės įrangos neturėjimo (kas nors norite atiduoti ar paskolinti Mac'ą?).

Kartais vis atsiranda kas nors, kas sako, kad verta perrašyti visą žodyną su C/C++/C# - galiu pasakyti tik tiek: neverta! Naudos negausiu, o palaikymas ir naujų dalykų programavimas užtruks ilgiau.

Žinyno kūrimas

Taigi, jau turime programos failus, tačiau neatsiejama dalis yra programos žinynas. Html ar pdf formato žinynas yra būtinas, tačiau nėra pakankamas, nes tikrai nėra patogus! Paieška, indeksas, straipsnių susiejimas su programos elementais - visų šių savybių negali patogiai užtikrinti html ar pdf formato dokumentacija.

Kaip tik su tokia pačia problema susidūrė ir Lazarus programavimo aplinkos kūrėjai. Jie, po diskusijų, nusprendė naudoti chm formatą. Nors jis ir nėra oficialiai dokumentuotas, tačiau yra pakankamai neoficialių išsamių formato aprašų. Problema buvo ta, kad Linux sistemoje nėra pakankamai išvystytų chm žiūryklių (angl. viewer). Ir taip po kelių mėnesių atsirado LHelp programa, kuri visose platformose veikia ir atrodo taip pat. Palaiko indeksus, pilno teksto paiešką ir t. t.

Tad žinyno problema man išsisprendė iki atsirandant trečiai žodyno versijai :) Tiesa, teko pačiam susiprogramuoti chm „gamintoją“, nes esantys Windows sistemoms nepalaiko UTF8, o esantis su Lazarus pavyzdinis chm „gamintojas“ šiek tiek labai nepabaigtas :) Tiesa, mano irgi yra ypač paprastas, tačiau šiek tiek patogesnis:

Maniškis chm „gamintojas“

Tad nors dar ir nėra paruošti KZod žodyno pagalbos failai, bet visa, ko reikia (išskyrus pačius tekstus), jau yra.

Diegimo paketų kūrimas

Kiekviena rimta programinė įranga pateikiama kaip diegimo paketas. Taip yra dėl to, kad šis diegimo paketas ne tik sukopijuoja failus į reikiamas vietas, bet sutvarko ir įvairius kitus reikalingus dalykus (pvz., sukuria nuorodas, įrašo reikiamą informaciją į registrus ar kitur).

Lygiai taip pat, kaip su programos kūrimu - turi vieną išeities tekstą ir iš jo susikompiliuoji visoms sistemoms - norėjosi daryti ir su diegimo paketų kūrimu. Šiek tiek paieškojus internete aptikau InstallJammer projektą, kuris būtent tam ir skirtas!

Taip pat dar turėjau kelis (pagrindinius) pageidavimus:

  • turi būti kuriami paketai Windows, Linux ir OSX sistemoms;
  • turi būti galima pasirinkti diegiamus komponentus;
  • turi būti galima įdiegti „ant viršaus“ neribotą kiekį kartų ir naujesni failai (pagal diegimo programoje nurodytus versijų numerius) turi perrašyti senesnius;
  • turi būti palaikomas daugiakalbiškumas.

Deja, šis projektas nėra toks stabilus ir taip dažnai atnaujinamas, kaip norėtųsi... 1.2 versija neturėjo kelių dalykų, kurių man norėjosi, o 1.3 versija turėjo nemažai netikėtų ir nepageidautinų savybių :) (aka angl. bug). Šiaip ar taip, pramokęs tcl skriptų kalbą ir po ~20 val. gryno darbo sugebėjau turėti pageidaujamą diegimo paketą Windows sistemai.

Tiesa, Linux ar OSX diegimo paketų dar nebandžiau, bet problemų (tikiuosi) nebus.

2010 m. spalio 23 d., šeštadienis

KZod - programavimas kaip hobi

Taigi, praėjus dvejiems metams pagaliau pabandysiu ką nors papasakoti :)

KZod - vienas iš mano projektų, kurį kažkas iš tiesų naudoja!

Iš pradžių šiek tiek statistikos:

  • nuo ~2004 metų programą atsisiuntė 315 616 kartus (čia neįskaičiuoti atsisiuntimai iš tiesioginės nuorodos, t. y. kai siunčiamasi per visokius download.com ir kitus psl.);
  • iš aukštesnio skaičiaus 12 695 atsisiuntimai Linux OS (verta pastebėti, kad Linux OS versija nėra tokia išbaigta, kaip Windows versija...).

Tada išeina, kad per dieną vidutiniškai programa atsisiunčiama 136 kartus. Visgi tikrai bent kažkas ją naudoja!

Keista, nes Donate! mygtuką per apie ketverius metus paspaudė tik trys žmonės :)

Šiaip ar taip - tas nemažas atsisiuntimų skaičius motyvuoja kartais prisėsti ir kažką naujo paprogramuoti šiam žodynui.

Tad nuo pirmosios trečios kartos (v3) programos beta versijos, kurią pirmą kartą viešai paskelbiau 2008 metų rugsėjį, praėjus nemažam laiko tarpui jau yra trečioji beta - išties realiai mąstant, pilnu etatu, užtektų poros mėnesių ir būtų viskas baigta, bet...

Taigi, trumpai pristatant naujausią beta versiją, reikėtų pasakyti, kad čia atsižvelgta į daugmaž visus anksčiau gautus patarimus ir pastabas (išskyrus programos interfeiso detalių vietos keitimą). Visgi verta pastebėti, kad čia dar trūksta tokių dalykų:

  • Jeigu įdiegiami iš pradžių ne visi žodynai, tai po to papildomai diegiant žodynus - jie neatsiranda programoje.
  • Nėra angliškų trumpų patarimų.
  • Nėra pagalbos failų.
  • Interneto reikalaujančios funkcijos (ieškoti žodžio internete, žiūrėti naujienas) gali veikti nestabiliai jeigu kompiuteris atjungtas nuo interneto.
  • Taip pat keisis „Apie“ dialogo išdėstymas.
  • Šį kartą Linux versijos nėra (dėl laiko trūkumo - neturėjau kada ištestuoti ir supakuoti).

Taip pat šiame pakete galite rasti 12 žodynų:

  • anglų-lietuvių (25000), lietuvių-anglų (11500);
  • rusų-lietuvių (18800); lietuvių-rusų (28500);
  • prancūzų-lietuvių (18400); lietuvių-prancūzų (9200);
  • vokiečių-lietuvių (4600); lietuvių-vokiečių (3700);
  • lenkų-lietuvių (18700); lietuvių-lenkų (18700);
  • esperanto-lietuvių (8800); lietuvių-esperanto (10100).

Tiems, kas nepatingės patestuoti, ir išsakyti, būsiu dėkingas už visas pastabas, pasiūlymus ir komentarus.

Nelikite abejingi - paremkite šį projektą! (sąskaita ARBA PayPal: www.dict.lt „Donate“ mygtukas)

Artimiausiuose planuose - Linux versija, po to - Mac OSX versija, dar vėliau - žodynų kūrimas ir redagavimas. Deja, negaliu apibrėžti savaitėmis, kiek tie „artimiausi planai“ gali trukti. Galiu tik pažadėti, kad kiekvieni paaukoti 5 Lt „privers“ mane per per artimiausias dienas skirti bent 1 valandą šiam projektui ;)

Kitą kartą papasakosiu kaip ir su kuo visa tai kurta!

Programą atsisiųsti galite iš čia.

Pavyzdiniai ekrano vaizdai:

Windows 7 sistemoje
Windows XP sistemoje