Artículos recientes 5 artículos no tan recientes

Incompatibilidad PostgreSQL en OVH 1

Feb12

OVH, empresa francesa de alojamiento y hospedaje web, se ha ganado una respetable y considerable fama por el buen servicio que ofrece a sus clientes a unos precios razonables y competitivos.

Tengo varios portales alojados en servidores dedicados de esta empresa, realizados con Php y MySQL y nunca he tenido ningún problema serio, que evidentemente no haya sido causado por mi culpa.

Ahora, estamos plenamente inmersos en un nuevo proyecto para desarrollar un portal con Django, utilizando PostgreSQL como sistema de gestión de base de datos, ya que nos han aconsejado que es mucho mejor que MySQL cuando el volumen de información que hay que manejar es demasiado grande.

El proyecto se encuentra en una fase inicial, pero bastante avanzada. El caso es que no hemos dejado de ver errores internos de tipo 500, provocados por algún tipo de condición inesperada. Comprobando los ficheros de log del sistema todo apuntaba a un fallo de hardware.

Se abre un ticket a través del Manager que OVH ofrece para gestión de incidencias y muy amablemente nos invitan a que  lo hagamos nosotros. Bueno, pues lo hacemos nosotros. Todo OK.

El caso es que el servidor sigue dando problemas y PostgreSQL  sigue dando errores de lectura para muchas de las tuplas de la aplicación, lo que provoca que gran cantidad de las páginas no carguen. Repasando los logs de la base de datos, nos encontramos con cientos de entradas del tipo Dec 7 07:24:45 nsXXXXXX kernel: postgres[22481]: segfault at 7fda5e1d5000 ip 00007fda604553c3 sp 00007fffe41faf28 error 4 in libc-2.9.so [7fda603d1000+168000]

Buscamos el error en la base de conocimiento de PostgreSQL, asociándolo a un ‘Internal Error: Compressed data is corrupt’ y obtenemos como respuesta que el fallo se debe a problemas en el disco o a cierres inesperados de un proceso, algo incoherente con los resultados obtenidos en la prueba de hardware.

Procedemos de nuevo a la comunicación vía ticket. Respuesta desde OVH: “El soporte de incidencias nos confirma que no hay ningún fallo de hardware en el servidor. Nos indican que los fallos son debidos a un fallo del sistema de ficheros o de la tabla de partición, pero físicamente el disco no tiene fallos. El fallo es de software. Puede realizar un chequeo de las particiones y reparar la tabla de archivos.

La solución temporal ante este problema, hacemos un backup total de la aplicación y base de datos y reinstalamos el SO para ver si se soluciona. Despues de dos días recuperando datos y con el miedo en el cuerpo metido, procedemos a la re-instalacion del sistema operativo, en nuestro caso: Debian 5.0 stable, versión 5.0 Lenny de 64bits, kernel 2.6.31.5-grs(OVH).

Se restaura la aplicación, se restaura el sistema de gestión de base de datos, con PostgreSQL versión 8.3.8 y persisten los problemas del tipo Dec 7 07:24:45 nsXXXXXX kernel: postgres[22481]: segfault at 7fda5e1d5000 ip 00007fda604553c3 sp 00007fffe41faf28 error 4 in libc-2.9.so [7fda603d1000+168000] . Buscamos la versión de PostgreSQL 8.3.9, una versión más estable pero nada, persisten los errores del tipo Dec 7 07:24:45 nsXXXXXX kernel: postgres[22481]: segfault at 7fda5e1d5000 ip 00007fda604553c3 sp 00007fffe41faf28 error 4 in libc-2.9.so [7fda603d1000+168000] . En un intento desesperado, instalamos la versión de PostgreSQL 8.4.2 y adivina adivinanza: Dec 7 07:24:45 nsXXXXXX kernel: postgres[22481]: segfault at 7fda5e1d5000 ip 00007fda604553c3 sp 00007fffe41faf28 error 4 in libc-2.9.so [7fda603d1000+168000]

Vuelta a investigar al final damos con esta web: Imatio Cratio donde nos cuentan la historia de un par de chavales que intentaban hacer su aplicación web y se encontraron en un “fregao” más o menos como el nuestro y en el que en definitiva nos vienen a decir que el origen del problema viene desde la empresa de hosting.

