lunes, 31 de marzo de 2008

Problema de audio con Wolfenstein ET en linux

Bueno para los que instalaron Wolfesntein Enemy Territory en linux (en mi caso la distribución Ubuntu) y el audio del juego no se escucha, pueden probar la solución que les dejo. Es la siguiente:
  • Como usuario root ejecutas la siguiente línea de comando:
    #: echo "et.x86 0 0 direct" >> /proc/asound/card0/pcm0p/oss
  • Si queremos guardar esos cambios, debemos ejecutar lo siguiente:
    #: nano /etc/rc.local y agregamos la línea echo "et.x86 0 0 direct" >> /proc/asound/card0/pcm0p/oss
Fuente: http://blogdrake.net/node/3047

Saludos ...

viernes, 14 de marzo de 2008

Desinstalar Aplicaciones compiladas en Linux

Normalmente utilizo apt para instalar mis aplicaciones en linux (en mi caso utilizo Ubuntu). Pero hay aplicaciones que no se encuentran en los repositorios de paquetes y por esto hay casos en los que debemos compilar código.

Normalmente la instalación de una aplicación sería:
  • ./configure
  • make
  • make install //Como usuario root
Para poder desinstalar debemos tener el código fuente con el que compilamos y seguir los siguientes pasos:
  • ./configure
  • make uninstall
Si no funcione verificar en el archivo Makefile si existe alguna directiva de Unistall.

Saludos ...

martes, 11 de marzo de 2008

Benchmark a tu sitios con ApacheBench en Linux

Si tu sitio u aplicación está alojada en un servidor que corre sobre apache, entonces podemos hacer un Benchmark para verificar el tiempo de respuesta de nuestra aplicación, gracias a la aplicación ApacheBench.

Este aplicación nos ayuda para hacer benchmark de aplicaciones hechas en php por ejemplo u otro tipo de aplicaciones, ya que podemos medir el tiempo de respuesta de nuestra app.

Ahora les coloco un ejemplo de su uso:
  • Entramos a la consola y colocamos:
    #: ab -c 10 -t 60 http://example.org/productos.php
  • Para llamar a la aplicación utilizamos el comando ab; explico los parámetros:
    • -c: este parámetro indica el número de clientes con el cual se va a llevar a cabo el test.
    • -t: indica el tiempo durante el cual se va a llevar a cabo el test. Este tiempo es en segundos.
Además de esos parámetros que pueden ser de utilidad para nuestras benchmark a servidores apache. Compruebe introduciendo ab man para obtener más información.

Espero puedan mejorar los procesos de sus aplicaciones utilizando esta herramienta para medir su rendimiento.

Saludos ...

jueves, 6 de marzo de 2008

Problemas con bindable y paginate en CakePHP

Últimamente tuve un poco de problemas con los binds y la función paginate de la nueva versión de el marco de trabajo cakephp, la 1.2.

Mi problema surgía cuando quería buscar todos los posts que estuvieran asociados a un tag específico, pero sólo quería traer la relación que el post tenía con Usuario y no la relación con Comentarios. Buscando por ahí me encuentra con una respuesta del Sr. Mariano Iglesias, que dice que la función paginate rehace las relaciones (por esta razón cualquiera unbindModel no funcionaría). En este enlace se puede encontrar información sobre el behavior Bindable. En mi caso la solución fue la siguiente:
  • Creo app_model.php y le agrego:
    var $actsAs = array('Bindable');
  • El método en el controlador post quedó así:
    function tag($id = null){
    if (!$id) {
    $this->Session->setFlash(__('Invalid Tag.', true));
    $this->redirect(array('action'=>'index'));
    }
    $this->layout = 'blog';
    // $this->Post->unbindModel(array('hasMany' => array('TrackPost', 'Comentario'), 'hasAndBelongsToMany' => array('Tag')));
    $this->Post->restrict(false, 'Usuario');
    /*$this->Post->bindModel(array('hasAndBelongsToMany' => array('Tag' => array(
    'joinTable' => 'posts_tags',
    'foreignKey' => 'post_id',
    'associationForeignKey' => 'tag_id',
    'unique' => false,
    'conditions' => 'Tag.id = '.$id)
    )
    ));*/
    $this->Post->Tag->recursive = 2;
    $this->set('existSession', $this->existSession());
    //$this->set('posts', $this->Post->Tag->find(array('Tag.id' => $id)));
    $this->set('posts', $this->paginate('Tag', array('Tag.id' => $id)));
    $this->Post->resetBindable(true);
    }
  • Lo interesante está en las siguientes líneas:
    • $this->Post->restrict(false, 'Usuario'); : esta línea restringe a que Post solo tengo relación con Usuario y el parámetro false hace que todos los cambios que haz hecho de relaciones sean permanentes.
    • $this->Post->resetBindable(true); : reseteo las relaciones para que funcionen como estaban.
Bueno con esto resolví mi problema. Saludos ...

lunes, 3 de marzo de 2008

Cakephp relación HBTM personalizada

Trabajando con CakePHP me encuentro en el manual el típico ejemplo de una relación de muchos a muchos (ejemplo de la relación de posts y tags).

Según la documentación se debe crear un campo select multiple para colocar los tags aquí. Este método no me gustó mucho y decidí hacerlo al estilo de el bloguer de Google, o sea, separar los tags por compas en un campo tipo text.

Mi solución consiste en buscar en la base de datos si los tags que el usuario introdujo existen, de no existir los inserto y obtengo su id. En el modelo post agregué el método beforeSave. Aquí les dejo el código:
public function beforeSave(){
if ($this->data['Tag']['tags'] != ''){ //Campo $form->input('Tag/tags')
$tags = explode(',', $this->data['Tag']['tags']);
foreach($tags as $tag){
$tag = trim($tag);
$tag_find = $this->Tag->findByTagname($tag);
if ($tag_find){
$tag_id = $tag_find['Tag']['id'];
}else{
$tag_ins = array('Tag' => array('tagname' => $tag));
$this->Tag->save($tag_ins);
$tag_id = $this->Tag->getLastInsertID();
}
$this->data['Tag']['Tag'][] = (string) $tag_id;
}
}
unset($this->data['Tag']['tags']);
return true;
}


Para el caso de la acción de editar, coloqué este código en el método:
if (empty($this->data)) {
$this->data = $this->Post->read(null, $id);
foreach($this->data['Tag'] as $tag){
$tags[] = $tag['tagname'];
}
$tags = implode(', ', $tags);
$this->set('tags', $tags);
}

Y en la vista
echo $form->input('Tag/tags', array('label' => 'Tags separados por coma', 'type' => 'text', 'value' => $tags));

Listo, de esta manera utilizamos la relación de muchos a muchos en cakephp, pero a nuestra manera.

Saludos ...

miércoles, 27 de febrero de 2008

Internet Explorer 6 y 7 en Linux

Algo que debe hacer un desarrollador o diseñador web es realizar test a los proyectos en los cuales trabaja. Estos test debe hacerlo en diferentes exploradores como Internet Explorer, Firefox, Safari, etc. Por esta razón es de gran importancia contar con aunque sea los 3 ántes mencionados para realizar estos test.
En linux la mayoría de las personas usa Firefox ya que tiene una versión nativa para linux, pero para Internet Explorer no la hay. Pero afortunadamente existe el proyecto IEs 4 Linux. Con esta opción podemos tener varias versiones de Internet Explorer en Linux, incluso con la versión beta se puede tener IE 7.

Este paquete depende de los paquetes wine y cabextract (en debian o ubuntu utilizar sudo aptitude install wine cabextract)
Los pasos para su instalación son los siguientes:
  • Abrimos la consola y nos bajamos la última versión del paquete:
    #: wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz
  • Descomprimimos el paquete y entramos a la carpeta:
    #: tar zxvf ies4linux-latest.tar.gz #: cd ies4linux-*
  • Ejecutamos el instalador con la opción para IE 7:
    #: ./ies4linux --hack-ie7-proxy-settings
  • Nos debe salir una pantalla como esta:

  • Haz clic en Advanced para que escojas la opción para instalar IE7.
  • Espera a que termine la instalación y listo ya tienes la opción de utilizar IE en linux. Los ejecutables normalmente se guardan en /homa/ususario/bin/.
Saludos ...

lunes, 25 de febrero de 2008

Problema flash-plugin-nonfree para Firefox en Ubuntu

Solución:
La solucion fue la siguiente

1. sudo apt-get install flashplugin-nonfree
2. sudo nano /var/lib/dpkg/info/flashplugin-nonfree.postinst
3. Editar:

Code:
# verify MD5 checksum of (copied or downloaded) tarball
rm -rf install_flash_player_9_linux/
echo "821cc72359a937caef85bb4cc74ef5cd install_flash_player_9_linux.tar.gz"| md5sum -c > /dev/null 2>&1 \
|| fp_exit_with_error "md5sum mismatch install_flash_player_9_linux.tar.gz"

# unpacking and checking the plugin
tar xzf install_flash_player_9_linux.tar.gz || fp_exit_with_error "cannot unpack plugin"
echo "be5a2f9032f8fc8bccbbf5d96c5028f9 install_flash_player_9_linux/libflashplayer.so"| md5sum -c > /dev/null 2>&1 \
|| fp_exit_with_error "plugin changed, not trusted"
echo "a81fd3b03b8c6d6e5a14298110718d3f install_flash_player_9_linux/flashplayer.xpt"| md5sum -c > /dev/null 2>&1 \
|| fp_exit_with_error "plugin changed, not trusted"
a lo siguiente:

Code:
 # verify MD5 checksum of (copied or downloaded) tarball
rm -rf install_flash_player_9_linux/
echo "93b7c48eaa492237b807a3ae1de65cf9 install_flash_player_9_linux.tar.gz"| md5sum -c > /dev/null 2>&1 \
|| fp_exit_with_error "md5sum mismatch install_flash_player_9_linux.tar.gz"

# unpacking and checking the plugin
tar xzf install_flash_player_9_linux.tar.gz || fp_exit_with_error "cannot unpack plugin"
#echo "a81fd3b03b8c6d6e5a14298110718d3f install_flash_player_9_linux/flashplayer.xpt"| md5sum -c > /dev/$
#echo "13ce705df5d47422a9192b29827544e8 install_flash_player_9_linux/libflashplayer.so"| md5sum -c > /de$
#|| fp_exit_with_error "plugin changed, not trusted"
4. sudo dpkg-reconfigure flashplugin-nonfree

Referencia: http://ubuntuforums.org/showthread.php?t=637684