Main
Links
Amigos
Rodrigo [Savashito]Rommel [Knish]
Juan Pablo [JP]
Saiph [My Love]
Roberto Fuchs [Fux]
Imagen Aleatoria
Conversación
tengo hambre...
ojala ya mero llegue la pizza, y nos comamos no solo a besos.
Te amo!
espero poder andar baile y baile contigo al ratillo en la boda santa...
mua
ich denke noch ein mal an dich...natrülich wie immer, du weiBst,dass ich denke nur an dich, und an unsere schöne Kinder, die Viktor und Viktor heissen. Ich hoffe darauf, dass sie Ok sind...ehhh!
mua mua
estaba pensando en ti, y que mejor que dejarte un mensjae. Espero te vaya muy bien mañana en tu entrevista!.suerte
Cosas Geeks
Hoy por la noche, leyendo por ahí en el internet un tutorial para generar WebServices con XFire, lei que existe un nuevo Framework el cual permite desarrollar WebServices fácil y rápido. Parece ser que XFire ahora es CXF, un proyecto de Apache. Les paso la liga: http://cxf.apache.org/
Esta herramienta es muy buena y permite generar tus WebServices fácil y rápidisimo. El tutorial que me ayudó a generar un simple WS es el siguiente: http://www.lumidant.com/blog/web-services-tutorial-with-apache-cxf/
Espero les sea de gran ayuda, para mí lo fue. Saludos!
Actualmente, trabajo enun proyecto escolar el cual me llevó a una situación un poco rara, y extraña. Esta crítica la hago ya que se me presentó un problema al tratar de iterar una Enumeration más de una vez. El problema radica en que el "iterador" que maneja dicha Enumeration, no permite iterar esa misma instancia más de una vez, lo cual implica crear una instancia de tipo Enumeration nueva y volverle a insertar esos datos para volverla a iterar. A continuación presento un ejemplo que trate de aclarar esto:
Nota: El plugin que me pone el código "bonito", no escapa bien los caracteres '>' y '<', así que la parametrización de Hashtable es así, nada más omitan todas las comillas simples.
Hashtable'<'String,Integer'>' hash = new Hashtable'<'String,Integer'>'();
Hashtable'<'String,Integer'>' hash = new Hashtable'<'String,Integer'>'();
hash.put("1",1);
hash.put("2",2);
Enumeration keys = hash.keys();
//Iterando este enumeration ; Primera vez
while( keys.hasMoreElements() )
System.out.println( "Primera vez: " + keys.nextElement() );
//Iterando este enumeration ; Segunda vez
// keys.hasMoreElements regresa false, porque ya se recorrió, el apuntador a los datos
// llegó al final, y no hay método alguno que regrese el apuntador al principio de los datos!!!!
//Este snippet nunca se ejecutará
while( keys.hasMoreElements() )
System.out.println( "Segunda vez: " + keys.nextElement() );
//Para iterar de nuevo esta enumeration, tendríamos que
keys = hash.keys();
while( keys.hasMoreElements() )
System.out.println("De nuevo: " + keys.nextElement());
...
Mi crítica es la siguiente, por qué no permiten iterar de nuevo la Enumeration, o por qué no existe algún método que permita regresar el apuntador a los datos al inicio para volverlo a iterar.
Si alguien tiene algún comentario al respecto, porfavor háganmelo saber!!!
Saludos
Leyendo un rato por la red, me encontré con un artículo que informa sobre una nueva técnica para aprovechar un error común en programadores C/C++. Es alarmante ya que es bastante común el error de dangling pointers . Si quieres leer más acerca de esta nueva técnica, aunque aún no se publica como hacer exploits usando estos errores, dale click aquí.
Saludos!!
![]()
Una vez más, navegando por ahí en busca de cosas interesantes acerca de cosas geeks, me encontré con unas Libraries (bibliotecas) que presumen ser incluidas en el core de C++, el nombre de las librerías se llama Boost.
El desarrollo de estas libraries fue hecho por diversas personas, incluyendo gente del comité que integra el C++ Standard. Estas libraries pretenden ser portables; de hecho existen ya versiones para descargarlas para UNIX-flavored OS, Windows, etc. Muchas de estas librerias utilizan la programación genérica usando STL (templates) como la de GGCL (Generic Graph Component Library). Dentro de estas libraries existe demasiadas estructuras de datos, apuntadores inteligentes, etc.
Vale la pena hecharles un ojo a detalle, talvez nos ayuden a desarrollar aplicaciones más fácilmente.
![]()
Hola, como buen geektor, navegaba por la red y me encontré con un artículo que hablaba acerca de los errores comunes en el manejo de memoría de C/C++. Creo que como buenos programadores debemos tener en cuenta estos errores. Así que me gustaría hacer una breve descripción de estos errores. Al final del post pondré las ligas en las cuales me basé para escribir esta entrada
Memory Leaks
Este tipo de errores se refiere cuando el programador reserva memoria pero nunca libera la memoria reservada. Lo que causa, evidentemente, el incremento en el uso de la memoria provocando que consumamos recursos.
En el peor de los casos , las aplicaciones pueden quedar con recursos insuficientes gracias a nuestro mal uso de memoria.Si esto sucede, es probable que se comienze a utilizar la memoria virtual, lo que implica el uso del disco duro. Aunque actualmente los sistemas operativos modernos, liberan la memoria una vez que el proceso termina, por lo que si el programa dura muy poco tiempo no es tan serio el problema.
En resumen, un error Memory Leak ocurre cuando se reserva memoria y no es correctamente liberada.
Si usas malloc(),calloc() y realloc() debes usar free().
char *str = malloc(80*sizeof(char));
if( str ){ /* Verificando que se pudo reservar memoria */
...
free(str);
}
...
No se puede liberar memoria que no se haya reservado.
Si usas new debes usar delete.
int * arreglo = new int[4];
...
delete [] arreglo;
...
En C++ se prefiere usar new y delete, ya que garantizan una mayor seguridad.
Un caso curioso pero que a mí me pareció demasiado bueno, ya que nunca lo había pensado se presenta en el polimorfismo y la herencia. Incluso el ejemplo a continuación es muy claro y fue tomado de la referencia que leí.
...
delete obj;
Lo que sucede en el código anterior es que al llamar delete, este operador llama al destructor de la ClasePadre, lo que provocaría el no liberar completamente la memoria utilizada por una instancia de la ClaseDerivada. La solución recomendada es utilizar un destructor volátil para que de esta manera se llama automáticamente al destructor de la ClaseDerivada.
Puede suceder también un Memory Leak si se hace un cast al estilo C de una clase de menor alcanze (scope), lo cual también provocaría invocar a un destructor incorrecto.
Otro error que provocaría un Memory Leak, es con el mal uso de los apuntadores. Cuando existe un apuntador con cierto valor, es decir apuntando a cierta localidad de memoria, pero en nuestro código le reasignamos otro valor y liberamos. En este caso sólo liberaríamos la memoria al que apunta el apuntador, mientras que la referencia anterior quedó sin ser liberada. Este caso queda mejor explicado con un ejemplo.
char * b = (char *)malloc(80*sizeof(char));
a = b; /* a apunta al mismo lugar que b*/
/* La referencia que tenía a se perdió con la asignación anterior */
free(a); /* Liberamos la memoria que apunta a*/
free(b); /*Liberamos la memoria que apunta b, pero a apuntaba al mismo lugar*/
Existen utilerias que ayudan a detectar Memory Leaks, para que los programadores no se preocupen tanto, aún así no creo que sea una razón suficiente como para dejar de preocuparse al 100%, debemos tener en cuenta que estos problemas nos pueden suceder.
Memory Corruption
Este error se presenta cuando la memoria es alterada de forma no adecuada. En otras palabras, alterar el contenido de la memoria que no nos corresponde. Existen varios casos mencionados en la referencia acerca de este error. En pocas palabrasel error de Memory Corruption sucede cuando el contenido de una localidad de memoria es alterada unintencionalmente debido a errores de programación y después se intenta utilizar el contenido de la localidad.
Es muy dificil encontrar estos errores, ya que la relación Causa-Efecto puede ser variada y no con un comportamiento constante. Los síntomas que presentan son aleatorios, es decir, puede aveces funcionar o a veces no, pero no se tiene un caso base el cual nos lleva a pensar en un error de este tipo.
- Buffer Overflow
- Usar una dirección de memoria aún no reservada
- Utilizar un apuntador ya liberado
- Liberar Memoria la cual ya ha sido liberada
- Liberar memoria, la cual no fue reservada dinámicamente
http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMemoryLeaks.html
http://en.wikipedia.org/wiki/Memory_leak
Las superficies paramétricas son un elemento muy utilizado en los gráficos por computadora y en CAD (Computer Aided Design), ya que su manera de generarlas nos permite ahorrar memoria. Este articulito intenta explicar que son los parches de Bézier.
Las curvas de Bézier, las cuales se utilizan para generar los parches, son un caso especial de las curvas NURBS, las cuales son curvas Splines (curvas las cuales son construidas por pedazos de polinomios). Estas curvas requieren un conjunto de puntos de control y unas bases polinomiales; en el caso de las curvas de Bézier se utiliza como base los polinomios de Bernstein, los cuales se definen de la siguiente manera:

De tal manera que 'n' es el grado de la base polinomial a usar, es decir, que nuestra curva se armará con polinomios de grado 'n'. Es importante señalar, que esta base nos generan unas curvas suaves, es decir diferenciables.
Además de la base polinomial es necesario tener puntos de control, los cuales guiarán la tendencia de la curva. Para generar la curva necesitaremos n+1 puntos de control. De tal forma que la definición de la curva queda expresada así:

Ahora, extrapolando esta definición para una superficie paramétrica, la definición queda de la siguiente manera:

Esta definición nos pide una maya de puntos de control, la cual es combinada linealmente para formar un nuevo punto de la superficie paramétrica. Es importante señalar que el control local que se tiene
con estos parches es nulo, es decir, si se modifica un punto de control, toda la superficie se ve afectada, cosa que en las curvas B-Splines no ocurre.
Espero, este articulito explique que es un parche de Bezier, o por lo menos se tenga la noción de ellos. En un tiempo publicaré una implementación en OpenSceneGraph, de parche de Bezier cúbicos.
Saludos ![]()