17 años en Internet

31 diciembre 2012

Mis juegos favoritos de 2012

  • Virtue's Last Reward - Nintendo 3DS

Trailer oficial de Nintendo Europa.

Virtue's Last Reward es la secuela de la novela visual "999: Nine Hours, Nine Persons, Nine Doors" que salió a finales de 2010 para Nintendo DS. En esta ocasión eres Sigma, un estudiante universtario que es secuestrado, sin razón aparente, por un ente conocido como Zero III. Este ente le obligará a él y a los otros ocho secuestrados a resolver una serie de retorcidos puzzles, donde se te dará a elegir entre traicionar o aliarte con determinados compañeros para poder luchar por tu supervivencia.

Sí, es un androide montando en un conejito.

Pese a sus gráficos potables, su buena banda sonora y contar con un total de 24 finales, cabe destacar que este juego no ha salido a la venta en España. Por desgracia sólo hay dos alternativas para poder jugar a esta joya: comprarlo importado desde el Reino Unido o a través de la tienda virtual de Nintendo. En mi caso, la primera opción era la más barata. También está disponible para PS Vita.

  • Final Fantasy III - Android
Captura de pantalla realizada por mí.

Han pasado cinco años desde que Squeare Enix publicara este remake del Final Fantasy III en Nintendo DS y a mediados de Junio de este año decidió publicar en Google Play un port para Android de dicho remake. La versión de Android es exáctamente la misma que la presentada en DS, con su misma jugabilidad, animaciones y texturas. Si bien, hay que destacar que los controles se manejan de maravilla en una tableta (incluso en pantallas capacitivas) y que los gráficos y las fuentes lucen bien en "alta" resolución (pese a no ser ninguna maravilla técnica). Hasta la fecha este es mi juego preferido de Android, la única pega es su elevado precio: 12,99€.

Captura de pantalla realizada por mí.

  • The Bard’s Tale - Android
Puestos a hablar de refritos hay que destacar esta joya donde las haya. The Bard's Tale es un port del juego que presentó inXile (creadores también de Hunted: The Demon's Forge) en 2004 que a su vez es un remake del juego que salió en 1985 para Apple II y que a día de hoy tiene también versiones de Blackberry, Xbox, PS2, IOS... y cuya versión de Windows podéis comprar a través de Steam por menos de dos euros.

Captura de pantalla realizada por mí.

Pese a que este juego se ha explotado más que el intrusismo laboral de Super Mario, estamos ante un juego que a pesar de los años rebosa frescura y diversión por doquier. En él manejaremos a un antihéroe en una aventura que a cada línea de texto parodia todos y absolutamente todos los clichés de los juegos de rol.

Captura de pantalla realizada por mí.

  • Dragon's Dogma - Xbox 360
Captura de pantalla realizada por mí.

Este no es un juego, es El JUEGO. Pese a no tener la calidad técnica de Skyrim o de haber sido diseñado por un mono ocioso, este es sin duda el juego de rol de 2012. Gráficamente no es una obra maestra, pero aún así posee varios efectos gráficos dignos de una superproducción, además de ser jugablemente adictivo y ofrece un sin fin de épicos y gratificantes combates. En serio, este título se un devoravidas y el principio de una franquicia a tener en cuenta.
¿Pero qué clase de juego es exáctamente Dragon's Dogma? Básicamente es un juego de rol como los de antaño: Haciendo uso de un modesto guión debes de ir haciendo misiones que te acabarán llevando de un punto A a un punto B y de paso salvas el mundo.
Captura de pantalla realizada por mí.
  • Soul Calibur V - Xbox 360
Con títulos como Mortal Kombat 9 o Marvel vs Capcom 3, el 2011 fue un gran año para los juegos de lucha. Por desgracia este 2012 la industria no ha parado de mezclarnos refritos (Street Fighter x Tekken, Dead or Alive 5...). En este sentido, el título de lucha de este año que más me ha gustado es Soul Calibur V, que ofrece lo mismo de siempre, pero por lo menos han hecho limpieza de luchadores.


Pyrrha mostrando todo su potencial.
Han pasado 17 años desde que Siegfried venciera al último Nightmare. La Soul Calibur ha mermado su poder de forma exponencial, Sophitia ha muerto y Taki se ha retirado dando paso a su nueva alumna Natsu. Pero acutalmente, comenzando el siglo XVII, una serie de eventos empieza a convulsionar el corazón del centro-este europeo: vuelven a aparecer los ataques de malfestados y los hijos de Sophitia se preparan para una batalla fratricida. El caballero Patroklos es elegido nuevo portador de la Soul Calibur y tendrá que enfrentarse al nuevo dueño de la Soul Edge, su hermana Pyrrha.
Skeletor creado con el editor de personajes.
Respecto a las nuevas incorporaciones, poco más que decir. Salvo el licántropo Z.W.E.I., ninguno de ellos consigue transmitir simpatía. De hecho, los protagonistas Patroklos y Pyrrha dan grima y no resultan para nada interesantes hasta que alcanzan sus versiones alpha y omega respectivamente. El caso de Pyrrha es el más asqueroso, puesto que es una chica que pega patadas al aire mientras cada dos por tres pide perdón por hacer pupa a sus rivales. Podría calificarse a Pyrrha como el peor personaje nunca creado en un juego de lucha.

