====== Szoftverek tervezése és fejlesztése ====== //"A minőségi munkát csak a személyes elégedettség, az elkötelezettség és a jó érzés segítségével érhetjük el. A mi szakmánkban a precizitás és tökéletesség nem felesleges luxus, hanem egyszerűen szükséges."// (Niklaus Wirth) Sok éves tapasztalattal rendelkezem különféle programozási nyelvekben írt szoftverek tervezésében és fejlesztésében, néhány munkámmal kapcsolatban további (angol nyelvű) információt kaphatsz a [[en:blog|blog]] oldalaimon. Számos kisebb-nagyobb projektben vettem részt fejlesztőként, a legtöbb esetben tervezési és irányítási feladatom is volt. Az alábbiakban pár reprezentatív példát olvashatsz az elmúlt években elért, szoftverfejlesztéssel kapcsolatos eredményeimről. ===== Ágens alapú intelligens megfigyelő- és vezérlőrendszer (Java) ===== Ezt a [[http://jade.cselt.it|JADE]] és Linux alapokra épített beágyazott rendszert elosztott működésre, automatikus, vagy legalábbis automatikus módszerekkel támogatott konfigurációra és nagy rendelkezésre-állásra kellett felkészíteni. Az ágens alapú architektúra számos fejlesztési előnyt adott más technológiákkal szemben. Az egyes szoftveregységeket állapotgépekkel lehet leírni, mely alapján a keretrendszer automatikus migrációs, üzenettovábbító, döntési, párhuzamosítási, tagsági és egyéb szolgáltatásokat nyújt, akár egy mobil MIDP platform erőforráskorlátai mellett is. Az elképzelések szerint a rendszer prototípusa Ethernet hálózaton, [[http://www.via.com.tw/en/products/mainboards/|VIA EPIA]] hardveren futott volna, melyet saját, illetve külső fejlesztésű egyedi mikrokontrolleres hardveren, [[http://www.canopen.us/|CAN buszos]] érzékelő- és beavatkozó hálózat egészített volna ki. Fél éves tervezési és fejlesztési munka után a projekt sajnos kifogyott a pénzből, ezért nem jutottunk el a prototípus rendszerig, mely egy új, modern technológiára épülő lakásautomatizálási rendszer alapjául szolgálhatott volna. A projektben vezető tervező és fejlesztő feladatkört töltöttem be a hardverfüggetlen elemek tekintetében. Java programozási nyelven, objektum-orientált fejlesztési és programozási technikával, gyakran UML eszközökkel támogatva - többek között - készítettem még: * magas párhuzamossági szintű, XML alapú csevegőszoba-szervert flash alkalmazásokhoz, * [[http://mina.apache.org/|apache mina]] alapú whois szervert a [[http://www.domain.hu|.hu ccTLD]] számára, * orvosi alkalmazások közötti mediátor, adatkonverziós és üzenet-perzisztencia funkciókat ellátó integrációs szoftvert, * [[http://oswing.sourceforge.net/|openswing]] és [[http://www.hibernate.org/|hibernate]] alapú, grafikus tagsági adatbázis adminisztrátori felületet, egy pár ezer rekordot tartalmazó, kb. 15 táblás adatbázisra, az [[http://www.mta.hu|MTA]] részére * az SZJF előírásainak tanúsított módon megfelelő [[http://poker.wipcon.net|beléptetőrendszert]] pókertermek számára * stb... ===== Webáruház és webmail (PHP) ===== Gyakorlatilag két független projektről van szó, melyet két külön megbízónak készítettem, azonban mégis egybe tartoznak, mert sok alapvető PHP technika kidolgozására nyílt lehetőségem a két fejlesztési fázis alatt. Mivel abban az időben még nem jelent meg a PHP 5, nem lehetett a fejlesztői környezet objektum-orientált szolgáltatásait megfelelően használni, így - fejlesztőtársammal - teljesen saját keretrendszer kialakításába fogtunk, melynek (tőlem már független) második verziója a [[http://www.animakonyv.hu|mai napig üzemel]]. A webes munkáim nem maradtak ennyiben, több egyéb projektben is fejlesztettem illetve terveztem PHP alapú keretrendszereket és modulokat. Ismerem többek közt a template kezelés, gyorsítótárazás, sessionkövetés, adatbázis-alapú kép- és dokumentumkezelés, többnyelvűség, különböző autentikációs mechanizmusok, HTTP fejlécek, URL átírás és keresőszerver-barát oldalak készítésének módjait. PHP nyelven készítettem még: * többnyelvű, template alapú szállodai szobafoglaltság-adminisztrációs rendszert, * LAN adminisztrációs rendszert, mely a hálózati erőforrások felelőseinek, fizikai, hálózati címeinek, valamint domain neveinek nyilvántartása alapján generál DHCP, DNS szerver konfigurációkat, valamint Cisco switcheket SSH parancssori elérésen keresztül VLAN elérésre és MAC szűrésre programozó [[http://expect.nist.gov/|expect]] scripteket, * a [[http://www.drupal.org|drupal]] CMS egyes moduljaihoz saját kiegészítéseket, * több nyelvű, moduláris döntéselőkészítő és dokumentációs rendszert települési önkormányzatok számára, * rengeteg egyéb kisebb-nagyobb webes alkalmazást, különböző célfeladatokra... ===== Nagy teljesítményű hálózati szenzor (C) ===== Egy kevéssé publikus projektben lehetőségem nyílt az alacsony szintű TCP/IP hálózati ismereteim elmélyítésére, melyet egybe kellett kötnöm egy nagy áteresztő képességű, mégis bonyolult műveleteket végző, a hálózatot lehallgató üzemmódban ellenőrző szenzor megtervezésével. A szenzor az [[http://en.wikipedia.org/wiki/OSI_model|ISO OSI rétegmodell]] második (adatkapcsolati) szintjétől egészen a hetedik (alkalmazási) szintjéig nyomon követi a megfigyelt hálózat forgalmát, vagyis lehetőséget ad az ARP kérdés-válaszoktól egészen pl. az email forgalom értelmezésére és elemzésére. A szoftvernek fel kellett készülnie, hogy több szálon üzemelve sem lesz képes a mindenkori aktuális hálózati forgalom teljes feldolgozására, ezért egy moduláris szerkezetű, C programnyelven írt szoftvert fejlesztettünk ki, mely képes a rendszer terheltségétől függően bizonyos funkcióit korlátozottan ellátni, azaz egyes moduljai futásidőben automatikusan ki- és bekapcsolódnak. A rendszer belsejében egy üzenettovábbító és ütemező egység üzemelt, melyet több más technikai modul is kiegészített, felhasználtuk többek közt a [[http://www.complang.org/ragel/|Ragel]] állapotgép-fordító eszközt, a [[http://libnids.sourceforge.net/|libnids]] hálózati függvénykönyvtár egy általam továbbfejlesztett változatát és a [[http://www.tcpdump.org/|libpcap]] függvénykönyvtárat is. ===== Parancssori oktató felület (bash) ===== feltöltés alatt, addig is lásd [[http://rigo.info/tag/bash?do=showtag&tag=bash|apróbb bash programjaimat a blog-ban]]!