<?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>BLOG PUENTES DIAZ</title>
	<atom:link href="http://blog.puentesdiaz.com.ar/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.puentesdiaz.com.ar</link>
	<description>Otro sitio más de Puentes Diaz</description>
	<lastBuildDate>Tue, 24 Aug 2010 18:15:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Teorema CAP</title>
		<link>http://blog.puentesdiaz.com.ar/2010/08/24/teorema-cap/</link>
		<comments>http://blog.puentesdiaz.com.ar/2010/08/24/teorema-cap/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 18:11:57 +0000</pubDate>
		<dc:creator>blog</dc:creator>
				<category><![CDATA[Tecnología IT]]></category>

		<guid isPermaLink="false">http://blog.puentesdiaz.com.ar/?p=287</guid>
		<description><![CDATA[Bueno, estas son de las cosas que a veces uno le gustaria haberse enterado hace algunas decadas&#8230; Damas y Caballeros EL TEOREMA CAP, también llamado Brewer&#8217;s theorem, establece que es imposible para un sistema de computo distribuído dar simultaneamente las &#8230; <a href="http://blog.puentesdiaz.com.ar/2010/08/24/teorema-cap/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bueno, estas son de las cosas que a veces uno le gustaria haberse enterado hace algunas decadas&#8230;</p>
<p>Damas y Caballeros</p>
<p><a href="http://en.wikipedia.org/wiki/CAP_theorem">EL TEOREMA CAP</a>, también llamado <a href="http://www.julianbrowne.com/article/viewer/brewers-cap-theorem">Brewer&#8217;s theorem</a>, establece que es imposible para un sistema de computo distribuído dar simultaneamente las siguientes tres garantías:</p>
<p><strong>Consistency </strong>(Consistencia :todos los nodos ven la misma información al mismo tiempo)</p>
<p><strong>Availability </strong>(Disponibilidad: la falla de un nodo no impedirá al resto de los nodos seguir funcionando)</p>
<p><strong>Partition Tolerance</strong> (Tolerancia a Fallos: El sistema sigue funcionando a pesar de la pérdida de información)</p>
<p>Segun el teorema, solo se pueden satisfacer dos de estas tres carasterísticas al mismo tiempo, pero nunca las tres.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2010/08/24/teorema-cap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Desreferenciado</title>
		<link>http://blog.puentesdiaz.com.ar/2010/08/01/php-desreferenciado/</link>
		<comments>http://blog.puentesdiaz.com.ar/2010/08/01/php-desreferenciado/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 03:11:15 +0000</pubDate>
		<dc:creator>puentesdiaz</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.puentesdiaz.com.ar/?p=284</guid>
		<description><![CDATA[En los artículos de Johnathan Wage y de Schlueters hay una excelente explicación sobre está característica de PHP.]]></description>
			<content:encoded><![CDATA[<p>En los artículos de  <a href="http://www.jwage.com/2010/07/31/array-dereferencing-in-php-trunk/">Johnathan Wage</a> y de <a href="http://schlueters.de/blog/archives/138-Features-in-PHP-trunk-Array-dereferencing.html">Schlueters</a> hay una excelente explicación sobre está característica de PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2010/08/01/php-desreferenciado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Scripts : Dando valor a un Rango de Celdas</title>
		<link>http://blog.puentesdiaz.com.ar/2010/05/11/google-scripts-dando-valor-a-un-rango-de-celdas/</link>
		<comments>http://blog.puentesdiaz.com.ar/2010/05/11/google-scripts-dando-valor-a-un-rango-de-celdas/#comments</comments>
		<pubDate>Wed, 12 May 2010 00:15:18 +0000</pubDate>
		<dc:creator>puentesdiaz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tecnología IT]]></category>

		<guid isPermaLink="false">http://blog.puentesdiaz.com.ar/?p=270</guid>
		<description><![CDATA[Vamos a seguir con una forma muy practica de asignar un valor a una o rango de celdas. Para aclarar lo de Rango, lo podemos definir como una selección de 1 a n celdas, siendo esta selección siempre conjunta y &#8230; <a href="http://blog.puentesdiaz.com.ar/2010/05/11/google-scripts-dando-valor-a-un-rango-de-celdas/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vamos a seguir con una forma muy practica de asignar un valor a una o rango de celdas. Para aclarar lo de Rango, lo podemos definir como una selección de 1 a n celdas, siendo esta selección siempre conjunta y consecutiva de manera de formar un rectángulo. Es decir podemos seleccionar las celdas b1, b2, b3,  c1, c2, y c3, pero no b1, b2, b3, y d8.</p>
<p>Aclarado lo que queremos entender por Rango, retomamos nuestra serie de códigos. En la función <em>onOpen()</em>, incluimos la siguiente linea :</p>
<pre> {name: "Rellenar Celdas", functionName: "rellenarCeldas"},</pre>
<p>La función quedaría así:</p>
<pre>function onOpen() {
 var planilla = SpreadsheetApp.getActiveSpreadsheet();
 var itemsDeAcciones = [
 {name: "Rellenar Celdas", functionName: "rellenarCeldas"},
 {name: "Recordar mi Email", functionName: "recordarEmail"},
 {name: "Pedir Nacionalidad", functionName: "pedirNacionalidad"}];
 planilla.addMenu(“Acciones”, itemsDeAcciones);
}
</pre>
<p>Ahora que ya tenemos nuestro nueva acción en el menú, vamos a establecer la funcionalidad propiamente dicha:</p>
<pre>function rellenarCeldas() {
  var rellenar = Browser.inputBox("Rellenar las Celdas con:");
  SpreadsheetApp.getActiveRange().setValue(rellenar);
}
</pre>
<p>Paso a explicar el código de las siguiente forma. Se define una nueva función como habíamos aprendido anteriormente, se establece una nueva variable <em>rellenar</em> con la información que suministre el usuario a través de un cuadro de diálogo con el método <em>inputBox()</em>. Luego para el documento actual, se obtiene el Rango de Celdas seleccionadas con el método <em>getActiveRange()</em>, y a las mismas se les asigna un valor dado <em>setValue()</em>.</p>
<p>Cabe recordar que para la prueba del ejemplo el usuario antes de elegir la acción del menú, debería hacer su selección de celdas.</p>
<p>Como siempre, para probar todo esto, guardamos el código en el editor, y recargamos la página en el navegador.</p>
<p>Antes de pensar que hoy hemos terminado, pensemos en que otras formas podemos asignar valores a una celda. Pensemos en poder indicar la celda y su valor. Reiniciamos entonces en la función <em>onOpen()</em>, incluimos la siguiente linea :</p>
<pre> {name: "Asignar Valor", functionName: "asignarValor"},</pre>
<p>La función quedaría así:</p>
<pre>function onOpen() {
 var planilla = SpreadsheetApp.getActiveSpreadsheet();
 var itemsDeAcciones = [
 {name: "Asignar Valor", functionName: "asignarValor"},
 {name: "Rellenar Celdas", functionName: "rellenarCeldas"},
 {name: "Recordar mi Email", functionName: "recordarEmail"},
 {name: "Pedir Nacionalidad", functionName: "pedirNacionalidad"}];
 planilla.addMenu(“Acciones”, itemsDeAcciones);
}
</pre>
<p>Ahora que ya tenemos nuestro nueva acción en el menú, vamos a  establecer la funcionalidad propiamente dicha:</p>
<pre>function asignarValor() {
  var planilla = SpreadsheetApp.getActiveSpreadsheet();
  var celda = Browser.inputBox("Indique la Celda:");
  var valor = Browser.inputBox("Indique el Valor:");
<pre>  if (typeof valor != "number") {
    // comprobamos que valor sea un número
    Browser.msgBox("El Valor ingresado, no es un número");
  } else {
    planilla.getRange(celda).setValue(valor);
    Browser.msgBox("Se ha asignado a la celda " + celda + ", el valor numérico " + valor );
  }

}</pre>
</pre>
<p>Paso a explicar el código de las siguiente forma. En realidad, salvo la última linea las demás ya son conocidas; lo único que introducimos en este ejemplo es el uso del método <em>getRange()</em>. Además hemos empleado un condicional <em>if</em> y de la palabra reservada <em>typeof</em> . Ambas se explican por sí mismas, pero sino, no se preocupen. Estas son las razones por las que Google eligió Javascript, existe un millón uno de tutoriales que explicarán mejor que este servidor su utilidad.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2010/05/11/google-scripts-dando-valor-a-un-rango-de-celdas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Scripts : Cuadros de Dialogos: Pidiendo e Informando</title>
		<link>http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-cuadros-de-dialogos-pidiendo-e-informando/</link>
		<comments>http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-cuadros-de-dialogos-pidiendo-e-informando/#comments</comments>
		<pubDate>Mon, 10 May 2010 21:19:25 +0000</pubDate>
		<dc:creator>puentesdiaz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tecnología IT]]></category>

		<guid isPermaLink="false">http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-cuadros-de-dialogos-pidiendo-e-informando/</guid>
		<description><![CDATA[Para completar el tutorial anterior, lo mejor es asignar un sentido a cada acción del menu creado. Con el siguiente código, habíamos creamos una función que se ejecutará automáticamente cada vez que la planilla se recargue. function onOpen() { // &#8230; <a href="http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-cuadros-de-dialogos-pidiendo-e-informando/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><span class="js-keyword">Para completar el tutorial anterior, lo mejor es asignar un sentido a cada acción del menu creado.</span></p>
<p>Con el siguiente código, habíamos creamos una función que se ejecutará automáticamente cada vez que la planilla se recargue.</p>
<pre>function <span class="js-variable">onOpen</span><span class="js-punctuation">(</span><span class="js-punctuation">) </span><span class="js-punctuation">{</span>
// Esto es un comentario
}</pre>
<p>Lo que este entre &#8220;{&#8221; y &#8220;}&#8221;, será parte de esta función onOpen().</p>
<p><span class="js-keyword">Entonces editamos la función onOpen() para que quede de la siguiente forma. Las lineas que empiezan con &#8220;//&#8221; son lineas de comentarios que explican la linea de código debajo de ellas y por ende son ignoradas</span></p>
<pre>function onOpen() {
 var planilla = SpreadsheetApp.getActiveSpreadsheet();
 var itemsDeAcciones = [
 {name: "Recordar mi Email", functionName: "recordarEmail"},
 {name: "Pedir Nacionalidad", functionName: "pedirNacionalidad"}];
 planilla.addMenu(“Acciones”, itemsDeAcciones);
}</pre>
<p>Declaramos una variable  &#8220;planilla&#8221; que representará a la hoja activa de nuestro documento</p>
<pre>var planilla = SpreadsheetApp.getActiveSpreadsheet();</pre>
<p>Declaramos los items de nuevo menu a  crear, los mismo se contiene en una variable &#8220;acciones&#8221;</p>
<pre>var itemsDeAcciones  = [</pre>
<p>Declara cada item, con &#8220;name&#8221; establecemos que aparece,  con  &#8220;functionName&#8221;  establecemos que función debe ejecutarse</p>
<pre>{name: "Recordar mi Email", functionName: "recordarEmail"}</pre>
<p>A la planilla de nuestro documento ahora le agregamos un menu (  método addMenu() ), que se llame &#8220;Acciones&#8221;, que tendra como items lo  anteriormente declarado en &#8220;itemsDeAcciones&#8221;</p>
<pre>planilla.addMenu(“Acciones”, itemsDeAcciones);</pre>
<p>Note que revisando las dos lineas que más se parecen, la única diferencia es que la última no termina con una coma (,).</p>
<p>Ahora es turno de escribir las dos nuevas funciones :</p>
<pre>
<pre>function recordarEmail() {
 var email = Session.getUser().getEmail();
 Browser.msgBox("Tu dirección de email es : " + Session.getUser().getEmail() );
}<span class="js-punctuation"> </span></pre>
</pre>
<p><span class="js-punctuation">En la anterior función, solo reportamos un cuadro de diálogo con </span><span class="js-comment">Browser.msgBox()</span><span class="js-punctuation">, que muestre una leyenda mas tu dirección de correo electrónico<br />
</span></p>
<pre>
<pre>function pedirNacionalidad() {
 var nacion = Browser.inputBox("Indique su Nacionalidad:");
 Browser.msgBox("Gracias, la nacionalidad ingresada fue : " + nacion);
}</pre>
</pre>
<p>Aquí, un cuadro de diálogo con <span class="js-comment">Browser.inputBox() pide que el usuario ingrese un dato, el mismo se guarda en la variable nacion y luego se informa junto a una leyenda para darle sentido.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-cuadros-de-dialogos-pidiendo-e-informando/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Scripts: Creando un Menu de Acciones Personalizado</title>
		<link>http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-creando-un-menu-de-acciones-personalizado/</link>
		<comments>http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-creando-un-menu-de-acciones-personalizado/#comments</comments>
		<pubDate>Mon, 10 May 2010 20:48:38 +0000</pubDate>
		<dc:creator>puentesdiaz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Tecnología IT]]></category>

		<guid isPermaLink="false">http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-creando-un-menu-de-acciones-personalizado/</guid>
		<description><![CDATA[Para empezar con un ejemplo simple, lo mejor es hacerlo también con uno que nos sirva para el resto de los ejemplos. En esta primera oportunidad, crearemos una opción más para el MENU. Vamos al editor, y en el cuerpo &#8230; <a href="http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-creando-un-menu-de-acciones-personalizado/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><span class="js-keyword">Para empezar con un ejemplo simple, lo mejor es hacerlo también con uno que nos sirva para el resto de los ejemplos.</span></p>
<p>En esta primera oportunidad, crearemos una opción más para el MENU.</p>
<p>Vamos al editor, y en el cuerpo del mismo pegamos este código:</p>
<pre>function <span class="js-variable">onOpen</span><span class="js-punctuation">(</span><span class="js-punctuation">) </span><span class="js-punctuation">{</span>
<span class="whitespace"> </span><span class="whitespace"> </span><span class="js-keyword">var </span><span class="js-variabledef">planilla </span><span class="js-operator">= </span><span class="js-variable">SpreadsheetApp</span><span class="js-punctuation">.</span><span class="js-property">getActiveSpreadsheet</span><span class="js-punctuation">(</span><span class="js-punctuation">)</span><span class="js-punctuation">;</span><span class="whitespace">
</span><span class="js-keyword">  var </span>itemsDeAcciones<span class="js-operator">= </span><span class="js-punctuation">[ </span><span class="js-punctuation">
    {</span><span class="js-property">name</span><span class="js-punctuation">: </span><span class="js-string">"Primera Accion"</span><span class="js-punctuation">, </span><span class="js-property">functionName</span><span class="js-punctuation">: </span><span class="js-string">"primerAccion"</span><span class="js-punctuation">}</span><span class="js-punctuation">,</span><span class="whitespace">
    </span><span class="js-punctuation">{</span><span class="js-property">name</span><span class="js-punctuation">: </span><span class="js-string">"Segunda Accion"</span><span class="js-punctuation">, </span><span class="js-property">functionName</span><span class="js-punctuation">: </span><span class="js-string">"</span><span class="js-string">segundaAccion</span><span class="js-string">"</span><span class="js-punctuation">}</span><span class="js-punctuation">,</span><span class="whitespace">
    </span><span class="js-punctuation">{</span><span class="js-property">name</span><span class="js-punctuation">: </span><span class="js-string">"Tercera Accion"</span><span class="js-punctuation">, </span><span class="js-property">functionName</span><span class="js-punctuation">: </span><span class="js-string">"</span><span class="js-string">terceraAccion</span><span class="js-string">"</span><span class="js-punctuation">}</span><span class="js-punctuation">
  ]</span><span class="js-punctuation">;</span>
<span class="whitespace">  </span>planilla<span class="js-punctuation">.</span><span class="js-property">addMenu</span><span class="js-punctuation">(</span><span class="js-string">"Acciones"</span><span class="js-punctuation">, </span>itemsDeAcciones<span class="js-punctuation">)</span><span class="js-punctuation">;</span><span class="whitespace"></span>
<span class="js-punctuation">}</span></pre>
<p>Guardamos el anterior script ( MENU ARCHIVO &gt; GUARDAR ), y seguramente nos preguntara que nombre le daremos al archivo. De ustedes depende.</p>
<p>Cerramos el editor, y recargamos nuestra planilla de calculo.</p>
<p>Notarán al cabo de unos segundo un MENU ACCIONES, al lado de AYUDA.</p>
<p>¡Felicitaciones! han logrado pasar el primer tutorial.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-creando-un-menu-de-acciones-personalizado/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Scripts : Programando Facil una Planilla de Cálculo</title>
		<link>http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-programando-facil-una-planilla-de-calculo/</link>
		<comments>http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-programando-facil-una-planilla-de-calculo/#comments</comments>
		<pubDate>Mon, 10 May 2010 20:33:39 +0000</pubDate>
		<dc:creator>puentesdiaz</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-programando-facil-una-planilla-de-calculo/</guid>
		<description><![CDATA[Desde Google Docs, la empresa de la gran G, nos brinda una suite de soluciones increíbles e impensadas hasta hace poco. Tener una herramienta de ofimática colaborativa a costo de una conexión de Internet, parece ser el sueño de todo &#8230; <a href="http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-programando-facil-una-planilla-de-calculo/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Desde Google Docs, la empresa de la gran G, nos brinda una suite de soluciones increíbles e impensadas hasta hace poco. Tener una herramienta de ofimática colaborativa a costo de una conexión de Internet, parece ser el sueño de todo apasionado por la tecnología, sea un avanzado usuario o un interesado casual.</p>
<p>Ahora tenemos la posibilidad de agregar funcionalidades a nuestras planillas, al mejor estilo de los programadores.</p>
<p><a href="http://www.google.com/google-d-s/scripts/scripts.html" target="_blank">GOOGLE APPS SCRIPTS</a>, en adelante Google Scripts o GS, nos ofrece la oportunidad de crear soluciones para las mas diversas de nuestras necesidades. Y lo mejor de todo es que Google, sigue mejorando día a día esta tecnología. El lenguaje para aprovechar el poder ofrecido por la API de Google es, JAVASCRIPT. Un viejo amigo de los programadores y diseñadores web desde hace más de una década. Un poco olvidado en una época, pero resurgido de las cenizas con toda la movida de las Web 2.0, y navegadores web mas poderosos, como nuestro querido Mozilla Firefox. En la web, hay tutoriales a montones de como aprender esta tecnología.</p>
<p>Para empezar con ejemplos, suponemos que tenemos establecido al español nuestro perfil, y que para acceder al editor de javascript, usamos el menú HERRAMIENTAS &gt; SECUENCIAS DE COMANDOS &gt; EDITOR DE SECUENCIAS DE COMANDOS &#8230;</p>
<p>Vamos a establecer una lista de accesos a los ejemplos ahora mismo para los mas ansiosos:</p>
<p>1) <a href="http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-creando-un-menu-de-acciones-personalizado/" target="_blank">Creando un Menú de Acciones Personalizado</a><br />
2) <a href="http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-cuadros-de-dialogos-pidiendo-e-informando/" target="_blank">Cuadro de Dialogo: Pidiendo e Informando</a><br />
3) <a href="http://blog.puentesdiaz.com.ar/2010/05/11/google-scripts-dando-valor-a-un-rango-de-celdas/" target="_blank">Dando valor a un Rango de Celdas</a><br />
4) Conociendo quienes somos<br />
5)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2010/05/10/google-scripts-programando-facil-una-planilla-de-calculo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 6: Que hay de nuevo</title>
		<link>http://blog.puentesdiaz.com.ar/2010/04/01/php-6-que-hay-de-nuevo/</link>
		<comments>http://blog.puentesdiaz.com.ar/2010/04/01/php-6-que-hay-de-nuevo/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 13:47:01 +0000</pubDate>
		<dc:creator>puentesdiaz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software Libre]]></category>

		<guid isPermaLink="false">http://blog.puentesdiaz.com.ar/?p=233</guid>
		<description><![CDATA[La llegada de PHP6, esta cerca. La promesa de una mejor POO y el soporte UNICODE, es bien conocido. Con Unicode, tendremos una referencia única a cada caracter, así como una lista mas completa&#8230; mas de 99000. Una de las &#8230; <a href="http://blog.puentesdiaz.com.ar/2010/04/01/php-6-que-hay-de-nuevo/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>La llegada de PHP6, esta cerca. La promesa de una mejor POO y el soporte UNICODE, es bien conocido.</p>
<p>Con Unicode, tendremos una referencia única a cada caracter, así como una lista mas completa&#8230; mas de 99000.</p>
<p>Una de las formas mas populares de apreciar el cambio, es cuando en el resultado del buscador, aparecen caracteres &#8220;raros&#8221; o expresiones en otro idioma, o frases en árabe, chino, etc</p>
<p>Una idea de lo que podremos lograr, es con un ejemplo del Unicode composition, que permitirá crear caracteres nuevos a medida que cada lenguaje o idioma evolucione.</p>
<p><a href="http://i.zdnet.com/blogs/php31.jpg"></a></p>
<div id="attachment_235" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.puentesdiaz.com.ar/files/2010/04/PHP6unicode.jpg"><img class="size-medium wp-image-235" src="http://blog.puentesdiaz.com.ar/files/2010/04/PHP6unicode-300x180.jpg" alt="" width="300" height="180" /></a><p class="wp-caption-text">unicode</p></div>
<p>La internacionalización será mas fácil, y la Transliteración, nos permite escribir en un idioma y convertirlo a otro, para que lo podamos pronunciar sin vergüenza ninguna. Con PHP6, solo lleva un par de lineas de código.</p>
<p><a href="http://blog.puentesdiaz.com.ar/files/2010/04/php6unicode2.jpg"><img class="alignnone size-medium wp-image-236" src="http://blog.puentesdiaz.com.ar/files/2010/04/php6unicode2-300x104.jpg" alt="" width="300" height="104" /></a></p>
<p>El TextIterator es una nueva característica de PHP 6, puedes iterar en cada punto, caracter, palabra o linea, y en ambos sentidos. Y poder cortarlos es mucho más fácil.</p>
<p>El ROADMAP, se esta actualizando pero imagino que pronto tendremos una release de PHP6, aunque ello no impida un PHP5.4</p>
<p>Fuente : http://blogs.zdnet.com/BTL/?p=9313</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2010/04/01/php-6-que-hay-de-nuevo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony 2 para phpBB4</title>
		<link>http://blog.puentesdiaz.com.ar/2010/03/02/symfony-2-para-phpbb4/</link>
		<comments>http://blog.puentesdiaz.com.ar/2010/03/02/symfony-2-para-phpbb4/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 18:00:47 +0000</pubDate>
		<dc:creator>puentesdiaz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Software Libre]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://blog.puentesdiaz.com.ar/?p=224</guid>
		<description><![CDATA[En un reciente articulo de phpBB, se explica el porque se eligió Symfony 2, como base de desarrollo del nuevo phpBB4. Sobre Symfony 2 : http://symfony-reloaded.org Código http://github.com/symfony ¿Qué es Symfony 2? Symfony 2 es una reescritura completa de su &#8230; <a href="http://blog.puentesdiaz.com.ar/2010/03/02/symfony-2-para-phpbb4/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En un reciente articulo de phpBB, se explica el porque se eligió Symfony 2, como base de desarrollo del nuevo phpBB4.</p>
<p>Sobre Symfony 2 : <a title="http://symfony-reloaded.org" rel="nofollow" href="http://symfony-reloaded.org/">http://symfony-reloaded.org<br />
</a>Código <a title="http://github.com/symfony" rel="nofollow" href="http://github.com/symfony">http://github.com/symfony</a></p>
<p><a id="Discussion" name="Discussion"></a></p>
<h2>¿Qué es Symfony 2?</h2>
<p>Symfony 2 es una reescritura completa de su código original, el cual se enfoca en resolver los problemas de las anteriores versiones ( 1.0 a  1.4). Symfony, se convirtió en una herraminta apreciada por la comunidad PHP. Tiene una gran cantidad de plugins que resuelven distintos desafios y promete un mejor uso de los recursos que como lo hacia symfony 1.</p>
<h2>¿Porque Symfony 2 para phpBB4?</h2>
<p>La siguiente lista explica en cada punto las razones. La misma esta basada en los items de los Principios de Programación de phpBB4.</p>
<ul>
<li> <strong>phpBB4</strong>: PHP 5.3+
<ul>
<li> <strong>Symfony 2</strong> fue re-escrito en PHP5.3, consistentemente con el enfoque de phpBB4.</li>
</ul>
</li>
<li> <strong>phpBB4</strong>: Hace uso de namespaces y de la autocarga standar.
<ul>
<li> <strong>Symfony 2</strong> es el primer framework en seguir el autoloading standard de PHP5.3, mejorando la interoperabilidad del proyecto PHP.</li>
</ul>
</li>
<li> <strong>phpBB4</strong>: Código limpio y modular orientado a objetos con clases desacopladas
<ul>
<li> <strong>Symfony 2</strong> es un framework orientado a objetos. De arquitectura simple y fácil API.</li>
</ul>
</li>
<li> <strong>phpBB4</strong>: Los Plugins pueden completamente reemplazar  MODs sin ningun cambio en el código
<ul>
<li> <strong>Symfony 2</strong>: Como se menciono antes Symfony 2 esta en bundles que no necesitan de modificaciones. Symfony 2 hace uso de códifo generado.</li>
</ul>
</li>
<li> <strong>phpBB4</strong>: Usar existentes librerias / frameworks en luhar de reinventar la rueda
<ul>
<li> <strong>Symfony 2</strong>: El uso de un framework como Symfony 2  ya casi permite esto. Además  Symfony 2 digue de cerca al Zend Framework.</li>
</ul>
</li>
<li> <strong>phpBB4</strong>: Fácil integración con software
<ul>
<li> <strong>Symfony 2</strong>: Usando Symfony 2 phpBB4 automaticamente podrá integrarse en un proyecto Symfony cualquiera. El diseño de Symfony 2 también requiere que hagamos phpBB de manera modular,.</li>
</ul>
</li>
<li> <strong>phpBB4</strong>: Escalabilidad (ejecutarse sobre clusters)
<ul>
<li> <strong>Symfony 2</strong>: Symfony tiene una historia de ejecutar grandes services, y Symfony 2 esta diseñado para la alta performance.</li>
</ul>
</li>
<li> <strong>phpBB4</strong>: Consistente con el uso de Dependency Injection
<ul>
<li> <strong>Symfony 2</strong> esta construido alrededor de un Dependency  Injection Container, usando Dependency Injection por todos lados.</li>
</ul>
</li>
<li> <strong>phpBB4</strong>: Pruebas automatizadas: Pruebas Unitarias,  integración de pruebas y pruebas funcionales con PHPUnit, Selenium
<ul>
<li> <strong>Symfony 2</strong> tiene ya las pruebas automatizadas y permite a los proyectos usar cualquier framework de pruebas.</li>
</ul>
</li>
<li> <strong>phpBB4</strong>: Un framework de desarrollo para phpBB (hacer  aplicaciones basadas en phpBB, estandarizar nuestro framework en una libreria)
<ul>
<li> <strong>Symfony 2</strong> es un framework y tiene mas sentido que hacer uno específico para phpBB. Partes de phpBB serán reusables.</li>
</ul>
</li>
</ul>
<p>Es absolutamente asombroso como Symfony 2 coincide con los requisitos de phpBB4.</p>
<p><a id="What_else_can_Symfony_2_give_us.3F" name="What_else_can_Symfony_2_give_us.3F"></a></p>
<h2>¿Que otra cosa puede Symfony 2 dar?</h2>
<p>Ya que su comunidad es muy grande, podemos contar con mas desarrolladores y mas aportes. Los clientes necesitan una integración de un foro dentro de un proyecto Symfony y es problema común para los programadores. En vez de crear un propio, se puede usar phpBB integrado. Los desarrolladores con esta necesidad pueden ayudar a phpBB.</p>
<p>Para conocer mas <a title="http://symfony-reloaded.org" rel="nofollow" href="http://symfony-reloaded.org/">http://symfony-reloaded.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2010/03/02/symfony-2-para-phpbb4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Declaraciones, Redes Sociales, y Comisión de Informática CPCECBA</title>
		<link>http://blog.puentesdiaz.com.ar/2010/01/19/declaraciones-redes-sociales-y-comision-de-informatica-cpcecba/</link>
		<comments>http://blog.puentesdiaz.com.ar/2010/01/19/declaraciones-redes-sociales-y-comision-de-informatica-cpcecba/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 12:18:04 +0000</pubDate>
		<dc:creator>puentesdiaz</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Sociedad]]></category>

		<guid isPermaLink="false">http://blog.puentesdiaz.com.ar/?p=186</guid>
		<description><![CDATA[Pocas veces me encontré con dificultades para empezar a escribir un artículo en este Blog. Rapidamente me doy cuenta que la causa del mismo, es simplemente un triste hecho, ajeno a mis intereses y pensamientos, los cuales dependiendo del tiempo &#8230; <a href="http://blog.puentesdiaz.com.ar/2010/01/19/declaraciones-redes-sociales-y-comision-de-informatica-cpcecba/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pocas veces me encontré con dificultades para empezar a escribir un artículo en este Blog. Rapidamente me doy cuenta que la causa del mismo, es simplemente un triste hecho, ajeno a mis intereses y pensamientos, los cuales dependiendo del tiempo encuentran espacio en este Blog.</p>
<p>Desde hace un año, soy Presidente de la <strong>Comisión de Informática del Consejo Profesional de Ciencias Económicas de Córdoba</strong>. En dicha comisión se tratan temas de distinta índole informática y tecnológica. Se realizan eventos de alcance púbico, como lo fue la Conferencia-Debate Voto Electrónico. Personalmente, promuevo el software libre en la comisión, y debo decir que ya somos mayoría. Estamos asistiendo con consejos y trabajo gustosamente a otras comisiones del consejo, pues el trabajo conjunto y la buena fe, logran cosas que valen la pena luego declarar. La libertad de las ideas, es una premisa, aunque reconozco ser un verdadero cabeza dura en algunos temas, pero contar con profesionales en esta comisión, a sido motivo para  establecer verdaderas amistades.</p>
<p>Como dije, el software libre, es un tema primordial para mi trabajo en la comisión. Como sabrán seguramente, una de las garantías de estas libertades es similar a otros escritos. No se puede discriminar por el color, raza, país, preferencia sexual o religiosa, etc. a las personas en el uso del software.</p>
<p>Dicho esto, y considerando la diferencia existente entre la violación de una licencia, y la vida de una persona, es que ayer por la tarde un miembro de la comisión, me avisa de este <a href="http://www.lavoz.com.ar/10/01/18/secciones/ciudadanos/nota.asp?Inicio=1&amp;Pagina=9&amp;nota_id=584242" target="_blank">artículo periodístico</a>. El motivo del mismo, originó <a href="http://www.lmcordoba.com.ar/nota.php?ni=1274" target="_blank">otros más</a>.</p>
<p>Al principio, pensamos que se trataba de un ataque a la página de este diario. Sorpresa fue, cuando revise los dichos del VicePresidente de la Comisión, donde soy Presidente&#8230;</p>
<p>Inmediatamente me puse en contacto con el colega, para que me diera alguna explicación que pudiera explicar tales eventos. El colega Ebeling, manifestó su completo arrepentimiento, un arranque sin sentido que no pensó siquiera tuviera mas efecto que la respuesta comprensible de otros usuarios de Facebook.</p>
<p>Imagino que pensó, el colega, estaba en una tribuna de algún estadio de fútbol o en el patio de una escuela primaria. Pero no. El contador estaba muy equivocado. Lo pronunciado, así como el lugar donde lo realizo ( donde se aboga por la vida de un adolescente ) estuvo fuera de lugar. Y como lamentablemente todos sabemos, la palabra dicha es como la piedra lanzada&#8230; no hay forma de evitar el daño que causamos.</p>
<p>Hoy debo decir que el Contador Hugo F. Ebeling, <span style="text-decoration: underline">no ocupa</span> más el cargo de vice presidente de la comisión de informática y lamenta el daño producido a la Comisión, al Consejo, a su familia y allegados. Como también, a las personas que dañaron directamente sus dichos. Esto es a la Comunidad Gay y a la Comunidad Judía.</p>
<p>Esto último es hasta de pronto irrisorio, puesto que hasta no hace mucho tiempo un colega del consejo, miembro de la comunidad judía, fue de los integrantes de la comisión. Y nunca se dio un altercado de esta magnitud. Es más, una de mis pocas contribuciones a Wikipedia, fue en el artículo <a href="http://es.wikipedia.org/w/index.php?title=Pueblo_jud%C3%ADo&amp;action=historysubmit&amp;diff=7208872&amp;oldid=7207701" target="_blank">Pueblo Judío</a>, de los que por cierto me siento ingenuamente orgulloso y algo aprobado por todos los miembros de la comisión.</p>
<p>De plano rechazo los dichos publicados en Facebook, un acto a mi entender sin sentido. Del que sé, el contador Hugo Federico Ebeling se arrepiente profundamente.</p>
<p>Como presidente de este grupo de profesionales, envío mis disculpas, a las personas afectadas, como así también a las personas que día a día, trabajan para las minorías, la igualdad de los derechos y en defensa de la memoria. Además como miembro de la comisión de informática ya desde hace algunos años, sé que el contador Ebeling a unas semanas de su retiro, desearía despedirse de la comisión y del consejo, en otros términos. Estoy convencido que su trabajo como profesional siempre ha sido su pasión y que la respuesta por parte de la sociedad le ha pesado a su espíritu.</p>
<p>Seguro es, la tristeza del colega de haber generado tantas reacciones y dejar su lugar en la comisión. Así como yo de haber experimentado tales eventos.</p>
<p style="text-align: right">Cr. Roberto Germán Puentes Diaz<br />
CPCECBA MP 10.12726.9</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2010/01/19/declaraciones-redes-sociales-y-comision-de-informatica-cpcecba/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Rendimiento Symfony = f(ORM)</title>
		<link>http://blog.puentesdiaz.com.ar/2009/10/25/rendimiento-symfony-form/</link>
		<comments>http://blog.puentesdiaz.com.ar/2009/10/25/rendimiento-symfony-form/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 19:07:57 +0000</pubDate>
		<dc:creator>puentesdiaz</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[propel]]></category>
		<category><![CDATA[rendimiento]]></category>

		<guid isPermaLink="false">http://www.puentesdiaz.com.ar/blog/?p=184</guid>
		<description><![CDATA[Bueno siguendo con el tema de rendimiento, esta claro que el ORM, no es un elemento mas de nuestro framework. La encuesta sigue en http://spreadsheets.google.com/viewform?formkey=dFVFLXdBcGNvcFEwdVZmN3ZLU193cmc6MA Como recordaran por el benchmark que comente aqui http://groups.google.com/group/symfony-es/browse_thread/thread/6a6cc2ec5b1d0920/66bdce04bcd7a2b4?hl=en#66bdce04bcd7a2b4 Pronto publicare el resultado de usar &#8230; <a href="http://blog.puentesdiaz.com.ar/2009/10/25/rendimiento-symfony-form/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bueno siguendo con el tema de rendimiento, esta claro que el ORM, no es un elemento mas de nuestro framework.</p>
<p>La encuesta sigue en <a href="http://spreadsheets.google.com/viewform?formkey=dFVFLXdBcGNvcFEwdVZmN3ZLU193cmc6MA" target="_blank">http://spreadsheets.google.com/viewform?formkey=dFVFLXdBcGNvcFEwdVZmN3ZLU193cmc6MA</a></p>
<p>Como recordaran por el benchmark que comente aqui <a href="http://groups.google.com/group/symfony-es/browse_thread/thread/6a6cc2ec5b1d0920/66bdce04bcd7a2b4?hl=en#66bdce04bcd7a2b4" target="_blank">http://groups.google.com/group/symfony-es/browse_thread/thread/6a6cc2ec5b1d0920/66bdce04bcd7a2b4?hl=en#66bdce04bcd7a2b4</a></p>
<p>Pronto publicare el resultado de usar SF1.3+Doctrine2 con el resto de los resultados existentes en  <a href="http://www.puentesdiaz.com.ar/blog/?p=167" target="_blank">http://www.puentesdiaz.com.ar/blog/?p=167</a></p>
<p>Hasta ahora, el ranking del mas veloz, queda así</p>
<p>Symfony 1.3 ALPHA2 + Propel 1.4 BETA</p>
<p>supera a</p>
<p>Symfony 1.3 ALPHA2 + Propel 1.3 Final</p>
<p>supera a</p>
<p>Symfony 1.3 ALPHA2 + Doctrine 1.2 Final</p>
<p>Lo curioso es que Propel sigue siendo mucha mas rápido que Doctrine, e incluso a partir de las modificaciones que tiene PROPEL 1.4&#8230; es aun mas rápido&#8230; mucho mas rápido</p>
<p>Segun me comenta Francois Zaninotto en <a href="http://groups.google.com/group/propel-users/msg/8c512ae7c5f91059?hl=en" target="_blank">http://groups.google.com/group/propel-users/msg/8c512ae7c5f91059?hl=en </a><br />
Si eliminamos los tiempos de carga propios de Symfony, es decir lo ajeno a los ORM. El verdadero rendimiento del ORM, se deja ver. Mostrando un rendimiento de casi el doble del calculado inicialmente.</p>
<p>Una explicaciones la expone aqui<br />
<a href="http://groups.google.com/group/propel-users/msg/e1fa266179ae20da?hl=en" target="_blank">http://groups.google.com/group/propel-users/msg/e1fa266179ae20da?hl=en</a></p>
<p>En pocas palabras, se puede decir que este es otro ejemplo de &#8220;sobreingenieria&#8221;. Doctrine es muy impresionante por todo lo ofrecido. Una fuerte OO, etc.</p>
<p>Sin embargo, la eleccion entre PROPEL y DOCTRINE, se me presenta como otro caso en que debemos determinar donde esta linea. Merece hacer tanta herencia de clases? Hasta cuanto podemos renunciar al rendimiento&#8230;</p>
<p>Hasta ahora la encuesta muestra unos votos a favor de Doctrine&#8230;. Yo por mi parte le doy mi voto a PROPEL</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.puentesdiaz.com.ar/2009/10/25/rendimiento-symfony-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