Los peores de 2012

  • El reconocimiento de voz de Fifa 13 en Kinect.

Vamos mal cuando Kinect no te reconoce la voz cuando tienes el vocerío del público activado, pero vamos peor cuando reconoce como órdenes del jugador los comentarios de Manolo Lama y de Paco González. Y es que jugar a un FIFA pierde su gracia si debemos desactivar las voces de los comentaristas y del público. Muy mal EA, así no se localiza un juego.
Mi sospecha se confirmó cuando Manolo dijo "Hay que salir a amarrar", el micrófono de Kinect escribió "sacar al portero" y acto seguido mi portero se encontraba en mitad del campo intentando robar el balón a los centrocampistas rivales.
  • Gameloft S.A.
La empresa francesa con sede en California se ha dedicado tanto en 2011 como en 2012 a inundar el mercado de IOS y Android con plagios descarados de juegos de moda. Así que han presentado una copia del Halo (Nova 3), una copia del Grand Theft Auto (Gangstar Rio), una copia del Need for Speed (Asphalt 7), una copia del Modern Warfare (Modern Combat 4)... Y bueno, esto no es malo, ¡lo malo es la calidad de sus juegos y de su sistema anti copias!
Gameloft has made a name for itself by creating mobile games "inspired" by popular console franchises. It's mostly harmless (if rather shameless) but Gameloft has defended its sticky-fingered tactics, claiming that everybody does it. destructoid.com
Por un lado su absurdo sistema anti copias te obliga a estar siempre conectado a internet y encima te da errores de "licencia no válida" de vez en cuando, por otro puedes encontrarte con que el juego no funciona en tu dispositivo una vez hayas pagado por él, pese a que en Google Play pone cláramente que es compatible con tu dispositivo y tu versión de Android. Además ninguno de sus juegos permite el mapeado de botones o el uso de game pads externos, obligando a usar controles táctiles sí o sí. Básicamente sus juegos son una tortura en pantallas capacitivas. Pero lo peor es que encima las capturas de pantalla  de los juegos lucen geniales en Google Play, pero luego sus juegos se ven horrendos incluso en una tableta con procesador gráfico Tegra.

  • El pobre catálogo de 3DS y el elevado precio de sus juegos.
Nintendo 3DS lleva ya dos años entre nosotros y su catálogo de juegos sigue siendo decepcionante. Algo que extraña teniendo en cuenta de que a día de hoy tiene el monopolio de las consolas portátiles y que a nivel mundial es la consola que más vende (más incluso que todas las consolas de sobremesa).

Tabla elaborada pore vgchartz.com

Y es que no se puede tolerar de que los juegos buenos de Nintendo 3DS no lleguen a Europa, que los que llegan salen a la venta a 50 euros y que encima los que llegan sean protagonizados por Mario, o sean remakes de Nintendo 64 o sean diréctamente basura elaborada por el third-party de turno.


28 diciembre 2012

Un hamster consigue compilar Gentoo en 180 horas


Así, como suena, una hamster llamada Berta ha conseguido compilar el sistema operativo Gentoo en tan sólo 180 horas. El hito ha sido realizado gracias a su dueño, Antonio Recio, un monte pinés de 53 años.

Una foto de Berta.

Antonio, mayorista y gran fanático del software libre, ideó un sistema electrónico donde transformaba en señales acciones comunes como "beber del bebedero", "roer la jaula" o "girar la rueda" que a su vez se traducían en comándos de shell sobre un Raspberry Pi customizado para la ocasión. Concrétamente el Raspberry ejecutaba un "emerge" principal, pero Antonio estaba harto de darle a "Yes" y la tecla intro cada vez que el instalador de Gentoo le pedía un dato. Así que ideó este sistema para que el hamster automatizara la tarea por él.

180 horas más tarde, Antonio poseía un sistema básico que corría fluído sobre su Raspberry. Si bien, cabe destacar que por alguna razón que se escapa a nuestros conocimientos, el hamster se las ideó para cambiar el fondo de pantalla de fábrica por el siguiente.

27 diciembre 2012

Un par de cosas que puede que no sepas sobre Android

  • Ratones, teclados ¡e incluso game pads!
Hay un amplio número de dispositivos genéricos que son compatibles con Android, ya sea por puerto USB, como por bluetooth. De hecho, podéis jugar con un game pad a juegos como Shadowgun o Grand Theft Auto III y además, cabe recordar que los primeros móviles Android venían de fábrica con un teclado físico integrado. Esto se debe a que el kernel (núcleo del sistema operativo) de Android está basado en el kernel de Linux, un núcleo con más de dos décadas de vida que ofrece soporte directo para esta clase de dispositivos.
  • Un huevo de pascua en los ajustes del sistema.
Accede a "Ajustes> Acerca del teléfono/tableta" y pulsa varias veces seguidas en "Versión del firmware/Android". Te aparecerá un dibujo humorístico sobre la versión de Android que estás empleando. Esta acción puede estar bloqueada en determinados fabricantes.

  • El origen del robot de Android.
El logotipo de Android es un robot que originalmente se llamaba "Bugdroid" y fue diseñado para ser empleado por la comunidad de desarrolladores de Android. Además, para los amantes de la cultura libre, el famoso dibujo de esta mascota cuenta con una licencia Creative Commons 3. Actualmente también se le suele llamar Andy.

  • El nombre de las versiones de Android.
Todas las versiones de Android se bautizan con el nombre de un postre. Para más inri, en cada lanzamiento los chicos de Mountain View estrenan en su jardín una estatua de dicho postre.


06 diciembre 2012

Querida Constitución

Querida constitución, hoy celebramos tu nacimiento, como cada 6 de Diciembre. Y es que hace 34 años los españoles votaron tu ratificación mediante referéndum. El caso es que al haber nacido más tarde que 1978, técnicamente has sido impuesta para mi: Nunca me consultaron si me parecías a la altura de este país y nunca me han hecho jurar sobre ti.

El caso es que me pareces muy correcta como carta magna que ratifica los derechos humanos en nuestra nación, pero me desconcierta que a día de hoy tanto el poder ejecutivo (Gobierno) como el poder legislativo (Congreso, Senado y Cortes Autonómicas) te ningunean a voluntad por el mero hecho de sanar las cuentas del Estado que ellos mismos han despilfarrado. Y cuando no es por dinero, sale el liberal de turno para legislar conforme a su moral sin darle importancia a las normas básica de este tablero de juego al que llaman Democracia.

Por un lado dices que España es un país laico, pero el ministro de Educación quiere hacer que la asignatura de Religión vuelva a tener el rigor académico de antaño. Incluso en cortes como la de Valencia vuelve a estar de moda poner el crucifijo encima de la mesa del presidente.
Artículo 16.3: "Ninguna confesión tendrá carácter estatal. Los poderes públicos tendrán en cuenta las creencias religiosas de la sociedad española y mantendrán las consiguientes relaciones de cooperación con la Iglesia Católica y las demás confesiones."
También dices que los Españoles tenemos derecho a una vivienda digna. Pero los legisladores permiten que la banca desahucie a sus anchas a gente que no puede pagar debido a esta crisis económica y que no tiene a donde ir. El capitalismo, no nos engañemos, es la ley de la selva llevada a la civilización moderna, donde los fuertes sobreviven a base de desangrar a los débiles. A falta de saber los datos del tercer trimestre, en el segundo trimestre de este año hemos batido el récord de desahucios por día: un total de 526 desalojos diarios.
Artículo 39: "Los poderes públicos aseguran la protección social, económica y jurídica de la familia."
Artículo 47: "Todos los españoles tienen derecho a disfrutar de una vivienda digna y adecuada. Los poderes públicos promoverán las condiciones necesarias y establecerán las normas pertinentes para hacer efectivo este derecho, regulando la utilización del suelo de acuerdo con el interés general para impedir la especulación. La comunidad participará en las plusvalías que genere la acción urbanística de los entes públicos."
Dicho sea de paso, también dictas que el poder legislativo y ejecutivo están en la obligación moral de promover el I+D nacional, pero el Ejecutivo ha recortado el presupuesto en Educación un 21% (unos 3.000 millones de euros). Por consiguiente se ha incrementado el precio de las tasas universitarias, reducido el número de becas, suprimido numerosas ayudas, incrementado el número de horas lectivas por profesor [1]. Eso sí, al ministerio de Defensa no me lo toquen, no vaya a ser que nos quieran reconquistar los cartagineses.
Artículo 44.1: "Los poderes públicos promoverán y tutelarán el acceso a la cultura, a la que todos tienen derecho."
Artículo 44.2: "Los poderes públicos promoverán la ciencia y la investigación científica y técnica en beneficio del interés general."
También dictas que todos los Españoles somos iguales ante la justicia, pero el ministro Gallardón ha transformado el poder judicial en un negocio de repago: Pagas la justicia con tus impuestos y pagas la justicia con tu bolsillo cada vez que requieras de ella. ¿Quieres apelar una falso pleito? Pues paga 800 euros... 1200 en caso de que llegue al Tribunal Supremo. ¿Quieres recurrir un expediente de regulación de empleo? Pues paga 500 euros. ¿Tu mujer y tu queréis pedir el divorcio? Pagad 300 euros. ¿Quieres recurrir una multa injusta? Paga 200 euros. Este último caso es sangrante, puesto que te sale más barato pagar una multa que recurrirla con el agraviante de que si no lo haces reconoces tu culpabilidad. Cláramente ahora la justicia sólo va a ser útil para los pudientes.
Artículo 14: "Los españoles son iguales ante la ley, sin que pueda prevalecer discriminación alguna por razón de nacimiento, raza, sexo, religión, opinión o cualquier otra condición o circunstancia personal o social."
También dices que todo ciudadano tiene derecho a la salud, pero en algunas comunidades se ha implantado un sistema de repago (similar al de la justicia) e incluso han implantado tasas para que los médicos facturen un euro por receta que firmen. También se ha instaurado un sistema de repago, a nivel nacional, para los medicamentos: Pagas los medicamentos con tus impuestos y los pagas ahora cuando acudas a comprarlo. Pero lo más sangrante es que los legisladores ahora deniegan la tarjeta sanitaria a los inmigrantes ilegales o a los mayores de 26 años que no coticen... a pesar de tener una tasa de paro juvenil de más del 50%.
Artículo 40: "Los poderes públicos mantendrán un régimen público de Seguridad Social para todos los ciudadanos, que garantice la asistencia y prestaciones sociales suficientes ante situaciones de necesidad, especialmente en caso de desempleo. La asistencia y prestaciones complementarias serán libres."
También he leído que garantizas que se actualice de forma adecuada la pensión de nuestros ancianos, pero el Consejo de Ministros ha aprobado que este año las pensiones sólo suban entre un 1 y un 2%. Esto significa que los pensionistas tendrán una subida inferior a la inflación. No sería demencial si no fuera porque Zapatero ya les congeló las pensiones en el último año de su legislatura y al año siguiente Rajoy apenas las subió un 1%. Eso sí, la subida de Rajoy fue anecdótica, porque les incrementó los impuestos con un porcentaje mayor a la subida. Es decir, el poder adquisitivo de los pensionistas va a caer por tercer año consecutivo.
Artículo 50: "Los poderes públicos garantizarán, mediante pensiones adecuadas y periódicamente actualizadas, la suficiencia económica a los ciudadanos durante la tercera edad. Asimismo, y con independencia de las obligaciones familiares, promoverán su bienestar mediante un sistema de servicios sociales que atenderán sus problemas específicos de salud, vivienda, cultura y ocio."
Así que querida carta magna, adoro tu escrito y he apreciado mucho tu lectura, pero me temo que por ahora debes de permanecer en otra sección, en la biblioteca de ciencia ficción.

