6b0
<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.2" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Adam Nemeth's Blog</title>
	<link>http://www.adamnemeth.hu</link>
	<description>The personal website of Adam Nemeth</description>
	<pubDate>Sat, 26 Dec 2009 21:55:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.2</generator>
	<language>en</language>
			<item>
		<title>Architect dolgok - A tervezési fázis folyamata</title>
		<link>http://www.adamnemeth.hu/2009/12/26/architect-dolgok-a-tervezesi-fazis-folyamata/</link>
		<comments>http://www.adamnemeth.hu/2009/12/26/architect-dolgok-a-tervezesi-fazis-folyamata/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 21:52:58 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>szakma</category>
	<category>azinformatika</category>
	<category>architect</category>
	<category>casestudy</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/12/26/architect-dolgok-a-tervezesi-fazis-folyamata/</guid>
		<description><![CDATA[Kértétek, itt van. Alapvetően itt a modultervezésről lesz szó, a komplett rendszerek tervezése egyrészről picit más tészta, másrészt ebből a szempontból meglepően sokszor van megkötve a kezünk. Érdemes elolvasni a cikket is, de a kapcsolódó két esettanulmány a legértékesebb talán.
Ha a specifikáció megvan, hányszor adjuk oda tetszőleges, az implementációs környezetet valamelyest ismerő kollegának azt, már [...]]]></description>
			<content:encoded><![CDATA[
3700
<p><i>Kértétek, itt van. Alapvetően itt a modultervezésről lesz szó, a komplett rendszerek tervezése egyrészről picit más tészta, másrészt ebből a szempontból meglepően sokszor van megkötve a kezünk. Érdemes elolvasni a cikket is, de a kapcsolódó két esettanulmány a legértékesebb talán.</i></p>
<p>Ha a specifikáció megvan, hányszor adjuk oda tetszőleges, az implementációs környezetet valamelyest ismerő kollegának azt, már implementált (és titokban: tesztelt) terméket várva vissza cserébe? Mi sem természetesebb ennél, nem igaz? Az alkotói szabadság, a modulok amúgyis függetlenek, a srác amúgyis megbántódna, ha beleszólnának a dolgába&#8230; ugye?</p>
<p>Hát egy lúf.szt.</p>
<p>Alapvetően a kód azon részei, amit senki nem menedzsel (nem látja senki a készítőjén kívül), fekete dobozok. A fekete doboz pedig nem elhanyagolható valószinűséggel lehet rossz, hibás. Azt, hogy megvalósítja-e egyáltalán a specifkációt, csak akkor tudjuk, ha ténylegesen leteszteltük (amit általában szintén a programozóra bízunk..). <b>A specifikáció gyakorlatilag mindig interfészspecifikáció</b>: azt mondja meg, adott interfésze(ke)n keresztül milyennek tűnjön a program. Lehet ez UI, lehet ez adatbázis, de lehet épp másik programrész.</p>
<p><b>A tervezés elsődleges feladata, hogy részekre válassza a megoldandó feladatot, a részek közti összefüggéseket (interfészeket) pedig rögzítse.</b> Tehát eme fázis nem más, mint részekre bontás, és részspecifikálás.</p>
<p><a id="more-163"></a></p>
<p>Ezért van, hogy <i>a legtöbb kezdő programozótól egy masszát kapunk vissza</i>, ahol a felelősségeket hibásan veszik széjjel, ha egyáltalán. Hiába az MVC, template-jeik általában tartalmaznak logikát, controllereik az adatbázisokat szinte közvetlenül kezelik, az absztrakciók rendszerint gyengék (hányszor láttam natív SQL hívásokat kezdő programozóktól ORM modellek függvényeiként&#8230;)</p>
<p>Minél több komponens menedzselt (nem .net értelemben), annál kevesebb a hibalehetőség, annál kisebb része van potenciálisan elrontva a kódnak, igaz, exponenciálisan nő a tesztesetek száma is.</p>
<p>Mégvalamit vesz el a tervezés: <i>a felfedezés örömét.</i> Bár én már megtanultam örömemet lelni a mérnöki hozzáállásban, az UML-ábrák és tervezési, szervezési folyamatok közt érzem jól magam, nem pedig a kódolásban, ez azonban egyfajta egyensúlytalanságot is erdményez: a nagy szívások a kód elírásaiban, az alsóbb rétegek félreértésében vannak. (Persze kiveszem a részem a debuggolásban, de mégis más nézőpont.) Dijsktra viszont ezzel magyarázza gyakran tökéletes hiányát, hogy az örömöt veszi el a programozásból (na, nem neki).</p>
<h2>Az általános tervezési folyamat</h2>
<p><b>A tervezés mindig az adott rendszertől függ</b>: a frameworkök jó keretet nyújtanak, de nem ebből kell kiindulni, elvégre nem a frameworköt modellezed, hanem a valós folyamatot. Persze, ha a valós folyamatod jól leképezhető ezekre (végülis a Rational Analysis Classes se véletlenül jött létre), akkor hajrá: ettől még <b>igyekezz a két világban - az ügyfélében és a platforméban - párhuzamosan járni</b>.</p>
<p>(Ehhez persze érteni kell, az ügyfél mit akar és miért.)</p>
<p>A tervezési <b>folyamatod a csapatodtól és a rendszeredtől is függ</b>: jó, ha 1-2 projektet azonos csapattal tudsz csinálni, így nem kell minden alkalommal az új körülményekkel együtt új embereket is megismerni, így felhasználható a tapasztalat.</p>
<p>Egy picit ez olyan, mint a javascript-fordítók: <b>általánosítani csak az ismétlődések felismerésének árán lehet</b>. Persze ezt a tapasztalatot megszerezheted sok projekten keresztül is, de ezeknek adott területre kell fókuszálniuk (és épp ezért nem vállalok pl. beágyazott rendszereket).</p>
<p>A <href="http://www.thehackerchickblog.com/2008/05/solid-code-with-emergent-design-part-1.html#more">SOLID szabályok</a> közül (ha a <a href="http://www.thehackerchickblog.com/2008/05/solid-code-with-emergent-design-part-1.html#more">SOLID</a> kifejezés, így, nagybetűkkel nem ismerős, akkor azonnal <a href="http://www.thehackerchickblog.com/2008/05/solid-code-with-emergent-design-part-1.html#more">kattints ide</a>) én leginkább a felelősség-problémát tartom irányadónak, megoldja a decoupling jó részét: legtöbb problémád ugyanis a különböző rejtett függőségekből és feltételezésekből lesz. Ha <b>egy osztály pontosan egy feladatot lát el, azt viszont jól</b>, kevesebb az esélyed arra, hogy spagettiként tapadjanak össze a moduljaid (mégha a kód kinézete nem is spagetti, a tapadásuk jól hasonlít rá.)</p>
<p>(Persze, a többi szabály jól jön ha nagy rendszereket tervezel, meg iszonyatos modularitasra van szükség, bár a megvalósítás módjáról vitáznék sokszor.)</p>
<p><i>És akkor itt most álljunk meg egy pillanatra.</i></p>
<p><i>Ha arra kérnélek, rajzold le azt a munkafolyamatot, amit naponta csinálsz, le tudnád?</i></p>
<p><i>Ha arra kérnélek sorold fel a tipikusan ismétlődő dolgokat, fel tudnád?</i></p>
<p>Az informatika dolga kettős: </p>
<ul>
<li>az egyik a folyamatok felismerése, és azok formalizálása.<br />
Ha a napodnak ritmusa van, sok az egymást követő robotikus taszk egy projekten, pláne programozó vagy szoftvermérnök vagy, akkor valamit elrontasz. A robotikus taszkokra a számítógépek valók, meg a buta programozók. Szinte mindig létezik kiút, a generátorok, a windows makrók végső megoldásként mindig ott vannak.
</li>
<li>A másik az ismétlődések kiváltása: általánosítással, ciklusokkal, újraszervezéssel, DE: semmiképp sem kopipasztával. </li>
</ul>
<p>A legtöbb programozó, akivel eddig beszéltem, vagy dolgoztam, külső kényszerítő erő híján a specifikáción túl nem tervezett semmit: ha igen, az is leginkább adatbázis modell volt, meg levadászott a netről az adott feladat megoldására jónak tűnő csomagokat. Nem értek vele egyet. Ennek több oka van, részint az adatstruktúrák érzékenysége a rosszul definiált folyamatokra, részint az az egyszerű meglátás, hogy itt egy valós világot feleltetünk meg egy virtuálisnak, ez pedig nem írható le pusztán taxonómiai ( ~hierarchikus) alapon. A tervezés ennél több.</p>
<p><i>Annak eldöntése, hogy az informatika, mint mérnökszakma, megállja-e a helyét, nem pusztán az én tisztem. Szerintem igen, naponta eszerint a paradigma szerint dolgozom, ezt veszem alapul. Viszont azt is gondolom, ha valaki úgy gondolja, igen, az, akkor úgy is kell hozzáállnia munkájához, hogy ez megfeleljen ennek.</i></p>
<h2>Tervezés MVC (desktop és web) rendszerekben</h2>
<p>Általában <b>az MVC-sorrend az UI tervekkel indul</b>, mert ez az,amit az ügyfélnek meg lehet mutatni, illetve ez alapján lehet tőle kérdezni dolgokat. Ezekről majd lesz szó egy másik cikkben.</p>
<p>Valamelyest <b>párhuzamosan készülhetnek a folyamattervek</b> (algoritmustervek), amik az egyes akciókat írják le. Félreértés ne essék: a klasszikus információs rendszerek világában az akciók elég vékonykák.</p>
<p>Én csak <b>ezek után szoktam adattervezéssel foglalkozni, a legvégén</b>. Ennek két oka van, adattervezni egyrészt mindenki tud, gyakorlatilag ez az egyetlen tervábra amit viszontlátok a legtöbb kezdőtől, másrészt viszont ha rossz gondolatmeneted van a UI-ban, vagy a folyamatokban, sokkal könnyebben javítható, mint ha elnéztél egy use case-t és elrontottad az egész adatbázis-sémádat. </p>
<h2>Case study: A prototípus-alapú tervezés</h2>
<p>Az egyik projektben két dolog állt rendelkezésünkre: a grafikus felületek prototípusai (mock-upok), és néhány user story. Ezeket az ügyfél adta, az ő emberei készítették, ezért módosításuk nehézkes volt. Mint az én esetemben szinte mindig, weboldalról volt szó, az adatok egy része egy - szintén általunk fejlesztett - webservice szolgáltatásból, más része adatbázisból jött, és HTML-CSS-JS felületen kötött ki a végén, természetesen.</p>
<p>A prototípusok widgeteket írtak le, tehát egységes blokkokat, nem feltétlenül teljes oldalakat.</p>
<p>Elég sok <b>fejlesztői szerepet</b> készítettem, jóval többet, mint ahány fejlesztő adott volt rá, ezekre emlékszem:</p>
<ul>
<li>Volt a <i>layout engineer</i> (én), ez a prototípus képek alapján meghatározta az osztályneveket, az interakciós pontokat, a felépítés alapjait, ezeket bejelölte a prototípuson
<li>A <i>template engineer</i> ennek megfelelően készített egy HTML template-et, amely fals adatokkal is tudott dolgozni, viszont csak felépítményt tartalmazott
<li>A <i>CSS engineer</i> készítette el a megfelelő CSS-eket a már meglévő sablonhoz a jelölt prototípus alapján, viszont nem nyúlt bele az interakciókba. Az ő problémája volt jórészt az IE (amely az oldal más részei miatt eleve quirks-módba került sajnos)
<li>A <i>JS engineer</i> az AJAX - és mozgásinterakciókért volt felelős az interakciós pontok alapján
<li>A <i>service engineer</i> a megfelelő webszolgáltatásokat készítette elő
<li>A <i>PHP engineer</i> pedig az MVC-modellben a puszta PHP-t készítette el, adott GET/POST bemenetekre template-es vagy épp JSON-választ adva, a modellrétegekben megfelelően modellezett szolgáltatásokat használva.
</ul>
<p><a class="imagelink" href="http://www.adamnemeth.hu/wp-content/prototipus_alapu_tervezes_widget.png" title="Prototípus alapú tervezés, légbőlkapott, gyors ábra, bár már itt is látszik, az adatstruktúra nem lesz jó"><img id="image164" width=400 src="http://www.adamnemeth.hu/wp-content/prototipus_alapu_tervezes_widget.png" alt="Prototípus alapú tervezés, légbőlkapott, gyors ábra, bár már itt is látszik, az adatstruktúra nem lesz jó" /></a><br />
<i> Prototípus alapú tervezés, légbőlkapott, gyors ábra, bár már itt is látszik, az adatstruktúra nem lesz jó </i></p>
<p>A szép az volt, hogy ezzel 2-3 embernek rögtön lehetett adni szöszmötölnivalót, mihelyst rászántam azt a 2-3 órát, amely minimálisan szükséges volt rá, hogy ezeket a feladatokat megfelelően függetlenre elkészítsem.</p>
<p>A dolog egyik titka a <i>scaffolding</i>: először mindenkitől egy körülbelüli változatot kértem, amelyet a másiknak oda tud már adni, fals adatokkal: Egy konstansokkal kitöltött XML-t, egy megfelelő struktúrájú HTML-t, aztán következő körbe egy jól rendezett CSS-t, üres válaszokat visszaadó PHP-ket.</p>
<p>Ez főként akkor lehet működőképes, ha teli vagy kevéssé tapasztalt, vagy épp nagyon specializált fejlesztőkkel, esetleg egyetemistákkal, viszont abból tényleg van 2-3.</p>
<p>(BTW: az összes agilis  módszertan - eXtreme Programming, SCRUM -  feltételezi, hogy rendkívül tapasztalt emberekkel dolgozol, akik már évek óta az adott szakterületen vannak. Manapság, mikor minden projekt &#8220;agilis&#8221;, mégis honnan szednék össze ezt a tudást a fiatalok?)</p>
<h2>Case Study: Tervezés webes fogalmakkal</h2>
<p>Másik nagy kedvencünk a <a href="http://typo3.org">Typo3</a> rendszer volt. Ma már kissé idejétmúlt a legtöbb rendszerlib benne - főként CSS szempontjából - de tartalomkezelői tervezéshez nagy alapot nyújtott.</p>
<p>Az ilyen modellek alapja az <b>oldal</b> és a <b>tartalomelem</b>, vagy blokk. Az <i>asszociáció megfelel a linkeknek</i>, a rekordokat (=adatbázis-elemeket) pedig - typo3-as fogalmakkal - szintén oldalakhoz tudjuk rendelni. A leszármaztatás sajátos viszonyok miatt a sablonok master-jellegét tudta jól ábrázolni.</p>
<p>Az alábbi ábrán összegyűjtöttem néhány jelölést, bár így ezek együtt nem szoktak szerepelni. Két sztereotípiánk van, a jól felismerhető oldalon kívül  (PI = speciális blokk, a Plug-In rövidítése, a szürkék pedig a rekordok)</p>
<p><a class="imagelink" href="http://www.adamnemeth.hu/wp-content/typo3_webes_tervezes.png" title="Webes tervezés typo3-mal: típusok és kapcsolataik"><img id="image165" src="http://www.adamnemeth.hu/wp-content/typo3_webes_tervezes.png" alt="Webes tervezés typo3-mal: típusok és kapcsolataik" /></a><br />
<i> Webes tervezés typo3-mal: típusok és kapcsolataik </i></p>
<p>(Megkérdezheti valaki, hogy lehet megkülönböztetni az oldalt az UML note-októl: nos, az eredeti jelölésrendszer pre-UML, másfajta nyilai is voltak, így ez nem okozott akkor fejtörést, de figyeljük meg: a note-ok általában landscape, az oldalak pedig mindig portrait ábrázolást kapnak. Opcionálisan: máshova a szamárfület!)</p>
<p>Nyilván ez egy elég rendszerközeli modell volt, a Typo3 látványosan ábrázolta az oldalstruktúráinkat, mégha nem is mindig tökéletesen (a hierarchia volt pl. az egyetlen kapcsolatmodell, amit szépen kezelt, mi tudtunk ábrázolni mást is.), IDE-ként pedig jól kezelte a pluginblokkokat. Éveken át küzdöttünk viszont a hírek és hírkategóriák kezelésével, amely áthatotta az egész aktuális rendszert, így valójában a rendszer modellje nem illeszkedett jól az ügyfél igényeihez.</p>
<p><a class="imagelink" href="http://www.adamnemeth.hu/wp-content/typo3_be_backend.jpg" title="Prototípus alapú tervezés, légbőlkapott, gyors ábra, bár már itt is látszik, az adatstruktúra nem lesz jó"><img id="image166" width=400 src="http://www.adamnemeth.hu/wp-content/typo3_be_backend.jpg" alt="Typo3 adminfelület: én szerettem, az ügyfelek viszont néha hisztit kaptak tőle" /></a><br />
<i> Typo3 adminfelület: én szerettem, az ügyfelek viszont néha hisztit kaptak tőle (forrás: www.gcnpublishing.com)</i></p>
<p>A blokk és oldalak viszonya mai napig jól jön tartalommodellezésben, és más keretrendszerekben is jól alkalmazható, mégha máshogy is hívják.</p>

13cf
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/12/26/architect-dolgok-a-tervezesi-fazis-folyamata/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Boldog Karácsonyt</title>
		<link>http://www.adamnemeth.hu/2009/12/24/boldog-karacsonyt/</link>
		<comments>http://www.adamnemeth.hu/2009/12/24/boldog-karacsonyt/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 15:34:09 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>editorial</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/12/24/boldog-karacsonyt/</guid>
		<description><![CDATA[Avagy, lusta vagyok leveleket írni
A kedvenc karácsonyi dallamom a Carol of The Bells, másnéven Ukrainan Carol, abbol is Ray Conniff 1962-es feldolgozása:




Ugyanis olyasmit mond el, amit kevés karácsonyi dalban látok viszont.
Ez nem a meleg szobák éneke: ez a vidéké, a hideg télé, a bizonytalanságé, a félve kimondott reményé, a csakazértis Jézusé, amikor már csak kapaszkodóként [...]]]></description>
			<content:encoded><![CDATA[<p><i>Avagy, lusta vagyok leveleket írni</i></p>
<p>A kedvenc karácsonyi dallamom a Carol of The Bells, másnéven Ukrainan Carol, abbol is Ray Conniff 1962-es feldolgozása:</p>
<p><object width="425" height="344"><br />
<param name="movie" value="http://www.youtube.com/v/hJTr-FbZwU0&#038;hl=en_US&#038;fs=1&#038;"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/hJTr-FbZwU0&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Ugyanis olyasmit mond el, amit kevés karácsonyi dalban látok viszont.</p>
<p>Ez nem a meleg szobák éneke: ez a vidéké, a hideg télé, a bizonytalanságé, a félve kimondott reményé, a csakazértis Jézusé, amikor már csak kapaszkodóként is ezt énekled, mert bár Tudod, de bizonyos sose lehetsz benne teljes valójában földi léted során, mégha naponta tapasztalod is.</p>
<p>Ez az értékrendeddel ellentétes világban énekelt dallam, aminek része vagy, de mégse úgy jó itt amit jónak hívnak, ahogy szeretnéd, hogy jó legyen, a huszonegyedik századi mindennapok tapasztalata - és a huszadik századi Ukrajnáé is minden bizonnyal. De mégis, bár picit félve, kiállsz, és Jézusért kiáltasz.</p>
<p>Az <a href="http://en.wikipedia.org/wiki/Shchedryk">eredetileg kora tavaszi szerencsekívánó versikét</a> már abban az időben írta át <a href="http://en.wikipedia.org/wiki/Mykola_Leontovych">Leontovics</a> kórusművé, amikor Ukrajnában az újévet nem tavasszal, hanem <a href="http://en.wikipedia.org/wiki/Old_New_Year">január közepén</a> ünnepelték, megmagyarázva ezzel az <a href="http://en.wikipedia.org/wiki/Shchedryk">eredeti szöveg- és dallamvilág</a> különbözőségét. Keresztény kontextusra és angol szövegre csak a 30-as években ültette át  Peter Wilhousky.</p>
<p>Ezt a hangulatot adja vissza olyan jól a Connif-feldolgozás.</p>
<p>Az ukrán eredetit meg lehet hallgatni <a href="http://www.ffn.ub.es/~oleg/schedryk/mp3/Kiev%20Chamber%20Choir%20-%20Ukrainian%20Christmas%20-%20Shchedryk%20(Generosity).mp3">itt</a> (<a href="http://www.ffn.ub.es/~oleg/schedryk/shchedryk.html">Oleg Bulaschenko professzor oldaláról</a>).</p>
<p><a href="http://www.youtube.com/watch?v=hJTr-FbZwU0&#038;feature=PlayList&#038;p=7BAB403876753186&#038;index=0">Ebben a playlistben pedig</a> 3 kiváló feldolgozás szerepel egymás alatt, köztük egy cseh amatőr kvintett zseniális videója. </p>
<p>Mindenkinek Boldog Karácsonyt és - bár addig tervek szerint jelentkezünk - sikeres új évet!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/12/24/boldog-karacsonyt/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Architect dolgok - Use case-ek 2.: mindless cloning</title>
		<link>http://www.adamnemeth.hu/2009/12/12/architect-dolgok-use-case-ek-2-mindless-cloning/</link>
		<comments>http://www.adamnemeth.hu/2009/12/12/architect-dolgok-use-case-ek-2-mindless-cloning/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 14:30:02 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>szakma</category>
	<category>architect</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/12/12/architect-dolgok-use-case-ek-2-mindless-cloning/</guid>
		<description><![CDATA[Objektívan nézve a szavazásban ez nyert, így ez az első, de következőnek követi majd a tervezési folyamat. Kevésbé objektíven nézve a szavazószoftver az adblockereseknek jó eséllyel nem működött megfelelően (legalábbis kaptam erre utaló visszajelzéseket), de valami alapján dönteni kellett&#8230;
A requirement analysisnek (magyarul: megtudni, mit is kéne csinálni) a gyakorlatban két módja van:

az egyiket már félig-meddig [...]]]></description>
			<content:encoded><![CDATA[
1970
<blockquote><p>Objektívan nézve a szavazásban ez nyert, így ez az első, de következőnek követi majd a tervezési folyamat. Kevésbé objektíven nézve a szavazószoftver az adblockereseknek jó eséllyel nem működött megfelelően (legalábbis kaptam erre utaló visszajelzéseket), de valami alapján dönteni kellett&#8230;</p></blockquote>
<p>A requirement analysisnek (magyarul: megtudni, mit is kéne csinálni) a gyakorlatban két módja van:</p>
<ul>
<li>az egyiket már félig-meddig bemutattam, ez a <a href="http://www.adamnemeth.hu/2009/11/01/architect-dolgok-use-case-ek-modellek-and-the-rest/">use-case analízis</a>. Ez egy lassú, de biztos módszer.</li>
<li>A másik egy sajátos európai módszer: <b>a klónozás</b>. Ez általában nem is a programozókat érinti leginkább, hanem a megrendelőket: <i>&#8220;egy olyat akarok, mint ez&#8221;</i>.</li>
</ul>
<p>(Hívják ezt kreatív másolásnak is&#8230;)</p>
<p>Ez utóbbi módszer megrendelői oldaláról egyszer elmondtam az őszinte véleményemet. Azóta több ember nem hajlandó velem szóbaállni; olyan se, aki részt se vett benne, csak klónozott terméket felügyel. Így most csak azzal foglalkozunk, a fejlesztés műszaki vezetőjeként mit tehetsz a szituációval.</p>
<p>A klónozás ugyanis <b>egy dolgot nem mond meg: hogy mi miért van ott.</b> Pont a legfontosabbat hagyja ki, azt, hogy mikre van szükség. Nem jó általában dolgozni olyan ügyféllel, akit nem lehet túllendíteni ezen.</p>
<p>De mégis, mit lehet tenni?</p>
<p>Ha előre nem megy, kénytelenek vagyunk visszafele.</p>
<p><a id="more-161"></a></p>
<p><b>Az adatstruktúrákkal ne foglalkozz.</b> Nyilván pillanatok alatt le fog jönni az </p>
<ul>
<li>űrlapokból,</li>
<li>adatlapokból és </li>
<li>táblázatokból</li>
</ul>
<p>  úgyis, hogy milyen adatokra lesz szükséged.</p>
<p><a href="http://www.adamnemeth.hu/2009/11/28/architect-dolgok-modellezes-a-gyakorlatban/">Emlékezz:</a> <b>a modellek három dolgot ábrázolnak:</b></p>
<ul>
<li><b>elemeket,</b></li>
<li><b>viszonyokat,</b></li>
<li><b>és kölcsönhatásokat.</b></li>
</ul>
<p>Ezek közül az elemek felismerése a legkönnyebb, viszont épp ezért a legkevésbé hangsúlyos.</p>
<p>De mik a kölcsönhatások? Azaz: <i>mik lehettek a fő use case-ek?</i> Erre kell rájönnöd első körben.</p>
<p>Ebben segíthet a rendszer igéinek kigyűjtése (gombok, menük feliratai), de én mégis azt mondom, inkább a</p>
<ul>
<li>méretekkel és az</li>
<li>ismétlődések gyakoriságával</li>
<li>(az elhelyezkedéssel)</li>
</ul>
<p>foglalkozz. <b>Nyilván az a legfontosabb, ami a főoldalról (vagy a leggyakoribb képernyőfajtákon) elérhető, nagy, és középen van.</b></p>
<p><b>A végeredménynek olyannak kell lennie, mintha a másik végéről fogtad volna meg a requirement analízist.</b> Tehát pontosan olyannak amiről az <a href="http://www.adamnemeth.hu/2009/11/01/architect-dolgok-use-case-ek-modellek-and-the-rest/"> előző requirement postban szó volt</a>.</p>
<p>Ez azért van így, mert az az a formátum, amivel lehet dolgozni. Természetesen az ügyfél, pláne, ha informatikai végzettséggel rendelkezik, ezt el fogja bagatellizálni, de ne higgy neki! <i>Ha kell, részletekben, és folyamatában, részről-részre csináld</i>, de akkor a legfontosabbakat vedd előre, és győződj meg róla, az a legfontosabb, <b>építésbe ne kezdj requirementek nélkül!</b></p>
<p>A viszonyokra sokkal nehezebb lesz rájönnöd, persze, ehhez már szükséged lesz az adatstruktúrákra is, de sokszor sajnos rejtve maradnak, illetve csak a fejlesztés egy későbbi szakaszában jössz rá.</p>
<h2>Mi a baj a klónokkal?</h2>
<p>A probléma a klónprojektekkel, hogy a legtöbb megrendelő nem túl segítőkész ilyenkor: minek kérdezel, ott az eredeti (aztán persze konkrétan rámutatva egy-egy adott részre kiderül, mégsem.). </p>
<p>Megmondom az őszintét: a legtöbb klónprojektem bebukott, mert nem vagyok jó klónozó, és félreértésekkel volt teli a dolog. Ezért minden tapsot megérdemelnek azok, akiknek ez sikerül (a programozók, nem a kitalálók! Azok így néha megússzák házifeladatukat&#8230;)</p>
<p>Látszatra pl. a belső használatú szoftvereknél néha tényleg olcsóbb saját fejlesztéseket készíteni, mint megvenni a konkrét terméket, de ez sokszor csak látszat: hosszabb távon kijön, a szoftverházak által tömegével árusított szoftverek jelentősen olcsóbbak, jobbak.</p>
<p>A belső klónprojekteket elég nagy számban váltja le előbb-utóbb maga a klónozott szoftver vagy versenytársa, akkor is, ha a projekt amúgy sikeres volt, (több, mint) dupla árat fizetve a funkcionalitásért. Ehhez persze az kell, hogy az eredeti termék jól adaptálható legyen (de erre a jobbak figyelnek.)</p>
<p>(Meg persze a klónozás gyakran eltereli a figyelmet az aktuális szituációról, környezetről, de ez ismét megrendelői kritika lenne.)</p>
<h2>De ha ugyanolyan, az nem is jó?</h2>
<p>Ötleteket lopni nem szégyen. Volt, hogy egy interfész-tervem egy-az-egyben hasonlított egy már meglévő, asztali szoftverre. Ennek két oka lehet pozitív esetben:</p>
<ul>
<li>
<b>Úgy a jó!</b> Ha neked is az jön ki, hogy az ideális az adott helyzetben is az, amit láttál (pl. egy ikon elhelyezkedése, mérete, szimbólumkészlete), akkor egyszerűen úgy jó és kész.<br />
A baj az, hogy a végiggondolást a már meglévő minta sokszor akadályozza, nota bene, ezzel izzadós munkát spórolnak a concept-emberek, és néha áldásnak, nem pedig akadálynak tekintik.
</li>
<li>
<b>Így szokta meg a célközönség</b>: általában a honlapokon a keresők a jobb felső sarokban vannak. Ez nem az egyetlen lehetséges helyük (és tudom, a honlap jelenlegi reinkarnációban nem is ott van nálam), viszont itt szokták meg az emberek.<br />
Így alakult ki a jelenlegi, néha leválthatatlannak tűnő asztal-ablak metaforarendszerünk is.
</li>
</ul>
<p>Végül egy jótanács azoknak, akik mégis enélkül a lépés nélkül vágnának bele:<br />
<i><br />
Előbb-utóbb kialakul benned a specifikáció, de ez leginkább olyan, mint vakegér a labirintusban: ahelyett, hogy GPS-szerűen megmondanák, mikor merre kell fordulni, ehelyett folyamatosan mész valamerre, falakba ütközve pedig visszafordulsz. Az meg, hogy van egy kész szoftver, amit másolsz, legfeljebb abban segít, hogy nem ködből vannak a labirintus falai.</p>
<p></i>
</p>

1df6
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/12/12/architect-dolgok-use-case-ek-2-mindless-cloning/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Merre tovább?</title>
		<link>http://www.adamnemeth.hu/2009/12/05/merre-tovabb/</link>
		<comments>http://www.adamnemeth.hu/2009/12/05/merre-tovabb/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 15:32:34 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>editorial</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/12/05/merre-tovabb/</guid>
		<description><![CDATA[Az architect dolgok sorozatra több megoldásom is lett volna a héten, de sajnos időközben ideiglenesen lekorlátozódtak az energiáim.
Szeretnék azonban némi interakciót is, nem kell komment, kéne egyet szavazni. Remélem, jövő héten már jobban leszek, és akkor tudok tartalmat is mögérakni&#8230;
Témajavaslatok:

Architect dolgok - mindless cloning, avagy, hogyan kell mérnöki módon kezelni azt, ha a specifikáció annyi [...]]]></description>
			<content:encoded><![CDATA[<p>Az architect dolgok sorozatra több megoldásom is lett volna a héten, de sajnos időközben ideiglenesen lekorlátozódtak az energiáim.</p>
<p>Szeretnék azonban némi interakciót is, nem kell komment, kéne egyet szavazni. Remélem, jövő héten már jobban leszek, és akkor tudok tartalmat is mögérakni&#8230;</p>
<p>Témajavaslatok:</p>
<ul>
<li>Architect dolgok - mindless cloning, avagy, hogyan kell mérnöki módon kezelni azt, ha a specifikáció annyi &#8220;ugyanilyet szeretnék mint ez?&#8221;
<li>Architect dolgok - Közösségi webalkalmazás építése PHP alapokon, szépen - van elfekvőben egy jó minőségű kis symfonys kódom, közösségi (twitter,facebook, iwiw) appnak, nem túl sok, de sokmindent be lehet rajta mutatni, és senki felé nem licencköteles
<li>Architect dolgok - tervezési folyamatok - tovább folytatva az általános részt, rendszertervezési gyakorlat
<li>Egyéb - akkor kommentelj <img src='http://www.adamnemeth.hu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</ul>
<p>A tarsolyban van még egy félkész játék JS-ben, opensocial okosságok, webes modultervezés (ami nem azonos a rendszertervvel), de ezek azok, amik előránthatóak könnyedén.</p>
<p>Nos, mit gondoltok?</p>
<p>(Alant egy <a href="http://poll-r.hu/poll/1016329">poll-r</a> szavazás, ha nem jelenne meg rss-ben)</p>
<p><EMBED SRC="http://poll-r.hu/poll/1016329/flash_export" flashVars="id=1016329&#038;hd=true&#038;hi=false" WIDTH="280" HEIGHT="600" NAME="poller_export" ID="poller_export_1016329" WMODE="transparent" TYPE="application/x-shockwave-flash" SWLIVECONNECT="true" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></p>
<p>Eddig megjelent architect cikkek:</p>
<ul>
<li><a href="http://www.adamnemeth.hu/2009/11/28/architect-dolgok-modellezes-a-gyakorlat
<li><a href="http://www.adamnemeth.hu/2009/11/28/architect-dolgok-modellezes-a-gyakorlatban/" rel="bookmark" title="Permanent Link: Architect dolgok - modellezés a gyakorlatban">Architect dolgok - modellezés a gyakorlatban</a></li>
<li><a href="http://www.adamnemeth.hu/2009/11/21/architect-dolgok-agilis-projekt/" rel="bookmark" title="Permanent Link: Architect dolgok - agilis projekt">Architect dolgok - agilis projekt</a></li>
<li><a href="http://www.adamnemeth.hu/2009/11/14/architect-dolgok-informatika-elmeletben-es-gyakorlatban/" rel="bookmark" title="Permanent Link: Architect dolgok - informatika elméletben és gyakorlatban">Architect dolgok - informatika elméletben és gyakorlatban</a></li>
<li><a href="http://www.adamnemeth.hu/2009/11/01/architect-dolgok-use-case-ek-modellek-and-the-rest/" rel="bookmark" title="Permanent Link: Architect dolgok - Use case-ek, modellek, követelmények">Architect dolgok - Use case-ek, modellek, követelmények</a></li>
<li><a href="http://www.adamnemeth.hu/2009/10/21/architect-dolgok-ajanlo-javascript-in-the-enterprise/" rel="bookmark" title="Permanent Link: Architect dolgok - Ajánló: Javascript in the enterprise">Architect dolgok - Ajánló: Javascript in the enterprise</a></li>
<li><a href="http://www.adamnemeth.hu/2009/10/19/architect-dolgok-framework-napok-alatt/" rel="bookmark" title="Permanent Link: Architect dolgok - Framework napok alatt">Architect dolgok - Framework napok alatt</a></li>
<li><a href="http://www.adamnemeth.hu/2009/10/02/architect-dolgok-logika-es-struktura/" rel="bookmark" title="Permanent Link: Architect dolgok - Logika és Struktúra">Architect dolgok - Logika és Struktúra</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/12/05/merre-tovabb/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>A hiba az Ön (de nem mindenki) Google Readerében van (ha spamet látsz, klikk)</title>
		<link>http://www.adamnemeth.hu/2009/11/29/a-hiba-az-on-de-nem-mindenki-google-readereben-van-ha-spamet-latsz-klikk/</link>
		<comments>http://www.adamnemeth.hu/2009/11/29/a-hiba-az-on-de-nem-mindenki-google-readereben-van-ha-spamet-latsz-klikk/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 13:58:50 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>editorial</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/11/29/a-hiba-az-on-de-nem-mindenki-google-readereben-van-ha-spamet-latsz-klikk/</guid>
		<description><![CDATA[Sziasztok,
Sorozatunkat megszakítva, mert már annyian cseszegettek miatta:
1) A szájt fájlrendszere érintetlen
2) A szájt adatbázisához most nem tudok hozzáférni (Márk, hogy lehet?), de az is érintetlennek tűnik
3) Ha a feedURL-t betöltöd egy böngészőbe, helyes
4) Ha nem google readert használsz, helyes
5) A google readeres ismerőseim átlag felénél jó a szájt, másik felénél spam van.
Szóval nem tudom, mi [...]]]></description>
			<content:encoded><![CDATA[<p>Sziasztok,</p>
<p>Sorozatunkat megszakítva, mert már annyian cseszegettek miatta:<br />
1) A szájt fájlrendszere érintetlen<br />
2) A szájt adatbázisához most nem tudok hozzáférni (Márk, hogy lehet?), de az is érintetlennek tűnik<br />
3) Ha a feedURL-t betöltöd egy böngészőbe, helyes<br />
4) Ha nem google readert használsz, helyes<br />
5) A google readeres ismerőseim átlag felénél jó a szájt, másik felénél spam van.</p>
<p>Szóval nem tudom, mi a baja. Alternatív RSS-nek itt van <a href="http://bergengocia.net/adamnemeth.php">Gazs feedje</a> (kösz, Gazs!), illetve egy <a href="http://pipes.yahoo.com/pipes/pipe.run?_id=aeb108ebe18f86db1dc9f2cac109bfb9&#038;_render=rss">Yahoo Pipes feed</a>, ezek mennek a birodalmi readerrel is.</p>
<p>Persze, frissítenem kéne wordpress-t, ez nem feltétlen pusztán lustaság okán nem történik meg&#8230;</p>
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/11/29/a-hiba-az-on-de-nem-mindenki-google-readereben-van-ha-spamet-latsz-klikk/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Architect dolgok - modellezés a gyakorlatban</title>
		<link>http://www.adamnemeth.hu/2009/11/28/architect-dolgok-modellezes-a-gyakorlatban/</link>
		<comments>http://www.adamnemeth.hu/2009/11/28/architect-dolgok-modellezes-a-gyakorlatban/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 13:05:35 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>szakma</category>
	<category>azinformatika</category>
	<category>architect</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/11/28/architect-dolgok-modellezes-a-gyakorlatban/</guid>
		<description><![CDATA[
208
Ez már majdnem kód&#8230; bocsi, kitaláltam valamit, kell a gondolatmenet felépítéséhez ennek az ismerete&#8230; Meg aztán remélem, haszonnal forgatjátok, megismerkedtek egy olyan eszközzel, amiről eddig sokszor csak előítéleteket hallottatok&#8230;

A modellek sokszor folyamatokat írnak le, nem struktúrákat (Beiratkozás az egyetemen, forrás: Agilemodeling.com)
Az előző postban elejtettem, hogy &#8220;a diagramjaim rendszerint rövidtávra készülnek&#8221;. Ez egy nagyon fontos mondat, [...]
2f
]]></description>
			<content:encoded><![CDATA[
33c2
<p><i>Ez már majdnem kód&#8230; bocsi, kitaláltam valamit, kell a gondolatmenet felépítéséhez ennek az ismerete&#8230; Meg aztán remélem, haszonnal forgatjátok, megismerkedtek egy olyan eszközzel, amiről eddig sokszor csak előítéleteket hallottatok&#8230;</i></p>
<p><img src="http://www.agilemodeling.com/images/models/sequenceDiagramSystemLevel.JPG" width="400"/></p>
<p><i>A modellek sokszor folyamatokat írnak le, nem struktúrákat (Beiratkozás az egyetemen, forrás: <a href="http://www.agilemodeling.com/artifacts/sequenceDiagram.htm">Agilemodeling.com</a>)</i></p>
<p>Az <a href="http://www.adamnemeth.hu/2009/11/21/architect-dolgok-agilis-projekt/">előző postban</a> elejtettem, hogy <i>&#8220;a diagramjaim rendszerint rövidtávra készülnek&#8221;</i>. Ez egy nagyon fontos mondat, szeretnék rajt elidőzni.</p>
<p>A modellezésről a legtöbb embernek a <a href="http://en.wikipedia.org/wiki/Model-driven_architecture">Model-Driven Development</a> jut eszébe, ami egy szép elméleti elképzelés, a gyakorlatban viszont nehéz kivitelezni, bár vannak működő rendszerek, főleg bankoknál.</p>
<p>Pedig a modellezés fontos része a programozásnak, enélkül nem lehet átlátni a szoftvereket, nemhogy minőségi programot írni.</p>
<p><a id="more-156"></a></p>
<h2>A modellezés definíciója</h2>
<p>Két definícióm van. Az egyik, amit az egyetemen tanultunk:</p>
<blockquote><p>A modell a világ adott szempontú nézete, amely a szempont szerint lényeges dolgokat kiemeli, a lényegteleneket elrejti.
</p></blockquote>
<p>A másik a sajátom:</p>
<blockquote><p>
A modell a [rendszer] dolg[aina]k [tulajdonságai és] összefüggései [és összefüggéseinek tulajdonságai] [adott szempontok szerint] [ábrázolva]
</p></blockquote>
<p>([] - opcionális)</p>
<h2>Tévhitek a modellezésről</h2>
<ul>
<li><b>Nem igaz, hogy az egész rendszert modellezni kell.</b><br />
Általában csak egy kis, de fontos / bonyolult / más módon megbeszélést igénylő részét szoktuk</p>
</li>
<li><b>Nem igaz, hogy minden modellt folyamatosan frissiteni kell.</b><br />
Alapvetően <b>háromféle modell</b> van:</p>
<ul>
<li>Az <b>egyszerhasználatos</b>, ezt teljesen logikus okokból nem frissítjük nagyon.
</li>
<li>Az <b>architekturális</b>, vagy egyéb nagy, szükséges és fontos modell, amik <i>ritkán változnak</i>, akkor viszont napra készen kell őket tartani. Végül pedig:
</li>
<li>A <b>rendszer részét képező modell</b>, azaz, amikor az adott modell adatfájlját beolvassa a program, és aszerint működik (akár konvertáláson keresztül) Ez pedig definició szerint friss.
</ul>
</li>
<li><b>A modell nem feltétlenül létezik ábrázolva</b><br />
ha az a modelled a Mariskáról, hogy nagyok a csöcsei, formás a popsija, és jól tud ezekkel végigvonulni az irodán (elnézést a hölgyektől), világos, hogy ebből a szempontból lényegtelen, hogy tök jól tud németül, ugyanakkor az is, hogy ez a mentális kép inkább a fejedben, semmint ábrázolva jelenik meg.</p>
</li>
<li><b>A modell nem feltétlenül diagram<br />
</b><br />
Sőt, az UML-nek is vannak olyan részei, amik szöveges leírásként fogalmazzák meg a problémát! De a modell lehet adatfájl is (doc, txt, 3ds, de a kedvencem: <a href="http://yaml.org">YAML</a>) -  Sokféle módon lehet ábrázolni egy rendszer összefüggéseit, lényeges tulajdonságait</p>
</li>
<li><b>A modell nem feltétlenül UML nyelvű<br />
</b><br />
Bár az UML készlete bőséges, és helyenként jó is (máshol szódával elmegy persze), bármikor előfordulhat olyan probléma, ahol nem áll kézre épp, vagy egy más rendszer jobban megfelel.<br />
Az egyik projektemnél például sokat használtam az <a href="http://aam.hu">AAM</a>-től lesett folyamatábrák egy saját származékát, (minden botrányuk ellenére sok tehetséges, fiatal informatikust ismerek ott, akik komolyan veszik a szakmájukat.), nem teszem ki ide<br />
(szellemi tulajdonuk), de a trükköt elárulom: nem csupán a feladat-, de a vele párhuzamosan folyó adatfolyamat is fontos.
</li>
</ul>
<h2>Mire jó a modell?</h2>
<p><b>A modell elsősorban a kommunikáció segédeszköze.</b></p>
<p>Attól jó, hogy:</p>
<ul>
<li><b>Félexplicit</b><br/>Már nem csinálhatsz benne bámit, mintha simán írnál, de még nem program</li>
<li><b>Olcsó</b><br/>Nem kerül annyiba, mint a tényleges program (Nem értek egyet azzal, hogy egy jó UML ábra elkészítése annyi idő mint a vele ekvivalens programé, vagy én programozok baromi lassan.)</li>
<li><b>Átlátható</b><br/>Persze, csak ha jól csinálod</li>
</ul>
<p>Mivel ez egy kommunikációs eszköz, ezért <b>három helye van tipikusan:</b></p>
<ul>
<li><b>Az ügyfél és közted</b></li>
<li><b>Egymás között (programozók)</b></li>
<li><b>Magadban</b></li>
</ul>
<p>Igazából <b>ha valamit nem értesz, az ügyfél nem ért, vagy a kollega nem ért, akkor nem szabadna kódhoz nyúlnod, akkor kellene használnod a modellezést</b>. Ezért kéne a modellezési eszközöket és szabályokat ugyanúgy ismerni, mint a programnyelveket.</p>
<h2>Modellezés a mindennapi életben</h2>
<p>Ha vitás kérdés van, évek óta berántom a csapatot tábla elé, ez mostani munkahelyemen se változott sokat</p>
<p>A modellezés tökéletesen alkalmas arra, hogy ezeket a vitákat tisztázzuk (nem feltétlenül pusztán hierarchikus alapon, &#8220;merénaszontam&#8221;), illetve annak ellenőrzésére, hogy tartja-e magát mindenki ehhez (az adott szempontú) közös megegyezéshez.</p>
<p>A kódolás végeztével ezzel a modellel lehet ellenőrizni, jól csináltuk-e azt, amit csináltunk, többet viszont nem használjuk, max mellérakjuk a modulnak valahogy, hogy ha kell, itt van egy ábra, ki tudja még, mire lesz jó.</p>
<p>Az ilyen ábrák elsősorban táblára készülnek. Ezért van a legtöbb informatikai cégnél jó sok nagy fehér filctábla. Ha ez nincs, akkor van flipchart, de az pici, és kényelmetlen is.</p>
<div style="border: 1px solid #ccc;color:#333;font-style:italic;margin-left:1em;margin-right:1em;margin-top:2em;margin-bottom:2em;">
<h3>Modellezés tábla nélkül</h3>
<p>Végső megoldásnak elárulok egy trükköt: ha ezek egyikére sincs pénz, lehetőség, keressetek egy szabad falfelületet, legalább másfél-két négyzetmétert, és oda ne tegyetek semmit, ami nem eltolható bármikor (asztal, szekrény, stb). Egy adag flipchart papir (vagy felhasználatlan buliplakátok, mint a jó-helynél anno), és párszáz forintért beszerezhető <a href="http://www.prittworld.com/hu/products/fixing/glue-pads/multi-tack.html">bluetack vagy gyurmaragasztó</a> (az leszedhető) is megteszi, csak ragasszátok egymás mellé a lapokat, ha pedig váltani kell, leszeditek az egyiket a gyurmaragasztóról, fel a másikat. Magát a bluetack-ot óvatosan szedjétek, különben vakolattal jön (tapasztalat)!
</div>
<p>Sokan max befényképezik ezt az ábrát, úgy küldik szét, vagy akár csak ezt se, annyira egyszerhasználatos.</p>
<p>Szerintem viszont készítsd el rendesen, gép előtt. Ilyenkor mindig figyelek arra, a megfelelő szavakat, a megfelelő vonalakat, megfelelő sztereotípiákat használjam, mindent oda, úgy kössek be ahogyan kell, a felesleges részeket kihagyjam, ha rájövök, több nézőpont egyesül az ábrán, esetleg szétszedjem azt.</p>
<p>Fontos ugyanis, hogy ne egy körülbelüli massza alapján dolgozzunk. A tapasztalat az, hogy a programozók ezeket az ábrákat utána kinyomtatják, és ott van előttük, miközbe dolgoznak (akkor is, ha ezt nem kérem külön). Amikor jössz átnézni a kódot, akkor is lehet hivatkozni a kezedben lévő lapra, hogy hol vannak az egyes modulok, hol vannak az összekötések. Sokkal tisztább ez így.</p>
<p>Ez másfél-két órát vesz el maximum ábránként az életemből: az érvényességük általában 1-2 hét, ez alatt bőven megtermelik ezt, mivel nem a kétértelműségeken vitatkozunk naponta fél órát egy-egy apróbb félreértés miatt.</p>
<p>Mi ezeknek az ábráknak a sorsa? Van egy megbeszélés, felskicceljük a táblára, én megrajzolom gépen, körbeküldöm, ez alapján leimplementálunk egy modult, vagy épp megváltoztatjuk azt, ellenőrizzük a végén, hogy jól van-e, de alapvetően egyetlen iterációra, vagy még annyira sem érvényesek, tehát tényleg 1-2 hét, egy-egy hónap az, amíg aktuálisnak nevezhetőek. Ezzel nincs semmi baj, ez alatt az idő alatt is rengeteget segítenek, sok félreértéstől kimélnek meg minket.</p>
<p>Persze vannak állandóbb ábrák, ilyenek az architektúra-leírások, a keretrendszerek ábrái, a fizikai topológia, adatbázis-séma. Ezeket figyelnünk kell, karban kell tartani, és emiatt lehetőleg minél kevesebb ilyen ábránk legyen, azok viszont legyenek jók, és a ciklusok végén naprakészek.</p>
<h2>Rendszerszintű modellek</h2>
<div style="margin: auto; padding:10px; width:400px; border: 1px solid #ccc">
<img id="image157" src="http://www.adamnemeth.hu/wp-content/person_yaml_model1.png" alt="Ember modellje YAML-ben" /><br />
<i>Hogy ez egy osztály, egy validálandó űrlap, vagy egy adatbázis-tábla? Te döntöd el. Hogy ez PHP, Ruby, Python vagy Java? Bármelyik lehet, ettől is modell. Azt döntsd el, érthető-e egyetlen ránézésre?</i>
</div>
<p>Említettem, hogy nem fogok Model Driven Developmenttel foglalkozni, most egy picit mégis. Van nekem egy trükköm ugyanis: a legtöbb model hierarchiára, gráfra, illetve függvénynevekre fog leképződni. Ezeket tök jól lehet pl. egy YAML fájlban tárolni, és megfelelően általános program ebből fog dolgozni, vagy használhatunk speciálisan elnevezett, esetleg más módon jelölt (annotációkkal, PHP-sok: <a href="http://php.net/manual/en/reflectionclass.getdoccomment.php">getDocComment</a>) függvényeket, sőt, MVC frameworkök, pl. a <a href="http://www.symfony-project.org/">Symfony</a> vagy a <a href="http://framework.zend.com">Zend Framework</a> be is tartat velünk ilyeneket sokszor.</p>
<div style="border: 1px solid #ccc;color:#333;font-style:italic;margin-left:1em;margin-right:1em;margin-top:2em;margin-bottom:2em;">
<h3>Miért pont YAML?</h3>
<p>Lehetne XML is, a jó-hely idején konkrétan PHP asszociatív tömbök voltak, máskor JSON-fájlok, de ezek közül a YAML tartalmazza a legkevesebb felesleges látható karaktert (az XML pedig a legtöbbet sajnos.)
</div>
<p>A YAML-ek jók, mert néha jobban átláthatóak, mint az ábrák, a modell pedig nem feltétlenül ábra. Ha ábrát akarunk belőlük csinálni, vegyünk fel egy új tulajdonságot: <i>hideInModel</i>. Ha ez van, skippeljük, egyébként tegyük lehetővé, hogy valamilyen ábrát (legegyszerűbb: <a href="http://www.graphviz.org/">GraphViz Dot</a> ) tudjunk belőle készíteni.</p>
<p>A keretrendszereknél tipikusan az <a href="http://www.symfony-project.org/api/1_2/sfComponent#method_execute">executeAction</a> függvények szoktak ilyenek lenni, hogy mely modulokon milyen metódusok végezhetőek. Ezeket is össze lehet gyűjteni akár egy jobban átlátható YAML fájlba, akár egy DOT-ból generált diagramba.</p>
<p><i>A jo-helynél a modellek többsége nem létezett grafikus formában.</i></p>
<p>Mindehhez nem kell más, csak pár szöveges eszköz, pl. grep, find, esetleg az IDE beépített modellje a programkódról. Ne kézzel gyűjtögessük, írjunk programot rá!</p>
<p><i>De alapvetően akkor vagyunk jók, ha a programkódunk maga is olyan tiszta, mint egy model: más szempontokat máshol modellez,mégis, pont annyit ír le, amennyi szükséges.</i></p>
<div style="border: 1px solid #ccc;color:#333;font-style:italic">
<h2>Irodalom</h2>
<p>Úgyse fogsz könyvet venni, így elektromos formában itt az <a href="http://www.agilemodeling.com">agilemodeling.com</a>, ami nem véletlenül ugrik be első találatként sokszor. A többi meg biztos megtalálható PDF-ként az internet <a href="en.wikipedia.org/wiki/Torrent,_Valencia">latinos nevű</a> közkönyvtáraiban.</p>
<p>Két könyvem van (a szabvány mellett): az <a href="http://www.adamnemeth.hu/2008/04/26/konyvajanlo-uml-foldi-halandoknak/">UML Földi halandóknak</a> és a <a href="http://www.animakonyv.hu/index.php?BODY=BookInfo&#038;OP=details&#038;ID=75293&#038;VISIT=1&#038;sz=harald-storrle&#038;t=uml-2">Harald Störrle-féle UML 2.0</a>.</p>
<p>Előbbi könyvet már ajánlottam itt, ezt megteszem ismét, kezdőknek, UML-lel egyetem óta igazából csak most ismerkedőknek mindenképp javaslom, de hozzátenném, napi használatra sokszor inkább a Störrle-könyvet használom, bármennyire is szeretem a Rational narancssárga kiadványát</p>
<p>A Störrle-könyv abban segít ugyanis, hogy rengeteg típusproblémát, és az ezekre nyújtott diagramválaszokat mutat be, mikor mit érdemes használni, ugyanakkor rendkívül száraz és tömény tud lenni, míg az UML Földi halandóknak egy nagyon jó bevezető ahhoz, hogy kell UML-t használni a mindennapi munkában, kedves hangvétellel (pl. hogy nem visz el az UML rendőrség <img src='http://www.adamnemeth.hu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>

49c
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/11/28/architect-dolgok-modellezes-a-gyakorlatban/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Architect dolgok - agilis projekt</title>
		<link>http://www.adamnemeth.hu/2009/11/21/architect-dolgok-agilis-projekt/</link>
		<comments>http://www.adamnemeth.hu/2009/11/21/architect-dolgok-agilis-projekt/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 20:03:09 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>szakma</category>
	<category>architect</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/11/21/architect-dolgok-agilis-projekt/</guid>
		<description><![CDATA[A legutóbbi post után egyik olvasóm (feltéve, hogy több is van), arra kért, írjak az Agile módszerekről.
(Jövő héttől esküszöm, programozni fogunk. Suszter meg kaptafa, ugye.)
(Illetve lehet, hogy nem értek hozzá: viszont mi tudtunk határidőre is hozni dolgokat, nagyjából ezzel a készlettel. Azért ebben az iparban ez nem egyértelmű&#8230;)
A baj az, én nagyon rég vezettem projekteket, [...]]]></description>
			<content:encoded><![CDATA[
2934
<p><i>A legutóbbi post után egyik olvasóm (feltéve, hogy több is van), arra kért, írjak az Agile módszerekről.</i></p>
<p>(Jövő héttől esküszöm, programozni fogunk. Suszter meg kaptafa, ugye.)</p>
<p>(Illetve lehet, hogy nem értek hozzá: viszont mi tudtunk határidőre is hozni dolgokat, nagyjából ezzel a készlettel. Azért ebben az iparban ez nem egyértelmű&#8230;)</p>
<p>A baj az, én nagyon rég vezettem projekteket, akkor is inkább vezetőfejlesztő voltam (úgy hívtam: szakmai / műszaki projektmenedzser), de leírhatom, hogy mik voltak az alapelveim a jó-hely és az azt megelőző projektek idején, és hogy látom most, akár az agilis módszertanok tükrében.</p>
<p><i>Itt szeretném halkan megjegyezni, biztos-ami-tuti, hogy ennek nem feltétlen van köze ahhoz, ahogy mostani munkahelyemen vezetnek projekteket, nem mintha nem csinálnának egy csomó dolgot nagyon jól, csak én ott fejlesztő vagyok, és nehogy valaki összekeverje. </i></p>
<p><a id="more-155"></a></p>
<p>Először is: <b>a projekt csapatmunka.</b> Az egyszemélyes projekt az az ott b&#8230; tad meg kategóriája. Tisztában vagyok vele, hogy sok van ilyen. De egyszerűen nincs mit projektmenedzselni vele! Vagy van motivációd, erőd, kitartásod végigcsinálni (aminek szerves része az, hogy a pénzt adó - ügyfél főnök, stb - rendszeresen cseszeget, illetve van merszed kérdezni), vagy nincs, és kb. itt van vége a történetnek. Ilyenkor problémák lehetnek, hogy:</p>
<ul>
<li> Nincs aki átnézze a kódod, lehet, szar az egész. </li>
<li> Nincs akivel megbeszéld a problémáidat, ha megakadtál, meg vagy akadva, a Google vagy segít, vagy nem.</li>
<li> Nincs, aki megvédjen attól, hogy az ügyfél hülyeséget beszél</li>
<li> Ha nincs ötleted, nincs ötleted, valamit kiszenvedhetsz magadból, nem derül ki, hogy jó-e, még a végén se (maga a dolog szívás, vagy az elején félreértetted az ügyfelet / túlbonyolítottad? Sose fogod megtudni!)</li>
</ul>
<p>Ezért én nem is szeretem az egyszemélyes projekteket. Emellett ugyanakkor a legfontosabb dolog a <b>motiváció</b>. Mondok egy példát: Georgy és Void, a KSZK két ikonikus veteránja, volt szobatársak. Előbbi egyszer azt mondta, hogy az egyetemi fejlődésének szerves része volt, hogy egymást húzták az újabb és újabb kihívásokkal, és így alakult ki pl. a saját funkcionális nyelvük (az <a href="http://schml.sch.bme.hu/">SchML</a>). De hozhatnánk példának a Szilícium-völgyet is, az is pontosan ezért működhet.</p>
<p>Ellenben számtalan olyan egyszemélyes projektem van, amit egyszerűen nem bírtam végigvinni, akkor se, ha fizettek volna érte. Egyszerűen nem ment, ott voltam a semmibe egyedül, tudom, hogy meg tudnám csinálni, tudom, hogy pénzt kapnék érte, de nem megy, nem megy és kész&#8230; Irigylem azokat, akiknek ez könnyen megy.</p>
<p>(Néha persze átszenvedtem magamat ezen.) </p>
<p>Tanulság: <b>mindig legyetek legalább ketten</b>.</p>
<p><b>A nap menete</b></p>
<p><b>Reggeli standup</b>: Azt gondolom, az <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile</a> legfontosabb vívmányainak egyike, hogy megtalálta azt a formátumot, amivel <b>10-15 percessé</b> lehet tenni egy meetinget. Minden egyes napot ezzel a meetinggel kell kezdeni. A legfontosabb a <b>rendszeressége,  minden munkanap</b> legyen!</p>
<p>Egy ilyen meeting pontosan 3 dologról szól:</p>
<ul>
<li> mit csináltam tegnap</li>
<li> mit tervezek mára</li>
<li> milyen elakadásaim vannak, amikhez szükségem lenne segítségre.</li>
</ul>
<p>A részvétel kivétel nélkül kötelező. Figyelemelterelő eszközök (számítógép, mobiltelefon) használata tilos!</p>
<p>Ez nem azt jelenti, hogy amúgy szóba se álltok egymással, csak ebből világosan látszik, hogy épp veszted el a motivációdat (ha már két napja van fontosabb dolgod, jó esély van rá, számodra a projekt belül már véget ért, nincs erőd rá), világosan látszik, mik azok, amik nélkül nem tudsz továbblépni, így nem leszel napokig elakadva, és az is kiderülhet, ha valakinek épp keresztbe tennél nem szándékosan.</p>
<p>Ezen kívül én egyébként figyelni szoktam az embereket: ha azt látom, hogy valaki már két órája iwiwezik, chatel, vagy nem nyúlt a billentyűzethez, akkor ott általában elakadás van. Egyébként is meg szoktam kérdezni 2-3 óránként, hogy áll, ilyenkor időszerűnek látom. Félreértés ne essék: nem a chateléssel van a bajom, vagy a pár perces pihenéssel, talán az arckifejezésen is látszik, ha valaki épp nem tud mit kezdeni a feladatával. Ekkor kell az, hogy még egy szem lássa a feladatot, és ne azért hogy azt mondogassa: <i>márpedig ezt meg kell csinálni</i>, hanem hogy vagy segítsen megoldani, vagy feladatváltást eszközöljön, hátha másnap, friss fejjel már egyértelmű lesz a megoldás.</p>
<p>Ezen túl is fontos, hogy a beküldött kódokat valaki nézze át: elvárásom szokott lenni a napi egy commit per fejlesztő, hogy tényleg tevékeny legyen a nap, és ezeket a kódokat átnézem. Ahogy öregszem, egyre szigorúbb a rostám, de ettől függetlenül még mindig abból derül ki bármi, ha ketten is látják azt a kódot, és csak attól fejlődhetsz.</p>
<p><i>Muszáj, hogy arról, amit csinálsz, rendszeresen beszéltessenek</i>. Nem mindig, nem minden áron persze, de ha mindenkinek egyértelmű felelősségkiosztás van, egymás dolgaihoz pedig nem nyúlunk, az rosszabb lesz, mint az egyszemélyes projekt! Nem mellesleg az ilyenek <i>úgy szoktak csúszni mint állat, mert a motiváció a legkisebb közös minimum szintjére csökken</i> (&#8221;kész lehetnék vele, de Józsi se hajtja magát, én minek?&#8221;). (Igen, kettős játék ez: <i>ha senki nem felelős semmiért, azért bukik be a projekt. Ha egyáltalán nincs közös felelősség, akkor meg azért.</i>)</p>
<p><b>A hely</b></p>
<p>Fontos a <b>legalább két helyiség</b>: legyen egy hely, ahol meetingeltek, beszélgettek, terveztek, és legyen egy hely, ahol programoztok! Ez segít ezeket a ciklusokat jól kezelni, hogy mikor van kódolás, mikor van tervezés. Ha valami nem egyértelmű, esetleg többeket érint, sipirc be a meeting szobába megbeszélni! Mindenki lerakja az utolsó pontosvesszőt, és annyi.</p>
<p>Én nem szeretem, amikor a tábla a kódolóteremben - az arénában - van, csak zavarja a rendet. Annak a meetingszobában a helye. Persze a meetingszoba az is, ahol a telefonálások zajlanak, hogy ne zavarjátok a többieket!</p>
<p>Ide viszont csak indokolt esetben hozunk gépet, illetve nem illik hosszabb időre &#8220;kibérelni&#8221;. Erre esetleg lehet egy külön darálósarok, ami 4 csupasz falas, hogy csak arra tudj koncentrálni, amit épp csinálsz, meg egy pihenőszoba, ahol kanapé van, esetleg csocsóasztal (bár engem idegesít, ha egy pihenőszoba zajos.)</p>
<p><b>Szoftver</b></p>
<p>Nem hiszek a nagy <b>wiki</b>zésben, se a szoftverdokumentációban általában, mert cseszettül <i>nem frissítik őket, a kommentekkel együtt</i>, épp ezért a minőségi kódokon szoktam inkább végigtekerni az embereket, amik pontosan azt tükrözik, amit csinálni akarsz, ha kell, kódgenerátorokon keresztül (hisz ekkor a forráskód az, amiből generálsz, a generálás tulajdonképpen fordítás egy köztes nyelvre). Így nem mondom azt, hogy tarts fenn egy wikit, de valami fájltároló azért jól tud jönni, meg szórd be az overview meg getting started doksijaid valahova, a diagramjaiddal együtt (<i>a legtöbb diagram, amit készítek, rövidtávú felhasználásra szánt</i>, de néha jól jön, ha még megvan.)</p>
<p>Viszont mindenképp legyen egy <b>feladatkövetőd</b>: a legtöbben a <a href="http://www.atlassian.com/software/jira/">jirára</a> esküsznek, ez ménkűdrága tud lenni, de nagyságrendileg mindent tud. Nekem az is jó, ha egy egyszerű <a href="http://flyspray.org/">flyspray</a>-t felhúz valaki, az PHP-s, nem egy bonyolult dolog, a lényeg, hogy látszódjon:</p>
<ul>
<li> kinek milyen dolga van még</li>
<li> mikor lesz ez az egész kész</li>
<li> mik a megbízó prioritásai (persze, minden most important, meg blocker a legtöbbnek, de erről néha le lehet beszélni)</li>
</ul>
<p> Amit mindenképp tegyél meg, hogy <b>ezt integráld valahogy a kommunikációs csatornáiddal</b>: ha IRC-n kommunikálsz, legyen egy botod, ami egy parancsra felvisz egy új taszkot, ha e-mailen, akkor valami progi, aminek tudod forwardolni, és felrakja, nem érdekes, csak <i>ne legyen plusz erőfeszítés az, hogy taszkot kell valamiből csinálni</i>, mert annak sosincs jó vége. Ebből a kedvencem az <a href="http://iwantsandy.com/">I Want Sandy (sajna már megszűnt)</a>, klónja a <a href="http://www.ccbetty.com/">cc:Betty</a>, de biztos kitalálsz valamit. A cégnél  az outlookba raktam bele egy virtuális mappát, aminek a home page-ét a projektmenedzsment rendszerre állítottam.</p>
<p>Az egyik legfontosabb <b>célja a projektmenedzsmentnek, hogy mindig tudd, kinek, mit kell csinálnia, és ehhez várhatóan mire lesz szüksége, később meg konkrétan</b>. Erre esetedben három dolog szolgál:</p>
<ul>
<li> A use case-eid, amiket voltál szives felvenni, merthogy ezeket kell megoldani</li>
<li> A napi standup meeting, mert ez mondja meg, melyik use case hogy áll. Lehetséges, hogy modularizáltátok a feladatot a use case-ek alapján, nyilván, de ettől még ezt oldod meg. Hogy a use case-t user story-nak akarod hívni, az nem érdekel, a kettő közti különbség se.</li>
<li> A feladatkezelő szoftver, mert ez mondja meg, az egész projekt hogy áll. (Tőlem lehet excel tábla is, de hidd el, jobban jársz, ha mindenki magának tudja beírni a dolgokat)</li>
</ul>
<p><b>Összegzés</b></p>
<p>Ha jól megnézed, ezen problémák mindig két dolog köré szerveződnek: kommunikáció és felelősség. Rossz hírem van. <b>Egy átlag szoftverprojekt 40-60% kommunikáció, és 10-20% kódolás. </b></p>
<p>Hogy ez mennyire javítja a kódminőséget? Jó kérdés. Elsősorban határidők betartásában segít, hisz jobban fel tudsz készülni a helyzetekre, látod, ki hol tart.</p>
<p>Ami nagyban növeli a minőséget az a kommunikáció és a közös felelősségvállalás. Ha nem az van, mint a legtöbb cégnél ,hogy Sanyi ért a kapáláshoz, így Sanyi fog kapálni, és csak ő fog kapálni, a többiek meg azt se tudják, hogy néz ki a kapa&#8230;  </p>

511
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/11/21/architect-dolgok-agilis-projekt/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Architect dolgok - informatika elméletben és gyakorlatban</title>
		<link>http://www.adamnemeth.hu/2009/11/14/architect-dolgok-informatika-elmeletben-es-gyakorlatban/</link>
		<comments>http://www.adamnemeth.hu/2009/11/14/architect-dolgok-informatika-elmeletben-es-gyakorlatban/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 13:35:56 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>szakma</category>
	<category>azinformatika</category>
	<category>architect</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/11/14/architect-dolgok-informatika-elmeletben-es-gyakorlatban/</guid>
		<description><![CDATA[
	Az informatikának az elmélete és gyakorlata néha élesen kettéválik egymástól. Két tábor van: az egyik tábor - ők vannak kevesebben - megpróbál az elméleti principiumok mentén létrehozni egy akadémiai alapokra épülő szakmát, ahol a dolgok folyamata valamiféle profi rend szerint történik.
	A másik tábor - ők vannak többen - az egyetemi tudás jó részét hasztalannak tartja, [...]]]></description>
			<content:encoded><![CDATA[
2758
<blockquote><p>
	Az informatikának az elmélete és gyakorlata néha élesen kettéválik egymástól. Két tábor van: az egyik tábor - ők vannak kevesebben - megpróbál az elméleti principiumok mentén létrehozni egy akadémiai alapokra épülő szakmát, ahol a dolgok folyamata valamiféle profi rend szerint történik.</p>
<p>	A másik tábor - ők vannak többen - az egyetemi tudás jó részét hasztalannak tartja, a saját életére nem érzi alkalmasnak.</p>
<p>	Az <a href="/category/architect/">Architect dolgok</a> nem titkolt célja, hogy bemutassa az utóbbi tábor tagjainak, hogy igenis, érvényesek az ő életükre is ezek a szabályok. Az pedig, hogy nem így csinálják, hiányosság, ad absurdum legtöbbször hiba.</p>
<p>	Ezt általában rendkívül gyakorlati - mindennapi munkámból vett - példák hétköznapi, az akadémiai életben kevésbé népszerű - php, javascript - nyelvekkel való megoldásán keresztül mutatom be.</p>
<p>	A mai post ennél picit elméletibb. Én szeretném, ha ez egy kis vitát generálna köztetek, köztünk, így, író-olvasó között, már úgy értve, hogy a blogpostot mégiscsak én írtam, a kommenteket, visszajelzéseket meg majd reméljük, mások.
</p></blockquote>
<p>A <a href="http://en.wikipedia.org/wiki/Software_crisis">Software Crisis</a> arról szól, hogy a projektek 60%-a nem készül el időre vagy költségkeretre. Ez egy folyamatosan létező probléma, nem csupán a korai informatikára igaz, mai napig velünk van.</p>
<p>Amiről a software crisis nem szól, hogy azok a szoftverek, amik a végén így-vagy-úgy elkészülnek, mennyire teszik elégedetté az ügyfelet. Nem árulok zsákbamacskát, a legtöbb esetben semennyire.</p>
<p>	Lehet ezért az ügyfelet okolni, hisz nem tudja mit akar, mindig változtat úgyis&#8230; De az építészetben ugyanez a helyzet, mégse omlanak össze az épületek, és alapvetően lakható helyeket készítenek jobb - akár magyar - építészeink.</p>
<p>	Lehet ezért a beosztott programozóinkat okolni, de hisz legtöbben főiskolát, egyetemet végeztek, de legalábbis elkezdték: az építészetben a végrehajtók sokkal kevesebb képzettséggel rendelkeznek; mégis, a házak állnak, még a középszerű mérnökök által tervezett, vezetett projektek végén is.</p>
<p><b> Szerintem a hiba bennünk van: senior programozókban, vezetőkben, projektmenedzserekben, architektekben,</b> bennünk, akiknek hozzáértésünket, akadémiai ismereteinket, szakolvasmányainkat kéne hozzárakni tapasztalataink mellett a projektekhez.</p>
<p><a id="more-154"></a></p>
<p><b>Profizmus - ennyiből?</b></p>
<p>	Nem hiszek abban, hogy ez a munka nincs jól megfizetve: az orvosok se keresnek sokkal többet paraszolvenciával se (anélkül pedig pláne). Mégis felháborodnánk, ha bennünk maradna egy szike, félrekezelne, sőt, legtöbbször perelünk is emiatt.</p>
<p>	Abban se hiszek, hogy ez az ügyfél kérése az &#8220;alacsony&#8221; árért cserébe: egyrészt a fejlesztések ára minden, csak nem alacsony, másrészt az építészetben is biztos jobb szeretnék az alacsony árat, csak épp nem mernénk végigsétálni az utcán: bármikor ránkomolhatna egy tetőszerkezet, új vakolat, kieshetne a frissen berakott ablak.</p>
<p>Pedig az ismereteink, eszközeink megvannak. Pontosan tudjuk, hogyan kell egy fejlesztési folyamatot kezelni: specifikáció, tervezés, implementálás, tesztelés. Azt is tudjuk, hogy ezeknek mik a gyorsított változatai (már az én időmben is kötelező tananyag volt pl. az <a href="http://en.wikipedia.org/wiki/Extreme_Programming">eXtreme Programming</a>).</p>
<p><b>A hiányzó megértés, tiszta kép</b></p>
<p>Tudjuk, hogy <b>jó rendszerünk csak akkor lesz, ha a fejünkben tiszta a kép arról, mit kell megírni</b>. Erre is ott vannak az eszközök, a use case analízis, az entitás- és folyamatmodellezés. </p>
<p>	Hiányzik néha a <i>metakogníció</i>, hogy felismerjük, ha valami nem tiszta; de ezt el kell sajátítani, nincs mese.</p>
<p>	Lássuk be: <b>az informatika bizonyos szempontból egy kommunikációs szakma, egy gépnek tolmácsoljuk, mit akar az ügyfél</b>. Ha nekünk nem tiszta, a gépnek hogy lehetne az? Ha egymásnak nem tudjuk elmagyarázni, ha - minden iránymutatás ellenére - képtelenek vagyunk megérteni az ügyfelet, akár saját személyiségünk hiányosságai miatt, mit akarunk egy objektív, merev gépszerkezettől?</p>
<p>	Ezen álljunk meg egy picit: nem hiszek benne, hogy az ügyfélnek feladata lenne érthetően fogalmazni; őt ezért nem fizeti senki. Az ő feladata egyrészt fizetni, másrészt a feladatot érintő bármely kérdésre válaszolni. Ha ez ellentmondásos, nekünk kell ezt illusztrálni számára, felvázolva a lehetőségeket.</p>
<p>	De az ügyfél a kisebbik baj: egymás közt is képtelenek vagyunk kommunikálni.</p>
<p>	Ezt jól nyomon lehet követni a modellezési szokásainkon: a legtöbb magyar programozó képtelen modellezni. Nem, nem nem akar modellezni, képtelen; bár ezt nyafogással - ajj, minek? - szokták palástolni.</p>
<p>	Jó példa erre, nem egyszer esik meg: egy programozótól (egyetemi diplomával) kérek pl. egy szekvenciadiagrammot, mert magyarázatából nem világos számomra, többezer soros objektumok hogy kommunikálnak egymással. De mindenféle kibúvó megjelenik, minden fontosabb lesz, szar az UML, meg fölösleges modellezni; és ha megcsinálja, abban sincs köszönet, használhatatlan lesz az egész.</p>
<p>	Fontos megérteni: itt nem az UML a hibás (nem mintha nem lenne hosszú számlája sokunknál), az UML egy kommunikációs (és persze modellező) eszköz a sok közül; nem is az a probléma, hogy az illető ne ismerné az <a href="http://www.agilemodeling.com/artifacts/sequenceDiagram.htm">UML szekvenciális diagramm szintaktikáját</a>; <i>hanem hogy fogalma nincs arról, pontosan mit és miért is kell csinálnia a kódjának</i> - és valószínűleg nem is érdekli.</p>
<p><b>Minták, frameworkök, az általánosításra képtelenség</b></p>
<p>Ismerjük a <a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)">mintákat</a> is, a jól bevált megoldásokat;sőt, elvileg arra is megtanítottak minket, hogy kell új, máshol le nem írt mintákat felismerni. Mégse vagyunk képesek ezekre reagálni sokszor. Ehelyett barmolunk, vagy csukott szemmel (erről még lesz szó, code review!) hagyjuk, hogy mások barmoljanak. Pedig a mi felelősségünk. </p>
<p>Nagyon zavarba ejtett, amikor megszóltak a múltkori framework-poszt miatt: <i>&#8220;minek egy n+1. framework?&#8221; </i> Minek? Azért, mert különben a nyers semmibe kezdtek volna implementálni. <b>Nem lehetett behozni teljesen külsős rendszert,</b> mert akkor a saját apukáik nem ismerik fel a modult, <b>viszont a már létezőbe fel lehetett, és fel kellett ismerni a mintákat, ezekre pedig általános megoldást adni.</b>)</p>
<p>	Ennyi. Ha egy autókereskedő webshopba be tudsz rántani egy webshop frameworköt, ettől még lehetséges, kénytelen vagy egy hitelkonstrukció-frameworköt írni, mert egy más aspektusból viszont hiányzik az előre csomagolt, helyben felhasználható megoldás. De ennek nem megbocsátása, kiváltása az, ha külön, minden hitel-számítást kódból végzünk.</p>
<p>	Ráadásul itt csak meglévő kód racionalizálását végeztük, addig-addig, amíg már nem kellett soronként vigyáznunk a biztonságra; amikor már csak egy, max két helyen kellett megmondanunk, mit is szeretnénk tulajdonképpen, nem pedig végig, három réteg 10 fájljában, folyamatosan escape-elve, sorokat másolva már meglévő kódokból..</p>
<p>	<b>Minden rendszer más mintákat követ, de a minták olyan dolgok, amik automatizálhatóak, programozhatóak</b>. Ennek ellenére ritkán látok a &#8220;netről szedett&#8221; alap frameworkök (nevezzük nevén őket: perzisztencia, webcontroller, esetleg üzenetsor-kezelő, illetve sablonmotor) mellett ezekre ortogonális, tehát más szempontból megközelítő általános rendszereket - sokkal többször látok viszont többszörözött controller-sorokat..</p>
<p>	(Egyébként külön öröm, amikor a rosszul kigondolt / használt frameworkökben a programozónak 25 helyen &#8220;kell&#8221; jelölnie valamit. Ekkor igazán eszébe juthatna, hogy vagy az eszköz rossz, vagy rosszul használja, mert ha két helynél többre kell valamit beírni, akkor már tuti bukta van.)</p>
<p><b>Egyedül nem mehet</b></p>
<p><b>A code review szokásokról nem is beszélünk</b>, mivel ilyenek gyakorlatilag nincsenek: mások kódját is ritkán olvassuk ha az nem egy tutorial része, nemhogy egy munkahelyen egymásét, &#8220;mindenkinek van dolga&#8221;. <b>Pedig ez a minőség egyetlen záloga</b>, az egész módszertani felépítmény, a frameworkök, metodológiák nem érnek <i>semmit</i>, ha nem látja még legalább egy szakértő szem a forráskódot.</p>
<p><b>A Te felelősséged!</b></p>
<p><b>Fontos lenne megérteni: a minőség az iparág belső igénye kell, hogy legyen, a saját önbecsülésedé</b>: <i>a Te dolgod az, hogy az ügyfél minőséget kapjon, a Te dolgod, hogy olyat kapjon, amit szeretne, hogy ha egy mód van rá, szeresse használni, mert megkönnyíti a dolgát, mert logikus, mert intuitív, mert illeszkedik ahhoz, amit csinálna</i>. </p>
<p><i>A Te dolgod, hogy a kód biztonságos legyen, hogy a honlap esztétikus legyen (igen, csak ritka esetben van külön dizájner a gyakorlatban), hogy megegye az internet explorer, hogy ne legyen lassú, és ezek egy része olyan nemfunkcionális igény, amiről az ügyfél nem is tud, nem is tudhat!</i></p>
<p>Nehéz szakma? Az. Sok az elvárás? Igen. De ezért nem bíznak sokan pusztán érettségivel rendelkező emberekre nagyobb rendszereket, mégha felsőoktatásunk az &#8220;egyik fülön be, másikon ki&#8221; embereket is termeli tömegével. Mert ezért van az a diplomádon, hogy okleveles mérnök[-informatikus].</p>

51a
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/11/14/architect-dolgok-informatika-elmeletben-es-gyakorlatban/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Architect dolgok - Use case-ek, modellek, követelmények</title>
		<link>http://www.adamnemeth.hu/2009/11/01/architect-dolgok-use-case-ek-modellek-and-the-rest/</link>
		<comments>http://www.adamnemeth.hu/2009/11/01/architect-dolgok-use-case-ek-modellek-and-the-rest/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 23:25:16 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>szakma</category>
	<category>web</category>
	<category>azinformatika</category>
	<category>architect</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/11/01/architect-dolgok-use-case-ek-modellek-and-the-rest/</guid>
		<description><![CDATA[A mai post kicsit alapszintűbb, műegyetemi infoképzést őszintén végighallgatók sok újat nem fognak benne találni. Az apropója egy új, fiatal kolléga a csapatban, aki teljesen új modult fog kapni, és arról beszélgettünk, ehhez hogy kell nekilátni - szerintem.
A kezdő informatikus - vagy a nem kezdő, ugyanakkor más szemléletű vagy épp autodidakta - ha kap egy [...]]]></description>
			<content:encoded><![CDATA[
1d9b
<p><i>A mai post kicsit alapszintűbb, műegyetemi infoképzést őszintén végighallgatók sok újat nem fognak benne találni. Az apropója egy új, fiatal kolléga a csapatban, aki teljesen új modult fog kapni, és arról beszélgettünk, ehhez hogy kell nekilátni - szerintem.</i></p>
<p>A kezdő informatikus - vagy a nem kezdő, ugyanakkor más szemléletű vagy épp autodidakta - ha kap egy feladatot, mivel kezdi?</p>
<p>Az adatstruktúrák felállításával.</p>
<p><i>You&#8217;re doing it wrong. </i> *</p>
<p>(* Legalábbis szerintem, a legtöbb esetben)</p>
<p>Egy programnál sohasem az a kérdés, hogy milyen elemek vannak, ez részletkérdés. Ami a fontosabb: <b>mit kell csinálnia annak a szegény programnak?</b></p>
<p>Erről ad információt az (egyesek kedvéért huszonötször átnevezett, elrejtett, átsematizált) use case modellezés.</p>
<p><a id="more-153"></a></p>
<p>Hadd kezdjem egy kijelentéssel: ha valami hülyeség az UML-ben, akkor a use case diagrammok bátran ilyenek lehetnek: a karikákkal ábrázolt use case-ek sokkal kevésbé hatékonyak, mint az <b>egyszerű, jól megfogalmazott felsorolások</b>. (Védelmükben: az UML 2.0-nak azért sok olyan része van, amit nem véletlenül nem emlegetnek egyáltalán nyilvánosan, azoknál azért hasznosabb, de talán leginkább a tisztán UML-alapú tárgyalás miatt szerepel a tananyagokban.)</p>
<p>De egyáltalán: miért is kellenek nekünk use case-ek?</p>
<p><i> Kedvenc példám: egy kisgyereket megkérdeztek arról, milyen az a kedvenc játékrobot, amit kezében tart. A gyerek nem azt mondta, hogy vannak szárnyai, csipogója, meg villogója, hanem hogy: &#8220;Hát ha kinyitod ííígy akkor wooooom és ha megnyomod iiitt akkor brrrrrrrrr és ha hátrahúzod így, akkor vijuvijuviju&#8230;&#8221; Nem azt mondta, milyen struktúrális elemei vannak - hanem hogy miket lehet vele csinálni!</i></p>
<p>Pl. <b>ha nincsenek use case-eid, akkor jó esélyed van arra, a programod felesleges.</b> Nem egy alkalmazás volt, amiről megkérdezték a véleményemet (vagy nem kérdezték, csak mondtam) különféle cégek, szervezetek, és a specifikáció megtekintése után azt kérdeztem: hol vannak a use case-ek?</p>
<p><i>Ezek egy része bemutatott, az Olvasó számára is hallomásból ismert, és kivétel nélkül bukott szolgáltatások.</i></p>
<p>A use case elemzéstől félünk a webszakmában, ugyanis kiderülhet, az oldalunk felesleges, nincs igény arra, amit mi ott kitaláltunk, vagy van már, ami jobban, szebben teszi ezt célcsoportunk számára, és ismerik is azt. Ezt persze nehéz beismerni, így a weboldal bukása után <i>érdemes lehet a use case analízist a pszichoanalízissel együtt alkalmazni</i>.</p>
<p>De mégis szükséges. Szükséges egyrészt programoknál is, másrészt viszont jó ötlet sima, statikus honlapoknál is.</p>
<p>És akkor most elárulok egy szakmai titkot: <i>a szereplő fogalmat lehet párosítani a média és marketing célközönség fogalmával</i>, gyakran meglepő (semmiképp nem korosztály-alapú) célközönségfelosztást alkalmazva, sikeressé tehetjük oldalainkat, hisz azt, és csak azt készítjük el, amire céközönségünknek szüksége van!</p>
<p>Miből is áll a use case analízis?</p>
<ul>
<li>szereplőkből
<li>use case-ekből, azaz a használat módjaiból (hogy lehet zümmögtetni, és vijjogtatni, és&#8230;)
<li>forgatókönyvekből, azaz ezek hogyanjából (a zümmögtetéshez meg kell fogni iitt és aztán megnyomni iiitt&#8230;)
</ul>
<p><b>Először is a szereplőkről.</b></p>
<p>Ezt szinte mindig utólag finomítani kell, előszőr mindig gondolkozzunk azon, van-e a &#8220;rendes felhasználón&#8221; kívül esetleg valamiféle &#8220;karbantartó-jellegű&#8221; felhasználónk is, pl. adminisztrátor, moderátor, hírfeltöltő, anyagrögzítő, sőt, az informatikai modellezés szabályai szerint a külső rendszerek (pl. API-kliensek) is szereplőnek számítanak.</p>
<p>Ha már vannak szereplőink, gondoljuk végig: <i>&#8220;mit is akarnak ezek az emberek (gépek) a leendő programunktól?&#8221;</i></p>
<p>Ez egy nagyon nehéz kérdés, pláne azért, mert arra is rá kell jönnünk, mit nem akarnak (pl. nem akarom, hogy az iWiW kávét főzzön, de a facebook se. Nem érdekel, készíthető-e kávéfőző app, én oda nem azért járok, arra ott van a kávéfőzőm adminfelülete. <a href="http://vids.myspace.com/">Integrált youtube</a> se kell.)</p>
<p>(Nincs ilyen kávéfőző gépem: megrögzött teamániás vagyok. <img src='http://www.adamnemeth.hu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p><b>Ezek listái, szereplőkre bontva, lesznek a use case-ek</b></p>
<p>Ezeknek a leírásoknak viszont, mint már említettem, van formátumuk. A formátum alapesetben:</p>
<p><b>Ki mit mivel</b>, azaz<br />
Géza főz kávét a kávéfőzővel (Angolul: George cooks a coffee with the coffee machine: <b>alany, ige, tárgy, többi</b>. Tudom, hogy George az György&#8230;)</p>
<p>Ez nem véletlenül van így. Amikor áttekintjük őket, lesz egy rakás igénk és tárgyunk: ezek lesznek a rendszer alapkövei, <i>a gombjaink, menüpontjaink feliratai</i>. Érdemes esetleg segédigéket (<i>Géza tud főzni kávét, akar főzni, </i>szeretne, képes, stb) bevenni azért, sokszor könnyebben csúszik le így a torkon.</p>
<p>Ugyanakkor: lehet rossz use case: A Rendszer főz kávét Gézának. A Rendszer, ha egy mód van rá, ne csináljon semmit, amíg meg nem kérik. Géza főz kávét a segítségével, ez inkább. Vannak kivételes esetek, tipikusan az autonóm működés. Meg aztán ne feledjük, minden use case-nek lesz forgatókönyve (későbbi algoritmusa), amiben majd ott lesznek az autonóm részek, ahol a vizet forralja a Rendszer, meg kávét pörköl, de <b>a use case az az, hogy mi az elvárás, mindig egy felhasználó igényét, és így interakcióját írja le</b>.</p>
<p>(Honlaptervezés: <i>Diák megnézi az órarendet / végigböngészi a galériát. Szülő tájékozódik a tanév menetéről / értekezletek időpontjairól / csemetéi állásáról / felvételi információkról. Felhasználó zenevideót keres előadó alapján. Kutató cikket keres évkritériumok alapján. Páciens felküldi frissen felújított mellei képét twitterre.</i>)</p>
<p><b>Forgatókönyvek</b></p>
<p>A use case-ek forgatókönyvei szintén szövegesen szoktak készülni, itt már picit elválik egymástól az agilisabb user story, és a merev use case fogalom, előbbi ugyanis kevésbé foglalkozik a hibalehetőségek kezelésével és az intelligens hibaelhárítással, míg utóbbi nagyon is.</p>
<p>A forgatókönyvekre hasonló szabály vonatkozik ige-elrendezés szempontjából, de itt többször fog szerepelni a rendszer vagy a szervezet, mint alany. Pl. az use case, hogy pénzt akarunk levenni az automatából, az viszont már forgatókönyv-részlet, hogy a Bank leellenőrzi a pin-kódunkat.</p>
<p><b>Belőlük kivadászva a főneveket, és ezek rész-egész kapcsolatait elemezve fogjuk megkapni a struktúráinkat, amikből aztán osztályok, űrlapok, táblázatfejlécek,</b> és persze <b>osztálydiagramjaink lesznek. </b></p>
<p>De az már egy másik téma.</p>
<p>Ja, tudjátok, hol pionírkodták ki többek közt a use case-orientált gondolkodást?</p>
<p>Az én emlékeim szerint - de lusta vagyok adatokat kutatni, házi feladat - Palo Altoban, a Xerox PARC laborban. Talán ezért van annyira kevés gomb az Apple programokon?</p>

a06
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/11/01/architect-dolgok-use-case-ek-modellek-and-the-rest/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Architect dolgok - Ajánló: Javascript in the enterprise</title>
		<link>http://www.adamnemeth.hu/2009/10/21/architect-dolgok-ajanlo-javascript-in-the-enterprise/</link>
		<comments>http://www.adamnemeth.hu/2009/10/21/architect-dolgok-ajanlo-javascript-in-the-enterprise/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 21:46:55 +0000</pubDate>
		<dc:creator>Aadaam</dc:creator>
		
	<category>Uncategorized</category>
	<category>tech</category>
	<category>szakma</category>
	<category>azinformatika</category>
	<category>architect</category>
		<guid isPermaLink="false">http://www.adamnemeth.hu/2009/10/21/architect-dolgok-ajanlo-javascript-in-the-enterprise/</guid>
		<description><![CDATA[(Kettő és feledik rész, linkajánló)
A tapasztalatom az, hogy a magyar programozók, ritka ám tiszteletreméltó kivételektől eltekintve, nem szeretik, nem is értik a javascriptet. A legtöbbje backend ember, jobban megbízik a statikus nyelvekben. Szíve joga.
Egy magyar srácot hallani beszélni arról, hogy hogy használják a javascriptet szerveroldali nyelvként, mennyivel biztonságosabb és skálázhatóbb(!) a javascript kód a javahoz [...]]]></description>
			<content:encoded><![CDATA[<p><b>(Kettő és feledik rész, linkajánló)</b></p>
<p>A tapasztalatom az, hogy a magyar programozók, ritka ám tiszteletreméltó kivételektől eltekintve, nem szeretik, nem is értik a javascriptet. A legtöbbje backend ember, jobban megbízik a statikus nyelvekben. Szíve joga.</p>
<p>Egy magyar srácot hallani beszélni arról, hogy hogy használják a javascriptet szerveroldali nyelvként, mennyivel biztonságosabb és skálázhatóbb(!) a javascript kód a javahoz képest, mennyivel egyszerűbb javascriptes embereket szerezni egyszerre meglepő és felemelő érzés.</p>
<p>A java számomra egyértelműen túl van értékelve. Persze nem azért szidom, mint mások, de ettől még nem mindig jó megoldás ott, ahol használják, és komoly problémák vannak vele nyelvi szinten is.</p>
<p>Hallgassátok hát <a href="http://www.infoq.com/presentations/javascript-in-the-enterprise">Szegedi Attila előadását a Javascript üzenet-orientált banki rendszerükről az InfoQ-n.</a></p>
]]></content:encoded>
			<wfw:commentRSS>http://www.adamnemeth.hu/2009/10/21/architect-dolgok-ajanlo-javascript-in-the-enterprise/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>

0

