Wifi en Amilo M7440 con Ubuntu10.10

Ayer se me fastidiaron el adaptador de corriente de mi portátil HP y el disco duro de mi Mac Book Pro, lo que me ha obligado a resucitar mi primer equipo portátil: un Fujitsu Siemens Amilo M7440.

Aunque era un buen cacharro en el año en que lo compré, Windows 7 se le queda algo grande y además tiene un problema muy grave de diseño:  la tarjeta wifi se activa con un botón controlado por software mediante un driver sólo disponible de forma oficial para XP. Encima dicho driver requiere privilegios de Administrador y no funciona con las opciones de compatibilidad de Windows Vista y 7.

Por suerte, existe un invento creado para Linux por unos desarrolladores españoles que servía muy bien en versiones anteriores a la 10 de Ubuntu, pero para que funcione en versiones actuales hay que hacer unos retoques en el código fuente.

El archivo que hay que modificar es el fsam7440.c, lo cambios son los siguientes:


//línea 40: cambiar  #include <linux/autoconf.h> por

#include <generated/autoconf.h>

//línea 168, cambiar remove_proc_entry(DRV_NAME, &proc_root); por

remove_proc_entry(DRV_NAME, NULL);

//línea 179, cambiar dir_base = create_proc_entry(DRV_NAME, S_IFDIR, &proc_root); por

dir_base = create_proc_entry(DRV_NAME, S_IFDIR, NULL);

Una vez hemos estos cambios, se compila con un make y make install.

Para encender el “botón” del wifi basta ahora con llamar a este comando


sudo modprobe fsam7440

Dominios WildCard en aplicaciones web php sin problemas con las variables $_SESSION

Muchos os habréis fijado en servicios web que usan subdominios dinámicos (wildcard) para las cuentas de sus usuarios, como por ejemplo jaiku.

Sin embargo, una vez configurados los subdominios dinámicos, tenemos un serio problema y es que, las variables de sesión por defecto se pierden cada vez que ejecutamos la aplicación web desde un subdominio distinto al que hemos utilizado para crear dicha variable de sesión.

Podemos comprobar esto en algunos sitios web que no usan subdominios dinámicos pero, si hacemos login en su www.dirección.com, si después vamos a su dirección.com sin las ‘www’ nos encontramos con que no hemos iniciado sesión. El problema es similar y tiene la misma solución que en el caso de los wildcard domains.

Voy a explicar cómo solucionar este problema y como hacer funcionar subdominios dinámicos.

Los pasos:

1 – Configurar el dns

2 – Configurar el servidor web

3 – Configurar bien el ámbito de las variables $_SESSION en la aplicación php para que se compartan las variables de sesión entre los subdominios.

Configurar el dns.

Basta con crear una entrada tipo host es decir, “A” apuntando a *.tudominio.com . También vale con crear un CNAME * apuntando al registro A del dominio principal (“tudominio.com”).

Si hacemos un ping a “loquesea.tudomino.com” debería ya resolver (a menos que tengas capado el tráfico ICMP claro)

Configurar el servidor web.

En Apache httpd, debemos configurar en el vhost de nuestro dominio un ServerAlias que atienda a “*.midominio.com”

En Nginx, debemos configurar en la sección Server un valor server_name como “*.midominio.com”

En IIS, debemos dejar un sitio virtual sin headers y ese es el que atenderá las peticiones de vuestro wildcard dns, es la única forma.

Se ha discutido sobre este tema en el foro oficial de IIS y según los propios desarrolladores, aunque ha sido demandada durante años, no se piensa implementar dicha funcionalidad por ahora, ni siquiera en IIS7.

Nota: sólo podemos disponer de un sitio web sin headers por servidor web IIS.

Configurar nuestras variables de $_SESSION en php

El truco esta en configurar la directiva session.cookie_domain como “.midominio.com” (importante el . delante del dominio).

Podéis hacerlo en tiempo de ejecución, antes de llamar a session_start(); siempre que tengamos deshabilitado el autoarranque de sesiones en el php.ini (como es lógico y viene por defecto)

ini_set("session.cookie_domain",".midominio.com");
session_start();

Ahora ya podéis crear servicios web tan útiles como este.

Recuperar último id insertado en SQL Server desde php con el Driver Oficial de Microsoft

Microsoft ha publicó hace unos meses la versión RTM de su driver oficial para php que permite conectarse a sus bases de datos SQL Server.

Vamos a usar dicho driver para mostrar cómo recuperaríamos el último id insertado en una tabla.


//Especificamos el servidor
$server = "HOSTINSTANCIA";
//Especificamos los datos de acceso y la base de datos
$info = array( "Database"=>"bd","UID" => "user","PWD" => "pass");

//nos conectamos
$c = sqlsrv_connect( $server, $info);
//especificamos el código sql para la consulta parametrizada
$sql = "INSERT INTO tabla (valor) VALUES (?);";
//Scope_Identity nos devuelve el último id insertado
$sql .= "SELECT Scope_Identity() as id;";

/*
especificamos el valor o valores que se pasarán como
parámetros en la consulta anterior
**/
$param = array($valor);
//preparamos la consulta
$s = sqlsrv_prepare($c, $sql, $param);
//ejecutamos la consulta
sqlsrv_execute($s);

/**
*
En este momento se ha ejecutado la consulta pero, al contrario
de lo que podamos deducir, no se devuelve ningún valor 'id'
aunque hagamos un fetch
para obtenerlo debemos hacer un sqlsrv_next_result();
**/
sqlsrv_next_result($s);
//Ahora sí, hacemos un fetch
$r = sqlsrv_fetch_array($s, SQLSRV_FETCH_ASSOC);
//Mostramos el resultado
echo "Hemos insertado una fila con el id: ".$r['id'];

//liberamos la variable de estado
sqlsrv_free_stmt($s);
//cerramos la conexión
sqlsrv_close($c);

"No seas como nosotros", presentación de Blaine Cook sobre cómo consiguieron escalar Twitter

Blaine Cook, de Obvius – empresa creadora de Odeo y Twitter – ha ofrecido una charla, imprescindible para todos aquellos que desarrollamos desarrollan aplicaciones web con más de 4 usuarios – sobre todo si usan RubyonRails -, en la que explica los errores que cometieron y cómo pudieron escalar el que es quizás, el servicio online que más rápidamente a crecido en éste año: Twitter (llegando a 2.400 peticiones a la base de datos por segundo) .