Arrancando el fsck forzoso de forma automática al fallar el fsck normal en un arranque

Hará dos años, incluso puede que un poco más, le regalé a mi madre mi viejo netbook para que lo usara como ordenador personal. Le puse un monitor externo, un ratón y un teclado y le instalé una Ubuntu que modifiqué para que fuera liviana. El caso es que el software que le puse, pese a ser a día de hoy "escaso" o desfasado, cumple sobrádamente con las funcionalidades que ella necesita. Y ahí está, aguantando, más de dos años leyendo su correo electrónico en él, mirando los powerpoints que le mandan sus amigas, visionando las fotos de su cámara, viendo vídeos en Youtube, hablando con su hermana por Skype, etcétera.

Más de dos años sin formatear el equipo o sin instalarle ni mantenerle un antivirus. Parece una tontería, pero esto demuestra que un Linux bien montado puede ser utilizado sin problemas por usuarios casuales y que para más inri requiere de un mantenimiento técnico casi nulo. De hecho, lo configuré para que fuera tan fácil de usar que mi padre y mi hermano se lo toman prestado de vez en cuando.

El caso es que hasta la fecha sólo requería un único mantenimiento: Cada vez que había una caída de luz o cada vez que desenchufaban el portátil sin apagarlo antes (le quité la batería), el sistema operativo no arrancaba porque en ese caso la distribución se iniciaba automáticamente en modo consola para que el usuario root hiciera una comprobación forzosa del disco duro. Bueno, realmente realiza la comprobación automáticamente, pero  al detectar inodos corruptos el inicio del sistema se detiene y monta los discos duros en modo sólo lectura para que el administrador lo revise.

La solución era siempre la misma, teclear "fsck.ext2 /dev/sda1 -y" y reiniciar la máquina. La cosa es que yo no quería deshabilitar esta comprobación automática, puesto que el disco del netbook es una memoria flash integrada en placa y por lo tanto es propenso a estropearse. Además, al vivir entonces con mis padres no me costaba nada acercarme al equipo y teclear la famosa línea.

Esta semana mi hermano desenchufó por error el portátil y al no vivir ya con ellos no pude ir a revisárselo. Tres días, contando hoy, se pasó mi madre sin poder revisar su correo... así que le he creado un script automático para eliminar el único mantenimiento que requería la máquina. Le he probado un par de veces y la solución funciona bien en su ordenador. Sí señores, ahora ya tiene un equipo que seguirá funcionando hasta después de que yo muera (textualmente hablando). Quien sabe, a lo mejor dentro de mil años un humano mutado con cuatro brazos y con pantallas planas en lugar de ojos le de al botón power y se quede extrañado a ver a mis padres de fondo de pantalla.

