Bringing up a child is the process of how parents impose order over the fundamentally chaotic nature of their kid.
Archive for » június, 2011 «

Ma tudtuk meg, h a gyerek fiú lesz, azaz a választott név (Félix) tökéletes lesz.
Ez a múlt heti fotó.
Néha eszembe jutnak olyan fizikai kérdések, amikhez nincs meg a megfelelő hátterem, hogy megválaszoljam őket. Íme egy pár:
- A fény (illetve bármely hullám) energiája a foton/részecskesűrűségtől függ, vagy van valami energiaszintje a részecskéknek, ami meghatározza a szállított energia mértékét? (pl. terjedési irányra merőleges rezgés, vagy forgó mozgás). Hogyan adja át az energiát a fény az anyagnak? Ha az energiaszint egy létező dolog, lehet-e ezt változtatni a fénysugáron/hullámon?
- Tételezzük fel, hogy az idő illetve a tér nem lebontható a végtelenségig, van egy minimális méret, aminél kisebb egység gyakorlatilag nem létezik (elméletileg igen). Megmagyarázhatja-e ez a Heisenberg féle bizonytalansági elvet illetve a kvantumfizika egyes jelenségeit.
- Megmagyarázható-e az elektron kettős (hullám és részecske) természete azzal, hogy a részecske alapvetően egy párhuzamos dimenzióban létezik, és a mód, ahogy megfigyeljük, materializálja a mi világunkban?
A válaszokat kommentben kérném indoklással egy egy nyilatkoztattal arról, hogy mennyire vagytok biztosak az adott dologban.
Tegnap két extrém példán keresztül tudatosult bennem, hogy mennyire az önbizalomról szól a szakma. Nem csak arról, természetesen, de talán egy kicsit nagyobb a jelentősége, mint pl. a kézműves vagy szolgáltató iparban.
Az első példa: Van egy ismerősöm (igen, N, rólad írok) akinek a CV-jét javítgattuk tegnap. 7 éve dolgozik az IT supporton, olyan technológiákkal dolgozik, amiről én még nem is hallottam, és a CV ennek megfelelően elég meggyőző. Az önbizalma azonban nem üti meg azt a szintet, amit én természetesnek gondolnék ennyi tapasztalattal, így megragadt egy olyan állásban, ami nem díjazza megfelelően a képességeit.
A második példa: Olvastam egy cikket a Daily WTF-on, ahol egy szörnyű kódrészlet mellett ott szerepel ez a szöveg: ” those who knew better (i.e. management) sang plenty of praise, of both the PHP God, and his clean, well-commented code.”, azaz nyers fordításban: A vezetőség viszont egyaránt dícsérte a PHP Istent (a fent emlegetett kód alkotója) és annak tiszta, szépen kommentezett kódját.
Tehát, van egy hozzáértő de nem túl sikeres, és egy béna, de nagyra tartott szakmai dolgozó. Na, ez miért van így?
Képzeld el, hogy kijön a burkoló, újraburkolja a fürdőszobádat. Bemész és körülnézel, a csempék ferdék, a színek rondán vannak összeválogatva, és elfelejtett lyukat hagyni a szellőzőnek. Viszont a vizet nem ereszti át, tehát ebből a szempontból tökéletesen megfelel a követelményeknek.
Nyilvánvaló, hogy ezt nem hagynád annyiban, és meglenne a véleményed az illetőről. Viszont, képzeljük el, hogy vak vagy, és ugyanígy megnézed a dolgozó munkáját.. valamilyen módon meg tudsz győződni róla, hogy nem szivárog a víz (például úgy, hogy az alsó szomszéd nem jön fel), de azt már nem tudod megmondani, hogy rondák a színek, szóval örülsz, h kész a fürdőszoba és azt tudja, amit kell.
Ez az utóbbi a helyzet a szakmánkban. A vezetőség a legtöbb helyen nem ex informatikia dolgozókból áll, így max annyit tudnak megmondani a kódról, hogy “de szép színes betűk vannak benne”. Ők csak annyit néznek, hogy a weblap megjelenik, az adatbázisszerver működik, az appszerver kiszolgálja a kéréseket, azt már nem tudják igazából felmérni, hogy a táblázattal formázott, nem valid html mennyire nem karbantartható, nem tudják, hogy az adatbázisszervert nem meri senki három éve kikapcsolni, mert nem bíznak benne, hogy újra bekapcsolódik, sít. Itt jön az, hogy a barátságos, mindenre bólogató, gyorsan szállító programozót mindenki kedveli, a rendszergazdát, aki csendben végzi a dolgát, senki észre sem veszi, amíg valami el nem romlik, akkor pedig lekiabálják a haját..
Az Önbizalom Vására – a személyiség legalább annyit számít, mint a tudás.
A konstruktivitás világnapjának a jegyében nézzünk rá arra, hogy mi adhat nekünk okot az önbizalomra. A vezetőség elismerése? Nem, az nem szakmai elismerés. Nekem a következő dolgok adnak önbizalmat:
- Sokféle helyzetben voltam már, és még soha nem kellett feltennem a kezem, hogy: “Ezt nem lehet megoldani, és fogalmam sincs, hogy mit kellene most csinálnom”. Volt, hogy sokat szenvedtem a megoldással, de mindent sikerült megoldani vagy megkerülni.
- Tudom, hogy a szakma olyan széleskörű, hogy senki nem tudhat mindent, de ha bármire szükségem van, meg tudom tanulni, mert megvan a szakmai alapom hozzá.
- Kapok pozitív visszajelzéseket a munkámról olyan emberektől, akiket magamnál okosabbnak, szakmailag tapasztaltabbnak tartok.
Minden kollégámnak ajánlom az IT bármely területén, hogy nézzen magába néha, és gondolkozzon el, hogy helyén van-e az önértékelése? Akár csak a fenti három pontot és gondolja végig őket őszintén. Sokat lendítene a szakma színvonalán egy kis tisztánlátás..
Minap a Google Readerben alakult ki egy érdekes beszélgetés a kommentekben arról, hogy a Total Commander az most egy überjó tool, vagy egy szánalmas maradvány a DOS-os időkből. Nekem leginkább úgy tűnt (az első csoport tagjaként), hogy az utóbbi párt hívei nem ismerik a TC lehetőségeit. Ha azt nézzük, mi a jobb file másolásra mondjuk (amit többen felemlegettek), akkor nyilván személyes preferencia a dolog. Én nem elsősorban arra használom, igazából ha csak simán fájlt akarok másolni, akkor megnyomom a win-e kombinációt, és az így megnyitott explorerrel másolok drag&drop-pal.
Amire viszont használom, az már egy sokkal érdekesebb lista. Szerintem még tapasztalt TC felhasználók is találhatnak itt olyasmit, amit nem tudnak. (kommentben meg várom azt, ami egy értékes funkció, de én nem soroltam fel)
Megjelenítés: Meg a két tabos megjelenítés szerintem egy okos dolog. Kompakt, definiálja a munkafelületet, nem lesz tele a windowsunk egy rakás fölösleges ablakkal. Az “egy rakás” magyarázata: A TC tud tabos megjelenítést, azaz mindkét oldalon megnyithatunk több könyvtárat tabokon elhelyezve. Ezek a tabok kilépés-újra megnyitás után is megmaradnak. A két oldalt elválasztó oszlop elhúzható valamelyik oldalra, ha a másiknak több hangsúlyt szeretnénk adni, például nagyon hosszú fájlnevek megjelenítésénél. Mozgatás közben tooltipben meg is jelenik az aktuális elosztás mértéke, 100%-ban, jobb gombbal rákattintva pedig kapunk egy felugró menüt, ahogy beállíthatjuk a kívánt elosztás mértékét, pl. 50/50.
Fájl kiválasztások: A normális rákattintok és kiválasztom mellett a TC kínál más, hasznos kiválasztási lehetőségeket is. A szürke + megnyomásával tudunk select all-t csinálni, illetve ezzel tudunk olyat, h a *.jpg-t választjuk ki pl. A “*.zip;*.7z” formátummal többféle selectiont is megadhatunk. Természetesen az is működik, ha ezeket egymás után hajtjuk végre, illetve a név lehet mondjuk image* formátumú is. A szürke minusszal hasonló módon elvehetünk a kijelölésből, a szürke csillag invertálja a kijelölést, etc. Egészen más jellegű, de nagyon hasznos kijelölést csinál a shift-F2, azaz compare directories, ami a file-okat hasonlítja össze, és kijelöli mindkét oldalon azokat, amik vagy nem szerepelnek a másik oldalon, vagy más méretűek. A dátumot veszi alap ahhoz, hogy a változás esetén kitalálja, melyiket kell kijelölni. (Programozóként ez az utóbbi képessége nagyon hasznos!)
Kiválasztás kapcsán: Ha space-szel jelölünk ki egy könyvtárat, a TC kiszámolja a könyvtár méretét (lassssssan..) majd megjeleníti mellette. Ez hasznos lehet, amikor kíváncsiak vagyunk arra, hogy mi eszi meg a helyet a partíción. Annyival jobb talán, mint a windows hasonló funkciója, ami a könyvtár properties jobbgombos menüjében található, hogy látjuk a listában a méretet, és össze tudjuk hasonlítani egymással őket könnyedén.
Fájl másolás, mozgatás (F5, F6): Mint fent említettem, általában az explorert használom az 1xű, ad-hoc fájlműveletek végrehajtására. Van azonban egy olyan különleges képesség a TC-ben, ami miatt néha kifejezetten azt használom: a másolási queue. Amikor nagyon sok dolgot akarok átmásolni valahova, amik mondjuk jellemzően nem egy alkönyvtár tartalmai, vagy ilyesmi, akkor a másolást egy sorba rakom bele, ami gyakorlatilag sorban kerül feldolgozásra, aszerint, ahogy én hozzáadtam. Mivel a másolás nem párhuzamos, nincsenek problémáim az ide-oda ugráló winchester fejjel, fragmentált fájlokkal, etc. Ez a megoldás sokkal rugalmasabb, mint a kijelölés és másolás, mert gyakorlatilag a fájlrendszer bármely pontján dolgozhatok, nem kell egy könyvtárban maradnom a másolás végeztéig. Mellékesen megemlítem, hogy ilyeneket is tud a másoló/mozgató ablak, hogy ntfs jogosultságokat másoljon, szűrőket alkalmazzon (pl. csak egy típusú fájlt másoljon az összes kijelöltből), illetve beállítható, hogy hogyan reagáljon, ha mondjuk nem írható v olvasható egy fájl, system/hidden fájlok esetén, etc.
Új könyvtár létrehozása (F7): Ezt csak azért említem meg, mert sokkal kényelmesebbnek tartom az egy gombnyomásos könyvtár létrehozást, mint a sok kattintásost.
Helyben átnevezés (Shift-F6): Ez egy olyan feature, amit sokan nem ismernek. A windowsos megfelelője a két lassú kattintás a fájl nevén (azaz gyakorlatilag a kijelölöm majd még 1x rátakkintok a nevére, de ez nem duplakattintás); a lényege az, hogy ott helyben megjelenik egy editor, amivel át tudom nevezni a fájlt. Időnként hasznos. Edit: Többen rámutattak, h F2-vel ugyanezt kapod windowsban. Jó tudni!
Lister (F3): Egy nagyon hasznos, pehelysúlyú fájl megjelenítő. Nagyon gyors, emiatt ideális eszköz arra, hogy belenézzünk egy file tartalmába, amikor keresgélünk valamit. A tc saját oldaláról letölthetünk hozzá egy szintaxis kiemelőt is, ami szintén nagyon hasznos egy programozónak. Az egyik érdekessége, hogy alapból ismer pár hangfájl formátumot is, pl. mp3, így azokba is bele tudunk könnyen hallgatni, anélkül, hogy el kéne indítanunk mondjuk egy winampot (aminek aztán a playlistjét is szétvágja..) Van plugin a képfájlok hasonló kezelésére is.
Mélységi listázás (Ctrl-B): Amikor egy mély, bonyolult könyvtárszerkezet mélyén keresünk egy fájlt, vagy szeretnénk innen az összes .txt fájlt megnézni, jól jöhet a mélységi listázó tool. Ennek a lényege az, hogy az adott könyvtárból és annak összes alkönyvtárából (és azok összes alkönyvtárából, you get the picture..) kilistázza az összes fájlt egy egy mélységű listában, amit aztán átrendezhetünk, illetve úgyanúgy használhatunk, mint minden más könyvtárat. Ha egy fájlra állunk a kurzorral, és újra ctrl-b-t nyomunk, akkor visszaáll az eredeti megjelenítés, de odaugrik az adott fájlhoz, ami szintén hasznos lehet esetenként.
Fájl tartalom összehasonlítás: Ez egy vizuális, színes diff, ami megmutatja, hogy a két kijelölt fájl milyen módon tér el egymástól. Jellemzően szöveges fájlokra érdemes használni. Programozóknak külön hasznos, hogy a diff-en túl tud 2 way merge-öt is, ami egy nehezen feloldható SVN vagy CVS conflict esetén életet menthet.
FTP (Ctrl-F): Erre nem akarok túl sok szót vesztegetni, ftp kliens, ami a túloldalt is úgy jeleníti meg, mint egy könyvtárat, úgyhogy a másolás és hasonlók eléggé leegyszerűsödnek.
Csoportos átnevezés (Ctrl-M): Megint egy jól átgondolt és ügyesen megvalósított képesség, a csoportos átnevezés lehetőséget ad arra, hogy több fájl egyszerre átnevezzünk. Az eszköz ilyeneket tud, hogy az eredeti név kiegészítése vagy adott hosszra vágása, dátum, idő illetve egy konfigurálható számláló érték beillesztése a névbe, hasonló szépségek a kiterjesztéssel, keresés és kicserélés a névben, akár regexp alapon, kis-nagy betű megváltoztatása, és természetesen ezen beállítások elmentése/visszatöltése.
Letöltés URL-ről (Menü): A Commands menüben találhatjuk a Background Transfer Manager eszközt, ami a fent említett várakozó soros másolást/mozgatást is megoldja. Ennek egy extra képessége az, hogy képes egy url-ről letölteni a dolgokat, ami hasznos lehet, amikor egy valahol megosztott fájl listát szedünk le (de természetesen a html-t is leszedi gond nélkül, bár a hivatkozott fájlokat, mint a js meg css nem).
Fájl Szétvágás-Összeillesztés (Menü): Ha valamilyen okból szeretnénk szétvágni egy nagyobb file-t darabokra, (pl. mert túl nagy a nálunk lévő pendrive-hoz, vagy éppen adott méretű feltöltés engedélyezett egy weboldalra) akkor a Files menüben található Split File.. művelettel tehetjük ezt meg. Később az ugyanitt található Combine files segít nekünk összerakni újra. Ugyanitt vannak enkódoló és checksumot ellenőrző/generáló műveletek is. Ezeket én még soha nem használtam igazából..
Új fájl létrehozása (Shift-F4): Egy újabb egyszerű, kényelmi funkció. A fájl szerkesztése az F4 billentyű, ez azonban csak meglévő fájlokra alkalmazható (nyilván). A Shift-tel együtt használva létre is tud hozni új fájlt, ha olyan nevet adunk meg, ami még nem létezik. Ezután egyből meg is nyitja azt szöveges szerkesztésre.
Könyvtár megjegyzése (Ctrl-D, Add Current Dir): A fájlrendszerben mászkálva néha igényünk van rá, hogy egy másik pontra jussunk el gyorsan. Erre szolgál a könyvtár megjegyzése, amivel egy gyorslistába tudjuk elhelyezni az éppen látott könyvtárat. A Ctrl-D billentyűkombináció megjeleníti a már megjegyzett könyvtárak listáját, valami két műveletet: az aktuális könyvtár hozzáadását és a konfigurálást. Az új hozzáadásakor rákérdez a nevére, illetve arra is, hogy a célkönyvtárat (azaz a másik oldalon látható könyvtárat) is megjegyezze-e. Jelentősen fel tudja gyorsítani a navigációt olyankor, ha van néhány gyakran használt könyvtárunk.
Taszk automatizálás (Ctrl-D, Configure): A fenti gyorslista másik művelete a konfigurálás, ami egy sokkal ügyesebb tool, mint a legtöbben gondolnák. Egyrész, itt lehetőségünk nyílik arra, hogy a korábban felvett könyvtárakat átnevezzük, módosítsuk, vagy akár hierarchiába rendezzük, de ez nem minden. Alul láthatjuk a “Command” mezőben, hogy mi az a parancs, amit “kiad” a total commander, amikor kiválasztjuk ezt a megjegyzett könyvtárat. Ezt azonban szerkeszthetjük is, tetszőleges parancssori parancsot kiadhatunk vele, mint mondjuk “python”. Ez némiképpen korlátozott, mert sajnos nem veszi figyelembe a kijelölést, de néha hasznos lehet, amikor rendszeresen ismétlünk valami egyszerű taszkot, amit parancssorból lehet indítani. (pl. junit tesztek futtatása a projektre..)
Tömörített fájlok megnyitása (Ctrl-PgDn): Ha van egy zip fájlunk, sima enterrel kinyithatjuk, és innentől úgy fogjuk látni a TC-ben, mint egy könyvtárat a fájlrendszerben, amiben működnek a szokásos műveletek, mint másolás, törlés, etc. (ami természetesen ki-betömörítésként jelenik meg) A ctrl-pgdn annyival jobban működik, mint ez, hogy ha a zip fájl valamilyen más kiterjesztéssel jelenik meg (pl. jar, war, vagy éppen zap) akkor is bele tudunk menni, és nem a fájlrendszeri végrehajtással próbálkozik, mint a sima enternél.
Fájl (és tartalom) keresés (Alt-F7): Ez egy nagyon erős eszköz a hozzáértő kezekben. Mélységi keresés, amivel fájlnév vagy tartalom alapján kereshetünk fájlokat. Kezel Regexp alapú keresési feltételeket, tud keresni tömörített fájlokban is, konfigurálható a maximum mélység, a szöveg kis-nagybetű érzékenysége, encoding-ja, tudunk dátum, kor, méret, attribútumok alapján keresni, képes duplikált fájlokat megtalálni, valamint a kereséseket elmenteni későbbi használatra.
De ezzel még nem ér véget a képességek listája, ugyanis a találati lista maga is sok lehetőséget nyújt. Többek között, működik például a jobbgombos menü, meg tudjuk nyitni a fájlt gyorsnézetre, odaugorhatunk az adott fájlhoz, illetve a találati listát leküldhetjük a TC saját megjelenítő ablakába, ahol aztán ugyanúgy kezelhetjük őket, mint egy könyvtárat a fájlrendszerben: másolhatunk, törölhetünk, megnyithatunk, kijelölhetünk, ftp-zhetünk, etc.
Search As You Type (??): Az alapbeállítás talán alt-ctrl-type, én az alt-type-ot szoktam használni, de beállítható az is, hogy gépelésre automatikusan ez induljon el. Hasonlóan a mindenhol megszokott azonnali kereséshez, ahogy gépelünk, oda ugrik az adott keresésnek megfelelő fájl-hoz. A Ctrl-S billentyűkombinációval manuálisan is megnyithatjuk ezt a dialógust.
Parancssor (??): Nem emléxem, mi ennek az alapból bekonfigurált beállítása, én azt használom, hogy amit gépelek, az azonnal megjelenik a parancssorban. Az egyik leggyakrabban használt ilyen parancs a cmd, ami megnyit egy windows parancssori konzolt az adott könyvtárban, de gyakorlatilag úgy működik, mintha a windows run dialógusát (win-R) használnánk. Begépelés után ugyanúgy enterrel hajtjuk végre, mint amit a run-ba írunk.
Vágólap műveletek: Én nem használom, de esetenként hasznos lehet, ha az ember képes a kijelölt fájlok listáját kirakni a vágólapra, különböző extra információkkal, ld. alant:
ClientSide.java 1,661 05/06/2011 11:14 -a-- Orchestrator.java 478 05/04/2011 16:09 -a-- ServerSide.java 2,631 05/06/2011 11:10 -a--
Edit:Fájlnevek a parancssorba: Van pár billentyűkombináció, amivel a parancssorba tudjuk egyszerűen lemásolni a kijelölt fájlt: A Ctrl-J a nevét, a Ctrl-Shift-J a nevét és elérési útját másolja oda. (praktikus apróság: odarak egy space-t is, hogy ha parancssori paraméterként használod, azt ne kelljen kézzel beírni). Ha csak az elérési út kell, azaz az aktuális könyvtár, amiben állsz, akkor Ctrl-P.
Összefoglalva, mindenkinek ajánlom – még akkor is, ha azt gondolja, hogy a windows explorerrel minden egyszerűen megoldható – hogy töltse le a trial-t, és adjon neki egy kis időt. A fenti lista segíthet, hogy eligazodjon a felületen, és megtapasztalja a “pure awesomeness”-t, ami árad ebből a toolból. (Na jó, ezt csak azért mondtam, mert bírom a Kung-Fu Pandát
)
Alapvetően két problémám van a DI-t és AOP-t megvalósító framework-ökkel: Hozzá kell adni egy extra jar-t a classpathhoz, amitől sokkal combosabb lesz az egész alkalmazás, és ha esetleg webstartozol, akkor még sign-olni is kell, valamint van egy performance hit – A DI a startupnál, az AOP pedig folyamatosan jelentkezik.
Vannak ugyanakkor olyan problémák, amit így lehet a legszebben megoldani, például a logolás elválasztása a függvényeinktől, vagy egy Chain of Command pattern esetén a Command osztályok inicializálása és a chain-be rakása.
A minap, amikor a javas Annotation-ökről olvastam, belefutottam az általam korábban még soha (tudatosan) nem használt apt (Annotation Processing Tool) nevű eszközbe. Ahogy olvasgattam a képességeiről, felmerült bennem, hogy ezzel meg lehetne oldani azt, amit én statikus DI-nak és statikus AOP-nek hívok.
Az apt lényege, hogy – főként az annotációkat használva, de generálisan is – fordítás előtt átszalad az egész kódon, és meghív bizonyos, a felhasználó által specifikált feldolgozó egységeket, amik átalakíthatják a kódot, vagy hozzáadhatnak új osztályokat, etc. Gyakorlatilag beteszünk egy extra lépést a kód elkészítése és lefordítása közé.
Valami ilyesmi a statikus AOP lényege: Bár kód szinten elszeparáljuk a különböző dolgokat, például a logolást, és pusztán egy annotationnel jelöljük, hogy ez a metódus kellene, hogy logoljon (@LoggingMethod, pl.), a lefordított osztályokban már megjelenik az a kód. Hasonlóan működik a DI is.
Például: Össze akarom gyűjteni az összes Command osztályt egy List
Csinálok két annotációt és egy statikus függvényt, mondjuk registerCommand(Command c). A függvény feladata mindössze annyi, hogy a fenti listába belerakja a Command osztályt (és csinál vele minden egyebet, amit csak akarunk), az annotációk pedig kb. így néznek ki:
@Target(ElementType.TYPE)
public @interface CollectionMarker {
String collection();
String enabled() default true; // erről meg ejtek pár szót
}
@Target(ElementType.METHOD)
public @interface CollectionMethod {
String collection();
}
Az utóbbit elhelyezem a fenti függvényen, az előbbit pedig minden egyes Command osztályon, amit megírok.
Ezután a processzorok úgy működnek, hogy az egyik összegyűjt egy listát az összes CollectionMarkerrel megjelölt osztályról, a másik megjegyzi, hogy hol a CollectionMethod, majd a feldolgozás végén a megjegyzett osztályba berakunk egy static initializer blokkot, amibe belekerül egy csomó registerCommand(new AkarmilyenCommand());. S lőn, kész is van a chain.
Amit vesztünk ezzel, az
- A dinamikusság: Nem elég átírni egy XML-t és újraindítani az alkalmazást, mint a Spring-nél, ha változtatni akarunk valamit a dependencián. Mindenképpen újra kell fordítanunk az alkalmazást.
- Fordítási sebesség: A fordítás valamivel lassabb lesz
- Rugalmasság: Nyilvánvalóan van egy csomó olyan DI alkalmazás, amit nem lehet megoldani statikus módon.
Amit nyerünk vele:
- Némi performancia
- Átlátható kód extra frameworkok nélkül
- A Spring XML-hez viszonyítva: compile time ellenőrzés a dependenciákra
- Automatizált taszk végrehajtás (Az új command hozzáadása esetén csak az osztály kell létrehoznunk és ellátnunk a megfelelő annotációval, nem kell még különböző ponton beszúrni listákba)
Említettem fent, hogy az enabled attribútumról még ejtek pár szót: ha a gyűjtő egység figyeli ennek is az értékét, és nem gyűjti be azokat, ahol az enabled értéke false, akkor ennek a kapcsolónak az átbillentésével ki-be kapcsolhatjuk a gyűjtését. Akár még azt is megtehetjük, hogy a true-false helyett szinteket definiálunk, és bizonyos osztályokat csak debug módban használunk, productionben nem (ezeket, ha jól sejtem, akár ki is törölhetjük a feldolgozás során..).
Ez így magában még nem is annyira érdekes, de van még egy ennél is fontosabb szerepe: ha a fenti annotation definiciót (a Markert) megfejeljük egy @Inherited annotációval, akkor a leszármazottak is öröklik. Innentől elvileg minden leszármazottat begyűjtünk.. kivéve, ahol specifikusan kitesszük a markert a az enabled attribútum értékét false-ra állítva.
Akik az IDE integráció miatt aggódnak, azoknak sem kell igazából. Az Eclipse-t biztosan tudom, hogy támogatja ezt, a Netbeans és IDEA esetén pedig csak sejtem, hogy támogatják ezt a dolgot (vsz. 5 perc lenne kideríteni a google-lel).
Egyelőre csak a fejemben született meg ez a dolog, nem valósítottam meg, de a horizonton van. Ha lesz konkrétum, vsz kirakom valami elérhető helyre, mondjuk google code.
A Science fiction egyik visszatérő motívuma a nanobotok alkalmazása. Mi a lényeg: vannak egy a pici, szemmel láthatatlan méretű lények, amik molekuláris/sejt szinten képesek befolyásolni a környezetüket. Egy darab önmagában persze semmire sem elég, de képesek önmagukat sokszorosítani, és így a sok kicsi sokra megy elvet alkalmazva akár épületeket is fel tudnak építeni. Vagy éppen lebontani..
A technológiai problémákon túl (miniatürizálás, például) még van három nagyon fontos dolog, amit meg kell oldani hozzájuk:
- Nyersanyag: Építeni nem lehet a semmiből. Vagy anyag, vagy energia kell hozzá. És ez még nem is olyan 1xű, hogy hordjuk oda azokat az anyagokat, amik az adott építéshez kellenek (építés alatt értsük most ide a sejtek újraépítését is..) hiszen a nanobotok önsokszorozását is meg kell oldani valamiből. A mostani fizikai tudásunk szerint ez mind megoldható úgy, hogy az anyagot energiává, majd azt esetleg másféle anyaggá alakítjuk, de ez meg olyan problémákat vet fel, hogy maga az átalakítás is valószínűleg veszteséges lenne, ráadásul a fúziós folyamatok folyamán felszabaduló energiát valahogy kordában is kell tartani, mielőtt mássá alakítjuk. (képzeljük el, ahogy a nanobot javítja a fogunkat, és közben a felszabaduló hőtől elég a fejünk..) A dolog pozitív része persze az, hogy ha az anyagot át tudjuk alakítani, akkor tehetjük azt is, hogy az egész dolgot, amit fel akarunk építeni, először valami más, egyszerűen kezelhető anyagból építjük fel, majd amikor kész van, a megfelelő részeket olyan anyaggá alakítjuk ott helyben, amire szükség van.
- Energiaszükséglet: Munkavégzés akkor van, ha erre energiát használunk fel. A mozgatás, kommunikáció, a nanobotok működése mind energiát igényel. A fenti, anyagátalakításos technikával persze simán elhasználhatnánk abból az energiából is valamennyit, de nem biztos, hogy ez megoldható. Alternatív lehetőség a folyamatosan változó elektromágneses mező, amiből ki lehet nyerni az energiát ügyesen (tipikus példa a rádiótorony közelében megszólaló káposzta.. kis csúsztatással, persze). Egy – vagy több – ilyen generátort elhelyezve a környéken, a nanobotok energiához jutnának, anélkül, hogy az anyagot kellene azzá alakítani..
- Programozás, kommunikáció: Talán programozónak kell ahhoz lenni, hogy az ember megértse, mennyire nem egyszerű ez a probléma. Emergens viselkedést kell programozni, amivel a kis darabkák értelmes egésszé állnak össze, de van benne valami a fraktálokból is, ahogy a botok kialakítják és finomítják a formát, apróban és egyszerűben kezdve és eljutva a nagyig és bonyolultig. De ez még nem is elég, hiszen minden ilyennek az alapja az elhelyezkedés, azaz a botoknak (minden egyes darabnak) tisztában kell lenni a saját pozíciójával, mikromilliméter pontossággal. (na jó, a pontosság igazából a feladat jellegétől függ, felhőkarcolók esetén valószínűleg egy centiméteres pontosságú skála elég lenne, élő szervezet újraépítésénél viszont talán a mikromiliméter sem elég pontos..) Ha most gondolatban visszatérünk egy pillanatra a rezgő mágneses mezőt biztosító generátorainkhoz, akkor logikusnak tűnik az, hogy ezt a mágneses mezőt használhatjuk a lokáció kommunikálására is, akár úgy, hogy információt küldünk ki, akár úgy, hogy a generátorok frekvenciakülönbségéből és jelerősségéből számolja ki a bot, hogy hol van. Ha az első megoldást választjuk, akkor arra is van lehetőségünk, hogy konkrétabb inputot vigyünk a programozásba, pl. átbillentsük a botok állapotát valami másba.
Van amúgy ennek némi jelenlegi, kevésbé futurisztikus felhasználása. Képzeljük el azt, hogy egy anyag felszínét bevonjuk egy bizonyos pasztával, ami valójában mikroszkopikus gépecskékből áll – nem önsokszorosítók, és valójában nem is építeni tudnak, hanem valami mást. Például elfordulni.
Mire lenne ez jó? Például megoldható lenne, hogy olyan napelemet építsünk, ami mindig a lehető legnagyobb felületét fordítja a nap felé, ezáltal maximalizálva a felvett energiamennyiséget..
Kb. ennyit akartam csak leírni.
