Recomendaciones de anime – Temporada de invierno 2013

[anime]

Anime de la temporada de invierno 2013

La temporada de invierno ha sido tremendamente floja. Se ha salvado algún anime entretenido, pero nada digno de ser recomendado. Por tanto, mis tres recomendaciones son series que empezaron en la temporada anterior y que han concluido en esta temporada.

Zetsuen no Tempest

Genial adaptación del manga del mismo nombre. Buena trama, buenos personajes y una gran dirección artística y de animación. Pese a conocer la trama, los capítulos mantienen todo el interés.

PSYCHO-PASS

Tenía ganas de ver esta serie tanto por su concepto como por las personas implicadas en el proyecto. Por suerte no ha decepcionado y hemos tenido un anime lleno de acción e intriga. Salvo por un par de capítulos reguleros, la serie ha estado a un gran nivel, y el final, aun dejando las cosas bien atadas, deja con ganas de más.

JoJo’s Bizarre Adventure

Un clásico, del que no había visto ni su anterior adaptación al anime ni el manga, por lo que esta ha sido una ocasión perfecta para disfrutarlo.

Ocultar “A quién seguir” en twitter usando AdBlock Plus

[internet]

Yo uso Twitter vía web, y sigo a poca gente y no me apetece tener un cuadro ofreciéndome seguir a gente que no me interesa, así que indagando un poco vi que se puede usar AdBlock Plus para ocultarlo con mucha facilidad. Esto es lo que hay que hacer:

  1. Instalar AdBlock Plus.
  2. En el menú del ABP, vamos a Preferencias de filtros…
  3. Pulsamos el botón Añadir grupo de filtros. Como nombre le he puesto Twitter.
  4. En el desplegable de Acciones para el filtro de Twitter seleccionamos Mostrar/ocultar filtros.
  5. Pulsamos en Añadir filtro y escribimos ##div.wtf-module

Y ya está, así de fácil. Los corchetes ## indican que queremos ocultar, div indica que lo que queremos ocultar es un div y .wtf-module indica que el elemento a ocultar tiene la clase wtf-module.

En la página de ABP tenéis una excelente documentación sobre como escribir filtros.

Tabla de componentes fonéticos de Kanji para recordar II

[japonés]

Sigo con mi aprendizaje del japonés, y por fin hace unos meses terminé de memorizar las lecturas on-yomi del libro Kanji para recordar II. Ahora estoy aprendiendo gramática y vocabulario con Japones en viñetas, que la verdad es que a modo de iniciación me está gustando bastante. Parte de las nuevas lecturas kun-yomi que estoy aprendiendo ahora me están costando de memorizar porque no las había escuchado nunca, así que estoy utilizando la tabla de componentes fonéticos que viene con KPRII, pero me resulta un poco incomodo tener que consultar el libro cada vez que tengo que usar la tabla, así que pasé todo la información a una tabla y me la imprimí (también podría haber hecho una fotocopia… pero bueno :P)

Os dejó aquí el PDF por si alguien lo encuentra útil:

Tabla de componentes fonéticos de Kanji para recordar II

Recomendaciones de anime – Temporada de otoño 2012

[anime]

Anime de la temporada de otoño 2012

Otra buena temporada de anime. La verdad es que nos están mal acostumbrando, aunque me da la impresión que se va a romper la tendencia con la inminente temporada de invierno… Mis recomendaciones esta vez son:

Jormungand PERFECT ORDER

Continúan las aventuras del niño soldado y la traficante de armas, y esta vez con una trama incluso mejor que la primera temporada, y manteniendo el buen elenco de personajes y sus escenas de acción. Ahora es el momento de ver las dos temporadas del tirón.

Medaka Box Abnormal

La primera temporada me pareció un tanto floja, aunque fue cogiendo fuerza según avanzaron los capítulos. Esta segunda temporada me ha gustado bastante más, lo suficiente como para recomendarla. Sigue siendo una serie bastante estúpida, pero es puro entretenimiento, y diría que por fin la Gainax de antaño se deja ver por momentos. Se deja todo preparado para una 3ª temporada, así que espero que siga está tónica ascendente.

Sword Art Online (SAO)

Uno de mis animes favoritos de los últimos tiempos. Sobretodo su primera mitad me pareció excelente, llena de capítulos memorables. La segunda mitad no está a la altura en cuanto argumento, pero mantiene el alto nivel de acción y animación. Sin duda la que más he disfrutado de esta temporada.

phpThumb no funciona con enlaces simbólicos

[linux] [programación]

Al menos eso era aparentemente mi problema, y mi punto de partida en búsqueda de una solución.

Básicamente el problema se podía resumir de la siguiente manera:

La imagen se ve correctamente:

http://www.midominio.com/imagenes/test.jpg

La imagen se ve correctamente y redimensionada:

http://www.midominio.com/phpThumb.php?url=imagenes/test.jpg&h=150

La imagen se ve correctamente. La carpeta “colecciones” es un enlace simbólico:

http://www.midominio.com/colecciones/imagenes/test.jpg

La imagen no se ve y phpThumb muestra un mensaje sobre el correcto uso del plugin:

http://www.midominio.com/phpThumb.php?url=colecciones/imagenes/test.jpg&h=150

Da la impresión que el problema aquí es ese enlace simbólico, pero no, este comportamiento se debe al siguiente valor de configuración de phpThumb:

$PHPTHUMB_CONFIG['allow_src_above_docroot'] = false;

En mi caso el enlace simbólico estaba apuntando a un directorio que estaba a un nivel superior que el contenido de la web, lo cual unido a este parámetro estaba bloqueando su acceso. La solución era tan simple como ponerlo a ’true'.

La solución la encontré en una de las últimas respuestas de este hilo.

Cositas útiles para Linux

[linux]

Almacenar en un fichero el listado de ficheros en un directorio:

find ./ -type f -print | tee ../listado.txt

Buscar que fichero contiene determinada frase de forma recursiva en un directorio:

grep -H -r "la frase" ./directorio

Cambiar los permisos de todos los ficheros de forma recursiva:

find ./ -type f -exec chmod 755 {} ;

Comprimir un directorio:

tar cvzf directorio.tar.gz ./directorio

Contar todos los fichero en un directorio y sus subdirectorios:

ls -R ./directorio | wc -l

Copiar una carpeta manteniendo la fecha de modificación de los ficheros:

cp -a -p ./directorio/ /destino/

Descomprimir un fichero:

tar xzvf directorio.tar.gz

Eliminar una carpeta y todas sus subcarpetas:

rm -rf DIRNAME

Mover todos los ficheros de un determinado tipo de la carpeta actual a otra carpeta:

find ./ -iname "*.extension" -type f -exec /bin/mv {} /carpeta/destino ;

Mover todos los ficheros y directorios de una carpeta al nivel superior:

mv ./directorio/* .

Mover todos los ficheros y directorios a una subcarpeta:

mv !(subcarpeta) subcarpeta

Listar todos los discos disponibles:

lsblk o fdisk -l

Listar todos los ficheros zip ordenados por fecha:

ls -alt *.zip

Recomendaciones de anime – Temporada de verano 2012

[anime]

Anime de la temporada de verano 2012

Esta temporada de verano ha sido realmente entretenida, con un buen número de series de las que he disfrutado. Sin embargo, series excepcionales han habido pocas.

Binbou-gami ga!

La mejor comedia de la temporada. Me he reído un montón con esta serie, y eso es más que suficiente para recomendarla. Tiene algunos cliclés, y tal vez le sobre algún chiste de tetas, pero por lo demás, diversión garantizada.

Natsuyuki Rendezvous

Esta es una interesante mezcla de drama y comedia, con un ligero componente paranormal. La recomiendo principalmente porque la primera mitad de la serie es genial. El problema es la falta de ritmo de su segunda mitad, llegando al punto que parece que la trama apenas avanza en los último capítulos, y por último la conclusión es muy precipitada. Pero pese a sus defectos, sigo pensando que ha sido una buena serie.

Tutorial de Flexi auth #1 – Primeros pasos

[programación]

Gracias a un amigo, he descubierto CodeIgniter. Es un framework de PHP para desarrollar aplicaciones rápidamente y la verdad es que es una pasada. Según va cogiendo fuerza, van saliendo extensiones para CodeIgniter, y una de ellas es Flexi auth, el cual añade toda la funcionalidad para autenticación y permisos de usuario. El problema es que a diferencia de CodeIgniter, que tiene muy buena documentación paso a paso de como hacer las cosas, la documentación de Flexi auth es muy pobre. Tiene un buen tutorial de instalación y después te dicen “Mira, ahí tienes un ejemplo de las principales funcionalidades. Mírate el código”. La demo está muy completa, y ese es su fallo, tiene demasiada información para alguien que lo único que quiere es empezar poco a poco.

Así pues, voy a poner aquí lo imprescindible para tener la funcionalidad más básica del Flexi auth, que es hacer Login y Logout.

En mi sencillo ejemplo uso un único controlador, que es pages.php, siguiendo el ejemplo del tutorial de CodeIgniter. Solo voy a ir poniendo código que no apareciera en dicho tutorial.

El constructor de la clase Pages sería el siguiente:

public function __construct() {
    parent::__construct();
    $this->auth = new stdClass;
    $this->load->library('flexi_auth');
    $this->load->helper('url');
}

La creación del objeto auth es imprescindible para el funcionamiento de la librería Flexi auth, y después cargamos la librería extendida que nos dará la funcionalidad para el Login/Logout. El ayudante para URLs es útil a la hora de componer direcciones en las vistas, así como para las redirecciones.

public function login() {
    $this->load->helper('form');

    $this->load->library('form_validation');

    // Set validation rules.
    $this->form_validation->set_rules('login_identity', 'Usuario', 'required');
    $this->form_validation->set_rules('login_password', 'Contraseña', 'required');

    // Run the validation.
    if ($this->form_validation->run()) {
        // Verify login data.
        $this->flexi_auth->login($this->input->post('login_identity'), $this->input->post('login_password'));

        // Save any public status or error messages
        // (Whilst suppressing any admin messages) to CI's flash session data.
        $this->session->set_flashdata('message', $this->flexi_auth->get_messages());

        // Reload page, if login was successful, sessions will
        // have been created that will then further redirect verified users.
        redirect('home');
    } else {
        // Set validation errors.
        $this->data['message'] = validation_errors('<p class="error_msg">', '</p>');

        return FALSE;
    }
}

Esto está íntegramente sacado del código de la demo del Flexi auth, pero eliminando todo lo que no vamos a necesitar. Al final, solo dejamos primero la validación del formulario de Login, y si todo está correcto, intentamos hacer Login. Si hay éxito hacemos una redirección a la página principal, y en caso contrario, podemos mostrar un mensaje al usuario.

public function logout() {
    // By setting the logout functions argument as 'TRUE', all browser sessions are logged out.
    $this->flexi_auth->logout(TRUE);

    // Set a message to the CI flashdata so that it is available after the page redirect.
    $this->session->set_flashdata('message', $this->flexi_auth->get_messages());

    redirect('home');
}

Más sencillo imposible. Creo que el código es bastante autoexplicativo. Vamos a por el formulario de Login. Este está en una vista llamada login.php:

<h2>Login</h2>
<?php echo validation_errors(); ?>
<?php echo form_open('login/login');?>

    <label for="identity">Usuario</label>
    <input type="input" id="identity" name="login_identity" /><br />
    <label for="password">Contrase&ntilde;a</label>
    <input type="password" id="password" name="login_password" /><br />
    <input type="submit" name="login_user" id="submit" value="Login" />

</form>

Dos campos de texto (nombre de usuario y contraseña) y un botón. Importante que los nombres sean los mismos que tenemos en el método de Login.

También he introducido un poco de código en la cabecera de las páginas para que se muestre la información del estado del usuario (si está logueado o no):

<p>
    <?php
    if ($this->flexi_auth->is_logged_in()) {
    ?>
        Usuario: <?php echo $this->flexi_auth->get_user_identity(); ?>
        &nbsp;|&nbsp;<a href="<?php echo base_url('logout'); ?>">Salir</a>
    <?php
    } else {
        echo 'Usuario no registrado';
    }
    ?>
</p>

Simplemente compruebo si el usuario está logueado, en cuyo caso muestro su identificación y un enlace de Logout.

Por último falta añadir un par de rutas a routes.php:

$route['login/login'] = 'pages/login';
$route['logout'] = 'pages/logout';

Y con eso ya debería funcionar. En el próximo post haré el proceso de registro.

Si no estás con un operador movil virtual, no se a qué esperas!

[mundo real] [reflexiones]

Evidentemente habrá quien tenga que estar casi obligado a estar con alguno de los operadores tradicionales, y habrá gente que consumirán tanto teléfono que les compense estar con algún paquete que le permita hablar muchos minutos al mes. Pero a la gente como yo que hace casi toda su comunicación por internet, y solo usa el móvil para casos puntuales, las operadoras virtuales (OMV) son la solución. Conozco a bastante gente que está con Simyo, y la verdad es que las tarifas de Internet 3G tienen buena pinta. Yo por mi parte estoy con Pepephone, y no podría estar más contento. Pago alrededor de 1€ al mes, y la atención al cliente es excelente, tanto por mail como por teléfono.

Hoy he recibido una llamada de ONO ofreciéndome tarifa de movil, y entre que me han despertado de la siesta, y la actitud del comercial, me han puesto un poco de mala hostia… La conversación ha sido algo así:

[Comercial de ONO] Buenas tardes! A través de nuestra campaña de fidelización queremos ofrecerle incluir la tarifa de móvil a su contrato actual.

[Yo] (Aún un poco sopa, y necesitando aclaración) ¿Me estáis ofreciendo tener el móvil con ONO?

[ONO] Sí señor. Y con nuestras tarifas de …

[Yo] (Le corto porque veo por donde va) Actualmente pago 1€ de móvil al mes. ¿Voy a pagar menos con vosotros?

[ONO] (Ni caso) Nuestras tarifas incluyen llamadas …

[Yo] (Le vuelvo a cortar) A ver, que no me estás entendiendo. Yo estoy pagando 1€ al mes. ¿Me vas a hacer una oferta mejor que esa?

[ONO] (Mira su guión y sigue leyendo) El contrato mínimo es de 6€ al mes, y tendría derecho a …

[Yo] (Este también está espeso) Luego no voy a pagar menos de 1€ al mes.

[ONO] (Parece que empieza a escuchar) Señor, tiene usted contrato o prepago.

[Yo] Contrato.

[ONO] Usted no puede estar pagando menos de 1€ al mes con contrato.

[Yo] (Juas! Se ha quedado a gusto. Ahora sabrá él lo que gasto yo de teléfono al mes) Pues sí. Pago alrededor de 1€ al mes.

[ONO] (Me toma por loco o se da por vencido, no estoy seguro) Buenas tardes señor.

[Yo] (La educación que no falte) Buenas tardes!

Está claro que este comercial no tiene ni idea de lo que es una OMV, y supongo que ni falta le hace. Lo que me sorprende es la cantidad de gente de este país que tampoco tiene ni idea y sigue pagando religiosamente a los operadores tradiciones sin haber buscado siquiera una alternativa.

SPAM Fight – Round 4!

[blog] [programación]

Cuando pensaba que había encontrado el método definitivo anti-spam, resultó no ser eficaz ni durante un día entero. Algunos de los comentarios se estaban marcando correctamente como SPAM, que deben ser los que atacan directamente a wp-comments-post.php. Sin embargo seguían llegando algunos comentarios de SPAM, y no tengo ni idea de como lo están haciendo. Debe haber otra manera de hacer un POST de un comentario, pero por el momento no la he encontrado.

Lo que sí que me he dado cuenta, es que estos comentarios nunca tienen establecido un correo electrónico (al menos de momento). Utilizando ese dato, he complementado el método de identificación de SPAM con el requerimiento de un correo. En wp-includes/comment.php:

if(strpos($comment_content, '[THIS#IS#SPAAAM!]') !== false
    || !is_email($comment_author_email)){
    $comment_approved = 'spam';
}

De momento con esto estoy cazando todo el SPAM. ¡Veremos si dura!