Bromas aparte, os contaré lo que hice. Lo primero es lo primero, el script que debe de ejecutar el usuario root: fileSystemCheck.sh.
#!/bin/bash
clear
echo "Habéis apagado mal equipo."
echo "Sebas."
echo "Arrancando comprobación automática de disco:"
sleep 10
fsck.ext2 /dev/sda1 -y
clear
echo "Comprobación finalizada. Reiniciando el equipo."
echo "No volváis a apagar mal el equipo, se puede estropear."
Problemática del script:
  • Debe arrancarlo únicamente el usuario root.
  • No sirve de nada darle permisos de ejecución, puesto que cuando en caso de fallo el disco duro se monta automáticamente con permisos de sólo lectura (sin permiso de ejecución).
Pero tengamos en cuenta lo siguiente:
  1. Al fallar la comprobación automática, el sistema arranca en modo consola con el usuario root ya logueado, sin requerir contraseña. Por consiguiente, partimos de la premisa que un usuario root podrá ejecutarlo sí o sí.
  2. Mis padres o mi hermano no saben ingresar como root. Por lo tanto el único caso donde se hará un ingreso de usuario root será cuando la comprobación automática falle.
  3. Para garantizar que este script sólo pueda ser ejecutado por root, no se debe de guardar en ningún directorio que pertenezca a los típicos de $PATH (como /bin o /sbin o /usr/bin, etcétera...). Es más, se puede guardar en /root/fileSystemCheck.sh, puesto que el directorio /root sólo puede ser listado por el usuario root.
  4. Por consiguiente, hay que modificar el sistema de forma que arranque el script /root/fileSystemCheck.sh siempre que se detecte un login del usuario root.
Vale, parece claro. ¿Pero cómo cumplimos el punto cuatro? Muy fácil, editando el fichero /root/.bashrc. De hecho verás que todos los usuarios de un sistema GNU/Linux poseen un fichero .bashrc en su carpeta $HOME. Este archivo es el responsable de cargar todas las variables de entorno siempre que se inicie una sesión por consola (tanto física como por conexión remota).

En este caso, editaremos el fichero /root/.bashrc y añadiremos las siguientes dos líneas al final del todo:
/bin/sh /root/fileSystemCheck.sh
exit
La primera línea pide al intérprete estándar de shell que ejecute el script que hemos creado. Esto nos garantiza su ejecución pese a no tener permisos de ejecución en él. La otra línea se ejecutará una vez finalizado el script y causa la muerte del proceso que lo invoca. En este caso, al haber arrancado el sistema en modo consola y monousuario, este "exit" producirá el reinicio automático del equipo.

28 noviembre 2012

Nos han robado por encima de nuestras posibilidades

España es una tecnocracia bananera. Con Zapatero, a base de ventas de bonos del Estado, fuimos intervenidos de forma encubierta por el Banco Central Europeo. Más tarde, con Rajoy, la intervención se convirtió en hipoteca con el agravio de que además produjo el mayor golpe de Estado de nuestra historia reciente.

Y es que con Tejero por lo menos el golpe fue fallido, pero la realidad es que llevamos cuatro años de recortes y siguen sin aparecer los "brotes verdes". Es más, según la OCDE tampoco habrán "brotes verdes" tanto en 2013 como en 2014. Sí señores, la tasa de paro alcanzará el 28% y nuestro producto interior bruto caerá el triple de lo previsto. Para hacerse una idea, todo esto indica que nuestra tasa de paro será casi equivalente a la de la Franja de Gaza, la región con la tasa de paro más elevada del mundo.

Y es que año tras año nos han ido recortando en Sanidad, Educación y Servicios. Nos han menguado las pensiones e incrementado la edad de jubilación. Han congelado los salarios de los funcionarios. Nos han subido los impuestos directos e indirectos. Nos han quitado derechos laborares tanto Zapatero como Rajoy. Y encima de gobernarnos mal, aún tienen el morro de decir que nos jodamos, de que defraudamos a hacienda y de que las familias que luchan por no ser desahuciadas se compran televisiones de plasma con el dinero del subsidio.

Veamos señorías, en tiempos de vacas gordas yo no pedí que me construyeran un aeropuerto en Castellón. Tampoco pedí tener una de los mejores locales de ópera del mundo en Valencia, ni un circuito urbano de fórmula uno. Si bien me parece correcto demostrar la grandeza de Valencia a nivel planetario, me parece demencial que se aprobaran unos monumentos con unos costes de mantenimiento tan elevados: Recordemos que Valencia no tiene el número de habitantes de Nueva York, Londres, Madrid o París. Tampoco pedí trenes de alta velocidad cuyo billete no puedo pagar, ni la construcción de una biblioteca en Galicia con capacidad para un millón de libros.

