Tag-Archive for » development «

szerda, november 30th, 2011 | Author:

It is the last day of the month, and I still haven’t finished the game. I have a handful of remaining tasks to make it work, and a few others to make it good. But I don’t really care about the deadline, because for this I have as much time as I want to spend on it.

Anyway, when I have free time – eating, travelling, etc. – I am trying to plan ahead. There is one last large task in my list, here is the broken down step-by-step guide for it:

  1. Validations
    1. Is there anyone playing the game?
      1. Players might be deleted
      2. If 0 players are found, end the game
      3. If 1 players is found, add extra score, end the game
  2. Loading turns
    1. Active turns only – a turn is active as long as no other turn was submitted for the same game from the same player
  3. More validations
    1. Does the player still exist?
    2. “Jump out”s are not included in active
    3. If 0 or 1 actives are present, skip the turn – Turn count is increased, though., so skip to no. 9
  4. Robots acting
    1. Player substitution?
  5. Player positions calculated, “jump out”s are removed from the list
  6. Explosion calculations
    1. coos with bomber player ids
  7. Checking affected players
    1. Effect types:
      1. Self effect: negative score
      2. Other effect: (Can happen in parallel with no. 1)
        1. Score to the bomber
        2. Death to to affected
        3. Affected jumps out until net activity
      3. Store player scores
      4. Recalc high scores
      5. Store movie data
      6. Store turn result data
  8. Mark processed turns as executed in turn X, but keep them active
  9. Check game end criteria:
    1. Turn based: If turn count is >= max turns, close the game
    2. Deathmatch:
      1. If there is only one survivor, close the game, give extra score to survivor, recalc high scores?
      2. 0 survivors: Close the game
  10. Start a new game if needed?

This is about 5 hours worth of work – about three evenings.

Category: Hobbi  | Tags: , ,  | Leave a Comment
szerda, december 15th, 2010 | Author:

Megint olyan munkam van, hogy rengeteget buildelek, ugyhogy szamtalan, programozassal kapcsolatos cikket olvastam el az elmult napokban.

Ime a legszorakoztatobb: http://www.junauza.com/2010/12/top-50-programming-quotes-of-all-time.html

Vicces programozassal kapcsolatos idezetek. A kedvencem:

32. “The evolution of languages: FORTRAN is a non-typed language. C is a weakly typed language. Ada is a strongly typed language. C++ is a strongly hyped language.”

- Ron Sercely 

Category: Szakmai  | Tags: ,  | Leave a Comment
kedd, november 30th, 2010 | Author:

A programozok egyik kedvenc rossz szokasa a copy-paste. Nagyon konnyu vele hibat rakni a kodba, de mivel sokkal egyszerubb, mint ujragondolni es ujragepelni az egeszet, az emberek elnek vele.

Az egyik tipikus eset, amikor en hasznalom, az az, amikor hasonlo feldolgozasi feladatot csinalok ket kulonfele objektumtombre. Pl.


String lastname = null;
for(Tipus peldany : peldanyLista) {
  if(lastname == null) {
    peldany.valamilyenFuggveny();
    lastname = peldany.name();
  } else {
    peldany.masFuggveny(lastname);
    lastname = null;
  }
}

Majd ugyanezt meg akarom csinalni a MasTipusra is, de ott a szintenMas es a megintMas fuggvenyeket fogom hivni, emiatt a generics-es fuggveny sajnos nem megoldas. (ne foglalkozzunk azzal, milyen buta a kod, csak a pelda miatt van itt)
Szoval fogom, atmasolom, atirom benne a dolgokat MasTipusra, es orulok. A problema csak az, hogy mondjuk elfelejtettem kinullazni a lastname ojjektumot, es emiatt a masodik ciklus egesz mashogy fog viselkedni, mint kene.

Azon lusta programozok szamara, akik hozzam hasonloan elnek neha a copy-paste-tel, egy apro otlet: probaljak ilyen esetben a masik kod ele masolni az ujat. Ha a fenti peldaban a lastname ele masoljuk, akkor a lastname hasznalatat serelmezni fogja a fordito, es eszrevesszuk, hogy egy olyan dependenciat iktattunk be, amit nem kellett volna. Ez termeszetesen nem silver bullet, legfeljebb az esetek 20%-ban mukodik, de az se rossz. Persze, erdemes az egeszet kifaktoralni egy sajat fuggvenybe, es akkor meg olvashato is lesz.

