Színbeállítások Eclipse-ben – javított megoldás

Ahogy tegnap is írtam, [intlink id=”623″ type=”post”]Eclipse-hez beállító ablakokat[/intlink] könnyen lehet készíteni. De ez még mindig bonyolultabb, mint az optimum, ha csak színeket (és esetleg betűtípusokat) akar az ember beállíthatóvá tenni.

Hogy miért is mondom ezt? Azért, mert így teljesen úgy beállításlapot kell csinálni, amikor az Eclipse már tartalmaz egy színbeállítással foglalkozó oldalt (General/Appearance/Colors and Fonts). És ha az ember jobban megnézi, akkor itt bizony jó néhány olyan beállítás is szerepel, ami semmilyen hivatalos Eclipse csomagban nincs benne, innen kezdve adódik a következtetés: kiterjeszthető. 🙂

És valóban: az [cci]org.eclipse.ui.themes[/cci] kiterjesztési pont az, amit mi keresünk. Ami lényeges előrelépés az általános beállításpanelhez képest, hogy itt a beállításokat mindössze a plugin.xml megfelelő kitöltésével megoldhatjuk, és ez rögtön legenerálja a megfelelő felhasználói felületet. Lustaság fél egészség.:D

De a lényeg az egészben, hogy ez oda kerül, ahol a többi hasonló beállítás van, ezért talán a felhasználó is könnyebben megtalálhatja (nem szabad elfelejteni, hogy az Eclipse környezetnek a célközönsége nem a mezei felhasználó, hanem annál hozzáértőbbek, legalább poweruser-ek, de egyelőre még inkább programozók, így megengedhető, hogy az összes beállítás így jelenjen meg).

A kiterjesztéshez definiálhatok különböző paramétereket: ami az én esetemben lényeges volt, az a [cci]themeElementCategory[/cci] és a [cci]colorDefinition[/cci] attribútumok: az előbbivel egy kategóriát definiálhatok, míg a másodikkal színeket (a betűtípusok definiálásához a [cci]fontDefinition[/cci] attribútumot lehet használni, hasonlóan a colorDefinitionhöz).

A színekhez meg lehet adni egy alapértelmezett színt (nem kódban, hanem az XML-ben), ezt a value elemhez érdemes tenni, egy színazonosítót (a későbbi hivatkozáshoz), valamint egy categoryId-t (itt lehet megadni a korábban definiált kategóriát). A plugin.xml grafikus szerkesztőjén teljesen magától értetődő a kezelés.

A kategóriának meg egy Id-t és egy feliratot kell megadni.

Ha ezeket az elemeket megadtuk, akkor már késznek is tekinthető a beállítási felület, és nincs más hátra, minthogy a kódból elérjük a színeket. Ez hasonló bonyolultsággal, de kicsit eltérő kóddal kezelhető, mint a beállítások esetén. Kicsit konkrétabban:
[cc_java]IThemeManager themeManager = PlatformUI.getWorkbench()
.getThemeManager();
ITheme theme = themeManager.getCurrentTheme();
ColorRegistry colorRegistry = theme.getColorRegistry();
ENTITY_BG = colorRegistry
.get(“org.eclipse.viatra2.visualisation.entity.background”);[/cc_java]

Betűtípus lekéréséhez pedig a getFontRegistry hívással kell a témától elkérni a betűtípus-tárat, és annak a get metódusával a betűtípusokat lehet megkapni. Az így megkapott Color, ill. Font objektumokat nem kell felszabadítani, ezt a rendszer elvégzi helyettünk.

Ennyi munkával már össze lehet rakni egy jól működő beállításablakot, ezt képekkel illusztrálva a következő oldalon is lehet látni (angol nyelven): http://blog.eclipse-tips.com/2008/08/adding-color-and-font-preferences.html. Így ennyit se nagyon kellett volna írni, de egy aprósággal ezt is kiegészítettem még: a kiterjesztés megengedi, hogy egy előnézetet hozzak létre az így elkészült beállítási ablakhoz. Hogy megmutassam, ezzel mire gondolok, megmutatom az elkészült panelt.

Az elkészült színbeállítóablak grafikus képe
Az elkészült színbeállítóablak grafikus képe

Röviden: összerakhatok egy tetszőleges SWT formot, ami megjeleníti a beállítások eredményét. Ehhez a kategória class nevű attribútumát kell beállítani egy általunk létrehozott osztályra. Az interfész két metódus megvalósítását követeli meg: egy [cci]createControl[/cci] és egy [cci]dispose[/cci] metódust. A megvalósítás magától értetődő(nek tűnik): a createControl mindig meghívódna, amikor a beállítások módosulnak.

De sajnos nem. Az csak egyszer hívódik meg. Ezért a [cci]createControl[/cci] futása során fel kell iratkoznunk a téma változásaira az [cci]addPropertyChangeListener[/cci] metódus segítségével, és amikor ott befut az eredmény, akkor frissíteni kell az előnézetet.

