elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: 1 [2] 3 4 5 6
11  Programación / Programación C/C++ / Quedarme solo con algunos decimales. en: 4 Abril 2012, 16:50 pm
Hola, tengo un problema muy sencillo y que aún así me sigue quemando el coco.
Tengo una función que me devuelve un float, un float que es el resultado de 10/3, osea 3,333333...
Quiero recortarle algunos decimales cosa de que me quede como 3,333 o 3,3333.
Lo que hago es sencillo, tomo el float en cuestión, lo multiplico por 10⁴, si quiero tener 4 decimales luego de la coma y lo convierto a entero cosa de que me quede: 33333. Luego lo divido a ese entero, casteado a float por 10⁴, para volver a mover los decimales, cosa de que me quede 3,3333. Sin embargo lo que me ocurre es que cuando lo imprimo formateado como %.100f (cosa de ver todos los decimales posibles), me queda 3,333300000000003454345677. Esto me esta volviendo loco, porque solo me sucede con numeros periódicos y es un razonamiento muy sencillo.

El codigo seria algo como
int decimales = 3;
float miNumero = funcion_que_devuelve_float(10,3);
int miNumero2 = (int)(miNumero * pow(10,decimales));
float miNumero = (float)(miNumero2 / pow(10,decimales));

También intente multiplicar en ambos casos, en uno por la potencia negativa y en otro por la positiva, con el mismo resultado.

Muchas gracias por detenerse a leer y saludos.
12  Informática / Hardware / ¿Existen netbooks que puedan soportar IDEs como Eclipse? en: 3 Abril 2012, 01:43 am
Hola, quería hacer una pequeña consulta, voy a iniciarme en un proyecto y necesito una computadora para estar trabajando lejos de mi casa, como no me dan ganas de llevarme la CPU al hombro todos los días al trabajo, estoy pensando en comprarme una netbook o una notebook. En preferencia me gustaría comprarme algo económico, por eso pensé en una netbook, pero no se si una netbook pueda soportar correr IDEs como Eclipse o Netbeans. ¿Ustedes conocen alguna notebook que sea lo suficientemente potente como para tirar una IDE o acaso me conviene optar por comprarme una notebook?.

Muchas gracias por detenerse a leer y saludos! :D
13  Programación / Desarrollo Web / ¿Manual o textos de JSP? en: 26 Marzo 2012, 16:10 pm
Hola, estaba buscando algún manual o alguna fuente para formarme con Java Server Pages, sin embargo en internet solo encuentro tutoriales con muy poco contenido. ¿Alguno conoce un manual de JSP?

Muchas gracias por detenerse a leer, saludos.
14  Sistemas Operativos / Unix/Unix-Like / System V: Buffer de Cache + ¿Que ocurre si piso fragmentacion interna? en: 22 Marzo 2012, 20:49 pm
Hola tengo dos dudas muy puntuales. El otro día haciendo algunos ejercicios de memoria virtual, me surgió una duda, en un esquema de memoria virtual con paginación, ¿Como detecta el sistema operativo si estoy referenciando a una dirección que esta en la fragmentación interna del espacio de direcciones lógico?. Es decir, se puede detectar por HW si estoy tratando de acceder a una pagina que no esta asignada mediante el bit de validez, sin embargo por un error del programa del proceso una instrucción podría hacer un salto a la fragmentación interna, ¿Como se detecta en ese caso?

Mi otra pregunta es acerca del buffer de cache en System V.
¿Se mantienen las tablas de paginas o paginas individuales en buffer de cache?, ¿Que ocurre con la TLB en ese caso?. Porque me puse a pensarlo y sería como que ambas compiten por el mismo objetivo sin saberlo, pero después lo reconsidere y pensé: La TLB es una cache, se implementa con registros asociativos de alta velocidad, el método de búsqueda ante un page fault, podría ser; Me fijo en la TLB si esta la pagina deseada (La TLB es varios ordenes de tiempo mas rápida que el buffer de cache ya que esta implementada con registros asociativos, mientras que el buffer de cache esta en memoria), si la pagina deseada no esta en la TLB, buscamos en el buffer de cache por un bloque que la contenga, si no esta en el buffer de cache, se busca un buffer disponible en la free list (¿Que ocurre si no hay un buffer disponible?, obviamente tendremos que esperar, ¡Pero se trata de un page fault!, debe atenderse lo mas rápido posible), si se encuentra un bloque disponible se graba en él, si el bloque disponible estaba con delayed write, se descarga a disco antes de escribir el nuevo contenido, una vez escrito se actualiza la TLB, se reinicia la instrucción desde el punto anterior como si el PF nunca hubiera ocurrido, etcétera.