Category: Szakmai  | Tags:  | Leave a Comment
péntek, november 05th, 2010 | Author:

A munkam kapcsan most kicsit utana kellett olvasnom az assertion-oknek, es az Oracle-os assert doksiban talaltam egy vicces reszt:

    static {
        boolean assertsEnabled = false;
        assert assertsEnabled = true; // Intentional side effect!!!
        if (!assertsEnabled)
            throw new RuntimeException("Asserts must be enabled!!!");
    }

Zsenialisan 1xu. :)

Category: Szakmai  | Tags: , ,  | Leave a Comment
hétfő, október 04th, 2010 | Author:

Multkor mar meseltem az AI Contest-rol. Most – kulon keresre – irok meg egy kicsit a botomrol, azon apropobol, hogy a tegnap beposztolt botom soha nem latott magaslatokba emelkedett: 371 is volt a rank-je. Ugy tunik, mar lassul a botok evolucioja, de az elso 500 mar annyira durvan eros, hogy kifejezetten munkas dolog oda bejutni. Az, hogy sikerult, nagy elmeny szamomra.
Hogyan is mukodik ez a bot? Az egyik legnagyobb erdekessege, hogy nem tarol allapotot, kiveve azt, hogy eppen hanyadik korben vagyunk. Minden kor elejen a rendelkezesre allo adatok alapjan ujraertekeli a teljes rendszert, es annak megfeleloen dont.
A legelso lepesben vegigfut a sajat bolygoimon, es elemzi a veszely merteket. Az algoritmus egyelore nagyon durva, sokat lehetne meg finomitani rajta, de hozzavetoleg kepes eldonteni, hogy a harom lehetosegbol mi tortenik eppen:

  • Nincs veszely
  • Van veszely, de onerobol meg tudjuk oldani
  • Van veszely es segitseg kell

A kiertekeles utan megvizsgalja, hogy van-e lehetosegunk arra, hogy segitseget kuldjunk ezekre a bolygokra, majd ha ezt lerendezte, elkezdi az offenziv cselekveseket. A korabbi valtozatban egyebkent a bolygok csak magukat vedtek, most mar azonban egymast is, ez az, amit en korabban “aktiv vedelem”-kent aposztrofaltam, mig a legidosebb batyam ki nem talalta ra a nagyon talalo “NATO vedelem” kifejezest. Azota mar a kodban is ezt hasznalom :)
Az offenziv cselekvesekre visszaterve, ebbol is harom fele van (nem azert, mert imadom a harmas szamot, egyszeruen ennyit talaltam):

  • Terjeszkedes
  • Harc
  • Zaklatas

