Gacela en la web con canvas

February 13th, 2010 No comments

Estos últimos días estoy trabajando en un compilador sencillo de Gacela a Javascript para poder desarrollar juegos para la web usando canvas. Aunque ando muy ocupado entre el trabajo y otros proyectos, intentaré tener disponible una primera versión lo más pronto posible. De esta forma la gente podrá porbar Gacela sin necesidad de instalar nada en sus ordenadores.

También estoy rumiando cómo hacer para usar en Gacela modelos desarrollados con Blender, pero para eso aún falta un poco.

Tags:

Primera versión de Gacela

January 24th, 2010 No comments

Por fin paso a publicar la primera versión de Gacela. Faltan muchas cosas y hay mucho trabajo que hacer, pero mis labores en la organización de la iParty 11 están empezando a quitarme demasiado tiempo y no quería esperar más.

En la web de Gacela he puesto enlaces a dos vídeos de demostración y al código del proyecto. Son dos ficheros: en uno se encuentra el código del intérprete de Gacela y en otro se encuentra el editor (en los vídeos lo vereis un poco mejor).

Las dependencias para compilar el intérprete son las siguientes:

  • gcl
  • libsdl1.2-dev
  • libsdl-image1.2-dev
  • libsdl-mixer1.2-dev
  • libftgl-dev
  • libsm-dev
  • libxmu-dev
  • libxaw7-dev
  • libgmp3-dev
  • libreadline5-dev

Y para compilar el editor también necesitareis libgtk2.0-dev

Como la documentación es casi inexistente responderé a cualquier pregunta desde los comentarios.

Tags:

Gacela

September 20th, 2009 4 comments

Gacela es una extensión del lenguaje de programación Lisp para desarrollar juegos de forma rápida y fiable. Llevo trabajando en esto durante un año aproximadamente (no de forma continuada) y aunque aún falta mucho por hacer no tardaré demasiado en publicar las fuentes, por lo que voy a hacer una pequeña introducción.

El nombre Gacela viene de GCL (GNU Common Lisp), que es la implementación oficial Lisp del proyecto GNU que uso para el proyecto. Con esto no quiero decir solamente que Gacela se basa en GCL, sino que el proyecto se encuentra identificado plenamente con las ideas del proyecto GNU. Y al mismo tiempo, intento transmitir la idea de que Gacela puede servir para programar juegos de una forma rápida e intuitiva.

Gacela funciona internamente con SDL y OpenGL. La versión actual sólo permite programación gráfica (sin sonidos) y de una forma algo elemental, pero de momento la gestión de memoria funciona bastante bien. Con Gacela el programador no se preocupa de reservar y liberar memoria; el lenguaje se encarga de reservarla cuando es necesario y de liberarla cuando ya no se necesita. Lisp es muy bueno en eso.

De momento uso el intérprete de Lisp para ejecutar los programas, pero tengo intención de desarrollar una interfaz gráfica que permita programar de forma más efectiva. Al redirigir la entrada y la salida del intérprete a otro programa es posible inyectar código en tiempo de ejecución, y es muy divertido. Lo he hecho de forma artesanal, redirigiendo la entrada y la salida a una terminal y programando un juego en tiempo de ejecución, con lo que no sabes si estas jugando o estas programando (¿hay alguna diferencia?).

También estoy trabajando en un módulo para exportar los juegos de Lisp/Gacela a C, para que puedan ejecutarse sin el intérprete, empaquetarlos, etc… esto aún lo tengo en la cabeza y en papel, pero es algo que tendré que hacer antes o después.

La única pega para muchos supongo que será el hecho de que Gacela es Lisp. Para mi es genial ;-)

Y para los impacientes ahí va el primer tutorial:

(run-game “Mi primer juego” (render-text “Hola mundo”))

Tags:

Infor&Games Festival

September 7th, 2009 3 comments

Para los despistados que aún no lo sepan, y es raro porque los organizadores del evento están removiendo cielo y tierra, del 17 al 20 de septiembre se celebra en Castellón el Infor&Games Festival, una especie de lan party mezclada con conciertos, zonas chill-out, paint-ball, dardos, etc.

Servidor acudirá a predicar en el desierto, me temo, con la típica charla sobre el software libre que la mayoría de mis lectores conocen de sobra. Personalmente, recomiendo acudir a la charla “Cómo montar una empresa de videojuegos y morir en el intento y tener que volver a jugar la fase con una vida menos” o a la charla sobre Bennu GD o a otras sobre seguridad o sobre montar máquinas recreativas, que parecen bastante más amenas, aunque si eres de esos que usa gNewSense, Trisquel o Ututo XS es posible que te interese pasar por allí el sábado 19 a las 17:00 y descubrir que somos muchos más de lo que creías.

Tags:

The Ad Bard Network

July 9th, 2009 No comments

¿Pongo publicidad en el blog? Es una pregunta que me he hecho a veces. La idea de ganar algo de dinerillo con algo que haces por diversión, aunque hablemos de unos pocos céntimos al mes, siempre es sugerente, pero siempre me han asaltado las dudas. Si pongo publicidad, ¿me estoy vendiendo de alguna forma? Y lo peor, ¿qué ocurre si los anuncios que aparecen son de software privativo o de empresas que desarrollan o apoyan el software privativo? El riesgo a que aparezcan anuncios que vayan en contra de las normas éticas del software libre es demasiado alto como para arriesgarse.

Por otro lado, las empresas que se dedican al mundo de la publicidad online suelen mantener sus algoritmos cerrados. Como no se puede consultar el código no hay forma de saber de qué forma se reparten los ingresos, cómo se decide qué anuncios son mostrados, qué palabras tienen más peso en esa elección, etc, etc… Es más, trabajar con esas empresas supone insertar trozos de código privativo o llamadas a código privativo desde un blog que defiende el software libre y que está desarrollado con software libre.

Evidentemente, la conclusión final es publicidad no.

AdBard Logo Pero hace algunos días me llego un correo sobre The Ad Bard Network, una red de publicidad online creada por la comunidad para la comunidad. Bajo la atenta mirada de la FSF, que es una muy buena garantía, tenemos la seguridad de que sus anuncios son únicamente de proyectos libres o de empresas involucradas con el movimiento del software libre. También los miembros de esta red, los que muestran los anuncios, tienen que estar involucrados en cierta medida, por lo que no veremos anuncios de Ad Bard en páginas de software privativo, o en contra del libre intercambio de ficheros, etc.

Los algoritmos, por supuesto, son libres y los desarrolladores del proyecto están abiertos a sugerencias y mejoras como en todo buen proyecto libre. Así que es posible saber de qué forma se calculan las ganancias o en qué se basa para mostrar un anuncio en concreto.

En estos momentos el proyecto está buscando beta testers, así que quizás me una. ¿Publicidad si o no? Quién sabe, pero al menos ahora tengo la certeza de que los anuncios no irán en contra de mis ideas.

Tags:

Chipmunk Game Dynamics

March 7th, 2009 1 comment

Chipmunk es una librería en C para simular espacios físicos en dos dimensiones con gravedad, colisiones, rebotes y más cosas. Es muy rápida en sus cálculos y la última versión es bastante estable, con lo que se convierte en una librería a tener en cuenta para el desarrollo de videjuegos. Se encuentra liberada bajo licencia MIT.

En la web de Chipmunk pueden verse vídeos que muestran lo que se puede hacer con esta librería, aunque el más sorpredente es sin duda el de Sketches.

Para instalar Chipmunk tenemos que descargar la última versión y descomprimirla en nuestro sistema. El fichero incluye, además de la última versión de la librería, unas demos que nos sirven como ejemplos para comprender el funcionamiento.

Una vez descargado y descomprimido, vamos al directorio src y ejecutamos

cmake .

para crear los ficheros Makefile necesarios para compilar e instalar la librería. Como Chipmunk está escrito en C99 tendremos que hacer una pequeña modificación en los ficheros generados por cmake antes de poder compilar. En el fichero CMakeCache.txt buscaremos la línea en la que se declara la variable CMAKE_C_FLAGS:STRING, que es donde se indican las opciones que se le pasarán a gcc y le asignamos -std=c99 -D_GNU_SOURCE para indicarle que compile siguiendo el estándar C99 e incluyendo las extensiones GNU.

Ahora ya podemos compilar con make e instalar con make install de la forma habitual. Veremos que despues de la instalación las librerías se han quedado en /usr/local/lib y los ficheros de cabecera en /usr/local/include, pero si usamos un sistema Debian o basado en Debian es preferible tenerlos en /usr/lib y en /usr/include. En cmake_install.cmake, si sustituimos:

SET(CMAKE_INSTALL_PREFIX “/usr/local”)

por

SET(CMAKE_INSTALL_PREFIX “/usr”)

tendremos el problema resuelto y podremos empezar a usar esta magnífica librería en nuestros programas.

E incluso podremos usarla en nuestros programas Lisp ;-)

Tags:

Aprovechando la potencia de GNU Common Lisp (GCL)

September 6th, 2008 No comments

Quien más quien menos ha oído hablar alguna vez de Lisp y del paradigma de la programación funcional. Lisp es un lenguaje de programación que no suele encontrarse fuera del mundo universitario y normalmente suele estar asociado a la Inteligencia Artificial (IA), aunque en realidad Lisp puede usarse para cualquier cosa e incluso puedo decir que hay problemas de complicada resolución con otros lenguajes de programación que en Lisp pueden ser bastante triviales. Aún así los programadores de Lisp no abundan en el mundo, y aquí en Castellón estoy bastante convencido de que me sobra una mano para contarlos.

No voy a hablar sobre los pros y los contras de programar en Lisp, pero si te gusta Lisp o te ha picado el gusanillo con mi breve introducción o quieres conocer algo más que lenguajes de programación imperativa, te recomiendo que leas alguno de los ensayos sobre Lisp de Paul Graham o alguna de las entradas de Slava Akhmechet en defmacro.

GNU Common Lisp, de ahora en adelante GCL, es la implementación oficial de Lisp usada en el proyecto GNU. Existen otras implementaciones libres de Lisp que tienen más utilidades que GCL, como librerías de sockets, multithreading, etc, pero el hecho de que GCL fuera la preferida por los de GNU me animó a jugar un poco con ella y he de reconocer que no me siento decepcionado.

Al contrario que con los compiladores de otros lenguajes, que compilan los programas a bytecode para despues ejecutarlos con una máquina virtual o compilarlos a lenguaje máquina, GCL compila a C para realizar una segunda compilación mediante gcc o el compilador de C que tengamos en nuestro sistema. Gracias a esta integración entre Lisp y C es posible programar con GCL usando C para bajo nivel (acceso a registros, memória, punteros, etc) y Lisp para alto nivel (gestión de listas, árboles, operaciones con funciones, macros, etc). Resumiendo, tenemos toda la potencia de C, lo que significa que podemos crear nuestras propias funciones de multithreading por ejemplo, y la potencia de un lenguaje de alto nivel como Lisp.

Para lograrlo necesitamos solamente tres macros de GCL: clines, defentry y defcfun. Eso e instalar GCL, claro.

Probaremos a hacer una prueba sencilla en la que definiremos una función en C que sume dos enteros y devuelva el resultado y usaremos esa función desde Lisp. Primero crearemos el fichero “misuma.lsp” con estas dos lneas:

(clines "int misuma (int x, int y) { return x + y; }")
(defentry mi-suma (int int) (int "misuma"))

Con clines podemos introducir cadenas de texto directamente en el código C resultado de la compilación del programa. En este caso declaramos la función misuma. Y con defentry declaramos la función mi-suma en Lisp, que recibe dos enteros como parámetros y devuelve otro entero desde la función C misuma.

Ahora ya podemos entrar en el intérprete de Lisp y compilar nuestro pequeño programa. Cuando se programa en Lisp no es necesario compilar ya que es un lenguaje interpretado (se suele compilar cuando el programa ya está acabado para ganar velocidad) pero debemos hacerlo si queremos integrar Lisp y C.

Compilamos con (compile-file "misuma.lsp") y cargamos el código objeto que hemos generado con (load "misuma.o"). Ahora ya tenemos nuestra nueva función C disponible en Lisp. Si ejecutamos (mi-suma 3 2) obtendremos 5. ¿Impresionante, verdad? ¿No? Bueno, puede que no lo parezca pero esto es la punta del iceberg, una punta muy pequeña, ya que lo mismo que hemos hecho con la suma podemos hacerlo con la librería matemática de C, o con las librerías GTK, o con Qt, etc.

Estoy realizando un proyecto en el que he integrado SDL con Lisp consiguiendo resultados bastante espectaculares, pero de eso hablaremos otro día.

Me he dejado lo mejor para el final. ¿Es posible hacer una función en la que se mezclen instrucciones de C con instrucciones de Lisp? Pues podemos hacerlo gracias a defcfun. Vamos a verlo.

Volvemos a editar “misuma.lsp” y añadimos las siguientes líneas:

(defcfun "static object otrasuma (int x, int y)" 0
"object z;"
"int s = x + y;"
('+ z)
((list z (int x) (int y)) z)
((cons z (int s)) z)
"return z;")

(defentry otra-suma (int int) (object "otrasuma"))

Si volvemos a compilar y ejecutamos (otra-suma 10 7) obtendremos la lista ((+ 10 7) . 17). Veamos cómo lo hace.

En primer lugar indicamos la cabecera de la función con su nombre y argumentos. El código en C se escribe usando cadenas de texto. Declaramos una variable z que contendrá la lista resultado y un entero s con el resultado de la suma.

La macro defcfun usa una sintaxis especial de Lisp que no voy a explicar (que para eso está la documentación) de forma que ('+ z) es lo mismo que hacer (setq z '+) desde el intérprete. Ahora ya tenemos que z contiene (+).

Con la siguiente instrucción creamos la lista que representa la operación, con lo que z pasa a contener (+ 10 7). Y finalmente hacemos el cons con el resultado de la suma que teníamos en s, con lo que nos queda la lista que hemos obtenido al ejecutar la función.

¿Y si ejecutamos (= (eval (car (otra-suma 10 7))) (cdr (otra-suma 10 7)))? Por la salud mental de todos espero que nos devuelva T ;-)

Tags:

El software libre sí crea mercado

February 21st, 2008 No comments

Alexey Leonidovich Pazhitnov, creador del juego Tetris, en una entrevista publicada en Consumer afirma que “eso [el software libre] nunca debería haber existido y a día de hoy no debería existir. Y le diré por qué: el software libre destruye mercado. Allí donde con el esfuerzo de grupos de personas se construyen posibilidades de mercado, de riqueza y de prosperidad, llega gente irresponsable y crea desarrollos alternativos que hunden a las empresas. Y eso no es bueno para el desarrollo de la tecnología; el software libre no tiene proyección de mercado, no crea riqueza, sólo es una muestra de rebeldía estéril.”

Como ya he dicho muchas veces no voy a entrar en si desarrollar software libre puede ser fuente de riqueza. Es un hecho. RedHat y Canonical con distribuciones, MySQL (ahora Sun) con bases de datos, Sun con suites ofimáticas, Menéame o Wordpress con aplicaciones web, etc, etc. Nadie puede negar que con el software libre se puede ganar dinero porque mucha gente lo está haciendo ahora mismo.

El problema para las empresas de desarrollo de software privativo no reside en si el código es accesible o no, o en que se puedan copiar los programas. El verdadero problema para ellos es que el software libre cambia las reglas del juego, les quita fuerza a los monopolios e incrementa la competencia. Pero estas empresas están tan acostumbradas a su dominio del mercado que son incapaces de competir.

Pongamos el ejemplo típico. Para Microsoft, Debian o gNewSense representan la competencia, una competencia fiera en el sector de los sistemas operativos. Pero también son competencia para RedHat o para Fedora. Y no digamos para Canonical ya que Ubuntu está basada en Debian. Sin embargo para estas empresas las distribuciones sostenidas por organizaciones no representan un problema tan serio. Claro, estas empresas están preparadas para moverse en un mercado más dinámico y competitivo, saben hacerlo bién y sacar dinero de ello.

Es evidente que el software libre no se pensó como una forma de ganar dinero. Ni tampoco la pintura o la música. Normalmente un pintor empieza a pintar cuadros porque le gusta, y si puede venderlos pues mejor. Si se hace famoso y llega a ganar mucho dinero podremos decir que se ha hecho rico gracias a la pintura. Pero no podremos decir que se hizo pintor pensando en hacerse rico (o por lo menos no lo pensaba en serio).

De la misma forma las características del software libre no se pensaron para hacer negocio, pero sin embargo puede hacerse. Nadie puede decir que no, porque es un hecho.

Tags:

Un canon para promocionar la cultura

February 3rd, 2008 1 comment

Ahora que se ha puesto tan de moda hablar sobre el canon, sociedades de gestión, etc, no quiero ser menos y también voy a contribuir con algo más de morralla blogosférica o blogocósica o como se llame.

Siempre me he posicionado en contra del canon, incluso cuando solamente se aplicaba en fotocopiadoras, cintas de video y otros medios más tradicionales, es decir, cuando nadie sabía qué era eso del canon (cuando era un chaval, vaya). Pero ahora me encuentro en una posición incómoda; desde que hablar en contra del canon se ha convertido en sinónimo de música gratis (olvidando el resto de artes como si no fueran cultura) ya no defiendo mis posiciones con la misma vehemencia. Y como me gusta llevar la contraria y crear polémica, pues alla voy: Sí al canon. Toma ya, con un par.

Tranquilos, no se me escandalicen ustedes. Los que me conocen bien ya se imaginarán que aquí hay trampa. ;-) En efecto, mi apoyo al canon va condicionado a una serie de requisitos que ahora mismo están muy lejos de darse. Veamos. Por un lado tenemos el derecho de copia privada, algo que debe garantizarse y potenciarse, y si me dejan incluso me atrevo a decir que lo mismo debería hacerse con los derechos de difusión y de distribución. No me cabe en la cabeza que un particular no pueda crear sus propios discos recopilatorios y ponerlos a la venta, por poner un ejemplo, siempre y cuando se respete la autoría de las canciones. Y por otro lado tenemos la necesidad de promocionar (pagar) para que la actividad de creación cultural no se vea perjudicada. Pero claro, eso hay que aclararlo y mucho.

Para empezar, el canon que tengo en mente debería ser gestionado de forma pública. Nada de sociedades privadas a las que nadie controla (excepto los que sacan tajada, claro) sino una gestión similar a las que se realizan con el I.R.P.F., la Seguridad Social, el IVA y demás impuestos. Las sociedades de gestión sobran, o como mucho su existencia tendría sentido si se comportaran de forma similar a como lo hacen los colegios oficiales. Pero nada de manejar dinero público, que lo es, no se sabe cómo, ni para qué, ni por quiénes.

Ese dinero se debe usar para promocionar la cultura. Aquí no hace falta ser muy listo para comprender que gente como Bisbal o como Boris o como Luis Cobos no necesitan el dinero del canon para seguir “creando”. Todo lo contrario, el canon debería pagar ayudas para esos jóvenes que trabajan de camareros o en la obra y por la noche tocan por cuatro duros en algún pub. O para esa señora que escribe después de acostar a sus hijos tras una jornada de once horas. O para las bibliotecas públicas (¿en qué cabeza cabe que las bibliotecas deban pagar?). O para ese señor que intenta vender sus cuadros en el mercadillo y que nadie conoce porque le falta un buen padrino.

