Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#2351 Le 31/10/2012, à 14:37

Kanor

Re : /* Topic des codeurs [7] */

Je croyais que plus personne utilisait SOAP hmm

Hors ligne

#2352 Le 31/10/2012, à 14:44

Elzen

Re : /* Topic des codeurs [7] */

Les gens de chez Cassidian s'en servaient l'année dernière, apparemment.

Mindiell a écrit :

Bah, wikipedia est assez clair : REST est une architecture, SOAP est une bouse immonde un protocole.
C'est un peu comme quand les gens te disent qu'ils utilisent du XML. C'est pas un format, mais une spécification au-dessus du format : avec XML seul tu fais rien.

Oui, comme je viens de le dire, ça, j'avais déjà capté tongue C'est un peu plus de détails (surtout sur le premier) qui me serviraient plutôt pas mal.

Hors ligne

#2353 Le 31/10/2012, à 16:41

Mindiell

Re : /* Topic des codeurs [7] */

ArkSeth a écrit :

C'est un peu plus de détails (surtout sur le premier) qui me serviraient plutôt pas mal.

Bah alors pose une question, parce que je ne vois pas ce qui peut te manquer (j'avais compris qu't'avais compris, mais c'est toujours bon de le rappeler). REST est une architecture basée sur 6 contraintes (d'où le terme de RestFul pour celles qui s'y contraignent justement, ce qui est un peu débile vu que si tu t'y contraint pas t'es pas REST normalement mais bon).

Hors ligne

#2354 Le 31/10/2012, à 16:46

Elzen

Re : /* Topic des codeurs [7] */

Yep, effectivement, t'as bien fait de re-préciser au cas où.

Sinon, j'n'ai pas spécialement de questions particulières, j'demande juste éventuellement de la doc dessus (un peu comme Shanx pour Java à la page précédente ^^). Mais ç'n'est pas super urgent dans l'immédiat, c'est juste pour ma culture perso.

Hors ligne

#2355 Le 31/10/2012, à 20:05

tshirtman

Re : /* Topic des codeurs [7] */

J'essaye de compiler python-for-android avec multiprocessing activé (il n'est pas là par défaut) et j'ai une (enfin deux) erreurs sympa hmm

building '_multiprocessing' extension
creating build/temp.linux-i686-2.7/home/gabriel/python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing
ccache arm-linux-androideabi-gcc -mandroid -fomit-frame-pointer --sysroot /home/gabriel/android-ndk-r7/platforms/android-14/arch-arm -fPIC -fno-strict-aliasing -mandroid -fomit-frame-pointer --sysroot /home/gabriel/android-ndk-r7/platforms/android-14/arch-arm -I/home/gabriel/python-for-android/build/openssl/openssl-1.0.1c/include/ -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -IModules/_multiprocessing -I. -IInclude -I./Include -I/home/gabriel/python-for-android/build/python/Python-2.7.2/Include -I/home/gabriel/python-for-android/build/python/Python-2.7.2 -I/home/gabriel/python-for-android/build/openssl/openssl-1.0.1c/include/ -c /home/gabriel/python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c -o build/temp.linux-i686-2.7/home/gabriel/python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.o
/home/gabriel/python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c: In function 'multiprocessing_sendfd':
/home/gabriel/python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c:125: warning: dereferencing 'void *' pointer
/home/gabriel/python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c:125: error: invalid use of void expression
/home/gabriel/python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c: In function 'multiprocessing_recvfd':
/home/gabriel/python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c:168: warning: dereferencing 'void *' pointer
/home/gabriel/python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c:168: error: void value not ignored as it ought to be

le code m'aide pas spécialement hmm

