Ce qui m'étonne c'est qu'on est obligé d'utiliser un Thread pour chaque objet graphique a actualiser / annimer.
Dans Qt que j'ai pas mal étudié, pour faire une barre de progression, une animation etc... on utilise l'objet QTimer.
Et QTimer n'utilise pas de Thread. C'est un objet pris en compte dans la boucle d'évenements QEventLoop de l'application. Cette boucle d'évenement, lorsqu'elle utilise l'appel système select() pour attendre les evenement de Xorg, doit prendre en compte les QTimers en ajoutant un timeout dans select. Ensuite avec le mécanisme de Signal/Slot de Qt, les slots d'objets liés au signal du QTimer sont alors appelés.
On fait donc avec Qt des objet animés (Barre de progression etc ...) sans qu'il n'y ai de Thread créés.
Dans Java Swing, il y'a l'air d'y avoir la même chose que sous Qt.
javax.swing.Timer :
"Fires one or more action events after a specified delay. For example, an animation object can use a Timer as the trigger for drawing its frames."
Mais dans l'API Java d'Android, Il n'y pas Swing.
Et pas d'autres objets Timer que Java.utils.Timer (Timer lié a un thread TimerTask).
Le problème est que en terme de performances ce n'est pas génial d'avoir plein de threads dans une application.
Le mieux serait que le serveur créé un socket, et lorsqu'un client se connecte dessus, le serveur créé un terminal sur lequel il peut utiliser ncurses.
Par "carte" je parle de "carte embarquée", équivalent de PC.
Donc le PC 1 se connecte en PPP sur le réseau GPRS, le FAI fournit deux adresses IP pour les serveurs DNS. Le PC 1 partage la connexion, le PC 2 l'utilise,
Mais comment le PC 2 peut accéder aux adresses IP des serveurs DNS situés sur le PC 1 ?
[*] Netfilter connection tracking support
[*] PPtP protocol support
Sans cette option les paquets GRE n'étaient pas redirigés de usb0 vers ppp0.
Il y'a une option que je n'ai pas activé :
[ ] FTP protocol support
pourtant j'ai quand même réussi à faire un télechargement par FTP avec wget.
D'après l'article Wikipedia sur le NAT, il y'a quelques limitations :
"Les communications entre postes qui se situent derrière des NAT pose un problème, c'est le cas des protocoles pair à pair.
..
Un problème majeur se pose lorsqu'un protocole de communication transmet l'adresse IP de l'hôte source dans un paquet, ou des numéros de ports. Cette adresse n'étant pas valide après avoir traversé le routeur NAT, elle ne peut être utilisée par la machine destinataire. Ces protocoles sont dits « passant difficilement les pare-feu », car ils échangent au niveau applicatif (FTP) des informations du niveau IP (échange d'adresses) ou du niveau TCP (échange de ports), ce qui transgresse le principe de la séparation des couches réseaux."
Si j'ai bien compris, le NAT permet à un client de se connecter au socket d'un serveur, et dans ce cas le NAT fonctionne.
Par contre un serveur ne peut pas envoyer de trame en se connectant à un socket du client car l'adresse et port du client n'existent pas (ils sont créés dynamiquement par le NAT).
Donc le P2P par exemple ne peut pas marcher.
Mais dans mon cas ça ne pose pas de problème.
Pour contourner ce problème il faudrait faire du routage pour indiquer qu'un port doit être redirigé sur telle adresse IP.
J'ai du également recopier le fichier /etc/resolv.conf de la carte 1 sur la carte 2 (pour le DNS).
Sachant que les adresses IP de ces serveurs DNS sont établis quand la carte 1 se connecte au réseau GPRS, y'a-t-il un moyen pour que la carte 2 utilise les mêmes serveurs DNS ?
--> Making the calibration permanent <--
Install the 'xinput' tool and copy the command(s) below in a script that starts with your X session
xinput set-int-prop "Zytronic Displays Limited Zytronic, x-y, USB" "Evdev Axis Calibration" 32 303 609 533 305
debian:~/git/git.kernel.org/linux-omap-2.6# git remote add git://gitorious.org/beagleboard-validation/linux.git validation-20100805
fatal: 'git://gitorious.org/beagleboard-validation/linux.git' is not a valid remote name
[ 1383.206119] usb 2-1: new full speed USB device using uhci_hcd and address 2
[ 1383.347487] usb 2-1: default language 0x0409
[ 1383.362490] usb 2-1: udev 2, busnum 2, minor = 129
[ 1383.362502] usb 2-1: New USB device found, idVendor=14c8, idProduct=0003
[ 1383.362514] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1383.362525] usb 2-1: Product: Zytronic, x-y, USB
[ 1383.362535] usb 2-1: Manufacturer: Zytronic Displays Limited
[ 1383.362545] usb 2-1: SerialNumber: 0000065709
[ 1383.362828] usb 2-1: usb_probe_device
[ 1383.362846] usb 2-1: configuration #1 chosen from 1 choice
[ 1383.365611] usb 2-1: adding 2-1:1.0 (config #1, interface 0)
[ 1383.365775] usbtouchscreen 2-1:1.0: usb_probe_interface
[ 1383.365786] usbtouchscreen 2-1:1.0: usb_probe_interface - got id
[ 1383.365998] input: Zytronic Displays Limited Zytronic, x-y, USB as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/input/input7
[ 1383.366218] uhci_hcd 0000:00:1d.0: reserve dev 2 ep81-INT, period 1, phase 0, 61 us
[ 1383.366289] drivers/usb/core/inode.c: creating file '002'
# Threads
Posté par ilip . En réponse au message Gestion d'un timer en Java/Android. Évalué à 0.
Ce qui m'étonne c'est qu'on est obligé d'utiliser un Thread pour chaque objet graphique a actualiser / annimer.
Dans Qt que j'ai pas mal étudié, pour faire une barre de progression, une animation etc... on utilise l'objet QTimer.
Et QTimer n'utilise pas de Thread. C'est un objet pris en compte dans la boucle d'évenements QEventLoop de l'application. Cette boucle d'évenement, lorsqu'elle utilise l'appel système select() pour attendre les evenement de Xorg, doit prendre en compte les QTimers en ajoutant un timeout dans select. Ensuite avec le mécanisme de Signal/Slot de Qt, les slots d'objets liés au signal du QTimer sont alors appelés.
On fait donc avec Qt des objet animés (Barre de progression etc ...) sans qu'il n'y ai de Thread créés.
Dans Java Swing, il y'a l'air d'y avoir la même chose que sous Qt.
javax.swing.Timer :
"Fires one or more action events after a specified delay. For example, an animation object can use a Timer as the trigger for drawing its frames."
Mais dans l'API Java d'Android, Il n'y pas Swing.
Et pas d'autres objets Timer que Java.utils.Timer (Timer lié a un thread TimerTask).
Le problème est que en terme de performances ce n'est pas génial d'avoir plein de threads dans une application.
# Handler
Posté par ilip . En réponse au message Gestion d'un timer en Java/Android. Évalué à 1.
J'ai trouvé un exemple d'une barre de progression en Java/Android :
http://www.mkyong.com/android/android-progress-bar-example/
La méthode utilisé est encore les "Handler" de la bibliothèque d'Android, qui permettent d'effectuer une action toutes les X millisecondes :
Je comprend pas trop le fonctionnement, au niveau de "post" en particulier.
D'après la doc sur Handler on peut envoyer soit un message soit un code exécutable via Handle.
Un peu bizarre je trouve ..
[^] # Re: md5sum
Posté par ilip . En réponse au message Fonction MD5. Évalué à 0.
J'ai déjà regardé, mais je crois pas qu'on puisse l'utiliser en tant que librarie partagée.
En librairie partagée pour le calcul de md5sum il y'a libssl, mais je me demandais si on pouvait pas utiliser les fonctions md5 du noyau.
[^] # Re: Choisir une solution éprouvée
Posté par ilip . En réponse au message Piloter un programme avec pty. Évalué à -1.
Le mieux serait que le serveur créé un socket, et lorsqu'un client se connecte dessus, le serveur créé un terminal sur lequel il peut utiliser ncurses.
Je sais pas si c'est possible.
[^] # Re: Choisir une solution éprouvée
Posté par ilip . En réponse au message Piloter un programme avec pty. Évalué à 0.
Le problème c'est que créer un protocole ça va être un peu lourd.
Concernant le WEB, il y'a la possibilité de créer un shell dans une page WEB il me semble (vu sur Webmin).
# ncurses sur un socket
Posté par ilip . En réponse au message Piloter un programme avec pty. Évalué à 0.
J'ai trouvé quelqu'un qui cherche exactement à faire ce que je veux faire :
http://linuxfr.org/users/niconico/journaux/dialogué-avec-un-deamon
Mais pas de solutions simples apparament.
Le problème étant qu'on ne peut pas utiliser ncurses directement sur un socket car il a besoin d'un terminal.
[^] # Re: resolv.conf
Posté par ilip . En réponse au message Partager une connexion PPP. Évalué à 0.
Par "carte" je parle de "carte embarquée", équivalent de PC.
Donc le PC 1 se connecte en PPP sur le réseau GPRS, le FAI fournit deux adresses IP pour les serveurs DNS. Le PC 1 partage la connexion, le PC 2 l'utilise,
Mais comment le PC 2 peut accéder aux adresses IP des serveurs DNS situés sur le PC 1 ?
[^] # Re: probleme reseau classique
Posté par ilip . En réponse au message Partager une connexion PPP. Évalué à 0.
Quelqu'un connait le principe d'un pont entre cartes réseau ?
J'utilise cette méthode sur des machines virtuelles, ce qui me permet d'avoir accès aux machines virtuelles depuis l'extérieur.
Ca permet donc d'avoir plusieurs adresses IP sur une même carte Ethernet.
Est-ce que ça émule logiciellement un switch ?
[^] # Re: probleme reseau classique
Posté par ilip . En réponse au message Partager une connexion PPP. Évalué à 0.
Ok merci,
Pour faire une connexion VPN sur la carte 2, j'ai du activer une option dans le noyau :
Networking options->Network packet filtering framework (Netfilter)->Core Netfilter Configuration :
[*] Netfilter connection tracking support
[*] PPtP protocol support
Sans cette option les paquets GRE n'étaient pas redirigés de usb0 vers ppp0.
Il y'a une option que je n'ai pas activé :
[ ] FTP protocol support
pourtant j'ai quand même réussi à faire un télechargement par FTP avec wget.
D'après l'article Wikipedia sur le NAT, il y'a quelques limitations :
"Les communications entre postes qui se situent derrière des NAT pose un problème, c'est le cas des protocoles pair à pair.
..
Un problème majeur se pose lorsqu'un protocole de communication transmet l'adresse IP de l'hôte source dans un paquet, ou des numéros de ports. Cette adresse n'étant pas valide après avoir traversé le routeur NAT, elle ne peut être utilisée par la machine destinataire. Ces protocoles sont dits « passant difficilement les pare-feu », car ils échangent au niveau applicatif (FTP) des informations du niveau IP (échange d'adresses) ou du niveau TCP (échange de ports), ce qui transgresse le principe de la séparation des couches réseaux."
Si j'ai bien compris, le NAT permet à un client de se connecter au socket d'un serveur, et dans ce cas le NAT fonctionne.
Par contre un serveur ne peut pas envoyer de trame en se connectant à un socket du client car l'adresse et port du client n'existent pas (ils sont créés dynamiquement par le NAT).
Donc le P2P par exemple ne peut pas marcher.
Mais dans mon cas ça ne pose pas de problème.
Pour contourner ce problème il faudrait faire du routage pour indiquer qu'un port doit être redirigé sur telle adresse IP.
[^] # Re: probleme reseau classique
Posté par ilip . En réponse au message Partager une connexion PPP. Évalué à 1.
Si ça marche.
Le réseau 192.168.1.0/24 c'est pour le réseau local Ethernet.
Après avec la connexion PPP en GPRS, le réseau est différent :
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.241.113.220 P-t-P:192.168.254.254 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:222 errors:0 dropped:0 overruns:0 frame:0
TX packets:237 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:244297 (238.5 KiB) TX bytes:12473 (12.1 KiB)
# resolv.conf
Posté par ilip . En réponse au message Partager une connexion PPP. Évalué à 0.
J'ai du également recopier le fichier /etc/resolv.conf de la carte 1 sur la carte 2 (pour le DNS).
Sachant que les adresses IP de ces serveurs DNS sont établis quand la carte 1 se connecte au réseau GPRS, y'a-t-il un moyen pour que la carte 2 utilise les mêmes serveurs DNS ?
[^] # Re: Solution Qt
Posté par ilip . En réponse au message Affichage de caractères grecques UTF-8 dans Xorg. Évalué à 1.
En effet ça marche.
Il faut modifier :
XMapWindow(d, w);
XSelectInput(d, w, ExposureMask);
par :
XSelectInput(d, w, ExposureMask);
XMapWindow(d, w);
pour avoir l'affichage.
Merci
[^] # Re: Manque d'infos
Posté par ilip . En réponse au message Affichage de caractères grecques UTF-8 dans Xorg. Évalué à 0.
J'ai essayé aussi avec LC_ALL.
Il semble que LC_ALL et LANG aient le même rôle, après les programmes utilisent l'un ou l'autre.
# Solution Qt
Posté par ilip . En réponse au message Affichage de caractères grecques UTF-8 dans Xorg. Évalué à 2.
J'ai trouvée une solution avec Qt qui fonctionne :
Ajouter après QApplication :
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
D'après la doc :
void QTextCodec::setCodecForCStrings ( QTextCodec * codec ) [static]
Sets the codec used by QString to convert to and from const char * and QByteArrays. If the codec is 0 (the default), QString assumes Latin-1.
Par contre j'ai toujours le problème avec xlib, XCreateFontSet semble complexe à utiliser.
[^] # Re: Manque d'infos
Posté par ilip . En réponse au message Affichage de caractères grecques UTF-8 dans Xorg. Évalué à 1.
J'ai essayé avec deux locales :
fr_FR.UTF-8
el_GR.UTF-8
en faisant :
LANG=el_GR.UTF-8 Xorg
DISPLAY=:0 LANG=el_GR.UTF-8 ./a.out
Les 2 locales me donnent le même résultat
dans xterm, printenv me donne :
SHELL=/bin/bash
TERM=xterm
SSH_CLIENT=192.168.56.1 1891 22
WINDOWID=2097165
SSH_TTY=/dev/pts/1
XTERM_SHELL=/bin/bash
USER=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAIL=/var/mail/root
PWD=/root/test/xlib_2
LANG=el_GR.UTF-8
XTERM_LOCALE=el_GR.UTF-8
XTERM_VERSION=XTerm(261)
HOME=/root
SHLVL=2
LOGNAME=root
SSH_CONNECTION=192.168.56.1 1891 192.168.56.21 22
DISPLAY=:0.0
_=/usr/bin/printenv
Pour la capture d'écran :
http://imageshack.us/photo/my-images/411/unledige.png/
Sachant que je demande d'afficher le texte " ΟΑΣΔΦΖΧΨΩΒzeΒ"
avec les polices :
"-gnu-unifont-medium-r-normal--0-0-75-75-c-0-iso10646-1" et
"-misc-fixed-bold-r-normal--0-0-100-100-c-0-iso8859-7"
[^] # Re: dup2 + fcntl
Posté par ilip . En réponse au message Lancer le programme 'chat' sur un port série. Évalué à 0.
Bonjour
En effet ça marche, c'est ce que je cherchai, merci.
Maintenant je vais essayer de dupliquer la sortie d'erreur du programme chat, pour l'enregistrer dans un fichier.
[^] # Re: xorg.conf c'est has-been
Posté par ilip . En réponse au message Modification de xorg.conf. Évalué à 1.
[^] # Re: xorg.conf c'est has-been
Posté par ilip . En réponse au message Modification de xorg.conf. Évalué à 1.
Ca ne fonctionne pas,
voici ce qu'il y'a dans le fichier /etc/X11/Xsession.d/10xinput_calibrator après cette commande :
root@debian:~# cat /etc/X11/Xsession.d/10xinput_calibrator
Calibrating EVDEV driver for "Zytronic Displays Limited Zytronic, x-y, USB" id=6
current calibration values (from XInput): min_x=153, max_x=851 and min_y=570, max_y=176
Doing dynamic recalibration:
Setting new calibration data: 303, 609, 533, 305
--> Making the calibration permanent <--
Install the 'xinput' tool and copy the command(s) below in a script that starts with your X session
xinput set-int-prop "Zytronic Displays Limited Zytronic, x-y, USB" "Evdev Axis Calibration" 32 303 609 533 305
[^] # Re: Merge
Posté par ilip . En réponse au message Question sur GIT. Évalué à 2.
je vais devoir faire ça je crois
[^] # Re: Merge
Posté par ilip . En réponse au message Question sur GIT. Évalué à 1.
par contre en sortie, j'ai :
uto-merged arch/arm/mach-omap2/mux34xx.c
Auto-merged arch/arm/mach-omap2/pm-debug.c
CONFLICT (content): Merge conflict in arch/arm/mach-omap2/pm-debug.c
Auto-merged arch/arm/mach-omap2/pm.h
CONFLICT (content): Merge conflict in arch/arm/mach-omap2/pm.h
Auto-merged arch/arm/mach-omap2/pm24xx.c
Auto-merged arch/arm/mach-omap2/pm34xx.c
CONFLICT (content): Merge conflict in arch/arm/mach-omap2/pm34xx.c
Auto-merged arch/arm/mach-omap2/powerdomains34xx.h
Auto-merged arch/arm/mach-omap2/prcm.c
Auto-merged arch/arm/mach-omap2/prm-regbits-34xx.h
Auto-merged arch/arm/mach-omap2/sdrc.c
Auto-merged arch/arm/mach-omap2/sleep34xx.S
CONFLICT (content): Merge conflict in arch/arm/mach-omap2/sleep34xx.S
Auto-merged arch/arm/mach-omap2/usb-musb.c
CONFLICT (content): Merge conflict in arch/arm/mach-omap2/usb-musb.c
Auto-merged arch/arm/mm/Kconfig
CONFLICT (content): Merge conflict in arch/arm/mm/Kconfig
Auto-merged arch/arm/mm/alignment.c
Auto-merged arch/arm/mm/proc-v7.S
Auto-merged arch/arm/plat-omap/Kconfig
CONFLICT (content): Merge conflict in arch/arm/plat-o
...
Automatic merge failed; fix conflicts and then commit the result.
debian:~/git/git.kernel.org/linux-omap-2.6# vim arch/arm/
pour les confits, de quoi s'agit-il et comment ça se passe ?
[^] # Re: Merge
Posté par ilip . En réponse au message Question sur GIT. Évalué à 1.
la commande me donne :
debian:~/git/git.kernel.org/linux-omap-2.6# git remote add git://gitorious.org/beagleboard-validation/linux.git validation-20100805
fatal: 'git://gitorious.org/beagleboard-validation/linux.git' is not a valid remote name
[^] # Re: Merge
Posté par ilip . En réponse au message Question sur GIT. Évalué à 1.
git checkout branche1
git merge branche2
Le soucis c'est qu'il y'a deux dépots git différents :
pour l'instant j'ai fait :
# git 1
mkdir git.kernel.org
cd git.kernel.org
git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
cd ..
#git 2
mkdir gitorious.org
cd gitorious.org
git clone git://gitorious.org/beagleboard-validation/linux.git
cd ..
donc j'ai deux noyau provenant de 2 git différents.
est-ce que je peux utiliser des branches des deux dépots pour un même noyau ?
[^] # Re: Merge
Posté par ilip . En réponse au message Question sur GIT. Évalué à 1.
[^] # Re: /proc/config.gz
Posté par ilip . En réponse au message Ethernet sur bus SPI. Évalué à 2.
j'ai résolu mon problème en utilisant les sources du noyau du dépot git :
git://gitorious.org/beagleboard-validation/linux.git, branche :validation-20100805
cette version permet la compatibilité avec les cartes d'extension Zippy et Zippy2 de Beagleboard
[^] # Re: xinput calibrator
Posté par ilip . En réponse au message Calibration de dalle tactile. Évalué à 1.
voici un dmesg après avoir branché la dalle :
[ 1383.206119] usb 2-1: new full speed USB device using uhci_hcd and address 2
[ 1383.347487] usb 2-1: default language 0x0409
[ 1383.362490] usb 2-1: udev 2, busnum 2, minor = 129
[ 1383.362502] usb 2-1: New USB device found, idVendor=14c8, idProduct=0003
[ 1383.362514] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1383.362525] usb 2-1: Product: Zytronic, x-y, USB
[ 1383.362535] usb 2-1: Manufacturer: Zytronic Displays Limited
[ 1383.362545] usb 2-1: SerialNumber: 0000065709
[ 1383.362828] usb 2-1: usb_probe_device
[ 1383.362846] usb 2-1: configuration #1 chosen from 1 choice
[ 1383.365611] usb 2-1: adding 2-1:1.0 (config #1, interface 0)
[ 1383.365775] usbtouchscreen 2-1:1.0: usb_probe_interface
[ 1383.365786] usbtouchscreen 2-1:1.0: usb_probe_interface - got id
[ 1383.365998] input: Zytronic Displays Limited Zytronic, x-y, USB as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/input/input7
[ 1383.366218] uhci_hcd 0000:00:1d.0: reserve dev 2 ep81-INT, period 1, phase 0, 61 us
[ 1383.366289] drivers/usb/core/inode.c: creating file '002'