Az előnézetet tényleg tetszőleges módon meg lehet valósítani, én például simán hozzácsaptam egy Zest Graph Viewert, és azt paramétereztem fel némi “dummy” adattal, és az eredmény a fenti képen látható (és a gyakorlatban tényleg azonnal frissül 🙂 ).

Ez az kiterjesztés láthatóan arra van kihegyezve, hogy egységes módon lehessen színbeállításokat tenni, és ennek a legjobb módja, hogy ne adjuk ki a kódot a kiterjesztő kezébe, hanem csak lehetőséget adjunk a felparaméterezésre. Ugyanakkor ez kellően rugalmasan sikerült megoldani, és a dokumentáció alapján tényleg magától értetődő a kitöltés. De nem szabad elfelejteni, hogy ez nem egy teljes körű megoldás, például vonalvastagságot vagy vonaltípust itt beállítani nem lehet, noha grafikus pluginek témabeállításaihoz ez is hozzátartozik.

Eclipse Preference Page készítésről röviden

A héten egy „egyszerű” problémát kellett megoldanom: egy Eclipse-pluginhoz konfigurációs lehetőségként kellett lehetővé tennem színek kiválasztását. Elhangzott ötletnek, hogy csináljak akár Java properties fájlokat vagy valami hasonlót (értsd: kódold le kézzel), de ha már Eclipse házinak készül a dolog, inkább úgy döntöttem, nézzük meg, hogy az Eclipse mit kínál.

Egyik természetes megoldásnak tűnik egy saját Property page létrehozása, amin be lehet állítani a megfelelő színeket. Ehhez kiderült (némi keresgélés után, ez tényleg gyorsan megvan), hogy az org.eclipse.ui.PreferencePages kiterjesztési ponthoz kell kapcsolódni. És még további próbálkozás után kiderül, hogy érdemes legeneráltatni a mintát az Eclipse-ből, mert lényegesen okosabb kódot rak össze, mint ami az interfész naiv implementációjából kijönne. De erről egy kicsit később.

Az extension point igényli, hogy megadjuk, milyen névvel illetve milyen másik Page alá szeretnénk betenni az új lapunkat, ami lehetővé teszi a kényelmes hierarchikus beállításszervezés összeállítását. Nice.

Ami meglepően egyszerűvé teszi az oldal tervezését, hogy a JFace API tartalmaz beépített FieldEditor osztályokat, így a beállítások lap tervezéséhez egyszerűen annyira van szükség, hogy ezeket (esetleges SWT konténerekkel együtt) kidobálok egy API-tól kapott konténerre. Triviális. És ami még fontosabb, egy percig sem kell azzal szórakoznom, hogy mikor/hogyan mentsem ki az adatokat a háttértárra, hogyan olvassam ki a mezőkből, mert ezt automatikusan elvégzi a rendszer. Nekem csak minden egyes mezőhöz egy azonosítót kell rendelnem, és a többi már gyorsan megy. Ha valami speciális feltételek vannak a kitöltéshez, ahhoz pedig a legtöbb komponens validator hozzátételével működik – ezzel az egyszerű struktúrával a legtöbb gyakorlatban előforduló eset kezelhető (szerintem).

A FieldEditor osztályok nagyon könnyen kezelhetőek: van köztük színválasztó, fontválasztó, egyszerű szöveges beviteli mező, checkbox, könyvtárválasztó és még sok minden más, egyszóval a gyakorlatban előkerülő legtöbb igényt le lehet fedni velük. És ami igazán fontos: ezek a megfelelő natív dialógusokat hívják be (pl. OSX-en a natív színválasztót, nem valami Javaból összetákolt valamit…).

A generált mintakód igazából három fájlból áll: a PreferenceConstants.java fájlban konstansokat lehet felvenni, amellyel később azonosíthatjuk az elmentett adatokat, a PreferenceInitializer.java fájlban a kezdőértékeket, míg az általunk választott nevű harmadik fájlban lehet összerakni a tényleges adatokat. Ezeket a fájlokat tovább nem is elemezném, ha valakit jobban érdekel, nézze meg, ennyi ismerettel könnyen érthető és módosítható igény szerint. Vagy meg lehet nézni a http://www.eclipsepluginsite.com/preference-pages.html oldalon a részletesebb kifejtést.

Inkább csak azt írom le, hogy ebbe hogyan lehet betenni a színkezelést (amit nem ír le az eredeti forrás). A form összerakásakor egyszerűen ColorFieldEditor-t kell létrehozni, hasonló paraméterezéssel, mint a mintában, míg az inicializálásnál a következő módon lehet gondolkodni:
PreferenceConverter.setDefault(store, PreferenceConstants.P_ENTITY_BG_COLOR, new RGB(216,226,248));

