<?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>Capy.net</title>
	<atom:link href="http://www.e-capy.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.e-capy.com</link>
	<description>Drupal, Ubuntu, jQuery, CSS</description>
	<lastBuildDate>Wed, 16 May 2012 22:15:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Como hacer formularios multistep (wizard) con Ctools</title>
		<link>http://www.e-capy.com/formularios-multistep-con-ctools/</link>
		<comments>http://www.e-capy.com/formularios-multistep-con-ctools/#comments</comments>
		<pubDate>Wed, 16 May 2012 22:15:59 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Drupal 7]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[FAPI]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1514</guid>
		<description><![CDATA[Chaos tools para muchos no es mas que una dependencia de Panels, Views, Features y muchos otros y fabulosos módulos mas. Pero (Gran pero), Ctools per se es un modulo increíblemente útil para nosotros mismos.
Bueno vamos a lo que vamos. Acá les dejo la idea de lo que vamos a ha [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://drupal.org/project/ctools" target="_blank">Chaos tools</a> para muchos no es mas que una dependencia de <a href="http://drupal.org/project/panels" target="_blank">Panels</a>, <a href="http://drupal.org/project/views" target="_blank">Views</a>, <a href="http://drupal.org/project/features" target="_blank">Features </a>y muchos otros y fabulosos módulos mas. Pero (Gran pero), Ctools <em>per se</em> es un modulo increíblemente útil para nosotros mismos.</p>
<p style="text-align: left;">Bueno vamos a lo que vamos. Acá les dejo la idea de lo que vamos a hacer:</p>
<p style="text-align: left;"><strong>Tengo un formulario que necesita recoger tres datos de un usuario, y me parece que es mucha información para pedirla toda junta así que vamos a hacerlo en tres pasos distintos.</strong></p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1515" title="Form wizard look" src="http://www.e-capy.com/wp-content/uploads/2012/05/form-wizard-splash.png" alt="" width="696" height="191" /></p>
<p style="text-align: left;">Para hacer este wizard vamos a usar un formulario normal pero separado en 3 funciones, y dos de las herramientas (plugins) que tiene Ctools. La primera es obviamente &#8220;<strong>Wizard</strong>&#8221; y para la persistencia de los datos entre steps usaremos &#8220;<strong>object-cache</strong>&#8220;.</p>
<p style="text-align: left;">Antes la estructura:</p>
<ul>
<li>Necesitamos hacer un item de menú con hook_menu() que nos lleve a una función que es la que va a manejar la batuta.</li>
<li>3 mini funciones para manejar &#8220;<strong>object-cache</strong>&#8220;</li>
<li>3 formularios/funciones para declarar el contenido de cada uno de los step.</li>
</ul>
<p style="text-align: left;">Hagamos lo:</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Primero</span>: el menú y el callback del menú:</p>
<pre class="brush: php; title: ; notranslate">

function ctools_multistep_menu() {

  $items['ctools_multistep/example_multistep_form'] = array(
    'title' =&gt; 'Ejemplo de un wizard con ctools',
    'page callback' =&gt; 'wizard_callback',
    'access callback' =&gt; TRUE,
    'type' =&gt; MENU_CALLBACK,
  );

  return $items;
}

function wizard_callback($step = NULL) {
 $form_info = array(
    'id' =&gt; 'example_multistep_form',

    'path' =&gt; &quot;ctools_multistep/example_multistep_form/%step&quot;,
    'return path' =&gt; &quot;&quot;,

    'show trail' =&gt; TRUE,
    'show back' =&gt; TRUE,

    'next callback' =&gt; 'callback_paso_siguiente',
    'finish callback' =&gt; 'callback_paso_final',

    'forms' =&gt; array(
      'primer_formulario' =&gt; array(
        'form id' =&gt; 'primer_formulario',
        'title' =&gt; 'Primer paso',
        'include' =&gt; drupal_get_path(&quot;module&quot;, &quot;ctools_multistep&quot;) . '/formularios.inc',
      ),
      'segundo_formulario' =&gt; array(
        'form id' =&gt; 'segundo_formulario',
        'title' =&gt; 'Segundo paso',
        'include' =&gt; drupal_get_path(&quot;module&quot;, &quot;ctools_multistep&quot;) . '/formularios.inc',
      ),
      'tercer_formulario' =&gt; array(
        'form id' =&gt; 'tercer_formulario',
        'title' =&gt; 'Tercer paso',
        'include' =&gt; drupal_get_path(&quot;module&quot;, &quot;ctools_multistep&quot;) . '/formularios.inc',
      ),
    ),
  );

  global $user;
  $object_id = &quot;ctools_multistep_de_ejemplo_&quot; . $user-&gt;uid;

  if (empty($step)) {
    clean_datos($object_id);
    $step = 'primer_formulario';
  }

  $object = get_datos($object_id);

  $form_state = array(
    'object_id' =&gt; $object_id,
    'object' =&gt; &amp;$object,
  );

  ctools_include('wizard');
  $form = ctools_wizard_multistep_form($form_info, $step, $form_state);
  return drupal_render($form);
}
</pre>
<p>Como pueden ver, el item de menú no es mas que una URL normal.</p>
<p>Ahora bien. En la función principal podemos ver como definimos inicialmente un array normalito, y es en el en donde definimos las características del wizard:</p>
<p><span style="color: #993300;">&#8216;id&#8217; =&gt; &#8216;example_multistep_form&#8217;</span><br />
<strong>id</strong> <span style="color: #999999;">(string)</span> es el nombre que va a tener el wizard y es obligatorio poner uno</p>
<p><span style="color: #993300;">&#8216;path&#8217; =&gt; &#8220;ctools_multistep/example_multistep_form/%step&#8221;,</span><br />
<strong>path</strong><span style="color: #999999;"> (url)</span> es la URL que definimos en el hook_menu() mas &#8220;%step&#8221;. y es la URL que va a usar Ctools para ir poniendo el step actual en la arra de direcciones de nuestro navegador.</p>
<p><span style="color: #993300;">&#8216;return path&#8217; =&gt; &#8220;&lt;front&gt;&#8221;</span><br />
<strong>return path</strong> <span style="color: #999999;">(url)</span> es la URL a la que queremos enviar al usuario cuando este haya completado el formulario. en mi caso lo quiero mandar a la home</p>
<p><span style="color: #993300;">&#8216;show trail&#8217; =&gt; TRUE</span><br />
<strong>show trail</strong><span style="color: #999999;"> (bool)</span> indica a wizard que queremos que se muestre el breadcrumb de cada uno de los pasos.</p>
<p><span style="color: #993300;">&#8216;show back&#8217; =&gt; TRUE</span><br />
<strong>show back</strong><span style="color: #999999;"> (bool)</span> indica si queremos dejar que un usuario vuelva a pantallas anteriores. si está en TRUE muestra el botón con dicho fin.</p>
<p><span style="color: #993300;">&#8216;next callback&#8217; =&gt; &#8216;callback_paso_siguiente&#8217;</span><br />
<strong>next callback</strong><span style="color: #999999;"> (function name)</span> indica cual es la función que se debe ejecutar cada vez que pasemos de un formulario al siguiente. y es en esta funcion en la que vamos a ir guardando el estado actual del usuario.</p>
<p><span style="color: #993300;">&#8216;finish callback&#8217; =&gt; &#8216;callback_paso_final&#8217;</span><br />
<strong>finish callback</strong> <span style="color: #999999;">(function name)</span> indica cual es la función que se debe ejecutar una vez que el usuario haya completado el formulario. Aquí es donde vamos a guardar de forma permanente los datos del formulario y a limpiar los datos temporales.</p>
<p><span style="color: #993300;">&#8216;forms&#8217; =&gt; array(</span><br />
<span style="color: #993300;">    &#8216;primer_formulario&#8217; =&gt; array(</span><br />
<span style="color: #993300;">        &#8217;form id&#8217; =&gt; &#8216;primer_formulario&#8217;,</span><br />
<span style="color: #993300;">         &#8217;title&#8217; =&gt; &#8216;Primer paso&#8217;,</span><br />
<span style="color: #993300;">         &#8217;include&#8217; =&gt; drupal_get_path(&#8220;module&#8221;, &#8220;ctools_multistep&#8221;) . &#8216;/formularios.inc&#8217;,</span><br />
<span style="color: #993300;">     ),</span><br />
<span style="color: #993300;">    &#8216;segundo_formulario&#8217; =&gt; array(<br />
</span><span style="color: #993300;">        &#8216;form id&#8217; =&gt; &#8216;segundo_formulario&#8217;,<br />
</span><span style="color: #993300;">        &#8216;title&#8217; =&gt; &#8216;Segundo paso&#8217;,<br />
</span><span style="color: #993300;">        &#8216;include&#8217; =&gt; drupal_get_path(&#8220;module&#8221;, &#8220;ctools_multistep&#8221;) . &#8216;/formularios.inc&#8217;,<br />
</span><span style="color: #993300;">    ),<br />
</span><span style="color: #993300;">)</span></p>
<p>Por ultimo en <strong>forms</strong><span style="color: #999999;"> (array)</span> indicaremos cuales son los formularios que se van a usar en cada paso, el titulo que van a mostrar en el breadcrumb y si tuviéramos esta función en otro archivo, la ruta en la que se aloja.</p>
<p>Nos quedan dos cosas en el formulario. La primera es definir el nombre del objeto que va a almacenar de forma temporal los datos del usuario, ver si ver si vamos a reiniciar el formulario (en el caso de que el usuario acceda nuevamente al formulario) e inicializar los datos del usuario (ahora lo explico).</p>
<pre class="brush: php; title: ; notranslate">
global $user;
$object_id = &quot;ctools_multistep_de_ejemplo_&quot; . $user-&gt;uid;

