- A hagyományos (nem okos-) telefonok jelene és jövője
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Android alkalmazások - szoftver kibeszélő topik
- VoLTE/VoWiFi
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Szívós, szép és kitartó az új OnePlus óra
- CMF Phone 2 Pro - a százezer forintos kérdés
- Egyszerre legnagyobb és legkisebb is a Garmin Venu X1
- Mobil flották
Új hozzászólás Aktív témák
-
E.Kaufmann
veterán
Van egy InputStream és van egy OutputStream. Közéjük lehetne-e úgy ékelni egy GZipOutputStream-et (és hogyan ), hogy egy nagy állományt ne kelljen először teljesen átpasszolni a gzippen, majd a kapott eredményt ne kelljen egy másik menetben átírni az OutputStream-re hanem egy menetben, ahogy a gzip egy blokkot tömörített, már küldje is a sima outputnak?
-
E.Kaufmann
veterán
Köszi! Biztos később az lesz, de addig is jó móka html generáló progit írni nulláról
, de még az se biztos, hogy a webes felület lesz a nyerő, ez csak egyike a megjelenítési formáknak, lehet, az lesz a vége, hogy egy egyszerűbb droidos felülethez kell majd egy primitív http konnektor.
-
E.Kaufmann
veterán
válasz
E.Kaufmann #10632 üzenetére
Előzőre valaki?
Más: A régi tanács, hogy sima String-eket nem konkatenálunk, valóban igaz még most is. Csináltam egy egyszerűbb html táblagenerálást. Úgy voltam vele, annyira nem lesz nagy tábla, meg majd csak kioptimalizálja a JDK11.
Háát. Tetülassú volt a generálás, legalább 2-3mp volt érzésre, azt hittem valamit a rendezés körül rontottam el, aztán eszembe jutott a régi intelem, lecseréltem a függvényen belül a konkat nagyját StringBuilder append függvényére, mert csak egy szálon fut a generálás és most csak úgy ugrik befele kérésre az oldal böngészőn át -
E.Kaufmann
veterán
Van egy kisebb méretű állomány egy meghajtón (<1MByte), amit egy java program ütemezett időközönként beolvas csak olvasásra és szeretném ha nem akadna össze, ha épp szerkesztenék azt az állományt. Hogy érdemes ezt az állományt feldolgozni Java alatt? Gyorsan behúznám a memóriába egy másolatát, de még ezidő alatt is szeretném, ha szerkeszthető maradna az állomány. Hogy érdemes feldolgozni?
-
E.Kaufmann
veterán
válasz
Aethelstone #10627 üzenetére
Ahogy nézem, a Maven-es feltételnek pont nem felel meg, de úgy is ismerkednem kellene vele és az új NetBeans is a Maven projekteket tette alapértelmezetté. Köszönöm.
-
E.Kaufmann
veterán
Na hogy ON.
Tud valaki ajánlani egyszerűbb NN "könyvtárat" egyszerűbb feladatokhoz, aminek nincs rahedli függősége, Maven nélkül is behúzható egy-két jar felcsatolásával és könnyű tanítani is? -
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
-
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. -
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.
-
E.Kaufmann
veterán
válasz
mind_against #10558 üzenetére
Miért? Megsértettünk?
-
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.
-
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
-
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.
-
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. -
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?
-
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. -
E.Kaufmann
veterán
válasz
Ablakos #10475 üzenetére
Gondolom levágja az elejét és csak az utolsó bájtot tartja meg (na ez megint jó kérdés, hogy a jvm milyen sorrendben tárolja a bájtokat és meg nem mondom). Ha a végét vágná le, akkor nem váltana előjelet, legalább is ha elől (bocs a pontatlanságért, talán "most significant bit"-nek lehetne nevezni, balról az első
) van az előjelbit.
Majd ha ráér egy okos, írja le mert én is kíváncsi vok -
E.Kaufmann
veterán
válasz
gabitoo88 #10464 üzenetére
Informatikusnak hogy a piklibe ne kéne programozás? Még egy rendszergazdának is. Már csak azért is, hogy saját dolgodat megkönnyítsd. Igaz én a Java-t kalapácsnak használom és mindent azzal püfölök, olyat is amit pl PS-sel, bash-sal vagy más eszközzel lenne érdemes, de csináltam már java-s reboot programot kínai telefonközponthoz, amit ha nem indítottunk újra naponta, a hívások nem mentek. Betelnetelt rá és kiadta a parancsot. Debian alatt futott cron-ból. Tudom, hogy lehettek volna elegánsabb megvalósításai, de működött. Ugyanígy a régi ERP nem volt képes ütemezett üzeneteket küdeni, egy java-s programocska lekérdezett valamit SQL-lel JDBC-n át és ha kellett, küldött SMTP-n át levelet.
Volt hogy rámlőcsöltek adatrögzítést, csináltam hozzá az ERP által kínáltnál ezerszer kényelmesebb felviteli felületet és onnan nyomtam be az adatokat az ERP-be, ami szintén nem ajánlott, de soha semmi gondot nem okozott.Én imádom a Java-t, mert mindent meg tudok benne csinálni, még ha tudom is, hogy nem kellene mindent benne.
Az a lényeg, hogy egyszerűbb scriptek és programozási ismeretek nélkül a rendszergizda kartalan órás (direkt hagytam le az i-t). -
E.Kaufmann
veterán
Én a bekért szöveget előbb pl toLowerCase()-vel kisbetűsíteném és utána már kevesebb feltétel kell. Én legalább is, ha nem számít a kis/nagybetű, akkor a biztonság kedvéért mindent tolowerezek (meg trimmelek).
-
E.Kaufmann
veterán
válasz
M_AND_Ms #10400 üzenetére
Jaja, fa struktúrájú adatok bejárásánál tud jól jönni, ugyanakkor túl kiterjedt szerkezeteknél nem biztos, hogy jó ötlet, marha sok memóriát fel tud emészteni, valamint egzotikus memóriahibákat dobhat a jvm, még ha a gépben van is elég memória, csak épp a programverem, vagy minek hívják, túlcsordul: [link]
Érdemes ciklusokra visszavezetni a megoldást rekurzió helyett. -
-
E.Kaufmann
veterán
Én is inkább SQL párti vagyok, de pölö ez alapján nem akkora wasistdas egyszerű objektumok adat benyomni XML-be, de gondolom a kiolvasás se nehezebb: [link]
Nem tudom,mik a megkötések, én kezdéskor simán beolvasnám ArrayList-be a már létező adatokat, azt olvasnám/bővítgetném/módosítgatnám, szükség esetén meg a változásokat vagy akár az egészet visszaírnám. Ha nagyon szőrszálhasogató a tanárod, amúgy is biztos találhat valamit, amibe beleköthet, ha akar, ha meg nem, akkor szvsz az XML a legegyszerűbb út számodra.
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Autós topik
- OLED monitor topik
- Egyre csak fejlődik az AI, emberek tízezreit rúgja majd ki a BT
- A hagyományos (nem okos-) telefonok jelene és jövője
- IGP nélküli processzorokkal készül az Intel és az AMD
- Fejhallgató erősítő és DAC topik
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Genshin Impact (PC, PS4, Android, iOS)
- Milyen belső merevlemezt vegyek?
- Apple MacBook
- További aktív témák...
- AKCIÓ! AMD Ryzen 7 3800X 8mag 16szál processzor garanciával hibátlan működéssel
- Telefon szerviz helyben - Gyors javítás, akár 30 perc alatt!
- VÉGKIÁRUSÍTÁS - REFURBISHED - Lenovo ThinkPad 40AC Thunderbolt 3 docking station
- Zebra ZP505 EPL - Hőpapíros címkenyomtató
- Bomba ár! Dell Latitude E6520 - i7-2760QM I 8GB I 256SSD I Nvidia I HDMI I 15,6" HD+ I W10 I Gari!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest