<?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/"
	>

<channel>
	<title>Bosque Viejo &#187; java</title>
	<atom:link href="http://bosqueviejo.net/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://bosqueviejo.net</link>
	<description>Sitio web sobre programación, software libre, redes, servidores, ofimática... y todo lo relacionado con la informática que nos rodea</description>
	<lastBuildDate>Wed, 08 Feb 2012 10:14:54 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>haXe: metalenguaje para todos</title>
		<link>http://bosqueviejo.net/2011/11/15/haxe-metalenguaje-para-todos/</link>
		<comments>http://bosqueviejo.net/2011/11/15/haxe-metalenguaje-para-todos/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 10:44:55 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[haxe]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[metalenguaje]]></category>
		<category><![CDATA[neko]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=1049</guid>
		<description><![CDATA[ Hace tiempo que vi este lenguaje de pasada y no le presté mucha atención, pero hoy, revisando algunas cosas, he vuelto a él y he visto algo que, antes quizás me habría parecido ridículo, pero ahora, después de ciertos acontecimientos, comienzo a verle mucho sentido.
El lenguaje haXe, se presenta como un meta-lenguaje, un lenguaje que se compila resultando en otro diferente, como pueda ser JavaScript, PHP, Java o Neko, por lo que puede emplear cualquier entorno de ejecución conocido por el programador. Dicho de otra forma, este es un lenguaje para dominarlos a todos&#8230;
El lenguaje
Echándole un vistazo a la sintaxis del lenguaje, podríamos decir que el lenguaje es muy parecido a JavaScript, pero con definición de tipos. La declaración es parecida a Pascal o Modula-2, usando dos puntos, pero sin embargo, la forma de los arrays es más como las plantillas de Java.
Las estructuras condicionales son las que están disponibles en lenguajes como PHP, C, Java y demás, con algunos matices, por ejemplo, con el uso de iteradores, con lo que el for es más parecido a Python o Java, por ejemplo. Tiene una forma tal que así:

import php.Lib;
&#160;
class Index &#123;
    static function main&#40;&#41; &#123;
  [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/haXe.jpg" alt="" title="haXe" width="150" height="150" class="alignleft size-full wp-image-1050" /> Hace tiempo que vi este lenguaje de pasada y no le presté mucha atención, pero hoy, revisando algunas cosas, he vuelto a él y he visto algo que, antes quizás me habría parecido ridículo, pero ahora, después de ciertos acontecimientos, comienzo a verle mucho sentido.</p>
<p>El <a href="http://haxe.org">lenguaje haXe</a>, se presenta como un meta-lenguaje, un lenguaje que se compila resultando en otro diferente, como pueda ser JavaScript, PHP, Java o Neko, por lo que puede emplear cualquier entorno de ejecución conocido por el programador. Dicho de otra forma, este es <em>un lenguaje para dominarlos a todos</em>&#8230;</p>
<h3>El lenguaje</h3>
<p>Echándole un vistazo a <a href="http://haxe.org/ref/syntax">la sintaxis del lenguaje</a>, podríamos decir que el lenguaje es muy parecido a JavaScript, pero con definición de tipos. La declaración es parecida a Pascal o Modula-2, usando dos puntos, pero sin embargo, la forma de los arrays es más como las plantillas de Java.</p>
<p>Las estructuras condicionales son las que están disponibles en lenguajes como PHP, C, Java y demás, con algunos matices, por ejemplo, con el uso de iteradores, con lo que el <em>for</em> es más parecido a Python o Java, por ejemplo. Tiene una forma tal que así:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">import</span> php.<span style="color: #660066;">Lib</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">class</span> Index <span style="color: #009900;">&#123;</span>
    static <span style="color: #003366; font-weight: bold;">function</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> p <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Point<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #339933;">,</span><span style="color: #CC0000;">65</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        trace<span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">class</span> Point <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> x <span style="color: #339933;">:</span> Int<span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> y <span style="color: #339933;">:</span> Int<span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #003366; font-weight: bold;">new</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span>y<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">x</span> <span style="color: #339933;">=</span> x<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">y</span> <span style="color: #339933;">=</span> y<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">function</span> toString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">&quot;Point(&quot;</span><span style="color: #339933;">+</span>x<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;,&quot;</span><span style="color: #339933;">+</span>y<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;)&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Este código (tomado de su <a href="http://haxe.org/manual/2_types">web, sección de tipos</a>) se encarga de definir una clase Point, con un constructor que inicializa los atributos internos (x e y) y una función especial para representar el dato en modo texto (como en Java).</p>
<p>Lo suyo sería que se particionase como clases independientes, e incluso se creasen paquetes, una vez se programe en serio con el lenguaje.</p>
<h3>La compilación</h3>
<p>En Debian, el compilador viene en el repositorio. Llama la atención el hecho de que se instala de la mano de <a href="">Neko</a> (que es otro lenguaje similar, que se puede compilar en otros, pero que además tiene una VM propio e integración con Apache).</p>
<p>Generar el código visto anteriormente en PHP, es tan simple como ejecutar esto:</p>
<pre>
haxe -main Index -php www
</pre>
<p>Nos creará un directorio <em>www</em> en la ruta en la que estemos que tendrá un directorio <em>lib</em> y un <em>index.php</em> en la base con los comandos básicos para ejecutar el código programado. Lo podemos ejecutar desde consola (si tenemos el php-cli), así:</p>
<pre>
$ php www/index.php
Index.hx:6: Point(-1,65)
</pre>
<h3>Conclusiones</h3>
<p>Últimamente se van escuchando cada vez más lenguajes nuevos que salen, buenos lenguajes con muchas nuevas características que facilitan mucho la vida a los programadores, pero que, por el simple hecho de ser más completos, tienen una curva de aprendizaje más alta.</p>
<p>Lo que propone HaXe, en sí, es un solo lenguaje, un lenguaje muy completo, con todas las características de alto nivel que tienen todos los lenguajes, fácil y muy parecido a los lenguajes más usados de hoy en día, por lo que su entrada a él sea rápida, pero además, muy versátil, como los lenguajes <em>scriptting</em>, y ajustable a las necesidades de producción, gracias a que se puede compilar en C++, Java, C#, PHP, JavaScript, Flash y Neko.</p>
<p>En mi opinión, es una muy buena propuesta, ya que se podría emplear para generar el código necesario para realizar la web a nivel de servidor, cliente, e incluso algunos códigos a nivel de aplicación de escritorio, todo en un solo lenguaje.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2011/11/15/haxe-metalenguaje-para-todos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java 7, ¿qué nos trae?</title>
		<link>http://bosqueviejo.net/2011/10/03/lo-que-nos-trae-java-7/</link>
		<comments>http://bosqueviejo.net/2011/10/03/lo-que-nos-trae-java-7/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 12:27:40 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdk]]></category>
		<category><![CDATA[jvm]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=900</guid>
		<description><![CDATA[ Vale, lo sé, algo tarde porque salió en julio de este año&#8230; pero más vale tarde que nunca, ¿no?
El hecho, es que se ha lanzado una nueva versión de este tan afamado lenguaje. Oracle ha preparado su SDK y, según Mark Reinhold (Arquitecto Jefe de Java en Oracle), se han corregido 9494 errores, se han incluido 1966 mejoras, 9018 cambios, 4 JSRs y 147 builds hasta llegar a esta versión, que ha tardado unos 4 años en ver la luz.
Las mejoras que implementa Java 7 son las siguientes.
Máquina Virtual
Se agrega el requisito señalado en el JSR 292, que da mejor soporte a nivel de JVM para la implementación mejorada de lenguajes scripting sobre la JVM.
Un mejor recolector de basura (Garbage Collector), G1. El recolector de basura es ese sistema que se encarga de liberar la memoria de los objetos que ya no se están usando. El hecho, es que para llevar a cabo esta tarea, la JVM dejaba pausada toda su actividad para poder realizar la tarea sin problemas de concurrencia.
Con la puesta en producción de G1, los tiempos de pausa son más cortos. Se basa en la teoría de que, ordenar el espacio en memoria mientras los niños [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/java-150x150.png" alt="" title="java" width="150" height="150" class="alignleft size-thumbnail wp-image-903" /> Vale, lo sé, algo tarde porque salió en julio de este año&#8230; pero más vale tarde que nunca, ¿no?</p>
<p>El hecho, es que se ha lanzado una nueva versión de este tan afamado lenguaje. Oracle ha preparado su SDK y, según <a href="http://mreinhold.org/blog/jdk7-ga">Mark Reinhold</a> (Arquitecto Jefe de Java en Oracle), se han corregido 9494 errores, se han incluido 1966 mejoras, 9018 cambios, 4 JSRs y 147 builds hasta llegar a esta versión, que ha tardado unos 4 años en ver la luz.</p>
<p>Las mejoras que implementa Java 7 son las siguientes.</p>
<h3>Máquina Virtual</h3>
<p>Se agrega el requisito señalado en el <a href="http://jcp.org/en/jsr/detail?id=292">JSR 292</a>, que da mejor soporte a nivel de JVM para la <strong>implementación mejorada de lenguajes scripting sobre la JVM</strong>.</p>
<p>Un mejor recolector de basura (Garbage Collector), G1. El recolector de basura es ese sistema que se encarga de liberar la memoria de los objetos que ya no se están usando. El hecho, es que para llevar a cabo esta tarea, la JVM dejaba pausada toda su actividad para poder realizar la tarea sin problemas de concurrencia.</p>
<p>Con la puesta en producción de G1, los tiempos de pausa son más cortos. Se basa en la teoría de que, ordenar el espacio en memoria <em>mientras los niños juegan</em>, como un reemplazo a la marca de recolección de basura paralela y concurrente. Se divide la sala de estar en cuadrados, y se van turnando para cada juego, muchos de los cuadros contienen juguetes que ya no se usan y pueden ser quitados sin peligro. El nuevo colector, por tanto, puede trabajar de forma más predictiva.</p>
<p>Otra de las mejoras, es que se <strong>comprimen los punteros a memoria de 64 bits</strong> en 32 bits con lo que se gana mayor rendimiento.</p>
<h3>Lenguaje</h3>
<p>Se agregan características del lenguaje como el uso de <strong>String en switch</strong>, con lo que ya sería posible hacer códigos como este:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> hola <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Hola&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>hola<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">&quot;hola&quot;</span><span style="color: #339933;">:</span> <span style="color: #666666; font-style: italic;">// no coincide</span>
        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #0000ff;">&quot;Hola&quot;</span><span style="color: #339933;">:</span> <span style="color: #666666; font-style: italic;">// si coincide</span>
        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">default</span><span style="color: #339933;">:</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Mejorado el tipo de inferencia</strong> para la instanciación genérica. Hasta ahora cuando se creaba un objeto, había que dar todos los tipos con los que se había creado el objeto. Ahora, esto no es necesario. Un ejemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Java 6</span>
Map<span style="color: #339933;">&lt;</span>String, List<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;&gt;</span> anagrama <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HashMap<span style="color: #339933;">&lt;</span>String, List<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Java 7</span>
Map<span style="color: #339933;">&lt;</span>String, List<span style="color: #339933;">&lt;</span>String<span style="color: #339933;">&gt;&gt;</span> anagrama <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HashMap<span style="color: #339933;">&lt;&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Gestión automática de recursos</strong>. Es posible ahora definir recursos dentro de la cláusula <em>try</em> para que el alcance de estos recursos se quede limitado a esta cláusula. La forma sería:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">FileOutputStream</span> fos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FileOutputStream</span><span style="color: #009900;">&#40;</span>path<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// código para procesar fos</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Se amplian los <strong>formatos numéricos</strong>, haciéndose posible escribir cosas como:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">int</span> n <span style="color: #339933;">=</span> 0b10000000<span style="color: #339933;">;</span>
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>n<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// imprime 128</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">int</span> n2 <span style="color: #339933;">=</span>  <span style="color: #cc66cc;">121</span>_31_23_232<span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">// literal entero con subrayados</span>
<span style="color: #000066; font-weight: bold;">int</span> n3 <span style="color: #339933;">=</span>  0xff_dd<span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">// liberal hexadecimal con subrayados</span>
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>n2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>n3<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Se agrega también un sistema <strong>multi-catch</strong>, que permite definir varios tipos de objetos en una sola cláusula <em>catch</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">int</span> v <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>num<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">int</span> result <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span> <span style="color: #339933;">/</span> v<span style="color: #339933;">;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">NumberFormatException</span> <span style="color: #339933;">|</span> <span style="color: #003399;">ArithmeticException</span> ex <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Not a valid number or zero&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Además, se hacen posibles códigos de lanzamiento de excepciones como este:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Ex1 <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">class</span> Ex2 <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">Exception</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> RethrowException <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> m1<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> v<span style="color: #009900;">&#41;</span>  <span style="color: #000000; font-weight: bold;">throws</span> Ex1 , Ex2 <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>v <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Ex1<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> 
            <span style="color: #000000; font-weight: bold;">else</span>
               <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> v <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">100</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                   <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> Ex2<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
               <span style="color: #009900;">&#125;</span>
            <span style="color: #666666; font-style: italic;">// process </span>
        <span style="color: #009900;">&#125;</span> 
        <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">throw</span> ex<span style="color: #339933;">;</span>   <span style="color: #666666; font-style: italic;">// excepción no reportada java.lang.Exception</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Por último, en esta sección, cabe destacar que, cuando un programador intenta invocar un método con parámetros variable, el compilador genera una aviso de <em>operación insegura</em>, este aviso, en JDK 7 ha sido movido del sitio de la llamada a la declaración del método.</p>
<h3>Núcleo</h3>
<p>Se actualiza la arquitectura del <strong>class-loader</strong> (cargador de clases). Elimina interbloqueos en topologías no jerárquicas. <a href="http://openjdk.java.net/groups/core-libs/ClassLoaderProposal.html">Ver más (en inglés)</a>.</p>
<p>Se agrega un método en <strong>URL ClassLoader</strong>, que permite cerrar recursos subyacentes, tales como archivos abiertos, mantenidos por URL ClassLoader. <a href="http://blogs.oracle.com/michaelmcm/entry/closing_a_urlclassloader">Ver más (en inglés)</a>.</p>
<p>También se agregan actualizaciones en las colecciones (Collections) y concurrencia. Un ligero marco de trabajo (framework) para fork/join, barreras de sincronización más flexibles y reutilizables, colas de transferencia, colas de listas doblemente enlazadas concurrentes y generadores de números pseudo-aleatorios en hilos locales. <a href="http://gee.cs.oswego.edu/dl/concurrency-interest/index.html">Ver más (en inglés)</a>.</p>
<h3>Internacionalización</h3>
<p>Actualización a la versión de Unicode 6.0, que:</p>
<ul>
<li>agrega 2088 caracteres incluyendo 1000 símbolos adicionales, el símbolo de la moneda india oficial, 222 ideogramas de China, Taiwan y Japón y 630 caracteres adicionales de soporte para lengua africana, incluyendo extensiones de Tifinagh, Etiopía y Bamum.</li>
<li>agrega nuevas propiedades y ficheros de datos, como el fichero EmojiSources.txt, que mapea los símbolos emoji a su japonés original, dos propiedades provisionales de scripts del índico: IndicMatraCategory y IndicSylabicCategory; y scripts provisionales para uso en segmentación, expresiones regulares y detección de spoof.</li>
<li>corrige propiedades de caracteres para caracteres existentes.</li>
<li>etc.</li>
</ul>
<p>Mejoras en <strong>Locale</strong> (<tt>java.util.Locale</tt>) para soportar el <a href="http://tools.ietf.org/rfc/bcp/bcp47.txt">IETF BCP 47</a> (etiquetas para detectar idiomas) y el <a href="http://unicode.org/reports/tr35/">UTR 35</a> (lenguaje de marcado para datos localizados).</p>
<p>Separación de la localización del usuario, de la localización de la interfaz de usuario. Actualiza el manejador de <em>locales</em> para separar el formateado de locales de la interfaz del usuario de las locales de idioma.</p>
<h3>Entrada/Salida y Red</h3>
<p>Nueva API para E/S que permite acceso al sistema de ficheros, operaciones E/S asíncronas escalables, enlace con canal de socket y configuración, y datagramas multicast. <a href="http://openjdk.java.net/projects/nio">Ver más</a>. Además, esta API tendrá acceso para ficheros zip/jar.</p>
<p>Soporte para el protocolo <strong>SCTP</strong> (Stream Control Transmission Protocol, Protocolo de Transmisión de Control de Flujo) en Solaris, así como el <strong>SDP</strong> (Sockets Direct Protocol, Protocolo Directo a Sockets) para Solaris y Linux, y la posibilidad de usar la pila <strong>IPv6</strong> nativa de Windows Vista.</p>
<p>Agregado soporte para TLS 1.2, según el <a href="http://www.ietf.org/rfc/rfc5246.txt">RFC 5246</a>.</p>
<h3>Seguridad y Criptografía</h3>
<p>Se agrega los algoritmos de Criptografía de Curva-Elíptica (ECC, Eliptic-curve criptography), así que todas las aplicaciones Java podrán usar <a href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa_de_curva_el%C3%ADptica">ECC</a> con la JVM estándar (out-of-the-box).</p>
<h3>Base de Datos</h3>
<p>Actualización de JDBC a la versión 4.1, y Rowset a la versión 1.1. Básicamente, incluye las nuevas características del lenguaje para hacer más óptimo y manejable el sistema JDBC.</p>
<h3>Cliente</h3>
<p>Un nuevo sistema de acceso a gráficos basado en la extensión <strong>XRender</strong> de X11, el cual proporciona acceso a mucha más funcionalidad de los GPUs, para <strong>Java2D</strong>.</p>
<p>Creada unas nuevas funcionalidades para API gráfica, que permitan el uso de <strong>Shapes</strong> (curvas) y <strong>Opacity</strong> (opacidad), en <em>java.awt</em>.</p>
<p>Nuevo <em>look-and-feel</em> para Swing llamado <strong>Nimbus</strong>. Se proclama como la siguiente generación en <em>look-and-feel</em> multi-plataforma para Swing. Una imagen de cómo es:</p>
<p><img src="http://bosqueviejo.net/wp-content/uploads/nimbus-300x183.gif" alt="" title="nimbus-300x183" width="300" height="183" class="aligncenter size-full wp-image-934" /></p>
<p>Nueva componente JLayer. Se agrega por defecto la componente decoradora JXLayer de SwingLabs. <a href="http://download.oracle.com/javase/tutorial/uiswing/misc/jlayer.html">Aquí</a> un ejemplo de cómo implementarla. El ejemplo permite cosas como esta:</p>
<p><img src="http://bosqueviejo.net/wp-content/uploads/jlayer.png" alt="" title="jlayer" width="300" height="200" class="aligncenter size-full wp-image-936" /></p>
<p>Se elimina el antiguo (y propietario) sintetizador, en favor de <a href="http://java.net/projects/gervill/pages/Home/revisions/7">Gervill</a>, un sintetizador creado como propuesta del <a href="http://openjdk.java.net/projects/audio-engine/">Audio Synthesis Engine Project</a>.</p>
<h3>Web</h3>
<p>Actualizada la pila XML a las versiones más recientes de <a href="http://jcp.org/en/jsr/detail?id=206">JAXP 1.4</a>, <a href="http://jcp.org/en/jsr/detail?id=222">JAXB 2.2a</a> y <a href="http://jcp.org/en/jsr/detail?id=224">JAX-WS 2.2</a>.</p>
<h3>Administración</h3>
<p>Mejorado <a href="">MBeans</a> para informar la carga reciente de la CPU en general (del sistema completo), la carga CPU de los procesos de la JVM y enviar notificaciones JMX cuando ocurran eventos del recolector de basura (GC), esta característica fue incluída como mejora del Agente JMX, pero ha sido eliminada debido a la falta de tiempo.</p>
<h3>Otras cosas por venir&#8230; JDK 8</h3>
<p>Hay otras muchas cosas que se dejan para la siguiente versión, cosas como la modularización, el uso de anotaciones en los tipos, soporte del lenguaje para colecciones, closures&#8230; y otras muchas cosas que se piensen a partir de este momento, hasta que se plantee la liberación del JDK 8.</p>
<h3>Conclusiones</h3>
<p>Veo que el lenguaje Java, con estas propuestas y las que están por venir, se va acoplando cada vez más a la moda que van imponiendo sistemas como Groovy, Ruby, Python y otros lenguajes de scripting, agregando más elementos nativos, ganando en rendimiento y disminuyendo la necesidad de escribir tanto código. No obstante, <a href="http://www.carballude.es/blog/2010/07/15/java-7-hacia-donde-va-y-por-que-no-me-gusta/">no a todo el mundo le gusta esta línea</a>, ya que deja al lenguaje demasiado dependiente de las APIs de cara al uso de elementos nativos como las estructuras de control&#8230; habrá que ver cómo sigue evolucionando.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2011/10/03/lo-que-nos-trae-java-7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prácticas: código y memoria del Tetris</title>
		<link>http://bosqueviejo.net/2011/09/06/practicas-codigo-y-memoria-del-tetris/</link>
		<comments>http://bosqueviejo.net/2011/09/06/practicas-codigo-y-memoria-del-tetris/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 09:21:53 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[prácticas]]></category>
		<category><![CDATA[uned]]></category>
		<category><![CDATA[videojuegos]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=851</guid>
		<description><![CDATA[ Lo prometido es deuda, por lo que, aquí está la práctica completa, código y memoria, de la asignatura de Programación Orientada a Objetos ofrecida por la UNED. La práctica corresponde al curso 2010/2011, y consta de la creación de un Tetris.
Para más información, puede verse la memoria de la práctica.
El código completo se puede descargar desde un cliente de Subversion, en Windows TortoiseSVN, en linux, mac o demás sabores de Unix se puede hacer desde consola:

svn co http://project.bosqueviejo.net/svn/tetris

Espero que os sirva de ayuda.
]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/tetris-150x150.jpg" alt="" title="tetris" width="150" height="150" class="alignleft size-thumbnail wp-image-683" /> <a href="http://bosqueviejo.net/2011/04/23/practicas-curiosas-tetris/">Lo prometido es deuda</a>, por lo que, aquí está la práctica completa, código y memoria, de la asignatura de Programación Orientada a Objetos ofrecida por la UNED. La práctica corresponde al curso 2010/2011, y consta de la creación de un Tetris.</p>
<p>Para más información, puede verse <a href="http://project.bosqueviejo.net/svn/tetris/PracticaPOO.pdf">la memoria de la práctica</a>.</p>
<p>El código completo se puede descargar desde un cliente de Subversion, en Windows TortoiseSVN, en linux, mac o demás sabores de Unix se puede hacer desde consola:</p>
<pre>
svn co http://project.bosqueviejo.net/svn/tetris
</pre>
<p>Espero que os sirva de ayuda.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2011/09/06/practicas-codigo-y-memoria-del-tetris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prácticas curiosas: Tetris</title>
		<link>http://bosqueviejo.net/2011/04/23/practicas-curiosas-tetris/</link>
		<comments>http://bosqueviejo.net/2011/04/23/practicas-curiosas-tetris/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 17:30:11 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programación orientada a objetos]]></category>
		<category><![CDATA[uned]]></category>
		<category><![CDATA[videojuegos]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=667</guid>
		<description><![CDATA[ He estado en esta semana santa haciendo una práctica del Grado en Ingeniería Informática, para la asignatura de Programación Orientada a Objetos, en la UNED.
En la práctica, y la asignatura, se hace bastante énfasis en Java. A mi Java me parece un buen lenguaje, pero no es totalmente orientado a objetos, por lo que, te permite hacer cosas que, estando bien escritas (porque funcionan) en lenguaje Java, pueden no ser, en absoluto, orientadas a objetos.
La práctica que se propone este año es un Tetris. El nombre viene de Tetra, que es cuatro en griego, y hace referencia a que cada pieza del juego se forma por cuatro cuadrados. El juego se compone de 7 figuras, van apareciendo de forma aleatoria y con colores aleatorios. Las figuras van cayendo y el jugador solo puede girarlas o acelerar su caída. En el momento que se completa una línea horizontal, desaparece y todas las piezas superiores descienden una línea.
Para jugar, haga clic sobre el tablero y use las flechas derecha, izquierda y abajo para dirigir la caída de las piezas y movimiento laterla, y la flecha arriba para controlar su giro.
Una vez terminen los exámenes (y salgan las notas   ), [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://bosqueviejo.net/wp-content/uploads/tetris.jpeg" alt="" title="tetris" width="229" height="220" class="alignleft size-full wp-image-683" /> He estado en esta semana santa haciendo una práctica del Grado en Ingeniería Informática, para la asignatura de Programación Orientada a Objetos, en la UNED.</p>
<p>En la práctica, y la asignatura, se hace bastante énfasis en Java. A mi Java me parece un buen lenguaje, pero no es totalmente orientado a objetos, por lo que, te permite hacer cosas que, estando bien escritas (porque funcionan) en lenguaje Java, pueden no ser, en absoluto, orientadas a objetos.</p>
<p>La práctica que se propone este año es un Tetris. El nombre viene de Tetra, que es cuatro en griego, y hace referencia a que cada pieza del juego se forma por cuatro cuadrados. El juego se compone de 7 figuras, van apareciendo de forma aleatoria y con colores aleatorios. Las figuras van cayendo y el jugador solo puede girarlas o acelerar su caída. En el momento que se completa una línea horizontal, desaparece y todas las piezas superiores descienden una línea.</p>
<p>Para jugar, haga <strong>clic sobre el tablero</strong> y use las flechas derecha, izquierda y abajo para dirigir la caída de las piezas y movimiento laterla, y la flecha arriba para controlar su giro.</p>
Note: There is a poll embedded within this post, please visit the site to participate in this post's poll.
<div class="processing_embed" id="net.bosqueviejo.uned.lsi.poo.Web_container"><script type="text/javascript">
				/* <![CDATA[ */
				var attributes = { 
					code: 'net.bosqueviejo.uned.lsi.poo.Web.class',
					archive: 'http://bosqueviejo.net/wp-content/uploads/tetris.jar,http://bosqueviejo.net/wp-content/plugins/wordpress-processing-embed/data/core.jar',
					width: 280, 
					height: 540,
					image: 'http://bosqueviejo.net/wp-content/plugins/wordpress-processing-embed/data/loading.gif'
					};
				var parameters = { };
				var version = '1.5';
				deployJava.runApplet(attributes, parameters, version);
				/* ]]&gt; */
			</script>
			<noscript><div>
				<!--[if !IE]> -->
				<object classid="java:net.bosqueviejo.uned.lsi.poo.Web.class" 
					type="application/x-java-applet"
					archive="http://bosqueviejo.net/wp-content/uploads/tetris.jar,http://bosqueviejo.net/wp-content/plugins/wordpress-processing-embed/data/core.jar"
					width="280" height="540"
					standby="Loading Processing software..." >
				<param name="archive" value="http://bosqueviejo.net/wp-content/uploads/tetris.jar,http://bosqueviejo.net/wp-content/plugins/wordpress-processing-embed/data/core.jar" />
				
				<param name="mayscript" value="true" />
				<param name="scriptable" value="true" />
				
				<param name="image" value="http://bosqueviejo.net/wp-content/plugins/wordpress-processing-embed/data/loading.gif" />
				<param name="boxmessage" value="Loading Processing software..." />
				<param name="boxbgcolor" value="#FFFFFF" />
				
				<param name="test_string" value="outer" />
				<!--<![endif]-->
				
				<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
					codebase="http://java.sun.com/update/1.6.0/jinstall-6u20-windows-i586.cab"
					width="280" height="{540}"
					standby="Loading Processing software..."  >
					
					<param name="code" value="net.bosqueviejo.uned.lsi.poo.Web" />
					<param name="archive" value="http://bosqueviejo.net/wp-content/uploads/tetris.jar,http://bosqueviejo.net/wp-content/plugins/wordpress-processing-embed/data/core.jar" />
					
					<param name="mayscript" value="true" />
					<param name="scriptable" value="true" />
					
					<param name="image" value="http://bosqueviejo.net/wp-content/plugins/wordpress-processing-embed/data/loading.gif" />
					<param name="boxmessage" value="Loading Processing software..." />
					<param name="boxbgcolor" value="#FFFFFF" />
					
					<param name="test_string" value="inner" />
					
					<p>
						
						<strong>This browser does not have a Java Plug-in.
						<br />
						<a href="http://www.java.com/getjava" title="Download Java Plug-in">Get the latest Java Plug-in here.</a>
						</strong>
					</p>
				
				</object>
				<!--[if !IE]> -->
				</object>
				<!--<![endif]-->
			</div></noscript></div>
<p>Una vez terminen los exámenes (y salgan las notas <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  ), publicaré el código completo de la práctica. ¡Suerte!</p>
<p><strong>Actualización 27/04/2011</strong>: después de comprobar que en GNU/Linux (con Firefox) había parpadeo, tanto en la versión de escritorio, como con la versión web, he realizado unas modificaciones de buffering y focus para corregir este fallo.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2011/04/23/practicas-curiosas-tetris/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Banco de Pruebas (I): velocidad</title>
		<link>http://bosqueviejo.net/2010/11/15/banco-de-pruebas-i-velocidad/</link>
		<comments>http://bosqueviejo.net/2010/11/15/banco-de-pruebas-i-velocidad/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 15:33:20 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[lenguaje c]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=536</guid>
		<description><![CDATA[Hace tiempo hice algo parecido con los lenguajes de programación que entonces conocía, probando aquellos que eran de scripting, compilados y probando sobretodo, lo que tardan en levantar y hacer una operación tan simple como enumerar 100.000 números sacando por pantalla el número con un elevado a 2 de la posición en el que sale la impresión. Por ejemplo:

Hola 1
Hola 4
Hola 9
Hola 16
...

He realizado las pruebas en los lenguajes: C, Perl, Ruby, Python, PHP, Lua, Shell script, Erlang script y Java.
C
En lenguaje C se ha realizado el siguiente código:

#include &#60;stdio.h&#62;
&#160;
main&#40;&#41; &#123;
        int i;
&#160;
        for &#40;i=0; i&#60;100000; i++&#41; &#123;
                printf&#40;&#34;Hola %d\n&#34;, i*i&#41;;
        &#125;
&#125;

Perl
En el lenguaje Perl, se ha implementado el código siguiente:

#!/usr/bin/perl
&#160;
for &#40;$i=0; $i&#60;100000; $i++&#41; &#123;
        print &#34;Hola &#34; . &#40;$i*$i&#41; . &#34;\n&#34;;
&#125;

Ruby
En Ruby, el código escrito ha sido:

#!/usr/bin/ruby
&#160;
&#40;1..100000&#41;.each do &#124;i&#124;
        puts &#34;hola &#34; + &#40;i*i&#41;.to_s
end

Python
En Python, el código ha sido:

#!/usr/bin/python
&#160;
for i in range&#40;1,1000000&#41;:
        [...]]]></description>
			<content:encoded><![CDATA[<p>Hace tiempo hice algo parecido con los lenguajes de programación que entonces conocía, probando aquellos que eran de scripting, compilados y probando sobretodo, lo que tardan en levantar y hacer una operación tan simple como enumerar 100.000 números sacando por pantalla el número con un elevado a 2 de la posición en el que sale la impresión. Por ejemplo:</p>
<pre>
Hola 1
Hola 4
Hola 9
Hola 16
...
</pre>
<p>He realizado las pruebas en los lenguajes: C, Perl, Ruby, Python, PHP, Lua, Shell script, Erlang script y Java.</p>
<h3>C</h3>
<p>En lenguaje C se ha realizado el siguiente código:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">100000</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Hola %d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> i<span style="color: #339933;">*</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Perl</h3>
<p>En el lenguaje Perl, se ha implementado el código siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span>
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">100000</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Hola &quot;</span> <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$i</span><span style="color: #0000ff;">*$i</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Ruby</h3>
<p>En Ruby, el código escrito ha sido:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/ruby</span>
&nbsp;
<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">1</span>..<span style="color:#006666;">100000</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>i<span style="color:#006600; font-weight:bold;">|</span>
        <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;hola &quot;</span> <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006600; font-weight:bold;">&#40;</span>i<span style="color:#006600; font-weight:bold;">*</span>i<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">to_s</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<h3>Python</h3>
<p>En Python, el código ha sido:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span>,<span style="color: #ff4500;">1000000</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Hola &quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>i<span style="color: #66cc66;">*</span>i<span style="color: black;">&#41;</span></pre></div></div>

<h3>PHP</h3>
<p>En PHP el código escrito ha sido:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">#!/usr/bin/php -q
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">100000</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Hola &quot;</span> <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">*</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Lua</h3>
<p>El código de Lua escrito ha sido:</p>
</pre>

<div class="wp_syntax"><div class="code"><pre class="lua" style="font-family:monospace;">#<span style="color: #66cc66;">!/</span>usr<span style="color: #66cc66;">/</span>bin<span style="color: #66cc66;">/</span>lua
&nbsp;
<span style="color: #b1b100;">for</span> i<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">100000</span> <span style="color: #b1b100;">do</span>
        <span style="color: #b1b100;">print</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Hola &quot;</span> .. <span style="color: #66cc66;">&#40;</span>i<span style="color: #66cc66;">*</span>i<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #b1b100;">end</span></pre></div></div>

<h3>Shell script</h3>
<p>En shell script (en bash) se ha implementado lo siguiente:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">1</span> <span style="color: #000000;">100000</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>; <span style="color: #000000; font-weight: bold;">do</span>
        <span style="color: #7a0874; font-weight: bold;">let</span> <span style="color: #007800;">RESULT</span>=<span style="color: #007800;">$i</span><span style="color: #000000; font-weight: bold;">*</span><span style="color: #007800;">$i</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Hola <span style="color: #007800;">$RESULT</span>&quot;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<h3>Erlang (Script)</h3>
<p>Erlang también puede emplearse como lenguaje de scripting usando el intérprete <em>escript</em>. El código escrito para este intérprete ha sido:</p>

<div class="wp_syntax"><div class="code"><pre class="erlang" style="font-family:monospace;">#<span style="color: #014ea4;">!/</span>usr<span style="color: #014ea4;">/</span>bin<span style="color: #014ea4;">/</span>escript
&nbsp;
<span style="color: #ff3c00;">main</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">_Args</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
        <span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff9600;">100000</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span>
&nbsp;
<span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff9600;">0</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span> <span style="color: #ff9600;">0</span><span style="color: #6bb810;">;</span>
<span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">I</span><span style="color: #109ab8;">&#41;</span> <span style="color: #6bb810;">-&gt;</span>
        <span style="color: #ff4e18;">io</span>:<span style="color: #ff3c00;">format</span><span style="color: #109ab8;">&#40;</span><span style="color: #ff7800;">&quot;Hola ~p~n&quot;</span><span style="color: #6bb810;">,</span> <span style="color: #109ab8;">&#91;</span><span style="color: #45b3e6;">I</span><span style="color: #014ea4;">*</span><span style="color: #45b3e6;">I</span><span style="color: #109ab8;">&#93;</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">,</span>
        <span style="color: #ff3c00;">loop</span><span style="color: #109ab8;">&#40;</span><span style="color: #45b3e6;">I</span><span style="color: #014ea4;">-</span><span style="color: #ff9600;">1</span><span style="color: #109ab8;">&#41;</span><span style="color: #6bb810;">.</span></pre></div></div>

<h3>Java</h3>
<p>El código que se ha usado para la prueba de Java ha sido:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> loop <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #cc66cc;">100000</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hola &quot;</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">*</span>i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Resultado de las pruebas</h3>
<p>Tras ejecutar 5 veces cada script, controlando el tiempo que toma cada uno hemos obtenido, según el equipo en el que se ha ejecutado. El equipo 1 es un Intel vPro con Debian GNU/Linux Lenny:</p>
<table>
<tr>
<th rowspan="2">Lenguaje</th>
<th colspan="5">Ejecuciones (en segundos) (Equipo 1)</th>
</tr>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
</tr>
<tr>
<th>C (4.1.3)</th>
<td> 0,02</td>
<td> 0,02</td>
<td> 0,02</td>
<td> 0,02</td>
<td> 0,02</td>
</tr>
<tr>
<th>Perl (5.10.0)</th>
<td> 0,04</td>
<td> 0,03</td>
<td> 0,03</td>
<td> 0,03</td>
<td> 0,03</td>
</tr>
<tr>
<th>Ruby (1.8.7-p72)</th>
<td> 0,16</td>
<td> 0,15</td>
<td> 0,16</td>
<td> 0,16</td>
<td> 0,15</td>
</tr>
<tr>
<th>Lua (5.1.3)</th>
<td> 0,21</td>
<td> 0,22</td>
<td> 0,21</td>
<td> 0,21</td>
<td> 0,21</td>
</tr>
<tr>
<th>PHP (5.3.1)</th>
<td> 0,41</td>
<td> 0,47</td>
<td> 0,43</td>
<td> 0,33</td>
<td> 0,29</td>
</tr>
<tr>
<th>Python (2.6.5)</th>
<td> 1,13</td>
<td> 1,11</td>
<td> 1,15</td>
<td> 1,16</td>
<td> 1,14</td>
</tr>
<tr>
<th>Java (1.6.0_20-b02)</th>
<td> 1,37</td>
<td> 1,39</td>
<td> 1,40</td>
<td> 1,36</td>
<td> 1,34</td>
</tr>
<tr>
<th>Erlang (R13B04, 5.7.5)</th>
<td> 3,65</td>
<td> 3,62</td>
<td> 3,65</td>
<td> 3,65</td>
<td> 3,56</td>
</tr>
<tr>
<th>Bash (3.2.39)</th>
<td> 7,27</td>
<td> 7,26</td>
<td> 7,46</td>
<td> 7,40</td>
<td> 7,25</td>
</tr>
</table>
<p>En el equipo 2, un Apple iBook G4 (PowerPC):</p>
<table>
<tr>
<th rowspan="2">Lenguaje</th>
<th colspan="5">Ejecuciones (en segundos) (Equipo 2)</th>
</tr>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
</tr>
<tr>
<th>C (4.0.1)</th>
<td>0,22</td>
<td>0,34</td>
<td>0,55</td>
<td>0,32</td>
<td>0,35</td>
</tr>
<tr>
<th>Perl (5.8.9)</th>
<td>0,67</td>
<td>0,83</td>
<td>0,68</td>
<td>0,68</td>
<td>0,78</td>
</tr>
<tr>
<th>Ruby (1.8.6-p386)</th>
<td>2,91</td>
<td>3,21</td>
<td>3,20</td>
<td>3,13</td>
<td>3,52</td>
</tr>
<tr>
<th>Lua (5.1.4)</th>
<td>1,51</td>
<td>1,64</td>
<td>1,64</td>
<td>1,65</td>
<td>2,43</td>
</tr>
<tr>
<th>PHP (5.2.14)</th>
<td>2,51</td>
<td>2,48</td>
<td>2,55</td>
<td>2,37</td>
<td>2,77</td>
</tr>
<tr>
<th>Python (2.5.1)</th>
<td>17,49</td>
<td>16,91</td>
<td>17,41</td>
<td>17,40</td>
<td>16,92
<td></tr>
<tr>
<th>Java (1.5.0_26-156)</th>
<td>7,60</td>
<td>5,92</td>
<td>5,72</td>
<td>5,90</td>
<td>6,02
<td></tr>
<tr>
<th>Erlang (R14A, 5.8)</th>
<td>22,10</td>
<td>23,13</td>
<td>22,76</td>
<td>21,94</td>
<td>21,80
<td></tr>
<tr>
<th>Bash (4.1.9)</th>
<td>135,19</td>
<td>223,56</td>
<td>181,40</td>
<td>136,19</td>
<td>133,46
<td></tr>
</table>
<p>Ordenados por velocidad, se ve que el lenguaje C, como cabía esperar, es el más rápido, seguido de Perl, como el lenguaje de scripting más rápido.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/11/15/banco-de-pruebas-i-velocidad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Los sectores del software</title>
		<link>http://bosqueviejo.net/2010/01/07/los-sectores-del-software/</link>
		<comments>http://bosqueviejo.net/2010/01/07/los-sectores-del-software/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 09:25:22 +0000</pubDate>
		<dc:creator>bombadil</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://bosqueviejo.net/?p=217</guid>
		<description><![CDATA[ De siempre, se va viendo que las empresas de software se decantan por una forma de hacer las cosas, mientras que otras eligen otro camino distinto y, muy pocas, mezclan elementos de doctrinas tan establecidas y dogmáticas como son: el mundo del software libre, el mundo java o el mundo .net.
El mundo .NET
Como todo lo que tiene que ver con Microsoft, el mundo .NET se mueve, casi exclusivamente, con productos y herramientas desarrolladas por esta misma compañía. Funciona sobre Windows, con base de datos de Microsoft y se diseña con herramientas de Microsoft.
Lo bueno de Microsoft es que desarrollan los productos para un público general y sin conocimientos extensos. Los lenguajes suelen ser o muy fáciles (Visual Basic) o muy complejos (C++, C#), pero cumplen con todas las necesidades de los programadores a los que van dirigidas las herramientas. Así mismo, tienen un alto nivel de operatibilidad entre los diferentes productos, es decir, escribir código ASP con SQL Server es simple, gracias a ese nivel de compactación y simplificación.
Lo bueno de la simplificación lleva a lo malo de la complejidad también. Un programa que se hace de forma simple y fácil, siguiendo los pasos que Microsoft ha pensado para [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://bosqueviejo.net/wp-content/uploads/sectores.png"><img src="http://bosqueviejo.net/wp-content/uploads/sectores.png" alt="" title="sectores" width="180" class="alignleft size-full wp-image-218" /></a> De siempre, se va viendo que las empresas de software se decantan por una forma de hacer las cosas, mientras que otras eligen otro camino distinto y, muy pocas, mezclan elementos de doctrinas tan establecidas y dogmáticas como son: el mundo del software libre, el mundo java o el mundo .net.</p>
<h3>El mundo .NET</h3>
<p>Como todo lo que tiene que ver con Microsoft, el mundo .NET se mueve, casi exclusivamente, con productos y herramientas desarrolladas por esta misma compañía. Funciona sobre Windows, con base de datos de Microsoft y se diseña con herramientas de Microsoft.</p>
<p>Lo bueno de Microsoft es que desarrollan los productos para un público general y sin conocimientos extensos. Los lenguajes suelen ser o muy fáciles (Visual Basic) o muy complejos (C++, C#), pero cumplen con todas las necesidades de los programadores a los que van dirigidas las herramientas. Así mismo, tienen un alto nivel de operatibilidad entre los diferentes productos, es decir, escribir código ASP con SQL Server es simple, gracias a ese nivel de compactación y simplificación.</p>
<p>Lo bueno de la simplificación lleva a lo malo de la complejidad también. Un programa que se hace de forma simple y fácil, siguiendo los pasos que Microsoft ha pensado para dar es simple, sencillo y rápido. Pero cuando la aplicación debe tener una forma específica o salirse un poco del camino típico, comienzan a surgir problemas solo saldables con código complejo.</p>
<p>Ximian, absorbida por Novell, ha realizado muchas aproximaciones a este mundo para portarlo al mundo del software libre a través de su escritorio Gnome y su proyecto Mono. No obstante, es un tema un poco espinoso, ya que quien usa software libre, por lo general, se aleja de las tecnologías propuestas por esta gran multinacional, por lo que, aunque es usada y tiene su cuota de mercado, Mono no llega a ser usado tanto como podría esperarse.</p>
<h3>El mundo Java</h3>
<p>El mundo de Java ha estado siempre en una lucha constante y abriéndose camino en el desarrollo de software, sin mucho éxito al principio, sobre todo en lo que respecta a las aplicaciones de escritorio. Esto fue debido a su naturaleza de pseudo-compilación y pseudo-interpretación, ya que es un lenguaje compilado e interpretado que se ejecuta sobre una máquina virtual, y las labores de interpretación de los bytecodes son algo costosos, en relación a código que se ejecuta de forma nativa.</p>
<p>No obstante, en la parte web, de interfaces, desde que comenzó, ha tenido una gran aceptación, puesto que permite el desarrollo de las aplicaciones en cualquier infraestructura (windows, linux, solaris, &#8230;) y se han desarrollado grandes herramientas para el desarrollo en este sentido.</p>
<p>Java siempre es el favorito y preferido de las consultoras (a menos en España), donde es empleado para el desarrollo de aplicaciones, tanto de escritorio como web en todos los sectores donde son contratados.</p>
<p>La mayoría de empresas que han tenido relación con Microsoft y han salido <em>de malas</em> con la grande, han terminado montándose al carro de Java y aportando a esta comunidad en modo de open source herramientas, conocimiento, etc. Además de Sun Microsystems (su fundadora), hay otras como IBM, RedHat, Oracle, etc. que se han sumado al carro de Java para el desarrollo y ampliación de esta comunidad.</p>
<p>Hay comunidades de software libre que se han sumado a la aportación de código para el mundo Java. Esto supongo que será erróneamente aportado como el <em>voto útil</em>, sin saber que en nada se beneficia al software libre en sí, sino solo al mundo Java que, aunque pueda parecer atractiva la idea de <em>luchar contra el tirano</em>, no es más que ayudar a una empresa a derrocar a otra. Esto puede ser muy discutible, sobre todo por los defensores de Java <img src='http://bosqueviejo.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
<h3>El mundo del software libre</h3>
<p>Al margen de la guerra entre .Net y Java, surgen los entornos, sistemas y elementos de software libre. Pensar que todo el mundo tiene que ser Java o .Net es un craso error, ya que hay muchos elementos que se pueden combinar a gusto propio del desarrollador y emplearlos como mejor convenga para obtener los mejores resultados para una tarea concreta.</p>
<p>A este respecto, una de las comunidades con más auge es la de desarrolladores de PHP, por ejemplo, que es el lenguaje que más proyectos de software libre tiene desarrollados, y es el más usado para el desarrollo de sitios como Facebook, Menéame, WordPress, etc.</p>
<p>Otra de las comunidades más activa en los entornos web es la de Ruby, Ruby on Rails más específicamente, que tiene un entorno fácil y profesional para el desarrollo rápido de sitios web. También Python, con su framework Django. Ambos presentes en el mundo Java a través de JRuby y Jython, respectivamente.</p>
<p>Entornos también desarrollados en lenguajes más específicos como Perl, Erlang, Tcl, etc. hacen que se complete el abanico de posibilidades para el desarrollo de software a través de las soluciones que aporta el software libre.</p>
<p>La nota negativa, es que los elementos no son altamente cooperativos, es decir, aunque se basan en estándares, normas y todos son abiertos, hay que realizar desarrollos para poder tener funcionando cosas entre unos y otros, debido a que en el software libre, no todo está hecho o viene dado fácilmente. Pero la nota positiva sobre esto, es que la dificultad que eso entraña es mucho menor que la que entrañaría el desarrollar algo no hecho o no pensado para hacerse, en Java o .Net.</p>
<h3>Conclusión</h3>
<p>En principio, no te quedes solo con uno, esto no son tres equipos a los que haya que <em>apoyar a muerte</em>, estas son tres formas de ver la tecnología y puede convenir cualquiera de las tres según el contexto en el que haya que ponerse.</p>
<p>Por ejemplo, en una empresa que se haya invertido en infraestructura y software Microsoft, se tenga todo montado en SQL Server, con ASP e interfaces desarrolladas en Visual Basic, desarrollar cualquier nueva ampliación o una nueva herramienta, cabe pensar que será siempre más fácil si nos ceñimos a lo ya establecido que si comenzamos a cambiar lo que hay.</p>
<p>Igualmente, en otra empresa en la que se haya realizado una inversión para Java, incluso con servidores Solaris, y bases de datos Oracle, no conviene pensar en desarrollar nada con Visual Basic, ni PHP, sino pensar en agregar más aplicaciones de tipo J2EE, que será lo más fácil de implementar.</p>
<p>Por último, en una empresa pequeña, con aspiraciones a crecer, que tengan todo desarrollado en PHP y MySQL, se podría cambiar a un framework de desarrollo para PHP, así como agregar elementos más complejos en caso de ser necesarios (como memcached).</p>
<p>En definitiva, no intentar cambiar lo que ya hay si funciona. Otro caso es que no funcione o que haya que realizar adaptaciones y se pueda aprovechar para agregar elementos más generales o estándares.</p>
]]></content:encoded>
			<wfw:commentRss>http://bosqueviejo.net/2010/01/07/los-sectores-del-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

