Hlavní navigace

Qt Developer Days: jak se daří Qt bez Nokie?

23. 10. 2013
Doba čtení: 12 minut

Sdílet

Druhý říjnový týden se v Berlíně konalo velké setkání vývojářů a uživatelů prostředí Qt. Tato setkání probíhají už desátým rokem a vždy se na nich dozvíte nejnovější informace nejen o Qt, ale i o celém ekosystému okolo něj. Jak se vede Qt knihovně rok poté, co ji Nokia prodala? O tom se mluví po celém Berlíně.

Davy vývojářů všeho zrna

Na rozdíl od loňské improvizace se letos konala konference v řádném říjnovém termínu. Byla dopředu ohlášená a propagovaná i berlínskými cyklorikšami, takže na tréningový den přišlo něco přes tři sta účastníků, v přednáškové dny pak přes šest set lidí. Budova Café Moskau v aleji Karla Marxe praskala ve švech.

Taxi rikši s reklamou na Qt DeveloperDays

Průzkum QtInsights vyvozuje, že Qt má mnoho nových vývojářů, kteří ho používají méně než dva roky a to zejména pro vývoj na mobilní platformy. A skutečně – věková škála začínala u ukrajinského KDE vývojáře, odhadem stěží třináctiletého, který byl doprovázen svou hezkou maminkou. Početnější byli studenti, jeden středoškolský absolvent měl dokonce regulérní konferenční přednášku o svém zajímavém projektu. Pak samozřejmě množství firemních i komunitních vývojářů, hardwarových kutilů, nerd imitující vzhledem dr. Sheldona Coopera nebo supervývojář o výtlaku minimálně 160 brutto registrovaných kilogramů.

Keynotes jubilejních desátých vývojářských dnů se proto musely konat v blízkém biografu International, kde kdysi východoněmecké náčelnictvo okem ostražitým sledovalo premiéry filmů dekadentních buržoazních producentů.

Budova premiérového biografu

Velké obecenstvo keynotes

Sedadlo, kde možná seděl Erich Honecker

Keynotes

Jak jde byznys, nové produkty

Ředitel Digie v záležitostech Qt Tommi Laitinen je spokojen s přijetím přelomových verzí Qt 5.0, 5.1 v uplynulém roce. Tyto verze usnadnily portaci na různé platformy, zdůraznily směřování Qt do oblasti animovaných, dotykem ovládaných UI na hardwarově akcelerované grafické kartě. Množství downloadů je příznivé, průzkumy u vývojářů ukazují vysokou spokojenost, také příjmy z komerčních licencí narostly o 38 % – tyto peníze budou reinvestovány do dalšího vývoje.

Tommi Laitinen se raduje nad spokojeností vývojářů

Qt upevňuje svoji pozici jako multiplatformní balík, protože v dnešním světě uživatelé chtějí pracovat s toutéž aplikací na desktopu i tabletu nebo mobilu a toto směrování je strategické.

Pro usnadnění práce vývojářů pro embedded zařízení je tu produkt Boot to Qt, který sdružuje potřebné nástroje i hotové system images pro populární referenční hardware (Beagle Board, Freescale).

Mobilní vývojáři mohou od prosince 2013 (s vydáním verze 5.2) využít čerstvě ohlášenou službu Qt Mobile edition, která od 149 dolarů měsíčně dává

  • hotové prostředí pro multiplatformní mobilní vývoj pod komerční licencí Qt
  • přístup ke cloudové službě engin.io pro ukládání dat
  • support

Po technické stránce

CTO Lars Knoll si pochvaloval, že uplynulý rok nebyl zdaleka tak rušný jako ten předminulý, všichni včetně něho měli čas pro nerušené kódování a s výsledkem jejich úsilí je nadmíru spokojen. Dále uvedené novinky se vztahují k verzi 5.2, která by měla vyjít v listopadu.

Nově podporované mobilní platformy

Qt 5.1 obsahuje podporu Androidu a iOS jen jako technology preview, jako hotová primární platforma budou v Qt 5.2. Pro oba systémy platí to stejné:

  • Qt Essential moduly
  • Qt Sensors modul
  • všechny multiplatformní add-ons
  • musí se použít web browser dané platformy, Qt WebKit není k dispozici

Novinky v QtGui a QtWidgets

  • nová třída QOpenGLTexture
  • QFileDialog podporuje QUrl
  • plná podpora session managementu
  • QTextEdit může mít nápovědný text, jako ho má QLineEdit
  • QInputDialog může vracet multi-line text
  • nový widget QKeySequenceEdit
  • QLineEdit má integrované tlačítko pro reset textu
  • nové signály v QTabBaru – tab bar (double) clicked

Novinky v QtQml/Quick

Tady proběhla hluboká orba – JavaScript engine V8 z WebKitu nebyl přijatelný ani od appstoru Apple ani pro Microsoft. Proto mají nový QML engine, který přijatelný je, je těsněji integrovaný s Qt a optimalizovaný právě pro QML. Hrubý JavaScript výkon je ovšem o něco horší než má nejrychlejší JS engine planety V8.

Ve front endu QML jsou také velké změny – do OpenGL tlačí data nový renderer, který to dělá radikálně lépe než ten z Qt 5.1. Animace běží v renderovacím OpenGL threadu, nejsou pozastavovány blokujícími aktivitami v hlavním GUI threadu.

Nové moduly

  • pro Linux a BlackBerry je tu Qt Bluetooth
  • Qt NFC pro Blackberry
  • Qt Positioning používá NMEA, GeoClue na Linuxu
  • nejnovější Qt WebKit
  • QtCreator 3.0 s podporou pro nové platformy a plugin API

Desktop není Popelka

Přes množství novinek pro mobilní platformy desktop není zanedbáván.

Jako jeden muž (se ženami jsem o tom nemluvil) si všichni pochvalovali vydání hotových UI komponent v QtQuick2. Představují dobře rozšiřitelný a srozumitelný start pro seriózní práci s QtQuick technologií. V současné době se pracuje na snadnějším deploymentu těchto prvků v instalačním procesu.

Nové moduly Multimedia, Serial, komerční Charts, engin.io jsou v prvé řadě pro desktop.

Qt roadmap pro příští rok

Win8 WinRT

Podpora pro tento „systém v systému“ je stále ve vývoji, technology preview by mělo být v listopadu 2013, beta verze na jaře 2014, finální release pak až v zimě. Je to složitý úkol, navíc vzhledem k podílu na mobilním trhu patrně není zásadní prioritou.

Qt WebEngine

Poté, co Google opustil WebKit se svým forkem Blink, se Digia rozhodla, že web engine, který bude integrovat bude právě Blink/Chromium. API bude zachováno co nejpodobnější k stávajícímu QWebView.

K vidění to patrně bude až v Qt 5.3, v druhé polovině roku 2014.

Nová API
  • Qt Location
  • Qt Bluetooth pro Android, iOS, Mac, Windows
  • Qt NFC pro Android
  • Qt Positioning – backend pro iOS, Android
  • Qt 3D – z výzkumného projektu se dostane do produkční fáze
  • analytika, in-app nákupy, in-app reklama

QNX a Qt

Dan Dodge z QNX (momentálně firmu QNX vlastní BlackBerry) pověděl stručně historii real-time mikrokernelového systému QNX, ukázal příklady, jak uživatelské rozhraní v QML řídí procesy v medicínských, průmyslových nebo automotive aplikacích.

Příjemně povzbudil přítomné, aby neslevovali ze solidních požadavků softwarové architektury a nenechali se vláčet nekompetentním project managementem. Na vývoji své firmy dokládal důležitost malých tvůrčích týmů, vzájemné inspirace členů týmu a hrdosti na vlastní dílo. Měl jsem dojem, že mnoho lidí v sále tiše vzdychá, jako by v temném rovu uviděli paprsek světla.

Dan Dodge nabádá k sebevědomí

Dan Dodge vybízí k sebereflexi a hrdosti

Trendy

Komunita vývojářů nadšeně přijala nový standard C++11, jeho podporu v Qt5 a vylepšení, která s jeho podporou jde realizovat. Možnost připojení lambdy ke Qt signálu vybudila invenci programátorů k pokusům o asynchronní programování ve stylu funkcionálních programovacích jazyků (jako u experimentálního projektu Ivan Čukiće).

Zkrátka – vezměte si poslední verze kompilátoru, poslední verzi Qt a udělejte si radost drobným template metaprogrammingem pro všechny podporované platformy.

Profiling a výkon C++ aplikací

Metodika

Přednáška se krátce věnovala metodice profilingu

  • profilujte kód optimalizovaný kompilátorem, ovšem s debug symboly (např. gcc -O2 -g), abyste se vyznali ve výstupu profileru – aby nedošlo k případu, že pracně vyladíte v debug módu něco, co by za vás udělal překladač při optimalizovaném překladu
  • až profiler vytipuje problematické místo, napište si na něj co nejadresnější benchmark, zaznamenejte si výsledky a potom začněte s vylepšováním. K tomu se velmi hodí makro QBENCHMARK z Qt knihovny QTestLib
  • regresní unit testy by měly být při ladění výkonu také v pohotovosti

Potom se řeč stočila na profiling pod Linuxem, což je dobře, protože na Windows je nabídka profilovacích nástrojů (ahoj, můj oblíbený AQTime) podstatně širší.

perf a VTune

Na command line má mnoho dobrých vlastností a možností standardní nástroj perf (viz popis zde). Přednášející apeloval na přítomné, aby nad perfem napsali nějaké hezké GUI, neboť žádné není, ale bylo by příjemné.

Příjemný profiler pro Linux i s GUI a přehledy je Intel V-Tune, pracuje jen na Intel procesorech a není free ani co do svobody, ani co do peněz.

Valgrind

Pro linuxového vývojáře je jasnou volbou Valgrind. Ovšem vzhledem k tomu, že používá emulované provádění instrukcí, je běh tohoto profileru řádově pomalejší než běh bez profilingu.

Nástroj massif se použije pro profiling správy dynamické paměti, nástroj callgrind ve spojení s grafickým frontendem kcachegrind pro profiling instrukcí.

Při profilingu Qt aplikací se ale musí dát pozor na JustInTime překládané části aplikace (QtScript, QtWebKit, QML, QRegularExpression), které Valgrindu můžou zamotat hlavu tak, až spadne. Je proto nutné pouštět Valgrind s přepínačem –smc-check=all-non-file.

Další šikovný parametr pro použití s Qt je už specifický pro callgrind – vynechává interní funkce Qt volané při signál-slot spojení: –fn-skip=„QMetaObject::activate*“ –fn-skip=„QMetaObject::metacall*“ –fn-skip=„*::qt_metacall*“ –fn-skip=„*::qt_static_metacall*“, takže výpis je mnohem přehlednější.

pmap a pomocné skripty

Konzumaci paměti v čase lze zkoumat příkazem pmap, autor přednášky dal k dispozici i skriptíky na vzorkování pomocí pmap a zobrazení vzorků pomocí gnuplot, na GitHub-u jsou to skripty track_memory.shshow_memory.sh. Musel jsem skripty ale poupravit, na mém domovském OpenSUSE byly jiné názvy sloupců pmap-u i jejich pořadí. Vypadne z toho takový obrázek:

Graf konzumace paměti web browserem

QList vs. QVector

Padla ostrá slova na adresu QListu jakožto defaultního kontejneru, založená na článku Marka Mutze z roku 2010. Cítil jsem se pohoršen a podveden ve svých životních jistotách Qt dokumentací, tak jsem si napsal malý benchmark na ověření. Vyšlo najevo, že zmiňovaný problém platí pro Qt 4.x, v pětkové řadě už je odstraněn.