Tampoco pedí que se nacionalizara la banca ni que se sanearan las cuentas de estas empresas insalubres. Tampoco pedí que se indultaran por primera y segunda vez a los Mossos d'Escuadra hallados culpables en un caso de tortura. Tampoco pedí que Madrid fuera sede para los juegos olímpicos de 2012, 2016 y 2020. Para eso se ve que sí que hay dinero. Tampoco pedí que a los diputados se les diera un iPhone y un iPad "by the face". Tampoco les pedí a los diputados con residencia principal en Madrid cobrasen 1800 euros en dietas por desplazamiento. Tampoco pedí que se filtraran informes judiciales a políticos imputados por corrupción, con total impunidad, durante un pleno de las Cortes Valencianas.

Y cuando firmo peticiones como que se formalice la dación en pago y estas llegan al Congreso, estas son denegadas de forma sistemática. Desde 1985 se han presentado al Congreso un total de 63 medidas legislativas ciudadanas y el Congreso ha rechazado todas, pese a contar cada una de ellas con un mínimo de 500.000 firmas. No nos escuchan y no nos quieren oír y cuando salimos a la calle a protestar por el destrozo nacional que hacen, nos tratan de golpistas y de ir en contra de la voluntad de la mayoría de nuestros conciudadanos.

Señores, me tachan de anticonstitucional por pedir un cambio radical, cuando son ellos los anticonstitucionales. Lo dice el artículo 42 de nuestra Consitución: Todo español tiene derecho a una vivienda digna, pero permiten que la banca desahucie a familias sin ningún otro lugar a donde ir. Nos han privatizado la justicia, cuando la Constitución dicta que todos los españoles debemos de ser iguales ante la ley. Han legalizado que los inmigrantes sin papeles no tengan acceso a la sanidad pública, cuando la Constitución consagra el derecho a la protección de la salud.

En resumen, nos mean encima y dicen que llueve. Nos han estafado por encima de nuestras posibilidades y quieren que te quedes sentadito y tranquilete.

24 noviembre 2012

Programando en Android: Tu propia calculadora con App Inventor

Recientemente descubrí el App Inventor, una aplicación web elaborada por el Instituto Tecnológico de Massachusetts (el famoso M.I.T.) que permite crear, en un par de pasos, aplicaciones para el sistema operativo Android.

¿Cómo funciona App Inventor?
  • Por un lado accedes a su página web haciendo uso de una cuenta válida de Google. En esa página web puedes crear (o gestionar) tus proyectos, además de editar su interfaz gráfica. Todas las aplicaciones que creas se compilan en el servidor, de forma que no tienes que instalar ningún software en tu ordenador. Básicamente esta web te monta una apk lista para instalar en tu dispositivo Android.
  • Por otro lado, esta web te facilita la descarga de una aplicación Java, necesaria para editar la parte lógica de la aplicación. Toda la programación realizada es visual y se realiza rellenando piezas de puzzle.
Bien es cierto que, pese a ser muy sencillo de manejar, esta herramienta requiere ciertas nociones básicas de programación, pero eso sí, muy básicas. Eso sí, cabe destacar que esta aplicación web permite hacer aplicaciones simples y no grandes proyectos. Y es que pese a permitirte poder hacer uso de componentes de geolocalización, detección de los sensores o incluso de la cámara de fotos, hay que destacar que tanto el editor gráfico como el diseño de las funcionalidades son muy limitadas, además de que se da el limitante de que las aplicaciones finales no pueden pesar más de 5MB para poder ser compilables.

De todas formas, para mostraros las capacidades de esta web, os voy a demostrar cómo se puede emplear para realizar una calculadora.

1. Creando el proyecto.

Entramos en appinventor.mit.edu (página web del proyecto) y pulsamos sobre invent. Una vez ingresemos con nuestra cuenta de Google, pulsamos el botón New e insertamos un nombre para nuestro proyecto.


Y así luce la pantalla de edición de proyectos. En el centro tendremos la pantalla principal de nuestra aplicación Android. A la izquierda tenemos todos los componentes que podemos utilizar. Por último, a la derecha tenemos dos columnas: Una lista con todos los componentes que hemos añadido y las propiedades editables del componente seleccionado.


Para añadir un componente basta con seleccionarlo en la lista de la izquierda y arrastrarlo con el ratón hasta el lugar que nos interese. Para este ejemplo vamos a empezar añadiendo dos componentes: Una etiqueta (label) y una tabla (TableArrangement).


La etiqueta la usaremos como la pantalla digital de nuestra calculadora. Es decir, siempre que pulsemos una cifra, este "label" se irá actualizando. Además nos mostrará el resultado de la operación cada vez que pulsemos la tecla "=" o que concatenemos con otras operaciones.

Por ello, seleccionaremos el componente y editaremos la propiedad "text" para que su valor inicial sea "0". Además seleccionaremos el valor "Fill parent" dentro del campo "width". De esta forma este "label" ocupara toda la anchura de la pantalla.