Además algo que leí en el Galvin (Cariñosamente llamado "El de los dinosaurios" por mi xD) que me voló el sombrero, es que en Unix, puede estar el superblock en el buffer de cache. ¿Para que voy a querer tener el superblock en el buffer de cache?, si el superblock solo contiene la información del filesystem, como numero de cilindros, etcétera.


Muchas gracias por detenerse a leer y saludos! :D
15  Programación / Programación C/C++ / Pregunta sobre estructuras de datos genericas. en: 18 Marzo 2012, 20:29 pm
Hola, tengo una duda acerca de estructuras de datos genéricas, como por ejemplo, una lista. Hacer una lista genérica que contenga diferentes tipos de datos básicos, como int, char, char* o float es sencillo; definimos un puntero a void y luego por ejemplo si queremos imprimir la lista entera bajo diferentes criterios usamos punteros a funciones que casteen el puntero al tipo adecuado de puntero. Sin embargo, si tenemos una lista genérica que adicionalmente, además de los tipos mencionados anteriormente, contiene una estructura, como por ejemplo t_Persona, que contiene los campos nombre y apellido, ambos char*, ¿Como deberíamos proceder para hacer un puntero a función que lo imprima de manera adecuada?.

Osea mi problema es que yo quiero tener una lista genérica de esa forma, tener una función imprimir que reciba la lista y un puntero a función, donde la función a la que apunta es el criterio a usar. Si yo en mi lista tengo 2, 4, a, c, 'Hola mundo!', 3.45, t_Persona(nombre: 'Jorge' apellido:'Ruiz') (Disculpen la notación de este ultimo), entonces si yo llamara a la función imprimir y le pasara la lista y la función que castea a caracteres me imprimiría: (El ASCII de 2), (El ASCII de 4), a, c, H, (Basura), (Mas basura).

Mi punto es: Si quiero imprimir usando el criterio para imprimir una persona, voy a tener que castear los punteros a void a punteros a t_Persona, con un dato que realmente sea de t_Persona no va a haber problema, sin embargo cuando este iterando y me cruce un puntero que en realidad es un puntero a float, y lo castee a tipo persona, y trate de acceder a sus miembros, esto me va a tirar un Segmentation Fault con toda la razón.

Yo pensé, entonces simplemente tendría que exigir que el resto de los elementos, como mínimo, ocupen la misma cantidad de bytes que t_Persona, de esa manera cuando los castee, me devolverán basura, pero no me tirara Segmentation Fault.

Mi duda es simple: ¿Existe una manera mas limpia de lograr mi objetivo?

