Secta Sectarium, documentación e investigación

El diseño de Secta Sectarium require de mucha documentación y trabajo de investigación previo para conocar los fundamentos básicos, no caer en errores contradictorios y ofrecer una evaluación más crítica del juego.

La idea

Siempre me he sentido atraído por las sectas y todos sus extraños ritos fundamentos en nada. Y quizá por ello me gustan más las sectas que no copian descaradamente ideas de religiones ya establecidas dándoles otra interpretación.

SectaTriptico

Últimamente he tenido más información acerca de las sectas y cuanta más información obtenía era necesario hacer algo que expresase todo este misterioso mundo.

ScientologyDVD

ScientologyDVDInterior

Por ejemplo este es un DVD que he recibido de Scientology (la Iglesia de la Cienciología) conocida por tener entre sus miembros a personalidades de Hollywood. Esta secta fue fundada por Lafayette Ronnald Hubbard, un escritor de ciencia ficción estadounidense que escribió Dianética y dio comienzo a la revolución. L. Ron Hubbard vivió una vida intensa relacionada con los viajes y el ejército. Finalmente se suicidó y dejó una fortuna de 600 millones de dólares.

L-Ron-Hubbard

¿Qué es una secta?

El diccionario de la RAE define secta como:

  1. Conjunto de seguidores de una parcialidad religiosa o ideológica.
  2. Doctrina religiosa o ideológica que se diferencia e independiza de otra.
  3. Conjunto de creyentes en una doctrina particular o de fieles de una religión que el hablante considera falsa.

Estas definiciones no me gustan mucho puesto que son demasiado abiertas a cualquier cosa y no introduce el significado que para muchos significa. Para mí, la diferencia entre religión y secta tiene que ver claramente con el control que ejerce sobre el individuo. Así pues a la pregunta ¿Es la Iglesia Católica secta? debo de decir un rotundo no. La Iglesia Católica no ejerce prácticamente ningún control sobre sus miembros. Es cierto que hay sacramentos como el bautismo y el matrimonio pero no son comparables con los que una secta en condiciones debería hacer, controlar las cuentas bancarias de sus miembros por ejemplo.

Las religiones son el mayor producto cultural de la humanidad, el más perfecto y muchas veces el más infravalorado. Una religión es una filosofía de vida.

Funcionamiento de una secta

Las sectas pueden tener muchos tipos de funcionamiento. Principalmente son fundadas por un líder carismático que ha tenido alguna revelación. Para conseguir atraer fieles se usan diversas técnicas. En el tríptico que poseo se dan 24 técnicas de manipulación que no voy a escribir pero las podeis leer aquí

TripticoInterior

Una buena manera de iniciar a alguien en una secta sería en una conferencia sobre un tema intrigante y misterioso (he visto carteles de sectas que hablaban de electrones y sus enseñanzas metafísicas), un DVD o un bonito libro de reflexión.

LibroSecta

Arquitectura

Ya centrándonos más en el juego de Secta Sectarium surge la duda arquitectónica. No todas las sectas tienen campos de trabajo, aunque en el juego tendrán que tener para dar más interés al asunto. Un estilo arquitectónico que se adapta muy bien a estas cosas es el panóptico. Se trata de que todas las personas estén en todo momento vigiladas en su interior. Estos diseños han sido llevados con éxito a cárceles, escuelas y manicomios desde el siglo XIX. El libro Vigilar y Castigar aportará más información al respecto. La Isla de Hashima en Japón, aporta un diseño interesante para sectas marinas. Llamaremos a este concepto Isla Malvada

Hashima

Más inspiraciones

Los Simpson, una de mis series favoritas tiene un episodio divertidísimo sobre los mvimientarios; una secta que se afinca en Springfield. El episodio se llama  The Joy of the Sect o La alegría de la secta en español.

TheJoyOfTheSect

La secta del banco Triodos Bank. Sí, ese banco ético fantástico se dedica a financiar su propia secta llamada la antroposofía, la cual también está basada en las geniales escuelas Waldorf que sacan tan buena calificación en PISA. Este tema es complejo y hay muy buena documentación en español en el blog de El Retorno de los Charlatanes.

También podríamos hablar como inspiraciones las inofensivas agrupaciones como

Otras fuentes que merece la pena ser mencionadas

El Soneto de la Secta

Admiraba yo a mi líder genial
una persona sencilla, compleja
que su nombre se te queda en la ceja
no puede haber nadie más fenomenal

Iremos a un planeta divertido
donde animales música cantan
y nuestros miedos humanos se espantan
y nadie vuelve a hablar del temido

Nuestro canto es de alabanza suprema
somos guiados por la fe, la razón
hablando tranquilamente del tema

Progresamos rápido cual neutrón
¿Quieres venir? Coge la barca, rema
Aquí te esperamos con ilusión

— Adrián Arroyo Calle

 

loading...

Secta Sectarium, JavaScript vs Rust

Acabo de decidirme por el próximo proyecto grande que voy a realizar, se trata de Secta Sectarium, un juego estilo tycoon sobre controlar una secta. Voy a intentar reflejar en este blog todo lo que pueda sobre el desarrollo.

Lenguaje de programación

Todavía no os voy a contar las mecánicas principales del juego así que vamos a ir directamente al tema técnico. Tenía serias dudas de cual usar. Me rondaban la cabeza C++, Rust y JavaScript.

C++

  • Pros
    • Alto rendimiento
    • Soporte multiplataforma (incluso para Haiku)
  • Contras
    • Tareas sencillas tienen que ser implementadas
    • Largos tiempos de compilación si usas librerías
    • Tampoco podía decidir si SDL o SFML

Rust

  • Pros
    • Alto rendimiento
    • Librerías fáciles de usar
    • Un lenguaje nuevo, con el que conviene acostumbrarse
  • Contras
    • Mal soporte en Windows
    • Poco soporte
    • Todavía no ha salido la versión 1.0

JavaScript

  • Pros
    • Soporte multiplataforma
    • Gran cantidad de librerías para todo
    • Lo conozco
  • Contras
    • Bajo rendimiento
    • Es fácil cometer errores simples

Al final me decanté por JavaScript (espero usar TypeScript de verdad) porque aunque el rendimiento puede ser peor, es un amigo (y enemigo a la vez, la historia es larga) conocido. Tiene un soporte para publicar juegos real (en contraposición a Rust) y es bastante rápido desarrollar.

Así que la elección de JavaScript es definitiva y de repente me surgen dos dudas:

  • ¿Es mejor dibujar un mundo 2.5D en WebGL o en Canvas?
  • ¿Grunt o Gulp?

WebGL o Canvas

Inicialmente pensaba hacerlo en Canvas, una API similar a la que esperaba usar en SFML o SDL con C++ o Rust. Fue cuando estaba viendo el issue tracker de un motor de 2.5D en JavaScript cuando comentaban que sería mejor usar WebGL por rendimiento. Y me surgió la duda. Sé que Canvas 2D es acelerado por hardware en Firefox pero ¿es algo en lo que se puede confiable? y aún siendo confiable ¿es peor el rendimiento de Canvas que WebGL?

Estuve investigando y resulta que WebGL es más rápido que Canvas en operaciones 2D si lo usas bien. Interesante concepto. En principio Secta Sectarium no va a ser muy exigente gráficamente así que acepto el desafío ya que soy algo familiar con OpenGL ES 2.0 y WebGL.

Grunt o Gulp

Luego me surgió una duda relacionada con la construcción del proyecto. Había usado Grunt anteriormente pero el esqueleto de juegos npm me quitaba las ganas de seguir usando Grunt. Era poco claro con tantas configuraciones. Sabía que existía Gulp, así que heché un vistazo y me han quedado buenas impresiones respecto a claridad. Así que uso Gulp.

Seguiré informando

Seguiré informando sobre Secta Sectarium y su desarrollo. Próximamente os enseñaré el proceso de documentación.

Introducción a D-Bus

Esta entrada la he realizado originalmente para el blog DesdeLinux

dbus

Si llevas algún tiempo en Linux quizás te hayas llegado a preguntar que es D-Bus. D-Bus es un componente incorporado no hace mucho a las distribuciones de escritorio en Linux que previsiblemente jugará un papel muy importante para la programación en Linux.

¿Qué es D-Bus?

D-Bus es un sistema de comunicación entre aplicaciones de muy diverso origen. Con este sistema podremos llamar incluso a aplicaciones privativas (si estas implementan D-Bus). No juega el mismo papel que una librería pues una librería no es un programa independiente y la librería forma parte de tu ejecutable. La idea de D-Bus está inspirada en los objectos OLE, COM y ActiveX de Windows. Los objetos COM de Windows ofrecen una manera sencilla de llamar a cualquier programa desde otro programa llegando incluso a poder incrustarse visualmente uno dentro de otro sin necesidad de usar el mismo lenguaje de programación. D-Bus no llega tan lejos pero ofrece esa comunicación de la que UNIX carecía.

¿Por qué es importante D-Bus?

D-Bus es importante dada la gran diversidad de lenguajes que pueden funcionar en Linux y la gran diversidad también de librerías. Pongamos un ejemplo práctico. Yo quiero mandar una notificación al sistema notify-osd de Ubuntu desde mi aplicación en Node.js. Primero tendría que ver que librería ofrece esa funcionalidad en el sistema, libnotify en este caso, y después debería hacer unos bindings para poder llamar la librería programada en C desde JavaScript. Además imaginemos que queremos hacer funcionar nuestra aplicación con un escritorio que no usa libnotify para las notificaciones.

Usando D-Bus

Entonces hemos decidido que vamos a usar D-Bus para crear la notificación de nuestra aplicación en JavaScript.

Hay 2 tipos de buses en D-Bus, un D-Bus único al sistema y un D-Bus para cada sesión de usuario. Luego en D-Bus tenemos servicios que son “los nombres de los proveedores D-Bus”, algo así como las aplicaciones D-Bus. Después en una estructura como de carpeta están los objetos que puede tener ese servicio o instancias y finalmente la interfaz es la manera de interactuar con los objetos de ese servicio. En este caso es muy redundante pues el servidor de notificaciones es muy simple.

¿Quién usa D-Bus?

  • com.Skype.API
  • com.canonical.Unity
  • org.freedesktop.PolicyKit1
  • org.gnome.Nautilus
  • org.debian.apt
  • com.ubuntu.Upstart

Para averiguar todos los servicios de D-Bus que tienes instalados puedes usar D-Feet

Usando Node con XULRunner y Gecko

Las aplicaciones basadas en HTML5 para el escritorio han ido en aumento. Soluciones como node-webkit, recientemente renombrado a NW.js, han crecido en popularidad. Juegos como Game Dev Tycoon o aplicaciones como Atraci o Popcorn Time son solo unos ejemplos de apliaciones que usan node-webkit. Sin embargo las personas que preferimos tecnología de Mozilla nos encontrabas con que no había nada que sirviese.

node-xulrunner

Así que tenía que hacer algo. De momento es más que nada una prueba de concepto sin nada reseñable y con miles de bugs potenciales. Lo he diseñado para ser llamado desde una API de CommonJS. Esto permitirá tener un cliente de línea de comandos de manera sencilla, pero de momento no lo voy a hacer. Os enseñaré a usarlo con otro método

Nuestra aplicación HTML5, Node.js, XULRunner

El primer paso será clonar el proyecto node-xulrunner de GitHub.


git clone http://github.com/AdrianArroyoCalle/node-xulrunner html5-app
cd html5-app
npm install

