Que contiendra Qt 5.8 ?

Le développement de fonctionnalités pour Qt 5.8 est à peu près terminé : il devait être achevé pour ce lundi 15 août (à cause de problèmes de test des changements dans le code source existant, la date a été repoussée au 22 août, en évitant tout ce qui n’est pas correction de défaut). Ainsi, il est d’ores et déjà possible de dresser le portrait (incomplet) de cette version à venir.

Le plus gros changement concerne Qt Quick : le graphe de scène OpenGL a été refactorisé pour éliminer la dépendance envers OpenGL. L’objectif est de passer facilement à d’autres API pour l’affichage, comme Vulkan ou DirectX 12 : d’ailleurs, cette version 5.8 pourra utiliser directement Direct3D 12 sous Windows (même si le code est expérimental). Il reste cependant à voir à quel point l’implémentation d’autres API pourra les exploiter à leur plein potentiel et ainsi donner des avantages par rapport à l’implémentation OpenGL existante. À l’origine, ce changement était nécessaire pour intégrer le code du module Qt Quick 2D Rendere (autrefois exclusivement propriétaire).

Toujours niveau Qt Quick, des caches ont fait leur apparition pour diminuer les temps de chargement et la consommation de mémoire des applications : le code compilé et les structures de données sous-jacentes aux fichiers QML et JS. Le module Qt Quick Controls 2 propose de nouveaux types (Dialog, DialogButtonBox, ButtonSeparator et MenuSeparator), ainsi que de nouveaux effets pour les styles Material et Universal et un thème System. D’autres types pour mieux s’intégrer avec le système font leur apparition, en étant toutefois expérimentaux : MenuBar, Menu, SystemTrayIcon, ColorDialog, FontDialog, MessageDialog, FileDialog et FolderDialog.

Côté sécurité sur les réseaux, les protocoles TLS PSK (qui se basent sur un échange au préalable de clés symétriques partagées) ont été implémentés dans le module Qt Network (côté serveur) et dans Qt Web Sockets (tant pour le client que le serveur). De même, HTTP 2 est maintenant implémenté.

Dans les derniers arrivés, Qt 3D se focalise sur la maturation (correction de défauts, amélioration de la performance, augmentation de la suite de tests). Qt Charts propose aussi une fonctionnalité de graphiques en chandeliers japonais, principalement utiles dans la finance. Comme prévu, trois nouveaux modules font leur apparition (Qt Wayland Compositor, Qt SCXML et Qt Serial Bus), Qt Gamepad n’est toujours pas finalisé.

Sources : New Features in Qt 5.8, [Development] [Releasing] HEADS-UP: Branching from ‘dev’ to ‘5.8’ ongoing, Qt 5.8 Feature Freeze coming…, [Development] HEADS-UP: Branching from ‘dev’ to ‘5.8’ ongoing, Qt 5.8 Feature Freeze coming….
Merci à Claude Leloup pour ses corrections.

Sortie d’InjeQt 1.1

L’injection de dépendances est un patron de conception qui a de plus en plus la cote. Un de ses objectifs est d’éviter l’utilisation de singletons dans une application (qui provoquent les mêmes troubles que des variables globales) en implémentant l’inversion de contrôle : au lieu que le « code spécifique » (comme une manière de lire des données : du réseau, d’un fichier, etc.) appelle le « code générique » (par exemple, un traitement sur des données), c’est l’inverse qui se produit. Ce « code générique » exploite donc des interfaces pour appeler le « code spécifique » qui lui est fourni en argument. Cette manière de concevoir des applications permet notamment de faciliter les tests : la partie injectée peut être implémentée au niveau du test, ce qui permet de tester exclusivement le « code générique ».

InjeQt est une implémentation de ce patron de conception pour Qt. Ce fait n’est pas si anodin : d’habitude, ces implémentations sont font dans des langages plus dynamiques que le C++, en exploitant des fonctionnalités de réflexion… qui n’existent pas en C++. Par contre, Qt les fournit par son système de métaobjets. InjeQt peut donc proposer des services (du « code spécifique »), pour peu qu’il dérive de QObject (directement ou non). Les dépendances entre classes sont alors explicitées par le biais de la macro INJEQT_SET.

La version 1.1, nouvellement sortie, permet l’injection directe dans un objet par la méthode inject_into(QObject*), ainsi que la définition d’une hiérarchie d’injecteurs (composée de parents et de sous-injecteurs provider_by_parent_injector). Cette dernière fonctionnalité permet notamment à une extension d’une application de récupérer une série de services déjà définis à l’échelle globale (un sous-injecteur) depuis l’injecteur défini dans cette extension (l’injecteur parent).

