Myriad Blog 1.3.0 Tuesday, Jan 27th, 2015 at 10:14pm 

Dev News Monday, Jan 26th, 2015 at 04:55pm
Acam Winter étape 33

 
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
 Leave a comment.

Dev News Thursday, Jan 22nd, 2015 at 04:53pm
Acam Winter étape 32

 
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
 Leave a comment.

Dev News Tuesday, Jan 20th, 2015 at 04:58pm
Acam Winter étape 31

 
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
     Leave a comment.

    Technical Friday, Jan 16th, 2015 at 05:15pm
    Pointeur souris en couleur sous X11

     
    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
     Leave a comment.

    Dev News Wednesday, Jan 14th, 2015 at 05:06pm
    Acam Winter étape 30

     
    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
     Leave a comment.

    Dev News Monday, Jan 12th, 2015 at 05:01pm
    Acam Winter étape 29

     
    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

    Dev News Thursday, Jan 8th, 2015 at 05:01pm
    Acam Winter étape 28

     
    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

    Dev News Tuesday, Jan 6th, 2015 at 05:11pm
    Acam Winter étape 27

     
     
    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

    Dev News Wednesday, Dec 31st, 2014 at 05:06pm
    Acam Winter étape 26

     
    Les derniers points manquants dans la version d'Acam Winter pour Linux ont tous été pris en compte et terminés, après moultes recherches.
     
    La programmation Linux tient plus de l'alchimie que du processus industriel. Par exemple, la gestion de la molette de la souris sur X passe par un pseudo-appui sur les boutons 4 et 5 de la souris.
    Ce n'est expliqué nulle part, commenté nulle part, il faut juste le savoir. C'est pourquoi Linux est une telle "usine à gourous" : le savoir y est empirique, transmis de bouche à oreille, et noyé dans la montagne de sites recopiant le résultat de la commande "man".
     
    Nous avons donc maintenant une version quasi fonctionnelle d'Harmony Assistant sur Acam-Winter Linux.
     
    Les dépendances ont été réduites, il faut voir maintenant si on peut aller plus loin.
     
    Pour mémoire, il y a trois manières d'utiliser un module externe ou système dans une application :
     
    - La plus courante est appelée liaison dynamique ou dépendance. Lors du lancement de l'application, les modules nécessaires sont recherchés dans le système. Ils seront utilisés par l'application. S'ils ne sont pas tous présents, l'application ne se lancera pas.
     
    - La plus sûre est appelée liaison statique. Le module est directement intégré dans l'application, augmentant de ce fait sa taille. C'est la solution à privilégier pour limiter les ennuis, mais ce n'est pas toujours possible.
     
    - Entre les deux, lorsqu'un module n'est pas absolument nécessaire, et lorsque l'application peut se débrouiller sans, il y a le "weak link". La liaison dynamique est effectuée par le programme lui-même après son démarrage. Si le module n'est pas trouvé, l'application continue quand même.  
     
    Voici la liste des dépendances d'Harmony Assistant à ce jour.
     
    linux-gate.so.1  
     libasound.so.2 => /usr/lib/i386-linux-gnu/libasound.so.2
     libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2
     librt.so.1 => /lib/i386-linux-gnu/librt.so.1
     libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0
     libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6
     libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1
     libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6
     libm.so.6 => /lib/i386-linux-gnu/libm.so.6
     libc.so.6 => /lib/i386-linux-gnu/libc.so.6
     /lib/ld-linux.so.2
     libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1
     libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1
     libz.so.1 => /lib/i386-linux-gnu/libz.so.1
     libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6
     libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6

     
    Et en voici le détail, avec les questions et problèmes que nous nous posons :
     
  • linux-gate (Accès à Linux) Trop lié au système pour envisager un passage en statique
  • libasound (Alsa, gestionnaire sonore) Trop volumineux, complexe et lié au système pour passer en statique
  • libdl (laison dynamique)  D'après certains forums, trop lié au système pour passer en statique
  • librt (Extensions Temps Réel) Gestions des entrées-sorties, flux, fichiers, etc. D'après certains forums, trop lié au système pour passer en statique
  • libpthread (Gestion des processus) D'après certains forums, trop lié au système pour passer en statique
  • libX11 (Système d'interface homme-machine X11) Trop volumineux, complexe et lié au système pour passer en statique
     Necessite libfontconfig, libxdcmp
  • libfontconfig (Fontconfig, gestion des polices) Trop complexe et volumineux pour passer en statique
  • libfreetype (Freetype, affichage de polices)  Trop complexe et volumineux pour passer en statique
  • libm (bibliothèque mathématique du C)  Tentative de passage en statique inopérante, raison indéterminée à ce jour
  • libc (bibliothèque C standard) Le passage en librairie statique semble déconseillé. À vérifier. Tentative de passage en static inopérante, raison indéterminée à ce jour
  • ld-linux (chargement dynamique de librairies). Permet les weak links. Vérifier le rapport avec libdl.
  • libxcb (interface sur le protocole X-Window). Semble être une alternative à Xlib. Pas certain de comprendre qui en a besoin.
     necessite libXau
  • libexpat (XML) lecture de fichier XML. Tentative de passage en statique inopérante, probablement utilisée par une autre lib (fontes, etc)
  • libz (Zlib) compression ZIP.  Tentative de passage en statique inopérante, probablement utilisée par une autre lib (fontes, etc)
  • libXau (X11 Authorization Protocol) Quelle utilité ?
  • libXdcmp (X Display Manager Control Protocol) : interactions avec le gestionnaire d'affichage de X Window
     
    La bibliothèque optionnelle libXrender, permettant les pointeurs souris en couleur, est chargée en weak-link, et ne fait fonc pas partie des dépendances.
     
    Voila, il nous reste à trouver des réponses à toutes nos questions sur ces modules.
     
    Mais je crois que ça pourra attendre 2015
     
    Joyeux réveillon à tous !
  • by Olivier Guillion
     1 comment.

    Dev News Monday, Dec 29th, 2014 at 05:20pm
    Acam Winter étape 25

     
     
    Avant de pouvoir envisager une version alpha, 4 points doivent encore être réglés dans Acam-Winter :
     
  • Les pointeurs de souris non-standards, en couleur
  • La gestion de la molette de la souris
  • Des problèmes de clavier : certaines touches de fonctions sont considérées comme restant appuyées lorsqu'elles sont relâchées quand l'application n'est plus à l'avant-plan
  • Les palettes qui disparaissent lorsque l'application n'est plus à l'avant-plan, ceci n'étant plus nécessaire lorsqu'on a une grande fenêtre "bureau" qui contient les fenêtres de l'application
     
    Nous nous sommes donc attaqués aux pointeurs souris en couleur, et nous sommes rendus compte que ce n'était tout simplement pas possible avec X11.  
     
    Pour pouvoir les gérer, il faut utiliser Xrender, ce qui implique une dépendance supplémentaire. Et si nous l'utilisons, ce module semble permettre également l'utilisation de polices de caractères vectorielles et anticrénelées, ce qui fait double emploi avec freetype.
     
    Nous nous posons donc les questions suivantes : est-ce freetype qui utilise Xrender ou le contraire (ou les deux librairies sont-elles totalement indépendantes?). Et si Xrender est à un plus bas niveau et nous permet de nous affranchir de freetype, a-t-on à notre disposition toutes les fonctions dont on a besoin ?
     
    Une fois de plus, tenter de résoudre un problème sous Linux nous amène à nous en poser trois autres, d'où l'impression confuse de pédaler sans avancer.
  • by Olivier Guillion


    Full view
    Reduced view
    Most recent first
    Oldest first
    All
    Didier Guillion
    Olivier Guillion
    Sylvie Ricard
    All
    Dev News
    Technical
    Mood
    Memories
    Myriad Life
    To be seen
    30 previous days
    Apr 2006
    May 2006
    Jun 2006
    Jul 2006
    Aug 2006
    Sep 2006
    Oct 2006
    Nov 2006
    Dec 2006
    Jan 2007
    Feb 2007
    Mar 2007
    Apr 2007
    May 2007
    Jun 2007
    Jul 2007
    Aug 2007
    Sep 2007
    Oct 2007
    Nov 2007
    Dec 2007
    Jan 2008
    Feb 2008
    Mar 2008
    Apr 2008
    May 2008
    Jun 2008
    Jul 2008
    Aug 2008
    Sep 2008
    Oct 2008
    Nov 2008
    Dec 2008
    Jan 2009
    Feb 2009
    Mar 2009
    Apr 2009
    May 2009
    Jun 2009
    Jul 2009
    Aug 2009
    Sep 2009
    Oct 2009
    Nov 2009
    Dec 2009
    Jan 2010
    Feb 2010
    Mar 2010
    Apr 2010
    May 2010
    Jun 2010
    Jul 2010
    Aug 2010
    Sep 2010
    Oct 2010
    Nov 2010
    Dec 2010
    Jan 2011
    Feb 2011
    Mar 2011
    Apr 2011
    May 2011
    Jun 2011
    Jul 2011
    Aug 2011
    Sep 2011
    Oct 2011
    Nov 2011
    Dec 2011
    Jan 2012
    Feb 2012
    Mar 2012
    Apr 2012
    May 2012
    Jun 2012
    Jul 2012
    Aug 2012
    Sep 2012
    Oct 2012
    Nov 2012
    Dec 2012
    Jan 2013
    Feb 2013
    Mar 2013
    Apr 2013
    May 2013
    Jun 2013
    Jul 2013
    Aug 2013
    Sep 2013
    Oct 2013
    Nov 2013
    Dec 2013
    Jan 2014
    Feb 2014
    Mar 2014
    Apr 2014
    May 2014
    Jun 2014
    Jul 2014
    Aug 2014
    Sep 2014
    Oct 2014
    Nov 2014
    Dec 2014
    Jan 2015
    Jan 27th, 2015 at 05:19pm 
    Article from Didier Guillion
    ACAM sur Mac étape 19
    Jan 26th, 2015 at 04:55pm 
    Article from Olivier Guillion
    Acam Winter étape 33
    Jan 23rd, 2015 at 04:53pm 
    Article from Didier Guillion
    ACAM sur Mac étape 18
    Jan 22nd, 2015 at 04:53pm 
    Article from Olivier Guillion
    Acam Winter étape 32
    Jan 21st, 2015 at 04:54pm 
    Article from Didier Guillion
    ACAM sur Mac étape 17
    Jan 20th, 2015 at 04:58pm 
    Article from Olivier Guillion
    Acam Winter étape 31
    Jan 19th, 2015 at 04:55pm 
    Article from Didier Guillion
    ACAM sur Mac étape 16
    Jan 16th, 2015 at 05:49pm 
    Comment from dheo
    Keyboard Input
    Jan 16th, 2015 at 05:49pm 
    Comment from dheo
    Keyboard Input
    Jan 16th, 2015 at 05:49pm 
    Comment from dheo
    Keyboard Input

    Top of page
    Last update:  (c) Myriad