Tool fejlesztés I.

Mivel az eddigi legtöbb látogatót hozó bejegyzés technikai volt, úgy döntöttem nem hagyom abba és írok még valamiről, amiről azt hiszem értek hozzá. Remélhetőleg csupa hasznos információval tele tűzdelve. Sajnos sok ilyen leírást nem csináltam még, így, ha bárkinek van javaslata, hogy és mint alakítsam az írásaimat.

Első körben arra gondoltam, hogy a tool fejlesztésről írok, mivel mostanában foglalkozom vele egy kicsit, és már nagyon régóta érdekel a téma. Könnyen lehet azt hinni, hogy a fejlesztés ezen része egyszerű, amit szinte bármilyen programozó meg tud csinálni. Hát szerencsére ezzel ellent kell mondjak. Egy jó toolt sem könnyebb csinálni, mint akár egy játékot.

Kezdjünk is bele …

Először is ki kell választanunk egy program nyelvet, amiben a toolt fejleszteni akarjuk. Ez a kérdés nem feltétlenül egyszerű, habár ma már rendelkezésünkre állnak olyan technológiák, amik azért megkönnyítik a döntést. Az első lépés, hogy kiválasszuk az operációs rendszert, ami alatt a toolt használni akarjuk. Mivel játékfejlesztő vagyok, leginkább a Microsoft Windows rendszer az, ami a környezetemben leginkább elterjedtebb és be kell látni, hogy ez az a rendszer, ami alá a legegyszerűbb és ezáltal a leggyorsabb fejleszteni (gyorsaság = olcsóság). Való igaz, hogy egy Windows 30-80.000 ft ba kerül, de ha azt vesszük, hogy ez az összes egy fejlesztő 1 heti bére, akkor hamar ki lehet kalkulálni, hogy több értelme van akár Windows rendszereket venni, mint hónapokat beleölni egy Linuxos fejlesztésbe. De azért nézzük meg miért is mondom én ezt.