if (empty($step)) {
  clean_datos($object_id);
  $step = 'primer_formulario';
}

  $object = get_datos($object_id);
</pre>
<p>La segunda cosa que nos queda en esta función es claramente generar el wizard:</p>
<pre class="brush: php; title: ; notranslate">
$form_state = array( 'object_id' =&gt; $object_id, 'object' =&gt; &amp;$object );

ctools_include('wizard');
$form = ctools_wizard_multistep_form($form_info, $step, $form_state);
return drupal_render($form);
</pre>
<p>mmmbueeeeno, tenemos declarado el formulario, un par de funciones para el avance y finalización y hacemos uso de clean_datos() y get_datos(). pues eso es lo que sigue. definir estas funciones:</p>
<p>set_datos(), get_datos() y clean_datos() no son mas que unos wrappers que guardan recuperan y eliminan la información que el usuario va rellenando:</p>
<pre class="brush: php; title: ; notranslate">
function set_datos($id, $object) {
  ctools_include('object-cache');
  ctools_object_cache_set('ctools_multistep', $id, $object);
}

function get_datos($id) {
  ctools_include('object-cache');
  $object = ctools_object_cache_get('ctools_multistep', $id);

  //creamos un objeto vacío para empezar
  if (!$object) {
    $object = new stdClass;
    $object-&gt;dia = NULL;
    $object-&gt;nombre = &quot;&quot;;
    $object-&gt;apellido = &quot;&quot;;
  }

  return $object;
}

