Archive for the ‘Programació’ Category

Introducció al homebrew (3 de 3)

Sunday, April 5th, 2009

En aquest tercer i darrer tutorial instal·larem un emulador de Nintendo DS que ens servirà per comprovar els resultats de les nostres aplicacions sense la necessitat de fer servir la consola portàtil.

Tal i com vam comentar en la primera part, el cartutx R4 ens servirà per carregar el nostre homebrew a la DS. No obstant, això només és pràctic una vegada els programes estan acabats i no pas pels que encara s’estan desenvolupant. Més que res per que cada vegada que volguéssim provar el programa en la consola hauríem de compilar, gravar el programa a l’R4, encendre la DS i observar els resultats. Per això instal·larem un emulador, el qual ens permetrà veure els resultats en el nostre ordinador de forma immediata, sense la necessitat d’haver de gravar el programa a l’R4 i encendre la DS.

Per acabar també instal·larem i configurarem un IDE que enllaçarem amb l’emulador i que ens ajudarà al moment d’escriure els nostres programes.

3.1 Instal·lació de l’emulador

Instal·larem l’emulador DeSmuME que per sort es pot instal·lar des dels repositoris d’Ubuntu escrivint una sola línia en el terminal:

$ sudo aptitude install desmume

$

3.2 Instal·lació i configuració de l’IDE

Com a entorn de desenvolupament instal·larem un eclipse, que tot i que en un principi està pensat per a desenvolupar projectes en Java, podem trobar versions preparades per a programar projectes en C i C++.

Obrim un navegador i descarreguem en la nostra home l’eclipse IDE per C/C++ des d’aquesta pàgina. Un cop descarregat obrim una sessió de terminal i el descomprimim:

$ tar -zxvf eclipse-cpp-ganymede-SR2-linux-gtk.tar.gz
$

Des del navegador d’arxius anem a la carpeta eclipse i executem el programa (és necessita tenir la màquina virtual de Java per fer-ho!). Al ser la primera vegada que l’executem ens demanarà de crear un directori de treball en la nostra home a on s’emmagatzemaran els projectes. Podem deixar tranquil·lament el nom el que ens proposa per defecte.

Acte seguit,

  • Tanquem la pestanya de Welcome
  • Des del menú anem a File -> New -> C Project

Screenshot 01

  • Li donem un nom al projecte (per exemple prova)
  • A tipus de projecte seleccionem Makefile -> empty project
  • Cliquem el botó Finish

Screenshot 02

  • Des del menú anem a File -> Import…
  • Seleccionem General -> File System
  • Cliquem el botó Next
  • Cliquem el botó Browse…
  • Busquem i seleccionem la carpeta template de les PAlib
  • Cliquem el botó Finish

Screenshot 03

  • Tornem al menú i cliquem File -> Properties
  • Seleccionem la categoria C/C++ Build
  • Anem a la pestanya Behaviour
  • Substituïm tots els camps all per build
  • Cliquem el botó Apply

Screenshot 04

  • Seleccionem la categoria C/C++ Build -> Build Variables
  • Cliquem l’opció Show system variables
  • Fem doble clic sobre les variables DEVKITPRO, DEVKITARM i PAPATH
  • Cliquem el botó Apply

Screenshot 05

  • Seleccionem la categoria C/C++ General -> Path and Symbols
  • Anem a la pestanya Includes
  • A Languages cliquem l’opció GNU C
  • Cliquem el botó Add…
  • Cliquem el botò d’File system…
  • Busquem i seleccionem la carepta lib/include/nds de les PAlib
  • Cliquem el botó Ok
  • Cliquem el botó Apply
  • Repetim el procés per al llenguatge GNU C++
  • Cliquem el botó Ok

Screenshot 06

3.3 Enllaçar l’eclipse amb l’emulador

Arribat en aquest punt només ens queda enllaçar l’entorn de desenvolupament amb l’emulador que hem instal·lat en l’apartat 3.1.

  • Des del menú anem a Run -> External Tools
  • Seleccionem External Tools Configurations…

Screenshot 07

  • Seleccionem Program
  • Fem clic amb el botó dret sobre Program
  • Creem una nova configuració

Screenshot 08

  • A Name podem posar DeSmuME
  • A Location posem /usr/games/desmume
  • A Working Directory cliquem Browse Workpsace…
  • Seleccionem el projecte i cliquem OK
  • A Arguments posem prova.nds (”nom_projecte” + “.nds”)

Screenshot 09

  • Cliquem el botó Apply
  • I per últim cliquem el botó Run

Això generarà un fitxer prova.nds (que posaríem a l’R4) dins la carpeta del projecte del nostre directori de treball, que l’emulador recuperarà com a paràmetre i executarà:

Screenshot 10

Ara només quedaria adquirir uns bons llibres de C, algun altre de videojocs, estudiar la gran varietat d’exemples que venen amb les PAlib, i començar a programar. Happy coding!

Enllaços per començar amb les PAlib

PAlib - Wiki
PAlib - Fòrums
Nintendo DS Development Tutorial :: PAlib

Fonts consultades

Toshen Project Devblog - Configurer Eclipse
PlayerAdvance.org - Utiliser Eclipse comme IDE

Introducció al homebrew (2 de 3)

Wednesday, April 1st, 2009

En aquest segon tutorial instal·larem en el nostre sistema les llibreries necessàries per poder desenvolupar aplicacions i jocs per a la nostra Nintendo DS.

Abans però, caldrà que tinguem instal·lats un parell de paquets els quals ens permetran compilar programes i descomprimir algun dels fitxers que descarregarem més endavant. D’aquesta manera, obrirem una sessió de terminal i executarem les següents comandes:

$ sudo aptitude install build-essentials

$ sudo aptitude install unzip

$

Una vegada fet això ja podrem instal·lar les llibreries específiques per al desenvolupament de la Nintendo DS: les devkitARM i les PAlib.

Les devkitARM són unes llibreries que formen part del projecte devkitPro i que han estat pensades per compilar programes per a dispositius amb processadors ARM (com ara la Nintendo DS, la Game Boy Advance o la GP2X). Treballen a un nivell baix de hardware, pel que escriure un joc des de zero fent servir aquestes llibreries pot ser força tediós. Es per això que també instal·larem les PAlib, unes segones llibreries que estan just per sobre les devkitARM (no treballen a un nivell tant baix de hardware) i que ens facilitaran la feina a l’hora de crear els nostres programes.

És important comentar que les PAlib són una mica antigues i només funcionen amb les versions del devkitARM que descarregarem a continuació. Si instal·léssim versions més noves podríem trobar-nos amb problemes a l’hora de compilar i els nostres programes no funcionarien.

2.1 Instal·lació de les llibreries devkitARM

Obrirem el navegador i descarregarem aquest fitxer en la nostra home. Quan s’hagi descarregat obrirem una altra vegada una sessió de terminal i crearem una carpeta anomenada devkitpro en la nostra home, hi posarem el fitxer que acabem de descarregar i el descomprimirem:

$ mkdir devkitpro
$ mv devkitARM_r21-linux.tar.bz2 devkitpro/
$ cd devkitpro/
devkitpro$ bzip2 -dc devkitARM_r21-linux.tar.bz2 | tar -xv
devkitpro$

Seguim treballant des del terminal per descarregar un parell de llibreries més, les quals desarem dins d’una carpeta que anomenarem libnds:

devkitpro$ mkdir libnds
devkitpro$ cd libnds/
devkitpro/libnds$ wget aquest fitxer
devkitpro/libnds$ bzip2 -dc libnds-20071023.tar.bz2 | tar -xv
devkitpro/libnds$ wget aquest fitxer
devkitpro/libnds$ bzip2 -dc dswifi-0.3.4.tar.bz2 | tar -xv
devkitpro/libnds$ wget aquest fitxer
devkitpro/libnds$ bzip2 -dc libfat-nds-20070127.tar.bz2 | tar -xv
devkitpro/libnds$

2.2 Instal·lació de les llibreries PAlib

Descarreguem les PAlib i les descomprimim dins la carpeta devkitpro:

devkitpro/libnds$ cd ../
devkitpro$ wget aquest fitxer
devkitpro$ unzip PAlib_080823_Archive.zip
devkitpro$

Un cop arribat en aquest punt ja tindrem les llibreries instal·lades en una estructura de directoris semblant a la següent:

/
|__ home
     |__ la_meva_home
          |__ devkitPro
               |__ devkitARM
               |__ libnds
               |__ Other Libs
               |__ PAlib

2.3 Variables d’entorn i prova de compilació

Ara només queda definir unes variables d’entorn i provar de compilar un dels exemples que venen amb les PAlib per comprovar que tot s’ha instal·lat satisfactòriament. Per fer-ho obrim el fitxer .bashrc situat a la nostra home (el fitxer és ocult!), i afegim les següents línies al final del fitxer:


# devkitPro
export DEVKITPRO=$HOME/devkitpro
export DEVKITARM=$DEVKITPRO/devkitARM
export PAPATH=$DEVKITPRO/PAlib/lib

Per acabar refresquem les variables d’entorn i provem de compilar un dels exemples des del terminal:

$ source .bashrc
$ cd devkitpro/PAlib/examples/Text/Normal/HelloWorld
devkitpro/PAlib/examples/Text/Normal/HelloWorld$ make

built … HelloWorld.ds.gba
dsbuild 1.21 - Oct 23 2007
using default loader
devkitpro/PAlib/examples/Text/Normal/HelloWorld$

Si veiem que la comanda make no torna ningun error i acaba amb les línies de “dsbuild 1.21 - Oct 23 2007″ i “using default loader”, voldrà dir que les llibreries s’han instal·lat correctament. Per contra, si observem algun error o avís, i un resultat diferent a l’esperat, voldrà dir que alguna cosa s’ha fet malament i haurem de repassar el procés d’instal·lació.

Fonts consultades

Wiki devkitPro:Getting Started/devkitARM
Wiki PAlib: Installing Your Dev Environment
Dev-Scene.com
ElOtroLado.net

Introducció al homebrew (1 de 3)

Tuesday, March 31st, 2009

Tant el Franc com jo hem parlat vàries vegades en els nostres blogs sobre aplicacions homebrew, les quals permetien ampliar les funcionalitats de les nostres Nintendo DSs amb programes de VeuIP, de missatgeria instantània i navegadors d’Internet, entre d’altres.

És per això que m’he engrescat a escriure una sèrie de posts en els quals aprofundirem més en això del homebrew, començant per definir-lo i acabant per muntar un entorn desenvolupament per a la distribució basada en GNU/Linux, Ubuntu.

1.1 Definició

S’entén per homebrew el conjunt d’aplicacions i jocs desenvolupats per “aficionats” de forma casolana per a un dispositiu en concret, normalment una consola de videojocs.

Teòricament és necessari adquirir llicències i entorns de desenvolupament cars per realitzar aplicacions i/o jocs per als diferents sistemes d’entreteniment. No obstant, gràcies a l’esforç de molts usuaris i de comunitats molt ben assentades es pot programar per a gairebé qualsevol dispositiu, sense la necessitat d’adquirir aquests entorns de desenvolupaments.

1.2 Consoles a considerar

Tal i com acabem de dir és poden desenvolupar aplicacions homebrew per a gairebé qualsevol consola. Per fer-ho, sovint s’han de manipular aquests dispositius (ja sigui per hardware o per software) per a que acceptin programes no oficials. No obstant, algun d’aquests dispositius no requereix ninguna modificació i n’hi ha prou amb un altre producte que permeti introduir els programes casolans de forma còmoda a la consola.

Nintendo DS
Nintendo DS Lite
La portàtil de l’empresa japonesa que es caracteritza per tenir dues pantalles (una d’elles tàctil), micròfon i Wi-Fi. Va ser llençada al mercat a principis de 2004 i en breu sortirà una tercera versió amb pantalles una mica més grans, dues càmeres de vídeo i un slot per a targetes SD.

Tot i que Nintendo no dóna suport oficial al homebrew per a aquesta consola (ni per ninguna), n’hi ha prou amb un cartutx com ara l’R4 per executar aplicacions i jocs homebrew en aquesta portàtil.

GP2X
GP2X
La consola open-source coreana basada en GNU/Linux i pensada per a executar homebrew.

Funciona amb targetes SD i malgrat que a nivell de hardware es inferior que la DS, té un aspecte molt positiu per al homebrew: el mateix fabricant facilita diversos entorns de desenvolupament per tal que els programadors hi facin les seves aplicacions i/o jocs sense cap tipus de restriccions.

Semblaria lògic, per tant, dedicar els següents posts a muntar l’entorn per a la GP2X. Tanmateix, ho acabarem fent per a la Nintendo DS ja que:

  • Des del punt de vista de hardware la DS és més interessant (té Wi-Fi, micròfon, acceleració 3D, pantalla tàctil, etc).
  • La bateria de la DS dura molt més que el que puguin durar unes piles bones en la GP2X.
  • La DS està molt més estesa que la GP2X.
  • Muntar un entorn de desenvolupament per a la DS en Ubuntu és, si fa no fa, igual de costós que per a la GP2X.

Fonts consultades

Wikipedia: Definició de homebrew (anglès)
Wikipedia: Definició de homebrew (castellà)
Wikipedia: Nintendo DS
Wikipedia: GP2X
Comunitat espanyola de GP2X
Revista digital Alt Magazine

Mozilla Add-Ons Workshop Madrid 08

Wednesday, December 17th, 2008

Spread Firefox

Aquest cap de setmana vaig assistir al Mozilla Add-Ons Workshop Madrid 08, un taller organitzat per Mozilla Europa, la Universitat Rey Juan Carlos i la gent de Mozilla Hispano. L’esdeveniment va tenir lloc al Medialab-Prado de Madrid, un hacklab orientat a la difusió de la cultura digital, situat a dos minuts de l’estació d’Atocha de la capital (ideal pels que hi arribàvem amb AVE).

El taller que va anar a càrrec de Paul Rouget (programador de Mozilla i European Technology Evangelist), va servir per introduir les diferents tecnologies que s’utilitzen en el desenvolupament de les extensions del navegador Firefox.

En Paul va començar explicant com funciona el navegador de Mozilla, així com els diferents llenguatges que utilitza el seu motor per interaccionar amb l’usuari i per mostrar els resultats per pantalla. Després d’això va passar a explicar un cas pràctic: una extensió de Firefox per a Tuenti que en Paul va desenvolupar per a l’ocasió.

Tot i durar menys de l’esperat la xerrada la vaig trobar força interessant i amena. No sembla massa complicat desenvolupar extensions per a Firefox, amb uns pocs coneixements de programació (una mica de JavaScript, CSS i XUL) ja es pot arribar a fer quelcom d’interessant. Sense anar més lluny en Paul va desenvolupar un senzill navegador en tant sols unes deu línies de codi.

Per acabar deixo un parell d’enllaços per a qui, al igual que jo, vulgui aprofundir més sobre les tecnologies que hi ha darrera d’aquest navegador:

- Mozilla Developer Central
- Mozilla Developer Center (anglès)
- Mozilla Developer Center (castellà)
- XUL Planet

DSLinux

Monday, December 31st, 2007

Per fi trobo una estoneta per escriure un parell de línies sobre la DSLinux, una distribució de GNU/Linux pensada per a la Nintendo DS. Ja fa uns quants dies que l’estic remenant i m’ha sorprès el bon ritme que porta el projecte.

Instal·lar-la és més senzill del que hem pensava i l’únic que s’ha de fer és baixar aquest arxiu i descomprimir-lo “a saco” dins l’R4. Al principi em vaig embolicar volent-lo instal·lar dins el SuperCard, però al final vaig desistir quan vagi veure que havia de formatejar la tarja microSD a FAT16 i aplicar un patch al software.

Així que res, R4 i ja està. Supersenzill!

Fent un ping a www.tecob.com

Encara no hi ha gestor de finestres però tot i així el sistema és prou complert: hi ha varis terminals, funciona el WiFi, té un navegador web en mode text, jocs (també en mode text, de fet to és mode text), porta l’editor vi, permet fer connexions ssh, etc. L’única pega que hi he trobat és la mida de les fonts del terminal que es veuen molt petites, però bé, serà qüestió d’esbrinar si es poden posar més grans.

Cada dia que passa em quedo més parat de les possibilitats d’aquesta consola i només pel hombrew ja val la pena comprar-la: navegadors d’Internet, programes de veu per IP, programes de dibuix, jocs, agenda personal, GNU/Linux, … només falta que llencin el sintonitzador de tele per a la DS a Europa i ja serà el gadget definitiu!

Actualització 10-01-2008: El Miquel em comenta que sí porta un entorn gràfic. És tracta d’un port de PIXIL i per executar-lo només s’ha d’escriure la següent comanda des del terminal:

>> /usr/pixil/nxstart.sh

Una mica inestable (i lent) però si s’acaba de polir serà força interessant. Gràcies Miquel!

SuperCard Lite

Friday, December 7th, 2007

SuperCard Lite (Micro)

Ja feia dies que l’R4 no anava massa fi: no el detectava la DS, no detectava la tarja microSD, es penjava mentre estava executant homebrew, etc. Així que farà qüestió d’una setmana vaig decidir jubilar-lo i comprar-ne’n un altre, i de pas, vaig aprofitar per demanar un SuperCard Lite (Micro), que a a l’igual que l’R4 també serveix per executar homebrew amb la Nintendo DS.

La diferència principal es troba en que el SuperCard es col·loca dins l’Slot-2 de la consola, mentre que l’R4 va dins l’Slot-1. I vet aquí la pregunta: per què comprar un altre cartutx per executar homebrew si amb l’R4 en tenia prou i anava la mar de bé? doncs per la senzilla raó de que el SuperCard Lite li dóna 32MB més de RAM a la DS.

Resulta que la DS només te 4MB per treballar (en què pensaven els de Nintendo? no n’hi podien haver posat una mica més?). Tanmateix, hi ha aplicacions que en necessiten més per poder treballar (com ara el Nintendo DS Browser o el DSLinux), pel que s’han de buscar solucions por donar-li a la portàtil més memòria. I la solució més senzilla es fer-ho amb cartutxos d’expansió col·locats a l’Slot-2.

Conclusió: que he comprat el SuperCard per tenir més memòria a la DS i poder provar el DSLinux, un Linux adaptat per a la petita de Nintendo. Ja fa temps que segueixo aquest projecte i portava uns quants dies amb ganes de provar-lo. A veure quan trobo una estona i el xafardejo una mica.

Programant robots

Wednesday, August 29th, 2007

Anatomy of a Robocode robot

Fa temps que vaig descobrir l’AT-Robots, un joc d’MS-DOS que consistia en programar un robot de batalla (que no deixava de ser un tanc amb un canó i un radar), i enfrontar-lo amb d’altres robots dins un simulador de batalles (un joc per a frikis al cap i a la fi).

La idea de programar robots i enfrontar-los en tornejos la trobo molt divertida, així que m’he posat a buscar algun d’aquests simuladors per tal de jugar-hi una mica. N’he trobat dos amb molt bona pinta, amb més bons gràfics que no pas l’AT-Robots (que ja fa temps que ha quedat obsolet) i més avançats, fins al punt de poder crear equips de robots que col·laboren entre sí per guanyar la batalla:

Robot Battle
- Plataforma: MS Windows.
- Llenguatge en que es programen els robots: RSL.
  (o Robot Scripting Language, una barreja de Basic, C i JavaScript)
- Darrera actualització del programa: 21 de novembre de 2004.

Robocode
- Plataforma: MS Windows, Mac OS X, GNU/Linux, etc. (és Java).
- Llenguatge en que es programen els robots: Java.
- Darrera actualització del programa: 26 d’agost de 2007.

D’entre els dos simuladors el que trobo més interessant és el Robocode. Va ser desenvolupat inicialment per un programador d’IBM per demostrar que amb Java es podien fer jocs. Actualment és un projecte open source i gaudeix de molt bona activitat (la darrera actualització va ser fa tres dies!). A més, el seu funcionament és independent del sistema operatiu pel que es pot executar en (gairebé) qualsevol plataforma.

Robocode 1 Robocode 2 Robocode 3

L’única pega que hi trobo és que el llenguatge que s’utilitza per programar els robots és el Java (que no és que m’agradi massa que diguem). Trobaria més interessant si l’aplicació utilitzés C, C++ o llenguatge ensamblador (o python) per programar els robots. No obstant, seria qüestió de llegir el manual i les guies de programació que hi ha per la xarxa, i fer un parell de robots de prova per poder començar a jugar amb el simulador. I així de pas aprendria Java in a funny way.

I vet aquí la pregunta: algú s’anima a programar un (o més d’un) robot amb el Robocode i quedar un dia per fer un torneig? Que si, que és Java i al principi serà una rotllo, però segur que tampoc és tant complicat i estarem aprenent un llenguatge amb moltes expectatives de futur (ejem, sense comentaris…).

Sinó, si algú té ganes de buscar i troba un altre simulador de característiques similars i multiplataforma, que ho digui! Totes les propostes per fer aquests tipus de tornejos seran benvingudes :D

Deixo els enllaços que he trobat d’IBM per si algú es vol acabar de decidir:

R4 Revolution for DS

Wednesday, May 23rd, 2007

R4 Revolution for DS

La setmana passada em va arribar (per fi) l’R4 Revolution. Un cartutx (no em sona malament ni res la paraula “cartucho” en català) per a la Nintendo DS, que combinat amb una tarja microSD permet executar backups de jocs i aplicacions hombrew sense necessitat de modificar la consola o canviar el firmware.

L’he comprat a través DiscoAzul.com, una empresa online que es dedica a la venta i a la distribució de productes relacionats amb el món dels videojocs. D’aquesta manera, i després d’haver llegit aquest review i passejat per uns quants fòrums vaig decidir compra-ls’hi aquest flashcart d’entre tots els que venen.

Encara que costi de creure no l’he comprat per poder executar backups de jocs de la Nintendo DS (de veritat que no), sinó que més aviat l’he comprat per poder executar homebrew. Sembla mentida però s’està programant un bon grapat d’aplicacions molt interessants i que proporcionen a aquesta consola portàtil noves funcionalitats:

  • OKIWI: Un navegador d’Internet lliure. Per navegar per Internet aprofitant que la consola disposa de Wi-Fi i d’una pantalla tàctil. Encara en fase alpha tot i que s’espera alliberar una versió funcional en breu.
  • Scumm VM DS: Un port de l’Scumm per poder jugar a jocs com el Monkey Island o el Day of the Tentacle amb la nostra portàtil. Només per aquest programa ja val la pena haver comprat el cartutx :D
  • DSiP: Una aplicació de veu per IP i que amb prou feines s’està començant a desenvolupar. Tant de bo arribi el dia en que es puguin fer trucades des de la DS fent servir un compte SIP.
  • DSLinux: Un port del sistema operatiu GNU/Linux per a la petita de Nintendo i tot el que això implica: sistema de fitxers, editor de fitxers, ssh cap a un altre ordinador via Wi-Fi, enviar i rebre e-mails, reproduir música…

A més, tinc ganes de programar alguna cosa per a la DS i aquest flashcart permet carregar el homebriew de forma senzilla. Prometo escriure algun post al respecte si és que algun dia m’animo a programar quelcom.