Most megpróbálok valami értelmeset :-)

Túl sok értelmes dolgot nem igazán csináltam, mostanában. Az egyik amit ide sorolhatok, hogy a nyáron elmélyítettem a nyelvtudásomat. Egyszerre több nyelven is! És nem anime nézéssel a japánt, hanem a Java nyelvtudásomat Hello World! szintről egy egész használható program megírásáig.
És e közben az osztályok és package dokumentációjának olvasás közben az angolom is tudott fejlődni egy kicsit, méghozzá szakmai irányban is.

Egy osztály ami eléggé megtetszett, egy kicsit fel is idegesített: java.util.regex.Pattern

Pattern p = Pattern.compile(".*\\[(/?\\w+)(=\\S+)?\\].*");
Matcher m = p.matcher(tetszöleges_szöveg);
boolean isTrue = m.matches(); //Egy logikai változó

Az előző kód eldönti egy tetszőles szövegben van-e BBCode tag vagy sem. Ez reguláris kifejezés a szíve a dolognak: ".*\\[(/?\\w+)(=\\S+)?\\].*". Mire rá jöttem hova és mennyi backslah kell akkor idegeltem be egy kicsit.

És, hogy miért kerestem BBC tageket, azért mert egy BBCode szerkesztőt fejlesztgettem a nyáron.
Első elképzeléseimben egy az observer tervezési mintának megfelelő osztott panelek, egyikben a kód ahol szépen kiemelődnek a kulcsszavak attribútumok szögletes zárójelek. Közben a másik panelben egyből jelenik meg a formázott szöveg.

Hát ez kicsit merész állom volt, de a 0.01-es verziótól eljutottam a 2.3-as vezióig.
A funkcionálisan legjobban működő 1.03-as screenshotja:

Van benne pár bug, mint pl. verzió számot se jól írja ki. De mondjuk lehet nem ez a legvészesebb. :D

Ha valakit érdekelne leírom a nem éppen legmintaszerűbb fejlesztési folyamat lépéseit, viszont meg próbálom közérthető nyelven is összefoglalni az egyes verziók történetét.
Ha nem érdekel senkit akkor is megírom mert elég sokat el vett a nyaramból. Bár kifejezetten élveztem ezzel szenvedni.

Bevezetésnek pár szó a verziózásról.

A pont előtti szám a major verzió aminek a változása már nem garantálja a verziók kompatibilitását.
A pont utáni a minor verzió amik leginkább bug fixeket és biztonsági fejlesztéseket jelentenek, és lehetőleg ezeknek a verzióknak illik kompatibilisnek lenni egymással. :)
Ezenkívül még lehet több pont is a verzió számban pl.: 1.2.34.567 azok a build és revision verziók.

Egy kis story: Az XP a 5.1-es Windows a Vista a 6-os és ugye megjelent a Win7 ami végre nem kapott hülye nevet, hanem a major verzióról nevezték el! Viszont valami Microsoftos kavarás miatt a Win7-nek a 6.1 a verziószáma. Microsoft4U!

És akkor most már tényleg az én programomról:

D Edit 0.01

A közérthető dolgok:
Miért 0 a major verzió, mert tényleg a nulláról indultam. Inkább csak kísérletezgettem, hogy fel idézzem amit egy fél éves kurzoson elvileg megtanítottak nekem. :)Vicces kis játszadozás volt, az editor funkció nem lett túl fényes viszont lehet vele Snake-ezni és még a Mátrixba is be lehet lépni. XDAz elnevezések is furák lehetnek, de utálok nevet adni a dolgoknak. Perceket gondolkozom egy 1 betűs neven is. Az editor végéről meg le hagytam az “or”-t. Kicsit lehet diszgráfiás vagyok.
Na tehát így született név, nincs mögötte semmi misztikus tartalom. :)Hamar rájöttem a vakon előre fejlesztés zsákutcába vezet és átterveztem az egészet. És bele kezdtem egy teljesen új alapokra épülő megvalósításra, és ekkor neveztem át 1.00-ás verzióra.

Mivel inkább csak kísérletezgettem és nem voltam biztos benne, hogy tényleg az editor lesz fő funkciója ezért modulárisra terveztem. Az ablak külön osztályba került mint maga az editor.
Az ablakot AWT-vel (Abstract Window Toolkit) valósítottam meg, kódolva nem designer nézetben. Viszont így a menüsor az Ablakb osztályban volt a gombok meg a Editorban, és protected téve eléggé megsértettem a objektum orientált paradigmákat leginkább ennek helyre tétele ösztönzött következő verzióra, és a densigner nézetet és a Swing-et is megismertem közben.

