RSS Feed LinkedIn Google Plus
  1. 2012. december 15. szombat

    Kérlek, mondd el röviden, mit csinál az alábbi CoffeeScript kód!

    uglyStep = (arr) ->
        res = []
        arr.forEach (a) ->
            count = 0
            arr.forEach (b) ->
                count += 1 if \
                    Math.abs(a.x - b.x) <= 1 and \
                    Math.abs(a.y - b.y) <= 1 and \
                    (a.x != b.x or a.y != b.y)
            res.push(a) if 2 <= count <= 3
        arr.forEach (a) ->
            for i in [-1..1]
                for j in [-1..1]
                    live1 = arr.some (cell) ->
                        (cell.x == a.x + i and cell.y == a.y + j)
                    live2 = res.some (cell) ->
                        (cell.x == a.x + i and cell.y == a.y + j)
                    unless live1 or live2
                        current = {x: a.x + i, y: a.y + j}
                        count = 0
                        arr.forEach (b) ->
                            count += 1 if \
                                Math.abs(current.x - b.x) <= 1 and \
                                Math.abs(current.y - b.y) <= 1
                        res.push(current) if count == 3
        res

    Ha a válaszban olyan szavak szerepelnek, hogy „végimenve”, „megnézzük”, „hogyha egyenlő”, az mutatja a problémát. A kódnak önmagában érthetőnek és világosnak, vagyis öndokumentált jellegűnek kell lennie. Viszont dokumentációban és a tesztekben azt írjuk le, hogy mit csinálunk, nem azt, hogy hogyan. (more…)


  2. 2012. december 14. péntek

    A halogatott reménység beteggé teszi a szívet,
    de a megadatott kívánság életnek fája.

    Nagy érték, ha a munkavállaló lehet őszinte és tud őszinte lenni, ugyanis ilyenkor lehet viszonyulni ahhoz, aki ő valójában. Ha őszintén, negatív következmények nélkül elmondhatja azt, ami foglalkoztatja, akkor van esély rá, hogy közös nevezőre tudjunk jutni, és még ha nincs is lehetőségünk megadni neki, amit szívünk szerint megtennénk, akkor is átélheti a „megértettek engem” érzést, és ilyenkor gyakran kiderül, hogy a helyzet nem is olyan súlyos…

    Fura lény az ember, néha olyan apróságokon tudnak nagy dolgok múlni. Lehet, például, hogy valakinek az a szíve vágya, hogy el tudjon menni egy szomszédos országba egy szakmai konferenciára. Lehet, hogy valakinek hiányzik a céges kávé. Lehet, hogy egyszerűen csak egy új egérre vágyik, vagy szeretné kipróbálni magát egy új szituációban. Ha  gyűlik benne a frusztráció, egyszer csak besokall. Viszont ha megkapja amire vágyik, az igen nagy mértékű inspirációt tud jelenteni, amitől a munkateljesítménye is jelentősen jobb lesz. Nem is a konkrét érték miatt, hanem mert érzi, hogy embernek nézték, hogy fontos, hogy megkapta azt, amire szüksége van. És ez lehet, hogy csak annyi, hogy amikor reggel bejön a főnök, köszönjön oda neki is. Elmondhatja, ha zavarja ennek a hiánya? Vagy retorziótól kell tartania? De erre a munkavállalónak is törekednie kell, hiszen a vezetőség sem gondolatolvasó, nem fogja tudni magától kitalálni, mi van benne. Ha a hajlandóság megvan, segíteni kell őket abban, hogy ő speciel mivel motiválható.

    Továbbra sem változott meg a véleményem, a munkavállalónak az a dolga, hogy hasznot hozzon a cég számára, mondhatnám, a dolgozó van a cégért, és nem a cég a dolgozóért, a főnök nem tartozik a beosztottnak azzal, hogy megfelelően motiválja. De mégis jó, ha így teszünk, mert ha sikerül a szíve szerint viszonyulni hozzá, akkor nagyon ragaszkodni fog hozzánk. Ahogyan Csudi mondta: „Csendben megjegyzem, hogy vannak cégek, ahonnan nem lehet embert elhozni, semennyi pénzzel sem. Sőt, pénzzel általában nem lehet.” Ez pedig mind a két fél számára előny, mert van egy jó munkaerőnk, aki szintén jól érzi magát nálunk. (Az is igaz, hogy ha valakinek semmi nem jó, annak semmi nem jó, felesleges lyukas vödörbe vizet öntenünk, de ezt egyénileg kell elbírálni.)


  3. 2012. december 8. szombat

    A Budapest.JS meetup oldalán parázs vita keletkezett egy álláshirdetés kapcsán, hadd osszak meg néhány részletet Csudi válaszából. Nagyon jó gondolatok. Eleinte én is meglehetősen távolságtartóan kezeltem a fejvadász-munkaközvetítő társaságot, de be kellett látnom, hogy vannak közöttük felkészültek, és nagyon sokat segíthetnek egy tapasztalatlan, de nagy ambíciókkal rendelkező cégvezető vagy HR-es személynek, persze, ehhez az egyik oldalon hajlandóság a másik oldalon szakértelem kell. (A kimelések tőle vannak.)

    Felnőtteket akarsz felvenni, ezért kezeld a jelölteket felnőttnek. Ne azt nyomjad ezer sorban, hogy mit vársz el, és mi az, ami jobb, ha van, de jó, ha nincs, hanem azt nyomasd legalább 15 (!) sorban, igen (!), hogy mit kell csinálni.

    A fentiek alapján aki a feladatot érdekesnek találja, máris félig motivált lesz, ez kb. 1500%-ot nyom a megfelelési indexen.

    És igen, valaki már írta, a célközönséged jelen esetben a JS meetup látogatói – ezek az emberek már eleve eléggé tudatos lények, hidd el! :) Illetve, mint kezdő cég, biztos, hogy baj, ha egy kezdő, de tehetséges ember esetleg be tud esni, aki, igen, nálad tanulja ki a szakma csínját-bínját, és nem fogom tudni majd elfejvadászni, mert állati jól motiválod? (Csendben megjegyzem, hogy vannak cégek, ahonnan nem lehet embert elhozni, semennyi pénzzel sem. Sőt, pénzzel általában nem lehet.) (more…)


  4. Hű, nagyon jó volt! A teszt vezérelt fejlesztés már rutinosan ment, így tudtunk a feladatra koncentrálni, és nagyon élveztem a páros programozást. :) Kódoltam C++-ban is (eleinte csak néztem, ahogy a társam kódol, de aztán fokozatosan felelevenedtek az emlékek). Jó partnereim voltak, és mivel minden egyes sessionban elölről kellet kezdeni a kód írást, nem mentem bele hitvitákba: ha a társam kötötte az ebet a karóhoz, ám legyen, egy sessiont kibírunk, és levonjuk belőle a tanulságot. (Igaz, az első sessionban én is egy rossz statégia mellett kardoskodtam.) (more…)


  5. 2012. november 25. vasárnap

    Fontos, hogy ne egy legyél a sok között, hanem az az egy a sok között – akire szüksége van a cégnek!

    Dr. Horváth Róbert CV-je nekem is nagyon tetszett, éppen azért, amit ő is írt:

    Egy vezérigazgató (ahol angolul kellett interjúznom) kiemelte, hogy mennyire jól struktúrált és tagolt: ránéz és egyből látja azt, amire kíváncsi.

    Láttam már pár amúgy jól kinéző, de funkcionálisan katasztrófa önéletrajzot, ezt viszont jó eltenni emlékben, ha később szükségem lesz rá.

    Gora Gyöngy önéletrajza szintén könnyen átlátható, ezzel együtt esztétikus megjelenésű volt, de az már nem érhető el publikusan a weben.


  6. 2012. november 24. szombat

    Nem vehető komolyan az a programozó, aki számára idegen az angol nyelv használata mind önmaga kifejezésében, mind mások megértésében.

    Vallom ezt én, aki nem hogy az előadást, de még kérdés feltevését sem vállaltam be sokszor, ha az adott meetup nyelve nem magyar volt, nem is beszélve a nagyobb konferenciákról. Úgy tűnik, az elmélet és a gyakorlat külön utakon jár, az álmok elszakadtak a valóságtól… pedig, mint azt a jó munkaerőről szóló bejegyzésemben is idéztem, teljesen egyet tudok érteni Végh Józseffel:

    Akkor válik egységessé egy személyiség, ha véghez is viszi, amit tart és állít saját magáról.

    Én azonban nem kívánok meghasonulni önmagammal, tehát két út áll előttem: vagy a magamról alkotott képet alakítom a valósághoz, vagy a valóságot az álmaimhoz.

    Jelentem, ez utóbbi mellett döntöttem. Régi elmaradásomat pótolva 2013. június elsején el fog indulni az angol nyelvű honlapom, és 2013. nyarán meg fogom tartani az első angol nyelvű előadást valamelyik magyarországi meetupon.

    A cél adott.


  7. 2012. november 19. hétfő

    A novemberi PalinQA meetup oldalán hangzott el a következő beszélgetés:

    Résztvevő: Ha addig nem találják föl a teleportálást, késni fogok minden jel szerint. Tervezi-e valaki esetleg (kép és/vagy hang) felvétel készítését?

    Szervező: Ha valaki tud hozni kamerát, tök jó. De a meetupon az ott lét fontos.

    A VCC-től négyen jöttünk, a házigazda is örült a részvételünknek, feldobtuk az eseményt azzal, hogy aktívak voltunk, sokat kérdeztünk. Igen, a meetupon az ott lét a fontos, de nem csak fizikailag. Egy-egy ilyen találkozó nagyon fel tudja lelkesíteni az erre nyitott embert, inspirációt tud adni, nagyon jó az ilyen diskurzusok. A legrosszabb, ami történhet, ha passzív a közönség, vagy nem jön el. Legjobb, ha ott van és kérdez, véleményt mond…

    Jellemző, a mostani meetupon négy emberrel folytattam hosszabb eszmecserét: Horák Hajnalka és Csepeli Noémi előadóval, az Kamarás Károly event host-tal és Szabó Judit Annával, aki a helyszínt biztosító házigazdával. Miért? Egyrészt mert nem volt több időm, másrészt, mert tipikusan őket lehet leszólítani, megvan a közös téma. Vannak, akik eljönnek, elmennek, és mintha ott sem lettek volna (én is voltam így). Az illetőre nézve ennek is van haszna, de sokkal többet tud profitálni az, aki aktív: ha van véleménye, azt lehet támogatni, cáfolni, csatlakozni hozzá, vagy vitázni egy jót a szünetben – nem kell, hogy egyetértsünk, de egy kulturált, érveket ütköztető beszélgetés akkor is segíthet kiemelkedni a napi rutin okozta automatikus fásulási folyamatból, ha az adott problémát más-másképpen látjuk megoldhatónak.

    Egy ilyen meetupon sok új arccal lehet találkozni, van olyan, azért marad meg, mert nagyon tetszettek a válaszai, van, akit azért, mert egy idő után már bár ne szólalt volna meg… Itt lehet szakmai kapcsolatokat építeni, és ki tudja, hátha később sikerül majd valakit elcsábítani a jelenlegi munkahelyéről… Szívesen elbeszélgetek a házigazdákkal is, ez alkalommal a Randstad-nál voltunk, és különösen örültem, hogy Szabó Judit Annával volt lehetőségen egy hosszabb szóváltásra: elmondtam, milyen rémhíreket hallottam úgy általában a fejvadász cégekről, és korrekt válaszokat kaptam a felmerülő kérdésekre. Szerintem egy cég igenis tud profitálni abból, ha támogat egyes kezdeményezéseket, mert sokat nyom a latba, ha esetleg láthatjuk az irodát, találkozhatunk – nem felvételi körülmények között – azokkal, akikkel együtt dolgoznánk, látjuk, hogy lelkesek, szakmailag kiválók… Nem, ha valakinek szám adatok kellenek, rövid távon nem éri meg, és az is visszataszító tud lenni, ha egy cég egyik kezével ad, a másikat pedig rögtön elvenni akar. Másrészről azonban a meetupokon igenis helye van a reklámnak, hiszen akármennyire is az ott lét a fontos, a közösség nem fog összejönni, ha nincs helyszín, vagy nincs előadó, vagy nincs, aki megszervezze…

    A novemberi PalinQA meetup-pal kapcsolatban szeretnék ez úton is köszönönetet mondani a Randtsadnak, a LogMeInnek és a Prezinek.


  8. 2012. november 17. szombat

    Legacy kód az, amihez nincsenek tesztek.

    Ma volt a magyarországi első Legacy Code Retreat Day, melynek során a megörökölt – specifikáció és leírás nélküli, kissé hibásan működő, a spagetti elvet szem előtt tartva készült – kódot kellett először is megértenünk, majd javítanunk és újabb funkcionalitással ellátnunk. Az elmélet nagyon egyszerű:

    • a kód átláthatatlan és érthetetlen, nem is tudjuk mit csinál
    • először is megértjük – szükség esetén eközben készítünk megértési refaktorálásokat, amiket később visszavonunk (!)
    • generálunk egy end-to-end tesztet, hogy a jelenlegi funkcionalitást semmiképpen se rontsuk el
    • a kódot elkezdjük kijavítani, hogy karbantartható legyen, eközben a funkcionalitást egyre jobban unit tesztekkel fedjük le, mindezt megtámogatva a generált e2e teszttel
    • ahogy halad az idő, az open closed szemléletet igyekszünk érvényesíteni: a kódunk legyen nyitott a bővítésre, de zárt a módosításra, vagyis az új funkcionalitás megvalósítása esetén új dolgokat kelljen hozzáadni, ne a régit módosítani
    • és így tovább…

    Sajnálatosan azonban a jelenlevőknél legtöbb esetben működtek a régi reflexek: itt a kód, itt az elvárt módosítás, no gyorsan javítsuk ki, és kész. Ja, hogy nem biztos, hogy jó lett? Hogy a javítás esetleg egy másik részt elronthat… És mégis sok esetben inkább nekiálltunk hack-elni…

    Többünk tapasztalata szerint az elkészült tesztekkel exponenciálisan nőtt a fejlesztői magabiztosság, hiszen már tudtam mit csinál, és azt is tudtam, hogy ha változtatok és a tesztek jók, akkor rendben van.

    Számomra a nagy ötlet az volt, hogy az elején (rögzítve a random számokat) generáltunk egy elvárt input-output, ami az esetek túlnyomó részét lefedte, így ezt ellenőrző pontként felhasználva el tudtuk kezdeni egyáltalán fejleszthetővé és karbantarthatóvá tenni a kódot.

    Hallottam kollegákat áradozni a páros programozásról, nekem eddig egyáltalán nem voltak jó tapasztalataim e téren, és sajnos ez a nap sem hozott radikális fordulatot. Nem volt rossz, de ott volt az érzés, hogy egyedül lehet, hogy jobban haladtam volna.

    A helyszínt és az ételt-italt (beleértve az ebédet) az emarsys biztosította, az elején tartottak egy rövid bemutatkozást, és az iroda is nagyon szép volt. A web konferencián beszéltem még Merklik Lászlóval, náluk a TDD mindennapos gyakorlat, ezért is támogatták a rendezvényt, és örülnek, hogy vannak lelkes, szombatjukat is rászánó fejlesztők Magyarországon. Köszönet a szervezőknek (Devill és Athos)!


  9. 2012. augusztus 27. hétfő

    Luke Wroblewski videójában az érintésérzékeny felületekre való tervezésről értekezik. A negyed órás videó sok mondanivalót tartalmaz, a lényeget szeretném összefoglalni.

    Egérrel sokkal pontosabban tudunk pozícionálni, mint újjal, ezért az érintésérzékeny felületekre másfajta elrendezés szükséges. A Microsoft ajánlása szerint egy elem érinthető (touchable), ha minimum 23×23 pixel (6mm) méretű, de rendesen használható (touch-enabled) akkor lesz, ha a minimális mérete 40×40 pixel (10mm), az egyes elemek közötti távolság minimum 5 pixel (2mm) kell, hogy legyen.

    Hasonlóan a mobil vs. asztali tervezéshez, itt is felmerül, hogy elsődlegesen billentyűzetre + egérre vagy érintésérzékeny felületekre tervezzünk. Egérre tervezett program esetén egyszerűen tegyük a meglévő vezérlőinket rendesen használhatóvá, így már működni fog, de nem lesz optimális. Érintésérzékeny felületeken lehetőleg kerülni kell a különféle UI elemek használatát, például ha a következő fotót szeretnénk megnézni, akkor ne gombra kelljen kattintani, hanem elég legyen „elhúzni”. Hasonlóan a régen megszokott szöveg-orientált űrlap kitöltés helyett célszerű átgondolni, hogyan lehet megoldani, hogy lehetőseg szerint a felhasználónak minél kevesebbszer kelljen a virtuális billentyűzetet segítségül hívnia. Boldogabb lesz, ha néhány egyszerű mozdulattal meg tudja oldani, amit akar.

    A nagy méretű elemek könnyen használhatóak érintésérzékeny felületeken, és egérrel is, míg az egérre optimalizált változattal újjal alig-alig lehet boldogulni. Fontos figyelembe venni, hogy a termékünket várhatóan milyen eszközön fogják használni, hiszen a képernyő egyes részeit könnyen, másokat pedig nehezebben lehet megközelíteni (például két kézzel tartott tableten felül középen nehezen elérhető bármelyik hüvelykújjal).

    A témával kapcsolatos további olvasnivalók:

     


  10. 2012. augusztus 23. csütörtök

    A Goodfilms az oldalának a mobilra szánt verzióját AngularJS-sel valósította meg. Megfelelő tervezéssel és kis odafigyeléssel az így készült oldalak jól tesztelhetőek unit és end-to-end szintent is, támogatja a lokalizációt, és ami fontos, világosan elkülönülnek a különböző rétegek: controller, model, view, service…

    Once we found Angular we stopped looking at alternatives – even after the first few experiments we found it to be way out in front in the client-side framework arms race.

    Ahhoz, hogy mobil eszközön intuitív felületű alkalmazást tudjunk építeni, az asztali böngészőknél megszokott egerészős megközelítés nem elégséges.