OVH proporciona la variante grsec del kernel en sus distribuciones de sistemas operativos Linux, variante que parece no ser muy buena amiga de PostgreSQL y no los problemas de hardware o software comentados anteriormente. La solución a este problema: utilizar una versión del sistema operativo que no tenga un kernel con una versión grsec.

La moraleja de la historia es que si necesitas utilizar PostgreSQL para tu aplicación web, buscate una distribución de un sistema operativo que no tenga la variante grs del núcleo.

Espero que sirva de ayuda para otras personas que se hayan encontrado con este problema, para evitar en la medida de lo posible que se tengan que pegar días y días tratando de solucionarlo a través de caminos equivocados.

Over Capacity 0

Oct20

Ha sido sólo un momento, pero a lo largo de la tarde de hoy, ha estado un poco complicado el acceso a Twitter.

over-capacity

No es para alarmarse, pero resulta curioso de ver.

Adueñarse del mundo sin hacer ruido 1

Sep20

Hoy me he levantado y me ha sorprendido la noticia en la que se cuenta que Google va a editar libros en papel. El otro día también vi que habían comprado Recaptcha y no hace mucho leía otra noticia en la que se decía que estaban negociando acuerdos con los estudios Warner Bross, Sony y Lions Gate para alquilar películas a través de YouTube. He llegado incluso a leer por algún lado que se está gestando Google Health para temas relacionados con la salud y la medicina y ya es archiconocido por parte de todos los misterios que esconde Google Chrome.

google_logo

Todo el mundo ha soñado alguna vez con ser el rey o el emperador del mundo. Pues bien, el gigante Google lo está haciendo poco a poco y sin hacer ruido. Cuando una gran empresa tiende a expandirse demasiado y sobre todo a sectores que no son el suyo, lo normal es que se termine por estrellar. Google es todo lo contrario.

Unos buenos amigos me comentaron una vez que Google llegaría a cambiarle el nombre al mundo y entre risas llegamos a la conclusión de que ya lo habían hecho con Google Earth.

Poniéndonos un poco serios, no me quiero ni imaginar que pasaría si Google desapareciera. No se que es lo que sería del mundo actual si no hubiera existido, pero si sé que sin Google el mundo no funcionaría actualmente de la misma manera. Todos los sitios web decrecerían en un número considerable de visitas, los usuarios normales no sabrían manejarse en Internet, perdidas económicas incuestionables al no poder utilizar la cantidad de herramientas y servicios que ponen a disposición de usuarios y empresas, etc, etc.

Si no tienen ya el control del mundo, poco les falta. Ahora han pasado a editar libros en papel, en breve, quien sabe que movimiento nuevo harán. Lo mismo dentro de unos años o incluso meses estamos probando la Google Cola o comiendo en el McGoogle, veremos la televisión en Google Channel y podremos comprar un coche Google, eso si ecológico.

En fin, esto no deja de ser más que una opinión personal, pero ya que estamos, ¿Qué más productos con Google se os ocurren? Dejad buena nota de ellos en comentarios.

Biblioteca Codeigniter para la API de Twitter 0

Sep16

Que CodeIgniter es un fabuloso framework para desarrollar en php ya lo sabemos todos y que detrás tiene una enorme comunidad de desarrolladores aumentando la funcionalidad, pues también.

codeigniter_logo

Buscando esta tarde alguna forma de mostrar tweets en una sencilla aplicación realizada con CodeIgniter, me he encontrado con “Twitter API Codeigniter Library” realizada por Elliot Haughin y me he dicho: Toca probar.

Tal y como recomienda, lo primero que hay que hacer es configurar nuestra aplicación. Hay que hacer unos pequeños cambios en el archivo config.php que se encuentra en el directorio application/config/

Ahí hay que buscar la opción uri_protocol estableciéndola a PATH_INFO y en la opción permitted_uri_chars añadir el carácter ‘?’ justo despueés de a-z

$config['uri_protocol'] = "PATH_INFO";
$config['permitted_uri_chars'] = 'a-z? 0-9~%.:_\-';

Una vez hecho esto, se pueden pegar las dos bibliotecas MY_input.php y twitter.php en application/libraries. Desde este momento, se pueden cargar en nuestro controlador y usar.

A continuación pongo el ejemplo más sencillo para hacer uso de estas bibliotecas:

$this->load->library('twitter');
$this->twitter->auth('twitter_username', 'twitter_password');
$timeline = $this->twitter->call('statuses/user_timeline');

A partir de aquí, sólo queda dejar volar la imaginación. Ejemplo de llamadas:

$this->twitter->search('search', array('q' => 'elliot'));
$this->twitter->search('trends');
$this->twitter->search('trends/current');
$this->twitter->search('trends/daily');
$this->twitter->search('trends/weekly');
$this->twitter->call('statuses/public_timeline');
$this->twitter->call('statuses/friends_timeline');
$this->twitter->call('statuses/user_timeline');
$this->twitter->call('statuses/show', array('id' => 1234));
$this->twitter->call('direct_messages');
$this->twitter->call('statuses/update', array('status' => 'If this tweet appears, oAuth is working!'));
$this->twitter->call('statuses/destroy', array('id' => 1234));
$this->twitter->call('users/show', array('id' => 'elliothaughin'));
$this->twitter->call('statuses/friends', array('id' => 'elliothaughin'));
$this->twitter->call('statuses/followers', array('id' => 'elliothaughin'));
$this->twitter->call('direct_messages');
$this->twitter->call('direct_messages/sent');
$this->twitter->call('direct_messages/new', array('user' => 'jamierumbelow', 'text' => 'This is a library test. Ignore'));
$this->twitter->call('direct_messages/destroy', array('id' => 123));
$this->twitter->call('friendships/create', array('id' => 'elliothaughin'));
$this->twitter->call('friendships/destroy', array('id' => 123));
$this->twitter->call('friendships/exists', array('user_a' => 'elliothaughin', 'user_b' => 'jamierumbelow'));
$this->twitter->call('account/verify_credentials');
$this->twitter->call('account/rate_limit_status');
$this->twitter->call('account/rate_limit_status');
$this->twitter->call('account/update_delivery_device', array('device' => 'none'));
$this->twitter->call('account/update_profile_colors', array('profile_text_color' => '666666'));
$this->twitter->call('help/test');

En esta ocasión, creo que no está de más tener a mano la API de Twitter para hacer uso de ella en cualquier momento.

Descargar la biblioteca CodeIgniter para la API de Twitter bajo licencia GNU directamente desde la página del autor.

Más información en http://www.haughin.com/code/twitter/

Gota fría 0

Sep15

La gota fría es un fenómeno atmosférico que puede provocar precipitaciones anormalmente fuertes en cortos periodos de tiempo en zonas reducidas o medianamente extensas. Suele ir acompañada de granizo y fuerte viento.

Gota fría

Se trata de fenómenos meteorológicos típicamente mediterráneos debidos al fuerte contraste de temperaturas entre el mar y las bolsas de aire frío de la atmósfera. Se presenta principalmente al final del verano y principios del otoño, cuando es más acusada esta diferencia térmica.

La gotas frías especialmente peligrosas en las zonas del levante español y en general en toda la franja mediterránea de la Península Ibérica y sus efectos son las temibles inundaciones de locales, bajos y hogares, crecidas de ríos y arroyos, etc. todo ello debido a fuertes precitipaciones que en algunas ocasiones llegan a registrar los 500 l/m2 como el caso de Gandía (Valencia) en 1987 o uno que me pilla más cerca como el de Almuñecar (Granada) en septiembre de 2007 donde se llegaron a registrar 58 l/m2 en sólo 5 minutos.

Curiosamente, de camino al trabajo, me he visto envuelto en una tormenta consecuencia de este fenómeno y el agua alcanzaba el medio metro en algunas partes de Churriana de la Vega (Granada) y como podréis imaginar, me he puesto hecho una sopa.

Aquí os dejo algunos impresionantes videos de aquella catástrofe de septiembre de 2007 en Almuñecar.

Get the Flash Player to see the wordTube Media Player.


Get the Flash Player to see the wordTube Media Player.

Imagen de miggim3

Powered by WordPress and FREEmium Theme