Portál AbcLinuxu, 30. dubna 2025 09:06
Díky nedávné zprávičce jsem se dozvěděl o QWebClient, což je způsob, jak zpřístupnit Qt aplikace přes web. Přišlo mi to naprosto úžasné, tak jsem se to rozhodl vyzkoušet. Webových frameworků pro AJAXové aplikace je spousta, ale naklikat si Qt aplikaci a zpřístupnit přes web, to je bomba
Oficiální demo je nedostupné, prý „Try again later“. Spustil jsem vlastní demo na adrese: http://irc.qt.frantovo.cz/. Demo je jednoduchý chat.
Moc času jsem s tím nestrávil, tak jen v bodech:
int
na long
.Projekt je ve velmi rané fázi (jejich slovy „Greater Hack“) a dá se tedy očekávat, že tyhle problémy budou vyřešeny. Jedná se o nadějnou technologii pro publikování aplikací na webu (schválně píšu publikování, protože webové stránky bych v tom rozhodně nepsal a klasické AJAXové aplikace asi taky ne, na ty by se spíš dalo využít Wt)
Aktualizace 27. září 2009: doufám, že jste si všichni demo pěkně vyzkoušeli – jdu ho vypnout (měl jsem kvli tomu puštěný další počítač). Ale kompilace je jednoduchá, jistě to zvládnete. Jardík tu psal, že by se nemělo nahrazoval int → long a použít něco multiplatformního.
Tiskni
Sdílej:
Me se to libi.... a jak rikaz, pozitivni je ze to funguje
aspoň občas
Teď byl ten program spadlý – Segmentation fault.
Už zase – program jsem nahodil, ale moc mě to nebaví, tak si aplikaci ještě užijte, dokud funguje, a nebo si rozchoďte vlastní instanci, je to jednoduché.
Trochu ano
Víc by se mi líbilo, kdyby Qt mělo vlastní protokol postavený nad TCP a umožňující oboustrannou komunikaci. Oproti tunelování X protokolu přes SSH by to mělo výhodu ve v nižších datových přenosech a rychlejší odezvě. Nevýhodou by byla nutnost povolit na firewallech další port, případně tento protokol tunelovat přes SSH, což může být problém tam, kde je odchozí provoz omezen jen na HTTP – v takovém případě by tento protokol bylo možné tunelovat přes HTTP. Bylo by to lepší řešení, než mít HTTP jako primární protokol. Navíc by aplikace nemusela běžet ve webovém prohlížeči (proč taky) a mohla by vypadat jako normální desktopová aplikace.
HTTP je v tomhle úplně nevinně
Úplně ne -- je tu pěkně vidět, jak HTTP přidělává vývojářům práci, relativně dobrých výsledků se s ním nakonec dá dosáhnout, ale vyžaduje to dost ohackování. Kdyby se používal nějaký protokol postavený nad TCP a umožňující oboustranně posílat XML dokumenty, případně to celé zabalit do GZipu nebo použít binární protokol, ušetřilo by to dost práce.
Ale proč honí Qt do prohlížeče, to taky netuším.
Taky nevím, k čemu to je, víc by mi vyhovovalo, kdyby aplikace běžela mimo okno prohlížeče -- něco jako Java Web Start, akorát že by ani nebylo potřeba stahovat nějaké třídy, ale pouze by došlo ke spojení a aplikace by se na straně klienta jen vykreslovala.
Úplně ne -- je tu pěkně vidět, jak HTTP přidělává vývojářům práci, relativně dobrých výsledků se s ním nakonec dá dosáhnout, ale vyžaduje to dost ohackování. Kdyby se používal nějaký protokol postavený nad TCP a umožňující oboustranně posílat XML dokumenty, případně to celé zabalit do GZipu nebo použít binární protokol, ušetřilo by to dost práce.Tak si to přebereme: HTTP je postavené nad TCP, umožňuje oboustranně posílat XML dokumenty, zabalit je do GZipu nebo i přenášet binární data. Jestli není problém spíš v tom, jak to celé nalámat do prohlížeče.
něco jako Java Web Start, akorát že by ani nebylo potřeba stahovat nějaké třídy, ale pouze by došlo ke spojení a aplikace by se na straně klienta jen vykreslovalaXka?
umožňuje oboustranně posílat XML dokumenty
S tou oboustranností je právě problém, vůbec to není jednoduché a je to spíše hack (nebo exotické řešení, které funguje jen někde).
Jestli není problém spíš v tom, jak to celé nalámat do prohlížeče.
To souhlasím, přijde mi hloupé mít okno prohlížeče se vším všudy a uvnitř něj ještě okno aplikace. Sice existují věci jako Prism, ale pořád to není ono.
Xka
Xka jsou fajn, akorát ne vždy máš k dispozici dostatečnou šířku pásma, aby ty vzdálené aplikace fungovaly dostatečně svižně. Chtělo by u nich zlepšit kompresia optimalizovat je, nebo použít méně náročný protokol (jako je to webové Qt).
Xka jsou fajn, akorát ne vždy máš k dispozici dostatečnou šířku pásma, aby ty vzdálené aplikace fungovaly dostatečně svižně. Chtělo by u nich zlepšit kompresia optimalizovat je, nebo použít méně náročný protokol (jako je to webové Qt).
Existuje jistá úprava Xvnc a rdesktop klienta, která prý umí na TCP serveru pustit X klienta, a na TCP klientovi zobrazovat jen okna X klienta bez kořenové plochy. To vše se schopností navázat přerušenou relaci. Bohužel si nevzpomenu, kde to roste, a ani nejsem jistý použitelností.
Něco takového dělá NX (FreeNX) a taky funguje skrz SSH. Oproti samotným Xkům je úspornější a dá se s ním pracovat i přes ADSL připojení (jakž takž). Ale pořád je co zlepšovat – stejně jako v X se přenášeji bitmapy – pokud by se stavělo na tom webovém Qt, přenášely by se vektory (plus pár bitmap, např, pozadí tlačítka nebo posuvníku, ale to se přenese jednou a hotovo). Navíc je tu trochu rozdíl v zaměření – u NX musíš dát uživateli nejdřív přístup (jméno/heslo na úrovni OS), ale někdy se může hodit i anonymní přístup nebo přihlašování až uvnitř aplikace.
ale nepodařilo se mi ji rozchodit jinak, než že byla v rootu domény – každá aplikace tak potřebuje svůj virtual host
Protoze je tak napsana - v tom clanku na Qt Labs je videt ze posila "GET /neco" a "GET /necojineho" atd.
Ale v kazdem pripade zajimava zabavka
Nutnost Xek se da obejit spustenim neceho jako Xvnc nebo Xvfb. Ta cestina (UTF-8) by se nejspis vyresila nastavenim spravneho codecu pro texty pres QTextCodec::setCodecForCStrings.
To už se mi taky jednou stalo. Naštěstí jsi minimalizoval jen svoji instanci, a tak stačí stisknout F5 a načte se znova
Pokud používáte 64 bitový systém, neprojde vám kompilace → je potřeba upravit zdrojáky – hack: na hodně místech přepsat int na long.A to jako proč? Zase nějaká prasárna typu přetypování pointerů na int/long? Pointer lze "bezpečně" přetypovat např. na ptrdiff_t či size_t, které mají stejnou velikost, ostatní datové typy nepřipadají v úvahu a je to prasárna stejně jako předpoklad, že na 64bit systému sizeof(long)==sizeof(void*).
Je to research project, research project se typicky nejprve nahackuje, aby se zjistilo, zda to ma vubec vyznam. I kdyz sam bych misto tech intu pouzil uintptr_t, ale hacky a carky mam u garbage collectoru z neci paticky
No to tvoje demo taky nefunguje...
njn, přerušilo se síťové spojení a spadnul SSH tunel mezi servery
Demo jsem ještě nahodil, tak si to můžeš vyzkoušet, ale dneska nebo zítra už to vypnu napořád – hučí mi kvůli tomu tady jeden počítač navíc.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.