Benchmark (zaměřený na postupný append mnoha prvků) ukázal, že pro menší elementy (řekněme velikosti několika málo pointerů) je QVector mnohem rychlejší, při rostoucí velikosti elementu už má navrch QList. Na každý pád QVector nefragmentuje tolik paměť a udržuje celé pole souvislé, takže je přátelštější k vyrovnávacím pamětím procesoru.

Kolem a kolem je tedy QVector opravdu vhodnější jako první volba kontejneru, zvláště pro menší prvky.

Řetězce: raději QStringRef, QStringLiteral a rychlé spojování

Zejména při obsáhlejším zpracování textu (parsery) se stane, že programátor vytváří mnoho dočasných řetězců (a tedy mnoho drahých alokací a dealokací).

V takovém případě je výhodné obezřetně použít funkce QStringu vracející QStringRef (tedy midRef() místo mid(), leftRef() místo left(), rightRef() místo right()). Je to jen reference dovnitř existujícího řetězce a nedochází k alokacím.

Také řetězcové literály, které jsou při každém použití implicitně konvertovány na QString, zdržují. Člověku se nechce v takové situaci vždycky psát statickou konstantu, ale dá se použít makro QStringLiteral, které to udělá za nás rafinovanou lambdou.

Při častém a vícečetném spojování je prospěšné použít operátor rychlé konkatenace ‚%‘ tedy místo spojeno = text1 + text2 + text3; je rychlejší spojeno = text1 % text2 % text3;. Tento přetížený operátor používá interně QStringBuilder.

Použití constexpr

Kde je to možné, tam by se u funkcí a konstruktorů měl použít tento C++11 modifikátor, takové funkce mají dobrou šanci na vyhodnocení hned při překladu. Constexpr výrazy mohou být použity místo starého špatného #define, takže svět bude zase bezpečnější a makro neudělá nepořádek tam, kde nemá.

Podrobnější výklad k constexpr je zde.

QmlWeb projekt

Nadějnému středoškolákovi Antonovi Kreuzmannovi vrtalo hlavou, že HTML je přece jenom stavěné na výrobu dokumentů a ne moc na aplikace, na to se přece jenom hodí lépe QML. Protože se vyzná lépe ve webových technologiích, dal hlavu dohromady s Thomasem McGuirem z Qt expertní firmy KDAB a sestavili projekt QmlWeb.

Ten v JavaScriptu realizuje klíčové vlastnosti QML engine z Qt – property binding, transformace, animace, pozicování… V současnosti jsou schopní nahrát na web čistě QML aplikaci, a ona se spustí ve web vieweru. Jako demo ukázali prezentaci s divokými animacemi a funkční demo hledání min.

Na projektu je ovšem práce stále dost a vítají každou pomocnou ruku.

Správci projektu při své přednášce

Stánky

Byl tu i stánek propagující Ubuntu mobilní telefony, nevěděl jsem o této iniciativě Canonical software. Cílí na Ubuntu everywhere – od mobilu přes notebook, TV až na desktop, s tím, že člověk si může nést své výpočetní prostředí s sebou, strčí Ubuntu telefon do docku a jeho telefon se stane výpočetním centrem připojených periferií a Ubuntu přepne na svůj desktopový háv. Mluví se o tom dlouho, ale tady je vážně míněná implementace. Hardwarová tlačítka telefonu jsou zavržena (snad kromě zapínání), jen se gestikuluje a ťuká prstem.

KDAB měla na stánku několik aplikací, které demonstrovaly možnosti Qt a QML uživatelského rozhraní v embedded zařízeních, ať už se jedná o ovládání plachetnice přenášené do modelu, smart home nebo overlay QML ovládacích prvků přes OpenGL scénu.

Dálkově ovládaný domov

Double K Kevin Kramer u ovládání jachty Qt aplikací

