Todo lo que sabía de CSS era mentira!

[programación]

Bueno, igual todo no, pero me he estado empapando de documentación y vídeos de conferencias, y me he dado cuenta que estoy desactualizado.

Estas son algunas de las nuevas tecnologías y metodologías que ya estoy utilizando en el desarrollo de aplicaciones web:

Y aquí algo de la documentación que me ha motivado a modernizarme:

Object Oriented CSS

Sass

Es hora de ponerse en forma

[reflexiones]

Podría haber esperado a año nuevo y hacer la típica promesa de ponerme en forma, pero no pienso esperar un día más. El otro día llegaba tarde al dentista, hice un sprint para coger el tren, y casi me muero por correr 2 minutos. Días después me fui a la montaña a hacer senderismo, y al volver estaba destrozado y con agujetas para 2 días. Hay que poner remedio a esto.

Durante mucho tiempo, mi peso ha estado siempre alrededor de los 62 Kg, pero durante los últimos 2 años, debido a una menor cantidad de ejercicio, he ido subiendo poco a poco hasta llegar a mis 67 Kg actuales. Mi objetivo es volver a los 62 Kg en los que me encontraba cómodo y saludable. Se que este no es el mejor momento de cara a la campaña navideña, pero esto no va a ser rápido. No se lo que me va a costar, pero van a ser un buen número de meses.

He preparado una página donde detallo mi plan de ejercicios y anoto cuanto hago cada semana, además de una gráfica que muestre como evoluciona mi peso. Creo que esto me ayudará a tener una mejor perspectiva y me motivará a seguir el plan de ejercicios. El momento de ponerse en forma es AHORA.

EDITADO: 22 de noviembre de 2014

Tras casi un año con el experimento, mejorando mi alimentación y haciendo más ejercicio, me he estabilizado en torno a los 63 Kg, lo que creo que se queda lo suficientemente cerca del objetivo como para darlo por bueno. Ahora el reto es mantenerme ahí, pero borro ya la página donde llevaba la cuenta.

Orden para visualizar el anime de la serie Monogatari

[anime]

[ÚLTIMAS NOTICIAS: 09/08/2016]

Como muchos sabréis, la historia de Kizumonogatari se cuenta en una trilogía de películas. La primera de estas películas, titulada Kizumonogatari I: Tekketsu-hen fue estrenada en Japón el 8 de enero de 2016. Tras una larga espera, por fin salió a la venta el Blu-ray el 27 de julio de 2016.

También se ha confirmado hace poco la fecha de estreno de la segunda película, Kizumonogatari II: Nekketsu-hen, que llegará a los cines japoneses el 19 de agosto de 2016. Podemos anticipar entonces un periodo similar hasta la salida del Blu-ray de la segunda, y el estreno de la tercera película, Kizumonogatari III: Reiketsu-hen, en la primavera de 2017.


Una de las grandezas de la serie Monogatari es que existen varias maneras de disfrutar de sus historias. A continuación detallo los ordenes de visualización más comunes. Para los que quieren adentrase en el mundo de Monogatari por primera vez, mi recomendación es seguir el orden de emisión en la primera visualización, y seguir el orden cronológico en una segunda visualización.

Por orden de emisión

  1. Bakemonogatari (15 episodios)
  2. Nisemonogatari (11 episodios)
  3. Nekomonogatari: Kuro (4 episodios)
  4. Monogatari Series Second Season (26 episodios)
  5. Hanamonogatari (5 episodios)
  6. Tsukimonogatari (4 episodios)
  7. Owarimonogatari (12 episodios)
  8. Kizumonogatari I: Tekketsu-hen
  9. Koyomimonogatari (12 episodios cortos)
  10. Kizumonogatari II: Nekketsu-hen (Estreno el 8/8/2016)
  11. Kizumonogatari: III Reiketsu-hen (Próximamente)

Por orden cronológico

  1. Kizumonogatari
  2. Nekomonogatari: Kuro
  3. Bakemonogatari
  4. Nisemonogatari
  5. Monogatari Series Second Season (Nekomonogatari (Shiro))
  6. Owarimonogatari (Formula Ougi, Acertijo Sodachi, Perdida Sodachi)
  7. Monogatari Series Second Season (Kabukimonogatari, Otorimonogatari, Onimonogatari, Koimonogatari)
  8. Tsukimonogatari
  9. Hanamonogatari

Por último yo propondría un tercer orden posible, que se correspondería con el orden de publicación de las novelas de Nisio Isin.

Por orden de publicación de las novelas

  1. Bakemonogatari
  2. Kizumonogatari
  3. Nisemonogatari
  4. Nekomonogatari: Kuro
  5. Monogatari Series Second Season (Nekomonogatari (Shiro), Kabukimonogatari)
  6. Hanamonogatari
  7. Monogatari Series Second Season (Otorimonogatari, Onimonogatari, Koimonogatari)
  8. Tsukimonogatari
  9. Owarimonogatari

Extensiones imprescindibles para Firefox

[internet] [software]

Estoy seguro que esta lista crecerá con el tiempo, pero por el momento estas son las extensiones que han pasado a ser imprescindibles en mi uso del Firefox:

Adblock Plus

Francamente, me resultaría muy difícil tener que volver a navegar sin esta excelente extensión bloqueando toda la publicidad de internet.

Firebug

Otra extensión que me resulta imprescindible, en esta ocasión para la creación de páginas web. Los navegadores están incorporando mejores herramientas para desarrolladores, pero por el momento Firebug sigue siendo la herramienta más versátil y fácil de usar.

Web Developer

Otra excelente herramienta para desarrollar webs, en esta ocasión con una gran variedad de utilidades para redimensionar, medir tamaños, limpiar caché/cookies, etc.

Stylish

Ya he hablado con anterioridad de Stylish, y es que esta sencilla extensión te permite modificar por completo el aspecto de cualquier página web para adecuarlo a tus gustos y necesidades. Eso unido a la gran variedad de temas existentes te permite ver las páginas a tu manera.

Brief

Este lo he empezado a usar hace poco, y se ha vuelto rápidamente en un imprescindible. Básicamente te avisa cuando hay algo nuevo en las webs que tengan RSS y las añadas a marcadores. Al menos me ha quitado el impulso de recorrer todas las webs buscando algo nuevo. Entre Brief y Twitter, casi todas las novedades me llegan automáticamente.

BlockSite

Esta extensión te permite bloquear una web para que ya no sea accesible. En ocasiones detecto que una web me está consumiendo más tiempo del que debería, sobre todo webs chorras, así que las voy añadiendo a la lista de bloqueadas para recordarme a mi mismo que debería estar haciendo otras cosas más productivas… 😛

Receta - Fideuá de fideo fino

[recetas]

Ingredientes (por persona)

  • Fideo cabello de ángel (70 g)
  • Calamares pequeños (2)
  • Gambón (4)
  • Caldo de pescado (250 ml)
  • Cebolla
  • Tomate rallado
  • Pimentón rojo dulce (media cucharada de café)
  • Azafrán o colorante.

Elaboración

  1. Pochamos la cebolla.
    Pochando la cebolla

  2. Freímos el calamar y los gambones. El gambón se hace más rápido, por lo que lo dejamos en un lado de la paella.
    Freímos el calamar y los gambones.

  3. Añadimos el pimentón y rápidamente, para que no se queme, añadimos el tomate rallado.
    Añadimos pimentón y tomate

  4. Cuando el tomate este frito, añadimos el caldo.
    El tomate ya está frito
    Añadimos el caldo

  5. Añadimos el azafrán o colorante.
    Añadimos el azafrán

  6. A fuego vivo, llevamos el caldo hasta la ebullición y añadimos el fideo.
    Cuando empiece a hervir, añadimos el fideo

  7. Mantenemos el fuego hasta que se evapore todo el caldo (5 minutos aproximadamente).
    Cuando se evapore todo el caldo, el fideo está listo

Recomendaciones de anime – Temporada de verano 2013

[anime]

Anime de la temporada de verano 2013

Mucho anime este verano, pero poquito de calidad. Pero al menos tenemos un par que se salen de la norma y otro de la temporada pasada que ha terminado y puedo comentar.

Gin no Saji: Silver Spoon

Me encantan este tipo de animes, que además de divertido, aprendes algo viéndolo. En este caso el prota es un estudiante estresado por los estudios, que decide abandonar la ciudad y apuntarse a una escuela de agricultura. Muy recomendable.

Uchouten Kazoku

Otra serie para aprender cosas, en este caso algo de mitología japonesa. Y es que los protagonistas de esta historia son tanukis y tengus. Una buena historia, buenos personajes y en mi opinión, muy interesante. Te deja con ganas de más.

Shingeki no Kyojin

¡Simplemente espectacular! Sobre todo los primeros capítulos son impresionantes. Después la serie sufre algunos altibajos, pero siempre mantiene el interés. La pena es que el final deja muchas cosas por resolver, y tardaremos mucho en tener una segunda temporada.

Crear un diagrama de secuencia con WhiteStarUML

[software]

Esto es en realidad una chorrada, pero no había manera de encontrar como hacer esto en las instrucciones del programa. Estas instrucciones también funcionan con el original StarUML. En realidad he estado usando un poco los dos y no he visto mucha diferencia entre uno y otro.

  1. Lanzamos WhiteStarUML.
  2. Seleccionamos Default Approach.
  3. Si no tenemos el Model Explorer abierto, vamos a View->Model Explorer.
  4. Expandimos el árbol en el Model Explorer y hacemos doble click sobre el modelo que vamos a utilizar. En mi caso será el Use Case Model.
  5. Presionamos el botón derecho del ratón sobre «useCaseModel» Use Case Model y vamos a Add Diagram->Sequence Diagram.

Ahora en el Toolbox de la izquierda tendremos las herramientas para el diagrama de secuencia.

BONUS! ¿Como añadir un actor a un diagrama de secuencia?

Al añadir las herramientas del diagrama de secuencia en el Toolbox desaparecen las del Case Model. Para añadir un objeto que no esté en el menú, presionamos el botón derecho del ratón sobre «useCaseModel» Use Case Model y vamos a Add->Actor o cualquier otro de los objetos que se ofrecen.

Desencriptar código PHP

[programación]

Últimamente me ha tocado lidiar con código PHP que se encuentra encriptado y ofuscado. Se trata de un módulo para PrestaShop de la empresa Agile. En nuestro caso nos daba una funcionalidad muy próxima a lo deseado, pero menuda sorpresa al intentar corregir algunos elementos y descubrir que el código estaba encriptado y ofuscado.

En este caso el tipo de encriptación utilizado era hexadecimal. Tras buscar un rato, encontré esta página que realiza una desencriptación del código:

DDecode

Funciona bastante bien, pero en un par de casos parece que se queda a mitad fichero y no acaba de realizar la desencriptación. Buscando un poco más encontré en Stackoverflow este tema donde explican como desencriptar el hexadecimal utilizando JavaScript. Lo he probado y también funciona bastante bien, al menos este termina de desencriptar el fichero. Así que mi solución ha sido utilizar ambos métodos y comparar el código resultante para reconstruir el fichero original.

Por si a alguien re puede resultar este segundo método, he creado una sencilla página donde puede insertar el código para ser desencriptado. La encontraréis en:

Just Another Hex Decoder!

Alternativa a Akismet

[blog]

Durante el tiempo que he tenido alojado el blog en servidores gratuitos, no he podido utilizar Akismet. Uno de sus requisitos es poder conectarse directamente a la base de datos de Akismet, de donde se obtiene la información sobre spam, pero en los servidores gratuitos esto no era posible. Sin embargo, ahora que tengo un servidor decente he podido tener Akismet en marcha durante un tiempo, y he acabado un tanto decepcionado.

La primera impresión fue buena, con Akismet el spam desapareció, pero también desaparecieron algunos comentarios que sí eran válidos. Y ese es el problema con Akismet, es increíblemente restrictivo y puede hacer desaparecer comentarios correctos. Es más, durante las últimas semanas, se empezaron a colar comentarios spam en el blog. Igual uno cada dos o tres días, pero comentarios que son descaradamente spam, escritos en inglés, con un texto genérico, apuntando a una URL de publicidad y con un email sospechoso. Y Akismet los daba por válidos. ¡Pues menuda decepción!

Estuve tentado de volver a mi solución anterior, que me había dado excelentes resultados. El problema es que ese código se machaca al realizar una actualización de WordPress, por lo que es costoso de mantener. Lo ideal sería tener un plugin que ofreciese esa funcionalidad, y buscando por internet eso es justo lo que encontré.

El plugin se llama Invisible Captcha y hace exactamente lo que hacía yo, pero en forma de plugin. Añade un campo oculto y aleatorio al formulario de envío de comentarios y después comprueba si el valor del campo es correcto. En caso contrario, el comentario es spam. Lo he usado unas semanas y funciona de lujo. No se ha colado ni un comentario de spam.

Por defecto Invisible Captcha ofrece tres opciones, marcar como spam, marcar para moderación o enviar a la papelera. En mi caso, no quería ni verlos en la papelera, quería que directamente desaparecieran para no tener que estar vaciando la papelera cada dos por tres. Para ello borro el comentario en cuanto es marcado como basura:

if ($invisible_captcha_spam_action=='delete') {
    wp_set_comment_status($id, 'trash');
    wp_delete_comment($id);
    wp_die($invisible_captcha_spam_message, '', array('response' => 403));
}

La línea que he añadido es wp_delete_comment($id); Es importante que el comentario se haya marcado primero como ‘trash’ ya que el método wp_delete_comment solo borra un comentario que ya esté en la papelera.

En definitiva, recomiendo Invisible Captcha como alternativa a Akismet para evitar el spam automático. En blogs con mucho tráfico donde tal vez el spam es introducido por humanos, Invisible Captcha sería inútil. Pero tampoco se como de eficaz sería Akismet en ese caso. De momento para mi blog, me basta y me sobra.

Importar un fichero CSV grande a MySQL

[programación]

El objetivo es importar los ficheros GeoLite que ofrece MaxMind para poder geolocalizar usuarios. Son dos ficheros, GeoLiteCity-location.csv de 21MB y GeoLiteCity-Blocks.csv de 64MB. PhpMyAdmin ofrece la posibilidad de importar ficheros CSV, pero claro, tienen que tener un tamaño razonable. Con estos no puede, y aunque consiguiéramos que funcionara, la importación sería tremendamente lenta.

Por eso la mejor opción es usar la línea de comandos de MySQL. En mi caso uso WAMP, así que para acceder a la línea de comandos hacemos lo siguiente:

  1. Inicio->Ejecutar->cmd
  2. Vamos a c:\wamp\bin\mysql\mysql5.5.24\bin. Esta ruta puede cambiar dependiendo la versión de MySQL que esté instalada.
  3. Ejecutamos: mysql.exe -u root

Ahora que estamos en la consola de MySQL haremos la importación del fichero CSV. Supongamos que el fichero está en c:\fichero.csv y lo queremos meter en la tabla locations de la base de datos geolocalizacion. Primero accedemos a la base de datos:

USE geolocalizacion

Después importamos:

LOAD DATA LOCAL INFILE 'c:/fichero.csv'
INTO TABLE location
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';

En este caso los campos del fichero CSV están en el mismo orden que en la tabla. Si el orden fuese diferente, añadiríamos a la importación la opción:

(campo1, campo2, campo3, ...);