static PyObject *
multiprocessing_sendfd(PyObject *self, PyObject *args)
{
    int conn, fd, res;
    char dummy_char;
    char buf[CMSG_SPACE(sizeof(int))];
    struct msghdr msg = {0};
    struct iovec dummy_iov;
    struct cmsghdr *cmsg;

    if (!PyArg_ParseTuple(args, "ii", &conn, &fd))
        return NULL;

    dummy_iov.iov_base = &dummy_char;
    dummy_iov.iov_len = 1;
    msg.msg_control = buf;
    msg.msg_controllen = sizeof(buf);
    msg.msg_iov = &dummy_iov;
    msg.msg_iovlen = 1;
    cmsg = CMSG_FIRSTHDR(&msg);
    cmsg->cmsg_level = SOL_SOCKET;
    cmsg->cmsg_type = SCM_RIGHTS;
    cmsg->cmsg_len = CMSG_LEN(sizeof(int));
    msg.msg_controllen = cmsg->cmsg_len;
    *CMSG_DATA(cmsg) = fd;  // ligne 125

    Py_BEGIN_ALLOW_THREADS
    res = sendmsg(conn, &msg, 0); 
    Py_END_ALLOW_THREADS

    if (res < 0)
        return PyErr_SetFromErrno(PyExc_OSError);
    Py_RETURN_NONE;
}
static PyObject *
multiprocessing_recvfd(PyObject *self, PyObject *args)
{
    int conn, fd, res;
    char dummy_char;
    char buf[CMSG_SPACE(sizeof(int))];
    struct msghdr msg = {0};
    struct iovec dummy_iov;
    struct cmsghdr *cmsg;

    if (!PyArg_ParseTuple(args, "i", &conn))
        return NULL;

    dummy_iov.iov_base = &dummy_char;
    dummy_iov.iov_len = 1;
    msg.msg_control = buf;
    msg.msg_controllen = sizeof(buf);
    msg.msg_iov = &dummy_iov;
    msg.msg_iovlen = 1;
    cmsg = CMSG_FIRSTHDR(&msg);
    cmsg->cmsg_level = SOL_SOCKET;
    cmsg->cmsg_type = SCM_RIGHTS;
    cmsg->cmsg_len = CMSG_LEN(sizeof(int));
    msg.msg_controllen = cmsg->cmsg_len;

    Py_BEGIN_ALLOW_THREADS
    res = recvmsg(conn, &msg, 0); 
    Py_END_ALLOW_THREADS

    if (res < 0)
        return PyErr_SetFromErrno(PyExc_OSError);

    fd = *CMSG_DATA(cmsg); // ligne 168
    return Py_BuildValue("i", fd);
}

je me vois mal corriger du code dans python quoi… y'a surement un truc qui va pas dans la ligne de compil ou un truc du genre hmm

Hors ligne

#2356 Le 31/10/2012, à 20:16

grim7reaper

Re : /* Topic des codeurs [7] */

@tshirtman : c’est quoi la procédure de compilation (tu télécharges quoi/compiles quoi, comment), voir si on peut reproduire le truc ?

Dernière modification par grim7reaper (Le 31/10/2012, à 20:16)

Hors ligne

#2357 Le 31/10/2012, à 22:22

tshirtman

Re : /* Topic des codeurs [7] */

hum alors faut prendre python-for-android ici https://github.com/kivy/python-for-android la doc pour compiler est ici

les prérequis
http://python-for-android.readthedocs.o … equisites/

la compilation
http://python-for-android.readthedocs.o … est/usage/

sauf que, avant la compilation, je change le patch qui désactive certains modules
https://github.com/kivy/python-for-andr … ules.patch
pour enlever _multiprocessing de la liste

ensuite je fais mon

./distribute -f -m "kivy"

mais comme l'output est assez long, c'est mieux de faire

./distribute -f -m "kivy" &> logfile

pour pouvoir aller chercher l'erreur dedans (qu'on trouve facilement en cherchant multiprocessing)

La compile elle même prends un peu de temps, ça fait bizarre quand on a plus l'habitude de compiler des trucs…

Hors ligne

#2358 Le 31/10/2012, à 23:15

grim7reaper

Re : /* Topic des codeurs [7] */

Bon :

checking for arm-eabi-gcc... ccache arm-linux-androideabi-gcc -mandroid  -fomit-frame-pointer --sysroot /home/grim7reaper/hacking/src/python-for-android/android-ndk-r8b/platforms/android-16/arch-arm
checking whether the C compiler works... no
configure: error: in `/home/grim7reaper/hacking/src/python-for-android/build/python/Python-2.7.2':
configure: error: C compiler cannot create executables
See `config.log' for more details

Souci de cross-compilation apparemment, j’ai peut-être manqué une étape.

Dernière modification par grim7reaper (Le 01/11/2012, à 00:43)

Hors ligne

#2359 Le 31/10/2012, à 23:34

Rolinh

Re : /* Topic des codeurs [7] */

@tshirtman: merci pour ta réponse smile (oui, j'ai un peu de retard...).

Hors ligne

#2360 Le 01/11/2012, à 00:44

tshirtman

Re : /* Topic des codeurs [7] */

@grim: arf, t'es sous quelle distro? t'as installé tous les trucs marqués dans les pré-requis?

edit: ah, tu peux paster le config.log?

@rolinh: de rien, c'est normal smile

Dernière modification par tshirtman (Le 01/11/2012, à 00:46)

Hors ligne

#2361 Le 01/11/2012, à 00:54

grim7reaper

Re : /* Topic des codeurs [7] */

Ubuntu 12.04
À priori oui, j’ai installé tout ce qu’il faut.
Y’a des trucs à configurer pour le NDK (mis à part les variables d’environnement) ?
J’ai ça pour l’environnement :

ANDROIDSDK=/home/grim7reaper/hacking/src/python-for-android/android-sdk-linux
ANDROIDNDK=/home/grim7reaper/hacking/src/python-for-android/android-ndk-r8b
ANDROIDNDKVER=8
ANDROIDAPI=16

config.log

Ha attends, déjà j’ai pas pris les bonnes versions de SDK/NDK.
Je retente.

Dernière modification par grim7reaper (Le 01/11/2012, à 01:11)

Hors ligne

#2362 Le 01/11/2012, à 01:04

tshirtman

Re : /* Topic des codeurs [7] */

Hum, j'ai jamais testé sur 10.04… j'ai testé à partir de 11.04 je pense…

pour l'env, c'est un peu piégeux, je me suis fait avoir aussi au début, il faut mettre le 'r' devant. j'ai

ANDROIDSDK=/home/gabriel/android-sdk-linux_x86
ANDROIDNDK=/home/gabriel/android-ndk-r7
ANDROIDNDKVER=r7
ANDROIDAPI=14

essaye plutot avec l'api 14 d'ailleurs, et pense à lancer le programme "android", et télécharger les api dont tu as besoin avec.

Hors ligne

#2363 Le 01/11/2012, à 01:12

grim7reaper

Re : /* Topic des codeurs [7] */

J’ai édité, c‘est 12.04, pas 10.04 >_<
Pour le 'r' manquant, erreur de copier/coller…

Ok, ça passe en utilisant les bonnes versions de SDK/NDK.
Maintenant j’ai la même erreur que toi, j’essayerais de jeter un œil demain si je trouve quelques chose.

Hors ligne

#2365 Le 01/11/2012, à 01:35

grim7reaper

Re : /* Topic des codeurs [7] */

Je crois avoir trouvé.
Je test.

Hors ligne

#2366 Le 01/11/2012, à 01:47

grim7reaper

Re : /* Topic des codeurs [7] */

Hum, j’ai un souci pour tester mon hypothèse.
Je sais pas où il choppe les sources de multiprocessing pour le build.
Car il efface le dossier build à chaque rebuild, donc si je bidouille la source dedans c’est jamais pris en compte.

Hors ligne

#2367 Le 01/11/2012, à 02:13

grim7reaper

Re : /* Topic des codeurs [7] */

Ça me fait quand même super chier que le processus de build s’obstine à écraser mes modif’, du coup c’est pas tip-top pour tester mon hypothèse.
M’enfin, j’ai pris le problème dans l’autre sens du coup, et j’ai patché on-the-fly le NDK Android (mais là c’est juste pour tester mon hypothèse, je pense que le mieux c’est de patcher le module multiprocessing).
Bon allez, très de bavardages. Voici l’histoire :


tshirtman a écrit :

je me vois mal corriger du code dans python quoi…

Et pourtant, c’est bien le code de Python (ou du NDK Android, au choix) le problème.

La macro CMSG_DATA est définie sur mon PC de la manière suivante :

/usr/include/x86_64-linux-gnu/bits/socket.h:# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))

Elle renvoie donc un unsigned char*.
Maintenant, dans le NDK Android elle est définie de cette manière :

platforms/android-14/arch-arm/usr/include/linux/socket.h:#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr))))

Elle renvoie donc un void*.
Autant tu peux déréférencer un unsigned char* (car tu as le type), autant un void* non. D’où les gueulantes du compilo au sujet des void* :

python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c: In function 'multiprocessing_sendfd':
python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c:125: warning: dereferencing 'void *' pointer
python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c:125: error: invalid use of void expression
python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c: In function 'multiprocessing_recvfd':
python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c:168: warning: dereferencing 'void *' pointer
python-for-android/build/python/Python-2.7.2/Modules/_multiprocessing/multiprocessing.c:168: error: void value not ignored as it ought to be

Et la façon dont c’est défini sur PC (on peux supposer que c’est relativement uniforme, du moins ça renvoie pas void*) pourrait expliquer pourquoi le problème est passé inaperçu dans Python jusqu’à maintenant.
Du coup, tu peux probablement remonter le problème à Python et proposer un patch (enfin je pense).


Pour info, mon patch pour multiprocessing consiste à faire :
ligne 125 de multiprocessing.c :

*CMSG_DATA(cmsg) = fd;

devient

*(int*)CMSG_DATA(cmsg) = fd;

et pour la ligne 168 du même fichier :

fd = *CMSG_DATA(cmsg);

devient

fd = *(int*)CMSG_DATA(cmsg);


Triple post je sais, mais c’est pour la bonne cause (et je suis crevé).
Alors je vous merde (BN quand même).

Hors ligne

#2368 Le 01/11/2012, à 02:21

:!pakman

Re : /* Topic des codeurs [7] */

Costaud yikes

Dernière modification par :!pakman (Le 01/11/2012, à 02:21)


...

Hors ligne

#2369 Le 01/11/2012, à 02:29

tshirtman

Re : /* Topic des codeurs [7] */

Wahou, la définition différente dans le NDK, forcémente… bien vu et merci *beaucoup*…  je teste ça de suite…

edit: sinon oui, ça écrase tout à chaque fois, le plus simple est de mettre la modif dans un patch dans la recipe de python, je vais faire comme ça je pense.

Dernière modification par tshirtman (Le 01/11/2012, à 02:32)

Hors ligne

#2370 Le 01/11/2012, à 03:32

tshirtman

Re : /* Topic des codeurs [7] */

j'ai créé ce patch

--- Python-2.7.2/Modules/_multiprocessing/multiprocessing.c.orig	2011-06-11 17:46:27.000000000 +0200
+++ Python-2.7.2/Modules/_multiprocessing/multiprocessing.c 		2012-11-01 01:34:34.172297156 +0100
@@ -122,7 +122,7 @@
     cmsg->cmsg_type = SCM_RIGHTS;
     cmsg->cmsg_len = CMSG_LEN(sizeof(int));
     msg.msg_controllen = cmsg->cmsg_len;
-    *CMSG_DATA(cmsg) = fd;
+    *(int*)CMSG_DATA(cmsg) = fd;
 
     Py_BEGIN_ALLOW_THREADS
     res = sendmsg(conn, &msg, 0);
@@ -165,7 +165,7 @@
     if (res < 0)
         return PyErr_SetFromErrno(PyExc_OSError);
 
-    fd = *CMSG_DATA(cmsg);
+    fd = *(int*)CMSG_DATA(cmsg);
     return Py_BuildValue("i", fd);
 }

et modifié la recipe de python pour l'utiliser,

diff --git a/recipes/python/recipe.sh b/recipes/python/recipe.sh
index 8e412a1..12bc309 100644
--- a/recipes/python/recipe.sh
+++ b/recipes/python/recipe.sh
@@ -29,6 +29,7 @@ function prebuild_python() {
        try patch -p1 < $RECIPE_python/patches/verbose-compilation.patch
        try patch -p1 < $RECIPE_python/patches/fix-remove-corefoundation.patch
        try patch -p1 < $RECIPE_python/patches/fix-dynamic-lookup.patch
+       try patch -p1 < $RECIPE_python/patches/fix_multiprocessing.patch
 
        system=$(uname -s)
        if [ "X$system" == "XDarwin" ]; then

mais ça semble bloquer bizarrement les choses, (dossier bin manquant plus tard ? oO) je verrais demain…

Hors ligne

#2371 Le 01/11/2012, à 10:18

grim7reaper

Re : /* Topic des codeurs [7] */

tshirtman a écrit :

Wahou, la définition différente dans le NDK, forcémente… bien vu et merci *beaucoup*…  je teste ça de suite…

De rien wink

tshirtman a écrit :

edit: sinon oui, ça écrase tout à chaque fois, le plus simple est de mettre la modif dans un patch dans la recipe de python

Oui, j’avais compris ça vers la fin, sauf que je savais pas trop comment m’y prendre.
Du coup j’ai pris le problème à l’envers pour tester ^^'

Hors ligne

#2372 Le 01/11/2012, à 15:39

tshirtman

Re : /* Topic des codeurs [7] */

Bon, on avance, apparement ça marche mieux en nommant le patche fix-multiprocessing.patch, sauf que la compilation de python détecte SEM_GETVALUE comme cassé, apparement ça se passe dans configure.in plus précisément ce test…

build/python/Python-2.7.2/configure.in

# Multiprocessing check for broken sem_getvalue
AC_MSG_CHECKING(for broken sem_getvalue)
AC_CACHE_VAL(ac_cv_broken_sem_getvalue,
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <semaphore.h>
#include <sys/stat.h>

int main(void){
  sem_t *a = sem_open("/autocftw", O_CREAT, S_IRUSR|S_IWUSR, 0);
  int count;
  int res;
  if(a==SEM_FAILED){
    perror("sem_open");
    return 1;

  }
  res = sem_getvalue(a, &count);
  sem_close(a);
  sem_unlink("/autocftw");
  return res==-1 ? 1 : 0;
}
]])],
[ac_cv_broken_sem_getvalue=no],
[ac_cv_broken_sem_getvalue=yes],
[ac_cv_broken_sem_getvalue=yes])
)
AC_MSG_RESULT($ac_cv_broken_sem_getvalue)
if test $ac_cv_broken_sem_getvalue = yes
then
  AC_DEFINE(HAVE_BROKEN_SEM_GETVALUE, 1,
  [define to 1 if your sem_getvalue is broken.])