Azaz egy RGB értéket példányosítok, és ezt töltöm be alapértelmezésként. Ettől a pillanattól kezdve van egy kész színbeállító komponensem, menti is az adatait. Zsír. Akkor már csak egyszerűen be kell tudni olvasni. Szerencsére ez sem túl bonyolult. Ha egyszerűen Stringként akarom beolvasni a beállítást, és a stringet átadni a Color konstruktornak, akkor a következő kód jöhet számításba:
IPreferenceStore store = RmpPlugin.getDefault()
.getPreferenceStore();
String colorCode = store.getString(PreferenceConstants.P_ENTITY_BG_COLOR);

De lehet egyszerűbben is: a JFace tartalmaz egy PreferenceConvertert, aminek segítségével ez még egyszerűbben elintézhető.
RGB color = PreferenceConverter.getColor(store, PreferenceConstants.P_ENTITY_BG_COLOR);

Röviden összefoglalva ez is egy kényelmesen használható API, jól illeszkedik az Eclipse filozófiájába, aminek az az előnye, hogy gyorsan megtanulható, ráadásul kellően rugalmas is. Az előre megírt FieldEditorok pedig tényleg egyszerűvé teszik az egységes (ráadásul ugyanakkor platformfüggő!) kinézet összerakását a beállítópanelen is.

Ugyanakkor a végleges megoldásom nem ezt a menetet követi, helyette egy másik beépített megoldást használtam, de arról majd inkább legközelebb írok egy kicsit.

Technikai írásokról néhány pontban

Most olyan kedvem támadt (illetve olyan ingerek értek a közelmúltban), hogy úgy gondoltam, érdemes foglalkozni egy keveset írástechnikával is. Túlságosan nem értek a kérdéshez, éppen ezért, ha valaki úgy gondolja, valamivel nem ért egyet, esetleg kiegészítené az elhangzottakat, szépen megkérem, tegye meg!

Hihetetlen módon még a mi informatikusi életünkben is előfordul, hogy írnunk kell (méghozzá valamilyen emberi nyelven, nem számítógépnek). Sokszor kell bemutatni valaki másnak, hogy mit csináltunk, esetleg új fejlesztő jön a csapatban, és nem baj, ha nem kell sokáig mellette ülni, hogy felfogja, mivel dolgozik. Esetleg csak a főnökünknek/marketingeseknek/stb. kell elmondani, leírni, hogy mivel is foglalkozunk.

Most olyan kedvem támadt (illetve olyan ingerek értek a közelmúltban), hogy úgy gondoltam, érdemes foglalkozni egy keveset írástechnikával is. Túlságosan nem értek a kérdéshez, éppen ezért, ha valaki úgy gondolja, valamivel nem ért egyet, esetleg kiegészítené az elhangzottakat, szépen megkérem, tegye meg!

Hihetetlen módon még a mi informatikusi életünkben is előfordul, hogy írnunk kell (méghozzá valamilyen emberi nyelven, nem számítógépnek). Sokszor kell bemutatni valaki másnak, hogy mit csináltunk, esetleg új fejlesztő jön a csapatban, és nem baj, ha nem kell sokáig mellette ülni, hogy felfogja, mivel dolgozik. Esetleg csak a főnökünknek/marketingeseknek/stb. kell elmondani, leírni, hogy mivel is foglalkozunk.

És sokaknál ezen a ponton eljött az Armageddon. Elvégre a mi a fenének szórakozzunk mi menet közben a dokumentálással, hiszen a kód úgyis magától értetődő, tisztább, mint az emberi nyelvek (elvégre a fordítók elég igényes állatfajt alkotnak, csak azt érti meg, amit tökéletesen mondunk neki, és esetleg félre is érthetik).

De az emberek jelentős része egyáltalán nem érti a programkódot, és a maradék számottevő része is szívesebben látja egy mondatban összefoglalva, hogy mit csinál az a kód (ami lehet, hogy akár csak öt sor). Azaz egyéb formában is le kell tudni írni, mit csinálunk. Amit hatékonyan csak az tud megcsinálni, aki ismeri is a rendszert (pl. aki írta). És utólag összeszedni, hogy miért pont egy adott megvalósítás mellett döntöttünk, kicsit nehéz megállapítani.

