19 años en Internet

29 agosto 2014

¿Sirve de algo la clasificación PEGI en videojuegos?

    Hoy me llegó por correo un juego de segunda mano y al ver su reverso quedé desconcertado acerca de la calificación PEGI que obtuvo. Según la valoración de esta agencia europea, mi juego era apto para chavales de doce años, puesto que habían detectado en él los siguientes puntos conflictivos:
  • Violencia.
  • Lenguaje soez.
  • Sexo.
    Ahora viene la duda, ¿qué clase de sexo contiene un juego apto para chavales de 12 años? Lógicamente no se trata de un juego "carnal", si no de una inocente novela visual disponible para la Wii, probablemente la consola con menos tetas (o sucedáneos de tetas) de su generación. Hombre, el título del juego es "Sakura Wars: So long, my love", pero a pesar del título ("hasta luego, mi amor") no es ni más ni menos que una novela visual con combates de mecas (sí, esos robots japoneses gigantes), donde premian las situaciones absurdas más que el supuesto ligoteo. Ahora imaginaros que quiero comprar esto para un sobrino, al ser apto para chavales de 12 años no veo ningún problema, pero ver el logotipo de "SEXO" en mayúsculas ya me hace dudar.


Lo más "wtf" es que cada logo descriptivo tiene un símbolo de "marca registrada" (TM).

    A lo mejor sale alguna minifalda, quién sabe. Yo no sé qué puede considerarse contenido sexual apto para niños de 12 años y en ninguna parte de la caja del juego te lo aclaran. Así que como buen amante de la demagogia que soy, tal y como espero ha quedado patente en los 8 años que llevo escribiendo en este blog, me puse a investigar a qué puede ser debido esta valoración.

    Lo primero que haría, como cualquier buen usuario que quiere saber qué significa cada logo de PEGI, es entrar en su sitio web oficial: www.pegi.info. Ahí, si pones el foco del ratón sobre uno de los iconos que emplea esta empresa de calificación europea, aparece sobre él un cuadro de texto descriptivo. De ahí sacamos que el icono de sexo significa: "El juego contiene representaciones de desnudez o/y comportamientos sexuales o referencias sexuales".


    Hombre, con eso ya tenemos algo y es que si en el reverso de la caja de un juego te aparece un logo con el texto "SEXO" en mayúsculas significa que el juego no tiene por qué contener sexo. Ya es algo, ahora ya sabemos que si el juego es apto para chavales de 12 años a lo mejor nos encontramos alguna referencia sexual o algún comportamiento picarón. De todas formas, a pesar de haber leído esto seguimos sin saber qué contenido subidito de tono tiene este juego.

    No contentos con ello encontramos que el sitio web de PEGI posee una base de datos para encontrar las valoraciones de todos los juegos que han analizado. Dicho esto paso a buscar las observaciones del juego en cuestión... y nos encontramos que cada juego de la base de datos apenas contiene un ligero párrafo descriptivo en inglés: "The content of this game is suitable for persons aged 12 years and over only. It contains: Non realistic looking violence towards human characters - Violence in a sporting context - Sexual images and/or sexual innuendo - Mild bad language - Violence causing minor injury only".


Vamos, que el juego contiene imágenes sexuales y/o insinuaciones sexuales. 

    Ok, aparentemente ya sabemos algo: o que el juego contiene imágenes sexuales, o insinuaciones o ambas cosas. Es decir, que estamos como al inicio, realmente no tenemos ni idea de qué tiene nuestro juego. Así que el siguiente paso es el que mucha gente habría hecho al principio: Buscar imágenes del juego en los buscadores de internet. Tras una ardua búsqueda, la escena más picante que he podido encontrar es una chica que enseña parte de su hombro... ¡y por que lleva un vestido de gala!



    Así que el siguiente paso es buscar en Youtube, donde caigo en el trailer americano del juego y ahí descubrimos una escena donde una chica cae al suelo y sale mojada (pero con mucha ropa y sin transparentar, mal pensados) y una camarera con escote. Aún así, son dos escenas que llaman tan poco la atención que la agencia americana de calificación de juegos dice que de sexo nada, lo que hay son referencias sexuales (algo que también pasa a juegos megapervertidos como a determinadas versiones de FIFA debido a ciertas canciones que han querido incluir).


Captura de pantalla del trailer americano del juego.



Captura extraída de la ESRB americana.

    El caso es que tras ver la clasificación de la ESRB encontramos una definición que también es ambigua ("Alusiones al sexo o a la sexualidad"), pero por lo menos es mucho más completa que la PEGI, puesto que se descarta el "contenido sexual" o la "violencia sexual". Así que si por ahora entendemos que si regalamos esto a nuestro sobrino no se va a convertir en un violador o en el mismísimo Pitbull. Aún así podemos profundizar más en el tema puesto que, al igual que PEGI, ESRB tiene una base de datos donde consultar todos los juegos que han "certificado" y sorprende porque se esmeran mucho más en dar las valoraciones de los puntos que consideran de interés:

Captura del resumen de la certificación en la web de ESRB.
Fuente original: esrb.org

    Traduciendo, atentos a la jugada:
    En este juego de rol, ambientado en una fantasiosa versión de la ciudad de Nueva York (de 1925), los jugadores luchan para proteger la ciudad del ataque de espiritus malignos invocados desde el Japón medieval. El juego gira al rededor de las aventuras de Shinjiro Taiga, un joven cadete militar de Japón, y de su equipo de cinco femeninas pilotos de "mecas". Durante la estrategia de los combates de mecas, los jugadores luchan contra contrincantes robots y demonios utilizando un armamento de explosivos, lásers con látigos/cadenas y espadas. El daño se indica con los mecas destrozándose, puntos de vida en la pantalla y una gran cantidad de luces brillantes --amplificando la fantasía de violencia. Escenas animadas pueden mostrar un personaje ser atravesado (en una silueta de color rojo y negro) o un meca siendo destruido por un golpe de guadaña. Durante el transcurso del juego, los jugadores pueden escuchar algunas palabrotas (por ejemplo "shit", "bullshit" o "bitch"), uno de los factores por los que se le ha puesto la clasificación Teen (adolescentes)
[A continuación se presentan más detalles, factores relevantes y razones por las que se ha calificado el juego] 
    El juego también recibe la calificación de Teen (adolescentes) por sus alusiones sexuales. Diálogos raros que incluyen referencias a la anatomía femenina y más allá; Por ejemplo, "Tienes unos melones explosivos", "No te parece que mi hermana está más buena?", "Tienes el trasero más hermoso de la zona", y "Estaba aquí vigilando el museo, ¡cuando la cosa empezó a menearse!". Algunas de estas frases son tan aleatorias como suenan (modismos poco frecuentes e incongruentes); Otros comentarios tienen un contexto más directo: Una mujer pregunta al jugador que parte del cuerpo le parece la más atractiva; El jugador puede mover el cursor sobre el escote de la mujer para activar la respuesta "Tus pechos, por descontado". A pesar de que todas las descripciones visuales son mínimas (por ejemplo, imágenes estilo manga de mujeres completamente vestidas), los jugadores tienen la habilidad de hacer zoom en las partes del cuerpo, hacer fotos, decir cosas como "¿Puedo tocarlas?" e insistir a las mujeres sobre quitarles la camiseta. En este último ejemplo, los jugadores afrontan la consecuencia de su insistencia, perdiendo puntos de confianza con sus pilotos femeninas de mecas, recibiendo una leve reprimienda (por ejemplo, "Me estoy intentando vestir aquí! Lárgate, ¡¿quieres!?" y "¡Lárgate de una maldita vez antes de que llame a la policía!").
    Ahora todo tiene sentido, tras leer el resumen de la ESRB llegamos a la conclusión que el juego no tiene escenas implícitas (recordemos que destacan que todas las mujeres aparecen siempre completamente vestidas y que no hemos visto ninguna escena picante al buscar previamente imágenes del juego en internet), pero sí varios diálogos subidos de todo, seguramente varios de ellos durante los combates de mecas (los supuestamente aleatorios) y otros que se activan en situaciones concretas. Ahora bien, hay que remarcar que la ERSB califica la categoría Teen para chavales de a partir de 13 años (y no 12, como hace PEGI). En resumen, el juego tiene la clasificación de "Adolescentes" porque en un par de eventos se le da la opción al jugador de realizar comentarios guarretes.

    Podríamos decir ahora, que la información suministrada por PEGI en sus juegos resulta a primera vista muy impactante, puesto que utiliza un sistema de logotipos fácil de entender... pero que, sobretodo en comparación con el modelo americano de la ESRB, resulta dar una descripción muy vaga e imprecisa sobre el contenido real de un juego.

    Y el resultado está ahí: Hemos observado las dos valoraciones del juego y los dos resúmenes presentes en ambas bases de datos y como resultado obtenemos que en ambos casos la calificación PEGI pierde por goleada. Como primera referencia PEGI no es una mala medida, pero se hecha en falta algo más de transparencia e información. Veamos el ejemplo de la ESRB: Ofrece unas calificaciones escuetas pero con un rango de valores más amplio y además en su web te cuentan con pelos y señales el por qué de cada valoración.

   Por último, para comprobar que el sistema PEGI hace agua, he buscado una serie de juegos en ambas bases de datos, obteniendo las siguientes calificaciones:
- Mass Effect 1, 2 y 3.
  • Según PEGI: Contienen violencia extrema, lenguaje soez y juego online. No es apto para menores de 18 años. No aparece el logo de "SEXO" en ninguna parte.
Captura de la web de pegi.info
  • Según Sebas: Los tres contienen escenas de cama con desnudos parciales que poco dejan a la imaginación. No contentos con estas escenas, puedes tener aventuras con compañeros del mismo sexo y con extraterrestres.
  • Según ESRB: Sangre, lenguaje soez, desnudez parcial, alusiones al sexo y violencia. +17 años.

- Dargon Age 1 y 2:
  • Según PEGI: Idem que Mass Effect, pero sin juego online. No aparece el logo de "SEXO" en ninguna parte, pero si una advertencia de "violencia sexual" que no aclaran en ninguna parte.

    Captura de la web de pegi.info

    • Según ESRB: Sangre, lenguaje soez, desnudez parcial, violencia y contenido sexual. +17 años.
    - Onechanbara : Bikini Samurai Squad y Onechanbara : Bikini Zombie Slayers.
    • Según PEGI: Contienen violencia extrema y permite la interacción online con otros usuarios. No es apto para menores de 18 años. No aparece el logo de "SEXO" en ninguna parte.
    Captura de la web de pegi.info
    • Según Sebas: Manejas a una japonesa en bikini que va matando zombies. La prensa lo cataloga como "fan service" que sólo sirve para degustar a degenerados. En la portada y en el reverso sale la protagonista con un bikini muy fino. En el reverso sale el texto "SEXY SAMURAI SISTERS". La intro del juego muestra a la protagonista duchándose, sin imágenes explícitas pero muy sugerentes.
    • Según ESRB: Sangre, lenguaje soez, desnudez parcial, alusiones al sexo y violencia intensa. +17 años.

       En los dos primeros casos tenemos 5 juegos con escenas de sexo y desnudos parciales y en el tercero tenemos un juego donde manejamos a una chica de buen ver vestida en biquini y que no contentos con burlar el filtro de PEGI aparece en esa indumentaria tanto en la portada física del juego, como en su reverso e incluso impreso en el DVD del juego. Vale que todos estos casos tengan una calificación de juego para mayores de edad, pero la explicación del motivo en todos, según PEGI, tienen como denominador común la violencia, no el sexo. Es más si no entramos en la web de PEGI para leer "el párrafo", ni nos enteramos de la supuesta "violencia sexual" de Dragon Age 2, puesto que en la caja del juego físico sólo salen los logos de "Violencia" y "lenguaje soez"

        ¿Realmente sirve de algo la calificación PEGI? ¿Está bien poner que un juego tiene contenido sexual pero ser apto para chavales de 12 años y en cambio no mencionarlo en otros por ser destinados a mayores de edad? Con lo que vale una certificación PEGI, ¿no podrían ofrecer la misma transparencia al consumidor como sus homónimos americanos de la ESRB?

    11 agosto 2014

    La extinción del manual de instrucciones

        A día de hoy los videojuegos más famosos contienen un presupuesto similar a las grandes películas de Hollywood. De hecho, juegos como Gears of War 3, Dragon's Dogma o Saints Row IV cuentan con unas pantallas de crédito kilométricas, dando a conocer hasta el último detalle de cada uno de sus equipos: Animadores, guionistas, testers... centenares de personas que unidas han conseguido elaborar un producto mastodóntico.

        Como es de esperar, para poder organizar semejante volumen de gente, debe de elaborarse una documentación completa que no deje ningún cabo suelto: Captura de requisitos, mapas de navegación, casos de uso, esquemas UML... Es probable que los grandes proyectos se gasten miles de euros sólo en documentar hasta el último milímetro de las entrañas de un producto. Y no me lo invento, puesto que las grandes empresas pierden y ganan personal a diario y a día de hoy no existe un framework capaz de crear juegos comerciales con un par de clics de ratón. Si los proyectos no estuvieran bien documentados, a día de hoy no debería ser posible presentar cada año un FIFA, un Bioshock o un Assassin's Creed y encima sacarlo a la venta para varias plataformas distintas.

        La cosa es que a pesar de meter y meter dinero en un proyecto, la industria olvida una cosa: a día de hoy el formato que más vende sigue siendo el físico y lo que el usuario final "toca" cada vez está más anoréxico. No entraré en el tema de que ahora cada vez más juegos vienen capados con DLC dentro del disco físico (como por ejemplo pasa en Street Fighter vs Tekken), o con el famoso "pase on-line"... si no en algo más tangible, algo que se ve a simple vista y es bastante más fácil de palpar.

        Yo he tenido la suerte de vivir el auge del comercio del videojuego desde la época del Spectrum y he podido observar cómo cada vez a los usuarios se les trataba con más cariño. Desde las cajas tradicionales de cassette con instrucciones en la contraportada hasta la época del ordenador y las consolas caseras con cajas de cartón duro y con manuales de instrucciones impresas en alta calidad y con ilustraciones a color. Vale que entonces un juego de ordenador valía la friolera de 7000 pesetas y un juego de Super Nintendo alcanzaba los 12.900... pero demonios, las distribuidoras sabían que el usuario se gastaba los ahorros de todo un año en un juego y sabían que no podían presentarle cualquier cosa...

        Volviendo al presente, hace un par de meses me compré una Wii U de segunda mano. La verdad es gracias a que la consola es un fiasco estos juegos me han salido muy baratos... pero me ha llamado la atención la práctica inexistencia de los manuales de instrucciones. No nos engañemos, no es algo que pase de forma exclusiva con la Wii U, si no algo que ya venía pasando con los juegos que últimanente sacan en cualquier consola... pero también ha sido mala suerte tener un 100% de acierto con esta consola. Cuatro juegos que me he comprado, cuatro juegos que tienen un manual de instrucciones (por llamarlo de alguna forma) anoréxico a más no poder:
    • Mario Kart 8: Una hoja en A5 (mitad de un A4) impresa por ambos lados, donde sólo te explican los controles "in game".
    • Tekken  Tag Tournament 2: Una hoja A4 impresa por ambos lados y doblada en 4 partes.
    • 007 Legend: Una hoja A6 (mitad de un A5, es decir 1/4 de una A4) impresa por ambos lados.
    • Mass Effect 3: El caso más sangrante, una hoja en A5, impresa por ambos lados que lo único que te explica es la garantía, la información de copyrights y un aviso que dice que accedas al manual electrónico desde el menú de Wii U para leer el manual de instrucciones del juego.
        Yo puedo entender que el sacar panfletos en vez de manual de instrucciones ayuda al medio ambiente y no me parece tan mala idea... al fin y al cabo ahora hasta el juego comercial más basura te coloca fácilmente 100.000 unidades en el mercado. Pero imaginad a la persona que se haya gastado sus 50 o 60 euros en uno de estos juegos, abra la caja del DVD y se encuentre únicamente con un disco compacto y una hoja en formato A5. Ahora imaginaros a su amigo "el pirata" que no paga ni un duro y se ríe en su cara con la famosa frase de: "mira que eres tonto, tengo lo mismo y gratis". Sí, todos hemos tenido un amigo que nos ha soltado eso alguna vez, no lo neguéis.

        Es que esto es tomar al consumidor del formato físico por gilipollas. No sé, si lo que quieres es no talar árboles y sacar los juegos igualmente a 60 euros, por lo menos tened la decencia de meter el manual de instrucciones en una tarjeta SD o de imprimir en papel reciclado. Veo un avance de que a día de hoy las cajas ya no sean de cartón, pero entiendo que no lo hacen por el medio ambiente, si no porque son más baratos de producir... y vete a saber si el plástico de los estuches de videojuego son biodegradables, puesto que las distribuidoras los compran en masa a empresas localizadas en países con dudosas normativas biológicas.

        El caso es que esos manuales de instrucciones "no anoréxicos" existen. Puede que no se hayan gastado en ellos tanta "plata" como la documentación con la que he empezado hablando al principio de la entrada, "pero haberlos, haylos"... pero en formato digital. No obstante tenemos que ser realistas: El manual digital no cuaja con los juegos físicos. Estoy a favor del medio ambiente, no me mal interpretéis, pero ya que nos sacan a día de hoy los juegos mutilados por fascículos con DLC y pases online (y ahora incluso sin manual de instrucciones...), por lo menos tened la decencia de bajar el precio del producto.

    30 julio 2014

    Aprendiendo Python, día 2

    1.- Objetos (II):

    1.1 - Herencia:

        En Python los objetos pueden heredar sus atributos de otra clase padre.

        Ejemplo:
    class item():
            # Variables de instancia
            s_name          = None
            s_description   = None
            f_value         = float(0)
            # Constructor de clase
            def __init__(self, s_name, s_description, f_value):
                    self.s_name             = s_name
                    self.s_description      = s_description
                    self.f_value            = float(f_value) 
    class potion(item):
            # Variables de instancia
            i_health_point_restores = int(0)
            # Constructor de clase
            def __init__(self, s_name, s_description, f_value, i_health_point_restores):
                    self.i_health_point_restores    = int(i_health_point_restores)
                    # Llamamos al constructor del padre
                    item.__init__(self, s_name, s_description, f_value) 
    potion_1 = potion("Pocion", "Bebida", 100, 100)
    print "El item es "+ potion_1.s_name + " y recupera", potion_1.i_health_point_restores, "puntos de vida"
         Si nos fijamos, al definir una clase hija definimos quién es el padre y más tarde volvemos a referenciar el padre (otra vez) cuando hacemos llamada a su constructor. Esto se debe a que Python permite herencia múltiple.

        Ejemplo:
    class age_old():
            i_age   = int(18)
            def __init__(self, i_age):
                    self.i_age      = int(i_age) 
    class genre():
            s_genre = "male"
            def __init__(self, s_genre):
                    self.s_genre    = s_genre 
    class character(age_old, genre):
            s_name  = None
            def __init__(self, s_name, i_age, s_genre):
                    self.s_name     = s_name
                    age_old.__init__(self, i_age)
                    genre.__init__(self, s_genre)
     

    character_1 = character("Messi", 24, "male")
    print character_1.s_name + " has", character_1.i_age, "years old and is " + character_1.s_genre
        Otra característica de la herencia en Python, es que podemos reescribir métodos de una clase padre sin necesidad de utilizar palabras reservadas para tal efecto.

        Ejemplo:
    class a():
            def to_String(self):
                    return "Hola"
            pass 
    class b(a):
            def to_String(self):
                    return "Adios"
            pass 
    v_variable = b()
    print v_variable.to_String()
        Habrás notado en el ejemplo anterior que he empleado la palabra "pass". Esta palabra reservada puede emplearse en la definición de clases para ahorrarse la definición de constructores. No es recomendado su uso, pero resulta últil a la hora de codificar rápido.

    2.- Bases de datos:

        Existe para Python una serie de conectores para bases de datos bastante útiles, las cuales podemos clasificar de tres tipos:

    1. Tradicionales (modelo servidor de base de datos + autenticación + cliente).
    2. Embebidas (base de datos almacenada en un fichero local).
    3. Volátiles (base de datos almacenada únicamente en la memoria RAM).

    2.1 - Bases de datos tradicionales.

        Cuando hablamos de un entorno tradicional de bases de datos, nos referimos a que nuestra aplicación ataca contra un servidor o servicio de base de datos. Es decir, necesitamos conocer un usuario con el que autenticarnos, su contraseña y la ip (y/o puerto) del servicio.

        Ejemplo (requiere paquete python-mysqldb):

    import MySQLdb 
    # Conexion SQL
    sql_connection  = MySQLdb.connect('ip_server', 'user_name', 'password', 'bda_name')
    sql_cursor      = sql_connection.cursor() 
    # Sentencia
    sql_cursor.execute("select name from photos where 1 order by date limit 0,10") 
    # Listamos los resultados
    for v_tupla in sql_cursor.fetchall() :
        print v_tupla[0]

    2.2.- Base de datos empotradas y volátiles

        No obstante, es bastante común en las aplicaciones de escritorio emplear bases de datos persistentes en ficheros o hacer uso de bases de datos temporales que existen en su memoria RAM. El primer modelo suele emplearse en aplicaciones que hacen uso de colecciones elevadas de datos (como por ejemplo un reproductor de audio como Amarok que gestiona y clasifica todos los ficheros por autor, género, además de almacenar el número de veces que has escuchado un tema, etcétera) mientras que el segundo suele verse más en juegos (donde se hace uso de distintas tablas y vistas que no requieren ser almacenadas para salvar la partida).

        Es cierto que una aplicación de escritorio puede emplear otro tipo de gestión de datos. Por ejemplo, hay aplicaciones que almacenan sus colecciones en ficheros de texto plano o en ficheros XML, por citar unos ejemplos comunes. No obstante, emplear una base de datos embebida o empotrada nos presenta dos mejoras importantes:
    1. Búsqueda de información más rápida, puesto que se realizan consultas SQL y no una lectura secuencial de datos.
    2. Los gestores de BDA empotradas más comunes generan ficheros cifrados.
        Tanto si queremos hacer una base de datos embebida o una volátil, en Python podemos hacer uso del plugin de SQLite3.

        Ejemplo de base de datos empotrada:

    import sqlite3 
    # Si el fichero de la base de datos no existe, se crea
    sqlite3_connection = sqlite3.connect("mi_fichero_de_BS.db")
    sqlite3_cursor = sqlite3_connection.cursor() 
    # Si no existe nuestra tabla "photos", la creamos
    sqlite3_cursor.execute("create table if not exists photos (id int, content blob)") 
    # Leemos una imagen en formato binario
    f_picture = open("test.jpg", "rb")
    with f_picture:
        picture_data = f_picture.read() 
    # Insertamos fotos a la BDA
    sqlite3_cursor.execute("INSERT INTO photos (name, content) VALUES (0, ?)", [sqlite3.Binary(picture_data)]) 
    # Confirmamos el cambio
    sqlite3_connection.commit()
    sqlite3_connection.close()
        Ejemplo de base de datos volátil (atención al nombre del archivo, el resto es igual que una base de datos empotrada):
    import sqlite3 
    # Si el fichero de la base de datos no existe, se crea
    sqlite3_connection = sqlite3.connect(':memory:')
    sqlite3_cursor = sqlite3_connection.cursor() 
    # Si no existe nuestra tabla "empleados", la creamos
    sqlite3_cursor.execute("create table if not exists employee (name varchar(200), age int)") 
    # Insertamos valores
    d_employees = dict()
    d_employees["Sebastian Moncho"] = 30
    d_employees["Garijo"] = 25
    d_employees["Querido lector"] = 21
    for v_index, v_value in d_employees.items():
            sqlite3_cursor.execute("INSERT INTO employee (name, age) VALUES ('"+ str(v_index) +"', " + str(v_value) +")") 
    # Confirmamos el cambio
    sqlite3_connection.commit() 
    # Hacemos un select e imprimimos por salida estandar
    sqlite3_cursor.execute("select name, age from employee where 1")
    for v_tupla in sqlite3_cursor.fetchall() :
        print v_tupla[0] + " tiene", v_tupla[1] 
    sqlite3_connection.close()

     

    3.- Convertir a C y compilar

        Existen varios compiladores de código para Python (para aquellas ocasiones que no queramos que los demás lean nuestro código). La opción más extendida es la de hacer uso de la aplicación Cython para convertir nuestro código de Python a lenguaje C. Su uso es bien sencillo. Este código puede además compilarse y emplearse en otros sistemas (de la misma arquitectura) siempre que "linkemos" con la librería estática de Python o bien exportemos la dinámica. No voy a entrar en cómo "enlazar" las librerías, sólo me remitiré a deciros que esto existe y os voy a mostrar un ejemplo rápido.

        Convertir un código fuente .py a código fuente de c:
    cython --embed sqlite3_volatil.py -o sqlite3_volatil.c
        Crear un objeto de c a partir del código fuente:
    gcc -c sqlite3_volatil.c `pkg-config --cflags python` -o sqlite3_volatil.o
        Crear el ejecutable binario:
    gcc sqlite3_volatil.o `pkg-config --libs python` -o sqlite3_volatil
        Si hacemos un ldd sobre nuestro nuevo binario, veremos las librerías dinámicas que emplea nuestro binario para posteriormente decidir cuales exportar:
    ldd sqlite3_volatil 
    linux-vdso.so.1 =>  (0x00007fff642a0000)
    libpython2.7.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython2.7.so.1.0 (0x00007f0301ae6000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0301720000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0301501000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f03012e8000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f03010e4000)
    libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f0300ee0000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0300bda000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f030206c000)
        Si ejecutamos nuestro binario, veremos que tendremos el mismo comportamiento que con el intérprete:
    ./sqlite3_volatil
    Garijo tiene 25
    Querido lector tiene 21
    Sebastian Moncho tiene 30
        Podemos crear un script de bash para hacer uso de las librerías dinámicas que exportemos y así poder ejecutar nuestro binario en máquinas Linux de la misma arquitectura:
    #!/bin/bash
    declare -r ARCH=`uname -m` 
    [ "$ARCH" == "x86_64" ] &&\
            export LD_LIBRARY_PATH="./libs/x86_64" &&\
            ./sqlite3_volatil

    24 julio 2014

    Llega a Gog la primera hornada de juegos compatibles con Linux... ¡y lo celebra con descuento!



        Desde hoy está disponible en GOG.com su primera hornada de juegos compatibles con Linux y para celebrarlo dichos títulos se estrenan como oferta del fin de semana, con un 75% de descuento. No destacan mucho por su calidad (salvo honrosas excepciones), pero sí por su cantidad (gran parte porque bastantes de ellos funcionan con un emulador DosBox modificado para la ocasión).



       A diferencia de los intalables de Windows o Mac, las versiones de Linux cuentan con dos posibles descargas: Un paquete .deb optimizado para Ubuntu 14.04 (requiere permisos de administrador) o un sencillo tarball (comprimido tar.gz que deployea la aplicación, puedes ejecutarla a través de un script start.sh) que permite su ejecución en otros sistemas (no garantizado) y sin requerrir permisos de super usuario.

    Lista completa de los juegos compatibles con Linux presentados hoy:

    • Anomaly Warzone Earth
    • Ascendant
    • Bionic Dues
    • Blake Stone: Aliens of Gold
    • Blake Stone: Planet Strike
    • Bloodnet
    • Braveland
    • CLARC
    • Darklands
    • Darwinia
    • Defcon
    • Don't Starve + DLC
    • Dragonsphere
    • Duke Nukem 3D: Atomic Edition
    • FlatOut
    • Flatout 2
    • Fragile Allegiance
    • Gemini Rue
    • Gods Will Be Watching
    • Hammerwatch
    • Hocus Pocus
    • Kentucky Route Zero
    • The Last Federation
    • Legend of Grimrock
    • Litil Divil
    • Long Live the Queen
    • MouseCraft
    • Multiwinia
    • Normality
    • Pinball Gold Pack
    • Pinball World
    • Pirates! Gold Plus
    • Realms of the Haunting
    • Rex Nebular and the Cosmic Gender Bender
    • Rise of the Triad: Dark War
    • Shattered Haven
    • The Shivah HD
    • Sid Meier's Colonization
    • Sid Meier's Covert Action
    • Sir, You Are Being Hunted
    • Slipstream 5000
    • Space Pirates and Zombies
    • Spacechem
    • Stargunner
    • SteamWorld Dig
    • Super Hexagon
    • Surgeon Simulator 2013
    • Sword of the Samurai
    • Teslagrad
    • Unrest:Special Edition
    • Uplink
    • VVVVVV

    Aprendiendo Python, día 1

    1.- ¿Qué es Python?

        Python es un lenguaje de scripting (lenguaje de programación interpretado) con dos objetivos clave: Ser inteligible y ser multiplataforma. Al ser un lenguaje interpretado, significa que cuando se ejecuta un programa escrito en Python no se ejecuta un código binario, si no el código fuente en si, permitiendo que cualquier usuario final pueda editarlo (ahora bien, existen herramientas de terceros que te permiten generar binarios .exe, por ejemplo).

        Por otro lado, al ser multiplataforma significa que todo lo que se tenga que ejecutar tendrá que funcionar de forma parecida (dentro de lo que se pueda) en distintos sistemas operativos. Esto es un punto a favor respecto a otros lenguajes de scripting como Batch (sistemas Windows), Bash o AWK (Unix)... además de contar con otra mejora importante respecto a estos: Python es un lenguaje de scripting con orientación a objetos.

    2.- ¿Cómo se instala?

        En entornos Linux suele estar presente en la mayoría de repositorios, pudiendo instalarse fácilmente con programas como yum o apt-get (ejemplo, en Ubuntu bastaría con abrir una shell y teclear: sudo apt-get install python-all).  En entornos Windows basta con instalarse el instalable suministrado en la web oficial de Python.

    3.- "Hello World" y  "What's your name?"

        El primer programa que hacemos siempre en cada lenguaje de programación que queremos aprender es el famoso "Hola Mundo"... Una sencilla aplicación de consola que lo único que hace es imprimir por salida estándar (pantalla) el texto de "Hola Mundo". Haciendo uso de nuestro editor de texto preferido vamos a crear un fichero de texto plano llamado helloworld.py y le vamos a poner el siguiente contenido:
    print "Hello world!"
    Guardamos el archivo, abrimos una terminal y ejecutamos:
    python helloworld.py
        Verás que nos sale una nueva línea con el texto Hello world!. Como ves éste ha sido uno de los Hello World más sencillos que has hecho en tu vida: haciendo uso una mera línea de código. Si en Windows no te encuentra el programa "python", dale un vistazo a cómo definir las variables del sistema de Python, serguramente el ejecutable no se encuentra en ninguna ruta de tu Path.

        Ahora vamos con un paso más complicado, vamos a imprimir por salida estándar "Cómo te llamas?", vamos a hacer que se nos pregunte por entrada estándar nuestro nombre y acto seguido imprimiremos "Encantado de conocerte, XXXXX". Para ello crearemos el fichero de texto plano whatsyourname.py y añadiremos las siguientes líneas:
    # -*- coding: utf-8 -*-
    print "¿Cómo te llamas?"
    s_name = raw_input()
    print "Encantado de conocerte,", s_name
        La primera línea es necesaria porque estamos utilizando carácteres que no están presentes en la codificación ASCII estándar, como es el símbolo de apertura de interrogación o el acento en la o. Sin esa línea nuestro script no podría ejecutarse "por errores de código". Ahora bien, esta línea sería innecesaria si nuestros literales estuvieran escritos únicamente en inglés o en castellano pero sin carácteres no presentes en la codificación ASCII.

        En la tercera línea pedimos una entrada manual de datos y hacemos que el dato o datos suministrados se guarden en la variable s_name. Si nos fijamos, a diferencia de otros lenguajes de programación no hace falta definir ni inicializar previamente dicha variable. Por último, por defecto Python entiende que todas las variables son strings, pero podemos forzar su uso como float o integers (por ejemplo) haciendo uso de castings. Para demostrar esto (que todas las variables por defecto son cadenas de texto), os presentaré un pequeño cambio en el código:
    # -*- coding: utf-8 -*-
    print "¿Cómo te llamas?"
    s_name = raw_input()
    print "Encantado de conocerte, " + s_name
        Si ejecutamos ahora el código veremos que el comportamiento es exáctamente el mismo que antes, pero hemos añadido un espacio en blanco dentro de las comillas y hemos concatenado la cadena s_name haciendo uso del símbolo "+".

        Podemos presentar una tercera variación del código, dado que raw_input permite mostrar una cadena de texto a la vez que pide la entrada de datos:
    # -*- coding: utf-8 -*-
    s_name = raw_input("¿Cómo te llamas?\n")
    print "Encantado de conocerte, " + s_name
        Por último, si eres usuario de Linux, existe una forma con la que puedes ejecutar tus programas de Python sin necesidad de escribir siempre "python " delante:
    1. Desde una terminal ejecuta which python para conocer la ruta donde se encuentra tu intérprete de Python. En mi caso se encuentra en /usr/bin/python.
    2. En la primera línea de tu script escribe lo siguiente: #!/usr/bin/python
    3. Dale permisos de ejecución a tu script: (desde consola) chmod +x script.py
    4. Ejecutalo escribiendo su ruta absoluta o relativa: ./script.py

    4.- Conceptos básicos de Python

    4.1- If, else if, else, enteros y cadenas.
        Python no usa llaves para separar bloques de código (como son clases, funciones o condiciones). Para delimitar esos bloques se hace uso de sangrías (tabulaciones) o 5 espacios en blanco. Suena raro, pero es práctico y genera código inteligible. Para entender esto os dejo un ejemplo de condiciones:

    # -*- coding: utf-8 -*-
    v_number = raw_input("Dame un número\n")
    v_number = int(v_number) 
    if v_number > 10:
            print v_number , "es > 10" 
    elif v_number == 10:
            print v_number , "es 10" 
    else:
            print v_number , "es < 10"
        Si nos fijamos, en el caso anterior hemos hecho un casting a int para poder realizar una comparación con un valor entero. De no haberlo hecho, Python habría entendido que v_number era una cadena de texto y por consiguiente de no ponerlo no obtendríamos el resultado esperado. Ejemplo de comparación correcta con cadenas de texto:
    # -*- coding: utf-8 -*-
    v_name = raw_input("Dame un nombre\n") 
    if v_name == 'Sebas':
            print v_name + " es Sebas" 
    else:
            print v_name + " no es Sebas"

    4.2- Bucles
        Python permite dos formas de embuclado de flujos: los famosos while y for. Su funcionamiento es similar al del resto de lenguajes de programación, permitiendo que se ejecute un bloque de código de forma concurrente hasta que deje de cumplirse una condición.

    Ejemplo de uso de while:
    v_i = int(5) 
    while v_i >= 0:
            print v_i
            v_i-=1
    Ejemplo con un "while true":
    # -*- coding: utf-8 -*-
    while True:
            v_number = int(raw_input("Dame un número\n")) 
            if v_number == 0:
                    break
        Donde con While True exigimos que el bucle sea infinito, pero con el break indicamos que el bucle morirá cuando insertemos el número 0.

        Por otro lado el bucle for realmente actúa como un bucle "foreach".

    Ejemplo 1, contar del 0 al 4:
    for v_i in range(5):
            print v_i
    Ejemplo 2, contar del 5 al 9:
    for v_i in range(5, 10):
            print v_i

    Ejemplo 3, leer todas las líneas de un fichero de texto plano:
    s_file_name = "mi_fichero.txt"
    v_file = open(s_file_name) 
    for s_line in v_file:
            print s_line
    Ejemplo 4, deletrear una cadena de texto:
    for c_char in 'QWERTY':
            print c_char
    Ejemplo 5, tratar un array elemento a elemento:
    l_nombres = ["sebas", "paula", "joan"] 
    for s_nombre in l_nombres:
            print s_nombre

    4.3- Colecciones
        Al igual que muchos de los lenguajes modernos, Python permite hacer uso de colecciones, siendo las más famosas de su catálogo las listas y los diccionarios. Una lista puede entenderse como un conjunto de elementos ordenados como una pila FIFO (first in, first out).
    l_names = list()
    l_names.append("sebas")
    l_names.append("paula")
    l_names.append("joan") 
    for s_name in l_names:
            print s_name
        Por su parte, un diccionario es lo que se conoce como un array referenciado, donde el índice no tiene por qué ser un número entero (algo bastante típico en lenguajes como AWK o Perl). A diferencia de las listas, su orden es LIFO (last in, first out)... pero el orden puede cambiar si jugamos con el método sort.
    # -*- coding: utf-8 -*-
    l_age = dict() 
    l_age["sebas"] = 30
    l_age["paula"] = 20
    l_age["joan"] = 25 
    for v_index, v_value in l_age.items():
            print v_index + " tiene", v_value, "años"

    4.4- Funciones
        Para crear una función bastará con escribir delante de su nombre la palabra referenciada "def", pondremos entre paréntesis los parámetros que requiere (si es que requiere alguno) y definiremos todo su contenido haciendo uso de un nivel de sangría.

    Ejemplo 1:
    # Funcion
    def insult_user(s_name):
            if s_name == "Sebas":
                    print "Guapo!"
            else:
                    print "Feo!" 
    # Hilo principal
    s_name = raw_input("Dame un nombre\n")
    insult_user(s_name)
    Ejemplo 2:
    # -*- coding: utf-8 -*-
    def div_5(v_number):
            return float(v_number)/5 
    v_number = raw_input("Dame un número\n")
    print "Su división entre 5 da", div_5(v_number)

    4.4- Objetos
        A diferencia de otros lenguajes de scripting, Python es un lenguaje orientado a objetos.

    Ejemplo:
    class footballer():
            #Variables de instancia
            s_name = None
            s_average = 50
            #Constructor de la clase
            def __init__(self, s_name, s_average):
                    self.s_name = s_name
                    self.s_average = s_average
            def lesionar(self):
                    self.s_average = int(self.s_average)/2  
    v_footballer_1 = footballer("Cristiano Ronaldo", 89)
    v_footballer_2 = footballer("Sofiane Feghouli", 95)
    v_footballer_3 = footballer("Lionel Messi", 90) 
    v_footballer_2.lesionar() 
    l_team = list()
    l_team.append(v_footballer_1)
    l_team.append(v_footballer_2)
    l_team.append(v_footballer_3) 
    for v_footballer in l_team:
            print v_footballer.s_name + " tiene una media de", v_footballer.s_average

    15 julio 2014

    Jazztel manda estafadores a mi casa

        Hace un par de años recibía muchas llamadas de Jazztel para intentar convencerme de que cambiara de operadora de internet. No es que vea mal que me llamen, pero cansa que lo hagan de forma sistemática y con operadores que desconocen qué es lo que venden. De hecho, puedo asegurar que Jazztel es una de las razones por las que todos mis teléfonos están en la lista Robinson.

        ¿Cómo sabía que sus operadores estaban mal preparados y que no sabían lo que me vendían? Por lo que aseguraban que me vendían:
    - Señor, le ofrecemos un router de tecnología alemana con soporte para udpstreaming que le permite una aceleran...
    - Tengo un router Cisco.
    - Pero nosotros le ofrecemos un router de tecnología alemana, que como sabe es la industria más potente...
    - Mi router es Cisco.
    - Pero el nuestro tiene teconología upd hiper streaming que entre otras cosas mejora la velocidad de los vídeos en internet y el de los gráficos de los juegos.
    - Espera, ¿me estás diciendo que los gráficos de los juegos de ordenador mejoran con su router?
    - Sí señor, gracias a nuestra tecnología hiper...
    - Hablas en serio, ¿vuestro router mejora los gráficos de los juegos de ordenador?
    - Sí, puesto que...
    - Oye, que no sigas, te lo agradezco pero me quedo con mi operadora.


    #TrueStory

        Como comenté antes, este tipo de problemas los solucioné cuando me di de alta en la lista Robinson. Ahora bien, ahora el acoso llega a otro nivel: Me mandan comerciales a casa. La mecánica es siempre la misma: Cada dos meses se ha acabado la instalación de fibra óptica en tu finca y ellos, amablemente, se pasan para informarte que ya hay fibra óptica en tu casa. Da igual si desde hace años tienes contratada la fibra óptica de Ono, Vodafone o incluso PTV Telecom, ellos te venden que acaban de acabarse las obras de fibra óptica y que por lo tanto vienen a ofrecerte. No son los únicos, también recibo visitas continuas de Vodafone, pero estos últimos se les ve mejor preparados y son mucho más amables.

        Siempre que ha venido a mi casa uno de sus comerciales, mi señora y yo los hemos despachado de buenas formas, haciéndoles comprender que no nos interesa su oferta. Ahora viene lo bueno: Siempre que se despiden te tachan de una lista suya dando a entender que así no volverán a molestarte. Pero la realidad es otra, a los dos meses han vuelto a acabarse las obras de fibra óptica del edificio y se pasan a informarte para ofrecerte una magnifica nueva: te van a instalar la fibra óptica gratis y sólo esta vez... tras otra, tras otra, tras otra...


    - ¿Me instalan fibra óptica gratis? ¿Y sólo hoy?

        Siendo esta una rutina del día a día, pues realmente no vale la pena escribir una entrada sobre ello. El problema viene con el último comercial que me mandaron a casa. Eso no era un comercial. Era un puto estafador de mierda (perdón por las palabras). El típico lumbreras que vendería agua haciéndola pasar como cura para el VIH. Siento ser tan duro, pero el espécimen que me mandaron a casa (por llamarlo de alguna forma) no tenía ética ninguna.

        Recapitulemos, un señor de unos 40 años vino a mi casa a informarme que acaba de instalarse la fibra óptica en mi edificio. Cómo no, este informador trabajaba para Jazztel, como todos los anteriores que vienen informándome últimamente. Primero empiezan por lo simple: ¿Qué compañía tienes y cuanto te cobra por internet, televisión y teléfono? Yo le comenté que estaba con la empresa más barata y que era imposible mejorar la oferta: 30 euros al mes. El me respondió que me la mejoraba por 40 euros al mes. Lógicamente, yo no veía una mejor oferta pagar 10 euros más, pero él se excusaba diciendo que la velocidad de internet era mejor.

        Ahora bien, atentos a la jugada maestra: A diferencia de mi operador, el hombre me ofrece un router capaz de ofrecer velocidad simétrica (subida y bajada) para todos los dispositivos de casa de forma simultánea. Es decir que, palabras textuales suyas, si contratas 200 MB de velocidad, todos los dispositivos de casa, ya sea uno o 20, pueden bajar a 200MB al mismo tiempo.

        Yo le comenté que eso no era posible, puesto que con la tecnología actual se ofrece un cuello de botella: El router tiene salida de fibra óptica de 200MB, pero tiene que gestionar las conexiones de todos los dispositivos de casa. Es decir, que si la velocidad de internet es de 200MB, es imposible tener 100 dispositivos bajando al mismo tiempo a 200MB. Hagamos mucho más simple el ejemplo. Imagina que cada minuto tienes 6 manzanas y que tienes 1 hijo. Cada minuto tu hijo tendrá 6 manzanas. Ahora imagina que tienes 3 hijos. Cada minuto cada hijo tendrá 2 manzanas. Así de simple. Podemos empezar a filosofear sobre el sexo de los ángeles y comentar que a lo mejor un hijo recibe 4 manzanas, otro dos y el último se queda mirando a Cuenca... pero el mensaje es claro: Si tienes 6 manzanas por minuto, no puedes repartir 18. Los 200MB no se asignan a cada dispositivo de la casa, se asignan al router, al cachivache ese que "habla" con la operadora.

        Pero el hijoputa (hdp en adelante) me decía que no. Que él sabía que era algo difícil de entender, puesto que la fibra óptica era una tecnología nueva y que "eso funcionaba como los teléfonos", que hoy en día desde una sola línea podía realizar llamadas y recibirlas al mismo tiempo desde diferentes puntos de la casa. Yo le paré el carro diciendo que estaba mezclando peras con manzanas... pero pobre de mi, que me contestó con un "hombre, yo entiendo que es difícil de ver, pero lo que pasa es que para entenderlo pues tienes que hacer cursos sobre el tema, como yo".



    CEAC presenta sus cursos de certificación CCNA de Cisco.

        Entonces entré en furia con el hdp, remarcándole que si quiería una red tan perfecta como la que él me describía para eso compraba un router cisco de seis mil euros y lo enracaba con un switch para tener tropecientos servidores a la velocidad de la luz. Pero él, lejos de entender que me quejaba del cuello de botella de un router casero, volvió a la técnica de que yo era un burro que no hacía cursos como él y que él mismo instalaba esos servidores. "Que era lógico, que los servidores se ponían a internet con fibra óptica". Me dieron ganas de cerrarle la boca diciendo que para instalar un servidor no necesitas cursos, necesitas certificaciones.

        Pero no contentos con ser más mentiroso que un cojo, se superó con la segunda jugada: Según el hdp (alias comercial de Jazztel), en 2015 las líneas ADSL van a desaparecer, al igual que el teléfono y la televisión por TDT. Según él, es algo que se lleva planeando y que será una migración similar a cuando en 2005 dejamos de tener televisión analógica y pasamos a tener la famosa Televisión Digital Terrestre. #TrueStory, hablo en serio, no me lo invento.


    ¿Tienes fibra óptica? ¡No pasa nada! ¡Te vendo fibra óptica!

        Ajam, ahora lo cascas, puesto que en la última declaración de intereses del hdp era imposible soltar tantas mentiras por segundo. Pero no temáis, puesto que el hdp se encargó de destacar una y otra vez que con Jazztel y sólo ahora, podíamos tener una instalación de TV, internet y teléfono que nos ahorre esta migración. También nos remarcó una y otra vez que la oferta sólo podía pedirse ahora, puesto que en el futuro la instalación pasaría a valer unos 300 euros.

        Ahora bien, como yo le respondía que lo que decía no podía ser, volvió a lo mismo de que "sabía que era difícil de entender, pero que era cierto, que iba a pasar como con la TDT". Yo de vez en cuando le cortaba diciéndole que cuando eso pase (cuando se corte el TDT si es que llega a cortarse) ya lo hablaría con mi operadora en el futuro, pero eso sólo daba lugar a que el hdp reaccionara con el mismo monólogo: Que entonces mi operadora me cobraría un ojo de la cara por la migración y que si lo contrataba ahora tendría una instalación de fibra óptica gratis.

        Tras un buen rato con el hdp despotricando mierda y ver que no caíamos en su estafa, el hdp se despidió preguntando de qué trabajaba. Le contesté la verdad: Programador informático. Su reacción, lejos de reconocer su cagada fue decir "claro, yo soy de redes, departamentos distintos". Y él que sabrá a qué me he dedicado yo toda mi vida, si no siempre he sido programador, y puede que yo no sea certificado CCNA, pero el departamento de redes de mi empresa es certificada Cisco y para colmo los soporto (con cariño) todos los días.

    En fin.
    Resumamos:
    1. Que sepas que las obras para fibra óptica de tu edificio se estropean mucho, cada dos meses las vuelven a instalar.
    2. Que sepas que según el hdp que me mandó Jazztel el TDT se va a acabar, al igual que el teléfono tradicional o el internet por ADSL.
    3. Quiero saber si es posible obtener una orden de alejamiento para que no se me acerquen comerciales de Jazztel nunca más.


    ----- Bonus track: What does the chameleon say?

    14 julio 2014

    Anunciada Raspberry Pi B+

        La Raspberry Pi Fundation ha anunciado hoy el lanzamiento de su nuevo modelo de micro ordenador: La Raspberry Pi B+, el cual se trata de una versión mejorada del modelo B, donde se han añadido los siguientes cambios:
    • Se reduce el consumo en un 30%.
    • Se incrementa a 4 el número de puertos USB 2.0.
    • Se sustituye la ranura SD por otra de MicroSD.
    • Se incrementa a 40 el número de pines de la ranura GPIO.
    • Mejoras en el circuito de audio


    Foto del modelo B+ sacada de RS Online.


    El modelo B+ se puede comprar desde hoy y al mismo precio que su predecesor.

    08 julio 2014

    Un regalito

        Esta semana fue mi cumpleaños, así que para celebrarlo a lo grande y compartir con vosotros mi alegría, he decido crear un NPC de Oblivion con mi nombre. Lo podréis encontrar paseando por el distrito del mercado de la Ciudad Imperial y además, nuestro valiente Sebastián, podrá combatir a vuestro lado puesto que hace uso del mod CM Partners Mod Basic de Blackie (requerido para poder funcionar).




    Descarga: Google Drive

    ---- ---- ---- ----
    BONUS TRACK!



    "My little Skyrim - SpectraDash"

    07 julio 2014

    Mi primera experiencia con una tienda Apple

        A mediados de la semana pasada mi Macbook Pro de 2011 dejó de cargar. Así, como suena, era poner el cargador y no se activaba el led del Magsafe. En ese momento pasé por todas las etapas previas al asesinato: Me entró pánico por poder perder todo el contenido de mi equipo y posteriormente me indigné porque todos mis cachivaches de Apple acaban siendo pisapapeles caros. Mi mujer estuvo dándome ánimos en todo momento, remarcando que podía ser cosa del cargador y no del portátil.

    En capítulos anteriores: Mac Mini, el pisapapeles.

        Porque esa es otra, si el portátil no carga la batería pueden ser por miles de cosas, desde el cargador que se ha estropeado, pasando por una falla del contacto en la placa o incluso una batería defectuosa. Me puse a googlear y puse el grito en el cielo al ver que los cargadores oficiales de Apple valen 80 euros. ¡Toma jeroma! ¿Qué los hacen con oro o algo? Vamos, que gástate tú 80 euros para comprobar que si lo que falla es el cargador o el portátil que se ha roto... Visto lo visto me puse a revisar en Amazon y comprobé que también existen cargadores truchos chinos, los cuales están llenos de votos negativos porque se ve que se rompen en menos de tres meses. El escenario para mi no podía ser más caótico, así que el viernes por la tarde cogí mi portátil y el cargador y me fui a la tienda Apple a ver si "con lo enrollados que son" me dejaban probar un cargador antes de comprarlo.

        Entré y me encontré con un modelo de negocio que nunca antes había visto en Valencia. Una planta baja con tropecientas tabletas y portátiles para probar. El sueño de cualquier padre que quiera librarse de sus hijos adolescentes durante toda su tarde, vamos. Ahí me veo con una serie de dependientes, me acerco a una y le comento mi situación. Acto seguido me lleva al fondo de la tienda, saco mi portátil y comparamos el estado con un cargador similar que tienen para esta clase de problemas. Ahí verificamos que lo que está roto es el cargador y me comenta que tengo dos opciones:
    • Comprar el cargador diréctamente por 80€.
    • Pasar el cargador como averiado y que me lo cambien por uno nuevo por 50€.
        Entonces los angelitos revolotearon por mi cabeza con campanas al vuelo cantando canciones de "¡Aleluya, aleluya!"... puesto que pese a que 50 pavos sigue siendo mucho dinero, por lo menos es un infarto menor al que desembolsar 80. Mi meta era primero verificar que era problema del cargador y segundo evitar pagar semejante bestialidad y mi objetivo se estaba cumpliendo. Ahora bien, la dependiente me remarcó que ella no podía realizar ese servicio, que debía de subir a la primera planta y pedir cita con el servicio técnico o bien hacer cola.

        Entonces subo (sí, tiene más de una altura) y me encuentro con lo mismo, un montonazo de tabletas y portátiles para que la gente toque y un ejército de dependientes ocupados: El que no vendía daba clase y el que no estaba en la "Genius Bar" (que cool suena eso) encargándose de los problemas. Así que me dirijo al final y me pongo a hacer cola. Ahí, una señora, muy bien vestida e indignada por la espera, espeta un "¡Si es que tenía que pedir cita! ¡Si pides cita te atienden enseguida!". Y yo en pantalón corto, chanclas, pelo hippie y teléfono Android del jurásico haciendo cola al rededor de gente cheta (rica) donde aparentemente todo el mundo adoraba a un Dios con forma de manzana.

        En fin, una vez es mi turno éste se fue volando, puesto que fue explicar mi problema al mozo y me contestó que al ser un portátil de 2011 éste estaba fuera de garantía, que de hacer el cambio apenas me ahorraba dos o tres euros y que no valía la pena, que fuera al fondo a comprar un cargador nuevo, que sería mejor. Así que voy a hacerle caso y me voy al otro extremo de la tienda a preguntar cual de todos tenía que comprar (puesto que el mozo anterior me dijo que debía ser un Magsafe de menos de 85W y en Google me decían que debía ser sí o sí de 60W) y ahí la respuesta del dependiente de ventas fue la misma que tuve de la primera dependienta: Que con temas de cargadores no hay garantía, que puedo exigir comprarlo por 50€.


        Yo me encontraba flipando, así que me fui otra vez a hacer cola y el chaval que me atendió me repitió lo mismo hasta que le corté con un: "pero es que tus compañeros me dicen que no son dos o tres euros que me ahorro, son treinta." En ese momento pude vislumbrar cómo al chaval se le transformó la cara en blanco pálido, momento en el que me llevó a un compañero para verificar que sí, que el cambio valía 50€, pero sin IVA. Es decir, que lo que quería hacer se podía hacer, pero por 60,50€ (IVA incluído), que la garantía del cambio era de 3 meses (comprarlo nuevo serían dos años) y que no podía hacerlo en el instante, que tenía que irme a la web de Apple, pedir cita con la Genius Bar (¿he dicho ya que mola ese nombre?), volver en la fecha señalada y hacer dicho cambio. Todo me pareció muy rebuscado y exageradamente burocrático, algo que entra en contraste con el modelo de guardería de poner a disposición del consumidor tropecientos iPad y Mac para que trastee "todo quisqui". De todas formas, viendo que aún así supondría un ahorro de 20 euros decidí aceptarlo.

        Así que al llegar a casa arranqué mi flamante Netbook con Fedora (como es lógico, si el portátil no carga, pues no lo puedo encender) y la primera en la frente. La web de Apple no es compatible con el navegador Midori, obligándome a instalar Chrome (o algo similar a Safari) para poder pedir cita. Eso sí, todos los pasos fueron mega fáciles de realizar y me permití el lujo de poner en observaciones que lo que quería era símplemente cambiar un cargador estropeado.

       El sábado llegué con media hora de adelanto a la tienda de Apple, así que decidí ir un momento a Mercadona (hay uno al lado) para comprarme una merienda. Ahí vi una oferta de 6 panecillos por un euro, así que con eso y un café latte "trucho" ya estaba más que servido. En la salida vi un mendigo, me acerqué a él, le di una limosna y mi corazón me obligó a ofrecerle un panecillo.
    - "¡Gracias! ¡Me vendrá muy bien!" - Me dijo con una voz de extranjero mientras me cogía la bolsa con los seis panecitos.
    - "No, no, te pregunto si quieres uno, no todos."
    - "Gracias, sí, a mi gustar" - Me contesta con una sonrisa.
    - "Que quería ofrecer sólo uno...".
    - "Sí, gracias".
    - "A ver, trae 'pacá' la bolsa." - Cojo la bolsa, la rompo, saco un panecillo para mí y le doy el resto. - "Ale, con esto estamos los dos contentos."

       Me levanto con la anécdota del día mientras el mendigo casi llora de alegría por tener cinco panecillos y una limosma, mientras me pregunta si sabía cuando jugaban Argentina y Bélgica. - "Ya deben de estar jugando, creo que empezaba a las seis."

        Llego a la Genius Bar (joder, sí que queda cool ese nombre) y me dan la mano, me preguntan si soy Sebastián, asiento, me preguntan si es por el tema del cargador y vuelvo a asentir. Les muestro mi portátil, se anota el número de serie para verificar el cargador exacto que hace falta... lo prueba... y saca toallitas y se pone a limpiarme el portátil hasta que éste queda como nuevo. Yo ahí ya me encontraba alucinando. Encima el "Genius" te daba conservación amena e incluso te daba consejos sobre cómo limpiar mejor el teclado. Es decir, el sistema estaba totalmente automatizado, se ve que se aprenden cual es tu problema y tu nombre antes de que llegues y además te dejan los equipos niquelados, si los traes.

    - "Si te llego a decir que tengo instalado Linux, ¿me lo dejarías tan límpio?"
    - "Con Linux no hay problema, ahora bien, si llega a ser Windows...".

        En menos de cinco minutos ya tenía mi cargador cambiado por otro, más barato que comprando uno nuevo y encima me habían dejado el portátil como los chorros del oro. Estos de Apple son de otro planeta.

    26 junio 2014

    24 junio 2014

    Creando pobres

    Tira cómica del diario Levante, por montecruz.

        Estamos en año electoral y comprobamos a diario que la destrucción progresiva del bipartidismo es combatida, cada vez de forma más descarada, con mensajes positivos que buscan darnos a entender que nos encontramos en un punto de inflexión, donde cualquier futuro inmediato será mejor al anterior. Y si no lo ves, pues que sepas que eres un cenizo y un demagogo.

        Las exportaciones suben [1, 2], tendremos una bajada de impuestos para el próximo ejercicio, el paro va bajando (69.000 parados menos en 2013), el número de ricos sube a niveles previos de la crisis... Mientras que por otro lado el número de habitantes baja más que el número de contratados (476.000 habitantes menos, o lo que es lo mismo por cada parado menos casi 7 personas han salido del país), los salarios bajan por tercer año consecutivo [1, 2, 3], mientras que las pensiones estarán congeladas hasta 2017 (y llevan así desde 2011) y el salario mínimo sigue congelado desde que Mariano Rajoy es presidente [1, 2, 3]. Y ahora el colmo: en España, con un desempleo del 25,10% (según Eurostat), tendrás que pagar impuestos hasta por ser despedido.

        Esto señores, es un país de pandereta. Indistíntamente de quién gobierne, hemos llegado a un punto donde la prioridad no es salvar a la clase media, si no fabricar ricos a costa de quitarle derechos a la ciudadanía. Desde el punto de vista del neoliberalismo tiene su lógica: Cuanto más contentos estén los ricos, más podrán invertir en crear empresas y esto a su vez generará puestos de trabajo.

        El problema viene cuando se pierde el norte, cuando a un ciudadano se le exige cobrar 600 euros por trabajar 40 horas semanales o ser ascendido a programador junior tras llevar siete años picando código en una empresa. Hemos llegado a un punto donde el Gobierno se ha cegado tanto en hacer atractiva la contratación que a los obreros ya no les interesa ser contratados, si no que necesitan irse del país para poder pagar una hipoteca o el préstamo de turno. Hemos llegado a un punto donde observamos con estupor que nuestros vecinos de la eurozona gozan de salarios mínimos superiores a los 1.400 euros mensuales, mientras que aquí debemos de dar gracias por la calderilla del pudiente. Es decir, la relación cordial entre empleado que presta un servicio y empleador que le paga por ello se rompe en favor del dueño que te lanza un hueso para que le des la patita.

        No me malinterpreten. Una empresa es creada para generar dinero a sus respectivos dueños. Eso es de primero de Económicas. Pero la casta, sea política o empresarial, debe de entender que el obrero tiene que comer. Y si se le da lo básico para comer, por lo menos el Estado está en su deber de garantizar una mínima calidad de vida. Y no, aforar a un rey que abdica no tiene nada que ver con las prioridades de este país, al igual que tampoco lo tiene esta nueva reforma fiscal.

        Para que podías entenderme, al ciudadano medio le da igual pagar un 19 o un 20%. Lo que quiere es tener una educación pública y de calidad, puesto que no puede costearle una privada a sus hijos. Quiere una sanidad pública y de calidad, puesto que no puede costear un seguro privado a su familia. Quiere unos transportes públicos baratos y de calidad, puesto que no tiene por qué permitirse pagar la ORA cuando se desplaza a su lugar de trabajo. Es más, quiere tener unos servicios de seguridad (policía, bomberos...) más que suficientes que le garanticen la protección que necesita él y su entorno. Además, el ciudadano medio quiere tener la certeza de que cuando sea despedido cobrará más de 400 euros de prestación por desempleo para que sus amigos, familiares e incluso hijos no le vean mendigando en el Mercadona para poder llegar a fin de mes, mientras además se encuentra buscando un nuevo empleo.

        Es muy cómodo decir que un español medio pagará 200€ menos en impuestos. Pero el español que cobra 25.000€ al año aún puede comer. La magia de la hacienda pública es poder redistribuir la riqueza. Es hacer que la gente que más tiene apechugue y tire del carro. Y no, la gente que gana entre 20.000 y 30.000€ no es la que debe de tirar del carro como nos da a entender la reforma del Gobierno. Al igual que en un equipo de fútbol, quien tira del carro debe de ser el crack, el que más cobra. Y si además resulta que al que debería de tirar del carro le pedimos que se relaje, nos encontramos con que estamos sacrificando a los sectores menos pudientes... estamos condenando a la pobreza a esas personas que cobran el salario mínimo desde hace tres años, a esas personas que tienen las pensiones congeladas desde 2011, a esos discapacitados que costearán con su copago la subida del IVA sanitario del 10 al 21%...

        Os refresco la estadística, por si os da por hacer un viaje en breve: por cada parado menos, tenemos siete habitantes que se han ido de España. Creo que algo falla en nuestra nación. Y seguirá fallando si seguimos por este camino.

    12 junio 2014

    ¿Wii U está muerta?

    Trailer de Hyrule Warriors

        Hace año y medio salió a la venta la última consola de sobremesa de Nintendo, la Wii U, una consola criticada de inicio por estar desfasada tecnológicamente respecto a sus rivales, por su alto precio e incluso por su absurdo nombre. Si recapitulamos, de lanzamiento podíamos comprarla a través de tres packs: Teníamos un modelo básico de 8GB de disco en flash (de los cuales sólo 3 son útiles) y un mando con forma de tableta por 299€; También podíamos comprar un modelo negro de 32 GB con una cuenta premium por 349€ y por último el mismo pack con un mando adicional llamado "mando pro" con el juego Zombie U por 389€.

        ¿Qué es eso del mando tableta? Bueno, a Nintendo se le ocurrió la idea de poner un mando con pantalla táctil integrada para "sumergir" al usuario en los juegos o incluso poder seguir jugando en esa pantalla sin necesidad de tener conectada la televisión. En fin, como dirían en Argentina "una chetez" muy poco práctica.

        ¿Y qué es eso de la cuenta Premium? ¿Es algo así como el Xbox Live? Pues no, se trata de un mero programa de afiliación que encima requiere de suscripción. Es decir, ser Premium te da derecho a ganar puntos cada vez que compras algún contenido descargable y a su vez esos puntos pueden canjearse por otros contenidos. Lógicamene, si lo comparamos con sus rivales salimos perdiendo, puesto que Xbox Live y la PS Network te regalan juegos en formato digital cada mes.

        Como era de esperar, con semejantes precios y "prestaciones" la consola no despegó ni por asomo, hasta el punto de que ayer a media noche, tras año y medio en el mercado, la cadena de videojuegos Game sacó en su web este último pack por tan solo 199€, casi el 50% de su valor de inicio. A las siete de la mañana el pack ya estafa fuera de stock.

    Captura de la web de Game

        Pero ahora viene lo cómico, ¿saben cuál es la segunda consola más vendida a nivel mundial en las últimas semanas? Jamás lo adiviniarían, la Wii U. De hecho, ahora mismo a nivel mundial por cada Xbox ONE se han vendido 3,5 Wii U, lo cual es bastante sorprendente debido a que está prácticamente abandonada por los third parties. Además, es destacable que Wii U no sólo ha superado las ventas de Xbox One en todos los continentes, si no que ha llegado a superar a PlayStation 4 en Japón.

    Captura de pantalla de VGChartz.com

        Mucha gente piensa que este aluvión de ventas se debe a lanzamientos como el Mario Kart 8 y puede que no vayan desencaminados, puesto que Nintendo ha hecho una campaña agresiva donde a cada persona que lo compre le regalará otro juego en formato digital.

    Captura de pantalla de la web de Nintendo España.


        No obstante, nos basta con ir a los supermercados para constatar que sobra stock de Mario Kart 8 y de packs de "Wii U + Mario Kart 8". Así que sólo nos queda como posible opción las liquidaciones de los grandes supermercados: La gente quiere jugar a los juegos de Nintendo en HD, pero no está dispuesta a pagar más de doscientes euros para hacerlo. Ahí están los resultados: Wii U se vende como churros cuando su precio se hunde, a pesar de tener un catálogo de juegos muy escaso.

        Ahora bien, ¿es esto viable? ¿puede Nintendo seguir con una campaña agresiva de precios para revivir su consola? No lo creo, puesto que por un lado los packs nuevos de Wii U siguen saliendo a la venta por más de 300€, siendo los supermercados los que rebajan sus beneficios para conseguir librarse del stock. Y por otro lado tenemos la noticia bomba: Nintendo cerró el pasado año fiscal con un balance negativo de 160 millones de euros. Nintendo, lo queramos o no, es una empresa privada y como tal sólo responde ante sus accionistas: Si no hay beneficios, los accionistas se van y la empresa se hunde en bolsa, así de simple. No creo que la gran N mate la Wii U, pero si quiere sacar dinero de algún sitio deberá replantearse abandonar su "mando tableta" o empezar a vender juegos propios como churros a costa de perder dinero en la venta de cada consola... lo cual no sabemos en qué acabaría si alguien consigue piratearla.

    11 junio 2014

    Diablo like current gen hidden gems


        Diablo is said to be one of the most acknowledged computer games on history, in fact it had so much success that its first chapter was even ported to Mac OS 9 and to PlayStation. Maybe going deeper and deeper into the church basements was a bit boring at beginning... but the randomly generated maps and the levelup system made the game really addictive. And yes, as you can imagine the strength of that games was its addiction.

        18 years have passed and now we know that Diablo III has sold over 5,8 million copies. However, a large amount of fans have claimed that the last chapter of the saga was (and stills being) a completely fiasco: no offline or pvp modes are some examples of what the users miss.

        Nevertheless nowadays we can play some games that actually have the same taste of the original Diablo. May not have randomly generated maps or even a big name, but lets say that they have the same taste... or even we can argue that all of them are games of the same kind. That is due to the fact, as we realize today, that in 1996 Blizzard brought us a new videogame genre, and that is what I'm gonna speak today: Welcome to my little list of Diablo like current gen hidden gems. And yes, when I speak about current gen I neither mean  Xbox One nor PlayStation 4, I speak about 360 and PlayStation 3.


    Kingdom under fire: Circle of doom




        Circle of doom is a well unknown game, which has got about 7 years old and has sold about 350.000 copies. This game is a spin-off of the Kingdom Under Fire saga, where the real time strategy elements have been dropped in order to focus the combat system on a diablo like one, based on hack and slash. However that combat system is at same time its strongest and weakest point: It's really fun to slash tones of monsters on randomly generated maps but actually it gets easily boring when your character is only able to do a few combo moves.


    Dark Souls



        Actually I was very surprised about Dark Souls at first time, and that is because at that moment I did not knew I would enjoy it so much. First you've a creepy story where you play as the chosen zombie whom will become the savior of the world, whom is also able to defeat giant monsters as dragons or gods and whom also can die easily on every corner of the game. Well, Dark Souls is said to be difficult, and it's true. In fact, forgive my cursing but that game is fucking impossible... and I love that, nowadays that's a good point.


    Dark Arisen



        At beginning I was a bit disappointed about Dark Arisen, because on the first view it looked like a simple add-on built in order to make quick cash. However, after going deeper and deeper into Bitterback Island I started to have the same feeling that I had 16 years ago, when I was meeting the Butcher in Diablo for the fist time. May not have randomly generated maps or pvp mode, but actually Bitterback Island was what Dragon's Dogma needed: it's an example of a well made DLC which transforms a standard game into a LEGENDARY one.


    Sacred II



        Maybe is the weaker game of my list, and I believe that beacouse is a completely Diablo like clone. You have a vast map to explore with plenty of quest to do and even seven classes to choose... but it's so unoriginal that could make you cry. Do not get it mistaken, Sacred 2 is a nice game with a huge durability but where you're gonna be doing the same stuff hour after hour. At least it has plenty of easter eggs.