Les dejo un ejemplo de mi codigo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct t_Persona {
  5. char* nombre;
  6. char* apellido;
  7. } t_Persona;
  8.  
  9. //Decimos que un puntero a void es sinonimo de una direccion.
  10. typedef void* t_Direccion;
  11.  
  12. typedef struct t_Lista {
  13. t_Direccion* dato;
  14. //El size NO lo necesitamos simplemente para saber cuantos elementos tenemos, SI lo necesitamos para seguirle la pista
  15. //A cuanto espacio tenemos que alocar.
  16. int size;
  17. } t_Lista;
  18.  
  19. //El tipo iterador contiene la lista y la posicion actual dentro de ella
  20. typedef struct t_Iterador {
  21. t_Lista* lista;
  22. //Nodo actual para recorrer
  23. int actual;
  24. } t_Iterador;
  25.  
  26. t_Iterador tIterador_Crear () {
  27. t_Iterador nue;
  28. nue.lista= (t_Lista*) malloc (sizeof(t_Lista));
  29. (nue.lista)->size=0;
  30. (nue.lista)->dato=NULL;
  31. nue.actual=0;
  32. return nue;
  33. }
  34.  
  35. void tIterador_Iniciar(t_Iterador* iter) {
  36. iter->actual=0;
  37. }
  38.  
  39. /* Notese la diferencia entre el crear y el iniciar; El crear nos crea una nueva instancia, y el iniciar
  40.  * prepara el iterador para iterar, recibiendo la lista sobre la cual va a trabajar y poniendo su posicion
  41.  * actual a cero. */
  42.  
  43. /*Un simple agregar al final*/
  44.  
  45. void tIterador_Agregar (t_Iterador* iter, t_Direccion i) {
  46. if (iter->lista->size == 0) {
  47. iter->lista->dato = (t_Direccion*) malloc (sizeof(t_Direccion)*(++iter->lista->size));
  48. } else {
  49. iter->lista->dato = (t_Direccion*) realloc (iter->lista->dato, sizeof(t_Direccion)*(++iter->lista->size));
  50. }
  51. iter->lista->dato[iter->actual++] = i;
  52. }
  53.  
  54. /*Funciones que imprimen en diferentes formatos, utilizadas para el imprimir*/
  55.  
  56. void imprimirEnteros (t_Direccion x) {
  57. printf("%i, ",*((int*)(x)));
  58. }
  59.  
  60. void imprimirCaracteres (t_Direccion x) {
  61. printf("%c, ",*((char*)(x)));
  62. }
  63.  
  64. void imprimirStrings (t_Direccion x) {
  65. printf("%s, ",((char*)(x)));
  66. }
  67.  
  68. /* No escatimes en el uso del parentesis en estos casos!!! */
  69. /* void imprimirPersonas (t_Direccion x) {
  70. printf("%s %s, ",((t_Persona*)(x))->nombre, ((t_Persona*)(x))->apellido);
  71. } */
  72. /* En estos casos hay que asegurarse de que todos los elementos tienen el mismo tamaño*/
  73.  
  74. /*El imprimir generico*/
  75. /*Nomenclatura de una funcion pasada como parametro a otra (puntero a funcion)
  76.  *TIPORETORNO (*NOMBRE)(PARAMETROS) Notese que para un puntero a funcion el asterisco se usa a la izquierda*/
  77. void tIterador_Imprimir (t_Iterador* iter, void (*criterio)(t_Direccion)) {
  78. criterio(iter->lista->dato[iter->actual]); /*Modo de uso de un puntero a funcion*/
  79. }
  80.  
  81. int tIterador_Fin (t_Iterador* iter) {
  82. return (iter->actual < iter->lista->size)?(1):(0);
  83. }
  84.  
  85. void tIterador_Avanzar (t_Iterador* iter) {
  86. iter->actual++;
  87. }
  88.  
  89. int main(int argc, char** argv)
  90. {
  91.  
  92. int a=65, b=66, c='a', d=68, e='c';
  93. char* f = "Holaaa";
  94. t_Iterador iter = tIterador_Crear();
  95.  
  96. tIterador_Iniciar(&iter);
  97.  
  98. /*Vamos a agregar los numeros del 65 al 70*/
  99. tIterador_Agregar(&iter, &a);
  100. tIterador_Agregar(&iter, &b);
  101. tIterador_Agregar(&iter, &c);
  102. tIterador_Agregar(&iter, &d);
  103. tIterador_Agregar(&iter, &e);
  104. tIterador_Agregar(&iter, f); //Look!
  105.  
  106. /*Imprimimos como enteros*/
  107. tIterador_Iniciar(&iter);
  108. /*Al imprimir le pasamos la funcion que va a usar como criterio de conversion*/
  109. while ((tIterador_Fin(&iter))) {
  110. tIterador_Imprimir(&iter, imprimirEnteros);
  111. tIterador_Avanzar(&iter);
  112. }
  113. printf("\n");
  114. /*Imprimimos como Caracteres*/
  115. tIterador_Iniciar(&iter);
  116. /*Al imprimir le pasamos la funcion que va a usar como criterio de conversion*/
  117. while ((tIterador_Fin(&iter))) {
  118. tIterador_Imprimir(&iter, imprimirCaracteres);
  119. tIterador_Avanzar(&iter);
  120. }
  121. printf("\n");
  122. /*Imprimimos como Strings*/
  123. tIterador_Iniciar(&iter);
  124. /*Al imprimir le pasamos la funcion que va a usar como criterio de conversion*/
  125. while ((tIterador_Fin(&iter))) {
  126. tIterador_Imprimir(&iter, imprimirStrings);
  127. tIterador_Avanzar(&iter);
  128. }
  129.  
  130. return 0;
  131. }

