Jak nejlépe programovat GUI v Javě?

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jak nejlépe programovat GUI v Javě?
« Odpověď #30 kdy: 29. 12. 2013, 17:03:10 »
Z mnoha důvodů.

Je to overhead navíc, další "část" aplikace, kterou je třeba testovat, aktualizovat, udržovat, instalovat, podporovat ... v momentě, kdy počet externích částí jde do desítek, už to přestává být p*del. Navíc komunikace mezi pythonem a programem nad JVM není až tak snadné a přidává to další komplexitu (kdyby původní tazatel neměl program napsaný v Javě, asi by k němu nechtěl Javové GUI, toť můj předpoklad) a zpomalení. To, že mnoho opensource vývojářů podporu programu odbude s tím, že podporují pouze nejnovější verze knihoven, které jsou v balíčkách jeho oblíbené distribuce, bohužel nelze použít v komerční praxi.

Kromě toho Python nebo Ruby mají taky svoje mouchy (největší asi GIL - Global Interpreter Lock, což efektivně znemožňuje jakoukoliv normální práci s vlákny). Samozřejmě se jim lze vyhnout, ale pak jsme tam, kde jsme byli na začátku.

Binding na externí knihovny je supr věc, ale je to věc celkem komplexní a je velmi náročné to udělat dobře. Máš proti sobě 2 světy, které Tě drtí jako mlýnské kameny - výsledkem bude v dobrém případě kompromis, v horším prasečina. Udržovat je také není sranda, protože musíš reagovat na změny v obou prostředích. Za svůj život už jsem viděl velkou spoustu nekompletních nebo nadále neudržovaných bindingů, které není sranda použít na jiném projektu, než je použil původní autor (a upřímně, taky jsem takových pár vytvořil "protože rozpočet projektu") - prostě příliš mnoho, abych věřil projektům typu "část je bindnutá, část nefunguje, část nebude, tady je tutorial, podívejte se do dokumentace k původnímu projektu" (toto je konkrétně python binding na WxWidgets).

A na závěr duševního průjmu: vytvářet GUI v Javě není větší trápení než v Pythonu nebo Ruby. Kdyby to opravdu byl propastný rozdíl, jak se tu často s oblibou prezentuje, Javu by používal málokdo. Pohled na složení pracovních nabídek ale hovoří jinak.

Klidně používej Python nebo Ruby nad Qt nebo Gtk(resp. wxWidgets), pokud to na Tvém projektu funguje jak má. Ale toto řešení není samospasitelné a přestože třeba pro malé projekty funguje, pro větší nikoliv.


Pupi_1

Re:Jak nejlépe programovat GUI v Javě?
« Odpověď #31 kdy: 29. 12. 2013, 17:23:00 »
Proc se trapit s Javou, kdyz lze pohodlne a rychle udelat GUI aplikaci v Pythonu nebo Ruby nad Qt nebo Gtk(resp. wxWidgets) ? Rychlost zrovna u GUI nebude problem, navic jsou to jen bindingy kdy vetsi cast kodu stejne pobezi z knihoven zkompilovanych z C/C++.

Qt? To je tiez celkom "peklo". Pracoval som s C++ a Qt. A teda nebol som z toho nadseny. Taketo externe kniznice, ktore su potrebne na GUI, narobia niekedy viac skody ako osohu. V skole som sa s tym stretol prvy a verim aj posledny krat. Chcel som pracovat s tym pod Windows, nakoniec som to nespojazdnil a presiel na linux. Kamarat robil BP, kde vyuzival Qt a tiez s tym mal problemy. Nehovoriac o tom, ze ked niekto vyvija projekt a potom na servery kde to ma bezat, zvysia verziu, tak to nejde prelozit. Ako vazne super cele Qt :)
Ked si to zoberiem zo strany bezproblemovosti, tak pri zinstalovani Visual Studia, .Net frameworku, tak mi ostane ovela viacej povodnych vlasov, ako pri nastavovani nejakych extra kniznic, kde viac zosediviem

Lol Phirae