function clean_datos($id) {
  ctools_include('object-cache');
  ctools_object_cache_clear('ctools_multistep', $id);
}
</pre>
<p>Con las pequeñas funciones de <strong>object-cache</strong> vamos metiendo la información que el usuario complete cada vez que se le de a &#8220;<strong>Continuar</strong>&#8221; dentro del objeto:</p>
<pre class="brush: php; title: ; notranslate">
function callback_paso_siguiente(&amp;$form_state) {
  set_datos($form_state['object_id'], $form_state['object']);
}
</pre>
<p>Y cuando el usuario complete el formulario vamos a usar la función que definimos en &#8220;finish callback&#8221; para dejarle un mensaje en pantalla al usuario (lo mas lógico seria guardarlos de forma permanente pero esta es una demo XD) y limpiar los datos;</p>
<pre class="brush: php; title: ; notranslate">
function callback_paso_final(&amp;$form_state) {
  $obj = $form_state[&quot;object&quot;];
  drupal_set_message($obj-&gt;nombre . &quot; &quot; . $obj-&gt;apellido . &quot; gracias por seleccionar el día &quot; . $obj-&gt;dia);
  clean_datos($form_state[&quot;object_id&quot;]);
}
</pre>
<p>Y eso es básicamente todo lo que necesitamos. Faltan como es lógico, las funciones que contienen los formularios junto a su respectivo _validate() y _submit(). Les pongo uno de ejemplo para que vean que no tiene nada del otro mundo:</p>
<pre class="brush: php; title: ; notranslate">
function segundo_formulario($form, &amp;$form_state) {
  $form['nombre'] = array(
    '#type' =&gt; 'textfield',
    '#title' =&gt; t('Dime tu nombre'),
    '#default_value' =&gt; $form_state['object']-&gt;nombre,
    '#required' =&gt; TRUE,
  );

  return $form;
}

function segundo_formulario_validate($form, &amp;$form_state) {
}

function segundo_formulario_submit($form, &amp;$form_state) {
  $form_state['object']-&gt;nombre = $form_state['values']['nombre'];
}
</pre>
<p>Aunque ahora que me doy cuenta, quiero comentar que en el _submit() (que siempre se ejecuta antes que la función datos <em>callback_paso_siguiente()</em> que almacena los datos), es el punto en el que seteamos el valor que el usuario acaba de rellenar en la correspondiente propiedad del objeto que esta por ser almacenado.</p>
<p>Todo lo anterior nos va a generar un formulario como el siguiente:</p>
<p><img class="aligncenter size-full wp-image-1517" title="wizard-step-1" src="http://www.e-capy.com/wp-content/uploads/2012/05/wizard-step-1.png" alt="" width="378" height="312" /></p>
<p><img class="aligncenter size-full wp-image-1518" title="wizard-step-2" src="http://www.e-capy.com/wp-content/uploads/2012/05/wizard-step-2.png" alt="" width="434" height="143" /></p>
<p><img class="aligncenter size-full wp-image-1519" title="wizard-step-3" src="http://www.e-capy.com/wp-content/uploads/2012/05/wizard-step-3.png" alt="" width="448" height="162" /></p>
<p>y cuando el wizard nos mande a la home vamos a ver:</p>
<p><img class="aligncenter size-full wp-image-1516" title="wizard-result" src="http://www.e-capy.com/wp-content/uploads/2012/05/wizard-result.png" alt="" width="446" height="77" /></p>
<p>Les dejo un descargable con este wizard de ejemplo para que puedan verlo en detalle.</p>
<p style="text-align: center;"><a class="download" href="http://www.e-capy.com/wp-content/uploads/2012/05/ctools_multistep.rar">Descargar</a></p>
<p style="text-align: left;">Chau!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/formularios-multistep-con-ctools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error en conversion.js [Solución]</title>
		<link>http://www.e-capy.com/error-en-conversion-js-solucion/</link>
		<comments>http://www.e-capy.com/error-en-conversion-js-solucion/#comments</comments>
		<pubDate>Tue, 15 May 2012 22:13:51 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Tip]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1426</guid>
		<description><![CDATA[Si ves un error GET en la consola de Webkit (Chrome y Safari) en la URL http://www.googleadservices.com/pagead/conversion.js muy posiblemente sea porque tenes habilitada la extensión&#8221;AdBlock&#8221; :S
&#160;

He dicho XD
]]></description>
			<content:encoded><![CDATA[<p>Si ves un error GET en la consola de Webkit (Chrome y Safari) en la URL <a href="http://www.googleadservices.com/pagead/conversion.js" target="_blank">http://www.googleadservices.<wbr>com/pagead/conversion.js</wbr></a> muy posiblemente sea porque tenes habilitada la extensión&#8221;<strong>AdBlock</strong>&#8221; :S</p>
<p>&nbsp;</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1427" title="error-en-conversion-js" src="http://www.e-capy.com/wp-content/uploads/2012/05/error-en-conversion-js-.png" alt="" width="424" height="48" /></p>
<p>He dicho XD</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/error-en-conversion-js-solucion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Habilitar .bashrc al iniciar sesión</title>
		<link>http://www.e-capy.com/habilitar-bashrc-al-iniciar-sesion/</link>
		<comments>http://www.e-capy.com/habilitar-bashrc-al-iniciar-sesion/#comments</comments>
		<pubDate>Mon, 07 May 2012 19:39:42 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tip]]></category>
		<category><![CDATA[Servidores]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1420</guid>
		<description><![CDATA[Problema: querés usar .bashrc para poner un alias por ejemplo, pero .bashrc no existe.
Solución: te vas a la home de tu usuario y tipeas lo siguiente:
cd ~
nano .bashrc
Y dentro del archivo pongamos un alias por ejemplo:
alias ll='ls -l'
Guardamos los cambios y pasamos a lo siguiete que es:
na [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #993300;">Problema</span>: querés usar <strong>.bashrc</strong> para poner un alias por ejemplo, pero <strong>.bashrc</strong> no existe.</p>
<p><span style="color: #008000;">Solución</span>: te vas a la home de tu usuario y tipeas lo siguiente:</p>
<pre>cd ~
nano .bashrc</pre>
<p>Y dentro del archivo pongamos un alias por ejemplo:</p>
<pre>alias ll='ls -l'</pre>
<p>Guardamos los cambios y pasamos a lo siguiete que es:</p>
<pre>nano .bash_profile</pre>
<p>Pegamos esta condición<strong> para que .bashrc se cargue al iniciar sesión.</strong></p>
<pre>if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi</pre>
<p>All done, ya podes reiniciar la sesión que vas a ver que el alias &#8220;<strong>ll</strong>&#8221; funciona sin problemas. <img src='http://www.e-capy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/habilitar-bashrc-al-iniciar-sesion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acceder a &#8220;manager webapp&#8221; en Tomcat 7</title>
		<link>http://www.e-capy.com/acceder-a-manager-webapp-en-tomcat-7/</link>
		<comments>http://www.e-capy.com/acceder-a-manager-webapp-en-tomcat-7/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 21:32:57 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Tip]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1393</guid>
		<description><![CDATA[Aparentemente a la gente de tomcat se les ha olvidado actualizar la documentacion que muestra en la página index que ofrece por defecto:

Por lo que si las seguís, va a ser imposible que accedas al &#8220;manager webapp&#8221;. Aprovecho para felicitar a los maestros de Tomcat, que un error así  [...]]]></description>
			<content:encoded><![CDATA[<p>Aparentemente a la gente de tomcat se les ha olvidado actualizar la documentacion que muestra en la página index que ofrece por defecto:</p>
<p><a href="http://www.e-capy.com/wp-content/uploads/2012/03/index_Apache_Tomcat1.png"><img class="aligncenter size-full wp-image-1395" title="index_Apache_Tomcat" src="http://www.e-capy.com/wp-content/uploads/2012/03/index_Apache_Tomcat1.png" alt="" width="553" height="150" /></a></p>
<p>Por lo que si las seguís, va a ser imposible que accedas al &#8220;manager webapp&#8221;.<strong> Aprovecho para felicitar a los maestros de Tomcat, que un error así no es nada a comparación del pedazo de soft que nos dan sin pedir ni una moneda <img src='http://www.e-capy.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </strong></p>
<p>Vamos a solucionar este problemita:</p>
<p>Edita el archivo<strong> /etc/tomcat7/tomcat-users.xml</strong> y agrega estas lineas<strong> dentro del tag<span style="color: #993300;"> &lt;tomcat-users&gt;&lt;/tomcat-users&gt;</span></strong>:</p>
<pre>&lt;role rolename="manager-gui" /&gt;
&lt;user username="<strong>miusuario</strong>" password="<strong>mipassword</strong>" roles="manager-gui"/&gt;</pre>
<p>No olvides de poner el usuario y clave que quieras.<br />
Listo, saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/acceder-a-manager-webapp-en-tomcat-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar java 7 en Ubuntu o Linux Mint</title>
		<link>http://www.e-capy.com/instalar-java-7-en-ubuntu-o-linux-mint/</link>
		<comments>http://www.e-capy.com/instalar-java-7-en-ubuntu-o-linux-mint/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 21:10:10 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1389</guid>
		<description><![CDATA[Si necesitas usar java 7 en Ubuntu o Linux Mint, estás en el lugar indicado. solo tenes que que lanzar en una consola estos 3 simples comandos:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-jdk7-installer tomcat7-admin
Nota final: si teni [...]]]></description>
			<content:encoded><![CDATA[<p>Si necesitas usar<span style="color: #993300;"><strong> java 7</strong></span> en Ubuntu o Linux Mint, estás en el lugar indicado. solo tenes que que lanzar en una consola estos 3 simples comandos:</p>
<pre>sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-jdk7-installer tomcat7-admin</pre>
<p>Nota final: si tenias instalada otra versión de java u Openjdk vas a tener que setear la versión que acabas de instalar mediante el comando:</p>
<pre>sudo update-alternatives --config java</pre>
<p>Cortesía de los chicos de <a href="http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html" target="_blank">webupd8</a>. <img src='http://www.e-capy.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/instalar-java-7-en-ubuntu-o-linux-mint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal 7: Panels no me dejaba crear links dinamicos</title>
		<link>http://www.e-capy.com/drupal-7-panels-no-me-dejaba-crear-links-dinamicos/</link>
		<comments>http://www.e-capy.com/drupal-7-panels-no-me-dejaba-crear-links-dinamicos/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 22:59:19 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Drupal 7]]></category>
		<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1379</guid>
		<description><![CDATA[Bueno el titulo del post no se explica muy bien, pero que le voy a hacer, no tengo tanto espacio. Me explico:
Hice un panel con una url dinámica &#8221;dashboard/!seccion&#8220;, y paralelamente cree un menú llamado &#8220;Secciones dashboard&#8221;
El problema se me dio cuando quise comenzar a agregar en [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno el titulo del post no se explica muy bien, pero que le voy a hacer, no tengo tanto espacio. Me explico:</p>
<p>Hice un panel con una url dinámica &#8221;<strong>dashboard/!seccion</strong>&#8220;, y paralelamente cree un menú llamado &#8220;<strong>Secciones dashboard</strong>&#8221;</p>
<p>El problema se me dio cuando quise comenzar a agregar enlaces al menú del tipo &#8221;<span style="color: #993300;">dashboard/perfil</span>&#8220;, &#8221;<span style="color: #993300;">dashboard/datos-de-la-cuenta</span>&#8220;, etc. y me daba error al crear cualquier elemento:</p>
<p><a href="http://www.e-capy.com/wp-content/uploads/2012/02/add_link_fail.png"><img class="aligncenter size-full wp-image-1380" title="add_link_fail" src="http://www.e-capy.com/wp-content/uploads/2012/02/add_link_fail.png" alt="" width="519" height="331" /></a></p>
<p>Después de darle un poco de vueltas al asunto (google, foros, debug) termine dándome cuenta de la boludez que era, y es que para crear elementos de menú que apunten a un panel, primero tenes que darle permisos de acceso al panel (atento a la imagen porque no estoy hablando de permisos de Drupal):</p>
<p><a href="http://www.e-capy.com/wp-content/uploads/2012/02/panels_access.png"><img class="aligncenter size-full wp-image-1381" title="panels_access" src="http://www.e-capy.com/wp-content/uploads/2012/02/panels_access.png" alt="" width="682" height="376" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/drupal-7-panels-no-me-dejaba-crear-links-dinamicos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalar Solr y configurar multiples cores en Linux Ubuntu</title>
		<link>http://www.e-capy.com/instalar-solr-y-configurar-multiples-cores-en-linux-ubuntu/</link>
		<comments>http://www.e-capy.com/instalar-solr-y-configurar-multiples-cores-en-linux-ubuntu/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 13:42:08 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Apache Solr]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1355</guid>
		<description><![CDATA[Aclaraciones:

El proceso de instalación de Solr es valido para cualquier otra versión de Solr.
Un core es un hilo nuevo dentro de la misma instancia de Solr. Esto permite que se corra una sola instancia de Solr pero con varios buscadores.

Este tutorial asume que tienen instalado Java  [...]]]></description>
			<content:encoded><![CDATA[<p>Aclaraciones:</p>
<ul>
<li><span class="Apple-style-span"><span class="Apple-style-span" style="line-height: 18px;">El proceso de instalación de Solr es valido para cualquier otra versión de Solr.</span></span></li>
<li><span class="Apple-style-span" style="line-height: 18px;">Un core es un hilo nuevo dentro de la misma instancia de Solr. Esto permite que se corra una sola instancia de Solr pero con varios buscadores.</span></li>
</ul>
<p>Este tutorial asume que tienen instalado Java 7 y tomcat 7. Si tienen las versiones 6 le cambian el numero donde sea oportuno y funciona.</p>
<p>Vamos a ello:</p>
<p>Cuando tengas en tus manos el <a title="Descargalo desde la página oficial" href="http://apache.rediris.es/lucene/solr/" target="_blank">paquete se Solr</a>, descomprimelo y ponte con la consola dentro de esa carpeta.</p>
<p>Cambia a sudo:</p>
<pre>sudo su</pre>
<p><span style="color: #808080;"><span style="text-decoration: underline;">Curiosidad</span>: Aunque en el paquete que descargamos de Apache Solr <strong>haya al rededor de 2950 archivos</strong> <strong>solo nos van a hacer falta al rededor de 10</strong>:</span></p>
<p>Lanzamos en consola lo siguiente:</p>
<pre>cp dist/apache-solr-*.war /var/lib/tomcat7/webapps/solr.war
mkdir /var/lib/tomcat7/solr
cp -R example/multicore/core0/ /var/lib/tomcat7/solr/core0
mkdir /var/lib/tomcat7/solr/core0/data
sudo chown -R tomcat7:tomcat7 /var/lib/tomcat7/solr</pre>
<p>Ahora edita <strong>/var/lib/tomcat7/solr/solr.xml</strong>, pega lo siguiente y guárdalo.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;

&lt;solr persistent=&quot;true&quot; sharedLib=&quot;lib&quot;&gt;
 &lt;cores adminPath=&quot;/admin/cores&quot;&gt;

  &lt;core name=&quot;core0&quot; instanceDir=&quot;core0&quot;&gt;
    &lt;property name=&quot;dataDir&quot; value=&quot;/var/lib/tomcat7/solr/core0/data&quot; /&gt;
  &lt;/core&gt;

 &lt;/cores&gt;
&lt;/solr&gt;
</pre>
<p>Edita <strong>/etc/tomcat7/Catalina/localhost/solr.xml</strong>, pega lo siguiente y guárdalo.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;

&lt;Context docBase=&quot;/var/lib/tomcat7/webapps/solr.war&quot; debug=&quot;0&quot; privileged=&quot;true&quot; allowLinking=&quot;true&quot; crossContext=&quot;true&quot;&gt;
	&lt;Environment name=&quot;solr/home&quot; type=&quot;java.lang.String&quot; value=&quot;/var/lib/tomcat7/solr&quot; override=&quot;true&quot; /&gt;
&lt;/Context&gt;
</pre>
<p>Listo, reiniciemos tomcat para ver en funcionamiento el core que hemos creado:</p>
<pre>service tomcat7 restart</pre>
<p>Entramos en <a href="http://localhost:8080/solr/">http://localhost:8080/solr/</a> y lo vamos a ver.</p>
<p style="text-align: center;"><a href="http://www.e-capy.com/wp-content/uploads/2012/01/solr-con-1core.png"><img class="size-full wp-image-1368 aligncenter" title="Solr con su primer core" src="http://www.e-capy.com/wp-content/uploads/2012/01/solr-con-1core.png" alt="" width="464" height="209" /></a></p>
<p style="text-align: center;"><a href="http://www.e-capy.com/wp-content/uploads/2012/01/solr-1core-admin.png"><img class="size-full wp-image-1369 aligncenter" title="Solr con su primer core, area admin" src="http://www.e-capy.com/wp-content/uploads/2012/01/solr-1core-admin.png" alt="" width="630" height="532" /></a></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Bueno ya tenemos un Solr con un core, pero tiene poco sentido montar un Solr de multicores que tenga un solo core, así que vamos a crear uno mas.</p>
<p>Para este nuevo core (y todos los que quieras crear) hay que hacer dos cosas:<br />
<strong>1:</strong> copiar la carpeta core0 junto a su owner para ahorrarnos de andar creando la misma estructura:</p>
<pre>cp -Rp /var/lib/tomcat7/solr/core0 /var/lib/tomcat7/solr/paraDrupall</pre>
<p>NOTA: No olvides editar <strong>/var/lib/tomcat7/solr/paraDrupal/conf/schema.xml</strong> y <strong>/var/lib/tomcat7/solr/paraDrupal/conf/solrconfig.xml</strong> para ajustar sus parámetros.</p>
<p>2: actualizar <strong>/var/lib/tomcat7/solr/solr.xml</strong> agregandole un nuevo tag con lo siguiente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;core name=&quot;paraDrupal&quot; instanceDir=&quot;paraDrupal&quot;&gt;
  &lt;property name=&quot;dataDir&quot; value=&quot;/var/lib/tomcat7/solr/paraDrupal/data&quot; /&gt;
&lt;/core&gt;
</pre>
<p>Reinicia tomcat y ya tenes otro core.</p>
<p><a href="http://www.e-capy.com/wp-content/uploads/2012/01/solr-2cores.png"><img class="aligncenter size-full wp-image-1370" title="Solr con 2 cores" src="http://www.e-capy.com/wp-content/uploads/2012/01/solr-2cores.png" alt="" width="433" height="195" /></a></p>
<p><a href="http://www.e-capy.com/wp-content/uploads/2012/01/solr-2cores-admin.png"><img class="aligncenter size-full wp-image-1371" title="Solr con 2 cores, area admin" src="http://www.e-capy.com/wp-content/uploads/2012/01/solr-2cores-admin.png" alt="" width="630" height="550" /></a></p>
<p>Suerte y saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/instalar-solr-y-configurar-multiples-cores-en-linux-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Copiar y pegar en Putty en Linux</title>
		<link>http://www.e-capy.com/copiar-y-pegar-en-putty-en-linux/</link>
		<comments>http://www.e-capy.com/copiar-y-pegar-en-putty-en-linux/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 09:22:15 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Tip]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1218</guid>
		<description><![CDATA[Me lo tengo merecido por usar Windows.
Para los que estén usando putty sobre Linux puede que hayan notado que las siguientes funcionalidades no están disponibles:

Cuando seleccionas algo en putty esto automáticamente queda copiado por lo que podes ir a notepad (por decir algo) y [...]]]></description>
			<content:encoded><![CDATA[<p>Me lo tengo merecido por usar Windows.</p>
<p><strong>Para los que estén usando putty sobre Linux</strong> puede que hayan notado que las siguientes funcionalidades no están disponibles:</p>
<ul>
<li>Cuando seleccionas algo en putty esto automáticamente queda copiado por lo que podes ir a notepad (por decir algo) y pegarlo directamente.</li>
<li>Cuando tenes algo copiado de notepad y lo quieres pegar en putty solamente haces click derecho sobre el y se pega.</li>
</ul>
<p>Bueno, a priori <strong>me parecía que no existía esa funcionalidad</strong> y no le di mayor importancia <strong>hasta que un dia di con esa funcionalidad</strong> por casualidad.</p>
<p><strong>Resulta que cuando seleccionas algo en putty esto si que se copia a un portapapeles, pero la forma de pegar ese texto copiado es con el click central (la rueda del ratón). Esto es para ambos sentidos. Si seleccionas algo de gedit (por decir algo) y haces click central en putty, también se va a pegar el texto. </strong></p>
<p>&nbsp;</p>
<p>Ya sabes lo que se dice. Nunca te acostaras sin haber aprendido algo nuevo.</p>
<p>Saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/copiar-y-pegar-en-putty-en-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Benchmark Drupal 7 + APC + Memcached + Varnish sobre usuarios anónimos</title>
		<link>http://www.e-capy.com/benchmark-drupal-7-apc-memcached-varnish-sobre-usuarios-anonimos/</link>
		<comments>http://www.e-capy.com/benchmark-drupal-7-apc-memcached-varnish-sobre-usuarios-anonimos/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 01:59:16 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Drupal 6]]></category>
		<category><![CDATA[Drupal 7]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Servidores]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1311</guid>
		<description><![CDATA[Vamos a hacer algunos testeos para ver lo que podemos llegar a ganar en performance al implementar una serie de tecnologías sobre Drupal 7.
Las pruebas las realizare sobre una instalación LAMP estándar de Ubuntu (Linux Mint en realidad):

mysql 5.1.58 (Con su configur [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a hacer algunos testeos para ver lo que podemos llegar a ganar en performance al implementar una serie de tecnologías sobre Drupal 7.</p>
<p>Las pruebas las realizare sobre una instalación LAMP estándar de Ubuntu (Linux Mint en realidad):</p>
<ul>
<li>mysql 5.1.58 (Con su configuración por defecto)</li>
<li>php 5.3.6 (Con su configuración por defecto)</li>
</ul>
<p>El software para mejorar la performance que usé y las versiones de cada uno son:</p>
<ul>
<li>APC-3.1.9</li>
<li>memcached 1.4.7</li>
<li>Varnish 3.0.4</li>
</ul>
<p>Esta prueba es solo para que nos demos una idea de lo que podría llegar a implicar el aplicar estas tecnologías en nuestro sitio de Drupal 7, por lo que he dejado fuera cualquier explicación técnica.</p>
<p>Las pruebas las hice en un core2Duo @ 2.2ghz de 2 núcleos en un Linux Mint de 64bits y 8gb de ram.</p>
<p>La idea es ir agregando tecnologías e ir viendo el teórico beneficio que esta aporta aplicadas a la practica.</p>
<p>Lo primero es lo primero. vamos a hacer un bench de Drupal 7.10 en sobre nuestro LAMP sin haber tocado su configuración inicial.</p>
<p>Utilice Apache benchmark (ab) para todos los testeos variando la concurrencia y cantidad de request para aprovechar al máximo los recursos de los que disponía en cada testeo que hice.</p>
<h5>Primera ronda. Estableciendo un punto de referencia.</h5>
<p><strong><span style="text-decoration: underline;">Test 1: Drupal 7 sin cache de ningún tipo.</span></strong></p>
<h6><span style="text-decoration: underline;"><span style="color: #008000; text-decoration: underline;">Resultados:</span></span><br />
<span style="color: #008000;"> Requests per second:<strong> 5.71</strong> [#/sec] (mean)</span><br />
<span style="color: #008000;"> Transfer rate: <strong>45.35</strong> [Kbytes/sec] received</span></h6>
<p><span style="text-decoration: underline;"><strong>Test 2: </strong>Drupal 7<strong> marcandole las opciones &#8220;Aggregate and compress CSS files.&#8221; y &#8220;Aggregate JavaScript files.&#8221; en &#8220;admin/config/development/performance&#8221;</strong></span></p>
<h6><span style="text-decoration: underline;"><span style="color: #008000; text-decoration: underline;">Resultados:</span></span><br />
<span style="color: #008000;"> Requests per second: <strong>6.38</strong> [#/sec] (mean)</span><br />
<span style="color: #008000;"> Transfer rate: <strong>46.27</strong> [Kbytes/sec] received</span></h6>
<p><span style="color: #808080;">Podemos apreciar que no hay cambios. nada que comentar.</span></p>
<p><strong style="text-decoration: underline;">Test 3: </strong><span style="text-decoration: underline;">La configuración del testeo anterior +</span><strong style="text-decoration: underline;"> &#8220;Cache blocks&#8221; en &#8220;admin/config/development/performance&#8221;</strong></p>
<h6><span style="text-decoration: underline;"><span style="color: #008000; text-decoration: underline;">Resultados:</span></span><br />
<span style="color: #008000;"> Requests per second:<strong> 5.18</strong> [#/sec] (mean)</span><br />
<span style="color: #008000;"> Transfer rate: <strong>37.54</strong> [Kbytes/sec] received</span></h6>
<p>Pasados los tes primeros test ya no quedan dudas que el cuello de botella de los procesadores son los limitantes. Apenas si pudimos conseguir que varíe el resultado.</p>
<p style="text-align: center;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Hasta acá fue lo aburrido, porque en realidad lo anterior no tiene ninguna magia, pero nos da una buena idea de desde que base estamos partiendo. Nuestro objetivo es subir grotescamente la media de request por segundo partiendo de los aproximadamente 6 que hemos conseguido hasta ahora.</p>
<p><strong style="text-decoration: underline;">Test 4: </strong><span style="text-decoration: underline;">La configuración del test anterior +</span><strong style="text-decoration: underline;"> &#8220;Cache pages for anonymous users&#8221; (El cache normal de Drupal).</strong></p>
<h6><span style="text-decoration: underline;"><span style="color: #008000; text-decoration: underline;">Resultados:</span></span><br />
<span style="color: #008000;"> Requests per second: <strong>127.22</strong> [#/sec] (mean)</span><br />
<span style="color: #008000;"> Transfer rate: <strong>921.83</strong> [Kbytes/sec] received</span></h6>
<p><span style="color: #808080;">Bueno bueno bueno, esto ya es otra cosa. El cache de Drupal por si solo incrementa los request de una forma brutal, pero no nos quedamos ahí ni en broma, vamos a por mas RPS (request por segundo)</span></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<h5>Segunda ronda. tecnologías y configuraciones foráneas:</h5>
<p><strong style="text-decoration: underline;">Test 5:</strong><span style="text-decoration: underline;"> La configuración del test anterior +</span><strong style="text-decoration: underline;"> APC.</strong></p>
<p>Este es uno de los cambios mas recomendados siempre que queramos obtener un incremento de performance (y mejor aprovechamiento de la ram disponible) sin tener que tocar ni una sola linea de código de nuestro Drupal.</p>
<h6><span style="text-decoration: underline;"><span style="color: #008000; text-decoration: underline;">Resultados:</span></span><br />
<span style="color: #008000;"> Requests per second: <strong>440.43</strong> [#/sec] (mean)</span><br />
<span style="color: #008000;"> Transfer rate: <strong>3191.39</strong> [Kbytes/sec] received</span></h6>
<p><span style="color: #808080;"><strong>Boom</strong>! performance X4!. Vamos por buen camino. Agreguemos mas de esas cosas que recomiendan los que saben&#8230;</span></p>
<p><strong style="text-decoration: underline;">Test 6: </strong><span style="text-decoration: underline;">La configuración del test anterior +</span><strong style="text-decoration: underline;"> Memcached</strong></p>
<p>Para esta prueba instalé el modulo memcache (http://drupal.org/project/memcache) en su versión 7.x-1.0-rc2 y lo configuré en su forma mas básica según las instrucciones de su configuración.</p>
<h6><span style="text-decoration: underline;"><span style="color: #008000; text-decoration: underline;">Resultados:</span></span><br />
<span style="color: #008000;"> Requests per second:<strong> 397.38</strong> [#/sec] (mean)</span><br />
<span style="color: #008000;"> Transfer rate:<strong> 2734.53</strong> [Kbytes/sec] received</span></h6>
<p><span style="color: #808080;">No hemos visto mejora alguna pero no porque Memcache no sirva, al contrario, en futuros bench les voy a mostrar como si que ayuda, pero bajo este entorno poco sirve ya que es una capa intermedia con la DB y estamos usando el cache de Drupal que apenas si la toca&#8230; en fin, en el próximo bench les muestro, paciencia.</span></p>
<p>Hasta ahora hemos conseguido mejorar los iniciales 6 RPS del principio por fabulosos 400 RPS de media, pero aun nos queda un paso mas para mejorar los request para usuarios anónimos, y ese es Varnish</p>
<p><strong style="text-decoration: underline;">Test 7: </strong><span style="text-decoration: underline;">La configuración del test anterior +</span><strong style="text-decoration: underline;"> Varnish</strong></p>
<h6><span style="text-decoration: underline;"><span style="color: #008000; text-decoration: underline;">Resultados:</span></span><br />
<span style="color: #008000;"> Requests per second: <span style="color: #ff0000;"><strong>6166.57</strong></span> [#/sec] (mean)</span><br />
<span style="color: #008000;"> Transfer rate: <strong>45075.00</strong> [Kbytes/sec] received</span></h6>
<p><span style="color: #808080;">Acaso hay algo que añadir?</span></p>
<h5>Conclusiones:</h5>
<p>Hemos visto como Drupal 7 sin ningún tipo de cache activo es una muy mala idea a la hora de ponerlo en producción.<br />
El cache que trae de serie no es opcional, sino que es mandatorio. No activar como mínimo esta capa de cache en Drupal derivaría automáticamente en un uso elevadisimo de los recursos disponibles, esto acompañado de tiempos de entrega mucho mas largos y por consiguiente la insatisfacción de nuestros clientes.<br />
APC es una excelente adición a nuestro servidor en general ya que agiliza el procesamiento de cualquier pagina escrita en PHP y particularmente en Drupal es un beneficio directo tanto para usuarios anónimos como para usuarios logueados. Recomiendo su uso sin dudarlo aunque hay que hacerlo con cabeza, documentación y alguien que sepa lo que hace si no quieren volver inestable vuestro sistema.</p>
<p>Memcache es una herramienta que no puede faltar en un buen servidor y es harto eficiente para usuarios no logueados en el terreno de Drupal, pero en una instalación en la que casi todos los visitantes sean anónimos, apenas van a sentir la mejora.</p>
<p>Por ultimo y el mas importante, Varnish, que demostró el salto ABISMAL que puede llegar a proporcionar en velocidad cuando lo ponemos a trabajar con una instalación de Drupal. Sin duda pues, esta es la herramienta mas potente de las que hemos utilizado en este bench, pero a su vez, la mas complicada de configurar.</p>
<p>Resumiendo la mejor combinación para usuarios anónimos:<br />
<strong>Cache de Drupal</strong> = performance decente / Configuración&#8230; bueno no lleva configuracion XD. (ganancia de <span style="color: #ff0000;"><strong>21x</strong></span> con con respecto a los 6 de media iniciales)<br />
<strong>Cache de Drupal + APC</strong> = Muy buena performance / Configuración media. (ganancia de <span style="color: #ff0000;"><strong>73x</strong></span> con con respecto a los 6 de media iniciales)<br />
<strong>Cache de Drupal + APC + Varnish</strong> = Bruta performance / Configuración avanzada. (ganancia de <span style="color: #ff0000;"><strong>1027x</strong></span> con con respecto a los 6 de media iniciales)</p>
<p>Disclaimer:<br />
No son ni de lejos las mejores versiones ni servidores los que he usado, pero procuré enfocarme en estos debido a que son los mas extendidos/populares en nuestro creciente mundo llamado Drupal.</p>
<p>Saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/benchmark-drupal-7-apc-memcached-varnish-sobre-usuarios-anonimos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal: El &#8220;view&#8221; de un cck no está disponible cuando hago node_load() [Solución]</title>
		<link>http://www.e-capy.com/drupal-el-view-de-un-cck-no-esta-disponible-cuando-hago-node_load-solucion/</link>
		<comments>http://www.e-capy.com/drupal-el-view-de-un-cck-no-esta-disponible-cuando-hago-node_load-solucion/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 22:00:41 +0000</pubDate>
		<dc:creator>Capy</dc:creator>
				<category><![CDATA[Drupal 6]]></category>
		<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://www.e-capy.com/?p=1283</guid>
		<description><![CDATA[Cuando cargamos un nodo con node_load(), si quisiéramos hacer uso de la propiedad &#8220;view&#8221; de un campo CCK veríamos que la misma no existe:
Esto pasa porque CCK solo prepara esta propiedad cuando un nodo se esta por imprimir mediante node_view(). Si lo que necesitas es usar node_load() en  [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando cargamos un nodo con node_load(), si quisiéramos hacer uso de la propiedad &#8220;view&#8221; de un campo CCK veríamos que la misma no existe:</p>
<pre class="brush: php; title: ; notranslate">
$node = node_load(999);
var_dump($node-&gt;field_precio[0]);

array(2) {
  [&quot;amount&quot;]=&gt;
  string(6) &quot;100.00&quot;
  [&quot;currency&quot;]=&gt;
  string(3) &quot;EUR&quot;
}
</pre>
<p>Esto pasa porque CCK solo prepara esta propiedad cuando un nodo se esta por imprimir mediante node_view(). Si lo que necesitas es usar node_load() en lugar de node_view() la solución es inyectarle la propiedad &#8220;view&#8221; mediante la función que el mismo modulo de CCK utiliza:</p>
<pre class="brush: php; title: ; notranslate">
$node = node_load(999);
$node-&gt;field_precio[0]['view'] = content_format(&quot;field_precio&quot;, $node-&gt;field_precio[0]);

var_dump($node-&gt;field_precio[0]);

array(3) {
  [&quot;amount&quot;]=&gt;
  string(6) &quot;100.00&quot;
  [&quot;currency&quot;]=&gt;
  string(3) &quot;EUR&quot;
  [&quot;view&quot;]=&gt;
  string(11) &quot;100.00 EUR&quot;
}
</pre>
<p>bye!.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.e-capy.com/drupal-el-view-de-un-cck-no-esta-disponible-cuando-hago-node_load-solucion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

