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

<channel>
	<title>Plus Global</title>
	<atom:link href="http://www.plusglobal.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.plusglobal.com</link>
	<description>Outsourcing de programación web</description>
	<pubDate>Thu, 11 Mar 2010 21:29:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Short UUID Behavior para CakePHP</title>
		<link>http://www.plusglobal.com/blog/short-uuid-behavior-para-cakephp/</link>
		<comments>http://www.plusglobal.com/blog/short-uuid-behavior-para-cakephp/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 21:29:26 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Frameworks]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programación]]></category>

		<category><![CDATA[Recursos]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=938</guid>
		<description><![CDATA[
Uno de los problemas que tienen los UUID es que pueden resultar demasiado largos para algunas aplicaciones. Aquí veremos un método para reducir los clásicos UUID de 36 caracteres a 25. 
Supongamos que a cada usuario registrado en nuestro sistema le asignamos un UUID, el cual tenemos que incluir en la url para visualizar su [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.flickr.com/photos/rachellake/3655443936/"><img src="http://www.plusglobal.com/wp-content/uploads/2010/03/short-hair.jpg" alt="short-hair" width="578" height="176" class="alignnone size-full wp-image-952" /></a></p>
<p>Uno de los problemas que tienen los <a title="UUID: identificador único universal" href="http://www.plusglobal.com/blog/uuid-identificador-unico-universal/">UUID</a> es que pueden resultar demasiado largos para algunas aplicaciones. Aquí veremos un método para reducir los clásicos UUID de 36 caracteres a 25. </p>
<p><span id="more-938"></span>Supongamos que a cada usuario registrado en nuestro sistema le asignamos un UUID, el cual tenemos que incluir en la url para visualizar su perfil. Esta URL quedaría algo más o menos así: <br /><strong>http://example.com/users/profile/4a3009bd-43f4-4535-ae3e-08a0650df841</strong></p>
<p>Si observamos la composición de un UUID vemos que todos sus caracteres son números hexadecimales (excepto los guiones). Hay muchos caracteres que no están siendo utilizados en esta cadena y si convertimos los números hexadecimales a una base mayor que utilice más caracteres, podríamos reducir la cadena.</p>
<p>PHP tiene una función llamada <a href="http://php.net/base_convert">base_convert</a> que toma tres argumentos: el número a convertir, la base en la que se encuentra dicho número y la base a la cual lo queremos convertir. Si a esta función le pasamos nuestro UUID generado por CakePHP para convertirlo a base 36 (la máxima base que soporta dicha función) y lo pasamos a mayúsculas (sólo para que sea más prolijo), nos queda una cadena de 25 caracteres similar a esta: <strong>4FPTDWER5VQ4G4S408C8O8WO0</strong>. La cadena generada sigue siendo <strong>única</strong> porque el número que representa es el mismo que el UUID original, sólo que está convertido a otra base mayor.</p>
<p>Ahora, para hacer un poco más sencillo el proceso, sería ideal que CakePHP genere automáticamente estos UUID cortos, del mismo modo que los hace con los largos. Si el campo id de una tabla es una cadena de 36 caracteres CHAR(36) o VARCHAR(36), CakePHP genera automáticamente un UUID por cada insert que se hace en la tabla. Con este behavior logramos el mismo comportamiento pero para aquellos campos id que sean cadenas de 25 caracteres. Veamos el código.</p>
<pre class="brush: php">&lt;?php

Class ShortUuidBehavior extends ModelBehavior {

	function setup(&amp;$Model, $settings) {
	}

	function beforeSave(&amp;$Model) {
		if(
			empty($Model-&gt;data[$Model-&gt;alias]['id'])
			and $Model-&gt;_schema['id']['length'] == 25
			and $Model-&gt;_schema['id']['key'] == 'primary'
			and $Model-&gt;_schema['id']['type'] == 'string'
		) {
			$Model-&gt;data[$Model-&gt;alias]['id'] = $this-&gt;_generateShortUUID();
		}
	}

	function _generateShortUUID() {
		$uuid = str_replace('-', '', String::uuid());
		return strtoupper(base_convert($uuid, 16, 36));
	}

}

?&gt;</pre>
<p>Este behavior se puede ubicar dentro de <strong>app_model.php</strong>, ya que sólo afectará a aquellos modelos cuyo <strong>id</strong> sea una cadena de 25 caracteres.</p>
<p><script type="text/javascript" src="http://www.plusglobal.com/syntaxhighlighter/scripts/shCore.js"></script><script type="text/javascript" src="http://www.plusglobal.com/syntaxhighlighter/scripts/shBrushPhp.js"></script><script type="text/javascript">SyntaxHighlighter.config.clipboardSwf = 'http://www.plusglobal.com/syntaxhighlighter/scripts/clipboard.swf'; SyntaxHighlighter.all();</script>
<link type="text/css" rel="stylesheet" href="http://www.plusglobal.com/syntaxhighlighter/styles/shCore.css"/>
<link type="text/css" rel="stylesheet" href="http://www.plusglobal.com/syntaxhighlighter/styles/shThemeDefault.css"/>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/short-uuid-behavior-para-cakephp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ejemplos donde necesitamos usar UUID</title>
		<link>http://www.plusglobal.com/blog/ejemplos-donde-necesitamos-usar-uuid/</link>
		<comments>http://www.plusglobal.com/blog/ejemplos-donde-necesitamos-usar-uuid/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 12:05:45 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=905</guid>
		<description><![CDATA[
Hace unos días vimos qué son y cómo se crean los UUID. Ahora vamos a ver algunos ejemplos donde se hace necesario su uso.

Cantidad de registros potencialmente infinita
MySQL puede guardar números enteros positivos hasta un máximo de 18446744073709551615 (referencia). Si bien es un número realmente grande, es posible que para algunos sistemas no sea suficiente, [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.flickr.com/photos/nickwheeleroz/2212101890/"><img src="http://www.plusglobal.com/wp-content/uploads/2009/12/unique.jpg" alt="unique" title="unique" width="578" height="229" class="alignnone size-full wp-image-920" /></a></p>
<p>Hace unos días vimos qué son y cómo se crean los <a title="UUID: identificador único universal" href="http://www.plusglobal.com/blog/uuid-identificador-unico-universal">UUID</a>. Ahora vamos a ver algunos ejemplos donde se hace necesario su uso.<br />
<span id="more-905"></span><br />
<h2>Cantidad de registros potencialmente infinita</h2>
<p><a href="http://www.mysql.com/">MySQL</a> puede guardar números enteros positivos hasta un máximo de 18446744073709551615 (<a href="http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html">referencia</a>). Si bien es un número realmente grande, es posible que para algunos sistemas no sea suficiente, ya que la cantidad de registros esperados puede ser superior. Los UUID en cambio son virtualmente infinitos.</p>
<h2>Bases de datos distribuidas</h2>
<p>Si una <a title="localidades departamentos y provincias de Argentina" href="http://www.plusglobal.com/blog/base-datos-localidades-departamentos-provincias-argentina/">base de datos</a> recibe muchas consultas y el rendimiento del servidor comienza a verse afectado, puede ser una buena solución separar la base de datos en diferentes servidores para reducir la carga. Si una misma tabla está replicada en diferentes servidores las claves autoincrementales ya no pueden ser utilizadas ya que tendríamos <strong>identificadores</strong> repetidos para diferentes registros.</p>
<h2>Coordinación con servicios externos</h2>
<p>Tenemos una tabla en la cual almacenamos información sobre <a href="http://www.plusglobal.com/blog/cliente-quiere-subir-videos/">vídeos</a> y otra con archivos de audio. En nuestra base de datos sólo guardamos la información relativa a los contenidos (duración, nombre, calidad, etc.). El archivo de audio o vídeo se guarda en un servidor externo por requerimiento del cliente. Este <a title="servidor alojamiento hosting" href="http://www.plusglobal.com/blog/servidor-alojamiento-y-hosting-explicacion-basica/">servidor</a> tiene como política que cada archivo que se aloje debe tener un <strong>identificador</strong> único. Sería muy cómodo para nosotros que el mismo <strong>id</strong> que usamos para los registros propios en nuestras tablas sea el que usamos para el servidor de archivos, pero nuestra información está en diferentes tablas, así que no podemos usar un <strong>id</strong> autoincremental ya que tendríamos claves duplicadas de una tabla a la otra.</p>
<h2>Esconder información</h2>
<p>Un sitio web similar a <a href="http://www.flickr.com">flickr</a> tiene una base de datos de imágenes que el usuario puede navegar libremente. Cada <a title="PNG, GIF o JPG ¿Cuál debo usar?" href="http://www.plusglobal.com/blog/png-gif-jpg-cual-debo-usar/">imagen</a> tiene una página propia y el <strong>id</strong> de dicha <a title="¿Qué es un mapa de bits?" href="http://www.plusglobal.com/blog/que-es-un-mapa-de-bits/">imagen</a> se pasa a través de la url. Un usuario astuto podría notar que estos números son consecutivos y le resultaría relativamente fácil programar un script que descargue todas las <a title="formatos de compresión de imágenes" href="http://www.plusglobal.com/blog/formatos-de-compresion-de-imagenes/">imágenes</a> de nuestro sitio, lo cual va en contra de nuestro objetivo ya que queremos que los usuarios naveguen el sitio para descargarlas.</p>
<p>Un cliente que se preocupa mucho por la imagen de su empresa está recibiendo muy pocos pedidos a través de su sitio de comercio electrónico. Cada pedido recibe un identificador numérico autoincremental. El empresario nos plantea que sus clientes se dan cuenta de que vende poco porque pasan las semanas y los números de pedidos avanzan muy lento, dando la imagen de que su empresa no está funcionando. Esto puede parecer irreal, pero nos ha sucedido una vez. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/ejemplos-donde-necesitamos-usar-uuid/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PNG, GIF o JPG ¿Cuál debo usar?</title>
		<link>http://www.plusglobal.com/blog/png-gif-jpg-cual-debo-usar/</link>
		<comments>http://www.plusglobal.com/blog/png-gif-jpg-cual-debo-usar/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 21:40:01 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Diseño]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=869</guid>
		<description><![CDATA[
Los formatos de imágenes más populares para el desarrollo web son JPG, GIF y PNG. A continuación veremos las características básicas de cada uno de estos formatos de mapas de bits y en qué situaciones conviene utilizar cada uno.

JPG
Es el formato más utilizado y conocido, lo implementa la mayoría de las cámaras digitales y sitios [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.flickr.com/photos/seandreilinger/426369452/"><img src="http://www.plusglobal.com/wp-content/uploads/2009/11/discussion-of-big-sticks.jpg" alt="discussion-of-big-sticks" width="578" height="194" class="alignnone size-full wp-image-871" /></a></p>
<p>Los <strong>formatos de imágenes</strong> más populares para el <a title="outsourcing de desarrollo web" href="http://www.plusglobal.com">desarrollo web</a> son <strong>JPG</strong>, <strong>GIF</strong> y <strong>PNG</strong>. A continuación veremos las características básicas de cada uno de estos formatos de <a title="que es un mapa de bits" href="http://www.plusglobal.com/blog/que-es-un-mapa-de-bits/">mapas de bits</a> y en qué situaciones conviene utilizar cada uno.<br />
<span id="more-869"></span></p>
<h2>JPG</h2>
<p>Es el formato más utilizado y conocido, lo implementa la mayoría de las cámaras digitales y sitios web. </p>
<p>La principal ventaja del <strong>JPG</strong> es que permite establecer un porcentaje que determina el peso y la calidad de la imagen. </p>
<p>El <a title="compresión de imágenes" href="http://www.plusglobal.com/blog/el-origen-de-la-compresion-de-imagenes/">método de compresión</a> del JPG se basa en tomar áreas contiguas de una imagen y almacenarlas en conjunto. Esto hace que la diferencia de calidad sea prácticamente imperceptible en fotos con enorme cantidad de colores, pero a la vez genera problemas de visualización si la imagen tiene textos, líneas muy definidas o fondos plenos.</p>
<p>La siguiente imagen está al 50%. Notamos claramente que la foto de la izquierda se ve con <a title="calidad en desarrollo web" href="http://www.plusglobal.com/desarrollo-de-calidad/">calidad</a> aceptable, mientras los fondos plenos de las otras dos imágenes sufren ciertas distorsiones, especialmente en los límites con otros colores.</p>
<p><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/sample.jpg" alt="sample" width="578" height="186" class="alignnone size-full wp-image-858" /><br />
<small>Ejemplo de JPG. Tamaño del archivo: 30 KB</small></p>
<p>Más sobre JPG: <a href="http://es.wikipedia.org/wiki/Joint_Photographic_Experts_Group">http://es.wikipedia.org/wiki/Joint_Photographic_Experts_Group</a></p>
<h2>GIF</h2>
<p>Los archivos <strong>GIF</strong> permiten un máximo de 256 colores, así que resulta claro que no son lo ideal para fotos o imágenes muy coloridas. La idea básica detrás del <a href="http://www.plusglobal.com/blog/el-origen-de-la-compresion-de-imagenes/">algoritmo de compresión</a> del GIF es almacenar los códigos de color y las posiciones que ocupan dentro de la imagen. </p>
<p>Como ventaja podemos decir que se puede determinar la cantidad de colores máxima de un archivo <strong>GIF</strong>, logrando de esa manera controlar el peso. También es destacable el hecho de que permite transparencias y animaciones sencillas.</p>
<p>Por sus características este formato es bueno para <strong>fondos de color pleno</strong> y <strong>textos bien definidos</strong>. </p>
<p>Aquí están las mismas imágenes de antes guardadas en un archivo GIF de 32 colores. Vemos que en todos los lugares donde hay muchos colores o gradientes la calidad es pobre.</p>
<p><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/sample.gif" alt="sample" width="578" height="186" class="alignnone size-full wp-image-859" /><br />
<small>Ejemplo de GIF. Tamaño del archivo: 23 KB</small></p>
<p>Más sobre GIF: <a href="http://es.wikipedia.org/wiki/Graphics_Interchange_Format">http://es.wikipedia.org/wiki/Graphics_Interchange_Format</a></p>
<h2>PNG</h2>
<p>Debido a que el GIF fue hasta hace poco un formato patentado y toda empresa que lo utilizaba debía pagar, se decidió desarrollar un formato que fuera libre y así nació el <strong>PNG</strong>. El éxito fue rotundo ya que no sólo lograron un formato gratuito sino que mejoraron con creces todas las limitaciones y problemas del GIF, como por ejemplo el soporte para transparencias (que en GIF es bastante limitado) o la abolición del límite en la cantidad de colores.</p>
<p><strong>PNG</strong> evolucionó al punto de que permite guardar imágenes con excelente calidad en un mismo archivo donde se encuentran colores plenos y líneas definidas junto con fotos de enorme cantidad de colores.</p>
<p>Sin embargo, el peso de los archivos no es el ideal cuando se trata de imágenes con mucha cantidad de colores, como podemos ver en los ejemplos presentados. </p>
<p><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/sample.png" alt="sample" width="578" height="186" class="alignnone size-full wp-image-861" /><br />
<small>Ejemplo de PNG. Tamaño del archivo: 116 KB</small></p>
<p>Más sobre PNG: <a href="http://es.wikipedia.org/wiki/Portable_Network_Graphics">http://es.wikipedia.org/wiki/Portable_Network_Graphics</a></p>
<h2>Conclusiones</h2>
<p><strong>PNG</strong> sirve para cualquier tipo de imágenes, pero conviene utilizarlo sólo cuando haya <strong>fondos plenos y líneas muy definidas</strong>, de lo contrario el peso del archivo se elevará demasiado.</p>
<p><strong>GIF</strong> sólo se debería utilizar en el caso en que necesitemos <strong>animaciones simples</strong>, ya que en todos los demás aspectos es ampliamente superado por el PNG.</p>
<p><strong>JPG</strong> debe usarse en las imágenes que tienen muchos colores y gradientes, como <strong>fotografías reales o ilustraciones muy elaboradas</strong>.</p>
<p>Volvemos a mostrar las 3 imágenes juntas así las puedes comparar y notar las diferencias.</p>
<h3>JPG</h3>
<p><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/sample.jpg" alt="sample" width="578" height="186" class="alignnone size-full wp-image-858" /></p>
<h3>GIF</h3>
<p><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/sample.gif" alt="sample" width="578" height="186" class="alignnone size-full wp-image-859" /></p>
<h3>PNG</h3>
<p><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/sample.png" alt="sample" width="578" height="186" class="alignnone size-full wp-image-861" /></p>
<p><small><a href="http://www.flickr.com/photos/c-reel/293817057">Foto</a> por <a href="http://www.flickr.com/photos/c-reel/">c-reel</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/png-gif-jpg-cual-debo-usar/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Formatos de compresión de imágenes</title>
		<link>http://www.plusglobal.com/blog/formatos-de-compresion-de-imagenes/</link>
		<comments>http://www.plusglobal.com/blog/formatos-de-compresion-de-imagenes/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 16:43:17 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Diseño]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=835</guid>
		<description><![CDATA[
En el diseño de sitios de Internet los formatos de imágenes más utilizados siempre fueron mapas de bits. Sin embargo, los primeros que se crearon (el más famoso de ellos es el BMP de Windows) tienen serias desventajas, siendo la principal de ellas el peso de los archivos que hace que sean muy poco prácticas [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/nilsensbilder/2431432071/"><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/flower.jpg" alt="flower" width="578" height="239" class="alignnone size-full wp-image-836" /></a></p>
<p>En el diseño de <a href="http://www.plusglobal.com">sitios de Internet</a> los <strong>formatos de imágenes</strong> más utilizados siempre fueron <a title="que es un mapa de bits" href="http://www.plusglobal.com/blog/que-es-un-mapa-de-bits/">mapas de bits</a>. Sin embargo, los primeros que se crearon (el más famoso de ellos es el <a href="http://es.wikipedia.org/wiki/Windows_bitmap">BMP</a> de Windows) tienen serias desventajas, siendo la principal de ellas el peso de los archivos que hace que sean muy poco prácticas para transferencias vía web.</p>
<p><span id="more-835"></span>Un mapa de bits representa cada píxel con un número, y cada número ocupa cierta cantidad de memoria. No pasó mucho tiempo hasta que alguien notó que es altamente probable que en una misma imagen muchos colores se repitan. Por ejemplo, en la foto que ilustra este post, un <strong>formato sin compresión</strong> guarda el número del color negro tantas veces como píxeles en negro hay en la <strong>imagen</strong>. </p>
<p>Entonces la idea fue <strong>comprimir la imagen</strong>: en vez de guardar millones de veces el mismo número representando el mismo color, se guarda el código de color una sola vez junto con información adicional de cómo distribuir o utilizar ese color a lo largo de toda la imagen. De esta manera, el peso de los archivos disminuye enormemente y se pueden transferir por Internet con facilidad. </p>
<h2>Pérdida de información</h2>
<p>Con el tiempo aparecieron nuevas formas de <strong>comprimir las imágenes</strong>. Una de las ideas surgidas fue eliminar información que no fuera percibida por el ojo humano y de esa manera hacer más liviano el archivo. Así nacen los <strong><a href="http://es.wikipedia.org/wiki/Algoritmo_de_compresi%C3%B3n_con_p%C3%A9rdida">algoritmos de compresión con pérdida</a></strong>, ya que la imagen en el nuevo formato tiene menos detalle que la imagen original. Sin embargo, el beneficio que aporta tener un peso del archivo muy inferior, es mucho mayor que el perjuicio de la información que se pierde.</p>
<h2>Evolución</h2>
<p>Cada vez son más complejos los <strong>algoritmos de compresión de imágenes</strong> llegando al desarrollo de programas prácticamente imposible de entender para cualquier mortal. Estas técnicas se aplicaron en el <a href="http://www.plusglobal.com/blog/cliente-quiere-subir-videos/">video</a> digital, logrando reducir considerablemente el peso de los archivos también en estos <strong>formatos</strong>. </p>
<p>Igualmente, la idea básica es la misma, reducir el peso de los archivos mediante aplicación de fórmulas matemáticas complejas. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/formatos-de-compresion-de-imagenes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Revisión del libro &#8220;Métodos ágiles&#8221;</title>
		<link>http://www.plusglobal.com/blog/revision-libro-metodos-agiles/</link>
		<comments>http://www.plusglobal.com/blog/revision-libro-metodos-agiles/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 17:03:48 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Libros]]></category>

		<category><![CDATA[Metodologías ágiles]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=683</guid>
		<description><![CDATA[
Las metodologías ágiles se están imponiendo con fuerza en la industria del software, y más aún en el desarrollo web. Este libro intenta explicar las bases teóricas de esta nueva forma de trabajo.

La primera mitad de la obra se desperdicia en recopilar y listar enorme cantidad de metodologías, casi todas poco conocidas y tradicionales (es [...]]]></description>
			<content:encoded><![CDATA[<p><a class="thickbox" href="http://www.plusglobal.com/wp-content/uploads/2009/09/metodos-agiles.jpg"><img src="http://www.plusglobal.com/wp-content/uploads/2009/09/_metodos-agiles.jpg" alt="_metodos-agiles" width="578" height="97" class="alignnone size-full wp-image-746" /></a></p>
<p>Las <strong>metodologías ágiles</strong> se están imponiendo con fuerza en la industria del software, y más aún en el <a title="" href="http://www.plusglobal.com/outsourcing-de-programacion-web/">desarrollo web</a>. Este libro intenta explicar las bases teóricas de esta nueva forma de trabajo.<br />
<span id="more-683"></span><br />
La primera mitad de la obra se desperdicia en recopilar y listar enorme cantidad de <strong>metodologías</strong>, casi todas poco conocidas y tradicionales (es decir, no <strong>ágiles</strong>), con la idea de que así se comprenderán mejor los <strong>métodos ágiles</strong> planteados posteriormente.</p>
<p>En la segunda mitad encontramos dos capítulos dedicados exclusivamente al propósito del libro, uno habla sobre <strong><a href="http://www.extremeprogramming.org/">Extreme programming</a></strong> y el otro sobre <strong><a href="http://www.scrumalliance.org/">Scrum</a></strong>. Ambos están bastante detallados en sus explicaciones, pero carecen de ejemplos concretos que ayuden al lector a comprender el tema. Sólo cuando se habla de Scrum hay un intento de ejemplo práctico, pero poco satisfactorio.</p>
<p>No voy a negar que después de haberlo leído completo, uno se acerca un poco más a la comprensión cabal de qué son las <strong>metodologías ágiles</strong>, pero realmente no encuentro que el libro brinde herramientas para comenzar a aplicar inmediatamente. </p>
<p>Un aspecto positivo, es la cantidad de enlaces a websites y blogs relacionados. La sección de bibliografía consultada también es un buen punto de partida para comenzar a estudiar el tema con mayor profundidad.</p>
<h2>Ficha técnica</h2>
<p><strong>Título</strong>: <a href="http://www.redusers.com/lpcu165">Métodos ágiles</a><br />
<strong>Autor</strong>: Sebastián Priolo<br />
<strong>Editorial</strong>: <a href="http://www.redusers.com/">Users</a><br />
<strong>Publicado</strong>: 2009<br />
<strong>Idioma</strong>: Español<br />
<strong>Páginas</strong>: 336<br />
<strong>ISBN</strong>: 978-987-1347-97-1</p>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/revision-libro-metodos-agiles/feed/</wfw:commentRss>
		</item>
		<item>
		<title>UUID: identificador único universal</title>
		<link>http://www.plusglobal.com/blog/uuid-identificador-unico-universal/</link>
		<comments>http://www.plusglobal.com/blog/uuid-identificador-unico-universal/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 08:10:36 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=911</guid>
		<description><![CDATA[
Es una práctica muy extendida en el diseño de base de datos crear un campo llamado id y determinarlo como clave primaria de la tabla. Generalmente dicho campo es un número entero y autoincremental, es decir, el motor de la base de datos se encarga de incrementar dicho número a medida que se van agregando [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.flickr.com/photos/dg_pics/2509259255/"><img src="http://www.plusglobal.com/wp-content/uploads/2009/11/universe1.jpg" alt="universe1" title="universe1" width="578" height="178" class="alignnone size-full wp-image-926" /></a></p>
<p>Es una práctica muy extendida en el diseño de <a title="Base de datos de localidades, departamentos y provincias de Argentina" href="http://www.plusglobal.com/blog/base-datos-localidades-departamentos-provincias-argentina/">base de datos</a> crear un campo llamado <strong>id</strong> y determinarlo como clave primaria de la tabla. Generalmente dicho campo es un número entero y autoincremental, es decir, el motor de la base de datos se encarga de incrementar dicho número a medida que se van agregando registros.</p>
<p>Sin embargo, hay algunos casos en los que no es posible utilizar números enteros decimales autoincrementales como clave primaria. Para esos casos existe una solución efectiva y práctica: el <strong>identificador único universal</strong>.</p>
<p><span id="more-911"></span>Un <strong>UUID</strong> (Universally Unique Identifier) es una sucesión de 5 números hexadecimales separados por guiones. Estos son algunos ejemplos:</p>
<blockquote><p>
4a3000fc-38e0-4e14-8cd4-08a0650df841<br />
4a2ff7d4-dc50-4223-a7f0-08a0650df841<br />
4a301d63-b540-4e7f-a160-08a0650df841
</p></blockquote>
<p>Los <strong>UUID</strong> tienen características fundamentales que los hacen realmente útiles:</p>
<h2>1. Son universalmente únicos</h2>
<p>La forma en que se generan hace que sea imposible que haya dos <strong>UUID</strong> iguales en cualquier sistema que se haga o se haya hecho. Para crear un <strong>UUID</strong> se tienen en cuenta datos del <a title="Servidor, alojamiento y hosting: explicación básica" href="http://www.plusglobal.com/blog/servidor-alojamiento-y-hosting-explicacion-basica/">servidor</a> o equipo que lo genera, números aleatorios y la hora actual en microsegundos. Por lo tanto, para que haya dos <strong>UUID</strong> iguales tendría que suceder que sean generados por el mismo hardware, dentro del mismo microsegundo y, además, que los números aleatorios elegidos sean iguales. La probabilidad de colisión no es cero, pero casi.</p>
<h2>2. El algoritmo de generación es muy rápido</h2>
<p>Generar un <strong>UUID</strong> prácticamente no tiene costo para el rendimiento del sistema. Otros métodos de generación aleatoria de cadenas deben verificar que dicha cadena no haya sido utilizada ya por el sistema, lo que implica lectura en base de datos, posiblemente más de una vez. </p>
<h2>3. Está compuesto por números hexadecimales</h2>
<p>Esto hace que sean sencillos de almacenar en formato de cadena o binario y también son fáciles de transmitir por Internet o pasar como parámetro por url. Se puede reducir su tamaño llevándolo a <a href="http://es.wikipedia.org/wiki/Sistema_alfanum%C3%A9rico">base 36</a> o <a href="http://es.wikipedia.org/wiki/Base64">base 64</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/uuid-identificador-unico-universal/feed/</wfw:commentRss>
		</item>
		<item>
		<title>¿Qué es un mapa de bits?</title>
		<link>http://www.plusglobal.com/blog/que-es-un-mapa-de-bits/</link>
		<comments>http://www.plusglobal.com/blog/que-es-un-mapa-de-bits/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 08:24:40 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Diseño]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=829</guid>
		<description><![CDATA[
En los comienzos de la computación los ordenadores sólo podían procesar números y texto. Cada letra de un alfabeto tiene su correspondiente número binario que la representa. Con el tiempo y los avances de la informática se encontraron maneras de utilizar esos números para representar imágenes. 
A nivel básico, una de las primeras ideas que [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/pixeles.png" alt="pixeles" title="pixeles" width="578" height="183" class="alignnone size-full wp-image-830" /></p>
<p>En los comienzos de la computación los ordenadores sólo podían procesar números y texto. Cada letra de un alfabeto tiene su correspondiente número binario que la representa. Con el tiempo y los avances de la informática se encontraron maneras de utilizar esos números para <strong>representar imágenes</strong>. </p>
<p><span id="more-829"></span>A nivel básico, una de las primeras ideas que surgió fue la creación de una imagen que se <strong>dibuje punto por punto</strong>, uno a continuación del otro (a cada uno de esos puntos lo llamamos <strong>píxel</strong>). Como el ojo humano no distingue esa separación entre puntos, a la distancia se ve como una imagen completa. Cada uno de esos puntos representa un color y está guardado entro de la imagen como un número. </p>
<p>La foto que aparece en la cabecera es un ejemplo para comprender un poco mejor la idea. Alí vemos un <strong>acercamiento a nivel píxel</strong> de un fragmento muy pequeño de la imagen.</p>
<p>Además de los números que representan cada color, tenemos otros factores que influyen en la generación de la imagen. Uno de ellos es la <strong>cantidad de píxeles</strong> que tendrá de ancho y de alto. Otro se refiere al <strong>tamaño del número que representa cada color</strong>, cuanto mayor es dicho número, más cantidad de colores se pueden representar, pero más pesa el archivo.</p>
<p>En el <a title="outsourcing de desarrollo web" href="http://www.plusglobal.com">desarrollo web</a> casi todas las imágenes que se usan son <strong>mapas de bits</strong>, pero el procesamiento que tienen es un poco más complejo que una simple sucesión de números. En próximos artículos explicaremos las ideas básicas de los formatos de compresión de imágenes y cómo se utilizan estos números para guardar colores.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/que-es-un-mapa-de-bits/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Libro &#8220;Getting Real&#8221; (Haciéndolo Real)</title>
		<link>http://www.plusglobal.com/blog/revision-libro-getting-real-haciendolo-real/</link>
		<comments>http://www.plusglobal.com/blog/revision-libro-getting-real-haciendolo-real/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 08:40:53 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Libros]]></category>

		<category><![CDATA[Metodologías ágiles]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=717</guid>
		<description><![CDATA[
37signals es una empresa de desarrollo de aplicaciones web responsable de varios productos que revolucionaron el mercado del Project management y se convirtieron en éxito en ventas. Además son los creadores de Ruby on Rails, un framework de desarrollo rápido de aplicaciones web que también trajo importantes avances y aportes al mundo del web development. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/getting-real.jpg" alt="getting-real" title="getting-real" width="578" height="203" class="alignnone size-full wp-image-807" /></p>
<p><a href="http://37signals.com">37signals</a> es una empresa de <a href="http://www.plusglobal.com">desarrollo de aplicaciones web</a> responsable de varios productos que revolucionaron el mercado del Project management y se convirtieron en éxito en ventas. Además son los creadores de <a href="http://rubyonrails.org/">Ruby on Rails</a>, un <a title="que es un framework" href="http://www.plusglobal.com/blog/agiliza-tu-trabajo-con-un-framework/">framework</a> de desarrollo rápido de aplicaciones web que también trajo importantes avances y aportes al mundo del web development. En este libro 37signals nos da muchos consejos de utilidad para quienes estén interesados en producir y comercializar aplicaciones web.</p>
<p><span id="more-717"></span>Pocas veces he leído un libro tan claro y que va directo al punto. Esta gente no se anda con vueltas y dice sus opiniones sin anestesia, incluso con un tono pedante y agresivo, lo cual aporta un condimento aún más atractivo. </p>
<p>Devoré el libro en sólo un fin de semana y disfruté mucho su lectura. No voy a hacer un comentario detallado de sus contenidos porque sería como arruinar una buena película. </p>
<h2>Público objetivo</h2>
<p><strong>Getting Real</strong> está destinado a <a href="http://www.plusglobal.com/outsourcing-de-programacion-web/">desarrolladores</a> que se dedican a la producción y comercialización de aplicaciones web. Si bien muchos consejos sirven para mejorar el desarrollo de aplicaciones para terceros, la idea principal es ayudarte a que lances tu propia aplicación web y la comercialices y promociones tú mismo.</p>
<p>En mi opinión, para poder aplicar los conceptos que el libro expresa, se necesita de grupos de trabajo pequeños, altamente capacitados y con <a title="calidad en desarrollo web" href="http://www.plusglobal.com/desarrollo-de-calidad/">talento</a>. Si uno cuenta con un staff que no está lo suficientemente calificado (ya sea por inexperiencia, ineptitud o falta de voluntad) entonces probablemente sea necesario atenerse a las metodologías tradicionales que mantienen a todos controlados.</p>
<h2>Conclusión</h2>
<p>Si estás dentro del público objetivo del libro, ve ya mismo a leerlo, tienen una versión online gratuita y puedes comprar el <strong>PDF</strong>.</p>
<h2>Ficha técnica</h2>
<p><strong>Título</strong>: <a href="http://gettingreal.37signals.com/">Getting Real</a><br />
<strong>Autor</strong>: <a href="http://37signals.com/">37signals</a><br />
<strong>Publicado</strong>: 2006<br />
<strong>Idioma</strong>: Inglés (también hay una <a href="http://gettingreal.37signals.com/GR_esp.php">versión en español</a>)<br />
<strong>Paginas</strong>: 193<br />
<strong>ISBN</strong>: 978-0-578-01281-0</p>
<h2>Otras revisiones</h2>
<ul>
<li><a href="http://epistemologic.com/2006/01/27/yet-another-getting-real-review/">Yet another Getting Real review (Amit Rathore)</a></li>
<li><a href="http://madskristensen.net/post/Book-review-Getting-Real-by-37signals.aspx">Book review: Getting Real by 37signals (Mads Kristensen)</a></li>
<li><a href="http://www.scottsavage.net/2009/07/review-getting-real-by-37signals/">Review: Getting Real by 37Signals (Scott Savage)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/revision-libro-getting-real-haciendolo-real/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Servidor, alojamiento y hosting: explicación básica</title>
		<link>http://www.plusglobal.com/blog/servidor-alojamiento-y-hosting-explicacion-basica/</link>
		<comments>http://www.plusglobal.com/blog/servidor-alojamiento-y-hosting-explicacion-basica/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 19:00:06 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=788</guid>
		<description><![CDATA[
¿Cómo funciona Internet? ¿Cómo se hace para poner un sitio web on line? ¿Por qué tengo que contratar a una empresa de hosting si yo ya tengo Internet en mi oficina? Estas son algunas de las preguntas que los tus clientes probablemente hagan. Aquí te proponemos una respuesta básica y una explicación simple que tal [...]]]></description>
			<content:encoded><![CDATA[<p><a target="blank" href="http://www.flickr.com/photos/jamisonjudd/2433102356/"><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/server-rack.jpg" alt="server-rack" title="server rack" width="578" height="141" class="alignnone size-full wp-image-794" /></a></p>
<p>¿Cómo funciona Internet? ¿Cómo se hace para poner un sitio web on line? ¿Por qué tengo que contratar a una empresa de <strong>hosting</strong> si yo ya tengo Internet en mi oficina? Estas son algunas de las preguntas que los tus clientes probablemente hagan. Aquí te proponemos una <strong>respuesta básica</strong> y una <strong>explicación simple</strong> que tal vez te puede resultar de ayuda.</p>
<p><span id="more-788"></span>A nivel <strong>básico</strong>, el proceso a través del cual se navega un sitio web, es el siguiente:</p>
<ul>
<li>El usuario ingresa en una página escribiendo la dirección en su navegador.</li>
<li>La petición se envía a Internet, se realizan varias consultas de información hasta que se logra dar con la ubicación exacta del <strong>servidor que aloja el sitio</strong>.</li>
<li>El servidor tiene instalado un programa que constantemente está &#8220;escuchando&#8221; las peticiones que le hacen. Dicho programa se encarga de conseguir o generar el contenido que el usuario solicitó.</li>
<li>El contenido del website llega a nuestro ordenador y es interpretado por el navegador (Internet Explorer, Firefox, etc.).</li>
</ul>
<h2>Entonces ¿Qué es un servidor?</h2>
<p>Un <strong>servidor</strong> es un ordenador como cualquiera (generalmente más potente) que se encuentra las 24 horas del día conectado a Internet esperando que le soliciten mostrar los sitios web que tiene <strong>alojados</strong>.</p>
<p>Generalmente resulta muy costoso instalar uno mismo un <strong>servidor</strong> propio, debido a que necesitamos conexiones excelentes (estables y rápidas), mantenimiento del software y su seguridad, equipos potentes, etc. Por ese motivo se suelen contratar empresas de <strong>hosting</strong> que se ocupan de mantener un <strong>servidor</strong> funcionando y por un costo realmente accesible alquilan un espacio en él.</p>
<h2>Hosting</h2>
<p>La palabra <strong>hosting</strong> es sólo la traducción al inglés de <strong>alojamiento</strong>. Se suele usar de manera indistinta en nuestro idioma. </p>
<h2>¿Qué diferencia hay entre el servidor y mi proveedor de Internet?</h2>
<p>El proveedor de Internet (también conocido como ISP) es la empresa que te brinda acceso a Internet desde tu hogar u oficina. Ellos conectan tu equipo con la red y a partir de ese momento puedes navegar por cualquier website. </p>
<p>El <strong>servidor</strong>, en cambio, es donde estará <strong>alojado</strong> tu sitio web, un equipo administrado por una empresa (generalmente no es la misma que el proveedor) y que se encuentra siempre conectado a Internet esperando a que alguien visite tu sitio web.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/servidor-alojamiento-y-hosting-explicacion-basica/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Qué es (y que no es) un lenguaje de programación</title>
		<link>http://www.plusglobal.com/blog/que-es-y-que-no-es-un-lenguaje-de-programacion/</link>
		<comments>http://www.plusglobal.com/blog/que-es-y-que-no-es-un-lenguaje-de-programacion/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 08:34:21 +0000</pubDate>
		<dc:creator>Mauro</dc:creator>
		
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.plusglobal.com/?p=767</guid>
		<description><![CDATA[
Un lenguaje es un conjunto de elementos y reglas establecidas para comunicarse. El objetivo de los lenguajes de programación es que los programadores podamos comunicarle al ordenador qué es lo que queremos que haga por nosotros.

Las máquinas comprenden un lenguaje binario (compuesto por ceros y unos) y los humanos tenemos formas de comunicarnos muy ricas [...]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.flickr.com/photos/klearchos/2384258326/"><img src="http://www.plusglobal.com/wp-content/uploads/2009/10/lenguaje.jpg" alt="Prehistoric Painting" title="Prehistoric Painting" width="578" height="220" class="alignnone size-full wp-image-772" /></a></p>
<p>Un lenguaje es un conjunto de elementos y reglas establecidas para comunicarse. El objetivo de los <strong>lenguajes de programación</strong> es que los <a title="programadores web" href="http://www.plusglobal.com">programadores</a> podamos comunicarle al ordenador qué es lo que queremos que haga por nosotros.<br />
<span id="more-767"></span><br />
Las máquinas comprenden un <strong>lenguaje binario</strong> (compuesto por ceros y unos) y los humanos tenemos formas de comunicarnos muy ricas y variadas. No es posible para un humano comprender el <strong>lenguaje máquina</strong>, y tampoco es posible para una máquina comprender a la perfección el <strong>lenguaje humano</strong> (al menos todavía).</p>
<p>Por este motivo es que se crearon los <strong>lenguajes de programación</strong>, con el objetivo de acercar las diferencias entre lo que las personas y las computadoras son capaces de comprender (a esto se le llama <a href="http://es.wikipedia.org/wiki/Intervalo_sem%C3%A1ntico">brecha semántica</a>).</p>
<p>En el mundo del desarrollo web los <strong>lenguajes de programación</strong> más conocidos son <a href="http://www.php.net/">PHP</a>, <a href="http://www.asp.net/">ASP</a>, <a href="http://www.j2ee.me/products/jsp/">JSP</a>, <a href="http://www.ruby-lang.org">Ruby</a>, <a href="http://www.perl.org/">Perl</a>, <a href="http://www.python.org/">Phyton</a> y <a href="http://es.wikipedia.org/wiki/SQL">SQL</a> (del lado del <a title="explicación básica servidor" href="http://www.plusglobal.com/blog/servidor-alojamiento-y-hosting-explicacion-basica/">servidor</a>) y <a href="https://developer.mozilla.org/en/JavaScript">Javascript</a> (del lado del cliente).</p>
<h2>Qué no es un lenguaje de programación</h2>
<p>Hay algunos lenguajes que no son de programación, pero sí son lenguajes, ya que siguen manteniendo el objetivo de comunicar hombre con máquina. Ejemplos de estos <strong>lenguajes</strong> son HTML y CSS, que sirven para determinar el contenido y la presentación visual de una página web, pero no sirven para hacer programas.</p>
<p>Para que un lenguaje sea considerado de programación, es necesario que nos permita hacer programas con él; lo que incluye, básicamente, asignación de valores en variables, realización de cálculos, evaluación de condiciones y repetición de sentencias (entre otras cosas).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.plusglobal.com/blog/que-es-y-que-no-es-un-lenguaje-de-programacion/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