Si usaramos el imprimirPersonas obviamente nos tiraría un segmentation fault.

Muchas gracias por detenerse a leer, y saludos!
16  Programación / Desarrollo Web / Chat; javascript, Ajax, Php y Mysql. en: 13 Marzo 2012, 00:51 am
Hola, quisiera hacerles una consulta sencilla, tengo que implementar un Chat para una pagina web, y antes quería corroborar un par de cosas:

Básicamente para hacer el chat hay que implementarlo con javascript y toda la parte de envío y recepción de mensajes se haría mediante AJAX. Ahora me suena un poco sucio implementar un chat que haga sucesivas consultas sobre una base de datos, mejor dicho, me suena ineficiente. ¿Usualmente estos chats se implementan usando Sockets o es viable una alternativa usando consultas y Mysql?. En caso de que sea viable utilizar consultas y Mysql, ¿Como hago para saber que el otro usuario/s ha mandado un mensaje?, ¿Uso un crom que chequee a cada rato la base de datos (eso también me suena un poco sucio)?.

Si conocen el nombre de algún open source interesante, les agradecería que me lo comenten. Cualquier tip es bienvenido.

Muchas gracias por detenerse a leer y saludos!
17  Programación / Programación C/C++ / ¿Que dudas te genero C cuando empezaste a utilizarlo? en: 12 Marzo 2012, 17:34 pm
Hola, estoy haciendo un recopilatorio de dudas respecto a C. Sin embargo, cuando me pongo a pensar en que contenidos me dieron problemas cuando comencé con C, mucho no se me viene a la mente. Si, obviamente, todos hemos tenido nuestras dudas acerca de punteros, pero busco encontrar preguntas mas "finas", mas "particulares".
Estuve leyendo hasta la pagina 21 de este foro para buscar entre las dudas de los usuarios. Pero como siempre, y como a la mayoría nos ha sucedido, el principal objeto de duda suele ser, punteros a funciones, punteros, matrices, estructuras genéricas con punteros a void.

Las preguntas mas finas que se me vienen a la mente, por ejemplo, son:

¿Qué utilidad tiene un void*?, ¿Para que voy a querer castear como un puntero, (como por ejemplo, int*) si igualmente luego puede accederlo y tratarlo como se me antoje?, ¿Cual es el tamaño de un void?¿Por que viene dado?, ¿Por que usar Macros y no funciones o viceversa?

Pero como siempre, en todo el ámbito informático, uno nunca va a ver lo que otro puede, así que tal vez, ustedes en sus inicios con C tuvieron también, problemas particulares de la misma naturaleza.

Ya que estoy voy a poner dos pequeñas dudas que me acaban de surgir en este momento:
Java implementa los Comparadores utilizando punteros a funciones, ¿no?. Nunca investigue acerca del tema, pero recuerdo que cuando estaba estudiando punteros a funciones, fue así como dije:-"Ah esa es la utilidad de punteros a funciones".

¿Como implementarían ustedes un pequeño garbage collector en C?, la manera es sencilla, pero ¿como determinarían si una variable no ha sido usada durante mucho tiempo?, ¿Con una syscall y guardarían las posiciones de memoria de inicio de cada variable en un vector junto con la información relativa a cuando se ha usado?

Saludos y muchas gracias por detenerse a leer.
18  Programación / Bases de Datos / Problema extraño con una consulta sencilla: Strings, Like en: 10 Marzo 2012, 16:14 pm
Hola, tengo que hacer una consulta realmente sencilla, pero no me devuelve ningún resultado, la consulta es la siguiente:

select CARRERAS.IDCAR, CARRERAS.NOMBRE FROM
CARRERAS
INNER JOIN FACCAR ON (CARRERAS.IDCAR = FACCAR.IDCAR)
INNER JOIN FACULTADES ON (FACULTADES.IDFAC = FACCAR.IDFAC)
INNER JOIN UNIFAC ON (UNIFAC.IDFAC = FACULTADES.IDFAC)
INNER JOIN UNIVERSIDADES ON (UNIVERSIDADES.IDUNI = UNIFAC.IDUNI)
WHERE ((UNIVERSIDADES.NOMBRE LIKE '%Universidad Nacional de La Plata%')
AND (FACULTADES.NOMBRE LIKE '%Facultad de Informatica%')
AND (CARRERAS.NOMBRE LIKE '%Sistemas%'))

No me devuelve nada, me deberia devolver IDCAR = 1 y NOMBRE = 'Licenciatura en Sistemas'

Pero fijense que si elimino todo lo del Where me devuelve:



(La consulta devolvió todas las carreras de todas las facultades de todas las universidades, solo que las que figuran son las únicas que inserte)

Se me hace muy extraño porque usando LIKE debería devolverme lo que espero. No se en que me estoy equivocando. Si alguien lo nota, por favor aviseme.

Muchas gracias por detenerse a leer y Saludos!
19  Programación / Bases de Datos / Duda sobre mysql; ¿Se puede conocer el valor de un campo luego de insertarlo? en: 9 Marzo 2012, 20:42 pm
Hola, lo que me sucede es que yo tengo una tabla, donde (este es un mero ejemplo) tengo un id, que es clave principal y es un entero que se auto-incrementa, y tengo el nombre que es un varchar.
Ahora, lo que me sucede es que yo quiero insertar un nuevo nombre, y justo después usar el id, del nuevo nombre insertado, pero pienso que no seria correcto que la consulta para hacerlo fuera; "select id from test where (test.nombre = 'unNombre')". Pensé que tal vez lo correcto seria contar la cantidad de columnas, pero tampoco estoy convencido. ¿Hay alguna forma autentica de lograr recuperar el id luego de insertarlo?

Les dejo un ejemplo:

Código
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2.  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4.  
  5. <title>sin título</title>
  6. <meta http-equiv="content-type" content="text/html;charset=utf-8" />
  7. <meta name="generator" content="Geany 0.18" />
  8. </head>
  9. <?php
  10. //Pruebas
  11. $host_db="localhost";
  12. $usuario_db="root";
  13. $password_db="root";
  14. $nombre_db="kimboo";
  15. $link = mysql_connect($host_db,$usuario_db,$password_db);
  16. $query ="insert into test (nombre) value ('Gerardo')";
  17. $result = mysql_db_query($nombre_db,$query,$link);
  18. if (mysql_num_rows($result)) {
  19. echo "Error";
  20. } else {
  21. //Chan
  22. $row = mysql_fetch_array($result);
  23. echo '<p>Se inserto el usuario con ID igual a '.$row['id'].'</p>';
  24. }
  25. ?>
  26. </body>
  27. </html>

Muchas gracias por detenerse a leer, Saludos!
20  Seguridad Informática / Seguridad / ¿Que valores inequivocos e irrepetidos tiene cada maquina? en: 7 Marzo 2012, 16:21 pm
Hola, estoy implementando un sistema de baneo en una pagina web. Originalmente constaba de lo siguiente, se me ocurrió que cuando un usuario se registraba podía guardarme en la base de datos junto con su nombre de usuario y su pass, su dirección MAC. Tras haber investigado en varios foros, me di cuenta de que eso era imposible. Por ahora estoy optando por una alternativa no tan atractiva; Cada vez que un usuario se logea me salvo su ip, en la base de datos, si tiempo después lo banean, usare esas ips para identificarlo, pero ahora que lo pienso, es un suicidio XD, si tengo 2500 usuarios, de cada uno por lo menos voy a tener entre 10 y 25 ips diferentes, si baneo a un usuario, después a cada usuario que se quiera registrar en el sistema, voy a tener que comprobar su ip contra las ip de todos los usuarios baneados.
Bueno igualmente no cambia el punto de mi pregunta; ¿Existe algún otro valor único en la maquina como la MAC adress que se pueda consultar mediante php o javascript?


Desde ya muchísimas gracias por detenerse a leer y saludos!
Páginas: 1 [2] 3 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines