<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Dipler</title>
	
	<link>http://www.dipler.org</link>
	<description>En la variedad está el gusto</description>
	<lastBuildDate>Wed, 21 Dec 2011 07:00:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Bitnbyte" /><feedburner:info uri="bitnbyte" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Bitnbyte</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.feedness.com/alta/http://feeds.feedburner.com/Bitnbyte" src="http://www.feedness.com/ayuda/wp-content/square_b_sh_feed.gif">Subscribe with Feedness</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Bitnbyte" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FBitnbyte" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Crear vídeos con MATLAB en 3 sencillos pasos</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/hT98PvOc-qE/</link>
		<comments>http://www.dipler.org/2011/12/crear-videos-con-matlab-en-3-sencillos-pasos/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 07:00:25 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Manuales]]></category>
		<category><![CDATA[MATLAB]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1987</guid>
		<description><![CDATA[MATLAB, como no podía ser de otra manera, es una herramienta muy útil para el desarrollo ágil de algoritmos, probarlos y así, cuando nos decidamos a pasarlos a un lenguaje distinto que nos permita su mejor explotación, estemos seguros de que va a funcionar, que no hemos implementado funciones que realmente no nos hacían falta [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><img class="aligncenter size-medium wp-image-1990" title="lena_bw" src="http://www.dipler.org/wp-content/uploads/2011/12/lena_bw-300x300.gif" alt="" width="300" height="300" /></p>
<p><a href="http://www.mathworks.es/" target="_blank">MATLAB</a>, como no podía ser de otra manera, es una herramienta muy útil para el desarrollo ágil de algoritmos, probarlos y así, cuando nos decidamos a pasarlos a un lenguaje distinto que nos permita su mejor explotación, estemos seguros de que va a funcionar, que no hemos implementado funciones que realmente no nos hacían falta y que no vamos a dar demasiados pasos en falso.</p>
<p>Nosotros, los que estudiamos Ingeniería de Telecomunicaciones, estamos bastante acostumbrados a trabajar con MATLAB pero, al menos en mi caso, siempre me había visto tratando señales de audio o de radiación, nunca imágenes o vídeos. Pero ayer, en un intento de hacer algo diferente (mostrar la evolución de una imagen conforme se va comprimiendo), se me ocurrió la idea de mostrar cada una de las imágenes obtenidas por mi algoritmo como un frame de vídeo en una película.</p>
<p>Tras investigar un poco, puedo decir que crear un vídeo *.avi usando MATLAB, es de lo más sencillo, es más, sólo tenemos que escribir cuatro líneas (aunque usa podrá repetirse tantas veces como frames tengamos en nuestro vídeo).</p>
<h2>Paso 1</h2>
<p>Creamos una variable en la que insertaremos los distintos frames:</p>
<pre class="brush: matlabkey; title: ; notranslate">movie = avifile('video.avi', 'fps', 10, 'compression', 'none');</pre>
<p>Esta función tiene la siguiente <a href="http://www.mathworks.es/help/techdoc/ref/avifile.html" target="_blank">especificación</a>:</p>
<pre class="brush: matlabkey; title: ; notranslate">aviobj = avifile(filename, ParameterName, ParameterValue)</pre>
<p>Es decir, le tenemos que pasar el nombre del fichero y tantas parejas parámetro-&gt;valor como deseemos; en nuestro caso hemos especificado que queremos mostrar 10 frames por segundo y que no queremos compresión alguna en nuestro vídeo resultante.</p>
<h2>Paso 2</h2>
<p>Añadimos todos los frames que deseemos, para ello antes debemos convertir la imagen que queremos que aparezca en el vídeo en un frame; en definitiva:</p>
<pre class="brush: matlabkey; title: ; notranslate">frame = im2frame(image, gray(256));
movie = addframe(movie, frame);</pre>
<p>Si tienes dudas sobre lo que hacen estas funciones puedes consultar las especificaciones de <a href="http://www.mathworks.es/help/techdoc/ref/im2frame.html" target="_blank">im2frame </a>y de <a href="http://www.mathworks.es/help/techdoc/ref/avifile.addframe.html" target="_blank">addframe</a>.</p>
<h2>Paso 3</h2>
<p>Cerramos las variables y, por consiguiente dejamos el video listo para reproducirse en programas como el videolán:</p>
<pre class="brush: matlabkey; title: ; notranslate">movie = close(movie);</pre>
<div class="shr-publisher-1987"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1987&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=hT98PvOc-qE:6ORdy3kGv-w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=hT98PvOc-qE:6ORdy3kGv-w:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=hT98PvOc-qE:6ORdy3kGv-w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=hT98PvOc-qE:6ORdy3kGv-w:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=hT98PvOc-qE:6ORdy3kGv-w:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=hT98PvOc-qE:6ORdy3kGv-w:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/hT98PvOc-qE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/12/crear-videos-con-matlab-en-3-sencillos-pasos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/12/crear-videos-con-matlab-en-3-sencillos-pasos/</feedburner:origLink></item>
		<item>
		<title>Configurando Google Chrome en OSX Lion [f5 &amp; f6]</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/M6RP-4pv4j8/</link>
		<comments>http://www.dipler.org/2011/11/configurando-google-chrome-en-osx-lion-f5-f6/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 17:43:39 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Lion]]></category>
		<category><![CDATA[Shortcuts]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1970</guid>
		<description><![CDATA[Recientemente adquirí un MacBook Pro 13&#8243;, tras 4 meses de uso, puedo decir con tranquilidad que es una maravilla de equipo; pero como todo cambio de sistema operativo, programas, equipo,&#8230; implica una serie de cambios a los que debemos acostumbrarnos poco a poco. En este caso voy a comentar una solución al problema (o característica, [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Recientemente adquirí un MacBook Pro 13&#8243;, tras 4 meses de uso, puedo decir con tranquilidad que es una maravilla de equipo; pero como todo cambio de sistema operativo, programas, equipo,&#8230; implica una serie de cambios a los que debemos acostumbrarnos poco a poco.</p>
<p>En este caso voy a comentar una solución al problema (o característica, según se vea) que nos impide seleccionar la url en Google Chrome al pulsar la techa <strong>F6</strong> (o <strong>fn+F6</strong>) y al que nos permite refrescar/actualizar la página pulsando la tecla <strong>F5</strong> (o <strong>fn+F5</strong>).</p>
<p>Realmente configurarlo para añadir esta característica es muy sencillo; para ello nos vamos a las <em>preferencias del sistema&gt;teclado</em>; una vez ahí nos dirigimos a la pestaña &#8220;<strong>Atajos del teclado</strong>&#8221; ya que vamos a añadir 2. Antes de seguir con la configuración vamos a apuntar dos nombres de comandos tal y como aparecen en el menú de Chrome y que vamos a necesitar a la hora de definir nuestro atajo:</p>
<p>En el menú <strong>File</strong> (Archivo) del Chrome vemos que el comando que se corresponde con la techa <strong>⌘L</strong> (Seleccionar la dirección)  es &#8220;<strong>Open Location&#8230;</strong>&#8221; en mi caso; esto debería hacer que al pulsar la combinación ⌘L, la URL se seleccione automáticamente (obtenga el foco); pues bien, nos apuntamos el nombre del comando &#8220;Open Location&#8230;&#8221; ya que lo necesitaremos más adelante.</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.14.28.png"><img class="aligncenter size-full wp-image-1973" title="Screen Shot 2011-11-15 at 18.14.28" src="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.14.28.png" alt="" width="235" height="117" /></a></p>
<p>Hacemos lo mismo pero con el comando <strong>⌘R</strong> que está bajo el menú <strong>View</strong> (Ver), solo que en este caso con &#8220;<strong>Reload This Page</strong>&#8220;.</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.20.45.png"><img class="aligncenter size-full wp-image-1976" title="Screen Shot 2011-11-15 at 18.20.45" src="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.20.45.png" alt="" width="266" height="45" /><span id="more-1970"></span></a></p>
<p>Como podemos ver, se han cambiado las teclas con las que se invocan dichas características del navegador, así que vamos a crear unos atajos de teclado, pero solo para esta aplicación; para ello nos vamos a la pestaña de las preferencias de teclado que hemos comentado antes y hacemos click en &#8220;<strong>Application Shortcuts</strong>&#8221; y acto seguido en el botón con un símbolo &#8220;<strong>+</strong>&#8221; y rellenamos dos veces el formulario con los datos obtenidos anteriormente, con lo que debería quedarnos como lo siguiente para recargar la página:</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.21.29.png"><img class="aligncenter size-full wp-image-1977" title="Screen Shot 2011-11-15 at 18.21.29" src="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.21.29.png" alt="" width="393" height="192" /></a></p>
<p>Y para la tecla F6:</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.23.16.png"><img class="aligncenter size-full wp-image-1978" title="Screen Shot 2011-11-15 at 18.23.16" src="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.23.16.png" alt="" width="398" height="189" /></a></p>
<p>De este modo, si volvemos al Chrome, veremos que la leyenda para los atajos de estos dos comandos ha cambiado a los nuevos valores.</p>
<p style="text-align: center;"><a href="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.09.51.png"><img class="size-full wp-image-1971 aligncenter" title="Menu chrome File" src="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.09.51.png" alt="" width="242" height="116" /></a></p>
<p style="text-align: left;">y</p>
<p style="text-align: center;"><a href="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.10.04.png"><img class="aligncenter size-full wp-image-1972" title="Menu Chrome View" src="http://www.dipler.org/wp-content/uploads/2011/11/Screen-Shot-2011-11-15-at-18.10.04.png" alt="" width="264" height="62" /></a></p>
<div class="shr-publisher-1970"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1970&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=M6RP-4pv4j8:gr-f8BdJajs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=M6RP-4pv4j8:gr-f8BdJajs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=M6RP-4pv4j8:gr-f8BdJajs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=M6RP-4pv4j8:gr-f8BdJajs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=M6RP-4pv4j8:gr-f8BdJajs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=M6RP-4pv4j8:gr-f8BdJajs:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/M6RP-4pv4j8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/11/configurando-google-chrome-en-osx-lion-f5-f6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/11/configurando-google-chrome-en-osx-lion-f5-f6/</feedburner:origLink></item>
		<item>
		<title>20 aplicaciones gratuitas recomendadas para iPad</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/1SNjiFQia1I/</link>
		<comments>http://www.dipler.org/2011/07/20-aplicaciones-gratuitas-recomendadas-para-ipad/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 13:00:28 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Programas]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1944</guid>
		<description><![CDATA[Hace unas semanas publicamos una lista con 10 aplicaciones gratuitas recomendadas para iPad, pues bien, como es lógico, con el tiempo se van descubriendo nuevas aplicaciones que le darán una especial vidilla a nuestro nuevo equipo táctil. 10 de las aplicaciones de este artículo siguen siendo las del anterior, por lo que no vamos a [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Hace unas semanas publicamos una<a href="http://www.dipler.org/2011/06/10-aplicaciones-gratuitas-recomendadas-para-ipad/" target="_blank"> lista con 10 aplicaciones gratuitas recomendadas para iPad</a>, pues bien, como es lógico, con el tiempo se van descubriendo nuevas aplicaciones que le darán una especial vidilla a nuestro nuevo equipo táctil.</p>
<p><a href="http://www.dipler.org/2011/06/10-aplicaciones-gratuitas-recomendadas-para-ipad/" target="_blank">10 de las aplicaciones de este artículo</a> siguen siendo las del anterior, por lo que no vamos a volver a nombrarlas y describirlas, pero puedes verlas fácilmente dirigiéndote a <a href="http://www.dipler.org/2011/06/10-aplicaciones-gratuitas-recomendadas-para-ipad/" target="_blank">dicho artículo</a>.</p>
<p>Como dice el título del artículo, vamos a hablar de las 10 aplicaciones que nos faltan de una forma un poco más exhaustiva. Algunas de las aplicaciones que se describirán requerirán un proceso especial de instalación o bien, para poder disfrutarla al <strong>100%</strong> habrá que hacerse con la versión de pago; pero si están aquí, es que ya merecen la pena sin haber pagado un duro.</p>
<p>Y sin más dilación, comencemos:</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/07/feeddlerRSS_thumb.jpg"><img class="alignright size-full wp-image-1946" title="feeddlerRSS_thumb" src="http://www.dipler.org/wp-content/uploads/2011/07/feeddlerRSS_thumb.jpg" alt="" width="70" height="70" /></a><strong>FeedlerRss:</strong> Una de mis herramientas favoritas de Internet y que relativamente poca gente usa o que ni siquiera sabe que existe, son los lectores de <strong>RSS</strong>. Esta herramientas, para los no enterados del tema, nos permite leer todas las actualizaciones de nuestras páginas favoritas, siempre y cuando den soporte a este sistema. Este tipo de lectores existen desde hace varios años, tanto como programas de escritorio o como otra página web que nos muestra el contenido de las demás; algunos ejemplos son: <strong>Google Reader</strong>, <strong>Netvibes</strong>, o el que estoy haciendo y pretendo publicar dentro de relativamente poco tiempo. Pues bien, en caso de que tengamos una cuenta de <strong>Google Reader</strong>, podremos vincular ésta con la aplicación <strong>Feedler</strong>, de manera que podremos leer cómodamente nuestro feed <strong>RSS</strong> desde nuestro <strong>iPad</strong> sin contar con las limitaciones de las aplicaciones web para dispositivos móviles. Como única pega, diría que abusa de las animaciones por todas partes.<span id="more-1944"></span></p>
<p><strong><a href="http://www.dipler.org/wp-content/uploads/2011/07/google-app.jpg"><img class="alignright size-full wp-image-1947" title="google-app" src="http://www.dipler.org/wp-content/uploads/2011/07/google-app.jpg" alt="" width="70" height="70" /></a>Google:</strong> No, no nos referimos al buscador, al menos no en su totalidad, y es que <strong>Google</strong> ha desarrollado una aplicación para <strong>iPad</strong> que nos permite estar en todo momento siendo notificados de lo que sucede en los servicios que estos nos proporcionan. Realmente, la aplicación no hace nada revolucionario, simplemente es una aplicación que nos permite acceder a las páginas web y servicios de Google de forma rápida y nos notifica las novedades mediante el sistema de notificaciones estándar del sistema operativo del iPad.</p>
<p><strong><a href="http://www.dipler.org/wp-content/uploads/2011/07/iheartradio-for-ipad.jpg"><img class="alignright size-full wp-image-1948" title="iheartradio-for-ipad" src="http://www.dipler.org/wp-content/uploads/2011/07/iheartradio-for-ipad.jpg" alt="" width="70" height="70" /></a>iHeartRadio:</strong> ¿Sabes inglés?, ¿Te gusta escuchar la radio?, ¿Te gusta el carácter de Estados Unidos? Si la respuesta a alaguna de estas preguntas es SI, deberias plantearte seriamente hacer uso de esta aplicación, y es que iHeartRadio, es una aplicación en la que podremos encontrar una gran cantidad de <strong>radios</strong> estadounidenses fácilmente y hacer Streaming de ellas haciendo uso de nuestra conexión a Internet. El único gran problema de esta aplicación es que sólo está disponible en la App Store de Estados Unidos, por lo que o cambiamos las características de nuestra cuenta, o bien nos creamos otra de aquella zona para poder instalarla en nuestro iPad extranjero. Por desgracia tine una desventaja más, y es que la interfaz que usa es la de iPod/iPhone, pero como nos interesa utilizarla para escuchar emisoras, no creo que suponga un gran problema.</p>
<p><strong><a href="http://www.dipler.org/wp-content/uploads/2011/07/Buscar.png"><img class="alignright size-full wp-image-1949" title="Buscar" src="http://www.dipler.org/wp-content/uploads/2011/07/Buscar.png" alt="" width="71" height="71" /></a>Buscar:</strong> Sí, el nombre es bastante poco explicativo en sí, pero es una aplicación bastante simple que nos permitirá, en caso de que perdamos alguno de nuestros dispositivos de la &#8220;<strong>manzana</strong>&#8220;, localizar iPod, iPhone, iPad,&#8230; que estén dados de alta en el servicio MobileMe, de manera que no tendremos que hacer uso de la página web que nos proporciona el mismo servicio y que desde dispositivos portátiles puede resultar un poco incómoda de utilizar.</p>
<p><strong><a href="http://www.dipler.org/wp-content/uploads/2011/07/PS_Express_logo.jpg"><img class="alignright size-full wp-image-1952" title="PS_Express_logo" src="http://www.dipler.org/wp-content/uploads/2011/07/PS_Express_logo.jpg" alt="" width="70" height="70" /></a>PS Express: </strong>De acuerdo, estamos usando un iPad, manejar fotos puede no ser nuestra prioridad en este tipo de sistemas, pero teniendo en cuenta que la segunda versión del aparatito trae uncorporadas un par de cámaras de foto/vídeo, es posible que esto tome algo más de sentido, de hecho, la cámara de iPad 2 no es ni por asomo tan buena como la cámara de iPhone 4, es más, las fotos nocturnas dejan bastante que desear: salen con demasiado <strong>ruido</strong> (cosas de no poder jugar con el ISO, al menos que yo sepa)<strong>.</strong> Entonces, pongámonos en situación, y es que queremos subir una foto a Facebook, Twitter, lo que sea, pero no sin antes eliminarle el ruido, desenfocarla un poco,&#8230; lo que sea. Para cosas rápidas como estas existe esta aplicación que, además, cuenta con una interfaz muy simple y amigable.<strong><br />
</strong></p>
<p><strong><a href="http://www.dipler.org/wp-content/uploads/2011/07/bloomberg.png"><img class="alignright size-full wp-image-1953" title="bloomberg" src="http://www.dipler.org/wp-content/uploads/2011/07/bloomberg.png" alt="" width="70" height="70" /></a>Bloomberg:</strong> La aplicación de la <strong>bolsa</strong> con la que viene el iPod/iPhone, si bien no es ninguna maravilla, es muy interesante para todos aquellos que cuenten con acciones y tengan cierta predisposición a saber el estado de la cotización en cada momento del día. Así que al poco tiempo de empezar a juguetear con el me entraron las ganas de encontrar una aplicación de estas características para iPad. Pues bien, Bloomberg, es esta aplicación.<strong><br />
</strong></p>
<p><strong><a href="http://www.dipler.org/wp-content/uploads/2011/07/images.jpg"><img class="alignright size-thumbnail wp-image-1954" title="images" src="http://www.dipler.org/wp-content/uploads/2011/07/images-150x150.jpg" alt="" width="70" height="70" /></a>SoundHound:</strong> Si eres de los que, como a mí, le encanta la <strong>música</strong> pero se cansa rápido de las canciones, SoundHound es la aplicación que necesitas, con esta podrás buscar canciones y descubrir música nueva de una forma rápida y dentro de un repertorio enorme.<strong><br />
</strong></p>
<p><strong><a href="http://www.dipler.org/wp-content/uploads/2011/07/fring-app-store-logo.png"><img class="alignright size-full wp-image-1956" title="fring-app-store-logo" src="http://www.dipler.org/wp-content/uploads/2011/07/fring-app-store-logo.png" alt="" width="70" height="70" /></a>Fring: </strong>Fring se está conviritiéndo en una seria alternativa a <strong>Skype</strong> en lo que a terminales móviles se refiere, ya que nos permite llamar a otros miembros mediante un sistema de <strong>VoIP</strong>, hacer conferencias múltiples, chatear o incluso llamar a números fijos con un pequeño sobrecargo. La ventaja de este sistema, es que nos permite hacer uso de la multiconferencia en el iPad y otros dispositivos, cosa que aun no podemos hacer con el Skype, aunque presumiblemente pronto podremos. Además, la aplicación, permite la sincronización con redes sociales y chats como Google Talk o Twitter.</p>
<p><strong><a href="http://www.dipler.org/wp-content/uploads/2011/07/ICON0TuneInRadio.png"><img class="alignright size-full wp-image-1957" title="ICON0TuneInRadio" src="http://www.dipler.org/wp-content/uploads/2011/07/ICON0TuneInRadio.png" alt="" width="70" height="70" /></a>TuneIn Radio: </strong>Como ya os he comentado anteriormente, me encanta escuchar la <strong>radio</strong>, y como ningún programa es perfecto para hacer esto, también tengo instalada en mi iPad, la aplicación TuneIn Radio, que complementa muy bien a la aplicación iHeartRadio con emisoras de todo el mundo.</p>
<p><strong><a href="http://www.dipler.org/wp-content/uploads/2011/07/icon175x175.png"><img class="alignright size-thumbnail wp-image-1959" title="icon prezi" src="http://www.dipler.org/wp-content/uploads/2011/07/icon175x175-150x150.png" alt="" width="70" height="70" /></a>Prezi Viewer:</strong> Prezi es un servicio web que nos permite hacer <strong>presentaciones</strong> para nuestras charlas enfocando el modo de hacerlo con un concepto totalmente diferente, es más, yo diría rompedor, y es que no se enfoca en el uso de diapositivas, sino que utiliza un único lienzo, desplazando la pantalla sobre él. Pues bien, Prezi Viewer nos permitirá ver estas presentaciones en nuestro iPad. Os recomiendo este servicio si queréis captar rápidamente la atención del público.</p>
<div class="shr-publisher-1944"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1944&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=1SNjiFQia1I:FXEetiCPg2U:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=1SNjiFQia1I:FXEetiCPg2U:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=1SNjiFQia1I:FXEetiCPg2U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=1SNjiFQia1I:FXEetiCPg2U:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=1SNjiFQia1I:FXEetiCPg2U:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=1SNjiFQia1I:FXEetiCPg2U:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/1SNjiFQia1I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/07/20-aplicaciones-gratuitas-recomendadas-para-ipad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/07/20-aplicaciones-gratuitas-recomendadas-para-ipad/</feedburner:origLink></item>
		<item>
		<title>Log para programas escritos en C/C++</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/Z24MTB3U4kU/</link>
		<comments>http://www.dipler.org/2011/06/log-para-programas-escritos-en-cc/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 13:00:37 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Producción propia]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1911</guid>
		<description><![CDATA[En los últimos artículos sobre las Macros en C/C++ hemos explicado de una forma un tanto rápida todo el potencial que presenta esta herramienta si sabemos utilizarla con un nivel medio-alto en determinadas situaciones. Uno de los problemas que se nos presentan en ocasiones a la hora de trabajar en un lenguaje como C es [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>En los últimos artículos sobre las Macros en C/C++ hemos explicado de una forma un tanto rápida todo el potencial que presenta esta herramienta si sabemos utilizarla con un nivel medio-alto en determinadas situaciones.</p>
<p>Uno de los problemas que se nos presentan en ocasiones a la hora de trabajar en un lenguaje como C es que, a pesar de que contamos con depuradores de código, no siempre tenemos uno a mano, por lo que si a la vez que documentamos podemos mostrar a nuestro capricho y en función de la situación un log de lo que está sucediendo durante su ejecución, podremos hacernos una idea bastante aproximada de si todo va bien o no.</p>
<p>Tras esta pequeña reflexión me lanzo a compartir con vosotros un pequeño fichero .h que nos facilitará enormemente la tarea en una 20 líneas y que he utilizado ya en el desarrollo de varios programas:</p>
<pre class="brush: cpp; title: ; notranslate">

#include &lt;stdio.h&gt;
//#define DEBUG 0
#define DEBUG 1
#ifndef __LOG_H
#define __LOG_H
 #if DEBUG == 1
 #define log(format, args...) \
		fprintf (stderr, &quot;%s - %i: &quot;, __FILE__, __LINE__);\
		fprintf (stderr, format &quot;\n&quot;, ##args);
 #define warning(format, args...) \
			log(&quot;/!\\ &quot;format&quot; /!\\&quot;, ##args)
#define error(format, args...) \
		log(&quot;(X) &quot;format&quot; (X)&quot;, ##args)
 #else
#define log(format, args...) ;
#define warning(format, args...) ;
#define error(format, args...) ;
 #endif
#endif
</pre>
<p>Este fichero tendremos que incluirlo en nuestro programa escrito en C mediante una directiva #include:</p>
<pre class="brush: cpp; title: ; notranslate">#include &quot;log.h&quot;</pre>
<p>en este caso he llamado al fichero que contiene esas 20 líneas de código.</p>
<p>De manera que si tenemos declarado DEBUG con un valor de 0 no se mostrará salida alguna y no sólo eso, sino que las líneas desaparecerán (es un claro ejemplo de uso de macros, ya que en nuestro programa en producción puede que deseemos tener más velocidad de procesado y no nos interese interactuar con salidas ni llamar a funciones que no hagan nada), mientras que si tiene un valor de 1, escupirá toda la información que deseemos por, en este caso, la salida de error de nuestro programa.</p>
<p>Si ejecutamos el siguiente programa en C:</p>
<pre class="brush: cpp; title: ; notranslate">

#include &quot;log.h&quot;
int main(int argc, char** argv){

log(&quot;asdf%i&quot;, 1)

log(&quot;asdf&quot;)

warning(&quot;esto es una alerta&quot;)

warning(&quot;esto es una alerta%i&quot;, 1)

error(&quot;esto es un error&quot;)

error(&quot;esto es un error%i&quot;, 1)

}
</pre>
<p>obtendremos la siguiente salida:</p>
<blockquote><p>bottle.c &#8211; 4: asdf1</p>
<p>bottle.c &#8211; 5: asdf</p>
<p>bottle.c &#8211; 6: /!\ esto es una alerta /!\</p>
<p>bottle.c &#8211; 7: /!\ esto es una alerta1 /!\</p>
<p>bottle.c &#8211; 8: (X) esto es un error (X)</p>
<p>bottle.c &#8211; 9: (X) esto es un error1 (X)</p></blockquote>
<p>La ausencia de puntos y coma después de llamar las macros no es un error, es que simplemente no hacen falta.</p>
<p>Finalmente y a modo aclaratorio, las constantes utilizadas en el fichero <strong>log.h __FILE__</strong> y <strong>__LINE__</strong> son dos directivas de preprocesador que nos indican en qué lína y fichero de código tenemos la llamada a ese log.</p>
<div class="shr-publisher-1911"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1911&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Z24MTB3U4kU:eFFBLl5vlj8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=Z24MTB3U4kU:eFFBLl5vlj8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Z24MTB3U4kU:eFFBLl5vlj8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Z24MTB3U4kU:eFFBLl5vlj8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Z24MTB3U4kU:eFFBLl5vlj8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=Z24MTB3U4kU:eFFBLl5vlj8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/Z24MTB3U4kU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/06/log-para-programas-escritos-en-cc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/06/log-para-programas-escritos-en-cc/</feedburner:origLink></item>
		<item>
		<title>Fórum Impulsa 2011</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/D4y5Kk4ItSs/</link>
		<comments>http://www.dipler.org/2011/06/forum-impulsa-2011/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 16:50:12 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Emprendimiento]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1929</guid>
		<description><![CDATA[Ayer, día 22 de junio del 2011, tuvo lugar una concentración de unas 1.000 personas en el palacio de congresos de Gerona con el fin de presentar en un único lugar a más de 500 jóvenes emprendedores o con ganas de serlo con otros tantos personajes ilustres del mundo de la empresa. El fin no [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.dipler.org/wp-content/uploads/2011/06/logotop_blau_es.png"><img class="aligncenter size-full wp-image-1935" title="logotop_blau_es" src="http://www.dipler.org/wp-content/uploads/2011/06/logotop_blau_es.png" alt="" width="220" height="216" /></a></p>
<p>Ayer, día <strong>22 de junio del 2011,</strong> tuvo lugar una concentración de unas <strong>1.000</strong> personas en el palacio de congresos de <strong>Gerona </strong>con el fin de presentar en un único lugar a más de <strong>500 jóvenes</strong> emprendedores o con ganas de serlo con otros tantos personajes ilustres del mundo de la empresa. El fin no es otro sino intentar apoyar a los más jóvenes a hacer realidad sus sueños y, quien sabe, quizá acudir al fórum como senior dentro de unos años.</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/06/educar-forum-impulsa-2011.jpg"><img class="aligncenter size-medium wp-image-1937" title="educar forum impulsa 2011" src="http://www.dipler.org/wp-content/uploads/2011/06/educar-forum-impulsa-2011-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Yo he sido uno de los privilegiados que, sin tener ninguna patente en curso, una empresa/idea medio montada,&#8230; ha tenido la oportunidad de asistir a tan magnífico evento, en el que no sólo hemos aprendido, sino que he hemos conocido a gente con las mismas inquietudes y con las que puede que, en un futuro no muy lejano, se pueda contar para intentar montar algo un poquito más grande que a lo que haríamos en condiciones normales.</p>
<p>Pero empecemos desde el principio&#8230;<span id="more-1929"></span></p>
<h2>Día 21</h2>
<p>La llegada a Gerona, tras coger un AVE y un larga distancia, se produjo el día 21 de junio a eso de las 14h. Tras dar un paseo y comer algo, dio comienzo un taller de creatividad de jóvenes. Allí ademas de tener el primer contacto con nuestros compañeros, hicimos una serie de ejercicios que siempre tenían una moraleja (una de las que más me llamó la atención es la de <strong>descartar </strong>el primer<strong> 50%</strong> de las soluciones/respuestas a un problema, siempre y cuando, claro está, queramos ser creativos).</p>
<p>Una vez acabado el taller, tocó ir a cenar y después una charla/presentación de un par de horas con un primer grupo de personas muy interesante que nos conocimos durante la cena.</p>
<h2>Día 22</h2>
<p>Llegó el día complicado, bueno, complicado no, pero largo sí. A primera hora de la mañana tocaba estar en el palacio de congresos a la espera de aprender y conocer a tanta gente como fuese posible.</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/06/Wendy-kopp.jpg"><img class="aligncenter size-medium wp-image-1934" title="Wendy kopp" src="http://www.dipler.org/wp-content/uploads/2011/06/Wendy-kopp-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Primera sorpresa, el Fórum empieza muy fuerte; tras la breve introducción del Príncipe entra en escena <strong>Wendy Kopp</strong> (CEO de Tech for America) que nos deja frases e imágenes impresionantes grabadas en la cabeza tales como:</p>
<blockquote><p>The world needs you before you get experience</p>
<p style="text-align: right;">Wendy Kopp</p>
</blockquote>
<p><img class="aligncenter size-medium wp-image-1933" title="Mangus scheving" src="http://www.dipler.org/wp-content/uploads/2011/06/Mangus-scheving-300x225.jpg" alt="" width="300" height="225" /></p>
<p>Un comienzo que viene seguido por la presentación de <strong>Mangus Scheving</strong>, que no se corta y entra haciendo el pino para después hacerse unas cuantas flexiones (es lo que tiene que hacer un superhéroe que ama la fruta), y nos enseña que con un buen método todo se puede conseguir, incluso aumentar las ventas de frutas con una serie (sportacus).</p>
<p style="text-align: center;"><object width="425" height="349"><param name="movie" value="http://www.youtube.com/v/dSnB_fpYQ10?version=3&amp;hl=es_ES" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="425" height="349" src="http://www.youtube.com/v/dSnB_fpYQ10?version=3&amp;hl=es_ES" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p>A todo esto, se hace un trabajo de ilustración de las ideas que se plantean en vivo&#8230;</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/06/ilustrator-impulsa-2011.jpg"><img class="aligncenter size-medium wp-image-1936" title="ilustrator impulsa 2011" src="http://www.dipler.org/wp-content/uploads/2011/06/ilustrator-impulsa-2011-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Llegado a este punto los dos ponentes han dejado el listón muy alto, las siguientes exposiciones no dejan nada que desear, pero no nos dejan con la boca abierta de nuevo, al menos en lo que a la puesta en escena se refiere; aun así, no dejan de proponerse ideas que DE VERDAD podrían cambiar el mundo.</p>
<p>Otra de las ponencias que me dejaron con la boca abierta es la de <strong>Jon Dudas</strong>, presidente de <strong>FIRST</strong>; exposición en la que nos enseña lo que sale en las películas estadounidenses: estudiantes de instituto construyendo robots que resuelven problemas reales.</p>
<p>Otra de los proyectos que llaman la atención enormemente al anfiteatro es la de <strong>Félix Finkbeiner</strong>, un chico alemán que plantea plantar un billón (trillón americano) de árboles en los próximos años mediante una ONG; pero no es tan sorprendente la idea, como el hecho de que la lidera un chaval con tan sólo <strong>13 años</strong>.</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/06/Plant-for-the-planet.jpg"><img class="aligncenter size-full wp-image-1940" title="Plant for the planet" src="http://www.dipler.org/wp-content/uploads/2011/06/Plant-for-the-planet.jpg" alt="" width="210" height="201" /></a></p>
<p>Después de una estupenda comida, se retoman las conferencias, pero para combatir el sopor postprandial, en la jornada de tarde disfrutamos de la música de un grupo de Jazz y de un par de representaciones teatrales cortas, mientras <strong>Tariq Krim</strong>, <strong>InmaShara</strong>,&#8230; nos exponen de una forma más o menos idealista las sus ideas. Finalmente y acabando con las presentaciones, <strong>David Berry</strong> nos plantea sus ideas para cambiar el mundo,&#8230; realmente impresionante la presentación.</p>
<p>Para terminar el<strong> Fórum Impulsa 2011</strong> se procede a un breve resumen de la jornada y a la entrega de los premios <strong>IMPULSA 2011</strong>.</p>
<p>Sinceramente una experiencia impresionante y deseando repetirla el año que viene, si me invitan de nuevo, claro.</p>
<p>No sé si algún asistente al Fórum  leerá esto, pero en caso de hacerlo y no haberse incorporado al grupo de Facebook &#8220;Forum Impulsa 2011&#8243;, le animo a que se una.</p>
<div class="shr-publisher-1929"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1929&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=D4y5Kk4ItSs:M4pfZtz07Gw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=D4y5Kk4ItSs:M4pfZtz07Gw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=D4y5Kk4ItSs:M4pfZtz07Gw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=D4y5Kk4ItSs:M4pfZtz07Gw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=D4y5Kk4ItSs:M4pfZtz07Gw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=D4y5Kk4ItSs:M4pfZtz07Gw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/D4y5Kk4ItSs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/06/forum-impulsa-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/06/forum-impulsa-2011/</feedburner:origLink></item>
		<item>
		<title>HOW-TO: Macros en C (III) – “Parámetros”</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/45aP3wYiwHo/</link>
		<comments>http://www.dipler.org/2011/06/how-to-macros-en-c-iii-%e2%80%93-parametros/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 13:00:59 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Manuales]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1905</guid>
		<description><![CDATA[Como último artículo de la serie, vamos a adentrarnos un poco más en la declaración de elementos similares a las funciones con macros , para ser más exactos, con sus argumentos y posibilidades: Convertir a String En ocasiones no es de un gran interés tratar de la misma manera todos los argumentos que le pasamos [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p lang="es-ES">Como último artículo de la serie, vamos a adentrarnos un poco más en la declaración de elementos similares a las funciones con macros , para ser más exactos, con sus argumentos y posibilidades:</p>
<h3>Convertir a String</h3>
<p>En ocasiones no es de un gran interés tratar de la misma manera todos los argumentos que le pasamos a este tipo de funciones de preprocesador.</p>
<p>En el caso concreto de que deseemos tratar el argumento como un String constante, habremos de precederlo con el símbolo &#8216;<strong>#</strong>&#8216;, demnaera que estamos convirtiendo en constantes dichos parámetros, pero veamos un ejemplo que he sacado de <a title="Stringification" href="http://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification" target="_blank">gnu.org</a>, ya que me parece bastante ilustrativo.</p>
<pre class="brush: cpp; title: ; notranslate">
#define WARN_IF(EXP) \
     do { if (EXP) \
             fprintf (stderr, &quot;Warning: &quot; #EXP &quot;\n&quot;); } \
     while (0)
     WARN_IF (x == 0);</pre>
<p>Este pedazo de código nos dará una salida como la siguiente:</p>
<blockquote><p>do { if (x == 0) fprintf (stderr, &#8220;Warning: &#8221; &#8220;x == 0&#8243; &#8220;\n&#8221;); } while (0);</p></blockquote>
<p>Es decir, el argumento <strong>EXP</strong> se sustituye como argumento en el primer caso y como un string en el segundo.</p>
<p>Una de las grandes ventajas de la conversión a String de este tipo de macros, es que no sólo añade dobles comillas, sino que escapa los caracteres necesarios para que la cadena se muestre tal y como es, a no ser que esta se encuentre dentro de una cadena de texto ya o sea un carácter como &#8216;<strong>\n</strong>&#8216;.</p>
<p>Finalmente puede resultarnos de utilidad concatenar un par de tokens dados dentro de una macro; para ello podremos hacer uso de &#8216;<strong>##</strong>&#8216;</p>
<h3>Parámetros indefinidos</h3>
<p>Algo que puede resultarnos muy interesante e incluso increíble cuando empezamos a utilizar C, es que, si bien nos han enseñado a que las funciones tienen un número definido de parámetros, ¿cómo es posible la existencia de funciones como <strong>printf</strong>?</p>
<p>Al igual que para las funciones, existe una forma de hacer que una macro acepte un número no definido de parámetros, y este método aparece en forma de <strong>__VA_ARGS__</strong>. Este token nos permitirá sustotuir en nuestro macro los &#8216;<strong>&#8230;</strong>&#8216; por los valores que se le han pasado a la función.</p>
<pre class="brush: cpp; title: ; notranslate">#define log(...) printf(__VA_ARGS__)</pre>
<p>Si queremos ser más descriptivos con los parámetros podemos sustituir &#8216;<strong>&#8230;</strong>&#8216; por &#8216;<strong>&lt;nombre&gt;&#8230;</strong>&#8216;, por ejemplo:</p>
<pre class="brush: cpp; title: ; notranslate">#define log(args...) printf(args)</pre>
<p>Si queremos especificar un número mínimo de argumentos, podemos hacerlo de la siguiente manera:</p>
<pre class="brush: cpp; title: ; notranslate">#define log(formato, args...) printf(formato, args)</pre>
<p>pero esto hace que sea obligatorio, en todo momento, si no pasar un segundo argumento, sí escribir la coma después del primero. Para solucionar este problema, de nuevo acudimos al manual de <a title="Variadic-Macros" href="http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html#Variadic-Macros" target="_blank">gnu.org</a> que nos dice que echemos mano de &#8216;<strong>##</strong>&#8216;, de manera que podamos omitir, si lo deseamos el segundo parámetro y la coma de después del primero al llamar a la macro:</p>
<pre class="brush: cpp; title: ; notranslate">#define log(formato, args...) printf(formato, ##args)</pre>
<div class="shr-publisher-1905"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1905&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=45aP3wYiwHo:mGXGB0cUf-g:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=45aP3wYiwHo:mGXGB0cUf-g:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=45aP3wYiwHo:mGXGB0cUf-g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=45aP3wYiwHo:mGXGB0cUf-g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=45aP3wYiwHo:mGXGB0cUf-g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=45aP3wYiwHo:mGXGB0cUf-g:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/45aP3wYiwHo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/06/how-to-macros-en-c-iii-%e2%80%93-parametros/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/06/how-to-macros-en-c-iii-%e2%80%93-parametros/</feedburner:origLink></item>
		<item>
		<title>HOW-TO: Macros en C (II) – “funciones”</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/wYYWiOsZvnc/</link>
		<comments>http://www.dipler.org/2011/06/how-to-macros-en-c-i-%e2%80%93-funciones/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 13:00:58 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Manuales]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1899</guid>
		<description><![CDATA[En el pasado y primer artículo de esta serie, describimos a grosso modo el funcionamiento de la directiva de preprocesador #define; siendo una de las características más importantes a tener en cuenta el hecho de que a la hora de compilar el programa no estamos trabajando con variables con un valor, sino con los valores directamente. [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p lang="es-ES">En el <a href="http://www.dipler.org/2011/06/how-to-macros-en-c-i-define/" target="_blank">pasado y primer artículo de esta serie</a>, describimos a <em>grosso modo</em> el funcionamiento de la directiva de preprocesador <strong>#define</strong>; siendo una de las características más importantes a tener en cuenta el hecho de que a la hora de compilar el programa no estamos trabajando con variables con un valor, sino con los valores directamente. De este modo estaremos ahorrando memoria y dotando de legibilidad a nuestro código en determinadas ocasiones.</p>
<p lang="es-ES">Hoy vamos a ver cómo simular funciones con el sistema de Macros. Antes de nada, hay que aclarar que: si bien para constantes, por convenio, se utilizan letras mayúsculas en todo momento, para esta especie de funciones no es necesario hacer esto, de manera que podemos continuar con el sistema de nomenclaturas que hemos estado llevando hasta el momento (como recomendación, yo usaría todo en minúsculas menos la primera letra de cada palabra exceptuando la de la primera, Ex: <strong>hallarMaximo(&#8230;)</strong>).</p>
<p lang="es-ES">Supongamos que contamos con dos funciones en nuestras librerías:</p>
<pre class="brush: cpp; title: ; notranslate">
int rand(void);
int fastRand(void);
</pre>
<p lang="es-ES">Ambas funciones llevan a cabo la misma tarea, sólo que utilizan diferentes métodos para realizarla, de hecho, la segunda que es mucho más eficiente que la primera (como puede entenderse por el nombre), la acabamos de implementar y, a pesar de que la entrada y la salida es la misma, la primera ha sido utilizada cientos de veces en nuestro código, y cambiarla implicaría un repaso exhaustivo del código fuente y, en caso de tener una <strong>API</strong> pública, implicaría cambiarla y notificárselo a todos nuestros usuarios.</p>
<p lang="es-ES">En lugar de esto, podemos crear una macro que se encargue de realizar dicha sustitución durante el proceso de precompilado:</p>
<pre class="brush: cpp; title: ; notranslate">
#define rand() fastRand()
</pre>
<p lang="es-ES">de manera que, cada vez que llamemos a la función <strong>rand()</strong> en nuestro código, a la hora de compilarlo, es como si estuviésemos llamando a la función <strong>fastRand()</strong>.</p>
<p lang="es-ES">Pero el poder de esta herramienta no se para con estas características, sino que nos permite definir algo parecido a funciones de forma completa. Con esto quiero decir que podemos definir macros que a la hora de editar el código y utilizarlos, podemos asumir que son funciones. Pongamos un ejemplo:</p>
<pre class="brush: cpp; title: ; notranslate">
#define max(x, y) ((x &gt; y) ? x : y)
</pre>
<p lang="es-ES">una vez hehcha esta definición, nosotros, desde nuestro código podremos llamar a esta “<em>función</em>” evitando que se gasten, entre otras cosas niveles de pila, ya que el código es sustituido durante el proceso de preprocesado, de manera que si escribimos en nuestro código:</p>
<pre class="brush: cpp; title: ; notranslate">
int a = 2;
int b = 4;
int z = max(a, b);
</pre>
<p lang="es-ES">el código que realmente se estará ejecutando una vez compilado será:</p>
<pre class="brush: cpp; title: ; notranslate">
int a = 2;
int b = 4;
int z = ((a &gt; b) ? a : b);
</pre>
<p lang="es-ES">Uno de los grandes problemas de utilizar esta técnica para sustituir a las funciones es que, como podemos observar es que, a la hora de llamar a la macro, no tenemos comprobación del tipado de los datos que le pasamos, pudiendo obtener así, resultados inesperados o incluso errores de estabilidad del programa. Hay que ser conscientes en todo momento de que los argumentos, a la hora de llamar a una macro que se comporta por una función, estarán separados por <strong>comas</strong>.</p>
<p lang="es-ES">Finalmente, a la hora de llamar a una macro, si no le pasamos el número de argumentos necesarios, obtendremos un error de preprocesador, pero en caso de que le pasemos argumentos vacíos, estos se sustiuirán por argumentos vacíos sin dar error durante el proceso de preprocesado.</p>
<div class="shr-publisher-1899"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1899&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=wYYWiOsZvnc:mPdo5_9V23M:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=wYYWiOsZvnc:mPdo5_9V23M:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=wYYWiOsZvnc:mPdo5_9V23M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=wYYWiOsZvnc:mPdo5_9V23M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=wYYWiOsZvnc:mPdo5_9V23M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=wYYWiOsZvnc:mPdo5_9V23M:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/wYYWiOsZvnc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/06/how-to-macros-en-c-i-%e2%80%93-funciones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/06/how-to-macros-en-c-i-%e2%80%93-funciones/</feedburner:origLink></item>
		<item>
		<title>10 aplicaciones gratuitas recomendadas para iPad</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/IK6AbnSHbYE/</link>
		<comments>http://www.dipler.org/2011/06/10-aplicaciones-gratuitas-recomendadas-para-ipad/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 13:00:39 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Programas]]></category>
		<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Gratis]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://www.dipler.org/2011/12/10-aplicaciones-gratuitas-recomendadas-para-ipad/</guid>
		<description><![CDATA[﻿ Recientemente adquirí un iPad 2 porque deseaba meterme en el mundillo de la programación para este tipo de dispositivos, y dado que no es lo mismo probarlos sobre una pantalla de ordenador que sobre el cacharro en si (esto es algo que he aprendido de haberme introducido en el mundo de programación de aplicaciones [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: center;">﻿<a href="http://www.dipler.org/wp-content/uploads/2011/12/iPad2_blanco.png"><img class="aligncenter size-medium wp-image-1874" title="iPad2_blanco" src="http://www.dipler.org/wp-content/uploads/2011/12/iPad2_blanco.png" alt="iPad2 blanco" width="500" height="180" /></a></p>
<p>Recientemente adquirí un iPad 2 porque deseaba meterme en el mundillo de la programación para este tipo de dispositivos, y dado que no es lo mismo probarlos sobre una pantalla de ordenador que sobre el cacharro en si (esto es algo que he aprendido de haberme introducido en el mundo de programación de aplicaciones móviles para el sistema operativo Android), decidí lanzarme a la piscina con ello.</p>
<p>El caso es que llevo dos días dándole un uso mas que aceptable al iPad, y tras ello me gustaría comentarles una serie de aplicaciones gratuitas que, a mi modo de ver, le convendría tenerla instalada si posee uno de estos cacharrilos.</p>
<p>Ante la gran cantidad de artículos de este tipo, me gustaría darle un nuevo enfoque a este post. No solo vamos a comentar las aplicaciones sino que vamos a comentarlas desde un punto mas técnico y no contando solo sus bondades, sino también sus debilidades; además, vamos a comentar las que a mi, como informático y teleco que soy ademas de bloguero, webmaster,&#8230; Me parecen interesantes desde este punto de vista&#8230;</p>
<ul>
<li><span style="text-decoration: underline;"><strong>﻿<a href="http://www.dipler.org/wp-content/uploads/2011/12/Dropbox_Icon.png"><img class="alignright size-full wp-image-1875" title="Dropbox_Icon iPad" src="http://www.dipler.org/wp-content/uploads/2011/12/Dropbox_Icon.png" alt="" width="75" height="75" /></a>Dropbox:</strong></span> en poco menos de un año, <a title="Dropbox" href="http://www.dipler.org/2010/09/dropbox/" target="_blank">Dopbox</a> se ha convertido en una de las aplicaciones imprescindibles en todos mis dispositivos, tanto móviles como no. Gracias a esta aplicación, y contando in una conexión a internet seremos capaces de acceder a nuestros ficheros en cualquier parte del mundo y equipo, llegando incluso a ofrecernos un sistema de versionado de los ficheros durante el ultimo mes. Si aun no tienes cuenta y deseas creaste una, puedes hacer click en el siguiente enlace:<a href="http://www.dropbox.com/referrals/NTkyNTM4MTk5" target="_blank">http://www.dropbox.com/referrals/NTkyNTM4MTk5</a>. Ya que si en lugar de utilizar el de la pagina principal del servicio, utiliza este, obtendrá un bonos de 250MB extra totalmente gratis.</li>
<li><strong><span style="text-decoration: underline;"><a href="http://www.dipler.org/wp-content/uploads/2011/12/images.jpg"><img class="alignright size-full wp-image-1877" title="iChromy Logo iPad" src="http://www.dipler.org/wp-content/uploads/2011/12/images.jpg" alt="" width="75" height="75" /></a>iCromy:</span></strong> es un navegador recién salido del horno que nos permitirá navegar desde nuestro tablet sin tener que recurrir a pulsar varios botones para poder navegar entre las diferentes pestañas que nos interesen. Además seremos capaces de marcar paginas como favoritas y como pendientes de lectura, esta ultima funcionalidad me ha parecido de gran interés. Finalmente y como contra he de mencionar que, entre otras mejoras, deberían habilitar el teclado especial para introducir direcciones web en la barra de navegación.</li>
<li><span style="text-decoration: underline;"><strong><a href="http://www.dipler.org/wp-content/uploads/2011/12/twitter_icon.png"><img class="alignright size-medium wp-image-1879" title="twitter_icon_iPad" src="http://www.dipler.org/wp-content/uploads/2011/12/twitter_icon-300x300.png" alt="" width="75" height="75" /></a>Twitter:</strong></span> como no, no podíamos ser menos, y es que si para android e iPhone utilizo tweetDeck, he de reconocer que, el hecho de que no este adaptada la resolución para el iPad, lo hace incomodo de utilizar, de manera que lo mas sensato es hacer uso de la aplicación oficial, ya que nos permitirá navegar sin problemas por todas las opciones que nos proporciona la red social.</li>
<li><span style="text-decoration: underline;"><strong><a href="http://www.dipler.org/wp-content/uploads/2011/12/mypad_icon.jpg"><img class="alignright size-full wp-image-1880" title="mypad_icon" src="http://www.dipler.org/wp-content/uploads/2011/12/mypad_icon.jpg" alt="" width="75" height="75" /></a>MyPad:</strong></span> Facebook es una red social que no ha desarrollado una aplicación oficial para navegar porque su red social, lo cual dificulta enormemente el uso de la red social, o bien nos obliga a utilizar la de iPhone, lo que nos obliga a conformarnos con una mala resolución. Pues bien, ante la tardanza de la aparición de aplicaciones oficiales, ha nacido MyPad, una aplicación que nos hará poder navegar por nuestro perfil sin ningún tipo de problema?</li>
<li><span style="text-decoration: underline;"><strong><a href="http://www.dipler.org/wp-content/uploads/2011/12/Screen-shot-2011-04-29-at-16.23.25.png"><img class="alignright size-full wp-image-1882" title="Screen-shot-2011-04-29-at-16.23.25" src="http://www.dipler.org/wp-content/uploads/2011/12/Screen-shot-2011-04-29-at-16.23.25.png" alt="" width="75" height="75" /></a>WordPress:</strong></span> si eres dueño, editor,&#8230; De un blog WordPress, esta aplicación no puede faltar en tu iPad, mediante esta aplicación podremos desde moderar comentarios hasta crear paginas pasando por la escritura de nuevos artículos sin tener que encender nuestro ordenador.</li>
<li><span style="text-decoration: underline;"><strong><a href="http://www.dipler.org/wp-content/uploads/2011/12/skype-logo.jpg"><img class="alignright size-full wp-image-1883" title="skype-logo" src="http://www.dipler.org/wp-content/uploads/2011/12/skype-logo.jpg" alt="" width="75" height="75" /></a>Skype:</strong></span> a pesar de ser una aplicación diseñada para el iPhone e iPod touch, y por consiguiente la resolución de la aplicación es paupérrima, no nos queda más remedio que usarla si deseamos poder utilizar esta magnífica herramienta de comunicación. Como contras nos encontramos con que con el iPad viene instalada una aplicación muy similar llamada FaceTime y que, además no cuenta con compatibilidad para videollamadas.</li>
<li><span style="text-decoration: underline;"><strong><a href="http://www.dipler.org/wp-content/uploads/2011/12/upad-app-icon.png"><img class="alignright size-full wp-image-1884" title="upad-app-icon" src="http://www.dipler.org/wp-content/uploads/2011/12/upad-app-icon.png" alt="" width="75" height="75" /></a>uPad lite:</strong></span> esta es para mi gusto la mejor aplicación para la toma de notas sobre el iPad con la que contamos en el Apple store de forma gratuita, ya que nos permite hacer zoom de zonas, establecer un área de apoyo para la mano,&#8230; Sinceramente, he de decir que es una auténtica maravilla, ya os comentaré como va la versión PRO si al final decido compraría, algo muy probable, sinceramente.</li>
<li><span style="text-decoration: underline;"><strong><a href="http://www.dipler.org/wp-content/uploads/2011/12/teamviewer1.png"><img class="alignright size-full wp-image-1889" title="teamviewer iphone logo" src="http://www.dipler.org/wp-content/uploads/2011/12/teamviewer1.png" alt="" width="75" height="75" /></a>TeamViewer:</strong></span> como ya he dicho me dedico profesional y educacionalmente al mundo de las nuevas tecnologías, y no es raro que un amigo, familiar, o simplemente yo mismo, requiera que modifique algo en su ordenador remotamente, pues bien, si utilizamos esta aplicación, seremos capaces de controlar dichos ordenadores sin pagar un céntimo siempre y cuando su uso sea de carácter personal y no comercial.</li>
<li><span style="text-decoration: underline;"><strong><a href="http://www.dipler.org/wp-content/uploads/2011/12/google-earth-icon.png"><img class="alignright size-full wp-image-1890" title="google-earth-logo" src="http://www.dipler.org/wp-content/uploads/2011/12/google-earth-icon.png" alt="" width="75" height="75" /></a>Google earth:</strong></span> una gran aplicación que deja pequeña a la aplicación maps y que que, en parte nos muestra las capacidades de renderizado de nuestro iPad, ademas es un interesante programa con el cual viajar sin gastarnos un céntimo, descubrir nuevos lugares o, simplemente planificar nuestras próximas vacaciones familiares o con los amigos.</li>
<li><span style="text-decoration: underline;"><strong><a href="http://www.dipler.org/wp-content/uploads/2011/12/187898_127330743994450_3892519_n1.jpg"><img class="alignright size-full wp-image-1891" title="TapToChat logo" src="http://www.dipler.org/wp-content/uploads/2011/12/187898_127330743994450_3892519_n1.jpg" alt="" width="75" height="75" /></a>Tap to Chat:</strong></span> la verdad es que no tenía intención de poner este tipo de aplicaciones aquí, pero la forma de presentar las conversaciones del chat de gmail por este programa me ha dejado gratamente sorprendido, definitivamente muy recomendable si utilizamos con asiduidad el chat que nos ofrece Google desde su plataforma de correo electrónico.</li>
</ul>
<p>Como habrán podido observar, la lista se asemeja a otras en parte, pero no en su totalidad, y aunque estoy seguro de que me dejo grandes programas en el tintero, como por ejemplo Evernote, he decidido no meternos en mi top 10, ya que para suplir esa necesidad ya utilizo otras aplicaciones web desde hace tiempo, como por ejemplo, la ya comentada en este blog Diary.</p>
<p>Si tienen alguna recomendación o queréis que pruebe y luego comente alguna aplicación, sienta se libres de dejar un comentario en esta entrada.</p>
<div class="shr-publisher-1871"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1871&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=IK6AbnSHbYE:cBRKhCH6O0c:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=IK6AbnSHbYE:cBRKhCH6O0c:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=IK6AbnSHbYE:cBRKhCH6O0c:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=IK6AbnSHbYE:cBRKhCH6O0c:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=IK6AbnSHbYE:cBRKhCH6O0c:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=IK6AbnSHbYE:cBRKhCH6O0c:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/IK6AbnSHbYE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/06/10-aplicaciones-gratuitas-recomendadas-para-ipad/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/06/10-aplicaciones-gratuitas-recomendadas-para-ipad/</feedburner:origLink></item>
		<item>
		<title>HOW-TO: Macros en C (I) – #define</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/B2zS3FgbHQE/</link>
		<comments>http://www.dipler.org/2011/06/how-to-macros-en-c-i-define/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 14:00:09 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[C/C++]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1856</guid>
		<description><![CDATA[Todo programador de C y C++ que se precie debe estar más o menos familiarizado con las directivas de preprocesador en general y mas concretamente, debería estarlo con las llamadas Macros. Un﻿a macro es un trozo de código, usualmente en la zona de cabecera o en los propios ficheros de cabecera (*.h). Las macros se [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Todo programador de <a href="http://www.dipler.org/category/c/" target="_blank">C y C++</a> que se precie debe estar más o menos familiarizado con las directivas de preprocesador en general y mas concretamente, debería estarlo con las llamadas <strong>Macros</strong>. Un﻿a macro es un trozo de código, usualmente en la zona de cabecera o en los propios ficheros de cabecera (*.h).</p>
<p>Las macros se definen mediante la directiva <strong>#define</strong>; veamos un ejemplo:</p>
<pre class="brush: cpp; title: ; notranslate">#define PI 3.14159</pre>
<p>Esta macro se encarga de asociar el valor <strong>3.14159</strong> con el valor <strong>PI</strong> mediante la directiva #define, es decir, la estructura sería algo así como lo siguiente:</p>
<blockquote><p>#define &lt;alias&gt; &lt;valor&gt;</p></blockquote>
<p>dónde <strong>&lt;alias&gt;</strong> es el nombre que queremos utilizar para referirnos al término que ocuparía el lugar de <strong>&lt;valor&gt;</strong>. Ésta característica de <a href="http://www.dipler.org/category/c/" target="_blank">C</a> se utiliza sobre todo para facilitar el uso de variables que durante todo el programa van a tener el mismo valor, ya sea por el hecho de que son constantes, como por ejemplo el valor del número <strong>pi (3.14159)</strong>, el valor de la gravedad terrestre <strong>g (9.81)</strong> o cualquier otra constante o porque simplmente son eso, constantes que no variarán, como por ejemplo el tamaño máximo de un array.</p>
<p>Un aspecto relativamente importante de las macros es que, por convenio, y para facilitar la lectura de las mismas en programas, se suelen utilizar letras mayúsclas, de manera que si nos encontramos con:</p>
<pre class="brush: cpp; title: ; notranslate">int main(int argc, char** argv){

printf(&quot;%f, %f&quot;, r, PI);

return 0;

}</pre>
<p>podríamos concluir que la letra <strong>r</strong> se corresponde con una variable, ya que está está (o empieza) con minúsculas, mientras que <strong>PI</strong> es un valor constante. Ambos valores han de estar definidos con anterioridad.</p>
<p>Veamos un ejemplo práctico de uso:</p>
<pre class="brush: cpp; title: ; notranslate">

#include &lt;stdio.h&gt;

#define PI 3.14159

int main(int argc, char** argv){

double radio = 25.684;

double area = PI * radio * radio;

return 0;

}</pre>
<p>La directiva #define no sólo nos servirá para definir valores de variables, sino que también podremos utilizarlo para declarar valores de arrays:</p>
<pre class="brush: cpp; title: ; notranslate">
#define CONTENIDO 0, \
                     1, \
                     2
int main(int argc, char** argv){
int valores[] = { CONTENIDO };
return 0;
}
</pre>
<p>Como habréis podido comprobar detrás de las dos primeras líneas de código aparece una barra inclinada (<strong>\</strong>), esto quiere decir que la declaración de la macro va a continuar en la línea siguiente, lo cual nos facilitará enormemente la legibilidad de nuestro código.</p>
<h2>¿Por qué nos convendría usar macros?</h2>
<p>El uso de macros puede parecer un poco absurdo de buenas a primeras, ya que podemos utilizar funciones (ya veremos más adelante el porqué de esta afirmación) o variables para conseguir los mismos resultados. La diferencia entre usar unas u otras es que al usar macros, el código del &lt;alias&gt; se sustituye por el del &lt;valor&gt; durante el proceso de pre-compilación, de manera que a la hora de compilarlo, el código queda sustituido y al ejecutarlo no tendremos que malgastar ciclos de CPU realizando cálculos como este.</p>
<h2>¿Podemos invalidar algo declarado con un #define?</h2>
<p>Efectivamente podemos hacerlo mediante el uso de la directiva de preprocesador:</p>
<pre class="brush: cpp; title: ; notranslate">#undef &lt;alias&gt;</pre>
<div class="shr-publisher-1856"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1856&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=B2zS3FgbHQE:Mv5v0wTNlgo:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=B2zS3FgbHQE:Mv5v0wTNlgo:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=B2zS3FgbHQE:Mv5v0wTNlgo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=B2zS3FgbHQE:Mv5v0wTNlgo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=B2zS3FgbHQE:Mv5v0wTNlgo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=B2zS3FgbHQE:Mv5v0wTNlgo:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/B2zS3FgbHQE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/06/how-to-macros-en-c-i-define/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/06/how-to-macros-en-c-i-define/</feedburner:origLink></item>
		<item>
		<title>Diary 0.3</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/g3jQGXJy8C8/</link>
		<comments>http://www.dipler.org/2011/05/diary-0-3/#comments</comments>
		<pubDate>Mon, 30 May 2011 14:00:46 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Producción propia]]></category>
		<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1865</guid>
		<description><![CDATA[http://diary.dipler.org Seguimos con el desarrollo de la modesta aplicación que nos permite llevar un diario mientras nos facilita la vida para llevar un listado de tareas e ideas de forma completamente privada, y es que después de un tiempo sin actualizaciones oficiales, me complace presentar Diary 2.3, esta versión viene con las siguientes novedades que, [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: center;"><a href="http://www.dipler.org/wp-content/uploads/2011/02/Diaru-0.2.1.png"><img title="Diaru 0.2.1" src="http://www.dipler.org/wp-content/uploads/2011/02/Diaru-0.2.1-300x108.png" alt="" width="300" height="108" /></a></p>
<h2 style="text-align: center;"><a href="http://diary.dipler.org/" target="_blank">http://diary.dipler.org</a></h2>
<p style="text-align: left;">Seguimos con el desarrollo de la modesta aplicación que nos permite llevar un diario mientras nos facilita la vida para llevar un listado de tareas e ideas de forma completamente privada, y es que después de un tiempo sin actualizaciones oficiales, me complace presentar Diary 2.3, esta versión viene con las siguientes novedades que, espero les parezcan interesantes:</p>
<ul>
<li>Corrección de errores puntuales en la edición de entradas categorizadas con un flag distinto al de <strong><em>Diario</em></strong>.</li>
<li>Corregido el error al pulsar el botón <strong><em>more</em></strong> después de haber realizado una búsqueda.</li>
<li>Corregido el error al codificar los signos <strong><em>+</em></strong>.</li>
<li>Mejora de los estilos para mejorar su compatibilidad con Firefox 4 e Internet Explorer 9.</li>
<li>Añadida la función de crecimiento automático del area de texto en función del contenido para mensajes nuevos.</li>
<li>Añadida la función de crecimiento automático del area de texto en función del contenido para el modo de edición de mensajes.</li>
<li>Añadidos hastags al estilo de los tags de Twitter, en los que al pulsar en ellos se realiza automáticamente una búsqueda con dchos tags.</li>
<li>Por defecto cuando llegamos a la parte final de la lista de elementos cargados, s</li>
</ul>
<h2 style="text-align: center;"><a href="http://diary.dipler.org/" target="_blank">http://diary.dipler.org</a></h2>
<div class="shr-publisher-1865"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1865&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=g3jQGXJy8C8:B7Zw02Xgito:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=g3jQGXJy8C8:B7Zw02Xgito:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=g3jQGXJy8C8:B7Zw02Xgito:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=g3jQGXJy8C8:B7Zw02Xgito:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=g3jQGXJy8C8:B7Zw02Xgito:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=g3jQGXJy8C8:B7Zw02Xgito:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/g3jQGXJy8C8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/05/diary-0-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/05/diary-0-3/</feedburner:origLink></item>
		<item>
		<title>Comportamiento Page_Init vs Page_Load (.NET)</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/f6OioaRzhlM/</link>
		<comments>http://www.dipler.org/2011/05/comportamiento-page_init-vs-page_load-net/#comments</comments>
		<pubDate>Wed, 25 May 2011 14:00:56 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1836</guid>
		<description><![CDATA[.NET es un lenguaje de programación para equipos Windows que también nos es de gran utilidad a la hora de hacer completas aplicaciones web que necesitan un plano de controlador potente. Por el contrario nos dificulta algunas tareas como las de maquetar el HTML. Me explico: en PHP, cuando ejecutamos un script este siempre genera el [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.dipler.org/wp-content/uploads/2011/05/microsoft-.net-logo.png"><img class="aligncenter size-medium wp-image-1851" title="Logo Microsoft .NET" src="http://www.dipler.org/wp-content/uploads/2011/05/microsoft-.net-logo-300x157.png" alt="Logo Microsoft .NET" width="300" height="157" /></a></p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/05/microsoft-.net-logo.png"></a>.NET es un lenguaje de programación para equipos Windows que también nos es de gran utilidad a la hora de hacer completas aplicaciones web que necesitan un plano de controlador potente. Por el contrario nos dificulta algunas tareas como las de maquetar el HTML. Me explico: en PHP, cuando ejecutamos un script este siempre genera el código HTML que ha de mostrarse desde 0 a cambio de tener que trabajarnos un poco más el sistema de control de los datos de las páginas usando, por ejemplo, sistemas como el de las sesiones, es decir, tenemos que hacerlo todo &#8220;a mano&#8221;.</p>
<p>Por el contrario .NET nos ofrece trabajar con los llamados &#8220;PostBack&#8221;, este sistema de &#8220;refresco&#8221; de las páginas convierten un sistema sin estado, como son las conexiones HTTP, es una especie de sistema con estado mediante el uso de estructuras como el ViewState.</p>
<p>Esta especie de sistema de conexión con estado hace que, en caso de querer generar HTML de forma dinámica sin plantillas previas, nuestro trabajo pueda convertirse en una ardua tarea.</p>
<p>Para ello podemos hacer uso de una función llamada <strong>Page_init</strong> ( en lugar o además de <strong>Page_load</strong>). En esta función, si bien no tiene acceso a estructuras de datos como por ejemplo el ViewState, podemos pintar en el documento un layout HTML a mano antes de que el flujo de la página siga su transcurso, incluso antes de que se cargue el ViewState. Hasta aquí todo normal, y probablemente no le suponga ninguna novedad, peqro ¿Qué pasa cuando hay un PostBack en la pagina que hemos generado de forma dinámica?</p>
<p>Respuesta: si dentro de Page_init no hacemos uso de el condicional <strong>!Page.isPostBack</strong>, es decir, no ponemos nuestro códig de generación de HTML dentro de un if con esa condición, el código HTML, además de generarse de nuevo, en caso de ser un formulario o algo parecido, este mantendrá los datos introducidos en el mismo antes de hacer dicho PostBack.</p>
<div class="shr-publisher-1836"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1836&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=f6OioaRzhlM:4LeO7fHh9kA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=f6OioaRzhlM:4LeO7fHh9kA:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=f6OioaRzhlM:4LeO7fHh9kA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=f6OioaRzhlM:4LeO7fHh9kA:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=f6OioaRzhlM:4LeO7fHh9kA:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=f6OioaRzhlM:4LeO7fHh9kA:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/f6OioaRzhlM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/05/comportamiento-page_init-vs-page_load-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/05/comportamiento-page_init-vs-page_load-net/</feedburner:origLink></item>
		<item>
		<title>Zip de la muerte – Ataque DoS en 42KB</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/Yftx9zI8jTI/</link>
		<comments>http://www.dipler.org/2011/04/zip-de-la-muerte-ataque-dos-en-42kb/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 14:00:55 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Informática]]></category>
		<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1831</guid>
		<description><![CDATA[El zip bomba o zip de la muerte es un fichero *.zip de pequeño tamaño que al descomprimirse genera ficheros que, almacenados en disco, pueden llegar a ocupar una salvajada de espacio en disco. La finalidad de este tipo de ficheros es dejar inutilizado, bloquear un equipo durante un periodo de tiempo o mantener entretenido [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>El <strong>zip bomba</strong> o <strong>zip de la muerte</strong> es un fichero *.zip de pequeño tamaño que al descomprimirse genera ficheros que, almacenados en disco, pueden llegar a ocupar una salvajada de espacio en disco. La finalidad de este tipo de ficheros es dejar inutilizado, bloquear un equipo durante un periodo de tiempo o mantener entretenido a programas antivirus.</p>
<p>Un ejemplo de este tipo de ficheros es el llamado <a title="42.zip" href="http://www.unforgettable.dk/" target="_blank">42.zip</a>, el cual es un fichero de<strong> 42.374 bytes</strong> que almacena en suinterior otros <strong>16 ficheros zip</strong> que contienen el mismo número de ficheros. Si repetimos este proceso 6 veces, obtendremos como resultado esta maravillosa arma de destrucción de ordenadores (entiendase la ironía). Finalmente, cada fichero final contiene un fichero de <strong>4,3 GB</strong>, es decir, que si hacemos unos pequeños cálculos&#8230;</p>
<li>16 x 4294967295 = 68.719.476.720 (68GB)</li>
<li>16 x 68719476720 = 1.099.511.627.520 (1TB)</li>
<li>16 x 1099511627520 = 17.592.186.040.320 (17TB)</li>
<li>16 x 17592186040320 = 281.474.976.645.120 (281TB)</li>
<li>16 x 281474976645120 = 4.503.599.626.321.920 (4,5PB)</li>
<p>Para crear uno de estos ficheros no tenemos que crear complejos algoritmos ni nada por el estilo, sino que nos bastará con crear un fichero de texto y llenarlo con valores null hasta que lleguemos al tamaño de fichero deseado, una vez comprimido el fichero se comprimirá con un ratio muy grande, de manera que somos capaces de meter tanta información en un espacio tan pequeño como 42kB.</p>
<p>Pero, ¿cómo funciona?, los servidores que se encargan de controlar que a una determinada red no entran ficheros malintencionados se ven obligados a descomprimir determinados ficheros comprimidos no cifrados de forma automática, de tal manera que si tiene que descomprimir un fichero que, una vez descomprimido llega a ocupar <strong>4,5 PB</strong> deja el servidor completamente inutilizado, no sólo por el espacio en disco que ocupa el fichero descomprimido, sino que también puede quedar colapsado por el número de ciclos de CPU utilizados.</p>
<div class="shr-publisher-1831"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1831&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Yftx9zI8jTI:0kQw392i0ts:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=Yftx9zI8jTI:0kQw392i0ts:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Yftx9zI8jTI:0kQw392i0ts:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Yftx9zI8jTI:0kQw392i0ts:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Yftx9zI8jTI:0kQw392i0ts:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=Yftx9zI8jTI:0kQw392i0ts:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/Yftx9zI8jTI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/04/zip-de-la-muerte-ataque-dos-en-42kb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/04/zip-de-la-muerte-ataque-dos-en-42kb/</feedburner:origLink></item>
		<item>
		<title>Efecto Google y Efecto Menéame</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/_lW2Ggk32GY/</link>
		<comments>http://www.dipler.org/2011/03/efecto-google-y-efecto-meneame/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 14:00:49 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Reflexiones]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Menéame]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1808</guid>
		<description><![CDATA[Dipler no es una página que nació tal y como la conocéis hoy, de hecho la que es hoy Dipler nació bajo el nombre de Bit&#8217;n'Byte y poco a poco fui adquiriendo los dominios de dipler.org y dipler.com y esto, ¿por qué?, se preguntarán. Hace ya cuatro años fundé con unos amigos una página web [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.dipler.org" target="_blank">Dipler</a> no es una página que nació tal y como la conocéis hoy, de hecho la que es hoy Dipler nació bajo el nombre de <a href="http://www.bitnbyte.org" target="_blank">Bit&#8217;n'Byte</a> y poco a poco fui adquiriendo los dominios de<a href="http://www.dipler.org" target="_blank"> dipler.org</a> y<a href="http://www.dipler.com" target="_blank"> dipler.com</a> y esto, ¿por qué?, se preguntarán. Hace ya cuatro años fundé con unos amigos una página web en formato de blog de contenidos generales llamada Dipler, esta página, si bien no consiguió llegar a tener un gran número de visitas diarias (los mejores días no llegaba a 100 usuarios), en relativamente poco tiempo consiguió un hito nada fácil de conseguir llegar a la portada de <a href="http://www.meneame.net" target="_blank">Menéame</a> con un artículo escrito por Jaime Ochoa:</p>
<p><a href="../wp-content/uploads/2011/03/meneame.jpg"><img class="aligncenter" title="meneame" src="http://www.dipler.org/wp-content/uploads/2011/03/meneame.jpg" alt="" width="511" height="163" /></a><a href="http://www.dipler.org/wp-content/uploads/2011/03/meneame.jpg"><br />
</a></p>
<p>Esto nos propició en menos de un día, concretamente en unas pocas horas, la friolera de más de <strong>3.000</strong> visitantes únicos, lo cual para mi y para mis compañeros editores nos pareció una auténtica barbaridad. Esperábamos que de todas esas visitas al menos un porcentaje se viese atraído por el contenido de la página y que siguiesen visitándonos, desafortunadamente eso no pasó, al menos en la medida que nos esperábamos, cayendo las visitas de nuevo de forma abrupta a un punto similar al anterior, es decir, en un día aumentó en un <strong>3.000%</strong> el número de visitas y al día siguiente cayó de nuevo a la normalidad.</p>
<p>Relativamente poco después de este suceso, desafortunadamente y por motivos de falta de tiempo de los componentes del equipo, la página original de Dipler murió y naciendo así, el<strong> 21 de julio de 2008</strong>, la página que hoy conocéis y cuyo principal editor soy yo. Esta página volvió a alcanzar los últimos puestos de la portada de menéame y de bitácoras alguna que otra vez, pero en ningún momento se volvió a repetir dicho efecto de una forma tan pronunciada hasta el pasado viernes 11 de febrero de 2011.</p>
<p>El día 11 de febrero a las 10 de la mañana, entré en el sistema de estadísticas de Google Analytics y me llevé una sorpresa al ver que el número de visitas del día ascendía a algo más de <strong>2.000</strong>, sobre todo si tenemos en cuenta que el número medio de visitas de esta página web es de unos 300 usuarios al día.</p>
<p>Rápidamente se me vino a la cabeza el ya conocido por nosotros &#8220;<em>Efecto Menéame</em>&#8220;, pero para que eso sucediese tendría que estar, no solo en portada, sino en una de las primeras lineas de la página. Esto se me antojaba extraño, porque el último post que había publicado hasta esa fecha era <a href="http://www.dipler.org/2011/02/diary-0-2-1/" target="_blank">Diary 0.2.1</a> (10/02/2011), el cual, ni mucho menos era propio de una portada de Menéame, ya que no era una noticia relevante, ni mucho menos  por muy útil que les parezca a algunos dicha utilidad. Así que decidí seguir investigando en Google Analytics para ver de dónde procedían las visitas (quizá debería haber hecho eso desde un principio, pero nadie es perfecto).</p>
<p>Tras ir al apartado de fuentes de tráfico vi que la inmensa mayoría de las visitas provenían referenciadas desde Google, lo cual se me antojaba aun más extraño que el hecho de que<strong> </strong>el artículo que contaba las últimas novedades en Diary 0.2.1 hubiese sido portada en Menéame. Tras indagar un poco más vi que las palabras claves de acceso a la página que estaban redireccionando a esta página esa ingente cantidad de tráfico  eran &#8220;<em>Thomas Edison</em>&#8220;.</p>
<p>O todo el mundo tiene que hacer un trabajo sobre Edison al mismo momento o, sinceramente, no se me ocurría qué podía estar sucediendo. A todo esto las visitas la casi llegaban a las <strong>3.000</strong>. Minutos más tarde entro en Google y me encuentro con el siguiente Doodle:</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/03/Doodle-Edison.gif"><img class="aligncenter size-full wp-image-1814" title="Doodle Edison" src="http://www.dipler.org/wp-content/uploads/2011/03/Doodle-Edison.gif" alt="" width="450" height="180" /></a></p>
<p>¡Ya está! Esta era la respuesta que estaba buscando, se celebraba un evento relacionado con Edison y uno de los artículos de este blog aparecía bien posicionado bajo esas palabras clave, de hecho la imágen que encabezaba el artículo aparecía la primera de todas en Google Images.</p>
<p>Dado que los Doodles suelen estar online por un periodo de 24h o más (dado que México, venezuela,&#8230; son países en los que se habla también el español y hay una gran diferencia horaria), me planteé muy seriamente si mi humilde servidor compartido, que no es capaz de cumplir los requisitos de velocidad de algunos buscadores, sería capaz de atender todo el tráfico que se avecinaba sin caerse, sobre todo teniendo en cuenta que hay varias páginas alojadas en mi cuenta y supongo que lo mismo en las de los otros usuarios. Para minimizar el consumo y los tiempos de despachado de páginas, habilité rápidamente todos los sistemas de cacheado que tenía a mi disposición, ya que mil visitas por hora es una cifra bastante elevada para un hosting compartido. Tras esto me acordé del post &#8220;<a href="http://www.elculodelmundo.com/aguantar-una-portada-en-meneame/">cómo aguantar una portada de Menéame</a>&#8221; y me dispuse a cachear la página el sitios externos por si tenía que redirigir el tráfico desde la página principal.</p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/03/google-analytics.png"><img class="aligncenter" title="google analytics" src="http://www.dipler.org/wp-content/uploads/2011/03/google-analytics.png" alt="" width="690" height="126" /></a></p>
<p>Sorprendentemente el servidor aguantó estoicamente durante <strong>36 </strong>horas aproximadamente y soportando de media unas <strong>1.000 visitas por hora</strong>, llegando a alcanzar las <strong>26.394</strong> visitas el día 11 de febrero y <strong>9.868</strong> visitas el día 24 de febrero. Mi más sincera enhorabuena al personal de Dreamhost y de los desarrolladores del plugin super caché para WordPress.</p>
<p>De nuevo, ingénuo de mí, pensé que alguna de esas visitas se convertiría en asiduos a la página, pero de nuevo, esto sucedió de una forma muy leve. No obstante, es impresionante el poder de algunas páginas web véase, en este caso,  Google a la hora de redireccionar visitas de un lado para otro.</p>
<div class="shr-publisher-1808"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1808&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=_lW2Ggk32GY:ROcyT0GSIU4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=_lW2Ggk32GY:ROcyT0GSIU4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=_lW2Ggk32GY:ROcyT0GSIU4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=_lW2Ggk32GY:ROcyT0GSIU4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=_lW2Ggk32GY:ROcyT0GSIU4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=_lW2Ggk32GY:ROcyT0GSIU4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/_lW2Ggk32GY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/03/efecto-google-y-efecto-meneame/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/03/efecto-google-y-efecto-meneame/</feedburner:origLink></item>
		<item>
		<title>Diary 0.2.2</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/ncn2XHBHFaA/</link>
		<comments>http://www.dipler.org/2011/03/diary-0-2-2/#comments</comments>
		<pubDate>Fri, 04 Mar 2011 14:00:54 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1815</guid>
		<description><![CDATA[http://diary.dipler.org Llevabamos ya un tiempo sin añadirle mejoras a la aplicación Diary, así que he creido oportuno lanzar una actualización en estas fechas. Si bien la actualización no tiene grandes mejoras abre paso a un nuevo ámbito de desarrollo. Para futuras versiones se pretende añadir notificaciones por email, planificar tareas para fechas seleccionadas y la [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.dipler.org/wp-content/uploads/2011/02/Diaru-0.2.1.png"></a><a href="http://www.dipler.org/wp-content/uploads/2011/02/Diaru-0.2.1.png"><img class="aligncenter size-medium wp-image-1779" title="Diaru 0.2.1" src="http://www.dipler.org/wp-content/uploads/2011/02/Diaru-0.2.1-300x108.png" alt="" width="300" height="108" /></a></p>
<h2 style="text-align: center;"><a href="http://diary.dipler.org/" target="_blank">http://diary.dipler.org</a></h2>
<p>Llevabamos ya un tiempo sin añadirle mejoras a la aplicación Diary, así que he creido oportuno lanzar una actualización en estas fechas. Si bien la actualización no tiene grandes mejoras abre paso a un nuevo ámbito de desarrollo. Para futuras versiones se pretende añadir notificaciones por email, planificar tareas para fechas seleccionadas y la integración de la aplicación con redes sociales como Facebook y/o Twitter.</p>
<p>En resúmen, las mejoras añadidas y los errores corregidos en esta versión son los siguientes:</p>
<ul>
<li>Mejorado el rendimiento interno de alguna de las funciones del núcleo de la aplicación.</li>
<li>Se permite el borrado de entradas.</li>
<li>Se permite la edición de entradas (en caso de ser una tarea, esta estará marcada como no terminada por defecto.</li>
<li>Cambios leves en las estrucutras de datos que almacenan la información relativa a las entradas.</li>
<li>Añadidos efectos de transiciones en la barra de notificaciones.</li>
<li>Movida a la parte inferior la barra de notifiaciones.</li>
<li>Corregido el error al introducir en una entrada la barra inclinada &#8220;\&#8221;.</li>
<li>Si una tarea está finalizada se mostrará el borde de color verde.</li>
<li>Mejorada la notificación de cargando.</li>
<li>Leve cambio en la hoja de estilos en lo relevante a enlaces,&#8230;</li>
</ul>
<div class="shr-publisher-1815"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1815&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=ncn2XHBHFaA:xZAzrg8r6Sg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=ncn2XHBHFaA:xZAzrg8r6Sg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=ncn2XHBHFaA:xZAzrg8r6Sg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=ncn2XHBHFaA:xZAzrg8r6Sg:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=ncn2XHBHFaA:xZAzrg8r6Sg:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=ncn2XHBHFaA:xZAzrg8r6Sg:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/ncn2XHBHFaA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/03/diary-0-2-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/03/diary-0-2-2/</feedburner:origLink></item>
		<item>
		<title>Ubuntu 11.04 y Unity</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/KCzhgYr4FUk/</link>
		<comments>http://www.dipler.org/2011/03/ubuntu-11-04-y-unity/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 14:00:55 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Unity]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1796</guid>
		<description><![CDATA[Tal y como algunos de vosotros ya sabréis, la nueva versión de Ubuntu 11.04 Natty Narwhal realiza un cambio radical en lo que a interfaz de usuario se refiere, y es que pasaremos de utilizar el ya conocido por muchos entorno de escritorio llamado Gnome al no tan conocido Unity. Este sistema de gestión de [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.dipler.org/wp-content/uploads/2011/02/images.jpg"><img class="aligncenter size-full wp-image-1799" title="Ubuntu logo" src="http://www.dipler.org/wp-content/uploads/2011/02/images.jpg" alt="ubuntu logo" width="271" height="186" /></a></p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/02/images.jpg"></a>Tal y como algunos de vosotros ya sabréis, la nueva versión de<a href="http://www.ubuntu.com/" target="_blank"> Ubuntu 11.04 Natty Narwhal</a> realiza un cambio radical en lo que a interfaz de usuario se refiere, y es que pasaremos de utilizar el ya conocido por muchos entorno de escritorio llamado <a href="www.gnome.org" target="_blank">Gnome</a> al no tan conocido Unity. Este sistema de gestión de escritorios ya está implementado en la versión actual 10.10 para netbooks.</p>
<p>Hasta este momento, las versiones alpha de este sistema operativo estaban bastante verdes, ya que, entre otras cosas, no funcionaba correctamente la combinación de teclas Alt+Tab,&#8230; pero recientemente se han realizado una serie de mejoras muy importantes, entre las que nos encontramos un buen funcionamiento de dicha combinación de teclas y otras mejoras en la experiencia del usuario a la hora de interactuar con el equipo.</p>
<p>Algunas de las grandes mejoras introducidas en esta versión de Ubuntu son:</p>
<h1>Aumento del espacio de trabajo</h1>
<p style="text-align: center;"><a href="http://www.dipler.org/wp-content/uploads/2011/02/Ubuntu-Unity.png"><img class="aligncenter size-full wp-image-1800" title="Ubuntu Unity" src="http://www.dipler.org/wp-content/uploads/2011/02/Ubuntu-Unity.png" alt="Ubuntu Unity" width="1066" height="85" /></a></p>
<p>Se elimina la barra de tareas inferior para integrarlo todo en el dock lateral, además de en la barra superior, lugar en el que aparecerá tanto el menú de la aplicación como la cabecera de la ventana que tiene el foco (esto último solo en caso de que la aplicación esté maximizada).</p>
<h1>Selección de ventana</h1>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/02/Ubuntu-Unity-mac-view.jpg"><img class="aligncenter size-large wp-image-1802" title="Ubuntu Unity mac view" src="http://www.dipler.org/wp-content/uploads/2011/02/Ubuntu-Unity-mac-view-1024x575.jpg" alt="" width="1024" height="575" /></a></p>
<p>Además de poder cambiar presionando Alt+Tab, si tenemos la misma aplicación abierta varias veces, esta estará agrupada en el dock, y al hacer click sobre su correspondiente icono se nos mostrarán todas las ventanas en ejecución al más puro estilo OS X, de manera que podremos saber con facilidad cual de estas pantallas es la que deseamos traer al frente.</p>
<h1>Posiciones predefinidas de ventana</h1>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/02/Ubuntu-Unity-windows-7-resize.jpg"><img class="aligncenter size-large wp-image-1803" title="Ubuntu Unity windows 7 resize" src="http://www.dipler.org/wp-content/uploads/2011/02/Ubuntu-Unity-windows-7-resize-1024x575.jpg" alt="Ubuntu Unity windows 7 resize" width="1024" height="575" /></a></p>
<p>Una de las novedades que más me gustaron de las que vinieron de la mano de Windows 7, si no la que más, es que en función de la posición del escritorio a la que arrastremos la ventana, esta se maximizará o tomará una forma determinada, de modo que nos evita tener que redimensionar manualmente las ventanas si, por ejemplo, deseamos tener dos medias ventanas activas.</p>
<div class="shr-publisher-1796"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1796&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=KCzhgYr4FUk:rxakw1Jvygs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=KCzhgYr4FUk:rxakw1Jvygs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=KCzhgYr4FUk:rxakw1Jvygs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=KCzhgYr4FUk:rxakw1Jvygs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=KCzhgYr4FUk:rxakw1Jvygs:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=KCzhgYr4FUk:rxakw1Jvygs:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/KCzhgYr4FUk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/03/ubuntu-11-04-y-unity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/03/ubuntu-11-04-y-unity/</feedburner:origLink></item>
		<item>
		<title>Marcar todos los CheckBox de un ListVieW</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/syD40MtNIY8/</link>
		<comments>http://www.dipler.org/2011/02/marcar-todos-los-checkbox-de-un-listview/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 14:00:44 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1786</guid>
		<description><![CDATA[Hace una semana comentábamos el modo de crear un ListView para Android con, como mínimo, un CheckBox en cada fila de la lista. Este mini tutorial de hoy, en el que vamos a explicar como marcar de una todos los CheckBox de un ListView, vamos a basarnos en el contenido explicado en dicho artículo. En [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.dipler.org/wp-content/uploads/2011/02/item-selected.png"><img class="size-medium wp-image-1788 alignleft" title="ListView With Checkbox" src="http://www.dipler.org/wp-content/uploads/2011/02/item-selected-225x300.png" alt="" width="225" height="300" /></a>Hace una <a href="http://www.dipler.org/2011/02/solucionando-el-problema-de-los-listview-con-checkbox-en-android/" target="_blank">semana comentábamos el modo de crear un ListView</a> para <strong>Android</strong> con, como mínimo, un <strong>CheckBox</strong> en cada fila de la lista. Este mini tutorial de hoy, en el que vamos a explicar como marcar de una todos los <strong>CheckBox</strong> de un <strong>ListView</strong>, vamos a basarnos en el contenido explicado en dicho artículo.</p>
<p>En principio la metodología parece sencilla, en nuestro fichero main.xml, además de declarar un <strong>ListView</strong>, declaramos en la parte inferior un <strong>CheckBox</strong> cuyo comportamiento determinaremos más adelante, de manera que el contenido del <strong>main.xml</strong> quedaría de la siguiente manera:</p>
<h2><strong>main.xml</strong></h2>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:orientation=&quot;vertical&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;&gt;
    &lt;ListView
    	android:id=&quot;@+id/list&quot;
    	android:layout_width=&quot;fill_parent&quot;
    	android:layout_height=&quot;wrap_content&quot;
        android:layout_weight=&quot;1&quot;
        android:drawSelectorOnTop=&quot;false&quot;/&gt;
	&lt;CheckBox
		android:id=&quot;@+id/chkSelectAll&quot;
		android:text=&quot;@string/chkSelectAll&quot;
		android:visibility=&quot;visible&quot;
		android:layout_width=&quot;fill_parent&quot;
		android:layout_height=&quot;wrap_content&quot;/&gt;
&lt;/LinearLayout&gt;
</pre>
<p>Hasta aquí todo ha sido coser y cantar, de nuevo hemos de definir un fichero con el Layout de cada una de las filas de lo que será nuestro <strong>ListView</strong>, en nuestro caso <strong>item.xml</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
	android:layout_height=&quot;wrap_content&quot;
	android:layout_width=&quot;fill_parent&quot;&gt;
	&lt;CheckBox
		android:id=&quot;@+id/chkItem&quot;
		android:visibility=&quot;visible&quot;
		android:layout_width=&quot;fill_parent&quot;
		android:layout_height=&quot;wrap_content&quot;/&gt;
&lt;/LinearLayout&gt;
</pre>
<p>Una vez que tenemos hecho esto nos bastará con definir el comportamiento de la clase principal para que al marchar el <strong>chkSelectAll</strong> se marquen todos los <strong>CheckBox</strong> de la lista, para ello en un principio, con poner el array que determina el valor de cada <strong>CheckBox</strong> a <em>true</em> o <em>false</em>, en función del caso, debería sernos suficiente. Para ello añadiríamos en el <strong>onCreate</strong> las liguientes lineas:</p>
<pre class="brush: java; title: ; notranslate">
        chkAll = (CheckBox)findViewById(R.id.chkSelectAll);
        chkAll.setOnCheckedChangeListener(new OnCheckedChangeListener(){
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				for (int i = 0; i &lt; adapter.getItemsLength(); i++) {
    	                                adapter.set(i, b);
    	                        }
			}
        });
</pre>
<p>El problema nos lo encontramos cuando lo que queremos es que además de marcarlos en el sistema queremos que se visualicen los <strong>CheckBox</strong> marcados directamente, para ello, lo que podemos hacer (<strong><span style="text-decoration: underline;">AVISO</span></strong>: es una solución un poco cutre y simplemente para salir del paso) es reasignar el adaptador, para lo que después del for podríamos añadir las siguientes lineas:</p>
<pre class="brush: java; title: ; notranslate">
        int pos = list.getFirstVisiblePosition();
    	list.setAdapter(adapter);
    	list.setSelection(pos);
</pre>
<p>Si ahora compilamos y ejecutamos el código podremos observar como el comportamiento es el deseado.</p>
<div class="shr-publisher-1786"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1786&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=syD40MtNIY8:Pph_OWgNS4w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=syD40MtNIY8:Pph_OWgNS4w:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=syD40MtNIY8:Pph_OWgNS4w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=syD40MtNIY8:Pph_OWgNS4w:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=syD40MtNIY8:Pph_OWgNS4w:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=syD40MtNIY8:Pph_OWgNS4w:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/syD40MtNIY8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/02/marcar-todos-los-checkbox-de-un-listview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/02/marcar-todos-los-checkbox-de-un-listview/</feedburner:origLink></item>
		<item>
		<title>Solucionando el problema de los ListView con Checkbox en Android</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/ZYo7qvFwP1Q/</link>
		<comments>http://www.dipler.org/2011/02/solucionando-el-problema-de-los-listview-con-checkbox-en-android/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 14:00:11 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Manuales]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1784</guid>
		<description><![CDATA[Android es un gran sistema operativo para móviles que le supone una competencia directa al iOS, y por lo tanto meterse como programador en su mundo puede ser algo muy atractivo. Pero como programadores más o menos experimentados sabemos que no todo es un paseo, tal y como algunos pretenden plantearlo; siempre surgen problemas que [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.dipler.org/wp-content/uploads/2011/02/item-selected.png"><img class="size-medium wp-image-1788 alignleft" title="ListView With Checkbox" src="http://www.dipler.org/wp-content/uploads/2011/02/item-selected-225x300.png" alt="" width="225" height="300" /></a><strong>Android</strong> es un gran sistema operativo para móviles que le supone una competencia directa al <strong>iOS</strong>, y por lo tanto meterse como programador en su mundo puede ser algo muy atractivo. Pero como programadores más o menos experimentados sabemos que no todo es un paseo, tal y como algunos pretenden plantearlo; siempre surgen problemas que habremos de solucionar. Hoy, vamos a ver como evitar que, al tener un <strong>ListView</strong> en el que cada fila contenga un <strong>CheckBox</strong>, al hacer scroll, los elementos de la parte no visible se marquen al marcar uno de la parte visible de manera automática.</p>
<h1>¿Por qué?</h1>
<p>Esto sucede porque Android reutiliza las mismas vistas una y otra vez a la hora de pintar los elementos en pantalla, de manera que aunque el CheckBox que ha de mostrar no está seleccionado, se mostrará como tal dado que uno visible anteriormente ya lo estaba. De este modo se ahorra una gran cantidad de ciclos de CPU a la hora de generar la imagen que se va a mostrar.</p>
<p>Cómo podemos ver, el comportamiento por defecto del sistema operativo no siempre nos viene bien ya que, en casos como este, puede dar lugar a confusiones en el usuario final de la aplicación.</p>
<h1>Solución</h1>
<p>La manera de solucionar este pequeño inconveniente, aunque no de la forma más óptima, es tan simple como establecer a mano el valor del CheckBox que ha de mostrarse en cada momento, para ello tendremos que apoyarnos en una serie de clases y ficheros <strong>XML</strong>.</p>
<p>Antes de nada, vamos a analizar los ficheros que componen nuestro <strong>Layout</strong>, es decir, el que establece la distribución de la pantalla principal y el que establece el aspecto de cada una de las filas.</p>
<h3>main.xml</h3>
<div id="_mcePaste">
<pre class="brush: xml; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
android:orientation=&quot;vertical&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;fill_parent&quot;&gt;
&lt;ListView
android:id=&quot;@+id/list&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;wrap_content&quot;
android:layout_weight=&quot;1&quot;
android:drawSelectorOnTop=&quot;false&quot;/&gt;
&lt;/LinearLayout&gt;</pre>
</div>
<h3>row.xml</h3>
<pre class="brush: xml; title: ; notranslate">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
android:layout_height=&quot;wrap_content&quot;
android:layout_width=&quot;fill_parent&quot;&gt;
&lt;CheckBox
android:id=&quot;@+id/chkItem&quot;
android:visibility=&quot;visible&quot;
android:layout_width=&quot;fill_parent&quot;
android:layout_height=&quot;wrap_content&quot;/&gt;
&lt;/LinearLayout&gt;</pre>
<p>Tal y como se puede observar, hasta este momento no hemos hecho más que definir dos layouts, uno que contiene un <strong>ListView</strong> y otro que contiene el <strong>CheckBox</strong> que ha de aparecer en cada fila.</p>
<p>Prosigamos programando nuestra clase <strong>Java</strong> para manejar estos <strong>Layouts</strong>:</p>
<pre class="brush: java; title: ; notranslate">package org.dipler.chkList;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class Main extends Activity {
private ChkListAdapter adapter;
private ListView list;
private CheckBox chkAll;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list = (ListView)findViewById(R.id.list);
fillList();
}

private void fillList() {
int num = 50;
adapter = new ChkListAdapter(num);
for(int i = 0; i &lt; num; i++){
adapter.addItem(new Item(String.valueOf(i), &quot;item number &quot; + i));
}
list.setAdapter(adapter);
}

private class ChkListAdapter extends BaseAdapter {
private ArrayList&lt;Item&gt; items = new ArrayList&lt;Item&gt;();
private LayoutInflater inflater;
private boolean[] itemSelection;
public ChkListAdapter(int size) {
inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.itemSelection = new boolean[size];
}

public void addItem(final Item item) {
items.add(item);
notifyDataSetChanged();
}

@Override
public int getCount() {
return items.size();
}

@Override
public String getItem(int position) {
return items.get(position).toString();
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.row, null);
final ViewHolder holder = new ViewHolder();
holder.chkItem = (CheckBox)convertView.findViewById(R.id.chkItem);
holder.chkItem.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
itemSelection[position] = holder.chkItem.isChecked();
}
});

holder.chkItem.setChecked(itemSelection[position]);
convertView.setTag(holder);
holder.chkItem.setText(getItem(position));
return convertView;
}

public int getItemsLength() {
if(itemSelection == null) return 0;
return itemSelection.length;
}

public void set(int i, boolean b) {
itemSelection[i] = b;
}

}

public static class ViewHolder {
public CheckBox chkItem;
}

}</pre>
<p>Como podemos observar el la, bueno, las clases Java que hemos declarado tenemos:</p>
<ul>
<li>La clase <strong>Activity</strong> principal que utiliza el Layout <strong>main.xml</strong> y que en el método<strong> onCreate()</strong> rellena el <strong>ListView</strong> con elementos, en nuestro caso de tipo <strong>Item</strong> (Item es una clase cualquiera con dos atributos, un id y un texto)</li>
<li>El adapter, que es la clase que se va a dedicar a repintar las filas tantas veces como sea necesario llamando al método <strong>getView() </strong>en cada una de esas ocasiones.</li>
<li>La clase <strong>ViewHolder</strong> que nos facilita el trabajo con la clase Row, esta clase no es en sí necesaria, pero vi la idea en <a href="http://android.amberfog.com/?p=296" target="_blank">amberfog</a> y me gustó, de hecho de esta misma página obtuve una visión mucho más clara del funcionamiento de estos artificios llamados &#8220;Views&#8221;</li>
</ul>
<p>El procedimiento para evitar que se marquen solos los CheckBox que cumplen el periodo, es sencillo, llevamos un array de booleanos en el que establecemos el estado de cada elemento de la lista confome cambia el valor del CheckBox, de manera que cada vez quedeseemos mostrar dicho elemento, el método <strong>getView()</strong>, en lugar de pintar como cree que debería pintar estos CheckBox, los muestra marcados o desmarcados en función del array que hemos creado y que vamos actualizando dinámicamente.</p>
<p>El método propuesto no es el más eficiente que nos podamos encontrar, pero funciona y nos puede ayudar a salir del paso.</p>
<div class="shr-publisher-1784"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1784&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=ZYo7qvFwP1Q:NIgclNbvH4Q:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=ZYo7qvFwP1Q:NIgclNbvH4Q:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=ZYo7qvFwP1Q:NIgclNbvH4Q:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=ZYo7qvFwP1Q:NIgclNbvH4Q:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=ZYo7qvFwP1Q:NIgclNbvH4Q:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=ZYo7qvFwP1Q:NIgclNbvH4Q:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/ZYo7qvFwP1Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/02/solucionando-el-problema-de-los-listview-con-checkbox-en-android/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/02/solucionando-el-problema-de-los-listview-con-checkbox-en-android/</feedburner:origLink></item>
		<item>
		<title>Diary 0.2.1</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/Um6AIuk37uo/</link>
		<comments>http://www.dipler.org/2011/02/diary-0-2-1/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 23:00:39 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Producción propia]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1777</guid>
		<description><![CDATA[http://diary.dipler.org Como ya sabréis, las versiones de Diary 0.2.x están girando en torno a los diferentes tipos de entradas que podemos tener, así como en una mejora del rendimiento y de la seguridad que presenta la aplicación para permitir al usuario utilizar de una forma sencilla y práctica la aplicación sin tener que preocuparse de [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.dipler.org/wp-content/uploads/2011/02/Diaru-0.2.1.png"><img class="aligncenter size-medium wp-image-1779" title="Diaru 0.2.1" src="http://www.dipler.org/wp-content/uploads/2011/02/Diaru-0.2.1-300x108.png" alt="" width="300" height="108" /></a></p>
<h2 style="text-align: center;"><a href="http://diary.dipler.org" target="_blank">http://diary.dipler.org</a></h2>
<p>Como ya sabréis, las versiones de <a href="http://www.dipler.org/2011/02/diary-0-2/" target="_blank">Diary 0.2</a>.x están girando en torno a los diferentes tipos de entradas que podemos tener, así como en una mejora del rendimiento y de la seguridad que presenta la aplicación para permitir al usuario utilizar de una forma sencilla y práctica la aplicación sin tener que preocuparse de nada en absoluto. Dentro de las mejoras podemos diferenciar las de dos tipos:</p>
<ul>
<li>De usuario (mejora la experiencia del usuario para con la aplicación)
<ul>
<li>Nueva interfaz de usuario</li>
<li>Nueva interfaz de búsqueda con nuevos filtros</li>
<li>Nuevo estilo de marcado de tareas pendientes y terminadas (imágenes en lugar de chekbox)</li>
</ul>
</li>
<li>De servicio (mejora la calidad del servicio de forma transparente al usuario)
<ul>
<li>Ajax combinado con XML</li>
<li>Mayor seguridad a la hora de intentar replicar sesiones</li>
</ul>
</li>
</ul>
<p>Por el momento la aplicación está optimizada, como ya hemos dicho, para navegadores modernos, es decir, últimas versiones de Chrome y Firefox, en este último caso, y para sacarle el máximo jugo a la interfaz, será necesario el uso de Firefox 4.0</p>
<h2 style="text-align: center;"><a href="http://diary.dipler.org" target="_blank">http://diary.dipler.org</a></h2>
<div class="shr-publisher-1777"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1777&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Um6AIuk37uo:QqvRU3ZFhQU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=Um6AIuk37uo:QqvRU3ZFhQU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Um6AIuk37uo:QqvRU3ZFhQU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Um6AIuk37uo:QqvRU3ZFhQU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=Um6AIuk37uo:QqvRU3ZFhQU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=Um6AIuk37uo:QqvRU3ZFhQU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/Um6AIuk37uo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/02/diary-0-2-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/02/diary-0-2-1/</feedburner:origLink></item>
		<item>
		<title>Publicar una aplicación de Android en el Market sin disgustos</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/-4FO3E7Ro7E/</link>
		<comments>http://www.dipler.org/2011/02/publicar-una-aplicacion-de-android-en-el-market-sin-disgustos/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 21:27:45 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Manuales]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1774</guid>
		<description><![CDATA[Muchos son los manuales que a día de hoy nos &#8220;enseñan&#8221;, o al menos eso dicen, a publicar con todo detalle los pasos para publicar nuestras aplicaciones para android en el market, y no digo que no sea cierta dicha aseveración, sino que, además deberían contar algunos inconvenientes a la hora de hacerlo, vamos a [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Muchos son los manuales que a día de hoy nos &#8220;enseñan&#8221;, o al menos eso dicen, a publicar con todo detalle los pasos para publicar nuestras aplicaciones para android en el market, y no digo que no sea cierta dicha aseveración, sino que, además deberían contar algunos inconvenientes a la <a href="https://market.android.com/details?id=org.dipler.sec" target="_blank">hora de hacerlo</a>, vamos a intentar proponer estos baches que a mi me han hecho perder un poco de tiempo para que no tengáis que perderlo vosotros también.</p>
<p>Este artículo parte de que todo lo que pone en el <a href="http://developer.android.com/guide/publishing/preparing.html" target="_blank">resto</a> de <a href="http://developer.android.com/guide/publishing/app-signing.html#cert" target="_blank">páginas</a> lo sabéis y no tenéis demasiado problema a la hora de hacer (en caso de dudas, preguntad sin temor en los comentarios de este artículo).</p>
<p>Lo más probable, es que si estás leyendo este artículo es que desarrolles aplicaciones para dispositivos con una versión de Android instalada superior a la 1.5.</p>
<p>A la hora de publicar para estas versiones aplicaciones hemos de tener en cuenta varios parámetros de fichero AndroidManifest.xml y, es que, para que se publique en el android para todos los dispositivos tendremos que decirlo expresamente en este fichero:</p>
<pre class="brush: xml; title: ; notranslate">&lt;manifest ...&gt;
&lt;uses-sdk android:minSdkVersion=&quot;4&quot; /&gt;
 &lt;supports-screens
 android:largeScreens=&quot;true&quot;
 android:normalScreens=&quot;true&quot;
 android:smallScreens=&quot;true&quot;
 android:anyDensity=&quot;true&quot; /&gt;</pre>
<p>En estas líneas estamos diciendo que independientemente del tipo de pantalla de nuestro dispositivo, la aplicación va a ser compatible. Si no incluimos estas líneas, veremos como nuestra aplicación aparece en el <a href="https://market.android.com/details?id=org.dipler.sec" target="_blank">Market</a> para pantallas normales y grandes, pero no para pequeñas, es decir, en mi caso, la aplicación no se mostraba para mi <a href="http://www.dipler.org/2010/12/vodafone-y-htc-wildfire/" target="_blank">HTC Wildfire</a>, dispositivo en el que había estado haciendo todo el proceso de depurado de la aplicación.</p>
<p>Por otra parte, si deseamos publicar una aplicación de pago, deberemos tener una empresa registrada para darla como dato en la página de <a href="https://checkout.google.com/" target="_blank">Google Checkout</a>, la cual nos serviría para recibir pagos. Como alternativa recomiendo hacer uso de sistemas publicitarios en caso de que deseemos sacar algo de dinero de la aplicación y no tengamos empresa a la que asociar nuestra cuenta.</p>
<div class="shr-publisher-1774"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1774&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=-4FO3E7Ro7E:pJ2z4Na-dns:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=-4FO3E7Ro7E:pJ2z4Na-dns:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=-4FO3E7Ro7E:pJ2z4Na-dns:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=-4FO3E7Ro7E:pJ2z4Na-dns:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=-4FO3E7Ro7E:pJ2z4Na-dns:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=-4FO3E7Ro7E:pJ2z4Na-dns:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/-4FO3E7Ro7E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/02/publicar-una-aplicacion-de-android-en-el-market-sin-disgustos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/02/publicar-una-aplicacion-de-android-en-el-market-sin-disgustos/</feedburner:origLink></item>
		<item>
		<title>Diary 0.2</title>
		<link>http://feedproxy.google.com/~r/Bitnbyte/~3/-MsMAeyNj2M/</link>
		<comments>http://www.dipler.org/2011/02/diary-0-2/#comments</comments>
		<pubDate>Thu, 03 Feb 2011 19:30:10 +0000</pubDate>
		<dc:creator>Alejandro Escario</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Producción propia]]></category>
		<category><![CDATA[Programas]]></category>
		<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://www.dipler.org/?p=1764</guid>
		<description><![CDATA[http://diary.dipler.org Como ya comenté en el post de introducción de Diary 0.1.2, esa versión no era nada más que un aperitivo de la que estaba desarrollando en ese momento y, dado que algunas personas me recordaron lo incómodo que era el cambio de hora en los artículos escritos hice una pre-versión estable y la subí, [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: center;"><a href="http://www.dipler.org/wp-content/uploads/2011/01/Sin-nombre.jpeg"><img title="Diary" src="http://www.dipler.org/wp-content/uploads/2011/01/Sin-nombre-300x168.jpg" alt="" width="300" height="168" /></a></p>
<h2 style="text-align: center;"><a href="http://diary.dipler.org" target="_blank">http://diary.dipler.org</a></h2>
<p>Como ya comenté en el post de introducción de Diary 0.1.2, esa versión no era nada más que un aperitivo de la que estaba desarrollando en ese momento y, dado que algunas personas me recordaron lo incómodo que era el cambio de hora en los artículos escritos hice una pre-versión estable y la subí, pero no traía grandes cambios; esta sí:</p>
<ul>
<li>Las tareas pueden marcarse como terminadas o no utilizando el checkbox que hay a la izquierda del texto que hemos introducido (más tarde se añadirá búsqueda según el estado de las mismas)</li>
<li>Mejorados los logs internos de funcionamiento</li>
<li>Coloreadas las entradas de contenido en función del tipo
<ul>
<li>Diario: borde gris</li>
<li>Tarea: borde rojo</li>
<li>Idea: borde azul</li>
</ul>
</li>
<li>Mejorado el sistema de funcionamiento de ajax, basándose ahora en el intercambio de ficheros xml sencillos, permitiendo así gestionar varias partes de la ventana con una sola petición y por ende, mejorando la experiencia de usuario</li>
<li>Añadido panel oculto en la parte superior que muestra mensajes de estado de la aplicación, estos pueden ser de tres tipos
<ul>
<li>OK</li>
<li>Alerta</li>
<li>Error</li>
</ul>
</li>
</ul>
<h2 style="text-align: center;"><a href="http://diary.dipler.org" target="_blank">http://diary.dipler.org</a></h2>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/02/Diary-0.2.png"><img class="aligncenter size-medium wp-image-1765" title="Diary 0.2" src="http://www.dipler.org/wp-content/uploads/2011/02/Diary-0.2-300x172.png" alt="" width="300" height="172" /></a></p>
<p><a href="http://www.dipler.org/wp-content/uploads/2011/02/Diary.png"></a></p>
<div class="shr-publisher-1764"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic --><img src="http://www.dipler.org/?ak_action=api_record_view&id=1764&type=feed" alt="" /><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=-MsMAeyNj2M:p9mV_MW6D-M:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=-MsMAeyNj2M:p9mV_MW6D-M:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=-MsMAeyNj2M:p9mV_MW6D-M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=-MsMAeyNj2M:p9mV_MW6D-M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/Bitnbyte?a=-MsMAeyNj2M:p9mV_MW6D-M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Bitnbyte?i=-MsMAeyNj2M:p9mV_MW6D-M:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Bitnbyte/~4/-MsMAeyNj2M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dipler.org/2011/02/diary-0-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.dipler.org/2011/02/diary-0-2/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 3.210 seconds. --><!-- Cached page generated by WP Super-Cache on 2012-01-31 18:26:01 --><!-- super cache -->