Az osztály diagram valami ilyesmi lehetett:

A Snake egy 3 dimenziós boolean mátrixon alapult az első dimenzió a pálya szélesség + 2 a második a magasság + 2 a harmadig dimenzióban egy bool érték van annak megfelölen van-e fal a mezőn van-e kígyó a mezőn vagy van-e kaja a mezőn.
A kígyót a feje és farka írta le pontosabban ezeknek az iránya.
A fej irányát a nyilakkal lehet meghatározni, ezeket figyeli a KeyListener, és egy Timer időzítésekor érvényes irányban igazzá teszi a kígyó logikai értékét. A farok mozgása előtt hamissá tette az aktuális mezőn a kígyó értéket. Azt, hogy merre mozduljon egy FIFO listába volt tárolva, mikor a kigyó megette a kaját a farok nem lépet. És a kígyó így nőt.

“A Mátrix” megírása nem volt vészes, ott azzal szórakoztam több napot is, hogy az egyes karakter csoportokból véletlenül megjelenő karaktereknek mennyire legyenek véletlenek.
A szóköz után a 0-ból és 1-esből van a legtöbb. :D

A 0.01-es verzió: http://drop.io/d_edit0_01

D Edit 1.00 – 1.03

Ezt a verziót már nem csak kódszinten írogattam, hanem a fejlesztő pogram tervező nézetében, ahol építőkocka ként lehet az elemeket fel rakosgatni:

Azért itt is kellett kódolni is ha kinézet mellett működést is szeretne az ember. Magából az Editor részből csak egy szövegmező látszott szerkesztő nézetben mégis 200-300 sor kód generálódott abból amit ott állítgattam.
Legtöbbet mégis a BBC menübár elkészítésénél segített:

Ez kinézet úgy 200 sor generált kódból és 100 sor saját. És ez csak a nézet és a gombokra kattintás észlelése a működés még nem itt lett megvalósítva.
És ez a verzió legfőbb funkciója tényleg a BBCode szerkesztés volt.
Bár a Snake-et és A Mátrixot bele raktam csak azért is mert az elég gyakori feladat, hogy korábbi kódrészleteket kompatibilisé tenni az újabbakkal. :)

Az osztály diagram nagyjából hasonló csak több helyre bekerültek interfészek és absztrakt osztályok, hogy az egységbezárást ne kelljen megsérteni és megkönnyítsék a leendő fejlesztéseket. És bekerültek a BBCodeIconBar és egyéb kisebb osztályok.

Teljesen swinget használtam. Csak fel merült egy újabb probléma a swing szöveg komponensei.
A fő gond az volt, hogy melyik komponenst is használjam sima szöveg vagy formázott szöveg megjelenítésére alkalmasat. Az 1.03-as verzióban azér is van két fül mert próbáltam kísérletezni a különbségeikkel. 1-es verzió végére eljutottam odáig, hogy egy egyszerű szövegbe be tudom illeszteni a tag-ket és minimális szerkesztői funkciók, mint vissza vonás és kivágás beillesztés, is működtek.

Ezeket nagyjából támogatják a swing komponensek , de ha kódkiemelést és formázott nézetet is meg akarok valósítani akkor nem lesz elég szöveg mezőkre hagyatkozni.

A swingnek “szerencsére” van egy text csomagja. Azon belül is az EditorKit osztály az érdekes.
Az editor kit ami összerendeli a modellt a dokumentumot a nézettel (View). A dokumentumnak megfelelő olvasás és írás műveletet is definiálhat. Meg eseményeket is de eddig még nem jutottam el.
A újabb major verzió változást az editor kit használatára valóáttérés jelentette.

Az 1.03-as verzió: http://drop.io/d_edit1_03

A TXT fül egy egyszerű szöveg szerkesztő, a nézet menüben lehet BBC nézetre váltani, ekkor megjelenik az eszköz tár és monospace betűtípusra vált, ez kikapcsolható a Mono Space gombal. :)
Gombok megnyomása után a tag-ek a kijelölt szöveg köré kerülnek. Ha nincs kijelölve semmi egymás után megjelenik a nyitó és záró tag.
A szín (color) tag esetén megjelenik egy színválasztó dialógus és attribútumnak  beilleszti a szín RGB kódját. Viszont a hashmarkot (#) nem teszi elé. A bugot nem tudom javítani. :P

Az Editor Pane fülön HTML és RTF oldalak formázva jelenek. Ez alap feature -je a szöveg mezőnek, nem én kódoltam le. :)

