web

Destroy all the web

Destruye todas las webs al más puro estilo Astheroids. El funcionamiento es el siguiente: arrastras el botón a tu barra de marcadores y te aparecerá un nuevo marcador con el texto Kick ass. Después, en cualquier web en la que estés pinchas en el marcador y a disfrutar.

Kick Ass

Vía http://erkie.github.com/

Su voto: Nada

Cambiar el socket mysql en aplicaciones php

Hoy he tenido que pelearme con la tediosa labor de cambiar la configuración de distintas aplicaciones php para que utilicen un nuevo socket mysql.

Y digo tediosa porque, cuando en algunas aplicaciones como codeigniter u oscommerce es tan fácil como añadir :/path/to/new/socket al nombre del servidor, en otras puede ser una pesadilla si no lo has hecho nunca antes.

Drupal: drupal tiene una conection string que parte en varios parámetros mediante la funcion parse_url de php. El problema es que esta función parse funciona bien si queremos que mysql use un puerto distinto, pero no para un socket distinto. Para que drupal utilice nuestro nuevo socket incluiremos en el settings.php la siguiente línea:

ini_set("mysql.default_socket","/path/to/new/socket");

Symfony: esta es la que más me ha costado encontrar respuesta googleando, la solución es, añadir en nuestro databases.yml, en la línea dsn lo siguiente:

unix_socket=/path/to/new/socket

de forma que quede algo como:

dsn: 'mysql:host=myhostname;unix_socket= /path/to/new/socket;dbname=mydbname'

Nótese que he añadido un espacio para que haya un salto de línea y no cargarme el diseño de la web, pero la cadena va sin espacios.

Su voto: Nada

Cuando batch crece...

algo raro pasa.

No estoy seguro al 100% pero creo (intuición femenina) que la tabla batch de la bbdd de Drupal almacena acciones pendientes que por falta de memoria o de timeout en la configuración de php del servidor no se pudieron ejecutar, por lo que las pone en cola para ejecutarlas en futuras peticiones.

El problema si un módulo no se lleva bien con esta funcionalidad, como imaginareis, es catastrófico, pongo por caso, acabo de vaciar una tabla batch de 3GB (sí sí, estas leyendo bien) en un alojamiento compartido de 1&1 que no permite bbdd de más de 100MB, por lo que al hacer una petición a la web, tumbaba el servidor.

Lo que quiero decir con todo esto, es que vigilando esta tabla podemos comprobar si algún módulo funciona malamente, si inserta demasiados registros en ella y mandarlo a freir porretas.

El problema además crece si nos damos cuenta del mal funcionamiento del módulo tarde, es decir, cuando la web no chuta, ni el panel de admin para desactivar ese módulo cabroncete.

Eso acaba de pasarme y con ayuda de este post de planetainopia he podido resolverlo simplemente seteando a 0 los campos status, throttle y bootstrap de la tabla system, registro correspondiente al módulo maldito con phpmyadmin.

Cuando tenga un rato y ganas intentaré picarme un módulo para hacer un "dump" de esta tabla batch desde el admin y no tener así que revisarla desde phpmyadmin, pero no prometo nada.

Su voto: Nada

Apache2 + PHP + Mysql en Ubuntu Linux

He leído varios tutoriales acerca de la configuración de un servidor Apache2 en ubuntu desktop y combinarlo con PHP y Mysql, algo bastante básico a la hora de programar para web, pero que no resulta tan fácil en muchas ocasiones, pues hay que isntalar muchos paquetes, cambiar configuraciones y activar librerías en muchos casos.

Pues bien, ho os traigo el que creo es el método más simple, un simple comando corto:

sudo apt-get install phpmyadmin

Esto os instalará todas las dependencias, es decir, servidor mysql, apache2, php y los drivers y librerías correspondientes para que estos 3 se entiendan.

No quiero extenderme más, sólo comentar por encima que phpmyadmin es un potente gestor web para mysql y recomendar algunas herramientas útiles.

  • Rapache: gui para crear y gestionar tus virtualhosts de apache2
  • Mysql-gui-tools: son 2 (o 3):
    • mysql-admin gestiona mysql
    • mysql-query-browser para hacer consultas rápidas, te ayuda a construirlas y tal
    • mysql-workbench: te permite crear diagramas y exportarlos a bases de datos y viceversa, tiene muchas más utilidades que desconozco, pero es muy potente. Creo recordar que alguien me comentó que había un plugin para workbench que te genera modelos en yaml para los orm doctrine o propel.
Su voto: Nada Promedio: 1 (un voto)

Extender la clase session en Codeigniter

Hace poco hice mis primeros pinitos con el framework Codeigniter de php, y muy bien por cierto, una curva de aprendizaje con muy poca pendiente.

Eso sí, (h)eché (joder, no sé ahora mismo si ese (h)echar es con h o no, entre paréntesis queda) en falta una "ortografía" en las clases algo más orientada a php5, con privates, métodos mágicos y demás.

A lo que venía este post es a publicar una fácil pero en mi opinion gran mejora para mostrar mensajes flash al usuario, es decir, estos mensajes que aparecen cuando envias un formulario p.e. y en la siguiente recarga ya no aparecen.

Extendiendo la classe session de CodeIgniter con 4 métodos al más puro estilo Drupal, avanzamos mucho en el procesamiento de este tipo de mensajes. Igual el código no es el más limpio pero ahí va.

Por cierto, esos pinitos de los que hablo han sido un motor para foros, usado actualmente en http://colchonesforo.com

class MY_session extends CI_session{
public function __construct(){
parent::CI_session();
}

public function set_message($message){
if(is_array($message))$this->set_messages($message);
else $this->set_messages(array($message));
}

public function set_messages($messages){
if(!is_array($messages))$messages=array($messages);

$mess=$this->flashdata('messages');
if($mess)$this->set_flashdata('messages',array_merge($mess,$messages));
else $this->set_flashdata('messages',$messages);
}

public function get_messages(){
$output='<div id="messages"><ul><li>{messages}</li></ul></div>';
if(!$messages=$this->flashdata('messages'))return '';

return str_replace('{messages}',implode('</li><li>',$messages),$output);
}
}

Su voto: Nada

Clearfix error

Después de golpearme repetidas veces la cabeza durante repetidas horas contra la mesa me he dado cuenta que el método clearfix para conservar el alto de los contenedores con elementos flotados (si no sabes de que hablo deja de leer o googlea) tiene un error.

El tema está en que al aplicarlo al ultimo contenedor de nuestro esquema dom, queda un espacio en blanco a continuación de éste, por lo que no conseguimos que aparezca pegado al borde inferior de la pantalla.

Aclarar que en algunas de las webs donde está publicado el método, éste no tiene el error.

El problema es este:
content: "."

Cuando debería ser:
content: " "

Aprovecho para poner un breve repaso a los distintos métodos clearfix que he encontrado.

Método 1:

.clearfix:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; }
.clearfix { display: inline-block; }
html[xmlns] .clearfix { display: block; }
* html .clearfix { height: 1%; }

Método 2:

.clearfix:after { visibility: hidden; display: block; font-size: 0; content: " "; clear: both; height: 0; }
* html .clearfix { zoom: 1; }
*:first-child+html .clearfix { zoom: 1; }

Método 3 (no es clearfix pero soluciona el tema de los floated elements):

.clearfix{ overflow:auto; heitght:1%; }

Su voto: Nada
Distribuir contenido