Télécharger le code source d’InjeQt 1.1.
Source : Injeqt 1.1 and testing Qt applications et le code source d’InjeQt.

Sortie de GammaRay 2.5.1

Il n’aura pas fallu longtemps à KDAB pour annoncer la première mise à jour corrective de GammaRay 2.5. Cette 2.5.1 corrige un certain nombre de défauts :

  • la compilation d’extensions externes est maintenant possible quand GammaRay est installé avec un autre préfixe que celui par défaut ;
  • une condition de course a été éliminée lors de la récupération des paramètres de la sonde ;
  • l’outil de sélection n’affiche plus d’entrées vides avec Qt 4 ;
  • les composants étaient mal dispositionnés dans les barres d’outils flottantes ;
  • le menu contextuel de l’outil de navigation affiche maintenant le nom de outils plutôt que les identifiants internes ;
  • le plantage lorsque la cible de débogage arrête la connexion en premier a été éliminé ;
  • le manuel utilisateur a été enrichi ;
  • le navigateur des codecs n’affiche plus de valeur aléatoire en changeant la sélection.

Le code source est disponible sur GitHub, tout comme des installateurs pour Linux et OS X (les développeurs utilisant Windows n’ont pas encore droit à un installateur).

Source : GammaRay 2.5.1 released.

Nouvelle extension pour Visual Studio : Qt VS Tools

Après quelques années de décrépitude, l’extension Qt pour Visual Studio est de retour. L’ancien code utilisait des parties obsolètes de Visual Studio, il a fallu le réécrire complètement pour obtenir la compatibilité avec les versions les plus récentes. Au passage, il change de nom avec la première préversion Beta publique : désormais, il faudra parler de Qt VS TOols. Ses utilisateurs seront ravis de voir le poids de l’installateur diminuer drastiquement : de 200 Mo à à peine 7 Mo.

Le principal changement est que cette extension est maintenant compatible avec Visual Studio 2013 et 2015 (au lieu de 2008 à la 2012 précédemment). Les principaux types de Qt sont maintenant reconnus dans le débogueur C++ et le contenu des variables est affiché de manière naturelle. Cette extension utilise maintenant le système d’assistants de Visual Studio pour une meilleure intégration à l’environnement. Une fois installée, l’extension offre la possibilité de créer un nouveau projet Qt et de nouveaux fichiers Qt depuis les menus habituels de l’EDI (les assistants nommés Qt5 disparaîtront pour la version finale, ils ne sont pas censés fonctionner).

Dans le futur, cette extension devrait être directement disponible depuis la galerie intégrée (la Visual Studio Gallery) et donc directement installable depuis l’environnement, sans téléchargement extérieur. Au niveau des fonctionnalités, QML devrait débarquer (probablement dans une version à venir), ainsi que la localisation de l’extension et l’accès à l’aide de Qt par la touche F1.

Télécharger Qt VS Tools 2.0 Beta (Visual Studio 2013 et 2015).

Source : From Visual Studio Add-In to Qt VS Tools (Beta).

Sortie de Qt Creator 4.1 RC1

Après un mois de peaufinage, voici venu Qt Creator 4.1 RC1. Il s’agit principalement de correction de défauts divers. Néanmoins, cette RC vient avec deux nouveaux thèmes pour l’éditeur de code, basés sur la palette de couleur Solarized : l’un est clair, l’autre foncé, ce qui devrait convenir à la plupart des utilisateurs. Ces deux thèmes sont des dérivés des nouveaux thèmes plats arrivés avec la préversion Beta.

Une fois n’est pas coutume, cette RC est annoncée avec un problème majeur connu : l’incompatibilité entre le compilateur Visual C++2015 Update 3 et le modèle de code Clang en version 3.8 (avec cette combinaison, il n’est plus possible d’utiliser l’extension d’analyse statique du code). De plus, l’empaquetage est loin d’être parfait, puisque le fichier indiquant les changements dans cette RC n’a pas été mis à jour (il est cependant disponible en ligne).

Télécharger Qt Creator 4.1 RC1.
Source : Qt Creator 4.1 RC1 released.

AMD annonce la première carte graphique avec SSD intégré, nommée Radeon Pro SSG

La bataille des annonces fait rage cette semaine, au SIGGRAPH : NVIDIA a annoncé ses cartes graphiques haut de gamme et professionnellesde dernière génération, des bêtes de calcul (Quadro P5000 et P6000 pour les professionnels, Titan X Pascal pour les particuliers) ; AMD réplique sur un autre terrain. Ici, il n’est pas question de performance brute (Polaris n’a pas l’air d’arriver à battre à plates coutures les dernières avancées de NVIDIA), mais bien de mémoire : AMD ajoute un SSD sur certaines cartes.