Egy személyes indíttatású  funkció a több kép beillesztése:

Hogy ez miért van így ahhoz kicsit nézegesse mindenki a MAL Blogomat. :P

Minden sor bekerül egy img tag-be. A két opció értelem szerű.

Különösen jól használható ImageShack uploaderel együtt, ahonnan a megfelő formátumban egy-egyben átmásolható összes feltöltött kép.

D Edit 2.00 –

Ebből a verzióból még nem értem el az első használható verziót se, viszont itt már a hatékonyságra és a kód szépségre is oda figyeltem és tervezgetni is próbáltam.

Magát az Editort is tejesen át alakítottam minden dokumentum külön fület kapott és az editor kitten keresztül hajtódnak végre a műveletek minden dokumentum típusnak a megfelelő műveletekkel.

Mivel a fülekből akármennyi lehet, ezért nem lehet mindre referenciát tárolni, főleg nem lehet mindegyikhez külön UndoManagert meg DocumentumListenert regisztrálni, és ezeket még változtatni is kéne mikor egyik fülről a másikra lesz váltva.
Ezért az JEditorPane-ből származtattam egy SmartPane-ét ami azért volt okos mert volt saját UndoManagere és DocumentListenere és nem kellett ezzel törödnie az Editornak.
Új SmartPane létre hozása után bekerült egy ArrayList-be és a hozzá tartozó ScrollPane ami a füleknek felet meg egy Hashtablebe lett behashelve.
Egy referencia van az aktív Panere, váltásoskor meg kell keresni a listában majd a hashtáblából a hozzá tartozó fület.

A BBCodeBarnak jelenleg semmi hatása sincsen, ugyanis még nem sikerült megvalósítanom BBCodeDocument-umot, így amíg nem tudom annak milyen is lesz a végső felépítése azt se tudom, mit csináljanak a megfelelő gombok.

Most itt vagyok elakadva az BBCEditorKit, BBCDocument, BBCView, BBCReader/Writer osztályok megvalósításával.

Kezdetben próbáltam származtatni őket plain meg formázott szövegek megfelelő osztályaiból. Viszont jelenleg az AbstraktDocument-ből származik a BBCdocument a BBCEditorKit meg a StyledEditorKit-ből. Viszont a többi részletet nem tudom meg valósítani míg a BBCDocument felépítését nem tudom meg valósítani.

A dokumentumom terve már nagyjából meg van, semmi kirívóan eltérő egy általános dokumentum felépítésétől. Levél elemek a következők lennének nyitó tag, záró tag, szöveg, esetleg külön elem a attribútumoknak.
Ha ez meg van a többi már a nézetek és olvasók/írók dolga lenne.
Viszont egy dokumentumba nem lehet csak úgy elemeket beilleszteni meg kiszedni. Nézegettem a PlainDocument és StyledDocument kódját is de nem tudok rá jönni mitől jönnek létre az új elemek.

Most itt tartok, kicsit elmúlt a lelkesedésem a BBCDocument miatt, viszont egyszer talán csak észre veszem mi az pár sornyi kód ami még kéne az elemek helyre kerüléséhez, vagy esetleg tényleg van egy metódus amit nem vettem észre.

Ezeken kívül volt még sok gondolatom, és észre vételem fejlesztés közben, de ezek azok amik meg is maradtak. Ezek után a következő lépés már az lenne, ha fejlesztés közben dokumentálnám is a program fejlesztését is, de lehet ez csak szoftlab4-re marad. :D

Remélem legalább a kék részeken sikerült érthetően fogalmazni egy átlag embernek is.
De szerintem aki elég sokat mozog az online világban azt egy kicsit csak érdeklik az ilyen dolgok.
Reklámok
Kategória: Informatika
Címke: , ,
Közvetlen link a könyvjelzőhöz.

Egy hozzászólás a(z) 0ejegyzéshez

  1. Visszajelzés: Egy éves a bloggom! – és ez is egy – Első nap a suliban! | Kdanni blogja

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s