fi

build/python/Python-2.7.2/config.log

configure:12255: checking for broken sem_getvalue
configure:12300: result: yes

hmm, je peut avoir gdb pour passer sur ce code dans le même contexte? ^^

Dernière modification par tshirtman (Le 01/11/2012, à 15:51)

Hors ligne

#2373 Le 01/11/2012, à 16:07

grim7reaper

Re : /* Topic des codeurs [7] */

Bizarre, chezmoiçamarche© hmm
J’ai ajouté le patch dans recipes/python/patches
J’ai modifié recipe.sh comme indiqué dans ton post.
J’ai relancé la compilation, multiprocessing compile et tout le reste avec.

(Tiens, il semblerait que quelqu’un ai déjà voulu soumettre un patch comme le mien il y a 1 an, bizarre)


Édit : ha oui, il le détecte broken aussi. À voir pourquoi et quel impact ça a.

Dernière modification par grim7reaper (Le 01/11/2012, à 16:10)

Hors ligne

#2374 Le 01/11/2012, à 16:19

tshirtman

Re : /* Topic des codeurs [7] */

L'impact c'est que quand je tente l'import dans une applie sur android, j'ai " OSError: [Errno 38] Function not implemented" et pouf, ça crash smile

le pourquoi, c'est ce que j'aimerai bien comprendre, probablement une autre incompatibilité bizarre…

Hors ligne

#2375 Le 01/11/2012, à 16:34

grim7reaper

Re : /* Topic des codeurs [7] */

Bon là encore je voudrait faire un test (même si je me doute du résultat et qua ça va sûrement pas nous avancer), mais comme le système de build me fait encore chier à tout écraser.
Maintenant, je sais comment ajouter un patch. La question c’est comment je le génère ?
Faut que je télécharge les sources de Python ?

Dernière modification par grim7reaper (Le 01/11/2012, à 16:35)

Hors ligne