En effet, les cartes graphiques actuelles sont surtout limitées au niveau de la bande passante du bus PCIe, pour envoyer des données du processeur principal vers la carte graphique. Leur mémoire est déjà assez grande dans la gamme professionnelle (jusque vingt-quatre gigaoctets par carte chez NVIDIA, trente-deux chez AMD), mais pas toujours suffisante pour gérer de très importantes quantités de données, que ce soit pour la prospection de gaz et de pétrole (et les applications en ingénierie, de manière générale), l’affichage de grandes scènes détaillées en réalité virtuelle (par exemple, pour des applications médicales)… ou l’encodage de vidéos 8K (pour la création de contenu). Dans ce cas, si toutes les données ne peuvent pas être présentes sur la mémoire de la carte, une partie est déchargée dans la mémoire centrale ou sur le stockage de masse de la machine, en transitant par le bus PCIe — ce qui dégrade la performance.

L’idée d’AMD est d’ajouter un SSD directement au niveau de la carte graphique : ainsi, elle pourra disposer d’un stockage très imposant (un téraoctet !) accessible facilement, sans délai de transit dans un bus « lent ». Cela pourra accélérer de plusieurs ordres de grandeur certains traitements très gourmands en mémoire et en bande passante. Selon les informations disponibles actuellement, la carte dispose de deux ports au format M.2, prévus pour connecter ces SSD.

Les résultats sont impressionnants pour les prototypes actuels : AMD a réussi à encoder une vidéo 8K (7680 pixels de large, 4320 pixels de haut, c’est-à-dire une trentaine de mégapixels) à raison de nonante-six images par seconde, contre dix-sept pour le même GPU mais sans SSD. Ce gain se paie : il est possible de commande des kits de développement au prix de 9999 $, avec une mise à disposition au grand public à l’horizon 2017.

Source : AMD Radeon™ Pro SSG Set to Transform Workstation PC Architecture, and to Shatter Real-Time Visual Computing Barriers, AMD Announces Radeon Pro SSG: Polaris With M.2 SSDs On-Board (image).

Un nouveau moteur de simulation de liquides pour Unreal Engine 4 : NVIDIA Cataclysm

L’annonce n’est pas encore officielle, mais le code source est déjà disponible et les vidéos en ligne : NVIDIA propose un nouveau solveur physique généraliste pour la simulation de liquides dans Unreal Engine (en sus de Flex).

Unreal Engine 4 est un moteur de jeu bien implanté dans le domaine, notamment chez les professionnels, avec un rendu très léché, même si les premiers développements ont eu lieu en 2005 et les premières démos publiques en 2012. De son côté, NVIDIA a une très bonne expérience dans le développement de simulations physiques, notamment avec son moteur physique PhysX ou la suite GameWorks.

Dernièrement, le code source d’une nouvelle démo est apparu sur les dépôts de NVIDIA, intégrant le solveur FLIP dans Unreal Engine 4.12.5. Les calculs s’effectuent sur le processeur graphique et leurs résultats s’intègrent dans la gestion des particules d’Unreal Engine. En temps réel, FLIP peut simuler jusque deux millions de particules.

Le code de simulation utilise une approche hybride (d’ailleurs, FLIP signifie fluid implicit particle) : l’information générée par la simulation est stockée au niveau de particules (comme Flex), tandis que les calculs sont réalisés selon une approche plus classique à base de grille.

Télécharger le code source de la démo. (enregistrement du compte GitHub nécessaire auprès d’Epic).
Source, image et vidéo : NVIDIA presents Cataclysm liquid solver for Unreal Engine 4.

Sortie de GammaRay 2.5

GammaRay est un puissant outil d’introspection pour les applications Qt, il sert notamment lors du débogage. (Une présentation plus complète en a été faite pour la précédente version.) KDAB décrit la version 2.5 comme la plus importante en termes de fonctionnalités : GammaRay est maintenant compatible avec Qt 5.7, permet l’introspection dans des scènes Qt 3D ; côté Qt Quick, il devient possible d’accéder aux chaînes de propriétés contextuelles et aux informations de type ; partout, GammaRay offre des statistiques sur les métaobjets.

L’interface de GammaRay a aussi été quelque peu revue, notamment pour la navigation dans le code source (tant C++ que QML), dans les objets et dans les fichiers de ressources. L’inspection à distance a également été améliorée, avec la possibilité de sélectionner des éléments Qt Quick et Qt Widgets, de rediriger les stimuli vers des widgets distants, de mesurer des distances dans une vue Qt Quick distante, de zoomer dans une interface distante.

