miércoles, 24 de diciembre de 2014

Cómo convertir una RaspberryPi en una consola de juegos retro


  • Descargar la imagen de la SD de RetroPie: http://blog.petrockblock.com/retropie copiar contenido a la SD siguiendo las instrucciones
  • Una vez arrancado el sistema (EmulationStation sobre Raspbian), pulsamos F4 para salir al terminal y ejecutamos: sudo raspi-config, y una vez dentro del programa:
    • Elegir "Expand Filesystem" para usar todo el espacio disponible de la SD
    • En Internationalisation options elegimos zona horaria, ajustes regionales y teclado
    • Salimos al terminal de nuevo
  • Ejecutamos: sudo ./RetroPie-Setup/retropie_setup.sh:
    • Elegir "SETUP"
    • Elegir "Register RetroArch controller" para configurar los gamepads para usar en los juegos.
    • Al hacer lo anterior, se habrá creado un fichero en /opt/retropie/emulators/RetroArch/configs/ (podemos identificarlo por la fecha de creación). En mi caso es USBGamepad.cfg. Este fichero contiene la configuración de los botones para usar en los juegos. En este fichero podemos añadir la combinación de botones que queremos usar para salir de un juego al menú usando el gamepad (respetando los espacios a ambos lados del signo igual):
      input_enable_hotkey_btn = "8"

      input_exit_emulator_btn = "4"

      Siendo los números correspondientes a los botones que quieras usar para formar la combinación para salir del juego.
    • Salir al terminal
  • Si tienes que configurar la wifi, lo más sencillo es entrar al escritorio con startx y lanzar este programa desde el menú: Internet -> wpa_gui
  • Renicia el sistema, y automáticamente volverá a entrar en EmulationStation y nos pide configurar el gamepad para usar en el frontend
  • Para copiar la ROM, accedemos a la carpeta compartida "roms" de la raspberry pi y copiamos las roms en los directorios correspondientes
  • Para que las ROMs aparezcan en EmulationStation basta con salir (F4) y volver a entrar ejecutando: emulationstation
  • Una vez dentro de EmulationStation, puedes pulsar el botón que has definido como Start para acceder al menú. Aquí puedes cambiar algunas cosas de la configuración, y bajarte las carátulas de los juegos.
  • Para configurar los controles en MAME: abre algún juego y luego pulsa la tecla tabulador para acceder al menú.
  • Si quieres quitar algunos emuladores de EmulationStation sólo tienes que editar el fichero /etc/emulationstation/es_systems.cfg y comentar los emuladores que no quieras ver.
Si estás usando un adaptador Retrobit para conectar tus mandos de consola original y no te funcionan las teclas de dirección izquierda y arriba, aquí tienes la solución: http://www.raspberrypi.org/forums/viewtopic.php?f=78&t=36564&p=487878&hilit=retrobit#p487878

Más info y datos sobre como configurar retropie: http://www.elotrolado.net/hilo_hilo-oficial-retropie_2022609

martes, 23 de diciembre de 2014

Cómo hacer y restaurar (o clonar) tarjetas SD con OSX

En el caso de que tengas una Raspberry Pi, y un Mac, te vendrá bien saber cómo hacer copias de tus tarjetas SD.

Lo primero es, por supuesto, introducir la tarjeta SD en el lector.

Lo siguiente es saber qué identificador se le ha asignado a la tarjeta SD:

diskutil list

Imaginemos que se le ha asignado el identificador /dev/disk2. En lugar de usar /dev/disk2 usaremos /dev/rdisk2 (acceso en modo RAW, es más rápido). Entonces para hacer una copia de seguridad basta con ejecutar:

sudo dd if=/dev/rdisk2 of=backup.dmg bs=1m

Y para restaurar una copia (Si da el error "Resource busy", hay que abrir la "utilidad de discos" y desmontar la partición montada):

sudo dd if=backup.dmg of=/dev/rdisk2 bs=1m

También podemos crear copias de seguridad comprimidas:

sudo dd if=/dev/rdisk2 bs=1m | gzip > backup.gz

Y luego restaurarlas así:

gzip -dc backup.gz | sudo dd of=/dev/rdisk2 bs=1m

martes, 2 de diciembre de 2014

Creando capturas de pantalla para promocionar tu app Android

Para hacer buenas capturas de pantalla, necesitaremos dos cosas:
En la web del primer punto, tenemos varios dispositivos a elegir, pero cada dispositivo sólo aceptará imágenes con una determinada relación de aspecto. Por lo que si nuestro terminal no tiene dicha relación de aspecto, o bien usamos el emulador de Android (¡muy lento!), o bien usamos esta app para cambiar el "aspect ratio" de la pantalla de nuestro terminal:
Las capturas realizadas, tras cambiar la relación de aspecto con esta app, tendrán dos barras negras. Podemos recortarlas, por ejemplo, usando ffmpeg (ver script más abajo).

En lugar de hacer las capturas de pantalla usando el terminal, es mucho más cómodo usar adb. Por lo que podemos usar este script para hacer la captura de pantalla, y recortar la imagen:

adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png
adb shell rm /sdcard/screen.png

DATE=`date +%Y-%m-%d-%H-%M-%S`
./ffmpeg -i screen.png -vf "crop=720:1280:24:0" screen-$DATE.png

rm screen.png

En este script se está recortando la imagen a 720x1280, comenzando en x=24 porque la captura original está hecha con una resolución de 768x1280. Por tanto (768 - 720) / 2 = 24.

Una vez hecha la captura, con la barra de estado a nuestro gusto, la "pasamos" por el "Device Art Generator" y ya tenemos nuestra captura de pantalla perfecta:


lunes, 29 de septiembre de 2014

Learning AndEngine: Aprende a crear juegos para Android

Si estás pensando en desarrollar juegos para móviles, y en especial para Android, entonces AndEngine es el motor que necesitas, y este el libro para aprender a desarrollar con él: http://bit.ly/1udi1vz.

Con este libro (en el que he tenido el placer de colaborar como revisor técnico) aprenderás a desarrollar un juego desde cero, y todo explicado de forma clara, detallada y con ejemplos. Desde la idea, hasta la publicación en Google Play.


lunes, 18 de agosto de 2014

Instalación de ArchLinux en Macbook Pro Retina (dual boot)

En el wiki de ArchLinux tienes una guía detallada (y aquí otra específica para el modelo 13" Late 2013) que te explica cómo instalar ArchLinux en tu Mac. Lamentablemente está muy enrevesada, y algunas cosas no están actualizadas. Por lo que aquí resumo los pasos que he seguido para instalar ArchLinux en mi Macbook Pro Retina 13" Late 2013:
  1. Entra en OSX de forma normal
  2. Descarga el último Archboot y crea un instalador USB
  3. Utilizando "Utilidad de Discos" reduce el tamaño de la partición que contiene OSX
  4. Descarga rEFInd y extrae los ficheros
  5. Instala rEFInd usando install.sh --alldrivers . Es curioso que en el wiki de archlinux indique que instales rEFInd usando --nodrivers, porque si haces esto rEFInd no podrá leer tu partición de Linux, ya que no tiene los drivers correspondientes.
  6. Reinicia con el USB insertado, pulsa ALT durante el inicio para poder arrancar desde el USB
  7. Cuando aparezca el instalador, pulsa Fn+Alt+F2 para acceder a un terminal. Ejecuta cgdisk /dev/sda. Si al redimensionar la partición de OSX habías creado otra, bórrala. Crea una nueva partición de tipo "Linux filesystem" dejando un hueco de 128MB (escribiendo +128M cuando te pregunte "First sector")
  8. Guarda los cambios (seleccionando la opción Write) y sal de cgdisk
  9. Vuelve al instalador pulsando Fn+Alt+F1
  10. Instala ArchLinux de forma normal, pero sin instalar ningún bootloader
  11. Accede a un terminal (Fn+Alt+F2) y crea, en la partición en la que acabas de instalar Arch, el fichero /boot/refind_linux.conf añadiendo esta línea:
    "Default" "rw root=UUID=<UUID> rootflags=data=writeback libata.force=noncq"
    Tienes que reemplazar <UUID> por el valor correspondiente. Puedes obtener este valor ejecutando blkid /dev/sda4 (sustituyendo sda4 por la partición donde estás instalando Arch). Rootflags y libdata.force sirven para optimizar el rendimiento del disco duro SSD.
  12. Apaga el mac y quita el USB
  13. Al arrancar rEFInd detectará tu instalación de Arch y te permitirá seleccionar con qué SO arrancar
  14. Configura la red y conecta a una red usando wifi-menu
Si quieres redimensionar la partición de OSX, hazlo con la "Utilidad de Discos" desde OSX. Si quieres redimensionar la partición de Linux, hazlo desde GParted.

Si quieres eliminar rEFInd, basta con eliminar el directorio /EFI/refind.

martes, 29 de julio de 2014

Scripts para Linux para crear y subir backups de tu servidor a Google Drive

Para poder subir archivos a Google Drive mediante su API hay que acceder a la consola de desarrollador de Google (https://console.developers.google.com/project), crear un nuevo proyecto, activar Drive API, y en el apartado "Credentials" crear un nuevo Client Id.

En este enlace podemos encontrar un buen script PHP para subir ficheros a Google Drive: http://ben.akrin.com/?p=2080. Al probarlo con mi cuenta de Drive, me surgieron dos fallos. Así que lo he modificado para corregirlos (He reducido el "chunk size" y he modificado la función parse_response para obtener el último HTTP header en caso de recibir varios, ya que Google me estaba enviado dos códigos HTTP (100 y 308) en la misma cabecera). Lo puedes conseguir aquí: https://github.com/sjvc/backup-linux-to-google-drive/blob/master/google_drive_uploader.php. Hay que configurar el Client ID, y el Client Secret que encontrarás en tu consola de desarrollador de Google (apartado "Credentials" de tu proyecto). También necesitarás el "refresh token", esto lo puedes obtener usando este script https://github.com/soulseekah/bash-utils/blob/master/google-oauth2/google-oauth2.sh obtenido de aquí: http://codeseekah.com/2013/12/21/headless-google-drive-uploads (esta web explica otra forma de subir los ficheros, pero tiene el problema de que usa el "auth token" y este caduca después de una hora tras haberlo creado. Sin embargo, nos sirve su forma de obtener el refresh token).

Puedes usar el siguiente script para comprimir y subir directorios: https://github.com/sjvc/backup-linux-to-google-drive/blob/master/backup-dirs.sh


Y este otro para crear, comprimir y subir bases de datos mysql: https://github.com/sjvc/backup-linux-to-google-drive/blob/master/backup-dbs.sh