Yo, como todo hijo de vecino, pago a la seguridad social y no lo hago para recibir atención médica, ni para mis familiares, ni para mis amigos. Si lo hago es por esos niños con cáncer que me rompen el corazón, por esos abuelitos con alzheimer, por toda esa gente que sufre y que gracias a ese dinero que pagamos pueden luchar por conseguir una vida normal sin que por ello se tengan que arruinar sus padres o sus hijos.

Y por eso quiero pagar el canon. No para que Ramoncín siga viviendo de la sopa boba (que seguro que sin canon puede hacerlo igual de bien) sino para que el colegio de mi barrio, o del tuyo, o del tuyo, pueda dar clases de piano a esos jóvenes talentos que se desperdician un día sí y otro también porque ni ellos mismos han tenido la oportunidad de darse cuenta.

Tags:

Pequeña guía de la GPLv3

November 11th, 2007 No comments

El FSF Compliance Lab ha preparado una pequeña guía de la GPLv3 para desarrolladores, explicando de forma fácilmente comprensible los cambios más importantes de la nueva licencia.

La GPLv3 es muy similar a su antecesora; el espíritu es el mismo, usar las leyes de copyright para preservar la libertad de los usuarios, al contrario de lo que ocurre con el software privativo.

Haciendo un poco de memoria, decimos que un programa es libre si un usuario puede:

  • Usar el programa para cualquier propósito.
  • Compartir el programa con otras personas.
  • Modificar el programa para adaptarlo a sus necesidades.
  • Compartir las modificaciones efectuadas en el programa.

Si ese programa se encuentra protegido además por una licencia como la GPL sabemos que ese programa seguirá siendo libre independientemente del soporte en el que se encuentre o de quién sea su distribuidor, lo que se conoce como “copyleft”.

La GPLv3, al igual que sus antecesoras, nos proporciona esta seguridad aunque con un texto más claro y fácil de leer, más internacional (se han tenido en cuenta las peculiaridades jurídicas de distintos países) y más adaptada a las nuevas formas tecnológicas de restringir la libertad de los usuarios.

Es en este último punto dónde más ha avanzado la nueva versión de la GPL.

Los programas con GPLv3 están a salvo de la “tivoización”, la posibilidad de impedir de forma física (mediante contraseñas, criptografía u otras formas de protección) que los usuarios puedan estudiar y/o modificar los programas, incluso aunque sean GPL. Con la nueva versión no se prohiben estas formas de protección, pero se obliga a que el usuario pueda acceder a los programas (conociendo las contraseñas, con claves criptográficas propias, etc.) de forma que sus libertades no se vean cohartadas.

A estas alturas todo el mundo conoce o a oído hablar del DRM. Existen leyes a nivel europeo que prohiben el desarrollo de programas para saltarse las protecciones DRM (juicio contra DVD Jon). La GPLv3 permite usar código GPL para implementar sistemas DRM pero la sección 3 indica que estos sistemas no serán considerados como medida efectiva de “protección” tecnológica, por lo que es posible escribir programas que rompan el sistema de protección y distribuirlos sin infringir ninguna ley.

Los programas protegidos mediante la GPLv3 también proporcionan a sus usarios la seguridad de que no podrán ser demandados por infracción de patentes de software, ya que tienen la obligación de venir acompañados de las apropiadas licencias de uso de patentes. Este tema no nos preocupa demasiado en Europa, al menos de momento, pero siempre es de agradecer.

La GPLv3 protege de forma más efectiva la libertad de los usuarios y también permite una mayor cooperación entre la comunidad del software libre. Existen otras licencias para software libre, cierto, pero no encontrarás a nadie más preocupado por la libertad y la ética que la gente que ha trabajado para que esta nueva versión de la GPL sea una realidad.

Tags:
-->