Re:Jak nejlépe programovat GUI v Javě?
« Odpověď #32 kdy: 29. 12. 2013, 17:25:47 »
Stručně: Nejlépe nijak::)

Franta <xkucf03/>

Re:Jak nejlépe programovat GUI v Javě?
« Odpověď #33 kdy: 29. 12. 2013, 17:55:42 »
Před nějakou dobou zde bylo založeno téma, ve kterém se autor dotazoval, proč jsou programy v Javě pomalé (což je bohužel také má zkušenost), ze kterého mimo jiné vyplynulo, že programování ve SWINGu je nevhodné.

Obecně psát GUI aplikace ve Swingu není problém, je to ověřená a použitelná technologie. Ono dost záleží, kdo je cílová skupina té aplikace a koho se ptáš. Když se zeptáš diskutérů na Rootu nebo na Ábíčku, tak ti asi řeknou „fuj Java“ – protože to moc nezapadá do jejich desktopového prostředí (KDE/Gnome), vypadá to jinak a odezva je o trošku horší (i když stále použitelná) než u nativních toolkitů (Qt/GTK). Toto je asi nejnáročnější a nejkritičtější cílová skupina. Otázka je, jestli píšeš tu aplikaci pro ně. Podobně kdybych psal nějakou frikulínskou konzumní aplikaci pro applisty, tak bych volil nativní toolkit (i když v Mac OSu ta Java vypadá hodně nativně, podobně ve Widlích).

Přiznám se, že i já, když si můžu vybrat desktopovou aplikaci (třeba prohlížeč obrázků, správce souborů nebo e-mailového klienta) tak radši volím nativní (KDE/Qt), která zapadne do mého desktopu.

A něco jiného je, když budeš psát aplikaci do podnikového prostředí – tam jsou jiné priority, nejde o to, jestli ikonky a styl posuvníků/tlačítek přesně respektuje desktopové prostředí, taky je jedno, jestli ta aplikace startuje 100 ms nebo 10 vteřin – ráno ji pracovník pustí a do večera tam bouchá nějaké formuláře. Odezva je důležitá, ale pokud nebrzdí práci, opět se nějaké milisekundy neřeší. Naopak problém je, kdyby ti to na půl dne spadlo a ty lidi neměli co dělat, nebo kdybys jim ztratil data. Klíčová je funkcionalita, stabilita a rychlost, jakou jsi schopný implementovat nové požadavky – a v těchto směrech má Java (včetně GUI) hodně co nabídnout.

Co se týče spotřeby paměti, nejvíc mi tu žere Firefox, kde žádná Java není – a naopak javovké aplikace jako Netbeans IDE nebo jEdit mají menší nároky a jejich spotřeba je konstantní i když mi tu běží týdny v kuse. Nedávno se mi nějak zaplnila paměť, tak jsem koukal do htopu, která aplikace může – a byl to jeden prográmek v Pythonu, který jsem zapomněl běžet v pozadí na jedné ploše – byl odpojený, nikdo na něj neklikal, neměl teoreticky nic dělat… a během pár dnů sežral přes 4 GB paměti. A to nebyl nějaký odkudsi stažený bastl nebo alfa-verze, ale program nainstalovaný z distribučních balíčků. Podobně neočekávané pády aplikací – ty potkávám mnohem častěji u aplikací psaných v Pythonu než u aplikací v Javě. Částečně je to o kultuře programátorů a částečně hraje Javě do karet silné/statické typování a kontrolované výjimky, které musíš odchytávat (jinak ti to zařve už při kompilaci).

