Re: smerovanie javy 7,8
Tu by som suhlasil, ale Java sa vlece ako slymak (hlemyzd). Vacsina konstrukcii je uz preverenych v inych jazykoch ako napriklad funkcionaly v Lispe, ... Suhlasim ze Java si udrziava kompatibilitu na urovni byte kodu. Co sa tyka technologii, tak nie je smerodajny iba vyvoj. V mnohych firmach sa uvazuje komplexny pohlad na vec, co sa tyka dostupnych ludi, resoursov (pocitace, software), deployment(OS, runtime, ...). Ked by sme porovnali Javu a PHP, tak su to dva rozne svety. Ja som napriklad zazil vyvoj webovych aplikacii, kde nebolo presne jasne co to bude a ako to bude fungovat. Pisali sme to v Jave + Struts a bola to urcite strata casu, lebo tam sa veci tazko menia. Bezalo to na linuxoch, v applikacnom servery co bola tiez chyba, potrebovalo to vela RAM. Programator v Jave je triez obvykle drahsi. Bol to kandidat skor na to PHP alebo ROR. Na druhej strane v Jave sa rodia skvele myslienky, super frameworky. Castokrat su to aj interne frameworky vo firmach, ktore su vseobecne, aby prezili niekolko rokov az 10 rokov. Podla mna vo vseobecnosti Java ma navrh, ak sa jedna o system s velmi dlhou zivotnostou (a zaroven velkeho rozsahu) a naopak ak ide o nieco velmi kratkodobe, tak Javu skor nie. Priklad system na 50 rokov - urcite nie ROR, PHP aj keby vyvoj bol o 30% lacnejsi. Vela tiez zavisi od konkretnej firmy/korporacie a kulture. Ak sa niekdo napr. spoji s IBM, tak moze cakat ze bude stale pozadu o 5 rokov oproti zvysku sveta. Ak to porovname s Microsoftom ako partnerom, tak tam je to omnoho prijemnejsie. Najlepsie je mat expertov na vsetko so skusenostami so vsetkym dobrym a progresivnym :). 2011/7/19 Zdeněk Troníček troni...@fit.cvut.cz Tohle platí nejen v oblasti frameworků, ale třeba i pro vlastnosti jazyka. Do produkčního jazyka jako je Java by neměly být přidávány neprověřené konstrukce, protože to může napáchat více škody než užitku. Lepší je počkat, zda se tyto osvědčí jinde (např. v nějakých experimentálních jazycích) a přidat je později. Kritici budou poukazovat na to, že Java není na špici. Není. Ale od produkčního jazyka bychom to ani neměli očekávat. V oblasti frameworků je situace analogická. Experimentální frameworky přicházejí s novými myšlenkami, z nichž některé zapadnou a jiné přežijí. Ty, které přežijí, se pak vyplatí integrovat např. do JEE či Springu. Navíc experimentální frameworky mohou rychleji inovovat a často se nestydí zapomenout na zpětnout kompatibilitu. Takže možná trochu paradoxně tato roztříštěnost žene Javu kupředu. Myslet si, že nějaký osvícený guru pozná, které myšlenky se osvědčí a které ne, je naivní a vede často ke zklamání. Viz např. checked exceptions v Javě, které byly zavedeny aniž by prošly zkouškou. Z. -- Zdenek Tronicek FIT CTU in Prague Ondra Medek napsal(a): Hlavnym konkurentom javy je podla mna ozaj .net ten ma ten korporatny support, a nema javovsku vlastnost roztriestenost ktora ubera podla mna energiu jave. Energia sa nedeli ako je to u Javy ale ide jednym smerom. A v konecnom dosledku je asi vyvoj rychlejsi, a teda tiez lacnejsi(technologie frameworky tam nieje tak casto potrebne integrovat=menej potencialnych problemov atd.). Roztristenost je v dlouhodobem hledisku vyhoda, viz napr. Linux vs. Windows. Ano, Windows jsou dobre na PC, ale napr. rozjezd netbooku, tabletu a smart phone zaspaly. Taky starsi z nas si vzpomenou, ze rozjezd Internetu Widle zaspaly take. Ta roztristenost prave prinasi treba Grails, Spring a podobne projekty, diky kterym se Java drzi na spici, i kdyz u Sunu nebo Oraclu jsou krapet pozadu :-).
Re: javac vs. Eclipse - čísla řádků v .class u víceřádkových výrazů
Ja len doplnim. Eclipse kompilator dokaze kompilovat aj projekty (defacto adresare so zdrojakmi) s cyklickymi zavislostami, co sa s antom, mavenom alebo javac robi velmi tazko (vlastne to nepodporuju). V tomto smere podporuje viacprechodovu kompilaciu. Eclipse kompilator sa da pouzivat aj ako standalone kompilator. Je to asi pat pluginov, ktore treba mat a je nejaka classa cez ktoru sa to spusta. Da sa to najst na nete. Co sa tyka inkrementalnych buildov, tak tie su podporovane aj mavenom, ale neviem co to znamena pre kompilaciu. V ideckach okrem inkrementalnych buildov, co je pre mna samozrejmost, by mal byt este specialny parser java zdrojakov as you write. To napr. eclipse ma. Je to vyhoda, lebo programator vidi co pise este pred ulozenim (save), co moze byt niekedy pekna otrava. Ak sa spravne pamatam, tak sun javac vyvijal javac iba ako zakladnu implementaciu kompilatora, teda urcite nie na integraciu do IDE. Tomas 2011/4/26 Robert Novotny robert.novo...@upjs.sk Informacii o tom kompilatore nie je vela. Prakticky sa vie len to, ze Eclipse Compilator (ECJ) sa hrdi inkrementalnou kompilaciou, co znamena, ze v ramci projektu sa udrziava mnozina zmien v suboroch, ktora nastala od poslednej kompilacie. Pri rekompilacii sa zisti len zoznam zmenenych / novych suborov od predoslej kompilacie a z nich sa vyrobia .class subory. Ak je nejaky .java subor vymazany, prislusny .class sa pri inkrementalnej kompilacii vymaze tiez. ECJ tiez udrziava komplexny strom zavislosti medzi .java zdrojakmi, cim adresuje napr. pripady, ked sa niektore zmenene subory daju skompilovat a niektore kvoli chybam nie a minimalizuje pocet suborov, ktore treba skutocne prekompilovat. Tato featura bola dost vyznamna v casoch, ked este NetBeans nemal compile-on-save a nesiel cez Ant, ale dnes aj Ant kompiluje len zmenene subory (hoci netusim, ako je to v NetBeans a megaprojektoch). ECJ ma zrejme lepsiu integraciu s reportovanim chyb, mozno sa navesat cez listenery a dostavat kompilacne chyby a varovania, ktore mozno programovo spracovat. Dnes uz samozrejme existuje javax.tools, ale to je len zalezitost JDK1.6+ a predtym to zdaleka nebol standard A ako povedal kolega, Eclipse kompilator ma ine spravanie v pripade chyb: public class Thing { public void getSecret() { return x; } public static void main(String[] args) { new Thing().getSecret() } } ECJ to radostne skompiluje a za behu metoda getSecret() hodi java.lang.Error: Unresolved compilation problem. Javac to odmietne skompilovat. Inak ECJ sa uz od nepamati pouziva v Tomcate na kompilaciu servletov, ktore vzniknu z JSP stranok. RN On 25. 4. 2011 22:17, Libor Jelinek wrote: Já patřím mezi asi tu masu co nikdy nekompilovala ničím jiným, než Oracle javac (taky mi to nejde z pusy, ale snažím se :-)). Nikdy jsem se nesetkal s Blackdown, Ice, gjc apod. kompilátory. A NetBeans používá taky vlastní kompilátor? Když dám v Eclipsech Build, tak mi to přeloží jakým kompilátorem? Když (jako ve zmíněném příkladu z Stackoverflow) Eclipse zkompiluje, ale Sun/Oracle nikoli, tak jak se to pak chová při běhu oproti Sun/Oracle JRE? 2011/4/25 Ladislav Thon ladi...@gmail.com Já kupříkladu narazil na rozdíly v kompilaci při volání metody se signaturou používající Enum?, Eclipsí kompilátor to zvládl na jedničku, javac měl problémy, viz diskuze na stackoverflow.com: http://stackoverflow.com/questions/2220763/java-specific-enums-and-generic-enum-parameters Překladače mohou odvozovat parametrizované typy nad rámec minimálních požadavků. Suní překladač (hádám, že Oraclí začnu říkat nejdřív za pět let) se moc nesnaží, překladač z Eclipsu toho zvládne odvodit víc. Neznamená to, že některý z překladačů je vadný, jenom že o tom lidi moc neví. LT Ovšem pokud používáte Maven, musíte se stejně podřídit standardnímu javac (tedy pokud neexistuje nějaký Maven plugin, který by uměl použít pro kompilaci Eclipse -- a i kdyby existoval, ani bych ho snad nechtěl použít). Martin Schayna On 04/25/2011 02:25 PM, Libor Jelinek wrote: To jsou tedy vlastnosti s ohledem na IDE. Já stejně většinou používám javac z Oraclího JDK přes Ant, tak jsem jen chtěl vědět, zda náhodou není Eclipse compliter třeba několikanásobně rychlější/lepší apod. :-) Díky. Libor Dne 25. dubna 2011 11:17 Filip Jirsák fi...@jirsak.org napsal(a): Kompilátor eclipse například umožňuje přeložit i třídu s chybou (chyba v syntaxi v nějaké metodě apod.), jenom místo kódu dané chybné metody vloží vyhození nějaké runtime výjimky. K tomu asi sunovský kompilátor nedonutíte. Eclipse (IDE) pak ten přeložený kód používá pro code completion a spol., kde je užitečné, aby jedna chybná metoda nezabránila získávat informace o zbytku třídy a ostatních třídách. Na druhou stranu je potřeba si na to dávat pozor a finální verzi přeložit s plnou kontrolou chyb, aby se ten kód, kde se místo nějaké metody bude vyhazovat výjimka na řádku 353 chybí
Re: javac vs. Eclipse - čísla řádků v .class u víceřádkových výrazů
To co ecj povazuje za chybu sa da nastavit. Vid nasledovny obrazok http://www.informit.com/content/images/chap6_0321288157/elementLinks/06fig10.jpg . Normalne ked clovek kodi, tak by kazdy projekt mal byt bez cerveneho znaku error, takze je lahko viditelne ci nejaky kompilacny problem existuje alebo nie. Niekedy sa vsak stava, ze projekt je natrvalo oznaceny ako chybny, lebo chyba je niekde v xmlka alebo j2ee alebo v jsp a neda sa jej rozumne zbavit. Potom sa mierne straca prehlad volnym okom. Vseobecne sa tu vsak bavite o dvoch roznych veciach. Ecj je totiz normalny kompilator, ale eclipse spracovava jeho vystup (vola ho priamo) a zobrazuje ho strukturovane, vizualne. Druha vec je ze eclipse je schopny kompilovat a spustat java classy s chybami. Tuto ficuriu som vyuzil velmi velmi zriedkavo, ked som mal zrovna nieco rozrobene a nieco ine som potreboval ukazat. BTW som si spomenul ze ECJ by mal byt schopny vyuzivat viac jadier pri kompilacii. Dokaze to aj javac? 2011/4/26 Robert Novotny robert.novo...@upjs.sk Zrejme to ma prinos pri rychlosti buildov a podla mna pred vekmi to bola zrejme jedine riesenie problemu, ako pouzivat kompilator krizom cez rozne virtualmachiny a rozumne s nim interagovat. A este mi napadlo, ze realne je mozne pouzivat i metody triedy, ktora ma syntakticke chyby (zrejme vhodne vo vyvoji). Inak ja som si toto spravanie kompilatora paradoxne uvedomil az pri pisani predoslych mailov a nikdy mi to neprekazalo. Chybny zdrojak Eclipse sice skompiluje, ale okamzite su cervene podciarknute nespravne konstrukty a vo view Problems vidim prehladne vsetky chyby. Ak spustate projekt s chybami, dostanete hlasku, ci ho naozaj chcete spustit a ide sa. View Problems je vsak standardne nastaveny dost divne, pretoze ukazuje chyby v celom workspace (to je tych Vasich 400 errorov) a i pre mna je to chaos. Ja si standardne nastavujem zobrazovat len problemy v aktualne zvolenom elemente v potomkoch, t. j. ked klikam po packagoch, tak sa mi zobrazuju kumulativne chyby za cely balicek a ked editujem zdrojak, vidim len chyby v nom. Da sa to nastavit vo vlastnostiach viewu, Configure Contents, vytvorit novy Configuration, pomenovat ho, nastavit Scope na ,,Selected item and its children. Volitelne si este mozete vypnut grupovanie a potom vidite presne to, co v NetBeansackej konzole, ale v ovela prehladnejsej forme, pretoze si to mozete triedit, grupovat, filtrovat podla povodu a podobne. Mimo Eclipse asi ECJ nema valny zmysel, resp. nevidim ho. (V buildovacich nastrojoch obvykle ide i tak postupnost clean, build). RN On 26. 4. 2011 17:01, Dusan Msk wrote: Ahoj. 2011/4/26 Robert Novotny robert.novo...@upjs.sk A ako povedal kolega, Eclipse kompilator ma ine spravanie v pripade chyb: public class Thing { public void getSecret() { return x; } public static void main(String[] args) { new Thing().getSecret() } } ECJ to radostne skompiluje a za behu metoda getSecret() hodi java.lang.Error: Unresolved compilation problem. Aky to ma realny prinos mimo jsp? Momentalne nedobrovolne prechadzam na eclipse a tato vlastnost eclipse kompilatoru mi nesmierne vadi *1 ( ked sa teda oprostim sprostych slov ). Z netbeans som zvyknuty pri neuspesnom builde hodit zrak do konzoly a hned opravit problem, v eclipse ziadnu konzolu nevidim, zato mam akusi zalozku problems a v nej svieti 400 error-ov :-) Na spolupracu eclipse-maven to takisto neprida, eclipse si tam cosi kdesi chrousta a ja potom na hudsone mozem cumiet ako pako, preco to nefunguje :-) *1 - predpokladam, ze sa to da niekde vypnut, zatial som to neskumal Javac to odmietne skompilovat. Inak ECJ sa uz od nepamati pouziva v Tomcate na kompilaciu servletov, ktore vzniknu z JSP stranok. RN On 25. 4. 2011 22:17, Libor Jelinek wrote: A NetBeans používá taky vlastní kompilátor? AFAIK pouziva z JDK. Když dám v Eclipsech Build, tak mi to přeloží jakým kompilátorem? Když (jako ve zmíněném příkladu z Stackoverflow) Eclipse zkompiluje, ale Sun/Oracle nikoli, tak jak se to pak chová při běhu oproti Sun/Oracle JRE? 2011/4/25 Ladislav Thon ladi...@gmail.com Já kupříkladu narazil na rozdíly v kompilaci při volání metody se signaturou používající Enum?, Eclipsí kompilátor to zvládl na jedničku, javac měl problémy, viz diskuze na stackoverflow.com: http://stackoverflow.com/questions/2220763/java-specific-enums-and-generic-enum-parameters Překladače mohou odvozovat parametrizované typy nad rámec minimálních požadavků. Suní překladač (hádám, že Oraclí začnu říkat nejdřív za pět let) se moc nesnaží, překladač z Eclipsu toho zvládne odvodit víc. Neznamená to, že některý z překladačů je vadný, jenom že o tom lidi moc neví. LT Ovšem pokud používáte Maven, musíte se stejně podřídit standardnímu javac (tedy pokud neexistuje nějaký Maven plugin, který by uměl použít pro kompilaci Eclipse -- a i kdyby existoval, ani bych ho snad nechtěl použít).
Re: Java fór
Ano, to bol zjednoduseni priklad, nechcel som zverejnit original kod, ale sak preco nie, aj tak bude kazdemu na dve veci, za formatovanie sa ospravedlnujem, rozpadlo sa: *static* Token Scan() { *int* state, *apx*; *StringBuffer* buf; *while* (*ignore*.get((*int*)*ch*)) *NextCh*(); *if* ((*ch* == '/') *Comment*()) *return* *Scan*(); *t* = *new* Token(); *t*.pos = *pos*; *t*.col = *pos* - *lineStart* + 1 - *offset*; *t*.line = * line*; buf = *new* StringBuffer(); state = *start*[*ch*]; apx = 0; loop: *for* (;;) { buf.append(*strCh*); *NextCh*(); *switch* (state) { *case* 0: {*t*.kind = *noSym*; *break* loop;} // NextCh already done *case* 1: *if* (*ch* == '-' || *ch* = '0' *ch* = '9' || *ch* = 'A' *ch* = 'Z' || *ch* == '_' || *ch* = 'a' *ch* = 'z') {*break*;} *else* *if* (*ch* == '/') {state = 15; *break*;} *else* {*t*.kind = 1; *CheckLiteral*(buf); *break* loop;} *case* 2: *if* (*ch* = '0' *ch* = '9') {state = 3; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 3: *if* (*ch* = '0' *ch* = '9') {*break*;} *else* *if* (*ch* == '.') {state = 4; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 4: *if* (*ch* = '0' *ch* = '9') {state = 5; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 5: *if* (*ch* = '0' *ch* = '9') {*break*;} *else* {*t*.kind = 3; *break* loop;} *case* 6: *if* (*ch* = 9 || *ch* = 11 *ch* = 12 || *ch* = 14 *ch* = '!' || *ch* = '#') {*break*;} *else* *if* (*ch* == '') {state = 8; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 7: *if* (*ch* = 9 || *ch* = 11 *ch* = 12 || *ch* = 14 *ch* = '' || *ch* = '(') {*break*;} *else* *if* (*ch* == 39) {state = 8; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 8: {*t*.kind = 4; *break* loop;} *case* 9: *if* (*ch* = '0' *ch* = '9') {*break*;} *else* *if* (*ch* == '.') {state = 4; *break*;} *else* {*t*.kind = 2; *break* loop;} *case* 10: {*t*.kind = 7; *break* loop;} *case* 11: {*t*.kind = 12; *break* loop;} *case* 12: {*t*.kind = 13; *break* loop;} *case* 13: {*t*.kind = 14; *break* loop;} *case* 14: {*t*.kind = 15; *break* loop;} *case* 15: *if* (*ch* == 'F') {state = 16; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 16: *if* (*ch* == 'I') {state = 17; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 17: *if* (*ch* == 'N') {state = 18; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 18: *if* (*ch* == 'P') {state = 19; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 19: *if* (*ch* == 'E') {state = 20; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 20: *if* (*ch* == 'R') {state = 21; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 21: *if* (*ch* == 'I') {state = 22; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 22: *if* (*ch* == 'O') {state = 23; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 23: *if* (*ch* == 'D') {state = 24; *break*;} *else* {*t*.kind = *noSym*; *break* loop;} *case* 24: {*t*.kind = 19; *break* loop;} *case* 25: {*t*.kind = 27; *break* loop;} *case* 26: {*t*.kind = 28; *break* loop;} *case* 27: {*t*.kind = 29; *break* loop;} *case* 28: {*t*.kind = 30; *break* loop;} *case* 29: {*t*.kind = 0; *break* loop;} } } *t*.str = buf.toString(); *t*.val = *t*.str.toUpperCase(); *return* *t*; } 2011/4/11 Zdeněk Troníček troni...@fit.cvut.cz Ahoj, automat by měl mít číst něco ze vstupu. Nechybí tam někde vstup? Z. -- Zdenek Tronicek FIT CTU in Prague Tomas Studva napsal(a): Dobry den, vedeli by ste si precitat nasledovny program. Nie je to priklad zo skoly ale z praxe. Implementacia stavoveho automatu, kod je stary 10 rokov a samozrejme ze to je len nezmyselny uryvok. state = -1; loop: *for* (;;) { state = state + 1; *switch* (state) { *case* 0: state = 1; break; case 1: state = 0 *break*; case 2: break loop; } } Pre mna to je nieco velmi vynimocne, lebo je tam navestie a tiez ten for. S pozdravom Tomas
Re: Java fór
Tak, tak. Urcite aby ma povodny programator co najviac potrapil :). Je to tak ako pisete, for(;;) je while(true) a break vyskoci iba zo switchu. break look, skoci na navestie. Som zvedavy ake perly ma este cakaju. Inak v dnesnej dobe pisat parser ak sa jedna o nieco zlozitejsie je vhodne pomocou lexem a gramatiky definovanej v nejakom jazyku. 2011/4/11 Robert Novotny robert.novo...@upjs.sk Break z loopu sa da pouzit na vyskocenie z vnorenych cyklov cez viacero urovni. Nie je to nahodou preto, ze klasicky break by vyskocil zo switchu, ale nie z loopu? Otazka je, preco je tam break z poslednej vetvy switchu, ked za nou uz nejde nic? A preco je tam c-ckarsky for(;;) namiesto while(true)? Je pozoruhodne, ze On 11. 4. 2011 16:57, Tomas Studva wrote: Dobry den, vedeli by ste si precitat nasledovny program. Nie je to priklad zo skoly ale z praxe. Implementacia stavoveho automatu, kod je stary 10 rokov a samozrejme ze to je len nezmyselny uryvok. state = -1; loop: *for* (;;) { state = state + 1; *switch* (state) { *case* 0: state = 1; break; case 1: state = 0 *break*; case 2: break loop; } } Pre mna to je nieco velmi vynimocne, lebo je tam navestie a tiez ten for. S pozdravom Tomas
Re: Java fór
Ja ked som potreboval lexer, tak som si ho nechal vygenorovat, lebo bolo treba aj parser (to je aj tento pripad). Ale je to zaujimavy postreh. Myslite jednotlive stavy definovat ako metody? 2011/4/12 Ladislav Thon ladi...@gmail.com Hm, není mi jasné, proč si autor zavádí vlastní stavovou proměnnou, lexer se dá triviálně napsat i bez ní (resp. stavovou proměnnou je program counter), několikrát jsem to tak dělal. A tohle nevypadá jako něco, co by se za dvě hodiny nedalo napsat ručně. LT 2011/4/12 Tomas Studva tstu...@gmail.com Tak, tak. Urcite aby ma povodny programator co najviac potrapil :). Je to tak ako pisete, for(;;) je while(true) a break vyskoci iba zo switchu. break look, skoci na navestie. Som zvedavy ake perly ma este cakaju. Inak v dnesnej dobe pisat parser ak sa jedna o nieco zlozitejsie je vhodne pomocou lexem a gramatiky definovanej v nejakom jazyku. 2011/4/11 Robert Novotny robert.novo...@upjs.sk Break z loopu sa da pouzit na vyskocenie z vnorenych cyklov cez viacero urovni. Nie je to nahodou preto, ze klasicky break by vyskocil zo switchu, ale nie z loopu? Otazka je, preco je tam break z poslednej vetvy switchu, ked za nou uz nejde nic? A preco je tam c-ckarsky for(;;) namiesto while(true)? Je pozoruhodne, ze On 11. 4. 2011 16:57, Tomas Studva wrote: Dobry den, vedeli by ste si precitat nasledovny program. Nie je to priklad zo skoly ale z praxe. Implementacia stavoveho automatu, kod je stary 10 rokov a samozrejme ze to je len nezmyselny uryvok. state = -1; loop: *for* (;;) { state = state + 1; *switch* (state) { *case* 0: state = 1; break; case 1: state = 0 *break*; case 2: break loop; } } Pre mna to je nieco velmi vynimocne, lebo je tam navestie a tiez ten for. S pozdravom Tomas
Java fór
Dobry den, vedeli by ste si precitat nasledovny program. Nie je to priklad zo skoly ale z praxe. Implementacia stavoveho automatu, kod je stary 10 rokov a samozrejme ze to je len nezmyselny uryvok. state = -1; loop: *for* (;;) { state = state + 1; *switch* (state) { *case* 0: state = 1; break; case 1: state = 0 *break*; case 2: break loop; } } Pre mna to je nieco velmi vynimocne, lebo je tam navestie a tiez ten for. S pozdravom Tomas
Re: Rich frontend gwt,zk,flex, pripadne iny
Dakujem za cenne info, k bodu 2, ano ten sampler som pozeral, vsetko sa mi zdalo ok, az na tie tabulky, ale lokalne som to neskusal. Ono to je predsa dost rozdiel keby to bezalo niekde na intranete, co si myslim ze je najvhodnejsie nasadenie a v mojom pripade sa jednalo o intranet. Tomas 2011/3/14 Dusan Msk msk.c...@gmail.com Ahoj, ad 3. ja som pod Vaadin naprogramoval akusi evidenciu skladu. Mne osobne, ako programatorovi webom nedotknutemu Vaadin ohromne vyhovoval, pretoze zamaskoval velke mnozstvo know-how, ktore by som bez neho musel absorbovat. Vyvoj by sa dal prirovnat programovaniu klasickych desktop aplikacii ( mam skusenosti s QT(Jambi), ale v diskusiach som cital, ze je to tak isto ekvivalentne praci so swing-om ), clovek nemusi vobec nic tusit o html, css, javascripte ( aspon na zaciatok ). Vsetka logika aplikacie sa odohrava na serveri, klientsky kod sluzi len ako zobrazovadlo ( co moze v niektorych zlozitejsich pripadoch byt limitujuce kvoli vykonu, ale v realnej situacii o tom dost pochybujem. Koniec koncov pokial je potrebne spracovat nejaku ulohu priamo na klientovi, ta moznost hrabnut priamo na gwt/javascript tam zostava ). Eventy typu klik, mouseover, submit a tak podobne takisto letia priamo na server a obsluhuju sa v Java kode. ad 1 Co sa tyka rychlosti, nedokazem sa fundovane vyjadrit, pretoze moj projekt pouzivaju paralelne 2 ludia. Odporucam si pozriet ich sampler ( http://demo.vaadin.com/sampler/ ) a trochu poklikat, popripade checkoutnut a spustit nejake example aplikacie. Sampler zaroven obsahuje aj zdrojaky jednotlivych ukazok, takze sa da z neho dost inspirovat. Pokial by sme sa bavili o rychlosti tabuliek, strasne zavisi, akym sposobom je implementovany model. Pokial tabulu naplnim milionmi zaznamov, ktore musi klient drzat v pamati, bude sa to dlho nacitavat a praca s tym bude otrasna. Pokial sa spravne pouzije prislusny container, data si klient nacitava postupne a nevyskytuju sa desiatky sekund dlhe lagy. Samozrejme sa od toho neda ocakavat rychlost desktop aplikacie, kedze eventy mozu letiet cez pol sveta, ale to je asi u web aplikacie pochopitelne. ad 2. Flow vaadin aplikacie je odlisny od flow klasickej webovej aplikacie. Bez dodatocneho usilia sa vsetko odohrava v jednom okne na jednej url, pricom je mozne jeho obsah rozne menit. Ja mam napriklad okno rozdelene na 2 polovice, v lavo klasicky strom, kde si uzivatel vybera cinnost, ktoru chce vykonavat ( prezerat zaznamy, vytvorit novy atd ... ), v pravo samotny obsah. Na tomto strome mam obsluzny event, ktory podla toho, na ktory element uzivatel klikol, zmeni obsah pravej polovice okna. Po chvilke tapania si na to clovek spravi nejaku generiku, ktoru potom uz len recykluje. Clovek musi ale absorbovat je fakt, ze vaadin nie je web framework, ale ria framework, defaultne sa odohrava vsetko na jednej URL a bez dodatocnej obsluhy nefunguje back/forward button web browsera a tak podobne ( je to ale riesitelne a popisane vo vaadin book ). Proste vaadin aplikacia je desktop aplikacia v browseri. Urcitym minusom takisto je, ze neexistuje pouzitelny layout designer, takze si clovek musi dost kreslit na papier a potom to pozicovat rucne v java kode. Kedze je to ale silne komponentovo orientovane, tak sa to vacsinou pozicuje len raz a potom sa to akurat recykluje. Takze nejake subjektivne resume - ak o webe clovek nic nevie a ma naprogramovat RIA, ktorej feeling ma blizsie k desktop aplikacii ako k web portalu, vaadin je dobra volba. Pokial to ma byt ale klasicka web aplikacia/portal s webovym flow, bolo by to dost znasilnovania a je lepsie sa poobzerat niekde inde ( wicket? ). Mne ako byvalemu QT-ckarovi vaadin dokonale vyhovoval. -- Dusan Dňa 11. marca 2011 15:46, Tomas Studva tstu...@gmail.com napísal(-a): Dobry den, chcem sa spytat na ten vaadin, kedze s nim mate skusenosti: 1, je to dostatocne rychle? Napr. co som pozeral tabulky, tak tie sa mi zdali nepouzitelne pomale 2, ako sa vo vaadin riesi flow control aplikacie 3, ak sa nemylim, tak vadin ma abstraktnu vrstvu nad gwt, je to tak? Je to lepsie ako priamo pouzit GWT? Inak, naposledy ked som sa na vaadin pozeral, vyzeral ako velmi dobry framework, ale nezahrnal vsetky oblasti ktore by som od frameworku ocakaval. Tomas 2011/3/8 Robert Slama rsl...@spiritline.org a co vaadin ? ten som pouzil na par projektoch a az na nejake drobnosti neboli nejake velke problemy s tym a pokial mas skusenosti so swingom tak to je ako cez kopirak. r^ 2011/3/8 Petr Prikryl peter.prik...@gmail.com: http://www.zive.cz/default.aspx?article=156146 Adobe uz ten compiler ma v public tests. Jinak hodne se da vykouzlit s richfaces prip primefaces, ale nepodarilo se mi oba spojit... PP On 03/08/2011 02:05 PM, Marek wrote: Este som zabudol na dolezity faktor a to biedne vyhliadky pre flash do buducna, vzhladom na kombinaciu JS,html5. Mozno adobe zachrani niejaky compiler z flexu do js
Re: Rich frontend gwt,zk,flex, pripadne iny
Dobry den, chcem sa spytat na ten vaadin, kedze s nim mate skusenosti: 1, je to dostatocne rychle? Napr. co som pozeral tabulky, tak tie sa mi zdali nepouzitelne pomale 2, ako sa vo vaadin riesi flow control aplikacie 3, ak sa nemylim, tak vadin ma abstraktnu vrstvu nad gwt, je to tak? Je to lepsie ako priamo pouzit GWT? Inak, naposledy ked som sa na vaadin pozeral, vyzeral ako velmi dobry framework, ale nezahrnal vsetky oblasti ktore by som od frameworku ocakaval. Tomas 2011/3/8 Robert Slama rsl...@spiritline.org a co vaadin ? ten som pouzil na par projektoch a az na nejake drobnosti neboli nejake velke problemy s tym a pokial mas skusenosti so swingom tak to je ako cez kopirak. r^ 2011/3/8 Petr Prikryl peter.prik...@gmail.com: http://www.zive.cz/default.aspx?article=156146 Adobe uz ten compiler ma v public tests. Jinak hodne se da vykouzlit s richfaces prip primefaces, ale nepodarilo se mi oba spojit... PP On 03/08/2011 02:05 PM, Marek wrote: Este som zabudol na dolezity faktor a to biedne vyhliadky pre flash do buducna, vzhladom na kombinaciu JS,html5. Mozno adobe zachrani niejaky compiler z flexu do js,html5 ale to je len moj nazor. 2011/3/8 Marek ma...@gmail.com mailto:ma...@gmail.com Zdravim, Ktory z vyssie uvedenych frameworkov by ste odporucili na RichUI. Ide o B2B aplikaciu s javovskym backendom, desiatky max stovky uzivatelov. Moje pozorovanie: GWT- vyzera zaujimavo, no vraj strma learning curve - potreba pouzit dalsi widget framework, pre vecsie mnozstvo widgetov - pristupnot na mobiloch Flex- mnozstvo komponentov, vyzera ze sa v tom dobre,efektivne vyvyja, menej strma learning curve - moze byt problem s pristupnostou z mobilov napr. i* - vyssia narocnost flashu oproti javascriptu zaujimalo by ma porovnanie vykonu javascriptu,flashu, z mojich pozorovani je flash v priemere velmi narocny na klientske PC ZK- server side framework, neviem onom vela, nieje taky rozsireny -- M^2 -- M^2 -- Petr Prikryl --- petrprik...@centrum.cz prik...@admin24.cz www.admin24.cz
Java webstart
Dobry den, snazim sa rozbehat tucneho klienta cez java webstart. Podla specifikacie je mozne v jnlp subore nastavit java-vm-args, ale tie su obmedzene a nie je mozne tam nastavit classpath, endorsed dirs ani ext.dirs (jedna sa o rozsirenie tazkeho clienta o nejake IBM ... veci). Zistil som ale ze java webstart aplikaciu mozem spustit z prikazoveho riadka pomocou javaws a tam mozem nastavit vm options cez prepinac -J. Takze som to skusil mam batch file ktory to tam setuje: %JAVA_HOME%\bin\javaws -J-Djava.class.path=%JAVA_CLASSPATH% -J-Djava.endorsed.dirs=%SN_ENDORSED_DIRS% -J-Djava.ext.dirs=%JAVA_EXTENSION_DIRS% url url je samozrejme cesta k jnlp suboru. Vsetko sa zda OK, az na to ze to nefunguje a nikde neviem najst dokumentaciu k javaws a k tomu co je povolena nastavit cez -J. Pravdepodobne je to rovnako obmedzene. Ak niekto mate skusenosti s niecim podobnym prosim o kazdu radu/napad pre distribuciu cez javaws. (runtime sa da predpripravit u klienta aby nebolo potrebne nastavovat taketo veci, ale to nechceme, chceme ho dynamicky konfigurovat) Tomas
Re: Java webstart
Mate pravdu, no rozhodnutie uz padlo, nebolo moje a zasiahne celu firmu. Ale inak napady mate dobre. Tak zatial. 2011/2/24 Ondra Medek xmed...@gmail.com Ano javaws je nekdy spise naobtiz, to zde na konferenci probehlo nekolikrat. Nahradni reseni jsou: 1. napsat si vlastni servlet + client, ktery stahne ze serveru novu verzi a spusti 2. jako 1. ale ten maly client se instaluje pres JWS. Tedy pres JWS nainstalovat jen maleho clienta, ktery stahne vse ostatni a spusti. 2011/2/24 jan_bar herkul...@yahoo.com: In article AANLkTim6kALMdrDJPB_UDUQg_3iTUpW32UAY-0NYA7d7 @mail.gmail.com, tstu...@gmail.com says... Dobry den, snazim sa rozbehat tucneho klienta cez java webstart. Podla specifikacie je mozne v jnlp subore nastavit java-vm-args, ale tie su obmedzene a nie je mozne tam nastavit classpath, endorsed dirs ani ext.dirs (jedna sa o rozsirenie tazkeho clienta o nejake IBM ... veci). Zistil som ale ze java webstart aplikaciu mozem spustit z prikazoveho riadka pomocou javaws a tam mozem nastavit vm options cez prepinac -J. Takze som to skusil mam batch file ktory to tam setuje: %JAVA_HOME%\bin\javaws -J-Djava.class.path=%JAVA_CLASSPATH% -J-Djava.endorsed.dirs=%SN_ENDORSED_DIRS% -J-Djava.ext.dirs=%JAVA_EXTENSION_DIRS% url url je samozrejme cesta k jnlp suboru. Vsetko sa zda OK, az na to ze to nefunguje a nikde neviem najst dokumentaciu k javaws a k tomu co je povolena nastavit cez -J. Pravdepodobne je to rovnako obmedzene. Ak niekto mate skusenosti s niecim podobnym prosim o kazdu radu/napad pre distribuciu cez javaws. (runtime sa da predpripravit u klienta aby nebolo potrebne nastavovat taketo veci, ale to nechceme, chceme ho dynamicky konfigurovat) Tomas Tipoval bych ze to je tim, ze javaws pusti jnlp jako separatni process ktery ma svuj classpath. Schvalne se podivejte na pid javaws a spusteneho procesu. Pokud nemusite, javaws nepouzivejte. Krom omezeni, ktere jste popsal vyse jsou i dalsi, napr. javaws nema classpath tak jak ho znate, ma jen seznam jaru ktere prohledava ve vami neovlivnitelnem poradi (jen v main se hleda driv). Honza -- Ondra Medek
Re: Cim logujete v ee aplikaciach
To ma pobavilo ze plnotucne aplikacne servery :). Filip Jirsák wrote / napísal(a): Zdravím, Logback ( http://logback.qos.ch/) má DBAppender už v základní distribuci, podobně jako SMTPAppender (pošle e-mail), SocektAppender nebo JMSAppender. Možná by vás mohla zajímat i komerční nadstavba Logback-Audit. S pozdravem Filip Jirsák 2010/10/15 msk.conf msk.c...@gmail.com mailto:msk.c...@gmail.com Ahoj. Zaujimalo by ma, cim logujete vo Vasich enterprise systemoch, najma s pohladu na nejaky ten aktivny dohlad nad beziacim prostredim. Vacsina veci, s ktorymi som sa stretol, pouziva nejaky ten log4j a fileAppender-y. To mi pride ako relativne neosobne logovanie s nemoznostou zasahu v rozumnom case. Ja osobne koketujem s myslienkou logovat do sql databaze ( co nie je sice nic vynimocne, aj ked najst pouzitelny sql appender nie je jednoduche ), pricom pridanou hodnotou by mohol byt dohladovy system na tu tabulku zaveseny. Predstavujem si to nejak tak, ze kazdy event s (=warn) by musel byt vyrieseny ludskou interakciou v dohladovom centre ( aj ked by mal dotycny pracovnik len nastavit ignore ) tak, aby sa v tabuli nevyskytovali neriesene chyby. Druha vec, co ma napada je, ze predsa plnotucne aplikacne servery toto uz musia mat nejak poriesene. Kedysi davnejsie som si nejaky sqlappender nakodoval, ale nemam k tomu ten zvysok ( dohlad ), tak robim prieskum, ci nahodou neobjavujem koleso. Inak si to spravim ako take mensie cvicenie ... Diky -- Dusan
Re: Jeden beziaci proces
Mysli Vam to podobne ako mne. Dakujem za vsetky prispevky. Holý Jiří wrote / napísal(a): Flag se musí v db updatovat prostě jinou transakcí. Zároveň se hodí přidat timestamp atribut, do kdy je ten zámek aktivní - v praxi pak spuštěný timer může ten timestamp updatovat (prodlužovat jeho platnost, aby nedošlo k opětovnému spuštění). Podmínkou pro spuštění „nového“ timeru je neexistující zámek, nebo vyexpirovaný (tj. ošetření případu, že server spadne a zámek existuje). Jiří Holý *From:* konference-boun...@java.cz [mailto:konference-boun...@java.cz] *On Behalf Of *Tomas Studva *Sent:* Monday, September 06, 2010 1:24 PM *To:* Java *Subject:* Re: Jeden beziaci proces Asi myslite explicitny DB zamok. To sa mi nezda celkom idealne, lebo taky zamok je viazany na tranzakciu a teda ta by musela byt otvorena po celu dobu. Tomuto som sa vyhol, lebo sa neda zarucit dlzka behu toho procesu, v zlom pripade to moze bezat aj 30 minut. No na druhej strane, nemam ziadne ine proti :). Moje riesenie cez flag teda stlpec v tabulke ma inu nevyhodu, ktora je ale ovela viacej bolestivejsia. Ked sa restartne server alebo vypadne elektrina pocas behu procesu, tak sa flag nezmeni na false. Dakujem, zvazim to. 2010/9/6 Kamil Podlesak kamil.podle...@gmail.com mailto:kamil.podle...@gmail.com Dobrý den, Zámek v databázi má výhody: - bude fungovat i v clusteru - lze ho sledovat administračními nástroji databáze a případně i násilně zrušit Kamil Podlešák 2010/9/6 Tomas Studva tstu...@gmail.com mailto:tstu...@gmail.com: Dobry den, v nasej aplikacii mame periodicky spustany proces. Tento proces je schedulovany Jbossom, a moze trvat od niekolko sekund az po niekolko minut. Spustany je asi kazde tri minuty. Potrebujem zarucit aby bezal iba 1 na celom servery. Momentalne to riesim flagom v databaze, ak je flag true, tak proces sa hned ukonci. Chcem sa spytat, ci nie je aj jednoduchsie riesenie a ako by to bolo s implementaciou. Ten zamok naozaj suvisi s datami, teda s databazou a aplikaciou. Ako druhe riesenie mi napada lockovat sa na nejakom objekte v aplikacii. Tomas Studva
Jeden beziaci proces
Dobry den, v nasej aplikacii mame periodicky spustany proces. Tento proces je schedulovany Jbossom, a moze trvat od niekolko sekund az po niekolko minut. Spustany je asi kazde tri minuty. Potrebujem zarucit aby bezal iba 1 na celom servery. Momentalne to riesim flagom v databaze, ak je flag true, tak proces sa hned ukonci. Chcem sa spytat, ci nie je aj jednoduchsie riesenie a ako by to bolo s implementaciou. Ten zamok naozaj suvisi s datami, teda s databazou a aplikaciou. Ako druhe riesenie mi napada lockovat sa na nejakom objekte v aplikacii. Tomas Studva
Re: Jeden beziaci proces
Asi myslite explicitny DB zamok. To sa mi nezda celkom idealne, lebo taky zamok je viazany na tranzakciu a teda ta by musela byt otvorena po celu dobu. Tomuto som sa vyhol, lebo sa neda zarucit dlzka behu toho procesu, v zlom pripade to moze bezat aj 30 minut. No na druhej strane, nemam ziadne ine proti :). Moje riesenie cez flag teda stlpec v tabulke ma inu nevyhodu, ktora je ale ovela viacej bolestivejsia. Ked sa restartne server alebo vypadne elektrina pocas behu procesu, tak sa flag nezmeni na false. Dakujem, zvazim to. 2010/9/6 Kamil Podlesak kamil.podle...@gmail.com Dobrý den, Zámek v databázi má výhody: - bude fungovat i v clusteru - lze ho sledovat administračními nástroji databáze a případně i násilně zrušit Kamil Podlešák 2010/9/6 Tomas Studva tstu...@gmail.com: Dobry den, v nasej aplikacii mame periodicky spustany proces. Tento proces je schedulovany Jbossom, a moze trvat od niekolko sekund az po niekolko minut. Spustany je asi kazde tri minuty. Potrebujem zarucit aby bezal iba 1 na celom servery. Momentalne to riesim flagom v databaze, ak je flag true, tak proces sa hned ukonci. Chcem sa spytat, ci nie je aj jednoduchsie riesenie a ako by to bolo s implementaciou. Ten zamok naozaj suvisi s datami, teda s databazou a aplikaciou. Ako druhe riesenie mi napada lockovat sa na nejakom objekte v aplikacii. Tomas Studva
Re: Jeden beziaci proces
Jboss interne pouziva Quartz, nabuduce pouzijem priamo quartz. Teraz sa mi to neche menit a ani na to nie je cas. 2010/9/6 Rastislav Siekel sie...@prosoft.sk Na toto používam Quartz - http://www.quartz-scheduler.org/. Výlučnosť na jeden bežiaci proces sa nastavuje v konfigurácii ako: property name=quartzProperties props prop key=org.quartz.threadPool.threadCount 1 /prop /props /property Rastislav Bedo Siekel -- Ing. Rastislav Siekel Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia E-mail : sie...@prosoft.sk sie...@prosoft.sk Tel : 041/562 54 91 Fax : 041/562 54 97 Mobil : 0905 34 00 20 On 6. 9. 2010 11:56, Tomas Studva wrote: Dobry den, v nasej aplikacii mame periodicky spustany proces. Tento proces je schedulovany Jbossom, a moze trvat od niekolko sekund az po niekolko minut. Spustany je asi kazde tri minuty. Potrebujem zarucit aby bezal iba 1 na celom servery. Momentalne to riesim flagom v databaze, ak je flag true, tak proces sa hned ukonci. Chcem sa spytat, ci nie je aj jednoduchsie riesenie a ako by to bolo s implementaciou. Ten zamok naozaj suvisi s datami, teda s databazou a aplikaciou. Ako druhe riesenie mi napada lockovat sa na nejakom objekte v aplikacii. Tomas Studva
Re: Modulární aplikace
Zdravim, my pouzivame tiez myslienku cislo jedna, teda dotazy vo forme in obmedzeni. Tie in obmedzenia, kym sa nejedna o tisicky idciek su uplne vpohode. Ale mame aj vinimku, mame totiz modul, ktory potrebuje citat udaje z mnohych modulov naraz a ma vselijake svoje obmedzenia. Konkretne tento modul exportuje data do ineho systemu a bol navrhnuty genericky. S pomocou malej konfiguracie sa da rozsirit export, niekedy vsak to nejde, lebo su tam nejake podmienky, takze sa napise sql. Exportuju sa cele siete objektov. Ak by to malo byt modularne, tak kazdy modul by mal exportovat svoje data, svoju siet. No to by chcelo ovela viacej premysleny navrch, kedze exportovane udaje nie su cela DB, ale cielom je exportovat mininum dat a dba sa na performanciu, robia sa teda aj joiny medzi modulmi. Cize kedze tento Export robi iba citanie, tak ma dovolene sahat do lubolnej tabulky. Ale tym ze modul ma vsetky query u seba, vznika aj duplicita niektorych dotazov, no nie je toho vela. Zaver z tohoto prikladu znie, ze moze nastat pripad, ked by sa implentacia stazila resp. aj znizila performancia pri dodrzani modularneho dizajnu, ak by sa dobre nepremyslel dizajn. 2010/9/2 Ing. Jan Novotný novotn...@gmail.com Ahoj, my jedeme na modulárním systému asi 2 roky (s tím rozdílem, že nemáme OSGI, ale jen zřetězené aplikační konexty Springu na stejné classpath - nicméně už to k zavedení modulárnosti stačí). Řešili jsme stejný problém a obávám se, že neexistuje ideální řešení. Základní pravidlo spočívá ve správném řezu modulů - každý by měl mít jednoznačnou odpovědnost a funkci. Moduly by se měly vzájemně doplňovat spíš než ve funkcionalitách překrývat. Prostě příliš malé moduly nejsou dobré, protože mají potom mnoho závislostí ven, velké moduly také nejsou dobré, protože se tím zase snižuje jejich použitelnost. Na správném řezu funkcionalitou prostě záleží hodně. Pokud by jeden modul sahal do dat jiného modulu přímo a nikoliv přes jeho API povede toto porušení zapouzdřenosti k: svázanosti (couplingu) těchto dvou modulů, zhoršení testovatelnosti, problém se samostatným rozvojem modulů (vždy se na ně bude muset pohlížet jako na nějaký provázaný celek). My jsme došli ke dvěma možným technikám v těchto případech (naštěstí těch případů není zase až tak moc). 1) obětování výkonu - tj. každý modul udržuje pouze svá data a pokud z nějakého důvodu potřebuje vrátit či pracovat s daty jiného modulu, jde přes jeho API - tím se ale samozřejmě nedá využít JOINů a platíme výkonem. Tyto mezimodulové dotazy se alespoň snažíme optimalizovat na metodách API tím, že tam máme metody pro hromadné načítání dat - např. ListData getDataById(Integer... id), která může všechna potřebná data načít jednorázově přes WHERE id in (...) 2) porušením normální formy db - kromě přímého volání mezi moduly na úrovni API máme ještě jednu formu komunikace postavenou na observer patternu, která vychází ze Springu, tj. moduly v důležitých okamžicích své funkcionality publikují tzv. eventy do systému, na které pak mohou reagovat listenery v jiných modulech. Tímto způsobem je možné distribuovat některá důležitá (i agregovaná) data do zbytku systému. Uvedu příklad - máme tzv. hodnotící modul, který umožňuje hodnotit libovolný obsah kdekoliv (např. ve formě hvězdiček na nějaké škále), tento modul samozřejmě o obsahu samotném nic neví - naopak jiný modul, který spravuje daný obsah (třeba články) chce při vracení článku vracet aktuální hodnotu průměrného hodnocení. Hodnotící modul vždy po přepočtení aktuálního hodnotícího čísla po daný obsah vyhodí událost do systému, na kterou může kterýkoliv jiný modul naslouchat. Modul starající se o články tuto událost odchytí a k článku si uloží dodatečný údaj o aktuálním hodnocení (již vypočtený, hotový k zobrazení). Tímto způsobem je porušena normální forma - jeden údaj je v DB uložen 2x, nicméně data jsou potom již hezky po ruce (bez výkonnostní penalizace) a nedochází k narušení zapouzdřenosti modulů - jeden může bez problému fungovat bez druhého, pokud běží oba - spolupracují. Pokud existuje ještě nějaký jiný způsob komunikace rád se jej dozvím. Jak říkám, ani jedna z výše uvedených praktik není úplně ideální, ale na nic lepšího jsme za ty roky nepřišli :(. Honza -- -- Ing. Jan Novotný @@ http://blog.novoj.net Myšlenky dne otce Fura -- 2010/9/1 David Mach m...@alis.cz Zdravím všechny! V naší firmě jsme doposud vyvíjeli klasické aplikace na jedné classpath (typu vidím vše, volám vše, využívám vše, čili občas pěkná prasárna). Nyní vyvíjíme novou modulární aplikaci postavenou na OSGi, přičemž naše původní vize byla ta, že jednotlivé moduly mezi sebou budou komunikovat výhradně prostřednictvím API. To by ale například znamenalo, že pro získání dat z modulu A (která potřebuji
Re: Modulární aplikace
Mate pravdu, no upozornim este na porovnanie join vs in z pohladu performancie. Potencionalny problem in dotazov moze byt, ak by sa databaza rozhodla prechadzat tabulku sekvencne namiesto pouzitia indexu. Ten index tam urcite je, kedze sa jedna o foreign key. Popravde ale ocakavam, ze na sekvencne citanie sa prejde iba ak rozsah ocakavaneho vysledku bude velky (skoro cela tabulka) a teda performancia bude vychadzat narovnako. Na Vasom mieste by som spravil test na databaze, ktoru budete pouzivat s nejakymi rozumne velkymi tabulkami s nejakym beznym query. Staci to spravit z konzoly, netreba z aplikacie. Tomas Studva Oto Buchta wrote / napísal(a): Při návrhu modulární architektury je třeba brát na zřetel jiná možná použití dat z konkrétního modulu a umožnit zásuvné či rozšiřující submoduly do střev každého modulu. Jestli se použije vzor Listener, Observer a nebo eLISPové hooky je celkem buřt. Potom není nutné si tolik hrát s API, jenom nechat data uvnitř modulu bezpečně (myšleno odolně proti nekonzistencím dat) a správně (dva klíčové termíny Hrubozrnný a Volná vazba) protékat přes ony pluginy. Není ale potřeba se nějak dramaticky zaobírat bezpečností (myšleno přístupovými právy), neboť každý modul bude mít VŽDY možnost sáhnout si do DB ;-) 2010/9/2 Tomas Studva tstu...@gmail.com: Ale mame aj vinimku, mame totiz modul, ktory potrebuje citat udaje z mnohych modulov naraz a ma vselijake svoje obmedzenia. Konkretne tento modul exportuje data do ineho systemu a bol navrhnuty genericky. Toto je typický kámen úrazu návrhu modulárních systémů. Generický modul může přímo záviset na zase jen na generických modulech. Pokud chcete v generickém modulu volat něco z negenerického modulu, musíte použít nějaký metajazyk, kterým se deklarativně (typicky pomocí konfigurace) na něj či do něj dostanete. S pomocou malej konfiguracie sa da rozsirit export, niekedy vsak to nejde, lebo su tam nejake podmienky, takze sa napise sql. Exportuju sa cele siete objektov. Ak by to malo byt modularne, tak kazdy modul by mal exportovat svoje data, svoju siet. No to by chcelo ovela viacej premysleny navrch, kedze exportovane udaje nie su cela DB, ale cielom je exportovat mininum dat a dba sa na performanciu, robia sa teda aj joiny medzi modulmi. Cize kedze tento Export robi iba citanie, tak ma dovolene sahat do lubolnej tabulky. Ano, SQL se typicky jako metajazyk pro přístp do negenerických modulů používá a pak zde opravdu není problém. Typické nasazení je právě pro statistiky. Exporty bych se snažil řešil jinak a ideálně via pes Partes až na konec kompletace. Export miliónů záznamů se asi nebude dělat každou minutu a každou minutu se nebude dělat export miliónů záznamů, takže tím pádem JOINy určitě oželím. Ale tym ze modul ma vsetky query u seba, vznika aj duplicita niektorych dotazov, no nie je toho vela. V tomto problém nevidím. Implementátor při konfiguraci ví, jaké verze negenerických modulů používá a může tedy separátně nastavit dotazy. Zaver z tohoto prikladu znie, ze moze nastat pripad, ked by sa implentacia stazila resp. aj znizila performancia pri dodrzani modularneho dizajnu, ak by sa dobre nepremyslel dizajn. Tak toto je téměř tautologie ;-) 2010/9/2 Ing. Jan Novotný novotn...@gmail.com Ahoj, my jedeme na modulárním systému asi 2 roky (s tím rozdílem, že nemáme OSGI, ale jen zřetězené aplikační konexty Springu na stejné classpath - nicméně už to k zavedení modulárnosti stačí). Řešili jsme stejný problém a obávám se, že neexistuje ideální řešení. Základní pravidlo spočívá ve správném řezu modulů - každý by měl mít jednoznačnou odpovědnost a funkci. Moduly by se měly vzájemně doplňovat spíš než ve funkcionalitách překrývat. Prostě příliš malé moduly nejsou dobré, protože mají potom mnoho závislostí ven, velké moduly také nejsou dobré, protože se tím zase snižuje jejich použitelnost. Na správném řezu funkcionalitou prostě záleží hodně. Pokud by jeden modul sahal do dat jiného modulu přímo a nikoliv přes jeho API povede toto porušení zapouzdřenosti k: svázanosti (couplingu) těchto dvou modulů, zhoršení testovatelnosti, problém se samostatným rozvojem modulů (vždy se na ně bude muset pohlížet jako na nějaký provázaný celek). My jsme došli ke dvěma možným technikám v těchto případech (naštěstí těch případů není zase až tak moc). 1) obětování výkonu - tj. každý modul udržuje pouze svá data a pokud z nějakého důvodu potřebuje vrátit či pracovat s daty jiného modulu, jde přes jeho API - tím se ale samozřejmě nedá využít JOINů a platíme výkonem. Tyto mezimodulové dotazy se alespoň snažíme optimalizovat na metodách API tím, že tam máme metody pro hromadné načítání dat - např. ListData getDataById(Integer... id), která může všechna potřebná data načít jednorázově přes WHERE id in (...) 2) porušením normální formy db - kromě přímého volání mezi moduly na úrovni API máme ještě jednu formu komunikace postavenou na observer patternu, která vychází ze Springu
Re: Zkušenosti s Apache Wicket
Martin Kuba wrote / napísal(a): Jak tak čtu tuhle diskuzi, tak mi přijde, že se potvrzuje stará pravda o tom, že HTML bylo navrženo pro dokumenty, ne pro aplikace. Tak to je uplna pravda, az na to ze to casom prestava viac a viac platit, vid HTML 5. Sice jsem to sám nezkoušel, ale pro skutečné aplikace s bohatým GUI na webu mi přijde lepší použít skutečné aplikační prostředí, totiž Flex. Pak aplikace běží ve Flash pluginu, který sice v polovině 90. let byl navržen pro animovanou vektorovou grafiku, ale postupem doby se z něj stala platforma velmi podobná Javě, s bajtkódem, garbage collection a silným typováním v ActionScriptu. Zatím hledám nějakou komplikovanou aplikaci, abych měl důvod si ho vyzkoušet naostro. Nicméně pokud bych takovou našel, dal bych rozhodně přednost Flexu před AJAXem, protože v JavaScriptu jsem si už své odprogramoval, a vždycky s ním byly jenom problémy. Makub Aj ja mam podobny nazor vyhybat sa javascriptu. A este bvy som dodal, ze urcite nerobit priamo s javascriptom a HTML, aj koli nekompatibilite. Mne to pripomina programovanie v C - tiez bolo vela kompilatorov ako je vela browserov a kazdy sa spraval mierne odlisne. To je podla mna uplne zakladny problem, ktory v dnesnej dobe uz skoro vsetci musime riesit.
Re: Zkušenosti s Apache Wicket
S tym GWT je to zlozitejsie, lebo GWT nie je framework ale toolkit. GWT riesi iba komponenty pre zobrazovanie a ich model a par veci okolo. Ked v tom clovek chce nieco webove, tak ku GWT podla mna je potrebny nejaky dalsi framework. Mna celkom zaujal ExtGWT, ale ten je momentalne naskodu plateny. Celkom ma zaujima, ze ci ste to s niecim integrovali? Chcel by som sa tiez opytat, ze ci v GWT pouzivate prechody medzi strankami , t.j. take klasicke redirecty a ci to nesposobuje problemi s dlhym loadovanim js kniznic na klientovi? Ak viete o nejakych klasickych webovych aplikaciach napisanych v GWT, ktore by som si mohol ako pouzivatel pozret, tak budem vdacny za link. Ladislav Thon wrote / napísal(a): Ahoj, Zkuste Google Web Toolkit. GWT je určitě super, ale IMHO to má ještě do produktivity ostatních frameworků daleko. Nicméně, pro všechny, kdo mají o GWT zájem, jako _naprostou_nutnost_ považuju tuhle přednášku: http://code.google.com/intl/cs-CZ/events/io/2009/sessions/GoogleWebToolkitBestPractices.html Její obdobu jsem slyšel na letošním Google DevDayi a opravdu, kdybychom tohle slyšeli o pár let dřív, naše aplikace v GWT by vypadala (zevnitř, pochopitelně) mnohem líp. I když postupem času jsme se dopracovali k věcem, které tyhle best practices aspoň trochu vzdáleně připomínají. LT
Re: Ako zabranit Castor XML escapingu
Dakujem za nasmerovanie. Serializer, ktory sa podhodi Castorovi sa da nakonfigurovat pomocou formatu: OutputFormat format = new OutputFormat(Method.XML, UTF-8, true); String[] cdata = {contentBefore, contentAfter, content}; format.setCDataElements(cdata); format.setNonEscapingElements(cdata); // Those elements should NOT be escaped.. Ja vlastne ani nechcem aby som tam mal tie CData uzly, cize relevatne bude nastavit tie elementy iba ako non-escaping. Musim to vyskusat. 2009/8/11 Petr Prochazka petrpro...@gmail.com Castor nepouzivam, ale poohledl bych se v dokumentaci po CDATA marshalling Petr Prochazka 2009/8/11 Tomas Studva tstu...@gmail.com Dobry den, pouzivam Castor na serializaciu objektov do XML a jeden z atributov objektu je String. Tento string je XML. Ako sa da ocakavat castor to za string povazuje a tak vy-escapuje vsetky xml znaky. Z p sa stane lt;pgt;. Ja sa snazim tomu zabranit a neviem na to prist ako. Co som pozeral na nete, tak Castor nie co take nepodporuje. Tomas Studva
Re: Ako zabranit Castor XML escapingu
Nie som si celkom isty s tou validitou. Podla mna to validne moze byt, len zalezi od schemy, ale to je jedno, lebo ja to nechcem validovat. Tomas 2009/8/12 Jiří Mareš jiri.ma...@svt.cz No obavam se, ze to jinak, nez vlozit do CDATA elementu nepujde, protoze to pak neni validni XML :-( S pozdravem Tomas Studva napsal(a): Dakujem za nasmerovanie. Serializer, ktory sa podhodi Castorovi sa da nakonfigurovat pomocou formatu: OutputFormat format = new OutputFormat(Method.XML, UTF-8, true); String[] cdata = {contentBefore, contentAfter, content}; format.setCDataElements(cdata); format.setNonEscapingElements(cdata); // Those elements should NOT be escaped.. Ja vlastne ani nechcem aby som tam mal tie CData uzly, cize relevatne bude nastavit tie elementy iba ako non-escaping. Musim to vyskusat. 2009/8/11 Petr Prochazka petrpro...@gmail.com mailto:petrpro...@gmail.com Castor nepouzivam, ale poohledl bych se v dokumentaci po CDATA marshalling Petr Prochazka 2009/8/11 Tomas Studva tstu...@gmail.com mailto:tstu...@gmail.com Dobry den, pouzivam Castor na serializaciu objektov do XML a jeden z atributov objektu je String. Tento string je XML. Ako sa da ocakavat castor to za string povazuje a tak vy-escapuje vsetky xml znaky. Z p sa stane lt;pgt;. Ja sa snazim tomu zabranit a neviem na to prist ako. Co som pozeral na nete, tak Castor nie co take nepodporuje. Tomas Studva -- Jiří Mareš (mailto:jiri.ma...@svt.cz) ČSAD SVT Praha, s.r.o. (http://www.svt.cz) Czech Republic
Re: Ako zabranit Castor XML escapingu
Dobra poznamka, mozno aj je ten pozadavek divny. Vytvaram pdf report pomocou XSLT, tento report je zavisli na datach z tych marschallovanych objektov. Vtip je vtom, ze jeden ten objekt je dokument obsahujuci HTML. Toto HTML je nutne tiez preformatovat do FO, aby vo vyslednom pdf, bol formatovany text namiesto HTML. Teda ano, pouzivam tu property na doplnenie vysledneho XML o dalsie tagy. Je mi jasne, ze by sa to HTML dalo formatovat samostatne a potom priamo embednut do toho FO dokumentu, no zda sa mi to komplikovanejsie. Tomas 2009/8/12 Tomas Hubalek tomas.huba...@onsemi.com Celkove se mi ten pozadavek zda nejaky divny. To pouzivate tu String property na doplneni vysledneho XML o nejake dalsi uzly? Nebo proc nechcete escapovat obsah toho stringu? Tom -- *From:* konference-boun...@java.cz [mailto:konference-boun...@java.cz] *On Behalf Of *Tomas Studva *Sent:* Wednesday, August 12, 2009 10:12 AM *To:* Java *Subject:* Re: Ako zabranit Castor XML escapingu Dakujem za nasmerovanie. Serializer, ktory sa podhodi Castorovi sa da nakonfigurovat pomocou formatu: OutputFormat format = new OutputFormat(Method.XML, UTF-8, true); String[] cdata = {contentBefore, contentAfter, content}; format.setCDataElements(cdata); format.setNonEscapingElements(cdata); // Those elements should NOT be escaped.. Ja vlastne ani nechcem aby som tam mal tie CData uzly, cize relevatne bude nastavit tie elementy iba ako non-escaping. Musim to vyskusat. 2009/8/11 Petr Prochazka petrpro...@gmail.com Castor nepouzivam, ale poohledl bych se v dokumentaci po CDATA marshalling Petr Prochazka 2009/8/11 Tomas Studva tstu...@gmail.com Dobry den, pouzivam Castor na serializaciu objektov do XML a jeden z atributov objektu je String. Tento string je XML. Ako sa da ocakavat castor to za string povazuje a tak vy-escapuje vsetky xml znaky. Z p sa stane lt;pgt;. Ja sa snazim tomu zabranit a neviem na to prist ako. Co som pozeral na nete, tak Castor nie co take nepodporuje. Tomas Studva
Re: Ako zabranit Castor XML escapingu
To sa nemoze stat, lebo to HTML je XHTML a je well-formed. 2009/8/12 Podlesak Kamil kamil.podle...@ips-ag.net Asi nebyla míněna skutečná validita, ale well-formedness. Neboli, co když tam budete mít neuzavřené elementy? A nebo, co je pravděpodobnější, nějaké nevyescapované znaky ( ) nebo třeba i nepovolené znaky v názvech elementů? A nebo nepovolené znaky normálně v textu? Kamil Podlešák -Original Message- *From:* konference-boun...@java.cz [mailto:konference-boun...@java.cz]*on Behalf Of *Tomas Studva *Sent:* Wednesday, August 12, 2009 11:28 AM *To:* Java *Subject:* Re: Ako zabranit Castor XML escapingu Nie som si celkom isty s tou validitou. Podla mna to validne moze byt, len zalezi od schemy, ale to je jedno, lebo ja to nechcem validovat. Tomas 2009/8/12 Jiří Mareš jiri.ma...@svt.cz No obavam se, ze to jinak, nez vlozit do CDATA elementu nepujde, protoze to pak neni validni XML :-( S pozdravem Tomas Studva napsal(a): Dakujem za nasmerovanie. Serializer, ktory sa podhodi Castorovi sa da nakonfigurovat pomocou formatu: OutputFormat format = new OutputFormat(Method.XML, UTF-8, true); String[] cdata = {contentBefore, contentAfter, content}; format.setCDataElements(cdata); format.setNonEscapingElements(cdata); // Those elements should NOT be escaped.. Ja vlastne ani nechcem aby som tam mal tie CData uzly, cize relevatne bude nastavit tie elementy iba ako non-escaping. Musim to vyskusat. 2009/8/11 Petr Prochazka petrpro...@gmail.com mailto:petrpro...@gmail.com Castor nepouzivam, ale poohledl bych se v dokumentaci po CDATA marshalling Petr Prochazka 2009/8/11 Tomas Studva tstu...@gmail.com mailto:tstu...@gmail.com Dobry den, pouzivam Castor na serializaciu objektov do XML a jeden z atributov objektu je String. Tento string je XML. Ako sa da ocakavat castor to za string povazuje a tak vy-escapuje vsetky xml znaky. Z p sa stane lt;pgt;. Ja sa snazim tomu zabranit a neviem na to prist ako. Co som pozeral na nete, tak Castor nie co take nepodporuje. Tomas Studva -- Jiří Mareš (mailto:jiri.ma...@svt.cz) ČSAD SVT Praha, s.r.o. (http://www.svt.cz) Czech Republic
Ako zabranit Castor XML escapingu
Dobry den, pouzivam Castor na serializaciu objektov do XML a jeden z atributov objektu je String. Tento string je XML. Ako sa da ocakavat castor to za string povazuje a tak vy-escapuje vsetky xml znaky. Z p sa stane lt;pgt;. Ja sa snazim tomu zabranit a neviem na to prist ako. Co som pozeral na nete, tak Castor nie co take nepodporuje. Tomas Studva
Re: Kedy dojde k odstraneniu objektu?
Ahoj, podla mna uz z vasho testovania vyplynulo, ze gc si da namahu uvolnit pamat co i len aj po jednom objekte - pripad ked ste nastavil f na null. Ja som skusil nastavit s na null a dopadlo to podla ocakavania, gc zrusil s aj obsiahnute s.foo. Povedat ze gc uvolnuje lokalne premenne metod az po opusteni metody je hlupost, lebo potom pamatovo narocne metody by zjedli pamat aj keby uvolnovali referencie. A tak som skusil toto: System.out.println(start); { // vytvorim Foo Foo f = new Foo(null); // vytvorim pole Stuff Stuff[] theStuffs = new Stuff[100]; for (int i = 0; i theStuffs.length; i++) { theStuffs[i] = new Stuff(); } } // tu uz neexistuje nic while ( true ) { System.out.println(aaa); Runtime.getRuntime().gc(); try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Samozrejme ze gc pracoval a finalizoval. Trochu srandovny bol vystup niekde v strede: finalize Stuff finalize Stuff finalize StuffException in thread main java.lang.OutOfMemoryError: Java heap space at java.lang.ref.Finalizer.register(Unknown Source) at java.lang.Object.init(Object.java:20) at Foo.init(Foo.java:6) at Stuff.init(Stuff.java:3) at Stuff.main(Stuff.java:18) finalize Foo finalize Foo Nebudem to analyzovat, lebo to nebol vhodny priklad, pole je predsa nieco ine ako lokalne premenne. Spravny priklad by bol vytvorit tu metodu s naozaj desattisickami lokalnych premennych(cez makro by to slo). T.S.
Re: Kedy dojde k odstraneniu objektu?
To kedy sa dealokovalo f, zaviselo od velkosti pola, cize ci sa este pred cyklom automaticky spustilo gc. Treba si vsak uvedomit ze kompilator nemoze takmer vobec ovplyvnit dealokaciu - ak by bol predposledny prikaz bloku volanie nejakej metody, tak uz nik nevie co sa stalo. Nejako vsak ten gc vie ze na f uz nic neukazuje, alebo je v inej generacii ako stuff. Napada mi reference counting, ale to sa zevraj nepouziva v gc-ckach (viem ale ze ref-count. napr. pouziva Cocoa). Zdenek Tronicek wrote / napísal(a): Ja jsem popisoval, jak se chova JVM za normalnich podminek. V okamziku, kdy zacne dochazet pamet, zacne JVM drsne optimalizovat. A ze to umi, lze videt na tomto prikladu (z Vaseho kodu jsem vypustil blok): System.out.println(start); // vytvorim Foo Foo f = new Foo(null); // vytvorim pole Stuff Stuff[] theStuffs = new Stuff[10]; for (int i = 0; i theStuffs.length; i++) { theStuffs[i] = new Stuff(); } // nez se dojde sem, je po objektu f while (true) { System.out.println(aaa); Runtime.getRuntime().gc(); try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } Na mem pocitaci dojde k dealokaci objektu f jeste drive, nez se vstoupi do smycky while. Jak k tomu muze dojit? Java neco takoveho neumoznuje, jde ciste o optimalizaci JVM. Mimochodem, myslim, ze tohle je na hranici toho, co jeste lze delat, protoze kdyby nejaky program spolehal na to, ze objekt nemuze byt dealokovan pred koncem platnosti promenne f (tj. pred koncem metody), nebude fungovat. Pokud jde o ty lokalni promenne, tak ve vypise javap je jejich pocet za retezcem Locals= a po dobu vykonavani metody se tato hodnota nemeni. Z.T.
Re: jsf ukladani stavu
Podla mna dobra otazka. Co nik nepouziva JSF? Je to koli efektivnosti. Serializacia/desarializacia je rychla operacia. Usetri sa citanie z DB + business processing + nejaky controller processing. Jasne ze musia prist so strankou data, ale ono je to inak. Totiz cele sa to deje koli tomu aby to malo pekny model: http://java.sun.com/javaee/5/docs/tutorial/doc/bnaqq.html. To co je dolezite su eventy. Napr: pre vznik valueChange udalosti potrebujeme poznat novu a staru hodnotu. Teda inymi slovami je nutne ziskat view v takom stave ako bolo pred renderovanim(noo mozno nie celkom vtedy) a potom aplikovat requesty (neviem presne co to znamena), validovat, aplikovat zmeny na view. K tej druhej otazke. Uklada sa stav vsetkych komponet v strome a teda sa aj cely stav obnovi. Pod stavom sa mysli data + property. Preco len nie nejake data? No preto ze to view treba cele, no a teraz sa zamyslite je to 1:1 aj v pripade celkom statickej stranky(co sa vlastne nikdy neda predpokladat). A ze preco je to cele takto - lebo to prebrali z asp.net. K tejto teme by som este podotkol, ze ked sa view definuje dynamicky si treba davat pozor(na co to nepoviem :)). Pavel Savara wrote / napísal(a): Zdravím Mám asi uplně hloupou otázku, ale nevím si s ní rady. Proč jsf ukládá stav component tree at už do sesny nebo na klienta proč ho prostě nemůže vytvořit znovu? Vzdyť na serveru ta stranka je data taky, ty vetsinou stejne prijdou se stránkou nové tak proč ta kreč to serializovat a posílat tam a zpátky? A když už je někdy potřeba pamatovat si nějaké data proč ne jenom hodnoty které jsou potřeba proč celý strom? Dik Pavel
Re: Code-Behind
Suhlasim s Pertrom. Je vsak dalsi pohlad na vec a to vykon(pamat, cpu, up/down strem) klienta. Ak ho spravne vyuzijeme mozeme obsluzit viac klientov alebo s rychlejsou odozvou. Vid http://www.tibco.com/devnet/resources/gi/3_5/doc/html/wwhelp/wwhimpl/js/html/wwhelp.htm?href=tib_gi_getting_started/gs.4.4.htm . A ria mozu su ciastocne adresovatelne, resp. mohli by byt aj uplne adresovatelne. U GWT sa to vola history management vid: http://gwt.google.com/samples/KitchenSink/KitchenSink.html Petr Gola wrote / napísal(a): Článek jsem nečetl, reaguji jen na poslední příspěvěk. Ano, plně adresovatelný web je výhodou. Já jsem jednoznačně jeho příznivcem. Ale osobně se domnívám, že boom aplikací v prohlížeči je v jejich přístupnosti, okamžité použitelnosti. Internetový prohlížeč tvoří jakousi jednotnou platformu (v rámci možností). Není třeba nic instalovat, některé prohlížeče navíc běží pod všemi operačními systémy :) ... On 26/10/2007, Martin Kuba [EMAIL PROTECTED] wrote: Jozef Babjak wrote: Velmi odporucam vsetkym, co sa aktivne zapojili do tohto threadu (a aj vsetkym inym, samozrejme) toto: http://www.theserverside.com/news/thread.tss?thread_id=47213 Přečetl jsem si ten článek celý, a ačkoliv jejich analýza je celkem přesná a zvlášť historický exkurz Microsoft versus lidstvo je zcela trefný, s jejich závěry nesouhlasím. V podstatě doporučují návrat od ultra-thin HTML klientů k rich klientům, nebo jinými slovy od HTML dokumentů zpět k aplikacím běžícím na klientech. Jenomže to IMHO povede k jedné věci, kterou brutálně demonstrují aplikace typu http://www.tipcars.cz/ - web přestane být adresovatelný. Už nepůjde někomu poslat URL na položku ze seznamu, která se mi líbí, protože žádné URL už mít nebude. Už to bude jenom určitý client-side stav v aplikaci, který nemá adresu a je nepřenosný. Můj skromný názor je, že pokud by měli pravdu, tak by si lidé místo prohlížení webových stránek stahovali a pouštěli aplikace pro MS-Windows, protože ty má stejně 99% lidí před sebou. Jenže existují dva druhy aplikací. V jedněch opravdu nepotřebuji mít možnost si poznamenat stav - například čtení pošty přes GMail. A pak jsou aplikace, kdy bych si nějaký stav uložit chtěl, třeba právě na tipcars.cz bych si moc chtěl uložit odkaz na konkrétní auto, ale nemůžu, když je to aplikace a ne HTML dokument. Takže rich klienti se hodí jen pro první druh aplikací, pro druhý typ ne. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: [EMAIL PROTECTED] Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: Code-Behind
O asp.net asi tolko: 1, Asp.net je UI komponentovo orientovane(ako swing), okrem toho obsahuje aj nevisualne komponenty, to je fajn lebo s komponentami sa dobre robi. Teda pracuje sa s komponentami a nie s nejakym hlupym HTML. Tie sa vedia renderovat rovnako v roznych prehliadacoch, viazat na data, definovat vzhlad - proste klasika, napajame na ne kontroler. 2, Asp sa mi nezda ukecane. Vela veci sa dopise do code behind po kliknuti v designeri. 3, Myslim ze code behind je v java web frameworkoch bezny(ale nie vo vsetkych) aj ked je inak implementovany. 4, getter alebo setter si moze kazdy dorobit, lenze v .net to nie je konvencia ako v jave. Totiz getter a setter je potreby iba ak v nom nieco robis alebo menis visibility. V danom pripade protected System.Web.UI.WebControls.TextBox MyTextBox; nie je potrebny. Popravde property v c# ma problem ze visibility settera sa nutne = visibility gettera. Tomas Martin Kuba wrote / napísal(a): Petr Synek wrote: To je asi jako bych ve Swingu nekam umistil JTextField a jeste musel vytvorit POJO tridu s getText() a setText() metodama jen kvuli tomu abych mohl z toho textfieldu ziskat text. A navic bych jeste musel v konstruktoru rict ze ten JTextField ma ID napr. Calculator a tu POJO tridu musel pojmenovat CalculatorActionBean a implementovat nejaky interface. Tedy zrovna intuitivni mi takovyto programatorsky styl neprijde. Od intuitivniho web frameworku bych cekal ze s komponentou numberOne budu rovnou v Jave (v code behind) pracovat takto: String text = numberOne.getText(); numberOne.setText(Franta) Pricemz o deklaraci promene numberOne se uz nestaram, protoze ta uz byla jednou deklarovana v JSP (neboli don't repeat yourself). Jak se koukam na code-behind na http://support.microsoft.com/kb/303247 tak ten TextBox je tam taky definovany dvakrat, jednou v ASPX: asp:textbox id=MyTextBox text=Hello World runat=server/asp:textbox a podruhe ve tride: protected System.Web.UI.WebControls.TextBox MyTextBox; Jestli .NET pristupuje k protected promennym primo, bez setXXX() a getXXX() metod, tak je to strucnejsi, ale porusuje to ruzne zasady, ktere nam SUN vtlouka do hlavy. Nevidim vyhodu toho, kdyz musim objekt nadeklarovat a pak na nem volat metodu: protected System.Web.UI.WebControls.TextBox MyTextBox; public void MyButton_Click(Object sender, EventArgs e){ MyLabel.Text = MyTextBox.Text.ToString(); } oproti tomu, kdyz nadefinuju rovnou hodnotu: private String text; public Resolution click() { label = text; text = Franta; ... } Ale jestli to moc potrebujete, staci udelat toto: public class Neco implements ActionBean{ ... public static class TextBox { private String text; public String getText() { return text; } public void setText(String s) { text = s;} } private TextBox textBox = new TextBox(); public TextBox getTextBox() { return textBox; } public Resolution click() { String text = textBox.getText(); textBox.setText(Franta); } a v JSP udelat s:text name=textBox.text / Tot vse. Makub
Design business modelu
Dobry den, V projekte J2EE mame ako obvykle BO, BE beany a DAOcka, vsetko ma interface local. Chcel by som sa poradit, ako robievate design BO, konkretne kedy funkcionalitu rozdelite medzi dve BOcka a kedy nie, podla coho sa rozhodujete. Mate na to niekto nejake pravidla. Tomas
Re: OT: Architektura
Ja by som sa ho opytal preco :). Je jasne ze nie vzdy je vhodne delenie na vrstvy, zalezi od aplikacie, ale vrstvy su odolne voci zmene poziadavkam. Lenze ak si spomenie napr na SOA, tak to je este odolnejsia architektura voci zmene poziadavkam. A ak sa predpoklada ze sa poziadavky budu velmi menit, alebo su nejasne, tak by som okrem navrhu super architektury rozmyslal o prototype alebo extremnom programovani. Jiří Kotal wrote / napísal(a): V tomto případě šlo spíše o jednotlivé vrstvy systému, jednak z hlediska třívrstvé architektury a jednak vnitřní členění na další subvrstvy. Zmíněný architekt zastává názor, že pokud se předpokládají časté změny v požadavcích, je výhodnější vůbec členění na subvrstvy nezavádět. Osobně si myslím, že naopak vhodné vrstvení aplikace přispěje ke snadnější realizaci změn. Jirka -Original Message- Doufam, ze spravne chapu namitku - hlavne toho, co se rozumi vnitrnim rozhranim. Mozna bych odpovedel., ze pokud se s kazdym novym zakaznikem musí menit nejake vnitrni API, tak je asi neco spatne. Mozna je pes zakopany nekde v nepochopeni tohoto rozliseni? http://openide.netbeans.org/tutorial/api-design.html#design.apiandspi (Mimochodem - po precteni tohohle dokumentu mi doslo, kolik veci jsme s kolegy delali nekolik let spatne a jakych zlozvyku se musim odnaucit :/ ) A nebo to API neni vubec API, ale jen nejaky implementacni kod? Ondra Nekola
Re: Dotazy na SWT
Martin Jedlička wrote / napísal(a): Zdravim, mam nekolik dotazu tykajicich se SWT. 1) Mam strom realizovan pomoci TreeViewer (pouzity LabelProvider a ContenProvider). Potrebuju v LabelProvider zobrazit animovany GIF. Je to nejak mozny? Pokud ano, tak jak to udelat? Este som to nevidel, tak asi nie. 2) Mam blokovy diagram zobrazeny pomoci obrazku (GIF, PNG, JPG, ...). Potrebuju vedet, jak po kliknuti mysi na dany blok diagramu se mi zobrazi novy obrazek (nizsi uroven popisu...detailnejsi popis vybraneho bloku). Pro psani aplikace pouzivam Eclipse. Slo by to pomoci EMF nebo GEF? EMF je Eclipse modeling framework a nesuvisi s View. Pomocou GEF-u sa da vselico, ale podla mna gef je prekomplikovany a zle sa uci. Ale ano islo by to celkom lahko. Celkom som ale nepochopil, ze kde sa ma ten novy obrazok zobrazit. 3) Potreboval bych DND nejen textu, ale napr. i tlacitek, textovych poli a jinych prvku. Jde to nejak? Zalezi ako to myslite. Ak nieco ako customizovanie toolbaru pomocou DND, tak neviem. Ak nieco pre dizajn, cize vlastne iba obrazky na plochu editora(http://www.ibm.com/developerworks/java/library/j-validating/VisualEditor.jpg), skuste pozret eclipse visual editor, myslim ze je implementovany cez GEF. S pozdravom Tomas Studva
Gui building
Ahoj, chcem sa spytat ci pouzivate na tvorbu GUI nejake nastroje alebo pisete priamo kod a ci je ten konkretny nastroj prinosom. Konkretne sa zaujimam o SWT. Tomas
Re: Gui building
Je to poziadavka klienta kedze ide o Eclipse RCP aplikaciu. Dal by sa pouzit aj swing s eclipsom, ale je to nedotiahnute a ani by som to nerobil. Roman Strobl wrote / napísal(a): Tomas Studva wrote: Ahoj, chcem sa spytat ci pouzivate na tvorbu GUI nejake nastroje alebo pisete priamo kod a ci je ten konkretny nastroj prinosom. Konkretne sa zaujimam o SWT. Co Vas drzi u SWT? Pro Swing jsou lepsi GUI buildery :) -Roman
Re: Gui building
Musim ten Visual Editor vyskusat. Dik. Honza wrote / napísal(a): Ahoj. Pro naklikani zakladniho layoutu a komponent se mi maximalne osvedcil Eclipse Visual Editor. Obcas ma sice v problemy se stabilitou a rychlosti, ale verze od verze se to velice zlepsuje. Dalsi slozitejsi upravy je pak mozne delat primo v kodu, nicmene jsem presvedcen o tom, ze na 95% GUI designu je VE dostacujici. Honza
Re: Tvorba pluginu pro Eclipse a projekty
Ako bolo spomenute tak part listener. Tam su tusim udalosti o otvarani, zatvarani, aktivovani jednotlivych parts. Editor je EditorPart a otvara spomenute subory. V pripade ak chcete otvarat ten subor vy, tak sa to robi cez implementaciu editora, nasledne jeho registrovanie ako extension a asociovanie s priponou suborov, ktore ma otvorit. S pozdravom Tomas Pavel Cvrček wrote / napísal(a): Přijde mi, že si nerozumíme. Každý nově vytvořený projekt v Eclipsu má nad soubory v projektu standardní akci open, která otevře soubor v editoru. Uživatele dvojklepne a soubor se otevře dle nastavení Eclipse. To vše mi zajistí platforma, nemusím nic vytvářet. Mně jde o to, jak zachytit tuto akci open a provést při té příležitosti vlastní kus kódu či jak celou tuto akci překrýt tak, abych si to mohl napsat sám. Znovu podotýkám, že tuto akci iniciuje uživatel dvojklepnutím na soubor, takže se nejedná o mnou otevíraný soubor. Nevím, jak mi v zachycení této události mohou pomoci třídy IFile, IPath a IPathEditorInput. Otevřít soubor v editoru umím, jde mi čistě o zachycení události otevření či její překrytí. Hezký den Pavel Cvrček
Re: eclipse + subversion
Ahoj, ja som skusal oba, subclipse aj subversive a lepsi je subclipse (ale uz presne neviem preco, sa mi zda ze je viac user-friendly). Ono moc velky rozdiel asi nebude ked pouzivaju tu istu kniznicu (http://www.svnkit.com/ vid kto to pouziva), ktoru pouziva aj IDEA. 1, Ten problem s rychlostou - mozno nie je problem. Aka vekla je ta nova kopia? Mate v repo aj kniznice? Alebo aky je server alebo v pripojenie(ak to nie je LAN). Skusil by som to porovnat s inym klientom. Totiz v eclipse to funguje tak, ze sa to najprv nataha a az potom processuje. 2, jasne ze ide, to je pure java 3, ano ma 4, ano ma 5, no tu by som sa drzal knizky http://svnbook.red-bean.com/ A k tomu refactoringu, neviem preco by bol potrebny comit po premenovani - aky je dovod? Jedine ze by vznikal nejaky konflikt, ale podla mna nevznika. A este na zaver by som poznamenal, ze mne osobne sa paci produkt SmartCVS. JE aj SmartSVN http://www.syntevo.com/smartsvn/highlights.jsp. Je tu odlisni pristup k zobrazeniu, ako inde. PS:Ludia co vivijaju subclipse su ochotny a radi zlepsuju svoj produkt, koli nam dorobili podporu pre eclipse-symlinky. vladimír karásek wrote: Dobrý den, chci se zeptat jestli někdo má zkušenosti s vývojem větších (nebo středních) projektů v kombinaci eclipse a subversion. Jsme ochotní zaplatit za odborné konzultace. Co mně zajímá: 1. Rychlost satažení nové kopie projektu z repository 2. Možnost používat kleinty na platformách Windows, Linux a Solaris 3. Možnost procházet historii, porovnávat, upravovat. To vše nějakým inteligentním způsobem. Takže to asi bude muset být Eclipse plugin. 4. Větvení a spojování. 5. Struktura repository. Náš současný stav. Máme asi 30 projektů, které jsou vzájemně závislé. Používali jsme až donedávna CVS a vedení se rozhodlo, že je na čase použít něco vyspělejšího. Subversion slibovalo hodně ale přechod je více meně pain in the ass. Největší problém asi bude nalezení (konfigurace) Subversion klienta pod Eclipse, momentálně používáme eclipse plugin Subversive, jeho poslední verzi. Přišli jsme na to, že pro rychlejší práci je třeba odškrnout několik checkboxu v nastavení, ale to nám pořád nestačí. Momentálně stažení nové kopie z repository trvá 10 minut. Prucejeme metodikou XP programování. Často děláme refactoring. Nevjětším problémem je situace, kdy musíme přejmenovat class a pak ho nějak dál upraovat. Jenže udělat v daný moment nemůžeme. Musíme přejmenovat, udělat commit a pak můžeme dělat druhou operaci. Což je velice nepohodlné. Myslím si, že to musí jít nějak snadněji. Ví někdo jak?
Re: minimální verze Eclipse
Ja by som skusil zohnat osekanu verziu eclipsu - bud ten yoxos(nepoznam), alebo rucne osekat alebo RCP(to je najosekanejsi eclipse) a tam to nejak nainstalovat. No a aby sa to hned zobrazilo, by som riesil cez perspektivu - zadefinovat. Tomáš Procházka wrote: Zdravím. Potřeboval bych do Eclipse dostat tohle: http://www.futureware.biz/mantisconnect/screenshots.php - je tam část Eclipse Add-on Dostat tam není samozřejmě problém, ale já bych chtěl verzi eclipse, kde by nebylo nic jiného než tohle a otevřelo by se to hned po spuštění, potřebuji to pro zákazníka, který by přes to pak zadával chyby a mohl se dívat, zda jsou opraveny. Nevíte někdo jak na to? Stáhl jsem eclipse-RCP-3.2.1-win32.zip,ale to se mi nepodařilo vůbec rozjet. Datum: 23:21:4023. ledna 2007
Re: Co jde v .NET a nejde v Jave?
Ahoj, no to ma tesi, podla mna ked sun nieco pridava do Jdk, je to ako torta, ked sa kraja. Osobne sa vdzy najviac tesim na zmeny v jazyku. No a k otazke, ano aj pre vlastne komponenty je to rovnako jednoduche. Funguje to tak, ze sa to vlastne specifikuje pomocou atributu [Bindable = true|false] a podla to sa viazat bud da alebo nie. priklad - viazat sa daju aj obycajne property nemusia to byt len kolekcie: [Bindable=true] public String/*to by mohol byt typ IList...*/ MenoAutora{ ... } Ono sa to lisi od klasickeho pouzitia setera len casom kedy sa to priradenie vykona - v case viazania Tomas Tomáš Procházka wrote: Ahoj, odpovídám na zprávu ze čtvrtka, 02. listopadu 2006, kterou Tomas Studva napsal(a) v 11:58:40: JDK7 bude mít Databinding v sobě, je to JSR 295. Sun si uvědomuje, že to v Javě chybí. Zde se tvoří implemenetace: https://databinding.dev.java.net/ Ale nic vám nebrání už dnes použít třeba JGoodies, kde je spojení Java Beanu a formulářového prvku otázkou jednoho příkazu. Ale asi je pravda, že .NETu to jde už dnes a velmi snado. Ale co když si třeba vytvořím vlastní komponentu? Je tohle pak taky jednoduché? -- - Tomáš Procházka E-mail: [EMAIL PROTECTED] WWW: http://atom.sf.cz ICQ: 87147320 -
Re: Java Profiler
NetBeans profiler je zdarma a podporuje 64bitove architektury ve verzi 5.5 a Intel Macs. Nevim jestli je lepsi nez TPTP ale ma dost zajimavych ficur, napr. umi profilovat jen vybrany kus kodu, umi profilovat J2EE aplikace, atd. http://profiler.netbeans.org -Roman To vie aj TPTP. TPTP vie dokonca robit remote profiling. Da sa min vytvarat log, memory, execution profil. Vie vypocet zobrazit ako statistiky aj graficky ako sekvencny uml diagram(toto je super ficura, skoda ze som o nej nevedel skor :)), aj ako nejaky iny graficky pohlad(tu som mal problem, ked som robil vacsi profil, tak tento diagram sa vobec nedal skrolovat - islo to brutalne pomaly). Daja sa pouzit agenti - to som neskusal. Sucastou TPTP je aj GUI recorder na testovanie, ale to tusim az od dalsej verzie. S TPTP sa mi prijemne robilo, len niekedy mi zmrzol - neviem pricinu, neskor sa mi to uz nestavalo. A ak budete profilovat nieco vacsie treba zvacsit heap. Tomas
Re: Java Profiler
Martin Bednář wrote: Karel Tejnora napsal(a): Cau, nevim jak jsem tak zkoumal ty co vypadaly dobre tak uz nepodporujou javu 5 nebo eclipse 3.2, tak jsem skoncil s TPTP. No mne se TPTP na 64bit linuxu nejak nepovedlo rozbehat :( Kamosovi ano. Tak sa to da. Treba zistit pricinyu a pozret aj do bug listu TPTP, keby nahodou.
Re: scripting API v JDK 6 a JRuby
To neviem, ale robim v Jave, aby som nemusel v PHP :). TU je ten zoznam https://scripting.dev.java.net/. Mna by zaujimalo, aky je dovod pre podporu tychto skriptovacich jazykov? Cital som nieco, ze na prototyping (to uznavam, moze byt fajn) a ze ked je tim , kde niektori radi robia v niecom inom(to je malichernost). Ma niekto prakticke skusenosti , ze mu to chybalo? S tou rychlostou to nemusi byt zle, ak sa to compiluje do bytekodu alebo do coho (napr. Kawa kompiluje Scheme a XQuery do Java tried)- mozno to nie je v jdk6 ale raz asi bude. Tomas Pavel Kolesnikov wrote: Je neco z uvedeneho seznamu kryci nazev pro implementaci PHP? Mam dojem, ze zrovna PHP bylo jednou z motivaci pro JSR-223 Pavel
Re: scripting API v JDK 6 a JRuby
Martin Kuba wrote: Tomas Studva wrote: To neviem, ale robim v Jave, aby som nemusel v PHP :). TU je ten zoznam https://scripting.dev.java.net/. Mna by zaujimalo, aky je dovod pre podporu tychto skriptovacich jazykov? Cital som nieco, ze na prototyping (to uznavam, moze byt fajn) a ze ked je tim , kde niektori radi robia v niecom inom(to je malichernost). Ma niekto prakticke skusenosti , ze mu to chybalo? Clovek vetsinou nevi, ze mu neco chybi, dokud to nedostane :-) Pred vynalezem mobilu jsem taky nevedel, ze mi chybi mobil, a napriklad tedka nevim, ze mi chybi fidibus na vejce, ktery bude vynalezen az ve 22. stoleti :-) :-D Zatim se Ruby ucim, ale jedno prakticke vyuziti uz mam. Schvalne, jak se v Jave ziska seznam vsech souboru v aktualnim adresari koncicich priponou .rb ? No takhle: String[] rb = new File(.).list(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(.rb); } }); Co je na tom skarede? Nic. A jak to udelam s JRuby ? No takhle: ListString rb = (ListString) jruby.eval(Dir.entries('.').grep(/.rb$/)); Par znaku jsem usetril :-) Podla mna je to uplne jedno, ci to napisem v jave alebo v JRuby. Ale nebudem splietat dva jazyky dokopy, koli inemu api. Ale narazate na rychlost kodenia, ano to je jasne plus pre prototyping. JRuby pochadza vyvojovo od Ruby, co je cisty objektovy jazyk a ma par peknych konstrukcii, ktore vyplyvaju z objektovaosti. Skoda, ze som este nemal cas sa na to blizsie pozret. Tomas
Re: Co jde v .NET a nejde v Jave?
Ako som uz spominal, viazat sa da na hocico aj na kolekcie, nie len na datasety. Na kolekcie je to vhodnejsie aj pohodlnejsie, lebo to mozu byt kolekcie biznis objektov. DataSet je vsak mozno rychlejsia volba, neviem. Tomas Petr Synek wrote: Ono to funguje trosku jinak. V .NETu se pouziva DataSet objekt (neco co vzdalene pripomina offline Java 5.0 WebRowSet) a tento objekt muze poskytovat business vrstva a delat centralne prislusne validace. Nic se automaticky do DB nezapisuje, modifikovany offline DataSet je treba nechat explicitne ulozit do DB (a to se muze dit v business vrstve). petr
Re: worldofjava.org
Ahoj, maven2 dokaze spravovat lokalnu ropository aj so zdrojakmi, t.j. stahuje jari a este aj sources.jari. Treba pouzivat maven-dependency-plugin:sources, je to vsak o nieco vsetko zlozitejsie. Maven ma casto neposlucha :(. Ale da sa to. A kto by chcel plugin do eclipsu na maven2, aj ten je a je dost pekny, akurat mal chybu, ze eclipse bundles pridaval ako externe jarka, namiesto plugin dependecies. Tomas Studva Tomáš Procházka wrote: Ahoj, odpovídám na zprávu z pátku, 29. září 2006, kterou Honza napsal(a) v 14:00:51: No, jen to zobrazení Javadocu a zdrojáku je myslím free. Ale jako což o to, on by tohle myslím měl umět i Maven a myslím si, že dokonce lépe, i když nedokáže myslím zobrazovat javadoc přímo online z webu, ale stáhne ho, což je ale podle mě spíše výhoda. Jen neexistuje dostatečné dobrá implementace pro IDE, pro Netbeans teda určitě ne. Zkoušel jsem tu Maven2 a přijde mi to takové ještě hodně slabé. Já bych třeba přivital i to, kdyby šlo Maven v Netbeans použít jen pro stahování knihoven a jako repozitář. že bych si založil klasický Netbeans projekt a místo přidání knihovny z disku, bych přidal knihovnu z Mavenu a projekt by se nadále odkazoval na to. Když pak ten projekt někomu předám, tak se mu to jen stáhne a může pracovat. Nebylo by tohle snazší, než úplná implementace? --- Původní zpráva --- Odesilatel: Honza [EMAIL PROTECTED] Předmět: worldofjava.org Datum: 29. září 2006, 14:00:51 (GMT +0200) Přílohy: none msgid:[EMAIL PROTECTED] H No to vypada hezky. Bohuzel se jedna o placenou aplikaci H Tomáš Procházka napsal(a): Zdravím. Nedávno jsem v CZJUG konferenci psal o problémech, které přináší zpráva rozsáhlejších projektů. že je nutné si ke každému projektu stahovat jar knihovnu, ale také dokumentaci a někdy i zdrojáky, což je dost otrava. Teď jsem našel docela zajímavý projekt http://www.worldofjava.org/, který tohle dost usnadní. Sám doplňuje ke zdrojovým kódům známých opensource projektů dokumentaci a zdrojáky z Internetu. Nepodařilo se mi teda, aby stahoval i samotné projekty, ale to asi umí jen placená verze. Nevím, moc jsem to nestudoval. Ale funguje to tak, jak bych si představoval, aby fungoval i Maven. Datum: 15:49:5628. září 2006 Konec původní zprávy