- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
- Huawei Watch Fit 5 Pro - jó forma
- Rég várt frissítést kap az Android tárcsázója
- A Motorola Edge is különleges textúrával várható
- Honor Magic8 Pro - bevált recept kölcsönvett hozzávalókkal
- Okosóra és okoskiegészítő topik
- Friss információk és képek a OnePlus új órájáról
- Nemzetközi vizekre evezett a Realme GT 7 és GT 7T
- One mobilszolgáltatások
- Képeken a Sony WF-1000XM5
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
Új hozzászólás Aktív témák
-
bucsupeti
senior tag
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.
![;]](//cdn.rios.hu/dl/s/v1.gif)
A static metódus arra enged következtetni hogy valószínű ugyan abban az osztályban van ez a kaloriaKiir metódus amiben a main() és azért static hogy tudd meghívni a main-ben.
Lehet hogy a vizsgára amire készülsz ez jó és elegendő. Én a következő osztályokkal dolgoznék:
Gyumolcs : egyetlen gyümölcs adatait tároló POJO osztály. semmi extra metódus nem kell ebbe. Max a toString-et írd felül hogy az objektum értékeit adja vissza.
KaloriaTabla : lenne benne egy ArrayList<Gyumolcs> lista, egy adatbeolvasó metódus ami feltöltené ezt a listát. Konstruktorba feltölteném a listát. Kell egy kereső metódus ami egy string alapján keres a listában a gyümölcs neve alapján és Gyumolcs-öt adnék vissza, vagy null-t ha nincs. (Ez az osztály lehetne akár singleton is, ha már tanultátok)
A futtató osztályban (amiben a main() van), megírnám a felhasználói felületet, menüt, a névbekérést stb. Itt példányosítanám a KaloriaTabla-t és ennek a kereső metódusát hívogatnám.
Igaza van Sirpi kollégának abban hogy a contains használata nem a legjobb megoldás. Ha contains-t használsz akkor kezeld úgy hogy nem csak egy hanem több gyümölcsöt is kaphatsz eredményül, és ilyenkor minden találatot jeleníts meg. -
bucsupeti
senior tag
Van a Java-ban Clipboard API.
.
-
bucsupeti
senior tag
-
bucsupeti
senior tag
Tudja valaki hogy mi lehet az oka hogy Netbeans 8.1-ben a következő jelenségnek?
Egy webalkalmazást készítek, hibernate-el. Van benne model package amiben vannak a hibernathez szükséges pojo-k annotációval .
a hibernate.cfg-re ha futtatok egy HQL queryt (from User) akkor rendben lefut minden, eredményben ott az oszlopok.
Ezután módosítottam az adatbázison, majd a pojo-ban is felvettem az új mezőt, annotálva.
Ezután ismét HQL query-t futtatok (from User) és nem látom az új mezőt.
Hiába clean-elem a projektet, no effect....
Bezárom a projektet, újranyitom... semmi.
Bezárom, kilépek a netbenasből, majd újraindítom és akkor látom a változást.
Ezt a jelenséget akár mikor reprodukálom.
Ubuntu 16.04 és Netbeans 8.1 Java 8-al és Tomcat-el (bár a tomcatnek itt még nincs túl sok szerepe)
Köszi a segítséget!
-
bucsupeti
senior tag
En elsosorban az identalast tennem helyre, mert az egy dolog hogy a zarojeleket elrontja valaki, de igy baromira nem is latszik a kodbol, hogy mit hova szant. A for-on beluli elso teljes if egy tab-bal bentebb kene legyen.
A tobbivel egyetertek, ekezet es a magyar ugy altalaban elhagyasaval kapcsolatban is, csak szerintem mind a kettot meg kene elozze, hogy a programozo szandeka vilagos legyen a kodbol. (Meg szerintem ha ez rendben van, akkor mar mechanikusan a zarojelpar highlight segitsegevel ellenorizheto, hogy ki hol van bezarva, es az ott jo helyen van-e.)egyetértek veled!
Egyébként én magam kiteszem mindig a { } jeleket, még akkor is ha csak egyetlen utasítás van az adott blokkban (mint pl itt az if szerkezet).
Valahogy így:for(int i=0;i<MAX; i++) {
if (i>MIN) {
System.out.println("Alma");
} else {
System.out.println("Körte");
}
} -
bucsupeti
senior tag
A for ciklus kapcsai hol vannak?
A for ciklusnak nincsenek kapcsi tehát a teljes if tartozik hozzá. A system.out.println is.
A system.out sor elé kellene az ifet záró } jel es nem utána.
Egy javaslatom had legyen. az ékezetes betűket próbald hanyagolni az azonosítókban. -
bucsupeti
senior tag
Ezeket párhuzamosan is lehet tanulni, ez nem előfeltétel, Javanál sem (elképzelhető, hogy vannak olyan nyelvek, amelyeknél másképp működik a dolog). Sőt, nekem meg az a személyes meggyőződésem, hogy konkrét programozási nyelv, és példák nélkül ezeket az absztrakt fogalmakat önmagukban tanulni totális időpocsékolás.
Nyilván kell egy eszköz amin keresztül gyakorlatban is ki lehet próbálni az elméletet. Erre viszont semmiképp sem egy java féle környezetet javaslok.
Éppen ezért írtam azt hogy kell hozzá az architekturák és oprendszerek megfelelő összhangban történő tanulása.
pl miért és hogyan történik egy program indítása. hogyan történik a különféle adatok tárolása a memóriában. ahhoz hogyan fér hozzá a processzor. hogyan készül egy olyan program ami képes a memóriába betöltődni, majd ott elindulni és különféle utasítások végrehajtása kapcsán egy konkrét feladatot elvégezni....Szóval a java-ig meg az első osztály leírásáig el kell telni egy kis időnek ha valaki teljesen nulláról kezdi.
nyilván lehet úgy is tanulni hogy elindítja az ember a mindenféle okosságokkal felruházott IDE-t és ír benne java-ban vagy bármi más nyelvben programot, közben megtanulva a szekvencia-szelekció-iteráció egységeket alkalmazni. De az hogy közben mi és hogyan máködteti a magas szinten megírt programot ha valaki nem érti, nem látja át akkor ahogy alább írták, csak favágás lesz belőle.
Egy autószerelőnek ismernie kell az autók általános felépítését és működését a lehető legaprólékosabban. Ha nem ismeri akkor nem lesz jó autószerelő. Ki fogja tudni cserélni a gyertyákat, meg be fogja tudni állítani a gyújtást, de ez nem azt jelenti hogy érti is amit csinál. Kb ez a helyzet a programozással is.
Szóval érdemes az alapokat minél jobban megismerni, kár kihagyni ezeket a lépéseket.
-
bucsupeti
senior tag
De mit tanítanak több féléven keresztül, ami nélkül nem lehet elkezdeni egy konkrét programnyelvet?
Kb ezek:
szekvencia, szelekció, iteráció
alapvető adattípusok és struktúrák
összetett adatszerkezetek
programozási tételek, algoritmusok
objektum-orientált paradigmaValamint személyes meggyőződésem hogy ezzel párhuzamosan a számítógép architektúrákat és operációs rendszereket is megfelelő ütemben, összhangban kell tanulni (és oprendszer tantárgy alatt nem a windows grafikus felületének kezelésére gondolok.)
-
bucsupeti
senior tag
Szerintem:
double[] xo;
int i=0;
while (l<r){
l=l+0.1
xo[i]=l;
i++;
} -
bucsupeti
senior tag
-
bucsupeti
senior tag
Sziasztok!
10 éve dolgozom System Admin/DevOps szerepkörben több nemzetközi cégnél. Viszont mostanában az infrastruktúra területéről kacsingatok a fejlesztés felé, leginkább a java érdekel. Nem vagyok benne totál kezdő, MSc-s diplomám van, ahol volt jó pár programozói kurzusom is, amiket könnyedén vettem. Volt köztük több Java-s is. A szakdolgozatomnál például egy monitorozó rendszert készítettem, aminek a felülete Springes volt. Viszont azóta eltelt már pár év. Szerintetek mennyi idő alatt lehet annyira átképezni magam, hogy már való életbeli projekteken dolgozhassak? A cégnél van képzés, heti 3x 1,5 óra, amit igénybe vehetek. Szerintetek reális lehet az egy év erre?
ha csináltál már springes alkalmazást és azzal tisztába is voltál, akkor szerintem tudsz "mindent".
Ha csak a gyakorlat hiánya ami miatt aggódsz akkor ahhoz nem kell egy év szvsz. -
bucsupeti
senior tag
Sziasztok!
Szeretném a Java nyelvet megtanulni, de mindenhol azt olvastam, hogy első nyelvnek nem igazán ajánlják, inkább mondjuk a Pythont.
El is kezdtem tanulni [ezen jegyzet] alapján, kb a harmadánál járok.
A kérdésem az lenne, hogy érdemes csak azért átrágnom magam az egészen és mondjuk még 1-2 hónapot beleölnöm csak azért, hogy utána könnyebben menjen a Java?
Vagy átnyergelhetek?köszönöm
Tök mindegy melyik nyelvet valasztod szvsz. Sokkal fontosabb szerintem hogy az oop-vel tisztába legyél!
-
bucsupeti
senior tag
Köszi! Így valóban nem fut le az a kismillió select!
Mondjuk az okára kíváncsi vagyok. Arra gondolok hogy ilyenkor egy submit szerű dolog fut, ami miatt a form minden komponense inicializálódik. Azt gondoltam hogy a gomb immediate="true" tulajdonsága kikerüli ezt, de ezek szerint nem.
Mindenesetre a workaround működik! Köszi mégegyszer
-
bucsupeti
senior tag
Adott egy JSF (Primefaces) alkalmazás, a háttérben Hibernate + postgresql dolgozik.
Az alkalmazás főképernyőjén megjelenik három táblázat, ami három összetett, joinolt select eredménye amit a Hibernate generál.
Van egy kilépés gomb a formon aminek az a dolga hogy érvényteleníti a session-t és átirányít a login képernyőre:
Így néz ki az xhtml:<p:commandButton id="logoutButton" ajax="true" value="Kilépés" action="#{loginBean.doLogout()}" immediate="true"/>Így pedig a bean:
public String doLogout(){
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
return "/index.xhtml?faces-redirect=true";
}Amikor ezt a parancsgombot megnyomom, akkor befrissíti a táblázatokat, azaz lefutnak a lekérdezések.
Ennek mi lehet az oka?
-
bucsupeti
senior tag
bár nem springezek de valóban ilyen lehet a probléma.
van ez "check leak" gomb a manager felületen. Azzal ellenőriztettem a betöltött osztályokat és hát televolt (kb 2 képernyőnyi osztály volt betöltve, mindig újabb verziók ahogy sorba kiküldtem azokat.Miután ujraindítottam ez a lista kiürült, de ahogy egy újabb verziót teszek ki abban a pillanatban megjelenik benne az osztályoknak egy újabb definiciója,
Ja és ettől természetesen sokkal fürgébb lett a deploy folyamat.
Köszönöm az infókat mindenkinek!
-
bucsupeti
senior tag
Milyen gondot okoz ha sokat deloyolunk?
Olyat vettem eszre hogy nagyon lassan deployolodik az alkalmazásom. A feltöltés után percek telnek el mire elérhető lesz az alkalmazás. Nemrég ez pillanatok alatt ment.
Mi lehet a probléma?
-
bucsupeti
senior tag
Segítsetek!
JSF (Primefaces) alkalmazást készítek és a dátumokkal nem boldogulok.
Az aktuális nap 00:00 időpillanata kell nekem dátum értékként.A szerver linux, dátumbeállításai:
mynet@myserver:~$ date
2016. aug. 1., hétfő, 12:23:32 CEST
mynet@myserver:~$ date -u
2016. aug. 1., hétfő, 10:23:39 UTCMost éppen 2016.08.01 12:20 van. Miért kapok 2016.07.31 10:00-át a következő kódra?
Bean realeváns része:
@PostConstruct
public void init() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
myDate = c.getTime();
}
public Date getMyDate(){
return myDate;
}JSF releváns rész:
<p:outputLabel value="Időszak: "/>
<p:outputLabel value="#{myBean.myDate}">
<f:convertDateTime pattern="yyyy.MM.dd hh:mm" />
</p:outputLabel>Megoldódott.
A JSF-ben az
<f:convertDateTime pattern="yyyy.MM.dd KK:mm"/>részben meg kell adni az időzónát is.<f:convertDateTime pattern="yyyy.MM.dd KK:mm" timeZone="Europe/Budapest" /> -
bucsupeti
senior tag
Segítsetek!
JSF (Primefaces) alkalmazást készítek és a dátumokkal nem boldogulok.
Az aktuális nap 00:00 időpillanata kell nekem dátum értékként.A szerver linux, dátumbeállításai:
mynet@myserver:~$ date
2016. aug. 1., hétfő, 12:23:32 CEST
mynet@myserver:~$ date -u
2016. aug. 1., hétfő, 10:23:39 UTCMost éppen 2016.08.01 12:20 van. Miért kapok 2016.07.31 10:00-át a következő kódra?
Bean realeváns része:
@PostConstruct
public void init() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,0);
cal.set(Calendar.MINUTE,0);
myDate = c.getTime();
}
public Date getMyDate(){
return myDate;
}JSF releváns rész:
<p:outputLabel value="Időszak: "/>
<p:outputLabel value="#{myBean.myDate}">
<f:convertDateTime pattern="yyyy.MM.dd hh:mm" />
</p:outputLabel> -
bucsupeti
senior tag
reverse engineering pl amikor egy meglevo adatbazis szerkezetebol epited fel a szükséges osztályokat...
Erre az IDE-k támogatást is adnak, azaz legenerálják a szukseges osztalyokat, konstruktorokat, metodusokat. -
bucsupeti
senior tag
Nem tudom mire gondolhatsz, de van olyan hogy reverse engineering...
-
bucsupeti
senior tag
Sziasztok!
Gondolom már rengetegen kérdezték meg, de: Hogyan tudnám elklezdeni megtanulni a nyelvet?
Milyen programok kellenek? (Most nemrég olvastam a lányról aki sajat magatol tanult meg programozni 12 evesen kezdte ez eléggé lázba hozott meg már rég izgat ez a világ) Angol oldalakat tudnátok ajánlani? Vagy videokat? Vagy barmit ami segithet?