Windows

  • Kiforrott fejlesztő eszközök (Visual Studio, WPF)
  • Könnyed használat
  • Széleskörű software support
  • Kiforrott, nagymennyiségű library, OS support
  • Fejlett ActiveX-es objektumok
  • Széleskörü codec lista
  • Magas generációs programnyelvek (C#, C++)
  • Kiforrott, komoly SDK-k (XNA)

Linux

  • Széleskörü Open Source megoldások
  • Integrált script nyelvek (Bash, Perl, Python)
  • Ingyenesség
  • C# támogatás

Mivel egy ilyen fejlesztés nem arról szól, hogy ki mit szeretne, itt nincs helye Linux – Windows vita. Egyszerű tények alapján kell dönteni, ami legtöbbször oda vezethető vissza, hogy melyik az olcsóbb és mivel a Windows sokkal több és sokkal kiforrottabb lehetőségeket tartalmaz ezért a választás egyértelműen rá esik.

Az OS kiválasztás után ki is lehet választani a program nyelvet, amit használni akarunk. Ezek a döntések ugyan azon alapulnak, mint maga az operációs rendszer választás. Eléggé sok mindent figyelembe kell azonban venni ahhoz, hogy jó döntést hozhassunk.

A kiválasztott nyelv legyen:

  • Magas szintű, hogy könnyen és ezáltal gyorsan lehessen benne fejleszteni
  • Legyen hozzá grafikus designer, hogy a gui elemeket könnyedén össze tudjuk állítani
  • Legyen hozzá teljeskörü debugger, hogy a hibákat minél előbb megtaláljuk
  • Legyen hozzá remote debugger
  • Legyen jól dokumentálva
  • Legyen a lehető legnagyobb a tudástára, hogy minél kevesebb dolgot kelljen nekünk lefejleszteni
  • Legyen hozzá egy jó IDE, hogy a munkát könnyítse és ne lassítsa
  • A fordító legyen minél gyorsabb
  • Az elkészült program beüzemelése legyen minél könnyebb
  • A futásbeli hibakezelés legyen minél fejlettebb
  • Könnyedén lehessen alkalmazni hozzá a fontosabb librarykat (adatbázis, 3D, script, stb)
  • Képes legyen DLL ek betöltésére (akár ctype al)
  • A könnyed fejlesztés mellett legyen gyors és ne egyen sok memóriát
  • Legyen hozzá minél több gui elem
  • Képes legyen ActiveX es objektumok használatára

ez eléggé sok feltétel, de nem árt, ha olyan nyelvet keresünk, ami mindennek megfelel. Persze, van ilyen nyelv, mert az alapján szedtem össze, hogy mit kell tudjon, azaz csaltam egy kicsit. Mivel a választott operációs rendszerünk a Windows ezért szinte csak egy nyelv jöhet szóba, de azért nézzünk meg pár lehetséges választást, megpróbálom megindokolni, hogy melyik nyelv miért nem jó.

  • C++ – mondhatni ősi nyelv, minden tud, gyors, kevés memóriát eszik, viszont kevés UI Framework van hozzá és azokhoz sincs grafikus designer. (Gtk, Gtkmm – itt megjegyezném, hogy egy magyar, Érdi Gergő eléggé kiemelt helyen van ebben a projectben, Qt – ami egy eléggé életképes alternatíva, multi platform és kifejezetten sokat tud, habár a KDE ezt a keret rendszert használja és sajnos eléggé bugos, ami nem biztos, hogy a Qt hibája, MFC – ezzel kb a kisgyerekeket kell riogatni). Maga a C++ eléggé bonyolult nyelv és nagyon sok minden nehezen implementálható, illetve saját magunknak kell megteremteni. Nincs benne védelem sok alaphiba ellen (mivel nincs saját VM je), így a memória felülírás, rossz pointer használat, mind komoly veszélyt rejt.
  • Java – a C++ al ellentétben a Javanak van saját VM je, nincs benne pointer, így memória hibákat Önmaga kivédi. A garbage collector miatt nem kell foglalkozni az objektumok menedzselésével sem. A Javahoz óriási mennyiségű library van, nem tudok olyat mondani, ami nincs megírva hozzá. Ezzel ellentétben sajnos nincs hozzá olyan editor ami valóban könnyeddé tenné a fejlesztést. Mind az Eclipse, mind a Netbeans komoly hibákkal küszködik, sem a debuggerek sem maga az IDE nem könnyen használható, nem felhasználó barát, viszont nagyon lassúak, ezáltal lassítják a fejlesztést. Mindemellett Windows alatt Java-t futtatni eléggé körülményes tud lenni, főleg a 64 bites rendszeren. UI Frameworkben nem szenved hiányt, viszont grafikus designerben annál inkább. A Netbeans és az Eclipse az elsődleges amit említenek. Az Eclipseet próbáltam, de nem működött, a weboldalán írták is, hogy jelenleg nem működik. A Netbeans pedig lassú volt, nehezen kezelhető és itt ott komoly bugokkal szenvedett.
  • Adobe Air – újszerű ötlet, de szinte azonnal ki is lehet zárni. Nem támogat multi threadinget, nem tud natív kódot hívni, nem tud dll-t betölteni, nincsenek hozzá adatbázis driverek, csak magas szintű hálózat kezelés van benne. Úgyhogy kilőve.
  • C# – igen, ez az a nyelv, amire gondoltam. Nem meglepően, mert a fentebb felsorolt elemekből minden igaz rá. Akárcsak a Javaban itt is minden meg van írva, viszont van hozzá egy nagyon komoly IDE, grafikai designer, debugger. Mivel az IDE fizetős, ezért nincsenek benne fél megoldások, nem kontárkodik bele mindenki, amitől rengeteget tud, de semmit sem jól. Képes dll ek betöltésére, képes natív kód hívására, ActiveX objektumok betöltésére, nagyon egyszerű. Mindezek mellett komoly OS supportot is kap, ami csak hab a tortán. Mindezek mellett eléri a teljes DirectX et, akár natív módon, akár a managed kódot, vagy akár az XNA-n keresztül, ami ugye multiplatformos 3D megjelenítést és még sok minden mást tesz lehetővé.

Nekem mindig egyszerű a választás és mindig a C# mellett teszem le a voksom. Egy régi munkatársam, akitől eléggé sokat tanultam, mindig azt mondta:

C# ban ha valami több mint 1 sor, akkor ott elrontottam valamit

 

Igaza is volt. Minden meg van valósítva, amire szükség lehet, és egyre több és több a már amúgy is hatalmas mennyiségű C# Managed Library, amit felhasználhatunk a toolunkhoz.

Mára ennyi, még folytatom, ahol már inkább programozás lesz, mint szövegelés.

Egy hosszabb szünet után

Noh, hát most egy hosszabb szünet volt, sem reggel sem utána nem volt időm ezzel foglalkozni. Igazából most se sok van, csak kell egy kis agyi pihi 🙂

Tegnap este végre leszedtem a World of Tanks új Beta patchét, amiben resetelték az XP-t, bekerült a JadgTiger és még néhány feautre. Az látszott, hogy a GUI is kapott némi ránc felvarrást, szóval dolgoznak a srácok.
Óriási mázlim volt, ugyanis volt annyi XP-m (így free be), hogy tudtam venni 1 Tiger I es tankot! Muhahaha! A 88mm es ágyú természetesen elmaradhatatlan kellék.

World of Tanks Tiger I

http://en.wikipedia.org/wiki/Tiger_I

Nagyon jó kis tank a Tiger, persze még nem Király Tigris, de Tigris. Persze azonnal rohantam a sűrűbe, aprítani az ellenséget, ahogy kellene, de rá kellett jönnöm hamar, hogy azért a Tigris sem halhatatlan, főleg a nagyon erős motor upgrade nélkül. Ettől függetlenül már élvezhető a játék olyan szinten, hogy nem csak a nagyok szórakozása vagyok, vagy nem csak 1 kapás lövés az első szembejövőnek 🙂

Akit esetleg érdekelnének a II. VH-s tankok annak ajánlom az alábbi linket: http://www.achtungpanzer.com/

A másik dolog, hogy Ati javaslatára az RSS Push Serveren áttértem a Velocity Theme Engine használatára. Komoly kis cucc, könnyű használni, de mégis sokat tud. Apache éknál értik a dolgukat azt kell mondjam 🙂

Java:

   1: try {
   2:      Velocity.init();
   3:  }
   4:  catch ( Exception e ) {
   5:     e.printStackTrace();
   6:     return;
   7:  }
   8:  
   9:  
  10: VelocityContext context = new VelocityContext();
  11:                context.put( "tplName", templateName );
  12:                context.put( "tplItems", items );
  13:  
  14: String templateFile = templateName + "/rss.tpl";
  15: StringWriter fullRss = new StringWriter();;
  16: try {
  17:     Template template = Velocity.getTemplate( templateFile );
  18:     template.merge( context, fullRss );
  19: }
  20: catch ( ResourceNotFoundException e ) {}
  21: catch ( ParseErrorException e ) {}
  22: catch ( Exception e ) {}
  23: finally {
  24:     System.out.println( fullRss.toString() );
  25: }

Template:

   1: #foreach( $item in $tplItems )
   2:     <p>
   3:         <div class=emailPage>
   4:         #if( $item.title != "" )
   5:             <span class=title>Title: </span><span class=normal>$item.title</span><br />
   6:         #end
   7:         #if ( $item.link && $item.link.url.length() > 0 )
   8:             <span class=title>Link: </span><a href=$item.link.url>$item.link.text</a><br />
   9:         #end
  10:         #if ( $item.pubdate != "" )
  11:             <span class=title>Pub date: </span><span class=normal>$item.pubDate</span><br />
  12:         #end
  13:         #if ( ! $item.categories.isEmpty() )
  14:             <span class=title>Categories: </span><span class=normal>
  15:             #foreach( $category in $item.categories )
  16:                 $category#if( $velocityHasNext ),#end
  17:             #end
  18:             </span><br />
  19:         #end
  20:         #if ( $item.comments != "" )
  21:             <span class=title>Comments: </span><span class=normal>$item.comments</span><br />
  22:         #end
  23:         #if ( $item.source )
  24:             <span class=title>Source: </span><a href=$item.source.url>$item.source.text</a><br />
  25:         #end
  26:         <br />
  27:         <span class=description>$item.description</span><br />
  28:         </div>
  29:     </p>
  30:     <br />
  31: #end

Eme 2 szép példából láthatjuk is, hogy a rendszer nagyon egyszerű, nincs sok, bonyolult függvény hívás, a template oldalon pedig a java objecteket érjük el, méghozzá egyszerűsítve!

RSS Push Enterprise Server

Hát ma este nem unatkoztam. Elhatároztam, hogy kihasználom a BlackBerryt és írokegy RSS letöltő,  majd Emailben elküldő servert, azaz az RSS Push Enterprise Server-t 🙂 persze mindezt Javaban, hisz Linux alatt kell működnie, és nem C++ ban akartam szüttyögni az alapok megírásával .. hajjaj Ati elrontasz 🙂

Az egész jól indult, viszonylag gyorsan megírtam az egész alkalmazást, szépen leszedte az RSS-t, csinált belőle levelet, majd a Java Mail segítségével már majdnem el is küldtem. Igen ám, de Windows alatt nincs SMTP serverem. Hát, jaj, mit lehet tenni, juj Google! töltünk le egyet! Azonnal fel Googlera, “Free SMTP server windows”, jött is a találat, a progi neve: Free SMTP server. Több fórumon áradoztak róla, hogy milyen jó!

scrfreesmtp1

Azonnal letölt, elindít … hát volt vele gond. Az első azaz, hogy nem zárta le a kapcsolatot, a Java Mail meg így nem működött.Beállítási lehetőség semmi nincs benne. Második probléma, hogy a 10. mailnél (azaz próbánál!) szólt, hogy hát vele max 10 et lehet 1 nap elküldeni, mert hogy Freeware. Aha, rendben, rohadj meg. Akkor linux install VirtualBoxba … jaj nekem .. nem volt egyszerű az Ubuntu … de felment, update megvolt .. nahh akkor install valami SMTP server … nem volt más, Exim4 viszonylag egyszerű, gondoltam én.

Első kör, VirtualBox hálókártya beállítás. Mivel annak idején úgy tettem fel, hogy nem installáltam  hálózati supportot, először uninstall, majd install, juj lehetett beállítani. Semmi nem volt jó neki, nahh fél óra szarakodás után a Windows végre látta! De az Exim hez nem tudtam csatlakozni, csak az apache hoz. Jól van Exim config, conf, conf … nahh sikerült, hogy látom a portot, ezaz, Java Mail, timeout … mi a szar … jahh hogy azon az ipn nem engedi, ok, engedd, timeout …. jahh hogy 10 sec kell mire észhez tér, CSATLAKOZIK! 550 relay denied … istenem neee … 1 rohadt mailt akarok küldeni saját magamnak … google, exim, mindenki azt írja használjak postfixet, courier-imap al és mysql el … kösz nem … 1 óra kemény szenvedés után végre működött az Exim! azaz csak azt hittem, ugyanis nem engedélyezett emailt küldeni saját magán keresztül, mert egy gonosz hackernek hitt …

Nah itt untam meg ezt a dolgot, gondoltam fordítok 1 jar-t, amit majd felteszek a szerverre, hisz platform független! Nahh megtanultam hogy kell ANT build.xml eketet csinálni. Ez hamar kész lett, feltettem a szerverre a jarokat, majd jött a következő öröm … a java egyszerűen nem töltötte be a jar libeket, akárhogy mondtam neki, egyszerűen nem vett róla tudomást … küszködés megint, meguntam, csináltam 1 jar-t amit végül sikerült elindítani ….

Ezután még 1 órát küzdöttem kb (mondani sem kell a BlackBerry kb 30-40 perces késéssel szedi le a mailjeimet … ennyit az instant mailről ..) de sikerült végre. Leszedi az RSS-t, felolvassa a szép HTML templatet, behelyettesíti az értékeket, majd elküldi a megadott email címre. Már csak az van hátra, hogy tudjam melyik RSS bejegyzés volt utoljára, ne küldjek mindig mindent!

Éljen … éljen …