- HiFi műszaki szemmel - sztereó hangrendszerek
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Ismét a Gigabyte alaplapjaival van az Erő
- Azonnali VGA-s kérdések órája
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- AMD Navi Radeon™ RX 9xxx sorozat
- Milyen házat vegyek?
- Vezetékes FEJhallgatók
- Teljesen az AI-ra fókuszál az új AMD Instinct sorozat
- Fujifilm X
Új hozzászólás Aktív témák
-
E.Kaufmann
veterán
válasz
Drizzt #10597 üzenetére
É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
-
Drizzt
nagyúr
válasz
E.Kaufmann #10595 üzenetére
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.
-
Aethelstone
addikt
válasz
E.Kaufmann #10595 üzenetére
Ez most éppen nem bullshit. Jól működő dolog. A lényeg meg ugyanaz, de a technikai megvalósítás tök más.
-
E.Kaufmann
veterán
válasz
Aethelstone #10594 üzenetére
Jájjjj, még egy technobullshit. Mint annó a web 2.0.
Az ábrákat elnézve nem egy nagy közös adatbázis van, hanem több kicsi , adott részterületenként egy, de ugyanúgy egy részterületet egyszerre többen is elérhetnek és el is kell érniük, szóval a lényeg ugyanaz szvsz, pláne az eredeti kérdés szempontjából.
Ez max az ERP rugalmasságát biztosítja. -
Aethelstone
addikt
válasz
E.Kaufmann #10593 üzenetére
Láttál már jó ERP-t?
Nem véletlenül találták ki egyébként a microservice architektúrát. Ami nyilván nem teljeskörű megoldás, vannak kurva nagy gyengeségei, de alapvetően tiszta DB helyzetet teremt.
-
Drizzt
nagyúr
válasz
bambano #10590 üzenetére
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.
-
bambano
titán
válasz
Aethelstone #10587 üzenetére
van adatbázisos megoldásod két program kommunikációjára úgy, hogy az adatbázis nem közös?
-
Aethelstone
addikt
válasz
E.Kaufmann #10588 üzenetére
Nos, nem azt mondtam, hogy nem kell db, hanem hogy közös nem kell. Viszont tényleg, pontos igényspec nélkül nehéz technológiai döntést hozni
-
E.Kaufmann
veterán
válasz
Aethelstone #10587 üzenetére
Viszont működik és naplózhatóvá válhatnak a kommunikációk, amivel pl könnyebben visszaállítható egy előző állapot, valamint ha kettőnél több fél vesz részt a kommunikációban, akkor a konkurencia kezelés is könnyebb adatbázissal. Persze lehet, hogy adott feladathoz ágyúval verébre.
-
E.Kaufmann
veterán
válasz
Orionk #10582 üzenetére
Én most olyat csináltam, hogy fogtam egy objektumot, serializáltam, gzippeltem, majd base64-be kódoltam (egyesek szerint felesleges az utóbbi, de biztos ami biztos és a gzip is csak a base64 kódolásból eredő méretnövekedés kompenzálására került be) és http-n át nyomattam.
Ha guglizol, megtalálod, hogy az első három művelet megoldható 1-1 sorból és van java alatt egyszerű http szerver és kliens is, ha nem a biztonság hanem a gyakorlás vagy a gyors elkészítés a fő szempont.
A http kérésbe beágyazhatsz paramétert, ami alapján tudja a szervered, hogy mit is kérsz tőle, az alapján megképzed az objektumot és a fentebb sorolt műveletekkel elküldöd válaszként a kliensnek, a kliens meg elvégzi az ellentétes műveleteket.De más módok is létezhetnek és én is kíváncsi vagyok, ki mit ajánl. Én azért a HTTP-t választottam, mert kellett egy táblázat emberi formában olvasható módon és kliens programmal elérhetően is és egyszerűbb volt egy protokollal megoldani.
-
Orionk
senior tag
Sziasztok,
A segítségeteket gondoltam kérni az alábbi kérdésekben.
Hogyan tud 2 applikáció adatot küldeni egymásnak akkor, ha egy gépen futnak és akkor is, ha nem?
Például, ha külön gépen vannak, akkor a TCP/IP protokoll jut eszembe.
A lehető legegyszerűbb megoldásokat próbálnám megtalálni.Köszönöm.
-
tick
aktív tag
Üdv. HTTP szervert próbálok írni gyakorlásként. Chrome-nak van egy preload funkciója ami nyit egy plusz socketet amit gyakorlatilag csak parkoltat esetleges későbbi tartalmak párhuzamos letöltésére.
A socket stream-jéből nem lehet olvasni így csak feleslegesen foglal egy szálat timeout-ig.
Van valami jó módszer arra hogy ezeket meg tudjam különböztetni egy valós http kéréstől ami valamilyen hiba miatt nem tudott írni a streamre? -
Ablakos
őstag
Nem értem a maven típusú projeknél a következőt.
Javafx alkalmazást készítek (netbeans 11, openjdk12). A projektnél nem tudom az OpenJavaFXsdk/lib mappámat betenni dependencinek, hanem csak a listából felkínáltakat. Querizek és a felhozott org.openjavafxkerül be. (Ezzel is teljesen jól is működik az alkalmazás.)
A kérdésem, hogy ennek így kell működnie? Nem is kell külön jfxsdk-t letölteni, hozzáadni? -
Drizzt
nagyúr
-
Ablakos
őstag
válasz
skoda12 #10570 üzenetére
Nem fogalmaztam egyértelműen, mert nekem elégséges a beágyazott derby is. Közben kiszenvedtem, hogy a maven projectben már függőségként kell a megfelelő .jar -t hozzáadni. (régebbi videókban lib)
A connection teszt továbbra is kivétel ad.
Connection conn = DriverManager.getConnection("jdbc:derby:c:\\Users\\User1\\JavaDerbyDB\\test;create=true");
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/derby/shared/common/security/SystemPermissionMi a baja ennek a hívásnak?
-
Ablakos
őstag
Egy kezdőnek elég keserves a mostani java kavarodás.
Egy egyszerű derby adatbázist szeretnék létrehozni, megszólítani, de még a hozzávaló libet sem találom a 12-es verzióban. (a 8-as javaban db\lib\derby.jar)
Hogy tudom előkotorni? -
MrSealRD
veterán
Köszi a tippeket. Végül a forrás összehasonlítása után megszüntettem a származtatást, mert úgy tűnt gyakorlatilag felülírtak metódusokat...(Override nem volt...)
Tiszta katyvasz az egész néha fárasztó sok éves legacy kódokban turkálni...Aethelstone: Az oké, de a kérdés az volt, hogyan, úgy hogy ne vágjak szét még több kódot ami esetlegesen erre alapoz... Ezen délelőtt átlendültem...volt még utána már csoda amire nincsenek szavak.
-
MrSealRD
veterán
válasz
Aethelstone #10564 üzenetére
Konkretizálom a dolgot.
Ez itt az új verzió aminek már private ctor van. A 6.2-es verzióban még nem volt private. Van egy saját ComponentUtils osztályunk amit vagy 5 éve írtak és ebből a fent linkelt osztályból került származtatásra. Mivel akkori verzióban még nem volt private a ctor így ebből nem volt gond... Most, hogy új verziót húztam be...szembesültem a változással... Tehát valamikor régen kiterjesztésre került ennek az osztálynak a funkcionalitása és azért kapott azonos nevet, hogy ez legyen használva mindenhol. Ugyanúgy static metódusok vannak benne... Viszont a fenti változás miatt ez a helyzet már nem tartható, de a korábbi funkcionalitásra is szükség lenne, meg a mostanira is. De ezt öröklődéssel már nem lehet biztosítani... -
Aethelstone
addikt
-
MrSealRD
veterán
Van egy 3rd party lib. Aminek az egyik osztályából származtatva volt egy saját osztályunk. A nevük megegyezik. Ez bővítve lett még néhány plusz funkcióval.
A lib-ből kijött egy új verzió és az ős osztályt módosították. Privát lett a konstruktora. Így a származtatott osztály innentől kezdve eltört. Kompozíció nem jöhet szóba. Singleton-ba se lehet átforgatni. Annyira nem meglepő, mert statikus metódusokat biztosít mindkét osztály...
Az a kérdés, hogy milyen lehetőségeim vannak a helyzet feloldására? -
mind_against
tag
válasz
E.Kaufmann #10560 üzenetére
Ez a Java programozás topik, én pedig programozással kapcsolatban folytatom
-
E.Kaufmann
veterán
válasz
mind_against #10558 üzenetére
Miért? Megsértettünk?
-
suits
tag
üdv!
Több helyen is olvastam hogy a JSP már elavult technológia.Mi van akkor helyette?Java EE-nek még mindig a része úgy nézem...
-
mind_against
tag
(#10552) Zsoxx és (#10551) E.Kaufmann
Köszi a válaszokat! A további kérdéseimet a Programozás topikban teszem fel inkább.
-
floatr
veterán
válasz
Aethelstone #10553 üzenetére
Attól még taníthatja...
Nekem is volt egy kollégám, aki inkább oktatni ment végül. Nem gondolnám h nem jól csinálja, bár nem tudom lecsekkolni -
Aethelstone
addikt
válasz
E.Kaufmann #10554 üzenetére
Nekem tökmindegy. Mindenki azt néz, amit akar
-
E.Kaufmann
veterán
válasz
Aethelstone #10553 üzenetére
Itt a fórumon eddig öten is ajánlották a Udemy-t, nekik is szólj már légyszi, köszönöm.
-
Aethelstone
addikt
válasz
E.Kaufmann #10551 üzenetére
Udemy? Volt egy kollégám, fizikus végzettséggel. Fél év után feladta, hogy a programozás nem megy neki. Azóta Udemy-n oktat......programozást.
-
Zsoxx
senior tag
válasz
mind_against #10550 üzenetére
Attól függ, mennyi pénzt akarsz rááldozni, és milyen gyorsan tudsz/akarsz haladni.
Az alapokat megtanulhatod Youtube-videókból is ingyen, de gyorsabb, ha egy oktató cég (pl. Codecool, Helixlab, BrainingHUB, GreenFox, ZeroToHero) tanfolyamai közül választasz. Itt viszont már feszítettebb a tempó, és nem mindegyiket lehet munka mellett bevállalni. -
E.Kaufmann
veterán
válasz
mind_against #10550 üzenetére
Én nem mondom magamat profi Java-snak, de eddig munkahelyen, ami feladatot rendesen körül tudtak írni és voltak is hozzá adatok, azt mind megoldottam.
Ha már van valamennyi alapod (tudsz bohóckodni listákkal, tömbökkel, stringekkel és az IO alrendszerből is láttál pár példát), keress egy olyan feladatot, ami érdekes is de nem túl nagyszabású és próbáld megcsinálni, menet közben úgy is egy halmot kell majd gugliznod, ki kell próbálnod különféle utakat és ragad az emberre. Szerintem annál nincs jobb, ha apróbb sikerélményei vannak az embernek és látja, hogy halad, még ha nem is alkot szép és biztonságos kódot (tudom, Java a többségét elintézi a dolgoknak, de nem is a memóriafoglalásra gondoltam, hanem pl egy olyan hálózatos alkalmazásra, ami otthon jól működik, de a neten kapásból szétkapnák)
Én akkor ugrottam szintet saját érzésre, mikor egy ismerősnek kezdtem maszekolni. Igaz végül nem lett belőle semmi, mert pénzügyi dolgon összevesztünk.
Volt nálam pár tanuló gyakorlaton, egyiküknek kiadtam (bár lényegében közösen csináltuk) egy duplikált fájlkereső alkalmazást. Nem nagy feladat, de újoncnak pl annál nagyobb móka.Egyébként mostanában a Udemy fizetős tananyagait ajánlják, ha mindenáron tananyagként szeretnéd tanulni, vagy kellenek az alapok.
Ja és minimális angol sem árt, de nem kell irodalmi szint. Szakszavak meg pár ige ismerete
-
mind_against
tag
Sziasztok!
Java programozást tanulni hol éri meg elkezdeni? Főiskolán és egyetemen kívül, munka mellett, teljesen az alapoktól, egészen mást tanultam és mással foglalkozom jelenleg.
-
Vesporigo
aktív tag
Zsoxx és axioma: nagyon köszönöm mindkettőtöknek a segítséget!
Tényleg a példányosítás hiánya volt a probléma. Utánaolvastam, mert erről még nem volt szó abban a tananyagban, amiből tanulom. Mondjuk így elég durva, hogy az elvárt feladatot csak a következő tananyagokban lévő tudásból kellene megoldani...
A main függvényben egyébként scanner-rel beolvasom az embereket és az italokat, és azok alapján számolgatok, majd iratok ki értékeket. Elnézést, hogy azt nem másoltam be.
Mégegyszer köszönöm, fantasztikusak vagytok!
-
axioma
veterán
válasz
Vesporigo #10546 üzenetére
A gond ott kezdodik (bocs, nem bantas, hanem segitseg akar lenni), hogy mas az osztalydefinicio es mas a peldany.
Menjunk vissza, mi a cel? Lesznek ember-peldanyaid, meg ital-peldanyaid, es az a kerdes, hogy ha megissza egy emberpeldany az italt, mi a(z uj) veralkohol-szintje. Vagy az jobban illik az eddigi kododhoz, hogy ha meginna, mennyivel emelne a veralkohol-szintjet.Szoval a lenyeg, hogy a fenti, nevezzuk inkabb verezrelekNoveles() fuggvenyednek kene egy Ital tipusu parametert definialni, es az adott ital-peldanytol elkerni a megfelelo adatot.
public double verezrelekNoveles(Ital egyital) {
return egyital.getAlkoholGramm() / kilogramm;
}Az elnevezes most direkt ilyen "kilogo", hogy jobban lasd a kulonbseget, de nem kovetendo.
szerk. lassu vagyok... keresztposzt
-
Vesporigo
aktív tag
Sziasztok.
Hogy lehet egyik osztály függvényéből átadni értéket egy másik osztály függvényének?
Jelen esetben:
Innen szeretném
public class Ital {
String nev;
double szazalek;
int ml;
public double getAlkoholGramm() {
return 0.8*ml*szazalek/100.0;
}
}a getAlkoholGramm() függvény értékét átadni a veralkoholEzrelek() függvénynek:
public class Ember {
String nev;
int kilogramm;
double alkoholGramm;
public double veralkoholEzrelek() {
return alkoholGramm / kilogramm;
}
}Ha a veralkoholEzrelek()-be beleírom, hogy
alkoholGramm = Ital.getAlkoholGramm();
, akkor pedig ezt az üzenetet írja ki NetBeans: non-static method getAlkoholGramm() cannot be referenced from a static contextTudnátok segíteni, hogy mi a gond és hogyan lehet megoldani? Előre is köszönöm!
-
E.Kaufmann
veterán
válasz
E.Kaufmann #10544 üzenetére
Tegnap picit még püföltem a kódon:
- kettévettem a poireplace függvényt,
- megcsináltam, hogy elvileg működjön fejléccel és lábléccel is, de ez nem lett alaposabban tesztelve
- néha írt hibaüzeneteket a Word, hogy a fájl meg van már nyitva, így bezártam az input és output állományt is a függvény végén
- kicsit sztrímesítettem, ha valakinek gondja lenne vele, távolítsa el a kódból elsőnek a .parallel() részeket:private static void paragReplace(XWPFParagraph p,java.util.HashMap<String,String> hs){
String text = p.getText();
boolean change=false;
for ( String key : hs.keySet() ) {
if (text != null && text.contains("${"+key+"}")) {
text = text.replace("${"+key+"}", hs.get(key));
change=true;
}
}
if(change){
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
String ff=runs.get(0).getFontFamily();
int fs=runs.get(0).getFontSize();
removeAllRuns(p);
insertReplacementRuns(p,text,ff,fs);
}
}
}
public static void poiReplace(java.util.HashMap<String,String> hs, String in, String out) throws Exception
{
//Bekezdések
java.io.FileInputStream ins=new java.io.FileInputStream(in);
XWPFDocument doc = new XWPFDocument(ins);
doc.getParagraphs().stream().parallel()
.forEach((p) -> {
paragReplace(p,hs);
}
);
//Táblázatok
doc.getTables().stream().parallel()
.forEach((tbl) -> {tbl.getRows().stream()
.forEach((row) -> {row.getTableCells().stream()
.forEach((cell) -> {cell.getParagraphs().stream()
.forEach((p) -> {
paragReplace(p,hs);
});
});
});
}
);
//Fejléc bekezdések és táblázatok
doc.getHeaderList().stream().forEach( (hdr) ->
{
hdr.getParagraphs().stream().parallel()
.forEach((p) -> {
paragReplace(p,hs);
});
hdr.getTables().stream().parallel()
.forEach((tbl) -> {tbl.getRows().stream()
.forEach((row) -> {row.getTableCells().stream()
.forEach((cell) -> {cell.getParagraphs().stream()
.forEach((p) -> {
paragReplace(p,hs);
});
});
});
});
}
);
//Lábléc bekezdések és táblázatok
doc.getFooterList().stream().forEach( (ftr) ->
{
ftr.getParagraphs().stream().parallel()
.forEach((p) -> {
paragReplace(p,hs);
});
ftr.getTables().stream().parallel()
.forEach((tbl) -> {tbl.getRows().stream()
.forEach((row) -> {row.getTableCells().stream()
.forEach((cell) -> {cell.getParagraphs().stream()
.forEach((p) -> {
paragReplace(p,hs);
});
});
});
});
}
);
doc.write(new java.io.FileOutputStream(out));
doc.close();
ins.close();
} -
E.Kaufmann
veterán
válasz
E.Kaufmann #10526 üzenetére
Ha valakinek kellene DOCX "sablon" (változókkal ellátott DOCX doksi) kitöltése Apache POI-val (és StringUtils-szal), akkor itt az én módszerem.
Két-három StackOverFlow-os példát kicsit össze kellett gyúrni, hogy megtalálja a változókat és sortörést és formázást is jól kezeljen:
A lényeg, hogy a változónevek a docx-ben ${változónév} formában szerepeljenek, valamint a változók és a helyettesítő szövegek egy HashMap<String,String> objektumban vannak, ahol a key a változónév csupaszon, a value meg a helyettesítő érték.
Docx4j így kezelte, és nem akartam mindent újraírni.
Mindenesetre mind az IDE mind a java fellélegzett, hogy kiszedtem a Docx4j-t meg a függőségeitprivate static void removeAllRuns(XWPFParagraph paragraph) {
int size = paragraph.getRuns().size();
for (int i = 0; i < size; i++) {
paragraph.removeRun(0);
}
}
private static void insertReplacementRuns(
XWPFParagraph paragraph, String replacedText,
String fontFamily, int fontSize)
{
String[] replacementTextSplitOnCarriageReturn = StringUtils.split(replacedText, "\n");
XWPFRun newRun = paragraph.insertNewRun(0);
newRun.setFontFamily(fontFamily);
newRun.setFontSize(fontSize);
String part = replacementTextSplitOnCarriageReturn[0];
newRun.setText(part,0);
for (int j = 1; j < replacementTextSplitOnCarriageReturn.length; j++) {
part = replacementTextSplitOnCarriageReturn[j];
newRun.addBreak();
newRun.setText(part);
}
}
public static void poiReplace(java.util.HashMap<String,String> hs, String in, String out) throws Exception
{
XWPFDocument doc = new XWPFDocument(new java.io.FileInputStream(in));
for (XWPFParagraph p : doc.getParagraphs()) {
String text = p.getText();
boolean change=false;
for ( String key : hs.keySet() ) {
if (text != null && text.contains("${"+key+"}")) {
text = text.replace("${"+key+"}", hs.get(key));
change=true;
System.out.println("\nx\n"+p.getText()+"\n"+key+"\n"+hs.get(key));
}
}
if(change){
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
String ff=runs.get(0).getFontFamily();
int fs=runs.get(0).getFontSize();
removeAllRuns(p);
insertReplacementRuns(p,text,ff,fs);
}
}
}
for (XWPFTable tbl : doc.getTables()) {
for (XWPFTableRow row : tbl.getRows()) {
for (XWPFTableCell cell : row.getTableCells()) {
for (XWPFParagraph p : cell.getParagraphs()) {
String text = p.getText();
boolean change=false;
for ( String key : hs.keySet() ) {
if (text != null && text.contains("${"+key+"}")) {
text = text.replace("${"+key+"}", hs.get(key));
change=true;
}
}
if(change){
List<XWPFRun> runs = p.getRuns();
if (runs != null) {
String ff=runs.get(0).getFontFamily();
int fs=runs.get(0).getFontSize();
removeAllRuns(p);
insertReplacementRuns(p,text,ff,fs);
}
}
}
}
}
}
doc.write(new java.io.FileOutputStream(out));
doc.close();
}A poiReplace függvényt kell hívni, a másik kettőt meg a poiReplace hívogatja.
-
válasz
Aethelstone #10539 üzenetére
Lustaság*
-
axioma
veterán
válasz
Aethelstone #10539 üzenetére
Az a baj h legyinthetnek de az mar kiveri a biztositekot hogy irracionalis megoldast csinalnak. Atterveztek, full tipusos [eddig jo], de ehhez 'en' a szamolo rutin mondjam meg melyikkel akarom hasznalni [implnev.class]. Mert hogy csak igy lehet. Magyarul, atnezve az atalakitast, csak nem akarjak h naluk legyen default. Ez mar reg nem a tipusossagrol szol... Megmodositottam offline ugy [azaz lehetseges, szoval vegulis +1 nap alatt kiderult a valasz, h o"k erveltek rosszul -- bar tovabbra is randa, rosszabb mint volt, karbantarthatalanabb], hogy jojjon 'toluk' default, mi a velemenyuk - a vicc hogy azt meg egy darab if miatt [hogy jofej legyek es ne null-t adjak at ha a default-ot kerem] le-felesleges-bonyolitasozta. Ja ok Londonban ulnek csak en Mo-on...
Mind1, egyelore dokumentalom az egyet nem ertesemet, mar ha benne marad nalam az implementacio megadasa a calc-os osztalyban, aztan ha telik a pohar [mert kozben a manager fonoknek meg en vagyok lasu mig ok ezen ulnek] akkor aktivalom a linkedin-emet...
Viszont sokat javult a generic-ekrol a tudasom, eddig ahhoz hasonlitanam mint nyelvtudasnal a passziv szokincset, hat most beaktivaltak ;-) -
Valaki próbálta már a GraalVM-et?
mobal,
-
-
axioma
veterán
Nem az a bajuk, de most varjunk egy kicsit mert a comment-emre azt mondtak megoldjak.
Amugy igy nezett ki valahogy eredetileg:
interface XMatrix<M> ...
interface XMatrixUtils<M>
interface Linalg<T> ... { XMatrixUtils<T> newXMatrixUtils()...
A linalg implementacioja meg visszaadta az apachecommons-os valtozatot jelenleg, hosszutavon meg beallitasbol. Es a ...utils az ami eloallitja a nyers adatokbol a matrixosztalyokat, es utils-bol egy szamitasi folyamatban egy peldany van, szoval vedve volt ez elegge.
De igy a kodban ugy hasznaltam, hogy
XMatrixUtils mtxUtils= ...
XMatrix mtx= ...
ahol a bal oldalak meg rawtype-ok. Ami "nem jo" mert nem lesz type check...
Most valami koztes allapot van (nalam ugy hogy a sajat szamolos osztalyom es a unit test-je is generic az <M> felett, ok meg halalra generic-eltek a sajat interface-uket onmagukkal stb. de a vegen az en kodomba hard code-olva tettek hogy "csak igy lehet". Aztan ugy tunik most javitjak, ezek szerint nem csak igy lehet...
En el nem hiszem hogy ez az egesz megeri azt hogy 3 fejleszto most mar tobb mint 1 napot dob ra, sot a generikus alkalmazas fejlesztesi vezetojet is belerangattak, szerintem atlathatatlanabb es hasznalatban zavarobb lesz, mint az a szerencsetlen raw type lett volna. -
axioma
veterán
Na belenyultam egy specko esetbe.
Elkepzeles: tobbfele matrixszamitasi (2dim, altalaban java-hoz kepest kezelheto meretu de sok szamitast igenylo) implementacio hasznalatanak lehetosege. Interface, utils osztaly stb. minden megvan, a factory alapbol rendszervaltozobol veszi az aktualisat, es ha nincs default-ozza, szoval egyszerre biztositott hogy egyfele lesz.
Minden popec, egyszer csak benyogi az egyik review-er, hogy ne hasznaljunk raw type-okat, egyaltalan, mert az antipattern, nem tud a fordito osztalytipust ellenorizni. Java 8. Fogta az interface eredeti kitalaloja, minden fugg mar szinte onmagatol is, de a vege csak az lett, hogy az en kodomban nemes egyszeruseggel a konkret tipust (egyelore egy van elfogadva, bar masik kettot megcsinaltunk) hard code-olta'k mint hibajavitas. Innentol ki van dobva az egesz flexibilitas, ami a lenyeg lett volna...
En siman azt mondanam, hogy a raw type kerulese altalaban nem jelenti azt, hogy - foleg hogy a kodhoz nem fognak egysegsugaruak hozzaferni a domain es a kodresz fontossaga miatt - benne hagynam azt a nem felreertheto raw type-ot, de gondoltam megkerdezem, van-e barmi lehetoseg amit kihagytunk.
Fontos dolog a review es a rossz mintak kerulese, de ez boven a lo tuloldalanak tunik. -
Zsoxx
senior tag
Ezt tanulmányozva talán kicsit közelebb kerülsz a válaszhoz.
Fent van a megoldása is egyébként. -
orc88
őstag
Köszi mindkettőtöknek!
Interfészt és absztrakt osztályokat használtam már pár feladat során, pl. ezt az alakzatos példát is csináltam már absztrakt osztály kiterjesztésével.
A kérdésem inkább a sima osztályokra vonatkozott, hogy azok esetében mikor érdemes tovább bővíteni.
-
Drizzt
nagyúr
Ebből sajnos úgy tűnik, hogy éppen nem érted az OOP lényegét, de majd idővel az is eljön.
Én az öröklésből elsőre a polimorfizmust emelném ki. Van például egy Alakzat osztályod. Ebben van egy teruletSzamitas metódus. Van két Alakzatod, Kor és Negyzet. Kor és Negyzet nyilván teljesen máshogy számítja ki a területét, más belső tényezők alapján. De mindkettőben közös, hogy rendelkeznek területtel, és neked ha van egy raklapnyi Alakzatod, egyszerűbb dolgod van, ha mindegyik objektum megmondja magáról, hogy az ő területe mennyi. Persze itt is megcsinálhatod, hogy valamilyen típus változóban elrakod az Alakzat típusát, és ez alapján döntöd el a területszámító függvényben, hogy mit kell tenni. De ez hosszú távon teljesen fenntarthatatlan lesz. Ugyanis ha hozzáadsz egy új Alakzatot, 99%, hogy nem fogod megkeresni az összes if-et, ami Alakzatokat kezel, s el fog romlani a programod. Míg ha a teruletSzamitas abstract metódus, vagy interface-ben van megadva, akkor amint létrehozol egy újfajta Alakzatot, kötelező lesz megadnod a teruletSzamitas fuggveny implementaciojat. Másik probléma: hogyan kezeled azt, hogy egy Kor átmérővel rendelkezik, de egy Negyzet pedig oldal hosszúsággal? Mondhatod, hogy van egy változód, ami vagy az egyik, vagy a másik dolgot reprezentálja. Viszont ha bevezetsz egy téglalapot, akkor már nem lesz elég egy oldal, kettő kell. Ilyenkor mit csinálsz? Ha az Alakzatokban csak az a közös, hogy van számítható területük, akkor nem kell ezzel foglalkoznod. Minden osztályod csak annyit fog magából megmutatni a külvilágnak, ami feltétlenül szükséges.
-
bandi0000
nagyúr
Sztem rosszul közelíted meg a dolgot képzeld el így
Van egy osztályod ami tárolja az autók fő tulajdonságait mint pl Le, fogyasztás stb, amit minden autóra el lehet sütni, ebből örökölnek a konkrét típusok, amiknek meg lesznek a fő osztály adattagjai, mint a Le meg a fogyasztás, de ehhez hozzá rakhat még mást, ami esetleg csak rá vonatkozik
Az egésznek az a lényege, hogy ha hasonló osztályaid vannak, akkor nem mindegyikben hozod létre ugyan azokat a változókat, hanem csinálsz egy ős osztályt, ami tartalmazza ezeket a közös tagokat és a többi csak örökli
+ ugyan ez igaz a függvényeire is, pl ha másodfokú egyenletet szeretnél kiszámolni, akkor ha már van egy osztályod ami össze ad két számot, akkor ezt se kell megírni megint csak használni
Nyilván ezek móricka példák, és semmit értelmét nem látod ezeknek, de egy nagy alkalmazásban majd igen jó jönnek ezek
-
orc88
őstag
Sziasztok!
Valószínűleg elég triviális lesz a kérdésem
2 éve programozok, idén érettségiztem emelt informatikából (Java-ban), alapvetően értem az OOP lényegét, tisztában vagyok az alapokkal, viszont az osztályok közötti öröklődés hasznát nem igazán látom át.
Egy egyszerű példával:
Adott egycar
osztály, benne egyString marka
mező. Ennek a mezőnek adhatok akármilyen értéket. (Subaru, Citroen, Mazda...) Később ezen osztály objektumait pl. hozzáadhatom egy ArrayListhez amiben egyif(marka=="Mazda")
feltétellel rögtön tudok kezdeni valamit.
Miért lenne jobb ha acar
osztályt terjeszteném ki több al-osztályra?Elképzelhető, hogy nagyon rossz a példám mert nem látom át az egész lényegét, gyakorlati alkalmazását.
Valaki fel tudna világosítani, esetleg kész gyakorlati példát mutatni? -
E.Kaufmann
veterán
válasz
Aethelstone #10524 üzenetére
Na mindegy, eddig müxeni látszik a B megoldás, csak próbáltam a 8.0-ásról 8.1.1-re frissíteni a docx4j-t, de elrontja a docx-et, szóközöket von egybe. Úgyhogy visszaálltam 8-ra. -
E.Kaufmann
veterán
válasz
Aethelstone #10524 üzenetére
Csak jobb lenne patkolás nélkül. Várom. -
Aethelstone
addikt
válasz
E.Kaufmann #10522 üzenetére
Hétfőn tudok majd
-
E.Kaufmann
veterán
válasz
E.Kaufmann #10522 üzenetére
Na közben megszületett a tákolmány
Állandóan nyafogott a docx4j, hogy nincs konfig ezért az alapértelmezettet tölti be, úgyhogy ezt is megoldottam egy csapással:public static void preInit(){
//preinit docx4j
// supress system.err
java.io.PrintStream _err = System.err;
try{
System.setErr(new java.io.PrintStream(new java.io.OutputStream() {
public void write(int b) {
}
}));
//preinit without file
WordprocessingMLPackage.load(new java.io.ByteArrayInputStream(new byte[0]));
}
catch(Exception e){}
//recover system.err
System.setErr(_err);
} -
E.Kaufmann
veterán
válasz
Aethelstone #10520 üzenetére
Szia! Köszönöm a választ, POI-t használom az XLSX-ekhez, de nem találtam működő példát docx-hez. Nem tudnál egy linket dobni egy egyszerűbb docx kitöltésről POI-val?
-
Drizzt
nagyúr
Arra van-e valamifele library, ami valamilyen jsonban megadott filter/sort kriteriumokat kozvetlen Jpa criteria queryve tudna alakitani? Igazabol a formatum annyira nem is fontos, felolem lehet akar QueryParammal, vagy PathParammal. Irni tudnek, de ha van, akkor nem szeretnek ezzel foglalatoskodni. Viszont nem talalok ra hirtelen jo keresofeltetelt a guglihoz.
-
Aethelstone
addikt
válasz
E.Kaufmann #10519 üzenetére
Csinálj előbb egy template docx-et. Úgy szerintem gyorsabb lesz. Nyisd meg és abba írkálj. Vagy próbáld meg az apache poi-t, ha a stack-be belefér.
-
E.Kaufmann
veterán
Ha már így összejöttek itt a szakik egy kérdés.
Használom a docx4j projektet egyszerűbb docx doksik generálásához mintából. Projekt oldala: [link]Ha valaki esetleg használja, meg tudná mondani, hogy az első doksi generálása miért olyan hosszú?
Látszólag megfagy az ezt használó projekt az indításától számított első variableReplace() hívásnál 5 mp-re, de újabb doksik generálása már pikk-pakk megy. Kínomban már inkább indításkor generálok valami kamu doksit. -
floatr
veterán
válasz
disy68 #10517 üzenetére
Lehet, hogy neked a kontextus neked nem konfiguráció, nekem még mindig az, kezdve a legpitiánerebb dolgokkal, amit változtatni kellene egy production környezetben adott esetben. De ez a jó, hogy különbözőek vagyunk. Amúgy nem fétis, talán észrevetted, hogy egy kombinált megoldást említettem. Szerintem a Java config a típus-fetisiszták fertője
Olvashatóság tekintetében valóban jobb lenne egy JSON vagy YAML context definíció, de amikor kódból maszatol valaki, az agyhalál.
A generált kóddal kapcsolatban rettenetesen álszent a hozzáállás. A hibernate és spring által generált 60 tonnányi (cglib, asm, miegymás) kód ok, a lombok @Getter/@Setter nem, hagyjuk már. A kotlin által generált JVM kód megint ok, bár többszörösen megerőszakolja az egész rendszert, de a @NoArgsConstructor/@AllArgsConstructor az csúnyarossz... vicc. Meg lehet nézni, hogy mekkora buglistája van ezeknek a rendszereknek már csak a kódgenerálás okán is, de attól nem félünk
Egy @Builder/@Getter annotáció átláthatatlan az osztály elején, de a húszmillió sornyi extra kód nyilván karbantarthatóbb, ha valami változik... Szerintem az a veszélyes, hogy ezt valaki nem meri használni. Ugyanaz a probléma, mint amikor az 1.5-ös iterációk és enumok tartották rettegésben az említett projektet. -
disy68
aktív tag
válasz
floatr #10516 üzenetére
"Az XML vs Java configgal kapcsolatban az a problémám, hogy a konfiguráció karbantartásához/módosításához kódolás kell, CI pipeline."
Ez a konfiguráció nem ugyanaz, mint az alkalmazáshoz tartozó akár környezetenként változó konfig, pl url-ek. Ha itt kell módosítani bármit - magyarul az alkalmazás context-je változik -, akkor újra kell buildelni az alkalmazást, függetlenül a konfiguráció típusától. Innentől ez nem üzemeltetési kérdés, hanem fejlesztés.
Az átláthatóság szubjektív dolog, láttam már 30-40 xml-ből felépülő Spring konfigot, ami nekem minden volt csak nem átlátható, viszont volt kolléga, aki azt preferálta. Azt hittem ez csak az ő fétise, de akkor vannak még mások is ezen a vonalon :-)
"Lombokot szerintem alapvetően pár olyan dologra érdemes használni, ami fordításkor generál le bojlerplét kódot. Ezen az alapon semmilyen nem Java JVM nyelvet nem lenne szabad használni."
Semmi köze a kettőnek egymáshoz, ne keverd a dolgokat. A lombok által generált kódban nem bíznak sokan, valamint java update esetében okozhat/okozott gondot. Van pár issue-juk is. Ettől függetlenül, ahol lehet én is preferálom a használatát, de ettől még megértem, ha máshogy dönt valaki. -
floatr
veterán
válasz
disy68 #10504 üzenetére
Ezt a tiltósdi dolgot nem annyira vágom miért kell... Voltam már olyan projektben, ahol az 1.5-ös fícsöröket tiltották, mindenki menekült, semmi értelme nem volt. Lombokot szerintem alapvetően pár olyan dologra érdemes használni, ami fordításkor generál le bojlerplét kódot. Ezen az alapon semmilyen nem Java JVM nyelvet nem lenne szabad használni. Amúgy is kényszermegoldás volt, mert a JCP board impotens nyúlbéla volt hozzá, az Oracle meg pénzt akart belőle kifacsarni, nem fejleszteni.
Az XML vs Java configgal kapcsolatban az a problémám, hogy a konfiguráció karbantartásához/módosításához kódolás kell, CI pipeline. Szerintem a legszebben megfogalmazott Java config is nehezebben átlátható, mint akár az XML. Egyik megoldás sem jó tisztán, nekem leginkább az XML+annotáció az, ami leginkább kezelhető.
-
disy68
aktív tag
válasz
#68216320 #10510 üzenetére
Szerintem érdemes ismerni mindkettőt, de a maven-t mindenképp. Kezdőként elég az egyik is. A Gradle rugalmasabb, a néhanapján felmerülő cache problémákat szopás kiszűrni. A maven kevésbé rugalmas - pluginekkel persze lehet bármit - de régi motoros, szerintem minden problémára van megoldás (plugin) hozzá. Gradle esetében találkoztam olyannal, ami nincs vagy csak részben volt meg a maven-es megoldáshoz képest.
-
#68216320
törölt tag
Gyors kérdés. Melyik build/dependency managert?
Maven vagy Gradle?
Előbbit már próbáltam, nagyon minimális ismereteim vannak róla, utóbbit még soha nem használtam.
-
Ablakos
őstag
Egy metódus rekurzívan hívogatja saját magát. Hol tudom az exception (StackOverflow) elkapni?
Ez nem jó.
public void eat() {
try {
eat();
} catch (Exception e) {
System.out.println("SOF");
}
} -
#68216320
törölt tag
válasz
Drizzt #10506 üzenetére
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 ...
-
Drizzt
nagyúr
válasz
#68216320 #10493 üzenetére
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.
-
disy68
aktív tag
-
floatr
veterán
válasz
disy68 #10500 üzenetére
Használtam már XML és Java configot is, de egy jól megtervezett struktúra és lombok használata mellett nekem: annotáció > XML > Java config. Utóbbi még üzemeltetési szempontból is aggályos
A tervezési hibával kapcsolatban meg lehet, hogy igazad van, bár ezzel szerintem csak akkor lehet hatékonyan megküzdeni, ha zöldmezős cuccról van szó.
(#10501) PeachMan én mindenképpen javasolnám. Nem árt ha mögé látsz, de nem attól leszel jó (junior) fejlesztő, hogy látod a biteket suhanni.
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Allegro vélemények - tapasztalatok
- Kazy Computers - Fehérvár - Megbízható?
- Luck Dragon: Asszociációs játék. :)
- One otthoni szolgáltatások (TV, internet, telefon)
- HiFi műszaki szemmel - sztereó hangrendszerek
- Tőzsde és gazdaság
- Yettel topik
- Álláskeresés, interjú, önéletrajz
- Kerékpárosok, bringások ide!
- Linux haladóknak
- További aktív témák...
- LG 45GS95QX-B 45" ÍVELT OLED MLA WQHD 240HZ 0.03 MS GAMING MONITOR
- HP Zbook 15 laptop (15,6FHD/I7-G4MQ/16GB/128SSD/Nvidia2GB)
- Latitude 7450 14" FHD+ IPS Ultra 7 165H 32GB 1TB NVMe IR kam gar
- LG 45GR95QE-B Ívelt OLED 2K WQHD 240Hz, 0.03ms, NVIDIA G-Sync ,FreeSync Premium ,HDMI 2.1
- HP Probook 840 G1 laptop (14/i5-G4/8GB/128SSD) - Erős akku!
- BESZÁMÍTÁS! ASROCK H310CM i5 8400 16GB DDR4 256GB SSD 1TB HDD GTX 1060 3GB Rampage SHIVA TT 500W
- LG 65BX - 65" OLED - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - PS5 és Xbox Ready!
- BESZÁMÍTÁS! MSI B450M R5 5500 16GB DDR4 512GB SSD GTX 1080Ti 11GB Rampage SHIVA Chieftec 700W
- Telefon felváráslás!! Xiaomi 13T, Xiaomi 13T Pro, Xiaomi 14T, Xiaomi 14T Pro
- BESZÁMÍTÁS! Asus Prime A320M R5 1600 16GB DDR4 512GB SSD GTX 1050 Ti 4GB Rampage SHIVA TT 500W
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest