Consultas parametrizadas con PHP y MySQL

ESTA ENTRADA ESTÁ ANTICUADA. EL USO DE LA LIBRERÍA mysql YA NO SE RECOMIENDA EN PHP POR OBSOLETO. EN ESTE ENLACE TIENES UNA OPCIÓN MEJOR, CON MySQLi. PARA VER COMO HACERLO CON PDO PRUEBA CON ESTE.

Sigo con mi desarrollo freelance en PHP (para matar estos tiempos de desempleo), y hoy me he visto en la situación de tener que usar consultas parametrizadas. ¿Por qué usar consultas parametrizadas? Básicamente por seguridad, dado que las consultas parametrizadas son la mejor opción, a día de hoy, para evitar la inyección SQL (siempre y cuando estén bien implementadas). Lo habitual en las consultas MySQL en PHP es chuzarle tal cual los parámetros, concatenando cadenas de texto, lo que es muy inseguro, como en este ejemplo:

$sql = "SELECT * FROM tabla WHERE condicion1 = ".parametro1." and condicion2 = ".parametro2."";

En Java tenemos la función PreparedStatement como una gran ayuda, pero en PHP en principio no (aunque con PDO creo que hay algo similar, pero no he trabajado con dicho framework), así que lo que haremos será crear nuestro propio método para crear consultas parametrizadas y otro para tratar los parámetros.

Pero lo primero es crear la consulta sql tal que así:

$sql = "SELECT * FROM tabla WHERE condicion1 = ? and condicion2= ?";

Este es el formato de consulta parametrizada típico de Java, utilizando interrogaciones en lugar de los valores.

Bien, una vez tenemos así la idea es generar dos funciones. La primera comprobará el tipo de parámetro, si es cadena, array, número o nulo. Si es de cadena lo devolverá entre comillas y con los caracteres especiales ya escapados. Si es un array lo devolverá como una cadena de valores separados por comas, si es un nulo devolverá la cadena NULL y si no es ninguno de esos tres dará por hecho que se trata de un número y lo devolverá tal cual. El código sería el siguiente:

function prepareParam($parametro)
{
if(is_string($parametro))
{
// Si el parámetro es una cadena retorna cadena
return "'".mysql_scape_string($parametro)."'";
}
else if(is_array($parametro))
{
// Si es un array devolvemos una lista de los parámetros
// separados por comas.
$devolver = '';
foreach($parametro as $par)
{
// Cuando retorno es vacio ('') quiere decir que no
// tenemos que añadir la coma.
if($devolver == '')
{
$devolver .= prepararParametro($par);
}
else
{
$devolver .= ','.prepararParametro($par);
}
}
return $devolver;
}
else if($parametro == NULL)
{
// Si es nulo devolvemos la cadena 'NULL'
return 'NULL';
}
else
{
// Devolvemos el parametro.
return $parametro;
}

En fin, me disculpo por enésima vez por el sangrado. En fin, Pilarín, continuamos. Ya tenemos nuestro tratamiento de parámetros, ahora nos queda hacer la función que inserte los parámetros dentro de la consulta, y esta será la siguiente. Una función que recibe la cadena con la consulta y una lista de parámetros, parte la consulta por las interrogaciones, procesa los parámetros y se los chuza dentro:

function preparedStatement($cons_sql, $param = array())
{
// Partimos la consulta por los símbolos de interrogación
$partes = explode("?", $cons_sql);

$devolver = '';
$num_parametros = count($param);

// Recorremos los parametros
for($i = 0; $i < $num_parametros; $i++)
{
// Juntamos cada parte con el parametro correspondiente preparado
//con la función antes creada.
$devolver .= $partes[$i].prepareParam($param[$i]);
}

$num_partes = count($partes);
// Si hay más partes que parametros quiere decir que hay una parte final que hay que concatenar
if($num_partes > $num_parametros)
{
$devolver.= $partes[$num_partes -1];
}

// Devolvemos la consulta preparada
return $devolver;
}

Con esto ya tenemos nuestro PreparedStatement, casero y mejorable (podríamos, por seguridad, hacer que comprobara si el número de parámetros pasado coincide con el número requerido en la consulta, por ejemplo).

Existe otra forma de parametrizar utilizando una función nativa de PHP, sin tener que recurrir a bibliotecas externas, que era la que nos enseñaban en el San Clemente cuando hice allí el ciclo (idea de Rafa Veiga, que era el profesor que daba Proyecto Integrado): La idea es utilizar la función sprintf, que funciona como un printf (si has programado en C seguro que conoces dicha función) pero no imprime en pantalla, simplemente almacena en la variable la cadena construída de forma parametrizada. Dicho así suena un poco rollo, pero con este ejemplo lo entenderás:

$sql = sprintf("SELECT * FROM pi_usuarios WHERE nick = '%s' and password = '%s'", $_POST['nick'],$_POST['passwd']);

Bueno, esto era un fragmento de código de mi proyecto de curso de PHP. Básicamente la consulta recupera todos los registros de la tabla pi_usuarios cuyos valores nick y password coincidan con los que se han pasado por un método post (si hubiera más de uno, devolvería un error, si hubiera menos también, pero eso es tema para otro día que hablemos de tratamiento de errores en php). En cualquier caso os explico: la función sprintf (al igual que printf) sustituirá los %s por valores de cadena de texto que vendrán especificados tras la coma (en este caso las variables $_POST[‘nick] y $_POST[‘passwd’]). Dichos %s van entre comillas porque van a ser tratados en la consulta sql como cadenas, la idea es que paséis entre comillas todo lo que en la consulta, de forma nativa, iría entre comillas, y sin ellas lo que no las necesite (valores numéricos, mismamente). Lo que no se es si este sistema ayuda a evitar la inyección sql de forma efectiva o no, pero al menos se ve más claro que construyendo la consulta a base de concatenar cadenas.

En fin, espero que os haya sido útil.

Paginación con PHP+MySQL

Hoy me encontraba con la necesidad de hacer uso de la paginación en un desarrollo PHP. Nunca lo había hecho previamente en este lenguaje, aunque sí había tenido que hacerlo en VB.NET (tablas paginadas a gogo en mi paso por Nática SL) y en Java. Entre la experiencia con otros lenguajes y las búsquedas en San Google he encontrado como hacerlo.

Para esto vamos a utilizar dos funciones de MySQL: SQL_CALC_FOUND_ROWS, que nos permite calcular el número de resultados de una consulta sin LIMIT, y FOUND_ROWS, que nos permite recuperar el resultado de la última ejecución de la función anterior. Estos dos métodos nos ahorrarán hacer una consulta COUNT para saber el total de resultados, que necesitaremos para calcular la cantidad de páginas que se mostrarán.

Supongo que ya sabéis crear una conexión con una base de datos MySQL en PHP, así que es lo primero que debéis hacer.

Lo siguiente es definir una variable con el número máximo de resultados a mostrar por página:

 $max = 10

En mi caso la fijé en 10 resultados. Luego hay que definir qué página se mostrará, que en principio se pedirá usando el método GET:

$pagina = (int) $_GET[‘pag’];

if($pagina<1)

{

$pagina = 1;

}

$offset = ($pagina-1)*$max;

Luego viene la creación de la consulta paginada y de la consulta para conocer el total.

$sql = «SELECT SQL_CALC_FOUND_ROWS id, name FROM clientes LIMIT $offset, $max»;

$sqlTotal = «SELECT FOUND_ROWS() as total»;

Tras esto, recogemos los Result Set de ambas consultas, con los que podemos calcular el total y almacenar los resultados.

$resultSet = mysql_query($sql);

$rsTotal = mysql_query($sqlTotal);

$filasTotal = mysql_fetch_assoc($rsTotal);

$total = $filasTotal[‘total’];

Bueno, ahora sólo nos queda crear una tabla en la que mostrar los resultados, con los enlaces a las distintas páginas debajo.

border=»1″ bordercolor=»#0000EE»>
<thead>
<tr>
<td>Id</td>
<td>Name</td>
</tr>
</thead>
<tbody>
<?php
while ($fila = mysql_fetch_assoc($resultSet))
{
$id = $fila[«id»];
$name = htmlentities($fila[«nombre»]);
?>
<tr>
<td><?php echo $id; ?></td>
<!–?php echo $name; ?>–>
</tr>
<?php
}
?>
</tbody>
<tfoot>
<tr>
colspan=»2″>
<?php
$totalPag = ceil($total/$max);
$enlaces = array();
for( $i=1; $i<=$totalPag ; $i++)
{
$enlaces[] = «href=\»?pag=$i\»>$i«;
}
echo implode(» – «, $links);
?>
</td>
</tr>
</tfoot>
</table>

Tenéis que perdonar el deficiente sangrado del código, pero al ponerlo como comentario siempre queda descojonado. En cualquier caso podéis probar a copiar y pegar en un editor como Aptana Studio, donde el sangrado automático arreglaría la cuestión.

En fin, espero que esto os sea de ayuda.

Concrete cancer

Bueno, esto era una letra que escribí cuando estaba en Nightcrawler y me molaba mucho. Como supongo que ya no la usarán, al menos la pongo por aquí para gozo y disfrute de la audiencia de este blog:

You can’t see the stars
bright on city’s sky
A black shroud
cover it like a deadly cloud
polluting the air
Poisoning the veins of the earth

Where the flowers grew
like a cancer grows the concrete.
Like deadly black roses
for the tomb of our mother.

Buried for our desire
on a steel and crystal casket
all beauty lies dead
and nobody cries
Just tell me
had this crime any sense?
had we got the right?
who do we think we are?

Where the flowers grew
like a cancer grows the concrete.
Like deadly black roses
for the tomb of our mother.

Creando y añadiendo un «favicon» a nuestra web

A día de hoy todavía se ven webs sin favicon por ahí (el icono que podéis ver en el navegador cuándo la visitáis o que queda como enlace corto cuando añadís la página a favoritos). No es que sea fundamental, desde luego, pero hace bonito y no cuesta mucho hacer uno.

Haciendo un poco de «captain Obvious» lo primero que necesitarás es una imagen. Fíjate por ejemplo en esta de wordpress, en la de gmail, en la de facebook o en la de Twiteer ¿qué ves? Un diseño sencillo y sólido. No te mates con una imagen con muchos detalles porque el tamaño en que se mostrará es muy pequeño, intenta más bien un diseño sencillo, preferiblemente en dos colores y con una letra o símbolo muy reconocibles como elemento principal. Este icono ha de ser tu «meme» en internet.

Puedes crear la imagen haciendo uso del programa de edición de imagen GIMP, totalmente libre y bajo licencia GPL, o de Inkscape. El caso es que cuando tengas diseñada tu imagen (si tienes un logo, una buena idea es poner simplemente la primera letra de este sobre tu color corporativo, y ya tienes un icono seguramente muy válido), debes guardarla en un tamaño y formato válido para su uso como icono. El tamaño ideal es alrededor de 16 x 16 px. Las opciones de formato más válidas son usar un archivo .ico, un .png o un .gif.

El .ico, si está muy comprimido, me ha dado algún problemilla con Opera y Chrome/Safari, el .gif es ideal si queréis usar un icono animado, y yo suelo utilizar .png, que además suelo comprimir lo máximo posible (tampoco es que requieran una gran definición ya que se ven miniaturizados).

Finalmente llega el momento de incluirlo en vuestra página. Basta con añadir una línea dentro del bloque head  de vuestro HTML con esta estructura:

<link rel="shortcut icon" href="directorio/vuestraimagen.laextensiónquesea" />

Importante, el parámetro rel antes que href siempre. Aunque para insertar un css o una librería de javascript en principio sea indiferente, en este caso a mi me ha fallado alguna vez poniendo primera la dirección del recurso.

En fin, con esto ya tenéis mis consejillos de cómo elaborar e insertar vuestro icono. Enjoy it!

IZArc vs 7zip: Duelo empaquetado y comprimido

Aunque mucha gente todavía sigue insistiendo en usar versiones crackeadas de WinRAR por cabezonería (¿para qué usas software de pago sin licencia disponiendo de excelentes opciones gratuitas, melón?) cada vez son más, no se si porque los fabricantes se han encabronado con la licencia y ahoras es más complicado copiarlos, los que apuestan por usar un compresor o archivador de ficheros gratuito.

Haciendo memoria creo que el primer compresor que utilicé fue ARJ para MS-DOS, para descomprimir una copia de PCBasket 4.0 guardada en disquettes. Tras eso llegaron a mi interfaces gráficas más amigables como fueron los populares WinZip y WinRAR, que utilicé durante años. Allá por 2006 me pasé a IZArc por una temporada (con un breve escarceo de por medio con FilZip, pero no me acabó de convencer), y sería en 2009 cuando mi profesor de Sistemas Operativos y Redes me descubriría 7zip. He de decir que antaño no me preocupaba de temas como el tipo de licencia, cosa que ahora hago.

Y llega la gran batalla ¿7zip o IZArc? De los archivadores que he probado son los mejores, y ambos existen para Linux, Windows y MacOS (aunque los usuarios de Mac seguro que podéis buscar un archivador privativo, con DRM, con varios programas de software espía y a un módico precio de unos 30 o 40 dólares, pero con una manzanita en el logo, botones redondeados en relieve, diseño Ikea y por la subscripción a tres años os envían a casa un pelo de Steve Jobs aka “El más rico del cementerio”).

Empecemos por la licencia. IZArc, de IZSoftware, aunque gratuito no es libre, su código es privativo. 7zip, de Igor Pavlov (algo diseñado por un tío con nombre de malo de peli de James Bond gana puntos) además de gratis es libre, bajo licencia GPL aunque sí incorpora algún plugin privativo (el de .RAR, por ejemplo). Yo sólo por esto ya me quedo con 7zip, pero seguramente a más de uno os importe un carajo la licencia, así que vamos con puntos técnicos.

A nivel de disponibilidad, además de los ya citados Linux, Windows y MacOS, también están disponibles para BSD, AmigaOS, MS-DOS y WindowsMobile, ambos. Si bien en principio 7zip sólo tiene entorno gráfico para la versión de Windows (en el resto se ejecuta en línea de comandos), existen desarrollos alternativos (como Q7Z para Linux o #7Z para MacOS) que os aportarán ese entorno más amigable y cómodo.

A nivel de funcionalidades IZArc implementa una más, la de reparar archivos dañados, que 7zip no posee. Por otra parte habría que decir que tampoco funciona demasiado bien (la mayor parte de las veces que he intentado reparar archivos corruptos con IZArc este no ha sido capaz de recuperarlos, aunque en un pequeño número sí logró salvar el archivo).

A nivel de formatos ambos son capaces de abrir zip, tar, gz, bz, 7z, rar, lha, lzh, arj, cab e imágenes ISO. IZArc, por su parte, permite además abrir ace y arc. En cambio 7zip nos permitirá abrir xz, msi, cpio, imágenes dmg/HFS de Apple y paquetes deb o rpm.

Aunque en lectura gane 7zip en formatos de escritura gana IZArc. Ambos pueden escribir archivos zip, tar, gzip, bzip2 y 7z. Pero IZArc permite también cab y lha/lzh, mientras que es xz el único formato que 7zip escribe e IZArc no.

Finalmente llegamos a la cuestión de la eficiencia. Aquí le doy dos puntos a 7zip. Primero porque es el que consigue un mayor ratio de compresión, logrando entre un 1 y un 5% más que IZArc comprimiendo el mismo archivo en zip y en 7z. En cuanto a velocidad, con un archivo .tar.gz de 2.3 gigas (5.4 descomprimido, era una imagen de disco de VMWare) el 7zip logró hacerlo casi un 20% más rápido (hablamos de unos 15 segundos de diferencia).

Me gustaría hablaros de seguridad y sobre cual logra la encriptación más fuerte (ambos la permiten), pero la verdad es que no lo se, y no me he puesto tan profundamente a probar. Pero seguramente internet os de interesantes respuestas sobre el tema.

En fin, espero que esta comparativa os haya aclarado las cosas, ahora es cosa vuestra probar y decidir.

Grandes frases de «visionarios» del basket.

Nota: Actualizamos a 11 de abril de 2016 con novedosas declaraciones recogidas durant estos años.

Uno, a lo largo de su vida hablando de baloncesto, oye muchas animaladas. Ya fuera hace años en los recreos del instituto, en la cafetería de la facultad, en la barra de un bar, en un descanso con los compañeros de trabajo  o en una reunión familiar, alguna vez se acababa hablando de baloncesto (generalmente se habla más de fútbol, pero como no soy muy futbolero intento llevar la conversación hacia el basket). Con el tiempo uno va coleccionando predicciones de personajes que se creen Phil Jackson, con la cabeza llena de las chorradas del Marca y las que han leído en tres o cuatro foros. Aquí va una pequeña recopilación de las mismas:

  • Gasol dejó de ser aquí “la estrella” para irse a la NBA y ser “el mediocre” (Pronunciada en las navidades del año novato de Gasol: Rookie del año esa temporada, dos anillos con los Lakers, seis all stars, títulos FIBA por doquier, dos veces en el tercer mejor equipo y una en el segundo… menos mal que era “el mediocre” )
  • Primoz Brezec es como Gasol pero en bueno (Comentado en 2005, su mejor temporada promedió 13 puntos y 7 rebotes, dejó la NBA con promedios de 7.2 puntos y 3.9 rebotes, se retiró jugando por oriente medio)
  • Macijauskas va a llegar más lejos que Petrovic (La frase se dijo durante el Eurobasket 2003: Hombre, ha llegado a cumplir más años que el malogrado Drazen, pero aparte de eso… no tuvo suerte con las lesiones )
  • El Charlie Bell este que fichó el Breogán es una estafa, antes de navidades está cortado (Su única temporada en la ACB: Promedió 27 puntos por partido, la mejor media anotadora en la liga desde 1991)
  • Schorchianitis es mejor que Shaquille O’Neal(Comentado allá por 2006: Bueno, en ningún sitio dijeron “jugando al baloncesto”, igual era en un concurso de comedores de perritos calientes)
  • Ahora que ficharon a Carmelo Anthony los Knicks se van a llevar la liga de calle (Temporada 2010-2011: Apeados en primera ronda por los Celtics… y en la actualización de 2016 la cosa ha empeorado bastante)
  • Todo lo que no sea una victoria de los Celtics es ciencia ficción (Temporada 2010-2011: Celtics eleminados en la semifinal de conferencia)
  • Con Messina y Garbajosa en el Madrid este año el Barça no tiene nada que hacer, ni en Liga ni en Euroliga (Temporada 2009-2010: El Barcelona le ganó al Madrid todos sus enfrentamientos de esa temporada y se proclamó campeón de Euroliga, Supercopa y Copa)
  • Derrick Rose es el gran dominador de la zona que necesitaban los Bulls (¿Qué entendía el tipo que lo dijo por «dominador de la zona»?)
  • Hernández-Sonseca está llamado a dominar los tableros de la ACB las próximas temporadas y a ser el próximo pivot de la selección (Llamado estaría, pero se ve que no contestó… la frase es de allá por 2001)
  • Kapono es como Bodiroga pero mucho más rápido, cuando entre en la NBA será una megaestrella (Esto lo dije yo en su día, cuando Kapono jugaba su primera temporada en UCLA… y desde aquella no he vuelto a afirmar nada rotundamente sobre ningún universitario. Al final ni en Europa destacó mucho.).
  • El Zwikker este del Breogán tiene buena pinta (Cortado a media temporada por bajo rendimiento)
  • Sergi Vidal le quitará el puesto a Navarro en la selección este verano (Primavera de 2005, Navarro no se ha perdido ni una competición de selecciones desde aquella, Vidal a pesar de ser un gran escolta no ha logrado hacerse un hueco en la selección, ni como jugador de fondo de banquillo)
  • Marc Gasol está en la selección por ser hermano de Pau, está gordo, es lento y no va a llegar a nada (Quejas ante la inclusión de Marc en el la selección en 2006: en fin, basta ojear sus estadísticas)
  • Al Madrid no le hacía falta Sabonis. Si ha vuelto al Zalguiris es porque sabía que no daba la talla para estar en el Madrid (En 2003, cuando Arvydas volvió a Europa. Ese año fue MVP de la Euroliga)
  • Seikaly va a ser clave en la Barça esta temporada (Realmente fue clave, lo estaba haciendo tan mal que tuvieron que arriesgarse y darle minutos a un prometedor Gasol que finalmente se destaparía como una estrella)
  • Shaquille O’Neal siempre destacó como gran pasador (Claaaaaaaaro, siempre se le recordará entre los grandes pasadores de la NBA junto a Stockton, Magic Johnson o Mark Jackson)
  • Tim Duncan tampoco fue nunca un jugador decisivo en la NBA (Y los tres MVP’s de las finales y dos de la liga regular le tocaron en una tómbola…)
  • A Ricky se lo van a comer todos los bases de la NBA (De momento van pocos partidos, pero está entre los favoritos a novato del año: 11 puntos, 8.3 asistencias, 4.6 rebotes, 2.4 robos, 6º en asistencias por partido, líder en robos y progresando)
  • Laso no vale y el Madrid tiene que echar a Ayon y fichar a un cinco de verdad (temporada 2014-2015: el Madrid gana los cuatro títulos que disputa, Ayón es uno de los destacados)
  • Begic está prácticamente fichado por el Obra (dije esto de broma en un foro cuando traspasaron a Mike Muscala a Atlanta. Esa misma noche lo repitió en la Radio Galega un supuesto profesional)
  • Orenga es el mejor seleccionador que puede tener España hoy por hoy (Eurobasket 2013, triple para Marc. Mundobasket 2014 #OrengaDimisión fue trending topic mundial)
  • Victor Claver puede defender a dos jugadores a la vez (comentarista de cuyo nombre no quiero acordarme en TVE)
  • Juan Carlos Calderón… (Siro López)
  • Qué tonto el Kerr que se va a los Warriors teniendo una oferta de los Knicks (el día que edito esto acaban de igular la marca de 72 victorias de los Bulls del 96, y con un partido para intentar superarla. Eso sí, en los Knicks tendría más vacaciones.)
  •  La NBA se nos queda pequeña (Tomás Roncero en Twitter hablando del Real Madrid de baloncesto)
  • En la NBA todos querrían ser ahora mismo . Qué maravilla de jugador. (Otra del Roncero, ya paro que podría hacer un artículo para él solo)
  • LeBron James es el mejor defensor de la NBA (JR Smith cuando ganó el DPO Marc Gasol, esto explica por qué acabo fichado por los Cavs)
  • EEUU llevan una selección B, son derrotables. Sufrirán ante los pivots de España porque no tienen juego interior (Mundial 2014, EEUU ganan sobrados, España ni pelea por las medallas. El juego interior de los USA en ese mundial: Drummond, Anthony Davis, DeMarcus Cousins, Kennet Faried y Mason Plumlee. No eran los mejores, pero tampoco para hacerles de menos)
  • Batum es francés y los franceses son blandos. No tiene sitio en la NBA, no puede competir con Rudy Fernández. (Batum sigue en la NBA como titular, Rudy juega en el Madrid)
  • Soy de los Heat desde antes de que draftearan a LeBron (El que lo dijo ahora es de los Cavs de toda la vida)
  • Lasme es muy malo, a ver si el Obradoiro ficha a un cinco de verdad (El que lo dijo debía esperar poder fichar a Olajuwon o algo así)
  • Dwight Howard hará que los Lakers olviden a O’Neal, es un pivot más completo. (No. En serio, no)
  • LeBron va a jubilar a Duncan (finales del 2014…)
  • LeBron va a aplastar a Curry (finales del 2015…)
  • LeBron James es el mejor jugador de todos los tiempos (¿Jordan? ¿Magic? ¿Kareem? ¿quiénes son esos?)
  • ¿Cuándo Kobe gane su séptimo anillo seguirán diciendo que Jordan era mejor? (Tendrá que ganarlo como entrenador o directivo, porque como jugador ya dice adiós y con unos nada despreciables cinco títulos, pero sin ganar tantos como Jordan y firmando varias de las peores campañas de la historia de los Lakers en su ocaso)
  • Stephen Curry y Klay Thompson no pueden jugar juntos (Charles Barkley en su programa de TNT, en febrero de 2013, la acabo de leer y tuve que editar para incluirla)

 

Una SOPA con auténtico sabor americano

Si nos paramos un segundo a pensar, la SOPA tiene todos los componentes repugnantes de la política norteamericana posterior a la segunda guerra mundial.

Stop On-line Piracy Act, para los españolitos de a pie que no están muy enterados del tema es la versión yankee de la Ley Sinde, y como todo lo yankee es más grande, más caro, más violento y más intrusivo. Richard Stallman ya avisó hace años que esto se nos vendría encima, y como siempre le llamaron paranoico y radical… y al final, aquí estamos, con el agua al cuello y la marea llevándonos mar adentro.

Y en el fondo es una ley 100% yankee. Tiene todos los componentes nefastos de la política americana de las últimas décadas: imperialismo, liberalismo económico por encima de libertad individual, multinacionales mangoneando al gobierno, interés privado sobre interés público, caza de brujas, violación impune del derecho a la intimidad… eso es el genuino sabor americano del siglo XX y no Marlboro.

United Fruit promovió guerras en América Latina para defender sus intereses. El contubernio de empresas petroleras hizo lo propio en Medio Oriente. Hollywood lo ha tenido más fácil, no han necesitado movilizar tropas, no han tenido que despertar críticas por las muertes de sus tropas porque les ha bastado con una nueva ley que recorte las libertades, otra más, algo a lo que ya se han acostumbrado porque desde los tiempos del Comité de Actividades Antiamericanas de McCarthy estos recortes, disfrazados de “seguridad nacional” y de “leyes patrióticas” son el pan de cada día.

La gran industria del entretenimiento, la que comandan FOX, Disney o Warner, la gente como Rupert Murdoch o el por suerte ya fallecido Steve Jobs exigen leyes para mantener sus privilegios. Porque no es tanto la piratería lo que temen, no son estas supuestas “pérdidas económicas” lo que les da miedo de verdad, lo que les tiene acojonados es perder el control sobre la distribución. Les da miedo perder el control sobre lo que compra la gente. Están acostumbrados a sus entregas de premios manipuladas, sus grandes campañas publicitarias, el que su producto sea el único que esté disponible en las grandes superficies comerciales. Con internet pierden esto, porque una persona creativa puede hacer una campaña publicitaria más efectiva que la que todos sus millones pueden pagar, porque la maqueta autoproducida de cuatro melenudos de Richmond está igual de disponible que la producción millonaria de la última imitadora de Madonna que se hayan sacado de la manga, porque es igual de fácil ver el corto de unos estudiantes de animación coruñeses que la última producción de Pixar. Eso les asusta todavía más. Les asusta que el escritor novel pueda ser tan leído como el escritor que tiene un Nobel. Les asusta que leas este artículo en este blog, en lugar del artículo que ellos han situado en su periódico. El cine y la televisión han sido armas básicas para el imperialismo cultural americano, para normalizar su modo de vida entre nosotros sin que nos demos ni cuenta, y temen perder eso. La PiPa además haría ilegal el publicar contenidos que permitan saltarse estas leyes (como yo ya he hecho aquí) o distribuir programas que rompan su software DRM. Incluso dejaría la puerta abierta a que fuera ilegal distribuir un software que te permita reproducir contenidos sin DRM… podría llegar un día en que saques una maqueta con tu grupo grabada en tu casa y nadie pueda escucharla porque no estás en una gestora de derechos de autor.

Y no sólo eso, la PiPA además, les permitiría prácticamente poder monitorizar y espiar a cualquiera por sospechoso de «piratería». Prácticamente legalizaría la intromisión en la privacidad de la gente, sin consecuencia alguna para sus agencias de control. Para los no estadounidenses puede que sólo implique que un tipo del FBI te pueda leer los e-mails, pero allí combinado con el Acta Patriótica (una ley más propia de la Alemania nazi o la China más represora que de una democracia) les permitiría controlar movimientos como Ocuppy Wall Street.

Lo decía ayer mi amigo Brais: “Tenemos que ser como Mafalda y no tragarnos la SOPA”. Podemos elegir: podemos tener un internet libre, que nos garantice el acceso a conocimientos, opiniones, cultura y entretenimiento o podemos dejar que internet sea el nuevo centro comercial donde las cámaras sean software que espía nuestros correos y tráfico, y donde sólo tengamos tiendas como Amazon, iTunes o AndroidStore. Llamadme paranoico, también se lo llamaron a Stallman hace dos décadas…

The Answer, la respuesta irlandesa.

Se llaman “la respuesta”, y desde luego lo son. La respuesta a las plegarias de miles de fans del rock más clásico, que hacía tiempo echábamos de menos una banda con los cojones bien puestos para hacer buena música, sin avergonzarse de sus influencias blueseras y setenteras pero sin convertirse tampoco en una mera banda de imitadores. The Answer tienen personalidad, pero también un marcado toque de bandas como Led Zeppelin, AC/DC, Taste o los primeros Aerosmith. Incluso por momentos su sonido me recuerda mucho al de aquel efímero proyecto Coverdale/Page de principios de los 90, o a los temas más enérgicos de los Black Crowes.

La cantera irlandesa siga estando en plena forma, la pequeña isla esmeralda que nos dio a Thin Lizzy, Gary Moore y Rory Gallagher no descansa a la hora de parir rockeros de raza, bandas con regusto a whiskey destilado tres veces y madurado varios años en barril de roble, bandas con las que beber cerveza junto a los colegas o tapar el ruido de un apretoncillo sexual furtivo. Eso te ofrecen The Answer.

Y el concierto de ayer en Compostela no fue una excepción. Sin teloneros y con unos minutejos de retraso provocados porque la organización del ciclo Compostela Rock aprovechó para anunciar los próximos bolos (Diamond Dogs y Corizonas) saltaron los hijos de Boadicea a las tablas para descargar hora y media de rock and roll. Con un frotman que es un ciclón, un hippie que se mueve poseído como si Robert Plant bailara un tango con Jim Morrison, derrochando simpatía y complicidad con el público, lograron meterse a la sala en el bolsillo. Tampoco es por restar méritos al resto de la banda, que hacen un gran trabajo. En conciertos como este es cuando uno se da cuenta de lo mal acostumbrados que estamos de ver a tanta banda de mierda sobreproducida en festivales, que de tanto tragar a Children of Bodom, Dragonforce, Sonata Arctica, Edguy o Gamma Ray uno parece que se acostumbra a que la cagada, los fallos en la ejecución de los temas, sean lo habitual en un concierto. Claro, luego ves a un grupo de verdad y dices “joder, estos no han dado una nota fuera de su sitio”, como sorprendido. Y es que ser un virtuoso en los tiempos del ProTools está al alcance de cualquier Alexi Laiho de la vida, pero ser un guitarrista de verdad sobre las tablas es otro asunto.

Cayeron temas de sus tres discos, centrándose sobre todo en el “Revival”, que era el que presentaban en esta gira, pero sin olvidarse de “Rise” y “Everyday Demons”, de los que cayeron temas como Come Follow Me, Under the Sky, Evil Man o Never Too Late. No se entretuvieron demasiado con solos interminables, dejando simplemente algún guiño para un mínimo lucimiento de pocos segundos y centrándose en la música, en las canciones, dejando a un lado el pajillerismo.

Fueron la respuesta a muchas preguntas y a muchas plegarias, una banda que si hay justicia en el rock and roll algún día debería poder llenar grandes pabellones, aunque parece que esos tiempos ya pasaron. Una banda que parece haber viajado en el tiempo desde los setenta a nuestros días, secuestrando la esencia del buen rock.

Cómo saltarse un bloqueo DNS (windows y linux)

Ante todo, que sepan las autoridades competentes que esto no es una guía para delinquir ni quebrantar leyes democráticas. Más bien lo veo como una ayuda a gente que ha tenido la mala suerte de nacer en países del chichinabo, tiranías que aprueban leyes antidemocráticas en beneficio de algunos lobbys adinerados, donde la desobediencia civil está justificada. Si tu gobierno decide utilizar el bloqueo DNS para evitar que accedas a una web, puedes probar con esto para saltártelo.

Bueno, no perderé el tiempo explicando qué es DNS, si lo sabes bien y si no tienes la universal sabiduría de Wikipedia. Pero ¿qué es el bloqueo DNS? Imaginemos que el gobierno español (llámase PP o PSOE) aprobara una ley que les permitiera bloquear el acceso a una serie de páginas web, ya sea para favorecer a los cuatro capitalistas adinerados de siempre o para censurar contenidos que no quieren que lleguen a la opinión pública. Una medida podría ser obligar a los servidores DNS alojados dentro del país a borrar de sus listas dichas páginas. Puedes creer que suena descabellado, pero China lo ha hecho, Turquía lo ha hecho y los EEUU lo harán dentro de nada por obra y gracia de la SOPA.

La solución: utilizar un servidor DNS que esté fuera del país, lejos de leyes de protección de privilegios de editor (creo que a día de hoy llamarlos derechos de autor es insulto a la palabra derechos).

En Windows el procedimiento es el siguiente: En Panel de Control váis a «Ver estado y tareas de red». Ahí buscáis «Cambiar configuración del adaptador». Localizáis la tarjeta de red que queréis modificar y hacéis click derecho sobre ella para acceder a «Propiedades». En propiedades normalmente está marcado por defecto «Obtener la dirección del servidor DNS automáticamente». Ahí tenéis que cambiar y seleccionar la opción de abajo «Usar las siguientes direcciones de servidor DNS». Yo voy a recomendar Telecomix Censorship Proof DNS como servidor principal, cuya ip (que es lo que debéis poner en el cuadro de texto de «Servidor DNS preferido») es 91.191.136.152 y como servidor alternativo (el otro cuadro de texto) el de Google, cuya ip es 8.8.8.8

En Linux podéis hacerlo desde el entorno gráfico, pero creo que es mejor hacerlo por comandos porque así es más universal y no depende de la distribución que tengáis. Sólo tenéis que buscar el archivo /etc/resolv.conf y ahí buscar las líneas que ponen nameserver seguido de una dirección IP. Sólo tenéis que cambiar esta IP por las arriba citadas (o por la que queráis utilizar) y reiniciar los servicios de red para tener dicha configuración cambiada.

En el siguiente enlace podéis encontrar una guía muy interesante sobre este tema, llamada Manual de Desobediencia a la Ley Sinde en la que veréis otras formas de configurar el dns (cambiándolo en el router) o como configurar un proxy; aunque me gustaría recordar que yo no estoy animando a incumplir ninguna ley por injusta, antidemocrática, absurda y fascistoide que esta sea.