Shrnutí:
 - pro firemní aplikace pro práci: klidně Javu/Swing
 - pro náročné desktopové uživatele GNU/Linuxu: C/C++ a Qt/GTK na straně klienta (Java může být na serveru/backendu)
 - pro spotřebitele – konzumní aplikace: hlavně asi webové rozhraní a mobilní (Android) + opět Java na serveru
 - pro nějaké utilitky, které přinášejí klíčovou funkcionalitu, ale potřebuješ je jednou za čas (tzn. nebudou ti strašit na KDE/Gnome desktopu dlouho): klidně Javu/Swing

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jak nejlépe programovat GUI v Javě?
« Odpověď #34 kdy: 29. 12. 2013, 18:23:45 »
Proc se trapit s Javou, kdyz lze pohodlne a rychle udelat GUI aplikaci v Pythonu nebo Ruby nad Qt nebo Gtk(resp. wxWidgets) ? Rychlost zrovna u GUI nebude problem, navic jsou to jen bindingy kdy vetsi cast kodu stejne pobezi z knihoven zkompilovanych z C/C++.

Qt? To je tiez celkom "peklo". Pracoval som s C++ a Qt. A teda nebol som z toho nadseny. Taketo externe kniznice, ktore su potrebne na GUI, narobia niekedy viac skody ako osohu. V skole som sa s tym stretol prvy a verim aj posledny krat. Chcel som pracovat s tym pod Windows, nakoniec som to nespojazdnil a presiel na linux. Kamarat robil BP, kde vyuzival Qt a tiez s tym mal problemy. Nehovoriac o tom, ze ked niekto vyvija projekt a potom na servery kde to ma bezat, zvysia verziu, tak to nejde prelozit. Ako vazne super cele Qt :)
Ked si to zoberiem zo strany bezproblemovosti, tak pri zinstalovani Visual Studia, .Net frameworku, tak mi ostane ovela viacej povodnych vlasov, ako pri nastavovani nejakych extra kniznic, kde viac zosediviem

Kdy to bylo, když ses s nimi naposledy setkal? Zrovna Qt udělalo celkem slušný krok dopředu a už, i pod Windows, je to naprostá brnkačka - stáhnout, nainstalovat, spustit QtCreator (celkem povedené vývojové prostředí pro vytvoření GUI; prostě tool, který dělá jednu věc, ale dobře). Nicméně souhlasím, že poslední Visual Studio+ReSharper je přece jen jinde.


Pupi_1

Re:Jak nejlépe programovat GUI v Javě?
« Odpověď #35 kdy: 30. 12. 2013, 00:16:57 »
asi tak 3 roky dozadu myslim.

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jak nejlépe programovat GUI v Javě?
« Odpověď #36 kdy: 30. 12. 2013, 12:03:22 »
Od té doby to šlo hodně dopředu :-) .

Nobody

Re:Jak nejlépe programovat GUI v Javě?
« Odpověď #37 kdy: 30. 12. 2013, 13:44:50 »
Kromě toho Python nebo Ruby mají taky svoje mouchy (největší asi GIL - Global Interpreter Lock, což efektivně znemožňuje jakoukoliv normální práci s vlákny).

Neni jenom Python nebo Ruby, napr. Tcl nema global interpeter lock.

Napr. Preto, lebo ked si dam inzerat na Java programatora, mam do tyzdna N pohovorov. Ked si dam inzerat na pythonistu, mam N/100, co hravo prevysi akykolvek (teoreticky) benefit.

A proc si nedas inzerat na GUI programatora?

noname

Re:Jak nejlépe programovat GUI v Javě?
« Odpověď #38 kdy: 30. 12. 2013, 14:21:59 »
Díky všem za odpovědi, bylo poučné si to přečíst. Např. jsem neznal Java FX2 a došlo mi, že bych měl výrazně více zapracovat na programování ve vláknech  :D,  ostatní příspěvky byly také užitečné, někdy navzdory jejich stručnosti. Rovněž bych chtěl vyzdvihnout podrobné a pečlivě sepsané odpovědi, např. od "Franta <xkucf03/>", které mi pomohly získat mimo jiné lepší celkový přehled. Co se týče odpovědi na andyho otázku, tak tím že aplikace mají stát za to mám na mysli fakt, že to co napíšu, poběží rychle, bez problémů a nikdo si na ně nebude stěžovat, jak bývá u složitějších aplikací v Javě zvykem. Takže ještě jednou děkuji a těším se na Vaše další doporučení.