<?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>El blog de Neurotic &#187; Programación</title>
	<atom:link href="http://www.neuroticweb.com/blog/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.neuroticweb.com/blog</link>
	<description>Nuestro día a día Neurotic</description>
	<lastBuildDate>Tue, 22 Apr 2008 09:15:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Obtener una fila aleatoria en una consulta de MySQL con RAND()</title>
		<link>http://www.neuroticweb.com/blog/211/obtener-una-fila-aleatoria-en-una-consulta-de-mysql/</link>
		<comments>http://www.neuroticweb.com/blog/211/obtener-una-fila-aleatoria-en-una-consulta-de-mysql/#comments</comments>
		<pubDate>Fri, 01 Feb 2008 09:16:53 +0000</pubDate>
		<dc:creator>Pedro</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/211/obtener-una-fila-aleatoria-en-una-consulta-de-mysql/</guid>
		<description><![CDATA[Para obtener un resultado aleatorio de una tabla en MySQL podemos utilizar la función RAND(), SELECT * FROM nombre_tabla WHERE condicion ORDER BY RAND() LIMIT 1; La función RAND() genera una serie de números aleatorios que irá comprobando contra los &#8230; <a href="http://www.neuroticweb.com/blog/211/obtener-una-fila-aleatoria-en-una-consulta-de-mysql/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Para obtener un resultado aleatorio de una tabla en <strong>MySQL</strong> podemos utilizar la función RAND(),</p>
<p><code>SELECT *<br />
FROM nombre_tabla<br />
WHERE condicion<br />
ORDER BY RAND()<br />
LIMIT 1; </code></p>
<p>La función RAND() genera una serie de números aleatorios que irá comprobando contra los registros de nuestra tabla hasta que encuentra uno y lo devuelve (el número de registros devueltos se fija mediante la cláusula LIMIT)</p>
<p>La versión para <strong>Drupal</strong>:</p>
<p><code>$sql = "SELECT *<br />
FROM {nombre_tabla}<br />
WHERE condicion<br />
ORDER BY RAND()";<br />
$result = db_query_range($sql,1);<br />
$data = db_fetch_object($result);</code></p>
<blockquote><p>Nota: También se puede utilizar RAND(NOW()) o RAND(UNIX_TIMESTAMP())</p></blockquote>
<p>Esta es una solución ideal para tablas pequeñas, si tenemos problemas de rendimiento, deberemos ser un poco más <em>creativos</em><br />
<span id="more-211"></span><br />
Si queremos obtener una fila aleatoria de una tabla mediana-grande, 100.000 registros o más, este método dista de ser óptimo, como explica <a href="http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/">Anton Titov</a>, para tablas de mayor tamaño es mucho más eficiente generar un número aleatorio limitado y después seleccionar esa fila, por ejemplo:</p>
<p>Para obtener el máximo:<br />
<code>SELECT count(*)<br />
FROM nombre_tabla</code></p>
<p>Obtenemos (en PHP) un número aleatorio entre 0 y el máximo recuperado antes<br />
$numero = rand(0, $count);</p>
<p>Y seleccionamos la fila a través de ese número:<br />
<code>SELECT count(*)<br />
FROM nombre_tabla<br />
WHERE id = {$numero}</code></p>
<p>Esto es un supuesto muy concreto porque es imprescindible que el identificador correspondiente al número aleatorio sea parte de la clave primaria de la tabla, de lo contrario, será una solución, por lo menos, igual de lenta que el <strong>RAND</strong>().<br />
Esta solución tiene un inconveniente muy claro, ya que no limita, si necesitamos filtrar la consulta mediante un <strong>WHERE</strong>, podemos llegar a la situación de tener que generar varios lotes de números aleatorios hasta que encontremos uno que cumpla con nuestra restricción.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/211/obtener-una-fila-aleatoria-en-una-consulta-de-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redirección de dominio (301) usando htaccess</title>
		<link>http://www.neuroticweb.com/blog/188/redireccion-de-dominio-301-usando-htaccess/</link>
		<comments>http://www.neuroticweb.com/blog/188/redireccion-de-dominio-301-usando-htaccess/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 10:22:19 +0000</pubDate>
		<dc:creator>Pedro</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/188/redireccion-de-dominio-301-usando-htaccess/</guid>
		<description><![CDATA[Hemos tenido que migrar de servidor Portal Nissan (www.portalnissan.com) y, mientras nuestro proveedor de dominios realizaba las modificaciones de DNS para reapuntar el hosting, hemos optado por redirigir todas las llamadas a un dominio auxiliar. Para ello utilizamos esta sentencia &#8230; <a href="http://www.neuroticweb.com/blog/188/redireccion-de-dominio-301-usando-htaccess/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hemos tenido que migrar de servidor Portal Nissan (<a href="http://www.portalnissan.com">www.portalnissan.com</a>) y, mientras nuestro proveedor de dominios realizaba las modificaciones de DNS para reapuntar el hosting, hemos optado por redirigir todas las llamadas a un dominio auxiliar.</p>
<p>Para ello utilizamos esta sentencia en el .htaccess del servidor a migrar:</p>
<p><code>&lt;IfModule mod_rewrite.c&gt;<br />
RewriteEngine on<br />
RewriteRule (.*) http://www.bellatriubonsai.com/$1 [R=301,L]<br />
&lt;/IfModule&gt;<br />
</code></p>
<p>Donde  <em>http://www.bellatriubonsai.com/</em> es el dominio auxiliar que queráis utilizar.</p>
<p>Más información sobre el .htaccess, mod rewrite y la redirección 301, aquí: <a href="http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html">http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html</a> aquí: <a href="http://www.isitebuild.com/301-redirect.htm">http://www.isitebuild.com/301-redirect.htm</a> y aquí: <a href="http://corz.org/serv/tricks/htaccess2.php">http://corz.org/serv/tricks/htaccess2.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/188/redireccion-de-dominio-301-usando-htaccess/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to: Instalar y configurar un Sandbox para Drupal con Eclipse y CVS</title>
		<link>http://www.neuroticweb.com/blog/166/how-to-instalar-y-configurar-un-sandbox-para-drupal-con-eclipse-y-cvs-2/</link>
		<comments>http://www.neuroticweb.com/blog/166/how-to-instalar-y-configurar-un-sandbox-para-drupal-con-eclipse-y-cvs-2/#comments</comments>
		<pubDate>Fri, 23 Nov 2007 08:30:17 +0000</pubDate>
		<dc:creator>Pedro</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/166/how-to-instalar-y-configurar-un-sandbox-para-drupal-con-eclipse-y-cvs-2/</guid>
		<description><![CDATA[En estas entradas, voy a intentar resumir cómo hemos instalado nuestro sandbox para tener las versiones de los proyectos, principalmente de Drupal, controladas mediante CVS. Nuestro entorno de desarrollo consiste en un servidor con Debian 4 y los clientes con &#8230; <a href="http://www.neuroticweb.com/blog/166/how-to-instalar-y-configurar-un-sandbox-para-drupal-con-eclipse-y-cvs-2/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En estas entradas, voy a intentar resumir cómo hemos instalado nuestro sandbox para tener las versiones de los proyectos, principalmente de Drupal, controladas mediante CVS. Nuestro entorno de desarrollo consiste en un servidor con <a href="http://www.debian.org/">Debian</a> 4 y los clientes con <a href="http://www.ubuntu.com/">Ubuntu</a> 7.10.</p>
<p><strong>Pasos a realizar en el servidor:</strong></p>
<ul>
<li><a href="http://www.neuroticweb.com/blog/143/instalacion-de-un-servidor-dns-bind9-en-debian/">Instalación de  un servidor DNS (en este caso Bind9)</a>.</li>
<li><a href="http://www.neuroticweb.com/blog/144/configuracion-del-servidor-apache-para-trabajar-con-virtual-hosts/">Configuración del Servidor Apache para trabajar con Virtual Hosts.</a></li>
<li><a href="http://www.neuroticweb.com/blog/146/instalacion-de-un-servidor-cvs/">Instalación de un servidor CVS</a>.</li>
<li><a href="http://www.neuroticweb.com/blog/147/configuracion-de-apache-para-utilizar-drupal-en-multisite/">Configuración de Apache para utilizar Drupal en multisite</a>.</li>
</ul>
<p><strong>Pasos a realizar en los clientes:</strong></p>
<ul>
<li><a href="http://www.neuroticweb.com/blog/148/instalacion-de-eclipse-33-con-pdt-php-ide-y-zend-debugger/">Instalación de Eclipse 3.3 con PDT (PHP IDE) y  Zend Debugger.</a></li>
<li><title></title><a href="http://www.neuroticweb.com/blog/149/configuracion-de-cvs-en-eclipse/">Configuración de CVS en Eclipse</a></li>
<li><a href="http://www.neuroticweb.com/blog/164/configuracion-local-de-drupal-en-multisite/">Configuración local de Drupal en multisite (Servidor de DNS, Apache y configuración de Eclipse para links simbólicos)</a></li>
</ul>
<p>El Servidor DNS y la configuración de Apache los necesitaremos para poder acceder a nuestras webs en LAN mediante http://nombredelaweb.nombredeldominio.extension y así nos evitaremos problemas con las rutas que sí tendríamos con http://localhost/nombredelaweb</p>
<p>Partimos de una instalación de Mysql, Apache2 y PHP. Podéis encontrar tutoriales de como instalar estos componentes (LAMP) aquí: <a href="https://help.ubuntu.com/community/ApacheMySQLPHP">https://help.ubuntu.com/community/ApacheMySQLPHP</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/166/how-to-instalar-y-configurar-un-sandbox-para-drupal-con-eclipse-y-cvs-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Configuración de CVS en Eclipse.</title>
		<link>http://www.neuroticweb.com/blog/149/configuracion-de-cvs-en-eclipse/</link>
		<comments>http://www.neuroticweb.com/blog/149/configuracion-de-cvs-en-eclipse/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 13:58:41 +0000</pubDate>
		<dc:creator>Pedro</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/149/configuracion-de-cvs-en-eclipse/</guid>
		<description><![CDATA[Eclipse viene con el plugin CVS incorporado, por lo que no deberemos instalar nada para comenzar a trabajar con CVS. Este post pretende ser una guía introductoria de cómo trabajar con Eclipse y CVS, cómo hacer checkout, subir ficheros al &#8230; <a href="http://www.neuroticweb.com/blog/149/configuracion-de-cvs-en-eclipse/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Eclipse viene con el plugin CVS incorporado, por lo que no deberemos instalar nada para comenzar a trabajar con CVS.  Este post pretende ser una guía introductoria de cómo trabajar con Eclipse y CVS, cómo hacer checkout, subir ficheros al repositorio y actualizarlos.</p>
<p>Antes de esto, dos parámetros muy necesarios de configuración:</p>
<p>Para que se muestre la consola siempre que se ejecute un comando CVS, para poder comprobar si ha habido errores o no en la última operación:</p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_console.png" title="cvs_console.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_console.miniatura.png" alt="cvs_console.png" /></a></p>
<p>Para que, cuando se realice un checkout, los ficheros se bajen en Read-Only, deberemos seleccionar la opción <em>Configure projects to use Watch / Edit on Checkout</em> como muestra la imagen.</p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_edit.png" title="cvs_edit.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_edit.miniatura.png" alt="cvs_edit.png" /></a></p>
<p><strong>Muy importante</strong> para trabajo en grupo, configurando esta opción, Eclipse se encarga de realizar el edit los ficheros cuando los modificas. Además, el resto de los desarrolladores sabrán si el fichero está siendo o no modificado mediante la opción <em>Team » Show Editors</em>. Si el notify está activado, también se recibirán notificaciones vía mail.</p>
<p><span id="more-149"></span><br />
<strong>Checkout</strong></p>
<p>Primero necesitamos  seleccionar la vista <em>CVS Repository Exploring </em></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_repository_exploring.png" title="cvs_repository_exploring.png"></a></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_repository_exploring.png" title="cvs_repository_exploring.png"></a></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_repository_exploring.png" title="cvs_repository_exploring.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_repository_exploring.miniatura.png" alt="cvs_repository_exploring.png" /></a></p>
<p>En la perspectiva CVS Repositories, con el botón derecho, <em>New  » </em><em>Repository Location</em></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_new_repository_location.png" title="cvs_new_repository_location.png"></a></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_new_repository_location.png" title="cvs_new_repository_location.png"></a></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_new_repository_location.png" title="cvs_new_repository_location.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_new_repository_location.miniatura.png" alt="cvs_new_repository_location.png" /></a></p>
<p>Para añadir el nuevo 	repositorio es necesario rellenar los siguientes campos:</p>
<blockquote><p><em><strong> Host (o dirección ip)</strong>: 		Nombre del servidor</em><br />
<em><strong> Repository path</strong>: Ruta del 		repositorio en el servidor</em><br />
<em> <strong>User:</strong> nombre de usuario</em><br />
<em><strong> Password:</strong> contraseña</em><br />
<em><strong> Connection Type:</strong> Protocolo de 		conexión, en este caso pserver</em></p></blockquote>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_add_repository.png" title="cvs_add_repository.png"></a></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_add_repository.png" title="cvs_add_repository.png"></a></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_add_repository.png" title="cvs_add_repository.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_add_repository.miniatura.png" alt="cvs_add_repository.png" /></a></p>
<p>Ahora ya podremos acceder a nuestro repositorio de CVS en el servidor y examinar los ficheros que hay en él:</p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_repository_browsing.png" title="cvs_repository_browsing.png"></a></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_repository_browsing.png" title="cvs_repository_browsing.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_repository_browsing.miniatura.png" alt="cvs_repository_browsing.png" /></a><br />
Es posible realizar el checkout de los ficheros / proyectos de muchas maneras, una de ellas es a través del explorador del repositorio de CVS, seleccionando la carpeta a bajar y con el botón derecho, <em>Checkout As&#8230;</em></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_checkout_as.png" title="cvs_checkout_as.png"></a></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_checkout_as.png" title="cvs_checkout_as.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_checkout_as.miniatura.png" alt="cvs_checkout_as.png" /></a></p>
<blockquote><p><strong>Nota:</strong> Otra forma de realizar Checkout es a través de la perspectiva PHP realizando un <em>Import  » Projects from CVS</em></p></blockquote>
<p>Para realizar el checkout, necesitaremos un proyecto en Eclipse, bien uno ya existente, darle el nombre del directorio / proyecto de CVS al proyecto de Eclipse o ejecutar el <em>New Project Wizard </em>que nos permite modificar todo el proceso:</p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_new_project_wizard.png" title="cvs_new_project_wizard.png"></a></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_new_project_wizard.png" title="cvs_new_project_wizard.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_new_project_wizard.miniatura.png" alt="cvs_new_project_wizard.png" /></a></p>
<p><strong>Ojo:</strong> Es conveniente utilizar el asistente, para tener un control total sobre dónde se bajan los ficheros y el nombre del proyecto, además nos permite vincular otros proyectos al actual.</p>
<p>Cualquiera que sea la opción elegida para realizar el checkout, deberemos elegir la rama de la que queremos bajar el fichero. Si estamos trabajando en proyectos pequeños / medianos o en entornos con relativamente pocos desarrolladores, lo más cómodo será utilizar directamente el <strong>HEAD</strong> (rama principal), ya que la gestión de las ramas requiere un conocimiento y control mucho más avanzado con CVS. Podéis encontrar una guía completísima en la <a href="http://help.eclipse.org/help32/topic/org.eclipse.platform.doc.user/tasks/tasks-1h.htm">ayuda online de Eclipse </a></p>
<p>Una vez ya descargado el proyecto / carpeta / ficheros con los que vamos a trabajar dentro de un proyecto de Eclipse, deberemos utilizar la perspectiva PHP, con la vista <em>PHP Explorer</em> o <em>Navigator</em> (hay pequeñas diferencias entre ambas, como que el PHP Explorer no muestra los ficheros ocultos y el Navigator sí lo hace)</p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_php_explorer.png" title="cvs_php_explorer.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_php_explorer.miniatura.png" alt="cvs_php_explorer.png" /></a></p>
<p><strong>Añadir proyectos completos al repositorio</strong></p>
<p>Si estuvieramos trabajando con un proyecto desde 0 y quisieramos añadirlo completo al repositorio de CVS, deberemos, desde la perspectiva PHP Explorer o Navigator, seleccionar el proyecto y con el botón derecho, <em>Team  » Share Project </em>y seleccionaremos el repositorio en el que queremos dar de alta el proyecto, también podríamos dar de alta un nuevo repositorio desde aquí, o crear una conexión un usuario diferente.</p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_share_project.png" title="cvs_share_project.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_share_project.miniatura.png" alt="cvs_share_project.png" /></a></p>
<p>Después le asignamos el nombre al proyecto:</p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_share_project_name.png" title="cvs_share_project_name.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_share_project_name.miniatura.png" alt="cvs_share_project_name.png" /></a></p>
<p>Y por último seleccionamos los ficheros que queremos que se suban, nos es posible discriminar ficheros desde aquí, añadiéndolos al .cvsignore utilizando diferentes criterios.</p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_cvsignore.png" title="cvs_cvsignore.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_cvsignore.miniatura.png" alt="cvs_cvsignore.png" /></a></p>
<p><strong>Ojo: </strong>Al añadir ficheros al .cvsignore, este fichero se crea en local y es muy conveniente que se añada también al repositorio, de esta forma si tenemos ficheros de caché, o el mismo metadato que utiliza Eclipse, cuando bajemos de nuevo el proyecto, no tendremos que quitarlos de nuevo, sino que ya se ignorarán por defecto.</p>
<p><strong>Añadir nuevos ficheros a un proyecto </strong></p>
<p>Si ya estamos trabajando con un proyecto en Eclipse vinculado a CVS, puede que sea necesario añadir ficheros o carpetas, para ello, los seleccionamos y después los agregamos al repositorio a través del menú <em>Team » Add to Version Control</em></p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_add_to_version_control.png" title="cvs_add_to_version_control.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_add_to_version_control.miniatura.png" alt="cvs_add_to_version_control.png" /></a></p>
<p>En la consola de CVS de Eclipse saldrá un mensaje parecido a este:</p>
<blockquote><p><em>    ***<br />
cvs add -kkv &#8220;/PruebaCVS/directorio/ficherodepruebas.php&#8221;<br />
cvs add: scheduling file `directorio/ficherodepruebas.php&#8217; for addition<br />
<strong> cvs add: use `cvs commit&#8217; to add this file permanently</strong><br />
ok (took 0:00.091)<br />
***</em></p></blockquote>
<p>Si modificamos un fichero, se indicará como &gt; (modificado) y el paso final para subirlo al repositorio será igual que para añadirlo, tendremos que seleccionarlo y utilizar la opción  <em>Team » Commit </em>donde deberemos escribir el mensaje que se guardará en el repositorio a modo de comentario de la modificación:</p>
<p><a href="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_commit.png" title="cvs_commit.png"><img src="http://www.neuroticweb.com/blog/wp-content/uploads/2007/11/cvs_commit.miniatura.png" alt="cvs_commit.png" /></a></p>
<p>Como apuntes finales, unas &#8220;recomendaciones&#8221; para trabajo en grupo:</p>
<p>Es conveniente saber quien está tocando cada fichero, por lo que el uso de <em>Team » Edit </em>(o dejar que Eclipse lo haga por tí con la configuración del principio del post)y activar las notificaciones a través del fichero notify del servidor CVS se hace bastante útil.</p>
<p>Los mensajes de commit muchas veces son la única información con la que se cuenta para tracear un proyecto sin investigar más profundamente, deben ser lo mas explicativos posible.</p>
<p>Es posible que sean necesarios otros programas con <a href="http://cervisia.kde.org/">Cervisia</a> o <a href="http://www.viewvc.org/">ViewVC</a> para gestionar el repositorio de CVS, si no estais cómodos con el GUI que estáis usando, siempre podéis utilizar cvs desde la línea de comandos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/149/configuracion-de-cvs-en-eclipse/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Configuración de Apache para utilizar Drupal en multisite.</title>
		<link>http://www.neuroticweb.com/blog/147/configuracion-de-apache-para-utilizar-drupal-en-multisite/</link>
		<comments>http://www.neuroticweb.com/blog/147/configuracion-de-apache-para-utilizar-drupal-en-multisite/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 09:09:09 +0000</pubDate>
		<dc:creator>Pedro</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/147/configuracion-de-apache-para-utilizar-drupal-en-multisite/</guid>
		<description><![CDATA[Para utilizar Drupal en modo multisite, es decir, utilizar una sola instalación del motor de Drupal para varias webs, a partir de la versión 5, se puede configurar a través del directorio sites/ y la configuración de Virtual Host de &#8230; <a href="http://www.neuroticweb.com/blog/147/configuracion-de-apache-para-utilizar-drupal-en-multisite/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Para utilizar <a href="http://www.drupal.org">Drupal</a> en modo multisite, es decir, utilizar una sola instalación del motor de Drupal para varias webs, a partir de la versión 5, se puede configurar a través del directorio sites/ y la<a href="http://www.neuroticweb.com/blog/144/configuracion-del-servidor-apache-para-trabajar-con-virtual-hosts/"> configuración de Virtual Host de Apache</a></p>
<p>Si la web ya está funcionando en Drupal, se pueden saltar los siguientes pasos referentes a la descarga e instalación de Drupal y realizar la configuración de Apache, si no, podemos conseguir Drupal bien descargándonoslo a través de la página o directamente a través de CVS, mediante la sentencia:</p>
<p><em># cvs -z6 -d:pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal checkout<strong> -r DRUPAL-5-3 drupal</strong> </em></p>
<p>Tres pinceladas sobre esta sentencia, la cláusula <em>-z6</em> es para que realice la descarga en modo comprimido y de esta forma consuma menos ancho de banda, <em>-r DRUPAL-5-3 </em>indica la rama que queremos descargar, debemos ser cuidadosos, ya que si no podemos nada, o usamos la rama principal <em>HEAD</em>, descargará la última versión, a día de hoy, la beta de Drupal 6. Se puede echar un vistazo al repositorio CVS de Drupal a través de <a href="http://cvs.drupal.org/viewvc.py/drupal">http://cvs.drupal.org/viewvc.py/drupal</a> , también es posible descargar modulos accediendo al repositorio de los mismos (<em>cvs.drupal.org:/cvs/drupal-contrib</em>). Por último, esta sentencia nos descargará la versión indicada de CVS en un subdirectorio drupal del directorio actual, si queremos que se descargue en otro directorio, deberemos incluir la cláusula <em>-d ruta </em>utilizando siempre rutas relativas.</p>
<p>Para instalar Drupal, necesitamos crear una base de datos y un usuario con privilegios para ejecutar las sentencias, ejemplos en MySql de la creación de la base de datos y del usuario:<br />
<code><em>    CREATE DATABASE <strong>nombre_bbdd;</strong></em></code></p>
<p><code><em>    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,INDEX,<br />
ALTER,CREATE TEMPORARY TABLES, LOCK TABLES ON <strong>nombre_bbdd</strong>.*<br />
TO '<strong>usuario_bbdd</strong>'@'localhost'<br />
IDENTIFIED BY <strong>'password'</strong></em><strong>;</strong></code></p>
<p><span id="more-147"></span></p>
<p>Una vez creado, deberemos configurar nuestro servidor Apache y Drupal para funcionar en multisite, para ello, creamos una carpeta dentro de <em>sites/</em> con el nombre del primer dominio que vamos a incluir en nuestro multisite, por ejemplo <em>sites/midominio.com</em> (para ser originales). En este directorio es donde van a ir las carpetas modules y themes con los modulos y templates personalizados para el sitio web, además del directorio files (para los archivos que pueda subir el usuario, imágenes &#8230;) y el <em>settings.php.</em></p>
<p>El siguiente paso es copiar el fichero <em>settings.php</em> de <em>sites/default</em> a <em>sites/midominio.com</em> y modificar esta línea para incluir nuestros parámetros de conexión a la base de datos:<br />
<code><em>$db_url = 'mysql://<strong>username:password</strong>@localhost/<strong>databasename</strong>';</em></code><br />
Para poder acceder a nuestra web, tenemos que modificar el fichero Vhosts.conf que tenemos creado para trabajar con Virtual Hosts en Apache, le añadimos una entrada más.<br />
<code>&lt;VirtualHost *:80&gt;<br />
ServerName nombredenuestraweb.local.pc<br />
DocumentRoot /ruta_de_drupal<br />
&lt;Directory "/ruta_de_drupal"&gt;<br />
AllowOverride All<br />
Options -Indexes +FollowSymLinks MultiViews<br />
Order allow,deny<br />
Allow from all<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;</code></p>
<p><strong>Ojo:</strong> El dominio o zona local.pc deberá ser el que tenemos definido en nuestro servidor de DNS!</p>
<p>Viendo esta configuración, saltan a la vista dos cosas, la primera es la ruta de Drupal, tenemos que poner el directorio que contiene la instalación completa de Drupal y <strong>no</strong> la ruta <em>sites/midominio.com.</em></p>
<p>La otra cosa que puede llamar la atención es que nuestro dominio no se llama  <em>nombredenuestraweb.local.pc,</em> sino <em>midominio.com</em> y es así como se llama la carpeta para Drupal, tenemos dos opciones, o cambiamos el nombre de la carpeta de Drupal a <em>nombredenuestraweb.local.pc </em>y luego lo tenemos en cuenta cada vez que subamos al servidor de internet, o tomamos una decisión mucho más cómoda y creamos un <a href="http://en.wikipedia.org/wiki/Symbolic_link">link simbólico</a> que haga que todas las llamadas a <em>nombredenuestraweb.local.pc</em> referencien a <em>midominio.com.</em></p>
<p># <em>ln -s midominio.com nombredenuestraweb.local.pc</em></p>
<p>De esta forma, Drupal ya detectará correctamente las llamadas cuando se referencie a nuestra web por el dominio local, y cuando la subamos al servidor, no tendremos que modificar nada. Este link simbólico nos va a causar un problema si trabajamos con Eclipse, pero veremos como resolverlo más adelante, en los pasos de configuración de los equipos clientes.</p>
<p>La forma de instalar Drupal será la habitual a partir de ahora.</p>
<p>Si es una web que ya tenemos en Drupal, el siguiente paso sería exportar e importar la web para empezar a trabajar en local, esto lo podéis realizar mediante <em>mysqldump / mysql</em> , si tenéis acceso a la línea de comandos en el servidor, o si no con PHPMyAdmin.</p>
<p><strong>Ojo:</strong> Si tenéis problemas con la codificación de caracteres al exportar-importar (maldito latin1), echadle un vistazo a <a href="http://www.orthogonalthought.com/blog/index.php/2007/05/mysql-database-migration-and-special-characters/">esta página</a>.</p>
<p>Si la web es nueva, la instalación de drupal se realizará desde <em>nombredenuestraweb.local.pc/install.php </em>, si están configurados correctamente los parámetros de conexión a base de datos y los Virtual Hosts de Apache, Drupal ya estará operativo en multisite. Para añadir más sitios web en la misma instalación, simplemente incluiremos las nuevas web en sites/ y repetiremos los pasos de configuración de Apache, base de datos y link simbólicos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/147/configuracion-de-apache-para-utilizar-drupal-en-multisite/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Instalación de un servidor CVS.</title>
		<link>http://www.neuroticweb.com/blog/146/instalacion-de-un-servidor-cvs/</link>
		<comments>http://www.neuroticweb.com/blog/146/instalacion-de-un-servidor-cvs/#comments</comments>
		<pubDate>Wed, 21 Nov 2007 14:14:47 +0000</pubDate>
		<dc:creator>Pedro</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/146/instalacion-de-un-servidor-cvs/</guid>
		<description><![CDATA[Una vez configurado el Apache, vamos con la instalación de CVS. Antes de instalar el motor de CVS (incluye servidor y cliente), deberemos comprobar si ya está presente en nuestro sistema, si tenemos Ubuntu, es muy probable que ya lo &#8230; <a href="http://www.neuroticweb.com/blog/146/instalacion-de-un-servidor-cvs/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Una vez configurado el <a href="http://www.neuroticweb.com/blog/144/configuracion-del-servidor-apache-para-trabajar-con-virtual-hosts/">Apache</a>, vamos con la instalación de <a href="http://ximbiot.com/cvs/wiki/">CVS.</a></p>
<p>Antes de instalar el motor de CVS (incluye servidor y cliente), deberemos comprobar si ya está presente en nuestro sistema, si tenemos Ubuntu, es muy probable que ya lo tengamos instalados, simplemente debemos escribir en la linea de comandos:</p>
<blockquote><p><em>cvs </em></p></blockquote>
<p>Si nos devuelve algo como esto, es que ya lo tenemos instalado:</p>
<blockquote></blockquote>
<blockquote><p><em>Usage: cvs [cvs-options] command [command-options-and-arguments]<br />
where cvs-options are -q, -n, etc.<br />
(specify &#8211;help-options for a list of options)<br />
where command is add, admin, etc.<br />
(specify &#8211;help-commands for a list of commands<br />
or &#8211;help-synonyms for a list of command synonyms)<br />
where command-options-and-arguments depend on the specific command<br />
(specify -H followed by a command name for command-specific help)<br />
Specify &#8211;help to receive this message</em></p>
<p><em>The Concurrent Versions System (CVS) is a tool for version control.<br />
For CVS updates and additional information, see<br />
the CVS home page at http://www.nongnu.org/cvs/ or<br />
the CVSNT home page at http://www.cvsnt.org/</em></p></blockquote>
<p>Si no, deberemos instalarlo, mediante esta sentencia:</p>
<blockquote><p><em>        apt-get install cvs</em></p></blockquote>
<p>El siguiente paso será elegir la ruta donde vamos a situar nuestro repositorio de cvs y crearlo, se hace con un simple comando:</p>
<blockquote><p><em>        cvs -d /ruta_del_repositorio init </em></p></blockquote>
<p><span id="more-146"></span><br />
También deberemos añadir a nuestras variables de entorno lo siguiente:</p>
<p><em>    export CVSROOT=/ruta_del_repositorio</em></p>
<p>Para importar ficheros en el servidor, es necesario situarse en el directorio donde están dichos ficheros y ejecutar el siguiente comando</p>
<blockquote><p><em>        cvs import -m &#8220;Codigo importado&#8221; Origen/directorio vendor_tag release_tag</em></p></blockquote>
<p>Donde, -m &#8220;Codigo importado&#8221; es el mensaje que le asignamos a los módulos importados a CVS, Origen/directorio es <strong>la ruta relativa </strong>(cvs no admite rutas absolutas, por motivos de seguridad)<strong> </strong>de los ficheros que queremos importar, y finalmente, vendor_tag corresponde a la marca del autor del software (normalmente se utiliza más adelante para gestionar el código de terceros) y release_tag es la marca inicial del software.</p>
<p>Para una mejor gestión del repositorio, lo ideal es crear un grupo cvs que le asignaremos a los usuarios:</p>
<blockquote><p><em>    groupadd cvs</em></p></blockquote>
<p>También es necesario configurar los permisos <strong>dentro del repositorio</strong> que hemos creado:</p>
<blockquote><p><em>    chgrp -R cvs .<br />
chmod ug+rwx . CVSROOT</em></p></blockquote>
<p>El siguiente paso es imprescindible para aceptar conexiones desde los clientes al servidor, es la configuración del <em>inet.d</em> o del <em>xinet.d</em>, depende de lo que estemos utilizando para aceptar conexiones externas, la configuración para <em>inet.d</em> es mas simple,  en el fichero <em>/etc/inet.d</em> hay que añadir esta entrada<br />
<code>cvspserver stream tcp nowait root /usr/local/bin/cvs cvs<br />
--allow-root=/ruta_del_repositorio pserver </code><br />
Si es <em>xinet.d</em>, deberemos crear un fichero <em>cvspserver</em> en la carpeta <em>/etc/xinetd.d/ </em>con este contenido:<br />
<code>service cvspserver<br />
{<br />
port        = 2401<br />
socket_type = stream<br />
protocol    = tcp<br />
wait        = no<br />
user        = root<br />
passenv     = PATH<br />
server      = /usr/bin/cvs<br />
server_args = -f --allow-root=/ruta_del_repositorio pserver<br />
} </code><br />
<strong>Ojo: </strong>Es necesario realizar un reload del servicio, no es suficiente con reiniciarlo, para <em>xinet.d</em>:</p>
<blockquote><p>/etc/init.d/xinetd reload</p></blockquote>
<p>Ahora que ya tenemos el servidor de CVS iniciado y con ficheros cargos, es necesario crear los usuarios que van a acceder al repositorio. Es imprescindible que el usuario que vaya a acceder esté creado en el servidor a nivel de Sistema Operativo, así que, si el usuario no existe, ejecutamos el siguiente comando:</p>
<blockquote><p>useradd -g cvs -d /home_del_usuario -m -s /bin/bash usuario</p></blockquote>
<p>Y le asignamos una contraseña</p>
<blockquote><p>passwd usuario</p></blockquote>
<p>Si el usuario ya existe en cvs, le podemos asignar el grupo:</p>
<blockquote><p>adduser usuario cvs/blockquote&gt;<br />
Al servidor de CVS se puede acceder a través de varios protocolos, el más recomendable si está publicado al exterior es ssh, no es nuestro caso, ya que el servidor está publicado solamente en nuestra LAN, así que usaremos la mas simple, que es pserver o identificación mediante contraseña.</p>
<p>Para ello creamos un fichero llamado <em>passwd</em> en el directorio <em>CVSROOT</em> de nuestro repositorio (este directorio se genera automáticamente al crear el repositorio, dentro de la ruta que le hayamos especificado), que es el directorio que contiene todos los archivos de control y metadato de CVS.</p></blockquote>
<blockquote><p>touch /ruta_del_repositorio/CVSROOT/passwd</p></blockquote>
<p>El formato de este fichero es <em>usuario:contraseñaencriptada</em>.</p>
<p>Para obtener este pass encriptado, podemos utilizar el de /etc/passwd, o usar un script de generación de passwords:<br />
<code>#!/usr/bin/perl<br />
srand (time());<br />
my $randletter = "(int (rand (26)) +<br />
(int (rand (1) + .5) % 2 ? 65 : 97))";<br />
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);<br />
my $plaintext = <strong>[aqui la contraseña]</strong>;<br />
my $crypttext = crypt ($plaintext, $salt);<br />
print "${crypttext}\n";</code><br />
Para que los desarrolladores reciban notificaciones cuando otro ha modificado un fichero que ellos necesitan o están editando, hace falta configurar el fichero <em>notify</em> del directorio de <em>CVSROOT</em> se debe añadir la siguiente línea:<br />
<code>ALL mail %s -s "CVS notification"</code><br />
Y además, añadir un fichero llamado <em>users</em> en el mismo directorio que contenga información de los usuarios y sus correos electrónicos:<br />
<code>usuario1:direccion1@mail.com<br />
usuario2:direccion2@mail.com<br />
...</code><br />
Sobre CVS podéis encontrar más información en la página oficial del proyecto, y estas dos páginas tienen bastante información, <a href="http://www.ucolick.org/~de/CVSbeginner.html">http://www.ucolick.org/~de/CVSbeginner.html</a> y <a href="http://www.linuxfromscratch.org/blfs/view/cvs/server/cvsserver.html">http://www.linuxfromscratch.org/blfs/view/cvs/server/cvsserver.html</a></p>
<p><a href="http://www.linuxfromscratch.org/blfs/view/cvs/server/cvsserver.html"></a><br />
Lo siguiente a realizar es <a href="http://www.neuroticweb.com/blog/147/configuracion-de-apache-para-utilizar-drupal-en-multisite/">configurar el servidor Apache para utilizar Drupal con multisite</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/146/instalacion-de-un-servidor-cvs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Configuración del Servidor Apache para trabajar con Virtual Hosts.</title>
		<link>http://www.neuroticweb.com/blog/144/configuracion-del-servidor-apache-para-trabajar-con-virtual-hosts/</link>
		<comments>http://www.neuroticweb.com/blog/144/configuracion-del-servidor-apache-para-trabajar-con-virtual-hosts/#comments</comments>
		<pubDate>Wed, 21 Nov 2007 11:13:57 +0000</pubDate>
		<dc:creator>Pedro</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/144/configuracion-del-servidor-apache-para-trabajar-con-virtual-hosts/</guid>
		<description><![CDATA[Una vez configurado el servidor DNS para la LAN, ya podemos configurar el servidor Apache (estamos usando apache versión 2 en este caso) para que acceda a subdominios del tipo nombresite.local.neurotic (nuestro nombre de dominio en local). Si no tienes &#8230; <a href="http://www.neuroticweb.com/blog/144/configuracion-del-servidor-apache-para-trabajar-con-virtual-hosts/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Una vez configurado el <a href="http://www.neuroticweb.com/blog/143/instalacion-de-un-servidor-dns-bind9-en-debian/">servidor DNS para la LAN</a>, ya podemos configurar el servidor Apache (estamos usando apache versión 2 en este caso) para que acceda a subdominios del tipo <em>nombresite.local.neurotic </em>(nuestro nombre de dominio en local).</p>
<p>Si no tienes Apache 2 instalado, en Debian o Ubuntu, puedes instalarlo mediante esta sentencia:</p>
<p><em>        apt-get install  apache2</em></p>
<p>La ruta de instalación por defecto es <em>/etc/apache2</em></p>
<p>En el fichero <em>httpd.conf </em>se debe incluir la siguiente línea:<br />
<code><em>include /ruta_del_fichero/Vhosts.conf</em></code><br />
<strong>Nota:</strong>  la ruta del fichero <em>Vhosts.conf</em> puede estar en el mismo <em>/etc/apache2/conf.d/</em> o en cualquier directorio accesible.</p>
<p>Y el fichero <em>Vhosts.conf</em> deberá tener el siguiente formato:</p>
<p><code> namevirtualhost *:80<br />
&lt;VirtualHost *:80&gt;<br />
ServerName web1.local.neurotic<br />
DocumentRoot /ruta_de_la_web_1<br />
&lt;/VirtualHost&gt;<br />
&lt;VirtualHost *:80&gt;<br />
ServerName web2.local.neurotic<br />
DocumentRoot  /ruta_de_la_web_2<br />
&lt;/VirtualHost&gt;</code><br />
<span id="more-144"></span><br />
Para activar los cambios, solo será necesario recargar la configuración del servidor apache:<em>    </em></p>
<p><em>        /etc/init.d/apache2 reload</em></p>
<p>En las etiquetas de Virtual Hosts se pueden incluir multitud de opciones, para Drupal, a mi me va bien esta:<br />
<code>&lt;VirtualHost *:80&gt;<br />
ServerName web1.local.neurotic<br />
DocumentRoot /ruta_de_la_web_1<br />
&lt;Directory "/ruta_de_la_web_1"&gt;<br />
AllowOverride All<br />
Options -Indexes +FollowSymLinks MultiViews<br />
Order allow,deny<br />
Allow from all<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;</code></p>
<p><strong>Nota:</strong> La configuración *:80 es para resolver todas las peticiones realizadas por el puerto 80.</p>
<p><strong> Ojo:</strong> Esta configuración parece no llevarse bien con la configuración de <em>sites-avaliable / sites-enabled</em>, y puede que no sea adecuado tener ambas configuradas simultaneamente. Para corregir este aviso</p>
<p><code>VirtualHost *:80 -- mixing * ports and non-* ports with a<br />
NameVirtualHost address is not supported, proceeding with<br />
undefined results</code></p>
<p>Comentamos esta línea del fichero <em>/etc/apache2/apache2.conf </em></p>
<p><code>#Include /etc/apache2/sites-enabled/</code></p>
<p>Más sobre Virtual Host:<br />
<a href="http://www.openbsderos.org/wiki/index.php?title=Virtualhost">http://www.openbsderos.org/wiki/index.php?title=Virtualhost</a></p>
<p>El siguiente paso para configurar nuestro sandbox es <a href="http://www.neuroticweb.com/blog/146/instalacion-de-un-servidor-cvs/">instalar el servidor CVS</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/144/configuracion-del-servidor-apache-para-trabajar-con-virtual-hosts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instalación de un servidor DNS (Bind9) en Debian.</title>
		<link>http://www.neuroticweb.com/blog/143/instalacion-de-un-servidor-dns-bind9-en-debian/</link>
		<comments>http://www.neuroticweb.com/blog/143/instalacion-de-un-servidor-dns-bind9-en-debian/#comments</comments>
		<pubDate>Wed, 21 Nov 2007 10:35:47 +0000</pubDate>
		<dc:creator>Pedro</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/143/instalacion-de-un-servidor-dns-bind9-en-debian/</guid>
		<description><![CDATA[Este documento es parte de los pasos para instalar y configurar un Sandbox para Drupal con Eclipse y CVS. Si has llegado aquí, pero no sabes lo que es un servidor DNS, echale un vistazo a la wikipedia. Para instalar &#8230; <a href="http://www.neuroticweb.com/blog/143/instalacion-de-un-servidor-dns-bind9-en-debian/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Este documento es parte de los pasos para <a href="http://www.neuroticweb.com/blog/166/how-to-instalar-y-configurar-un-sandbox-para-drupal-con-eclipse-y-cvs-2/">instalar y configurar un Sandbox para Drupal con Eclipse y CVS</a>.</p>
<p>Si has llegado aquí, pero no sabes lo que es un servidor DNS, echale un vistazo a <a href="http://en.wikipedia.org/wiki/Domain_name_system">la wikipedia</a>.</p>
<p>Para instalar el BIND <font size="2">(<a href="http://www.bind9.net/"><em>Berkeley Internet Name Domain</em></a>):</font></p>
<blockquote>
<p align="left"><em> apt-get install bind9  </em></p>
</blockquote>
<p><strong>Ojo: </strong>Si el sistema lleva tiempo sin actualizarse será necesario realizar un <em>apt-get update</em> y luego instalar el bind.</p>
<p>Una vez finalizada la instalación, deberemos editar el fichero /etc/bind/named.conf.options para indicarle las direcciones de los DNS proporcionados por el ISP (en este caso Telefónica), en <em>forwarders</em>, también se debe descomentar la línea <em>query-source address * port 53;</em> y se debe añadir la sentencia <em>dnssec-enable yes;</em></p>
<p><code>options {<br />
directory "/var/cache/bind";<br />
// If there is a firewall between you and nameservers you want<br />
// to talk to, you might need to uncomment the query-source<br />
// directive below. Previous versions of BIND always asked<br />
// questions using port 53, but BIND 8.1 and later use an<br />
// </code><code>unprivileged </code><code>port by default.<br />
query-source address * port 53;<br />
// If your ISP provided one or more IP addresses for stable<br />
// nameservers, you probably want to use them as forwarders.<br />
// Uncomment the following block, and insert the addresses<br />
// </code><code>replacing </code><code>the all-0's placeholder.<br />
forwarders {<br />
80.58.61.250;<br />
80.58.61.254;<br />
};<br />
auth-nxdomain no; # conform to RFC1035<br />
listen-on-v6 { any; };<br />
dnssec-enable yes;<br />
};</code></p>
<p><span id="more-143"></span><br />
También se debe modificar el fichero 	/etc/resolv.conf , la parte de dominio no debe tocarse, y se debe 	añadir como primer nameserver, localhost, esto es:</p>
<p><code>search<br />
nameserver 127.0.0.1</code></p>
<p>Una vez hecho esto, se deben reiniciar los servicios de dns y de red</p>
<blockquote><p><em>/etc/init.d/networking restart<br />
/etc/init.d/bind9 restart</em></p></blockquote>
<p>Ahora mismo el servidor DNS debería estar operativo, pero para que el resto de sistemas de la red lo utilicen, deben configurarse para usarlo como servidor principal de DNS. Esto es, añadir la ip del servidor DNS en el fichero <em>/etc/resolv.conf </em>de cada cliente.</p>
<p>Queda un paso más, para que sea capaz de resolver las direcciones de los dominios definidos en red local, es necesario modificar dos ficheros más:</p>
<p><em>/etc/bind/named.conf.local</em></p>
<p><code>zone "local.neurotic" {<br />
type master;<br />
file "/etc/bind/db.local.neurotic";<br />
allow-query { any; };<br />
};</code></p>
<p>De esta forma las direcciones que terminen en <em>local.neurotic</em>, serán resueltas localmente.</p>
<p>El fichero<em> /etc/bind/db.local.neurotic </em>debe contener lo siguiente:</p>
<p><code>$TTL 604800<br />
@ IN SOA local.neurotic. hostmaster.local.neurotic. (<br />
2005052401 ; Serial yyyy/mm/dd/id<br />
10800 ; Refresh (3 hours)<br />
7200 ; Retry (2 hours)<br />
1296000 ; Expire (15 days)<br />
172800 ) ; Negative Cache TTL (2 days)<br />
;<br />
local.neurotic. IN NS ns1.local.neurotic.<br />
localhost IN A 127.0.0.1<br />
@ IN TXT "Servidor"<br />
@ IN HINFO "Servidor privado" "lan interno"<br />
;<br />
@ IN A 192.168.1.2<br />
* IN A 192.168.1.2</code></p>
<p><strong> Ojo:</strong> 192.168.1.2 es la IP local del servidor en la LAN.</p>
<p><strong>Ojo:</strong> Cuidado con los espacios en este fichero, el formato debe ser estricto, ya que sino dará muchos problemas.</p>
<p>Para que los cambios surtan efecto, se debe reiniciar el servidor DNS</p>
<blockquote>
<p align="left"><em>/etc/init.d/bind9 restart</em></p>
</blockquote>
<p>En este caso se ha utilizado local.neurotic para distinguir rápidamente si estamos trabajando con la web en local o en remoto, pero se puede poner cualquier dominio, el cual se resolvería primero en local.</p>
<p>Esto es una configuración simple para un servidor en una LAN, solamente se utiliza para resolución de nombres, si queréis extender la información, a mí me han servido de mucho estas tres referencias:</p>
<p><a href="http://www.yohnah.net/informatica/gnu_linux/bind9_dns_server_para_red_local_un_howto_para_los_que_tienen_prisa">http://www.yohnah.net/</a><br />
<a href="http://laespiral.org/articulos/bind/bind18052000.html#bindprimary">http://laespiral.org/articulos/bind/bind18052000.html#bindprimary</a><br />
<a href="http://manes.debian-cl.org/bind.html#Configuraci%F3n%20de%20un%20DNS%20primario"> http://manes.debian-cl.org/bind.html</a></p>
<p>El siguiente paso en nuestro servidor, será <a href="http://www.neuroticweb.com/blog/144/configuracion-del-servidor-apache-para-trabajar-con-virtual-hosts/">configurar el Apache 2 para trabajar con Virtual Hosts</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/143/instalacion-de-un-servidor-dns-bind9-en-debian/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Buscamos programador php en barcelona</title>
		<link>http://www.neuroticweb.com/blog/133/buscamos-programador-php-en-barcelona/</link>
		<comments>http://www.neuroticweb.com/blog/133/buscamos-programador-php-en-barcelona/#comments</comments>
		<pubDate>Thu, 31 May 2007 15:39:17 +0000</pubDate>
		<dc:creator>Jordi</dc:creator>
				<category><![CDATA[Neurotic]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/133/buscamos-programador-php-en-barcelona/</guid>
		<description><![CDATA[Neurotic busca a alguien que le apasione programar, que esté enamorado de internet y que no quiera hacer horas extras ni pasarse el día en el trabajo para cubrir una plaza presencial en Barcelona de programador de aplicaciones web basadas &#8230; <a href="http://www.neuroticweb.com/blog/133/buscamos-programador-php-en-barcelona/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Neurotic busca a alguien que le apasione programar, que esté enamorado de internet y que no quiera hacer horas extras ni pasarse el día en el trabajo para cubrir una plaza presencial en Barcelona de programador de aplicaciones web basadas en Drupal.</p>
<p>Ofrecemos:</p>
<p>- una jornada laboral de 32 horas semanales (7 horas de lunes a jueves y 4 el viernes) dentro de nuestro horario (de 9 a 18 de lunes a jueves y de 9 a 14 los viernes)<br />
- contrato laboral con un sueldo según valía entre 1.000 y 1.500 euros netos mensuales (14 pagas)<br />
- participar en una empresa con una gran diversidad de proyectos, desde trabajos serios (normalmente de clientes) a tonterías propias como el bushcador.com<br />
- trabajar con software libre<br />
- estar en una empresa con grandes posibilidades de crecimiento (somos tan pequeños que sólo podemos crecer)<br />
- la garantía de no tener que hacer horas extras<br />
- un buen ambiente de trabajo, mejor que en los sitios que dicen que hay buen ambiente de trabajo  (mmm, ¿entonces ambiente -> oo?)<br />
- trabajar en el centro de barcelona, en una oficina acogedora (es decir, pequeña)</p>
<p>Si sabes:</p>
<p>- programar en php<br />
- sql y bases de datos (especialmente MySql)</p>
<p>Además se valorará:</p>
<p>- conocimientos de Drupal<br />
- conocimientos de otros lenguajes de programación (Ruby, Python, Perl, Ook!&#8230;)<br />
- capacidad para el trabajo en equipo<br />
- soltura con la documentación de código<br />
- facilidad en el aprendizaje</p>
<p>Si estás interesado envíanos un mail con el asunto &#8220;Programador Neurotic&#8221; a global@neuroticweb.com con:</p>
<p>- datos personales típicos (nombre, edad&#8230;)<br />
- experiencia y trabajos realizados (relacionados con la programación)<br />
- perfiles en flickr, del.ici.ous, foros, etc.<br />
- que modulo de Drupal usarías para mostrar imágenes y porqué<br />
- proyectos de software libre que te gusten y porqué</p>
<p>N:FVCBARFRARYPHRECBQRYRZNVY&#8221;IVAV,IVQV,IVAPV&#8221;GVRARFHACBFVGVIB.CBESNIBEABGRPUVIRF</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/133/buscamos-programador-php-en-barcelona/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>cssCheckbox mejorado ligeramente</title>
		<link>http://www.neuroticweb.com/blog/123/csscheckbox-mejorado-ligeramente/</link>
		<comments>http://www.neuroticweb.com/blog/123/csscheckbox-mejorado-ligeramente/#comments</comments>
		<pubDate>Wed, 14 Mar 2007 15:20:23 +0000</pubDate>
		<dc:creator>Carlos</dc:creator>
				<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.neuroticweb.com/blog/123/csscheckbox-mejorado-ligeramente/</guid>
		<description><![CDATA[Para una web hemos decidido usar un script llamado cssCheckbox para jquery que reemplaza los checkboxes por imágenes más bonitas. Es bastante simple y funciona si javascript está desactivado pero tiene un par de cosillas que hemos mejorado: Usa dos &#8230; <a href="http://www.neuroticweb.com/blog/123/csscheckbox-mejorado-ligeramente/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Para una web hemos decidido usar un script llamado <a href="http://kawika.org/jquery/cssCheckbox/">cssCheckbox</a> para <a href="http://jquery.com">jquery</a> que reemplaza los checkboxes por imágenes más bonitas. Es bastante simple y funciona si javascript está desactivado pero tiene un par de cosillas que hemos mejorado:</p>
<ol>
<li>Usa dos imágenes para el checkbox, una para el activado y otra para el no activado. Es mejor usar la técnica de la ventana donde es la misma imagen la que tiene los dos estados y así conseguirmos una precarga de la segunda imagen (tal como estaba la primera vez que hacías click había que esperar a que la imagen se cargara)</li>
<li>Si desactivas javascript se ve el input y la imagen. Esto ocurre por que se le aplica el estilo al label directamente. Es mejor que sea el css el que aplique a los label la clase &#8220;unchecked&#8221; y así cuando no se tiene javascript no se ve nada raro</li>
</ol>
<p>Los cambios:</p>
<p>Para el plugin de jquery:<br />
<code>jQuery.fn.cssCheckbox = function () {<br />
   jQuery(&quot;input[@type='checkbox'] + label&quot;, this)<br />
    .each( function(){<br />
      if ( jQuery(this).prev()[0].checked )<br />
       jQuery(this).addClass(&quot;checked&quot;);<br />
     <strong>else<br />
      jQuery(this).addClass(&quot;unchecked&quot;);</strong><br />
})<br />
.hover(<br />
function() { jQuery(this).addClass(&quot;over&quot;); },<br />
function() { jQuery(this).removeClass(&quot;over&quot;); }<br />
)<br />
.click( function() {<br />
jQuery(this)<br />
.toggleClass(&quot;checked&quot;)<br />
.prev()[0].checked = !jQuery(this).prev()[0].checked;<br />
jQuery(this)<br />
	.toggleClass("unchecked")<br />
	.prev()[0].checked == jQuery(this).prev()[0].checked;<br />
})<br />
.prev().hide();<br />
}<br />
</code></p>
<p>Para el archivo de css:<br />
<code>    	label {<br />
    		padding-left: 25px;<br />
    		cursor: pointer;<br />
    	}<br />
    	label.unchecked {<br />
		background: url(/imagenes/checkbox_on_off.gif) no-repeat;<br />
		background-position: 0 -34px;<br />
	}<br />
	label.checked {<br />
		background: url(/imagenes/checkbox_on_off.gif) no-repeat;<br />
		background-position: 0 0;<br />
		font-weight: bold;<br />
	}<br />
	label.over {<br />
		color: black;<br />
	}<br />
</code></p>
<p>Todo lo otro es lo mismo que en <a href="http://kawika.org/jquery/cssCheckbox/">http://kawika.org/jquery/cssCheckbox/</a>. Para finalizar os dejo <a href="http://www.neuroticweb.com/recursos/jquery-css-Checkbox/">una demo</a></p>
<p>David de <a href="http://www.maskotas.es">maskotas.es</a> (creo) ha dejado en los comentarios la versión para <a href="http://kawika.org/jquery/cssRadio/">cssRadio</a></p>
<p><code>jQuery.fn.cssRadio = function () {</p>
<p>	var context = this;</p>
<p>	jQuery("input[@type='radio'] + label", this)<br />
		.each( function(){<br />
			if ( jQuery(this).prev()[0].checked )<br />
				jQuery(this).addClass("checked");<br />
<strong>                  else<br />
                                jQuery(this).addClass("unchecked");</strong><br />
			})<br />
		.hover(<br />
			function() { $(this).addClass("over"); },<br />
			function() { $(this).removeClass("over"); }<br />
			)<br />
		.click( function() {<br />
			jQuery("input[@type='radio'] + label", context)<br />
				.each( function() {<br />
					jQuery(this)<br />
						.removeClass()<br />
<strong>                                          .addClass("unchecked")</strong><br />
						.prev()[0].checked = false;<br />
				});<br />
			jQuery(this)<br />
				.addClass("checked")<br />
				.prev()[0].checked = true;<br />
			})<br />
		.prev().hide();<br />
}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neuroticweb.com/blog/123/csscheckbox-mejorado-ligeramente/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

