<?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>Boozox &#187; Web</title>
	<atom:link href="http://boozox.net/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://boozox.net</link>
	<description>Blog de informática, programación, software libre, linux, y mucho más</description>
	<lastBuildDate>Fri, 16 Mar 2012 20:28:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Ó cómo escuchar los deseos de la comunidad</title>
		<link>http://boozox.net/software-libre/o-como-escuchar-los-deseos-de-la-comunidad/</link>
		<comments>http://boozox.net/software-libre/o-como-escuchar-los-deseos-de-la-comunidad/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 18:47:00 +0000</pubDate>
		<dc:creator>José Cabo</dc:creator>
				<category><![CDATA[Canonical]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Opinión]]></category>
		<category><![CDATA[Review]]></category>
		<category><![CDATA[Software libre]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://boozox.net/?p=340</guid>
		<description><![CDATA[Después de tantos meses sin publicar nada qué mejor que recordar, aunque sea un poco, el sabor de la libertad. Que puedes ser escuchado. Que tus ideas puedes ser oídas. En definitiva, participar de verdad en como te gustaría que fuera lo que usas. Canonical nos ofrece un nuevo servicio a disposición de la comunidad [...]]]></description>
			<content:encoded><![CDATA[<p>Después de tantos meses sin publicar nada qué mejor que recordar, aunque sea un poco, el sabor de la <em>libertad</em>. Que puedes ser escuchado. <strong>Que tus ideas puedes ser oídas</strong>. En definitiva, participar de verdad en como te gustaría que fuera lo que usas.</p>
<p><img src="http://boozox.net/wp-content/screenshot4.png" alt="" title="screenshot4" style="float:left;" /><a href="http://www.canonical.com/">Canonical</a> nos ofrece un nuevo servicio a disposición de la comunidad de <a href="http://www.ubuntu.com/products/whatisubuntu">Ubuntu</a> y derivados. La prueba definitiva del poder de decisión de la gente <em>normal</em>: de tú y de mi. Hablo de <strong>Ubuntu Brainstorm</strong>.</p>
<p><a href="http://brainstorm.ubuntu.com/">Ubuntu Brainstorm</a> fue dado a conocer por Canonical a principios de Marzo. Una versión bastante simple si la comparamos con la actual. Este servicio de Canonical intenta <strong>acercar todavía más el Software Libre a la comunidad dándoles la posibilidad de exponer sus ideas y ser votadas</strong>, juzgadas y, si son viables, llevarlas a cabo.</p>
<p>El servicio, que está basado en <a href="http://www.ideastorm.com/">Ideastorm</a> de DELL, ha conseguido una mejora brutal en pocos meses. De vez en cuando se puede ver todavía <a href="http://brainstorm.ubuntu.com/category/11">alguna nueva idea</a> en portada para mejorar la propia web. Gracias a esto, en sus inicios ayudó a evolucionar de forma exponencial el desarrollo de Brainstorm y convertirlo en lo que es hoy en día.</p>
<p>Brainstorm nos ofrece la posibilidad de registrarnos <strong>de forma gratuita y rápida</strong>. Nuestras ideas serán votadas y revisadas por <em>personas normales</em> y desarrolladores. Estos segundos pueden incluso poner anotaciones sobre la viabilidad y comentarios técnicos de la misma. Si la idea resulta lo suficiente interesante por la comunidad y desarrolladores se puede enlazar a una entrada de Blueprints del launchpad o incluso con la sección de bugs o UbuntuForums para que pueda ser adaptada a las diferentes plataformas de Canonical (Ubuntu, Kubuntu, las webs de Canonical, etc&#8230;). Al fin y al cabo&#8230; el Software Libre lo hacemos entre todos, ¿no?<img src="http://boozox.net/wp-content/screenshot7.png" alt="" title="screenshot7" style="float:right;" /></p>
<p>Actualmente hay enlaces a las secciones más importantes: &#8220;<em>Ideas más importantes de hoy (actual portada); <a href="http://brainstorm.ubuntu.com/most_popular_this_week/">de esta semana</a>; <a href="http://brainstorm.ubuntu.com/most_popular_this_month/">de este mes</a>; <a href="http://brainstorm.ubuntu.com/most_popular_ever/">desde siempre</a></em>; etc&#8230;&#8221;. Aconsejo revisar de vez en cuando las ideas en portada porque muchas de ellas llegan a ser muy buenas y, por supuesto, votarlas.</p>
<p>Aunque no todo es color de rosa. Hay gente que no acaba de comprender lo que es un brainstorm: Un portal que sirve para enviar ideas y que estas sean votadas. Han habido algunas absurdas que se proclamaban como &#8220;Linux debe parecerse a Windows&#8221; o &#8220;Linux tiene que adoptar el theme de XP&#8221;. Como veréis, no aportan demasiado (por decir algo). En fin. Recordad sin embargo, sin menospreciar ese intento por <em>halludar</em>, antes de enviar vuestra idea <strong>buscad</strong> por las antiguas y evitad de este modo que sea duplicada.</p>
<p><strong>Registraros y enviad vuestras ideas!</strong>, sin vergüenza.</p>
<p><strong><a href="http://brainstorm.ubuntu.com/">Enlace a Ubuntu Brainstorm</a></strong><a href='http://boozox.net/wp-content/screenshot7.png'></a></p>
<p>Este post me ha dado una idea para una próxima entrada. ¿Qué os parecería un pequeño resumen sobre lo que hemos conseguido &#8220;gracias&#8221; a Canonical (lo que nos ofrece, sus servicios, portales, labs, etc&#8230;)?</p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/software-libre/o-como-escuchar-los-deseos-de-la-comunidad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nvivo es música en directo a tu servicio</title>
		<link>http://boozox.net/web/nvivo-es-musica-en-directo-a-tu-servicio/</link>
		<comments>http://boozox.net/web/nvivo-es-musica-en-directo-a-tu-servicio/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 18:10:06 +0000</pubDate>
		<dc:creator>Alex Barros</dc:creator>
				<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Entretenimiento]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Música]]></category>
		<category><![CDATA[Novedades]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[conciertos]]></category>
		<category><![CDATA[nvivo]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://boozox.net/?p=330</guid>
		<description><![CDATA[Para volver a la carga este verano, me gustaría comenzar presentando esta genial aplicación para todo amante de la música en directo. Nvivo es un portal donde conocer artistas y salas, y donde estar al tanto de todos sus conciertos. Con el lema de &#8220;No vuelvas a perderte un concierto&#8221; ofrece servicios para que estés [...]]]></description>
			<content:encoded><![CDATA[<p>Para volver a la carga este verano, me gustaría comenzar presentando esta genial aplicación para todo amante de la música en directo.</p>
<p><img style="float:right" src='http://boozox.net/wp-content/nvivo.gif' alt='Nvivo Logo' /><strong><a href="http://www.nvivo.es/">Nvivo</a></strong> es un portal donde conocer artistas y salas, y donde estar al tanto de todos sus conciertos. Con el lema de &#8220;<strong>No vuelvas a perderte un concierto</strong>&#8221; ofrece servicios para que estés siempre informado de lo que te interesa.</p>
<p>Además podemos decir que pertenece al territorio 2.0, porque cuenta con una <strong>comunidad abierta</strong>, y permite a los usuarios tomar el <strong>control</strong> de toda la información (bajo supervisión de <a href="http://www.nvivo.es/blog/2008/07/05/nuestros-editores-total13/">13 editores</a>)</p>
<p>Considero que este tipo de iniciativas son muy positivas para lo que los internautas concebimos como el <strong>futuro de la cultura musical</strong>, un futuro lleno de <em>tags</em>, donde encontramos a los <em>artistas</em> que nos gustan y estos conseguen la auténtica visibilidad que merecen, promocionándose y vendiendo su auténtico producto: <strong>la música en directo</strong>.</p>
<p>Os invito a todos y todas a que os <a href="http://www.nvivo.es/">registréis</a> y os dejéis llevar por la magia que esconde Nvivo y su comunidad.</p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/web/nvivo-es-musica-en-directo-a-tu-servicio/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Trucos para hacer diseños en CSS más rápido y mejor</title>
		<link>http://boozox.net/web/trucos-para-hacer-disenos-en-css-mas-rapido-y-mejor/</link>
		<comments>http://boozox.net/web/trucos-para-hacer-disenos-en-css-mas-rapido-y-mejor/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 20:46:56 +0000</pubDate>
		<dc:creator>Alex Barros</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Estándar]]></category>
		<category><![CDATA[HOWTO/CóMO]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://boozox.net/web/trucos-para-hacer-disenos-en-css-mas-rapido-y-mejor/</guid>
		<description><![CDATA[Enfrentarse a crear una plantilla de diseño desde cero puede ser muy duro y desmoralizante. Por eso he reunido una serie de trucos que conviene tener a mano, para agilizar el proceso, y hacerlo algo más agradable. Las tres reglas de oro Lo primero y principal antes de empezar a escribir la plantilla, es definir [...]]]></description>
			<content:encoded><![CDATA[<p>Enfrentarse a crear una plantilla de diseño <strong>desde cero</strong> puede ser muy duro y desmoralizante. Por eso he reunido una serie de trucos que conviene tener a mano, para agilizar el proceso, y hacerlo algo más <strong>agradable</strong>.</p>
<h2>Las tres reglas de oro</h2>
<p>Lo primero y principal antes de empezar a escribir la plantilla, es definir estas tres reglas de oro del CSS. Se colocan al principio del archivo CSS, y sirven para evitar las discrepancias principales entre navegadores. Así nos evitamos más de un susto al comprobar si se ve igual en todos los navegadores.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">* <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; padding<span class="re2">:<span class="nu0">0</span></span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; margin<span class="re2">:<span class="nu0">0</span></span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">body <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">font-size</span>: <span class="re3"><span class="nu0">76</span>%</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">img <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">border-width</span>: <span class="nu0">0</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Lo que hacen es inicializar todos los <strong>márgenes internos y externos a cero</strong> (de TODOS los elementos), prefijar un <strong>tamaño de letra uniforme</strong> para todos los navegadores, y <strong>eliminar el borde</strong> de las imágenes.</p>
<p><a href="http://zumbe.net/tutoriales/las_tres_reglas_basicas.html">Conocer más sobre las tres reglas de oro del CSS</a>.</p>
<p>Suelo añadir esta cuarta regla, que <strong>evita que salga un recuadro</strong> alrrededor de los enlaces al pulsarlos.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">a <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">outline-style</span>: <span class="kw2">none</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>(<a href="http://boozox.net/howtocomo/solucion-a-dos-pesadillas-del-css/">más info</a>)</p>
<h2>Centrar contenedores (elementos div) en CSS</h2>
<p>Para centrar un contenedor en CSS, además de definir un ancho determinado, debemos <strong>asignar el valor auto al margen izquierdo y derecho</strong> del contenedor. Esto no da resultado en Internet Explorer, que requiere de la propiedad <em>text-align: center</em>. Si usamos las dos, nos aseguramos la victoria.<br />
<strong>HTML:</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">[...]&lt;body&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;div id=&quot;contenedor&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;h1&gt;Titulo&lt;/h1&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &lt;p&gt;Texto&#8230;&lt;/p&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/div&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;/body&gt;</div>
</li>
</ol>
</div>
<p><strong>CSS:</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">body <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">text-align</span>: <span class="kw2">center</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">#contenedor</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">text-align</span>: <span class="kw1">left</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">margin</span>: <span class="re3">10px</span> <span class="kw2">auto</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">width</span>: <span class="re3"><span class="nu0">80</span>%</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>(<a href="http://zumbe.net/tutoriales/centrar_contenedores_en_css.html">más info</a>)</p>
<h2>Hacer columnas con CSS</h2>
<p>Para crear varias columnas en un skin, debemos colocar <strong>elementos de bloque</strong> (div, ul, form&#8230;) que las representen, de forma contigua (uno al lado de otro) en nuestro HTML. A continuación, en el CSS usaremos la <strong>propiedad float</strong>, que &#8220;flota&#8221; un elemento a la izquierda o a la derecha, <strong>sacándolo del flujo de contenido</strong>.</p>
<p>Hay varias formas de aprovechar la propiedad float para crear columnas, algunos ejemplos:</p>
<p><img src='http://boozox.net/wp-content/float-left-all.png' alt='Usando propiedad Float de CSS' /> <img src='http://boozox.net/wp-content/float-left-right.png' alt='Usando propiedad Float de CSS' /> <br /><img src='http://boozox.net/wp-content/float-left-left.png' alt='Usando propiedad Float de CSS' /> <img src='http://boozox.net/wp-content/float-left-small.png' alt='Usando propiedad Float de CSS' /></p>
<p>Las flechas indican si se ha flotado a <em>izquierda o a derecha</em>, aúnque resulta bastante obvio.</p>
<p><strong>Ejemplo</strong>, el código CSS para hacer que todos los elementos li de una lista, esté flotados a la izquierda, con un tamaño de 100&#215;100 px:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">li <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">width</span>: <span class="re3">100px</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">height</span>: <span class="re3">100px</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">float</span>: <span class="kw1">left</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h2>Evitar solapamiento en la propiedad Float</h2>
<p>Da definicion en el estándar de CSS, hace que la propiedad float <strong>saque al elemento del flujo</strong>, y provoca que el resto de elementos &#8220;lo ignoren&#8221; en muchos aspectos, como que el elemento que lo contiene no adapta su ancho para incluirlo.</p>
<p style="text-align: center">Lo que quiero: <br /> <img src='http://boozox.net/wp-content/float_lo_q_quiero.gif' alt='Lo que quiero' /><br />Lo que ocurre: <br /><img src='http://boozox.net/wp-content/float_lo_q_obtengo.gif' alt='Lo que ocurre' /></p>
<p>Esto lo podemos solventar muy fácilmente.</p>
<p>Si queremos que un elemento que va a continuación de un float, no se vea afectado, le podemos dar la <strong>propiedad clear: both</strong></p>
<p>Pero si el problema es que tenemos elementos &#8220;flotados&#8221;, y queremos que el contenedor <strong>los envuelva</strong>, nada más fácil que aplicar al contenedor la <strong>propiedad overflow: hidden</strong>. <a href="http://www.planseldon.com/blog/hasta-siempre-clearboth/">La explicación la encontraréis aquí</a></p>
<h2>Todas las propiedades a mano</h2>
<p>Es muy importante tener siempre las propiedades a mano, y sobretodo conocer las <strong>95 propiedades del CSS 2.1</strong> para conocer las herramientas de que disponemos. Podéis encontrar un agradable listado, muy bien explicado (en inglés) en <a href="http://www.culturedcode.com/css/reference.html">CulturedCode CSS 2.1 Reference</a> (<em>es un recurso alucinante, muy muy útil</em>)</p>
<h2>Usar estructuras prefabricadas</h2>
<p>Podremos <strong>ahorrarnos tiempo</strong>, si partimos de estructuras prefabricadas en CSS y HTML.</p>
<ul>
<li><a href="http://blog.html.it/layoutgala/">Layout Gala</a> contiene muchas estructuras combinando tres elementos principales, cabecera y pié de página.</li>
<li><a href="http://csseasy.com/">Css Easy</a> te ofrece las principales configuraciones para skins, listas para descargar y manipular.</li>
<li>En <a href="http://css.maxdesign.com.au/listamatic/">Listmatic</a> encontraréis muchos tipos de lista, para aplicar a menús, o a lo que queráis.</li>
<li>En <a href="http://alvit.de/css-showcase/css-navigation-techniques-showcase.php">CSS Showcase</a> podréis encontrar muchos ejemplos de barras de navegación.</li>
</ul>
<h2>Plantillas ya elaboradas</h2>
<p>Otro recurso es acudir a <strong>skins completamente elaborados</strong>, y extraer lo que nos interese de ellos. Algunos enlaces:<br />
<a href="http://oswd.org">OpenSourceWebDesigns</a>, <a href="http://www.freecsstemplates.org/">FreeCssTemplates</a>, <a href="http://www.free-css-templates.com/">Free-css-templates</a>, <a href="http://www.thestylearchive.com/">TheStyleArchive</a>, <a href="http://www.templateworld.com/free_templates.html">TemplateWorld</a></p>
<p>O recurrir a sitios donde muestran plantillas únicamente para inspirarte:<br />
<a href="http://designshack.co.uk/">Inspirational CSS</a>,  <a href="http://www.cssbeauty.com/">CSSBeauty</a>, <a href="http://www.smashingmagazine.com/2007/05/21/60-elegant-and-visually-appealling-designs/">Elegant Desighns</a></p>
<p>Por último, en <a href="http://del.icio.us/tag/css">del.icio.us (tag: css)</a> podéis encontrar muchos recursos interesantes de CSS, y en <a href="http://webeame.net/index.php?category=4">Webéame (categoria diseño)</a> otros tantos.</p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/web/trucos-para-hacer-disenos-en-css-mas-rapido-y-mejor/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>La evolución: de GStat a genStats</title>
		<link>http://boozox.net/web/la-evolucion-de-gstat-a-genstats/</link>
		<comments>http://boozox.net/web/la-evolucion-de-gstat-a-genstats/#comments</comments>
		<pubDate>Sat, 08 Dec 2007 17:00:32 +0000</pubDate>
		<dc:creator>Alex Barros</dc:creator>
				<category><![CDATA[Aplicaciones]]></category>
		<category><![CDATA[Boozox]]></category>
		<category><![CDATA[genStats]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Novedades]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://boozox.net/web/la-evolucion-de-gstat-a-genstats/</guid>
		<description><![CDATA[Hace ya más de cuatro meses que lancé uno de mis últimos proyectos: recolectar la información de los internautas, para mostrarla públicamente. He de reconocer que no me esperaba la acogida tan grande que tuvo. Ahora mantiene una recogida de datos constante, desde unas 50 webs muy distintas en temáticas, más de 3.000 registros diarios. [...]]]></description>
			<content:encoded><![CDATA[<p>Hace ya más de cuatro meses que lancé uno de mis últimos proyectos: recolectar la información de los internautas, para mostrarla públicamente.</p>
<p>He de reconocer que no me esperaba la <a href="http://zumbe.net/2007/08/02/gstat-toda-la-verdad/">acogida</a> tan grande que tuvo. Ahora mantiene una recogida de datos constante, desde unas 50 webs muy distintas en temáticas, más de 3.000 registros diarios.</p>
<p>GStat fue una de tantas ideas que se me habian ocurrido, y <a href="http://zumbe.net/2007/08/09/esto-va-tomando-forma/">me llevó</a> cerca de una semana su <a href="http://codis.boozox.net/proyecto/GStat">desarrollo</a>. Por supuesto tengo que revisarlo diariamente para corregir cosas, y comprobar que todo marcha bien.</p>
<p>Sin embargo, creo que tiene mucho más potencial, y he reunido fuerzas de nuevo para avanzar significativamente en el desarrollo de GStat. Tanto es así, que este proyecto va a pasar a llamarse <strong>genStats</strong>.</p>
<p>Este nuevo proyecto contará con <strong>muchas gráficas nuevas</strong>, <strong>interactivas</strong> y <strong>personalizables</strong>. Además, la interfaz va a ser mucho más <em>cómoda, atractiva y manejable</em>.</p>
<p>Surgen problemas cuando la base de datos <a href="http://boozox.net/novedades/gstat-supera-el-medio-millon-de-registros/">roza</a> el millón de datos, y quiero trabajar en <em>complicadas estadísticas</em>. Por eso, la optimización es uno de los puntos fuertes en los que estoy trabajando. He pedido consejo a algunos <a href="http://ricardogalli.com/">expertos</a>, y estoy empollando enormes manuales de SQL. Ya he conseguido que gráficas que tardaban más de 10 segundos en ser representadas, <strong>tarden 0.2 segundos</strong>.</p>
<p>A medida que vaya haciendo importantes avances en la materia, iré comentándolos en este blog. Por ahora podéis apreciar el aspecto que van tomando las gráficas:</p>
<p><strong><a href="http://gstat.zumbe.net/graff/reg.php">Registros totales diarios</a></strong><br />
<strong><a href="http://gstat.zumbe.net/graff/desde.php">Las 4 webs que más han aportado</a></strong> (excluyendo microsiervos.com, porque tiene unos números excesivamente grandes&#8230;)<br />
[Añadido] <strong><a href="http://gstat.zumbe.net/graff/desde-prc.php">Porcentaje de participación sobre el total de las 4 webs con más aporte</a></strong> (incluyendo microsiervos.com)</p>
<p>Puede observarse que originalmente se recolectaron TODOS los usuarios, y posteriormente <a href="http://zumbe.net/2007/08/20/gstat-se-resiente/">se limitó</a> la aportación de cada web.</p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/web/la-evolucion-de-gstat-a-genstats/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Cuáles fueron los primeros .com registrados?</title>
		<link>http://boozox.net/web/%c2%bfcuales-fueron-los-primeros-com-registrados/</link>
		<comments>http://boozox.net/web/%c2%bfcuales-fueron-los-primeros-com-registrados/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 16:09:19 +0000</pubDate>
		<dc:creator>José Cabo</dc:creator>
				<category><![CDATA[¡Viejo!]]></category>
		<category><![CDATA[Curioso]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://boozox.net/web/%c2%bfcuales-fueron-los-primeros-com-registrados/</guid>
		<description><![CDATA[¿Nunca te has preguntado que grandes empresas actuales, casi previas a la invención de internet, fueron capaces de tener una mentalidad hacia el futuro pensando en internet? Apple, IBM, INTEL, Sun, HP entre otras sí lo tuvieron y por eso muchos de sus dominios se incluyen entre los 100 primeros dominios registrados (.com) del mundo. [...]]]></description>
			<content:encoded><![CDATA[<p>¿Nunca te has preguntado que grandes empresas actuales, casi previas a la invención de internet, fueron capaces de tener una mentalidad hacia el futuro pensando en internet?</p>
<p>Apple, IBM, INTEL, Sun, HP entre otras sí lo tuvieron y por eso muchos de sus dominios se incluyen entre los 100 primeros dominios registrados (.com) del mundo.</p>
<p>La entidad gestora de los dominios, DNS, fue creada en 1984 y en 1985 ya ofrecía diferentes dominios para ser alquilados. Se destaca entre todo los <strong>COM</strong>, aunque los <strong>ORG, EDU, GOV, MIL y ccTLD</strong> fueron los primeros.</p>
<p><a href="http://www.theinquirer.es/2007/12/04/cuales_fueron_los_primeros_100_dominios_com.html">Como comentan</a> <a href="http://meneame.net/story/cuales-fueron-primeros-100-dominios-com">en todos lados</a>, Microsoft NO está incluida en estos primeros dominios&#8230; con lo que se demuestra que Microsoft, ni si quiera en sus comienzos, tenía visión de futuro. Como dicen en un comentario de The Amariller&#8230;</p>
<blockquote><p>“Pero cómo?, a mi me dijeron q Bill Gates inventó la interné y también la computadora y la informática fácil”<br />
Aunque suene ridículo es lo que la mayoría de la gente piensa. El mito de que Billy hizo grandes avances a la informática es uno de los más extendidos y falsos que existen. Mucho más importante fue el papel de Xerox y Apple, pero alguien se acuerda de ellos? Pocos…</p></blockquote>
<p>Poco más puedo añadir más que decir que &#8220;tiene razón&#8221;. Microsoft NUNCA ha hecho nada por avanzar en la informática, aunque haya parecido que sí. Os parecerá que la ha acercado&#8230; pero no ha hecho otra cosa más que atrasarla, <strong>sobretodo</strong> a nivel económico.</p>
<p>Por cierto, hablando de empresas conocidas que aparezcan&#8230; además de las que ya he comentado más arriba podríamos nombrar a XEROX, ATT, ¿¿STARGATE??,  BOEING,  ADOBE, 3COM, y&#8230; un montón, podéis <a href="http://thelongestlistofthelongeststuffatthelongestdomainnameatlonglast.com/first71.html">ver la lista de los 100 primeros dominios COM registrados del mundo vosotros mismo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/web/%c2%bfcuales-fueron-los-primeros-com-registrados/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>La locura del JavaScript: Eventos de teclado</title>
		<link>http://boozox.net/web/la-locura-del-javascript-eventos-de-teclado/</link>
		<comments>http://boozox.net/web/la-locura-del-javascript-eventos-de-teclado/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 21:10:58 +0000</pubDate>
		<dc:creator>Alex Barros</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://boozox.net/web/la-locura-del-javascript-eventos-de-teclado/</guid>
		<description><![CDATA[Trabajar en JavaScript ha tenido siempre una gran dificultad, y es que se trata de un lenguaje no estándar, interpretado por el cliente. Esto provoca desigualdades en los resultados, dependiendo sobretodo de los distintos navegadores, y sus respectivas versiones. En el caso de los eventos de teclado este desmadre tiene un especial énfasis, y viene [...]]]></description>
			<content:encoded><![CDATA[<p>Trabajar en JavaScript ha tenido siempre una gran dificultad, y es que se trata de un lenguaje no estándar, interpretado por el cliente. Esto provoca desigualdades en los resultados, dependiendo sobretodo de los distintos navegadores, y sus respectivas versiones.</p>
<p>En el caso de los eventos de teclado este desmadre tiene un especial énfasis, y viene a demostrarse en  <a href="http://unixpapa.com/js/key.html">este documento</a> (en inglés) que paso a resumiros.</p>
<h2>Eventos keyup keydown y keypress</h2>
<p>Estos eventos son disparados en momentos distintos, dependiendo del navegador. Por ejemplo el mantener pulsada la tecla &#8220;Alt&#8221;, o el pulsar un caracter durante varios segundos, producen resultados distintos en cuanto al disparo de eventos, en cada navegador.</p>
<h2>Interpretación de la tecla pulsada</h2>
<p>Llegados al punto de que el usuario ha pulsado una tecla, querremos saber cuál de ellas ha pulsado. Pues el resultado también difiere entre navegadores (como era de esperar).</p>
<p>Para complicarnos la vida a los programadores, la codificación es distinta entre los principales navegadores. Aúnque en los caracteres normales (numeros y letras) hay una cierta uniformidad, la diferenciación del lugar donde se pulsan los números (hay dos series de números en un teclado normal), y la mayoría de los signos, adquieren claves distintas que los identifican.</p>
<p><em>Echa un vistazo a la tabla de códigos más abajo.</em></p>
<h2>Tablas clarificadoras</h2>
<table border="1">
<tbody>
<tr class="d">
<td><em>Navegador</em></td>
<td><em>Eventos enviados cuando se pulsan teclas modificadoras (Alt, Ctrl, etc)</em></td>
</tr>
<tr>
<td>Gecko<br/>Internet Explorer</td>
<td><strong>keydown</strong><br/><strong>keyup</strong></td>
</tr>
<tr>
<td>Opera<br/>Konqueror</td>
<td><strong>keydown</strong><br/><strong>keypress</strong><br/><strong>keyup</strong></td>
</tr>
<tr>
<td>Safari<br/>iCab</td>
<td>ningún evento</td>
</tr>
</tbody>
</table>
<table border="1">
<tbody>
<tr class="d">
<td><em>Navegador</em></td>
<td><em>Eventos lanzados en cada autorepetición</em></td>
</tr>
<tr>
<td>Gecko (Linux) <br/>Gecko (Macintosh) <br/>Safari (Macintosh)<br/>Konqueror <br/>Opera <br/></td>
<td>sólo <strong>keypress</strong></td>
</tr>
<tr>
<td>Internet Explorer<br/>Gecko (Windows) <br/>Safari (Windows)</td>
<td><strong>keydown</strong><br/><strong>keypress</strong></td>
</tr>
<tr>
<td>iCab</td>
<td><strong>keyup</strong><br/><strong>keydown</strong><br/><strong>keypress</strong></td>
</tr>
</tbody>
</table>
<table border="1">
<tbody>
<tr class="d">
<th>Tecla</th>
<th>Mozilla</th>
<th>Internet Explorer</th>
<th>Opera</th>
<th>códigos pseudo ASCII</th>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">Teclas alfabéticas</td>
<td align="center" colspan="4">Código <a href="http://es.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange">ASCII</a> de la letra en mayúscula</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">[ Espacio ]</td>
<td align="center">32</td>
<td align="center">32</td>
<td align="center">32</td>
<td align="center">32</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">[ Enter ]</td>
<td align="center">13</td>
<td align="center">13</td>
<td align="center">13</td>
<td align="center">13</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">[ Tabulador ]</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
<td align="center">9</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">[ Retroceder ]</td>
<td align="center">8</td>
<td align="center">8</td>
<td align="center">8</td>
<td align="center">8</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">[ Shift ]</td>
<td align="center">16</td>
<td align="center">16</td>
<td align="center">16</td>
<td align="center">16</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">[ Control ]</td>
<td align="center">17</td>
<td align="center">17</td>
<td align="center">17</td>
<td align="center">17</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">[ Alt ]</td>
<td align="center">18</td>
<td align="center">18</td>
<td align="center">18</td>
<td align="center">18</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">izquierda</td>
<td align="center">37</td>
<td align="center">37</td>
<td align="center">37</td>
<td align="center">37</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">arriba</td>
<td align="center">38</td>
<td align="center">38</td>
<td align="center">38</td>
<td align="center">38</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">derecha</td>
<td align="center">39</td>
<td align="center">39</td>
<td align="center">39</td>
<td align="center">39</td>
</tr>
<tr>
<td bgcolor="#00ff00" align="center">abajo</td>
<td align="center">40</td>
<td align="center">40</td>
<td align="center">40</td>
<td align="center">40</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">Números en el teclado</td>
<td align="center" colspan="3">Código <a href="http://es.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange">ASCII</a> del número (48 más el número), aúnque esté pulsado un modificador</td>
<td valign="top" align="center">Código <a href="http://es.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange">ASCII</a> del caracter que será enviado.</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">[ ; : ]</td>
<td align="center">59</td>
<td align="center">186</td>
<td align="center">59</td>
<td align="center">59 (unshifted) o 58 (shifted)</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">[ = + ]</td>
<td align="center">61</td>
<td align="center">187</td>
<td align="center">61</td>
<td align="center">61 (unshifted) o 43 (shifted)</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">[ , < ]</td>
<td align="center">188</td>
<td align="center">188</td>
<td align="center">44</td>
<td align="center">44 (unshifted) o 60 (shifted)</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">[ - _ ]</td>
<td align="center">109</td>
<td align="center">189</td>
<td align="center">45</td>
<td align="center">45 (unshifted) o 95 (shifted)</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">[ . > ]</td>
<td align="center">190</td>
<td align="center">190</td>
<td align="center">46</td>
<td align="center">46 (unshifted) o 62 (shifted)</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">[ / ? ]</td>
<td align="center">191</td>
<td align="center">191</td>
<td align="center">47</td>
<td align="center">47 (unshifted) o 63 (shifted)</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">[ ` ~ ]</td>
<td align="center">192</td>
<td align="center">192</td>
<td align="center">126</td>
<td align="center">126 (unshifted) o 96 (shifted)</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">[ \ | ]</td>
<td align="center">220</td>
<td align="center">220</td>
<td align="center">92</td>
<td align="center">92 (unshifted) o 124 (shifted)</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">[ ' " ]</td>
<td align="center">222</td>
<td align="center">222</td>
<td align="center">39</td>
<td align="center">39 (unshifted) o 34 (shifted)</td>
</tr>
<tr>
<td bgcolor="#ffff00" align="center">Números (teclado separado)</td>
<td align="center" colspan="2">96 más número</td>
<td align="center" colspan="2">48 más número (ASCII)</td>
</tr>
</tbody>
</table>
<p>Recomiendo leer la <a href="http://unixpapa.com/js/key.html">fuente original</a> (inglés).</p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/web/la-locura-del-javascript-eventos-de-teclado/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Flash en mi web? No gracias!</title>
		<link>http://boozox.net/web/flash-en-mi-web-no-gracias/</link>
		<comments>http://boozox.net/web/flash-en-mi-web-no-gracias/#comments</comments>
		<pubDate>Tue, 06 Nov 2007 06:20:59 +0000</pubDate>
		<dc:creator>Alex Barros</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://boozox.net/web/flash-en-mi-web-no-gracias/</guid>
		<description><![CDATA[Estás pensando en hacer una web en flash? Piénsatelo dos veces! Via Barrapunto encuentro este interesante apunte con cinco razones para no usar Flash. Son: Pérdida de visitas (estrepitosa), por problemas en la indexación Problemas con buscadores, por no haber un código accesible y marcado. Problemas de visualización, por incompatibilidad de un software específico Problemas [...]]]></description>
			<content:encoded><![CDATA[<p>Estás pensando en hacer una web en flash? Piénsatelo dos veces!</p>
<p>Via <a href="http://barrapunto.com/articles/07/11/05/1342236.shtml">Barrapunto</a> encuentro este interesante apunte con <a href="http://www.churbayportillo.com/blog/2007/11/05/flash-cinco-razones-para-no-usarlo/">cinco razones para no usar Flash</a>. Son:</p>
<ul>
<li><strong>Pérdida de visitas</strong> (estrepitosa), por problemas en la indexación</li>
<li><strong>Problemas con buscadores</strong>, por no haber un código accesible y marcado.</li>
<li><strong>Problemas de visualización</strong>, por incompatibilidad de un software específico</li>
<li><strong>Problemas de navegación</strong>, causados por un lenguaje no accesible para el navegador</li>
<li><strong>Problemas de gestión y actualización</strong>, porque suele ser complicado unir un lenguaje de lado servidor con Flash</li>
</ul>
<p>Recomiendo echar un buen vistazo, sobretodo a quienes aún no estén convencidos de las enormes desventajas de flash para crear toda una web.</p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/web/flash-en-mi-web-no-gracias/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Premio Blog Solidario</title>
		<link>http://boozox.net/web/premio-blog-solidario/</link>
		<comments>http://boozox.net/web/premio-blog-solidario/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 06:27:22 +0000</pubDate>
		<dc:creator>Alex Barros</dc:creator>
				<category><![CDATA[Boozox]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[meme]]></category>
		<category><![CDATA[Pa' gustos colores]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://boozox.net/web/premio-blog-solidario/</guid>
		<description><![CDATA[Recibimos desde El vol de l&#8217;home ocell un meme, consistente en otorgar siete premios a los que, a nuestro juicio, sean blogs solidarios. Conque manos a la obra. El primero de todos va derecho a El Cinturón de Hipólita. Este blog de mi ex-instituto nació como un capricho del profesor de Latín, y ha conseguido [...]]]></description>
			<content:encoded><![CDATA[<p>Recibimos desde <a href="http://www.elvoldelhomeocell.net/blog/archives/214">El vol de l&#8217;home ocell</a> un meme, consistente en otorgar siete premios a los que, a nuestro juicio, sean blogs solidarios. Conque manos a la obra.</p>
<p>El primero de todos va derecho a <a href="http://elcinturondehipolita.com/">El Cinturón de Hipólita</a>. Este blog de mi ex-instituto nació como un capricho del profesor de Latín, y ha conseguido convertirse en toda una referencia en la blogosfera de la Cultura Clásica, gracias a la enorme dedicación de Salva, el magister, y en parte gracias a las colaboraciones de personalidades como Mercedes Madrid, reconocida experta en el tema.</p>
<p>El segundo, y metiéndonos en temática de programación web (mi rollo), no podría olvidar <a href="http://www.anieto2k.com/">Anieto2k</a>. Web de referencia donde las haya, actualización contínua, y contenidos frescos e interesantes. Le estoy enormemente agradecido por haber promocionado algunos de mis proyectos en su web.</p>
<p>El tercero va para <a href="http://www.alzado.org/">Alzado</a>, cuya web, aúnque no actualiza de forma muy constante, tiene contenido de muy buena calidad. La temática suele moverse por el márqueting típicamente orientado a la red, pero divaga en muchos otros aspectos.</p>
<p>El cuarto lo envío a mi gran colega de <a href="http://www.viciao2k3.net/blog/">Viciao2k3</a>. Un apasionado de la programación web, con muchas tablas, ha creado una gran variedad de servicios de lo más 2.0. En su blog trata cualquier cosa que le inquiete, mucho código y mucho sentido del humor.</p>
<p>El quinto premio va derechito a <a href="http://www.blog.lawebera.es/">La Webera</a>. Su autora muestra a través de sus posts trucos y técnicas para llevar una buena web.</p>
<p>El sexto lo otorgo a <a href="http://www.hachemuda.com/">HacheMuda</a>, una web que trata todo lo circundante a Linux, junto a alguna curiosidad que otra. Creativo y defensor a ultranza de Ubuntu.</p>
<p>El último de los 7 lo voy a dar a <a href="http://metalize.liveonstyle.com/">Metal.Ize</a>, web de diseño y maquetación fundamentalmente. Una importante referencia para el buen estilo.</p>
<p>Seguro que me he dejado muchas webs que ofrezcan material de calidad de forma altruista, estas son las 7 que subjetivamente destacaría. </p>
<p>Sólo queda agradecer a Joan que nos haya otorgado el premio. En el mes y medio que llevamos online lo hemos dado todo, y pensamos seguir así mucho tiempo.</p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/web/premio-blog-solidario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>El aspecto de un correcto HTML</title>
		<link>http://boozox.net/web/el-aspecto-de-un-correcto-html/</link>
		<comments>http://boozox.net/web/el-aspecto-de-un-correcto-html/#comments</comments>
		<pubDate>Sun, 04 Nov 2007 18:26:52 +0000</pubDate>
		<dc:creator>Alex Barros</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[HOWTO/CóMO]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://boozox.net/web/el-aspecto-de-un-correcto-html/</guid>
		<description><![CDATA[Via del.icio.us descubro esta imágen que transmite de una forma muy acertada todo lo que un buen documento HTML debe contener. Me gustaría transcribir y traducir este interesante recurso a continuación para todos vosotros: Doctype declarado correctamente Parece un galimatías, pero los DOCTYPE son importantes. No sólo hace que tu código sea válido, sinó que [...]]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://del.icio.us">del.icio.us</a> descubro <a href="http://css-tricks.com/examples/CleanCode/CleanCode.jpg">esta imágen</a> que transmite de una forma muy acertada todo lo que <strong>un buen documento HTML</strong> debe contener.</p>
<p>Me gustaría transcribir y traducir este interesante recurso a continuación para todos vosotros:</p>
<h2>Doctype declarado correctamente</h2>
<p>Parece un galimatías, pero los DOCTYPE son importantes. No sólo hace que tu código sea válido, sinó que dicen a tu navegador detalles de cómo debe renderizar tu página.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &nbsp;&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;</div>
</li>
</ol>
</div>
<h2>Encabezado ordenado</h2>
<p>Que conste de título, conjunto de caracteres, enlace a hojas de estilo (incluida la de impresión!) y scripts (enlazados, que NO incluidos).<br />
Los archivos externos (CSS o JavaScript) en carpetas propias (<em>css/</em> y <em>script/</em> por ejemplo).</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;head&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;title&gt;Titulo del documento&lt;/title&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;link rel=&quot;stylesheet&quot; href=&quot;css/estilo.css&quot; type=&quot;text/css&quot; media=&quot;screen, projection&quot;/&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &lt;link rel=&quot;stylesheet&quot; href=&quot;css/print.css&quot; type=&quot;text/css&quot; media=&quot;print&quot;/&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;script type=&quot;text/javascript&quot; src=&quot;script/javascript.js&quot;&gt;&lt;/script&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/head&gt;</div>
</li>
</ol>
</div>
<h2>ID para Body</h2>
<p>El ponerle una id a la etiqueta body te permite crear propiedades CSS específicas para una página en concreto. Por ejemplo diferenciar los h2 del homepage, con un código similar a #home h2 {}, y así no afectar a ningún otro h2.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;body id=&quot;home&quot;&gt;</div>
</li>
</ol>
</div>
<h2>Div principal para todo el contenido de la página</h2>
<p>El poner un div que contenga todo el contenido nos permite mantener el control del diseño sobre la página en su conjunto. Por ejemplo podemos determinar un ancho fijo de toda la página.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;div id=&quot;contenedor&quot;&gt;</div>
</li>
</ol>
</div>
<h2>Menú limpio semánticamente</h2>
<p>Un menú debe tener este aspecto:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt;div id=&quot;menu&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;ul&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;a href=&quot;inicio.php&quot;&gt;Inicio&lt;/a&gt;&lt;/li&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;a href=&quot;info.php&quot;&gt;Info&lt;/a&gt;&lt;/li&gt;
</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;li&gt;&lt;a href=&quot;contacto.php&quot;&gt;Contacto&lt;/a&gt;&lt;/li&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &lt;/ul&gt;
</div>
</li>
<li class="li1">
<div class="de1">&lt;/div&gt;</div>
</li>
</ol>
</div>
<h2>Incluir el contenido repetido</h2>
<p>Mucho contenido es común entre página y página. Menús, barras laterales, piés de página, etc. Este tipo de contenido debería ser incluido dinámicamente. Esto puede conseguirse con una simple instrucción de PHP.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span> <span class="kw1">include_once</span><span class="br0">&#40;</span><span class="st0">&quot;botonero.html&quot;</span><span class="br0">&#41;</span> <span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<h2>Contenido importante primero</h2>
<p>Es apropiado que incluyas tus contenidos más importantes al principio, como noticias, eventos, que pueden ser listadas al principio del HTML. Si tu barra lateral es sólo para navegación o cosas menos relevantes incluso, deberías ponerla al final del HTML.</p>
<h2>Código tabulado</h2>
<p>Si cada sección de código se presenta tabulada como un conjunto, la estructura del código queda mucho más comprensible. Cuando un código está completamente alineado a la izquierda es prácticamente imposible de comprender.</p>
<h2>Sin estilo!</h2>
<p>Tu HTML debe estar completamente orientado a la estructura y al contenido, <strong>no al estilo</strong>! Deja que el CSS se encargue de todo lo relacionado con el estilo, y por supuesto olvida la etiqueta <strong>font</strong></p>
<h2>Contenido, contenido, contenido</h2>
<p>Aquí has de insertar todo tu contenido, así que manos a la obra. No olvides separar los distintos párrafos con la etiqueta <strong>p</strong>. Utiliza listas dónde sea apropiado. Utiliza códigos para los símbolos (& copy; & iacute; etc). No abuses de los <strong>hr</strong> para el salto de línea. </p>
<h2>Etiquetas de cierre</h2>
<p>Empezaste con fuerza, ahora acaba con fuerza. No seas perezos@ y cierra todas las etiquetas que lo requieran, incluso si la página se renderiza bien sin ellas!</p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/web/el-aspecto-de-un-correcto-html/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Trabajar con conexiones socket en PHP</title>
		<link>http://boozox.net/php/trabajar-con-con-conexiones-socket-en-php/</link>
		<comments>http://boozox.net/php/trabajar-con-con-conexiones-socket-en-php/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 13:41:05 +0000</pubDate>
		<dc:creator>Alex Barros</dc:creator>
				<category><![CDATA[Código]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://boozox.net/php/trabajar-con-con-conexiones-socket-en-php/</guid>
		<description><![CDATA[Para aquellos que cuenten con CURL en su servidor, sabrán que esta biblioteca ofrece increíbles ventajas. Sin embargo en ocasiones no contamos con esta herramienta en el servidor, o necesitamos trabajar a un nivel más bajo; es decir, sin que CURL nos lo de todo masticadito. Este nivel es el de interactuación entre máquinas a [...]]]></description>
			<content:encoded><![CDATA[<p>Para aquellos que cuenten con <a href="http://es.php.net/manual/es/ref.curl.php">CURL</a> en su servidor, sabrán que esta biblioteca ofrece <a href="http://boozox.net/php/curlopt-de-curl/">increíbles ventajas</a>. Sin embargo en ocasiones no contamos con esta herramienta en el servidor, o necesitamos trabajar a un nivel más bajo; es decir, sin que CURL nos lo de todo masticadito.</p>
<p>Este nivel es el de interactuación entre <strong>máquinas</strong> a través de un protocolo (usualmente HTTP). </p>
<p>Voy a centrarme en el uso de <strong>la función <a href="http://es.php.net/manual/es/function.fsockopen.php">fsockopen()</a></strong> y en las <strong>cabeceras HTTP</strong>. Aúnque estas conexiones abarcan más materia, estos puntos resultan más útiles y sencillos de entender.</p>
<p>Para iniciar una conexión con otro dominio de internet, crearemos un puntero mediante <a href="http://es.php.net/manual/es/function.fsockopen.php">fsockopen</a>. Este puntero referencia a la conexión que hemos establecido con el archivo de ese otro dominio, y podremos usar las funciones típicas de un puntero de archivo (<a href="http://es.php.net/manual/es/function.fgets.php">fgets()</a> y <a href="http://es.php.net/manual/es/function.fputs.php">fputs()</a> principalmente)</p>
<p>La función requiere de un parámetro obligatorio (el archivo remoto) y otros opcionales, que son:</p>
<ul>
<li><strong>Puerto:</strong> Cualquier máquina consta de <a href="http://es.wikipedia.org/wiki/Lista_de_n%C3%BAmeros_de_puerto">diversos puertos</a>. El 80 (ó 8080 en ocasiones) es el de HTTP (transferencia de documentos web), el que más nos interesa.</li>
<li><strong>Error numérico: </strong>Número entero que identifica un error ocurrido. 0 si ha habido éxito</li>
<li><strong>Error descriptivo:</strong> Define en lenguaje natural el error.</li>
<li><strong>Tiempo de espera:</strong> Puedes indicarle el tiempo para que la conexión expire. Para tener mayor control de este tiempo, puedes usar también <a href="http://es.php.net/manual/es/function.stream-set-timeout.php">stream_set_timeout()</a></li>
</ul>
<p>Un ejemplo de conexión usando esta técnica puede ser este:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$da</span> = <a href="http://www.php.net/fsockopen"><span class="kw3">fsockopen</span></a><span class="br0">&#40;</span><span class="st0">&quot;www.example.com&quot;</span>, <span class="nu0">80</span>, <span class="re0">$errno</span>, <span class="re0">$errstr</span>, <span class="nu0">30</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$da</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&quot;$errstr ($errno)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"><span class="es0">\n</span>&quot;</span>; <span class="co1">//ha ocurrido un error &#8230;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$salida</span> = <span class="st0">&quot;GET / HTTP/1.1<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>; <span class="co1">//conexión usando HTTP1.1 y el metodo GET</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$salida</span> .= <span class="st0">&quot;Host: www.example.com<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>; <span class="co1">//indico el host con el que quiero conectarme, disponible con parse_url()</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$salida</span> .= <span class="st0">&quot;Connection: Close<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&quot;</span>; <span class="co1">//Cierro la conexion para no seguir gastando recursos</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://www.php.net/fwrite"><span class="kw3">fwrite</span></a><span class="br0">&#40;</span><span class="re0">$da</span>, <span class="re0">$salida</span><span class="br0">&#41;</span>; <span class="co1">//le escribo las ordenes que acabo de generar</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/feof"><span class="kw3">feof</span></a><span class="br0">&#40;</span><span class="re0">$da</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//recorro fila a fila el archivo</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <a href="http://www.php.net/fgets"><span class="kw3">fgets</span></a><span class="br0">&#40;</span><span class="re0">$da</span>, <span class="nu0">128</span><span class="br0">&#41;</span>; <span class="co1">//imprimo esta linea</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span><span class="re0">$da</span><span class="br0">&#41;</span>; <span class="co1">//cierro el puntero</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>Como podemos observar, nos permite enviar las cabeceras HTTP que creamos oportunas, aúnque para hacer una conexión simple basta con las tres instrucciones indicadas en el ejemplo.</p>
<p>Para chequear el contenido de cualquier URL, sin pararse a personalizar cabeceras se puede emplear este simple script:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> urlContent<span class="br0">&#40;</span><span class="re0">$host</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$da</span> = <a href="http://www.php.net/fsockopen"><span class="kw3">fsockopen</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="nu0">80</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$da</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$salida</span> = <span class="st0">&quot;GET / HTTP/1.1<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>; <span class="co1">//conexión usando HTTP1.1 y el metodo GET</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$salida</span> .= <span class="st0">&quot;Host: $host<span class="es0">\r</span><span class="es0">\n</span>&quot;</span>; <span class="co1">//indico el host con el que quiero conectarme, disponible con parse_url()</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$salida</span> .= <span class="st0">&quot;Connection: Close<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&quot;</span>; <span class="co1">//Cierro la conexion para no seguir gastando recursos</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/fwrite"><span class="kw3">fwrite</span></a><span class="br0">&#40;</span><span class="re0">$da</span>, <span class="re0">$salida</span><span class="br0">&#41;</span>; <span class="co1">//le escribo las ordenes que acabo de generar</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/feof"><span class="kw3">feof</span></a><span class="br0">&#40;</span><span class="re0">$da</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">//recorro fila a fila el archivo</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$data</span> .= @<a href="http://www.php.net/fgets"><span class="kw3">fgets</span></a><span class="br0">&#40;</span><span class="re0">$da</span>, <span class="nu0">128</span><span class="br0">&#41;</span>; <span class="co1">//imprimo esta linea</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/fclose"><span class="kw3">fclose</span></a><span class="br0">&#40;</span><span class="re0">$da</span><span class="br0">&#41;</span>; <span class="co1">//cierro el puntero</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$data</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//Ejemplo de uso </span></div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$contenido</span> = urlContent<span class="br0">&#40;</span><span class="st0">&#8216;codis.boozox.net&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <a href="http://www.php.net/nl2br"><span class="kw3">nl2br</span></a><span class="br0">&#40;</span><a href="http://www.php.net/htmlentities"><span class="kw3">htmlentities</span></a><span class="br0">&#40;</span><span class="re0">$contenido</span><span class="br0">&#41;</span><span class="br0">&#41;</span>; <span class="co1">//doy formato para leer el codigo</span></div>
</li>
</ol>
</div>
<p><strong><a href="http://boozox.net/jaula/urlContent.function.php">Ver en ejecución</a></strong> | <strong>Descargar:</strong></p>
<p><a href="http://www.viciao2k3.net/services/tagfile/link.php?url=http://boozox.net/jaula/urlContent.function.zip" target="_blank"><img src="http://www.viciao2k3.net/services/tagfile/widget.php?url=http://boozox.net/jaula/urlContent.function.zip&#038;bg=B9DFE6&#038;fc=000000&#038;lang=ES" alt="urlContent.function.zip" /></a></p>
<p>El funcionamiento básico de los sockets es algo más complejo que CURL, pero si nuestro servidor no admite esta librería, este script nos vendrá de perlas en más de una ocasión.</p>
]]></content:encoded>
			<wfw:commentRss>http://boozox.net/php/trabajar-con-con-conexiones-socket-en-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