Côté réseau, la communication peut maintenant se faire par IPv6. Il est aussi maintenant possible d’accéder aux informations sur le chiffrement SSL et sur les certificats utilisés par QSslSocket. Les témoins de connexion sont explorables par un outil dédié.

Télécharger GammaRay 2.5.0.
Sources : GammaRay 2.5 release, [Gammaray-interest] [ANNOUNCE] GammaRay 2.5.0.

Qt WebBrowser 1.0

Qt WebBrowser est un navigateur Web prévu spécifiquement pour les plateformes embarquées. Il exploite plus particulièrement Qt WebEngine, c’est-à-dire le moteur d’affichage derrière Google Chrome. Il gère donc les toutes dernières fonctionnalités de HTML5, tout en ayant une interface minimale prévue pour les écrans tactiles. L’utilisateur est relativement limité, mais les besoins de base sont assouvis : recherche dans une page, favoris, onglets, affichage de vidéos en plein écran et audio (selon les codecs disponibles), mode de navigation privée.

Pour le compiler, les besoins sont minimaux : ce navigateur exploite Qt Quick, Qt WebEngine et Qt VirtualKeyboard. Tous ces modules sont disponibles dans l’édition libre de Qt dès la version 5.7. Pour des performances acceptables, l’accélération OpenGL est requise, avec un gigaoctet de mémoire — même si les développeurs indiquent qu’il reste beaucoup de chemin à parcourir au niveau de l’utilisation des ressources.

Jusqu’à présent, Qt WebBrowser n’était qu’une démo livrée avec Qt for Device Creation, une version propriétaire de Qt ciblée pour les développeurs embarqué. Maintenant, il est disponible sous les licences GPL 3 et commerciale.

Source et image : Qt WebBrowser 1.0.
Voir aussi : la documentation, les sources.

Sortie de OpenMPI 2.0

MPI (message passing interface) est une norme très utilisée pour programmer des superordinateurs. De manière plus générale, l’API sert à distribuer des calculs sur plusieurs machines (jusque des centaines de milliers de processeurs), sans forcément l’architecture lourde d’un superordinateur ou d’un centre informatique (quelques machines sur un réseau Ethernet suffisent, pas besoin de connexions spécifiques comme InfiniBand). De manière générale, MPI lance le même programme sur tous les ordinateurs du réseau ; ces derniers peuvent alors communiquer en envoyant (MPI_Send) et en recevant des messages (MPI_Recv) de manière synchronisée — pour les fonctionnalités de base.

Cette norme compte principalement deux implémentations libres : MPICH, l’historique, dont beaucoup de versions commerciales dérivent (comme Intel ou Microsoft), l’implémentation de référence ; OpenMPI, qui a débuté comme une implémentation alternative par plusieurs universités et centres de recherche, parfois plus rapide à l’exécution. Cette dernière vient de voir une nouvelle version majeure, OpenMPI 2.0. Celle-ci apporte bon nombre de changements par rapport à la version précédente, 1.10 : la compatibilité binaire est d’ailleurs cassée, il faudra recompiler les applications pour profiter d’OpenMPI 2.0.

Au niveau normatif, cette nouvelle version est compatible avec MPI 3.1, la dernière version, parue en juin 2015. Elle n’apporte que des changements mineurs par rapport à la précédente.

Plus important, l’accès à la mémoire des autres ordinateurs coordonnés à travers MPI (RMA) a été largement amélioré. Ces fonctionnalités servent à lire directement de la mémoire sur un autre ordinateur du réseau, sans besoin de communication synchrone supplémentaire entre les deux machines : seul l’ordinateur qui a besoin des informations est bloqué en les attendant, celui qui est censé les envoyer n’a aucun traitement spécifique à effectuer (tout est géré par MPI). Ces opérations étant assez courantes à effectuer, des interfaces de communication comme InfiniBand proposent des opérations similaires : OpenMPI peut maintenant les exploiter.

OpenMPI améliore sa gestion des ressources pour exploiter à leur plein potentiel des supercalculateurs d’un exaflops (actuellement, ils plafonnent à quelques dizaines de pétaflops). Ainsi, la consommation de mémoire au lancement des processus est limitée pour de très grands nombres de machines en évitant d’initialiser trop tôt des structures de données coûteuses (paramètre mpi_add_procs_cutoff). La communication entre les ordonnanceurs des superordinateurs et les applications pourra se faire avec l’interface PMIx — ce qui représente une étape importante pour gérer au mieux la puissance de calcul disponible.

Sources : [Open MPI Announce] Open MPI v2.0.0 released, Open MPI gets closer to exascale-ready code.
Merci à Claude Leloup pour ses corrections.