A terjeszkedesi taktika az elejen fontos. Az ellenfellel azonos szamu sereggel, pontosan ugyanolyan poziciobol indulunk a palya egy masik pontjarol, es ebben a fazisban dol el, hogy ki szerez folenyt. A bot ebben a szakaszban nagyon erzekeny a betamadasokra, ugyhogy figyelni kell arra is, hogy a terjeszkedes rovasara ne hagyjuk vedtelenul a fobolygonkat. Erdemes az ellenfel taktikajat figyelnunk: Ha o arra hajt, hogy fuggetlen bolygokat foglaljon, mi is tegyunk igy. Ha bennunket tamad, vedekezzunk, es a folosleggel foglaljunk bolygokat, ha van erre lehetoseg.
Fontos szempont minden fazisban, hogy ha csak el tudjuk kerulni, ne kuldjunk messzire flottakat. Amig ugyanis ezek uton vannak, semmire nem jok, mig ha elfoglalunk veluk egy kozeli bolygot, ott is megkezdodik a termeles.
A terjeszkedesi fazis utan en a harci fazisba lepek. Ez mar arrol szol, hogy a seregek gyujtogetese helyett nekilatok az osszes extra egysegemet kitolni az urbe, a bolygoimon csak egy szukseges minimum vedelmet hagyva. Erre a megoldasra a kozepso batyam a “Mehraj technika” kifejezest hasznalja. Bar a seregek gyujtogetese ad egy extra vedelmi faktort a bolygoknak, a mehraj technika valamivel gyorsabb, mivel az elso seregek lenyegesen hamarabb ernek oda az ellenfelhez. Egyetlen ok miatt mondhatnank, hogy a sereggyujtes esetenkent jobb: kozelre tamadva nagy sereggel az ellenfelnek nincs ideje, hogy vedoseregeket kuldjon a bolygora.
A harmadik fazis, amit en meg senki masnal nem lattam ebben a formaban, az, amit en zaklatasnak hivok. Akkor lepek at ebbe az uzemmodba, amikor mind seregszamban, mind bolygotermelesben erosebb vagyok az ellenfelnel. A lenyege, hogy a bolygotermelesem egy reszet arra forditom, hogy az ellenfel termeleset lefoglaljam, azaz a legjobban termelo bolygoim azonnal tovabbkuldik a termelesuket az ellenfel legjobban termelo bolygoi fele, igy mindkettonk termelese lecsokken. Gondoljuk vegig ennek a hatasat: En rendelkezem mondjuk 30, az ellenfel 25 termelessel. A kulonbseg marginalis, 20%. Azonban, ha 15 termelest arra forditok, hogy az o termelesebol 15-ot levegyek, akkor nekem 15 marad, neki csak 10, azaz mar 50%-kal magasabb a termelesem. A megoldas itt is nagyon durva meg, sokat lehetne finomitani rajta, azonban igy is sok esetben garantalja azt, hogy amint az ellenfellel szemben folenybe kerulok, ott is maradok.
Nagyjabol ennyit kell most tudni rola. A kovetkezo lepesben tovabb finomitom a bolygok veszelyessegenek a felmereset, jo esellyel bevezetem az exposure szamolast, ami azt fogja megmondani, hogy egy bolygo mennyire van kiteve tamasasoknak – es ennek megfeleloen allapitom meg a vedelmi tartalekot. Valoszinuleg finomitok a zaklatasi taktikan is, es meg jobban fel fogom hasznalni a tartalekaimat a tamadasnal vagy a vedekezesnel. A kezdeti szakaszban bevezetem a veszelyeztetettseg figyeleset is.
Ahhoz kepest, hogy miota fejlesztem a botom, meg mindig eleg sok fejlesztesi/hangolasi lepes van. Az utolso beadasi hatarido November vege. Remelem addigra sikerul bejutnom legalabb az elso 200-ba.
Mint a fentiekbol kiderult, a ket batyam is jatszik. A kozepso batyam botja – nem keves munka aran – sokkal jobb, mint az enyem. A legidosebbe meg csak az 1200 koruli tartomanyban cirkal, de ha azt tekintjuk, hogy ez meg csak talan a harmadik vagy negyedik verzioja a botjanak, amit bekuldott, en latok benne fantaziat. Majd tudositok, ha lesz valami..

Category: Hobbi  | Tags: , ,  | Leave a Comment
péntek, szeptember 24th, 2010 | Author:

Harcban

Harcban

