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

<channel>
	<title>aNieto2K &#187; Curiosidades</title>
	<atom:link href="http://www.anieto2k.com/category/curiosidades/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.anieto2k.com</link>
	<description>Desarrollo web, Wordpress, y alguna cosilla más</description>
	<lastBuildDate>Sun, 05 Feb 2012 10:15:00 +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>“La España Fantasma” Un libro solidario.</title>
		<link>http://www.anieto2k.com/2010/12/07/%e2%80%9cla-espana-fantasma%e2%80%9d-el-largo-y-tortuoso-camino-para-crear-un-libro-solidario/</link>
		<comments>http://www.anieto2k.com/2010/12/07/%e2%80%9cla-espana-fantasma%e2%80%9d-el-largo-y-tortuoso-camino-para-crear-un-libro-solidario/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 14:03:21 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[Actualidad]]></category>
		<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[de la red]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=10125</guid>
		<description><![CDATA[Hace ya unos meses que la Roja se convirtió en Campeones del Mundo. Un hecho que nos han vendido una y otra vez, hasta la saciedad. Mientras yo, como el 90% de los españoles estábamos pegados delante de un televisor viendo el partido en el que De Jong practicó la patada de Chuck Norris y mi [...]]]></description>
			<content:encoded><![CDATA[Hace ya unos meses que <strong>la Roja se convirtió en Campeones del Mundo</strong>. Un hecho que nos han vendido una y otra vez, hasta la saciedad. Mientras yo, como el 90% de los españoles estábamos pegados delante de un televisor viendo el partido en el que <em>De Jong practicó la patada de Chuck Norris</em> y<em> mi tocayo Andrés Iniesta colocaba a la selección en lo más alto</em>, otros tantos estaban haciendo fotos de la "España fantasma".
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/12/libro-copia221.jpg"><img src="http://www.anieto2k.com/wp-content/uploads/2010/12/libro-copia221.jpg" alt="libro-copia221" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/12/libro-copia221.jpg"><small>(Ver Imagen)</small></a></p>
La idea inicial llegó de la mano de <em>Kurioso.es</em>, que usando las redes sociales logró que una gran cantidad de fotógrafos (+321)  salieran a las calles a inmortalizar la España parada por el mundial. Esa cantidad de información ha dado lugar a un libro de 132 páginas que puedes<a href="http://www.bubok.es/libro/detalles/193145/La-Espana-Fantasma"> comprar en<strong> Bubok por 18€</strong>, de los cuales 6,1€ irán destinados al beneficio de la obra social Save the Children</a>.

<strong>Kurioso.es </strong>además <a href="http://kurioso.es/2010/11/23/la-espana-fantasma-el-largo-y-tortuoso-camino-para-crear-un-libro-solidario/">publica de forma transparente (algo que se debería hacer cada vez más) los costes y el proceso</a>, arduo proceso, para conseguir que dicho libro pueda llegar a tus manos.

Yo ya he pedido el mio, ¿a que esperas para <a href="http://www.bubok.es/libro/detalles/193145/La-Espana-Fantasma">pedir el tuyo</a>?<h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2008/06/29/espana-eurocampeona/" rel="bookmark" title="Permanent Link: España, eurocampeona!!">España, eurocampeona!!</a></li><li><a href="http://www.anieto2k.com/2006/07/20/davinci-code-theme-para-wordpress/" rel="bookmark" title="Permanent Link: DaVinci Code Theme para WordPress">DaVinci Code Theme para WordPress</a></li><li><a href="http://www.anieto2k.com/2005/12/10/promesas-para-el-ano-que-viene/" rel="bookmark" title="Permanent Link: Promesas para el año que viene">Promesas para el año que viene</a></li><li><a href="http://www.anieto2k.com/2009/03/16/mapas-vectoriales-de-los-municipios-de-espana/" rel="bookmark" title="Permanent Link: Mapas vectoriales de los municipios de España">Mapas vectoriales de los municipios de España</a></li><li><a href="http://www.anieto2k.com/2006/01/20/frase-13/" rel="bookmark" title="Permanent Link: Frase #13">Frase #13</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2010/12/07/%e2%80%9cla-espana-fantasma%e2%80%9d-el-largo-y-tortuoso-camino-para-crear-un-libro-solidario/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Popcorn, dándole semántica a los videos con HTML5</title>
		<link>http://www.anieto2k.com/2010/11/08/popcorn-dandole-semantica-a-los-videos-con-html5/</link>
		<comments>http://www.anieto2k.com/2010/11/08/popcorn-dandole-semantica-a-los-videos-con-html5/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 10:23:42 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[Actualidad]]></category>
		<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[de la red]]></category>
		<category><![CDATA[estandares]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[semántica]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=10106</guid>
		<description><![CDATA[Mozilla quiere romper la idea actual del video en Internet. El actual modelo, basado en un elemento pasivo que muestra información al usuario mediante el navegador simula perfectamente la televisión actual, pero gracias a Drumbeat ha surgido Popcorn. Popcorn Popcorn, es una iniciativa que añade una funcionalidad extra a los elementos &#60;video /&#62; y &#60;audio [...]]]></description>
			<content:encoded><![CDATA[<strong>Mozilla </strong>quiere romper la idea actual del video en Internet. El actual modelo, basado en un elemento pasivo que muestra información al usuario mediante el navegador simula perfectamente la televisión actual, pero gracias a <a href="http://www.drumbeat.org/">Drumbeat </a>ha surgido <em>Popcorn</em>.
<h3>Popcorn</h3>
Popcorn, es una iniciativa que añade una funcionalidad extra a los elementos <a href="http://www.anieto2k.com/2009/06/30/el-elemento-video-del-html5/">&lt;video /&gt;</a> y <a href="http://www.anieto2k.com/2009/07/14/el-elemento-audio-del-html5/">&lt;audio /&gt;</a> del HTML5 permitiendo que muestren al usuario información extra sobre el video, subtítulos, geolocalización, información sobre personas que aparezcan,...

La idea es añadir una semántica extra a lo que hasta ahora solo era un canal de visualización.
<h3>XML</h3>
Mediante <a href="https://wiki.mozilla.org/PopcornOpenVideoAPI">un fichero XML externo que definiríamos en nuestro elemento multimedia especificaremos toda la información que consideremos relevante de nuestro video</a>.
<pre><code>&lt;video width="530px" height="299px" controls="" <strong>data-timeline-sources="xml/webMadeMovies.xml"</strong>&gt;
 &lt;source type="video/ogg; codecs="theora, vorbis" src="wmmjuly6.ogv"&gt;&lt;/source&gt;
 &lt;source type="video/mp4; codecs="avc1.42E01E, mp4a.40.2" src="wmmjuly6.mp4"&gt;&lt;/source&gt;
&lt;/video&gt;</code></pre>
Aquí vemos <a href="http://webmademovies.etherworks.ca/popcorndemo/xml/webMadeMovies.xml">un ejemplo (recortado) del fichero XML</a> que podríamos encontrar.
<pre><code>&lt;popcorn&gt;
 &lt;manifest&gt;
 &lt;people&gt;
 &lt;person id="celine" name="Celine" salutation="Miss." &gt;
 &lt;resource id="celinehomepage" src="http://www.celinecelines.com/" description="Celine's Homepage" /&gt;
 &lt;/person&gt;
 &lt;person id="brian" name="brian" &gt;
 &lt;/person&gt;
 &lt;person id="SteveSong" name="Steve Song" &gt;
 &lt;/person&gt;
 [...]
 &lt;/people&gt;
 &lt;places&gt;
 &lt;place id="saopaulo" type="city" name="Sao Paulo"&gt;
 &lt;resource id="saopaulowiki" src="http://en.wikipedia.org/wiki/S%C3%A3o_Paulo" description="Sao Paulo city, Brazil"/&gt;
 &lt;/place&gt;
 &lt;place id="CapeTown" type="city" name="Cape Town"&gt;
 &lt;resource id="capetownwiki" src="http://en.wikipedia.org/wiki/Cape_Town" description="Cape Town, South Africa"/&gt;
 &lt;/place&gt;
 [...]
 &lt;/places&gt;
 &lt;attributions&gt;
 &lt;attribution id="yacht1attrib" nameofwork="Don't Fight The Darkness" copyrightholder="Yacht" copyrightholderurl="http://www.teamyacht.com/" nameofworkurl="http://freemusicarchive.org/curator/WFMU/blog/Join_YACHT_See_Mystery_Lights_instrumentals" license="CC-BY-NC" licenseurl="http://creativecommons.org/licenses/by-nc/2.0/"/&gt;
 &lt;attribution id="yacht2attrib" nameofwork="Psychic City Voodoo City" copyrightholder="Yacht" copyrightholderurl="http://www.teamyacht.com/" nameofworkurl="http://freemusicarchive.org/curator/WFMU/blog/Join_YACHT_See_Mystery_Lights_instrumentals" license="CC-BY-NC" licenseurl="http://creativecommons.org/licenses/by-nc/2.0/"/&gt;
 &lt;attribution id="attrib" nameofwork="A Shared Culture" copyrightholder="Jesse Dylan" license="CC-BY-NC" licenseurl="http://creativecommons.org/licenses/by-nc/2.0/"/&gt;
 [...]
 &lt;/attributions&gt;
 &lt;articles&gt;
 &lt;resource id="theinternet" src="http://en.wikipedia.org/wiki/internet" description="The Internet"/&gt;
 &lt;resource id="villagetelco" src="http://en.wikipedia.org/wiki/Village_telco" description="The Village Telco"/&gt;
 &lt;resource id="oilspill" src="http://en.wikipedia.org/wiki/Deepwater_Horizon_oil_spill" description="Deepwater Horizon Oil Spill"/&gt;
 [...]
 &lt;/articles&gt;
 &lt;/manifest&gt;

 &lt;timeline&gt;
 &lt;footnotes&gt;
 &lt;footnote in="00:00:00" out="00:14:00" target="footnotediv"&gt;Look around the page as info is updated!&lt;/footnote&gt;
 &lt;/footnotes&gt;
 &lt;resources&gt;
 &lt;attribution in="00:00:05:02" out="00:00:34:00" target="container5" resourceid="yacht1attrib"&gt;&lt;/attribution&gt;
 &lt;attribution in="00:00:34:01" target="container5" resourceid="yacht1attrib"&gt;&lt;/attribution&gt;
 &lt;footnote in="00:00:00" out="00:15:00" target="footnotediv"&gt;Look around the page!&lt;/footnote&gt;
 &lt;videotag in="00:00:05:02" out="00:00:10:07"&gt;Steve Song&lt;/videotag&gt;
 &lt;attribution in="00:00:05:02" out="00:00:10:07" target="container5" resourceid="villagetelcoattrib"&gt;&lt;/attribution&gt;
 &lt;twitter in="00:00:05:02" out="00:00:10:07" title="Steve Song" source="from:stevesong" target="personaltwitter" width="238" height="120" overlay="images/overlay/twitter.png" /&gt;
 &lt;wiki in="00:00:05:02" out="00:00:10:07" resourceid="villagetelco" numberOfWords="200" target="wikidiv" overlay="images/overlay/wiki.png"/&gt;
 &lt;flickr in="00:00:05:02" out="00:00:10:07" target="personalflickr" userid="78868639@N00" numberofimages="8" padding="4px" overlay="images/overlay/flickr.png"/&gt;
 &lt;googlenews in="00:00:05:02" out="00:00:10:07" target="googlenewsdiv" topic="Village Telco"/&gt;
 [...]
 &lt;/resources&gt;

 &lt;map&gt;
 &lt;location resourceid="capetownwiki" in="00:00:03:00" out="00:00:11:07" lat="-33.9238" long="18.4233" target="container2" zoom="8"/&gt;
 &lt;location resourceid="grandislewiki" in="00:00:11:07" out="00:00:19:07" lat="29.2720" long="-90.0233 " target="container2" zoom="8"/&gt;
 &lt;location resourceid="mitmedialabhome" in="00:00:19:08" out="00:00:27:00" lat="42.3613" long="-71.0863" target="container2" zoom="12"/&gt;
 [...]
 &lt;/map&gt;
 &lt;subtitles&gt;

 &lt;subtitles language="en" align="center"&gt;
 &lt;subtitle in="00:00:00:03" out="00:00:01:06"&gt;All right let's take a look and show me some&lt;/subtitle&gt;
 &lt;subtitle in="00:00:01:06" out="00:00:03:00"&gt;of the neat things you can do on the internet&lt;/subtitle&gt;
 [...]
 &lt;/subtitles&gt;

 &lt;subtitles language="fa" align="center"&gt;

 &lt;subtitle in="00:04:00:08" out="00:04:01:09"&gt;My name is Mona Kasra&lt;/subtitle&gt;

 &lt;subtitle in="00:04:01:10" out="00:04:03:11"&gt;and I'm building a better Internet&lt;/subtitle&gt;
 [...]
 &lt;/subtitles&gt;

 &lt;/subtitles&gt;
 &lt;credits&gt;&lt;/credits&gt;
 &lt;/timeline&gt;
&lt;/popcorn&gt;</code></pre>
<a href="http://webmademovies.etherworks.ca/popcorndemo/">Uno de los ejemplos</a> de uso de este tipo de información es la de enviar en tiempo real los subtítulos en Inglés a una herramienta de traducción para mostrarlos en un idioma diferente al definido en el XML.

Sin duda se trata de un <a href="http://mozilla.github.com/popcorn-js/">interesante proyecto</a> que Mozilla está apoyando con el que los videos/audios de Internet dejarán de ser lo que son hoy en día.<h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2007/09/17/557-herramientas-para-la-web-semantica/" rel="bookmark" title="Permanent Link: 557 herramientas para la Web semántica">557 herramientas para la Web semántica</a></li><li><a href="http://www.anieto2k.com/2006/07/18/tabulator-un-navegador-para-la-web-semantica/" rel="bookmark" title="Permanent Link: Tabulator: un navegador para la web semántica">Tabulator: un navegador para la web semántica</a></li><li><a href="http://www.anieto2k.com/2009/12/24/html5-inusable-en-todos-los-navegadores/" rel="bookmark" title="Permanent Link: HTML5 video con problemas en todos los navegadores">HTML5 video con problemas en todos los navegadores</a></li><li><a href="http://www.anieto2k.com/2007/12/09/mas-sobre-el-contenido-multimedia-html5-y-webkit/" rel="bookmark" title="Permanent Link: Más sobre el contenido multimedia, HTML5 y WebKit">Más sobre el contenido multimedia, HTML5 y WebKit</a></li><li><a href="http://www.anieto2k.com/2010/03/26/ambilight-para-html5-video/" rel="bookmark" title="Permanent Link: Ambilight para HTML5 Video">Ambilight para HTML5 Video</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2010/11/08/popcorn-dandole-semantica-a-los-videos-con-html5/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Protocolo relativo de URLs</title>
		<link>http://www.anieto2k.com/2010/10/28/protocolo-relativo-de-urls/</link>
		<comments>http://www.anieto2k.com/2010/10/28/protocolo-relativo-de-urls/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 09:22:23 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[estandares]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=10090</guid>
		<description><![CDATA[Paul Irish publica un interesante truco para facilitarnos el trabajo con las URL's de nuestras aplicaciones web. &#60;img src="//domain.com/img/logo.png"&#62; De esta forma, el navegador selecciona por nosotros el protocolo que debe usar, que en todo caso será el mismo en el que estemos corriendo la aplicación. Ideal para los casos en los que disponemos de [...]]]></description>
			<content:encoded><![CDATA[<a href="http://paulirish.com/">Paul Irish</a> publica un<a href="http://paulirish.com/2010/the-protocol-relative-url/"> interesante truco para facilitarnos el trabajo con las URL's</a> de nuestras aplicaciones web.
<pre><code>&lt;img src="//domain.com/img/logo.png"&gt;</code></pre>
De esta forma, el navegador selecciona por nosotros el protocolo que debe usar, que en todo caso será el mismo en el que estemos corriendo la aplicación. Ideal para los casos en los que disponemos de secciones en HTTPS y otras en HTTP, para evitar el molesto mensaje de error.

Al igual que si estamos usando el protocolo <code>file://</code> desde nuestra máquina, tambien usará esa ruta de ficheros dentro de nuestro disco duro para intentar cargar la la URL indicada.

En los ficheros CSS tambien podemos usar esta técnica, aunque en Internet Explorer 7 y 8 provoca <a href="http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/">un fallo que hace que el fichero se descargue dos veces</a> (¬¬).
<pre><code>.omgomg { background: url(//websbestgifs.net/kittyonadolphin.gif); }</code></pre>
Técnicamente se llama "Relative Reference" y está especificada en el <a href="http://tools.ietf.org/html/rfc3986#section-4.2">RFC 3986</a>.<h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2009/04/22/lostin-acorta-y-protege-urls/" rel="bookmark" title="Permanent Link: Lost.in, acorta y protege URL&#8217;s">Lost.in, acorta y protege URL&#8217;s</a></li><li><a href="http://www.anieto2k.com/2008/09/01/jugando-con-wp_rewrite-api-y-las-urls-amigables/" rel="bookmark" title="Permanent Link: Jugando con WP_Rewrite API y las URL&#8217;s amigables">Jugando con WP_Rewrite API y las URL&#8217;s amigables</a></li><li><a href="http://www.anieto2k.com/2008/01/15/%c2%bfcual-es-el-tamano-maximo-de-las-urls/" rel="bookmark" title="Permanent Link: ¿Cual es el tamaño máximo de las URL&#8217;s?">¿Cual es el tamaño máximo de las URL&#8217;s?</a></li><li><a href="http://www.anieto2k.com/2006/10/21/conversor-px-a-em/" rel="bookmark" title="Permanent Link: Conversor PX a EM">Conversor PX a EM</a></li><li><a href="http://www.anieto2k.com/2007/02/07/yo-soy-friki-%c2%bfy-tu/" rel="bookmark" title="Permanent Link: Yo soy friki,&#8230; ¿y tu?">Yo soy friki,&#8230; ¿y tu?</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2010/10/28/protocolo-relativo-de-urls/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>¿Comas antes o después?</title>
		<link>http://www.anieto2k.com/2010/10/26/%c2%bfcomas-antes-o-despues/</link>
		<comments>http://www.anieto2k.com/2010/10/26/%c2%bfcomas-antes-o-despues/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 13:41:53 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=10088</guid>
		<description><![CDATA[En CSS Trick publican un artículo en relación a un Tweet de Marc Grabanski que pregunta: ¿Comas antes o después de la línea en objetos JSON para definiciones múltiples? Básicamente se refiere a donde colocamos la coma a la hora de generar estructuras JSON de varios elementos. // commas antes var vampyre = {   [...]]]></description>
			<content:encoded><![CDATA[En<a href="http://css-tricks.com/commas-before/"> CSS Trick publican un artículo</a> en relación a un <a href="http://twitter.com/1Marc/status/28716829027">Tweet de Marc Grabanski</a> que pregunta:
<blockquote cite="http://twitter.com/1Marc/status/28716829027">¿Comas antes o después de la línea en objetos JSON para definiciones múltiples?</blockquote>
Básicamente se refiere a donde colocamos la coma a la hora de generar estructuras JSON de varios elementos.
<pre><code><strong>// commas antes</strong>
var vampyre = {
    teeth: 'sharp'
  , blood: 'stale'
  , age: 320
}

<strong>// commas despues</strong>
var vampyre = {
    teeth: 'sharp',
    blood: 'stale',
    age: 320
}</code></pre>
Yo personalmente suelo ponerlas detrás,  aunque leyendo el artículo he descubierto las ventajas de ponerlas delante. Por ejemplo a la hora de comentar la última línea, que te obliga a borrar la coma de la última posición no comentada.
<pre><code>// commas despues
var vampyre = {
    teeth: 'sharp',
    blood: 'stale'<strong>, // Esta coma hay que borrarla</strong>
 //   age: 320
}</code></pre>
Ambas son dos forma correctas de declarar variables, o definir objetos JSON. ¿Cual usas tu?<h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2009/08/17/wordpress-2-9-con-papelera-de-reciclaje/" rel="bookmark" title="Permanent Link: WordPress 2.9 con papelera de reciclaje">WordPress 2.9 con papelera de reciclaje</a></li><li><a href="http://www.anieto2k.com/2005/11/28/problema-con-regulus/" rel="bookmark" title="Permanent Link: Problema con Regulus">Problema con Regulus</a></li><li><a href="http://www.anieto2k.com/2006/10/09/los-programadores-y-el-vodka/" rel="bookmark" title="Permanent Link: Los programadores y el Vodka">Los programadores y el Vodka</a></li><li><a href="http://www.anieto2k.com/2006/05/11/bip-bip-tendras-un-emil/" rel="bookmark" title="Permanent Link: bip bip &#8230; &#8220;Tendrás un em@il&#8221;">bip bip &#8230; &#8220;Tendrás un em@il&#8221;</a></li><li><a href="http://www.anieto2k.com/2006/08/28/ya-he-vuelto-menos-mal/" rel="bookmark" title="Permanent Link: Ya he vuelto!!! Menos mal">Ya he vuelto!!! Menos mal</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2010/10/26/%c2%bfcomas-antes-o-despues/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Favicons dinámicos con canvas</title>
		<link>http://www.anieto2k.com/2010/08/26/favicons-dinamicos-con-canvas/</link>
		<comments>http://www.anieto2k.com/2010/08/26/favicons-dinamicos-con-canvas/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 20:52:08 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[estandares]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=10011</guid>
		<description><![CDATA[El cambio de favicon de Google Calendar ha hecho que Danny Hope se pregunte si se podría hacer que el favicon mostrara la fecha actual en lugar del 31 que está mostrando ahora mismo. Remy Sharp a modo de investigación personal se propuso conseguirlo, y tras unas cuantas pruebas logró generar un favicon dinámico usando [...]]]></description>
			<content:encoded><![CDATA[El cambio de favicon de Google Calendar ha hecho que <a href="http://twitter.com/yandle/status/21989058504">Danny Hope se pregunte</a> si se podría hacer que el favicon mostrara la fecha actual en lugar del 31 que está mostrando ahora mismo.

<a href="http://remysharp.com/2010/08/24/dynamic-favicons/"><strong>Remy Sharp</strong> a modo de investigación</a> personal se propuso conseguirlo, y tras unas cuantas pruebas logró generar un favicon dinámico usando <code>&lt;canvas /&gt;</code> y javascript para mostrar la fecha actual en lugar del estático 31.
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/08/dynamic-favicon.jpg"><img class="aligncenter" src="http://www.anieto2k.com/wp-content/uploads/2010/08/dynamic-favicon.jpg" alt="dynamic-favicon" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/08/dynamic-favicon.jpg"><small>(Ver Imagen)</small></a></p>
Para ello, limpió el icono de Google dejando espacio para que los números cambien en función del día, unas pocas líneas de código y voala!
<h3>¿Como?</h3>
Como ya conocemos, la llamada para informar un favicon en cualquier página web:
<pre><code>&lt;link <strong>id="favicon"</strong> rel="icon" type="image/png" href="ical-icon-complete.png" /&gt;</code></pre>
Marco en negrita el ID que ha indicado para localizar el elemento más fácilmente en el código Javascript.
<pre><code>(function () {
var canvas = document.createElement('canvas'),
    ctx,
    img = document.createElement('img'),
    link = document.getElementById('favicon').cloneNode(true),
    day = (new Date).getDate() + '';

if (canvas.getContext) {
  canvas.height = canvas.width = 16; // set the size
  ctx = canvas.getContext('2d');
  img.onload = function () { // once the image has loaded
    ctx.drawImage(this, 0, 0);
    ctx.font = 'bold 10px "helvetica", sans-serif';
    ctx.fillStyle = '#F0EEDD';
    if (day.length == 1) day = '0' + day;
    ctx.fillText(day, 2, 12);
    link.href = canvas.toDataURL('image/png');
    document.body.appendChild(link);
  };
  img.src = 'ical-icon.png';
}

})();</code></pre>
El código javascript, como podemos ver se encarga de generar un nuevo elemento <code>&lt;img /&gt;</code> en el que alojaremos la información creada con el elemento <code>&lt;canvas /&gt; </code>con el día incrustado dentro. Simplemente genial.<h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2006/03/16/favicons-dinamicos/" rel="bookmark" title="Permanent Link: Favicons dinámicos">Favicons dinámicos</a></li><li><a href="http://www.anieto2k.com/2007/08/08/canvas-3d-graficas-3d-basadas-en-canvas-y-javascript/" rel="bookmark" title="Permanent Link: Canvas 3D, gráficas 3D basadas en Canvas y Javascript">Canvas 3D, gráficas 3D basadas en Canvas y Javascript</a></li><li><a href="http://www.anieto2k.com/2006/03/09/netvibes-anade-favicons/" rel="bookmark" title="Permanent Link: NetVibes añade Favicons">NetVibes añade Favicons</a></li><li><a href="http://www.anieto2k.com/2008/10/27/bomomo-dibuja-con-canvas/" rel="bookmark" title="Permanent Link: Bomomo, dibuja con Canvas">Bomomo, dibuja con Canvas</a></li><li><a href="http://www.anieto2k.com/2006/06/01/canvas-para-wordpress-disponible/" rel="bookmark" title="Permanent Link: Canvas para WordPress, disponible">Canvas para WordPress, disponible</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2010/08/26/favicons-dinamicos-con-canvas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Carga Javascript/CSS con canvas en formato PNG</title>
		<link>http://www.anieto2k.com/2010/08/24/carga-javascriptcss-con-canvas-en-formato-png/</link>
		<comments>http://www.anieto2k.com/2010/08/24/carga-javascriptcss-con-canvas-en-formato-png/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 13:40:29 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=9994</guid>
		<description><![CDATA[Como curiosidad me pareció muy interesante ayer la noticia de Nihilogic en la que nos mostraba la posibilidad de comprimir ficheros Javascript o CSS en una imagen PNG para luego cargarla mediante Canvas y así poder disponer del código comprimido anteriormente. La idea, aunque interesante, no me parece factible para la vida real. Principalmente por [...]]]></description>
			<content:encoded><![CDATA[Como curiosidad me pareció muy interesante ayer<a href="http://blog.nihilogic.dk/2008/05/compression-using-canvas-and-png.html"> la noticia de Nihilogic en la que nos mostraba la posibilidad de comprimir ficheros Javascript o CSS en una imagen PNG</a> para luego cargarla mediante <a href="http://www.anieto2k.com/2009/09/10/hola-mundo-en-canvas/">Canvas </a>y así poder disponer del código comprimido anteriormente.

La idea, aunque interesante, no me parece factible para la vida real. Principalmente por que no me imagino depurando el código Javascript mirando un fichero PNG, pero para hacer pruebas es altamente atractivo.
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/08/jquery-1.2.3.min_.js.png"><img src="http://www.anieto2k.com/wp-content/uploads/2010/08/jquery-1.2.3.min_.js.png" alt="jquery-1.2.3.min.js" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/08/jquery-1.2.3.min_.js.png"><small>(Ver Imagen)</small></a></p>
<p style="text-align: center;">(jQuery convertido a PNG :D)</p>

<h3>La idea</h3>
Ya hemos visto<a href="http://www.anieto2k.com/2009/10/28/acelarando-la-carga-con-eval/"> otras formas de minimizar el tiempo de carga de nuestros ficheros Javascript o CSS</a>, y esta no es muy diferente. Básicamente las dos se basan en evaluar el código de nuevo directamente en el navegador como texto, para ello se usa <code>eval()</code>, lo único que veremos cambiar será la forma de recoger el código.
<pre><code>var x = function(z, m, ix ) { // image, callback, chunk index
  var o = new Image();
  o.onload = function() {
    var s = "",
        c = d.createElement("canvas"),
        t = c.getContext("2d"),
        w = o.width,
        h = o.height;
    c.width = c.style.width = w;
    c.height = c.style.height = h;
    t.drawImage(o, 0, 0);
    var b = t.getImageData( 0, 0, w, h ).data;
    for(var i= 0; i &lt;b.length; i += 4) {
      if( b[i]&gt; 0 )
        s += String.fromCharCode(b[i]);
    }
    m(s, ix);
  }
  o.src = z;
}</code></pre>
Este código se encargará de leer mediante un elemento <code>&lt;canvas /&gt;</code> una imagen que le pasaremos como parámetro. Se encargará de cargar byte a byte para obtener el texto completo de nuestro javascript. Posteriormente lo evaluaremos y dispondremos del código disponible en nuestra página.
<h3>¿Como se crean esas PNG's?</h3>
La creación de estas imágenes es bastante sencilla, simplemente tendremos que leer el texto que deseamos convertir a PNG y generaremos una imagen pixel a pixel con el valor de cada carácter.
<pre><code>def string2png( string, output )
  image = Magick::Image.new 1,string.length
  for i in 0 .. string.length
    color = '#%02X0000' % string[i]
    pixel = Magick::Pixel.from_color color
    image.pixel_color 0, i, pixel
  end
  image.compression = ZipCompression
  image.write("png8:"+ output)

  image = nil
end</code></pre>
En este código en Ruby vemos que después de leer el código lo recorremos letra a letra y vamos generando un pixel de un color diferente (dependiendo de la letra que estemos procesando). Ver <a href="http://gist.github.com/542462">el código completo</a>.
<h3>¿Por que usar esto?</h3>
Personalmente no lo usaría para un uso real, pero la reducción de peso de ficheros en las pruebas realizadas con Javascript han sido bastante interesantes:
<strong> prototype-1.6.0.2.js</strong>
<em>123 KB Javascript compressed to 30 KB PNG (24%)</em>
<strong>jquery-1.2.3.min.js</strong>
<em>53 KB Javascript compressed to 17 KB PNG (32%)</em>
<strong>excanvas.js</strong>
<em>24 KB Javascript compressed to 8 KB PNG (33%)</em>
<strong>excanvas-compressed.js</strong>
<em>10 KB Javascript compressed to 5 KB PNG (50%)</em>
<strong>dijit.js</strong>
<em>46 KB Javascript compressed to 16 KB PNG (35%)</em>

Aunque son valores interesantes, las pruebas hechas con<strong> digit-all.js</strong> en <a href="http://www.nihilogic.dk/labs/canvascompress/">la misma página de Nihilogic</a> reflejan que para cargar los 70Kb comprimidos en PNG (255Kb sin comprimir) necesita cerca de 5-6 segundos en evaluarlo. Periodo que el navegador se queda prácticamente parado.
Por otro lado, navegador como <a href="http://code.google.com/p/explorercanvas/">IE6 no soportan el elemento canvas nativamente</a>, lo que nos limita su uso prácticamente en la mayoría de sitios web.
<h3>Conclusiones</h3>
Como curiosidad está la mar de bien, incluso para demostrar lo que se puede hacer con ingenio y <a href="http://www.456bereastreet.com/archive/201008/css3_is_not_html5/">las herramientas que ofrece HTML5</a>. Pero nada más, gZip ofrece una reducción interesante además lo incorporan la mayoría de navegadores.
<a href="http://ajaxian.com/archives/want-to-pack-js-and-css-really-well-convert-it-to-a-png-and-unpack-it-via-canvas">Via</a><h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2007/08/08/canvas-3d-graficas-3d-basadas-en-canvas-y-javascript/" rel="bookmark" title="Permanent Link: Canvas 3D, gráficas 3D basadas en Canvas y Javascript">Canvas 3D, gráficas 3D basadas en Canvas y Javascript</a></li><li><a href="http://www.anieto2k.com/2008/10/27/bomomo-dibuja-con-canvas/" rel="bookmark" title="Permanent Link: Bomomo, dibuja con Canvas">Bomomo, dibuja con Canvas</a></li><li><a href="http://www.anieto2k.com/2006/06/01/canvas-para-wordpress-disponible/" rel="bookmark" title="Permanent Link: Canvas para WordPress, disponible">Canvas para WordPress, disponible</a></li><li><a href="http://www.anieto2k.com/2008/11/25/tutorial-de-canvas/" rel="bookmark" title="Permanent Link: Tutorial de Canvas">Tutorial de Canvas</a></li><li><a href="http://www.anieto2k.com/2008/11/19/increible-canvas-3d/" rel="bookmark" title="Permanent Link: Increible canvas 3D">Increible canvas 3D</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2010/08/24/carga-javascriptcss-con-canvas-en-formato-png/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Reduce el ruido de tus fotografías apilando imágenes I</title>
		<link>http://www.anieto2k.com/2010/05/23/apilacion-de-imagenes/</link>
		<comments>http://www.anieto2k.com/2010/05/23/apilacion-de-imagenes/#comments</comments>
		<pubDate>Sun, 23 May 2010 18:40:58 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[fotografía]]></category>
		<category><![CDATA[photoshop]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=9921</guid>
		<description><![CDATA[Si recordamos los 3 factores que intervienen en la correcta exposición de una fotografía nos encontramos con la sensibilidad ISO, que era la que nos permite especificar la cantidad de luz que el sensor es capaz de procesar. Este proceso se realiza forzando la sensibilidad por defecto del sensor electrónicamente. Este sobreesfuerzo del sensor produce [...]]]></description>
			<content:encoded><![CDATA[Si recordamos los 3 factores que intervienen en<a href="http://www.anieto2k.com/2010/04/05/fotografia-para-desarrolladores-web/"> la correcta exposición de una fotografía</a> nos encontramos con la sensibilidad ISO, que era la que nos permite especificar la cantidad de luz que el sensor es capaz de procesar. Este proceso se realiza forzando la sensibilidad por defecto del sensor electrónicamente. Este sobreesfuerzo del sensor produce un efecto en forma de ruido, píxeles encendidos aleatóriamente por toda la fotografía que puede (o no) afear la imagen.

Una técnica que se usa para reducir el ruido de la imágen es la de apilar imágenes y promediarlas para eliminar los puntos aleatorios y reforzar los puntos de información de una fotografía. En este ejemplo usaré Photoshop, aunque hay muchas herramientas que permite conseguir el mismo efecto.
<h3>Poniendonos en situación</h3>
Imaginemos que estamos dentro de una iglesia, catedral o recinto oscuro que nos obliga a subir la sensibilidad ISO para obtener la imagen correctamente expuesta. Yo he usado el trípode como modelo y he hecho la foto en una habitación con la ventana cerrada para simular la falta de luz.
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/05/inicio.jpg"><img src="http://www.anieto2k.com/wp-content/uploads/2010/05/inicio-682x1024.jpg" alt="inicio" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/05/inicio.jpg"><small>(Ver Imagen)</small></a></p>
La fotografía está tomada a:
<ul>
	<li>Velocidad: 1/20 seg</li>
	<li>Apertura: f/4.0</li>
	<li>ISO: 1600</li>
	<li>Focal: 10mm</li>
</ul>


No es ninguna maravia estética, pero para ilustrar lo que quiero mostrar me bastará, podemos ver claramente en el siguiente recorte el ruido producido.
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/05/recorte-ruido.jpg"><img src="http://www.anieto2k.com/wp-content/uploads/2010/05/recorte-ruido.jpg" alt="recorte-ruido" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/05/recorte-ruido.jpg"><small>(Ver Imagen)</small></a></p>

<h3>4-5 mejor que 1</h3>
La técnica se basa en la apilación de imágenes iguales, eso significa que debemos hacer 4-5 (o más fotografías) para poder apilarlas posteriormente. Si usamos trípode sería idea, sinó lo suyo sería intentar no bajar de los 1/60 seg. y apoyarse en algo para hacer las tomas en ráfaga, siempre en ráfaga.
<h3>Photoshop</h3>
Para empezar deberemos cargar las imágenes como capas en Photoshop, para eso tendremos que ir al menú Archivo &gt; Secuencia de comandos &gt; Cargar archivos en pila ...
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/05/cargarpila.jpg"><img src="http://www.anieto2k.com/wp-content/uploads/2010/05/cargarpila-380x300.jpg" alt="cargarpila" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/05/cargarpila.jpg"><small>(Ver Imagen)</small></a></p>
Nos aparecerá una opción para seleccionar los ficheros que deseamos apilar, una vez seleccionados marcamos las dos casillas inferiores, como se muestra en la imagen:
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/05/seleccionadas.jpg"><img src="http://www.anieto2k.com/wp-content/uploads/2010/05/seleccionadas-447x300.jpg" alt="seleccionadas" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/05/seleccionadas.jpg"><small>(Ver Imagen)</small></a></p>
Pulsamos OK, y esperamos a que automáticamente alinée las imagenes.
<h3>Modo de apilamiento</h3>
Existen varios modos de apilamiento, y cada uno de ellos permite obtener un resultado diferente. No voy a entrar en las diferencias que hay entre unos y otros, pero nosotros usaremos el llamado "Promedio".
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/05/promedio.jpg"><img src="http://www.anieto2k.com/wp-content/uploads/2010/05/promedio-489x300.jpg" alt="promedio" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/05/promedio.jpg"><small>(Ver Imagen)</small></a></p>
Este proceso tardará un rato dependiendo de la máquina que lo ejecute, y el resultado debería ser algo parecido a esto.
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/05/final.jpg"><img src="http://www.anieto2k.com/wp-content/uploads/2010/05/final-683x1024.jpg" alt="final" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/05/final.jpg"><small>(Ver Imagen)</small></a></p>
Podemos ver el recorte como el resultado ha eliminado el ruido:
<p style="text-align: center;"><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/05/recorte-noruido.jpg"><img src="http://www.anieto2k.com/wp-content/uploads/2010/05/recorte-noruido.jpg" alt="recorte-noruido" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/05/recorte-noruido.jpg"><small>(Ver Imagen)</small></a></p>
Nota: En este ejemplo me han salido movido el resultado por que lo he hecho a pulso a una velocidad de obturación de 1/20, muy baja para mi pulso. Pero se puede apreciar la reducción de ruido de forma considerable. Mientras más imágenes se apilan, más ruido es posible eliminar,  por consecuente será más sencillo estirar el histograma permitiendo obtener más información de la imagen.

Un ejemplo de que se puede conseguir usando esta técnica es su aplicación en astrofotografía. Este uso y algunas de las aplicaciones que se usan en astrofotografía me gustaría explicarlo más adelante.

<p style="text-align: center;"><a rel="lightbox" title="Centro galáctico por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4631664590/"><img src="http://farm5.static.flickr.com/4047/4631664590_56788ace92_b.jpg" alt="Centro galáctico" width="682" height="1024" /></a>
<a href="http://www.flickr.com/photos/anieto2k/4631664590/"><small>(Ver Imagen)</small></a></p><h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2007/11/02/12-galerias-de-imagenes-en-javascript/" rel="bookmark" title="Permanent Link: 12 galerías de Imagenes en Javascript">12 galerías de Imagenes en Javascript</a></li><li><a href="http://www.anieto2k.com/2008/11/25/101-galerias-de-imagenes-en-javascriptflashcss/" rel="bookmark" title="Permanent Link: 101 galerías de imagenes en javascript/flash/css">101 galerías de imagenes en javascript/flash/css</a></li><li><a href="http://www.anieto2k.com/2006/06/07/precarga-de-imagenes-con-css/" rel="bookmark" title="Permanent Link: Precarga de Imagenes con CSS">Precarga de Imagenes con CSS</a></li><li><a href="http://www.anieto2k.com/2007/05/06/redimensiona-las-imagenes-de-tus-posts/" rel="bookmark" title="Permanent Link: Redimensiona las imagenes de tus posts">Redimensiona las imagenes de tus posts</a></li><li><a href="http://www.anieto2k.com/2006/09/18/transparencias-en-tus-imagenes-con-css/" rel="bookmark" title="Permanent Link: Transparencias en tus imagenes con CSS">Transparencias en tus imagenes con CSS</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2010/05/23/apilacion-de-imagenes/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Fotografía para desarrolladores web</title>
		<link>http://www.anieto2k.com/2010/04/05/fotografia-para-desarrolladores-web/</link>
		<comments>http://www.anieto2k.com/2010/04/05/fotografia-para-desarrolladores-web/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 09:33:04 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[fotografía]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=9789</guid>
		<description><![CDATA[Hace unos meses que me he aficionado, y bastante, a la fotografía. Como poco a poco voy introduciéndome en el mundillo y me está gustando mucho he pensado que sería interesante compartir con vosotros lo que voy aprendiendo sobre el tema asemejándolo al lenguaje que los desarrolladores web conocemos. No soy ningún profesional ni me [...]]]></description>
			<content:encoded><![CDATA[Hace unos meses que <a href="http://www.flickr.com/photos/anieto2k/">me he aficionado, y bastante, a la fotografía</a>. Como poco a poco voy introduciéndome en el mundillo y me está gustando mucho he pensado que sería interesante compartir con vosotros lo que voy aprendiendo sobre el tema asemejándolo al lenguaje que los desarrolladores web conocemos.

<em>No soy ningún profesional ni me dedico a ello, así que pido perdón por adelantado por lo errores que pueda cometer. Simplemente intento plasmar los conocimientos adquiridos estos meses.
</em>
<h3>0) Introducción</h3>
Desde que me inicié en la fotografía no he de dejado de ver cada fotografía como un proyecto que llevar a cabo. Partiendo de que la fotografía se compone de 2 grandes conceptos (<em>exposición</em> y <em>composición</em>) podemos asemejarla a una página web en la que la <em>exposición</em> sería la creación de la misma, usando herramientas y lenguajes de programación y a <em>composición</em> podemos llamar a la creación del diseño que el usuario verá de nuestra página. Se trata de un interpretación personal.

Básicamente en fotografía, se trata de realizar una composición que nos agrade o nos llegue a transmitir algo y de hallar una exposición correcta directamente desde nuestra cámara, como con una página web :D
<h3>1) El viaje de la luz</h3>
Para los que no lo sepan, la luz es la clave de la fotografía, básicamente lo que hace la cámara es captar la luz reflejada en los objetos que deseamos retratar. Para ello, la luz ha de pasar un obturador que se abre y se cierra limitando la cantidad de luz y un diafragma que abre o cierra el paso de dicha luz, para terminar golpeando en el sensor donde la energía luminosa es convertida en datos binarios para almacenarse posteriormente en nuestra tarjeta SD.
<h3>2) Conceptos</h3>
Para empezar vamos a definir una serie de conceptos que poco a poco irán cogiendo sentido mientras entramos en materia.
<ul>
	<li><strong>Obturador</strong>: Se encarga de establecer el tiempo durante el que la luz llega al sensor. Este tiempo se mide en fracciones de segundos o segundos. (Ej: 1/250, 1/125,...)</li>
	<li><strong>Diafragma</strong>: Su función es la de definir la apertura de la óptica del objetivo, haciendo que entre más o menos luz. Se mide mediante el famoso número f, y a mientras mayor número f, menor apertura. (Ej: f/1.8 &gt; f/16)</li>
	<li><strong>Sensor</strong>: El sensor es el encargado de recibir esa luz y procesarla para que la cámara pueda trabajar con ella.</li>
</ul>
<h3>3) Exposición: El lenguaje de programación de la fotografía</h3>
La fotografía ha este nivel es un lenguaje de programación más, tenemos una serie de variables que podemos modificar a nuestro antojo al recibir los parámetros de entrada (la escena) y con los que obtendremos un resultado que veremos en nuestra fotografía.

La exposición es la cantidad de luz que encontramos en una fotografía y nuestra misión como programadores de la imagen será encontrar la exposición óptima. Para ello tendremos que usar los tres factores que influyen en la fotografía conseguir la cantidad exacta de luz para cada situación.

Se trata de un triángulo compuesto por:
<ol>
	<li>Velocidad de obturación.</li>
	<li>Apertura de diafragma.</li>
	<li>Sensibilidad ISO.</li>
</ol>
Y si tiramos mucho de un lado, tendremos que reducir mucho de otro para compensar. Siempre teniendo en cuenta que la manipulación de cada parámetro afecta a algo de la fotografía.
<h4>3.1) Velocidad de obturación</h4>
Cuando hablamos de velocidad de obturación, hemos de pensar que los efectos relacionado a la velocidad están estrechamente ligado a ellos. Si deseamos congelar el momento o dar sensación de velocidad dependerá del tiempo que permitamos a la luz llegar al sensor.
<table>
<tbody>
<tr>
<td><a title="Flying Dog por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4446672898/"><img src="http://farm5.static.flickr.com/4005/4446672898_dabf03b063_m.jpg" alt="Flying Dog" width="240" height="145" /></a>
Congelando el momento.</td>
<td><a title="Volviendo a casa por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4463327254/"><img src="http://farm5.static.flickr.com/4050/4463327254_cc84944e63_m.jpg" alt="Volviendo a casa" width="240" height="152" /></a>
Larga exposición</td>
</tr>
</tbody>
</table>
<h4>3.2) Apertura de diafragma</h4>
La apertura del diafragma, nos permitirá definir la profundidad de campo de nuestra imagen. La profundidad de campo es aquella zona de la imagen que se ve nítida antes y después del objeto enfocado. Mientras más apertura menor profundidad de campo, permitiendo conseguir interesantes efectos de desenfoques de de fondo o imágenes completamente nítidas.
<table>
<tbody>
<tr>
<td><a title="Flor por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4440652699/"><img src="http://farm5.static.flickr.com/4043/4440652699_00e4957135_m.jpg" alt="Flor" width="240" height="160" /></a>

Muy poca profundidad de campo</td>
<td><a title="Vista de hormiga por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4410675191/"><img src="http://farm3.static.flickr.com/2802/4410675191_06f2232808_m.jpg" alt="Vista de hormiga" width="240" height="180" /></a>

Más profundidad de campo</td>
</tr>
</tbody>
</table>
<h4>3.3) Sensibilidad ISO</h4>
La sensibilidad ISO, indica la capacidad que el sensor de la cámara tendrá de captar luz. Mediante modificaciones eléctricas la sensibilidad del sensor puede ser ampliada, permitiendo así captar una mayor cantidad de luz. Al tratarse de una alteración electrónica nos produce el desagradable ruido. Así que hemos de tenerlo en cuenta a la hora de usarlo.
<table>
<tbody>
<tr>
<td><a title="Luz en la oscuridad por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4421751690/"><img src="http://farm3.static.flickr.com/2746/4421751690_b2a6a1b80d_m.jpg" alt="Luz en la oscuridad" width="240" height="180" /></a>

El ISO muy alta genera mucho ruido</td>
</tr>
</tbody>
</table>
<h4>3.4) Subexposición y Sobreexposición</h4>
Jugando con los 3 parámetros, podemos conseguir imágenes subexpuestas, osea oscuras, sobreexpuestas osea muy claras, y el punto intermedio que consideramos como correcto.
<table>
<tbody>
<tr>
<td><a title="Surf en Febrero por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4385655746/"><img src="http://farm5.static.flickr.com/4016/4385655746_5d1393709b_m.jpg" alt="Surf en Febrero" width="240" height="167" /></a>
Sobreexpuesta</td>
<td><a title="Brillante vigilante mojado por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4318643633/"><img src="http://farm3.static.flickr.com/2798/4318643633_3f92c4afb7_m.jpg" alt="Brillante vigilante mojado" width="240" height="180" /></a>
Subexpuesta</td>
</tr>
</tbody>
</table>
<h3>4) Composición: Como hablar con imágenes</h3>
La composición es la forma que tiene el fotógrafo de hacer llegar un mensaje a los que visualizan las imágenes. Dependiendo del nivel cultural, de la nacionalidad, del sexo,... incluso de la edad del que ve la imagen, la percepción de la misma puede variar. Por ese motivo no hay ninguna ley para hacer composiciones correctas, por ejemplo un árabe comenzará a ver la imagen de derecha a izquierda, un chino de arriba a abajo,...

Aún así, hay una serie de reglas que permiten guiar la vista del observador hacia lo que queremos resaltar de nuestra escena. Hay que recordar que las reglas están para saltárselas :D
<h4>4.1) Regla de los tercios</h4>
Una de las reglas más importantes es la regla de tercios, básicamente por que las demás reglas se basan en ella para existir. Esta regla se encarga de dividir la escena en 9 cuadrados iguales produciendo una líneas en la imagen.
<table>
<tbody>
<tr>
<td><a rel="lightbox" href="http://www.anieto2k.com/wp-content/uploads/2010/04/Rivertree_thirds_md.gif"><img src="http://www.anieto2k.com/wp-content/uploads/2010/04/Rivertree_thirds_md.gif" alt="Rivertree_thirds_md" /></a>
<a href="http://www.anieto2k.com/wp-content/uploads/2010/04/Rivertree_thirds_md.gif"><small>(Ver Imagen)</small></a>
Imagen de la <a href="http://es.wikipedia.org/wiki/Regla_de_los_tercios">Wikipedia</a></td>
</tr>
</tbody>
</table>
Entre estas líneas, podemos destacar líneas y puntos fuertes. Lugares en los siempre deberíamos intentar ubicar los objetos que estamos fotografiando. La idea es aportarle mayor fuerza a la imagen y descentrando al individuo de la escena conseguimos hacer.
<table>
<tbody>
<tr>
<td><a title="Ratón feliz por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4398772788/"><img src="http://farm5.static.flickr.com/4045/4398772788_6231598c5d_m.jpg" alt="Ratón feliz" width="240" height="180" /></a></td>
<td><a title="Rosetón de la Iglésia de Valldemosa por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4398778710/"><img src="http://farm5.static.flickr.com/4026/4398778710_5fac50dcff_m.jpg" alt="Rosetón de la Iglésia de Valldemosa" width="240" height="180" /></a></td>
</tr>
</tbody>
</table>
Aunque recordemos, las reglas están para romperlas :D
<h4>4.2) Regla del horizonte</h4>
Usando la misma rejilla de la regla de los tercios, la regla del horizonte pretente transmitir un valor añadido a nuestras fotografías del horizonte.
<table>
<tbody>
<tr>
<td><a title="Atardecer por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4325813220/"><img src="http://farm3.static.flickr.com/2763/4325813220_b4ca1ec373_m.jpg" alt="Atardecer" width="240" height="180" /></a>

Usando la línea horizontal inferior</td>
<td><a title="Llaüd por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4491301044/"><img src="http://farm5.static.flickr.com/4024/4491301044_661e6e122b_m.jpg" alt="Llaüd" width="240" height="137" /></a>

Usando la línea horizontal superior</td>
</tr>
</tbody>
</table>
La regla dice que el horizonte nunca debería estar centrado en la imagen, sino que debería ir sobre las dos líneas horizontales fuertes dependiendo de lo que queramos transmitir. Si queremos darle una connotación más celestial por que las nubes del cielo son nuestro individuo usaremos la línea inferior si por lo contrario queremos darle una sensación más terrenal usaremos la línea superior.
<h4>4.3) Regla del movimiento</h4>
La regla del movimiento dice que siempre que un elemento esté en movimiento debemos dejarle espacio delante del objeto como indicando la dirección que este va a seguir.
<table>
<tbody>
<tr>
<td><a title="Libre por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4407160124/"><img src="http://farm5.static.flickr.com/4068/4407160124_6649bd5ba1_m.jpg" alt="Libre" width="240" height="180" /></a></td>
<td><a title="Equilibrio por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4446681204/"><img src="http://farm5.static.flickr.com/4028/4446681204_30bfc2cf71_m.jpg" alt="Equilibrio" width="240" height="137" /></a></td>
</tr>
</tbody>
</table>
<h4>4.4) Regla de la mirada</h4>
La regla de mirada es muy similar a la del movimiento y dice que cuando realizamos un retrato debemos dejar espacio en dirección de la mirada del sujeto.
<table>
<tbody>
<tr>
<td><a title="Posando por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4430702586/"><img src="http://farm5.static.flickr.com/4003/4430702586_010d7c7a7f_m.jpg" alt="Posando" width="240" height="160" /></a></td>
<td><a title="Guarda Vaticano por anieto2k, en Flickr" href="http://www.flickr.com/photos/anieto2k/4465495914/"><img src="http://farm5.static.flickr.com/4047/4465495914_e2435cbafb_m.jpg" alt="Guarda Vaticano" width="240" height="168" /></a></td>
</tr>
</tbody>
</table>
Bueno, espero haber explicado con palabras mundanas lo que he entendido de fotografía en estos 2 meses que llevo haciendo fotos. Aunque no es la temática habitual del blog, creo que de vez en cuando algo así para coger aire me pueden venir bien, y a vosotros también ;)<h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2006/08/28/opera-para-desarrolladores/" rel="bookmark" title="Permanent Link: Opera para desarrolladores">Opera para desarrolladores</a></li><li><a href="http://www.anieto2k.com/2006/06/08/dzone-diggmeneame-clon-para-desarrolladores/" rel="bookmark" title="Permanent Link: DZone, digg/meneame clon para desarrolladores">DZone, digg/meneame clon para desarrolladores</a></li><li><a href="http://www.anieto2k.com/2008/11/26/herramientas-para-desarrolladores-web/" rel="bookmark" title="Permanent Link: Herramientas para desarrolladores web">Herramientas para desarrolladores web</a></li><li><a href="http://www.anieto2k.com/2008/09/08/recursos-para-desarrolladores-web/" rel="bookmark" title="Permanent Link: Recursos para desarrolladores web">Recursos para desarrolladores web</a></li><li><a href="http://www.anieto2k.com/2007/09/24/los-nuevos-desarrolladores-%c2%bfmas-preparados/" rel="bookmark" title="Permanent Link: Los nuevos desarrolladores, ¿más preparados?">Los nuevos desarrolladores, ¿más preparados?</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2010/04/05/fotografia-para-desarrolladores-web/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>SWYM, di lo que sientes</title>
		<link>http://www.anieto2k.com/2010/01/02/swym-di-lo-que-sientes/</link>
		<comments>http://www.anieto2k.com/2010/01/02/swym-di-lo-que-sientes/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 10:29:32 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[SWYM]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=9515</guid>
		<description><![CDATA[De los editores WYSIWYM (What You See Is What You Mean) aparece SWYM ( Say What You Mean) un pseudo lenguaje de programación desarrollado sobre Javascript para facilitar algunas tareas. // Ejemplo de uso SWYM.Eval(codigo); Int.toBits: [1,2,4,etc..&#60;=this].Where{(this/it)%2 &#62;= 1}; 89.toBits // [1,8,16,64] List.MyPrefix: LazyList(.length) { [this.at(0..it)] } each-MyPrefix-of[100..106] // [100] // [100,101] // [100,101,102] // [100,101,102,103] [...]]]></description>
			<content:encoded><![CDATA[De <a href="http://www.anieto2k.com/2007/06/16/wmd-un-nuevo-wysiwym-para-tus-paginas-web/">los editores WYSIWYM</a> (<em><strong>W</strong>hat <strong>Y</strong>ou <strong>S</strong>ee <strong>I</strong>s <strong>W</strong>hat <strong>Y</strong>ou <strong>M</strong>ean</em>) aparece SWYM (<em> <strong>S</strong>ay <strong>W</strong>hat <strong>Y</strong>ou <strong>M</strong>ean</em>) un <a href="http://www.chalicegames.com/swym/SwymWebIntro.html">pseudo lenguaje de programación desarrollado sobre Javascript</a> para facilitar algunas tareas.
<pre><code><strong>// Ejemplo de uso
SWYM.Eval(codigo);
</strong>
Int.toBits: [1,2,4,etc..&lt;=this].Where{(this/it)%2 &gt;= 1};
89.toBits
<em>// [1,8,16,64]</em>

List.MyPrefix: LazyList(.length)
{
 [this.at(0..it)]
}

each-MyPrefix-of[100..106]
<em>// [100]
// [100,101]
// [100,101,102]
// [100,101,102,103]
// [100,101,102,103,104]
// [100,101,102,103,104,105]
// [100,101,102,103,104,105,106]</em></code></pre>
Como podemos ver, no algo que vayamos a usar en nuestros proyectos, pero resulta un experimento realmente interesante que muestra el potencial de Javascript, aunque el mismo autor comenta que lo implementó pensando en que funcionara, no en que funcionara rápido. Sin duda un gran ejercicio de programación.<h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2007/01/26/necesitas-alguna-version-concreta-de-wordpress/" rel="bookmark" title="Permanent Link: Necesitas alguna versión concreta de WordPress">Necesitas alguna versión concreta de WordPress</a></li><li><a href="http://www.anieto2k.com/2006/05/12/el-viaje-mas-largo-jamas-hecho/" rel="bookmark" title="Permanent Link: El viaje más largo jamás contado">El viaje más largo jamás contado</a></li><li><a href="http://www.anieto2k.com/2006/10/05/hay-dias-que-te-sientes-grissom/" rel="bookmark" title="Permanent Link: Hay días que te sientes Grissom">Hay días que te sientes Grissom</a></li><li><a href="http://www.anieto2k.com/2006/01/30/la-lectura-en-la-vida/" rel="bookmark" title="Permanent Link: La lectura es vivir otros mundos">La lectura es vivir otros mundos</a></li><li><a href="http://www.anieto2k.com/2008/08/05/mostrar-los-suscriptores-de-feedburner-en-tu-wordpress/" rel="bookmark" title="Permanent Link: Mostrar los suscriptores de Feedburner en tu WordPress">Mostrar los suscriptores de Feedburner en tu WordPress</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2010/01/02/swym-di-lo-que-sientes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rendimiento extremo de Javascript</title>
		<link>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/</link>
		<comments>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 12:25:33 +0000</pubDate>
		<dc:creator>aNieto2k</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[optimización]]></category>

		<guid isPermaLink="false">http://www.anieto2k.com/?p=9244</guid>
		<description><![CDATA[En uno de esos momento de querer pulir scripts en Javascript me pegó la neura de probar diferente formas de hacer lo mismo sacando el cronómetro y midiendo tiempos para ver que era más eficiente y que lo era menos. Al final, por esas cosas del destino, me tuve que ir al final terminé olvidándome [...]]]></description>
			<content:encoded><![CDATA[En uno de esos momento de querer pulir scripts en Javascript me pegó la neura de probar diferente formas de hacer lo mismo sacando el cronómetro y midiendo tiempos para ver que era más eficiente y que lo era menos.

Al final, por esas cosas del destino, me tuve que ir al final terminé olvidándome de lo que quería hacer. Hasta ahora que me he encontrado con <a href="http://www.slideshare.net/madrobby/extreme-javascript-performance">esta presentación</a> de <a href="http://en.wikipedia.org/wiki/Thomas_Fuchs">Thomas Fuchs</a> (author de <a href="http://script.aculo.us/">Script.aculo.us</a>). En ella (la recomiendo) hace exáctamente lo que yo quería hacer, medir los tiempos de ciertas <a href="http://gist.github.com/227048">tareas cotidianas y compararlas con alternativas</a> que nos ofrece el mismo resultado.

Algunos de los resultados muestran cosas realmente interesantes:
<h3>Rendimiento</h3>
<h4>Objetos literales frente a clásicos</h4>
<pre><code><strong>// Más lento
</strong>function literals(){
 var a = [], o = {};
}
<strong>// Más rápido
</strong>function classic(){
 var a new Array, o = new Object:
}</code></pre>
En la presentación se ven los resultados sobre los diferentes navegadores y podemos ver como de usar uno u otro en <strong>Google Chrome podemos multiplicar por 2 el tiempo de proceso</strong>.
<h4>Loops</h4>
Los loops tambien muestran unos resultados curiosos:
<pre><code>var test = '';
for (var i = 0; i&lt;10000; i++)
 test = test + str;

var test = '', i = 10000;
while(i--) test = test + str;</code></pre>
Entre los dos anteriores, no se muestran diferencias en los resultados devueltos.
<pre><strong>// Más lenta
</strong>function normalLoop(){
 var i = 60, j = 0;
 while<code>(i--) j++;
}

<strong>// Más rápida
</strong>function unrolledLoop(){
 var j = 0;
 j++; j++; j++; j++; j++; j++;
 j++; j++; j++; j++; j++; j++;
 j++; j++; j++; j++; j++; j++;
 j++; j++; j++; j++; j++; j++;
 j++; j++; j++; j++; j++; j++;
 j++; j++; j++; j++; j++; j++;
 j++; j++; j++; j++; j++; j++;
 j++; j++; j++; j++; j++; j++;
 j++; j++; j++; j++; j++; j++;
 j++; j++; j++; j++; j++; j++;
}</code></pre>
Tambien vemos que muy caro hacer un loop, en <strong>Firefox multiplicamos por 2 el tiempo y en Google Chrome lo multiplicamos por 5</strong>.
<h4>Cachear variables globales</h4>
<pre><code><strong>// Más rádida
</strong>function cache(){
 var w = window, i = 10000;
 while(i--) w.test = 'test';
}

<strong>// Más lenta
</strong>function nocache(){
 var i = 10000;
 while(i--) window.test = 'test';
}</code></pre>
El cachear variables globables nos ayudará en la mayoría de casos.
<h4>Acceder a atributos de un objeto frente a <code>with()</code></h4>
<pre><code><strong>// Más lento
</strong>function conwith(){
 var obj = { prop: 'test', str: '' };
 with(obj){
 var i = 10000;
 while(i--) str += prop;
 return str;
 }
}

<strong>// Más rápido
</strong>function sinwith(){
 var obj = { prop: 'test', str: '' }, i = 10000;
 while(i--) obj.str += obj.prop;
 return obj.str;
}</code></pre>
En los resultados nos muestra que usar <code>with()</code> para acceder a un objeto nos puede penalizar el tiempo de proceso de nuestro Javascript. En el caso de <strong>Google Chrome reducimos el tiempo a un 7% del empleado con <code>with()</code></strong>.
<h3>Pasar a bits frente a <code>parseInt()</code></h3>
<pre><code><strong>// Más lenta
</strong>parseInt(12.50);

<strong>// Más rápida
</strong>~~(1 * "12.5");</code></pre>
<a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Bitwise_Operators">Javascript 1.5 integra una serie de operadores a nivel de bit</a>, entre ellos nos encontramos <code>~</code>(Alt Gr + 4) que representa el NOT a nivel de bit y que en este caso nos ayuda a convertir a entero una cadena como podemos ver en el ejemplo (haciendo un doble NOT para obtener un valor positivo).
<h3>Curiosidades del lenguaje</h3>
<h4>Diferencia entre <code>&amp;&amp;</code> y <code>||</code></h4>
<pre><code>var n = 1;
if (true &amp;&amp; (n=2)) ...;
console.log(n);
// --&gt; n = 2
if (true || (n=3)) ...;
console.log(n);
<strong>// --&gt; n = 2</strong></code></pre>
Como es lógico, el uso de <code>&amp;&amp;</code> evalua las dos condiciones frente a <code>||</code> que si ya se cumple la primera, nos evitamos comprobar la segunda.
<h4><code>(...).toString()</code></h4>
<pre><code>(function(){ return 2 * 3; }).toString();

<strong>// IE, Safari y Google Chrome
</strong>function(){ return 2 * 3; }

<strong>// Firefox
</strong>function(){ return 6; }</code></pre>
En este ejemplo vemos como la ejecución de esta función anónima nos muestra un resultado algo extraño en Firefox.
<h3>Más info</h3>
<ol>
	<li><a href="http://www.slideshare.net/madrobby/extreme-javascript-performance">Extreme Javascript Perfomance (Thomas Fuchs)</a></li>
	<li><a href="http://javascriptrocks.com/performance/">JsRocks</a></li>
</ol><h3>Artículos relacionados</h3>
<ul><li><a href="http://www.anieto2k.com/2008/12/17/25-juegos-en-javascript-que-son-interesantes-conocer/" rel="bookmark" title="Permanent Link: 25 juegos en javascript que son interesantes conocer">25 juegos en javascript que son interesantes conocer</a></li><li><a href="http://www.anieto2k.com/2006/06/13/pruebas-de-rendimiento-de-js-en-navegadores/" rel="bookmark" title="Permanent Link: Pruebas de rendimiento de JS en navegadores">Pruebas de rendimiento de JS en navegadores</a></li><li><a href="http://www.anieto2k.com/2007/03/02/canvas-3d-%c2%bfel-futuro-del-javascript/" rel="bookmark" title="Permanent Link: Canvas 3D, ¿el futuro del javascript?">Canvas 3D, ¿el futuro del javascript?</a></li><li><a href="http://www.anieto2k.com/2007/07/03/3d-tomb-ii-un-fps-en-javascript-de-solo-4003bytes/" rel="bookmark" title="Permanent Link: 3D Tomb II, un FPS en Javascript de solo 4003bytes">3D Tomb II, un FPS en Javascript de solo 4003bytes</a></li><li><a href="http://www.anieto2k.com/2006/06/14/prueba-el-rendimiento-de-tu-servidor/" rel="bookmark" title="Permanent Link: Prueba el rendimiento de tu Servidor">Prueba el rendimiento de tu Servidor</a></li></ul><p><a href="http://www.anieto2k.com" id="38.107.179.236"><img rel="38.107.179.236" src="http://www.anieto2k.com/favicon.ico" alt="aNieto2k" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.anieto2k.com/2009/11/10/rendimiento-extremo-de-javascript/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