Aki még mindig kételkedik benne, hogy ez valóban probléma, annak javaslom megtekinteni a következő képet [[http://www.linuxkungfu.org/images/fun/geek/project.jpg|a kommunikációs félreértésekről]] szoftverfejlesztés kapcsán.

További probléma (még tiszta programkód esetén is!), hogy az, aki megpróbálja megérteni a programot, annak csak egy kis részét láthatja egyszerre. Tegye fel a kezét, akinek sikerült mondjuk az Eclipse jobban megírt részeit ránézésre megérteni: többszálú alkalmazás (hogy debug módban nehezebb legyen végigléptetni), tervezési minták (aminek általában az egyik fele valahol az API belsejében van, neked meg a túloldali interfészt kell csak megvalósítani), és több-kevesebb elérhető dokumentáció (Javadoc többnyire van, de az egy efféle rendszerben édeskevés).

Az egyedüli dolog, ami segíthet, az egy jól felkommentezett mintapélda (ha lehetséges megfelelően kis méretben megoldani), vagy még inkább megfelelő részletezettségű programozói dokumentáció (ezen azt értem, hogy ne kelljen 500 oldal dokumentációt áttanulmányozni a egy nézet írásához, de azért kellően részletes ahhoz, hogy az ötleteket megértsem, és tudjam, mikor melyik osztályhoz kell fordulni).

Igen, ez nehéz. Nem kicsit, nagyon.

Röviden összeszedve, bizony előfordul, hogy emberi nyelven kell írni, hosszabb-rövidebb szöveget. És ezt lassan ideje megtanulni is. Elméletileg az általános és középiskolában a magyarórákon a fogalmazástanításnak ez lenne az egyik célja: megtanuljunk írni.

És itt és most lezárnám ezt az első szakaszt, és átváltanék egy másikra: szeretnék néhány trükköt leírni, amik segítenek egy jobb minőségű írott szöveget összehozni.

Alapötlet: ismételhetőség

A tanszéken azt az ökölszabályt szokták mondani laborjegyzőkönyvekre, hogy szükség esetén abból egy alapfogalmakkal tisztában levő ember reprodukálni tudja a laborfeladatokat. Ezt jó ökölszabálynak tartom majdnem minden (technikai jellegű) dokumentációhoz, leíráshoz. Nem technikai leírásnál meg talán az lehetne a lényeg, hogy az olvasót valamilyen gondolatmeneten végigvezesse az író (esetleg adott érzetet keltsen benne).

Persze egy kicsit általánosítani kell ehhez a szabályt: legyen benne minden lényeges elem a reprodukáláshoz/felhasználáshoz, lehetőség szerint megfelelően struktúrálva.

Másik alapötlet: döntsd el, kinek írsz!

Természetesen nem döntheted el, ki fog elolvasni, amit írtál, de azért van egy célközönség. A célközönségről feltehetsz bizonyos ismereti szintet, de nem érdemes ezt túl magasra tenni a lécet, mert akkor kevesen tudják átugrani.

Érdemes egy nem túl magas szintet választani, és ehhez következetesen tartani magad az írás során.

Szenteljünk egy fejezetet a terület bemutatásának!

Egy átmeneti terület a strukturálás és a közönség megismerése között egy területbemutató fejezet írása. Ez a fejezet felhasználható arra, hogy a különböző előismeretű olvasók számára biztosítsuk azt a tudásszintet, amire szükségünk van a saját eredményeink bemutatásához.

Még akkor is hasznos, ha feltehető, hogy minden olvasó ért a területhez, ugyanis nagyon gyakran nem egységes a terminológia, különböző megközelítések léteznek. Ebben a fejezetben erre is ki lehet térni, ki lehet választani a terminológiát, és lehet hivatkozni egyéb művekre, amik a megértést segítik.

Legyen az írásnak eleje és vége!

Az írást lehetőleg a kontextus megadásával kell kezdeni. Ide tartozik az, hogy mi a motiváció a munkára, milyen problémát oldunk meg, esetleg egyéb megoldások miért nem alkalmazhatóak. Egyetemi házi feladatok, laborjegyzőkönyvek esetén ez többnyire nehézkes, hiszen a kontextust maga a feladat adja, és gyakran nem látszik, hogy miért pont így, de már önálló laboratórium, diplomamunka vagy TDK dolgozat esetén ez nagyon lényeges pont. Nagyon nehéz feladat bevezetést írni, hiszen egyfelől nem arról beszélsz, hogy mivel foglalkozol, hanem arról, hogy miért ezzel – és amikor már az ember olyan fázisba jut, hogy ír róla, ez gyakran triviálisnak tűnik, holott egyáltalán nem az.

További nehézség ennél a pontnál, hogy a célközönség előképzettsége ismeretlen. Így nem szabad túlságosan technikai módon bevezetni, mert akkor nem fogják elolvasni (mondván, túl bonyolult), nem fognak figyelni rá (nem érdekes), de a másik oldalra sem szabad átesni: a semmimondó bullshitre egy hozzáértő esetleg kicsit érzékenyen reagál.

Szintén nehéz kérdés a befejezés. Itt jön a második pont, ahol meg lehet próbálni eladni, ami készült. Értékelni kell, hogy mit tud, ami elkészült, legalább szőr mentén emlegetni, hogy mi az, nem, mások eszközei mit tudnak, esetleg írni azokról az írásokról, amit alapötletnek használunk.

A fejezetek önállóak – de csak részben

Az előbb említett bevezetésen és befejezésen kívül lehet beszélni még a lényegről is: nem mindegy, hogy milyen struktúrában kerül sor az eredmények részletezésére. A szomszédos fejezetek között megengedhető, hogy nagyobb logikai ugrás legyen, hiszen ezek önmagukban is értelmes, zárt elemek.

Amire viszont érdemes figyelni, hogy milyen utalásokat teszünk a fejezetek között. Visszautalni szabad, sőt célszerű is, hiszen itt lehet egyrészt a fontos elemeket újra hangsúlyozni (elvégre a korábbi fejezeteket már olvasták), az ismétlés pedig a hangsúlyozás egyik fontos eszköze. Nyilván itt is csínján kell bánni a dologgal, hiszen ha túl sokszor utalunk vissza, azzal pont a hangsúly megy el…

Az előreutalás nehezebb eset: mivel ezt még feltehetőleg nem olvasták, ezért a teljes gondolatot össze kell foglalni a hivatkozáshoz, előrehivatkozni csak azt lehet, hogy ezzel ott foglalkozunk részletesebben. Elvégre ez nem az internet, ahol össze-vissza lehet hivatkozgatni.

Ábrák, képek

Az ábrák, képek nagyon fontosak lehetnek: noha alapvetően szöveges tartalomról beszélek, egy-egy jól megválasztott ábra a megértést nagyban könnyítheti. Nyugodtan használjunk akár színes ábrákat is, de ne felejtsük el, hogy esetleg az olvasó csak fekete-fehér képet fog látni; és hasznos, ha a munkában szereplő képek, ábrák nagyjából egységes formátumúak – ha nagyon különböző stílusú ábrákat használunk (és látszólag ok nélkül), az amatőr benyomást kelt.

Felsorolások, táblázatok

Ez nagyon hasonló az előző lépéshez: bizonyos adatok szemléletesebbek felsorolásként vagy táblázatként. Ez az egyik gyenge pontom nekem is, ha visszanézi valaki a korábbi írásaimat itt az oldalon, látható, hogy hajlamos vagyok rosszul strukturált szösszeneteket összeszedni, címsorok is ritkán, de felsorolások, táblázatok szinte sohasem. Pedig az ilyesmi segíti az olvasót, hogy akár ugorjon is a szövegben, ne sorról sorra kelljen neki végigolvasnia, hogy mit tartalmaz a szöveg.

A [[Modelltranszformációk statikus analízise – TDK dolgozat|TDK dolgozatom]] érthetőségén sokat segített (nem mellesleg a terjedelmet is megdobta egy kissé :D), amikor a háromoldalas egybefüggő szöveget széttördeltem felsorolások segítségével. Rögtön jobban olvashatóvá vált a szöveg (már nem tudok példát mondani, az írás utolsó egy hete egy kissé összemosódik :)).

Példák

Hasonlóan fontos kérdés a példák használata. A jó példa egyszerű, hogy ne azzal menjen az idő, hogy a példa kontextusát megértsük, hanem azzal, hogy felfogjuk, ez hogyan kapcsolódik a máshol elhangzottakhoz. Ugyanakkor határozottan nem árt az sem, ha a példák kontextusa az írás során nagyjából ugyanaz marad.

A TDK dolgozatomban például a modelltranszformációkat Petri-hálók segítségével mutattam be, és később Petri-hálós példa segítségével lehetett volna teljesítmény-tesztelést végezni (ez eddig elmaradt, de legalább van mit írnom a diplomamunkámba 🙂 ). Természetesen hasznos lehet egyéb példák alkalmazása (például a kényszerkielégítési probléma bemutatásánál viszonylag kevéssé használható megközelítés a Petri-hálók használata), de lehetőség szerint érdemes minél inkább egy kontextusra hagyatkozni.

Írjuk meg előre a tartalomjegyzéket!

Legalább nagyjából. Nem kell kőbe vésni, amit leírunk, de azért tartsuk magunkat hozzá. Miért is jó ez? Mert ekkor végiggondoljuk, hogy miről fogunk írni, és milyen sorrendben. Itt lehet figyelembe venni a “függőségeket”, hiszen van olyan fejezet, aminek a megértéséhez egy másik fejezet elolvasása szükséges – ekkor nyilván ezt előrébb kell venni.

A fejezet címe nélkül is legyen érthető a fejezet tartalma!

Nagyon tipikus hibának tekinthető, hogy ami a fejezetcímben leírtak, azt a szövegben nem írják le még egyszer. Pedig érdemes. A fejezetcím valahogy nem a szöveg része, ezért amikor rájövök, hogy esetleg azt is el kell olvasnom (mármint még egyszer), kizökkentenek a szokásos olvasási ciklusaimból.Ezt a problémát nyomtatott szövegnél egyelőre relatíve ritkán látom, annál többször blogokban vagy levelezőlistákon. Ott más tényezők miatt még fontosabb lenne e szabály betartása. Gyűlölöm, amikor e-maileknél megkérdezi valaki, hogy a “Subject”-ben megjelölt tantárggyal kapcsolatban tud-e valaki valami információval szolgálni. Ennél még eggyel rosszabb, ha ezt programozási makróként $subject-tel jelöli. De ez most nem tartozik az írásom fő témájához, ezért be is fejezem.

Bekezdések

A kisebb részek megírásánál is oda kell figyelni. Az egyes bekezdések nagyjából egy-egy gondolatnak felelnek meg, így elég szerencsétlen a helyzet, ha ezek között nem megfelelő a kötés. Arra utal, hogy az egész témakör nincs rendesen körüljárva, illetve nem állt össze valami egységes rendszerbe az író fejében. Határozottan nem árt, ha egy bekezdésnek szerves folytatása az utána következő.

A jól összekötött bekezdések emiatt megfelelő irányba terelhetik az olvasó gondolatait olvasás közben, hiszen egy logikai láncot tükrözhet. Az összekötések kiválasztásában segítségünkre lehet a (akár matematikai) logika: ellentmondhatunk a korábbi bekezdésnek, következtethetünk belőle, esetleg kiegészíthetjük, és még sok minden egyebet tehetünk. Ha nagyon új gondolat következik, amit nem lehet a korábbiakhoz kapcsolni, akkor kell új fejezetet/szakaszt kezdeni, vagy a gondolatot máshova helyezni.

Alkalmazkodj a médium és a közönség stílusához!

Itt is bejön, hogy ismerd meg a közönséged, és kiegészül azzal, hogy tudd, hogy az adott médiumon mit szabad és mit nem. Egy blog például egy relatíve kötetlen műfaj: ott a legtöbb szabályt nem szükséges betartani, és a stílus is teljesen szabadon választott: ami neked tetszik, azt lehet.

Ugyanakkor egy házi feladat, dokumentáció vagy diplomamunka esetén a forma és a stílus nagyon kötött: nem engedheted meg magadnak a laza stílust vagy a poénkodást, és ezt rossz néven is veszik.

Ne ragaszkodj feltétlenül a szabályokhoz!

Természetesen előfordulhat olyan eset, amikor valamely szervezési szabály nem alkalmazható. Például házi feladatok esetén többnyire értelmetlen egy hosszú fejezetben bemutatni a területet, hiszen az értékelő tudja – ugyanakkor hasznos lehet leírni az eredeti feladatot, és az esetleges nem egyértelmű részek választott értelemzését (ami többé-kevésbé megfeleltethető a kontextus megadásának). Rövid írások esetén nem feltétlen érdemes a tartalomjegyzéket előre megírni, mert ilyenkor a tartalomjegyzék is gyakran felesleges lehet.

Ilyen esetekben nyugodtan hagyjuk figyelmen kívül a vonatkozó szabályt – de tudatosan! Tudjuk, hogy melyik szabályt szegjük meg, valamint azt is, hogy miért!

Egyéb apróságok

A legtöbb esetben valamilyen szinten kötött a forma (pl. oldalméret, betűméret, terjedelem), de ha mégsem, akkor is ésszel kell meghatározni az írás kinézetét. A túl széles sorok nehezen olvashatóak, de például monitoron a több hasáb is… A legtöbb normának megvannak a maguk okai, csak ezeket sehol sem oktatják, hogy mit érdemes, ill. hogyan. Érdemes utánanézni.

És a végére hagytam az adu ászt: helyesírás. Semmi nem képes úgy elrontani egy írott szöveget, mint a helyesírás. Az elgépelések, vesszőhibák, esetleg a súlyosabb nyelvtani hibák egytől egyig rontják a munka színvonalát. És a helyesírásellenőrzőkben nem szabad megbízni (és erre nem vonatkozik a szabály figyelmen kívül hagyásának lehetősége 🙂 ). Annak érdekében, hogy ez megfelelő legyen, lehetőleg többször el kell olvasni a szöveget, és az sem baj, ha más is elolvassa beadás előtt. Természetesen így is benn maradhatnak hibák, de nem mindegy, hogy mennyi. Ajánlom mindenki figyelmébe [[http://tompika.symbion.hu/2007/01/19/helyesiras/|Tompika vonatkozó blogbejegyzését]], illetve egész hasznos ötleteket szedtek össze az [[http://hu.opensuse.org/Seg%C3%ADts%C3%A9g:Ford%C3%ADt%C3%A1s#Helyes.C3.ADr.C3.A1s|OpenSuse honosítási]] oldalán.

Remélem, ez a lista hasznos így összeszedve, de ha bárki bármivel ki tudja egészíteni, esetleg azt mondja, hogy nincs igazam, szívesen meghallgatom. Mindenesetre ez most belőlem kikívánkozott.

Re: Van-e különbség (Magázás és tegezés)

Azok számára, akik látják, hogy a mai kultúra miben tér el a régebbi és a modern kultúra, biztosan találkoztak a magázódás és tegeződés kérdéseivel. Úgy érezhetjük, a kérdés fontos, de a pontos miértet nehéz megfogni.

Tompika írása is ezt a kérdést feszegeti. Mi a lényeges különbség a tegeződés és a magázódás között? Erre reflektálnék itt is most. Azért itt, mert a válaszom hosszabb lenne, mint az eredeti kérdés, amivel azért a dolog hozzászólás jellegét ki lehetne hangsúlyozni. És mielőtt belefognék a dologba, szeretném felhívni a figyelmet arra, hogy az alább olvasható dolgok az én személyes véleményemet tükrözik, és a forrásmegjelölés határozottan pontatlan lesz (nincsenek előttem a források, és amikor írom, akkor nem is vagyok netközelben, hogy ott esetleg utánanézzek); ha lesz valamikor időm rá, utánajárok pontosabban.

Azok számára, akik látják, hogy a mai kultúra miben tér el a régebbi és a modern kultúra, biztosan találkoztak a magázódás és tegeződés kérdéseivel. Úgy érezhetjük, a kérdés fontos, de a pontos miértet nehéz megfogni.

Tompika írása is ezt a kérdést feszegeti. Mi a lényeges különbség a tegeződés és a magázódás között? Erre reflektálnék itt is most. Azért itt, mert a válaszom hosszabb lenne, mint az eredeti kérdés, amivel azért a dolog hozzászólás jellegét ki lehetne hangsúlyozni. És mielőtt belefognék a dologba, szeretném felhívni a figyelmet arra, hogy az alább olvasható dolgok az én személyes véleményemet tükrözik, és a forrásmegjelölés határozottan pontatlan lesz (nincsenek előttem a források, és amikor írom, akkor nem is vagyok netközelben, hogy ott esetleg utánanézzek); ha lesz valamikor időm rá, utánajárok pontosabban.

Miután ez a viselkedésünket, szocializációnkat érintő kérdés, a teljesen műszaki jellegű megközelítés használhatatlan (kár, mert leginkább ehhez értek), de azért próbálom valamelyest precízen (talán a szükségesnél precízebben) körüljárni a kérdést. Állításom nagyjából az lenne, hogy a magázódás és tegeződés megkülönböztetése alapvetően csak és kizárólag kulturális kérdés.

Manapság társadalmunk arra az elvre épül, hogy mindenki egyenlő (vagy legalábbis egyenlőnek született). Természetesen ezt lehet orwelli értelemben szemlélni (az unalomig ismert “Minden állat egyenlő, de egyes állatok egyenlőbbek a többinél.”), de most nem ez a célom. Korábban ez viszont nem volt így: az ókori Rómában a patríciusok rendje magasabb rangú volt, mint a plebs, és a középkori világra jellemző volt, hogy a papság, illetve különösen a nemesség rangja magasabb volt.

A nemesség körében mondjuk elég eszelős dolgok voltak, példákért ajánlom az érdeklődők figyelmébe Ráth-Végh István gyűjteményes műveit az emberi butaságról (alighanem pontatlanul idézem a címet, de pl. a Butaság dícsérete rémlik). Ebben szerepeltek olyan dolgok, hogy XIV. Lajos francia király mindennapjaihoz tartozott, hogy bizonyos emberek körüllengték, és ezt a lehető legnagyobb kegyként élték meg.

Magyarországon is hasonló volt a helyzet – a különböző társadalmi szerepek különböző rangokat jelentettek, és ez magával vonta (és ezek egy része csak vér szerint terjedt), és erre a két világháború között egy hihetetlenül tekintélyelvű társadalmi szerveződés épült rá (pl. enyhén szólva nem volt jellemző ellentmondani a családfőnek). Ezt parodizálta egy rövid írás (sajnos a szerzőre nem emlékszem, sem a címre, de ha úgy adódik, kikeresem). A lényege, hogy egy relatíve magas rangú ember lezuhant a szakadékba, de egy ágban megkapaszkodott. Egy másik ember elkezdte felhúzni, és közben megszólította az áldozatot, de tévesen, azt hiszem, méltóságos urat. Erre az felháborodottan felkiáltott, hogy de hát én tekintetes úr vagyok (ha jól emlékszem), és elengedte az ágat, amelyben kapaszkodott. Szörnyet halt…

Persze nem állítom, hogy minden nemes/rangos ember így viselkedett. Voltak köztük tiszteletre méltó éppúgy, mint nagykutyák (akik az erősebb kutya jogán, vagy éppen csatatéri eredményre alapulva szerezték meg címüket), mint különféle ingyenélők. De a lényeg az egészben, hogy valamiképpen tisztelettel kellett megközelíteni ezeket az embereket. Ennek a tiszteletkifejezésnek egyik formája a magázás.

Manapság már mindenki egyenlő, a korábbi tekintélyelvűség megszűnőben van (szerény véleményem szerint túlságosan is, de ez most nem tartozik ide). Éppen ez adja aktualitását a kérdésnek, hogy mi értelme van megkülönböztetni a kétféle társalgási módot.

A szokásos érv, hogy a tisztelet megadásának módja a magázás, a maga módján helytálló, de erre nem ez az egyedül lehetséges mód, és a magázva is lehetünk tiszteletlenek (szokásos példa: menjen a fenébe). A helyzet az, hogy a szándékot máshogy is ki lehet fejezni. Hogy megszüntethető-e ez a forma? Természetesen igen.

Ahogy közismert, a mai angol nem használ magázást (pedig Nagy-Britanniában nagyon komoly hagyományai vannak még a nemességnek is). Valamelyik skandináv országban pedig a király mondta meg a nemeseinek, amikor túl bonyolult lett a címek használata, hogy fejezzük be, és inkább tegeződjenek. A történet kapcsán két érdekes gondolat van: egyrészt a király a hatalmánál fogva megmondhatta a többi embernek, hogy mi a társadalmi etikett, így ez eredményesnek volt tekinthető, ugyanakkor nem követelte meg mindenkitől: azt mondta, hogy ha valaki a régi, magázós formát használja, azt ő is magázza. Így egy-két generáció alatt a helyzet megoldódott, és a magázás tulajdonképpen megszűnt.

Következtetés: a magázás nem követelmény, könnyedén megkerülhető. De ez társadalmi összhangot igényel. A munkahelyi közösségek lassan megszüntetik, a fiatalok már a boltba lépve is tegezik a fiatal eladókat, illetve fordítva. Ez persze nem jelenti, hogy azt mondom, helyből szüntessük be a megkülönböztetést. Ahhoz túl sokan vannak, akik mást szoktak meg. De hosszabb távon igenis lehetséges út, hogy egyszerűsítjük az életünket a magázás elhagyásával. De ez a jövő zenéje, jelenleg együtt kell élni ezzel a kettősséggel, és szűk körben folytathatjuk a felszámolást – ha ehhez van kedvünk. A választás rajtunk áll…

TDK – egy nagy projekt utóélete

Az elmúlt időszak egyik fontos eseménye volt az, hogy részt vettem a kari TDK konferencián. Ez azzal járt, hogy az elmúlt néhány hónapban minden ismerősömet azzal kergettem az őrületbe, hogy legtöbbet erről beszéltem velük…

Most viszont az egész véget ért, ideje számot vetni, értékelni, ami elkészült, és a tanulságokat levonni.

Az elmúlt időszak egyik fontos eseménye volt az, hogy részt vettem a kari TDK konferencián. Ez azzal járt, hogy az elmúlt néhány hónapban minden ismerősömet azzal kergettem az őrületbe, hogy legtöbbet erről beszéltem velük…

Most viszont az egész véget ért, ideje számot vetni, értékelni, ami elkészült, és a tanulságokat levonni.

Számomra ez nagy projekt volt: 4 hónap kódolás, 1 hónap dolgozatírás, és mellé még ez-az kapcsolódott (pl. prezentáció készítése). A méretre jellemző még, hogy 5000 sor Java kódot írtam (ez nagyobb, mint bármilyen projekt, aminek a fejlesztésébe belefolytam, és a többi projektet ráadásul nem is egyedül kódoltam), valamint [intlink id=”609″ type=”post”]61 oldal dokumentációt[/intlink] (szintén rekorder méret), ráadásul angolul.

Sokféle új dolgot próbáltam ki menet közben (vagy használtam nagyobb méretben, mint korábban): Eclipse alapú fejlesztés, kényszerkielégítés (CSP/CLP) vagy éppen nagy dokumentumok szerkesztése LaTeXben. És persze Java rulez:D

Ami kicsit fájdalmasabb rész, az a tanulságok levonása: sajnos sikerült a szükségesnél kicsit nagyobbat markolni, aminek az lett a vége, hogy a befejezés kicsit rohanós lett. Ráadásul bejött a szokásos problémák egyike, mármint sikerült belefutni egyes implementációs/elvi szintű problémákba, amik megkerülésére vannak ötletek, de azért még időt igényel.

Ráadásul a negyedik-ötödik hónapra a kezdeti lelkesedés is elfogyott, így a morál csökkent. Valószínűleg könnyebb lenne fenntartani a lelkesedést, ha lenne még egy ekkora állat, aki hajlandó a projekttel foglalkozni – különösebb ellentételezés nélkül – azzal sajnos nem tudok szolgálni, munka viszont van bőven… Persze álmodozni lehet.

Ami még hasonlóan fontos kérdés, hogy hasznos volt-e a befektetett energia. Na, ez az, ami jó kérdés: rövid távon kifejezetten nehéz aprópénzre váltani, amit összeszedtem (pláne, hogy a cucc még nem is 100%-os), de hosszabb távon remélhetőleg hasznosabb lesz: felhasználható diplomamunkába, esetleg cikkekhez, doktoranduszi kutatási téma alapja lehet, stb.

De legalább az a veszély nem fenyeget, hogy a projekt hirtelen véget ér. A hiányokat lehet pótolni, illetve néhány újdonságot is lehet csinálni. De addig is irány a régi grind…

Ja, és megpróbálok majd gyakrabban írni az oldalra. 🙂 Tudom, ilyet már mondtam, de próbálkozni lehet. Mások újévkor fogadnak meg mindig olyan dolgot, amit nem tartanak meg, én ezért nem ígérek semmit senkinek – elég lesz magammal elszámolnom.

Update: amit elfelejtettem, az az, hogy szeretnék köszönetet mondani mindenkinek, aki bármilyen aprósággal hozzájárult a munkához, gondolok itt azokra is, akik nem szerepelnek a dokumentáció köszönetnyilvánításában. Tényleg mindenkinek nagyon hálás vagyok.