Hirdetés

Keresés

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

  • cigam
    titán

    Objektumok értékének összehasonlítására mindig equalst kell használni. Ha ezt betartod, jelentősen csökkented a potenciális szívások számát.

    (Aztán ha már nagyon pontosan tudod mit csinálsz, enumoknál érdemes lehet eltérni ettől a szabálytól, de sehol máshol. )

    Ma is tanultam valamit. Köszi!

  • Ablakos
    addikt

    Azt tippelnem, hogy arra utal, hogy az annotacio neve bizonyos esetekben megteveszto. Hiszen egy interface metodus implementalasa nem override fogalmilag.

    Köszi értem. És a sic egy rövidítés vagy valami
    angolizmus? :B

  • btraven
    őstag

    Miért számítottál másra?
    Decimális 256 az hexadecimális 0x100. Mitől kellett volna 0x1FF-nek lennie?
    Ha 0x1FF-et akarsz, miért nem hexadecimálisan adod meg az x int értékét?

    Köszönöm, ezt jól elnéztem. :R
    int értékem van, és az alpha-t szerettem volna FF-re állítani mindegyikhez.
    Akkor marad az r,g,b,a konstruktor.

  • Ablakos
    addikt

    Nem hinném, hogy máshogy kéne fordítani. De nem lehet, hogy valamelyik Java verzióban változott a viselkedés? Melyik verzióval fordítasz? Ki tudsz próbálni másikat is?

    Rövid utánanézés után mintha a Java 11-ben lett volna ezzel kapcsolatos módosítás? Hányas Java OCP-t nézel és milyen JDK-val fordítasz?

    Igen, erre nem gondoltam. :B Mármint a JRE verzió váltással (19.01 -> 1.8) mindjárt előállt a két class.
    Én mindent 19-es java környezettel használok, ez pedig egy OCP 8-as study guide.

    Köszönöm !

  • Szabadni szabad, de nem tul szep. Interface moge viselkedest illik rejteni, igy pl. azt, hogy miket tudnak csinalni az allatok, szivesen kiszerveznem interface-be, de azt, hogy milyen tulajdonsagai vannak az allatoknak, inkabb nem.
    A backend dolgot nem tudom itt hogyan erted.

    Ettől féltem. (Próbálok többek, több kérdésére is választ adni, nem csak neked.)
    Amin dolgozom, az egy céges JAVA backend library. A valós feladat, hogy az ügyfél listákat tudjon létrehozni egy adott parent-child business object-ből (listánként vagy csak az egyik, vagy csak a másik). A listáknak azonban különböző saját tulajdonságaik lehetnek (jó lenne ha dinamikusan lehetne őket kreálni és nem kéne folyton a CD-t dolgoztatni), sőt maguk a kapcsolatok is változó változókkal bírnak. Tehát egy BO többször is szerepelhet a listában, ha a kapcsolatnak mások a paraméterei.
    Az egyszerűen menne, hogy lepéldányosítok egy közös interfészt, de az nem oldja meg, hogy minden új típusú listára új osztályt kéne csinálnom. Ha csinálok egy lista osztályt és abba dobok egy "tömböt" a plusz paraméterekről, akkor viszont azokat folyton cast-olnom kellene. Ezért gondoltam, hogy inkább csinálok ahhoz is egy marker interfészt, plusz bele az említett függvényt a lehetséges értékekkel és akkor a kliens oldalon nulla tudással lehet kezelni a dolgot.
    A backend-nél arra gondoltam, hogy ha foreign key-t szeretnék a különböző paraméterekre, akkor az macerásabb. Listatípusonként tudok csinálni egy táblát, a típusleíróba meg beírom a hozzátartozó tábla nevét, de kicsit mókolásnak érzem.
    De bármennyire is keresek, nem találok rá elegáns megoldást.

  • Tobbfele megoldas lehet, de talan a legegyszerubb az, ha csinalsz egy Activity osztalyt, ami leirja, hogy mit es hogyan tud csinalni az az Activity.
    Az allat osztalyban meg eltarolsz egy Activity Collection-t, amire csinalsz egy getter-t.
    Aztan az Activity-bol csinalhatsz mondjuk egy KangarooHidingActivity-t, ami a konstruktoraban megkap egy Kangaroo-t. A Kangaroo konstruktoraban meg megcsinalod a KangarooHidingActivity-t, meg a masikat es belerakod oket egy collection-be.
    Igy amikor vegigmesz egy Animal Collection-on, le tudod kerni az egyes Activity-k kollekciojat allatoktol fuggetlenul, azok az Activity-k meg megis kepesek lesznek allat specifikus dolgokat csinalni, az eppen megadott allaton.
    Azt nem tudom, hogy ez egy ismert pattern-e, meg van-e neve, de egyszeru esetben valami ilyesmit csinalnek. A Command pattern nagyjabol ez, de talan nem pontosan.

    Ráadásul ugyanezt meg tudom változókkal is csinálni, ugye?. Csinálok egy marker interface-t(AnimalAttribute), amihez hozzádobok esetleg egy getPossibleValues()-t és legrosszabb esetben kap az adott class egy wrapper-t. Így akár egy dinamikus listát is tudok csinálni, ahol a tigriseknek lesz Csíkvastagsága a kengurunak meg Erszénynyúlásiegyütthatója.
    "Szabad" ilyet?

  • btraven
    őstag

    [Például]
    De egyébként A hello world egy unit tesztelhetőség szempontjából pont eléggé faramuci dolog, mert ott a függvényedet le kellene választani a környezetéről. Ha nem a környezetéről leválasztva tesztelsz valamit, akkor az az én szememben már inkább integration teszt.
    Egy olyan függvényt, ami a standard outputra kiírja, hogy Hello world, nem lehet jól unit testelni, mert a standard outputot kell mockolni, ami meg csak ilyen nyakatekert módokon oldható meg.
    Ha viszont olyan függvényed lenne, ami visszaadja, hogy: "Hello world" -> remekül unit tesztelhető. Olyan, ami kap egy outputstream-et input-ként és kiírja rá, hogy "Hello world" -> szintén remekül unit testelhető.
    "Ritka volt az, amikor nem változott hétről hétre a követelmény, és nagyon kevés része volt a kódnak az, amiben unit tesztre érdemes dolgok történtek."
    Ez utóbbi mindig nagyon gyanús. Én is mindig azt hiszem, ogy jó, triviális kódokat írok, aztán amikor elkezdem tesztelni, szinte mindig kijön valami turpisság. Nyilván a tesztelés mehet három módon: kézzel pöcögtetve: valószínűleg jó kódot eredményez, de ha legközelebb aki hozzányúl, nem olyan alapos, mint aki írta és kézzel tesztelte, akkor rögtön veszélyes lesz módosítani a kódot. 2.: vagy azonnal automata tesztet írni, vagy az előző pont kézi eseteit automatizálni. Ez elég jó általában. 3.: előre írni meg a tesztet és csak utána a kódot. Pont az a nagy előnye, ami miatt elsőre nagyon nehéz vele dolgozni: végig kell előre gondolni az elvárt viselkedést és a trükkös eseteket is. Erre gyakran használt kifogás, hogy sokat változik az elvárás, azért nem kezdenek vele. De nem teljesen korrekt érv, hiszen anélkül, hogy tudná mit akar csinálni az ember, el sem tud mit kezdeni programozni.
    Én tényleg csak alkalomszerűen TDD-zek, de örülnék, ha valamikor elkezdenénk végignyomni vele teljes projekteket, mert minőségben ég és föld a különbség. Ha előre írsz tesztet, akkor sokkal jobban át tudod gondolni, hogy milyen osztályoknak, milyen interface-eken keresztül kell tudniuk egymással beszélni. Sokkal könnyebb elkerülni a spagetti kódokat.

    Én csak azt ismerem TDD-nek amit a 3. pontban írsz.
    Programkódot nem szabad írni amíg a teszt nincs meg.
    És nem szabad újabb tesztet írni amig nincs kész az előző tesztre a jó program.
    unit teszt az más tészta, azt lehet írogatni szabadon a program mellett.
    Tehát ha valaki unit tesztet használ az még nem TDD.

    De lehet rosszul tudja, Robert C. Martin könyvében olvastam.

  • axioma
    veterán

    Nagyon teves feltetelezes. Konkretan van ceg, ahol a felveteli reszekent TDD-ben kell megoldanod a feladatot. Mivel - meglepeteeees - TDD alapon dolgoznak. En viszonylag keves dolgot fejlesztettem TDD-ben, de amit igen, az mindig meghalalta.

    Nalam a tdd ott bukik, hogy mikor me'g semmi nincs a szoftverbol csak tervek, akkor forditjak le a kovetelmenyeket tesztesetekre. Ami meg csak akkor mukodik jol, ha vagy eleve valami mechanikus, a kimenetekkel csak elgepelest ellenorzo a feladat [protokoll vagy kodolas stb. megvalositasa], vagy meglevo 10 eve futo cuccba +1 feature, ahol minden mas kobe van vesve, nincs fejlesztoi dontesi helyzet. Ezektol eltero esetben nagy esellyel lesz menet kozbeni varialas vagy olyan fontos kepesseg amit elfelejtettek tesztesetbe fogalmazni, mert annyira trivialis ha az egeszet nezne a fejleszto, nem csak a fixalando teszteseteket egymas utan.
    (Az meg nem tdd, hogy ir teszteket, ir ettol fgtl a kovetelmenyekbol egy szoftvert, es mikor kilora kesz akkor engedi ra a teszteket, es kezd javitgatni. Legalabbis szvsz.)

  • Ablakos
    addikt

    Akkor nem értem a problémát, nálam teljesen jól működik:

    Name (empty will stop):
    mybook
    Publication year:
    1
    Thank you! Books added: 1
    Name (empty will stop):
    mybook
    Publication year:
    1
    The book is already on the list. Let's not add the same book again.
    Name (empty will stop):
    Thank you! Books added: 1
    Name (empty will stop):
    yourbook
    Publication year:
    2
    Thank you! Books added: 2
    Name (empty will stop):
    mybook 1
    yourbook 2

    (Thank you! Books added: egy picit félrevezető kiírás, mert akkor is jön, ha nem adtunk hozzá semmit)

    Most már, működik. Miután elárultad, hogy az equal-t is meg kell valósítani. (override) :K Előtte nem tudtam, hogy a contains (teljeskörű) működéséhez azt is meg kell írni.

    Köszönöm.

  • Ablakos
    addikt

    A contains megmondja, hogy érték alapján van-e egyező elem az adott kollekcióban azzal az objektummal, amit paraméterként kapott. Azt, hogy érték szerint megegyezik-e valami, az equals metódus jelenti a Javaban. Ha van szerinted jó equals és nem így működik, akkor mutasd meg az equals-odat.

    Mindössze két tag változó van a Book osztályban:
    private String name;
    private int publicationYear;
    -----------------------------------------------------------//------------
        @Override
        public boolean equals(Object obj) {
            if (this == obj) {
                return true;
            } else if (!(obj instanceof Book)) {
                return false;
            }
            return (((Book) obj).name.equals(this.name) && ((Book) obj).publicationYear == this.publicationYear);
        }

  • Ablakos
    addikt

    Az Arraylist contains hasznalja az equalst. Ha nincs korrektul implementalt equals a Book classban, akkor csak abban az esetben fog igazat adni, ha ugyanazt a referenciat tartalmazza az egyik, meg a masik book. Erdemes viszont akkor mar hashCode-ot is implementalni, mert mas kollekciok hasznalhatjak azt is a contains eldontesehez.

    Azt hittem olyan csoda metódus a contains. :B Akkor mi értelme a contains-nek?
    Az eddigi (oktatási) feladatokban is override-oltam az equals-t és az jól is üzemelt. (referenciát és minden változót végigvizsgálva az objektumban)

  • floatr
    veterán

    Igen, azok valosak, s joval nagyobbak, illetve latvanyosabbak, alairom. Attol meg szerintem a master branch problemakore is tekintheto valosnak, ha joval kisebb meretu is a dolog.
    Offnak reszemrol is vege.

    Tőlem nevezhetjük csütörtöknek is a branchet, de nem lesz kevésbé rasszista a világnak az a fele, ami most is az.

  • fatal`
    titán

    Miert, mi a valos problema? Amugy ha off miatt van megfelelobb topic, szivesen koltozok. Ez pont egy valos problema, csak te nem erted, hogy az. Neked nem az, vannak akiknek igen.

    Valós probléma pl., hogy az USA-ban a feketéket megbélyegzik a rendőrök. Vagy az, hogy a kormányunk a melegek ellen uszít.

    Az, hogy a gitben, hogy hívják a fő branchet, az nem valós probléma, hanem fingreszelés.

    De befejeztem az offolást.

  • Sajnos nem erted az emberek mukodeset, meg a traumak hatasat. Hiaba mondod esetleg azt, hogy ma mar nincsen rabszolgasag, ezert nem lehet traumatizalo hatasa az emlitesenek, de a traumak jelentos resze generaciokon tovabboroklodik. Persze az egy remek dolog, ha ezzel el kezd foglalkozni az ember, de ott ahol a lakossag 12%-a potencialisan kitett ennek a problemanak, ott elegge irrealis azt mondani, hogy akkor mindenki oldja meg es menjen pszichologushoz kozuluk.
    Valamint ott sem biztos, hogy mindenki arra a pontra fog eljutni, hogy ot valojaban ez nem is zavarja, mert nem neki szol, lehet inkabb az ezen kifejezesek megszunteteset kero enje fog eloterbe kerulni. Ha valaki azt erzi, hogy serti valami, akkor a pszihologusnal egyaltalan nem biztos, hogy az fog kijonni, hogy akkor elfogadom a sertest. Sokkal valoszinubb, hogy az fog kijonni, hogy akkor szembeszallok vele nyiltan, mert tartom magamat annyira, hogy ne engedjem megalazni masok altal.
    Ez egy gesztus, ami egy lepes egy empatikusabb, bekesebb vilag fele. Nem oldja meg a vilag gondjait, sokaknak megis szebb lesz toluk a vilag, kevesebb az alapfeszultseguk.
    Egyebkent en sem talaltam volna semmi bantot a master branch nevben, de nem nekem tisztem megitelni, hogy banto-e, mert nem vagyok erintett. Foleg ugy, hogy itt nincs melle mondva a slave kifejezes, ez nehezebben erthetove teszi a dolgot a szamomra is. De ez nem nekem szol. Annyira nem lesz nehez ket betuvel kevesebbet gepelnem, meg neha rajonni, hogy jeee, itt master van. Multbeli dolgokat, muveket en sem valtoztatnek meg, de azert raknek mellejuk disclaimereket.

    Ettől egyáltalán nem kevesebb lesz az alapfeszültség, hanem pont hogy feltépi ezt a sebet szerintem. Kb. fél éve váltottunk pont rendszert amikor szembesültem az új névvel. A mai napig egy pillanatig nem merült fel bennem, hogy egy ilyen abszurd baromság lenne a háttérben. Azt a majmot amelyik kitalálta, hogy sikerüljön frissen megbélyegezni egy csoportot a nevükben mindenkire rámért többlet szívás miatt, beállítanám, hogy az összes HDD és ODD jumpert pingálja át kézzel.
    De jövő héttől, akkor majd légyszíves ne lehessen fekete ruhát kapni a boltokban, mert az egy általam nem ismert barátomat a nagymamája halálára emlékezteti és ettől traumatizált lesz. Ebben pedig "potenciálisan" a föld népességének 100% érintett, hiszen nagymamája még szegény Dollynak is volt.
    Baszki lemaradt: tátsz end préjörsz. Így már biztos minden rendben lesz!

  • fatal`
    titán

    Sajnos nem erted az emberek mukodeset, meg a traumak hatasat. Hiaba mondod esetleg azt, hogy ma mar nincsen rabszolgasag, ezert nem lehet traumatizalo hatasa az emlitesenek, de a traumak jelentos resze generaciokon tovabboroklodik. Persze az egy remek dolog, ha ezzel el kezd foglalkozni az ember, de ott ahol a lakossag 12%-a potencialisan kitett ennek a problemanak, ott elegge irrealis azt mondani, hogy akkor mindenki oldja meg es menjen pszichologushoz kozuluk.
    Valamint ott sem biztos, hogy mindenki arra a pontra fog eljutni, hogy ot valojaban ez nem is zavarja, mert nem neki szol, lehet inkabb az ezen kifejezesek megszunteteset kero enje fog eloterbe kerulni. Ha valaki azt erzi, hogy serti valami, akkor a pszihologusnal egyaltalan nem biztos, hogy az fog kijonni, hogy akkor elfogadom a sertest. Sokkal valoszinubb, hogy az fog kijonni, hogy akkor szembeszallok vele nyiltan, mert tartom magamat annyira, hogy ne engedjem megalazni masok altal.
    Ez egy gesztus, ami egy lepes egy empatikusabb, bekesebb vilag fele. Nem oldja meg a vilag gondjait, sokaknak megis szebb lesz toluk a vilag, kevesebb az alapfeszultseguk.
    Egyebkent en sem talaltam volna semmi bantot a master branch nevben, de nem nekem tisztem megitelni, hogy banto-e, mert nem vagyok erintett. Foleg ugy, hogy itt nincs melle mondva a slave kifejezes, ez nehezebben erthetove teszi a dolgot a szamomra is. De ez nem nekem szol. Annyira nem lesz nehez ket betuvel kevesebbet gepelnem, meg neha rajonni, hogy jeee, itt master van. Multbeli dolgokat, muveket en sem valtoztatnek meg, de azert raknek mellejuk disclaimereket.

    "Ez egy gesztus, ami egy lepes egy empatikusabb, bekesebb vilag fele."
    Az ilyen hülyeségektől se empatikusabb, se békésebb nem lesz a világ, mert a valós problémákkal senki nem foglalkozik.

  • MrSealRD
    veterán

    Egyreszt magahoz a szakmahoz is van koze, ha masert nem, az emlitett fekete fejlesztok miatt. Masreszt meg a szakma termekeinek is van celkozonsege. Ott aztan vegleg hatalmas versenykepessegi eleses, ha nem gondolsz mindenfele marginalizalt csoportra.
    Valahol a lenyeg ott van, hogy szerinted csak hipererzekeny viraglelkueket zavar a dolog, de valojaban nem. Az emberre a dolgok nem csak tudatosan hatnak, a felszin alatt hatalmas lelki es ezen keresztul kesobb fizikai bantalmat tudnak okozni. De errol ne nekem higyj, inkabb pszichologusok/pszichiaterek tapasztalatait vedd figyelembe.
    Azzal, hogy aki ellenvelemenyt fogalmaz meg, en sem ertek egyet, hogy el kellene nyomni. Ellenvelemenynek mindig van helye.

    Ha valakit traumatizál az, hogy a branch neve master... az kezelésre szorul, és nagyobb baja is van ennél... Illetve, azt tegyük hozzá, hogy sok más helyen is ott vannak különböző szavak...amik triggerelhetik ezt az érzés...

  • Egyreszt magahoz a szakmahoz is van koze, ha masert nem, az emlitett fekete fejlesztok miatt. Masreszt meg a szakma termekeinek is van celkozonsege. Ott aztan vegleg hatalmas versenykepessegi eleses, ha nem gondolsz mindenfele marginalizalt csoportra.
    Valahol a lenyeg ott van, hogy szerinted csak hipererzekeny viraglelkueket zavar a dolog, de valojaban nem. Az emberre a dolgok nem csak tudatosan hatnak, a felszin alatt hatalmas lelki es ezen keresztul kesobb fizikai bantalmat tudnak okozni. De errol ne nekem higyj, inkabb pszichologusok/pszichiaterek tapasztalatait vedd figyelembe.
    Azzal, hogy aki ellenvelemenyt fogalmaz meg, en sem ertek egyet, hogy el kellene nyomni. Ellenvelemenynek mindig van helye.

    Itt nem arról van szó, hogy valaki mimóza-e, hanem hogy elfelejtettük Babitsot és egyre több a néma.
    Ha valakinek akkora lelki törése van, hogy egy reál szakon nem képes absztrakt fogalmakról személyes érzelmi befolyáltság nélkül társalogni, akkor kezeltesse magát. Nem hiszem, hogy az megoldás, hogy holnaptól átírjuk a halmazelméletet, mert Kolompár Eszmeraldát a kisebbségi hovatartozására emlékeztetik a részhalmazok.

  • MrSealRD
    veterán

    Valoszinuleg sosem fogd megerteni, hogy mit jelent egy feketenek a mester szo hallata. En sem fogom, bar szeretnem azt hinni, hogy igen. De nem vagyok naiv, sosem fogom valoban aterezni milyen rabszolgacsalad sarjanak lenni, barmekkora is az empatiam. Az ilyen szavak tudat alatt is hatalmas karokat tudnak okozni az erintetteknek. S az is persze igaz, hogy Magyarorszagon tok mas az elsodleges jelentese a leforditott szonak, emiatt megint mas elkepzelni a pszichologiai hatasat. Idehaza persze elsosorban a mindenhez erto ember jon elo a szo kapcsan, nem a korbacsos rabszolgatarto. Meg az is igaz, hogy biztosan korulvesz minket ezer olyan szo, ami mas emberekben szorongast valt ki. Es persze eszre se vesszuk. Azert amik eleg szeles korben okoznak problemat, az reszemrol nem baj, ha atnevezesre kerul. Meg fogom birni szokni, hogy 1 betuvel kevesebbet kell gepelni.

    Ezzel csak egy baj van. Semmi köze nincs a szakmához... Fogadni mernék rá, hogy az eddigiekben fejlesztőként dolgozó feketék, totál nem foglalkoztak ezzel. Max 1-2 hiperézékeny viráglelkű... Csak most az a divat, hogy az feleljünk meg minden jogi aktivista csoportnak... Alig várom, hogy véget érjen ez a korszak... és végre a lényegre fókuszáljon a világ. És ha valakit ez zavar, akkor 3mp alatt kapja a különböző bélyegeket...de úgy hogy utána már életében nem fog tudni dolgozni... Ez abszurd.

  • axioma
    veterán

    Valoszinuleg sosem fogd megerteni, hogy mit jelent egy feketenek a mester szo hallata. En sem fogom, bar szeretnem azt hinni, hogy igen. De nem vagyok naiv, sosem fogom valoban aterezni milyen rabszolgacsalad sarjanak lenni, barmekkora is az empatiam. Az ilyen szavak tudat alatt is hatalmas karokat tudnak okozni az erintetteknek. S az is persze igaz, hogy Magyarorszagon tok mas az elsodleges jelentese a leforditott szonak, emiatt megint mas elkepzelni a pszichologiai hatasat. Idehaza persze elsosorban a mindenhez erto ember jon elo a szo kapcsan, nem a korbacsos rabszolgatarto. Meg az is igaz, hogy biztosan korulvesz minket ezer olyan szo, ami mas emberekben szorongast valt ki. Es persze eszre se vesszuk. Azert amik eleg szeles korben okoznak problemat, az reszemrol nem baj, ha atnevezesre kerul. Meg fogom birni szokni, hogy 1 betuvel kevesebbet kell gepelni.

    +1 meloban a dummy is tiltott, de pl. a buildcop is, build gardener a pol.korrekt - nyilvan mas a toltese erzelmileg az egyes - sajnos angolban overload-olt - szavaknak, amivel egyet lehet tenni, tiszteletben tartani

  • floatr
    veterán

    Nem gyakori, de nem art, hogyha van az embernek az eszkotaraban valami, amivel tudja kezelni adott esetben. Nyilvan valos statisztikam nincs a dologrol, de egyebkent azert egyaltalan nem ritka, hogy sok duplikalt string van a heapen. Az mar ritkabb, hogy ezek hosszu eletuek is legyenek egyben. Es elsosorban akkor jon el az a szint, ahol erdemes kezelni.

    Nem kötekedésképpen kérdezem, csak az elmúlt 25 év alatt egyszer sem kellett használnom, és másoktól sem láttam. Ez persze önmagában nem jelent semmit, mert lehet hogy egy interntelen buborékban élek ;)

  • floatr
    veterán

    Van amikor bitbaszas, de van amikor a heaped 95%-a ismetlodo stringekbol all. Akkor nem az. Az megint egy mas kerdes, hogy az ilyen esetben nem biztos, hogy a problema megoldasara idealis architecturalis megoldas lett kivalasztva.

    És ez a tapasztalataid szerint mennyire gyakori feladat való életbeli projektekben?

  • Mit javasolsz helyette? Nekem van saját preferenciám, de kíváncsi vagyok mit mondanál rá.

    Erre ott van a -XX:+UseStringDeduplication VM kapcsoló. Bár az csak a hosszú életű Stringeket internálja, de sok esetben az is elég lehet attól függően mi a cél.

  • Aethelstone
    addikt

    Mit javasolsz helyette? Nekem van saját preferenciám, de kíváncsi vagyok mit mondanál rá.

    Jó kérdés. Nem gyakran ütközik az ember ilyesmi problémába, de tuti valami collectiont vagy sima tömböt használnék a gyakori Stringjeimhez. Hashelve esetleg. Mivel az adatok általában db-ben laknak, ezekből értelmesen keveset fetchelünk a feldolgozáshoz, ezért igazi usecase-t hirtelen nem is tudnék mondani. Max gyors szövegfeldolgozás memóriában vagy valami hasonló. Megfogtál.

  • dudikpal
    senior tag

    Talan jpql queryvel, ilyenekkel a clauseban: where :users is null or user in :users. De 39 parameterrel lesz ez minden, csak szep nem.
    Ha mondjuk Spring data-t hasznalsz, akkor a filter lehet komplex objektum. [link]

    Elképesztő mennyire egyértelműnek veszem, hogy ha én tudom miben van a projekt, akkor mindenki más is :DDD
    Szóval Spring Boot projekt, Spring Data JPA-val, MongoDB-vel.

    A jpql alapból nem játszik, mert igaz nem mondtam, de a több érték két lehetőséget takar:
    - értékek tömbben
    - 2 érték, amikkel kell egy gt-lt vizsgálat
    Ezt jpql-el mondjuk meg lehetne, csinálok egy helpert, az megnézi h mi van az attribútumban, és úgy konkatenálja össze a queryt. Bár ettől kiráz a hideg, ha csak belegondolok :U
    Akkor már inkább töltse fel a filterPredicates tömböt, ha már a CB-nek amúgy is van between methodja.

    A nullal meg nem is kell foglalkoznom, mert a modelmapperem setSkipNullEnabled, közben beugrott.

  • Spidi77
    csendes tag

    Fuha, itt elegge komoly gondok vannak. :(

    public void beolvas(Scanner sc) {
    System.out.println("Kérem a diák nevét!");
    this.setNev(sc.nextLine());
    }
    public void setNev(String nev) {
    this.nev = nev;
    }

    Köszönöm a segítséget .
    Keresgéltem már mindenhol a megoldást de eddig sehol nem találtam .

  • mobal
    nagyúr

    Foglalni kell egy új tömböt, aminek a mérete a két tömb méretének a szorzata, a cikluson belül pedig egy indexet kell növelgetni és arra a poziícióra kell elhelyezni az éppen megalkotott elemet, ahol tart az index.

    String[] lastNames = {"Nagy", "Kovács"};
    String[] firstNames = {"Júlia", "Béla"};
    String[] combinedNames = new String[lastNames.length * firstNames.length];
    int i = 0;
    for (String lastName: lastNames) {
    for (String firstName: firstNames) {
    combinedNames[i++] = lastName + " " + firstName;
    }
    }
    System.out.println(Arrays.toString(combinedNames));

    Most ezt streamekkel kérném :D

  • Ellia
    addikt

    String[] lastNames = {"Nagy", "Kovács"};
    String[] firstNames = {"Júlia", "Béla"};
    for (String lastName: lastNames) {
    for (String firstName: firstNames) {
    System.out.println(lastName + " " + firstName);
    }
    }

    Nagy Júlia
    Nagy Béla
    Kovács Júlia
    Kovács Béla

    Köszi srácok!

    És még egy dolog, hogy tudom kiíratni az eredményt egy új tömbbe?

    Hobbiból tanulom, minden kezdet nehéz :))

  • floatr
    veterán

    Attol, hogy nyitva marad a stream, random adat nem fog belekerulni.
    De direkt debugban vegiglepkedtem az idezett kodon, az Exception kiirasat az ObjectOutputStream.writeFatalException metodus vegzi az OutputStream-be.
    A writeObject maga igy nez ki:

    public final void writeObject(Object obj) throws IOException {
    if (enableOverride) {
    writeObjectOverride(obj);
    return;
    }
    try {
    writeObject0(obj, false);
    } catch (IOException ex) {
    if (depth == 0) {
    writeFatalException(ex);
    }
    throw ex;
    }
    }

    11.0.11-es Oracle JDK-val neztem.

    Még sosem néztem konkrétan ezt a kódot, de "gyönyörű". Néha van olyan érzésem, amikor a runtime forrását túrom, hogy a nagy részét juniorok vagy biorobotok írják. Van egy partnerünk, aki szokott kódot auditálni, és az elemzéseik szerint botrányos minőségű a nagyobb frameworkök forrása (is)

  • fatal`
    titán

    Nem sok gratulalni valo van az Oracle-nek, mert a JDK 1.1-es verzio, 1997. februar ota van az ObjectOutputStream, akkor meg nem volt koze az Oracle-nek a Javahoz. Ehhez a reszehez az implementacionak meg kb. senki nem is nyult hozza azota(Oke, csak 7-es OpenJDK-ban latom, hogy mar az initial load commitban ugyanez volt 2007-ben). Az Oracle meg 2010-ben vette meg a Sunt.

    Akkor a Sunnak, lényegtelen. Nem is értem az elképzelést erre a hülyeségre, de végülis mindegy. :)

  • fatal`
    titán

    Attol, hogy nyitva marad a stream, random adat nem fog belekerulni.
    De direkt debugban vegiglepkedtem az idezett kodon, az Exception kiirasat az ObjectOutputStream.writeFatalException metodus vegzi az OutputStream-be.
    A writeObject maga igy nez ki:

    public final void writeObject(Object obj) throws IOException {
    if (enableOverride) {
    writeObjectOverride(obj);
    return;
    }
    try {
    writeObject0(obj, false);
    } catch (IOException ex) {
    if (depth == 0) {
    writeFatalException(ex);
    }
    throw ex;
    }
    }

    11.0.11-es Oracle JDK-val neztem.

    Arra gondoltam, hogy ez is egy probléma a kóddal, csak nem sikerült értelmes dolgot írnom.

    Ez a writeObject implementáció meg elég nagy gyökérség, gratulálok az Oraclenek. :D

  • fatal`
    titán

    Koszi a peldat!
    Igy egyszerubb valaszolni a kerdesedre.
    [Javadoc] : "Exceptions are thrown for problems with the OutputStream and for classes that should not be serialized. All exceptions are fatal to the OutputStream, which is left in an indeterminate state, and it is up to the caller to ignore or recover the stream state."
    Szoval nincsen kulonosebben specifikalva, hogy mi fog tortenni Exception eseten. Elofordulhat, hogy kulonbozo JVM-eken es kulonbozo javaverziokon is kulonbozokeppen viselkedik, de a leirasaban benne van, hogy az esetleges szemetet a hivonak kell feltakaritani. Szamomra meglepo, hogy igy van. Szoval a catch agban zard a Streameket, majd torold a fajlt, ha van.
    Ha atirod a peldadat "try with resources" alapon, akkor a close-et nem kell sehol meghivnod, mert a ket outputstream autoClosable.

    Nem az a gond itt, hogy exception esetén nyitvamarad a stream?

    Ha nincs try with resources, akkor finallyben kéne zárni (már feltéve, hogy nem null).

  • btraven
    őstag

    Lassan megoszthatnád, hogy konkrétan hogyan csinálod a szerializációt is fájlba írást. A Java azt csinálja, amit mondasz neki, hogy csináljon.

    public static void save() {
            FileOutputStream fos = null;
            ObjectOutputStream out = null;
            try {
                fos = new FileOutputStream("save/quicksave.sa1");
                out = new ObjectOutputStream(fos);
                out.writeObject(Main.party);
                out.close();
            } catch (Exception ex) {
                ex.printStackTrace();
                throw new RuntimeException("Save file error");
            }
        }

    public class Party implements Serializable {
    private static final long serialVersionUID = 6541433114632027143L;

    public class Main {
    public static Party party;

  • Csaby25
    őstag

    Igen, JavaFX-et nem valószínű, hogy egy átlag Java fejlesztői munkakörben fogsz látni a közeljövőben. Egyébként azért van értelme hallani róla, de túl sok enrgiát beleölni talán nem.
    Spring boot meg hasznos és végtelen kereslet van rá, úgyhogy érdemes arra ráfeküdni.

    Köszi! Tudsz(tudtok) ajánlani Spring Boot kurzust kezdőknek?

  • floatr
    veterán

    Gondolom unwanted side effectnek minositi egy linter, vagy egy senior programozo.

    ManowarChangeListenerFactoryManagerProxy

  • btraven
    őstag

    Gondolom unwanted side effectnek minositi egy linter, vagy egy senior programozo.

    Ráadásul ha ezen az osztályon belül azt mondom hogy:
    manowar = 1;
    akkor meg lemarad a set label.

  • Csaby25
    őstag

    Annyira valtozatos, hogy nem lehet megjosolni. Kezdve a miert kerek a csatornafedelen at a mi a kulonbseg a kompozicio es a leszarmazas kozotton at a melyik lista implementacion gyorsabb az iteracioig barmi elofordulhat.

    Annyit megtudtam, hogy olyan lesz amit egyszerű pszeudo kóddal is meg lehet oldani.

  • Csaby25
    őstag

    Az elkészülő - feltétlezem JAR-ban is benne van? Ha igen, ott, ahol lennie kellene?
    Ha nincs felülírva, akkor a /static, vagy /public mappában kellene lennie a classpathon futási időben.
    Ha nincs ott, akkor maven, vagy gradle setup lesz a probléma. Vagy ha esetleg csak IDE-ben nem megy java -cp-s futtatással, akkor az IDE-ben kell megkeresni azt, hogy miért nem olyan classpathot rak össze futtatáskor, mint amit kellene.

    Köszi!
    Közben meglett a probléma, a Webconfig osztályom fölé elfelejtettem kitenni a @Configuration annotációt :W

    Viszont egy másik problémám ami gondolom inkább thymeleaf - html probléma, hátha tud valaki segíteni. Adott a következő layout file: main.html

    <!DOCTYPE html>
    <html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:th="http://www.thymeleaf.org"
    xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
    <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>SFJ - Egy sztori minden napra</title>

    <link rel="stylesheet" href="../static/css/blog.css" th:href="@{/css/blog.css}"/>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" />

    <link href='https://fonts.googleapis.com/css?family=Roboto' rel='stylesheet' type='text/css' />
    <link href='https://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css' />

    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    </head>
    <body>

    <div class="container">

    <nav class="navbar navbar-default">
    <div class="container-fluid">
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
    <ul class="nav navbar-nav">
    <li class="active"><a href="/">Kezdőoldal</a></li>
    <li class=""><a href="/stories">Sztorik</a></li>
    <li class=""><a href="/bloggers">Bloggerek</a></li>
    </ul>
    <div class="navbar-text navbar-right">
    Üdvözlünk <span sec:authentication="name">Anonymous </span>
    <form sec:authorize="isAuthenticated()" id="frmlogout" th:action="@{/logout}" method="post" class="form-inline">
    | <a href="javascript:{}" onclick="document.getElementById('frmlogout').submit(); return false;">Kijelentkezés</a>
    </form>
    </div>
    </div>
    </div>
    </nav>

    <div layout:fragment="loginContent">
    </div>


    <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
    <footer>
    <p>San Franciscoból Jöttem - Az eredeti template összeállítója: http://therealdanvega.com</p>
    </footer>

    </div>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js" ></script>
    </body>
    </html>

    sajna nem tudom használni egyik html-ből sem, pl. login.html:

    <!DOCTYPE html>
    <html lang="en" layout:decorator="layouts/main">
    <head>
    <title>SFJ - Minden napra egy sztori</title>
    </head>
    <body>

    <div layout:fragment="loginContent">

    <form name="login" th:action="@{/login}" method="post" class="form-signin">
    <h2 class="form-signin-heading">Kérlek jelentkezz be</h2>
    <div id="err" th:if="${param.error}" class="alert alert-danger">Hibás felhasználói név és jelszó</div>
    <div th:if="${param.logout}" class="alert alert-success">Sikeresen kijelentkeztél</div>
    <label for="username" class="sr-only">Felhasználói név</label>
    <input type="text" id="username" name="username" class="form-control" placeholder="Felhasználói név" required="true" />
    <label for="password" class="sr-only">Jelszó</label>
    <input type="password" id="password" name="password" class="form-control" placeholder="Jelszó" required="true" />
    <div class="checkbox">
    <label> <input id="remember-me" name="remember-me" type="checkbox" /> Emlékezz rám
    </label>
    </div>
    <button class="btn btn-lg btn-primary btn-block" type="submit">Bejelentkezés</button>
    </form>

    </div>

    </body>
    </html>

    egyszerűen nem veszi figyelembe a main.html-t, mintha nem is lenne ott :F

  • btraven
    őstag

    Ja igen. A helyzet az, hogy az a2 nem módosulhatott. Valami más miatt tűnik úgy, mintha ez történt volna. Hogy néz ki az A class? Nem véletlen valami static field-et állít át a konstruktora? Mi alapján gondolod, hogy a1, meg a2 is "hi"?

    Itt egy példa, hogy ennek a fajta értékadásnak az a2(, a példában s2) által mutatott címet nem szabadna mósodítania.

    @Test
    void assignment() {
    String s1 = new String("Hello");
    String s2 = s1;
    s1 = new String("hi");
    System.out.println(s1);
    System.out.println(s2);
    System.out.println("s1 default hashcode: " + System.identityHashCode(s1));
    System.out.println("s2 default hashcode: " + System.identityHashCode(s2));
    }

    Output:
    hi
    Hello
    s1 default hashcode: 1366025231
    s2 default hashcode: 1427889191

    Köszönöm, de ez a libgdx library-ban van. És valóban pool-t használ. Azért módosult. Csak rácsodálkoztam hogy mik vannak :)

    Android Studio-ban ha debugolok akkor miért nem jelenik meg semmi System.out.println() a console-on?
    Csak ennyi: Connected to the target VM, address: 'localhost:59661', transport: 'socket'

  • btraven
    őstag

    Nem poolozva vannak, hanem egyszeruen az osztaly/interface tipusu valtozok gyakorlatilag pointerek. Szoval ezekkel a sorokkal kb. az alabbit csinaltad:
    A heapen letrehoztal egy A tipusu peldanyt. A kis a valtozot letrehoztad a stacken, ami az elobb letrhozott heapen levo peldany cimere mutat. Letrehoztad az a2 valtozot a stacken, ami ugyanarra a cimre mutat az ertekadas miatt, mint a.

    Emiatt van az is, hogy nyelvi alapelem lett az equals, hogy latvanyosan megkulonboztetheto legyen az ertek szerinti osszehasonlitas a cim szerintitol.

    Értem, de az a-t újra létrehoztam. Az már más példány más címmel?
    Az a2 mégis módosult.

  • btraven
    őstag

    Vagy csak siman egy entry altalaban key, value parost jelent.

    Ideából nekem a vissza nyíl button hiányzik. Fárasztó az ALT+balranyílt nyomkodni.

    Tényleg, igazad van:
    private Map<Actor, Action> pausedActions = new HashMap<>();

    Hát nem tudom melyik absztraktabb. Clean code megcsúfolása. :P

  • #68216320
    törölt tag

    Jasypt, Spring cloud config. Ami az erdekes a kerdeskorben, hogy az encryption keyt hol tudod eltarolni es beszerezni az alkalmazas altal, de mas user altal nem.

    Gondolom, ha inbuild a programban, az nem volna jó megoldás. Ha egy másik helyről (mondjuk egy saját webhelyről) tölti be folyton, akkor egy felesleges függőség lenne csak.

  • Csaby25
    őstag

    Meg kell mondani az alkalmazasnak inditaskor, hogy melyik profilokat hasznalja. Application.properties by default mindig beolvasasra kerul, a - dev-hez aktivalni krll a dev profile-et. Asszem ha jar-kent inditod, akkor - Dspring.profiles.active=dev a megfleelo kulcsszo, de fejbol irom, lehet rossz.

    A maven le sem build-eli, hibat ad az application-dev.properties file-nal,
    " Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project elsospring: Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed: newPosition < 0: (-1 < 0) -> [Help 1]
    org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project elsospring: Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed: newPosition < 0: (-1 < 0)"

    Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed: newPosition < 0: (-1 < 0)

    Caused by: java.lang.IllegalArgumentException: newPosition < 0: (-1 < 0)

  • Csaby25
    őstag

    Meg kell mondani az alkalmazasnak inditaskor, hogy melyik profilokat hasznalja. Application.properties by default mindig beolvasasra kerul, a - dev-hez aktivalni krll a dev profile-et. Asszem ha jar-kent inditod, akkor - Dspring.profiles.active=dev a megfleelo kulcsszo, de fejbol irom, lehet rossz.

    spring.profiles.active=dev

    Ez van az application.properties-ben

    STS-ből indítom...

  • Csaby25
    őstag

    Jdk SE eleg. En mondjuk inkabb Intellij community-val allnek neki, meg ha joval baratsagtalanabb is, mint az Ultimate. De azert arra meg nem vettem ra magam, hogy otthonra is megvegyem az Ultimate-et. Nehany pluginnal a community is eleg jo a Springhez.

    Köszi! Egyelőre csak tanulom - gyakorlom és a tanfolyam amit követek STS-t használ...

  • Aethelstone
    addikt

    Mostmar ha elorangattad, ne hatralj ki. ;]
    Erre en csak annyit akartam irni, hogy eddig olyan 5 eves maven hasznalatom alatt egyszer sem jott szembe olyan dolog, amire nem lett volna letezo plugin, ami megoldotta a problemat. Oke, vannak azert olyanok, amitol jobbat is el tudnek kepzelni, de egyutt lehet vele elni. Van amugy joval hosszabb programozoi tapasztalatom(ossz. ~15 ev), de OOP/Java az legyen inkabb 5 ev. Ezert 5 ev a maven is.
    Illetve ami pl.: Gradle-re atteressel problema lenne, hogy van egy jo szazas nagysagrendu microservice, ami azert jelenleg elegge hasonlit build projektileg. De ettol fuggetlenul mindegyikben johet fejlesztesi igeny. Ha meg hirtelen a projektek egyik fele maven, a masik fele meg gradle lenne, bevinne egy szep kis extra komplexitast.

    De pont ezt mondom én is :D Én egyébként cirka 2010 óta mavenezek, 3-4 éve meg van gradle projektünk is. Mindkettőt elismerem, de azt tényleg ne mondja senki (itt le lett írva), hogy a maven a vén szaroknak való és kuka és mindenre a megoldás a Groovy. Faszt, már bocsánat. Mindkettőnek kurvára megvan a helye :D

  • mobal
    nagyúr

    Remek, de ezekre nincs szuksegunk. Egyszer jo lenne atterni, de joval nagyobb annak az ara, mint amit itt sugallsz. Mindenkeppen eltart egy ideig, mig egy programozo csapat atszokik egy masik build tool-ra. Nyilvan van az a helyzet, amikor a relativ koltsege az atallasnak kisebb, mint a relativ haszna. Nalunk jelenleg nem az.

    "eltart egy ideig, mig egy programozo csapat atszokik egy masik build tool-ra"

    mvn clean test helyett gradle clean check. :D

  • floatr
    veterán

    Remek, de ezekre nincs szuksegunk. Egyszer jo lenne atterni, de joval nagyobb annak az ara, mint amit itt sugallsz. Mindenkeppen eltart egy ideig, mig egy programozo csapat atszokik egy masik build tool-ra. Nyilvan van az a helyzet, amikor a relativ koltsege az atallasnak kisebb, mint a relativ haszna. Nalunk jelenleg nem az.

    Te tudod. Tapasztalatom szerint ez csak akarat kérdése

  • floatr
    veterán

    "A megfelelő build alap összerakása elhanyagolható erőforrásigényű egy átlagos projekt többi feladatához képest." Nem ertek egyet. Ez csak akkor igaz, ha az adott build rendszerhez es az azzal szembeni kovetelmeneykhez is valaki nagyon ert. Igazabol aztan utana tok mindegy, hogy pipeline-bol mavent, vagy gradle-t hivok meg.
    Projektek atlagos build ideje ket perc mavennel. Intellij meg ugyis feldolgozza az egeszet belso projekt formatumra, ami sokkal gyorsabb, foleg ha szelektiven akarsz valamit futtatni. Kiprobalnam en is elesben a Gradle-t, de nem igazan varok tole semmi valos hasznot a mi use case-unkben. Ha nagyon nem lesz semmi dolgunk, akkor majd rakerul arra is a sor. A mostani maven service template-jeink tokeletesen megfelelnek az elvarasainknak, a lecserelesukben sokkal tobb lenne a potencialis risk, mint a potencialis benefit.

    Mi az előnye a teljesítmény mellett? Sokkal rugalmasabb: deklaratív és procedurális egyben. Ha valami nem szokványos dolgot kell megoldani, elég egy kisebb scriptet írni benne. Nem vagy kötve a CI/CD képességeihez, és lokálisan is meg tudod azt tenni, amit a CI/CD pluginekkel támogat
    Azt sem tartom valós problémának, hogy annyit kéne vele bíbelődni, hiszen a fejlesztőkörnyezetek már eléggé támogatják a nulláról kezdést is, ahogy a maven esetében. Sokkal körülményesebb a maven, de igazán nem akarok téríteni, nyilván nem kötelező, ha valaki nem akarja. Végülis lehet írni SOAP-os vagy RMI-s alkalmazást is manapság, az is működhet...

    Off az off-ban: szoktam találkozni olyan emberekkel, akiknél megfigyelhető az a felfogás, hogy csak abba az irányba hajlandóak elmozdulni, amerre a kényszer viszi őket. Ők általában egy idő után benne ragadnak egy adott technológiai stackben, ami egy ideig fel sem tűnik nekik. 10 évvel később viszont már riasztó, amikor még mindig servletről beszél, és oracle + jdbc a DB megoldás mindenre

  • floatr
    veterán

    Alapvetoen van, de elsosorban business case-ekhez kototten. Meg igyekszunk mindig uj dolgokat behozni, ha hasznos, vagy hosszan tarto megoldast adhat. De nalunk mindenki erosen devops/automated tester/data magus is egyben, s legkevesbe izgalmas/lenyeges resz az egeszben a java build. Nyilvan a magussal tuloztam, de inkabb a szeles tudas az, ami nalunk a fokusz, nem pedig a reszletekbe meno tudas egyes alteruleteken.

    A megfelelő build alap összerakása elhanyagolható erőforrásigényű egy átlagos projekt többi feladatához képest. Nyilván nem a legkritikusabb helyzetekben kell fejest ugrani az ismeretlenbe, de ezzel a mentalitással bele lehet ragadni technológiákba. Amúgy pont devopsos szempontból nem értem a dolgot, hiszen épp a gradle az, ami sokkal kezesebb groovy/kotlin oldalról. Compose-os projektekben befonnánk egymás haját, ha mavent kellene használni.

  • mobal
    nagyúr

    Ha keresztbe-kasul ismersz valamit, s atlagban egy problemat 3mp megoldani neked benne, akkor nagyon nyomos erv kell ahhoz, hogy lecsereld valami masra, amiben ugyanez a folyamat a kompetenciad hianya miatt eltartana vagy 1 napig.

    Nalunk minden regi es minden uj projekt is maven, szimplan azert, mert van par emberunk, aki nagyon ert hozza. Ok tenyleg kb. 5 perc alatt a legkomplexebb projekteket is atlatjak, mig Gradle-hez nincsen ilyen emberunk. A build time meg nem kritikus.

    Persze lenne haszna gradle-zni, legalabb lenne eselye kialakulni benne mely kompetencianak. Ha ma kezdenek Javazni, biztos azzal kezdenek. Igy viszont, hogy teljesen otthonos terep a maven, foleg ezt hasznalom, itthon is. Volt projekt amit gradle-lel kezdtem, de semmi nem vitt ra utana, hogy a kovetkezot is azzal csinaljam. Van boven mas szakterulet, ahol tobb hasznot hoz a raforditott tanuloido.

    És van igény ott új dolgok megtanulására (kérlek ne pejoratív érelemben értsd). Nálunk a mavent írtják - szerencsére. Persze ez csak marketing de: [link] .

  • WaterWawe
    őstag

    [link]

    Proba igy?
    mvn exec:java -Dexec.mainClass=cinema.Program "-Dexec.args=http://localhost:8080/WebService/Cinema A 5 Lock"

    Köszi, így más volt a hibaüzenet, amire rákeresve eljutottam a megoldáshoz. :R

    Szóval fogalmam sincs miért, de PowerShellből nem működik, CMD-ből viszont igen (az eredeti paranccsal is, és ezzel is).

  • Szmeby
    tag

    Ez a Spring Data Rest default viselkedese. Convention over configuration, mint megannyi mas helyen a spring bootban.
    Megfeleloen uj Spring verziokkal o lesz a baratod: [stackoverflow: set exposed repositories to annotated only. ]

    Úristen, ez már ennyi ideje így működik? :)
    Értem én, hogy kényelmes, de azért na, hát mióta nem antipattern a repository megnyitása a nagyvilágnak?! Legalább egy bekapcsoló annotációt el tudtam volna képzelni ehhez a remek fícsörhöz. :)
    Minden esetre nagyon köszi a linket, ma is okosabb lettem.

  • Erre biztosan nem lesz szükséged. Ez beállítja aktív profilnak a @spring.profiles.active@-at, ami nagyon valószínű, hogy nem létezik. Szóval nyerni nem nyersz vele.
    A logban hiba nincs. Viszont hiányzik belőle, hogy a Tomcat elindulna a 8080-as porton, mint ahogy a példa screenshotján is van.
    Annyit látok a logodban, hogy a "D:\eclipse_workspaces\java_coding_exercises\HelloWorld_Example\target\classes" könyvtár biztosan rajta van a classpathon. Mik vannak ebben a könyvtárban? Benne van a ApplicationConfiguration.java? Illetve egyáltalán a Spring MVC-s dependency-k ott vannak? Távolról ezt elég nehéz diagnosztizálni.

    Köszi a segítséget.
    Időközben leszálltam a témáról.

  • Erre biztosan nem lesz szükséged. Ez beállítja aktív profilnak a @spring.profiles.active@-at, ami nagyon valószínű, hogy nem létezik. Szóval nyerni nem nyersz vele.
    A logban hiba nincs. Viszont hiányzik belőle, hogy a Tomcat elindulna a 8080-as porton, mint ahogy a példa screenshotján is van.
    Annyit látok a logodban, hogy a "D:\eclipse_workspaces\java_coding_exercises\HelloWorld_Example\target\classes" könyvtár biztosan rajta van a classpathon. Mik vannak ebben a könyvtárban? Benne van a ApplicationConfiguration.java? Illetve egyáltalán a Spring MVC-s dependency-k ott vannak? Távolról ezt elég nehéz diagnosztizálni.

    Köszi a segítséget. Holnap megírom, hogy mi a helyzet, illetve válaszolok a kérdésekre. Addig is jó éjszakát.

  • Mutasd meg a logot. Profile nem feltelenul kell, alapbol ki szokta irni, hogy defaultot hasznal, ha mas nincs megadva.

    2020-12-04 17:35:24.343 INFO 2816 --- [ main] c.e.demo_2.HelloWorldExampleApplication : Starting HelloWorldExampleApplication using Java 1.8.0_181 on GotrekGurnisson with PID 2816 (D:\eclipse_workspaces\java_coding_exercises\HelloWorld_Example\target\classes started by Apa in D:\eclipse_workspaces\java_coding_exercises\HelloWorld_Example)
    2020-12-04 17:35:24.346 INFO 2816 --- [ main] c.e.demo_2.HelloWorldExampleApplication : The following profiles are active: @spring.profiles.active@
    2020-12-04 17:35:24.806 INFO 2816 --- [ main] c.e.demo_2.HelloWorldExampleApplication : Started HelloWorldExampleApplication in 0.782 seconds (JVM running for 1.406)

    Ez van a konzolon.
    Itt már látszik, hogy próbálkoztam a profillal.

  • Ranezve a @RestController komponensre gondol konfiguracio alatt. Nem vilagos, hogy miert igy hivja.
    Mindenestre annyi az egesz, hogy a HellowWorldExampleApplication.java melle csinalj egy ApplicationConfiguration.java nevu fajlt, a kepen megadott tartalommal, s ennyi. Rakhatod olyan package-be is, ami melyebben van, mint az HelloWorldExampleApplication, mert a component scanninggel azt is meg fogja talalni.

    Köszi!
    Közben pontosan azt csináltam amit most látok, hogy javasoltad.
    De, az egész dolog több sebből is vérzik sajnos.
    Kezdjük ott, hogy ha elindítom az alkalmazást 3 sor üzenet után rögtön terminálódik. Próbáltam valami profile dolgot csinálni mert arra is panaszkodott, de hiába, nem segített. Vagy igen, de az kevés volt.
    Nem jövök rá, mi az ami hiányzik.
    Ha van valami tanács, hogyan maradjon életben az applikáció annak nagyon örülnék.

  • taf120
    csendes tag

    Gondolom race condition valamelyik klasszikus esete. Vagy egyeb apro reszlet a debug/run kornyezet kozott, ami nem lett reszletezve.

    Köszönöm, ilyesmi lehet. 3rd party szoftver, azt meg nem fogom javítani. Megoldottam másképp.

  • mobal
    nagyúr

    Gondolom race condition valamelyik klasszikus esete. Vagy egyeb apro reszlet a debug/run kornyezet kozott, ami nem lett reszletezve.

    Igen, ezért nem értem ezt így. :)

    Btw, threadekkel nagyon nem foglalkoztam. Azt hogy célszerű debuggolni?

    mobal,

  • javamonk
    újonc

    Miert eppen Java EE?

    Dinamikus weboldal készítéséhez, de mivel kezdő vagyok, az is egy kérdés persze, hogy egyáltalán érdemes-e tanulni a Java EE-t.
    Még nem láttam elég videót, nem olvastam elég cikket, hogy felmérjem, mi a legnaprakészebb tudás, amit érdemes megszerezni, ha az ember a Java nyelvet kezdte el tanulni, majd weboldalakat szeretne ksézíteni.

  • mobal
    nagyúr

    Igen. Leszamitva, hogy azert a Composite nem tul gyakori. Singletont, factoryt altalaban ugyis ad a framework, buildert a Lombok. Strategy szerintem elegge gyakori a jo kodokban ahol tipusfuggoen kell algoritmust valasztani. A java8, meg a Spring eleg sokat segit, hogy az oldschool modon kevesebbszer kelljen patternt implementalni.

    A másik gyakorni pattern, igaz python-ra jellemző a "b*sszunk be mindent egy fájlba" pattern... :D

    Szerk.: csak, hogy ne általánosítsak, igen ez a fejlesztő igényessége. No offense! :)

  • p76
    senior tag

    Ezerintem local classt nem lehet. De mibe tart kiprobalni? En most tableten vagyok, azert nem tudom. Inner class elerheto kivulrol, hacsak nem private, de a local class definicioja csak a definialo blokkon belul ervenyes. Annyira nem hasznalok ilyeneket soha, hogy nagyon nem vagyok bennuk biztos.

    Köszönöm. :R
    "local class definicioja csak a definialo blokkon belul ervenyes"
    Így logikusan gondolkodva tényleg nem lehet castolni kívül :)

  • Zsoxx
    őstag

    Egyszerubbnek egyszerubb. Ha viszont valamiert tobben is hasznalnak ugyanazt a peldanyt, abbol meg baj is lehet. En csinalnek egy osztalyt, aminek a konstruktora letrehozza a textfieldeket, de nincsenek setterei. De van metodusa amivel a mezoket meg lehet szerezni. Ez mar igy kvazi egy immutable osztaly lesz, s akkor tobb szalon is jol mukodhet. Mezoben eltarolni azert veszelyes szerintem, mert nem garantalhato sorrendiseget varsz el. Lesz fv-d, ami beallitja a mezot, meg lesz ami lekerdezi. Mi van ha elobb hivjak meg a lekerdezot, mint a letrehozot? Az en javaslatomban ez nem fordulhat elo, mert letrehozni csak egyszer tudod a peldanyt, es amig az nincs meg, addig nem nem tudod meghivni. A te esetedben meg nem garantalja semmi a helyes meghivasi sorrendet.

    Jó ötlet, köszi!

  • Zsoxx
    őstag

    Talan az a legszebb, ha csinalsz egy masik osztalyy, ahol az emlitett valtozo osztalyvaltozo, s az ot cseszegteto metodusok is az uj osztalyban vannak.

    De fejtsd ki jobban a problemat. Remelem olyan dolgok nincsenek, hogy meghatarozott sorrendben kell meghivogatni a dolgokat.

    Vagy ha ez valami seged metodus, ami mindenfele muveleteket tud vegezni a parameterrel, akkor mehet egy utility osztaly static metodusanak.

    Konkretabb pelda tenyleg sokat segitene.

    Pl. JavaFX-ben van egy metódus, ami TextFieldeket kérdez le, de ugyanezeket a mezőket egy másik metódus hozza létre, amikor egy menüpontra egy panel felugrik.
    Adjam át az összes textfieldet a lekérdező metódusnak? Nem egyszerűbb osztályváltozóként kezelni?

  • togvau
    senior tag

    Cascade a funkcio amit keresel. Amugy altalaban nem annyira javasolt a hasznalata. Meg tudod adni egy tombben, hogy milyen muveleteket kaszkadoljon egy adott entitas objektumra, vagy entitas kollekciora.

    és tényleg, lol, a múlt héten használtam!

  • venic
    csendes tag

    Ugyanolyan verzioju a Java a gepeken? A Java module support elegge bekavart a reflectionnek, a hibauzeneted meg onnan jon. Elsore ugyanolyan jdk-t bugaznek.

    Köszi szépen.
    Ugyanaz a Java verzió mind a két gépen. Én telepítettem fel mind a kettőre ugyanazzal a telepítővel, sőt még a Tomcat is ugyanaz. Átírtam a környezeti változókat is hogy lássa tomcat servlet-api filet, hátha az a baj, de nem oldotta meg.

  • floatr
    veterán

    Szerintem teljesen mindegy milyen szemmel nézed, a lényeg, hogy a developernek a lehető legkényelmesebb legyen a fejlesztés, annak az összes aspektusával, különös fókuszt téve a debuggingra, a build/deploy sebességre, stb. Milyen olyan pipeline-t tudsz mondani, ami lokálisan gyorsabb, egyszerűbb, szükség esetén gyorsabban testre szabható, mintha közvetlen a gépeden fut az app server, vagy a Spring boot app? Ha csinálsz egy dockerben levő Java EE szervert, akkor ahhoz, hogy oda deployolj, ott debugolj szintén kell ultimate edition. Ha egy app server image-ből kiindulsz dockerfile-ban, és mellé rakod az alkalmazásod a buildnél, az lassabb és körlülményesebb lesz jóval. Sajnos a "jó" devops pipeline-nak gyakran az a vége, hogy az emberek csak deploy + println-nel tudnak debuggolni.

    Egyébként a legjobb debugging tool meg szerintem a unit teszt, két okból is: gyors, olcsó, és ha sikerül megfejteni a hibát, automatikusan van rá regression teszt. Csak sajnos nem mindig elég a hibához a unit test.

    (#10940) mobal: Ok, de a kérdés kimondottan JEE volt. Egyébként a Springes véleményeddel is vitára kelnék. Munkahelyen ultimate-et használok, itthon CE-t.Az ultimate-ben sokkal több infót kapsz. Pl. autowiringnél már ki szokta jelezni, ha nincs autowire candidate, vagy több is van, s kéne qualifier. application.properties szerkesztése közben az éppen elérhető property-t felkínálja dokumentációstul. Van JPA support. És ezek most csak ilyen hasraütésszerű dolgok, lehetne még találni bőven különbséget. Meg így is vannak amik hiányoznak ultimate-ből is. Pl. custom autoconfigurable bean-ek felismerése autowiringnél, etc.

    [CE vs ultimate]

    Nincsen szükséged az IDE app server pluginjeire ehhez. Eleve el kell készíteni a deployment eszközöket, van remote debug, a pimpelt IDE csiricsáré funkciói meg igazából szépek meg jók, de maximum egy tapasztalatlan fejlesztőnek nyújt igazi segítséget.
    Nem vagyok annak a híve, hogy szövegszerkesztővel kommandózzon az ember, de nincsen szükség egy ultimate-re ahhoz, hogy hatékonyan tudj dolgozni. Ellenben eltávolodsz az operations jellegű feladatoktól, és hajlamossá tesz arra, hogy kihátrálj minden olyan dologból, ami nem közvetlenül implementációs feladat.

  • mobal
    nagyúr

    Szerintem teljesen mindegy milyen szemmel nézed, a lényeg, hogy a developernek a lehető legkényelmesebb legyen a fejlesztés, annak az összes aspektusával, különös fókuszt téve a debuggingra, a build/deploy sebességre, stb. Milyen olyan pipeline-t tudsz mondani, ami lokálisan gyorsabb, egyszerűbb, szükség esetén gyorsabban testre szabható, mintha közvetlen a gépeden fut az app server, vagy a Spring boot app? Ha csinálsz egy dockerben levő Java EE szervert, akkor ahhoz, hogy oda deployolj, ott debugolj szintén kell ultimate edition. Ha egy app server image-ből kiindulsz dockerfile-ban, és mellé rakod az alkalmazásod a buildnél, az lassabb és körlülményesebb lesz jóval. Sajnos a "jó" devops pipeline-nak gyakran az a vége, hogy az emberek csak deploy + println-nel tudnak debuggolni.

    Egyébként a legjobb debugging tool meg szerintem a unit teszt, két okból is: gyors, olcsó, és ha sikerül megfejteni a hibát, automatikusan van rá regression teszt. Csak sajnos nem mindig elég a hibához a unit test.

    (#10940) mobal: Ok, de a kérdés kimondottan JEE volt. Egyébként a Springes véleményeddel is vitára kelnék. Munkahelyen ultimate-et használok, itthon CE-t.Az ultimate-ben sokkal több infót kapsz. Pl. autowiringnél már ki szokta jelezni, ha nincs autowire candidate, vagy több is van, s kéne qualifier. application.properties szerkesztése közben az éppen elérhető property-t felkínálja dokumentációstul. Van JPA support. És ezek most csak ilyen hasraütésszerű dolgok, lehetne még találni bőven különbséget. Meg így is vannak amik hiányoznak ultimate-ből is. Pl. custom autoconfigurable bean-ek felismerése autowiringnél, etc.

    [CE vs ultimate]

    Nyilván tudom én is, hogy többet tud az Ultimate, de semmi olyat nem ami miatt __nem__ tudnál dolgozni.

    Ezek a feature-ök pedig olyanok amivel találkoztam csak hibaüzenet formájában. :D

  • floatr
    veterán

    A kerdes JEE volt. Azt azert eleg kellemetlen idea CE-vel nyomatni. 1-2 eve meg tuti nem tamogatta az app szerverre deploymentet sem. De Springet is joval egyszerubb Ultimate-tel. Viszont azert szukebb az ollo.

    Őszintén...?
    DevOps-os szemmel nézve nem is szerencsés az IDE ilyen szintű integrációja. Ha nem oldható meg egy jól definiálható pipeline/toolchain segítségével automatizáltan még lokálisan is, akkor megette a fene az egészet.
    Mondanám, hogy VS Code + gradle FTW, de a Red6 annyira elcseszett most valamit a Java bővítményen, hogy szinte használhatatlan. Addig meg Idea CE...

  • mobal
    nagyúr

    A kerdes JEE volt. Azt azert eleg kellemetlen idea CE-vel nyomatni. 1-2 eve meg tuti nem tamogatta az app szerverre deploymentet sem. De Springet is joval egyszerubb Ultimate-tel. Viszont azert szukebb az ollo.

    Tudom, hogy JEE volt a kérdés (tudok olvasni), de azért gondoltam megosztom a tapasztalataim...

  • togvau
    senior tag

    A streammel nincs baj, az Arrays.asListet használod rosszul. Az listát csinál a megadott tömb elemeiből. Jelen esetben egy egy elemű listád lesz, aminek az az egy eleme egy int[] lesz.

    int[] ints = new int[]{0, 1, 2, 3};
    Arrays.asList(ints).stream().forEach(System.out::println);
    Arrays.asList(1, 2, 3).stream().forEach(System.out::println);

    Arrays.stream(ints).forEach(System.out::println);

    Eredménye:

    [I@1218025c
    1
    2
    3
    0
    1
    2
    3

    köszi

  • Zsoxx
    őstag

    Kotlinban is igaz ugyanez, csak a "===" vonatkozásában.

    Nekem annyi közöm volt a Kotlinhoz, hogy valakinek a diplomamunkáját elbíráltam, aki Kotlinban írta hozzá a programot.

    Melyik egyetemen vagy?

  • mobal
    nagyúr

    "Az == a referenciát ellenőrzi, az pedig sosem lesz ugyanaz." Ez így nem teljesen igaz. Pl. ha ugyanarra a String literalra hivatkozol, akkor a referncia is ugyanaz lesz, mert a fordító észreveszi, hogy több referencia van ugyanarra a stringre már fordítási időben, így nem fogja kétszer ugyanazt a konstants elrakni a memória megfelelő szegmensébe.

    Többek között az ilyenek miatt örülök, hogy Kotlinra sikerült váltanom.

    Apropó, valaki doilgozik a Kotlin-nal rajtam kívül?

  • Zsoxx
    őstag

    private List<Sprite> sprites() {
    List sprites = new ArrayList<>();
    for (Node node : root.getChildren()) {
    sprites.add((Sprite) node); }
    }

    Igen, az lesz az. Így már érthető, köszi szépen!

  • Zsoxx
    őstag

    private List<Sprite> sprites() {
    List sprites = new ArrayList<>();
    for (Node node : root.getChildren()) {
    sprites.add((Sprite) node); }
    }

    Ebben mi a visszatérési érték? A sprites nevű lista?

  • kutga
    félisten

    Bulizhatz rekurzioval: az utolso else agban meghivhatod a kaloriaKiirt megegyszer.
    Bulizhatsz do-while ciklussal: do... while (beolvasott szo nem gyumolcs).

    Amugy van sok furcsasag a kododban. Lehet csak a tableten nem latom, de mi szukseged van a File f parameterre? Mi a gyum, honnan jon az extended for loop elott. Van egy static String gyumod az osztalyban valamilyen ertekkel?

    Do-while-lal oldottam meg végül, köszi.

    public static void kaloriaKiir(ArrayList<Gyumolcs> ertekek, File f) {

    Scanner scan = new Scanner(System.in, "ISO-8859-2");
    System.out.println("Kérem a gyümölcs nevét: ");
    String nev = scan.nextLine();
    do {

    if (!gyum.toString().contains(nev)) {
    System.out.println("Nem megfelelő név, újat kérek!");
    nev = scan.nextLine();
    }

    } while (!gyum.toString().contains(nev));

    if (gyum.toString().contains(nev)) {
    System.out.println("Kérem a mennyiséget grammban: ");
    int menny = scan.nextInt();

    for (Gyumolcs gyum : ertekek) {
    if (nev.equals(gyum.Megnevezes)) {
    System.out.println(menny + " gramm " + gyum.Megnevezes + " " + gyum.kcal / 100 * menny + " gramm kalóriát tartalmaz.");

    }

    }

    }

    }

    Biztos sok sok furcsaság van a kódban, de most a cél átmenni a vizsgán. ;]

  • venic
    csendes tag

    Ez szerintem egy elég nehezen érthető része a javanak. De a lényeg. Van a Komparator osztályod. Ezen az osztályon belül van egy inner classod, a KutyaRend. Ilyenkor a kutyarend osztály mivel nem static, ezért a példánya csak egy adott objektumpéldányon belül hozható létre. A static method nem példányhoz, hanem osztályhoz tartozik, így annak nincsen példánya, tehát nincsen benne KutyaRend létrehozási lehetőség sem. Legkönnyebben ezt itt úgy tudod megoldani, ha a Kutyarend osztályt statická teszed:
    static class Kutyarend ...

    De ettől sokkal szebb, ha nem ágyazod be az osztályba semmilyen módon, hanem külön osztályba teszed. Sőt, ha ez a kutyák természetes rendezése, akkor elég a Kutyákat implements Comaparble<Kutyák> módon megadni, s akkor benne a compareTo-t implementálni.

    Még egyszerűbb, ha használod a Java 8-as Comparators.comparing-et, így:
    Collections.sort(KutyaLista, Comparators.comparing(Kutyak::getKor));

    Nagyon köszönöm mindenkinek a segítséget, sikerült megoldani :)
    Drizzt külön köszönöm a részletes magyarázatot mellé, nagyon kedves vagy :)

  • floatr
    veterán

    Muhahaha. :D
    Remekül szórakoztatod az embert a nagyon furcsa feltételezéseiddel, de közben szerencsére jó dolgokat is mondasz.

    Arról sehol nem volt eddig szó, hogy mekkora méretű lenne az adat. Én eddig mindvégig azt feltételeztem, hogy kicsi.

    "select meg watch service meg toronyóra lánccal... az eredeti kérdés szerint linuxon futna, ami egy unix. nem bohóckodunk ilyenekkel." És a select melyik oprendszer egyik fontos syscallja? :)

    A tee-t tök jó, hogy felhoztad, mert magamtól nem jutott volna eszembe a neve, remélem most jobban elmélyül a tudatomban.
    A syslogos megoldás az amúgy tetszik, bennem is bennem volt.

    "tail -f /tmp/dumpfile | java -jar tefeldolgozod.jar
    második esetben esetleg van értelme jávás watch objektumozni..."
    De ilyenkor egy sima Scanner.nextLine is elég. Az vár az új inputig, vagy amíg a stdin-je el nem tűnik.

    "miért érzem azt, hogy azért jobb a jáva szerinted, mert a shell programozásról fogalmad sincs?"
    Én ilyet sehol nem írtam. Különböző célokra különböző eszközök a jók. Hirtelen meg az ember mindig úgyis azt a megoldást fogja ajánlgatni, amivel éppen a legjobban képben van. Ha nagyon akarnék, akkor én is elkezdhetnék kötekedni, hogy miért mysql-ben akarod a szenzor adatokat eltárolni, amikor vannak más kifejezetten ilyen célú adatbázisok is. De nem teszem, mert valószínűleg a probléma olyan kis méretű, hogy igazából nem számít.

    Ui. a mysql klienst úgy kezeled itt mindenhol, mintha minden linuxon kötelezően rajta lenne, de az ugyanúgy egy dependencia, ami vagy van, vagy nincs.

    "most eltekintve attól, hogy tök értelmetlen http-n csinálni ilyet, a curl-ben túl sok hiba van ahhoz, hogy komoly rendszeren használd."
    Ezt btw. még kifejthetnéd, hogy mire gondolsz. Milyen hiba? (És természetesen a curl sem feltétlen minden disztró része)

    Mondjuk azért tegyük hozzá, hogy amikor a tee-vel kidumpol minden átcsorgó bitet az egyes kapcsolódási pontokon, lábon lőtte a binugzos architektúráját, amit pár kommenttel feljebb vázolt, miközben diszkréten lehülyézett.

  • bambano
    titán

    "ezért amikor elhangzott itt (nem Peachmantől), hogy a szenzor program tegye le diszkre egy fájlban az adatot és azt olvassa be jávából LINUXON, akkor azt gondoltam, hogy ezzel totálisan szívenszúrja a unixos alapfilozófiát. kevésbé udvarias megfogalmazásban ekkora f.ságot évek óta nem hallottam."

    Én írtam, s egyáltalán nem értek veled egyet. Majdnem mindegy, hogy először fájlba írsz valamit és onnan pollozod, vagy közvetlenül a pipe-pal küldöd át. Utóbbi esetben ráadásul újra, meg újra meg kell hívni a feldolgozó programot, ami nem feltétlen hatékony. Fájl változásra linux alatt selecttel fel tudsz iratkozni, Javaban is megvannak a megfelelő képződmények(Watch service). Egyébként named pipe-pal lehet a legjobban áthidalni, hogy a feldolgozó mindig futhasson attól függetlenül, hogy mikor kap inputot. De én fájlba írnám inkább, mert sokkal könnyebb lesz hibát izolálni annak előfordulásakor, ha a fájlra nézve meg tudod azonnal mondani, hogy mikor frissült, meg mi van benne, anélkül hogy a két alkalmazás belében kellene turkálni.

    jaja, így csinálják a windowsról átszökött, unixot messziről ugató fotelprogramozók :P :P :P

    nem, nem mindegy, hogy fájlba írod-e, tehát átkergeted kétszer a fájlrendszeren és a blokkos eszközökön a cuccot, vagy memória puffereken keresztül tolod be. nem pazaroljuk az erőforrásokat. különös tekintettel az iot nevű betegségre, ahol flash drájvokat nyírhatsz ki azzal, ha fájlba írsz, mivel a ramdiszk jellemzően kevés.

    select meg watch service meg toronyóra lánccal... az eredeti kérdés szerint linuxon futna, ami egy unix. nem bohóckodunk ilyenekkel.

    ha az a probléma, hogy debuggolni akarod a fájlt, akkor van rá segédporgram. tee. tehát azt írod, hogy:

    sensorread | tee /tmp/logfile1 | sed | tee /tmp/logfile2 | mysql

    ha nem akarod azt a hatalmas nagy sedet folyton forkolni, és mindenáron bele akarsz piszkolni a fájlrendszerbe, akkor egyik taszkban:

    sensorread >>/tmp/dumpfile &

    másik taszkban:

    tail -f /tmp/dumpfile | sed | mysql
    vagy
    tail -f /tmp/dumpfile | java -jar tefeldolgozod.jar

    második esetben esetleg van értelme jávás watch objektumozni...

    de ha már ennyire elb.szarintod az architektúrát, akkor a legegyszerűbb az, ha a szenzorok adatait logoltatod a syslogba, és abból azon a gépen ott és akkor azt csinálsz, amit akarsz.

    miért érzem azt, hogy azért jobb a jáva szerinted, mert a shell programozásról fogalmad sincs?

  • #68216320
    törölt tag

    A Linuxos program időzített futtatására használj cront, vagy egyszerűen írj egy bash scriptet, ami tight loopban vár. A kimenetet meg simán irányítsd bele egy fájlba. A Java programban ugyanezt a fájlt nyisd meg ugyanilyen időközönként. Aztán dolgozd fel, s írd ki adatbázisba. Amúgy ahogy az adatod jellegét nézem, kb. egy time series database-ben lenne a legjobb őket tárolni. Erre jó pl. Influxdb. Aztán csinálhatsz rá mindenféle fancy ábrát Grafanával.

    Parse-olni ezt egyébként elég egyszerű, soronként végigolvasod, majd line.split("."), a három elemű tömböt meg felhasználod ahogy akarod..

    Más: Mi a legjobb, legmélyebb Spring video course amivel találkoztatok? Kéne nekem egy masszívabb. Ha csak fizetős van, az se gond. De örülnék, ha legalább 20 óra körüli lenne és nagyon a részletekbe menő.

    A terv hasonló, de nem szeretném fájlba tárolni, hanem jó lenne java exec megoldással a kimenetet elkapni és parse-olni.
    Illetve a grafana tervben van, de sima mysql-ben gondolkodtam nem influxdb-ben. Utóbbit ugyanis nem ismerem és telegraf-ot sem használtam még.

    Ezért elsőkörben sql lenne. Aztán lehet nekiugrok megismerni az influxdb-t. Csak valami jó anyagot kell találnom róla, ami pontosítja bennem a lényegét, működését, felhasználását.

    De köszi a tippet, tényleg ez volna a legjobb végeredmény a feladatra.
    És persze docker használat is jó volna, de még az is várat magára.

  • mobal
    nagyúr

    Nem, én ezt rendkívül fontos dolognak tartom. Ha ez nincs végig az ember fejében, amikor kódol, akkor jó eséllyel gányolt minőséget fog kiadni. Az meg most, hogy konkrétan a SOLID betűit feloldja-e valaki, vagy a lényegét elmondja a mozaikszónak, igazából mindegy, de számomra mozaikszót megjegyezni és felidézni sokkal egyszerűbb, mint bármi más módszer.

    Juniortól nem ezt kérdezném, mert szinte biztos, hogy nem fogja tudni. Ott nyomatnám az egyszerűbb adatstruktúrák kérdéseit. Senior szinten viszont szerintem ez alapelvárás, akármikor.

    Olyan kód nem létezik amit később ne tudnál refaktorálni szerintem :))

  • M_AND_Ms
    veterán

    Tömör, egy felelőssége van, se többet, se kevesebbet nem csinál mint ami a célja. Magas a koherencia a az adattagok és a metódusok között, meg az összes SOLID principle felsorolása, kifejtése, 1-2 design patternen keresztüli elmagyarázása. Én ezt várnám el egy interjúzótól. Bár juniortól lehet nem ilyet kérdeznék, hanem inkább alapvetőbb algoritmus kérdéseket, adatstruktúrákat.

    erre mondjuk, hogy bullshit....én ezt tuti nem tudnám így elmondani...valld be te is most kopiztad ki valahonnét :U
    Java fejlesztőt, vagy elméleti szakembert keresnek?

  • Zsoxx
    őstag

    Tömör, egy felelőssége van, se többet, se kevesebbet nem csinál mint ami a célja. Magas a koherencia a az adattagok és a metódusok között, meg az összes SOLID principle felsorolása, kifejtése, 1-2 design patternen keresztüli elmagyarázása. Én ezt várnám el egy interjúzótól. Bár juniortól lehet nem ilyet kérdeznék, hanem inkább alapvetőbb algoritmus kérdéseket, adatstruktúrákat.

    *Tömör, de átlátható.

  • mobal
    nagyúr

    Ezzel az állítással alapvetően nem értek egyet. Mert az ExecutorService egy interface, ami arra van, hogy taszkokat lehessen aszinkron módon futtatni. De alapvetően arra semmilyen garancia nincs, hogy milyen sorrendben fussanak azok a taszkok le, illetve hogy melyek ne fussanak egyszerre. Ha az ember single threaded executort használ, az már valóban megoldást adhat a problémára, mint ahogy itt van rá példa. [link]

    De önmagában az ExecutorService interface semmit nem mond a mutual exclusivity-ről. Épp az az interface célja, hogy a taszkok feladását ütemezés független módon engedélyezze.

    Mint fogalom az "Executor Service". Egy támpontot szerettem volna adni a kollágának, hogy szerintem az egyik legegyszerűbb módon oldja meg a problémát.

    Az általad említett single threaded executor meg szerintem is egy jó megoldás.

  • E.Kaufmann
    veterán

    Definiald pontosan mit ertesz a tobben alatt, illetve hogy azon tobbek kozul mennyinek van irasi, olvasasi, irasi es olvasasi joga. Es hogy melyik az a legtobb ERP rendszer.

    Én a következőket láttam: SAP-B1, Vectory, IBSystem/Infosys, nézegetek most egy negyediket. Van egy darab közös adatbázis mögöttük egy rahedli táblázattal. Vannak ugyan programmmodulok, de azok nem közvetlen egymással, hanem az adatbázissal beszélgetnek.
    Ha meg van egy tényleg külön modul, ami pl a vonalkódos rendszerért felelős vagy a gyártás rögzítéséért, akkor az külön fájdalom a hátsóba, ha saját adatbázisába ír, mert tuti nem tudják megoldani tisztességesen a két adatbázis közötti kommunikációt. (legalább is sok rossz példát láttam sajnos, főleg akkor problémás ha más az ERP és a vonalkódos rendszer szállítója, valamint egy közismert magyar Bérszámfejtő "fűszerrel" is sok gond van összepasszintani teljes mértékben ERP-vel, már ha nem kézzel akarunk adatokat importálni/exportálni)

    Én ezt az ábrát néztem microservice-re, de lehet nem jó:

    vannak kisebb szolgáltatások, melyek egy részét többen is elérik közvetlenül, másokat több másik szolgáltatás is buzgerál egyszerre.

    10598: értem, hogy egy közepesnél nagyobb cégnél már gond a skálázhatóság miatt, de kis cégeknél inkább plusz kín ez a szemlélet. Tudom, ők menjenek a felhőbe ERP-zni :W

  • Drizzt
    nagyúr

    Definiald pontosan mit ertesz a tobben alatt, illetve hogy azon tobbek kozul mennyinek van irasi, olvasasi, irasi es olvasasi joga. Es hogy melyik az a legtobb ERP rendszer.

    [link] Most meg tul faradt vagyok, hogy megfogalmazzam ipyen szepen, mint a linken az elfogadott valaszban van leirva.

  • E.Kaufmann
    veterán

    Miert kene, hogy legyen? Ha tobb alkalmazas irja ugyanazt az adatbazist, az a kaosz fele vezeto ut egyik elso lepcsofoka. Jo persze csak ha ket alkalmazas irja tenyleg, s szigoruan az egyik tablat csak az egyik irhatja, a masikat meg csak a masik, akkor nem lesz gond, de a db nem erre valo. Meg kell oldanod, hogy rajojj mikor jott uj uzenet, olvastak-e az uzenetet, feldolgoztak-e, stb. Onnantol kezdve, hogy ez nem igaz, baj lesz, mert nem lehet tudni ki mifele adatert felelos. Van-e erosebb kutya, vagy mero veletlen ki lesz a source of truth. Meg lehet persze history tablakba bevezetni oszlopot, hogy ki az iro alkalmazas/processz egy adathoz de elegge nyakatekert lesz. En hasznalnek socketet, vagy valamilyen felette levo absztrakciot. Vagy rmi-t. Vagy ha nagy megoldas kell, akkor Kafka, vagy Jms. Vagy persze elhangzott ezer, meg ezer Api, amit amugy tok egyszeru kezelni, pl. Soap, Rest, s kifejezetten erre valok.

    Ha tobb alkalmazas irja ugyanazt az adatbazist, az a kaosz fele vezeto ut egyik elso lepcsofoka
    Pedig a legtöbb ERP így működik :F

  • Ablakos
    addikt

    Nem talalja a hivatkozott osztalyt. Vagy nincs a classpathon, vagy meg azt is irjak, hogy JAVA_HOME nem jdk-ra allitasar okozhatja. Mavenben milyen scopepal van a dependencia?

    Megprobalod az itteni nyitoposzt aljan levo pontos verzioszammal is a derbyt? [link]

    A 10.15.1.3 verzióval nem megy. Amit a stackow. használnak 10.12.1.1 azzal jó. :Y
    A többi verziót nem néztem végig. Mindenre gondoltam, de erre álmomban sem.

    Ajjaj. THX

  • #68216320
    törölt tag

    Szerintem a legérdemesebb beszerezni valamelyik beginner Udemys Spring traininget. Általában nagyon szájbarágósak és a végletekig praktikusak. Ha szerencséd van, olyan helyed dolgozol, hogy van ingyen access. Ha nem, akkor érdemes kinézni valamelyik akciósat és rákölteni vagy 10-20 eurót. Szerintem ezerszer könnyebb megérteni egy ilyenből, mint könyvekből, vagy írott tutorialokból.

    Jelenleg egy ilyen Udemy-s anyagom van. Ez megfelelő lehet szerinted? Nekem jónak tűnik a content alapján.

    Illetve találtam a YT-on magyar nyelvű anyagot is. A San Franciscoból jöttem csatornán Spring Boot ismeretek címmel.

    A magyar nyelvűvel kezdeném, mert az angol lassabban megy kicsit sajnos (még). Gondolom nem gond, ha két külön helyről jön infó. Átfogóbb képet kapok. Igazából nem rohanok sehova csak veszett módon érdekel a Java és most lett egy kis időm.

    Eddig PHP vonalon dolgoztam, kevéske OOP-vel sajnos a régi projectek miatt, mindenféle framework nélkül. A JAVA mellett állt rá az agyam is az OOP szemléletre. De ez egy másik történet ...

  • wopi
    aktív tag

    Connection pool beállításokról van itt egy adag, de elég régi verzióhoz.

    Ezen kívül ami gyanús lehet még, hogy esetleg az alkalmazásban nincsenek a kapcsolatok felszabadítva használat után. Hogyan szerzel EntityManagert, hogyan commitolsz, hívsz-e rá close-t? Valahogy injektálod, vagy EntityManagerFactory-val készítesz? Utóbbi esetben elvileg mindig kell close-olni.

    Ez lesz itt a baj. Nem close-olom az EM-t.

    Nagyon köszönöm!:)

  • M_AND_Ms
    veterán

    Egyfelől van SQL topic, ez oda jobban illene.
    Másfelől:
    - Indexeket kell használni. Azt az oszlopot kell indexelni, ami a where feltételben szerepel elsősorban. Ebből is elsősorban azok lesznek gyorsak, amikor konkrét értékre vonatkozik a feltétel, vagy arra, hogy egy érték egy tartományban van-e. Ha több oszlop is van a keresésben, lehet kompozit indexeket definiálni. Ha pl.: van a,b,c oszlopra egy indexed, azt az olyan feltételekre lehet használni, ahol vagy csak a-ra, vagy a-ra és b-re, vagy a-ra, b-re, s c-re van megszorító feltétel megadva. Az index gyorsítja a keresést, de lassítja a beszúrást, törlést. Ezen kívül még fontos, hogy ha csak az indexben szereplő dolgokat fogsz kikeresni a select-tel, akkor az szinte biztosan csak memóriában fog történni, de a többi mező lekérdezéséhez már lehet a diszkhez kell fordulni, ami lassítani fog erősen. Másik megfontolás a select oszlopok számánál, hogy minden extra oszlop megnöveli a visszaadott adathalmaz méretét, emiatt ha a sávszélesség probléma az adatbázis és az alkalmazás szerver között, akkor ronthat a sebességen. Erre szoktak DTO-kat használni(olyan objektum, ami csak a teljese tábla oszlopainak egy részét tartalmazza. Azt, amire éppen minimálisan szükség van az adott probléma megoldásához.).
    - Nem árt megnézni azt sem, hogy a lekérdezés tényleg fogja-e használni az elkészített indexet. Erre általában adatbázisonként különbözik, hogy milyen paranccsal, de le lehet kérdezni, hogy mi lesz a query excution plan. Abból kiderül, hogy fog-e használni indexet, vagy nem. Illetve melyiket. A kritikus lekérdezésekre szerintem mindig ellenőrizni kell.
    - Ha gyakran használ az ember joint, akkor érdemes lehet elgondolkodni a joinolt tábla foreign key-ként használt oszlopának indexelésén. Ez nagyban felgyorsíthatja a join-ok sebességét.
    - Ha a beszúrás és a törlés is nagyon gyakran történik meg és a tábla nagy, akkor érdemes lehet particionálni a táblát több részre. Mondjuk ha neveket tárolsz, akkor az egyik tabla csak a-b, a másik c-d, ... kezdetű neveket tartalmazza. Viszont ilyenkor pl. nehéz lesz jó foreign keyeket definálni a nevekre, s sok egyéb komplikáció előjöhet. Ha ilyen jellegű a probléma, akkor lehet érdemesebb valamilyen noSQL db-t választani RDBMS helyett.

    Még másfelőlebb (sic!) az indexelés nem Java, de még csak nem is Sql téma. Leginkább, általában az adatbázisok, adatbáziskezelés témát kellene megismerni, megtanulni.

  • orc88
    őstag

    Én ugyan nem értek az AWT-hez, de az hogyan találja ki up, vagy down arrow lenyomásra, hogy fel, vagy le kell állítania az aktuális sort?
    A handler amit írtál, mindenképpen beállítja a textet a kijelölt sor alapján. De mi állítja be a kijelölt sort? Van valami az AWT-ben ami automatikusan állítja a sor billentyű lenyomásra? Ebben az esetben valamilyen olyan listenert kellene meghívni ami biztosan a selection megváltozása után lesz meghívva.

    Itt pl. a ListSelectionListener.

    Hát öö, szerintem ez előre meg van írva a JTable osztályban. Én nem adtam hozzá semmilyen kódot, drag & drop-pal behúztam és már tudta is mit kell csinálni :DDD

    KeyReleased eventre meghívva már működött a metódusom megfelelően.

  • Aethelstone
    addikt

    Runtime reflectionnel a feldolgozasa, meg Beandescriptor/Introspectorral az mar nagyuzemben megy, de a compile time osztaly generalas AbstactProcessor extendalassal az meg ujdonsag nekem. De hat nagyon elirigyeltem a Jaxb-tol meg a JPA-tol a metadata definialast annotaciokkal. :D Most kb. ahhoz hasonlot csinalok, mint amit a JPA modelgen csinal az Entity metamodel generalasakor. A zavart pont az okozza, hogy compile time a reflectionnel nem lehet kb. semmit cainalni, hanem AnnotatedConstruct, Element, meg Type, TypeMirror es tarsaik allnak rendelkezesre.

    A Lombok ilyen szempontból teljesen jó iskolapélda.

  • Aethelstone
    addikt

    Most először írok annotation processort. Elsőre nem túl intuitív a dolog, nagyon szokatlanok az Elementek, meg a Type-ok. Olyanok leellenőrzése, hogy valamelyik annotált method enclosing osztálya implementál-e egy interface-et, eléggé nyakatekerten és indirekten megoldhatónak tűnik(Stringre konvertálás és annak az equals-e).

    A Reflection elsőre nagy mágia, de aztán az ember elkezdi mindenre (is) használni :D

  • XP NINJA
    őstag

    Akkor vagy szed le egy böngésző segítségével a weboldal SSL certjét és importáld be keytool-lal a cacerts-be, vagy kapcsold ki az SSL tanúsítvány ellenőrzést. Ez a link meg azt mutatja meg, hogy hogyan tudod a saját SSL validatort összeilleszteni a FileUtils adott függvényével.

    A cacerts-es importra elsőre nekem ez a kis bash utility tetszik: [link]. Persze ez Windowson nem fog menni, hacsak nincs minGw-d(esetleg git bash/ git for windows, aminek szintén a része).

    Az első megoldással próbálkoztam, hozzá is adtam cmd-ből a bkk.hu cert-et, de ugyanaz a hiba. Pedig leelenőrizve is hozzáadta. Van más amit még meg kell csinálni hogy észre vegye? Illetve ez így gép specifikus lesz? Vagy valahogy meg lehet oldani hogy máshol is meglegyen ez a cert? :F

  • axioma
    veterán

    Alapvetően probléma nincsen vele, de én inkább csinálnék egy másik mátrix típust(Matrix), ami teljesen a ProjMatrix implementációitól. És akkor nem lenne generikus a ProjMatrix interface, a getUnderlying helyett meg lenne egy Matrix getMatrix. És az egyes implementációknak lenne az az implementation detail-je, hogy a belső saját mátrixából hogyan fog mátrixot csinálni, factory-kal, különböző bemenő adatok alapján. Pl.: lenne egy ilyen a Matrix createMatrix(double[][] mtx), illetve valami más értelmes adat. A konstruálás paramétereit mindig az vezényelje, hogy milyen adataid lesznek ahol felhasználod ezt az interface-et.

    Működni tökéletesen működni fog amit csináltál, viszont az nem fog nekem tetszeni, hogy a felhasználó kódnak végül mindenképpen tudnia kell a konkrét implementáló osztályokról, mert van olyan method az interface-ben, ami implementáció specifikus értéket vár/ad vissza. Így nem tudod pl.: ServiceLoaderrel betölteni az implementációkat, hanem minden új implementációnál újra kell majd fordítanod a kódot. Ami nem feltétlenül probléma, de egy megfontolandó dolog.

    Ami sérül ebben az interface-ben, az a SOLID design elvekben a "dependency inversion principle". Nem jó practice, ha az interface felhasználója bármilyen specifikus dolgot kell tudjon az implementációból(esetedben az M típust).

    Itt most azert kell a generic, mert ahogy latszik is, pl. az add az direkt csak a sajat underlying-jait tudja osszeadni. Tehat egy kod nem keverheti az underlying-okat, mert pont az a lenyeg hogy ne legyen az egesz lehuzva a get(x,y) szintjere, hanem a meglevo megvalositas "teljes erejet" hasznalja ki. Senki nem is fog es nem is akar olyat irni, hogy nd4j matrixot adunk az apache-oshoz.
    A cel nem az, hogy az interface elrejtse a megvalositast, csak hogy lehessen idovel cserelni alatta. De kozben nem fogjuk kidobni az nd4j sebesseget... [idokozben atment vegre a 3rd party engedelyezesen], meg az esetleges kesobbi GPU-val gyorsitast. Ugy kell elkepzelni, hogy a program egy futasa alatt a megvalositasok kozul mindig csak egy letezik, jojjon az barhonnan, es mint ProjMatrix tipusu valtozok lesznek kezelve [igen, van ProjMatrixUtils is create-tel... az interface amugy nekem kivulrol jon mint input, nem mondom hogy nem szolhatok bele - bar amikor probaltam, hogy ha csak 2dim matrixaink vannak, talan nem kene-e az interface-t se altalanos n-dim-nek csinalni, foleg ha a ket "gyari" megvalositas egyike alapbol se kepes ra... de siman lepattantam], egy teljes refactort tuti nem tudnek atvinni. A ...Utils-t bovithetem, masikat nemigen. Es en kell az implementaciokat csinaljam, a flatmatrix csak azert merult fel, mert az apache-t akartam "legyorsulni" (az nd4j-t mar vszinu nem fog sikerulni, bar majd meglatjuk, mivel naponta es hosszan futo job-rol van szo, csak az azon mert sebesseg szamit, nem az "altalanos").

  • Lortech
    addikt

    Miért nem simán T a paraméter az első add függvényedben, az interface-ben? Ha azt csinálod, akkor azzal meg tudod akadályozni, hogy a "impl1.add(impraw);" illetve a "impl2.add(impraw);" leforduljon. Persze az impraw.add fogad mindenféle típusú interface-et. Aztán ha type mismatch van, akkor futási időben száll el a
    paramEnforcerMatrix.add(paramEnforcerVector); sor.

    public interface ParamEnforcer<T extends ParamEnforcer<T>> {

    void add(T other);

    }

    class MatrixType implements ParamEnforcer<MatrixType> {

    @Override
    public void add(MatrixType other) {

    }
    }

    class VectorType implements ParamEnforcer<VectorType> {
    @Override
    public void add(VectorType other) {

    }
    }

    class Tester {
    void test() {
    MatrixType matrixType = new MatrixType();
    ParamEnforcer paramEnforcerMatrix = matrixType;

    VectorType vectorType = new VectorType();
    ParamEnforcer paramEnforcerVector = vectorType;

    matrixType.add(matrixType);
    vectorType.add(vectorType);
    paramEnforcerMatrix.add(paramEnforcerVector);

    }
    }

    Ha azt csinálod, akkor azzal meg tudod akadályozni, hogy a "impl1.add(impraw);" illetve a "impl2.add(impraw);" leforduljon.
    De azt is megakadályozza, hogy az
    impl1.add(impl1);
    impl2.add(impl2);
    forduljon. De ja, igazából nem vagyunk sokkal beljebb az IF1<T> fordítási idejű típussal sem az Imp1 / Imp2 helyett. IF1<T> -vel mind a két imp típuskompatibilis - nem úgy a Matrixtype és Vectortype egymással -, ezért nem kapsz classcastexceptiont, ahogy a példádban viszont igen. Fordítás időben kéne tudni kiküszöbölni ezt az esetet, de a generikusok erre nem jók javában.

  • Retekegér
    MODERÁTOR

    Hat en siman el tudom kepzelni. 2018-ban egy java fele magas szintu nyelven mire hasznalna az ember 8-as szamrendszert? Ha ilyet latnek, oklendeznek a code smelltol, kiveve ha a problem domain megkivanja.

    Megcsinaltam amugy ezt az Oca mockot tegnap este. Nem szamoltam, hogy milyen eredmenyt kaptam, de erosen a kuszob kornyeken billegek erzesre. Ilyen vizsgat amugy van ertelme letenni? Egyik munkatarsam tervezi. Azert kerdem, mert mig pl. Network/security emberek duskalnak a certekben, addig sw. fejlesztoknel talan az eddigi 10 evem alatt egyaltalan nem lattam olyat, aki certtel rendelkezett volna. Leszamitva az agile certeket(cspo, csm).

    Én még nem nagyon láttam olyan helyet, ahol a cert követelmény lenne, vagy megléte előnyt jelentene (CV-ben gondolom jól mutat). De akkor már OCP, ha mégis (ettől függetlenül egy OCA is tud elég szívatós lenni).

  • htc07
    addikt

    Ha elso munkahelyet ertjuk a junior alatt, akkor szerintem 600k fele menni lehetlennek hangzik. Par ev utan ossze lehet hozni, vagy jo korabbi referenciakkal, de full elso munkahelyre nulla tapasztalattal szerintem kizart. Ott inkabb a 400-500k a realitas manapsag.

    frissen végzett bootcampes java-s vagyok, nem kapkodnak utánunk annyira, pedig 400 bruttó alatt kérünk.
    ugyanitt állásajánlatokat meghallgatok :DDD

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