Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Sk8erPeter
    nagyúr

    a valódi kérdés nem az, hogy szerinted vagy szerintem mi a junior, hanem az, hogy aki majd megkérdezi, szerinte mi a junior :P

    szerintem a junior az, akinek adott fejlesztés alatt álló szoftver esetén megmondják, hogy mi a konkrét feladata (írd meg ezt a 32 darab getter/settert) és azt végre tudja hajtani. a következő lépés, amikor már nem csak konkrét feladatokat tud elvégezni, hanem bizonyos fokig önállóan képes fejleszteni a programot, általánosabb feladatmegfogalmazásokat is képes megoldani (csinálni kell egy authentikációs modult, kb. így meg így működjön, ezek a paraméterek, stb.). ez a közepesen átsült szték vagy medium vagy mi... :)

    szerintem nem az a junior, akit egyáltalán nem lehet használni a fejlesztéshez, csak betanul.

    "a valódi kérdés nem az, hogy szerinted vagy szerintem mi a junior, hanem az, hogy aki majd megkérdezi, szerinte mi a junior :P"
    Ez pont így van. :)

    "szerintem nem az a junior, akit egyáltalán nem lehet használni a fejlesztéshez, csak betanul."
    Én sem ezt írtam, sőt, abszolút nem is gondolom így. Azt írtam, hogy az általad említettek mindegyike viszont nem feltétlenül várható el egy juniortól, illetve hogy kiegészítsem, ezek olyan dolgok, amikbe simán bele lehet tanulni menetközben, ha jól vág az esze a juniornak, és nem ez fogja eldönteni, hogy mennyire jó fejlesztő, hogy van-e ezekben jártassága. Ha meg nem jó az esze, és csak robotkóder, akkor meg úgyis tök mindegy. :D

  • Sk8erPeter
    nagyúr

    te kínálati oldalról nézed, az nng meg keresleti oldalról fogja nézni.
    ahhoz, hogy egyetlen elgépelést ki tudjon javítani egy kommentben, ahhoz kell netbeans, verziókezelő, maven ismeret. ahhoz, hogy readonly módon elkezdhesse érdemben tanulmányozni a kódot, ahhoz kell full java meg ee ismeret is.

    interjúra egyébként nem árt alaposan átnézni a portáljukat is, meg utánanézni, hogy mi az a connected autó és gps. az állás jó eséllyel a portál mögötti cuccok fejlesztése (ami nem csak a portálmotort és a webshop fejlesztése, hanem egy rakás más cucc is).

    "továbbá rendesen tudni kell az enterprise java beans cuccokat, mavent, antot [...] webservice-k távoli hívását, ldap kezelést jávából [...] clusterezett glassfish-t"
    Szerintem ezek kiesnek a "junior" fejlesztőtől elvárhatóak köréből, legalábbis normális esetben - ezekkel együtt már inkább "medior" lehetne, vagy mi a búbánatnak szokták ilyenkor hívni. Enterprise JavaBeans cuccok szerintem végképp nem várhatóak el juniortól, akkor inkább hagyják el a "junior" szócskát az állásajánlatból.

    Azt tartanám én is normálisnak, ha valóban juniort keresnek, amiket Aethelstone kolléga is írt, hogy látsszon, hogy rendesen vágja a Java-alapokat, és van esze a tanuláshoz, tehát összességében egy jó befektetésnek tűnik, aki hosszabb távon behozza az "árát" (amibe a tanulása kerül, tehát hogy lassabb, eleinte kevésbé produktív, de nyilván kevesebb is a fizetése, mint egy régebb óta a cégnél dolgozó emberkének).

  • Sk8erPeter
    nagyúr

    Üdv!

    A segítségeteket szeretném kérni a NetBeans fejlesztő környezet kapcsán.
    Én úgy szeretném ott futtatni a programjaimat, hogy fogom a Java fájlt amit előtte Notepad++ ba vagy jegyzettömbben írtam, és egyszerűen, csak ráhúzom a a NetBeans felületére, ez eddig menni is szokott, meg is nyitja szépen, de futtatni nem tudom. És nem tudok, rájönni, hogy miért.
    Van esetleg ötletetek, hogy miért?

    Üdv:

    Zoli

    Mert projektet kell létrehozni, és annak részeként fordítani+futtatni (ez így szokott lenni az IDE-knél).

  • Sk8erPeter
    nagyúr

    Igen, ez totál egyértelmű dolog. Nem szimpatikus hogy a Java programozók ennyire el vannak kényelmesedve. Javaslom az áttekintést a C++ fórumba. Ott napokig megy a vita azon is, hogy egy pre vagy poszt inkrement jelent-e nagyobb overhead-et. Valahogy így kellene hozzáállni, hogy idővel valaki seniornak mondhassa magát. :K

    Egyetértek, szerintem is. Mondjuk ezt már kezdőként is kéne erőltetni. Ráadásul itt sokszor nem is kis overheadről van szó, sokszor látok olyasmit is leírva, hogy mondjuk 4 ismétlődő metódushívás történik láncolva háromszor egymás alatt, különböző sorokban (ergo ez már 12-szeri beleugrás a metódusba), vagy hogy adott, hosszabbra sikerült metódus törzsén belül lazán le van írva vagy 10-szer, hogy getValami(), miközben az pontosan ugyanazt a referenciát/értéket adja vissza. Ilyenkor az a magyarázat szokott jönni, hogy há' de az nem számít, mit kell itt ilyeneken pörögni, meg takarékoskodni, kit érdekel, stb., pedig ezek az overheadek olyan szépen egymásra tudnak épülni, hogy rossz nézni a végeredményt (nem beszélve arról, amit említettem, hogy ez zsigeri szintű igénytelenséghez vezet hosszú távon). Magasszintű nyelveknél sajnos elég elterjedt szokás magasról lefosni a mikrooptimalizációt.
    De van, aki nem hajlandó befogadni ezt. :(

  • Sk8erPeter
    nagyúr

    Eclipse debuggere? :D Ne vicceljünk már! :) Idea!

    Amikor a céges környezet, és/vagy konkrétan Eclipse-re épülő UI* miatt Eclipse-hez vagy kötve, akkor nem fogsz Ideát használni.

    *: vágod, van ilyen lehetőség, hogy az Eclipse modularitását kihasználva, saját plugineket készítve lehet az Eclipse API-t kihasználva készíteni arra épülő alkalmazásokat. Maga az Eclipse, mint fejlesztőkörnyezet, nem meglepő módon ugyanerre épít.

    Egyébként szerintem is fasza az Idea, de a munka nem mindig úgy van, hogy azt használsz, ami neked tetszik. :D

    (#8007) M_AND_Ms:
    És akkor, amikor rácsodálkoztál, azt reagálta, hogy ő mindig hibátlan kódot ír, és a kollégái is? :DDD
    Amúgy ez elég durva, gondolom akkor ha mégis valahol hibát fedez fel, kiírogatással próbál szerencsétlenkedni, vagy fogalmam sincs, de azért ugye az ilyenek is az átlagnál magasabb fizetéssel elég jól elvannak, miközben finoman szólva nem emelik a szakma színvonalát...

    (#8011) ToMmY_hun:
    Köszi, végre nem csak én képviselem ilyen határozottan ezt az álláspontot. :D

  • Sk8erPeter
    nagyúr

    Ez igaz, de sok esetben nincs veszélye. Tipikus példa a konténer(DTO) jellegű osztályok.
    Ha egymásba vannak ágyazva és engem csak egy érték érdekel, mondjuk

    myDTO.getSzamlak().getTetelek(0).getValue();

    Itt ugye lehetne, hogy a getTetelek(0) esetén egy Tetel objektumot kvázi kiemelek és a getValue() metódust ezen hívogatom a jövőben, amennyiben többször is szükségem van az értékére. Vagy a fent írt sort idézgetem annyiszor, amennyiszer szükségem van rá.

    Teljesítmény szempontjából semmiféle hátránya nincs, ha nem emelem ki, viszont megspórolok egy plusz objektumhivatkozást. Nyilván ha egy metódust drága hívogatni, akkor kiemelem, de pusztán annyit próbálok én is már ezer+1 hozzászóláson keresztül magyarázni, hogy a láncban hívás alapvetően lehet jó is. Feladatfüggő.
    Nyilván ha nem tudom, hogy pontosan mit csinál a lánc, akkor tartózkodom a használatától, de ismétlem önmagam, a láncolt hívások alapvetően nem az ördögtől valóak és csak azért, mert nemteccik, nem kell elvetni a használatát.

    Law of Demeter, ha nem akarja egy objektum, hogy ilyen módon hívogassam a metódusait, akkor szervezze már úgy, hogy ne férjek hozzá, ha meg nem szervezi úgy és public, akkor miért ne használjam?

    Ennyi. Zárom.

    Viszont gyorsabbá teszi a debuggolást, ha változóba van kirakva, amikor odateszed a breakpöttyöt. :DDD (Már szinte várom előre is a "dehülyevagy-hádeménemdebuggolsz rendesen, az Expressions fület használva, meg mé' nem használod a Ctrl+Shift+D-t Eclipse-ben, a megfelelő kifejezést kijelölve", meg hasonló okosságokat. :DDD)

  • Sk8erPeter
    nagyúr

    Megsérteni nem akarlak, ezért inkább azt választom, hogy nem értem, hogy miről vakerálsz :) Persze, nyilván van még opció, de mint említettem, nem akarlak megsérteni :) Peace :)

    Nem tudom, mire célozgatsz, de ha még mindig tényleg nem érted, én sem akarlak megsérteni, de próbáld meg talán értően elolvasni még egyszer, amire reagálgatsz már egy ideje, hogy eljuss odáig, ahova a többiek már jól láthatóan eljutottak... ;]
    De most tényleg, nem tudom, mit nem lehet felfogni azon, hogy a metódusok visszatérési értékét tároljuk már el a bánatba nyomorult változókba, és ne hívogassuk már ugyanazokat a fostos metódusokat újból és újból az eltárolt visszatérési érték felhasználása helyett.

  • Sk8erPeter
    nagyúr

    Azért írtam, mert metódusok hívogatása láncban nem az ördög műve. Annyira nem, hogy pattern is épül rá, amit buildernek hívnak. Erre gondoltam.

    Most kicsit nehéz eldönteni, hogy tényleg nem érted, miről vakerászok, vagy csak szívatsz. :DDD

  • Sk8erPeter
    nagyúr

    Pffff....nem a megnevezésen volt a hangsúly.

    Tényleg nem, de érted, nem attól lesz builder pattern egy kód, hogy láncolva hívogatsz metódusokat (ahogy a kolléga is írta). :) Igazából a lényege a példának itt a felesleges "önismétlés" hibájába esés volt, hogy bizonyos - "menetközben" nem változó értéket visszaadó - metódusok visszatérési értékét akár el is tárolhatnánk, hogy spóroljunk némi overheadet, de nem tesszük, mer' nem tom mé'.

  • Sk8erPeter
    nagyúr

    No, mint kiderült, Eclipse bugról van szó:
    https://bugs.eclipse.org/bugs/show_bug.cgi?id=340488
    Konkrétan a CheckboxTreeViewer rosszul működik sok elemnél az SWT.VIRTUAL flag+ILazyTreeContentProvider használata esetén, és ami rosszabb, StackOverflowErrorhoz vezet, csak hogy örüljön a zzember. 2011-ben reportolt bug, csodás, hogy azóta nincs javítva.

    A példakód a sima TreeViewerrel jól működik, amint az ember átírja CheckboxTreeViewerre, StackOverflowErrorral hálálja meg.

    Most jutott eszembe, hogy elfelejtettem megírni, hogy erre sikerült megtalálni a megoldást, hátha valakinek kell, ha a példában a TreeViewert szeretnénk lecserélni CheckboxTreeViewerre, és azt szeretnénk, hogy még működjön is, és ne kapjunk StackOverflowErrort, akkor saját check state providert kell beállítanunk, és a probléma meg is van oldva:

    v.setCheckStateProvider(new ICheckStateProvider() {

    /**
    * TODO: provide complete solution
    */
    @Override
    public boolean isGrayed(Object element) {
    return false;
    }

    /**
    * TODO: provide complete solution
    */
    @Override
    public boolean isChecked(Object element) {
    return false;
    }
    });

    Persze az isGrayed és isChecked metódusok visszatérési értékét nekünk kell a saját alkalmazáslogikánk szerint beállítani.

  • Sk8erPeter
    nagyúr

    A builder pattern az egy pattern, ahol van egy buildered és azon hívsz metódusokat. Amit még csak nem is kötelező, de célszerű/kézenfekvő láncolva hívni. Jah és a végén ugye build()-et hívsz nem foo()-t.
    Nem arról szól, hogy ha metódusokat láncolva hívsz akkor builder pattern-t használsz.

    Konkrétan a whatever példában számomra is az a természetesebb, ha kiemeled változóba a kérdéses részt, de az a példa szerintem egész eltérő a kiinduló kérdéstől.

    "az a példa szerintem egész eltérő a kiinduló kérdéstől"
    Tök igazad van, igazából csak annak kapcsán jutott eszembe ez a másik téma, hogy beszélgettünk arról, hogy mi az, ami "szép", és mi az, ami pl. nekem személy szerint nem bejövős, az eredeti kérdéshez a whateveres példának már tényleg nincs köze. Szóval röviden a lényeg, hogy sokan szeretik agyontömörítgetni a kódot, amikor attól nem lesz jobb vagy olvashatóbb a kód, sőt, jobb lehet inkább szétdobálni, illetve hogy másik oldalról viszont sokan szeretik újból és újból leírni ugyanazokat az ismétlődő kódrészletet, ezzel pont, hogy túlzottan bőlére eresztik a kódot, illetve ez a módszer erőforrások pazarlására is alkalmas (overhead).

  • Sk8erPeter
    nagyúr

    Az a buli, hogy a whateveres példád Java-ban egy design pattern :D

    Mármint milyen design pattern? Ez a "How to produce spaghetti code and waste resources" design pattern? Vagy inkább nevezzük egy rossz begörcsölődésnek? :D

    (#7955) M_AND_Ms:
    Jaja. És mennyivel gyorsabb sorban feldolgozni az infókat, és látni egyenként, hogy mi történik, mint kódátfutás során értelmezni az egybedobált sorokat, ahol ki tudja, még hány egyéb metódushívás vagy más művelet történik. Egyszerűen mész végig a sorokon, és még mindig tudod követni. Amikor viszont agyon van tömörítve a kód, és a szemnek ugrálnia kell, az agynak pedig megjegyeznie egyetlen sor értelmezése közben csomó infót, az fárasztó - és az ember azért elég sűrűn olvashatja munkakörnyezetben másnak a kódját.

    Amúgy ez az egész kettős: az előző hsz.-emben lévő whateveres példa pont, hogy túl szószátyár és még pazarló is. Számomra sokkal olvashatóbb is lenne az a kód, ha az ismétlődő metódushívások eredményét eltárolnánk egy változóba - amit eleve így illik -, és onnantól kezdve tudnám, hogy kifejezetten azzal akarunk valamit kezdeni, nem kellene mindig végigfutnom a sort odáig, amíg ugyanaz történik, hogy tudjam, hogy most pont ugyanazt babráljuk, csak nem raktuk az eredményt külön válltozóba. (Az ilyennek a lerövidítése egyébként Eclipse-ben annyi, hogy kijelöljük az ismétlődő kódrészt, egy Alt+Shift+L, és létrehozható belőle egy lokális változó, és meg van oldva.)

  • Sk8erPeter
    nagyúr

    Tlképpen csak egy O(1) -el van több műveletem a 2. -ban, nem?
    Ez pedig a hash kód alapján való elem lekérés a getKey segítségével.
    Bár lehet hogy ugrálni kell majd a hash táblában mert a hasítófüggvény nem elég precíz ahhoz, hogy olyan kódot tudjon gyártani amihez biztos, hogy nem tartozik még semmi se.
    (fix me, de asszem vmi ilyesmin alapszik a map ... )

    Ettől függetlenül igen, az elsőt célszerű használni.
    A kérdésemet csak azért raktam fel, mert mindig csak egy elemet rakok bele abba a listába és kicsit csúnya volt, hogy mindig létre kell hoznom egy temp listát ehhez.

    Szerintem egyáltalán nem csúnya, hogy külön sorba rakod, hogy mit művelsz azzal a listával, amit majd be szeretnél rakni a HashMapbe. Sőt, gyorsan olvasható, egyértelmű, tiszta, és elkerülsz vele egy tök felesleges plusz metódushívást. A második is jól olvasható, de tény, hogy pazarlóbb. Így egy elemnél aztán tényleg totál mindegy teljesítmény szempontjából, meg láthatóság szempontjából is, de én meg attól kaparom az arcom, amikor olyan kódot kell olvasnom, amikor láthatóan a fejlesztő célja az volt, hogy vagányan mindent minél rövidebbre tömörítsen. Az sem számít, hogy hányszor ismétel azonos metódushívásokat, hány plusz műveletet igényel, de milyen jól mutat, hogy legalább tömör. Hát nem, nem lesz feltétlenül gyorsabban olvasható a kód (persze nyilván bőven vannak kivételek, de ne fossuk már le ennyire a teljesítményt). Tényleg valakinek attól lesz olvashatatlan a kód, mert külön sorban ki van fejtve, hogy mi történik? Az már régen rossz. Magasszintű nyelveknél egyébként nagyon divat(tá vált?) az is, hogy a metódushívásokat egymás után is ismételgetjük, mondván, "nem kell túlpörögni optimalizáció szempontjából", mint a kolléga mondta, ez itt abszolút igaz, de általában ezzel nagyon nem értek egyet. Egyrészt ha ennyire leszarjuk, hányszor történik meg egy-egy metódushívás, akkor az már zsigeri szintű igénytelenséghez vezethet hosszabb távon a teljesítmény rovására, meg azért szépen lehet halmozgatni az ilyen tök felesleges overheadeket, na de minek. (Persze ebben az is szerepet játszik, hogy ebből a szempontból mai napig bennem van a C, C++ tanulásának korszaka, amikor az ilyesmi nem volt menő.)
    Pl. ilyesmi:
    whatever.doStuff().veryCool().blahblah();
    whatever.doStuff().veryCool().wow().great();
    whatever.doStuff().veryCool().notCool();

    Na itt pl. a whatever.doStuff().veryCool() eredményét el lehetett volna tárolni egy változóba. De nem, ez így tök menő. Ja várjunk csak, mégsem. :D

    Szerk.:
    Persze simán lehet, hogy az ilyeneket a fordító úgyis optimalizálja. :) Mindegy, bennem az van, hogy abból baj nincs, ha egyértelműen láthatóvá teszem, mi történik, nekem a pár sorral bővebben hablatyolós kód nem lesz olvashatatlanabb, az agyontömörített kód viszont annál inkább. (Meg a debuggolást is nehezebbé teheti. :D)

  • Sk8erPeter
    nagyúr

    Sziasztok,

    szerintetek azt, h tudnám megoldani, h van egy classom több osztályszintű változóval, és szeretném egy metódussal a változó nevét átadva paraméterként megtudni, h ennek a változónak van-e értéke.
    Igazából a kivitelezés nem is számít, csak az a lényeg, h egy metódust szeretnék a classba a helyett, h minden adattagra lenne egy boolean metódusom.
    Előre is köszi

    Ha jól értem, mit szeretnél, akkor azt gusztustalan reflectionös gányolással lehetne csak megoldani, úgyhogy inkább felejtős. Mi a célod ezzel? Spórolni szeretnél a gettereken/karaktereken, vagy mi?

    Ha az is jó, hogy kulcs-érték párok szerint tárolod őket, mert valamilyen módon közösen szeretnéd kezelni a változókat, és át is alakítható a mostani megvalósítás, akkor rakhatod őket valamilyen Map-implementációba vagy Hashtable-be String kulcsok szerint.

  • Sk8erPeter
    nagyúr

    Ja, mert közben kaptam rá választ. Elnézést. Viszont újra megtekinthető.

    Látom senki nem írta le normálisan külön posztban a végső megoldást. :D Amúgy majdnem következetesen írtad a components szót componenets-nek. ;]

    (#7837) Oppenheimer: me' mé', mit tud? Nem láttam még. :)

  • Sk8erPeter
    nagyúr

    Esetleg ebben tudna valaki segíteni? Mert nem nagyon jövök rá, hogy mi a probléma... A lényeg, hogy új vonal rajzoláskor ki kellene törölnöm a régieket.

    "This question was voluntarily removed by its author." - így nehéz. :D

  • Sk8erPeter
    nagyúr

    Ja, még annyi, hogy nyilván az SWT.VIRTUAL flag be van állítva.
    Mondjuk gondolom erre a problémára túl sok jelentkező nem lesz, de azért próbát megért. :DDD

    No, mint kiderült, Eclipse bugról van szó:
    https://bugs.eclipse.org/bugs/show_bug.cgi?id=340488
    Konkrétan a CheckboxTreeViewer rosszul működik sok elemnél az SWT.VIRTUAL flag+ILazyTreeContentProvider használata esetén, és ami rosszabb, StackOverflowErrorhoz vezet, csak hogy örüljön a zzember. 2011-ben reportolt bug, csodás, hogy azóta nincs javítva.

    A példakód a sima TreeViewerrel jól működik, amint az ember átírja CheckboxTreeViewerre, StackOverflowErrorral hálálja meg.

  • Sk8erPeter
    nagyúr

    "Javascript engedélyezve van"
    Csak hogy ne keverd a kettőt: a Javának semmi köze a JavaScripthez, a kettő nem ugyanaz.

    ------------------
    Más:
    Ha valaki fejlesztgetett már Eclipse plug-ineket, ahhoz kötődő felületeket, használta esetleg azok közül valaki a JFace-es ILazyTreeContentProvidert pl. egy TreeViewerhez? A lényege az lenne elméletben, hogy ha a felhasználói felületre óriási adatmennyiséget írunk ki pl. egy fastruktúrában (az oka most tök mindegy, kell), akkor az elemek on-demand töltsenek be, akkor, amikor a felhasználó által ténylegesen látható területre kerülnek az elemek - például amikor odagörget az egerével, akkor töltse be a modellből az adatokat. Van hozzá példakód, az abban látottakat alkalmaztam mind (setUseHashlookup engedélyezése, gyerekelemek "manuális" beállítása, stb.), de a gyakorlatban a TELJES struktúrát betölti a memóriába, pedig pont az lenne a lényege, hogy kímélje az erőforrásokat.

    Ja, még annyi, hogy nyilván az SWT.VIRTUAL flag be van állítva.
    Mondjuk gondolom erre a problémára túl sok jelentkező nem lesz, de azért próbát megért. :DDD

  • Sk8erPeter
    nagyúr

    Sziasztok! NAV-AbevJava-t szeretném telepíteni Win 10_64_re. Leírás szerint a 64 bites Java-t raktam fel. Hiába, mert nem tudom hitelesíteni. Javascript engedélyezve van. Persze a programot sem tudom telepíteni. 3 Win 10_64-s gépen próbáltam, mindenütt ugyanez volt a helyzet. Mi a fene lehet a gond? :(

    "Javascript engedélyezve van"
    Csak hogy ne keverd a kettőt: a Javának semmi köze a JavaScripthez, a kettő nem ugyanaz.

    ------------------
    Más:
    Ha valaki fejlesztgetett már Eclipse plug-ineket, ahhoz kötődő felületeket, használta esetleg azok közül valaki a JFace-es ILazyTreeContentProvidert pl. egy TreeViewerhez? A lényege az lenne elméletben, hogy ha a felhasználói felületre óriási adatmennyiséget írunk ki pl. egy fastruktúrában (az oka most tök mindegy, kell), akkor az elemek on-demand töltsenek be, akkor, amikor a felhasználó által ténylegesen látható területre kerülnek az elemek - például amikor odagörget az egerével, akkor töltse be a modellből az adatokat. Van hozzá példakód, az abban látottakat alkalmaztam mind (setUseHashlookup engedélyezése, gyerekelemek "manuális" beállítása, stb.), de a gyakorlatban a TELJES struktúrát betölti a memóriába, pedig pont az lenne a lényege, hogy kímélje az erőforrásokat.

  • Sk8erPeter
    nagyúr

    Szerintem meg az, hogy +1 mondat helyett inkabb fals informaciot kozolsz a kezdovel, az rosszabb. De ez csak az en velemenyem. Mondjuk ahol eddig en dolgoztam, ott egy junior fejlesztot se vettunk volna fel, ha ilyen alapszinten sem ismeri az adott nyelvet.

    Félreértés ne essék, én egy félreérthető mondatot sem közöltem a kezdővel, mert kicsit most így jött le a hsz.-edből. :D

  • Sk8erPeter
    nagyúr

    Nyilván, hiszen a referencia esetén is a referencia értéke másolódik be, tehát érték szerinti paraméterátadás történik. Viszont azért ez még sem annyira klasszikus érték szerinti paraméterátadás, mint a primitívek esetében. Illetve a mondatommal csak ki akartam emelni, hogy nem áll ami bambano mondott
    "ok, tehát a jávában mindig referencia szerinti átadás van, amit ők érték szerinti átadásnak neveznek".

    (#7790) bambano: nos, a unboxing az közel sem dereferencia, de igen, ott lesz még egy köztes lépés.

    Szerintem bambanonak igaza van abban, hogy ez a "MINDIG érték szerinti átadás van Javában" csak egy összezavarásra alkalmas mondat ebben a formában, amitől a kezdő hirtelen nem fogja érteni, mi van, és azt hiszi, hogy egy metódusnak átpasszolt objektumról valamilyen mágikus módon készül egy másolat, és a másolattal fog dolgozni (deep copy nyilvánvalóan nem fog tudni készülni, de ki tudja, hogy a kezdő épp tisztában van-e vele, de már legalább elindítottuk az összezavarás útján), hádepedignem.

  • Sk8erPeter
    nagyúr

    ok, tehát a jávában mindig referencia szerinti átadás van, amit ők érték szerinti átadásnak neveznek.
    :))

    Igen, jó nagy baromság ezeket kihangsúlyozni, hogy érték szerinti átadás, mert végül is pointert passzolgatunk ilyen alapon, és az eredeti objektumot buzeráljuk, de legalább egy kezdőt tök jól össze lehet zavarni ezzel, és totál nem fogja érteni, hogy most akkor mi van. :D

  • Sk8erPeter
    nagyúr

    Sziasztok!

    A jovoheti labor anyagommal szorakozok, de ugy erzem, hogy az abstract dolgot nem nagyon sikerult megertenem, de nem tudom igazabol pontosan, hogy mi lehet a gondja a kodomnak.

    Kodom
    Feladat

    A Jatekos osztalyomban abstract(virtual) a lep(). Ebbol szarmaztatom le a Kezdo illetve a Robot-ot.

    Az addJatekos-nal sipol a programom. Viszont en szerintem jol hasznalom ezt a Vector<>-t. Annak van egy add fuggvenye, amivel pedig hozzaadom az argumentumkent kapott Jatekos j-t, ami igazabol Robot, meg Kezdo lesz, de ugyebar azt a Jatekosbol szarmaztatom. Ez a feladat egyebkent CPP-ben meg van a gepemen meg tavalyi felevrol, abbol emeltem at par dolgot, lehet, hogy rosszul?! :D

    Valaszaitokat elore is koszonom,

    Nem meglepő a NullPointerException, mivel a jatekosok.add() metódust úgy hívod meg, hogy a jatekosok változó nincs inicializálva.

    (#7776) Oppenheimer:
    Az első bekezdés félreérthető szerintem, ez a thread lehet, hogy felhomályosítja.

  • Sk8erPeter
    nagyúr

    Ja, pont akkora őrültség, mint aki a magyar mondataiban nem használ ékezetet. :P

    "Ja, pont akkora őrültség, mint aki a magyar mondataiban nem használ ékezetet. :P"
    Hehe, hát igen. ;] :DDD

    (#7687) bambano:
    "teljes őrültségnek tartom, ha valaki kétféle klavi kiosztást használ..."
    Meg ez is jó.

    (#7683) emvy:
    "Teljes orultsegnek tartom, ha valaki HU layouttal kodol :)"
    Jaj, de szeretem az ilyeneket. Mi az a komoly hátrány, ami származik abból, ha valaki átállítja például a toggle comment hotkey-jét az IDE-ben? (Csak egy példa arra, ami mondjuk HU layouttal nem szokott tipikusan működni, de na bumm, körülbelül fél perc átállítani.) Mi az, ami miatt probléma lenne, hogy valaki HU layoutot használ, amikor világéletében ezt szokta meg, mert mondjuk nem élt hosszabb távon külföldön, ami miatt feltétlenül át kellett volna magát állítania más kiosztásra?
    Ez nagyjából olyan, mintha beszólok, hogy milyen gyökérség ékezetek nélkül írni, mert amúgy tök idegesítő egy magyar nyelvű fórumon, annak ellenére, hogy nyilván az itt tevékenykedők többsége folyamatosan tudja olvasni az ilyen szöveget is, mivel nem egy túl komoly agyi munka, de akkor is zavaró (másnak nem biztos, nekem például igen, és tudom, "így jártam"). Ha magyar fórumra írsz, miért nem állítod át a layoutot (vagy magadat) magyarra? :)

    (#7702): Egy ilyen tényleg nem lehet rossz, de mondjuk itt fura picit, hogy ennyire magasra van emelve, így az ember csuklójának tartása gépeléskor kicsit "megtörik", és nem folyamatos az emelés.

  • Sk8erPeter
    nagyúr

    Nos, ez azért erős túlzás...

    Szerintem a kolléga szándékosan trollkodott. :P (legjobb flamewar-keltő megjegyzések az ilyenek, amikor valaki komolyan veszi :D)

    Hogy a cikkhez is szóljak:
    "It started when Oracle sued Google and accused it of infringing on some of its application programming interfaces, including their names (such as the name "max" for the maximum function)."
    Az Oracle érintett emberei most megsimogathatják a saját idióta kis buksijukat.

  • Sk8erPeter
    nagyúr

    Sziasztok!

    Azt szeretném megkérdezni, hogy Eclipsehez tud vki egy olyan kiegészítőt ami a beépített debuggert, ezen belül is a Variables nézetért felelős részt feltudja esetleg egy kicsi "okosítani"?

    Előre is köszi,
    Peti

    Konkrétabban mit takar a "felokosítás"?

    (#7528) sutszi:
    Jaja, két számjegy viszont simán elfér a tálcaikonon (ld. HWiNFO64 tálcára kirakott kijelzői). Három már elég necces (a töltöttség kijelzésénél mondjuk csak egy esetben van erre szükség, 100%-nál :D)... Igazából két számjegy esetén állapotjelzésre a tálcaikon a legjobb megoldás, háromnál para. De próbát megér, max. kisebbek lesznek a betűk, vagy 100% esetén egy teljes töltöttséget jelző egyéb ikont mutatsz, nem számot. :D

  • Sk8erPeter
    nagyúr

    Nem rossz. Az külön tetszik, hogy javafx. Egy másik funkcióra pont alkalmas is lesz. :)

    A fenti témához viszont egy fixen a taskbarra ülő "valami"-t szeretnék használni. Két szerepe lenne. Az egyik, hogy mutatja a %-ot, a másik, hogy innen elérhető az alkalmazás fő ablaka.

    "Java tray icon" keresőszavakra Google első találata egy Stack Overflow-thread (rendkívül meglepő módon):
    http://stackoverflow.com/questions/758083/how-do-i-put-a-java-app-in-the-system-tray
    második találata a hivatalos doksi egy konkrét példával:
    https://docs.oracle.com/javase/tutorial/uiswing/misc/systemtray.html

    És ja, AWT-s.

    "JavaFX tray icon" keresőszavakat is nézegethetsz. Itt pl. azt írják kommentben, hogy "JavaFX will get it's own system tray support in a latter release once RT-17503 Provide system tray support is implemented. Until then, using the AWT system tray as demonstrated in the sample code in this gist seems to work fine."

    Szerk.: szándékosan nem toolbarra kerestem rá, nekem speciel felhasználóként egy külön eszköztár nem is lenne szimpatikus, már ha megvalósítható (ne terpeszkedjen), sima tray icon viszont igen.

  • Sk8erPeter
    nagyúr

    Csak egy apró tanács: ne nevezd el a tömb hosszút jelentő változót "i"-nek. Az "i"-t szinte mindig ciklusváltozónak szoktuk felhasználni.

    Nekem az a "kedvencem", amikor valaki ilyen magasszintű nyelvben rövidítgeti a változóneveit, mintha nem lenne mindegy akár teljesítmény, akár az IDE autocomplete-je szempontjából, aztán lehet bogozgatni. :)

  • Sk8erPeter
    nagyúr

    Az lenne a legjobb, ha magadtól rájönnél mi a hiba (ha az írás óta ez megtörtént az nagyszerű). Melléteszed a keresés Pszeudokódját segítségül esetleg (de ne görgesd le mert ott a java-s is!), és úgy már mindenképpen menni fog a javítás.

    Kár, hogy magyarrá tették magát a kódot is, rossz szokásra nevelik a zzzembereket. :(

  • Sk8erPeter
    nagyúr

    Én nem ismerem, a tanárOK mondják, hogy rémes a kerettanterv :)

    Szóval, annyit javult a helyzet, hogy most ha a gazda neve, kor vagy tömeg alapján keresek, akkor tökéletes, viszont ha név alapján, akkor a név tömb első elemét valamiért ignorálja. Az egész beolvasás procedúra tulajdonképpen ugyanaz az összes tömbnél, továbbá ha csak szimplán kiiratom azt a tömbelemet, akkor ott van rendesen, hogy Füsti (vagy akármi, amit beviszek arra az elemre), de a kereséskor nem találja.

    Itt a kód(try catch-ben van, de azt most nem keresem meg, hol a vége-eleje, de nincs azzal gond)
    Így azt hiszem, egy az egyben be is másolhatváltozók megadásával) futtatható is

    //változók
    int fomenu, kilepes=0;
    int bevitel,torles,rendezes,szures,mentes,elvet,kilep;
    int bevkeres,torkeres, szurkor,szurtt;
    int mod;

    //beolvasas
    BufferedReader br=new BufferedReader(new FileReader("adatok.txt"));
    String sor;
    int n=500;
    String [] nev =new String [n];
    String [] gazdnev =new String [n];
    String [] tomeg =new String [n];
    String [] kor =new String [n];
    int olvastomb=0;
    while((sor=br.readLine())!=null){
    nev[olvastomb]=(sor.substring(0, sor.indexOf(";")));
    sor=sor.substring(sor.indexOf(";")+1);
    gazdnev[olvastomb]=(sor.substring(0,sor.indexOf(";")));
    sor=sor.substring(sor.indexOf(";")+1);
    tomeg[olvastomb]=(sor.substring(0, sor.indexOf(";")));
    sor=sor.substring(sor.indexOf(";")+1);
    kor[olvastomb]=sor;
    olvastomb++;
    }

    //problémás részlet

    try{
    int []modvalogatas=new int[n];
    int db=-1;
    int i=0;
    do{
    i=0;
    System.out.println(BLUE+"MEGLÉVŐ ÁLLAT ADATAINAK MÓDOSÍTÁSA MENÜ"+RESET);
    System.out.println("Mi alapján szeretnénk kiválasztani a módosítandó tulajdonságú állatot?");
    System.out.println("1-Név alapján");
    System.out.println("2-Gazdája neve alapján");
    System.out.println("3-Kor alapján");
    System.out.println("4-Testtömege alapján");
    System.out.println("5-Mégsem");
    System.out.println();
    bevkeres=extra.Console.readInt("Melyik menüpontot választja? ");
    switch(bevkeres){
    case 1 : {
    String kereses=extra.Console.readLine("Milyen nevet keressünk?");
    db=0;
    i=0;
    while(nev[i++]!=null){

    }
    for (int g=0;g<i;g++){
    if (kereses.equals(nev [g])){
    modvalogatas[db]=g;
    db++;
    }

    }
    break;
    }

    case 2 : {//főmenü 1-es menüpont->2-es menüpont
    String kereses=extra.Console.readLine("Mi a gazda neve?");
    db=0;
    i=0;
    while(gazdnev[i++]!=null){

    }
    for (int g=0;g<i;g++){
    if (kereses.equals(gazdnev[g])){
    modvalogatas[db]=g;
    db++;
    }

    }
    break;
    }

    case 3 : { //főmenü 1-es menüpont->2-es menüpont
    String kereses=extra.Console.readLine("Milyen korút keressünk?");
    db=0;
    i=0;
    while(kor[i++]!=null){

    }
    for (int g=0;g<i;g++){
    if (kereses.equals(kor [g])){
    modvalogatas[db]=g;
    db++;
    }

    }
    break;
    }

    case 4 : {//főmenü 1-es menüpont->2-es menüpont
    String kereses=extra.Console.readLine("Milyen tömegűt keressünk?");
    db=0;
    i=0;
    while(tomeg[i++]!=null){

    }
    for (int g=0;g<i;g++){
    if (kereses.equals(tomeg [g])){
    modvalogatas[db]=g;
    db++;
    }

    }
    break;
    }

    case 5: { //főmenü 1-es menüpont->2-es menüpont
    break;
    }


    default: { //főmenü 1-es menüpont->2-es menüpont
    System.out.println(RED+"Hibás értéket adott meg."+RESET);
    }

    }
    try{ //főmenü 1-es menüpont->2-es menüpont
    if(db!=0){
    System.out.println(nev[0]+gazdnev[0]+tomeg[0]+kor[0]);
    System.out.println("Az alábbi találat(ok) keletkeztek. ");
    for (int j=0;j<db;j++){
    System.out.println((modvalogatas[j])+"-"+nev[modvalogatas[j]]+";"+gazdnev[modvalogatas[j]]+";"+kor[modvalogatas[j]]+"év;"+tomeg[modvalogatas[j]]);
    }
    int modos=extra.Console.readInt("Melyik állatot kívánja módosítani a fentiek közül?");
    do{
    System.out.println(BLUE+"ÁLLAT ADATÁNAK MÓDOSÍTÁSA MENÜ"+RESET);
    System.out.println("1-Név módosítása");
    System.out.println("2-Gazda nevének módosítása");
    System.out.println("3-Testtömeg módosítása");
    System.out.println("4-Kor módosítása");
    System.out.println("5-Mégsem");
    System.out.println();
    mod=extra.Console.readInt("Melyik menüpontot választja?");
    switch (mod){
    case 1:{ //főmenü 1-es menüpont->2-es menüpont
    nev[modos]=extra.Console.readLine("Mi az állat új neve?");
    break;
    }

    case 2:{ //főmenü 1-es menüpont->2-es menüpont
    gazdnev[modos]=extra.Console.readLine("Mi az új gazda neve?");
    break;
    }

    case 3:{//főmenü 1-es menüpont->2-es menüpont
    tomeg[modos]=String.valueOf(extra.Console.readInt("Mennyi az állat új tömege?"));
    break;
    }

    case 4:{//főmenü 1-es menüpont->2-es menüpont
    kor[modos]=String.valueOf(extra.Console.readInt("Mennyi idős az állat?"));
    }

    case 5:{//főmenü 1-es menüpont->2-es menüpont
    break;
    }

    default: {//főmenü 1-es menüpont->2-es menüpont
    System.out.println(RED+"Hibás értéket adott meg."+RESET);
    }
    }

    } while(mod!=5);
    }
    else {
    System.out.println("Nincs ilyen állat.");
    }
    System.out.println();
    }catch(Exception e){
    System.out.println(RED+"Hiba történt!: "+e.getMessage()+RESET);
    }
    }while(bevkeres!=5);
    }catch(Exception e){
    System.out.println(RED+"Hiba történt!: "+e.getMessage()+RESET);
    }
    break;

    Értelmesebb lett volna, ha egyből egy tesztelhető kódot dobsz be (értsd: mi csak bedobjuk a fejlesztőkörnyezetbe az adott osztály(oka)t, és mehet a teszt), vagy csak a vonatkozó kódrészletet, nem csak simán bedobod ezt az óriási - ráadásul rosszul tagolt - borzalmat (mert lusták vagyunk kibogarászni ekkora kódot, ami ronda is, gyorsabb lenne lefuttatni). Ekkora mennyiségű kód tényleg mehetne pastebinre (ahol bekattintod, hogy Java-szintaxis szerint legyen kiemelve értelemszerűen). Amúgy nem véletlenül mondtuk korábban, hogy bontsd szét a kódodat több metódusra, ez így valami elképesztő ocsmány és átláthatatlan.

    (#7423):
    Ugyanúgy megoldhatod do-while-lal ezt a feladatot is.

  • Sk8erPeter
    nagyúr

    Az a baj, hogy senki nem tudja(se nem sejti), mi lesz az érettségin, csak a kerettantervre lehet támaszkodni. Abban meg ez a sok marhaság van.

    És a kerettantervben mi van? Az, hogy gyakoroltatni kell a ciklusokat és a tömbök használatát is, és most épp ott tartotok? Csak mert mint előbb írtam - szerkesztettem a hsz.-t közben -, ezekre ennél SOKKAL értelmesebb és használhatóbb példákat is ki lehetne találni, hogy megértsétek a használatát, meg hogy mire jó. Nagyon nem erre, amit mutattál. :) És attól még, mert gyakorlatiasabb példákat vesztek, nem lenne muszáj eltérni a kerettantervtől. Most itt az infós kerettantervet fikázzuk, de még nem említette senki, hogy pontosan mi is van benne, ami szar (nekem most nincs kedvem rákeresni) - biztos egyébként bőven van miért szidni sok tekintetben, de nem ártana némi konkrét információval felvértezve fikázni. :D

    Amúgy most akkor hogyan is alakítgattad a kódodat, ami nem működik? És akkor most mi a gond, hogy nem írja ki az első elemet? Kicsit nekem már zagyva a leírásod.

  • Sk8erPeter
    nagyúr

    De miért a tanár a hülye, ha ez szerepel a kerettantervben? Csak nem mondhatja azt, hogy screw you és tanítaná azt, ami tényleg értelmes, aztán a hülye tanterv alapján felállított érettségin meg sorban megbukunk! (Igen, mert ebből a fajta tantervből (még hasonlóból sem) nem volt még sohasem érettségi, mi leszünk az elsők majd, két év múlva, szóval tapasztalat semmi nem lesz belőle senkinek. A tavalyi tanévtől 9.-esként kezdőknek (azaz nekünk is) van szakmai tantárgyuk, és kötelező belőle érettségizni, majd utána, ha az megvan, lehet menni technikumra.

    Amúgy a félreértések elkerülése végett: Az említett 10 órából csak 2 programozás hetente.

    "De miért a tanár a hülye, ha ez szerepel a kerettantervben? Csak nem mondhatja azt, hogy screw you és tanítaná azt, ami tényleg értelmes, aztán a hülye tanterv alapján felállított érettségin meg sorban megbukunk"
    Az érettségin az ilyen C-szerű kódolást kérik számon Java-nyelven? Nagyon remélem, hogy nem. Ha meg nem, akkor a tanár hülye, hogy olyan szokásokat próbál belétek verni, amik ennél a programozási nyelvnél kifejezetten károsak, és ocsmánnyá teszik a kódot. Ha tényleg ilyet kérnek számon az érettségin is, akkor qrva nagy gáz van az ottani számonkéréssel is.

    Nem az van, hogy a tanár is most tanulgatja a Javát, és korábban más nyelvben programozott?
    A ciklusok, tömbök gyakoroltatására létezne ezerszer értelmesebb és gyakorlatiasabb feladat is.

    (#7417): tehát akkor most mi is a kódod, ami nem működik? :)

  • Sk8erPeter
    nagyúr

    Akkor valamit nagyon rosszul csinálsz. Vagy a tanárotok egy kókler, hogy nem szól rátok időben, hogy ezt soha ne csináljátok.

  • Sk8erPeter
    nagyúr

    Lehet, hogy a kérdés komolysága elveszik a bullshit példámban. Arra lettem volna inkább kíváncsi, hogy kb. mit lehetne elvárni egy frissen végzett egyetemistától egy tesztben akinek köze volt a programozáshoz. (legalább több kurzus alatt tanulta). Nincs rálátásom a jelenleg végzett diákok tudásáról.

    Ha beírod Google-be a "java interview questions" kulcsszavakat (vagy valami hasonlókat), akkor igen sok találatot fogsz kapni. (Most ezt nem cinizmusból írtam, de tényleg Dunát lehet rekeszteni azzal a kérdéshalmazzal, ami neten fent van megszámlálhatatlan mennyiségű helyen.)

  • Sk8erPeter
    nagyúr

    Lenne még egy kérdésem. Mivel grafikusan még nem programozunk, hanem mindent konzolon csinálunk, így egy idő után cseszett bonyolítottá válik a konzol. Lehet valamivel olyasmit csinálni, hogy a konzol tartalmát töröljük?
    Egy hierarchikus switch-case menürendszerről lenne szó, összesen 22 választható elemmel, egymásba szinteződve, javarészt.

    A konzol/terminál tartalmát szeretnéd törölni? Mert Windows-on az a cls bepötyögésével, majd Enterrel megoldható, Linuxnál a clear kulcsszóval.
    (Már ha jól értettem a kérdésedet...)

    Hogy kell elképzelni ezt, hogy mindent konzolon csináltok? nano, mcedit (most ezek Linux-eszközök, de mindegy), vim (bár ezt kétlem), ilyesmik használatával szerkesztitek a kódot?

    (#7288) floatr:
    A Java-fejlesztőknek nem a hosszú távú támogatás jár a fejében? Ez így furán hangzik. :P

  • Sk8erPeter
    nagyúr

    Bár emiatt mondtam, hogy megoldás kérdése, elsőre lehet h vacakul hangzik, de ha jön egy break-es megoldás, könnyen jöhet egy későbbi CR, aztán jön a többi break is. Ha az első beteszi a lábát a ciklusba, akkor megette a fene, én átírom inkább valami iterátoros cuccra, sakko lesz feltételed.

    De nem akartam kötekedni, csak megjegyeztem, hogy a break rontja a kódot.

    szerk: olyanok ezek a dolgok, mint a petárda. Kicsit pukkangatnak, sokan nem értik, aztán egyszer leviszi a kezed. :)

    Szerintem tanulmányozd magának a Javának a forráskódját, rá fogsz csodálkozni, hogy TELE van a break kulcsszó használatával ciklusokon innen és túl is. :D
    Na nem mintha azt akarnám sugallni, hogy az biztos a világ legjobb kódjainak gyűjteménye, de valószínűsíthetően nem kókler kretének írják, akik azért használnak breaket, mert buták, és nem tudnak kódolni.

  • Sk8erPeter
    nagyúr

    Ugyanazt javasolta, mint ti. Extra. Console. Readint. [és ezt rendesen formázva, csak buta a t9]

    Sk8erPeter: azért kéri így, hogy megtanuljuk a for, while és do-while ciklusokat használni.

    Tényleg lehet break-kel kocolni, alairom, csak az adott esetben teljesen működőképes volt.

    Köszönöm a segítséget :R

    Teljesen érthető for-ciklusnál, de én még mindig foreach-ről beszélek, gondolom majd azt is fogjátok tanulni. :)

  • Sk8erPeter
    nagyúr

    Én inkább vagyok híve egy olyan megoldásnak, ahol inkább a ciklus feltételeinek kiértékelésénél próbálod megoldani a kilépést. Nyilván lesz olyan eset, amikor nagyon nyakatekert lenne break nélkül, de sokszor csak rontja a support-ot.

    "Én inkább vagyok híve egy olyan megoldásnak, ahol inkább a ciklus feltételeinek kiértékelésénél próbálod megoldani a kilépést."
    Nem véletlenül mondtam az előbb a foreach-ciklust, még ki is hangsúlyoztam, hogy nem sima for ciklusról van szó. Magyarul nincs ciklusfeltétel, kész. Cserébe magának a ciklusnak a "fejléce" szebb tud lenni, nincs szükség indexelésre, és így tovább, hát ugye a foreach-ciklus szépsége. Berakva egy if(...) { break; }-et (nyilván szépen tördelve) semmivel sem lesz rondább, ha az nem valahol egy túl nagyra hízott ciklustörzs (eleve már itt kezdődik a gond) közepén helyezkedik el valahol, teljesen egyértelmű a ciklus megszakítása, szóval nem igazán tudom felfogni, nálad miért nem menne át a kódreview-n. Erre mondtam, hogy sokszor nevetségesek ezek a teljesen rugalmatlan "szabályok". Vannak általános irányelvek, amiktől rondább vagy szebb lesz egy kód, de általánosítani itt is tök felesleges. :) Sima for ciklusnál teljesen érthető, egy foreach-nél nem, nem lesz tőle rondább a kód, ha a kódot olvasó emberke számára nem egyértelmű, hogy ott bizony valamitől függően kilépés lesz a ciklusból, hát akkor nem a kód írójával van baj. :D

  • Sk8erPeter
    nagyúr

    Levonni nem hiszem, hogy levonnak. Mikor tz-be while helyett for ciklust tettem if-es break-el,annyit mondott, hogy te [legyen a vezeteknevem mondjuk] kovács! Megmondtam, hogy órán ne breakelj. Most nézzétek meg, ti itt dolgozatot írtok, ez meg itt breakel...

    Egyszóval, nem fog érte megölni, jo fej ürge. De mindjárt beérek, megkérdezem tőle.

    Remélem, azért nem szól be, ha egy foreach-ciklusnál (nem sima for) adott esetben használsz breaket... néha vannak emberkék, akik kitalálnak ilyen "szabályokat", hogy legyen mivel lefoglalni magukat. :DDD A kód olvashatóságát pedig ez például nem rontja.

  • Sk8erPeter
    nagyúr

    Mivel megeshet, hogy közben valaki gyorsabban ír egy hozzászólást, már azonnal nem a következő lesz....

    Így van. :K De vágod, nem nekem kell magyarázni, pont emiatt szóltam a kollégának. :D

  • Sk8erPeter
    nagyúr

    Pár éve olvastam egy etikettet, vagy szabályzatot, miszerint ha az éppen előtted szólónak szánod a hozzászólást, akkor ne használd a válasz gombot. Azóta megváltozott? Vagy a topicra más érvényes?

    Tőled kérdeztem.

    Oké, köszi, nagyjából ezeket tudtam volna elképzelni.

    "Pár éve olvastam egy etikettet, vagy szabályzatot, miszerint ha az éppen előtted szólónak szánod a hozzászólást, akkor ne használd a válasz gombot. Azóta megváltozott? Vagy a topicra más érvényes?"
    Ilyen szabály SEHOL nem volt soha érvényben. :D Sőt, pont ennek ellenkezője van az alapelvek között is.
    http://prohardver.hu/allando/alapelvek.html#jotanacsok
    III.12.4.3. "Egy hozzászólásra mindig a Válasz linkkel írj, hogy mindenki láthassa mire és kinek válaszoltál."

  • Sk8erPeter
    nagyúr

    Miert nem javasolt? Vannak otleteim, de hallani is akarok felole.

    Most ezt kitől kérdezed? Mert megint nem használtad a Válasz linket. :) Szokj már rá a használatára légyszi, nagyon zavaró a hiánya (hogy nincs előzménye a hsz.-eidnek a fejlécben), köszi. :)
    Amúgy keress rá Google-ben a "why select * is bad" kulcsszavakra, bőven fogsz találni cikkeket a témában. Röviden: teljesítmény szempontjából nagyon káros tud lenni. Ezenkívül teljesen felesleges minden egyes oszlopot kiválasztani, amikor az esetek 99%-ában nincs szükség mindegyikre. Nem beszélve arról, hogy a mezők egyértelmű felsorolásával kiolvasható a query-ből az is, hogy egyáltalán milyen mezők lesznek elérhetőek (pl. ha már JDBC, a ResultSetből való mezőeléréskor), és melyekre van szükségünk, tehát maga a kód is értelmesebb lesz tőle.

  • Sk8erPeter
    nagyúr

    Sziasztok!
    Akarok csinálni egy bejelentkezést jsp+servletel, de ugyan azt a hibát kapom akármit csinálok.
    Servlet doPost:

    PrintWriter out = response.getWriter();

    String username = request.getParameter("user");
    String password = request.getParameter("pwd");
    UserSQL dao = new UserSQL();

    int result = dao.loginUser(username, password);
    if (result == 1) {
    RequestDispatcher rd = getServletContext().getRequestDispatcher("index.jsp");
    out.println("<font color=red>Adatbázis hiba.</font>");
    }
    if (result == 2) {
    RequestDispatcher rd = request.getRequestDispatcher("error.jsp");
    // RequestDispatcher rd = getServletContext().getRequestDispatcher("error.jsp");
    out.println("<font color=red>Rossz felhasználónév/jelszó.</font>");
    }
    HttpSession s = request.getSession();
    s.setAttribute("username", username);
    s.setAttribute("login", true);

    response.sendRedirect("success.jsp");

    A userSQL class aminek át kellene vennie a 2 stringet és vissza adni egy számot, de szerintem nem kapja meg az értékeket:

    public int loginUser(String username, String password) {
    connect();
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;

    String sql_comm = "select * from root.users where username = ’" + username + "’ and password = ’" + password + "’";
    try {

    stmt = con.createStatement();
    rs = stmt.executeQuery(sql_comm);
    if (rs.next() == false) {
    return 2;
    } else {
    return 0;
    }
    } catch (SQLException e) {
    e.printStackTrace();
    return 1;
    } finally {
    if (rs != null) {
    try {
    rs.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (stmt != null) {
    try {
    stmt.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    if (con != null) {
    try {
    con.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }

    Hibaüzenet:
    java.lang.NullPointerException
    model.UserSQL.loginUser(UserSQL.java:47)
    controller.login.doPost(login.java:53)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

    Tudna valaki segíteni, ötletet adni mi baja lehet? Van sok megoldás a neten, de én ezzel akarom csinálni és érdekelne mit rontottam el. NullPointerException ez ha jól tudom azt jelenti, hogy null értékű objektummal tér vissza, de javítsatok ki ha tévedek.
    Előre is köszi a segítséget.

    Azt vágod, hogy a felhasználótól kapott adatot egy az egyben dobálod bele a query-be, escape-elés vagy sokkal inkább prepared statement (rendkívül meglepő módon erre való a PreparedStatement és a Connection osztály prepareStatement metódusa) használata helyett, ezzel fasza kis lehetőséget adva az SQL Injectionre?

    http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

    Meg amúgy a SELECT * használata nagyon nem javasolt sehol. Sorold fel szépen a mezőket, amikre szükséged van.

  • Sk8erPeter
    nagyúr

    Azert en csak reszben ertek egyet. Valoban tanitanak sok hulyeseget is, feleslegeset, vagy nem jo modon, de muszaj az elmeleti megalapozas, akar programiras nelkul. A program, a nyelv csak egy eszkoz, megoldani a feladatot kell eloszor.

    Egy (valos!) bar regi eset: m.tarsak jonnek (2 honap kulonbseggel ketto kulonbozo projektnel, csak a szomszed szobaban volt a masik), hogy
    - van egy csomo, valtozo hosszu stringunk, de a halmaz csak nagyon ritkan valtozik
    - nincs prefix-mentesseg
    - jonnek rohadt gyorsan az input stringek, es meg kene mondani, hogy a halmaz mely eleme az, amelyik a leghosszabb prefixe az inputnak.
    A kerdesuk mindket esetben ez volt: milyen sorbarendezesnek hivjak azt, amiben ezt a leggyorsabban (valamilyen algoval) meg tudna'k talalni, es az milyen muveleti igenyu.
    Az intelligens telefonkozpontok szolgaltatas + parameter szetvalasztasa peldaul egy ilyen feladat.
    Ha nem tanitananak (pontosabban: akinek nem tanitottak) algo+adatszerk. oran ilyesmit, me'g guglival se biztos hogy ratalal az optimalis megoldasra a fenti kerdessel.

    Na várj, sztem senki nem mondta, hogy nincs szükség komoly elméleti alapozásra (persze ezt is ésszel kéne, gyakran ez sem elmondható), inkább arról van szó, hogy először meg kéne egyáltalán hozni az egész programozáshoz a kedvedet, nem pedig elvenni azt (akár egy egyetemi/OKJ-s/akármilyen képzésről van szó, akár egy könyvről), értelmes módon kellene vegyíteni a gyakorlati alapismereteket az elméleti háttérrel, de valahogy ez a legtöbbször átcsap abba, hogy kőkeményen nyomatjuk az elméleti bullshitet, hogy legyen mit jól számonkérni, aztán inkább csak úgy mellesleg vannak gépes laborok is, ahol ledarálják, ami kell (elavult eszközök rulez), ha nincs előképzettséged, így jártál, aztán mennek a következő anyagra, csak pörgessük ki a kötelező számonkérhető anyagot. Természetesen ettől még vitathatatlan, hogy saját szorgalom nélkül úgysem fog senki megtanulni programozni, de nem mindegy, hogyan lökdösnek előrébb, vagy csak tömik az agyadat olyannal, amitől csak összevisszaság lesz a fejedben. Ahogy észrevettem, ez nagyon általános probléma.
    BME-n azóta szerencsére látok némi javulást az elsősöknek leadott anyagban, ahogy nézegettem a honlapokat. Amikor én jártam prog1-re, elég borzalmas volt a helyzet. Amúgy a kedvencem az volt, amikor az előadó a perifériákról beszélt, hogy hű de jó, hogy van a billentyűzet, meg az egér, 1 perc múlva meg egy C-ben írt kódot mutogatott. :DDD

  • Sk8erPeter
    nagyúr

    Ennek az elméleti alapozásnak az értéke nulla. Szerinted mi értelme mondjuk a szoftver életciklusának a tankönyvi definícióit felsorolni egy olyan embernek, aki életében egy hello world-öt nem írt? Milyen tudást ad egy ilyen embernek, ha megtanítod neki a szoftver karbantarthatóságának a definícióját? Az átlag olvasó ezt a tudást meg tudja ugyan tanulni, de garantáltan nem fogja megérteni.

    Szerintem ez egy teljesen ineffektív tanítási módszer. Hasonló szemlélettel oktattak annak idején az ELTE progmaton is, ott azzal verték a mellüket, hogy felvesznek 400 embert és ebből 30-40 fog diplomát szerezni. Erre remek ez a könyv, bárhol felnyitom, találok 3-4 definíciót amit kikérdezhetek.
    Szóval a lényeg, hogy programozni úgy lehet megtanulni, ha az ember sokat programozik. Az elméleti alapozás és a mélyebb összefüggések feltárása is programozáson, kódon keresztül történik. A tankönyvi, elméleti definíciók megértéséhez előbb erre a szintre el kell jutni.

    (Az Angster könyv olyan, mint ha a szakácstanulóknak előbb megtanítanád a fehérjeláncok denaturálódásának kémiáját, mint elméleti alapozást a rántotta készítéséhez.)

    Hű, mennyire egyetértek azzal, amit írtál a tanítási módszerekről. BME-n az egyetem első évében fogalmam nem volt a programozásról, és elképesztő mennyiségű időt kúrtam el az ilyen jellegű fos tanítás miatt (akár az előadásokon, akár a könyvekben), amikor végeláthatatlan mennyiségben hablatyolnak az elméleti háttérről, de még mindig egy sor kódot nem írtam, és nem is értettem, hogy kell megírni egy egyszerű programot, ebből következően az elméletet sem tudtam mihez kötni. Akkor mi a büdös francnak annyit nyomatni az elméletet az elején, ha nem mutatjuk meg a gyakorlatban, hogy mire jó? A legtöbb oktatókönyv írójával az a baj, hogy rohadtul nem tudják beleképzelni magukat a kezdő tanuló helyébe, csak szárnyal a képzeletük, hogy nagyjából hogyan kellene tanítani, de nem néznek utána, hogy vajon az tényleg hatékony-e.

  • Sk8erPeter
    nagyúr

    Sziasztok, elég kezdő szinten vagyok Java-ból, egy játékot szeretnék megvalósítani, akinek van egy kis türelme és ideje írna privátot, és részletezném, hogy hol akadtam meg...

    Hidd el, az esetek 90%-ában egy ilyen SEMMI konkrétumot nem tartalmazó hozzászólást ignorálják az azt olvasók, mert az emberek többsége nem fog önként jelentkezni, hogy akkor megoldjon helyetted egy feladatot. Mindenkinek korlátos a szabadideje. De ha bedobnád IDE a kérdést, nem pedig privátban kérnél szívességet valakitől, akkor biztos, hogy lennének többen is, akik segítenének neked.

  • Sk8erPeter
    nagyúr

    (#7040) Sk8erPeter
    10+ évvel ezelőtt váltottam netbeansről eclipse-re céges policy miatt. Az megkönnyebbülés volt. Ez alatt a pár hét alatt alatt egész egyszerűen semmi sem működött úgy ahogy kellett volna. Kiszámíthatatlan volt, néha működött valami, néha nem. Egy maven projekt összeállításánál a spring lib függőségek verzióit összekavarta. A projektben a beágyazott javadb-t néha nem tudta elindítani. Néha nem fordított... nem egy production ready dolog..

    Nem mondom h az eclipse tökéletes lenne, de jobb. Netbeansben vannak jópofa "varázslások", amik marhajók, ha az ember nulláról tapasztalat nélkül kezd hozzá valamihez. Cserébe viszont instabil.

    Hát ez nagyon furcsa, mert ilyen jellegű instabilitási problémákat soha nem tapasztaltam NetBeans-szel. Eclipse-szel annál inkább (mint írtam, tehát a "VALAMELYIK plugin 'eltört' VALAHOL VALAMI miatt"-szintű exceptionök, rossz függőség-feloldás (ezt konkrétan Xtexttel kapcsolatos plugineknél tapasztaltam), aztán logban, backtrace-ekben túrkálás, feladás, új Eclipse-példány letöltése), tehát számomra az instabilitás az előbb említett dogok miatt inkább igaznak tűnt Eclipse-re, de egyébként ismerősök sztorijaiból kiindulva is megerősítést nyert ez az elképzelésem - nyilván ezzel totálisan ellenkező tapasztalatok is vannak, lásd a Te esetedet. Igaz, a NetBeans-es instabilitási problémák okait tényleg nem értem nálad, fogalmam sincs, mi lehetett az oka. Félreértés ne essék, használom az Eclipse-et, bizonyos szempontokból jobban szeretem a NetBeans-nél, más szempontból meg épp a NetBeans-t szeretem. Egyébként ezek a stabilitásbeli kérdések természetesen felhasználásfüggők is, hogy egyáltalán milyen esetekben van esély rá, hogy előjöjjenek (pl. engem pluginfejlesztésnél halálba idegesít az Eclipse, egy más jellegű projektnél meg simán előfordul, hogy csak úgy megy, ahogy a NetBeans is).
    Amúgy még sokan az IntelliJ IDEA-t dicsérik, na ezzel nekem még nincs tapasztalatom, majd adok neki egy esélyt, már kíváncsi vagyok, mitől olyan népszerű.

  • Sk8erPeter
    nagyúr

    Most februárban egy hónapig használnom kellett a netbeans-t... hát basszus, megőszültem tőle. Nemtom kinek írják ezt, de nem nekem való.

    Mi volt a bajod vele egészen konkrétan? Amúgy bármilyen másik IDE-re állnál át, mint amit nagyon megszoktál és kiismertél, először gondod lenne vele, és minden totál máshol lenne, szóval annyira nem meglepő, hogy eleinte szarnak találtad. Aethelstone-hoz hasonlóan először nekem is hasonló trauma volt az Eclipse, aztán megszoktam azt is, most meg hogy épp plugint fejlesztek rá, legalább tudom, micsoda egy szar tud lenni. ;] Pl. az automatikus függőség-felderítés a plugineknél borzalmas, totál hibás, és a legjobban azt szeretem, amikor teljesen általános jellegű exceptionhalmazt kapok pluginfejlesztésnél, vagy amikor magában az Eclipse-ben "törik el" valami, például VALAMELYIK plugin VALAMELYIK része, de nyomozni még a backtrace-ek, logok alapján is elképesztő időigényes tud lenni, hogy mégis mi okozza, és mi oldja meg, és ilyenkor az a remek, hogy gyorsabb egy új, "szűz" Eclipse-példányt letölteni, ismét letölteni a szükséges pluginjeidet, és importálni a beállításaidat. Csak hogy ne tartsa az Eclipse-et sem senki olyan tökéletesnek. Ettől függetlenül megszerettem valamennyire ezt is, bár én a NetBeans-t sok szempontból ezerszer stabilabbnak tartom még mindig, csak az Eclipse-ben sajnos több a lehetőség bizonyos esetekben.

  • Sk8erPeter
    nagyúr

    Sziasztok!

    Most kezdtem el foglalkozni a Java nyelvel, semmiféle előképzésem nincsen. Választásom a Tanuljuk meg a Java programozási nyelvet 24 óra alatt könyvre esett. Ahogy láttam már van jóval újabb verziója a Java-nak azóta mióta kiadták a könyvet, és ebben még a 2.0 alapján tanítgatják az embert. A kérdésem az lenne hogy ennek van-e valami jelentősége? Vagy ha a könyvben leírtakat megtanulom, akkor nem lesz problémám az újabb verziókkal?
    Előre is köszönöm.

    "ebben még a 2.0 alapján tanítgatják az embert"
    Ez most komoly? Akkor dobd el messzire azt a könyvet. Ez a 24 órás sorozat amúgy is csak felületes gyorstalpalóra jó, nem pedig az alapok normális elsajátítására, meg úgy általában az algoritmizálási képességek fejlesztésére, szóval ha már ilyen gyorspélda-sorozatról van szó, akkor ne ősrégi példák alapján kapj képet a nyelvről.

  • Sk8erPeter
    nagyúr

    Sziasztok!

    Elég topichatáron mozog a kérdésem, lehet nem ez a legmegfelelőbb hely rá.

    Szóval van egy C2D t5750 (2ghz dual core, 2mb l2 cache), 2 gb ddr2 rammal. Namost kedves netbeans szereti a ramot. Elég sokszor produkál random halálokat, ilyen 1-3 mp-re megáll az élet, meg amikor background projecteket scannel, eléggé unresponsive lesz a gép.

    Namost 5 hónapja kezdtem a javát, szóval nem fogok trillio .java-t buildelni, az még odébb van.

    Ha bővítek ramot, az megoldaná a problémákat, vagy cpu lesz a szűk keresztmetszet, és inkább ne költsek erre a laptopra és vegyek új konfigot, amikor lesz rá keret?

    Nem egy mai csirke az a gép, egy SSD beszerzése, és némi RAM-bővítés egészen biztos, hogy dobni fog a felhasználói élményen, már ha nem érné meg új gépet venni. Az SSD-nek persze van egy olyan előnye, hogy azt át tudod vinni másik gépbe is, tehát az mindenképpen megérné. Tapasztalatból tudom, milyen ugyanaz a gép, amikor HDD-n van minden, és elindítod a NetBeans-t vagy Eclipse-et rengeteg megnyitott projekttel, és milyen az, amikor átkerül az egész SSD-re, brutális a különbség utóbbi javára, jópár hajszállal több marad a fejeden. Ilyenkor az elején ugye végigfutkorászik a projekteken, nem mindegy, milyen olvasási sebességgel kotorászik (meg hát nyilván az írási sebesség sem mindegy).
    Egyébként tényleg eléggé OFF-topic. :)

  • Sk8erPeter
    nagyúr

    Sziasztok,
    Segítséget szeretnék kérni hogy hogyan tudok olyat készíteni hogy egy pop-up window-ban egy kép jelenjen meg hover text alatt ? Vagyis ha ráhúzom az egeret a szövegre, akkor egy kis ablakban jelenjen meg egy kép. Viszont ez az ablak ne törje szét az oldalt, vagyis valami féle popup legyen.
    Próbálkozom sok mindennel, de egyszerűen nem sikerül.
    Üdv,

    Ez a kérdés eltévedt.

  • Sk8erPeter
    nagyúr

    Már csak azért is, mert az a = null csak a referenciát nullozza, attól még az a Car példány létezik és még más referencia is hivatkozhat rá. Tehát totális hiba a számláló csökkentése azért, mert az a-t nullozzák.

    Csókoltatom a könyv íróját!

    "Csókoltatom a könyv íróját!"
    Nem lőttél mellé, nem akarok szemét lenni, de szegénykém egy kókler. Sok tekintetben megragadt a tudása valahol a kilencvenes évek végén, kétezres évek elején, szerintem nem igazán képzi már magát. Ezt onnan tudom, hogy BME-n még régebben felvettem nála egy webfejlesztéssel kapcsolatos tárgyat (kellett a kredit, gondoltam akkor már érdekeljen), és az előadásain a kínok kínját éltem át, amikor például megmutatta a JavaScript-kódjait, és a saját maga által sok-sok éve írt tákolmány fos kódot nem értette, látszott, hogy elakad, agyalnia kellett rajta, hogy az mit is csinál, már nekünk, a hallgatóknak volt égő, készültem rá, hogy jelentkezem, és elmagyarázom neki, mit csinál a saját kódja (de türelmesen vártam, mert így is elég kínos volt a helyzet), de 5 perces hümmögés után valahogy rájött, vagy skippelte a diát. Ősrégi, elavult módszereket alkalmazott, a kódok összecsapottak voltak... na most ennek fényében el lehet képzelni, mennyire lehetnek jók a Java-kódjai és -feladatai. Igazából megdöbbentő számomra, hogy BME-n taníthat (na nem mintha nem lehetne még sok nevet dobálni, akinek finoman szólva nem up-to-date a tudása).

    Szerk.: az egészből a következtetés igazából annyi, hogy szerintem azt a könyvet nem érdemes komolyan venni, így tanulni sem belőle, bár sosem olvastam, de az előbbi példa lehet, hogy elég is volt rá.

  • Sk8erPeter
    nagyúr

    Köszi!
    Igen az utóbbira gondoltam én is, csak a megvalósításában még nem vagyok annyira perfekt. :)
    :R

    "Igen az utóbbira gondoltam én is, csak a megvalósításában még nem vagyok annyira perfekt"
    Nem nagy művészet:
    http://prohardver.hu/tema/java_topic/hsz_6769-6769.html

  • Sk8erPeter
    nagyúr

    Próbáld meg így:

    int szamok[] = new int[5];
    BufferedReader be = new BufferedReader(new InputStreamReader(System.in));
    for (int i = 1; i < 6; i++) {
    System.out.println("Kerem az " + i + ". szamot:");
    szamok[i-1] = Integer.parseInt(be.readLine());
    System.out.println("Az elso szam: " + szamok[i-1]);
    }

    Mondjuk ehelyett a sok i-1-es szenvedés helyett szerintem szebb lenne úgy, ha 0-tól inicializálnád az i-t, és csak a kiíratásnál, tehát azon az egy helyen adnál hozzá 1-et. :)
    System.out.println("Kerem az " + (i+1) + ". szamot:");
    De ne vedd magadra, tudom, hogy az EREDETI kódban javítottad csak a hibát, csak akkor már legyen teljes a korrekció. :D

Új hozzászólás Aktív témák

Hirdetés