<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="http://feeds.feedburner.com/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>pragone.com</title>
	
	<link>http://pragone.com</link>
	<description>desarrollo, comunidad y monetización</description>
	<pubDate>Tue, 10 Jun 2008 21:30:59 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/pragone" type="application/rss+xml" /><item>
		<title>Integrar phpBB3 con tu sitio. (2da integración, 1ra parte)</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/309112628/52</link>
		<comments>http://pragone.com/proyectos/integrar-phpbb3-con-tu-sitio-2da-integracion-1ra-parte/52#comments</comments>
		<pubDate>Tue, 10 Jun 2008 21:22:33 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Proyectos]]></category>

		<category><![CDATA[howto]]></category>

		<category><![CDATA[integración]]></category>

		<category><![CDATA[integrar]]></category>

		<category><![CDATA[interfaz]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[phpbb]]></category>

		<category><![CDATA[phpbb3]]></category>

		<category><![CDATA[registro]]></category>

		<category><![CDATA[tutorial]]></category>

		<category><![CDATA[usuario]]></category>

		<guid isPermaLink="false">http://pragone.com/?p=52</guid>
		<description><![CDATA[Este artículo es parte de un conjunto de artículos/tutoriales sobre cómo integrar phpBB3 con otro sistema.
Puedes ir al artículo principal sobre cómo integrar phpBB3 con tu sitio para ver las distintas formas de integración
Este es el segundo artículo o tutorial de la serie sobre cómo integrar phpBB3 con tu sitio.
phpBB3 es un excelente paquete de [...]]]></description>
			<content:encoded><![CDATA[<div style="border:1px solid darkgray; width:95%; margin: 10px; padding: 6px; background-color:#ddddaa">Este artículo es parte de un conjunto de artículos/tutoriales sobre cómo integrar phpBB3 con otro sistema.<br />
Puedes ir al artículo principal sobre <a style="text-decoration:underline; font-weight:bold" title="tutoriales para integrar phpBB3 con tu sitio" href="http://pragone.com/proyectos/integracion-de-phpbb3-con-tu-sitio/47">cómo integrar phpBB3 con tu sitio</a> para ver las distintas formas de integración</div>
<p>Este es el segundo artículo o tutorial de la serie sobre cómo <a title="Tutorial sobre cómo integrar phpBB3 con tu sitio" href="http://pragone.com/proyectos/integracion-de-phpbb3-con-tu-sitio/47" target="_blank">integrar phpBB3</a> con tu sitio.</p>
<p><a title="phpBB un software de foro gratuito" href="http://www.phpbb.com" target="_blank">phpBB3</a> es un excelente paquete de foros gratuito, escrito en PHP+MySQL. Debido a su gran utilidad y al hecho de que es de código abierto (free as in beer and speech), una de las cosas que muchos queremos hacer es integrarlo con algún otro sistema que tengamos, para poder ofrecer la excelente funcionalidad del foro, sin que esto complique la experiencia del usuario en el sitio.</p>
<p>En este artículo se trata la segunda integración descrita en el artículo: <a title="tutoriales para integrar phpBB3 con tu sitio" href="http://pragone.com/proyectos/integracion-de-phpbb3-con-tu-sitio/47">cómo integrar phpBB3 con tu sitio</a>:</p>
<h3>Al crear un usuario en el otro sistema, automáticamente se crea un usuario en phpBB3 y hacer login en uno de ellos automáticamente te loguea en el otro.</h3>
<p>Esta es una integración un poco más compleja que la anterior y por lo tanto la divido en dos partes. En esta hablo sobre cómo hacer para que al registrar a un usuario en &#8220;el otro sistema&#8221; (el que no es phpBB3), automáticamente quede registrado en el foro. La segunda parte la dejo para otro artículo por ser un poco más compleja y depender de la configuración de los dos sitios (si están o no en el mismo dominio o subdominio).</p>
<h3>La idea básica</h3>
<p>phpBB3 está muy bien hecho, el código es muy modular y es fácil de navegar. Por esto, cuando estudiamos cómo hace phpBB3 la creación de un nuevo usuario nos encontramos con lo que buscamos en el archivo includes/ucp/ucp_register.php [<a title="Source code at code.phpbb.com" href="http://code.phpbb.com/repositories/entry/5/tags/release_3_0_1/phpBB/includes/ucp/ucp_register.php?rev=8499" target="_blank">code</a>] (luego de sortear mucho código de validación).</p>
<p>Para crear un nuevo usuario nos bastaría con este código:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* GetUserIp: 
	 *
	 * Taken from: http://forums.whirlpool.net.au/forum-replies-archive.cfm/976380.html
	 *
	 */</span>
&nbsp;
	<span style="color: #000066;">define</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'IN_PHPBB'</span><span style="color: #66cc66;">,</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$phpbb_root_path</span> <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">defined</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'PHPBB_ROOT_PATH'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> ? PHPBB_ROOT_PATH <span style="color: #66cc66;">:</span> <span style="color: #ff0000;">'./'</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$phpEx</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">strrchr</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">__FILE__</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'.'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #b1b100;">require</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$phpbb_root_path</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000;">'common.'</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000">$phpEx</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #b1b100;">require</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$phpbb_root_path</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000;">'includes/functions_user.'</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000">$phpEx</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #b1b100;">require</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$phpbb_root_path</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000;">'includes/functions_module.'</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000">$phpEx</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> GetUserIP<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">isset</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$_SERVER</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">isset</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'HTTP_X_FORWARDED_FOR'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #ff0000">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'HTTP_X_FORWARDED_FOR'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">isset</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'HTTP_CLIENT_IP'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #ff0000">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'HTTP_CLIENT_IP'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #ff0000">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'REMOTE_ADDR'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">getenv</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'HTTP_X_FORWARDED_FOR'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000066;">getenv</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'HTTP_X_FORWARDED_FOR'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">getenv</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'HTTP_CLIENT_IP'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000066;">getenv</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'HTTP_CLIENT_IP'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000066;">getenv</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'REMOTE_ADDR'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #ff0000">$user_name</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'paolo123'</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$user_pass</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'shh123'</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$user_email</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'usuario@servidor.de.correo'</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$user_lang</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'es'</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$user_ip</span> <span style="color: #66cc66;">=</span> GetUserIP<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #ff0000">$sql</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'SELECT group_id
		FROM '</span> <span style="color: #66cc66;">.</span> GROUPS_TABLE <span style="color: #66cc66;">.</span> <span style="color: #ff0000;">&quot;
		WHERE group_name = 'REGISTERED'
			AND group_type = &quot;</span> <span style="color: #66cc66;">.</span> GROUP_SPECIAL<span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$result</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$sql</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$row</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_fetchrow</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$result</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_freeresult</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$result</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">!</span><span style="color: #ff0000">$row</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #000066;">trigger_error</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'NO_GROUP'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #ff0000">$group_id</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$row</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'group_id'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">// Utilizamos el uso horario del foro</span>
	<span style="color: #ff0000">$is_dst</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$config</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'board_dst'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>	
	<span style="color: #ff0000">$timezone</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$config</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'board_timezone'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">// Reunimos toda la data del nuevo usuario</span>
	<span style="color: #ff0000">$user_row</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
		<span style="color: #ff0000;">'username'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$user_name</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_password'</span>		<span style="color: #66cc66;">=&gt;</span> phpbb_hash<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$user_pass</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_email'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$user_email</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'group_id'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span> <span style="color: #ff0000">$group_id</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_timezone'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #66cc66;">&#40;</span>float<span style="color: #66cc66;">&#41;</span> <span style="color: #ff0000">$timezone</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_dst'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$is_dst</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_lang'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$user_lang</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_type'</span>		<span style="color: #66cc66;">=&gt;</span> USER_NORMAL<span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_actkey'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000;">''</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_ip'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$user_ip</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_regdate'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #000066;">time</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_inactive_reason'</span>	<span style="color: #66cc66;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_inactive_time'</span>	<span style="color: #66cc66;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #66cc66;">,</span>
	<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">// Register user...</span>
	<span style="color: #ff0000">$user_id</span> <span style="color: #66cc66;">=</span> user_add<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$user_row</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$cp_data</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">// This should not happen, because the required variables are listed above...</span>
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$user_id</span> <span style="color: #66cc66;">===</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #000066;">trigger_error</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'NO_USER'</span><span style="color: #66cc66;">,</span> <span style="color: #000000; font-weight: bold;">E_USER_ERROR</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Este código crea un usuario con nombre &#8216;paolo123&#8242; y clave &#8217;shh123&#8242;. Este será un usuario idéntico a cualquier otro usuario que se haya registrado siguiendo el proceso normal del foro. </p>
<h3>Consideraciones finales</h3>
<p>Importante indicar que este código está pensado para ejecutar en un archivo que estuviera en la carpeta raíz del foro, por lo que si no es este el caso, habría que modificar la declaración del principio que dice: <code>$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';</code> cambiando el &#8216;./&#8217; por la ruta relativa o absoluta de la carpeta raíz del foro.</p>
<p><strong>Importante:</strong> Crear el usuario de esta forma, salta todas las verificaciones que hay normalmente en el foro, por lo que es importante asegurarse de que todos los datos son válidos.</p>
<p>La forma de integrar este código con tu sistema la dejo a discreción del usuario, ya que variaría mucho dependiendo del sistema desde el que se invoque&#8230; lo único que hay que tener presente son los datos que necesita este código para ejecutar: <code>$user_name, $user_pass, $user_email, $user_lang</code> y <code>$user_ip</code>.</p>
<p>En el próximo artículo de esta &#8220;serie&#8221; trataré el tema de la segunda parte de esta integración: el manejo de sesiones&#8230; Cómo hacer que cuando un usuario se identifique en uno de los sistemas, quede identificado en el otro también.</p>
<p>Espero les sirva.</p>
]]></content:encoded>
			<wfw:commentRss>http://pragone.com/proyectos/integrar-phpbb3-con-tu-sitio-2da-integracion-1ra-parte/52/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/proyectos/integrar-phpbb3-con-tu-sitio-2da-integracion-1ra-parte/52</feedburner:origLink></item>
		<item>
		<title>Integración de phpBB3 con tu sitio</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/307336962/47</link>
		<comments>http://pragone.com/proyectos/integracion-de-phpbb3-con-tu-sitio/47#comments</comments>
		<pubDate>Sun, 08 Jun 2008 12:43:42 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Proyectos]]></category>

		<category><![CDATA[howto]]></category>

		<category><![CDATA[integración]]></category>

		<category><![CDATA[integrar]]></category>

		<category><![CDATA[interfaz]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[phpbb3]]></category>

		<category><![CDATA[registro]]></category>

		<category><![CDATA[tutorial]]></category>

		<category><![CDATA[usuario]]></category>

		<guid isPermaLink="false">http://pragone.com/?p=47</guid>
		<description><![CDATA[Hace un tiempo, escribí un artículo sobre cómo integrar phpBB3 con tu sitio.
Este post ha tenido bastantes visitas, lo que me lleva a pensar que no hay mucha literatura en español al respecto y que sí hay mucho interés&#8230;. por lo que he decidido que escribiré un conjunto de artículos sobre cómo hacer las integraciones.
Lo [...]]]></description>
			<content:encoded><![CDATA[<p>Hace un tiempo, escribí un artículo sobre <a title="¿Cómo integrar phpBB3 con tu sitio?" href="http://pragone.com/proyectos/como-integrar-phpbb3-con-tu-sitio/38" target="_blank">cómo integrar phpBB3 con tu sitio</a>.</p>
<p>Este post ha tenido bastantes visitas, lo que me lleva a pensar que no hay mucha literatura en español al respecto y que sí hay mucho interés&#8230;. por lo que he decidido que escribiré un conjunto de artículos sobre cómo hacer las integraciones.</p>
<p>Lo primero, es que hay muchas formas de integrar phpBB3 con otro sitio web. Las cosas que necesitas hacer dependen de cómo desees que sea esa integración, y por eso el primer paso es tener claro cómo quieres integrar phpBB3 a tu sitio.</p>
<p>Primero que nada, definamos una &#8220;nomenclatura&#8221; para entender bien las distintas formas de integración:</p>
<h2>Partes de los sistemas</h2>
<h3>Registro de usuarios</h3>
<p>Es el conjunto de páginas y el código que se encarga de crear un nuevo usuario en el sistema.</p>
<h3>Identificación</h3>
<p>Una vez creado el usuario, este es el conjunto de páginas y código que se encarga de verificar la información de usuario/clave contra la base de datos de usuarios y que da acceso a un usuario registrado al sitio.</p>
<h3>Manejo de sesión</h3>
<p>Son las porciones de código (nada visible para el usuario) que le indican al sistema si quien está solicitando una página específica es un usuario registrado que ya se ha identificado en la página. Por lo general se maneja a través de Cookies en el navegador del usuario.</p>
<h3>Mis Datos</h3>
<p>Son las páginas en las que el usuario puede entrar para modificar su información (cambio de clave, email, etc).</p>
<h3>Información del sistema</h3>
<p>Con información del sistema me refiero a distintos datos de uno de los sistemas que se podría querer mostrar. Por ejemplo: Número de usuarios registrados en el foro, número de hilos del foro, etc.</p>
<p>Lo mismo para el otro sistema (si por ejemplo el otro sistema es un blog, último post, número de comentarios de un post particular, etc).</p>
<p>Ya habiéndole dado nombre a todo esto, el escenario que nos encontramos al iniciar la integración es este:</p>
<p><img class="aligncenter size-full wp-image-49" title="Partes de los sistemas" src="http://pragone.com/wp-content/uploads/2008/06/parts.jpg" alt="Partes de los sistemas" width="500" height="385" /></p>
<p><strong>Leyenda:</strong></p>
<p>- Cada columna es un módulo.<br />
- La primera fila es la capa de presentación, es decir, las páginas que se le muestra al usuario.<br />
- La segunda fila es la capa de lógica o aplicación, es decir, el código que se ejecuta para realizar la acción solicitada en la página.</p>
<h2>Formas de Integración</h2>
<p>Ya teniendo un estándar para definir las distintas partes, una integración no es más que sustituir o modificar algunas de estas partes en uno de los sistemas por la misma parte en el otro (probablemente con nuevo código).</p>
<p>Algo importante al decidir cómo hacer la integración es que, por más que se deseen integrar los sistemas, siempre se deberá preservar la base de datos de usuarios de cada uno de ellos. Esto es así porque de lo contrario la cantidad de cambios sería muy grande y haría muy difícil que en el futuro se puedan actualizar los sistemas.</p>
<p>Hay muchas formas de realizar la integración entre el phpBB3 y el otro sistema. Lo que haré será escribir distintos artículos explicando cada una de las formas de integración, e iré enlazándolos desde este post a medida que vayan saliendo.</p>
<h3>Integración 1: phpBB3 usa la base de datos de usuario del otro sistema para autenticar a los usuarios. Los usuarios de phpBB3 se crean de forma pasiva.</h3>
<p>[<a title="Integrar phpBB3 con otro sistema. Modalidad 1" href="http://pragone.com/proyectos/como-integrar-phpbb3-con-tu-sitio/38" target="_blank">Ir directamente al artículo</a>]</p>
<p>Esta es la integración más sencilla (gracias a que phpBB3 implementa módulos de autenticación).</p>
<p>Estas son las características de esta integración:</p>
<ul>
<li>El registro de usuarios está completamente deshabilitado en el phpBB3</li>
<li>No se puede alterar la información del usuario en phpBB3.</li>
<li>Al realizar el login en phpBB3, la información del usuario es contrastada con la base de datos de usuario del otro sistema</li>
<li>En caso de que sea la primera vez que un usuario válido del otro sistema entra al phpBB3, un nuevo usuario es creado de forma &#8220;automágica&#8221; en el phpBB3.</li>
<li>Cada sistema maneja sus sesiones de forma independiente.</li>
<li>No se muestra información de un sistema en el otro</li>
</ul>
<p>Gráficamente sería así:</p>
<p><a href="http://pragone.com/proyectos/como-integrar-phpbb3-con-tu-sitio/38"><img class="aligncenter size-full wp-image-50" title="Integración 1: phpBB3 usa la base de datos de usuario del otro sistema para autenticar a los usuarios" src="http://pragone.com/wp-content/uploads/2008/06/integracion1.jpg" alt="Integración 1: phpBB3 usa la base de datos de usuario del otro sistema para autenticar a los usuarios" width="500" height="385" /></a></p>
<p>Aquí está el post en el que se explica <a title="Integrar phpBB3 con otro sistema. Modalidad 1" href="http://pragone.com/proyectos/como-integrar-phpbb3-con-tu-sitio/38" target="_blank">cómo hacer esta integración de phpBB3</a>.</p>
<h3>Integración 2: Al crear un usuario en el otro sistema, automáticamente se crea un usuario en phpBB3 y hacer login en uno de ellos automáticamente te loguea en el otro.</h3>
<p>[<a title="Integrar phpBB3 con otro sistema. Modalidad 2" href="http://pragone.com/proyectos/integrar-phpbb3-con-tu-sitio-2da-integracion-1ra-parte/52" target="_blank">Ir directamente a la primera parte artículo</a>]</p>
<p>Esta integración es diferente de la anterior porque los usuario son creados en phpBB3 de forma activa, es decir, aunque el usuario no haya entrado en el phpBB3 ya su usuario existe.</p>
<p>Estas son las características de esta integración:</p>
<ul>
<li>El registro de usuarios está deshabilitado en uno de los sistemas (aquí se explica con el registro de usuarios deshabilitado en el phpBB3, aunque podría ser en el otro sentido).</li>
<li>Cuando un usuario se registra en el otro sistema, se crea un nuevo usuario tanto en la base de datos del otro sistema como en la de phpBB3</li>
<li>No se puede alterar la información del usuario en el sistema en el que el registro esté deshabilitado (en este caso, no se puede alterar la información en phpBB3).</li>
<li>Al realizar el login en cualquiera de los dos sistemas, la información del usuario es contrastada con la base de datos de dicho sistema, pero se inician las sesiones en ambos, de forma de que basta un login en alguno de ellos para estar logueado en ambos.</li>
<li>No se muestra información de un sistema en el otro</li>
</ul>
<p>Gráficamente sería así:</p>
<p><img class="aligncenter size-full wp-image-51" title="Integracion 2: Creación activa de usuarios" src="http://pragone.com/wp-content/uploads/2008/06/integracion2.jpg" alt="Integracion 2: Creación activa de usuarios" width="500" height="276" /></p>
<p>He dividido este artículo en dos partes:</p>
<ol>
<li>Creación del usuario: <a title="Integrar phpBB3 con otro sistema. Modalidad 2" href="http://pragone.com/proyectos/integrar-phpbb3-con-tu-sitio-2da-integracion-1ra-parte/52" target="_blank">Ver artículo</a></li>
<li>Manejo de sesiones: <span style="color: #ff6600;"><strong>[pronto estará disponible]</strong></span></li>
</ol>
<h2>Más integraciones</h2>
<p>Hay muchas formas de hacer las integraciones. Estaré describiendo las distintas formas dependiendo de lo que sea más solicitado. Deja un comentario solicitando la explicación de una integración si no la ves aquí.</p>
<p>Algunas integraciones ya han sido solicitadas y estoy trabajando en nuevos posts para explicarlas.</p>
<p>También son bienvenidos comentarios en los que me indiques si te sirvió o no alguna integración en particular. Estos comentarios hazlos, por favor, en el post específico de esa forma de integración.</p>
]]></content:encoded>
			<wfw:commentRss>http://pragone.com/proyectos/integracion-de-phpbb3-con-tu-sitio/47/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/proyectos/integracion-de-phpbb3-con-tu-sitio/47</feedburner:origLink></item>
		<item>
		<title>Canje de licencia de conducir de Venezuela a España</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/300758025/46</link>
		<comments>http://pragone.com/interesante/canje-de-licencia-de-conducir-de-venezuela-a-espana/46#comments</comments>
		<pubDate>Thu, 29 May 2008 19:08:24 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Interesante]]></category>

		<category><![CDATA[canje]]></category>

		<category><![CDATA[dgt]]></category>

		<category><![CDATA[españa]]></category>

		<category><![CDATA[formulario]]></category>

		<category><![CDATA[licencia conducir]]></category>

		<category><![CDATA[trámite]]></category>

		<category><![CDATA[venezuela]]></category>

		<guid isPermaLink="false">http://pragone.com/?p=46</guid>
		<description><![CDATA[He querido crear este post con algo de información sobre cómo hacer el canje de licencia de conducir de Venezuela a España.
Gracias a un convenio firmado entre Venezuela y España es posible hacer el canje de la licencia de conducir venezolana por la española sin necesidad de realizar ningún examen adicional (para licencias de tercer [...]]]></description>
			<content:encoded><![CDATA[<p>He querido crear este post con algo de información sobre cómo hacer el canje de licencia de conducir de Venezuela a España.</p>
<p>Gracias a un convenio firmado entre Venezuela y España es posible hacer el canje de la licencia de conducir venezolana por la española sin necesidad de realizar ningún examen adicional (para licencias de tercer grado o menor).</p>
<p>Aunque tengo amigos que han realizado el proceso sin ningún problema, yo me he encontrado alguno (de hecho todavía estoy en el proceso)&#8230; por lo que decidí escribir al respecto con lo que espero ayude a otros.</p>
<h2>Primer paso: Solicitar cita para el canje</h2>
<p>Para poder realizar el canje lo primero que se debe hacer es solicitar una cita a la <a title="Dirección General de Tránsito" href="http://www.dgt.es" target="_blank">DGT</a> (Dirección General de Tránsito). Esto se puede hacer por teléfono, llamando al: <strong>902 30 01 75</strong>, o, en teoría, por la web de la DGT en este enlace: <a title="Solicitud cita de canje de licencia" href="https://canjes.dgt.es/CANJES-DGT/canjes/index_canjes.jsp?formulario=si" target="_blank">https://canjes.dgt.es/CANJES-DGT/canjes/index_canjes.jsp?formulario=si</a>. Digo en teoría, porque a mi nunca me ha funcionado.</p>
<p>Para esto necesitarás haberte registrado en como extranjero, es decir, tener un N.I.E. (Número de Identificación de Extranjero), y, evidentemente, una licencia de conducir venezolana.</p>
<p>Nota: Cuando te pregunten el número de la licencia, da tu mismo número de cédula (no el número que está en la parte de atrás de la licencia).</p>
<p>Solicitar la cita es un proceso rápido, aunque en ocasiones puedes tener que esperar unos cuantos minutos para ser atendido&#8230; lo que no es tan inmediato es la fecha de la cita. En mi caso la solicité en Diciembre de 2007 y me la dieron para Mayo del 2008&#8230; 5 meses!</p>
<h2>Segundo paso: Preparación para el día de la cita</h2>
<p>La cita, es en la oficina de la DGT de tu provincia. (En el caso de Madrid es en Arturo Soria 125). Los requesitos que se deben presenta varían según la fuente. La página web dice una cosa, el papel que tienen en la DGT dice otra y otros documentos que puedes conseguir en la red dicen otras. Yo colocaré aquí los del papel de la DGT que son los que usa el personal de la DGT, así que es el que doy por bueno:</p>
<ul>
<li>Solicitud en impreso oficial: Te la darán el día de la cita, de todas formas, aquí pongo un <a title="Formulario solicitud de canje" href="https://canjes.dgt.es/CANJES-DGT/canjes/images/Mod2-40.pdf" target="_blank">enlace al formulario</a> (PDF)</li>
<li>Tasa de 18.20 € (a la fecha de escritura de esto aunque varía en el tiempo): Se paga ahí mismo en la DGT en caja.</li>
<li>Original (y yo llevaría una copia) de la Tarjeta de Residencia (NIE). Si no lo tienes y tienes nacionalidad de un país de la comunidad europeo, entonces solicita un Certificado de Inscripción en el Registro General de Extranjeros (<a title="Formulario solicitud de Certificado de Inscripción" href="http://www.mir.es/SGACAVT/modelos/extranjeria/modelos_extranje/" target="_blank">link al formulario</a>)</li>
<li>Original y fotocopia de la licencia de conducir en vigor</li>
<li>Original y fotocopia de la cédula de identidad venezolana o del pasaporte venezolano</li>
<li>Declaración del titular: También te lo dan ahí el día de la cita y básicamente es un formulario en el que indicas que no tienes ningún impedimento legal para poder conducir.</li>
<li>Dos fotografías tipo carnet (aunque necesitarás una más para el examen psicofísico).</li>
<li>Informe de aptitud psicofísica: Debe ser de la misma provincia en la que residas y en la que estás tramitando el canje. Puedes conseguir uno que quede cerca en esta lista de <a title="Dónde hacer la prueba de aptitud psicofísica" href="http://www.educacionvial.dgt.es/tramites/crc/crc.htm" target="_blank">centros de aptitud psicofísica</a></li>
</ul>
<p>Otra cosa que dice el papel es que si tu permiso de conducir ha sido expedido después del 24 de Julio de 2006, sólo se canjearán si han sido obtenidos antes de residir en España (supongo que es para evitar que alguien le pague a un gestor para que te saque la licencia en Venezuela y te la mande por correo <img src='http://pragone.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</p>
<h2>Tercer paso: el día de la cita</h2>
<p>El día de la cita, ve lo más temprano posible&#8230; no importa la hora a la que estés citado. Esa hora sólo es de referencia&#8230; Esto es lo que debes hacer:</p>
<p>1.- Ve a la primera planta a donde dice: &#8220;Información de canje de licencia extranjeros&#8221;: Ahí presentas tu NIE y verifican que tengas cita ese día. Te deben dar:</p>
<ul>
<li>El formulario de solicitud</li>
<li>La declaración en la que dices que nada te impide hacer el trámite</li>
<li>Un número para ser atendido</li>
</ul>
<p>2.- Rellena el formulario de solicitud y cruza la sala a la parte de caja para particulares. Ahí pagarás la tasa correspondiente al trámite.</p>
<p>3.- Subes al cuarto piso y esperas a que te toque el turno. Una vez ahí presentas todos los documentos y listo.</p>
<h2>Problemas posibles. Cómo saber si todo va bien</h2>
<p>Bueno&#8230; desgraciadamente, puedo hablarles de un problema que he tenido. El primer paso (solicitar la cita) hace que la DGT solicite a Venezuela la confirmación de los datos de tu licencia. En mi caso, 5 meses luego de haber solicitado la cita todavía no tenían confirmación. De hecho puedes entrar en: <a title="Consulta de estado de la solicitud" href="https://canjes.dgt.es/CANJES-DGT/canjes/index_canjes.jsp?consulta=estado" target="_blank">https://canjes.dgt.es/CANJES-DGT/canjes/index_canjes.jsp?consulta=estado</a>, colocar tu NIE y ver si ya han recibido la confirmación. En mi caso no la tenían, así que sigo esperando y tratando de solicitar una nueva cita para que vuelvan a enviar la solicitud.</p>
<p>Bueno, espero que sea de ayuda, si lo fué deja un comentario <img src='http://pragone.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Si algún enlace está roto o si hay algún cambio en los requisitos deja un comentario y lo corregiré. <strong>No garantizo que la información aquí expuesta esté actualizada.</strong> Esta ha sido mi experiencia.</p>
]]></content:encoded>
			<wfw:commentRss>http://pragone.com/interesante/canje-de-licencia-de-conducir-de-venezuela-a-espana/46/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/interesante/canje-de-licencia-de-conducir-de-venezuela-a-espana/46</feedburner:origLink></item>
		<item>
		<title>Escribir libros de forma colaborativa: Un draft de concepto</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/297727881/45</link>
		<comments>http://pragone.com/interesante/escribir-libros-de-forma-colaborativa-un-draft-de-concepto/45#comments</comments>
		<pubDate>Sun, 25 May 2008 12:28:44 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Interesante]]></category>

		<category><![CDATA[concepto]]></category>

		<category><![CDATA[ebook]]></category>

		<category><![CDATA[libro colaborativo]]></category>

		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://pragone.com/?p=45</guid>
		<description><![CDATA[El experimento de Javier al crear una Guía de SEO, basado en lo que ha escrito en el blog de VSEO, me ha parecido muy interesante, por lo que se me ha ocurrido que sería interesante poder contar con una herramienta que permitiera editar y seleccionar este contenido de forma colaborativa.
Estuve buscando y me pareció [...]]]></description>
			<content:encoded><![CDATA[<p>El experimento de Javier al crear una <a title="Guía de SEO" href="http://www.vseo.es/buscadores/seo-guia-de-referencia/" target="_blank">Guía de SEO</a>, basado en lo que ha escrito en el blog de VSEO, me ha parecido muy interesante, por lo que se me ha ocurrido que sería interesante poder contar con una herramienta que permitiera editar y seleccionar este contenido de forma colaborativa.</p>
<p>Estuve buscando y me pareció que algo ya debía existir&#8230; pero no he encontrado nada realmente útil. Lo más cercano fue un &#8220;hack&#8221; para MediaWiki (el software de la Wikipedia): <a href="http://meta.wikimedia.org/wiki/PDF_Export" target="_blank">PDF Export</a>&#8230; pero la verdad está muy verde.</p>
<p>Así que aquí lanzo el concepto de cómo me parece que se podría hacer:</p>
<p>Debería ser una mezcla entre una Wikipedia y Digg.</p>
<p>Este software debería por un lado mantener un índice básico de secciones en el que esboces los capítulos y categorías del contenido. Básicamente, darle un orden.</p>
<p>Esto te permitiría que pudieras publicar posts del blog bajo una categoría específica. Una vez que el contenido se haya copiado a la nueva plataforma, se podría editar estilo Wiki por cualquier persona, aunque habría un &#8220;editor&#8221; que decide qué se queda y qué no.</p>
<p>Además de esto, los usuarios podrían votar sobre cada artículo para indicar si les ha sido útil, si les parece que se encuentra desactualizado, erroneo, etc, y colocar sus comentarios.</p>
<p>Y finalmente, un módulo para organizar estilos y para generar el PDF a partir de todo el contenido.</p>
<p>En fin, me parece que es un concepto interesante.</p>
]]></content:encoded>
			<wfw:commentRss>http://pragone.com/interesante/escribir-libros-de-forma-colaborativa-un-draft-de-concepto/45/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/interesante/escribir-libros-de-forma-colaborativa-un-draft-de-concepto/45</feedburner:origLink></item>
		<item>
		<title>Una guía de SEO</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/297718014/44</link>
		<comments>http://pragone.com/interesante/una-guia-de-seo/44#comments</comments>
		<pubDate>Sun, 25 May 2008 12:10:45 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Interesante]]></category>

		<category><![CDATA[creative commons]]></category>

		<category><![CDATA[ebook]]></category>

		<category><![CDATA[español]]></category>

		<category><![CDATA[guía]]></category>

		<category><![CDATA[libro]]></category>

		<category><![CDATA[seo]]></category>

		<category><![CDATA[vseo]]></category>

		<guid isPermaLink="false">http://pragone.com/?p=44</guid>
		<description><![CDATA[Javier en su blog de seo y sem ha hecho un trabajo excelente&#8230; Ha recopilado muchos de sus posts, tips y tricks y los ha compilado en una Guía SEO en formato PDF bajo Creative Commons.
Me parece una iniciativa excelente y en un medio muy apropiado, ya que el SEO es una de esas &#8220;ciencias&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Javier en su blog de <a title="Blog de SEO y SEM" href="http://www.vseo.es" target="_blank">seo y sem</a> ha hecho un trabajo excelente&#8230; Ha recopilado muchos de sus posts, tips y tricks y los ha compilado en una <a title="Guía SEO" href="http://www.vseo.es/buscadores/seo-guia-de-referencia/" target="_blank">Guía SEO</a> en formato PDF bajo Creative Commons.</p>
<p>Me parece una iniciativa excelente y en un medio muy apropiado, ya que el SEO es una de esas &#8220;ciencias&#8221; que se basan en la observación y la deducción, y que varía cada vez que los buscadores (principalmente Google) hacen algún cambio en su algoritmo.</p>
<p>No dejen de pasar por el blog de <a title="VSEO: Un blog de SEO" href="http://www.vseo.es" target="_blank">VSEO</a>, está realmente bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://pragone.com/interesante/una-guia-de-seo/44/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/interesante/una-guia-de-seo/44</feedburner:origLink></item>
		<item>
		<title>Experimentos fotográficos</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/297704876/39</link>
		<comments>http://pragone.com/interesante/experimentos-fotograficos/39#comments</comments>
		<pubDate>Sun, 25 May 2008 11:33:46 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Interesante]]></category>

		<category><![CDATA[cámara holga]]></category>

		<category><![CDATA[escanear negativo]]></category>

		<category><![CDATA[experimento]]></category>

		<category><![CDATA[fotografía]]></category>

		<category><![CDATA[holga]]></category>

		<category><![CDATA[scann film]]></category>

		<guid isPermaLink="false">http://pragone.com/?p=39</guid>
		<description><![CDATA[Para un trabajo de mi esposa estábamos creando una &#8220;revista&#8221; que sirviera como su portafolio. Ya tenía todo el contenido, sin embargo, faltaba la portada&#8230; Ella quería darle un toque bastante único así que se compró una cámara Holga.
La cámara Holga
Una cámara Holga es una de las cámaras más cutres que puedas imaginar. Es analógica [...]]]></description>
			<content:encoded><![CDATA[<p>Para un trabajo de mi esposa estábamos creando una &#8220;revista&#8221; que sirviera como su portafolio. Ya tenía todo el contenido, sin embargo, faltaba la portada&#8230; Ella quería darle un toque bastante único así que se compró una <a title="Cámaro Holga [en]" href="http://en.wikipedia.org/wiki/Holga" target="_blank">cámara Holga</a>.</p>
<h2>La cámara Holga</h2>
<p>Una <a title="Cámara Holga [EN]" href="http://en.wikipedia.org/wiki/Holga" target="_blank">cámara Holga</a> es una de las cámaras más <strong>cutres</strong> que puedas imaginar. Es analógica y lo único que funciona con electricidad es el flash&#8230; vamos, la que le darías a un niño para que jugara. Sin embargo, por otro lado, es una cámara en la que tienes absoluto control sobre la foto, si lo deseas puedes superponer fotos (ya que no te obliga a pasar el carrete para poder darle al obturador)&#8230; En fin, una experiencia creativa de la que pueden salir cosas muy malas o muy chulas, como las que pueden ver en <a title="Fotos con cámara Holga en Flickr" href="http://flickr.com/search/?q=holga" target="_blank">flickr buscando por holga</a>.</p>
<p>En fin, nos fuimos al parque al lado de casa e hicimos una pequeña sesión de fotos, con un rollo de 35mm ASA 100 (la cámara es para un rollo de 120 o 160, pero puedes usar uno de 35mm usando un poco de celo <img src='http://pragone.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> )</p>
<p>El problema vino cuando llevamos las fotos a revelar el día de ayer sábado. No conseguimos ninguna tienda de fotografía especializada abierta, por lo que lo llevamos a un fotoprix para que revelaran el rollo y les pedimos que no picaran el negativo&#8230; a ver qué salía.</p>
<p>Por supuesto las impresiones quedaron bastante mal ya que las máquinas están preparadas para rollos en los que hay una distancia específica entre foto y foto&#8230; cosa que no pasa al sacar las fotos con la Holga pues pasas el carrete a ojo.</p>
<p>Así que ahí empezó mi parte de experimentación. Necesitábamos tener las fotos para el lunes en la mañana, por lo que lo que hice fue escanear el negativo <img src='http://pragone.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Escanear negativos</h2>
<p>Después de buscar un poco en Internet no conseguí ninguna referencia a cómo escanear un negativo que no fuera con un scanner con &#8220;back light&#8221;. Pero bueno, esto fue lo que hice.</p>
<p><strong>Paso 1: Escanear el negativo</strong></p>
<p>Simplemente coloqué el negativo sobre el scanner:</p>
<p><a href="http://pragone.com/wp-content/uploads/2008/05/img_5312.jpg"><img class="aligncenter size-medium wp-image-40" title="img_5312" src="http://pragone.com/wp-content/uploads/2008/05/img_5312-300x225.jpg" alt="Colocar el negativo en el scanner flatbed" width="300" height="225" align="center" /></a></p>
<p>y luego le puse unas hojas blancas para que mantuvieran el negativo contra el scanner y tuvieran un fondo blanco (no cerré la tapa para que no se doblara el negativo):</p>
<p><a href="http://pragone.com/wp-content/uploads/2008/05/img_5313.jpg"><img class="aligncenter size-medium wp-image-41" title="img_5313" src="http://pragone.com/wp-content/uploads/2008/05/img_5313-300x225.jpg" alt="" width="300" height="225" align="center" /></a></p>
<p>Y escaneé el negativo a la máxima resolución real que me daba el scanner (1200 dpi). Esto es lo que obtuvimos:</p>
<p><a href="http://pragone.com/wp-content/uploads/2008/05/foto-holga-negativo.jpg"><img class="aligncenter size-full wp-image-42" title="foto-holga-negativo" src="http://pragone.com/wp-content/uploads/2008/05/foto-holga-negativo.jpg" alt="Negativo" width="500" height="313" align="center" /></a></p>
<p>Como se puede ver, uno de los &#8220;beneficios&#8221; de usar un rollo de 35mm en una cámara de 120 es que la exposición abarca todo el negativo (incluyendo el área troquelada para el mecanismo que normalmente pasa el negativo).</p>
<p><strong>Paso 2: El procesamiento de la imagen</strong></p>
<p>Y aquí fue donde comenzó la experimentación en PhotoShop. Con un poco de paciencia y meditando sobre cómo la luz pasa por el negativo esto fue lo que hice:</p>
<p><em><strong>Invertir los colores de la imagen</strong></em></p>
<p>Evidentemente, uno de los pasos es invertir los colores de la imagen, ya que lo se obtuvo fue el negativo, que como su nombre lo dice tiene los colores al revés.</p>
<p><strong><em>Brightness and contrast</em></strong></p>
<p>Por otro lado se debe jugar con el Brightness y el Contrast de la imagen.</p>
<p>Debido a que el scanner que tengo no tiene Back Light hay que subir mucho el brillo de la imagen. El problema con esto es que subir demasiado el brillo puede &#8220;velar los colores&#8221; o cambiar su tonalidad, por lo que hice dos modificaciones del Brightness y el Contraste, uno antes de invertir los colores y otro después. En ambos caso subí el contrast para dar un poco más de grano a la imagen. Con respecto al brightness&#8230; el que hice antes de invertir lo hice bajando el brillo (que luego de invertir da colores más brillantes) y el que hice despúes sí fue dando más luminosidad.</p>
<p><em><strong>Arreglo del Color</strong></em></p>
<p>El último paso es para compensar por el hecho de que no escaneamos con el back light. Toda la imagen tiene los colores marrones típicos del negativo, así que hay que quitarlo.</p>
<p>Para esto cree un layer con el mismo marrón que tiene el negativo (tomado de una parte del negativo no expuesta) y puse ese layer en modo &#8220;Color Burn&#8221;. Esto cancela el efecto del color marrón y te permite obtener el resultado final:</p>
<p><a href="http://pragone.com/wp-content/uploads/2008/05/foto-holga-5.jpg"><img class="size-full wp-image-43" title="foto-holga-5" src="http://pragone.com/wp-content/uploads/2008/05/foto-holga-5.jpg" alt="" width="700" /></a></p>
<p>Y esta es la foto que finalmente hemos usado en la portada para la revista.</p>
<p>A que está guay <img src='http://pragone.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://pragone.com/interesante/experimentos-fotograficos/39/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/interesante/experimentos-fotograficos/39</feedburner:origLink></item>
		<item>
		<title>¿Cómo integrar phpBB3 con tu sitio?</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/292389853/38</link>
		<comments>http://pragone.com/proyectos/como-integrar-phpbb3-con-tu-sitio/38#comments</comments>
		<pubDate>Sat, 17 May 2008 17:12:28 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Proyectos]]></category>

		<category><![CDATA[integrar]]></category>

		<category><![CDATA[interfaz]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[phpbb]]></category>

		<category><![CDATA[phpbb3]]></category>

		<category><![CDATA[registro]]></category>

		<category><![CDATA[usuario]]></category>

		<guid isPermaLink="false">http://pragone.com/?p=38</guid>
		<description><![CDATA[Este artículo es parte de un conjunto de artículos/tutoriales sobre cómo integrar phpBB3 con otro sistema. Puedes ir al artículo principal sobre cómo integrar phpBB3 con tu sitio para ver las distintas formas de integración
phpBB3 es un excelente paquete de foros gratuito y escrito en PHP+MySQL.
Particularmente phpBB3 promete muchas mejoras interesantes sobre la versión anterior, [...]]]></description>
			<content:encoded><![CDATA[<div style="border:1px solid darkgray; width:100%; margin: 10px; padding: 6px; background-color:#ddddaa">Este artículo es parte de un conjunto de artículos/tutoriales sobre cómo integrar phpBB3 con otro sistema. <br />Puedes ir al artículo principal sobre <a title="tutoriales para integrar phpBB3 con tu sitio" href="http://pragone.com/proyectos/integracion-de-phpbb3-con-tu-sitio/47" style="text-decoration:underline; font-weight:bold">cómo integrar phpBB3 con tu sitio</a> para ver las distintas formas de integración</div>
<p><a title="phpBB un software de foro gratuito" href="http://www.phpbb.com" target="_blank">phpBB3</a> es un excelente paquete de foros gratuito y escrito en PHP+MySQL.</p>
<p>Particularmente phpBB3 promete muchas mejoras interesantes sobre la versión anterior, por lo que he decidido utilizarlo para el foro del nuevo proyecto en el que estoy trabajando (jugar-fútbol.com).</p>
<p>Sin embargo, ya me había currado un proceso de registro y prefería evitar que un usuario registrado tuviera que registrarse nuevamente para poder acceder a los foros&#8230; y por otro lado, la experiencia me ha dicho que permitir la publicación sin registro en un foro es invitar al desastre y a la llegada de Spambots.</p>
<p>Así que me puse a investigar y una de las cosas interesantes del phpBB3 es que tiene módulos de identificación. El phpBB viene de base con 3: DB (el módulo por defecto en el que verifica la información de los usuarios en su propia BD), Apache (con htaccess y cosas por el estilo) y LDAP (contra un directorio LDAP).</p>
<p>Basándome en el de LDAP pude construir de forma muy rápida un proceso que te permitiera identificarte en el foro. Esto es lo que hay que hacer:</p>
<p>En la carpeta phpbb/includes/auth/  creas un nuevo archivo llamado auth_&lt;algo&gt;.php donde ese &lt;algo&gt; será el nombre de tu módulo. En mi caso fue auth_jugar.php.</p>
<p>En ese archivo debes implementar una funcion llamada: login_&lt;algo&gt; que recibe como parámetros el username y el password indicados en el formulario de identificación de un usuario.</p>
<p>PHPBB espera como respuesta de esta función un arreglo asociativo con tres elementos: &#8217;status&#8217;, &#8216;error_msg&#8217; y &#8216;user_row&#8217;.</p>
<p>Los posibled valores para status (que yo haya utilizado) son:</p>
<ul>
<li>LOGIN_ERROR_PASSWORD: Error en el password (por ejemplo, el password ha venido vacío)</li>
<li>LOGIN_ERROR_USERNAME: Indica que el login o la combinación login/clave son inválidos</li>
<li>LOGIN_ERROR_ACTIVE: El usuario no se encuentra activo</li>
<li>LOGIN_SUCCESS: Todo bien&#8230; debemos dejar entrar al usuario</li>
<li>LOGIN_SUCCESS_CREATE_PROFILE: Este es muy interesante&#8230; Indica que los datos son correctos y que debemos crear al usuario en PHPBB y permitirle el acceso.</li>
</ul>
<p>Es este último status el que es más útil para la integración, pues la primera vez que un usuario ya registrado en mi sistema de registro vaya al foro, creará su usuario del foro de forma transparente.</p>
<p>Los valores de error_msg y user_row dependen del status de respuesta y me parece que lo más fácil será colocar el código que he utilizado. Siéntanse libres de hacer Copy&amp;Paste y ajustar a sus necesidades.</p>
<p>Ya para terminar recomendaría que impidieran que estos usuarios puedan modificar su información de email y clave y que lo deban hacer desde tu sistema actual de registro.</p>
<p>Espero sea de utilidad.</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #808080; font-style: italic;">/**
*
* Jugar auth plug-in for phpBB3
*
* Authentication plug-ins is largely down to Sergey Kanareykin, our thanks to him.
*
* @package login
*
*/</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/**
* @ignore
*/</span>
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">!</span><span style="color: #000066;">defined</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'IN_PHPBB'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000066;">exit</span><span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">// Aquí cargo cosas que necesito para verificar los datos del usuario</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #ff0000;">'/forum_env.php'</span><span style="color: #66cc66;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/**
* Login function
*/</span>
<span style="color: #000000; font-weight: bold;">function</span> login_jugar<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&amp;</span><span style="color: #ff0000">$username</span><span style="color: #66cc66;">,</span> <span style="color: #66cc66;">&amp;</span><span style="color: #ff0000">$password</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #000066;">global</span> <span style="color: #ff0000">$db</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$config</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$user</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">// do not allow empty password</span>
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">!</span><span style="color: #ff0000">$password</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
			<span style="color: #ff0000;">'status'</span>	<span style="color: #66cc66;">=&gt;</span> LOGIN_ERROR_PASSWORD<span style="color: #66cc66;">,</span>
			<span style="color: #ff0000;">'error_msg'</span>	<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000;">'NO_PASSWORD_SUPPLIED'</span><span style="color: #66cc66;">,</span>
			<span style="color: #ff0000;">'user_row'</span>	<span style="color: #66cc66;">=&gt;</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'user_id'</span> <span style="color: #66cc66;">=&gt;</span> ANONYMOUS<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
		<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">!</span><span style="color: #ff0000">$username</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
			<span style="color: #ff0000;">'status'</span>	<span style="color: #66cc66;">=&gt;</span> LOGIN_ERROR_USERNAME<span style="color: #66cc66;">,</span>
			<span style="color: #ff0000;">'error_msg'</span>	<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000;">'LOGIN_ERROR_USERNAME'</span><span style="color: #66cc66;">,</span>
			<span style="color: #ff0000;">'user_row'</span>	<span style="color: #66cc66;">=&gt;</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'user_id'</span> <span style="color: #66cc66;">=&gt;</span> ANONYMOUS<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
		<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">// Aquí es donde verifico los datos en mi registro existente</span>
	<span style="color: #ff0000">$jugar_user</span> <span style="color: #66cc66;">=</span> ForumUser<span style="color: #66cc66;">::</span><span style="color: #006600;">validateCredentials</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$username</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000">$password</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$jugar_user</span> instanceOf ForumUser<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #ff0000">$sql</span> <span style="color: #66cc66;">=</span><span style="color: #ff0000;">'SELECT user_id, username, user_password, user_passchg, user_email, user_type
			FROM '</span> <span style="color: #66cc66;">.</span> USERS_TABLE <span style="color: #66cc66;">.</span> <span style="color: #ff0000;">&quot;
			WHERE username_clean = '&quot;</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_escape</span><span style="color: #66cc66;">&#40;</span>utf8_clean_string<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$username</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000;">&quot;'&quot;</span><span style="color: #66cc66;">;</span>
		<span style="color: #ff0000">$result</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$sql</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #ff0000">$row</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_fetchrow</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$result</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_freeresult</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$result</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$row</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// User inactive...</span>
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$row</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'user_type'</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">==</span> USER_INACTIVE <span style="color: #66cc66;">||</span> <span style="color: #ff0000">$row</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'user_type'</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">==</span> USER_IGNORE<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #b1b100;">return</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
					<span style="color: #ff0000;">'status'</span>		<span style="color: #66cc66;">=&gt;</span> LOGIN_ERROR_ACTIVE<span style="color: #66cc66;">,</span>
					<span style="color: #ff0000;">'error_msg'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000;">'ACTIVE_ERROR'</span><span style="color: #66cc66;">,</span>
					<span style="color: #ff0000;">'user_row'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$row</span><span style="color: #66cc66;">,</span>
				<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// Successful login... set user_login_attempts to zero...</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
				<span style="color: #ff0000;">'status'</span>		<span style="color: #66cc66;">=&gt;</span> LOGIN_SUCCESS<span style="color: #66cc66;">,</span>
				<span style="color: #ff0000;">'error_msg'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">,</span>
				<span style="color: #ff0000;">'user_row'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$row</span><span style="color: #66cc66;">,</span>
			<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #66cc66;">&#125;</span>
		<span style="color: #b1b100;">else</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// retrieve default group id</span>
			<span style="color: #ff0000">$sql</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'SELECT group_id
				FROM '</span> <span style="color: #66cc66;">.</span> GROUPS_TABLE <span style="color: #66cc66;">.</span> <span style="color: #ff0000;">&quot;
				WHERE group_name = '&quot;</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_escape</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'REGISTERED'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">.</span> <span style="color: #ff0000;">&quot;'
					AND group_type = &quot;</span> <span style="color: #66cc66;">.</span> GROUP_SPECIAL<span style="color: #66cc66;">;</span>
			<span style="color: #ff0000">$result</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_query</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$sql</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
			<span style="color: #ff0000">$row</span> <span style="color: #66cc66;">=</span> <span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_fetchrow</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$result</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
			<span style="color: #ff0000">$db</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">sql_freeresult</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$result</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">!</span><span style="color: #ff0000">$row</span><span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #000066;">trigger_error</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'NO_GROUP'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
			<span style="color: #66cc66;">&#125;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// generate user account data</span>
			<span style="color: #ff0000">$user_row</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
				<span style="color: #ff0000;">'username'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$username</span><span style="color: #66cc66;">,</span>
				<span style="color: #ff0000;">'user_password'</span>	<span style="color: #66cc66;">=&gt;</span> phpbb_hash<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$password</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
				<span style="color: #ff0000;">'user_email'</span>	<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$jugar_user</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">email</span><span style="color: #66cc66;">,</span>
				<span style="color: #ff0000;">'group_id'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #66cc66;">&#40;</span>int<span style="color: #66cc66;">&#41;</span> <span style="color: #ff0000">$row</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'group_id'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">,</span>
				<span style="color: #ff0000;">'user_type'</span>		<span style="color: #66cc66;">=&gt;</span> USER_NORMAL<span style="color: #66cc66;">,</span>
				<span style="color: #ff0000;">'user_ip'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$user</span><span style="color: #66cc66;">-&gt;</span><span style="color: #006600;">ip</span><span style="color: #66cc66;">,</span>
			<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
			<span style="color: #808080; font-style: italic;">// this is the user's first login so create an empty profile</span>
			<span style="color: #b1b100;">return</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
				<span style="color: #ff0000;">'status'</span>		<span style="color: #66cc66;">=&gt;</span> LOGIN_SUCCESS_CREATE_PROFILE<span style="color: #66cc66;">,</span>
				<span style="color: #ff0000;">'error_msg'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">,</span>
				<span style="color: #ff0000;">'user_row'</span>		<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000">$user_row</span><span style="color: #66cc66;">,</span>
			<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
		<span style="color: #ff0000;">'status'</span>	<span style="color: #66cc66;">=&gt;</span> LOGIN_ERROR_USERNAME<span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'error_msg'</span>	<span style="color: #66cc66;">=&gt;</span> <span style="color: #ff0000;">'LOGIN_ERROR_USERNAME'</span><span style="color: #66cc66;">,</span>
		<span style="color: #ff0000;">'user_row'</span>	<span style="color: #66cc66;">=&gt;</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'user_id'</span> <span style="color: #66cc66;">=&gt;</span> ANONYMOUS<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
	<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pragone.com/proyectos/como-integrar-phpbb3-con-tu-sitio/38/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/proyectos/como-integrar-phpbb3-con-tu-sitio/38</feedburner:origLink></item>
		<item>
		<title>Detección de duplicados</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/284921484/37</link>
		<comments>http://pragone.com/proyectos/deteccion-de-duplicados-2/37#comments</comments>
		<pubDate>Tue, 06 May 2008 21:45:05 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Proyectos]]></category>

		<category><![CDATA[deteccion]]></category>

		<category><![CDATA[duplicados]]></category>

		<category><![CDATA[loquo]]></category>

		<guid isPermaLink="false">http://pragone.com/?p=37</guid>
		<description><![CDATA[Hoy hemos lanzado en Loquo un nuevo sistema para la lucha contra el SPAM.
Es un sistema avanzado de detección de duplicados. Aunque apenas ha comenzado su vida, los resultados resultan prometedores.
La idea básica es que si cada anuncio &#8220;diferente&#8221; puede ser publicado sólo una vez al día (esto podría cambiar en el futuro), entonces el [...]]]></description>
			<content:encoded><![CDATA[<p>Hoy hemos lanzado en Loquo un nuevo sistema para la lucha contra el SPAM.</p>
<p>Es un sistema avanzado de detección de duplicados. Aunque apenas ha comenzado su vida, los resultados resultan prometedores.</p>
<p>La idea básica es que si cada anuncio &#8220;diferente&#8221; puede ser publicado sólo una vez al día (esto podría cambiar en el futuro), entonces el trabajo de los Spammers se vuelve mucho más complicado pues ya no pueden depender de un &#8220;simple&#8221; sistema automátizado para la publicación masiva de anuncios.</p>
<p>Creo que todos los usuarios de <a title="Anuncios clasificados gratuitos" href="http://www.loquo.com" target="_blank">Loquo,</a> estarán de acuerdo conmigo en que la calidad de los anuncios había caído considerablemente en los últimos meses. Y en buena parte esto se debe a que no tenemos la capacidad de revisar cada uno de los anuncios que es publicado, y si bien la comunidad hace un trabajo excelente a la hora de marcar los anuncios, no resultaba suficiente.</p>
<p>El problema resulta muy complicado de atacar y estamos conscientes de que de esta forma estamos alterando todo un ecosistema que gira al rededor de la página. Sin embargo, esperamos que el cambio sea a positivo. Digo esto por varias razones:</p>
<p><strong>Revisión de todos los anuncios&#8230; ¿cómo?</strong></p>
<p>Uno de los principales problemas para garantizar la calidad de los anuncios es poder revisar la mayor cantidad posible de ellos. Sin embargo, esto es una tarea imposible. Sólo tomando Barcelona como muestra, antes de la implementación de este sistema, la media de nuevos anuncios era de más de 24 por minuto, sin embargo, no es algo estable a lo largo del día. Aproximadamente el 30% era fuera de horario de oficina, y además en horas pico, el promedio (de nuevo, sólo en Barcelona) era de 1.3 anuncios <em>por segundo</em>!!</p>
<p>No existen recursos suficientes para revisar todos estos anuncios en ninguna empresa. Claro está, portales de menor dimensión, o en los que se cobre por la publicación se pueden dar este lujo o costear la externalización&#8230; pero ese no es nuestro caso.</p>
<p><strong>La regla del 1%</strong></p>
<p>Como sucede con casi todas las cosas en Internet, Loquo también se ciñe con precisión casi matemática a esta <a title="Regla del 1%" href="http://www.microsiervos.com/archivo/internet/regla-1-por-ciento.html" target="_blank">regla de facto del 1%</a> que viene a reemplazar a la regla de Pareto del 80-20 en el mundo offline y que definen así en Microsiervos:</p>
<blockquote><p>Está empezando a hablarse de una regla que sugiere que si pones a 100 personas en línea entonces una creará contenido, 10 interactuarán con este, ya sea comentando u ofreciendo mejoras, y los otros 89 simplemente lo mirarán.</p></blockquote>
<p>Esta regla también se ajusta al comportamiento de los usuarios a la hora de publicar en una versión un tanto modificada: el 1% (o incluso menos) representa a los spammers más fuertes. un 10% serán usuarios &#8220;muy activos&#8221; que si bien publican muchos anuncios (más de los que sería ideal) por lo menos publican anuncios válidos, y el resto 89% son los usuarios como tu y yo que publican un piso en alquiler o algún producto de segunda mano para vender o fotografías para la home <img src='http://pragone.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>El principal problema con esto es que la mayor parte del tiempo del equipo de soporte se estaba dedicando a responder a las preguntas, comentarios, quejas, etc de los usuarios y a tratar de paliar el efecto destructivo de ese 1% de spammers &#8220;heavy-duty&#8221;.</p>
<p>Dicho esto, con este sistema esperamos poder deshacernos lo máximo posible de ese 1% y mantener bajo control al segundo grupo del 10%. El 89% de los usuarios simplemente nunca se verán afectados por este cambio pues para ellos publicar un anuncio al día es más que suficiente para promocionar su oferta.</p>
<p>Más aún, ese 89% (e incluso el 10% de usuarios &#8220;muy activos&#8221;) se verá beneficiado por este cambio pues su anuncio tendrá más visibilidad al eliminar la basura que lo desplaza hacia abajo en el listado. Así, que el resultado esperado es: mayor satisfacción y efectividad para la mayoría de los usuarios que publican anuncios y una mejor experiencia para los visitantes que encontrarán un contenido de mayor calidad.</p>
<p><strong>¿Y qué pasa con ese 10%?</strong></p>
<p>Este es el grupo que más afectado se siente por la implantación del nuevo sistema, pero lo cierto es que el mayor cambio será en sus costumbres y no en sus resultados.</p>
<p>Por ejemplo, en las secciones de contacto de Loquo, existen sólo en Barcelona unos 472.154 anuncios activos&#8230; y esta sección tiene una duración de apenas 30 días. En esta sección (que es donde la mayor parte de ese 10% publica) se podrían reducir los anuncios a una décima parte o a un veinteavo sin afectar la experiencia del visitante. ¿Por qué?&#8230; saquemos unas cuentas: si hubiera sólo un veinteavo de los anuncios, todavía habría unos 23.600 anuncios, es decir, un promedio de casi 800 por día, a 75 anuncios por página, esto significaría que un usuario debería navegar por 11 páginas antes de llegar al siguiente día!, me parece que sigue habiendo una gran abundancia de contenido.</p>
<p>Igualmente, si un usuario que publica en esta sección se está &#8220;viendo obligado&#8221; a publicar hasta 20 veces el mismo anuncio en un día porque bajan demasiado rápido (el orden de los anuncios es cronológico), ahora su anuncio bajará a un veinteavo de la velocidad, con lo que efectivamente publicar un anuncio le bastaría para obtener la misma visibilidad y por lo tanto los mismos contactos.</p>
<p>Sin embargo, estoy seguro de que será un cambio complicado de asimilar al principio, no será sino hasta que vean que no se reduce la efectividad de sus anuncios que se sientan tranquilos con este sistema. Llevan mucho tiempo haciéndolo de la forma actual y éste como cualquier otro cambio generará incertidumbre.</p>
<p><strong>Beneficios para el equipo de Loquo (y para los usuarios)</strong></p>
<p>Lógicamente, contar con una base de anuncios menor y más limpia permitirá al equipo de soporte revisar una mayor cantidad de los anuncios y poder tomar medidas más correctivas que punitivas. Mejorando en todos los sentidos la experiencia de los usuarios</p>
<p><strong>Otros beneficios del sistema</strong></p>
<p><em>Búsquedas</em></p>
<p>La implantación de este sistema tiene otros beneficios para los visitantes, si ahora realizas una búsqueda en Loquo, es posible que consigas en algunas secciones el mismo anuncio repetido varias veces. Esto representa una pérdida de tiempo para el visitante que debe navegar e invertir más tiempo en encontrar más anuncios diferentes.</p>
<p><em>Sistemas</em></p>
<p>Se los digo por experiencia, manejar un sitio con más de 4MM de visitantes al mes no es sencillo, desde un punto de vista de sistemas es todo un reto mantener la disponibilidad del sitio en todo momento.</p>
<p>Uno de los principales inconvenientes es precisamente el crecimiento de la Base de Datos de anuncios. Contar con un sistema que permita reducir la cantidad de anuncios reales será un alivio al igual que permitirá mejorar el tiempo de respuesta de la página.</p>
<p><strong>Finalmente..</strong></p>
<p>Este es uno de los proyectos más importantes y con mayor impacto que hemos realizado en Loquo. Tenemos muchas esperanzas en él y estaremos todo lo atentos que podamos a los comentarios de los usuarios (más de lo habitual) para poder ajustarlo de la mejor forma posible.</p>
<p>Deseadnos suerte!</p>
]]></content:encoded>
			<wfw:commentRss>http://pragone.com/proyectos/deteccion-de-duplicados-2/37/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/proyectos/deteccion-de-duplicados-2/37</feedburner:origLink></item>
		<item>
		<title>Nuevo proyecto: jugar-futbol.com</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/282189769/36</link>
		<comments>http://pragone.com/proyectos/nuevo-proyecto-jugar-futbolcom/36#comments</comments>
		<pubDate>Fri, 02 May 2008 12:57:48 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Proyectos]]></category>

		<category><![CDATA[campos]]></category>

		<category><![CDATA[futbol]]></category>

		<category><![CDATA[jugar-futbol.com]]></category>

		<category><![CDATA[proyecto]]></category>

		<guid isPermaLink="false">http://pragone.com/?p=36</guid>
		<description><![CDATA[Hola,
Pues escribo luego de un extendido período de silencio para comentarles por primera vez sobre un nuevo proyecto en el que estoy trabajando: jugar-futbol.com
Este proyecto busca ofrecer en un solo sitio las cosas que los entusiastas de este deporte necesitamos para poder practicarlo. Eso sí&#8230; en el mundo real&#8230; offline.
No es un sitio de juego [...]]]></description>
			<content:encoded><![CDATA[<p>Hola,</p>
<p>Pues escribo luego de un extendido período de silencio para comentarles por primera vez sobre un nuevo proyecto en el que estoy trabajando: jugar-futbol.com</p>
<p>Este proyecto busca ofrecer en un solo sitio las cosas que los entusiastas de este deporte necesitamos para poder practicarlo. Eso sí&#8230; en el mundo real&#8230; offline.</p>
<p>No es un sitio de juego online, ni es un directorio de sitios de fútbol. Busca ser una comunidad en la que encuentres las herramientas que buscas para poder practicar este deporte.</p>
<p>El sitio todavía no se encuentra público (aunque espero poder terminar las primeras funcionalidades este puente y sacarlo a producción). La primera etapa servirá para resolver uno de los problemas que tenemos cuando queremos jugar fútbol: ¿Dónde?.</p>
<p>Esta primera etapa consta de un directorio de campos de fútbol en toda España&#8230; claro está no sería capaz de rellenar toda la información por lo que cuento con que a los visitantes le mole el sitio y ayuden agregando un par de sitios que conozcan.</p>
<p>Muy pronto estará al aire&#8230; así que si te da curiosidad espera un próximo post en el que colocaré la dirección&#8230; o déjame un comentario aquí y te mandaré un correo cuando el gran momento llegue.</p>
]]></content:encoded>
			<wfw:commentRss>http://pragone.com/proyectos/nuevo-proyecto-jugar-futbolcom/36/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/proyectos/nuevo-proyecto-jugar-futbolcom/36</feedburner:origLink></item>
		<item>
		<title>Stay hungry, stay foolish</title>
		<link>http://feeds.feedburner.com/~r/pragone/~3/253552753/34</link>
		<comments>http://pragone.com/gerencia/stay-hungry-stay-foolish/34#comments</comments>
		<pubDate>Tue, 18 Mar 2008 10:28:58 +0000</pubDate>
		<dc:creator>pragone</dc:creator>
		
		<category><![CDATA[Gerencia]]></category>

		<category><![CDATA[discurso]]></category>

		<category><![CDATA[motivación]]></category>

		<category><![CDATA[stanford]]></category>

		<category><![CDATA[steve jobs]]></category>

		<guid isPermaLink="false">http://pragone.com/gerencia/stay-hungry-stay-foolish/34</guid>
		<description><![CDATA[Wow&#8230; hoy he visto escuchado en youtube uno de los mejores discursos de mi vida.
Siempre he admirado la capacidad de oratoria de Steve Jobs, nunca me pierdo sus Keynotes en MacWorld porque son un ejemplo de cómo se hace una presentación y porque, no lo voy a negar, soy un mac fan boy.
Pero este discurso, [...]]]></description>
			<content:encoded><![CDATA[<p>Wow&#8230; hoy he visto escuchado en youtube uno de los mejores discursos de mi vida.</p>
<p>Siempre he admirado la capacidad de oratoria de Steve Jobs, nunca me pierdo sus Keynotes en MacWorld porque son un ejemplo de cómo se hace una presentación y porque, no lo voy a negar, soy un mac fan boy.</p>
<p>Pero este discurso, dado en un acto de graduación en Stanford, es realmente uno de los mejores discursos motivacionales que he escuchado en mi vida. Se los recomiendo.</p>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/JPL_NjBjUWE&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/JPL_NjBjUWE&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://pragone.com/gerencia/stay-hungry-stay-foolish/34/feed</wfw:commentRss>
		<feedburner:origLink>http://pragone.com/gerencia/stay-hungry-stay-foolish/34</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 1.894 seconds --><!-- Cached page served by WP-Cache -->