Februarban neveztem eloszor a Google AI challengre, amikor Tront jatszo botot kellett irni. Utolag atgondolva a dolgot, az a feladat nem is annyira az AIrol szolt, inkabb a min-max algoritmus ugyes implementalasarol. Ennek megfeleloen nem voltam tulzottan lelkes, amikor a batyam bejelentette, hogy megint van egy AI challenge, de azert megnezegettem, mi a lenyeg iden.
A mostani jatek szinten nagyon egyszeru elso latasra: Vannak bolygok, amik lehetnek a jatekose, az ellenfele, illetve fuggetlenek. Minden bolygon van egy bizonyos szamu hajo, es a jatekos es az ellenfel bolygoi folyamatosan termelik az uj hajokat a merettol fuggo mennyisegben. A bolygokrol el lehet kuldeni flottakat masik bolyogkra, akik vagy megtamadjak azt (ha ellenfel vagy fuggetlen) vagy csatlakoznak hozza (ha sajat).
Tobbfelekeppen lehet nyerni:
1: lenyomod az ellenfelet teljesen, azaz se bolyogja, se eppen repulo flottaja nincs
2: Ha lejar a kor limit (jelenleg 200) es neked tobb hajod van.
3: Ha az ellenfel rossz lepest ad ki, akkor azonnal vesztett, szoval ilyenkor is te nyertel..
Az utobbi ketto mod amugy dontetlent is eredmenyezhet.
Ez a jatek, bar elsore nagyon egyszerunek latszik, valojaban egeszen osszetett taktikakat igenyelhet, es nincs olyan algoritmus, amivel pikk-pakk meg lehetne nyerni.
Peldaul, azonnal kikuldesz minden hajot, vagy nehany koronkent egy nagyobb flottat? Mennyit tartasz a bolygokon? Figyeled-e az ellenfel mozgasat, vagy csak azzal foglalkozol, hogy te mit akarsz csinalni? A fuggetleneket tamadod, vagy az ellenfelet?
Az en elso botom annyira egyszeru volt, mint egy bot (pun intended). Egy bolygorol kuldtem ki hajokat, az osszes tobbi csak erre a bolygora kuldott minden termelest, meghagyva mindig a bolygon kb. 40 hajot. A “fo” bolygo meg kivalasztott a palyarol egy nagy bolygot, aztan odakuldott mindent, amig el nem foglalta. Biztos vannak olyan botok, akiket ezzel a taktikaval meg lehet verni, de nagyon hamar rajottem, hogy a hajoim folosleges utaztatasa eleg folosleges, inkabb minden bolygorol azonnal el kene kuldeni a termelest a celbolygora.
Innen indultam. Mostanra a kod sokszorosan bonyolultabb, a jatek allasatol fuggoen valtoztatja a taktikajat a bot, a bolygok figyelik, hogy tamadjak-e oket, es ha igen, akkor vedekeznek, etc. Nagyon tetszik a kihivas, rengeteget gondolkozom azon, hogy lehetne fejleszteni a taktikat meg, es nezem a meccseimet, hogy hogyan nyertem vagy miert vesztettem.
Akit erdekel, megnezheti az aktualis botom meccseit itt: Moonson

Egy tovabbi elonye a mostani versenynek, hogy ugy gondoltam, most a valtozatossag kedveert nem Javaban, hanem Pyhonban fogom a botom kesziteni. Korabban a python nyelvvel csak futolag talalkoztam, atolvastam egy konyvet, meg szuttyogtem kicsit a konzolon, de semmi komolyat nem alkottam benne. Ehhez kepest most egy csomo dolgot fel kellett hasznalom, amirol eddig csak halvany elkepzelesem volt, hogy jobb, okosabb, hatekonyabb kodot irjak.
Vicces, mennyire alkalmasak ezek a versenyek a programozas elsajatitasara. A kezdocsomagban kapsz egy kicsi programot, amit kedvedre modosithatsz. Kezdheted egy passziv bottal: semmi mas parancsot nem ad ki, csak a kor veget. Aztan mondjuk fogod a bolygok listajat, kivalasztasz egyet, es odakuldesz 50 hajot. Megnezed, hogy mi tortenik. Aztan tovabb, tovabb, mig a vegen mar lambdakkal es list comprehensionnel dobalozol, hogy egy sorban legyen meg az ellenfel ot legjobb bolygojanak a listaja.
Minden ismerosomnek nagyon ajanlom, aki erdeklodik a programozas irant. Jo kis ujjgyakorlat, kellemes kihivas, es bar gyozni szinte lehetetlen (nagyon okos csavok is jatszanak am) nagyon jo latni, amikor a botod nyer egy harcot. :)

péntek, szeptember 17th, 2010 | Author:

Egy ideig nem írtam most. Ennek két oka volt: a költözés és a Google AI Challenge
Szombaton áköltöztünk. Három óra volt a cuccokat levinni a kocsihoz, átfuvarozni és felvinni az új lakásba, aztán kezdődött az otthoni pakolás. Estére sikerült a hálószobát olyanná varázsolni, hogy tudjunk benne aludni, és előszedni a legfontosabb dolgokat a mindennapos élethez. Másnap összeraktunk egy csomó bútort, pakoltunk, takarítottunk. Harmadnap visszamentünk a régi lakásba, ott is kitakarítottunk és összeszedtünk mindent, ami még ott maradt. Így telt el a hétvége, de gyakorlatilag azóta is folyamatosan dolgozunk a lakáson, illetve a költözéssel kapcsolatos problémákon, mint a parkolási engedély vásárlása, illetve a cím átíratása mindenhol. Már csak egy szobában vannak dobozok, zsákok és szétszedett bútorok, ami egészen kényelmes. Az is nagyon jó amúgy, hogy 25 percre van a hely a munkahelytől, az eddigi 1 óra fölötti bejáráshoz képest.
Az AI challenge érdekesen indult. A legutóbbi esemény óta nem voltam olyan nagyon lelkes, hogy megint résztvegyek, de a bátyáim beszélgetése alapján úgy gondoltam, ez érdekesebb lehet. Így aztán elkezdtem beleásni magam a problémába, és teljesen magával ragadott a probléma. Fogok írni majd egy másik blogbejegyzést is róla, mert érdekes dolgokat találtunk ki.

Category: Hobbi, Személyes  | Tags: , ,  | Leave a Comment
csütörtök, szeptember 02nd, 2010 | Author:

Az iPhone-Android háborúban mindeddig semleges voltam, ma azonban megjött a céges Desire (na jó, ez az én döntésem, választhattam volna iPhone-t is) úh. kvázi elköteleztem magam az Android mellett. Persze ez nem jelenti azt, hogy utálnám az iPhone-t. Épp ellenkezőleg, nagyon jó telefonnak tartom (bár még soha nem volt) és nagyon örülök, hogy oligopol piaci verseny van, mert az szerintem nagyon jót tesz a termékeknek, de a cégek se járnak rosszul.

Mindenesetre, neki fogok állni megtanulni az androidos fejlesztést.

péntek, augusztus 13th, 2010 | Author:

Minap hallottam pár informatikust beszélgetni az utcán. Az egyik mondott egy olyan mondatot, amivel csodálatosan le lehet írni egy csomó régi projektet:
“Persze ezt a változtatást alaposan le kell tesztelni. Hálistennek ott van az az állandó tesztrendszerünk, amit élesnek hívunk…”

Azért ez egyre ritkább. Jó irányba halad a szakma.

Category: Szakmai  | Tags:  | One Comment
csütörtök, július 29th, 2010 | Author:

Ma egy nagyon erdekes, gyakorlatilag elkerulhetetlen hibaba futottam bele. Persze, elkerulheto, de ahhoz mar paranoiasnak kell lenni.

A lenyeg: harom, egymastol fuggetlen resz osszejatszasabol adodott a dolog:

  • Van egy checkbox, amit alapbol ugy hozunk letre, hogy be van kattintva
  • Van egy vizsgalat a kodban, ami megnezi, hogy a checkbox be van-e kattintva, es ha igen, kigyomlal par elemet a listabol
  • Es van egy olyan kepernyo, ahol ezt a checkboxot elrejtjuk

Az eredmeny: azon a kepernyon a listaban nem jelenik meg par elem.

Egy ilyen hibaba nagyon konnyu belefutni. Ha latjuk a harom dolgot egyszerre, akkor konnyu kiszurni, hogy hol a hiba a logikai lancban, de ha pl. az egyik programozo megcsinalja az elso ket dolgot, majd nehany honappal kesobb egy masik programozo egy hibajavitas alkalmaval beleteszi a kodba a harmadik reszt, akkor maris kesz a hiba, pedig kulonosebben nagyot senki nem vetett. Azt pedig szerintem lehetetlen elvarni, hogy egy fejleszto vagja az egesz kodot – meg ha az is lenne az idealis eset.

Mindenesetre a tanulsag: Ha egy feluleti elemet vizsgalsz, ne felejtsd el megnezni, hogy egyaltalan lathato-e az elem. Mert ha nem, akkor konnyen belefuthatsz hasonlo hibakba.

Category: Szakmai  | Tags: ,  | Leave a Comment