• Jueves 2 de Mayo de 2024, 23:30

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - diego.martinez

Páginas: 1 [2] 3 4
26
C/C++ / registro de windows
« en: Miércoles 3 de Febrero de 2010, 12:28 »
Buenas:

tengo una aplicación que durante la instalación crea una clave en el registro de windows.
HKEY_LOCAL_MACHINESoftwarenombre_de_programa

El problema es que en algunos entornos en los que el usuario no tiene permisos para acceder a los registros, el programa se queda sin acceso.

Como puedo hacer para que el programa tenga permisos superiores sin conocer las claves de administrador?

att:
Diego Martinez

27
C/C++ / interfaz para std::map
« en: Martes 26 de Enero de 2010, 12:21 »
buenas:

estamos haciendo una interfaz para poder cambiar en un proyecto entre std::map o std::vector.

Para ello estamos haciendo un objeto que contendra a uno de estos, y dispondrá de todos los metodos del mapa, para que, una vez implementado , podamos alterar solo el interfaz sin que el proyecto sea afectado.

Esto va bien:

Código: C++
  1.  
  2.  
  3. template <class Key, class T, class Compare = less<Key>, class Allocator = allocator<pair<const Key,T> > >
  4. class CMAP
  5. {
  6. public:
  7.   map<Key,T,Compare,Allocator > Internal;
  8.  
  9.   unsigned int size() const
  10.   {
  11.     return Internal.size();
  12.   };
  13.  
  14.   T& operator[](const Key& k)
  15.   {
  16.   return Internal[k];
  17.   }
  18.  
  19.   void clear()
  20.   {
  21.   Internal.clear();
  22.   }
  23.    
  24. };
  25.  
  26.  
  27.  


Por ahora va bien, pero me esta dando un problema al intentar devolver un iterador.
Código: C++
  1.  
  2.   map<Key,T,Compare,Allocator >::iterator begin()
  3.   {
  4.      return Internal.begin();
  5.   }
  6.  
  7.  

el compilador me devuelve:
Error[Pe757]: nontype "map<_Kty, _Ty, _Pr, _Alloc>::iterator [with _Kty=Key, _Ty=T, _Pr=Compare, _Alloc=Allocator]" is not a type name


como puedo hacer para devolver iteradores con los tipos correctos?


gracias!!!

28
Servidores / forzar al explorer a usar MTDM en el ftp
« en: Jueves 14 de Enero de 2010, 13:55 »
buenas:

me encuentro con este problema.
Cuando uso el explorer para acceso a un ftp, me encuentro que todos los archivos que se guardan pierden la fecha.

Fijandome en los comandos, el explorer no intenta poner bien la fecha de los archivos usando el comando MTDM , alguien sabe como forzarle a usarlo?

29
C/C++ / perdida del Icono del System Tray al reiniciar el explorer
« en: Lunes 14 de Diciembre de 2009, 18:26 »
Buenas:

Nuevamente, el fantasma del shellnotifyicon me persigue.

En este caso el problema que tengo es que si se reinicia el explorer.exe del windows pierdo el icono de la aplicación.

Alguien sabe como puedo:

detectar el reinicio del explorer para volverlo a poner / hacer que el icono sobreviva al explorer?

gracias

30
Servidores / usando windows explorer en vista para acceso a ftp
« en: Viernes 20 de Noviembre de 2009, 12:56 »
Buenas:

usando el explorer para acceso a un ftp todo va bien, salvo cuando quiero abrir un fichero.
En xp, lo abre con el programa correspondiente, pero en Vista intenta abrirlo siempre con el Internet Explorer para descargarlo. Alguien sabe como evitar este comportamiento?

31
Servidores / Configurar Putty para FTP pasivo
« en: Miércoles 18 de Noviembre de 2009, 13:26 »
Buenas:

tengo un tunel SSH para usar un ftp de manera segura.

El problema surge al ir a usar el ftp en modo pasivo, si le pongo un rango de 1 puerto (ejemplo 22-22) , luego en el putty configuro L22 intranet.servidor:22
y funciona correctamente.
El problema es que necesito aumentar el rango de ftp pasivo para poder aguantar muchas conexiones a la vez, y no se como configurar el putty para que habra un rango de puertos y redirija a los mismos puertos en la maquina remota:

seria algo como

L26-100 intranet.servidor:26-100

pero no funciona con esta sintaxis y no encuentro como hacerlo, alguien sabe?

a ser posible sin tener que escribir los 80 puertos

32
Servidores / Raid en Windows Server 2003
« en: Jueves 12 de Noviembre de 2009, 17:28 »
Buenas:

Tengo 2 discos sata que quiero que formen un raid 1 (data mirroring).
Siguiendo las instrucciones de la msdn, voy a administraciójn de discos, convierto mis discos en dinámicos, y le doy al boton derecho sobre el disco 0 y "agregar espejo".

Lo malo es que cuando despliego las opciones "agregar espejo" esta desactivado y no puedo aplicarlo. Alguien sabe a que se puede deber? en google lei que podia deberse a falta de espacio, pero ambos discos tienen el mismo tamaño.

gracias!

33
Seguridad y Criptografía / Configurar Firewall para SSH
« en: Martes 10 de Noviembre de 2009, 19:21 »
Buenas:

Era para preguntar un par de conceptos que no se si tengo muy claros.

He montado un ssh para acceder al ftp, con tuneles montados por el putty y el openssh server.

si no me equivoco, la finalidad del tunelado de ssh hace que:

las conexiones que se hacen en el equipo local (ftp:\localhost) son redirigidas a traves del puerto del SSH (port:22) hasta el puerto del servidor de SSH (port:22)
luego, el servidor, redirige la comunicación al puerto adecuado (ftp 21,53,20) , es asi?

por lo tanto, si en el firewall del servidor permito todas las comunicaciones localhost-localhost y bloqueo todas las comunicaciones entrantes que no tengan como puertos local y remote el puerto 22 deberia de bloquear el acceso no tunelado por ssh no?

otra pregunta es, cuando se usa ftp pasivo, el ftp redirige al puerto 20, que tambien esta tunelado, por lo tanto, tambien pasa por el puerto de ssh?

no se muy bien que configuración tendria que poner en el firewall para permitir SOLO conexiones SSH y ademas solo de ciertas MAC, alguna idea?

por cierto:

Equipo Servidor : Windows Server 2003 , OpenSSH , Sygate Firewall Pro y  FileZilla
Equipo Cliente: Windows XP sp2 , Putty y Explorador de Windows (explorer ftp:\localhost)

gracias de antemano!  :)

34
Seguridad y Criptografía / Tunneles SSH
« en: Miércoles 7 de Octubre de 2009, 20:15 »
Buenas:

Veamos, estoy intentando poner seguridad encripatada para las comunicaciones FTP y HTML  en un servidor interno de la empresa.

Para ello, me he instalado OpenSSH y lo he configurado con claves RSA.

Hasta aqui todo correcto.

Conecto al SSH con el Putty y todo va bien. Cuando no tenia la seguridad RSA puesta, me autentificaba y podia entrar en el arbol de directorios y todo.
He puesto seguridad y le he puesto la clave Id_Rsa que he creado con el OpenSSH (y modificado para usarla con el Putty usando el PuttyGen) y le incrusto la clave "putty" en Connection > SSH > Auth > Private Key... etc.

Cuando me conecto al Servidor SSH todo va bien, me solicita usuario , introduzco uno valido, me pide el Passphrase para la clave rsa (se lo facilito) y me autoriza y en ese momento hop: "Connection Closed by remote Host"

No se que puedo estar haciendo mal. La clave es valida, por que si suministro otra me dice "invalid passphrase" y me la pide otra vez. El usuario tambien es valido.

Que puede estar pasando?
tengo algo mal configurado? en el cliente o en el server?
es su forma de decirme que no vale la id_rsa que le he puesto al putty?

otra cosa, no se como mirar los logs del servidor (por si aparecia algo interesante) google dice que haga "ssh -vvv" o "ssh -v -v -v" pero eso no funciona y en la lista de parametros no aparece....

Otra cosa mas, cuando me autentificaba mediante user/pass todo iba bien. Pero no queria que el usuario final tenga acceso al arbol de directorios, ya que lo quiero unicamente para que mis usuarios cifren sus transferencias con mi servidor interno usando el Tunnel SSH del putty, hay forma de evitar que se tenga acceso a la terminal? una configuracion seguramente.


Gracias por todo!

35
Visual C++ / Como hacer un alpha blending?
« en: Jueves 3 de Septiembre de 2009, 14:59 »
Buenas:

estoy dibujando unos sprites en pantalla.
Para ello tengo un buffer con el fondo (24 bits, canales r,g,b entrelazados) y un buffer con el sprite (24 bits tambien entrelazado), luego tengo otro buffer igual de grande con el canal alpha del sprite, un blur sobre lo que seria su mascara para que los bordes sean suaves.

Bien, estoy teniendo problemas con el blending.

en teoria (corregidme si me equivoco)

la formula seria

r= ( rojo de overlay & rojo de Mascara)      | (rojo de fondo & (255-rojo de mascara));
g= ( verde de overlay & verde de Mascara) | (verde de fondo & (255-verde de mascara));
b= ( azul de overlay & azul de Mascara)      | (azul de fondo & (255-azul de mascara));

es asi? por que haciendolo asi me esta dando fallos en el gradiente. Y salen extrañas rayas.

overlay : verde completo liso con una banda blanca
mascara: Es un gradiente de blanco a negro de izquierda superior a derecha inferior
fondo: el visible, la mayor parte en rojo.


36
C/C++ / try y object unwinding
« en: Martes 25 de Agosto de 2009, 11:42 »
Buenas:

estoy teniendo un problema con el object unwinding

tengo una seccion __try __except

que usa EHsc para hacer el StackWalk.
Todo ha ido siempre bien, pero hoy he descubierto que tiene problemas con el polimorfismo.

si hago:

Código: C++
  1.  
  2. class CA
  3. {
  4. public:
  5.     CA() {}
  6.     virtual ~CA(){}
  7. };
  8.  
  9. class CB : public CA
  10. {
  11. public:
  12.     CB() {}
  13.     ~CB(){}
  14. };
  15.  
  16. int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hprevinst, LPSTR cmdline, int cmdshow)
  17. {
  18.     __try
  19.     {
  20.         CA * a=new CB(); //aqui me da el fallo
  21.     }
  22.     __except (ExpFilter("principal",GetExceptionInformation(), GetExceptionCode(),__LINE__,__FUNCTION__)){}
  23.  
  24.     return 0;
  25. }
  26.  
  27. long _stdcall ExpFilter(char *Message,EXCEPTION_POINTERS* pExp, DWORD dwExpCode,int line,char * func)
  28. {
  29.     GStackWalk sw;
  30.     [...] //stack walk code
  31.  
  32. return EXCEPTION_EXECUTE_HANDLER; //esto hace que acepte la excepcion , si devolvemos 0 , la gestiona windows
  33. }
  34.  
  35.  

al ser CB una clase polimorfica me tira el error:
 Cannot use __try in functions that require object unwinding

compilo con la opcion /EHsc para activar las excepciones estructuradas de windows, lo que hace que no pueda resolver este caso. (cualquier otro lo hace bien)

Alguien puede explicarme que ocurre?
y que es exactamente el unwinding?

gracias por adelantado :good:

37
Programación de Videojuegos / Auto asignacion de pesos para Bones
« en: Lunes 24 de Agosto de 2009, 03:31 »
Buenas:

estoy interesado en un algoritmo para asignar automaticamente los bones a los vertices debido a su posicion espacial.
lo que quiero es , dado un mesh (malla) y unos bones(rigging) que mi algoritmo asigne los bones a los vertices sin necesidad de importar sus asociaciones.
Se que existe y tiene un nombre, pero no se como es, asi que no puedo encontrarlo en google.
alguien sabe como se llama / donde encontrar un tutorial?



gracias de antemano  :good:

38
C/C++ / Sugerencias para Multilenguaje
« en: Miércoles 8 de Julio de 2009, 14:55 »
Buenas:

estoy programando el interfaz de un dispositivo electronico (un estilo a un movil) y bueno, tengo menues, botones, labels... etc.
El interfaz esta bastante bien hecho, pero me ha surgido duda de diseño a la hora de implementar el multilenguaje.

Mi idea , por ahora, es crear una clase de strings especiales, que miren una variable global para saber el idioma en el que esta el equipo, y que automaticamente cambien su puntero a uno diferente aplicando un offset definido por el idioma seleccionado.

Entonces, durante el codigo habria que ir usando los strings por una referencia y luego definir en un .h/.cpp los arrays de strings con sus numeros de referencia.
Encuentro bastante engorroso la forma de implementar esto y no tengo muy claro si es una buena solución, como soleis hacer el multilenguaje? como veis esta solución?

gracias por cualquier idea!  :good:

PD: es un programa embebido en un microcontrolador, asi que no puedo usar resources como se usaria en visual studio.

39
C/C++ / sobrecargar operador []
« en: Lunes 1 de Junio de 2009, 10:10 »
Buenas:

estoy sobrecargando el operador [] en una de mis clases (w32Register : public GRegister) para usarla como un mapa.

Código: C++
  1.  
  2.         w32Register Reg;
  3.     Reg.Open("SOFTWARE\Empresa");
  4.     std::string value=Reg["Root"];
  5.  
  6.  

esto funciona correctamente, la clase abre la carpeta del registro y con el operador [] sobrecargado accedo a los valores. Todo correcto.
pero si hago :

Código: C++
  1.  
  2.  
  3. GRegister * Reg=new w32Register();
  4.  
  5.     Reg->Open("SOFTWARE\AgotekArtek");
  6.     std::string value=Reg["Root"];
  7.  
  8.  
  9.  

Si lo uso dinamicamente, el compilador me tira : error C2107: illegal index, indirection not allowed
 la definicion del operador la he hecho asi:

Código: C++
  1.  
  2. std::string w32Register::operator [](std::string index)
  3. {   
  4.     std::string S;
  5.     char s[200];
  6.     DWORD size=200;
  7.  
  8.     DWORD dwType=0;
  9.     LONG ret=RegQueryValueEx(hKey,index.c_str(),NULL,&dwType,(LPBYTE)s,&size);
  10.     if (ret!=ERROR_SUCCESS)
  11.         return 0;
  12.  
  13.     S=s; //creamos un std::string con el buffer
  14.    
  15.     return S; //lo pasamos por copia
  16. }
  17.  
  18.  

Como puedo hacer que el operador [] funcione con objetos dinamicos?
se que podria hacer (*Reg)["root"] pero preferiria poder acceder directamente con los punteros.

Gracias!!

40
C/C++ / override del operador new
« en: Lunes 25 de Mayo de 2009, 15:59 »
Buenas:

estoy probando a hacer override del operador new para hacerme checkeos de memoria y ver si alguna funcion tiene "leaks".

para ello me he hecho:
Código: C++
  1.  
  2.  
  3. #ifdef _MY_MEMORY_CONTROL_OVERRIDE
  4.  
  5. void* operator new(size_t size)
  6. {
  7.  void *p=malloc(size);
  8.  
  9.  if (p!=NULL)
  10.  if (IsDebuggerPresent())
  11.  {
  12.      char s[100];
  13.      sprintf(s,"Mem: %08x Size: %07d Total:%dn",p,size,MemControl::APP_GlobalMemoryAllocated);
  14.         OutputDebugStringA(s);
  15.  
  16.      MemControl::APP_GlobalMemoryAllocated+=(unsigned long)size;
  17.      MemControl::Add(size,p);
  18.  }
  19.  
  20.  return p;
  21. }
  22.  
  23. #endif
  24.  
  25.  

asi cada vez que se localiza memoria me lo muestra en el output del debugger.

para que me muestre la linea y fichero, le añado:
Código: C++
  1.  
  2. void* operator new(size_t size,char *szFile = __FILE__, UINT nLineNo = __LINE__)
  3.  
  4.  

al hacerlo me muestra los errores :

error C2668: 'operator new' : ambiguous call to overloaded function

por lo visto no sabe diferenciar entre el new de siempre y mi nuevo new, entonces, como puedo forzarle a usar el mio?

41
C/C++ / Comunicación entre procesos
« en: Lunes 27 de Abril de 2009, 10:24 »
Buenas:

Voy a hacer una aplicacion compuesta de multiples procesos independientes intercomunicados (un estilo a google chrome).
He estado investigando en la msdn, y hay un monton de formas de comunicarse entre procesos:

Clipboard
COM
Data Copy
DDE
File Mapping
Mailslots
Pipes
RPC
Windows Sockets

 asi que la pregunta seria:
cual creeis que es la mejor forma de comunicarse entre procesos?

No es solo notificacion de eventos, tengo que pasar bloques de bastante tamaño entre ellos tambien (como imagenes completas por ejemplo).

Edit: añado, uso Visual C++ para win32 (nada de mfc).
gracias.

42
C/C++ / Heaps
« en: Miércoles 25 de Marzo de 2009, 12:38 »
Buenas:

Tengo una aplicación que emplea una dll hecha por mi.
Esta dll realiza unas operaciones interpretando comandos en ascii que se le mandan. Cuando realiza la operación devuelve otro comando con la respuesta.

Para ello he hecho una funcion :

Código: C++
  1.  
  2. GPROTOCOL_API DWORD Execute(const std::string command,std::string * response)
  3. {
  4. std::string s;
  5.  
  6.     s="config";
  7.     if (command.compare(0,s.size(),s)==0)
  8.     {
  9.         *response="0 OK CONFIG";
  10.         int r=0;
  11.         return r;  
  12.     }
  13. }
  14.  
  15.  


este cacho de codigo me produce un assert _CrtIsValidHeapPointer al retornar. El cacho de codigo esta en una dll y al debuguear se ejecuta correctamente hasta que llega al return r;

Segun msdn , dice que el acceso a memoria que realizo no esta dentro del heap.

Es debido al puntero que paso como response?
como puedo forzar a la dll a usar el heap del proceso localizador?

normalmente si localizara algo en la dll usaria HeapAlloc  pero aqui estoy pasando un std::string estatico desde el proceso que linka la dll.

Gracias.

43
C/C++ / Problema de visualizacion de Stretchdibits
« en: Jueves 12 de Febrero de 2009, 15:39 »
Buenas:

Trabajando con Win32, tengo una imagen en un buffer rgb (o mejor dicho BGR).

Ese buffer esta correcto, lo pinto pixel a pixel y se ve perfecto. Lo paso a un raw y lo habro con photoshop y perfecto tambien.

Ahora, cuando lo visualizo con stretchdibits aparece con unas muestras erroneas de colores pintado en diagonal como si estuviera la anchura un pixel mas grande.

el codigo que uso es simple.


Código: C++
  1.  
  2. BITMAPINFO  dib;
  3. HDC dc;
  4. BYTE * data;
  5.                                 int w=img->GetWidth();
  6.                 int h=img->GetHeight();
  7.                 //img->Draw(GetDC(hWnd),0,0,w*mul,h*mul);          
  8.                 dc=GetDC(hWnd);            
  9.                 data=img->GetData();               
  10.  
  11.                 memset(&dib,0,sizeof(dib));
  12.                 dib.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  13.                 dib.bmiHeader.biHeight          = -h; //Alto
  14.                 dib.bmiHeader.biWidth           = w; //Largo
  15.                 dib.bmiHeader.biPlanes          = 1;
  16.                 dib.bmiHeader.biBitCount        = 3*8;
  17.                 dib.bmiHeader.biClrUsed         = 0;
  18.                 dib.bmiHeader.biClrImportant    = 0;
  19.                 dib.bmiHeader.biXPelsPerMeter   =0;
  20.                 dib.bmiHeader.biYPelsPerMeter   =0;
  21.                 dib.bmiHeader.biCompression     = BI_RGB;
  22.                 dib.bmiHeader.biSizeImage       =0;            
  23.  
  24.                
  25.                 if (StretchDIBits(dc,0,0,w,h, 0, 0, w,h, data,&dib, DIB_RGB_COLORS, SRCCOPY)!=h)
  26.                 {
  27.                     //...error
  28.                 }
  29.  
  30.  


este codigo solo falla con ciertos tamaños de imagen. Sin embargo la imagen esta perfecta y los valores de w y h estan correctos, a que puede deberse el error? es un bug de la api?

gracias

la imagen sale asi:


no me pasa con todas solo con algunas, pero la descompresion es correcta.
supongo que tendra que ver con las proporciones o algun dato que no estoy usando bien

44
PHP / $_SESSION["login"]='Object'
« en: Lunes 2 de Febrero de 2009, 01:54 »
Buenas:

Tengo una pagina web que funciona correctamente en localhost y en un php 4.3.9

ahora, lo subo a un php 4.4 y me da un problema raro:

Cuando logueo, guardo el Login introducido (y verificado) en una session $_SESSION["login"];
cuando vuelvo del formulario, las session es valida y tiene el login por ejemplo $_SESSION["login"]="Diego";
pero, en cuanto salto otra pagina, la session se convierte en $_SESSION["login"]="Object";

os pongo el codigo del login:
Código: Text
  1.  
  2.     $s="";
  3.     $user_login="";
  4.     $user_pass="";
  5.  
  6. //----- aqui recibo el resultado del formulario
  7.  
  8.         if (isset($_REQUEST["user_login"]) && isset($_REQUEST["user_pass"])) //acaba de llegar el post
  9.         {          
  10.                 $_SESSION["login"]=$_REQUEST["user_login"];
  11.                 $_SESSION["pass"]=$_REQUEST["user_pass"];      
  12.         }
  13.  
  14. ///------------------- si se marca el ?link=logoff deslogueo
  15.  
  16.         if (isset($_GET["link"]))
  17.         if ($_GET["link"]=="logoff")
  18.         {
  19.             unset($_SESSION["login"]);
  20.             unset($_SESSION["pass"]);
  21.             unset($_SESSION["id_user"]);
  22.         }
  23.  
  24. //----------------- compruebo que la session es un usuario valido
  25. //esta parte funciona la primera vez, la siguiente no por que $_SESSION["login"]="object"
  26.  
  27.         if (isset($_SESSION["login"]) && isset($_SESSION["pass"]))
  28.         {  
  29.         $q="select * from user_fd where Login="".$_SESSION["login"]."" and Password="".$_SESSION["pass"].""";
  30.                
  31.                 $this->Conn->Query($q,"log");
  32.                    
  33.                 if ($this->Conn->GetNumRows("log")==0)
  34.                     {      
  35.                     unset($_SESSION["login"]);
  36.                     unset($_SESSION["pass"]);
  37.                     unset($_SESSION["id_user"]);            
  38.                     Jump("index.php?link=logerror");
  39.                     }
  40.                 else
  41.                     {
  42.                     $row=$this->Conn->GetRow("log",0);
  43.                     $_SESSION["id_user"]=$row["id"];                    
  44.                     }
  45.  
  46.         }
  47.  
  48.  
  49.         //------------------ Dibujado del Form
  50.         //
  51.         if (!isset($_SESSION["login"]))
  52.         {                  
  53.         $s=$s."<form name="".$this->name."" action=".SelfUrl()." method=post>";
  54.             $s=$s."<table>";
  55.             $s=$s."<tr><td>Login:</td><td><input type="text" id="user_login" name="user_login"></td></tr>";
  56.             $s=$s."<tr><td>Contraseña:</td><td><input type="password"  id="user_pass" name="user_pass"></td></tr>";
  57.             $s=$s."<tr><td align="right"><a href="".SelfUrl()."?link=register" >Registrarse</a></td><td><input align=right type="submit" value="Entrar"></td></tr>";
  58.             $s=$s."</table>";
  59.         $s=$s."</form>";
  60.         return $s;
  61.         }
  62.         else
  63.         {
  64.             $s=$s."<table>";
  65.             $s=$s."<tr><td colspan=2 align="right"> Bienvenido ".$_SESSION["login"]."</td></tr>";
  66.             $s=$s."<tr><td colspan=2 align="right"> <a href="".SelfUrl()."?link=logoff">logoff</a></td></tr>";
  67.             $s=$s."</table>";
  68.         return $s;      
  69.         }
  70.  
  71.  

es algun problema de versiones? estoy haciendo algo mal que realmente sobrevive por los pelos en la otra version?

gracias
att. Diego Martinez

45
C/C++ / sscanf
« en: Viernes 30 de Enero de 2009, 11:40 »
Buenas:

Una consulta sencillita:

Tengo un string con este formato :

Nombre=valor

por ejemplo:

TYPE=8F

y quiero leerlo con sscanf descomponiendolo en 2 strings , para ello hago
Código: Text
  1. sscanf(ptr,"%[^=]s=%s",Var,Value);
  2.  


pero me resulta que solo me lee el primero de los strings :S que hago mal? he estado mirando la sintaxis del sscanf y parece correcto.

att diego martinez

46
MySQL / Sentencia Join rara
« en: Miércoles 28 de Enero de 2009, 02:00 »
buenas:

Estoy haciendo una sentencia que quiero que me de una lista de los eventos que hay en una tabla.

Esta tabla de eventos tiene un id por evento.

evento:
id int auto_increment,
nombre varchar(50)

Los usuarios pueden darse de alta a eventos , para ello uso la tabla inscripcion.

la tabla inscripcion solo tiene :
id int auto_increment
id_user int,
id_evento int

para cruzarlo

ahora bien , quiero hacer una sentencia que me de todos los eventos, y ademas EL NUMERO DE USUARIOS que estan inscritos

si hago:

select evento.nombre,count(inscripcion.id) from evento join inscripcion where inscripcion.id_evento=evento.id

me da mal, (mas que nada por que no tengo ni idea de si es siquiera de este estilo lo que quiero hacer).

alguien me puede decir como hacerlo?


muchas gracias, no se si me he explicado muy bien :P

47
C/C++ / select en sockets non-blocking
« en: Lunes 12 de Enero de 2009, 10:49 »
Buenas:

estoy haciendo una comunicación UDP entre 2 equipos. Cuando se produce un evento, el equipo A manda una trama UDP al equipo B que esta en escucha con Bind.

Uso select para ver si tengo que hacer recv en el recepctor. Y aqui viene el problema, el receptor a pesar de tener un sleep , me consume el 98% de la CPU. Alguien sabe que hago mal?

Os pongo el codigo.
Código: Text
  1.    
  2. //este es el bucle de mensajeria de windows
  3.  
  4. while (!this->IsFinished() && !this->IsRestarting())
  5.     {
  6.         this->Messager(); //translate message, dispatch etc...
  7.  
  8.         this->UDPServer->Poll();
  9.  
  10.         Sleep(this->Main_Sleep); //vale 1 MainSleep
  11.     }
  12.  
  13.  

y este es el UDPServer
Código: Text
  1.  
  2.  
  3. int appIP::InitHost()
  4. {
  5.         //creamos un socket para UDP
  6.     this->Socket=socket(AF_INET, SOCK_DGRAM, 0);
  7.     if (this->Socket==SOCKET_ERROR) return 1;
  8.  
  9.     //limpiamos nuestra address para hacer de host
  10.     memset((void *)&Host, '', sizeof(struct sockaddr_in));
  11.  
  12.    
  13.     /* Set family and port */
  14.     Host.sin_family = AF_INET;
  15.     Host.sin_port = htons(Port);
  16.  
  17.     /* Get host name of this computer */
  18.         gethostname(host_name, sizeof(host_name));
  19.         HostProperties = gethostbyname(host_name); //cojemos el nombre de la maquina local
  20.  
  21.         /* Check for NULL pointer */
  22.         if (HostProperties == NULL)
  23.             return 1;
  24.  
  25.         /* Assign the address */
  26.         Host.sin_addr.S_un.S_un_b.s_b1 = HostProperties->h_addr_list[0][0];
  27.         Host.sin_addr.S_un.S_un_b.s_b2 = HostProperties->h_addr_list[0][1];
  28.         Host.sin_addr.S_un.S_un_b.s_b3 = HostProperties->h_addr_list[0][2];
  29.         Host.sin_addr.S_un.S_un_b.s_b4 = HostProperties->h_addr_list[0][3];
  30.  
  31.         /*tenemos la ip , hagamosla string*/
  32.         sprintf(StringIP,"%d.%d.%d.%d",Host.sin_addr.S_un.S_un_b.s_b1,Host.sin_addr.S_un.S_un_b.s_b2,Host.sin_addr.S_un.S_un_b.s_b3,Host.sin_addr.S_un.S_un_b.s_b4);
  33.        
  34.         TimeOut.tv_usec = msTimeout%1000;
  35.         TimeOut.tv_sec = msTimeout/1000;  // Time in seconds
  36.  
  37.         FD_ZERO (&fdSocket);
  38.         FD_SET  (Socket, &fdSocket); //ponemos el socket en vigilancia
  39.  
  40.  if (bind(Socket, (struct sockaddr *)&Host, sizeof(struct sockaddr_in)) == -1)
  41.         {
  42.             return 1;
  43.         }
  44.         return 0;
  45. }
  46.  
  47.  
  48.  

Y este es el polling del select.

Código: Text
  1.  
  2. void appIP::Poll()
  3. {
  4.     unsigned int bytes_received=0;
  5.     int AddrSize=(int)sizeof(struct sockaddr_in);
  6.  
  7.     this->fdSocket.fd_count = 1;
  8.  
  9.         if (
  10.             select(0,&this->fdSocket,0,0,&this->TimeOut)  > 0  //hay notificacion
  11.             &&
  12.             FD_ISSET (this->Socket, &this->fdSocket)  //y es nuestro socket
  13.             )
  14.         {
  15.             bytes_received = recvfrom(this->Socket,(char*) this->Buffer, 100, 0, (struct sockaddr *)&this->Ext, &AddrSize);
  16.  
  17.             if (bytes_received>0)
  18.             {
  19.                 if (this->Events["receive"]!=NULL) this->Events["receive"](this);
  20.             }
  21.         }
  22. }
  23.  
  24.  

no se, al select le he puesto un time out de 1 ms para que la mitad del tiempo este durmiendo la cpu, asi que deberia ir relajado. Quizas estoy manejando mal el select?


gracias por anticipado.

48
C/C++ / limpiar ventana
« en: Jueves 18 de Diciembre de 2008, 18:03 »
Buenas:

Tengo una ventana en Win32 pintada usando StretchDibBits.

La cosa es que quiero limpiarla debido a que no siempre pinto en la misma zona.

He buscado y no hay ninguna funcion win32 gdi que me permita limpiarla.

He probado a pintar un rectangulo encima pero no ha funcionado.

Alguien sabe si hay alguna funcion "Clear"?

mi codigo:
Código: Text
  1.  
  2. RECT r;
  3. GetWindowRect(Marco_Mapa,&r);
  4. HBRUSH b=CreateSolidBrush(RGB(255,255,255));
  5. FillRect(hDC,&r,(HBRUSH)(b));
  6. Mapa->Draw(hDC,0,0,200,140);
  7. delete(Mapa);
  8. DeleteObject(b);
  9.  
  10.  
  11.  

49
C/C++ / Comprobar si un hilo esta aun vivo
« en: Viernes 5 de Diciembre de 2008, 19:04 »
Buenas:

tengo un hilo que parece ser qeu da algun problema y "desaparece".

Con desaparecer me refiero a que no produce ninguna excepción, no pasa por _endthread ni hace nada raro, sin embargo, el hilo deja de funcionar y ademas desaparece de la lista de threads del spy++.

Alguien sabe que puede provocar algo asi?

De mientras averiguo la razón, estoy intentando descubrir cuando desaparece para relanzarlo. Para ello, en msdn dicen de usar WaitForSingleObject, sin embargo, cuando se produce esta "desaparición" waitforsingleobject no retorna. He probado tambien con _cwait y pasa lo mismo.

Alguien sabe como puedo "vigilar" la permanencia de un  hilo?.

Gracias.

Código: Text
  1.  
  2.  
  3. //este es hilo de vigilancia del otro hilo
  4. unsigned int __stdcall Watcher(void *)
  5. {
  6.         _cwait(NULL,(intptr_t)app->GetCom()->ReadThread,0);              //no detecta la finalización
  7.            //WaitForSingleObject(app->GetCom()->ReadThread,INFINITE);  //no detecta la finalización
  8.  
  9.     if (app->IsFinished()==false)
  10.     MessageBox(0,"HILO DE LECTURA ROTO SIN SOLICITUD",0,0);
  11.     return 0;
  12. }
  13.  
  14.  

50
OpenGL / tutorial sobre Skinning/Bones
« en: Viernes 17 de Octubre de 2008, 19:27 »
Buenas:

estoy haciendo un motor y estoy intentando aplicar skinning a partir de bones (en algunos lugares lo llaman de otra forma) pero es la deformacion de la malla para mover una malla unica por medio de los bones vamos.

La cosa es que aplico este codigo:

Código: Text
  1.  
  2.     //---- Dibujamos el mesh
  3. int nB=E->GetNBones();
  4. int nV=E->GetNVertex();
  5.  
  6. _3D * V=E->GetVertex(); //array de vertices
  7.  
  8.  
  9. _3D v; //vertice x,y,z,w
  10.  
  11. double weight;
  12.  
  13.  
  14. RenderBone(Bones->Root); //aplico las matrices absolutas de los bones
  15.  
  16. for (int iV=0;iV<nV;iV++)
  17. {
  18.     E->WeightedVertex[iV]=V[iV];
  19.     E->WeightedVertex[iV].w=1.0;
  20. }
  21.  
  22. for (int b=0;b<E->GetNBones();b++)
  23.     {
  24.         KngBone * B=E->GetBone(b);
  25.         for (int w=0;w<B->GetNWeights();w++)
  26.             {
  27.                 iV=B->GetWeight(w).n;
  28.                 weight=B->GetWeight(w).w;
  29.                 v=B->Absolute.VectorMatrixMultiply(E->WeightedVertex[iV]); //aqui multiplico la matriz acumulada de todos los bones que afectan  a este bone y la aplico sobre el vertice.
  30.  
  31.                 v.x*=weight;  //opero sobre los pesos para saber el verdadero desplazamiento
  32.                 v.y*=weight;
  33.                 v.z*=weight;
  34.                 v.w*=weight;
  35.  
  36.                               //sumo todos los pesos para tener el vertice bien
  37.                 E->WeightedVertex[iV].x+=v.x;E->WeightedVertex[iV].y+=v.y;E->WeightedVertex[iV].z+=v.z;
  38.             }
  39.     }
  40.  
  41.  
  42. for (ifaces=0;ifaces<nFaces;ifaces++)
  43.             {
  44.                 glBegin(GL_LINE_STRIP);                     // Drawing Using Triangles
  45.                    
  46.                     F=Faces[ifaces];
  47.  
  48.                     _3D va,vb,vc;
  49.  
  50.                     va=E->WeightedVertex[F.a];         
  51.                     vb=E->WeightedVertex[F.b];                 
  52.                     vc=E->WeightedVertex[F.c];                 
  53.  
  54.                     glVertex3f( va.x, va.y, va.z);         
  55.                     glVertex3f( vb.x, vb.y, vb.z);         
  56.                     glVertex3f( vc.x, vc.y, vc.z);         
  57.                     glVertex3f( va.x, va.y, va.z);
  58.                 glEnd();
  59.             }   
  60.  
  61.  
  62.  

para obtener las matrices absolutas de los bones antes hago una operacion recursiva

Código: Text
  1.  
  2.  
  3. void KngRendererBone::RenderBone(KngBone * B)
  4. {   
  5.     B->Absolute=*(B->GetMatrix());  //copio la matriz
  6.     if (B->GetParent()!=NULL)
  7.             B->Absolute*=B->GetParent()->Absolute; //y la multiplico por la matriz acumulada de su padre
  8.  
  9.             for (int e=0;e<B->GetNChilds();e++)
  10.                 RenderBone(B->GetChild(e));  //recursiva       
  11. }
  12.  
  13.  


y la malla se me deforma horriblemente.

no se que hago mal, alguien sabe algun tutorial donde expliquen que operaciones hay que producir para que se deforme bien?

alguien sabe que puedo estar torciendo?


gracias por anticipado, pero buf, tengo el engine parado por esto.

Páginas: 1 [2] 3 4