<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.stonedgorilla.net/gadgets/Blog/templates/atom.xsl" ?><feed xmlns="http://www.w3.org/2005/Atom">
<link rel="self"  href="http://www.stonedgorilla.net/data/xml/blog.atom" title=".:5t0n3dGori114.NeT:." />
<title  type="text" >.:5t0n3dGori114.NeT:.</title>
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net</uri>
	</author>
<subtitle  type="text" >The Geektor's WebSite</subtitle>
<id>http://www.stonedgorilla.net</id>
<generator>JAWS 0.7.0</generator>
<rights  type="text" >2007, Victor Fragoso</rights>
<updated>2008-05-05T22:24:41-05:00</updated>
<entry>
	<title  type="text" ><![CDATA[ WebServices Fácil! ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/WebServices-Fcil.html" title="WebServices Fácil!" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/WebServices-Fcil.html</id>
	<updated>2008-05-05T22:24:41-05:00</updated>
	<published>2008-05-05T22:24:41-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>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/<a name="http://cxf.apache.org/" title="http://cxf.apache.org/"></a></p>
	<p>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/<a name="http://www.lumidant.com/blog/web-services-tutorial-with-apache-cxf/" title="http://www.lumidant.com/blog/web-services-tutorial-with-apache-cxf/"></a></p>
	<p>&#160;</p>
	<p>Espero les sea de gran ayuda, para mí lo fue.
Saludos!
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>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/<a name="http://cxf.apache.org/" title="http://cxf.apache.org/"></a></p>
	<p>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/<a name="http://www.lumidant.com/blog/web-services-tutorial-with-apache-cxf/" title="http://www.lumidant.com/blog/web-services-tutorial-with-apache-cxf/"></a></p>
	<p>&#160;</p>
	<p>Espero les sea de gran ayuda, para mí lo fue.
Saludos!
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/2.html" term="2" label="Cosas Geeks"/>
</entry>
<entry>
	<title  type="text" ><![CDATA[ OpenCV y Yo ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/OpenCV-y-Yo.html" title="OpenCV y Yo" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/OpenCV-y-Yo.html</id>
	<updated>2008-02-23T11:17:36-05:00</updated>
	<published>2008-02-23T11:17:36-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>Debido a que no escribía en mucho tiempo, decidí hacerlo esta vez con lo último que he estado trabajando, Visión por Computadora. Un tema que últimamente está cobrando vital importancia en el ámbito computacional.</p>
	<p>&#160;</p>
	<p>Esta biblioteca (library), es muy útil si no te quieres de dar topes con dispositivos en GNU/Linux e incluso en Windows. Esta biblioteca ya te permite acceder al flujo de Video que nos arroja la cámara sin mucho problema.</p>
	<p>&#160;</p>
	<p>He probado esta biblioteca en  ambos Sistemas operativos, y me sorprendió lo portable que es el código. Estrictamente hablando, en GNU/Linux, probé algunos snippets con el flag -pedantic, y resulta que esta biblioteca no soporta un ANSI C++. Pero aún así, si no somos tan estrictos, la portabilidad es bastante buena.</p>
	<p>&#160;</p>
	<p>Muy pronto publicaré algunos snippets de lo que he hecho.</p>
	<p>Saludos  <img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>Debido a que no escribía en mucho tiempo, decidí hacerlo esta vez con lo último que he estado trabajando, Visión por Computadora. Un tema que últimamente está cobrando vital importancia en el ámbito computacional.</p>
	<p>&#160;</p>
	<p>Esta biblioteca (library), es muy útil si no te quieres de dar topes con dispositivos en GNU/Linux e incluso en Windows. Esta biblioteca ya te permite acceder al flujo de Video que nos arroja la cámara sin mucho problema.</p>
	<p>&#160;</p>
	<p>He probado esta biblioteca en  ambos Sistemas operativos, y me sorprendió lo portable que es el código. Estrictamente hablando, en GNU/Linux, probé algunos snippets con el flag -pedantic, y resulta que esta biblioteca no soporta un ANSI C++. Pero aún así, si no somos tan estrictos, la portabilidad es bastante buena.</p>
	<p>&#160;</p>
	<p>Muy pronto publicaré algunos snippets de lo que he hecho.</p>
	<p>Saludos  <img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/1.html" term="1" label="General"/>
</entry>
<entry>
	<title  type="text" ><![CDATA[ Cambio de Vida ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/Cambio-de-Vida.html" title="Cambio de Vida" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/Cambio-de-Vida.html</id>
	<updated>2007-12-17T04:01:21-05:00</updated>
	<published>2007-12-17T03:58:32-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>Todo cambia en este mundo, así como dice Hegel con su dialéctica. Finalmente acabé mi carrera, comienzo una nueva etapa; a escribir la tésis para seguir estudiando. Me siento un poco triste porque me hace falta mi compañía de mi vida que espero con ansias su regreso. Pues sí, mi tema de tésis será visión por computadora y aprendizaje no supervisado, espero no esté tan pesado como suena. Así que amigo lector deseame suerte!!!</p>
	<p><img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-smile.png" border="0" alt="face-smile.png " width="16" height="16" />
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>Todo cambia en este mundo, así como dice Hegel con su dialéctica. Finalmente acabé mi carrera, comienzo una nueva etapa; a escribir la tésis para seguir estudiando. Me siento un poco triste porque me hace falta mi compañía de mi vida que espero con ansias su regreso. Pues sí, mi tema de tésis será visión por computadora y aprendizaje no supervisado, espero no esté tan pesado como suena. Así que amigo lector deseame suerte!!!</p>
	<p><img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-smile.png" border="0" alt="face-smile.png " width="16" height="16" />
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/1.html" term="1" label="General"/>
</entry>
<entry>
	<title  type="text" ><![CDATA[ Crítica de java.util.Enumeration ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/Crtica-de-javautilEnumeration.html" title="Crítica de java.util.Enumeration" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/Crtica-de-javautilEnumeration.html</id>
	<updated>2007-09-30T07:21:57-05:00</updated>
	<published>2007-09-30T06:29:30-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>
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:
</p>
<p>
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.
</p>
<p>
Hashtable'<'String,Integer'>' hash = new Hashtable'<'String,Integer'>'();
</p>
<div class="code"><div class="java">
...<br />
<a href="http://www.google.com/search?q=allinurl%3AHashtable+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Hashtable</span></a><span style="color: #ff0000;">'&lt;'</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a>,<a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Integer</span></a><span style="color: #ff0000;">'&gt;'</span> hash = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AHashtable+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Hashtable</span></a><span style="color: #ff0000;">'&lt;'</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a>,<a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Integer</span></a><span style="color: #ff0000;">'&gt;'</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
hash.<span style="color: #006600;">put</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"1"</span>,<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;<br />
hash.<span style="color: #006600;">put</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"2"</span>,<span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>;<br />
<a href="http://www.google.com/search?q=allinurl%3AEnumeration+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Enumeration</span></a> keys = hash.<span style="color: #006600;">keys</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #808080; font-style: italic;">//Iterando este enumeration ; Primera vez</span><br />
<span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span> keys.<span style="color: #006600;">hasMoreElements</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
<a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">"Primera vez: "</span> + keys.<span style="color: #006600;">nextElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #808080; font-style: italic;">//Iterando este enumeration ; Segunda vez</span><br />
<span style="color: #808080; font-style: italic;">// keys.hasMoreElements regresa false, porque ya se recorrió, el apuntador a los datos</span><br />
<span style="color: #808080; font-style: italic;">// llegó al final, y no hay método alguno que regrese el apuntador al principio de los datos!!!!</span><br />
<span style="color: #808080; font-style: italic;">//Este&#160; snippet nunca se ejecutará</span><br />
<span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span> keys.<span style="color: #006600;">hasMoreElements</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
<a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">"Segunda vez: "</span> + keys.<span style="color: #006600;">nextElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #808080; font-style: italic;">//Para iterar de nuevo esta enumeration, tendríamos que</span><br />
keys = hash.<span style="color: #006600;">keys</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span> keys.<span style="color: #006600;">hasMoreElements</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
<a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"De nuevo: "</span> + keys.<span style="color: #006600;">nextElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
...<br />
&#160;</div></div>
<p>
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.
</p>
<p>
Si alguien tiene algún comentario al respecto, porfavor háganmelo saber!!!
</p>
<p>
Saludos
</p>
<p>
&#160;
</p>
<p>
&#160;
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>
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:
</p>
<p>
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.
</p>
<p>
Hashtable'<'String,Integer'>' hash = new Hashtable'<'String,Integer'>'();
</p>
<div class="code"><div class="java">
...<br />
<a href="http://www.google.com/search?q=allinurl%3AHashtable+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Hashtable</span></a><span style="color: #ff0000;">'&lt;'</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a>,<a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Integer</span></a><span style="color: #ff0000;">'&gt;'</span> hash = <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?q=allinurl%3AHashtable+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Hashtable</span></a><span style="color: #ff0000;">'&lt;'</span><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a>,<a href="http://www.google.com/search?q=allinurl%3AInteger+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Integer</span></a><span style="color: #ff0000;">'&gt;'</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
hash.<span style="color: #006600;">put</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"1"</span>,<span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>;<br />
hash.<span style="color: #006600;">put</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"2"</span>,<span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#41;</span>;<br />
<a href="http://www.google.com/search?q=allinurl%3AEnumeration+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Enumeration</span></a> keys = hash.<span style="color: #006600;">keys</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #808080; font-style: italic;">//Iterando este enumeration ; Primera vez</span><br />
<span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span> keys.<span style="color: #006600;">hasMoreElements</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
<a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">"Primera vez: "</span> + keys.<span style="color: #006600;">nextElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #808080; font-style: italic;">//Iterando este enumeration ; Segunda vez</span><br />
<span style="color: #808080; font-style: italic;">// keys.hasMoreElements regresa false, porque ya se recorrió, el apuntador a los datos</span><br />
<span style="color: #808080; font-style: italic;">// llegó al final, y no hay método alguno que regrese el apuntador al principio de los datos!!!!</span><br />
<span style="color: #808080; font-style: italic;">//Este&#160; snippet nunca se ejecutará</span><br />
<span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span> keys.<span style="color: #006600;">hasMoreElements</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
<a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">"Segunda vez: "</span> + keys.<span style="color: #006600;">nextElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #808080; font-style: italic;">//Para iterar de nuevo esta enumeration, tendríamos que</span><br />
keys = hash.<span style="color: #006600;">keys</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #b1b100;">while</span><span style="color: #66cc66;">&#40;</span> keys.<span style="color: #006600;">hasMoreElements</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#41;</span><br />
<a href="http://www.google.com/search?q=allinurl%3ASystem+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">System</span></a>.<span style="color: #006600;">out</span>.<span style="color: #006600;">println</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">"De nuevo: "</span> + keys.<span style="color: #006600;">nextElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
...<br />
&#160;</div></div>
<p>
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.
</p>
<p>
Si alguien tiene algún comentario al respecto, porfavor háganmelo saber!!!
</p>
<p>
Saludos
</p>
<p>
&#160;
</p>
<p>
&#160;
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/2.html" term="2" label="Cosas Geeks"/>
</entry>
<entry>
	<title  type="text" ><![CDATA[ Dangling Pointer -> Now Danger Pointer ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/Dangling-Pointer---Now-Danger-Pointer.html" title="Dangling Pointer -> Now Danger Pointer" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/Dangling-Pointer---Now-Danger-Pointer.html</id>
	<updated>2007-07-23T12:47:47-05:00</updated>
	<published>2007-07-23T11:03:49-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>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 <a href="http://en.wikipedia.org/wiki/Dangling_pointer" title="Dangling Pointer">dangling pointers</a> . 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 <a href="http://searchsecurity.techtarget.com/originalContent/0,289142,sid14_gci1265116,00.html" title="New Hacking Technique">aquí</a>.</p>
	<p>Saludos!!</p>
	<p><img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;</p>
	<p>&#160;
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>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 <a href="http://en.wikipedia.org/wiki/Dangling_pointer" title="Dangling Pointer">dangling pointers</a> . 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 <a href="http://searchsecurity.techtarget.com/originalContent/0,289142,sid14_gci1265116,00.html" title="New Hacking Technique">aquí</a>.</p>
	<p>Saludos!!</p>
	<p><img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;</p>
	<p>&#160;
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/2.html" term="2" label="Cosas Geeks"/>
</entry>
<entry>
	<title  type="text" ><![CDATA[ Failure ... O mala Suerte? ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/Failure--O-mala-Suerte.html" title="Failure ... O mala Suerte?" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/Failure--O-mala-Suerte.html</id>
	<updated>2007-06-27T16:30:47-05:00</updated>
	<published>2007-06-27T16:30:47-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>Tal vez te preguntarás señor lector, por qué demonios dice el autor que una falla o simplemente mala suerte. Pues simplmente tuve un mal momento este semestre que nunca en mi vida quisiera recordar ni repetir, sobre todo de aquellos temas que nunca piensas tratar en tu vida, aquellos temas que sabes que en un rato de reflexión deduces o comprendes aún mejor.</p>
	<p>Pues, realmente me bajó mucho el ánimo, lamentablemente la "Honorable Facultad de Ingeniería" dejó de ser una de mis idolatrías de mi vida, sobre todo por personas que laboran en ellas que no se preocupan por la verdadera academia.</p>
	<p>Sólo necesitaba sacar mis sentimientos, jejeje, y que mejor que en mi blog, por qué no.</p>
	<p>Saludos
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>Tal vez te preguntarás señor lector, por qué demonios dice el autor que una falla o simplemente mala suerte. Pues simplmente tuve un mal momento este semestre que nunca en mi vida quisiera recordar ni repetir, sobre todo de aquellos temas que nunca piensas tratar en tu vida, aquellos temas que sabes que en un rato de reflexión deduces o comprendes aún mejor.</p>
	<p>Pues, realmente me bajó mucho el ánimo, lamentablemente la "Honorable Facultad de Ingeniería" dejó de ser una de mis idolatrías de mi vida, sobre todo por personas que laboran en ellas que no se preocupan por la verdadera academia.</p>
	<p>Sólo necesitaba sacar mis sentimientos, jejeje, y que mejor que en mi blog, por qué no.</p>
	<p>Saludos
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/1.html" term="1" label="General"/>
</entry>
<entry>
	<title  type="text" ><![CDATA[ INT64_C OpenCV ( Compilation Errors) ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/INT64C-Macro--OpenCV-Lo-utiliza.html" title="INT64_C OpenCV ( Compilation Errors)" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/INT64C-Macro--OpenCV-Lo-utiliza.html</id>
	<updated>2007-06-16T12:24:54-05:00</updated>
	<published>2007-06-10T05:31:08-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>Últimamente me ha entrado la tentación de jugar un poco con temas
de Visión por Computadora utilizando una biblioteca llamada OpenCV
creada por Intel. Estoy trabajando en un sistema GNU/Linux Gentoo y el
cual no tiene un ebuild para esta biblioiteca, por lo que tuve que
bajar el código y compilarlo.Pues el proceso de Compilación es
muy simple, simplmente se corre el configure, make  y make install.
Lamentablemente cuando el make es llamado, el proceso de compilación se
rompe gracias a un error que a continuación despliego.</p>
	<p>&#160;</p>
	<div class="terminal">
	<p>...<br clear="all" /><br />
cvcap_ffmpeg.cpp:248: error: integer constant is too large for 'long' type<br />
cvcap_ffmpeg.cpp:252: error: integer constant is too large for 'long' type<br />
cvcap_ffmpeg.cpp:256: error: integer constant is too large for 'long' type<br />
cvcap_ffmpeg.cpp:256: error: integer constant is too large for 'long' type<br />
/usr/include/ffmpeg/avformat.h: In function 'void av_init_packet(AVPacket*)':<br />
/usr/include/ffmpeg/avformat.h:66: error: 'INT64_C' was not declared in this scope<br />
...</p>
	</div>
	<p>El error marcado es gracias a que el macro INT64_C no se
encuentra en el header avformat.h, por lo que debe de estar definido en
algún otro lado. Buscando en la red el error, encontré una solución
propuesta por una persona que también tenía problemas con ese macro
definido. La solución que él presenta simplemente es incluir un header
que define INT64_C, ese header se llama 'stdint.h'. Lo que simplemente
hice yo, fue incluirlo como él lo presenta</p>
	<div class="code"><div class="c">
	<p><span style="color: #808080; font-style: italic;">/** This Lines where added by Me **/</span><br />
<span style="color: #339933;">#define INT64_C</span><br />
<span style="color: #339933;">#define __STDC_CONSTANT_MACROS</span><br />
<span style="color: #339933;">#include &lt;stdint.h&gt; </span></div></div>
	<p>Simplemente, vuelve a compilar, i Boom!!! Listo, OpenCV listo para utilizarse. La liga de donde saqué la solución es la siguiente  <a href="http://sushee.schreibsturm.org/article/1596/errors-with-int64c-due-to-ffmpeg-use" target="_blank">http://sushee.schreibsturm.org/article/1596/errors-with-int64c-due-to-ffmpeg-use</a></p>
	<p>Saludos <img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;</p>
	<p>&#160;
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>Últimamente me ha entrado la tentación de jugar un poco con temas
de Visión por Computadora utilizando una biblioteca llamada OpenCV
creada por Intel. Estoy trabajando en un sistema GNU/Linux Gentoo y el
cual no tiene un ebuild para esta biblioiteca, por lo que tuve que
bajar el código y compilarlo.Pues el proceso de Compilación es
muy simple, simplmente se corre el configure, make  y make install.
Lamentablemente cuando el make es llamado, el proceso de compilación se
rompe gracias a un error que a continuación despliego.</p>
	<p>&#160;</p>
	<div class="terminal">
	<p>...<br clear="all" /><br />
cvcap_ffmpeg.cpp:248: error: integer constant is too large for 'long' type<br />
cvcap_ffmpeg.cpp:252: error: integer constant is too large for 'long' type<br />
cvcap_ffmpeg.cpp:256: error: integer constant is too large for 'long' type<br />
cvcap_ffmpeg.cpp:256: error: integer constant is too large for 'long' type<br />
/usr/include/ffmpeg/avformat.h: In function 'void av_init_packet(AVPacket*)':<br />
/usr/include/ffmpeg/avformat.h:66: error: 'INT64_C' was not declared in this scope<br />
...</p>
	</div>
	<p>El error marcado es gracias a que el macro INT64_C no se
encuentra en el header avformat.h, por lo que debe de estar definido en
algún otro lado. Buscando en la red el error, encontré una solución
propuesta por una persona que también tenía problemas con ese macro
definido. La solución que él presenta simplemente es incluir un header
que define INT64_C, ese header se llama 'stdint.h'. Lo que simplemente
hice yo, fue incluirlo como él lo presenta</p>
	<div class="code"><div class="c">
	<p><span style="color: #808080; font-style: italic;">/** This Lines where added by Me **/</span><br />
<span style="color: #339933;">#define INT64_C</span><br />
<span style="color: #339933;">#define __STDC_CONSTANT_MACROS</span><br />
<span style="color: #339933;">#include &lt;stdint.h&gt; </span></div></div>
	<p>Simplemente, vuelve a compilar, i Boom!!! Listo, OpenCV listo para utilizarse. La liga de donde saqué la solución es la siguiente  <a href="http://sushee.schreibsturm.org/article/1596/errors-with-int64c-due-to-ffmpeg-use" target="_blank">http://sushee.schreibsturm.org/article/1596/errors-with-int64c-due-to-ffmpeg-use</a></p>
	<p>Saludos <img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;</p>
	<p>&#160;
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/1.html" term="1" label="General"/>
</entry>
<entry>
	<title  type="text" ><![CDATA[ El futuro de C++ ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/El-futoro-de-C.html" title="El futuro de C++" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/El-futoro-de-C.html</id>
	<updated>2007-04-15T15:56:56-05:00</updated>
	<published>2007-04-15T15:55:01-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>&#160;</p>
	<p>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 <a href="http://www.boost.org/" title="Boost C++ libraries">Boost</a>.</p>
	<p>&#160;</p>
	<p>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.</p>
	<p>&#160;</p>
	<p>Vale la pena hecharles un ojo a detalle, talvez nos ayuden a desarrollar aplicaciones más fácilmente.</p>
	<p><img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;</p>
	<p>&#160;
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>&#160;</p>
	<p>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 <a href="http://www.boost.org/" title="Boost C++ libraries">Boost</a>.</p>
	<p>&#160;</p>
	<p>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.</p>
	<p>&#160;</p>
	<p>Vale la pena hecharles un ojo a detalle, talvez nos ayuden a desarrollar aplicaciones más fácilmente.</p>
	<p><img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;</p>
	<p>&#160;
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/2.html" term="2" label="Cosas Geeks"/>
</entry>
<entry>
	<title  type="text" ><![CDATA[ Memory Corruption y Memory Leaks ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/Memory-Corruption-y-Memory-Leaks.html" title="Memory Corruption y Memory Leaks" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/Memory-Corruption-y-Memory-Leaks.html</id>
	<updated>2007-04-12T22:17:56-05:00</updated>
	<published>2007-04-08T21:14:13-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>
&#160;
</p>
<p align="justify">
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 <img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-smile-big.png" border="0" alt="face-smile-big.png " width="16" height="16" />
</p>
<p>
&#160;
</p>
<p>
<strong>Memory Leaks</strong>
</p>
<p>
&#160;
</p>
<p align="justify">
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.
</p>
<div align="justify">
</div>
<p align="justify">
&#160;
</p>
<p align="justify">
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.
</p>
<p align="justify">
&#160;
</p>
<p align="justify">
En resumen, un error Memory Leak ocurre cuando se reserva memoria y no es correctamente liberada.
</p>
<p>
&#160;
</p>
<p>
<strong>Si usas malloc(),calloc() y realloc() debes usar free().</strong>
</p>
<p>
&#160;
</p>
<div class="code"><div class="c">
...<br />
<span style="color: #993333;">char</span> *str = malloc<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">80</span>*<span style="color: #993333;">sizeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span> str <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">/* Verificando que se pudo reservar memoria */</span><br />
...<br />
<span style="color: #202020;">free</span><span style="color: #66cc66;">&#40;</span>str<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span><br />
...<br />
&#160;</div></div>
<p>
&#160;
</p>
<p>
<em>No se puede liberar memoria que no se haya reservado.</em>
</p>
<p>
&#160;
</p>
<p>
<strong>Si usas new debes usar delete.</strong>
</p>
<p>
&#160;
</p>
<div class="code"><div class="c">
...<br />
<span style="color: #993333;">int</span> * arreglo = new <span style="color: #993333;">int</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#93;</span>;<br />
...<br />
<span style="color: #202020;">delete</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> arreglo;<br />
...<br />
&#160;</div></div>
<p>
&#160;
</p>
<p>
<em>En C++ se prefiere usar new y delete, ya que garantizan una mayor seguridad.</em>
</p>
<p>
&#160;
</p>
<p align="justify">
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í.
</p>
<p align="justify">
&#160;
</p>
<div class="code"><div class="c">
ClasePadre * obj = new ClaseDerivada; <span style="color: #808080; font-style: italic;">//Permitido gracias al Polimorfismo</span><br />
...<br />
<span style="color: #202020;">delete</span> obj;<br />
&#160;</div></div>
<p>
&#160;
</p>
<p>
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.
</p>
<p>
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.
</p>
<p align="justify">
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.
</p>
<p align="justify">
&#160;
</p>
<div class="code"><div class="c">
<span style="color: #993333;">char</span> * a = <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *<span style="color: #66cc66;">&#41;</span>malloc<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">80</span>*<span style="color: #993333;">sizeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">/* Reservando memoria */</span><br />
<span style="color: #993333;">char</span> * b = <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *<span style="color: #66cc66;">&#41;</span>malloc<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">80</span>*<span style="color: #993333;">sizeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
a = b; <span style="color: #808080; font-style: italic;">/* a apunta al mismo lugar que b*/</span><br />
<span style="color: #808080; font-style: italic;">/* La referencia que tenía a se perdió con la asignación anterior */</span><br />
free<span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">/* Liberamos la memoria que apunta a*/</span><br />
free<span style="color: #66cc66;">&#40;</span>b<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">/*Liberamos la memoria que apunta b, pero a apuntaba al mismo lugar*/</span><br />
&#160;</div></div>
<p>
&#160;
</p>
<p align="justify">
Existen <a href="http://linuxjournal.com/article/6556" title="Utilerias para Detección de Memory Leaks">utilerias</a> 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.
</p>
<p>
&#160;
</p>
<p>
<strong>Memory Corruption</strong>
</p>
<p>
&#160;
</p>
<p align="justify">
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.
</p>
<p align="justify">
&#160;
</p>
<p align="justify">
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.
</p>
<p align="justify">
&#160;
</p>
	<ul>
	<li>Buffer Overflow</li>
	<li>Usar una dirección de memoria aún no reservada</li>
	<li>Utilizar un apuntador ya liberado</li>
	<li>Liberar Memoria la cual ya ha sido liberada</li>
	<li>Liberar memoria, la cual no fue reservada dinámicamente</li>
	</ul>
	<div align="justify">
Para terminar, es importante tomar en cuenta estos puntos expuestos para lograr un mejor programa utilizando C/C++. A diferencia de otros lenguajes, como Java, el cual le ayuda mucho más al programador ya que no es necesario manejar memoria dinámica, aunque totalmente nos hace dependientes de los algoritmos utilizados para manejar la memoria, como el garbage collector.
</div>
<div align="justify">
 
</div>
<div align="justify">
Finalmente quiero recomendar este artículo que trata mucho más a detalle estos problemas mencionados. Muy buen artículo por cierto.
</div>
<div align="justify">
 
</div>
<div align="justify">
<a href="http://www.linuxdevcenter.com/pub/a/linux/2003/05/08/cpp_mm-1.html?page=1" title="http://www.linuxdevcenter.com/pub/a/linux/2003/05/08/cpp_mm-1.html?page=1">http://www.linuxdevcenter.com/pub/a/linux/2003/05/08/cpp_mm-1.html?page=1</a> 
</div>
<div align="justify">
 
</div>
<div align="justify">
</div>
<div align="justify">
</div>
<em>Mesografía:</em> 
<p>
&#160;
</p>
<p>
&#160;
</p>
<p>
<a href="http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMemoryLeaks.html" title="http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMemoryLeaks.html">http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMemoryLeaks.html</a>
</p>
<p>
<a href="http://en.wikipedia.org/wiki/Memory_leak" title="http://en.wikipedia.org/wiki/Memory_leak">http://en.wikipedia.org/wiki/Memory_leak</a>
</p>
<p>
<a href="http://linuxjournal.com/article/6556" title="http://linuxjournal.com/article/6556">http://linuxjournal.com/article/6556</a>
</p>
<p>
<a href="http://en.wikipedia.org/wiki/Memory_corruption" title="http://en.wikipedia.org/wiki/Memory_corruption">http://en.wikipedia.org/wiki/Memory_corruption</a>
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>
&#160;
</p>
<p align="justify">
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 <img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-smile-big.png" border="0" alt="face-smile-big.png " width="16" height="16" />
</p>
<p>
&#160;
</p>
<p>
<strong>Memory Leaks</strong>
</p>
<p>
&#160;
</p>
<p align="justify">
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.
</p>
<div align="justify">
</div>
<p align="justify">
&#160;
</p>
<p align="justify">
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.
</p>
<p align="justify">
&#160;
</p>
<p align="justify">
En resumen, un error Memory Leak ocurre cuando se reserva memoria y no es correctamente liberada.
</p>
<p>
&#160;
</p>
<p>
<strong>Si usas malloc(),calloc() y realloc() debes usar free().</strong>
</p>
<p>
&#160;
</p>
<div class="code"><div class="c">
...<br />
<span style="color: #993333;">char</span> *str = malloc<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">80</span>*<span style="color: #993333;">sizeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span> str <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">/* Verificando que se pudo reservar memoria */</span><br />
...<br />
<span style="color: #202020;">free</span><span style="color: #66cc66;">&#40;</span>str<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span><br />
...<br />
&#160;</div></div>
<p>
&#160;
</p>
<p>
<em>No se puede liberar memoria que no se haya reservado.</em>
</p>
<p>
&#160;
</p>
<p>
<strong>Si usas new debes usar delete.</strong>
</p>
<p>
&#160;
</p>
<div class="code"><div class="c">
...<br />
<span style="color: #993333;">int</span> * arreglo = new <span style="color: #993333;">int</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#93;</span>;<br />
...<br />
<span style="color: #202020;">delete</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span> arreglo;<br />
...<br />
&#160;</div></div>
<p>
&#160;
</p>
<p>
<em>En C++ se prefiere usar new y delete, ya que garantizan una mayor seguridad.</em>
</p>
<p>
&#160;
</p>
<p align="justify">
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í.
</p>
<p align="justify">
&#160;
</p>
<div class="code"><div class="c">
ClasePadre * obj = new ClaseDerivada; <span style="color: #808080; font-style: italic;">//Permitido gracias al Polimorfismo</span><br />
...<br />
<span style="color: #202020;">delete</span> obj;<br />
&#160;</div></div>
<p>
&#160;
</p>
<p>
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.
</p>
<p>
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.
</p>
<p align="justify">
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.
</p>
<p align="justify">
&#160;
</p>
<div class="code"><div class="c">
<span style="color: #993333;">char</span> * a = <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *<span style="color: #66cc66;">&#41;</span>malloc<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">80</span>*<span style="color: #993333;">sizeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">/* Reservando memoria */</span><br />
<span style="color: #993333;">char</span> * b = <span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span> *<span style="color: #66cc66;">&#41;</span>malloc<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">80</span>*<span style="color: #993333;">sizeof</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333;">char</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
a = b; <span style="color: #808080; font-style: italic;">/* a apunta al mismo lugar que b*/</span><br />
<span style="color: #808080; font-style: italic;">/* La referencia que tenía a se perdió con la asignación anterior */</span><br />
free<span style="color: #66cc66;">&#40;</span>a<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">/* Liberamos la memoria que apunta a*/</span><br />
free<span style="color: #66cc66;">&#40;</span>b<span style="color: #66cc66;">&#41;</span>; <span style="color: #808080; font-style: italic;">/*Liberamos la memoria que apunta b, pero a apuntaba al mismo lugar*/</span><br />
&#160;</div></div>
<p>
&#160;
</p>
<p align="justify">
Existen <a href="http://linuxjournal.com/article/6556" title="Utilerias para Detección de Memory Leaks">utilerias</a> 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.
</p>
<p>
&#160;
</p>
<p>
<strong>Memory Corruption</strong>
</p>
<p>
&#160;
</p>
<p align="justify">
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.
</p>
<p align="justify">
&#160;
</p>
<p align="justify">
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.
</p>
<p align="justify">
&#160;
</p>
	<ul>
	<li>Buffer Overflow</li>
	<li>Usar una dirección de memoria aún no reservada</li>
	<li>Utilizar un apuntador ya liberado</li>
	<li>Liberar Memoria la cual ya ha sido liberada</li>
	<li>Liberar memoria, la cual no fue reservada dinámicamente</li>
	</ul>
	<div align="justify">
Para terminar, es importante tomar en cuenta estos puntos expuestos para lograr un mejor programa utilizando C/C++. A diferencia de otros lenguajes, como Java, el cual le ayuda mucho más al programador ya que no es necesario manejar memoria dinámica, aunque totalmente nos hace dependientes de los algoritmos utilizados para manejar la memoria, como el garbage collector.
</div>
<div align="justify">
 
</div>
<div align="justify">
Finalmente quiero recomendar este artículo que trata mucho más a detalle estos problemas mencionados. Muy buen artículo por cierto.
</div>
<div align="justify">
 
</div>
<div align="justify">
<a href="http://www.linuxdevcenter.com/pub/a/linux/2003/05/08/cpp_mm-1.html?page=1" title="http://www.linuxdevcenter.com/pub/a/linux/2003/05/08/cpp_mm-1.html?page=1">http://www.linuxdevcenter.com/pub/a/linux/2003/05/08/cpp_mm-1.html?page=1</a> 
</div>
<div align="justify">
 
</div>
<div align="justify">
</div>
<div align="justify">
</div>
<em>Mesografía:</em> 
<p>
&#160;
</p>
<p>
&#160;
</p>
<p>
<a href="http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMemoryLeaks.html" title="http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMemoryLeaks.html">http://www.yolinux.com/TUTORIALS/C++MemoryCorruptionAndMemoryLeaks.html</a>
</p>
<p>
<a href="http://en.wikipedia.org/wiki/Memory_leak" title="http://en.wikipedia.org/wiki/Memory_leak">http://en.wikipedia.org/wiki/Memory_leak</a>
</p>
<p>
<a href="http://linuxjournal.com/article/6556" title="http://linuxjournal.com/article/6556">http://linuxjournal.com/article/6556</a>
</p>
<p>
<a href="http://en.wikipedia.org/wiki/Memory_corruption" title="http://en.wikipedia.org/wiki/Memory_corruption">http://en.wikipedia.org/wiki/Memory_corruption</a>
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/2.html" term="2" label="Cosas Geeks"/>
</entry>
<entry>
	<title  type="text" ><![CDATA[ Parche de Bézier ]]></title>
	<link rel="alternate"  type="text/html"  href="http://www.stonedgorilla.net/index.php/blog/show/Parche-de-Bzier.html" title="Parche de Bézier" />
	<author>
		<name>Victor Fragoso</name>
		<uri>http://www.stonedgorilla.net/admin.php</uri>
	</author>
	<id>http://www.stonedgorilla.net/index.php/blog/show/Parche-de-Bzier.html</id>
	<updated>2007-03-18T20:41:31-05:00</updated>
	<published>2007-03-17T17:15:41-05:00</published>
	<summary  type="html" ><![CDATA[ 	<p>&#160;</p>
	<p>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.</p>
	<p>&#160;</p>
	<p>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:</p>
	<p>&#160;
<div style="text-align: center">
<img alt="Bernstein " height="76" src="http://www.stonedgorilla.net/data/phoo/2007_03_17/Bernstein.jpg" title="Bernstein " width="191" /></div>
&#160;</p>
	<p>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.</p>
	<p>&#160;</p>
	<p>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í:</p>
	<p><img align="middle" alt="Bezier Curve Definition" height="146" src="http://www.stonedgorilla.net/data/phoo/2007_03_17/BezierCurve.jpg" title="Bezier Curve Definition" width="558" /></p>
	<p>Ahora, extrapolando esta definición para una superficie paramétrica, la definición queda de la siguiente manera:</p>
	<p><img align="middle" alt="Bezier Patch " height="110" src="http://www.stonedgorilla.net/data/phoo/2007_03_17/BezierPatch.jpg" title="Bezier Patch " width="741" /></p>
	<p>&#160;</p>
	<p>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</p>
	<p>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.</p>
	<p>&#160;</p>
	<p>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.</p>
	<p>Saludos <img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;</p>
	<p>&#160;</p>
	<p>&#160;
</p>
 ]]></summary>
	<content  type="html" ><![CDATA[ 	<p>&#160;</p>
	<p>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.</p>
	<p>&#160;</p>
	<p>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:</p>
	<p>&#160;
<div style="text-align: center">
<img alt="Bernstein " height="76" src="http://www.stonedgorilla.net/data/phoo/2007_03_17/Bernstein.jpg" title="Bernstein " width="191" /></div>
&#160;</p>
	<p>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.</p>
	<p>&#160;</p>
	<p>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í:</p>
	<p><img align="middle" alt="Bezier Curve Definition" height="146" src="http://www.stonedgorilla.net/data/phoo/2007_03_17/BezierCurve.jpg" title="Bezier Curve Definition" width="558" /></p>
	<p>Ahora, extrapolando esta definición para una superficie paramétrica, la definición queda de la siguiente manera:</p>
	<p><img align="middle" alt="Bezier Patch " height="110" src="http://www.stonedgorilla.net/data/phoo/2007_03_17/BezierPatch.jpg" title="Bezier Patch " width="741" /></p>
	<p>&#160;</p>
	<p>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</p>
	<p>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.</p>
	<p>&#160;</p>
	<p>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.</p>
	<p>Saludos <img src="http://www.stonedgorilla.net/plugins/Emoticons/images/face-glasses.png" border="0" alt="face-glasses.png " width="16" height="16" /></p>
	<p>&#160;</p>
	<p>&#160;</p>
	<p>&#160;
</p>
 ]]></content>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/1.html" term="1" label="General"/>
		<category scheme="http://www.stonedgorilla.net/index.php/blog/category/2.html" term="2" label="Cosas Geeks"/>
</entry>
</feed>