Demonstrace 3D scény komponované s QML uživatelským rozhraním

Lightning talks

Novinkou konference byly lightning talks – desetiminutové vstupy účastníků, kteří chtějí ukázat nějakou zajímavost. Prezentace byly známkovány ve třech kategoriích a vítězné byly oceněny a předneseny při závěrečné ceremonii.

Nejvíc inovativní V-Play

Po právu vyhrála prezentace projektu, který skvěle spojuje multiplatformnost Qt a schopnosti QML. Je to balík pro cross-platform vývoj aplikací, zejména pak her. Christian Feldbacher mně ohromil záběrem (… já seděl na větvi, když on hovořil …) projektu, který je patrně „a handful of men show“.

  • vývoj pro platformy iOS, Android, BlackBerry, desktop
  • podpora pro Facebook integraci
  • podpora pro Flurry Analytics
  • sdílení dat (žebříčky, achievementy) a synchronizace mezi zařízeními
  • podpora monetizace aplikace/hry

Prezentace herního engine V-Play

Nejhodnotnější

Vývojář firmy KDAB András Mantja představil svoji knihovnu SQLate, která posunuje možnosti QtSql modulu od čistě textové manipulace s textem SQL dotazu k dotazu, jehož validitu je schopen zkoumat kompilátor.

  • definice schématu a tabulek v C++
  • generátor SQL dotazů pro SELECT, UPDATE, DELETE, INSERT, CREATE TABLE
  • C++ syntaxe pro vytváření SELECT dotazů
  • podpora pro aktualizaci databázového schématu
  • error handling založený na výjimkách

András Mantja u své prezentace SQLate knihovny

Nejlépe prezentovaný

Cornelius Schumacher šířil iniciativu KDE komunity, která chce shromáždit lidsky i strojově čitelné údaje o dostupných Qt knihovnách na webu inqlude.org. Kdo má nebo ví o zajímavé knihovně, ať ji nahlásí na odpovědným orgánům.

Nevítězný, avšak zajímavý – PureWeb

Firma Calgary Scientific má zajímavý projekt, který s nevelkým úsilím dokáže připojit Qt (nebo i .NET) aplikaci na aplikační server a ovládat ji vzdáleně z browseru nebo tabletu. Její zástupce předváděl na tabletu zobrazení 3D medicínského scanu umístěného na serveru v Chicagu a vypadalo to velmi interaktivně.

Ilustrace problému, který řeší technologie PureWeb

Společenský večer v měnírně napětí

V bývalé měnírně napětí byly přes den aktivity pro účastníky Qt StarterEdition, kteří se začínají s Qt seznamovat. Potom se tam konal společenský večer, všichni se bavili, budova bzučela jako včelí úl, než zábavu rozvrátil najatý band Orkestra del Sol ze „slunného“ Skotska, který vyluzoval katastrofální rambajs, kterému říkají „homestead style“.

CS24_early

Industriální prostředí společenského večera

Qt Community Award

Z patnácti nominovaných se do finálního hlasování dostaly čtyři opravdu těžké váhy

  • David Faure – dlouholetý přispěvatel a správce mnoha KDE projektů a tříd v Qt, expert v Qt threadingu
  • Lars Knoll – starý troll z Trolltechu, v posledních letech pod Nokií i Digií je technickým ředitelem vývoje
  • Thiago Macieira – na slovo vzatý expert zejména v low level Qt na úrovni blízké hardware a platformových abstrakcí
  • Bogdan Vatra – hybná síla portace na platformu Android – nejdřív jako hobby projekt necessitas, teď vede práce na tuto platformu přímo ve firmě Digia

Nejvíc podpory získal nejvíc viditelný Lars Knoll, přebral cenu, připili jsme šampaňským k ukončení kulatého výročí vývojářských dnů – a snad na viděnou příští rok!

Lars Knoll odměněný oceněním Qt komunity

Byl pro vás článek přínosný?