<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Dupermag &#187; programación</title>
	<atom:link href="http://dupermag.com/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://dupermag.com</link>
	<description>Emprendimiento, Freelancing, Diseño, Desarrollo, y la Web 2.x. Por Armando Sosa</description>
	<lastBuildDate>Sat, 24 Dec 2011 20:16:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Necesitas saber CoffeeScript</title>
		<link>http://dupermag.com/2011/07/26/necesitas-saber-coffeescript/</link>
		<comments>http://dupermag.com/2011/07/26/necesitas-saber-coffeescript/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 17:17:09 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://dupermag.com/?p=1088</guid>
		<description><![CDATA[CoffeeScript es un peque&#241;o y bonito lenguaje de programaci&#243;n que compila en JavaScript creado por Jeremy Ashkenas, luego de leer este libro Si conoces bien JavaScript no te costar&#225; nada de trabajo aprender CoffeeScript y muy probablemente agradecer&#225;s lo elegante y simple de su sint&#225;xis, la cual se inspira mucho en Ruby o Python. Pero [...]]]></description>
			<content:encoded><![CDATA[	<p><a href="http://jashkenas.github.com/coffee-script/">CoffeeScript</a> es un peque&#241;o y bonito lenguaje de programaci&#243;n que <em>compila</em> en JavaScript creado por <a href="http://twitter.com/#!/jashkenas">Jeremy Ashkenas</a>, luego de leer <a href="http://createyourproglang.com/" title="create your own programming language">este libro</a></p>

	<p>Si conoces bien JavaScript no te costar&#225; nada de trabajo aprender CoffeeScript y muy probablemente agradecer&#225;s lo elegante y simple de su sint&#225;xis, la cual se inspira mucho en Ruby o Python. Pero CoffeeScript no se trata solo de quitar parentesis y corchetes a JavaScript, sino que el lenguaje incluye bondades como comprensiones y herencia pseudo-cl&#225;sica. Adem&#225;s de que el c&#243;digo generado est&#225; tan optimizado no es de sorprender que a menudo el JavaScript resultante es mucho m&#225;s eficiente que uno generado a pesar de seguir siendo bastante legible.</p>

	<p>Habr&#225; una inevitable y comprensible resistencia al cambio de parte de algunos desarrolladores, pero  la importancia de CoffeeScript es evidente para cualquiera que est&#233; prestando atenci&#243;n. Personalmente, empec&#233; a experimentar con CoffeeScript a finales del 2010 y ahora se ha vuelta una herramienta indispensable en mi workflow. </p>

	<p>Si los ejemplos en la documentaci&#243;n oficial no te bastan, el mejor recurso para aprender a entender CoffeeScript es el <a href="http://peepcode.com/products/coffeescript">excelente tutorial de PeepCode</a>.</p>


 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2011/07/26/necesitas-saber-coffeescript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>El nuevo Twitter y el misterio del hash bang</title>
		<link>http://dupermag.com/2010/10/12/el-nuevo-twitter-el-misterio-del-hash-bang/</link>
		<comments>http://dupermag.com/2010/10/12/el-nuevo-twitter-el-misterio-del-hash-bang/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 16:32:14 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Crawler]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://dupermag.com/?p=944</guid>
		<description><![CDATA[Una de las cosas que m&#225;s me llamaron de la atenci&#243;n cuando empec&#233; a probar el nuevo Twitter fue la curiosa sintaxis de sus urls, que comienzan con los simbolos #!, tambi&#233;n conocidos como hash-bang, Como ustedes seguramente saben, el nuevo Twitter es una aplicaci&#243;n ligera construida &#237;ntegramente con Javascript/HTML/CSS sobre la API misma de [...]]]></description>
			<content:encoded><![CDATA[	<p><div class="excerpt">Una de las cosas que m&#225;s me llamaron de la atenci&#243;n cuando empec&#233; a probar el nuevo Twitter fue la curiosa sintaxis de sus urls, que comienzan con los simbolos <q>#!</q>, tambi&#233;n conocidos como hash-bang,</div></p>

	<p><img src="http://dupermag.com/wp-content/uploads/2010/10/hashbang-newtwitter-620x159.png" alt="" title="hashbang-newtwitter" width="620" height="159" class="aligncenter size-large wp-image-945" /></p>

	<p><span id="more-944"></span></p>

	<p>Como ustedes seguramente saben, el nuevo Twitter es una aplicaci&#243;n <em>ligera</em> construida &#237;ntegramente con Javascript/HTML/CSS sobre la API misma de Twitter. En aplicaciones Ajax, es com&#250;n el uso del <em>hash</em> (lo que sigue del # en la url) para denotar estado y para preservar el uso de los botones atr&#225;s y adelante del navegador as&#237; como hacer links permanentes.</p>

	<p>&#201;ste uso del hash es m&#225;s o menos un hack, puesto que no fue dise&#241;ado para eso sino para enlazar secciones dentro de un documento (como <a href="#respond">este enlace a la forma de comentarios de este post</a>. Pero este nuevo uso, sin embargo, se ha vuelto tan popular que existen frameworks enteros desarrollados alrededor de esta idea, como <a href="http://code.quirkey.com/sammy/"> Sammy, que inspirado en Sinatra, usa el hash para simular rutas</a>.</p>

	<p>Rsuelto eso, a&#250;n quedaba el misterio uso del (!) <em>bang</em> (Nosotros le llamamos <em>signo de admiraci&#243;n</em>, lo cual es aburrido, asi que perdonen si uso el t&#233;rmino gringo). &#191;Qu&#233; ventaja tiene usar <em>twitter.com/#!/mentions</em> por sobre el m&#225;s cl&#225;sico <em>twitter.com/#mentions</em>? para averiguarlo, desempolv&#233; mi cuenta y <a href="http://www.quora.com/Twitter-com-2010-Redesign/Why-did-they-use-!-as-the-permalinks-in-the-new-Twitter">pregunt&#233; en Quora (requirer registro)</a>. </p>

	<p>Para mi sorpresa, <a href="http://twitter.com/#!/isaach">un empleado de Twitter</a> se tomo la molestia de resolver mi duda.</p>

	<p><blockquote><br />
Yo trabajo en Twitter. Este esquema fue elegido deliberadamente para estar alineado con la especificaci&#243;n de Google para indexar applicaciones web AJAX.<br />
</blockquote></p>

	<p>&#161;Problema resuelto! La especificaci&#243;n a la que se refiere&#8212;que yo noconoc&#237;a&#8212; es una especificaci&#243;n de Google para que las aplicaciones AJAX puedan ser indexadas por sus robots (alerta SEO).</p>

	<p><blockquote><br />
En corto, la soluci&#243;n funciona de esta manera: el crawler encuentra una URL AJAX bonita (esto es, una URL que contiene un fragmento #! en el hash). &#201;ste entonces hace una petici&#243;n por el contenido de esta URL a tu servidor en una manera un tanto distinta. Tu servidor web regresa el contenido en la forma de un <em>snapshot</em> HTML, que es entonces procesada por el <em>crawler</em>. El resultado de b&#250;squeda mostrar&#225; la URL original.<br />
</blockquote><br />
<a href="http://code.google.com/web/ajaxcrawling/docs/getting-started.html"><img src="http://dupermag.com/wp-content/uploads/2010/10/crawlerserver2-620x312.png" alt="Esquema de URLs AJAX indexables" title="crawlerserver2" width="620" height="312" class="aligncenter size-large wp-image-946" /></a></p>

	<p>La especificaci&#243;n completa est&#225; publicada en &#233;ste sitio: <a href="http://code.google.com/web/ajaxcrawling/docs/getting-started.html">Making AJAX Applications Crawlable</a></p>

	<p>Ahora espero que sepan algo que antes no sab&#237;an, porque como dicen, <a href="http://www.youtube.com/watch?v=pele5vptVgc">saber es la mitad de la batalla</a>.</p>


 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2010/10/12/el-nuevo-twitter-el-misterio-del-hash-bang/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PadPressed</title>
		<link>http://dupermag.com/2010/07/28/padpressed/</link>
		<comments>http://dupermag.com/2010/07/28/padpressed/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 06:37:17 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[IPhone]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://dupermag.com/?p=882</guid>
		<description><![CDATA[Hoy fue el lanzamiento oficial de PadPressed, un plugin para WordPress que transforma tu sitio en una aplicaci&#243;n HTML5 para ser navegado comodamente desde una iPad. Si quieren quedar bien con estos hipster y early-adopters con dinero que son los usuarios de iPad, les recomiendo que compren el plugin y lo instalen en su sitio. [...]]]></description>
			<content:encoded><![CDATA[	<p><a href="http://dupermag.com/wp-content/uploads/2010/07/Screen-shot-2010-07-28-at-01.08.15-2.png"><img src="http://dupermag.com/wp-content/uploads/2010/07/Screen-shot-2010-07-28-at-01.08.15-2-620x471.png" alt="" title="Screen shot 2010-07-28 at 01.08.15 (2)" width="620" height="471" class="aligncenter size-large wp-image-884" /></a><br />
<div class="excerpt"><br />
Hoy fue el lanzamiento oficial de <a href="http://padpressed.com">PadPressed</a>, un plugin para WordPress que transforma tu sitio en una aplicaci&#243;n HTML5 para ser navegado comodamente desde una iPad.<br />
</div></p>

	<p>Si quieren quedar bien con estos hipster y early-adopters con dinero que son los usuarios de iPad, les recomiendo que compren el plugin y lo instalen en su sitio. Pero <a href="http://padpressed.com">corran antes de que se acaben</a>.</p>

	<p>Fue hace poco m&#225;s de un mes qu&#233;  <a href="http://twitter.com/andresbarreto">Andres</a> y <a href="http://twitter.com/jasonlbaptiste">Jason</a> me mostraron la idea y me invitaron a formar parte de este proyecto al que simplemente no me pude negar. Muchas horas de desarrollo y miles de l&#237;neas de c&#243;digo despu&#233;s puedo decir que &#233;sta ha sido una de las experiencias m&#225;s gratificantes en mi carrera como dise&#241;ador/desarrollador web.</p>

	<p>Las tecnolog&#237;as involucradas son lo &#250;ltimo y lo m&#225;s avanzado en dise&#241;o web basado en est&#225;ndares: HTML5, CSS3 y Javascript. Es dificil de creer todo lo que es posible hacer cuando tienes permiso de ignorar por completo a Internet Explorer. Es sorprendente.</p>

	<p>Aprend&#237; much&#237;simo con &#233;ste proyecto y aunque me falta el tiempo necesario para hacer todos los tutoriales, screencasts, conferencias online, etc. que quisiera, me gustar&#237;a compartir algo de lo que aprend&#237; con ustedes. As&#237; que pueden preguntar lo que quieran sobre el desarrollo de PadPressed  en los comentarios de este post y prometo que har&#233; mi mejor esfuerzo por responder.</p>

	<p>Por cierto, si quieren darse una idea de como se ve PadPressed, pueden visitar este humilde sitio desde una iPad o desde Safari 4 cambiando su User Agent.</p>


 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2010/07/28/padpressed/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>CodeHere</title>
		<link>http://dupermag.com/2010/03/17/codehere/</link>
		<comments>http://dupermag.com/2010/03/17/codehere/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 21:51:18 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[descargas]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[proyectos]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://dupermag.com/?p=839</guid>
		<description><![CDATA[En un post anterior, les platiqu&#233; de mis eternos problemas para insertar snippets de c&#243;digo en este humilde blog. En aquella ocasi&#243;n hab&#237;a llegado a la conclusi&#243;n que Gist era la herramienta perfecta pero la verdad es que tiene un defecto: el c&#243;digo no se ve en el feed. As&#237; que se me ocurri&#243; que [...]]]></description>
			<content:encoded><![CDATA[	<p>En un post anterior, les platiqu&#233; de mis eternos problemas para insertar snippets de c&#243;digo en este humilde blog. En aquella ocasi&#243;n hab&#237;a llegado a la conclusi&#243;n que <a href="http://gist.github.com">Gist</a> era la herramienta perfecta pero la verdad es que tiene un defecto: el c&#243;digo no se ve en el feed.</p>

	<p>As&#237; que se me ocurri&#243; que no era necesario para nada escribir el c&#243;digo &#8220;a mano&#8221; en el post (lo cual apesta) sino que es m&#225;s f&#225;cil subirlo WordPress, adjuntarlo al post y luego usar un plugin para colorear el c&#243;digo. Y aqui les presento &#233;ste plugin.</p>

	<p>Bueno, lo presento despues del salto.<br />
<span id="more-839"></span></p>

	<p>CodeHere funciona de esta manera: </p>

	<p><ol><br />
<li>Instalas el plugin.</li><br />
<li>Creas tu c&#243;digo de ejemplo en un archivo en tu editor de c&#243;digo favorito.</li><br />
<li>Lo adjuntas a tu post usando el dialogo &#8220;Upload/Insert&#8221; (el mismo que usas para adjuntar fotos) pero no insertas nada, solo copias el nombre del archivo.</li><br />
<li>Lo insertas en tu post mediante un sencillo shortcode: &#091;codehere].</li><br />
</ol></p>

	<p>As&#237; que suponiendo que subes un archivo llamado html5.html, lo insertar&#225;s en t&#250; codigo escribiendo lo siguiente</p>

<code>[codehere html5.html lang=html]</code>

	<p>Y el resultado ser&#225; el siguiente:</p>

	<div class="codehere"><p><a class="show-raw" href="#">view raw</a> | <a href="http://dupermag.com/wp-content/uploads/2010/03/html5.html" target="_blank">download html5.html &darr;</a></p><div class="higlighted"><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-brackets">&lt;</span><span class="hl-code">!</span><span class="hl-var">DOCTYPE</span><span class="hl-code"> </span><span class="hl-var">HTML</span><span class="hl-brackets">&gt;</span><span class="hl-code">
</span><span class="hl-brackets">&lt;</span><span class="hl-reserved">html</span><span class="hl-code"> </span><span class="hl-var">lang</span><span class="hl-code">=</span><span class="hl-quotes">&quot;</span><span class="hl-string">en-EN</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">&gt;</span><span class="hl-code">
</span><span class="hl-brackets">&lt;</span><span class="hl-reserved">head</span><span class="hl-brackets">&gt;</span><span class="hl-code">
    </span><span class="hl-brackets">&lt;</span><span class="hl-reserved">title</span><span class="hl-brackets">&gt;</span><span class="hl-code">This is an HTML5 document</span><span class="hl-brackets">&lt;/</span><span class="hl-reserved">title</span><span class="hl-brackets">&gt;</span><span class="hl-code">
    </span><span class="hl-brackets">&lt;</span><span class="hl-reserved">meta</span><span class="hl-code"> </span><span class="hl-var">charset</span><span class="hl-code">=</span><span class="hl-quotes">&quot;</span><span class="hl-string">UTF-8</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">&gt;</span><span class="hl-code">
</span><span class="hl-brackets">&lt;/</span><span class="hl-reserved">head</span><span class="hl-brackets">&gt;</span><span class="hl-code">
</span><span class="hl-brackets">&lt;</span><span class="hl-reserved">body</span><span class="hl-brackets">&gt;</span><span class="hl-code">
    </span><span class="hl-brackets">&lt;</span><span class="hl-reserved">header</span><span class="hl-brackets">&gt;</span><span class="hl-code">
        </span><span class="hl-brackets">&lt;</span><span class="hl-reserved">h1</span><span class="hl-brackets">&gt;</span><span class="hl-code">With a header</span><span class="hl-brackets">&lt;/</span><span class="hl-reserved">h1</span><span class="hl-brackets">&gt;</span><span class="hl-code">
    </span><span class="hl-brackets">&lt;/</span><span class="hl-reserved">header</span><span class="hl-brackets">&gt;</span><span class="hl-code">
    </span><span class="hl-brackets">&lt;</span><span class="hl-reserved">section</span><span class="hl-brackets">&gt;</span><span class="hl-code">
        And a section
    </span><span class="hl-brackets">&lt;/</span><span class="hl-reserved">section</span><span class="hl-brackets">&gt;</span><span class="hl-code">        
</span><span class="hl-brackets">&lt;/</span><span class="hl-reserved">body</span><span class="hl-brackets">&gt;</span><span class="hl-code">
</span><span class="hl-brackets">&lt;/</span><span class="hl-reserved">html</span><span class="hl-brackets">&gt;</span></pre></td></tr></table></div></div><div class="raw" style="display:none;"><pre>&lt;!DOCTYPE HTML&gt;
&lt;html lang=&quot;en-EN&quot;&gt;
&lt;head&gt;
	&lt;title&gt;This is an HTML5 document&lt;/title&gt;
	&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;header&gt;
		&lt;h1&gt;With a header&lt;/h1&gt;
	&lt;/header&gt;
	&lt;section&gt;
		And a section
	&lt;/section&gt;		
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

	<p>Puedes tambien hacerlo mismo con css</p>

<code>[codehere code.css lang=css]</code><br />
<div class="codehere"><p><a class="show-raw" href="#">view raw</a> | <a href="http://dupermag.com/wp-content/uploads/2010/03/code.css" target="_blank">download code.css &darr;</a></p><div class="higlighted"><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-identifier">.codehere</span><span class="hl-code"> </span><span class="hl-identifier">p</span><span class="hl-brackets">{</span><span class="hl-code">
    </span><span class="hl-reserved">text-align:</span><span class="hl-string">right</span><span class="hl-reserved"></span><span class="hl-code">;
    </span><span class="hl-reserved">margin:</span><span class="hl-number">0</span><span class="hl-reserved"></span><span class="hl-code">;
    </span><span class="hl-reserved">font-size:</span><span class="hl-number">11</span><span class="hl-string">px</span><span class="hl-reserved"></span><span class="hl-code">;
</span><span class="hl-brackets">}</span><span class="hl-code">
 
</span><span class="hl-identifier">.hl-main</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code">
    </span><span class="hl-reserved">font-size:</span><span class="hl-number">12</span><span class="hl-string">px</span><span class="hl-reserved"></span><span class="hl-code">;
    </span><span class="hl-reserved">font-family:</span><span class="hl-code">Monaco</span><span class="hl-code">, </span><span class="hl-code">Andale</span><span class="hl-code"> </span><span class="hl-code">mono</span><span class="hl-code">, </span><span class="hl-code">courier</span><span class="hl-code">, </span><span class="hl-string">monospace</span><span class="hl-reserved"></span><span class="hl-code">;
    </span><span class="hl-reserved">line-height:</span><span class="hl-number">18</span><span class="hl-string">px</span><span class="hl-reserved"></span><span class="hl-code">;
    </span><span class="hl-reserved">background:</span><span class="hl-var">#234</span><span class="hl-reserved"></span><span class="hl-code">;
    </span><span class="hl-reserved">overflow:</span><span class="hl-string">auto</span><span class="hl-reserved"></span><span class="hl-code">;
</span><span class="hl-brackets">}</span><span class="hl-code">
 
</span><span class="hl-identifier">.hl-default</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code">
    </span><span class="hl-reserved">color:</span><span class="hl-code"> </span><span class="hl-var">#fff</span><span class="hl-reserved"></span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></td></tr></table></div></div><div class="raw" style="display:none;"><pre>.codehere p{
	text-align:right;
	margin:0;
	font-size:11px;
}

.hl-main {
	font-size:12px;
	font-family:Monaco, Andale mono, courier, monospace;
	line-height:18px;
	background:#234;
	overflow:auto;
}

.hl-default {
    color: #fff;
}</pre></div></div>

	<p>Y hasta ruby</p>

<code>[codehere sinatra.rb lang=ruby]</code><br />
<div class="codehere"><p><a class="show-raw" href="#">view raw</a> | <a href="http://dupermag.com/wp-content/uploads/2010/03/sinatra.rb_.txt" target="_blank">download sinatra.rb &darr;</a></p><div class="higlighted"><div class="hl-main"><table class="hl-table" width="100%"><tr><td class="hl-gutter" align="right" valign="top"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="hl-main" valign="top"><pre><span class="hl-identifier">get</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">/say/*/to/*</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-reserved">do</span><span class="hl-code">
  </span><span class="hl-comment">#</span><span class="hl-comment"> matches /say/hello/to/world</span><span class="hl-comment"></span><span class="hl-code">
  </span><span class="hl-identifier">params</span><span class="hl-brackets">[</span><span class="hl-code">:</span><span class="hl-identifier">splat</span><span class="hl-brackets">]</span><span class="hl-code"> </span><span class="hl-comment">#</span><span class="hl-comment"> =&gt; [&quot;hello&quot;, &quot;world&quot;]</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-reserved">end</span><span class="hl-code">
 
</span><span class="hl-identifier">get</span><span class="hl-code"> </span><span class="hl-quotes">'</span><span class="hl-string">/download/*.*</span><span class="hl-quotes">'</span><span class="hl-code"> </span><span class="hl-reserved">do</span><span class="hl-code">
  </span><span class="hl-comment">#</span><span class="hl-comment"> matches /download/path/to/file.xml</span><span class="hl-comment"></span><span class="hl-code">
  </span><span class="hl-identifier">params</span><span class="hl-brackets">[</span><span class="hl-code">:</span><span class="hl-identifier">splat</span><span class="hl-brackets">]</span><span class="hl-code"> </span><span class="hl-comment">#</span><span class="hl-comment"> =&gt; [&quot;path/to/file&quot;, &quot;xml&quot;]</span><span class="hl-comment"></span><span class="hl-code">
</span><span class="hl-reserved">end</span></pre></td></tr></table></div></div><div class="raw" style="display:none;"><pre>get '/say/*/to/*' do
  # matches /say/hello/to/world
  params[:splat] # =&gt; [&quot;hello&quot;, &quot;world&quot;]
end

get '/download/*.*' do
  # matches /download/path/to/file.xml
  params[:splat] # =&gt; [&quot;path/to/file&quot;, &quot;xml&quot;]
end
</pre></div></div>

	<p>En este &#250;ltimo caso, WordPress no permite subir archivos con extensi&#243;n .rb (imagino que por cuestiones de seguridad) en este caso, el archivo tiene una extensi&#243;n <code>.rb.txt</code> pero la parte de txt la ignoraremos  en nuestro c&#243;digo.</p>

	<p>El plugin <a href="http://github.com/soska/CodeHere-plugin">est&#225; alojado en GitHub</a> y pueden descrgarlo la <a href="http://github.com/soska/CodeHere-plugin/downloads">&#250;ltima versi&#243;n desde aqu&#237;</a>.</p>

	<p>Si les es de utilidad alguna, un enlace siempre se agradece.</p>



 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2010/03/17/codehere/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Video de HTML5 para principiantes</title>
		<link>http://dupermag.com/2010/03/01/video-de-html5-para-principiantes/</link>
		<comments>http://dupermag.com/2010/03/01/video-de-html5-para-principiantes/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 00:00:52 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[entrepreneur]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://dupermag.com/?p=792</guid>
		<description><![CDATA[Creo que le debo una explicaci&#243;n a mi audiencia: La semana pasada durante la transmisi&#243;n en vivo de la conferencia antes anunciada experiment&#233; una serie de problemas t&#233;cnicos que finalmente hicieron imposible que &#233;sta se llevara a cabo con &#233;xito. No est&#225; de m&#225;s decir que fue una fuente de frustraci&#243;n personal, puesto que llevaba [...]]]></description>
			<content:encoded><![CDATA[	<p>Creo que le debo una explicaci&#243;n a mi audiencia: La semana pasada durante la transmisi&#243;n en vivo de la conferencia antes anunciada experiment&#233; una serie de problemas t&#233;cnicos que finalmente hicieron imposible que &#233;sta se llevara a cabo con &#233;xito.</p>

	<p>No est&#225; de m&#225;s decir que fue una fuente de frustraci&#243;n personal, puesto que llevaba casi mes y medio preparando todo para ese d&#237;a y me daba mucha pena con las casi 200 personas que llegaron a estar viendo el evento en vivo. </p>

	<p>Pero bueno, creo que en lo que resuelvo estos problemas t&#233;cnicos, lo m&#225;s indicado es entregar lo prometido. As&#237; que grabe de manera <em>offline</em> la conferencia y aqui est&#225; para todos ustedes.</p>

	<p><span id="more-792"></span></p>

	<p><object width="520" height="390"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9680041&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=1&#038;color=990000&#038;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=9680041&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=1&#038;color=990000&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="520" height="390"></embed></object></p>

	<p>Si quieren/necesitan las &#8220;diapositivas&#8221; de la presentaci&#243;n o el c&#243;digo de ejemplo, pueden obtenerlo desde el sitio de <a href="http://duperconf.com">Duperconf</a></p>


 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2010/03/01/video-de-html5-para-principiantes/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Pequeño tip para que las imágenes quepan en el viewport del iPhone</title>
		<link>http://dupermag.com/2009/12/17/redimensionar-imagenes-para-el-iphone/</link>
		<comments>http://dupermag.com/2009/12/17/redimensionar-imagenes-para-el-iphone/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 08:24:02 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[IPhone]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://dupermag.com/?p=660</guid>
		<description><![CDATA[Resulta que estoy haciendo una versi&#243;n especial para el iPhone de un proyecto &#8211; que les anunciar&#233; la pr&#243;xima semana&#8211; y me top&#233; con un problema: las im&#225;genes cuyas dimensiones exceden el ancho de la pantalla aparecen mochas y sin ninguna forma de hacer scroll. &#191;Les ha pasado? Est&#225;n de suerte, pues descubr&#237; una manera [...]]]></description>
			<content:encoded><![CDATA[	<p>Resulta que estoy haciendo una versi&#243;n especial para el iPhone de un proyecto &#8211; que les anunciar&#233; la pr&#243;xima semana&#8211; y me top&#233; con un problema: las im&#225;genes cuyas dimensiones exceden el ancho de la pantalla aparecen mochas y sin ninguna forma de hacer scroll. </p>

	<p>&#191;Les ha pasado? Est&#225;n de suerte, pues descubr&#237; una manera muy simple de solucionarlo con solo un poquito de jQuery.<br />
<span id="more-660"></span></p>

	<p>Primero, asumo que est&#225;n desplegando estilos exclusivamente para iPhone (y otros dispositivos m&#243;viles) m&#225;s o menos as&#237;:<br />
<script src="http://gist.github.com/258613.js?file=iphone.css"></script></p>

	<p>C&#243;mo ven, estoy aplicando una propiedad <code>max-width</code> de 300px (nota al margen: estoy utilizando <code>max-width</code> &#191;No es hermosa la vida cuando no hace falta pensar en Internet Explorer?) lo cual funciona bastante bien suponiendo que el dispositivo siempre este en modo vertical (mi forma favorita de navegar en el iPhone/iTouch) pero si por alguna raz&#243;n el usuario pone el aparato en formato horizontal, entonces el ancho de la pantalla pasa de 320px a 480px, donde nuestras im&#225;genes se ven demasiado peque&#241;as.</p>

	<p>Una cosa notable, sin embargo, es que cambiar de vista vertical a horizontal y viceversa lanza el evento <code>resize</code> del navegador, el cual podemos cachar desde javascript para redimensionar nuestras im&#225;genes.</p>

	<p>&#191;Existe la palabra &#8220;redimensionar&#8221;?</p>

	<p>Bueno, este es el peque&#241;o snippet de jQuery que yo utilic&#233; para <em>redimensionar</em> las im&#225;genes acorde al tama&#241;o del viewport. Espero que les sea de utilidad:<br />
<script src="http://gist.github.com/258613.js?file=iphone.js"></script></p>

	<p>N&#243;tese que lo que cambiamos con jQuery es la propiedad <code>max-width</code> y no <code>width</code>, as&#237; evitamos que, si la imagen ya es m&#225;s peque&#241;a que el viewport, &#233;sta se deforme.</p>

	<p>P.D. A&#250;n queda un problema que no se como solucionar: No es posible acercarte a las im&#225;genes haciendo el gesture de <em>pinch/zoom</em>. Si tienen la respuesta a este enigma y quieren compartirla, por favor haganlo.</p>



 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2009/12/17/redimensionar-imagenes-para-el-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSML</title>
		<link>http://dupermag.com/2009/12/14/csml/</link>
		<comments>http://dupermag.com/2009/12/14/csml/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 19:43:41 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[csml]]></category>
		<category><![CDATA[dte]]></category>
		<category><![CDATA[duperrific]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://dupermag.com/?p=634</guid>
		<description><![CDATA[CSML es una pequeña clase (requiere PHP5) que permite generar tags de HTML, usando selectores de CSS]]></description>
			<content:encoded><![CDATA[	<p>CSML es una peque&#241;a clase (requiere PHP5) que permite generar tags de HTML, usando selectores de CSS sin salir de sus bloques de c&#243;digo, sin necesidad de hacer complicadas concatenaciones ni aprender sintaxis complicadas.</p>

	<p><a href="http://github.com/soska/csml/archives/master"><img src="http://dupermag.com/wp-content/uploads/2009/12/download-button.png" alt="download-button" title="download-button" width="300" height="100" /></a></p>

	<p>Hay una cosa que odio: mezclar bloques de PHP con bloques de HTML. Ser&#225; que CakePHP me ha mal acostumbrado a tener separadas las vistas de la l&#243;gica, pero de verdad me molesta c&#243;digo que se ve as&#237; (tomado del tema default de WordPress):</p>

	<p><script src="http://gist.github.com/256319.js?file=wordpress-sidebar.php"></script></p>

	<p>No se a ustedes, pero a m&#237; tanto <code> &lt;? ?&gt;  </code> me marea y luego se me hace muy dificil entender donde empieza y donde termina un bloque. Desgraciadamente &#233;ste tipo de programaci&#243;n es muy com&#250;n en el mundo de WordPress, algunos pupulares temas y plugins son verdaderos spaghettis indescifrables, y esto es en cierta manera porque asi es la manera en que WP est&#225; escrito.</p>

	<p>CakePHP, por otra parte, tiene una soluci&#243;n interesante para este <em>problema</em> (en realidad, creo que es una soluci&#243;n para un problema distinto, pero denme chance) en la forma del <a href="http://api.cakephp.org/class/html-helper#method-HtmlHelperdiv">HTMLHelper</a>, pero para tags complicados y con muchos  atributos, el c&#243;digo se vuelve demasiado y a mi siempre me cuesta recordar el orden de los parametros.</p>

	<p>Cuando decid&#237; aventarme a crear temas premium para WP, una soluci&#243;n para &#233;ste problema fue una de las principales razones para escribir el <a href="http://github.com/soska/dte">Duperrific Theme Engine</a> de donde finalmente extraigo lo que ahora les presento como CSML.</p>

	<p>Ejemplo:<br />
<script src="http://gist.github.com/256319.js?file=csml-example-1.php"></script></p>

	<p>Como ver&#225;s <code>csml::tag()</code> toma un selector como parametro y regresa un tag de HTML, mientras que <code>csml::entag()</code> toma una cadena y la envuelve con el selector designado en el segundo parametro. En el caso de <code>csml::entag()</code> el segundo parametro tambien puede ser un array de selectores, lo que har&#225; que anide los selectores uno dentro de otro, empezando por el &#250;ltimo selector del array.</p>

	<p>Aunque la forma m&#225;s facil de utilizar csml, es usando las dos funciones inclu&#237;das: <code>t()</code> y <code>en()</code> que son wrappers para <code>csml::tag()</code> y <code>csml::entag()</code> respectivamente y adem&#225;s imprimen el tag.</p>

	<p>Un ejemplo m&#225;s de la vida real:<br />
<script src="http://gist.github.com/256319.js?file=csml-example-2.php"></script></p>

	<p>Apenas estoy empezando en esto de liberar cosas que he hecho, as&#237; que espero que les resulte tan &#250;til como a m&#237; me ha resultado. Si la usan me avisan y si encuentran alg&#250;n bug me dicen o, mejor a&#250;n, <a href="http://github.com/soska/csml">forkean el proyecto</a> y lo arreglan.</p>

	<p><a href="http://github.com/soska/csml/"><img src="http://dupermag.com/wp-content/uploads/2009/12/download-button.png" alt="download-button" title="download-button" width="300" height="100" /></a></p>


 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2009/12/14/csml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Atlas, un IDE de desarrollo WYSIWYG para Cappuccino</title>
		<link>http://dupermag.com/2009/03/10/atlas/</link>
		<comments>http://dupermag.com/2009/03/10/atlas/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 19:12:27 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[interfaz]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[280 north]]></category>
		<category><![CDATA[atlas]]></category>
		<category><![CDATA[cappuccino]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://dupermag.com/?p=526</guid>
		<description><![CDATA[Cuando descubr&#237; cappuccino por primera vez me qued&#233; completamente asombrado y supe que iba a ser un parteaguas en la forma en que se programan aplicaciones web. Curiosamente no ha hecho tanto ruido como yo esperaba, jQuery, Prototype y MooTools siguen siendo las herramientas favoritas de muchos de nosotros. Pero viendo esto que est&#225;n desarrollando, [...]]]></description>
			<content:encoded><![CDATA[	<p>Cuando descubr&#237; <a href="http://cappuccino.org">cappuccino</a> por primera vez me qued&#233; completamente asombrado y supe que iba a ser un parteaguas en la forma en que se programan aplicaciones web. </p>

	<p>Curiosamente no ha hecho tanto ruido como yo esperaba, jQuery, Prototype y MooTools siguen siendo las herramientas favoritas de muchos de nosotros. Pero viendo esto que est&#225;n desarrollando, creo que esto puede cambiar en cualquier momento: <a href="http://280atlas.com/">Atlas</a>, un IDE de desarrollo 100% WYSIWIG corriendo en el navegador</p>

	<p>Aqui les dejo un video para qe lo vean en acci&#243;n:</p>

	<p><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="293" id="viddler"><param name="movie" value="http://www.viddler.com/simple_on_site/1db9bf4d" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent" /> <embed src="http://www.viddler.com/simple_on_site/1db9bf4d" width="437" height="293" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" wmode="transparent" name="viddler" ></embed></object></p>


 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2009/03/10/atlas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Gestures en el iPhone con Javascript</title>
		<link>http://dupermag.com/2008/07/16/gestures-en-el-iphone-con-javascript/</link>
		<comments>http://dupermag.com/2008/07/16/gestures-en-el-iphone-con-javascript/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 06:48:55 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[gestures]]></category>
		<category><![CDATA[IPhone]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.blog.armandososa.com/?p=183</guid>
		<description><![CDATA[Me qued&#233; agradablemente sorprendido con esta implementaci&#243;n en Javascript de los gestures (&#191;Cual es la traducci&#243;n al espa&#241;ol de esa palabra?) t&#237;picos de las aplicaciones del iPhone. Me pregunto si la masa de usuarios de esta plataforma justifica desarrollar aplicaciones (o sitios) web espec&#237;ficos. &#191;No es casi como una versi&#243;n 2.0 del internet explorer required [...]]]></description>
			<content:encoded><![CDATA[	<p>Me qued&#233; agradablemente sorprendido con esta implementaci&#243;n en Javascript de los gestures (&#191;Cual es la traducci&#243;n al espa&#241;ol de esa palabra?) t&#237;picos de las aplicaciones del iPhone. Me pregunto si la masa de usuarios de esta plataforma justifica desarrollar aplicaciones (o sitios) web espec&#237;ficos. &#191;No es casi como una versi&#243;n 2.0 del <em>internet explorer required</em> noventero?</p>

	<p>En fin, la demo me parece incre&#237;ble y me dan ganas de crear algo as&#237;.</p>

	<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/-XKb8We_uzg&#38;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/-XKb8We_uzg&#38;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="344"></embed></object></p>

	<p><a href='http://www.youtube.com/watch?v=-XKb8We_uzg' >Video en Youtube</a></p>


 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2008/07/16/gestures-en-el-iphone-con-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Deshazte del CSS en línea en tu HTML</title>
		<link>http://dupermag.com/2008/06/02/deshazte-del-css-en-linea-en-tu-html/</link>
		<comments>http://dupermag.com/2008/06/02/deshazte-del-css-en-linea-en-tu-html/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 00:36:00 +0000</pubDate>
		<dc:creator>Armando Sosa</dc:creator>
				<category><![CDATA[programación]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[madrugada]]></category>
		<category><![CDATA[regular expressions]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[urgencia]]></category>

		<guid isPermaLink="false">http://www.blog.armandososa.com/?p=178</guid>
		<description><![CDATA[Uploaded with plasq&#8217;s Skitch! Si te llegaras a encontrar en la muy hipot&#233;tica situaci&#243;n en la que alguien te env&#237;a un gran archivo de HTML para que lo embellezcas y descubres con horror que est&#225; lleno de in-line css y casi est&#225;s al borde del llanto ante la perspectiva de tener que quitarlo todo a [...]]]></description>
			<content:encoded><![CDATA[	<p><div class="thumbnail"><a href="http://skitch.com/sosa/cqut/find"><img src="http://img.skitch.com/20080529-n7cnbfga716ecq5x6b62rk63fe.preview.jpg" alt="Find" /></a><br />
<span style="font-family: Lucida Grande, Trebuchet, sans-serif, Helvetica, Arial; font-size: 10px; color: #808080">Uploaded with <a href="http://plasq.com/">plasq</a>&#8217;s <a href="http://skitch.com">Skitch</a>!</span></div></p>

	<p>Si te llegaras a encontrar en la muy hipot&#233;tica situaci&#243;n en la que alguien te env&#237;a un gran archivo de HTML para que lo embellezcas y descubres con horror que est&#225; lleno de in-line css y casi est&#225;s al borde del llanto ante la perspectiva de tener que quitarlo todo a mano, uno por uno, a las 2:53 de la madrugada despu&#233;s de un d&#237;a ajetreado. &#161;No te preocupes! si tu editor de texto (el m&#237;o es <a href="http://macromates.com/">textmate</a>) permite hacer b&#250;squedas/reemplazos  utilizando expresiones regulares, entonces probablemente puedas buscarlas usando la siguiente:</p>

<code><br />
(style=([^&gt;]+))<br />
</code>

	<p>Y listo, solo falta que las remplaces con una cadena vac&#237;a. Cabe destacar que esto solo funcionar&#225; correctamente cuando el atributo <code> style </code> sea el ultimo del tag como en</p>

 <code>
  &lt;p class="red_paragraph" style="background:#FF0000; color:#FF6634;"&gt;
     [...]
  &lt;/p&gt;
 </code>

	<p>pero no funcionar&#225; si los atributos son al rev&#233;s</p>

 <code>
  &lt;p style="background:#FF0000; color:#FF6634;" class="red_paragraph" &gt;
     [...]
  &lt;/p&gt;
 </code>

	<p>Pero como este no era el caso, no me preocup&#233; en refinar mi expresi&#243;n, despu&#233;s de todo eran las 2:53 de la madrugada y aun ten&#237;a que terminar de dise&#241;ar una pagina para la ma&#241;ana siguiente. Pero si ustedes no saben nada de expresiones regulares y quieren aprender, yo les recomiendo que comiencen por este sitio donde <a href="http://www.regular-expressions.info/">explican muy bien</a> de que va todo este rollo.</p>


 ]]></content:encoded>
			<wfw:commentRss>http://dupermag.com/2008/06/02/deshazte-del-css-en-linea-en-tu-html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Served from: dupermag.com @ 2012-02-10 20:14:27 by W3 Total Cache -->