Por su parte, el TableArrangement lo emplearemos para contener todos los botones de la calculadora. Para poder realizar tal acción, definiremos 4 columnas (propiedad "columns") y 4 filas (propiedad "rows").


A continuación llenaremos cada celda de la tabla con un botón nuevo.


El tamaño del texto de los botones no nos permite rellenar correctamente la tabla. Será necesario cambiar su texto (propiedad "text") para poder rellenar la última columna.


Por último, añadidmos un botón más debajo de la tabla, cambiándole la propiedad "text" por "=" y asignándole "fill parent" en el campo "width". Con ello ya tendremos la interfaz gráfica básica de una calculadora.


Antes de pasar a la parte lógica de la aplicación, seleccionaremos todos los campos y haremos uso del botón "rename" para asignarles un nombre más acorde con su funcionalidad. Esto nos permitirá programar de forma más cómoda.


Para editar la parte lógica debemos hacer clic en el botón "Open the Blocks Editor".


Este botón básicamente nos hace descargar una aplicación Java, por lo que es muy probable que tu navegador web te avise de ello:


Si tienes instalado Java 6 (o superior), no deberías de tener ningún problema para poder ejecutar la aplicación. Seguramente podrás arrancarla con hacer doble clic sobre ella. La aplicación te dará un error, debido a que nos hemos saltado el paso de configuración de drivers o la instalación del emulador de terminales Android. De todas formas no te preocupes, ese paso no es realmente necesario para poder montar tu aplicación.

Y esta es la interfaz gráfica del editor de bloques. Arriba tienes una barra con las opciones de la aplicación. A la izquierda una barra con las listas de acciones y de componentes y por último en la esquina abajo-derecha tienes una papelera para borrar piezas.


Si haces clic en "My Blocks" verás que salen listados todos los componentes que hemos añadido en la web del proyecto. Esta lista se genera de forma dinámica, si añades nuevos componentes o los borras en la web, aquí se irán actualizando:


Para demostrar su funcionamiento básico, en Button0 arrastraremos al panel principal la pieza "When Butto0.Click". Acto seguido seleccionaremos el componente LabelResultado (o como hayas llamado al "label") y le pegaremos la pieza "Set LabelResultado.Text to".


Nos interesa que cada vez que pulsemos un cero, este se añada a la pantalla digital de nuestra calculadora. Así que iremos a la pestaña "Built-in" y haciendo uso del componente Text iremos añadiendo las piezas "Join" y "Text".




Básicamente, acabamos de crear una función que significa lo siguiente: "Cuando pulsemos el botón 0, se añadirá 0 al final del texto". Si hiciéramos lo mismo para todos los botones numéricos (no lo hagáis), nos quedaría algo así:


No obstante siguiendo este funcionamiento habría que pensar que siempre que haya un 0 en pantalla, siempre que pulsemos un dígito acabaremos teniendo ese dichoso 0 a la izquierda, algo que no pasa con las calculadoras. Si nos fijamos, cuando en la pantalla digital aparece cero y pulsas otro dígito, la pantalla pasa a tener únicamente ese nuevo dígito.


Si tuviéramos que tener en cuenta eso una vez hubiéramos creado todas las acciones de botones, gastaríamos un tiempo tonto en actualizarlos uno a uno:


Así que lo más simple es hacer un proceso (bautizado como "addNumber"), que reciba como parámetro el número del botón. Este proceso analizará si ya existe un cero, para saber si machaca el valor de la pantalla digital o lo concatena a la derecha:


Esto ya parece más "actualizable" y mantenible:


Ahora pensemos detenidamente en el funcionamiento de una calculadora. Cada vez que pulsas un botón "+" o cualquier otra operación, se reinicia la pantalla para poder escribir un nuevo parámetro. Por lo tanto, nos hace falta saber dos cosas que habrá que recordar una vez hagamos la tecla "igual":

  1. Cuál es el número anterior al que hay en la pantalla para poder operar.
  2. Qué operación hay que realizar.
De esta forma, haciendo uso de la pestaña "Built-in", crearemos dos nuevas variables:


Ahora, haciendo uso de estas variables y de cómo realizar un proceso (visto antes sobre los botones numéricos), pensemos en el funcionamiento de una operación:
  • Necesitamos saber el número que hay en la pantalla.
  • Necesitamos saber la operación a realizar.
  • Por ejemplo, si es una suma, sumaremos el texto de la pantalla con la variable "LastResult" (el número que había antes de pulsar +).
  • Una vez sumado, actualizamos la pantalla con el resultado:

Y así quedaría una vez añadamos la resta, el producto y la división:


Y así quedarían los botones de operaciones:


Ahora tengamos en cuenta otra cosa. Cuando obtenemos un resultado, este se imprime en pantalla. No obstante, ese valor no se conversa cuando volvamos a pulsar un botón numérico. Es decir, si en pantalla me aparece como resultado el número 128 y quiero hacer ahora otra operación... pues si por ejemplo pulso la tecla "2" quiero ver en pantalla sólo un "2" y no un "1282". Así que nos hace falta almacenar una nueva variable, una que nos permita saber cuando se debe reinicia la pantalla cuando pulsemos un dígito:


Básicamente, cada botón numérico haría uso de este comportamiento:


Y habría que ponerlo del proceso "addNumber":


Por su parte, habría que hacer un "ClearScreen = true" al final  de la función de cálculo de operaciones:



Ahora vayamos con las teclas especiales: el botón "coma" para añadir decimales y el botón "C" para resetear la pantalla. En este caso, para hacer uso de decimales tendremos que añadir un punto "." al "label" de resultados. No obstante hay que tener en cuenta una cosa: Cuando añadas un "." para decimales, debes verificar que no exista ya más de uno en dicho label:


Por su parte, el botón "C" deber realizar un reinicio de todas las variables y actualizar el label de resultados con valor "0":



Con ello ya disponemos de una aplicación plénamente funcional. Guardaremos los cambios haciendo uso de "Save" (necesario para sincronizar los datos con el servidor). Una vez sincronizado, el botón pasará a llamarse "Saved" y será deshabilitado por la aplicación:


Una vez realizado el guardado, en la web del proyecto seleccionaremos el desplegable "Package for Phone" y seleccionaremos "Download to this Computer":


Esto hará que el servidor pase a compilar nuestra aplicación y como resultado, tras casi un minuto de cálculos, nos suministrará un archivo "apk" a ejecutar en nuestro dispositivo móvil. Para poder habilitar la instalación de software casero en tu dispositivo Android, deberás de ir a "Ajustes> Aplicaciones" y activar la opción de "Orígnenes desconocidos".



Puedes suministrar el fichero "apk" vía conexión USB o a través de alguna memoria externa. Sea como fuere, necesitarás disponer de algún navegador de archivos para poder localizar el instalable.


Seleccionándolo se te abrirá un sencillo menú de instalación:


Ahora mismo disponemos de una calculadora plénamente funcional:


Aún así hay que reconocer que nos ha quedado bastante fea, pero esto se puede corregir con dos sencillos puntos:

  1. Cambiar los colores de los componentes.
  2. Cambiar el tamaño de estos dependiendo del de la pantalla del dispositivo.
El primer paso no es muy complicado de hacer:


Para la parte del redimensionado, necesitaremos almacenar varias variables: La anchura de los botones, la altura de estos y el número de píxeles a dejar entre cada botón:



También nos resultaría útil conocer el número de columnas y de filas que va a tener nuestra pantalla. Sí, he dicho pantalla, no tabla. Si tenemos en cuenta el label de operaciones y el botón de resultado, estamos hablando de que tenemos 6 filas:


Este proceso podría sernos útil para cambiar la anchura de un botón:



No obstante podemos renombrar la función y hacer que no sólo cambie la anchura de un botón, si no también su altura:


Ahora pensemos en una serie de puntos:

  1. La anchura de todos los botones debe de ser "anchura total de la pantalla" dividido por el número de columnas que hemos definido.
  2. La altura de todos los botones debe de ser "altura total de la pantalla" dividido por el número de filas que hemos definido.
  3. Esta redimensión de componentes sólo debe de aplicarse cuando la aplicación arranque, así que realizaremos todos los cálculos sobre el componente "Screen1", haciendo uso de su función "When Screen1.Initialize".
  4. El único botón que no se verá afectado es el botón "igual".

El resultado sería el siguiente:



También sería interesante que el label de resultados tuviera la misma altura que los botones:



También nos interesa que el texto del label no se quede pequeño. Crearemos una variable global llamada "FontSize" y le aplicaremos un valor por defecto. Dentro de la función "When Screen1.Initialize" recalcularemos su valor, siendo 2/3 la altura de un botón. Al final de la función actualizaremos el tamaño de la fuente del label con el valor de dicha variable.






El resultado final de nuestro esquema sería el siguiente:



Para finalizar quedaría bien que elaboráramos un icono para nuestra aplicación. En este caso he dibujado una calculadora:


Acuérdate de redimensionarlo a un tamaño lógico de icono. Por ejemplo, a este le he puesto una anchura de 128 píxeles:


Para subir una imagen a nuestra aplicación debemos dirigirnos a la sección "Media" y seleccionar el botón "Upload new...".


Se nos abrirá un diálogo desplegable donde seleccionaremos el archivo de nuestra computadora a subir En este caso mi imagen "icon.png".


Para asignar nuestra imagen como el icono de la aplicación, seleccionaremos el componente Screen1 y marcaremos el "icon.png" de la lista que nos sale en la propiedad "Icon".


Este icono saldrá reflejado en el menú de instalación y en la lista de aplicaciones de nuestro launcher:



Y así queda mi calculadora con su nueva interfaz:



Y por último, aquí tenemos un vídeo con el resultado final:


Actualización:

En vista de que hay gente con problemas, os dejo aquí las fuentes de mi proyecto: