lunes, 27 de febrero de 2012

Prestashop y cache de página ZendFramework


En esta ocasión vamos a aplicar el cache de página que trae ZendFramework en Prestashop de una manera sencilla.

* Paso 0 : Preparativos

1. Debemos tener instaladas las librerías de ZendFramework dentro de Prestashop en
la carpeta: library/Zend

2. Habilitamos el cache de Prestashop:
config/settings.inc.php:
define('_PS_CACHING_SYSTEM_', 'CacheFS');
define('_PS_CACHE_ENABLED_', 1)
config/defines.inc.php:
define('_PS_CACHEFS_DIRECTORY_', dirname(__FILE__).'/../cache/');

Al estar utilizando Cache de Archivo tendremos que darle permisos a la carpeta indicada por la constante: _PS_CACHEFS_DIRECTORY_
chmod a+rw -Rf

* Paso 1 : Cache de Página

En este paso vamos a crear la lógica para el cache de archivos. Para esto creamos el archivo : config/cache.page.inc.php

<?php
if (function_exists('date_default_timezone_set'))
    @date_default_timezone_set('America/Lima') ;
define('APPLICATION_PATH', realpath(dirname(__FILE__)));
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/library'),
    get_include_path(),
)));
require_once('Zend/Cache.php');
if (_PS_CACHE_ENABLED_) {
    $frontendOpts = array(
    'lifetime' => 60*60*4,
    'debug_header' => false,
    'regexps' => array(
    '^/$' => array('cache' => true),
    '^/es/$' => array('cache' => true),
    '^/Myadmin/$' => array('cache' => false)               
    )
    );
    switch(_PS_CACHING_SYSTEM_){
    case 'MCached':
    $servers = MCachedCore::getMemcachedServers();
    if (!$servers) return false;
    foreach ($servers AS $server)
        $servidores[] = array('host' => $server['ip'], 'port' => $server['port']);   
    $backendOpts = array(
        'servers' => $servidores,
        'compression' => false
        );
    $cache = Zend_Cache::factory('Page', 'Memcached', $frontendOpts, $backendOpts);
    break;  
    default :
    $backendOpts = array(
        'cache_dir' => _PS_CACHEFS_DIRECTORY_,
         'hashed_directory_level' => 2
        );
    $cache = Zend_Cache::factory('Page', 'File', $frontendOpts, $backendOpts);
    break;
    }
    if (!isset($_GET['iso_lang'])){
    global $cookie;
    if (! isset($cookie)){
        $cookieLifetime = (time() + (((int) Configuration::get('PS_COOKIE_LIFETIME_FO') > 0 ? (int) Configuration::get('PS_COOKIE_LIFETIME_FO') : 1) * 3600));
        $cookie = new Cookie('ps', '', $cookieLifetime);
    }
    $lang = $cookie->id_lang;
    } else $lang = $_GET['iso_lang'];
    $cacheName = substr(str_replace('.','_',$_SERVER['SCRIPT_NAME']), 1) . '_' . $lang . '_'. md5($_SERVER['QUERY_STRING']);
    $cache->start($cacheName);
}


Como observamos el cache tiene un tiempo de (60*60*4) 4 horas y el nombre del mismo estará formado de la página visitada, el lenguaje y los valores enviados por $_GET.

* Paso 2: Aplicando el cache a la página principal, categorias y productos.

Este paso en realidad es muy sencillo, de incluir el archivo de cache.page.inc.php luego del archivo config.inc.php :
require(dirname(__FILE__) . '/config/config.inc.php');
require(dirname(__FILE__) . '/config/cache.page.inc.php');
Esto en los archivos:
index.php
category.php
product.php

* ¿No loguea al usuario?
Como veran en las secciones que indicamos ya se aplica cache de página; y probando la aplicación estas no cambiaran a pesar de que nos logueemos.

Una solución rápida para el caso de logueo es validar el uso de cache solo cuando no este logueado:

require(dirname(__FILE__) . '/config/config.inc.php');
global $cookie;
if (! isset($cookie)){
  $cookieLifetime = (time() + (((int) Configuration::get('PS_COOKIE_LIFETIME_FO') > 0 ? (int) Configuration::get('PS_COOKIE_LIFETIME_FO') : 1) * 3600));
  $cookie = new Cookie('ps', '', $cookieLifetime);
}
if(! $cookie->isLogged()){
   require(dirname(__FILE__) . '/config/cache.page.inc.php');
}

** Otra solución


Una solución compleja y recomendable sería (sin diferenciar el cache) mediante llamadas AJAX refrescar solo las secciones que estan relacionadas exclusivamente al Cliente (Login de usuario y Carrito de compras)
Enhanced by Zemanta

jueves, 22 de septiembre de 2011

Script para crear aplicaciones XUL

A continuación público el código de una aplicación desarrollada en BASH que permite crear la estructura inicial de una aplicación XUL.
La aplicación se llama xul_skel.sh, a continuación su código fuente.

#!/bin/bash
PROY=$1
PROY_DATE='20110101'
PROY_ID='webmaster@xulskel.com'
XUL_MIN_VERSION='1.0'
XUL_MAX_VERSION='8.*'
mkdir $PROY
mkdir $PROY/chrome
mkdir $PROY/chrome/content
mkdir $PROY/defaults
mkdir $PROY/defaults/preferences
echo -e '<?xml version="1.0"?>\n<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>\n<window id="main" title="'$PROY'" width="300" height="300" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">\n<script type="application/javascript" src="chrome://'$PROY'/content/main.js"/>\n</window>' > $PROY/chrome/content/main.xul
echo " " > $PROY/chrome/content/main.js
echo "manifest chrome/chrome.manifest" > $PROY/chrome.manifest
echo -e 'pref("toolkit.defaultChromeURI", "chrome://'$PROY'/content/main.xul");\n' > $PROY/defaults/preferences/prefs.js
#echo -e '[App]\nVendor=' $PROY '\nName=TestApp\nVersion=1.0\nBuildID=' $PROY_DATE '\nID=' $PROY_ID '\n\n[Gecko]\nMinVersion=' $XUL_MIN_VERSION '\nMaxVersion=' $XUL_MAX_VERSION '\n' > $PROY/application.ini
echo -e '[App]\nVendor='$PROY'\nName='$PROY'\nVersion=1.0\nBuildID='$PROY_DATE'\nID='$PROY_ID'\n\n[Gecko]\nMinVersion='$XUL_MIN_VERSION'\nMaxVersion='$XUL_MAX_VERSION'\n' > $PROY/application.ini
echo 'content '$PROY' content/' > $PROY/chrome/chrome.manifest
echo 'firefox --app ./application.ini'>$PROY/$PROY.sh
chmod u+x $PROY/$PROY.sh


Añade código fuente a tu Blog

Una de las opciones para añadir código fuente a nuestro Blog es mediante CSS.

En la plantilla de nuestro Blog añadimos el siguiente estilo:

  .source-code {
  font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace;
  color: #000000;
  background-color: #eee;
  font-size: 12px;
  border: 1px dashed #999999;
  line-height: 14px;
  padding: 5px;
  overflow: auto; 
display:block;
  width: 95%
  }

Y luego lo podemos usarlo dentro de nuestros POSTs con el tag PRE.

martes, 16 de agosto de 2011

Debian cumple 18 años

Debian cumple 18 años: "Como cada 16 de agosto desde hace 18 años hoy se celebra el Debian Day, el cumpleaños del “sistema operativo universal” que en esta ocasión llega nada menos que a su “mayoría de edad”. Fue el 16 de agosto de 1993 cuando Ian Murdock comenzó un proyecto que seguramente ha sobrepasado sus mejores expectativas, convirtiéndose [...]


Related posts:
  1. Debian cumple 17 añitos

  2. Debian cumple 15 años

  3. Debian 6.0 tendrá un kernel completamente libre de código propietario
"

lunes, 22 de noviembre de 2010

Mejorar el rendimiento de GNU/Linux

Lennart Poettering, un desarrollador de Red Hat, ha descubierto una forma de mejorar el rendimiento del sistema operativo GNU/Linux. A continuación mostramos la forma de hacerlo.

Para Ubuntu

Abrir el archivo /etc/rc.local y encima de la línea exit 0 añadir las siguientes líneas:
mkdir -p /dev/cgroup/cpu
mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
mkdir -m 0777 /dev/cgroup/cpu/user
echo "1" > /dev/cgroup/cpu/user/notify_on_release
echo "/usr/local/sbin/cgroup_clean" > /dev/cgroup/cpu/release_agent

Convertimos el fichero en ejecutable:
$sudo chmod +x /etc/rc.local

A nuestro archivo ~/.bashrc añadimos las líneas:
if [ "$PS1" ] ; then
mkdir -m 0700 /dev/cgroup/cpu/user/$$
echo $$ > /dev/cgroup/cpu/user/$/tasks
fi

Creamos el archivo /usr/local/sbin/cgroup_clean con las siguientes líneas:
#!/bin/sh
rmdir /dev/cgroup/cpu/$1

Convertimos en ejecutable el archivo creado:
$sudo chmod +x /usr/local/sbin/cgroup_clean

Como paso final reiniciamos la maquina o ejecutamos el archivo /etc/rc.local
$sudo /etc/rc.local

Para otras distribuciones

Añadir al archivo ~/.bashrc las siguientes líneas:
if [ "$PS1" ] ; then
mkdir -m 0700 /sys/fs/cgroup/cpu/user/$
echo $ > /sys/fs/cgroup/cpu/user/$/tasks
fi

Ejecutamos como super usuario las siguientes líneas:
#mount -t cgroup cgroup /sys/fs/cgroup/cpu -o cpu
#mkdir -m 0777 /sys/fs/cgroup/cpu/user

Fuente: http://pastebin.com/raw.php?i=sHRYRuAN

viernes, 12 de noviembre de 2010

2 consejos para acelerar Firefox

Firefox es uno de los navegadores mas potentes y usados en la actualidad. Pero consume muchos recursos en muchas ocasiones. A continuación dos consejos para resolver estos problemas.
Para esto debemos ingresar a la barra de direcciones de Firefox : about:config y buscar los siguiente parámetros:

Consejo 1: Mejorar velocidad de conexión
Cambiemos los siguientes valores de nuestro about:config.
PreferenciaValorTipo de valorTipo de preferencia
network.http.pipeliningtrueLógicoExistente
network.http.pipelining.maxrequests30EnteroExistente
network.http.proxy.pipeliningtrueLógicoExistente
nglayout.initialpaint.delay0EnteroNueva

Consejo 2: Consumo de memoria
Para mejorar el consumo de memoria es preferible bajar el valor de capacidad de cache.
PreferenciaValorTipo de valorTipo de preferencia
browser.cache.memory.enabletrueLógicoExistente
browser.cache.memory.capacityTamaño cachéEnteroNueva

Con estos ajustes conseguiremos sacar un poco más de partido a nuestra conexión.

Emacs en windows: arranque rápido

En windows la carga de emacs implica una demora en windows pero se puede mejorar usando el demonio de emacs y modificar la llamada usando el...