Nous avons installé 10 autres distributions de Linux, et testé notre procédure d'installation sur chacune d'elles, ce qui porte à 16 le nombre de systèmes Linux différents sur lesquels l'installation a été validée. En plus des 6 validées avant-hier (pour PCLinuxOS 64 bits, un test spécifique dans l'installateur a permis de tout installer proprement), nous avons ajouté OpenSuse 13.2 32 bits (gnome), Mageia 4.1 32 bits (gnome), Ubuntu 14.04/14.10 en 32 et 64 bits, Mint 17.1 Cinnamon en 32 et 64 bits, Debian 7.8.0 en 32 et 64 bits, et enfin Puppy / Slacko 5.7 32 bits et Puppy / Lighthouse 5.15 64 bits. Seuls Gentoo et Arch ont eu raison de notre patience, une installation de ces systèmes avec un environnement graphique relevant de l'exploit. Maintenant que l'installateur est plutôt bien au point, nous avons commencé les corrections du programme lui-même : Correction d'une erreur dans l'export MusicXML pouvant conduire à des crashs ou instabilités (toutes plateformes) Correction d'une erreur dans la détermination de l'espace libre sur le disque lorsque celui-ci a plus de 2 To de libre (toutes plateformes) Correction d'un problème d'affichage des accentués dans la boîte de crash sous Linux Nous continuons à traiter les retours des alpha-testeurs Linux, dans l'ordre de réception. Bon week-end ! |
|
|
by Olivier Guillion | | | |
|
Parmi les périphériques de sortie gérés par Harmony on trouve depuis plusieurs années QuickTime. L'optique étant de se débarrasser des couches anciennes (dont Carbon) le synthétiseur interne à CoreAudio sera utilisé à la place de QuickTime. L'entrée numérique en mono et stéréo a été réécrite en utilisant le CoreAudio. |
|
|
by Didier Guillion | | | |
|
L'installation manuelle d'Harmony Assistant sur Linux s'avérant un peu trop compliquée, nous tentons de proposer un système d'installation automatique multi-architecture (32 ou 64 bits) et multi-distribution. Voici à quoi nous en sommes arrivés, après avoir bûché et trébuché sur le langage de script shell Linux : - L'archive installable serait un seul fichier .run ou .sh (donc sous la forme d'un script shell) - Après téléchargement, elle devrait être copiée par l'utilisateur dans un dossier facilement accessible (p.ex. le dossier "Documents") - Par défaut, les fichiers téléchargés n'ont pas la permission "Exécuter". Cela signifie qu'il n'est pas possible de lancer par double-clic un fichier qui vient d'être téléchargé, que ce soit un exécutable (ELF), un script shell (.sh ou .run), un script perl (.pl), ou tout autre format qui correspond à un programme. Ceci est apparemment mis en place pour des raisons de "sécurité" (vous savez, le truc qui vous pourrit la vie "pour votre bien") - Il faut donc que l'utilisateur force la permission "exécuter" du fichier .run qu'il a téléchargé. Ceci peut se faire généralement par "clic droit > Propriétés >Permissions" ou sous terminal par sudo (ou su) chmod 777 <nom du fichier.run> - Ensuite, l'utilisateur devrait pouvoir double-cliquer sur le fichier pour le lancer. Mais ce serait trop simple, ceci n'est pas autorisé avec certaines distributions (fedora par exemple), qui à la place le charge dans un éditeur de texte, toujours pour des raisons de "sécutité" (pour votre bien et toussa) Sur ces systèmes, il faut alors ouvrir un terminal, se positionner dans "Documents", et entrer le nom du fichier .run pour le lancer Et alors là, roulement de tambours, on obtient cette magnifique interface digne des plus fameux programmes des années 70 : Mais les scripts qui tournent derrière sont plus compliqués que ça en a l'air, car ils doivent mettre en place tout ce qui est nécessaire pour qu'Harmony Assistant puisse fonctionner correctement, et en particulier les bibliothèques 32 bits. Nous sommes en train de tester tout ça sur un maximum de systèmes Linux. En voici la liste jusqu'ici : PCLinuxOS 32 bits Aucun problème rencontré PCLinuxOS 64 bits Impossible d'installer les bibliothèques 32 bits nécessaires. Si quelqu'un connait un bon "repository", qu'il se signale. OpenSuse 64 bits Aucun problème rencontré Fedora 32 bits Aucun problème rencontré (pas possible de lancer l'archive par double-clic, on doit lancer un terminal) Fedora 64 bits Aucun problème rencontré (pas possible de lancer l'archive par double-clic, on doit lancer un terminal) Mageia 64 bits Fonctionne, mais le système est assez pourri, empêchant l'installation de bibliothèques lorsqu'un process de mise à jour des repository (urpmi.update) tourne en tâche de fond et on continue, il y en reste beaucoup... |
|
|
by Olivier Guillion | | | |
|
Depuis les premières versions de la MIDI, les technologies de gestion de la MIDI sur Mac ont subi une impressionnante série de chaises musicales, chacune chassant "définitivement" l'autre. Midi Manager, OMS, QuickTime, sont apparemment désormais obsolètes et le framework CoreMidi le seul valable et pérenne. Nous avons donc repris la gestion de la sortie MIDI à la base afin de simplifier le code source et éliminer tous les fossiles. Ceci a abouti à une gestion MIDI plus efficace dans la version Carbon d'Harmony et Melody. Une conséquence agréable est l'unification totale de la sortie MIDI entre la version Carbon et la version ACAM. Dans la foulée l'entrée MIDI a été elle aussi normalisée et implémentée. |
|
|
by Didier Guillion | | | |
|
Une nouvelle version alpha pour Linux (9.6.4 alpha-4) a été mise à disposition. Elle intègre toutes les améliorations décrites sur ce blog, et devrait donc être plus stable et plus fonctionnelle. En attendant les retours des alpha-testeurs, nous essayons d'automatiser la procédure d'installation en peaufinant un ensemble de scripts shell. L'utilisation d'un système de paquetage nous paraît assez compromise étant donné le manque d'uniformisation de ces derniers. Nous voudrions ne conserver qu'une seule archive de l'application, qui s'installe sur toutes les distributions, au lieu des 3 versions (.deb 32, .deb 64, .rpm) que nous avions précédemment et qui nous apportaient principalement des ennuis plutôt que des avantages. |
|
|
by Olivier Guillion | | | |
|
Pour finir la semaine : La gestion des fichiers ressources Son est abandonnée : elle n'a plus de signification : les fichier ressources ne sont gardés qu'à des fins de compatibilité dans Mac OS X. Nous avons attaqué l'implémentation MIDI. La première étape a été de mettre en place un timer au 1000eme de seconde. Puis nous avons défini une audio unit qui accepter les évènements MIDI et les interprète. Tout ceci avec succès. Bon week-end ! |
|
|
by Didier Guillion | | | |
|
Une jolie petite boîte a été créée sur Acam Winter. Elle permettra à nos applications de proposer un sélecteur de couleur standard, sur tous les systèmes. En voici un aperçu : Elle présente la palette de couleur au format HSL pour Hue (teinte) - Saturation - Luminance. En haut de la boîte, la double flèche permet de choisir la représentation : Teinte et saturation dans le grand cadre, luminance dans la barre de droite Teinte et luminance dans le grand cadre, saturation dans la barre de droite Saturation et luminance dans le grand cadre, teinte dans la barre de droite Au-dessous, des palettes de couleur permettent de choisir rapidement une couleur : - Soit dans une palette spécifique à l'application - Soit dans une liste des couleurs précédemment sélectionnées - Soit dans une palette de 256 couleurs - Soit dans une palette de 256 gris. Enfin, il est possible d'entrer les valeurs numériques, en RVB, HSL ou en code couleur HTML. Un cadre de prévisualisation, en bas à droite, permet de comparer la couleur actuellement choisie avec la précédente. Cette boîte pourra être testée dans la prochaine version Alpha pour Linux, dans le choix de la couleur du thème graphique. |
|
|
by Olivier Guillion | | | |
|
Aujourd'hui nous nous sommes attaqué à un point de détail qui s'est avéré plus ardu que prévu. Nous voulions ajouter un menu surgissant dans la boite de dialogue standard de la sauvegarde afin de pouvoir choisir le format d'export. Cela a demandé une grosse bidouille et l'écriture de pas mal de code, mais c'est fonctionnel : Nous allons aborder maintenant la saisie/sortie MIDI. |
|
|
by Didier Guillion | | | |
|
Les points suivants ont été corrigés ou améliorés, sur Acam Winter Linux: Une icône réseau est apparue dans la barre de raccourcis du sélecteur de fichier. Elle permet d'accéder aux dossiers partagés qui ont été montés dans le système. Cependant, l'emplacement de ces dossiers partagés semble changer selon la distribution (et parfois sa version). Il se peut donc que cela ne fonctionne pas partout. La case de fermeture dans la barre de titre du sélecteur de fichiers est maintenant opérationnelle Les effets d'apparition/disparition progrssives des fenêtres (glissement/fondu, etc) ont été remis en place. Cependant cela semble assez lent et nécessiterait un calibrage, mais peut-être est-ce dû au fait que nous faisons tourner Linux sur des machines virtuelles? Les options de la boîte d'impression sont maintenant sélectionnables La boîte de sélection de police a été mise en place, et est totalement fonctionnelle. Il nous faut maintenant la tester en profondeur Il ne nous reste que très peu de points à corriger/améliorer. Une nouvelle version alpha devrait donc arriver bientôt, même si nous n'avons eu que très peu de retours sur celle-ci. |
|
|
by Olivier Guillion | | | |
|
Aujourd'hui nous avons mis en place les curseurs souris en couleur. L'utilisateur pourra définir leur taille dans les préférences générales de l'application. Les fenêtres à bord arrondis ont été implémentées. A noter que les fenêtres peuvent avoir une ombre. |
|
|
by Didier Guillion | | | |
|
Les fonctions X11 de gestion de la forme du pointeur souris nous ont posé pas mal de problèmes. Notre objectif était le suivant : A partir d'une image de dimension donnée, chaque pixel de l'image étant connu et constitué de 32 bits (8 bits de rouge, 8 bits de vert, 8 bits de bleu et 8 bits de transparence), nous voulions obtenir un pointeur souris correspondant. Très rapidement, on s'aperçoit qu'on quitte le champ de la documentation pour entrer dans celui de l'expérimentation. Les pointeurs monochromes La fonction XCreatePixmapCursor notamment, reçoit en entrée un Pixmap, qui théoriquement peut être monochrome ou RVB. Mais pour une raison indéterminée, seuls les Pixmap monochromes sont acceptés par cette fonction. Cette fonction reçoit donc une image bitmap (1 bit par pixel) correspondant au masque du pointeur, ainsi qu'une autre image bitmap correspondant au dessin du pointeur. Les deux couleurs (fond et dessin) du deuxième bitmap étant réglables, chaque pixel du pointeur peut donc soit être transparent, soit de la couleur de fond, soit de la couleur de tracé. Ceci permet de dessiner des pointeurs en deux couleurs. Pour simplifier, nous passerons sur les fonctions qui réduisent le nombre de couleurs de dessin à deux et créent une zone de données monochromes (1 bit par pixel) pour le masque (dataMask) et pour le dessin (dataImg). Les opérations sont donc les suivantes, avec width et height étant les dimensions en pixel de l'image - et du masque - source : Code://Création du "pixmap" (en fait, bitmap) du masque Pixmap pixmapMask=XCreateBitmapFromData(display,window,dataMask,width,height); //Création du "pixmap" (en fait, bitmap) de l'image Pixmap pixmapImg = XCreateBitmapFromData(display,window,dataImg,img->width,img->height); // Creation du XCursor // foreground et background sont les couleurs de dessin et de fond (XColor) calculées précédemment lors de la réduction de profondeur de l'image // hotX et hotY sont la position du "point chaud" du pointeur, c'est-à-dire l'endroit dans le dessin qui correspond à la position de clic XCursor cursor = XCreatePixmapCursor(display,pixmapImg,pixmapMask,&foreground,&background ,hotX,hotY); // Liberations XFreePixmap(display, pixmapImg); free(dataImg); XFreePixmap(display,pixmapMask); free(dataMask); |
| On peur ensuite utiliser "cursor" avec Code:XDefineCursor(display, window, cursor); |
| Les pointeurs couleur On aurait pu se dire qu'il suffisait aux développeurs de X11 de faire en sorte que la fonction XCreatePixmapCursor accepte, comme son nom semble l'indiquer, des Pixmap (couleur) au lieu de Bitmap (monochrome) pour instantanément permettre les pointeurs en couleur, mais ç'eût été trop simple. Il faut donc installer une autre bibliothèque, Xrender, qui gère également les polices de caractères antialiasées, les tracés de forme graphiques et la température des frites pour que cela puisse fonctionner. Cette bibliothèque est extrêmement mal documentée, et les exemples rares. Après plusieurs journées de recherche, voici à quoi nous en sommes arrivé. Notons que pour obtenir un object utilisable pour un pointeur X11 (XCursor), on doit passer par un empilage de concepts inutiles et redondants tels que Picture, Image, Pixmap ou GC. Solution la plus simple: Dans "data", nous avons déjà les données graphiques au format RGBA ATTENTION, c'est là que le bât blesse ! Ce n'est pas expliqué, mais les données graphiques doivent être PRÉMULTIPLIÉES ! Cela signifie que la couleur d'image des parties transparentes du pointeur doivent impérativement être noires (RVB 0,0,0). A défaut, on obtient un carré blanc autour du pointeur. Code:// Cree le pixmap 32 bits Pixmap pixmap=XCreatePixmap(display,window,width,height,32); // Crée le graphic context (gc) pour pouvoir y tracer dessus gc = XCreateGC(display,pixmap,0,NULL); // Cree l'XImage contenant les donnees RGBA du curseur XImage image=XCreateImage(display,DefaultVisual(display,DefaultScreen(display)) ,32,ZPixmap,0,data,width,height,32,width*4); // Met l'image dans le pixmap XPutImage(display, pixmap, gc, image, 0, 0, 0, 0,width,height); // Convertit le pixmap en picture XRenderPictFormat *fmt=XRenderFindStandardFormat(display,PictStandardARGB32); Picture pict = XRenderCreatePicture(display,pixmap, fmt, 0, NULL); // Cree le pointeur XCursor = XRenderCreateCursor(display, pict, hotX, hotY); // Liberations XRenderFreePicture(display,pict); XFreeGC(display,gc); XFreePixmap(display,pixmap); image->data=0; XDestroyImage(image); free(data); |
| Autre solution: Elle consiste a créer un masque monochrome comme dans le premier paragraphe converti en "Picture", ainsi qu'un Pixmap 24 bits (RVB, sans masque). L'expérience montre que cette image 24 bits doit tout de même être stockée avec 32 bits par pixel (8 bits ne servent à rien) pour des raisons plus qu'obscures. Cela nous a également fait perdre une bonne demi-journée. Ensuite, on construit une "Image" en spécifiant que les données graphiques viennent du Pixmap, et le masque de la Picture monochrome, par: Code:XRenderPictureAttributes attr; attr.alpha_map = pictMask; Picture pict = XRenderCreatePicture(display,pixmapImg, fmt, CPAlphaMap, &attr); |
| Puis cette "picture" est utilisée pour créer le pointeur. Mais ceci est seulement de la théorie. En pratique, cela ne fonctionne pas toujours. Même avec une même version de Xrender (1.3.0), cela va fonctionner sur certains systèmes, et pas d'autres. Sur certains, la transparence ne fonctionne pas et le pointeur apparaît dans un cadre blanc. Il est très probable qu'il s'agisse d'un bug quelque part dans la bibliothèque. Un masque monochrome devrait être suffisant pour gérer la transparence, quelles que soient les données graphiques. Mais il est probable que la bibliothèque considère que les pixels de l'image qui se trouvent dans une zone transparente du pointeur doivent être noires. Nous n'avons cependant pas testé cela, c'est juste une supposition qui se base sur les résultats de la méthode précédente. Voila, c'est tout pour aujourd'hui. Bon week-end ! |
|
|
by Olivier Guillion | | | |
|
Aujourd'hui nous avons mis au point la saisie des touches claviers avec "touche morte". Une touche morte (Dead Key) est une touche qui pressée, ne donne aucun caractère, c'est la touche suivante qui va le générer. Par exemple la touche "^" ne donne rien, c'est la touche "a" qui va suivre qui va donner "â". Ce mode de réaction est intimement lié à la configuration matérielle de l'utilisateur et est assez délicat à implémenter car cela doit fonctionner sur des claviers de langues les plus diverses. Ce faisant nous avons pu tester que notre saisie clavier était compatible avec les palettes systèmes sur lequel l'utilisateur peut cliquer pour insérer des caractères. Enfin, nous avons rendu cette saisie compatible Unicode. |
|
|
by Didier Guillion | | |
| |
|
Encore un lot de corrections sur Acam-Winter Linux: Saisie d'accentués dans les noms de fichiers (boîte de sélection) Gestion de l'affichage des caractères Unicode grecs, cyrilliques, hébreux, arabes, etc avec des polices ne les possédant pas Correction d'un problème de téléchargement de fichiers depuis Harmony. Cela affecte et simplifie la version Windows également Dans le sélecteur de fichier, les alertes et la saisie de nom de dossier apparaissaient derrière la boîte de sélection L'ouverture d'un script par "Scripts > Ouvrir ..." plantait L'entrée de caractères spéciaux avec Alt+chiffre ne fonctionnait pas. Maintenant on peut utiliser Alt+<décimal unicode> ou Alt+0+<hexadécimal unicode> |
|
|
by Olivier Guillion | | | |
|
Nous reprenons maintenant les points que nous avons laissés en attente. On peut citer : l'affichage des polices dans différents styles, les curseurs de la souris, les fenêtres à bords arrondis, la saisie des touches mortes du clavier et d'une façon plus spécifique à Harmony, la saisie numérique et les entrées/sorties MIDI. Depuis le début de Mac OS, trois systèmes d'affichage de caractères ce sont succédés. QuickDraw pendant très longtemps a été la référence. Ensuite l'ATSUI a vu le jour, il permettait de gérer enfin les caractères unicodes. Il n'a pas tenu la rampe très longtemps et Apple a préféré se lancer dans le CoreText plutôt que de corriger les problèmes connus de l'ATSUI. Le CoreText est plutôt bien fait et n'est pas basé sur des concept nébuleux. Nous avons cependant rencontré une mauvaise surprise. Dans les systèmes d'affichages précédents, on pouvait demander d'afficher en italique ou en gras, n'importe laquelle des polices présentes. C'est ce qui est également annoncé pour le CoreText que ce soit dans la documentation ou dans les exemples complets fournis, mais cela ne fonctionne absolument pas. Après deux jours passés sur le problème nous avons du nous résoudre à faire comme les autres développeurs : écrire nos propres fonctions pour le gras, l'italique, le relief et l'ombré. Cela fonctionne plutôt bien et va déjà plus loin que les styles proposés par le CoreText : |
|
|
by Didier Guillion | | | |
|
Nous corrigeons les problèmes signalés, ou déjà connus, de la version Linux, afin d'obtenir rapidement une version assez stable pour contenter les utilisateurs qui rencontrent des problèmes en attendant la version publique. Nous avons donc corrigé : Un problème de rendu sonore (notes qui vibrent et crachotent) en base GMSE L'activation de l'instance de l'application déjà en fonction lorsqu'on tente de démarrer le programme deux fois Les droits sur les fichiers et dossiers de préférences sont maintenant automatiquement fixés. Sinon, un lancement de l'application en mode "sudo" lui faisait créer des fichiers impossibles à modifier ultérieurement La hauteur de la barre de menu était prise en compte deux fois dans le calcul de magnétisme des palettes La boîte signalant que la session précédente n'avait pas été terminée convenablement s'affichait à tort Une erreur de mémoire dans la gestion des chaînes Unicode pouvait faire planter l'application au lancement. Ceci pouvait également impacter la version Windows |
|
|
by Olivier Guillion | | | |
|
Pour finir la semaine : Le menu de l'application (menu ? sur Acam) a été déplacé à sa position habituelle sur Mac. Gestion de la molette de la souris. Extraction de la version de Mac OS X. Ouverture de la documentation. Gestion du double-click sur les listes. Bon week-end ! |
|
|
by Didier Guillion | | | |
|
Ce coup-ci, c'est enfin parti. Nous avons installé pas moins de 7 distributions Linux différentes, puis rédigé les instructions d'installation de la version alpha d'Harmony Assistant. Celle-ci devrait donc être disponible sous quelques minutes et nous permettra de savoir si Acam-Winter fonctionne sur les différentes distributions du système. Elle sera annoncée sur le forum, ainsi que par e-mail aux utilisateurs qui en ont fait la demande. Un fichier Lisez-moi au format HTML est fourni dans l'archive, et doit être lu et appliqué pour installer correctement cette version. N'oublions pas qu'on est sur Linux, ou la ligne de commande et le clavier remplacent (trop) souvent les icônes et les double-clics. |
|
|
by Olivier Guillion | | | |
|
Le défi d'aujourd'hui était d'invoquer et de faire cohabiter la boîte standard de sélection de police. Après quelques astuces, c'est fonctionnel : La gestion des polices a été finalisée, l'ensemble des polices installées est maintenant disponible. |
|
|
by Didier Guillion | | | |
|
La version alpha pour Linux approche à grand pas. Une version du programme suffisamment fonctionnelle a été générée. Une archive installable a été créée, et nous sommes en train de la tester sur un maximum de distributions. Pour l'instant, elle s'installe sur Ubuntu 32 bits 12.04 et Mint 64 bits Cinnamon 17.1. Il y a quelques problèmes dans la recopie des thèmes graphiques, mais qui sont en passe d'être résolus. Sur Ubuntu 14.04 64 bits, l'application ne fonctionne que si elle est lancée en mode super-utilisateur, par un sudo depuis la console. Apparemment, un problème de permission sur certains fichiers. Dès que nous aurons quelque chose qui fonctionne sur suffisamment de distributions, nous le mettrons à disposition des utilisateurs désireux de le tester. Cela devrait être fait sous quelques jours. |
|
|
by Olivier Guillion | | | |
|
Pour commencer l'année : Gestion de la hiérarchie des fenêtres (palette, dialogues, document) Gestion de la transparence des fenêtres. Gestion des sous menus hiérarchiques. Gestion des différents aspect de l'interface (thèmes): Mise en place des boite de sélection de fichier avec gestion des noms par défaut et chemins. |
|
|
by Didier Guillion | | |
| |
|
|