Ami kell hozza:
Egy szamitogep
Egy olyan operacios rendszer amire van java virtualis gep (windowsok, linux, osx)
Szovegszerkeszto hogy megird a forraskodot (a Word erre nem a legjobb valasztas)
JDK ami letoltheto az oracle honlaprolTechnikailag mas nem kell.
Megirod a java programot, amit a javac forditoval leforditasz bajtkodra, majd a bajtkodot futtataod a java nevu progival. Ennyi.
Angol nyelvu oktató oldal pl:
http://www.tutorialspoint.com/java/index.htm -
bucsupeti
senior tag
-
bucsupeti
senior tag
igen ezeket megtaláltam, köszönöm!
Azért kérdeztem hogy van-e valakinek tapasztalata ezen a téren, hogy melyiket érdemes használni, vannak-e buktatók, illetve linux alatt melyik megy (van amelyikhez outlook kell, az nyilván nem megy linux alatt) -
bucsupeti
senior tag
Milyen szolgáltatás?
exchange levelezést szeretném elérni. küldeni nem akarok, csak olvasni a postafiókot.
A lényeg hogy figyleni szeretném hogy jött-e levél, és ha jött akkor a levél body-ját le szeretném menteni fájlba. -
bucsupeti
senior tag
valkinek van tapasztalata exchange szerver elérése terén? linux alól kellene elérni.
-
bucsupeti
senior tag
Ez mondjuk az IDE consoljára nem biztos, hogy hatássas lesz. Rondábbnak tűnő, de platformfüggetlen megoldás jó sok új sort kiírni.
norbert1998: Ha System.err -re írsz System.out helyett azt remélhetőleg pirossal írja.

windowsokon nem tudom most éppen mi a működés, de linuxon szerintem is az üres sorok kiiratása a jó módszer. -
bucsupeti
senior tag
Sziasztok!
Azt szeretném elérni scannerrel és egy while ciklussal, hogy addig olvasson konzolról míg a user nem ír be semmit csak egy entert üt( és amit beolvasok azt egy fájlba írom).
A probléma az, hogy txt file több gigás lesz vagy nem ír bele semmit és ha entert ütök ugyanúgy folytatódik a beolvasás.
hasnext() , equalsIgnoreCase() mindent próbáltam.. Ötletek?kód?
-
bucsupeti
senior tag
Hasonló a véleményem az Angster-féle könyvről. És az a probléma, hogy a magyar szakirodalomban ez a könyv még a jobbak közé tartozik.
ezzel egyetértek! Igen szegényes és gyenge a magyar java szakirodalom.
-
bucsupeti
senior tag
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.)
nem értek egyet a leírtakkal, de tiszteletben tartom hogy neked ez a véleményed. meggyőzni meg vêgképp nem akarlak.
peace
-
bucsupeti
senior tag
Én nem ismertem eddig ezt az Angster féle könyvet, most olvastam bele. Elég szomorú, hogy emberek ebből kénytelenek programozni tanulni.
Az "első java programom" rész a 134. oldalon kezdődik. Előtte definiál mindent, az assemblertől az oop paradigma részleteiig, anélkül, hogy egy deka java kódot írna az ember. A terminológia sokszor teljesen érthetetlen, szükségtelen részletekkel foglalkozik (szoftverkrízis, CASE eszközök, wtf), ugyanakkor alapvető, mély megértést igénylő fogalmakat elintéz egy bikkfanyelvű definícióval, sok helyen elavult, stb. Ezért írtam, hogy ez elsősorban arra jó, hogy legyen elég anyag benne, hogy legyen mit kérdezni vizsgán, de hogy ebből senki nem fog rendesen megtanulni programozni, az tuti.(Azért az nem lehet véletlen, hogy egy tetszőleges multicég helyből 3 hónapos java képzésre küldi a juniorokat, mert az egyetemen oktatott anyag arra sem elég, hogy alap feladatokat rábízzanak az emberre.)
azt gondolom hogy konyvbol nem lehet megtanulni programozni. programozás oktatassal (is) foglalkozom es azt vallom hogy programozni ugy lehet megtanulni ha programozunk. programozas nem egyenlo valamilyen nyelv ismeretevel. az architekturalis alapok, az operacios rendszerek ismerete, a matematikai alapok, a programozasi elvek es paradigmak ismeret, az algoritmikus gondolkodas, az alapveto tervezesi technikak, az adatszerkezetek, meddig soroljam......
szoval nem eleg leulni es kodolni, kellenek az alapok, mert kulonben nem lesz a kodnak minosege es ez igen koltseges tud lenni.
mint irtam izlesek es pofonok. en nem tartom az angster konyveket folosleges temak halmazanak es azt sem mondom hogy hianytalan. jo konyv es kezdo szinten kelloen alapos.
a thinking meg pörgős es jóval gyakorlatiasabb.szerintem az angster melyebb elmeleti alapozast ad, a thinking pedig a sok gyakorlat miatt azonnal hasznalhato gyakorlati tudast.
-
bucsupeti
senior tag
IDEA nagyon jó, főleg macen, ahol az Eclipse nem igazán nyújt csúcskategóriás user experience-t. Annyi a baj vele, hogy 450 dollár belőle egy céges licensz. Amúgy kézreáll és tud mindent kb.
(#7025) M_AND_Ms
Nemár, tényleg ezt az Angster könyvet ajánljátok kezdőknek? Nekem elavultnak tűnik, kitalált bikkfanyelvű szakkifejezésekkel, irreleváns "elméleti" tudás hegyek, szóval ez nem egy modern szakkönyv, hanem inkább egyetemi jegyzet, arra kihegyezve, hogy legyen benne elég tanulnivaló, hogy lehessen mit kérdezni a vizsgán.
Bruce Eckel - Thinking in Java esetleg?kinek a pap kinek a papné. szerintem jó a thinking is és az angster könyv is. nem gondolom hogy az angster folosleges elmelettel lenne tele. szerintem az oo elvek stabil ismerete szukseges.
-
bucsupeti
senior tag
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.egyetértek az előttem szólókkal. Az eredeti kérdésedre a válaszo egyébként az hogy az alapok elsajátításához jó a régebbi java is. Az Angster könyv se a mai java verziót használja, de az alap tanulásnál elegendő a régebbi verzió is.
Én is az Angster könyveket ajánlom.
-
bucsupeti
senior tag
leírom az egészet érthetőbben. szóval van egy osztályom ami tartalmaz egy x és y egész típusú változót.
ebben kell egy konstruktor ami két számot vár és ebből a két pontból készít egy kordinátát lényegében.és van egy külön osztályom amiben vannak pontok megadva ahogy az előbb adtam meg és akkor így kellene létrehozni pontokat

így érthetőbb?
nem.... a tömbben mit akarsz tárolni? számokat, koordinátát, állapotot?
-
bucsupeti
senior tag
mi lenne a célod? Az hogy egy tömbben el tudj tárolni számpárokat, vagy egy adott számpár által jelzett koordinátapont meg legyen jelölve? Esetleg a megadott Hely objektumot kell tárolni egy tömbben?
Kérlek pontosan fogalmazd meg, egyelőre nem tisztán értem a kérdésedet. -
bucsupeti
senior tag
-
bucsupeti
senior tag
Hogyan lehet levizsgálni azt h pl 10 táblán keresztül legyen egy érték unique?
Pl: minden táblában van e-mail, de mindenhol unique-nak kell lennie az egész db-t nézve.
Jelenleg úgy oldottam meg, hogy minden dao-nál az addNewXY esetén levizsgálom az összes táblát, hogy van-e ilyen érték és ha igen dobok egy exceptiont. UpdateXY esetén ugyanez csak ott ha már van ilyen vizsgálom, hogy ahhoz tartozik-e aki updatel. Ez 10 külön dao-nál elég macerás, és ha jön egy 11. akkor mindenhol bővíthetem.Másik: Ha olyan adatot akarok lementeni ami db szigorítás szerint nem valid, pl unique, akkor kapok egy ConstraintViolationException-t, de ebből nem tudom kitalálni, hogy konkrétan mire kaptam ezt az exceptiont.
Olyan adatot nem engedek el db szintig amit validatorral kitudok szűrni, de ez nem minden.Ezekre mi a best practice?
kiszerveznem az email cimeket egy 11. tablaba es a 10 masikbol egy masodlagos kulccsal kapcsolodnek az email tablahoz....
(szerk.: most latom hogy elottem epp ezt javasoltak)
-
bucsupeti
senior tag
Olyan kérdésem lenne, hogy adott egy Konyvtar osztály és egy Konyv osztály. A Konyv osztályban vannak szerző, cím stb. adattagok. A Konyvtar-ban a Konyv[] típusú tömbben tárolódnak a könyvek. A feladat az, hogy ha van két példányosított könyvtáram akkor tudjanak egymás között könyveket cserélni. Hogy lehet ezt megoldani? Elméletben hogyan csinálnátok meg? Semmi ötletem sincs, nem értem hogy tud két példány kommunikálni egymással.
én csinalnek efy diszpecser osztalyt ahova be lehet regisztralni a konyvtar objektumokat valamilyen konténerben tarolva:
List<Konyvtar> konvtarak = new ArrayList()
Ennek a diszpecser osztalynak lenne egy swapBooks() metodusa ami lezongorazna a cseret ugy hogy a konyvtarak sajat metodusait hivogatna.
A Konyvtar osztalynak a cseret metodusokkal kell tamogatnia. Tudni kell kezdemenyezni a cseret, valaszolni egy csere kerelemre befogadni a cserebe kapott konyvet, kiadni a cserebe adott konyvet.
a cseret a diszpecser osztaly bonyolitja le akinek a szabalyait elfogadja minden regisztralo konyvtar. ezzel biztosithato hogy a cserek "becsuletesen" fognak lezajlani.
a pelda kapcsan inkabb az oo elvek megertesere alkalmazasara torekedj ugyanis az a lenyege ennek a feladatnak. ha nagyon profi akarsz lenni akkor tervezesi mintakat is bele lehet szoni...
-
bucsupeti
senior tag
Egy ideje már nagyon úgy érzem váltani kéne linuxra. Eddig nem tetszett és nem is igazán ismerem a linuxot, de pl a directory átnevezés windowson nem ment, linuxon azonnal. Az éles rendszerek elvileg linuxon futnak, ezért gondolom értelmes lenne fejleszteni is azon, amin fut majd. Tudom h run anywhere , de mégis itt van a példa, hogy nem igaz ez teljes mértékben.
Ha nem csak java-zom, akkor főleg egyre jobban érzem, hogy ez a windows szenvedős tud lenni.
Írtátok korábban, hogy azon érdemes fejleszteni, ami jobban fekszik embernek, de a kérdés, hogy megérné-e szenvedni heteket h váltsak?vágj bele, nem fogod megbánni, csak adj egy kis kifutást a dolognak, mielőtt megállapításokat teszel. A lányom 16 éves. 13 éves korában a netbookjára feltettem egy ubuntut. azóta nem hajlandó megválni tőle és teljes megelêgedéssel használja a mindennapi dolgaira (tanulás, kapcsolattartás, prezentációkészítés, dokumentumszerkesztês stb)
Ja és olyan problémákat hogy belassul, vírusos stb... elfelejthetsz...
-
bucsupeti
senior tag
-
bucsupeti
senior tag
ezt hogy lehetne megoldani, úgy hogy két külön metódus(függvény) hajtsa végre a kerekítést tehát kerekit2 és kerekit3 metódus mondjuk...
tehát ennek a kettőnek kéne írni egy-egy függvényt és a függvénnyel kerekíteni.. így is jó de nem ez a feladat sajnos
x=Math.floor(x*Math.pow(10,2)+0.5)/Math.pow(10,2); fx=Math.floor(fx*Math.pow(10,3)+0.5)/Math.pow(10,3);
x-et 2 tizedesre
fx-et 3 tizedesrepackage gyak;
public class gyak {
public static void main(String[] args) {
System.out.println("Függvény: f(x)=x^3-3.12x^2-4.62x+5.3\n");
poli();
}
public static double poli(){
double x=0;
double fx=0;
for (int i = 0; i < 40; i++) {
x+=0.25;
x=Math.floor(x*Math.pow(10,2)+0.5)/Math.pow(10,2);
System.out.println("x értéke: "+x);
fx=Math.pow(x, 3)-(3.12*Math.pow(x, 2))-(4.62*x)+5.3;
fx=Math.floor(fx*Math.pow(10,3)+0.5)/Math.pow(10,3);
System.out.println("Függvény: "+fx);
}
return fx;
}
}bocs, de azért ez nem feladatmegfogalmazás amit ide írtál! Mi a pontos feladatmegfogalmazás?
-
bucsupeti
senior tag
Ha jól látom nem túl naprakész a doksi.
10. oldal:
Nyissunk meg egy parancssor ablakot (Start menü / Futtatás / cmd.exe), majd állítsuk
be az aktuális könyvtárat a Java bin alkönyvtárára
(pl. cd ”C:\Program Files\ jdk1.6.0_01\bin”).
• Indítsuk el a javac fordítót: javac HelloWorldApp.java. (Bizonyos esetekben szükség
lehet a forrásállomány teljes elérési útjának megadására.)Tehát a fordítónak gondolom valami javac.exe-nek kellene lennie, de a honalpról letöltött JDK-ban nincs ilyen fájl a c:\Program Files (x86)\Java\jre7\bin mappában

szerintem nem telepítetted a jdk-t és ezért a jre könyvtárat találtad meg. Telepítsd a JDK-t (emiben egyébként a JRE is benne van) és menni fog.
Egyébként a java nyelv mellett érdemes nagyon erősen az objektum orientált programozási elveket és módszereket (programtervezési mintákat) tanulni, alkalmazni....
-
bucsupeti
senior tag
Milyen notebook-ot javasoltok Java fejlesztéshez?
Proci? memória? (SSD meg úgyis alap).
Ha írnátok konkrét típusokat az jó lenne. -
bucsupeti
senior tag
Hoi!
Picit off, de azért erősen kapcsolódik a témához:
Most kezdem tanulni a JAVA-t komolyabban, csak nem tudom, hogy milyen fejlesztőkörnyezet alatt csináljam. Gugli alapján netbeans annyira nem faszájos vállalati környezetben, inkább az Eclipse meg az IntelliJ. Azt is olvastam, hogy az IntelliJ bonyolultabb/macerásabb, de talán jobb is picit, de a honlapján az EE fizetősként van feltüntetve, de azt is akarok tanulni, mert csomó munkahelyen azt kérik (bármit is jelentsen
).Ez alapján akkor most melyiket?
kóstolj bele mindegyikbe. aztán válaszd a számodra legszimpatikusabbat annak alapján amit tapasztaltál (ne a fórumokon, meg itt-ott hallott információk alapján). Így meg fogsz ismerni több IDE-t is valamilyen szinten, ami már jó alap lesz arra, hogy később ha szükséges akkor tudj használni másik IDE-t.
Én az egyetemen Netbeans-t ismertem meg először és használtam is, majd később az EE és Android miatt átálltam Eclipsre, most pedig mivel az androidnál az Android Studio-t preferálják azt is használom (ami IntelliJ).
Gyakorlatilag mindhárom IDE-ben elboldogulok, ha kell bármelyikre rá tudok hangolódni.
Egyébként Eclipse párti vagyok. -
bucsupeti
senior tag
Annyiban egyetértek vele, hogy ha a ciklusban rendszeresen módosítgatva van a ciklusváltozó, akkor szebb a while. For esetén az ember arra számít, hogy az szépen a "kiírt" feltételek alapján végigiterál. Ha ettől nagyon eltérő a működése, akkor lehet az ember átsiklik felette, és csak csodálkozik, hogy miért nem azt csinálja a kód amit gondolt. While esetén meg biztosan végignézi, hogy mi történik a változóval.
Szóval problémának nem probléma, csak kisebb esélye van a hibának ha bele kell nyúlni utólag a kódba. Szerintem.Erre gondoltam....
-
bucsupeti
senior tag
A ciklusfejben és a ciklusmagban is van egy növelése a ciklusváltozónak.
A System.out.print (++i +" "); sorban legelőször az i értéke növekszik, majd kiirásra kerül.
System.out.print (n++ +" "); sorban először kiirásra kerül az n majd utána növekszik az értéke.Még annyit hozzátennék hogy szerintem a növekményes ciklusban (for) ne piszkáljuk a ciklusváltozót a ciklusmagban. Ha erre szükség van akkor ne for hanem while ciklust kell alkalmazni.
Utálom amikor eröltetett példákkal próbálják magyarázni egy-egy nyelvi elem működését. Ennél már csak a "mutatóramutatómutatóttatalmazómutató" a szebb amit C-ben szoktak példázni, de a gyakorlatban ilyen soha nem jön elő.
-
bucsupeti
senior tag
nem tudom ismeritek-e, de jó kis szórakozás és tanulni is lehet belőle: http://www.codewars.com/
Eddig nem volt benne Java, de most végre bétában betették! Lehet feladványokat is csinálni, vagy mások feladványát megcsinálni. Ha valamit sikerült megoldani, akkor mások megoldását is meg lehet nézni. Ebből pedig sokat lehet tanulni. -
bucsupeti
senior tag
akkor a new operátorral null-t kapok, azaz nem jön létre az objektum?
Azért ez a kettő állítás nem igaz.
public class Vmi {
public Vmi(boolean shouldThrow) {
if (shouldThrow) {
throw new RuntimeException();
}
}
}
public static void main(String[] args) {
Vmi vmi = new Vmi(false); // most a konstruktor rendesen lefut
try {
vmi = new Vmi(true); // most a konstruktor dob
} catch (Exception e) {
}
System.out.println(vmi);
}Ezen a ponton, ha null-t kapnál, akkor a vmi változó értéke null lenne. De ez nem igaz, hiszen a konstruktor "vissza se tér", így a változó marad az előző állapotában, azaz az első Vmi példányra mutat.
Jogos! Köszönöm!
-
bucsupeti
senior tag
-
bucsupeti
senior tag
Sajnálom, ha félreérthető voltam esetleg én erre a sorra gondoltam végig:
...
public static Singletonpelda getInstance() {
if (instance == null) {
instance = new Singletonpelda();}
return instance;
}
....Ahogy írtam utólag gondolom azért kell a Singletonpelda a metódus fejlécébe, hogy megegyezzen a metódus visszatérési értékével a típusa, de akkor a "Singletonpelda" simán a visszatérési érték típusa, mint a double/int,stb vagy más?
pontosan! a getInstance() egy Singletonpelda típusú objektumot ad vissza.
A public módosító a getInstance() láthatóságára vonatkozik, azaz kívülről is hívható, illetve statikus metódusnak definiálja a static kulcsszó. -
bucsupeti
senior tag
Csináld meg először karakteres programként. Ha az működik utána csinálj hozzá gui-t. Szerintem sokkal jobban meg fogod érteni és el tudod szeparálni az alkalmazás egyes rétegeit és ha a gui-s részhez érsz, már egyértelmű lesz az is hogy hol is tárolódik az alkalmazás valamilyen adata...
Magyarul először az üzleti logikát dolgozd ki...
-
bucsupeti
senior tag
Köszi mindenkinek a tanácsot. Úgy döntöttem, hogy elkezdek olvasgatni a módszerekről amiket írtatok, de megírom először "egyszerű" Java-ban Swinggel a kinézett feladatot. Már neki is álltam.
Az első kérdésem, ugye van több ablakom ezeken keresztül kellene vinni a bejelentkezett felhasználó adatait (neve, felhasználóneve, stb). Ennek hogyan érdemes neki állni?desktop alkalmazásnál ez miért probléma? bejelentkezéskor eltárolod egy objektumban az adatokat... Nyilván ennek az objektumot minden modulból elérhetőnek kell lenni.
Lehet hogy nem értem igazán hogy mit szeretnél.Vagy összekattintgattad a képernyőket és a login képernyőről a sikeres bejelentkezés után az infókat akarod továbbvinni?
-
bucsupeti
senior tag
Akkor még ORM sem kell. Ismerkedjen a JDBC-vel, különben az ORM-t sem fogja soha megérteni

+1
A JDBC segítségével az adatbáziskezelés fapados módját ismerje meg, majd utána jöjjön az ORM!
-
bucsupeti
senior tag
Épp a gyakorlás az, amikor érdemes mindent kipróbálni.
Részemről:
- Gradle vagy Maven
- Spring
- legalább egy Derby szerver módban
- Hibernate/JPA
- Spring Data JPA
- QueryDSL
- Spring MVC REST controllerekkel, Security
- szigorúan csak embedded Jetty
- JQuery vagy Sencha ExtJS -- utóbbinál a vektorgrafika sem kihívás a nézőtér összerakásánálAbban mondjuk egyetértünk, hogy érdemes a tanulás miatt iteratívan újra átdolgozni a megoldást, de a desktopos részt én kerülném, mint a leprást.
Értem hogy napjainkban nem éppen a desktop gui alkalmazások a jellemzőek, de mi az oka hogy ennyire ellenzed?
Én magam se nagyon használom, de azért megismerni szerintem illik. -
bucsupeti
senior tag
Sziasztok!
Szeretnék csak gyakorlás céljából készíteni egy kisebb Java alkalmazást. Ez így nézne ki:
Lenne egy weboldal (bárki által elérhető), ide ellátogatnának a userek és látnának eseményeket (koncert, színház, stb). Itt tudnának jegyet foglalni az eseményre, tehát megjelenne nekik egy panel ahol kiválasztják grafikusan az ülőhelyeket (a már foglaltak piros színűek, a szabadok zöldek) és elküldik a foglalást.
Ez nyilván egy adatbázisban tárolódna. Én a MySQL-re gondoltam.
A másik oldalon pedig ülne egy adminisztrátor, aki webes felületen látná a foglalásokat grafikusan, meg ilyenek.
A kérdésem, hogy ti milyen technológiákat választanátok ehhez? Kezdő vagyok Java-ból, szeretnék fejlődni és úgy gondolom egy ilyen nagy, gyakorlati projekt sokat segítene. Ezért kérem, hogy érhetően írjátok le, hogy mit használnátok és én utána olvasok a dolgoknak.
Köszönöm.Ez a példa amit felvázoltál Java EE tanulásra tényleg megfelelő. De ha most kezded a JAVA-t akkor lehet hogy inkább valamilyen lokális alkalmazást JAVAsolnék.
Az EE-t én is nem régen kezdtem és hatalmas a téma, rengeteg framework kínálja magát, az adatbázisokról és a perzisztenciakezelőkről nem is beszélve.A példád alapján én a következőt javaslom:
Csináld meg a felvázolt példát karakteres JAVA programként. Lehessen lekérdezni a szabad helyeket, amit egyenlőre kilistázna. Akár lehet bonyolítani hogy bekéri hogy a nézőtér melyik sorára kíváncsi a felhasználó, ezt beírva kiírná hogy az adott sorban milyen sorszámú székek szabadok.
Jó kis tanuló algoritmus lehet hogy megadja a felhasználó hogy hány helyet szeretne és kilistázza hogy hol tud ennyi széket egymás mellett foglalni stb...Ezt először csináld meg adatbázis nélkül a memóriában tárolva konténerekkel. Utána csináld meg JDBC-vel adatbázisban, majd valamilyen perzisztenciakezelővel.
Meg fogod tapasztalni hogy milyen jó dolog egy ORM rendszer.
Ezek után belekóstólhatsz a gui programozásba, lokális desktop alkalmazást csinálva swing komponensekkel.Ezek után jöhet a felvázolt weboldal, de ez nagyobb falat lesz az biztos. A JavaEE megismerése nem kis feladat. Meg kell ismerni az architekturát, a servlet konténereket, az alkalmazásszervereket. Utána jöhet az EJB programozás és valamilyen framework amivel kényelmesen tudod összerakni a ui-t.
A példa szerintem jó, meg lehet rajta keresztül sokmindent tanulni. Sok sikert és kitartást!
-
bucsupeti
senior tag
Sziasztok
Azt belehet állítani h az entity osztályomban a manytomany listára ne történjen semmiféle rendezés?
Nincs berakva az OrderBy annotáció, de így rendezi kulcs alapján. Nem találtam neten sehol, hogy lehetne kikapcsolni a rendezést. Fontos lenne, mert úgy szeretném megkapni az adatokat amilyen sorrendben belepakoltam és nem akarok új adattagot létrehozni csak az automatikus rendezés miatt. JPA/Hibernate annotáciokat használok.az objektum azonosító id az nem autoincrement?
-
bucsupeti
senior tag
Az osztály szerepétől függ, hogy mennyire kell Bean/POJO-szerűnek lennie. Ha adathordozó, akkor akár lehetnek publikus tagjai is akár set/get nélkül. Ha szolgáltatásokkal foglalkozik, akkor kevesebb set/get kellhet, de privát adatokkal. Ha egy komponens, akkor gyakorlatilag az interfész használatához szükséges set/get metódusokat szabad csak implementálni.
Egy ismerősöm c/c++ fejlesztőként sokat ekézte a tervezési mintákat, de épp az ilyen esetekben jól tud jönni a tanulási időszakban -- mint egy karate szakágban a kata.
+1
-
bucsupeti
senior tag
Egyébként nagyon csúnya dolog javában a publikus adattag. Ilyen pl a Player osztályban a number. Ugyan működik a program de az egyik objektum-orientált elvet sérti meg a program, mégpedig az egységbezárást (Encaptulation). Illik private-ként deklarálni az adattagokat, és getter/setter metódusokkal intézni az adattagok írását, olvasását.
Hát azért ez egy picit nem ilyen egyszerű. Azzal, hogy private-té teszel minden tagváltozót és mindenre csinálsz "no-brain" gettert/settert (mindenféle logika nélkül, csak változó beállítás, változó visszaadás, mint a ahogy a java kódok nagy részénél látható) ezzel lehetővé téve, hogy kívülről megváltoztassák az objektumod belső állapotát, még nem vagy sokkal közelebb az egységbezáráshoz ahhoz képest, hogy mindent publicon hagysz.
Nem azt mondtam hogy mindenhez ész nélkül generáltatok getter/setter-t. Ebben a példában simán hibás minden. publikus adattagokkal van minden összedobva. Ez mellett az említett number tagot direktben kérdezi le. Úgy látom ez egy oktató, gyakorló példa, amiben szerintem már régen túl kéne azon lenni, hogy az adattagokra nem hivatkozunk közvetlenül. Ha a p1 objektum el akarja mondani hogy mi az ő tippje, akkor azt mondja meg (metódus) és ne kibányásszák az agyából (közvetlen adattag elérés).
Mégegyszer mondom, OKTATÁSI szinten tartom hibásnak a "minden publikus" elvet.
-
bucsupeti
senior tag
Ez a futtatás nem akar nekem összejönni
ezt írja ki:
"Exception in thread "main" java.lang.Error: Unresolved compilation problem:at GameLauncher.main(GameLaucher.java:2)
"Ezután már futtatható IDE-ből, exportálható JAR fájlba, majd futtatható a jar a JVM segítségével... -ezt, hogyan tudom megcsinálni ?
Vettem a fáradtságot és bemásoltam Eclipse-be a forrásokat. Így néz ki a projekt:

Az Eclipse-ből indítható, működik (hogy jól-e azt nem néztem, de lefut és normálisan befejeződik).
Ezután a projektre ha jobb egérgombot nyomsz, majd kiválasztod az Export... menüt ott ki tudod exportálni futtatható JAR fájlként (Runable JAR).
Exportálás után parancssorba így lehet futtatni a progit: java -jar jarfájlneve.jarEgyébként nagyon csúnya dolog javában a publikus adattag. Ilyen pl a Player osztályban a number. Ugyan működik a program de az egyik objektum-orientált elvet sérti meg a program, mégpedig az egységbezárást (Encaptulation). Illik private-ként deklarálni az adattagokat, és getter/setter metódusokkal intézni az adattagok írását, olvasását.
-
bucsupeti
senior tag
Hello!
Egy újabb kérdés. Van ez a három fájl, ezeket, hogyan tudnám parancssorból futattni?
public class GuessGame {
Player p1;
Player p2;
Player p3;public void startGame() {
p1 = new Player();
p2 = new Player();
p3 = new Player();
int guessp1 = 0;
int guessp2 = 0;
int guessp3 = 0;
boolean p1isRight = false;
boolean p2isRight = false;
boolean p3isRight = false;
int targetNumber = (int) (Math.random() * 10);
System.out.println("I'm thinking of a number between 0 and 9...");
while(true) {
System.out.println("Number to guess is " + targetNumber);p1.guess();
p2.guess();
p3.guess();guessp1 = p1.number;
System.out.println("Player one guessed " + guessp1);
guessp2 = p2.number;
System.out.println("Player two guessed " + guessp2);
guessp3 = p3.number;
System.out.println("Player three guessed " + guessp3);if (guessp1 == targetNumber) {
p1isRight = true;
}
if (guessp2 == targetNumber) {
p2isRight = true;
}
if (guessp3 == targetNumber) {
p3isRight = true;
}if (p1isRight || p2isRight || p3isRight)
{
System.out.println("We have a winner!");
System.out.println("Player one got it right? " + p1isRight);
System.out.println("Player two got it right? " + p2isRight);
System.out.println("Player three got it right? " + p3isRight);
System.out.println("Game is over");
break;
}
else
{
System.out.println("Players will have to try again.");
}
}
}
}-----
public class Player {
int number = 0;
public void guess()
{
number = (int) (Math.random() * 10);
System.out.println("I'm guessing " + number);
}
}-----
public class GameLauncher {
public static void main (String[] args) {
GuessGame game = new GuessGame();
game.startGame();
}
}biztos van rá valamilyen parancssori megoldás is, de én inkább valamelyik IDE-vel csinálnám.
Létre kell hozni egy standard java projektet. abban létre kell hozni három class-t amikbe természetesen a három forrásfájl van.
Ezután már futtatható IDE-ből, exportálható JAR fájlba, majd futtatható a jar a JVM segítségével... -
bucsupeti
senior tag
EE témával kapcsolatban lenne kérdésem. Nemigazán vagyok otthon a témában, most kezdek részletesen belemerülni.
A kérdésem az hogy mi a különbség ha EJB-vel vagy ha az nélkül csinálok egy web alkalmazást? Értem hogy az EJB-k azok önállóan futkorásznak a konténerben és ezeket meg lehet szólítani és a publikált szolgáltatásait elérni. Ebben lehet pl valamilyen perzisztenciakezelőn keresztüli adatbázis elérés stb.
Ugyanakkor csináltam próbaként olyan alkalmazást ami Tomcat-en futott, nem volt benne semmiféle EJB és azzal is tudtam Hibernate-el adatbázist kezelni.
Szóval mi a különbség az EJB konténerben és a WEB konténerben futtatott üzleti logika között?
Értem hogy szebb ha elkülönül ez a réteg, de egyéb más előny/hátrány van? Pl többfelhasználós környezetben tud működni a webkonténeres megoldás? -
bucsupeti
senior tag
Egy olyan kérdésem lenne hogy hogyan, milyen környezetben történik egy szoftverfejlesztő vállalatnál a szoftverfejlesztés? Főként bonyolult EE fejlesztésre gondolok ahol több programozó, designer, stb dolgozik ugyanazon projekten.
Gondolom többen vagytok akik ilyen vállalatnál dolgoztok. Biztosan van valami verziókezelő rendszer stb.
De mégis hogyan adják ki a feladatot, hogyan történik egy-egy verzió build, stb...
Ha egy projekten dolgozik 4-5 programozó, akkor ők hogyan tesztelik a saját maguk részét? Nemhiszem hogy ez csak a teljes projekt futtatásával lehetséges.Én egyelőre csak SE alkalmazásokat készítettem, de érdekel az EE világ nagyban is.
Írnátok erről pár gondolatot?
Azért írom ide mert kimondottan Java környezetben érdekel ez a téma. Nem tudom hogy általánosságban is ugyan azok a dolgok működnek-e, vagy van speckó Java módszer...
-
bucsupeti
senior tag
Én is éppen most kerestem hasonló framework-öt. Én a vaadint választottam, főleg az egyszerűsége miatt.
Sok jó cikk, könyv, videó érhető el ami az ismerkedéskor sokat segített. A honlapja is jó, bőven van információ és jól érthető leírás, referencia, tutorial. Netbeans és Eclipse alatt is kényelmesen, gyorsan lehet fejleszteni. -
bucsupeti
senior tag
elkezdtem én is a vaadint mert tényleg egyszerünek tűnik.
megnéztem még a többit is . a primefacest tetszett még, de a vaadin mellett döntöttem. Hibernate-en keresztül kezelem az adatbázisokat és a gui meg vaadin. tetszik! -
bucsupeti
senior tag
Webes Java EE alkalmazásokkal ismerkedem. A kérdésem az hogy milyen framework-öt érdemes használni amivel egyszerűen, gyorsan lehet szép UI-t készíteni? Nézegetem a Vaadin-t. Ez megfelelő lehet? Hasonlót keresek.
-
bucsupeti
senior tag
-
bucsupeti
senior tag
-
bucsupeti
senior tag
Szerintetek az alábbi metódus mit ír ki a következő ar tömbbre:
int[] ar = {8, 7, 5, 6, -3, -2, -1, -4};static void printSecondSmallest(int[] ar){
int s1,s2;
if (ar[0]<ar[1]){
s1=ar[0];
s2=ar[1];
} else {
s1=ar[1];
s2=ar[0];
}
for(int i=2;i<ar.length;i++){
if (ar[i]<s1) {
s1=ar[i];
s2=s1;
} else if (ar[i]<s2)
s2=ar[i];
}
System.out.println(s2);
} -
bucsupeti
senior tag
Hogyan törölsz?
Ha simán törlöd a detail entitást, de nem nem frissíted a parent entitás (a másik táblából) Set-jét és nem mergeled (sorry nem vágom pontosan a hibernate-es terminológiát) őt, akkor a hibernate cache úgy érzékelheti, hogy az objektumon nem történt semmi változás (a kapcsolatot csak az egyik oldalról törölted, a parent felől nem), ezért nincs oka újra lekérdezni olyan result setet mégegyszer.Próbáld meg, hogy a parent entitás Set-jéből törlöd a detailt, majd mergeled a parent entitást.
Remélem ez menni fog.
Nálad a pont!
Valóban a detail osztályból töröltem és nem a parrenten keresztül.
Kipróbáltam a javaslatodat és rendben van a dolog, ha a szülő osztály Set-jéből remove-olom az elemet. Ekkor már van adatbázis kérés és frissít rendesen!Köszi!
-
bucsupeti
senior tag
Kod nelkul nehez megmondani, hogy mi a baj, de nem nyelsz el egy catch agban egy exceptiont, ami nincs kiloggolva?
"Új session-t indítok minden egyes lekérdezésre"
Ez anti-pattern. Mivel desktop approl van szo, gondolom csak egy user hasznalja egyszerre. Boven eleg akkor nyitni uj sessiont, ha az elozo inkonzisztens allapotba kerul.
Köszönöm az eddigi válaszokat. Közben megoldódott a dolog egy session.clear() oldotta meg a problémát a tranzakció lezárása után.
"Ez anti-pattern. Mivel desktop approl van szo, gondolom csak egy user hasznalja egyszerre. Boven eleg akkor nyitni uj sessiont, ha az elozo inkonzisztens allapotba kerul."
Az igaz hogy desktop app, de ez miért is vonja maga után hogy "csak egy user használja egyszerre"?
Desktop app, de központi adatbázissal dolgozik. Az alkalmazás pedig a felhasználók gépein található meg.Egyébként nagy baj az ha egyetlen session-t használok a futás alatt?
Az architektúra úgynéz ki, hogy vannak a perzisztens osztályok, ez mellett van egy üzleti logikát megvalósító osztály (UzletiLogika) és van a kliens, ami bármi lehet, jelenleg egy desktop swing GUI.
Az UzletiLogika osztálynak egyetlen statikus adattagja van, ami nem más mint egy Session. Ezen dolgozik az összes metódus. A metódusok a kliens(ek)nek szolgáltatnak adatokat, amik különféle egyszerű és összetett adatszerkezeteket adnak át. A perzisztens osztályok adattagjait alakítják át listákká, vektorokká stb...
Paraméterül azonosítókat kapnak és soha nem adnak vissza perzisztált objektumot.
Így az UzletiLogika osztályban dolgozik csak a Hibernate. A GUI csak meghívja az ottani metódusokat és valamilyen nem perzisztens adatot kap, amit megjelenít.Most már működik a program.
A kérdésem az hogy a felvázolt architektúra szerintetek rendben van? Illetve jó megoldás-e az egyetlen session használata?
-
bucsupeti
senior tag
Sziasztok!
Adott egy Hibernate-et és MySQL-t használó NetBeans alatt készített alkalmazás GUI-val.
Két táblázat van benne, amiket feltöltök a perzisztens objektumokkal. A második táblázat az első detail táblája, azaz az egyik adattagja (ami Set típusú) tételeit tartalmazza.
A lényeg az hogy ha törlök valamit a detail táblából akkor látom az SQL parancsot (delete) az output ablakban. Az SQL adatbázist megnézve látszik hogy törlődött a rekord, viszont a vizuális komponensben (jTable) nem látszik a frissítés. Természetesen újra feltöltöm a táblát, de nem frissül. Olyan mintha valahol (cache?) ott maradna az adat. Új session-t indítok minden egyes lekérdezésre, flush() és evicat() meg minden van a törlő művelet után, de nem frissül. Az output ablakban látszik hogy a select nem fut le újra, pedig ott van a lekérdezés és debugolva is ellenőriztem végrehajtja a sort, de nincs adatbázis kérés mögötte.
Ha kilépek és újraindítom a progit akkor már minden rendben látszik.Hogy lehet rábírni hogy frissüljön rendben minden? Mi a francért nem frissül?
-
bucsupeti
senior tag
Köszönöm! Akkor jól gondoltam hogy egy gombnyomogatásra induló SessionFactory az vad dolog....
-
bucsupeti
senior tag
NetBeans Platformos kérdésem lenne.
Szerintetek egy swing vastagkliens alkalmazásba hol célszerű a Hibernate konfigurációt intézni?
Hol inicializálódjon a SessionFactory?Mivel ennek az egész program alatt működnie kell én arra gondoltam hogy a main()-ban valahol. Viszont ha ott indul és a main egyik lokális változójába teszem a SessionFactory-t, akkor azt máshol nem érem el.
Ezért arra gondoltam hogy a main()-t tartalmazó osztály adattagja kell hoyg legyen a SessinFactory, így a teljes programban érvényes lesz és használható, lehet belőle Session-t kérni stb...Jó ez a gondolat? A NetBeans tutorialban egy külön metódus van definiálva a query futtatására, majd abból van megjelenítve (egy jTable komponensbe). Nem is ez a lényeg.
Nekem az a fura hogy ez a tutorial-os példa minden egyes gombnyomásra futtat egy lekérdezést. Ehhez minden egyes alkalommal felépíti a SessionFactory-t (azaz beolvastatja a hibernate.cfg.xml-t és a mappingokat stb). Ez számomra logikátlannak tűnik és fölöslegesnek tűnik.
A könyvek azt írják hogy elég egyetlen SessionFactory egy adatbáziskapcsolathoz és ezen indítsuk a session-öket és a tranzakciókat. Ezzel ez tök ellentétes.
Erősítsetek meg, vagy magyarázzátok meg hogy miért jó úgy ahogy a tutorialban van. Ti hogy csinálnátok?Köszi a válaszokat!
-
bucsupeti
senior tag
Segítségeteket kérném, mert egyszerűen nem bukkanok rá a megoldásra.
NetBeans 7.2-t használok.Egyszerű JDBC adatbáziskezelő demó programocskát csináltam, amivel demonstráltam a Sakila MySQL demó adatbázis egy tábláján végzett (CRUD) műveleteket. A program konzolra ír, nincs benne semmi extra, teszi a dolgát, működik rendesen.
Csináltam egy másik példaprogramocskát (szintén konzolos), ami ugyan ezen műveleteket végezné el Hibernate-et alkalmazva. Ez is működik rendben.
A problémám az hogy a Hibernate demó program az indulásakor logol a konzolra. Hallottam már a log4j-ről, de én ilyet nem kapcsoltam be sehol egyik programban sem. Ráadásul INFO szinten küldi a logot, azaz szinte mindent kiír. Ha JAR-t csinálok és az futtatom parancssorba ott is írja a logot a konzolra.
Hogyan lehet ezt kikapcsolni? Miért kapcsolódott ez be a Hibernate-es programban?
Itt a teljes log amit kiír:
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.annotations.Version <clinit>
INFO: Hibernate Annotations 3.3.1.GA
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
nov. 10, 2012 10:01:50 DE org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : hibernatedemo/Actor.hbm.xml
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.Configuration doConfigure
INFO: Configured SessionFactory: null
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: hibernatedemo.Actor -> actor
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.AnnotationConfiguration secondPassCompile
INFO: Hibernate Validator not found: ignoring
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: autocommit mode: false
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/sakila
nov. 10, 2012 10:01:51 DE org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=root}
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: RDBMS: MySQL, version: 5.1.36-community-log
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-5.1.18 ( Revision: tonci.grgin@oracle.com-20110930151701-jfj14ddfq48ifkfq )
nov. 10, 2012 10:01:51 DE org.hibernate.dialect.Dialect <init>
INFO: Using dialect: org.hibernate.dialect.MySQLDialect
nov. 10, 2012 10:01:51 DE org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Using default transaction strategy (direct JDBC transactions)
nov. 10, 2012 10:01:51 DE org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic flush during beforeCompletion(): disabled
nov. 10, 2012 10:01:51 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic session close at end of transaction: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch size: 15
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch updates for versioned data: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Scrollable result sets: enabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC3 getGeneratedKeys(): enabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Connection release mode: auto
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Maximum outer join fetch depth: 2
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default batch fetch size: 1
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Generate SQL with comments: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL updates by primary key: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL inserts for batching: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
nov. 10, 2012 10:01:52 DE org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
INFO: Using ASTQueryTranslatorFactory
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: JPA-QL strict compliance: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Second-level cache: enabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query cache: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory createCacheProvider
INFO: Cache provider: org.hibernate.cache.NoCacheProvider
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Structured second-level cache entries: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Statistics: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Deleted entity synthetic identifier rollback: disabled
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
nov. 10, 2012 10:01:52 DE org.hibernate.cfg.SettingsFactory buildSettings
INFO: Named query checking : enabled
nov. 10, 2012 10:01:52 DE org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
nov. 10, 2012 10:01:52 DE org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured -
bucsupeti
senior tag
-
bucsupeti
senior tag
Ha gányolni akarsz, semmi akadálya annak, hogy lefordítsd az egy szál .class fájtt. és kicseréld a JAR-on belül (hiszen az csak egy átnevezett zip)... Feltéve persze, hogy az interfész egyáltalán nem változott.
De ha ilyen jellegű változásra fel akarsz készülni, miért nem konfigurációként tárolod az ÁFA kulcsot, nem pedig a kódba égetve?

A példa erőltetett. Persze nem így célszerű ezt megoldani.
Igazából azt szeretném, hogy SE környezetben valahogy modellezni, példaalkalmazást készíteni egy háromrétegű architektúra demonstrálására.
[ui] + [üzleti logika] + [adatbázis]Az ui lenne az a rész amit nem fordítok újra. Az üzleti logikában történik változás és azt akarom demonstrálni hogy ennek a modul változtatása független a többi rétegtől. Az adatbázis meg az ami.
Nyilván ez normális felhasználás esetén JavaBean, servlet meg minden EE csoda segítségével gyönyörűen megvalósítható, de éppen ezeket szeretném "hanyagolni" és SE környezetben, lokálisan valahogy demonstrálni.
-
bucsupeti
senior tag
Nem biztos hogy teljesen jól fogalmaztam meg a dolgokat.
Szóval azt szeretném, hogy van egy "csomagom", ami tartalmaz egy osztálydefiníciót (csomag1.java). Ezután készítek egy java programot (teszt.java), ami használja a csomagban definiált osztályt (import csomag1).
Ezután változtatok a csomag1.java fájlban, újrafordítom a csomag1-et (de a teszt.java-t nem!!!!) és az eredeti teszt.class újrafordítás nélkül a csomag1 változtatásait ismeri.Lehet hogy egyszerűbb konkért példán keresztül:
Szóval Aru.java:
class Aru {
private String aruNev;
private int nettoAr;
[B]private static int afaKulcs=27;[/B]
public Aru(){
}
public Aru(String aruNev, int nettoAr, int afaKulcs){
this.aruNev=aruNev;
this.nettoAr=nettoAr;
this.afaKulcs=afaKulcs;
}
public String getAruNev(){
return aruNev;
}
public void setAruNev(String aruNev){
this.aruNev=aruNev;
}
public int getNettoAr(){
return nettoAr;
}
public void setNettoAr(int nettoAr){
this.nettoAr=nettoAr;
}
public float getAfaErtek(){
return nettoAr*afaKulcs/100;
}
}Ezután megírom a király számlázó programot ami használja az Aru osztályt (Szamlaz.java) és lefordítom (Szamlaz.class). Közben megváltozik az üzleti logika és ezért a statikus adattagot átírom az új áfa értékre. Lefordítom az Aru.java-t és ezt a számlázó program újrafordítás nélkül tudja alkalmazni.
Az azért már kiderült hogy erre nem jó a csomag módszer, mert teljes újrafordítás kell.
Van erre valami módszer Java SE-ben? Vagy ehhez már valamiféle enterprise megoldás kell? -
bucsupeti
senior tag
Köszönöm az infókat!
@Karma: mi a Maven pontosan? Mire használható?
-
bucsupeti
senior tag
sziasztok,
lehet olyat csinálni java-val, mint amilyenek a dll-ek más programozási nyelvekben?
arra gondolok pl, hogy egy osztályt lehet-e valahogy küsöleg hivatkozni a fordítása után egy másik különálló fejlesztéskor. -
bucsupeti
senior tag
JavaDB ( másik nevén Apache Derby ). Ezt tartalmazza a Java SE, így mindenhol elérhető adatbázismotor. Asztali alkalmazásokhoz kiváló, bár van pár dolog, amit nem tud, pl. nincsen benne full text search.
Ha egyáltalán nem használtál még semmilyen adatbázist, akkor a tanulás 60%-a inkább az SQL-re fog rámenni, 30% arra, hogyan használd a JDBC-t, maradék 10% meg arra, hogyan lődd be a Derby-t.
Kiindulásnak http://docs.oracle.com/javadb/ -> http://docs.oracle.com/javadb/10.8.2.2/getstart/index.html
Esetleg adatbázis kezeléshez használj valamilyen ORM-et (Object Relation Mapping). Ajánlom pl a Hibernate-t. Ezzel egyszerűen rábízhatod az adatbázis kezelési feladatokat a Hibernate-re az elvégez minden tranzakciót, te pedig "minden erődet" az osztályokra és az objektumokra koncentrálhatod. Jó kis tutorialok vannak Hibernate-hez, egyszerűen meg tudod oldani vele a feladatot és minimális db programozás ismeret kell hozzá.
-
bucsupeti
senior tag
Nem akarok én, csak gondoltam így kell elkezdeni:d
Ezt nézd meg. Egy remek magyar nyelvű videós tutorial az Eclipse-hez. Ennél jobbat nem tudok ajánlani. A JPA az tévút neked egészen biztos (egyébként NetBeans-el könnyebb az indulás és remek IDE az is....)
Új hozzászólás Aktív témák
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Nyomtatók, szkennerek Tabletek, E-bookok PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
- Fórumok
- Szoftverfejlesztés
- Java programozás
- (kiemelt téma)
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- GYÖNYÖRŰ MacBook Pro 14" M2 Pro 16 GB - 512 GB GAR ÉS jótállás!
- Intel Core ULTRA 9 285K +32GB 7600MHz Patriot Viper XTREME 5 DDR5 kit! (Bolti ár: kb 600ezer Ft!)
- Lenovo Legion Pro 5 - 16IRX10 - i9 14900HX - RTX 5070 - 32GB - 1TB
- 2000GB Gen5x4 NVMe SSD, 1 év gar GEN V!!! SK Hynix 2048GB PCB01 kb. 14GB/s / 12GB/s
- Lenovo Thinkcentre M710Q MINI PC,i3-7100T,8GB DDR4,256GB SSD,WIN11
- AKCIÓ! Motorola Sound Flow XT2549-1 hangszóró hibátlan működéssel
- iPhone 15 Pro 128GB 88% (1év Garancia) - Kijelzőn pici folt!
- iPhone 14 Plus 85% 128GB (1év Garancia)
- BESZÁMÍTÁS! 1300W be quiet! Dark Power Pro 13 tápegység garanciával hibátlan működéssel
- Szépséghibás - Microsoft Surface Laptop 3 13.5" fekete i5-1035G7 16GB 256GB 1 év garancia
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

![;]](http://cdn.rios.hu/dl/s/v1.gif)







