<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>ivanmosquera.net &#187; java</title>
	<atom:link href="http://ivanmosquera.net/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://ivanmosquera.net</link>
	<description>Just another computing weblog</description>
	<lastBuildDate>Mon, 09 Jan 2012 23:52:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ivanmosquera.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>ivanmosquera.net &#187; java</title>
		<link>http://ivanmosquera.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ivanmosquera.net/osd.xml" title="ivanmosquera.net" />
	<atom:link rel='hub' href='http://ivanmosquera.net/?pushpress=hub'/>
		<item>
		<title>Ikuspro es libre.</title>
		<link>http://ivanmosquera.net/2010/07/26/ikuspro-es-libre/</link>
		<comments>http://ivanmosquera.net/2010/07/26/ikuspro-es-libre/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 20:52:06 +0000</pubDate>
		<dc:creator>Ivan Mosquera Paulo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[antlr]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://ivanmosquera.net/?p=257</guid>
		<description><![CDATA[Ikuspro es el proyecto de fín de carrera que hice en su día en el que aprendí un montón de cosas sin las cuales no se me habría ocurrido empezar el proyecto PFA. En su día ya comenté un poco de qué iba el tema . Tras eso la cosa terminó en que el proyecto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivanmosquera.net&amp;blog=16516799&amp;post=257&amp;subd=ivanmosquera&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><!--:es--></p>
<p style="text-align:center;"><a href="http://ivanmosquera.files.wordpress.com/2010/07/logoikusprogrande.png"><img class="aligncenter size-full wp-image-259" title="logoIkusprogrande" src="http://ivanmosquera.files.wordpress.com/2010/07/logoikusprogrande.png?w=497" alt=""   /></a></p>
<p>Ikuspro es el proyecto de fín de carrera que hice en su día en el que aprendí un montón de cosas sin las cuales no se me habría ocurrido empezar el proyecto <a href="http://phpforandroid.net">PFA</a>.</p>
<p>En su día ya comenté un poco <a href="http://ivanmosquera.files.wordpress.com/2010/07/logoikusprogrande.pngindex.php/2009/10/02/ikuspro-en-beta/">de qué iba el tema</a> . Tras eso la cosa terminó en que el proyecto obtuvo matrícula de honor.</p>
<div>
<div id="__ss_4756310" style="width:425px;"></div>
</div>
<p><!--:--><span id="more-257"></span><!--:es--></p>
<p>A rasgos generales aprendí lo siguiente y por tanto ahora que está liberado puede que sirva a alguien para indagar en estos aspectos:</p>
<ul>
<li>Implementación de un framework MVC para Swing usando genericidad.</li>
<li>Diseño de interfaces gráficas Swing con soporte para persistencia.</li>
<li>Buenas prácticas Swing: integración con los OS más utilizados, no recarga del hilo de eventos usando workers etc&#8230;</li>
<li>Programación concurrente en Java, diseño productor-consumidor.</li>
<li>Separación de una aplicación en dos partes comunicadas mediante sincronización de hilos.</li>
<li>Implementación con <a href="http://antlr.org">ANTLR</a> de un intérprete de un subconjunto de ANSI-C que se comunica con el GUI mediante mensajes XML.</li>
<li>Comunicación entre procesos mediante un API XML.</li>
<li>Dibujado en Canvas con Java2D e integración del mismo con el GUI.</li>
</ul>
<p>Lo cierto es que fue bastante divertido. Me consta que en EUITI tienen pensado utilizarlo en laboratorios y la idea es que otros alumnos extiendan Ikuspro con nuevas funcionalidades e incluso con nuevos intérpretes.</p>
<p>Gracias a Mikel Villamañe por confiar en mí para implementar la idea.</p>
<p>A continuación el material que usé en la defensa, un pantallazo y el enlace al repositorio en mi github.</p>
<iframe src='http://www.slideshare.net/slideshow/embed_code/4756310' width='497' height='407'></iframe>
<div id="__ss_4756310" style="width:425px;">
<div style="padding:5px 0 12px;">Repositorio en GITHUB: ﻿﻿<a href="http://github.com/ivmos/Ikuspro">http://github.com/ivmos/Ikuspro</a></div>
</div>
<p><!--:--></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivanmosquera.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivanmosquera.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivanmosquera.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivanmosquera.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivanmosquera.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivanmosquera.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivanmosquera.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivanmosquera.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivanmosquera.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivanmosquera.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivanmosquera.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivanmosquera.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivanmosquera.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivanmosquera.wordpress.com/257/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivanmosquera.net&amp;blog=16516799&amp;post=257&amp;subd=ivanmosquera&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivanmosquera.net/2010/07/26/ikuspro-es-libre/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9577514d092a25034026cd68dd729ae4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ivmos</media:title>
		</media:content>

		<media:content url="http://ivanmosquera.files.wordpress.com/2010/07/logoikusprogrande.png" medium="image">
			<media:title type="html">logoIkusprogrande</media:title>
		</media:content>
	</item>
		<item>
		<title>[Destripando PHP] Las variables</title>
		<link>http://ivanmosquera.net/2010/04/15/destripando-php-las-variables/</link>
		<comments>http://ivanmosquera.net/2010/04/15/destripando-php-las-variables/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 01:04:28 +0000</pubDate>
		<dc:creator>Ivan Mosquera Paulo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[quercus]]></category>

		<guid isPermaLink="false">http://ivanmosquera.net/?p=182</guid>
		<description><![CDATA[Con esta entrada comienzo una serie en la que hablaré del lenguaje PHP atendiendo a cómo está implementado internamente, para cada post desarrollaré un pequeño PECL (extensión de PHP) que trabaje los conceptos. En realidad no haría falta recurrir a ese nivel para ver las estructuras internas ya que PHP5 tiene un API de Reflection, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivanmosquera.net&amp;blog=16516799&amp;post=182&amp;subd=ivanmosquera&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><!--:es-->Con esta entrada comienzo una serie en la que hablaré del lenguaje PHP atendiendo a cómo está implementado internamente, para cada post desarrollaré un pequeño PECL (extensión de PHP) que trabaje los conceptos. En realidad no haría falta recurrir a ese nivel para ver las estructuras internas ya que PHP5 tiene un <a href="http://es.php.net/manual/en/class.reflection.php">API de Reflection</a>, pero sí que es necesario para ver realmente cómo funcionan las cosas.<br />
La motivación de esta serie es ir documentando lo que voy aprendiendo en mi estudio de PHP. En el desarrollo de mi PFC me enganché al tema de los intérpretes y ahora trato de continuar tomando PHP como ejemplo, al mismo tiempo me ayuda a tener una base sólida de cara al <a href="http://www.zend.com/services/certification/php-5-certification/">ZCE</a>.</p>
<p>En este primer post veremos en profundidad cómo se trabajan las variables  en PHP y su idiosincrasia.<br />
<!--:--><span id="more-182"></span><!--:es--><br />
El PECL que he desarrollado para el mismo se llama &#8220;ejemplovars&#8221; y aporta las siguientes funciones:</p>
<ul>
<li>ejemplovars_print_type($variable)</li>
<li>ejemplovars_print_refcount($variable)</li>
<li>ejemplovars_dump_globalsymtable</li>
<li>ejemplovars_dump_currentsymtable</li>
</ul>
<p>Algunas cosas que veremos ya se trataron en <a href="http://ivanmosquera.net/index.php/2010/02/13/las-referencias-en-php-que-son-y-porque-no-usarlas/">otro post</a> pero he preferido retomar el tema desde el principio.<br />
.</p>
<h3>El zval</h3>
<p>PHP es un lenguaje de tipado débil, esto implica que se realizan un montón de conversiones implícitas entre los tipos de valores hasta el punto que desde el punto de vista del programador PHP puede dar la impresión de que en lugar de haber tipos las cosas funcionan mágicamente.</p>
<p>Los datos en php se almacenan en una estructura de datos llamada &#8220;zval&#8221; (Zend Value). Podemos encontrar esta estructura en &#8220;Zend/Zend.h&#8221;.</p>
<pre>
struct _zval_struct {
        /* Variable information */
        zvalue_value value;
        zend_uint refcount;
        zend_uchar type;
        zend_uchar is_ref;
};</pre>
<p>Podemos ver que un zval está compuesto por 4 miembros: value, refcount, type y is_ref. refcount es un unsigned integer mientras que type y is_ref son unsigned char.<br />
El miembro &#8220;value&#8221; sin embargo es una estructura union. La diferencia entre un struct y una union es que sólo ocupa lo que necesite el miembro más grande de la union, en lugar de reservarse memoria dedicada a cada uno de los miembros.<br />
Tiene perfecto sentido por tanto que esta estructura de datos sea una union ya que un &#8220;value&#8221; sólo puede ser de un tipo cada vez, usar un struct sería un gran desaprovechamiento.</p>
<h3>Los tipos</h3>
<p>Según la guía de Zend los tipos de datos en PHP son:</p>
<ul>
<li>boolean</li>
<li>int</li>
<li>float</li>
<li>string</li>
<li>array</li>
<li>object</li>
<li>NULL</li>
<li>resource</li>
</ul>
<p>Sin embargo, internamente los tipos son los siguientes (constantes numéricas):</p>
<ul>
<li>IS_NULL: se asigna automáticamente a las variables no inicializadas. La asignación se realiza en php con la palabra reservada NULL. Hay que tener en cuenta que NULL no es lo mismo que FALSE ni que cero, desde php lo parece debido a los casting implícitos que realiza.
</li>
<li>IS_BOOL: sólo puede tomar los valores TRUE y FALSE. Cuando se evalúan expresiones como WHILE o IF, lo que se hace es un casting implícito a ese tipo. Es decir, como en NULL, no se trata de que 0 sea lo mismo que FALSE sino que ese es un casting que se realiza automáticamente.
</li>
<li>IS_LONG: los int en php son internamente &#8220;signed long&#8221;, dependiente de la plataforma (en 32bit el rango es menor que en 64bit). Si en un script php una variable int se sale del rango, se convierte automáticamente al tipo que veremos a continuación.
</li>
<li>IS_DOUBLE: para números de coma flotante se utiliza el tipo &#8220;signed double&#8221; del sistema. Esto supone que la precisión no es exacta. Se entiende con este ejemplo :
<pre></pre>
<p>Cuando la precisión es una factor crítico se recomienda el uso de BCMath.</p>
</li>
<li>IS_STRING: cadena de caracteres, se reserva un bloque de memoria para acomodar el string en cuestión, guardando en el zval un puntero al mismo. La longitud del string se guarda también en el zval. Esto permite que el string contenga datos binarios ya que un &#8220;&#8221; no lo va a truncar dado que se maneja la longitud independientemente. Debido a esta práctica se dice que los string de php son &#8220;binary safe&#8221;. El bloque de memoria reservado es siempre la longitud del string + 1 ya que se añade &#8220;&#8221; al final para que el string se pueda trabajar desde cualquier función sin tener que depender de la longitud guardada en el zval.
</li>
<li>IS_ARRAY: un array en php en realidad no cumple con la definición clásica de array, sino que se trata de un mapa ordenado o tabla. Esto hace que muchos programadores que sólo conocen PHP se lleven una gran sorpresa al enfrentarse a otros lenguajes y ver que los arrays son mucho más limitados que en php. Quizá habría sido más afortunado llamar a este tipo collection o map directamente, pero a efectos prácticos es irrelevante. Aclarado esto, un array de php está implementado con una tabla Hash donde la clave (o label) puede ser un índice numérico o un string asociativo y está relacionada con un valor (o data).
<p>Internamente también se sigue esa generalización y se usa el tipo HashTable en lugar de usar arrays o listas enlazadas. Supongo que habrán considerado que la flexibilidad y facilidad de uso que supone compensa con creces  el impacto que pueda tener en cuanto a eficiencia. El tipo HashTable se encuentra definido en :</p>
<pre>
typedef struct _hashtable {
        uint nTableSize;
        uint nTableMask;
        uint nNumOfElements;
        ulong nNextFreeElement;
        Bucket *pInternalPointer;       /* Used for element traversal */
        Bucket *pListHead;
        Bucket *pListTail;
        Bucket **arBuckets;
        dtor_func_t pDestructor;
        zend_bool persistent;
        unsigned char nApplyCount;
        zend_bool bApplyProtection;
#if ZEND_DEBUG
        int inconsistent;
#endif
} HashTable;</pre>
</li>
<li>IS_OBJECT: Un objeto de php viene a  ser un array (de php) al que se le añaden métodos, modificadores de acceso y constantes. El modelo de objetos cambió radicalmente de PHP4 a PHP5.</li>
<li>IS_RESOURCE: se trata de un tipo especial utilizado para casos como un puntero FILE o una conexión a base de datos.</li>
</ul>
<h3>Probando con nuestro PECL</h3>
<p>Un ejemplo con nuestro PECL:</p>
<pre>
attr = 25;
ejemplovars_print_type($a);
$a = 4;
ejemplovars_print_type($a);
$a = $a * 1000000000;
ejemplovars_print_type($a);</pre>
<p>El resultado en una máquina de 32bits será:</p>
<pre>
Tipo: IS_BOOL
Tipo : IS_OBJECT
Tipo: IS_LONG
Tipo : IS_DOUBLE</pre>
<pre>
&lt;?php
$a = 5;
$b = &amp;$a;
$c = &amp;$a;
ejemplovars_print_refcount($a);
ejemplovars_print_type($a);</pre>
<p>El resultado será:</p>
<pre>
Referenciado 4 veces.
Tipo: IS_LONG</pre>
<p>El código de las dos funciones de ejemplovars es el siguiente, he evitado utilizar macros para trabajar con el zval para que quede claro el acceso a la estructura. Está probado en PHP 5.2, para 5.3 es probable que sea necesario algún cambio ya que para el nuevo recolector de basura  han tocado el struct zval. La función ejemplovars_print_type usa paso por valor mientras que ejemplovars_print_refcount usa paso por referencia implícito.</p>
<pre>
PHP_FUNCTION(ejemplovars_print_refcount)
{
    zval *arg;
    if (zend_get_parameters(ZEND_NUM_ARGS(), 1, &amp;arg) == FAILURE) {
        RETURN_NULL();
    }
    if (!arg-&gt;is_ref) {
        return;
    }

    php_printf("Referenciado %d veces.\n", arg-&gt;refcount);
}</pre>
<pre>
PHP_FUNCTION(ejemplovars_print_type)
{
   zval *arg;
   if (zend_get_parameters(ZEND_NUM_ARGS(), 1, &amp;arg) == FAILURE) {
      php_error_docref(NULL TSRMLS_CC, E_WARNING, "Falta el parámetro.");
      RETURN_NULL();
   }
   switch (arg-&gt;type) {
      case IS_NULL:
         php_printf("Tipo: IS_NULL\n");
         break;
      case IS_BOOL:
         php_printf("Tipo: IS_BOOL\n");
         break;
      case IS_LONG:
         php_printf("Tipo: IS_LONG\n");
         break;
      case IS_DOUBLE:
         php_printf("Tipo : IS_DOUBLE\n");
         break;
      case IS_STRING:
         php_printf("Tipo : IS_STRING\n");
         break;
      case IS_ARRAY:
         php_printf("Tipo : IS_ARRAY\n");
         break;
      case IS_OBJECT:
         php_printf("Tipo : IS_OBJECT\n");
         break;
      case IS_RESOURCE:
         php_printf("Tipo: IS_RESOURCE\n");
         break;
      default:
         php_printf("Otro tipo\n");
   }

}</pre>
<p></p>
<h3>Las tablas de símbolos</h3>
<p>Una tabla de símbolos es un HashTable con punteros a zvals. Hay una tabla de símbolos global que se crea al comienzo, y que podemos ver desde nuestros scripts php : $GLOBALS.</p>
<pre>
&lt;?php
$a = &quot;lala&quot;;

function prueba() {
   $b = &quot;jaja&quot;;
   print_r($GLOBALS);
}

prueba();</pre>
<p>
Veremos que la variable $b no figura en esa tabla de símbolos. Esto es así ya que al entrar en nuevos ámbitos locales, ya sea por entrar en una función o en el método de una clase, se crea una nueva tabla de símbolos y se establece esta como la tabla de símbolos activa. Es decir, en cada momento sólo tendremos acceso a dos tablas de símbolos: la global y la del ámbito concreto en que estemos. Al terminar la vida de una función su tabla de símbolos se destruye. Podemos caer en el error de pensar que entonces sólo va a haber dos tablas de símbolo en memoria como mucho, pero repito: se crea una por cada nuevo ámbito. Si desde una función o método llamas a otro, ya tienes otra tabla de símbolos iniciada sólo que la de la función invocadora no está activa. Con este diseño es fácil entender cómo funciona el concepto de visibilidad de variables locales.</p>
<p>La tabla de símbolos global así como el puntero a las demás se guarda en la estructura _zend_executor_globals. A continuación un fragmento, si quieres verla entera la encontrarás en zend_globals.h.</p>
<pre>
        /* symbol table cache */
        HashTable *symtable_cache[SYMTABLE_CACHE_SIZE];
        HashTable **symtable_cache_limit;
        HashTable **symtable_cache_ptr;

        zend_op **opline_ptr;

        HashTable *active_symbol_table;
        HashTable symbol_table;         /* main symbol table */

        HashTable included_files;       /* files already included */

        jmp_buf *bailout;

        int error_reporting;
        int orig_error_reporting;
        int exit_status;

        zend_op_array *active_op_array;

        HashTable *function_table;      /* function symbol table */
        HashTable *class_table;         /* class table */
        HashTable *zend_constants;      /* constants table */</pre>
<p>
Podemos acceder fácilmente a la estructura zend_globals con la macro EG. ejemplovars tiene dos funciones que acceden a la tabla de símbolos global y la activa respectivamente:</p>
<pre>
PHP_FUNCTION(ejemplovars_dump_globalsymtable)
{
      php_printf("Tabla de simbolos global : \n\n");
      php_ejemplovars_print_var_hash(&amp;(EG(symbol_table)));
}

PHP_FUNCTION(ejemplovars_dump_currentsymtable)
{
      php_printf("Tabla de simbolos actualmente activa : \n\n");
      php_ejemplovars_print_var_hash(EG(active_symbol_table));
}</pre>
<p>
La tabla de símbolos global se pasa por referencia ya que zend_executor_globals la incluye directamente en lugar de simplemente un puntero a la misma.</p>
<pre>
Tabla de simbolos global :

The value of GLOBALS is: Array
The value of _ENV is: Array
The value of HTTP_ENV_VARS is: Array
The value of argv is: Array
The value of argc is: 1
The value of _POST is: Array
The value of HTTP_POST_VARS is: Array
The value of _GET is: Array
The value of HTTP_GET_VARS is: Array
The value of _COOKIE is: Array
The value of HTTP_COOKIE_VARS is: Array
The value of _SERVER is: Array
The value of HTTP_SERVER_VARS is: Array
The value of _FILES is: Array
The value of HTTP_POST_FILES is: Array
The value of _REQUEST is: Array
The value of a is: lala

Tabla de simbolos actualmente activa :

The value of b is: jaja</pre>
<p>
Próximamente subiré &#8220;ejemplovars&#8221; a github o similar.</p>
<p>Si te interesa el tema de PECL recomiendo el libro &#8220;Extending and Embedding PHP&#8221; de Sara Golemon.<!--:--></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivanmosquera.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivanmosquera.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivanmosquera.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivanmosquera.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivanmosquera.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivanmosquera.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivanmosquera.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivanmosquera.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivanmosquera.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivanmosquera.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivanmosquera.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivanmosquera.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivanmosquera.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivanmosquera.wordpress.com/182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivanmosquera.net&amp;blog=16516799&amp;post=182&amp;subd=ivanmosquera&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivanmosquera.net/2010/04/15/destripando-php-las-variables/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9577514d092a25034026cd68dd729ae4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ivmos</media:title>
		</media:content>
	</item>
		<item>
		<title>Ikuspro en beta</title>
		<link>http://ivanmosquera.net/2009/10/02/ikuspro-en-beta/</link>
		<comments>http://ivanmosquera.net/2009/10/02/ikuspro-en-beta/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 17:57:07 +0000</pubDate>
		<dc:creator>Ivan Mosquera Paulo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[antlr]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://ivanmosquera.net/?p=7</guid>
		<description><![CDATA[Ikuspro es el nombre del software que he desarrollado para mi PFC. Se trata de un simulador gráfico de programas. La idea del proyecto es de mi director de PFC que es profesor del departamento de LSI de EUITI-BI e imparte clases de “Fundamentos de Informática” por lo que pensó que una herramienta de este [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivanmosquera.net&amp;blog=16516799&amp;post=7&amp;subd=ivanmosquera&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><!--:es-->Ikuspro es el nombre del software que he desarrollado para mi PFC.  Se trata de un simulador gráfico de programas.<br />
La idea del proyecto es de mi director de PFC que es profesor del departamento de LSI de EUITI-BI e imparte clases de “Fundamentos de Informática” por lo que pensó que una herramienta de este tipo podría ser útil para quien se enfrenta por primera vez a la metodología de programación.<br />
Con Ikuspro la ejecución de los programas se hace visual y gracias a ello se alivia un poco la sensación de abstracción que suele inspirar la programación. Es algo parecido a lo que ocurre con <a class="externlink" title="Go to http://es.wikipedia.org/wiki/Logo_%28inform%C3%A1tica%29" href="http://es.wikipedia.org/wiki/Logo_%28inform%C3%A1tica%29">Logo</a>, aquella tortuga que hacíamos mover por toda la pantalla sin darnos cuenta de que estábamos programando por primera vez.</p>
<p>De todos modos lo mejor es que ponga un ejemplo. Este código por ejemplo:</p>
<p><img class="aligncenter size-full wp-image-7" title="editor" src="http://ivanmosquera.net/wp-content/uploads/2009/10/editor.jpg" alt="editor" width="509" height="400" /></p>
<p>Como puedes ver este código es C.</p>
<p>Ikuspro en la versión actual incluye un intérprete de C que he desarrollado con el objetivo de que puedan funcionar los ejercicios utilizados en la asignatura de “Fundamentos de Informática”. Este ejemplo es muy sencillo para no recargar esta entrada pero el intérprete de C de Ikuspro es bastante más avanzado soportando funciones, arrays, condicionales, bucles e incluso punteros parcialmente.</p>
<p>Hablo del intérprete como algo independiente de Ikuspro ya que una parte interesante del proyecto es que Ikuspro está pensado en realidad como un simulador gráfico que se puede extender en el futuro con nuevos intérpretes para otros lenguajes sin mayor dificultad. Siendo un poco más técnicos, lo que hace Ikuspro es ejecutar el intérprete adecuado para el tipo de programa en un hilo independiente comunicándose ambos como productor-consumidor vía mensajes XML.</p>
<p>A continuación la simulación gráfica que genera Ikuspro al término de este programa y digo al término ya que con Ikuspro se va viendo la ejecución del programa línea a línea, en realidad como si de un debugger se tratara sólo que mucho más fácil y sobre todo didáctico para el usuario objetivo.</p>
<p><img class="aligncenter size-full wp-image-9" title="simulacion" src="http://ivanmosquera.net/wp-content/uploads/2009/10/simulacion.jpg" alt="simulacion" width="366" height="550" /></p>
<p>Además, Ikuspro también genera comentarios didácticos acerca de lo que va sucediéndo línea a línea y muestra la salida estándar del intérprete, que es fiel a lo esperable.<br />
A continuación un pantallazo de Ikuspro donde puedes ver las diferentes partes y hacerte una idea del funcionamiento del mismo:</p>
<p><img class="alignnone size-full wp-image-6" title="ikuspro" src="http://ivanmosquera.net/wp-content/uploads/2009/10/ikuspro.png" alt="ikuspro" width="526" height="427" /></p>
<p style="text-align:center;"><a href="http://ivanmosquera.net/wp-content/uploads/2009/10/ikuspro.png">Enlace a imágen ampliada</a></p>
<p>Ikuspro está desarrollado enteramente en Java. El intérprete C que incorpora se ha desarrollado con <a class="externlink" title="Go to http://antlr.org" href="http://antlr.org/">ANTLR</a>.</p>
<p>Por último, el título de esta entrada es “Ikuspro en beta” porque esta semana he terminado de realizar mis pruebas así que está listo para realizar pruebas con usuarios. Ikuspro actualmente está numerado como 0.9 en lugar de 1.0 para dar cabida a alguna idea interesante y factible que pueda surgir en las pruebas con usuarios.</p>
<p>Si has llegado a leer hasta aquí y te gustaría probar Ikuspro:</p>
<p><a class="externlink" title="Go to http://ktulur.net/pro/ikuspro" href="http://ktulur.net/pro/ikuspro/index.html">Página web provisional del proyecto Ikuspro</a><!--:--></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ivanmosquera.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ivanmosquera.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ivanmosquera.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ivanmosquera.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ivanmosquera.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ivanmosquera.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ivanmosquera.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ivanmosquera.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ivanmosquera.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ivanmosquera.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ivanmosquera.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ivanmosquera.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ivanmosquera.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ivanmosquera.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ivanmosquera.net&amp;blog=16516799&amp;post=7&amp;subd=ivanmosquera&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ivanmosquera.net/2009/10/02/ikuspro-en-beta/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/9577514d092a25034026cd68dd729ae4?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ivmos</media:title>
		</media:content>

		<media:content url="http://ivanmosquera.net/wp-content/uploads/2009/10/editor.jpg" medium="image">
			<media:title type="html">editor</media:title>
		</media:content>

		<media:content url="http://ivanmosquera.net/wp-content/uploads/2009/10/simulacion.jpg" medium="image">
			<media:title type="html">simulacion</media:title>
		</media:content>

		<media:content url="http://ivanmosquera.net/wp-content/uploads/2009/10/ikuspro.png" medium="image">
			<media:title type="html">ikuspro</media:title>
		</media:content>
	</item>
	</channel>
</rss>
