17 años en Internet

27 agosto 2013

El pésimo soporte técnico que Microsoft ofrece a la comunidad Indie (II).

Hace once meses os hablé del pésimo soporte técnico que ofrece Microsoft a su comunidad Indie. Una veintena de e-mails más tarde y casi un año después, no sólo no se me ha solucionado el problema de login de mi cuenta en la única página web de Microsoft que me permite publicar juegos indie o editar mi información fiscal, si no que aún estoy esperando una respuesta del servicio técnico.


Así pensaba que era el día a día del servicio técnico de los Indie Games.

Y es que si hay algo peor que pasarte un año quejándote de un bug que inutiliza un servicio de pago, es encontrarte con que su servicio técnico te ignora, literalmente. Finalmente conseguí que se me devolviera el dinero, pero para ello tuve que contactar con el Call Center de Xbox Live y tener una conversación de 39 minutos para convencerles de que escalaran mi incidencia para decidir si me devolvían o no el dinero. Básicamente el equipo de Xbox Live, un soporte totalmente ajeno a la suscripción de los Indie Games de Xbox 360, estaban conformes en anularme la suscripción pero no en devolverme el dinero de ésta. Entonces les hice hincapié en varios puntos de la licencia de uso que acepté:
  1. Toda queja debe presentarse en un plazo inferior a un año y llevo 11 meses quejándome sin respuesta alguna.
  2. En la sección "Limitation of liability" se especifica que puedes recuperar el dinero de la suscripción por razones como que el servicio no es utilizable o si se demuestra negligencia por parte de Microsoft.

El caso es que escalaron la incidencia a un soporte superior y a la semana siguiente llamaron para confirmarme que tenía razón con la licencia, por lo que cancelaron la suscripción y me efectuaron un abono con el importe que pagué. Aún así seguía con la mosca en la oreja y no entendía cómo un producto que aporta miles de dólares a Microsoft (incluso puede que algún millón que otro) tenga un servicio tan malo... y me encontré con esto en el foro oficial:


¡¿What!? ¡¿Seriously?! Un PUTO SERVICIO DE PAGO de Microsoft con miles de usuarios y que aporta unos beneficios bestiales (muchas PYMES españolas quisieran facturar lo mismo) está siendo mantenido por una única persona ¡que para más inri trabaja a tiempo parcial! Atónito por realizar dicho descubrimiento me puse a profundizar más en los foros oficiales y me encontré con otra perla: El equipo de XNA, supuesto soporte técnico de este producto, ha sido desmantelado.


Vamos, que resulta que es muy probable que la única persona que a tiempo parcial lleva el soporte técnico de un servicio de pago de Microsoft ni siquiera tiene relación con el equipo original del producto. ¡¿Pero por qué Microsoft ha desmantelado un equipo entero de uno de sus servicios de pago?! Bueno, googleamos un poco y vemos que el que comentó esto tiene más razón que un santo: En Febrero se filtró por internet un e-mail de Microsoft donde se notifica el cese del desarrollo de XNA por considerarla una tecnología "muerta". ¿Muerta? ¿Una tecnología que le aporta algo de dinero y que es una buena toma de contacto para entrar en el mundo de la programación Indie? Bueno, yo apuesto que se ha dado por muerta gracias a una de las grandes medidas de choque de Steve Ballmer: "La curva de la vitalidad".


Steve Ballmer en todo su esplendor. ¿Quieres más? Pincha aquí. O aquí también.

En 2011 el que fuere CEO de Microsoft decidió "incentivar" el rendimiento de sus trabajadores aplicando una política que premiaba a los empleados con mejores resultados y castigaba dramáticamente a los peores. Según la que fuera su nueva política, cada seis meses se realizaba una tabla de rendimiento por empleado, donde el 20% de los empleados con mejor resultado se les daría una gran prima, al 20% siguiente una prima pequeña, al 20% de los empleados con peor rendimiento se les ponía de patitas en la calle y al 40% restante se le impedía promocionar. Esto se ve que produjo una situación violenta entre los miembros de cada departamento, llegando incluso a sabotear a sus compañeros (según cita elconfidencial.com) para no estar entre el 20% de empleados despedidos de cada semestre.


¡Guillotina! ¡Guillotina! ¡Guillotina! ¡Guillotina!

Como resultado en un par de años las nóminas de Microsoft se han aligerado bastante, amén de que la situación llegó un punto donde los empleados nuevos no eran tan buenos como los que despedían y que para más inri los veteranos que quedaron no se dedicaron a competir contra sus rivales directos... si no a competir entre ellos mismos, como si se tratara de una versión empresarial de Los Juegos del Hambre. Y tras soltar todo esto se ve que por el camino Steve se merendó al equipo de XNA. No temáis, seguramente aquí veremos políticas similares (e incluso más estúpidas) cuando la CEOE obtenga el despido gratuito en España... tiempo al tiempo, que vivimos en el país de los liberales iluminados.

Escena de los Juegos del Hambre.

O cambia mucho la cosa con Xbox ONE o que le den morcilla a Microsoft. Esta experiencia nos ha servido en Dango y Hamster para priorizar otras plataformas en detrimiento de Xbox 360/ONE. Y es una pena, sobretodo porque deseábamos realmente aportar algo de calidad al sector de los juegos Indie de Xbox 360.


EPIC FAIL

26 agosto 2013

Elecciones europeas

Aunque Merkel perdiera las próximas elecciones alemanas, debemos de saber que esto no implicaría un cambio de ruta en la Unión Europea, pese que a muchos nos guste tildarla como la cabecilla de Europa. La realidad es bien distinta, puesto que gran parte de las conocidas políticas de recortes son imperiosamente ratificadas por el Parlamento Europeo, una entidad que asusta por su poder y que nos hace entender Europa más como gigantesco e indivisible país que como una supuesta unión económica.


Nigel Farage, criticando la falta de democracia que vive Europa por el poder del Parlamento.

Quedan nueve meses para las elecciones europeas, unas elecciones que sirven para que cada cinco años los ciudadanos de la unión decidamos qué diputados formarán el Parlamento Europeo. Este parlamento es uno de los organismos con mayor poder del continente y es el encargado de adaptar las legislaciones europeas, decidir el presupuesto de la Unión y vigilar el correcto cumplimiento de las políticas comunitarias. Para cumplir estos puntos, el Parlamento tiene y ejerce su control sobre la Comisión Europea, El Consejo Europeo y el Consejo de la Unión Europea. Mucha gente piensa que los partidos políticos mandan a sus dinosaurios a Europa para que tengan una muerte política digna, pero tal y como comentaré a continuación esto es falso, puesto que en política equivale a que te toque la lotería: Tienes mucho más poder y ganas mucho más dinero.

Profundizando más sobre los organismos que controla, el Parlamento decide qué miembros forman la Comisión Europea, un organismo que actúa como si fuera el gabinete de gobierno de la Unión Europea y que se encarga de crear nuevas leyes e iniciativas comunitarias además de ser de velar por el correcto cumplimiento de los tratados de la Unión. La elección de los miembros de la Comisión y su formación es bastante compleja, pero se puede resumir en que su presidente es electo por el Parlamento bajo sufragio y éste a su vez elige los miembros que le acompañarán de una lista suministrada por el Parlamento. Es decir, el presidente de la Comisión selecciona quienes son sus compañeros y qué funciones realizarán, como si se tratara del Seleccionador de Fútbol de un país. Esto nos da a entender que el grupo parlamentario con más presencia tendrá muchas más opciones de tener un número elevado de miembros en la Comisión y más si el presidente electo pertenece a dicho grupo. Por cierto, en un alarde de transparencia, Bruselas oculta el salario de esta "élite" por motivos de "dignidad humana". Aún así su presidente gana 370.000€ al año y su vicepresidente se especula que ronda los 240.000€.


Durão Barroso, el "Del Bosque" de Europa desde 2004.
Foto de Wikipedia.

Por su parte el Consejo de la Unión Europea está formado por los Ministros de Exteriores de los distintos países de la Unión y su función es elaborar propuestas sobre nuevas leyes, tratados y presupuestos que deberán ser mandados al Parlamento para poder ser ratificados, modificados o descartados. Es decir, este Consejo actúa como su se tratase como el "becario" del Parlamento, pese a ser quién realmente define la "realidad política" de cada país, puesto que las elecciones del Parlamento son cada 5 años y puede darse la paradoja de que un país esté representado mayormente en el Parlamento por miembros que a nivel nacional se encuentran en la oposición. Este organismo llama la atención por dos puntos clave: Su presidencia es rotatoria y varía cada 6 meses; Su sistema de voto es ponderado, los votos de países con más población tienen un valor superior.

Por otro lado tenemos el Consejo Europeo, un ente formado por su presidente, el presidente de la Comisión y por los 28 jefes de Estado, Marianico incluido. Este "presidente" se decide por sufragio entre los 28 jefes por un periodo de dos años ampliable a dos más y que a su vez actúa como otro becario más del Parlamento: Al finalizar cada reunión debe de remitirles un informe. La importancia de este Consejo es bastante cuestionable, puesto que en la práctica sólo sirve para que los distintos jefes de Estado se hagan autobombo, lleguen a un acuerdo a modo de pantomima y de paso sean regañados por el presidente de la Comisión, que éste a su vez viene a ser algo así como un superior tuyo que no tiene poder alguno sobre ti pero al que le tienes que hacer caso para que no se chive al Parlamento. Esta última coletilla la he puesto porque el presidente de la Comisión tiene voz en esta institución, pero no voto. Y esto nos lleva a Herman Van Rompuy, vendido a los medios de comunicación como "el primer presidente europeo", uséase, el homónimo de Obama por estos lares. Y por nivel económico debería de serlo, puesto que en la práctica es otro "becario" más del Parlamento europeo que cobra 350.000 euros al año y tiene asignados 10 guardaespaldas personales.

Foto de Facebook de Herman Van Rompuy dando la bienvenida a Croacia.
350.000€ al año dan para llevarle muchos cafés a Martin Schulz.
¡Qué galante! ¡Qué fuerza! ¡Qué agarre!: "Yes we can!"
Su salario es más alto que el de Obama.

Tras exponer todo esto podemos resumir que la mayoría de las políticas de la Unión se deciden en el Parlamento y que este a su vez politiza, en mayor o menor forma, el resto de organismos comunitarios, siendo el caso más sangrante la Comisión Europea. Esto significa que en la práctica el grupo parlamentario que más presencia tenga será quien controle el tipo de políticas que deben de llevar los estados miembros. Esto nos da a entender por qué Europa está tan cegada con la austeridad.

Diputados del Parlamento Europeo según las elecciones de 2009:
  1. Populares Europeos: 265 diputados.
  2. Socialistas y demócratas: 185 diputados.
  3. Liberales y demócratas:  84 diputados.
  4. Los Verdes: 55 diputados.
  5. Conservadores: 54 diputados.
  6. Izquierda 35 diputados.
  7. Euro escépticos:  32 diputados.
  8. Partidos no inscritos: 27 diputados.
En total son 736 diputados, donde la suma de los diputados de derechas (Populares, Liberales y Conservadores) superan con creces la mayoría absoluta: 393 diputados de 368 necesarios. Esto significa que durante los últimos cuatro años se han podido aprobar en Europa medidas de recortes y de austeridad sin demasiada dificultad. Lo cual resulta irónico dado que estas medidas parten de una señorías que reciben un salario base de 84.000€ brutos al año cada uno, un salario similar al que reciben diversos jefes de Estado, Mariano Rajoy incluido. Así que cuando veáis un titular en la prensa de "el Parlamento Europeo aprueba el programa Ajedrez a la escuela" o "El Parlamento Europeo aprueba medidas antidemocráticas que profundizan la crisis", que sepáis que esa la decisión ha salido del sufragio de 736 personas que tienen un salario digno de un presidente del Gobierno, y que pese a su gran salario reciben además dietas por alojamiento, comida, transporte... ¡y hasta por ir a trabajar! Acojonante pero cierto, cada diputado recibe concrétamente una dieta 300€ por cada día que fichan en la "oficina". Eso sí, esta última dieta es limitada puesto que tiene fijado un máximo de 19700€/año por diputado, que cunde por acudir al Parlamento símplemente en 64 días laborales. ¿Queréis aplicar austeridad? No sé, yo empezaría revisando la cueva de Alí Babá.

¿Acaso es posible un cambio de política tras las elecciones europeas de 2014? Pues es bien difícil de decidir, sobretodo teniendo en cuenta que contamos con una Gran Bretaña donde presuntamente ganará el euro escepticismo, una Alemania tradicionalmente popular vendida como el motor europeo a seguir y una Francia dividida entre socialistas y populares. Realmente hay cierta incertidumbre, sobretodo porque se espera un auge importante del centro-izquierda en los países del sur, pero hay que tener en cuenta que el número de diputados que envía cada país depende del número de habitantes de éste: La suma de diputados de España (54), Grecia (21) y Portugal (21), apenas suman los mismos que posee Alemania (96). Esto hace que generalmente las decisiones importantes del Parlamento partan sobretodo de los países del norte, puesto que son los más poblados e históricamente suelen votar sobretodo a los partidos de centro y derecha. Por cierto, ¿ahora entendéis por qué Turquía nunca entrará en la Unión Europea? De hacerlo se convertiría en el segundo país con más representación parlamentaria, puesto que Alemania es el único país europeo que le supera en número de habitantes.

20 agosto 2013

Mostrando un PNG con pnglite (Aplicación C)

Hace un par de semanas os enseñé cómo hacer una aplicación que os permita realizar una captura de pantalla y volver su contenido a un fichero PNG. Hoy os voy a enseñar la inversa, cómo crear una ventana X11 que nos permita visualizar un fichero PNG.



Para ello, he tomado prestado el código fuente del PngView de Vegard Edvardsen y lo he adaptado acorde a las necesidades que buscamos. En este caso para compilar nuestra aplicación, además del paquete build-essential, vamos a necesitar descargarnos los paquetes libpnglite-dev libx11-dev zlib1g-dev para poder compilar nuestra aplicación.

El primer paso es definir la función principal main, que será la encargada de iniciar las librerías de pnglite a través de png_init. Básicamente esta función hace que la librería reserve una serie de memoria dinámica para sus quehaceres, si no la invocáramos obtendríamos violaciones de segmento cuando tratáramos de acceder a los datos del PNG que fuéramos a cargar. De paso aprovechamos para recuperar por argumento de entrada el nombre del fichero a cargar, abrimos para lectura el PNG con png_open_file_read y lo pasamos por referencia a la función  png_display, la cual no pertenece a pnglite, si no que la vamos a crear nosotros.


Por su parte, empezamos la cocción de la función png_display, recibiendo por referencia el png deseado y el nombre del archivo (que emplearemos para poner un título a la ventana).

Entre las variables que emplearemos tenemos un string title donde montaremos el título de la ventana, un vector de chars sin signo donde guardar el contenido del PNG, un puntero a Display que contendrá la estructura de la pantalla por defecto, además de un puntero a Visual y un concentrador gráfico GC que nos permitirá dibujar el PNG dentro de una ventana Win. También tenemos un puntero a XImage, que nos permitirá crear un mapa de bits donde almacenar la imagen a insertar en el concentrador gráfico. Además contaremos con entero sin signo bpm que usaremos para calcular el bitmap pad de la imagen, un puntero a XSizeHints donde definiremos el tamaño fijo de la ventana, una estructura Atom para definir que la aplicación reciba notificación cuando cerremos la ventana y un XEvent que nos permita saber cuando debemos redibujar la ventana. Toma jeroma, espero que no os desmayarais leyendo todo esto.

Primero crearemos una ventana para nuestra pantalla por defecto, acto seguido le definiremos un título de forma dinámica y modificaremos el tamaño de la ventana para que sea fijo (no se pueda maximizar o restaurar) y que este tamaño contenga las dimensiones del PNG. Por último daremos orden de pintar la ventana en el servidor gráfico.


A continuación cargaremos el concentrador gráfico del gestor de ventanas y una estructura visual que contiene el tipo de visualización de la pantalla por defecto. Empleando nuestra estructura visual podremos crear una imagen de bits que posteriormente, en el bucle principal de más adelante, aplicaremos a nuestra ventana a través del concentrador gráfico. Profundizando más, el contenido del mapa de bits será el contenido del PNG devuelto en el formato que aplica la función png_get_data. Para tener menos problemas de visualización (puede dar problemas con imágenes que no sean true-color), calcularemos el valor del "bitmap pad" del mapa a partir de la profundidad del PNG. Estos problemas gráficos se debe a las limitaciones de la librería pnglite y no he encontrado forma rápida de solventarlos.


Hay que destacar que hemos creado un mapa de bits, pero aún no lo hemos pegado en la ventana. Antes de hacerlo tendremos que configurar la ventana creada para que atienda dos tipos de eventos: principalmente las órdenes de printado que nos pueda dar el entorno gráfico (servidor gráfico + gestor de ventanas) y el aviso de que se ha cerrado nuestra ventana. Una vez definamos que esperamos este tipo de eventos, crearemos un bucle infinito que atenderá uno a uno todos los eventos que recibamos al respecto (los obtenemos a través de XNextEvent y los tratamos en el switch).


Como hemos definido préviamente, vamos a gestionar dos tipos de eventos: órdenes de printado y notificaciones de cierre. La primera es básica, cuando recibamos un evento de tipo Expose dibujaremos nuestro mapa de bits en el concentrador gráfico de la ventana, haciendo uso de la función XPutImage. Por su parte, si el tipo de evento es ClientMessage habrá que liberar recursos y cerrar la aplicación:


Si toda esta explicación te ha resultado muy intragable, te adjunto aquí el código fuente para que puedas digerir más a gusto.

19 agosto 2013

Cómo crear un Makefile básico

Un makefile no es ni más ni menos que un fichero de texto plano que define una serie de reglas que, a través de la aplicación Make, automatiza la compilación de código de forma simple y organizada. Make puede ser empleado para compilar cualquier tipo de lenguaje y desde cualquier sistema operativo, pero históricamente se ha empleado mayormente en C y entornos Unix. No obstante, a día de hoy cualquier entorno decente que integre las herramientas básicas de programación suele incluir su propia adaptación de Make, permitiéndole compilar haciendo uso de su propio sistema de guiones (véase por ejemplo Miscrosoft Visual Studio, Netbeans o Eclipse).

Realizar un makefile básico no es nada complicado, basta con entender las siguientes dos premisas: Todo fichero makefile debe llamarse "makefile"; El contenido de todo makefile debe contener el siguiente formato:
nombre_de_una_regla: dependencias_de_la_regla (si la hubiere)
(tabulación) comando_a_ejecutar 
Ejemplo:
Para entender el ejemplo anterior hay que tener claro un par de cosas: La regla por defecto debe llamarse "all". No es obligatorio, pero sí cómodo, puesto que "all" es una palabra reservada que indica cual es la regla por defecto a ejecutar en caso de que ejecutemos un "make" a secas, sin argumentos.  Si en vez de llamarse "all" se llamara "compilar", habría que ejecutar el comando "make compilar" para poder ejecutar esta regla. También hay que tener presente que make fallará (dará error) si ejecutamos el comando en un directorio donde no exista un archivo makefile. Cuando una línea de la regla falle, Make abortará su ejecución, notificando el error que ha detectado.

Profundizando más en el ejemplo, vemos que hemos empleado el gcc como compilador, pero nos podría valer cualquier otro, puesto que todos los compiladores estándares de C suelen emplear los mismos parámetros de entrada. En este caso si nos fijamos hemos hecho la compilación en dos líneas: En la primera compilamos el código fuente contenido en el fichero main.c (debe indicarse con el argumento "-c") a un objeto binario (y no ejecutable) main.o (donde el argumento "-o" indica que se trata del nombre del fichero output): En la segunda línea empleamos el main.o que hemos generado previamente y lo transformamos en un ejecutable llamado "main".

Cabe destacar que Make no tiene por qué ir ligado al lenguaje C (aunque ambas van bastante cogidas de la mano), también puede emplearse para compilar proyectos en C++ o Java:

Ejemplo con C++

Ejemplo con Java
No obstante, las reglas de un makefile no tienen por qué definir únicamente comandos de compilación, también pueden ejecutar órdenes de shell:

En este ejemplo el comando "make clean" borraría los ficheros main y main.o
Pero la magia de los makefiles no radica en su utilidad de automatizar la compilación de código (para ello ya existen los shell scripts), si no en su alto grado de personalización, permitiendo el uso de variables y de dependencias. Por ejemplo, podemos indicar que cuando se ejecute la regla "all", se requiera previamente la ejecución de otra regla que cree los directorios "tmp" y "build", que serán empleados para guardar respectivamente el objeto binario y el posterior ejecutable:


También podemos emplear variables para indicar en qué directorio se va a encontrar cada recurso. Para crear una variable nos bastará con emplear el siempre intuitivo "=", pero para hacer uso de ella deberemos de envolverla entre paréntesis y hacer uso préviamente del símbolo "$":


Hay que destacar que el uso de dependencias no tienen por qué ir ligadas a reglas, también pueden indicar la necesidad de que exista un fichero:

En este ejemplo vemos que "all" se ejecutará si la regla folder acaba con éxito y a su vez existe el fichero $(source_dir)/main.c. Como podéis apreciar, a nivel de dependencias no existe ninguna diferencia para asignar una regla o un archivo. Esto se debe a que Make por defecto buscará la existencia de un fichero o directorio y en caso de no hallarlo buscará su correspondiente regla. En este ejemplo no se ejecutará dicha regla si se da el caso de que tengamos en nuestro proyecto un archivo llamado "folder". Así que si vemos que en nuestro proyecto hay ficheros con nombres que pueden resultar problemáticos para Make, podemos forzar que se haga uso de reglas para determinadas palabras empleando la etiqueta ".PHONY":


La prioridad de Make en comprobar la existencia de ficheros antes que la ejecución de reglas no es una casualidad, si no que está hecho aposta para poder ahorrar tiempos de compilación en proyectos grandes. Esto se debe a que es bastante común crear una regla por objeto compilable y asignarle como nombre el mismo que tiene el fichero que genera. De esta forma, si un objeto no existe se ejecuta diréctamente la regla que fuerza su compilación.

 
Explicación del ejemplo:
  1. Si existe el fichero main.o, se hace uso de él.
  2. Si no existe el fichero main.o, ejecutamos la regla con su mismo nombre, el cual generará el fichero.
  3. Si cambiamos el contenido de main.c, debemos de hacer un make clean para compilar los cambios al objeto main.o.
  4. Si antes de "all" insertáramos la línea ".PHONY: main.o", nunca se comprobaría la existencia del fichero main.o puesto que se ejecutaría siempre su correspondiente regla.
También hay que tener cuidado cuando insertemos reglas que ejecuten comandos de shell. Ten en cuenta que comandos como mkdir pueden fallar si se intenta crear un fichero que ya existe y comandos como rm pueden fallar si se intenta borrar un fichero que no existe. Esto lo comento porque como he mencionado antes, el fallo de una línea hace que Make aborte la ejecución del resto de reglas.

Por ejemplo, en el caso anterior, un "make clean ; make" funcionaría bien, pero sería imposible compilar la aplicación si hiciéramos "make folder ; make". Esto nos obligaría a realizar previamente un "make clean" cada vez que quisiéramos hacer un "make". Para solventar este paso podemos insertar al principio de una línea el carácter "-", puesto que este carácter indica que Make debe ignorar el valor que retorna la línea. Es decir, en determinadas líneas podemos solicitar que Make continúe ejecutando el resto de líneas pase lo que pase:


Por último sólo remarcar que puedes insertar comentarios dentro de un makefile empleando el carácter "#". Con todo ello ya deberías de saber realizar makefiles básicos.


Uno de mis makefiles


¿Te ha gustado la entrada? ¿Te gustaría examinarte de los conocimientos que vienes de aprender Comprueba tus conocimientos realizando este examen de evaluación.

16 agosto 2013

Homefront


Todo empezó en 2015, cuando Kim Jong-un unificó ambas coreas a golpe de soldados. Esto sería el primer paso de una invasión a gran escala, con anexiones de países otros asiáticos como Japón o Tailandia. Doce años más tarde, la federación coreana entra en suelo estadounidense y haciendo uso de un nuevo satélite consigue cortar toda la electricidad del territorio americano. En 2027 casi la totalidad e los Estados Unidos ha sido conquistada por Corea.

Así de absurdo es el guión de Homefront, cuyo principal baluarte es llevar la presión de los conflictos de Afganistán e Irak hasta un territorio made in USA, dando la sensación de que realmente estamos jugando a una adaptación de "La Guerra de los Mundos", pero con coreanos en vez de alienígenas. ¿Corea del Norte con una tecnología superior y con la población necesaria como para poner un pelotón de soldados en cada calle de América? Ya de por si el guión resulta absurdo e irrisorio, e incluso cuando finalizas la historia no puedes evitar espetar un "¿Y eso es todo? ¿Todo lo que he hecho para qué carajos ha servido?".


Opening del juego.

Hablar de Homefront es hablar de un "quiero y no puedo" por parte de la difunta THQ. Si bien el juego nos brinda momentos realmente épicos y espectaculares, en la práctica se resume en una burda imitación lowcost del Call of Duty de turno. La experiencia de jugar a Homefront se puede resumir perféctamente en una sóla frase: "Encendí la consola y cinco horas más tarde ya estaba viendo los créditos del juego". Sin comentarios, para sacar software así... mejor no sacar nada.

Plataforma: Xbox 360, PS3 y PC.
Idioma: textos y voces en castellano.
PEGI: +18 años.
Nota: Mediocre.

12 agosto 2013

Los 6 finales de Anime más WTF (contiene spoilers e imágenes explícitas)

- Code Geass: Lelouch of the Rebellion




Lelouch llega al poder del imperio y se convierte en lo que más odia, un dictador. Consciente de su conflicto de intereses planea un final donde su alter ego, Zero, liberará a Japón de las garras de la opresión británica. Así  que Suzaku Kururugi, colega de la infancia y rival de Lelouch durante toda la serie, se hará pasar por Zero para asesinar públicamente al líder del imperio (y a su vez al protagonista de la serie). De esta forma Lelouch muere siendo moralmente un héroe, pero que será recordado como un villano más del imperio. No podría ser más irónico si no fuera porque Sazaku, a pesar de ser el hijo del último presidente electo de Japón, se pasó toda la historia siendo todo un caballero ejemplar de Britania.

- Romeo x Juliet




Realmente la versión de Romeo y Julieta de Gonzo es un "what the fuck" de principio a fin, pero por lo menos resulta una historia entretenida y que gusta ver. Sin embargo su final es el mayor destrozo que jamás puede haber sufrido una obra de Shakespeare. Aquí no sólo no muere Julieta, si no que digievoluciona a un árbol de maná mientras el continente de Nueva Verona se desploma. Pero no temáis, que los habitantes de Neo Verona se salvan gracias a sus pegasos (no, no hay caballos en esta serie). Por cierto, este vídeo es un fansub doblado por XCrazyActressX (Julieta), TheLadyPriscilla (Ofelia) y MrPhaeThorn (Romeo).

- Phantom: Requiem for the Phantom




Zwei consigue llevar a Ellen a su tierra natal en Mongolia. Mientras observan el maravilloso paisaje, en una escena muy emotiva, los dos ex sicarios son asesinados de forma silenciosa.

- Cowboy Bebop




Tras cincuenta mil episodios de relleno, Spike abandona el grupo para enfrentarse en solitario a Vicius y sus esbirros. Se da una escena digna de Jungla de Cristal, tras la cual Spike vence a todo cristo para acto seguido fallecer.

- Death Note




Se descubre que Yagami Light es Kira, pero éste consigue escapar de los hombres de Near. No obstante, su shinigami decide matarlo haciendo uso de un death note que le sobra "porque sería muy aburrido" esperar hasta que Yagami salga de la cárcel.

- School Days


Inserción descativada por motivos obvios. Clicad y "flipad".

Una escena digna de Tarantino; Sekai Saionji es víctima de los celos y mata a cuchillazos a Makato, el protagonista. No contenta con ello, se hace pasa pasar por Makato para citarse con Kotonoha Katsura. Para mayor sorpresa, no se le ocurre otra cosa que traerse a la cita el cadáver de Makako envuelto en una mochila e intentar apuñalar a Kotonoha, pero le sale el tiro por la culata y es asesinada y por su víctima, la cual de paso la destripa para verificar si Sekai estaba embarazada de Makato.

Por último debería de añadir Evangelion a la lista, pero sed sinceros, nadie entiende su final.

Ganar gracias a un trolleo

Como muchos sabréis soy un gran aficionado de PC Fútbol y esto se puede apreciar gracias al gran volumen de entradas que he escrito sobre esta saga. Esto hizo que hoy no dudara en leer una entrada de uno de los medios digitales más famosos de España, titulado "Mis hermanos se reían de mí cuando les hablé de hacer el PC Fútbol" y que supe de su existencia gracias a que apareció en la portada de Meneame.net. Es decir, si esta entrada no hubiera llegado a Meneame nunca habría conocido de su existencia.

El caso es que la entrada tiene tenía una captura de pantalla que me resultó muy familiar:


Si vemos la imagen en grande nos sonará un poco más. Se trata de la plantilla del Valencia C.F. visualizando en primer plano la ficha técnica de Nico Olivera.


El caso es que me sorprendió de la captura, aparte de ser del crack 'Nico' Olivera, que el scroll de la lista de "jugadores no convocados" estuviera complétamente bajado, cuando por defecto está subido. Esto nos da a entender que el que hizo la captura no pretendía hacer una captura, si no jugar realmente una partida nueva. Entonces fue cuando pensé "coño, ¿que no será una captura de mi blog?". Y di en el clavo, la captura del diario El Confidencial es un copypaste recortado de una entrada que publiqué el 30 de Enero de 2011, titulada "El peor jugador de la historia de PC Fútbol".


Básicamente el autor de la entrada recortó la imagen de forma que no se viera el marco de la ventana de Wine, ni los equipos que iban a disputar el próximo partido, ni la fecha en que éste se disputaría. Eso sí, tuvo el detalle de dejar inmaculado el cursor del ratón, prueba irrefutable del hurto. La cuestión es que no es delito robar una imagen para informar, pero queda moralmente mal el apropierte de una autoría que no es tuya. En pocas palabras, no me molestó que pusieran la imagen, símplemente que daban a entender que ellos hicieron todo el curro de instalar el PC Fútbol 6, su expansión y realizar un screenshot. Y así se lo hice saber a la persona que redactó la entrada vía Twitter:


Y también se lo hice saber a El Confidencial vía Twitter, los cuales se comprometieron a citarme en la entrada:



Y eso hicieron... durante veinte minutos. Se ve que en este diario está mal visto citar las fuentes de sus contenidos o darles el mérito de la autoría y al cabo de un rato reorganizaron la entrada cambiando la imagen de lugar y borrando la cita a mi blog. Cosa que me cabreó bastante y que notifiqué en varias ocasiones, sin obtener respuesta alguna. Sencillamente me robaron una imagen y encima me ignoraban:


Así que visto el panorama decidí trollearles creando un meme con hashtag "#elconfidencialmeroba":




Y se ve que causó efecto. Fue publicar las imágenes y ver por fin una reacción. Primero se excusaron diciendo que habían empleado una captura de pantalla distinta. Se ve que no entendieron la sutileza del "corta-pega" del cursor y tras remarcarles que seguían empleando mi captura, decidieron borrar la imagen diréctamente de su entrada.


Es decir, lo peor de todo no es que se apoderaran de una imagen mía, que ya de por si está mal, si no el hecho de prometer que me citarían, hacerlo y recular a los veinte minutos sin ni siquiera avisarte. En serio, ¿cómo quieren que les tome por un medio serio si ni siquiera saben respetar el trabajo ajeno?

07 agosto 2013

10%

Según el Fondo Monetario Internacional los salarios españoles deben de bajar un 10% para que los empresarios tengan más dinero para contratar empleados y de paso atraer inversiones extranjeras. Una afirmación validada ayer por Olli Rehn, vicepresidente económico de la Unión Europea. A priori parece lógico, si no fuera porque hay que tener mala memoria para afirmar que esta receta funcionará.

La primera contradicción está en que desde 2009 los salarios Españoles se han reducido un 6% de media, mientras que durante este tiempo la inflación se ha disparado un 11%. Los números están ahí: ganamos menos dinero que hace tres años, el paro se ha incrementado un 10% (casi dos millones de habitantes más) y el producto interior bruto ha caído en picado. No hace falta ser muy listos para ver lo que pasará si nos vuelven a bajar el salario: Tendremos menos poder adquisitivo, gastaremos menos, las empresas venderán menos productos/servicios y por consiguiente se destruirá más empleo. Esto se conoce como círculo vicioso de destrucción de empleo y la historia nos dice que sólo se solventa cuando el Estado de turno toma medidas de crecimiento, no de recortes.

Pero no tenemos por qué irnos a la situación española para observar que esta supuesta medida no funcionaría, basta con ver cómo Grecia tenía una tasa de paro del 10% cuando entró en bancarrota. Ahora puede pagar sus deudas gracias a los préstamos de la Troika, pero al país heleno se le ha disparado el paro hasta el 26%. Es decir, llevan tres años seguidos bajando salarios debido a los recortes impuestos y su población se ha empobrecido drasticamente: Tienen peores salarios y trabaja mucha menos gente. Y quien habla de Grecia también habla de Portugal, donde han pasado de otra tasa del 10% al actual 18%... ¡y subiendo!

El caso es que nosotros realmente no estamos mejor ni peor que nuestros vecinos del sur, al fin y al cabo nuestro salario mínimo es semejante a las "superpotencias" de Grecia y Malta... y muy por debajo de Francia, Luxemburgo, Reino Unido, Bélgica... e incluso de Irlanda, el otro país rescatado. ¿Se imaginan bajar un 10% nuestro salario mínimo? Yo no sé ustedes, pero yo considero que es imposible vivir en España ganando sólo el salario mínimo interprofesional.



Y es que no puede ser casualidad que el único país rescatado que está "saliendo" de la crisis es el único que mantiene salarios de élite. Está claro que ellos también han sufrido recortes, pero la vida es mucho más cómoda y recolectas muchos más dinero en impuestos cuando tus ciudadanos pueden comprar cosas. La ecuación es así de simple.

En fin, la única conclusión a la que llego es que Olli Rehn no está capacitado para su puesto. "Buen día Benito", debes dimitir.


Tales of Vesperia


Aviso, la siguiente entrada contiene spoilers para dar y tomar.
Final Fantasy VII nos narra las hazañas de Avalancha, un grupo terrorista que destroza los reactores de mako por entender que son dañinos para el planeta. Este grupo está liderado por Cloud, un ex de "Soldado" convertido a mercenario que debido a una serie de sucesos es obligado a abandonar la capital Midgar para pasear por el resto del mundo, repartiendo mamporros a diestro y siniestro y de paso evitar el apocalipsis... el cual iba a ser perpetrado por Sephirot, un héroe de guerra convertido en archivillano. 
Perdón, Tales of Vesperia nos narra las hazañas de Brave Vesperia, un grupo de mercenarios que va destruyendo Hermet Blastias por entender que estos son dañinos para el planeta. Este grupo está liderado por Yuri, un ex caballero del imperio convertido a fugitivo que debido a una serie de sucesos es obligado a abandonar la capital Zaphias para pasear por el resto del mundo, repartiendo mamporros a diestro y siniestro y de paso evita el apocalipsis... el cual iba a ser perpetrado por Alexei y Duke (este segundo de forma indirecta), dos héroes de guerra convertidos en archivillanos.
Bueno, bromas y sarcasmos aparte, Tales of Vesperia es uno de los grandes olvidados en la presente generación, puesto que pese a estar disponible desde 2008 (2009 en Europa), cabe recordar que desde entonces la obra maestra de Namco Bandai apenas ha vendido 1 millón de unidades: 650.000 de ellas correspondientes a la versión de Xbox 360 y otras 430.000 a la de PS3 (que para más inri la versión de esta consola no salió de Japón).

Puede que un millón de unidades parezcan muchas, pero para daros una idea del volumen del fiasco bastará con decir que ahora mismo existen más de 78 millones de Xbox 360 y otras 79 millones de consolas PS3. Es decir, menos de un 1% de los usuarios de esta generación ha llegado a comprar este juego. Gran parte de esta culpa seguramente radique en la política de localización de Namco Bandai: Todos sus RPG llegan a Europa en completo inglés, sin voces ni textos de pantalla en castellano, francés o alemán, cosa que dificulta el disfrute del usuario medio cuando hablamos de un RPG con mucho texto y con una duración aproximada de 50 horas de juego.

Quitando el hecho de sus pobres ventas o de que el juego se encuentra 100% en inglés, hay que destacar una cosa: Tales of Vesperia no sólo no es malo, si no que es uno de los mejores JRPG disponibles en la presente generación, un género que por desgracia no levanta cabeza desde que Square Enix se hizo casi con el monopolio de la distribución de esta clase de títulos en Occidente (Nier, Star Ocean, The Last Remnant...). Y es que Tales of Vesperia es con diferencia, junto a Lost Odyssey, el mejor JRPG que podemos encontrar actualmente en Xbox 360, dos títulos que hay que destacar que pese a recordar bastante a los Final Fantasy de 32 bits no guardan relación alguna con Square y que a día de hoy se comen con patatas a cualquier esperpento de la franquicia Lightning... pese a tratarse de dos juegos que salieron a la vente al poco de nacer la Xbox 360.

La principal baza que maneja este juego, junto a las ingentes horas de lectura y el acabado diseño gráfico (que pese a no sorprender por la baja calidad de sus texturas, destaca por su conjunto global), es que cuenta con sistema de batallas de tiempo real muy adictivo y de agradable jugabilidad, que nos animará a rejugar una y otra vez cada combate que perdamos contra un final boss. Pero no te confundas, a diferencia de otros RPG sus combates a tiempo real no resultan caóticos, puesto que este juego te ofrece un completo sistema de estrategias que te permite configurar de forma simple una gran cantidad de atributos para definir los roles y comportamientos de tus aliados. Pero lo mejor de todo es que además este sistema de batallas te permite jugar con tu hermano/novia/perro/tamagochi, puesto que los compañeros que te acompañan podrán ser manejados en local (no puedes jugar partidas online) con los otros gamepads que tengas enchufados en tu consola. ¿Un RPG con multijugador? Sí, es una idea brillante, útil, fácil de emplear y que encima divierte. Aún así hay que destacar que los logros que saques se aplican sólo a tu perfil y que este tipo de multijugador ya lo vimos en antaño en anteriores entregas de "Tales of" de Namco.



Trailer de lanzamiento americano.


Trailer de lanzamiento europeo.

Cosas que me han gustado:
  1. Un JRPG épico y de calidad. Algo que ha escaseado en esta generación.
  2. Yuri, protagonista y un antihéroe genial. Se toma la justicia por su cuenta sin importarle la legalidad de sus acciones.
  3. Poder jugar los combates con otra persona.
  4. El menú de estrategias, símple, claro y útil.
  5. Cómo mueren cada uno de los villanos: A cada cerdito le llega su San Martín.
  6. Al pasarte el juego te guarda una sorpresa agradable: Poder jugar una nueva partida con power ups.
Cosas que no me han gustado:
  1. Paredes invisibles en determinados mapas.
  2. Puedes correr contra una pared, como los Resident Evil de 32 bits.
  3. El guión del juego destaca mucho la importancia de tomar decisiones para crear un futuro, pero el juego en si es lineal.
  4. El guión en ocasiones parece un copypaste de Final Fantasy VII, Breath of Fire II o incluso Lufia 2, pero en su conjunto lo disimulan bien y hace una función más que correcta.
  5. Sólo puedes cargar un máximo de 15 unidades de cada item.
  6. No puedes saltarte las escenas. Si un boss te mata tienes que tragarte otra vez todos los diálogos.

01 agosto 2013

Realizando una captura de pantalla con XImage y CImg (aplicación C++)

Googleando por internet he encontrado un trozo de  código que me ha gustado y me he tomado la licencia de mejorar y de optimizar. En concreto se trata de una aplicación simple escrita en C++ que permite realizar capturas de pantalla en entornos X11 (Linux): Básicamente se realiza un volcado del buffer del entorno gráfico en una estructura XImage para posteriormente volcar píxel a píxel a un objeto CImg que acto seguido se guarda como archivo PNG. 

Como resultado tenemos una aplicación ligera, rápida y funcional.

Para compilar requiere las siguientes dependencias: build-essential, libstdc++6-4.7-dev y cimg-dev. En este fichero adjunto incluyo el main.cpp con un sencillo makefile que he elaborado para compilarlo de forma simple. Para descomprimir el adjunto basta con hacer un tar xzvf screenshot.tgz.

main.cpp:


Esta segunda parte es más difícil de entender, desglosamos cada píxel de la estructura XImage en formato Red, Green, Blue y lo almacenamos en el objeto CImg. El problema radica en que objeto CImg contiene una matriz de 3 valores para representar un color (siendo la primera posición el tono rojo, la segunda el verde y la tercera el azul). Esto entra en conflicto con la estructura XImage, puesto que ésta almacena los tres tonos en una única variable de 24 bits (siendo RED los 8 bits de mayor peso, BLUE los 8 bits de menos peso y los 8 restantes son para GREEN).

Es decir, un píxel de XImage podría representarse de la siguiente forma:
00000000RRRRRRRRGGGGGGGGBBBBBBBB
Mientras que un píxel de CImg se representaría así:
pixel[X, Y, 0] = R
pixel[X, Y, 1] = G
pixel[X, Y, 2] = B
Esto significa que para aislar el color ROJO debemos desplazar la variable 16 posiciones a la derecha y que por su parte el color verde debe realizar lo mismo pero con sólo 8 posiciones. Aún así, sólo con desplazar no basta, puesto que en el caso del AZUL o VERDE siguen existiendo bits más significativos (a la izquierda) que representan originalmente un color distinto. Para ello realizaremos una operación lógica (el famoso "& mask") que aplicaremos previamente para quitar los bits que sean de otros colores. En el caso de RED no hay necesidad de realizarlo, puesto que se pierden los bits BLUE y GREEN en el desplazamiento final.