La estructura del proyecto ya es una aplicación empaquetable, de manera que solo tendremos que modificar ciertos ficheros. Necesitaremos editar el archivo test.js para indicar ciertas preferencias sobre la aplicación. Algunos parámetros interesantes son os que puede ser: win32, mac, linux-i686 o linux-x86_64 y version que debe coincidir con una versión de XUL Runner disponible y publicada. El resto de opciones son autoexplicativas cuando las veais. En mi caso test.js queda así:


var xul=require("./index.js");

var options={
os: "linux-i686",
version: "35.0.1",
name: "HTML5 App",
vendor: "Adrián Arroyo",
appVersion: "0.1.0",
buildId: "00000001",
id: "test@node-xulrunner",
copyright: "2015 Adrián Arroyo Calle",
width: 800,
height: 800
};

xul.packageApp(options);

Ahora debemos crear nuestra aplicación propiamente dicha. Se encuentra bajo el directorio app/ y concretamente el fichero main.js será el ejecutado nada más arrancar la aplicación. main.js puede usar todas las APIs de Node. De hecho si usamos npm en esa carpeta funcionaría correctamente. En mi caso:


var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(4200, '127.0.0.1');
console.log('Server running at http://127.0.0.1:4200/');

Y ahora los pasos mágicos. Vamos a la terminal y ejecutamos test.js con Node.


node test.js

Nos saldrá una advertencia y empezará a descargar XULRunner y Node.js. Este ejecución no creará ninguna aplicación. Para, ahora sí, crear la aplicación debemos llamar otra vez a test.js


node test.js

Y en la carpeta build/ tendremos la aplicación lista para ser probada. Simplemente tendremos que ejecutar app

HTML5App-XULRunner

Convertir a Haiku en rolling release

Las distros como Arch Linux han hecho famoso el concepto de rolling release. ¿No sabes lo qué es? Consiste en el software que está en constante actualización y elimina el concepto de versión, al menos como se pensaba de él. Por ejemplo en Ubuntu que no es rolling release el sistema se actualiza pero llegará un momento que para dar un cambio mayor deberemos cambiar a otra versión (de 12.04 a 14.04 por ejemplo). Arch Linux es rolling release y no tiene versiones, siempre que actualizas estás en la última versión.

Rolling release en Haiku ¿era algo esperado?

Seguramente la gente que conoce Haiku no piense que sea un sistema que aspirase a ser rolling release. Yo tampoco y de hecho no es rolling release oficialmente, sigue teniendo versiones y nightlies pero ahora y gracias al nuevo sistema de paquetería ha sido posible convertir Haiku en rolling release.

Los pasos

Los pasos a seguir son sencillos pero deben hacerse por línea de comandos. Así que abre la aplicación Terminal y escribe:


pkgman list-repos

Esto mostrará los repositorios que haya en el sistema. Tendrás que tener 1 por lo menos llamado HaikuPorts. Lo vamos a eliminar, pues está fijado a una versión y entraría en conflicto con los repositorios de rolling release.


pkgman drop-repo HaikuPorts

Y ahora añadimos el repositorio HaikuPorts de rolling release


pkgman add-repo http://packages.haiku-os.org/haikuports/master/repo/x86_gcc2/current

Ahora ya tendremos las últimas aplicaciones, sin embargo el sistema más básico (el kernel y el navegador) no se actualizarán. Debemos de añadir otro repositorio


pkgman add-repo http://packages.haiku-os.org/haiku/master/x86_gcc2/current

Y ya está. Ahora podemos actualizar el sistema entero (requiere reinicio para usar el nuevo kernel).

Updating


pkgman update

Otros repositorios

Todavía no ha salido la Beta 1 y ya hay repositorios externos para pkgman. Se añaden de igual manera que los anteriores.

  • Guest One’s bin ports: http://haiku.uwolke.ru/repo/binaries-x86_gcc2
  • Guest One’s Java ports: http://haiku.uwolke.ru/repo/java-ports
  • Clasqm: http://clasquin-johnson.co.za/michel/repo
  • BeSly: http://software.besly.de/repo
  • FatElk: http://coquillemartialarts.com/fatelk/repo

ListRepos