<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Tema: How to | Sentido Web</title>
<link>http://sentidoweb.com/</link>
<description>Actualidad y maneras de hacer en Internet (programación, diseño, tendencias, negocios...)</description>
<language>es</language>
<copyright>Copyright 2008</copyright>
<lastBuildDate>Tue, 29 May 2007 16:00:00 +0000</lastBuildDate>
<generator>http://www.movabletype.org/?v=3.2</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 

<item>
<title>W3C: fallos de accesibilidad (II)</title>
<description><![CDATA[<p>Seguimos con los fallos de accesibilidad que se suelen cometer en el desarrollo web, que nos ofrece la W3C y que <a href="http://sentidoweb.com/2007/05/23/w3c-fallos-de-accesibilidad-i.php">empezamos</a> a tratar hace unos días.</p>

<h3>Mostrar imágenes con información importante mediante estilos</h3>
<p>Se trata de usar una imagen que contiene información (por ejemplo para los enlaces del menú) y mostrarla como fondo de un elemento y que no haya un texto que indique el contenido de la imagen.</p>
<p>Una solución es escribir el texto pero no hacerlo visible, para ello usaremos la propiedad <em>text-ident</em>, si le damos un valor negativo elevado el texto desaparecerá por la izquierda. Por ejemplo, tenemos una imagen <em>titulo.png</em> que tiene el título del blog con un diseño especial, lógicamente queremos que se vea así por temas de diseño e imagen. Ahora bien, si solo mostramos la imagen, no somos capaces de leer el contenido de esta. Por ello tendremos que hacer lo siguiente para que el texto aparezca sin que haya estilos y con estilos solo aparezca la imagen:</p>
<pre><code>h1 {
background: url(titulo.png);
width: 200px;
height: 100px;
text-indent: -10000px;
}</code></pre>
<pre><code>&lt;h1&gt;Título&lt;/h1&gt;</code></pre>
<h3>Usar el estilo <em>blink</em> sin el mecanismo para parar el parpadeo</h3>
<p>Esta es corta, no uses jamás <em>text-decoration: blink</em>. Y si por un casual no te queda otra posibilidad que usarlo, crea un script que pare el parpadeo a los 3 segundos.</p>
<h3>Usar un applet o un flash que parpadee sin el mecanismo para pararlos</h3>
<p>Lo mismo que el punto anterior, pero enfocado a applets y a animaciones Flash.</p>
<h3>Usar subtítulos que omiten parte del diálogo o sonidos importantes</h3>
<p>Si vas a ofrecer un sonido, una conversación y no muestras los subtítulos con todo el contenido (conversación y sonidos destacados), no se trata de un buen subtítulo y puede haber información importante que se escape.</p>
<h3>Más información</h3>
<ul><li class="related"><a href="http://www.w3.org/TR/2007/WD-WCAG20-TECHS-20070517/Overview.html#F3">F3: Failure of SC 1.1.1 due to using CSS to include images that convey important information</a></li><li class="related"><a href="http://www.w3.org/TR/2007/WD-WCAG20-TECHS-20070517/Overview.html#F4">F4: Failure of SC 2.2.2 due to using text-decoration:blink without a mechanism to stop it in less than three seconds</a></li><li class="related"><a href="http://www.w3.org/TR/2007/WD-WCAG20-TECHS-20070517/Overview.html#F7">F7: Failure of SC 2.2.2 due to an object or applet, such as Java or Flash, that has blinking content without a mechanism to pause the content that blinks for more than three seconds</a></li><li class="related"><a href="http://www.w3.org/TR/2007/WD-WCAG20-TECHS-20070517/Overview.html#F8">F8: Failure of SC 1.2.1 due to captions omitting some dialogue or important sound effects</a></li></ul>]]></description>
<link>http://sentidoweb.com/2007/05/29/w3c-fallos-de-accesibilidad-ii.php</link>
<guid>http://sentidoweb.com/2007/05/29/w3c-fallos-de-accesibilidad-ii.php</guid>
<category>W3C</category>
<pubDate>Tue, 29 May 2007 16:00:00 +0000</pubDate>
</item>
<item>
<title>W3C: fallos de accesibilidad (I)</title>
<description><![CDATA[<p>Hoy vamos a empezar una serie de artículos en los que pretendemos explicar los fallos que se cometen en accesibilidad cuando se realizan aplicaciones web y las técnicas que debemos usar para evitar estos fallos. Para ello nos basamos en lo que especifica la W3C en su <a href="http://www.w3.org/TR/2007/WD-WCAG20-TECHS-20070517/Overview.html">WCAG 2.0</a> (aún en estado borrador).</p>
<h3>Error 1: modificar el significado del contenido debido al posicionamiento mediante CSS</h3>
<p>Se trata de cambiar el significado semántico de una etiqueta, modificando su posicionamiento mediante CSS. Por ejemplo, si queremos crearnos una lista de elementos:</p>
<ul><li style="display: inline; width: 150px; float: left;">Elemento 1<ul><li>Elemento 1.1</li><li>Elemento 1.2</li><li>Elemento 1.3</li></ul></li><li style="display: inline; width: 150px; float: left;">Elemento 2<ul><li>Elemento 2.1</li><li>Elemento 2.2</li></ul></li></ul>
<br style="clear: both" />
<p>El fallo consiste en usar etiquetas no destinadas a ese sentido, cambiarle los estilos y representarlas como queremos. Por ejemplo podemos usar <em>span</em> para representar cada elemento y disponerlos en la posición que nos conviene:</p>
<pre><code>&lt;span class="cab1"&gt;Elemento 1&lt;/span&gt;
&lt;span class="cab2"&gt;Elemento 2&lt;/span&gt;
&lt;span class="ele1"&gt;Elemento 1.1&lt;/span&gt;
&lt;span class="ele2"&gt;Elemento 2.1&lt;/span&gt;
&lt;span class="ele3"&gt;Elemento 1.2&lt;/span&gt;
&lt;span class="ele4"&gt;Elemento 2.3&lt;/span&gt;</code></pre>
<p>Y con los estilos siguientes:</p>
<pre><code>.cab1 {
    position: absolute;
    top: 0px;
    left: 0px;
  }
  .cab2 {
    position: absolute;
    top: 0px;
    left: 200px;
  }
  .ele1 {
    position: absolute;
    top: 20px;
    left: 0px;
  }
  .ele2 {
    position: absolute;
    top: 20px;
    left: 200px;
  }
  .ele3 {
    position: absolute;
    top: 40px;
    left: 0px;
  }
  .ele4 {
    position: absolute;
    top: 40px;
    left: 200px;
  }</code></pre>
<p>obtendríamos el mismo resultado visual, pero si quitaramos los estilos obtendríamos lo siguiente:</p>
<pre>Elemento 1 Elemento 2 Elemento 1.1 Elemento 2.1 Elemento 1.2 Elemento 2.3</pre>
<p>lo cual no tendría mucho sentido.</p>
<h3>Error 2: modificar el aspecto del texto para mostrar algo que ya representa una etiqueta</h3>
<p>Existen varias etiquetas de texto que tiene diferentes funcionalidades, pero aún así es típico encontrarse textos con sus estilos modificados para mostrar el resultado de una etiqueta ya existente. Un ejemplo muy común es este:</p>
<pre>&lt;span class="negrita"&gt;Título&lt;/span&gt;</pre>
<pre>.negrita {
font-weight: bold;
}</pre>
<p>Lo correcto sería usar la etiqueta <em>strong</em>.</p>
<h3>Más información</h3>
<ul><li class="related"><a href="http://www.w3.org/TR/2007/WD-WCAG20-TECHS-20070517/Overview.html#F1">F1: Failure of SC 1.3.2 due to changing the meaning of content by positioning information with CSS</a></li><li class="related"><a href="http://www.w3.org/TR/2007/WD-WCAG20-TECHS-20070517/Overview.html#F2">F2: Failure of SC 1.3.1 due to using CSS to create variations in presentation of text that conveys information without also using the appropriate markup or text</a></li></ul>]]></description>
<link>http://sentidoweb.com/2007/05/23/w3c-fallos-de-accesibilidad-i.php</link>
<guid>http://sentidoweb.com/2007/05/23/w3c-fallos-de-accesibilidad-i.php</guid>
<category>Accesibilidad</category>
<pubDate>Wed, 23 May 2007 16:00:00 +0000</pubDate>
</item>
<item>
<title>10 consejos para mejorar tus queries MySQL</title>
<description><![CDATA[<p>10 interesantes consejos a seguir para mejorar nuestras sentencias en MySQL, algunas de ellas para poder optimizar las ya creadas.</p>
<ul><li><strong>Usa el comando <em>explain</em></strong>: el comando <em>explain</em> te puede ayudar a identificar los índices que se usan y además te proporciona más información útil.</li>
<li><strong>Usa permisos menos complejos</strong>: usar permisos más sencillos evita que se comprueben muchas condiciones en cada ejecución de una sentencia.</li>
<li><strong>Comando <em>benchmark</em></strong>: este comando nos permite saber cuánto tiempo tarda en ejecutarse una expresión.</li>
<li><strong>Optimiza tus cláusulas</strong>: ya sea quitando paréntesis innecesarios, usando <em>count(*)</em> sin condiciones en el <em>where</em> ya que tira de tablas internas de MyQSL o usando la opción <em>SQL_SMALL_RESULT</em> para usar tablas temporales en memoria.</li>
<li><strong>Ejecuta <em>optimize table</em></strong>: defragmenta una tabla después de varios borrados, el acceso a disco es algo importante a tener en cuenta.</li>
<li><strong>Evita campos de longitud variable</strong>: en tablas de frecuente actualización evita campos como <em>VARCHAR</em>, <em>BLOB</em> o <em>TEXT</em>.</li>
<li><strong>Usa <em>insert delayed</em></strong>: solo cuando sea no importe cuando se inserten los datos.</li>
<li><strong>Prioridades en las sentencias</strong>: usa <em>INSERT LOW_PRIORITY</em> para darle a las consultas mayor prioridad, o usa <em>SELECT HIGH_PRIORITY</em> para ejecutar una consulta aunque haya otros clientes esperando.</li>
<li><strong>Haz múltiples inserciones en una única sentencia:</strong> en vez de varias sentencias de una única inserción.</li>
<li><strong>Sincroniza tipos de datos</strong>: mismos datos en tablas diferentes deben ser del mismo tipo de datos.</li></ul>
<p>Yo siempre he tenido una duda, que no he resuelto por pereza, sobre el caso de ejecutar <em>count(*)</em> o <em>count(1)</em>. La leyenda urbana dice que es mejor <em>count(1)</em>, ya que de la otra forma obtienes que enviar todas las columnas, al igual que haces en un <em>select *</em>. Un consultor en Oracle nos dijo que era falsa esa afirmación porque tardaba lo mismo, yo creo que también, entre otras cosas porque seguro que ese punto está optimizado, pero claro, que sea consultor o que sea de Oracle no quiere decir nada, y menos aún si hablamos de otras bases de datos.</p>
<p><a href="http://www.whenpenguinsattack.com/2007/04/09/10-tips-for-optimizing-mysql-queries/">10 tips for optimizing mysql queries</a></p>
<p>Vía / <a href="http://alexsancho.name">Alex Sancho</a></p>
]]></description>
<link>http://sentidoweb.com/2007/04/11/10-consejos-para-mejorar-tus-queries-mysql.php</link>
<guid>http://sentidoweb.com/2007/04/11/10-consejos-para-mejorar-tus-queries-mysql.php</guid>
<category>How to</category>
<pubDate>Wed, 11 Apr 2007 10:45:00 +0000</pubDate>
</item>
<item>
<title>Consejos para configuraciones SSH</title>
<description><![CDATA[<p>Aunque yo, la verdad, he tratado las conexiones <a href="http://es.wikipedia.org/wiki/SSH">SSH</a> de resfilón, nunca está mal conocer algunos trucos para cuando tengamos que configurar nuestras conexiones SSH.</p>
<ul><li><strong>Cambia el puerto</strong>: por defecto el puerto de escucha es el 22, cámbialo para que dificultar los ataques, sobre todo si es mayor a 1024, ya que la mayoría de los scanners no admite valores tan altos.</li>
<li><strong>Admite solo el protocolo 2</strong>: SSH admite dos protocolos, permite tan solo el 2 ya que es más seguro.</li>
<li><strong>Permite solo usuarios específicos</strong>: no admitas al usuario <em>root</em> ya que es aumentar los riegos de ataque.</li>
<li><strong>Especifica tu propio aviso</strong>: si quieres que cualquier usuario pueda ver un aviso de acceso denegado crea tu propio fichero de texto que muestre el mensaje. Este punto no lo comprendo muy bien, está claro que me tengo que meter más a fondo con el SSH.</li>
<li><strong>Usa clave pública DSA</strong>: puedes usar para la autenticación claves públicas DSA en vez de usuario y contraseña.</li>
<li><strong>Usa TCP wrappers</strong>: permitiendo así conectarse solo a ciertos hosts.</li>
<li><strong>Usa iptables para permitir acceso a hosts</strong>: como alternativa a los TCP wrappers.</li>
<li><strong>Limita el acceso a periodos de tiempo</strong></li></ul>
<p><a href="http://enterprise.linux.com/enterprise/07/03/26/1423232.shtml?tid=129&tid=100&tid=35">Advanced SSH security tips and tricks</a></p>
<p>Vía / <a href="http://www.dzone.com/rsslinks/advanced_ssh_security_tips_and_tricks.html">dzone</a></p>]]></description>
<link>http://sentidoweb.com/2007/04/03/consejos-para-configuraciones-ssh.php</link>
<guid>http://sentidoweb.com/2007/04/03/consejos-para-configuraciones-ssh.php</guid>
<category>How to</category>
<pubDate>Tue, 03 Apr 2007 16:00:00 +0000</pubDate>
</item>
<item>
<title>FireMarker: cómo crear una extensión para Firefox</title>
<description><![CDATA[<p><img alt="firemarker.png" src="http://sentidoweb.com/img/2007/02/firemarker.png" class="right" height="48" width="150" />Si el otro día os hablaba de <a href="http://sentidoweb.com/2007/02/26/firemarker-marca-los-textos-mediante-firefox.php">FireMarker</a>, la extensión de Firefox para marcar texto en una página, hoy voy a intentar explicar cómo la desarrollé y así conseguir que otras personas no se encuentren con las mismas dificultades que yo.</p>
<p>Vamos a ir paso a paso, explicando la estructura, los distintos ficheros y sus contenidos, siempre dentro de mi limitado conocimiento, ya que lo que he aprendido ha sido destripando otras extensiones y mirando la documentación que hay sobre XUL.</p>
]]></description>
<link>http://sentidoweb.com/2007/03/02/firemarker-como-crear-una-extension-para-firefox.php</link>
<guid>http://sentidoweb.com/2007/03/02/firemarker-como-crear-una-extension-para-firefox.php</guid>
<category>How to</category>
<pubDate>Fri, 02 Mar 2007 16:25:00 +0000</pubDate>
</item>
<item>
<title>Cómo decir a Google que vuelva por nuestra página más tarde</title>
<description><![CDATA[<p>Cuando tenemos nuestra página en mantenimiento y el motor de Google (Googlebot) u otro motor de búsqueda, se pasa por nuestra página para indexarla, no es correcto que obtenga una página no encontrada (404) o un error del servidor (500).</p>

<p>Según dicen en <a href="http://googlewebmastercentral.blogspot.com/2006/08/all-about-googlebot.html">Google Webmaster Central</a> lo correcto es <strong>mandar un código de red no disponible (503)</strong>, pero el autor de este post recomienda también <strong>enviar un Retry-After</strong> para que vuelva a pasarse más tarde. También recomienda que a los motores de búsqueda se les envie a una página 503 y a los visitantes (menos a él) a una página 404 (página no encontrada).</p>

<p><a href="http://www.askapache.com/2007/htaccess/instruct-search-engines-to-come-back-to-site-after-you-finish-working-on-it.html">Instruct Search Engines to come back to site after you finish working on it</a></p>]]></description>
<link>http://sentidoweb.com/2007/02/28/como-decir-a-google-que-vuelva-por-nuestra-pagina-mas-tarde.php</link>
<guid>http://sentidoweb.com/2007/02/28/como-decir-a-google-que-vuelva-por-nuestra-pagina-mas-tarde.php</guid>
<category>Apache</category>
<pubDate>Wed, 28 Feb 2007 16:11:00 +0000</pubDate>
</item>
<item>
<title>Instala cualquier cosa en Ubuntu</title>
<description><![CDATA[<p><img alt="ubuntu.png" src="http://sentidoweb.com/img/2007/01/ubuntu.png" width="81" height="72" class="right"/>Para los que no somos usuarios habituales de Linux, en este caso de Ubuntu, la siguiente guía nos puede ser de mucha utilidad para saber cómo instalar aplicaciones en esta distribución.</p>

<p>Parece más enfocada a aquellos que van a pasar de Windows a Ubuntu, por lo que gracias a sus pantallazos y animaciones (¡dios mio, son GIFs animados) nos explica paso a paso lo necesario para realizar estas acciones y no perdernos.</p>

<p>Empieza a <strong>explicarnos el package manager</strong> y sobre todo las diferencias con Windows, lo cual es algo muy importante si nuestro caso es el de pasarnos de un sistema a otro. Después se centra en la <strong>instalación mediante Synaptic</strong>, después mediante el terminal y por último manualmente.</p>

<p><a href="http://cutlersoftware.com/ubuntuinstall/">How to install ANYTHING in Ubuntu</a></p>

<p>Vía / <a href="http://digg.com/linux_unix/How_to_install_ANYTHING_in_Ubuntu_3">Digg</a></p>]]></description>
<link>http://sentidoweb.com/2007/01/24/instala-cualquier-cosa-en-ubuntu.php</link>
<guid>http://sentidoweb.com/2007/01/24/instala-cualquier-cosa-en-ubuntu.php</guid>
<category>How to</category>
<pubDate>Wed, 24 Jan 2007 11:30:00 +0000</pubDate>
</item>
<item>
<title>Convirtiendo XML a JSON con PHP5 DOM y XSL</title>
<description><![CDATA[<p><abbr title="JavaScript Object Notation">JSON</abbr> es un formato de datos de intercambio de Javascript que el auge de <abbr title="Asynchronous JavaScript And XML">AJAX</abbr> ha hecho muy popular. En javascript es mucho más cómodo trabajar con JSON frente a XML ya que podemos analizarlo rápidamente utilizando <code>eval()<code>. </p>

<p>Cuando queremos trabajar con API´s como las de <a href="http://www.amazon.com/E-Commerce-Service-AWS-home-page/b/ref=sc_fe_l_2/104-9139505-4630348?ie=UTF8&amp;node=12738641&amp;no=3435361&amp;me=A36L942TSJ2AJA">Amazon</a>, <a href="http;://www.technorati.com/developers/api">Technorati</a>, <a href="http://del.icio.us/help/api">del.icio.us</a> o <a href="http://www.flickr.com/services/api/">Ficrk</a> v&iacute;a REST nos encontramos con que todas ellas devuelven los datos en XML. Gracias a <a href="http://www.php.net">PHP5</a> y utilizando sus extensiones DOM y XSL podemos transformar un documento XML en JSON de forma muy sencilla.

<h3>Veamos un ejemplo de cómo hacer esto con una consulta a la API de Technorati:</h3>

<p>En primer lugar vamos a componer la URL con la que haremos nuestra consulta: 

<pre><code>
$technoratiApiKey = "introduceTuAPIdeTechnorati";
$url = "http://api.technorati.com/tag";
$tag = "usabilidad";
$request=$url."?key=".$technoratiApiKey."&tag=".urlencode($tag);
</code></pre>
<p>Y ahora creamos un nuevo objeto DOM y cargamos nuestro el fichero XML que nos devuelve la consulta: 

<pre><code>
$inputdom = new DomDocument();
$inputdom->load($request); 
</code></pre>

<p>Para transformar los datos utilizaremos un xml2json.xsl, un fichero XSLT que tiene las instrucciones para transformar XML en JSON. Lo cargamos en un nuevo objeto DOM: 

<pre><code>
$xslt = "xml2json.xsl";
$xsl = new DomDocument();
$xsl->load($xslt);
</code></pre>

<p>¿Qué nos falta? pues: crear un procesador de XSLT en PHP, cargar nuestra xslt, realizar la transformación y generar el documento:

<pre><code>
$proc = new XsltProcessor();
$xsl = $proc->importStylesheet($xsl);
$newdom = $proc->transformToDoc($inputdom);

print $newdom->saveHTML();
</code></pre>
<p>Próximamente veremos cómo utilizar esta técnica para procesar información de diversas API´s REST mediante AJAX. ]]></description>
<link>http://sentidoweb.com/2007/01/17/convirtiendo-xml-a-json-con-php5-dom-y-xsl.php</link>
<guid>http://sentidoweb.com/2007/01/17/convirtiendo-xml-a-json-con-php5-dom-y-xsl.php</guid>
<category></category>
<pubDate>Wed, 17 Jan 2007 18:22:07 +0000</pubDate>
</item>
<item>
<title>Cómo destacar en el menú de navegación el acceso en que nos encontramos</title>
<description><![CDATA[<p>Imaginemos que tenemos un menú de navegación y queremos diferenciar la opción de Home, el About, el Contacto... ya que en esos momentos estamos en uno de ellos. </p>

<p>¿Cómo hacerlo? En <a href="http://babblative.com/article/current-navigation">Babblative</a> nos enlazan algunos métodos para hacerlo:</p>

<blockquote>
<p><strong>Method 1 – Wordpress:</strong> Wordpress actually has this feature built-in. <a href="http://codex.wordpress.org/Template_Tags/wp_list_pages">WP-List-Pages</a></p>

<p><strong>Method 2 – PHP:</strong> <a href="http://jemjabella.co.uk/post.php?title=20060426_trendy_active_css_tabs">Jem&#8217;s Trendy Active <acronym title="Cascading Style Sheets">CSS</acronym> Tabs</a> or <a href="http://photomatt.net/scripts/intellimenu/">Matt&#8217;s Intelligent Menu&#8217;s</a>. I&#8217;ve personally had middling success with <acronym title="Hypertext PreProcessing">PHP</acronym> on a manually maintained site and little success with it on Textpattern.</p>

<p><strong>Method 3 – Textpattern:</strong> You can either muck around with multiple templates, which is bloated and unnecessary, or you can use <a href="http://sonspring.com/journal/txp-current-navigation">this method</a>. If you choose to use the multiple templates then you&#8217;ll need to read <a href="http://textpattern.com/faq/23/how-do-i-use-a-different-page-layout-for-each-section">how do I use a different page layout for each section</a>? </p>

<p><strong>Method 4 – Manually Maintained Sites:</strong> Use <a href="http://www.hicksdesign.co.uk/">Hicksdesigns</a> method to <a href="http://www.hicksdesign.co.uk/journal/highlighting-current-page-with-css">highlighting current page with <acronym title="Cascading Style Sheets">CSS</acronym></a></p>

<p>Keep Reading: <a href="http://archivist.incutio.com/viewlist/css-discuss/42076">Keeping a &#8216;current state&#8217; on navigation</a>, <a href="http://www.dassnagar.net/website_design_articles/navigation_with_PHP.htm">Keeping Navigation Current With <acronym title="Hypertext PreProcessing">PHP</acronym></a>, <a href="http://www.onlinetools.org/tools/easynav/">EasyNav</a>, <a href="http://www.456bereastreet.com/archive/200503/setting_the_current_menu_state_with_css/">Setting the Current Menu State with <acronym title="Cascading Style Sheets">CSS</acronym></a></p></blockquote>

<p>Vía / <a href="http://babblative.com/article/current-navigation">Babblative</a></p>]]></description>
<link>http://sentidoweb.com/2006/12/19/como-destacar-en-el-menu-de-navegacion-el-acceso-en-que-nos-encontramos.php</link>
<guid>http://sentidoweb.com/2006/12/19/como-destacar-en-el-menu-de-navegacion-el-acceso-en-que-nos-encontramos.php</guid>
<category>Desarrollo web</category>
<pubDate>Tue, 19 Dec 2006 17:00:00 +0000</pubDate>
</item>
<item>
<title>Incluye tus vídeos en tu web</title>
<description><![CDATA[<p>si ya hace tiempo explicábamos <a href="http://sentidoweb.com/2006/09/15/incluye-tu-propio-youtube-en-tu-blog.php">cómo subir un vídeo en formato FLV a tu web</a> y verlo mediante un visor incluido en la página web, ahora se trata de un artículo donde explican cómo hacer, de forma muy detallada, para casi todos los formatos de vídeo más comerciales, mostrar el vídeo en formato Flash (FLV).</p>

<p>En este caso se centran en los formatos de QuickTime, Windows Media y Abode Flash (aunque usando herramientas comerciales y no opensource como indicamos en el artículo anterior). Primero nos indican que debemos obtener la información del vídeo, luego codificarla y por último mostrarla.</p>

<p>Yo me sigo quedando con la alternativa opensource, pero es indiscutible que la explicación que nos ofrecen es de lo más completa.</p>

<p><a href="http://www.digital-web.com/articles/the_rise_of_flash_video_part_3/">The Rise of Flash Video, Part 3: Tackle your own project with this step-by-step primer</a></p>]]></description>
<link>http://sentidoweb.com/2006/11/29/incluye-tus-videos-en-tu-web.php</link>
<guid>http://sentidoweb.com/2006/11/29/incluye-tus-videos-en-tu-web.php</guid>
<category>Flash</category>
<pubDate>Wed, 29 Nov 2006 16:10:00 +0000</pubDate>
</item>
<item>
<title>Escribir en ficheros mediante XUL</title>
<description><![CDATA[<p>Leyendo la entrada de <a href="http://www.anieto2k.com/2006/11/28/6-formas-de-generar-logs-de-javascript/">aNieto2K sobre logs en Javascript</a>, me he acordado de que hace tiempo que quiero comentar cómo escribir en ficheros mediante XUL en extensiones para Firefox.</p>
<p>Aunque la principal función puede ser la escritura de opciones o ficheros de configuración o guardar datos, el motivo por el que yo lo busqué era para hacerme unos logs que me faciliten el trabajo del desarrollo de una extensión para Firefox (de aquí la asociación con el post de aNieto2K).</p>
<pre><code>var savefile = "c:\\displaynotes.log.txt";
try {
  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
  alert("Permission to save file was denied.");
}
var file = Components.classes["@mozilla.org/file/local;1"]
    .createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( savefile );
if ( file.exists() == false ) {
  alert( "Creating file... " );
  file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
}
var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
    .createInstance( Components.interfaces.nsIFileOutputStream );
// Suponemos que existe una variable con el texto llamada content
outputStream.init( file, 0x04 | 0x10, 420, 0 );
var result = outputStream.write( content, content.length );
outputStream.close();</code></pre>
<p>En el <em>init</em> del <em>outputStream</em> nos encontramos con una serie de flags para abrir el fichero que se usan como máscara. Estos flags tienen los siguientes posibles valores:</p>
<pre>RDONLY         0x01
PR_WRONLY      0x02
PR_RDWR        0x04
PR_CREATE_FILE 0x08
PR_APPEND      0x10
PR_TRUNCATE    0x20
PR_SYNC        0x40
PR_EXCL        0x80</pre>
<p>A parte, existe un parámetro para indicar el <em>modo</em> del fichero, válido únicamente para entornos Unix:</p>
<pre>00400   Read by owner.
00200   Write by owner.
00100   Execute (search if a directory) by owner.
00040   Read by group.
00020   Write by group.
00010   Execute by group.
00004   Read by others.
00002   Write by others
00001   Execute by others.</pre>
<p>No recuerdo de dónde saqué esta información, por lo que no os puedo poner la referencia.</p>

]]></description>
<link>http://sentidoweb.com/2006/11/28/escribir-en-ficheros-mediante-xul.php</link>
<guid>http://sentidoweb.com/2006/11/28/escribir-en-ficheros-mediante-xul.php</guid>
<category>How to</category>
<pubDate>Tue, 28 Nov 2006 09:40:00 +0000</pubDate>
</item>
<item>
<title>Laboratorio: cómo hacer un plugin para WordPress</title>
<description><![CDATA[<p><img alt="Post2PDF" src="http://sentidoweb.com/img/2006/10/post2pdf.png" class="right" height="127" width="112"/>Algo que nos gusta hacer en <strong>Sentido Web</strong> es explicar cómo se hacen las cosas, no solo mostrar scripts que encontramos o que inventamos, para así que quienes estén interesados, puedan aprender cómo hacerlo ellos mismos.</p>
<p>El otro día sacamos a la luz el plugin para WordPress <a href="http://sentidoweb.com/2006/10/27/post2pdf-plugin-de-wordpress-para-exportar-a-pdf.php">Post2PDF</a> y hoy vamos a explicar que es lo que hicimos para desarrollarlo.</p>
<p><strong>El plugin consta de dos archivos principales</strong> (a parte de los de la librería), el plugin en sí y un script que es llamado por el plugin que es el que se encarga de la exportación a formato PDF.</p>
]]></description>
<link>http://sentidoweb.com/2006/10/30/laboratorio-como-hacer-un-plugin-para-wordpress.php</link>
<guid>http://sentidoweb.com/2006/10/30/laboratorio-como-hacer-un-plugin-para-wordpress.php</guid>
<category>WordPress</category>
<pubDate>Mon, 30 Oct 2006 13:00:00 +0000</pubDate>
</item>
<item>
<title>Laboratorio: borrar filas de una tabla en HTML y en la BD</title>
<description><![CDATA[<p>Ayer contábamos como <a href="http://sentidoweb.com/2006/09/19/laboratorio-borrar-filas-de-una-tabla-en-javascript.php">borrar una fila de una tabla en HTML</a>, y en los comentarios, <a href="http://sentidoweb.com/2006/09/19/laboratorio-borrar-filas-de-una-tabla-en-javascript.php#comentario_799">Escael</a> nos preguntaba cómo se podría hacer para que también se borrara de la base de datos.</p>
<p>Pues siguiendo con el modo en que se hace en la administración de Wordpress, primero haremos el difuminado del color actual de la fila al color rojo y mientras se realiza el borrado en la tabla de la base de datos, haremos que parpadee el color de la fila. Cuando se haya realizado el borrado en la tabla de la base de datos, se eleminará la fila de la tabla HTML y se mostrará un mensaje de aviso de que se ha borrado de la BD.</p>
]]></description>
<link>http://sentidoweb.com/2006/09/20/laboratorio-borrar-filas-de-una-tabla-en-html-y-en-la-bd.php</link>
<guid>http://sentidoweb.com/2006/09/20/laboratorio-borrar-filas-de-una-tabla-en-html-y-en-la-bd.php</guid>
<category>Laboratorio</category>
<pubDate>Wed, 20 Sep 2006 08:45:44 +0000</pubDate>
</item>
<item>
<title>Incluye tu propio YouTube en tu blog</title>
<description><![CDATA[<p>Aunque es cierto que los servicios como YouTube son muy buenos y nos quitan muchas complicaciones, también es cierto que si quieres colgar un video en tu blog, queda más serio que sea mediante tu propio servicio que usando YouTube.</p>
<p>En este caso vamos a usar una aplicación llamada <a href="http://flowplayer.sourceforge.net">FlowPlayer</a>, que simula el streaming, ya que permite mostrar los vídeos (FLV o SWF) mientras se están cargando, por lo que no es necesario un servidor de streaming.</p>
<p>Su uso es sencillo, tan solo tendremos que incluir un fichero SWF que contiene el reproductor de vídeos en nuestra página, e indicarle la ruta del vídeo. Será también necesario pasarle al swf un parámetro para indicarle el archivo js que contiene la configuración del reproductor.</p>
<pre><code>&lt;object type="application/x-shockwave-flash" data="FlowPlayer.swf" width="450" height="430" id="FlowPlayer"&gt;
	&lt;param name="allowScriptAccess" value="sameDomain" /&gt;
	&lt;param name="movie" value="FlowPlayer.swf" /&gt;
	&lt;param name="quality" value="high" /&gt;
	&lt;param name="scale" value="noScale" /&gt;
	&lt;param name="wmode" value="transparent" /&gt;
	&lt;param name="flashvars" value="configFileName=<em>flowPlayer.js</em>" /&gt;
&lt;/object&gt;</code></pre>
<p>En el archivo js, a parte de muchas otras cosas, podremos indicar cuales son los archivos que queremos reproducir, permitiendo que sea una lista y no un único archivo.</p>
<pre><code>playList: [
  { name: 'Uno', url: 'uno.flv' },
  { name: 'Dos', url: 'dos.flv' }
]</code></pre>
<p>El siguiente problema con el que os podéis encontrar es el de saber cómo crear ficheros FLV. Para ello nada más fácil que bajarnos la aplicación <a href="http://rivavx.de/index.php?encoder&L=3">Riva FLV Encoder</a> (hay una versión gratuita) y usarlo para convertir nuestro video (mpeg) en FLV.</p>
<p>De todas formas, si tenéis alguna duda, podéis consultar la siguiente página: <a href="http://www.boutell.com/newfaq/creating/video.html">WWW FAQs: How do I add video to my web site?</a> en el que se detalla más el proceso necesario.</p>]]></description>
<link>http://sentidoweb.com/2006/09/15/incluye-tu-propio-youtube-en-tu-blog.php</link>
<guid>http://sentidoweb.com/2006/09/15/incluye-tu-propio-youtube-en-tu-blog.php</guid>
<category>How to</category>
<pubDate>Fri, 15 Sep 2006 16:00:00 +0000</pubDate>
</item>
<item>
<title>Detectar cambio de tamaño de letra en Javascript</title>
<description><![CDATA[<p>La verdad es que lo sencillo es lo mejor, y para cuando estés en la necesidad de detectar si se produce un cambio en el tamaño de la letra, nada mejor que el script que nos ofrece la gente de <a href="http://www.alistapart.com">A List Apart</a>.</p>

<p>Te puedes preguntar por qué vas a querer detectar el cambio de tipo de letra. Si te interesa tener un sitio accesible a gente con discapacidades, pues es buena idea que pienses en ello, ya que suele ser algo que pueden hacer con frecuencia.</p>

<p>Además de detectar ese cambio, puede ser necesario realizar alguna acción. Por ejemplo, si usamos una imagen para un botón, si cambiamos el tamaño de la letra, la imagen no cambia, por lo que el botón quedará demasiado pequeño para el resto del texto, ¿solución?, si hay cambio de tamaño de letra, sustituimos la imagen por un elemento <em>input</em> botón.</p>

<p>Al principio decía que la solución es sencilla, lo cual la hace aún mejor. Se trata de crear una capa que contenga un espacio dentro y que esté oculta. Se guarda el tamaño de la capa y cada cierto tiempo se detecta si ha habido un cambio en este tamaño, si es así, se ha producido un cambio en el tamaño de la letra.</p>

<p><a href="http://www.alistapart.com/articles/fontresizing">Text-Resize Detection</a><br />
<a href="http://www.alistapart.com/d/fontresizing/fontResizeSwitchDemo.html">Demo</a><br />
<a href="http://www.alistapart.com/d/fontresizing/textresizedetector.zip">Código y ejemplos</a></p>]]></description>
<link>http://sentidoweb.com/2006/09/12/detectar-cambio-de-tamano-de-letra-en-javascript.php</link>
<guid>http://sentidoweb.com/2006/09/12/detectar-cambio-de-tamano-de-letra-en-javascript.php</guid>
<category>How to</category>
<pubDate>Tue, 12 Sep 2006 09:09:38 +0000</pubDate>
</item>


</channel>
</rss>