Simple World – Cousas de xentiña http://xoseotero.blogaliza.org De software libre, política e as miñas cousas. Ven, 05 Mar 2010 09:44:00 +0000 gl-ES hourly 1 https://wordpress.org/?v=4.7 Simple World 1.0b1 http://xoseotero.blogaliza.org/2010/03/02/simple-world-1-0b1/ Tue, 02 Mar 2010 04:46:07 +0000 http://xoseotero.blogaliza.org/?p=250 Simple WorldAcabo de publicar a primeira beta de Simple World -Anda cona, pero se o paisano este aínda andaba con iso…-. Só pasaron dous anos dende a anterior versión. En definitiva, o problema de quererlle chamar a algo beta en vez de alfa e tomarse en serio o que iso significa.

A novidade máis importante é que agora hai unha stdlib (biblioteca estándar) de SWL. Entre outras cousas hai implementadas varias estructuras de datos: pilas, listas, etc, un xester de memoria e un xester de interrupcións. Isto foi o que máis tempo me levou; case que 5000 liñas de código.

Outra novidade destacada é que agora se poden aceder a partes dunha palabra na vez de ter que aceder a toda a palabra. Por tanto, novas instrucións para aceder/modificar 16 (media palabra) e 8 (cuarta parte de palabra) bits.

En canto a novidades espectaculares, aínda nada. Nada de contorna gráfica; liña de comandos de toda a vida. Tampouco nada de bichiños novos. Pero, en principio agora é niso no que me poderei centrar ata a versión definitiva.

Ligazóns ó código fonte:

A lista completa de novidades completa:

  1. Engadida a stdlib (biblioteca estándar de SWL)
  2. Facer Simple World portable entre diferentes arquitecturas: big/little endian, 32/64 bits e varios UNIXes.
  3. Novas instrucións para aceder a 16 bits e 8 bits: loadh, loadhrr, loadhri, loadq, loadqrr, loadqri, storeh, storehrr, storehri, storeq, storeqrr and storeqri.
  4. Novas instructions para estender o signo de 16 bits e 8 bits a toda a palbra:: signh and signq.
  5. Renomeadas as instrucións multl e multli a mult e multi.
  6. Réstase o tamaño dos ovos ós pais.
  7. A CPU é menos resistente a erros cando se producen interrupcións que non pode administrar.
  8. O código dos bichos vellos pode mutar.
  9. Engadido o evento “mutation” que se envía cando o código do bicho muta.
  10. Os bichos perezosos, aqueles que non realizaron ningunha ación nos últimos ciclos, poden ser penalizados coa eliminación de parte da súa enerxía.
]]>
As primeiras mutacións en Simple World http://xoseotero.blogaliza.org/2008/05/12/as-primeiras-mutacions-en-simple-world/ Mon, 12 May 2008 16:13:00 +0000 http://xoseotero.blogaliza.org/2008/05/12/as-primeiras-mutacions-en-simple-world/ Simple WorldO obxectivo principal de Simple World é observa-la evolución dos bichos. Dende a publicación de Simple World 1.0a3, primeira versión na que se poden crear bichos, fixen un par de execucións do programa. Nas dúas execucións obtivéronse varias mutacións exitosas.

As mutacións só se producen no momento en que un bicho pon un ovo. As mutacións que terá un bicho son aleatorias e só dependen dun parámetro que controla a probabilidade de mutacións que se producen nun momento dado. É dicir, por adiantado non se pode saber se un ovo pode non sufrir ou non mutacións, e moito menos o número delas.

Despois das primeiras execucións que realicei saquei unha conclusión: as mutacións permítelle adaptarse ó medo ós bichos. Esta adaptación faise evidente cando, co tempo, tódolos bichos vivos comparten unha mesma mutación. Se tódolos bichos teñen a mesma mutación, pódese concluír que esta mutación provocou que estivesen mellor adaptados ó medio que aqueles que non a tiña. O normal é que os bichos compartan unha mutación porque teñen un ancestro común, pero podería darse o caso, moi raro, de que dous bichos sofren a mesma mutación.

Unha consecuencia da adaptación progresiva dos bichos ó medio é que se se introducen bichos orixinais, sen ningunha mutación, nun mundo con varias xeracións de bichos, os primeiros tenden a desaparecer moi rapidamente. En realidade, canto máis vello sexa o mundo, máis rápido desaparecen os bichos orixinais.

Ata o de agora fixen dúas execucións longas que acabaron en dúas ramas de mutacións que foron por camiños totalmente distintos. A continuación describirei o código orixinal de Brainless e as mutación máis exitosas, é dicir, aquelas que estiveron presentes en tódolos bichos vivos nun momento determinado.

Brainless (o bicho orixinal)

Brainless é o nome do, ata agora, único bicho que escribín para Simple World. Por tanto, tódolos bichos descenden deste código. O seu funcionamento é moi básico: Brainless móvese aleatoriamente (aidante/atrás, esquerda/dereita) ata que se atopa con algo e dependendo do tipo de obxecto co que se atope fai unhas accións ou outras:

  1. Se é comida cómea, pon un ovo e xira para evitar atoparse co ovo máis tarde.
  2. Se é un bicho atácao seguido ata que un dos bicho morra ou se vaia.

Brainless-1 (experimento sobre Simple World 1.0a3)

Neste experimento creei unha contorna de execución excesivamente favorable ós bichos: moita comida ó principio, un aporte periódico de comida durante toda a execución e unha probabilidade de mutacións do 0.1%. Isto acabou provocando que o mundo tendera a estar totalmente cheo, é dicir, cada posición ou estaba ocupada por un bicho (nos distintos estados: ovo, vivo ou morto) ou por comida.
Ó pouco de empeza-la execución obtívose a primeira mutación. Esta mutación provocou que o bicho só xirase despois de pór un ovo. O éxito desta mutación explícase de dúas formas:

  1. Como o mundo tendía a estar sobre poboado, para atopar comida é innecesario xirar.
  2. Os movimentos de Brainless son totalmente aleatorios, e por tanto, o bicho podía executar varios xiros seguidos sen se mover realmente.

Despois producíronse dúas mutacións moi ligadas entre elas. A primeira mutación provocou que cando un bicho se atopa con outro bicho, en vez de o atacar seguido, só o ataca unha vez e para. A segunda mutación provocou que nunca atacase. O éxito destas mutacións explícase no feito de que cando un bicho ataca réstaselle máis enerxía ó atacante que ó atacado. Por tanto, non compensa atacar e é preferible dedicarse só a comer comida.

A explicación do éxito da última mutación provocou que cambiara a forma en que se executan os ataques en Simple World. Na versión 1.0a4, a enerxía que se lle quita ó bicho atacado é un múltiplo da enerxía que usa o atacante, co que compensa atacar ós outros bichos.

Chegado a este punto acabei con este experimento.

Brainless-2 (experimento sobre Simple World 1.0a4)

Neste experimento tiven en conta os resultados do experimento anterior para crear unha contorna de execución menos favorable para os bichos. Creei unha contorna de execución relativamente favorable ós bichos: moita comida ó principio, aporte de comida cando houbese poucos bichos e unha probabilidade de mutacións do 1%. O aumento das mutacións provocou que os cambios de comportamento se produciran máis rápido pero que fose moi complexo seguir tódalas mutacións dos bichos.

A mutación máis salientable que se produciu neste experimento foi que os bichos deixaron de pór ovos. O éxito desta mutación explícase porque na versión 1.0a4 pór ovos é moi custoso en canto á enerxía necesaria. O curioso desta mutación é que se produciu en dous bichos ó mesmo tempo.

Esta mutación provocou dúas consecuencias negativas:

  1. Estes dous bichos acadaron unha cantidade de enerxía monstruosa e exterminaron ó resto dos bichos.
  2. Posto que os únicos bichos vivos non puñan máis ovos, o experimento acabou.

Na seguinte versión de Simple World terei que facer que penaliza-la idade dos bichos, provocando que co tempo o seu código mute.

]]>
Simple World 1.0a4 http://xoseotero.blogaliza.org/2008/04/14/simple-world-10a4/ http://xoseotero.blogaliza.org/2008/04/14/simple-world-10a4/#comments Mon, 14 Apr 2008 18:43:31 +0000 http://xoseotero.blogaliza.org/2008/04/14/simple-world-10a4/ Simple WorldAcabo de publicar Simple World 1.0a4. Tiña pensado que esta fose a beta 1, pero debido a que houbo máis cambios do que pensaba e que estes son incompatibles coas versións anteriores, decidín sacar unha cuarta versión alpha. Espero que agora sexa á definita…

Os cambios principais son:

  1. Novas instrucións para a CPU.
  2. Novos rexistros na CPU e renomeamento dalgún deles (sp, fp, cs).
  3. Cambios na base de datos.

O código fonte pódese descargar dende as seguintes ligazóns:

Xa me da medo dicilo… pero se non atopo nada estrano nos seguintes meses, non debería faltar moito para a primeira beta. Esta beta traerá, polo menos, un cambio na base de datos, pero teño pensado facer un programa que actualice a base de datos dunha versión para a máis nova así que non dará moitos problemas.

O ChangLog completo é este:

  1. Actualización á versión 2 da base de datos.
  2. Engadido o campo attack_multiplier (un multiplicador para a enerxía dos ataques) á táboa Environment.
  3. Elimación do campo energy_developed da táboa Environment posto que non se usaba.
  4. Engadido do rexistro fp (frame pointer) para axudar ós programadores a usar variables locais.
  5. Renomeado do rexistro itp a cs (control & status), que ten 16 bits para o itp.
  6. Renomeado do rexistro stp a sp.
  7. Engadida a directiva .ifndef para definiar un identificador so se non está definido.
  8. Permitir que as definicións se refiran a calquera cousa: un número, unha instrución, etc.
  9. Face-los saltos relativos ó pc.
  10. Engadidas as instrucións loadhi, callr, bz e bnz.
  11. Eliminadas as instrucións multlu, multlui, divu, divui, modu e modui por seren innecesarias.
  12. Cambio nas mutacións: rempraza-la permutación dunha palabra polo cambio dunha palabra.
]]>
http://xoseotero.blogaliza.org/2008/04/14/simple-world-10a4/feed/ 3
Simple World 1.0a3 http://xoseotero.blogaliza.org/2008/01/28/simple-world-10a3/ http://xoseotero.blogaliza.org/2008/01/28/simple-world-10a3/#comments Mon, 28 Jan 2008 06:21:40 +0000 http://xoseotero.blogaliza.org/2008/01/28/simple-world-10a3/ Simple WorldAcabo de publicar Simple World 1.0a3. Esta é a última versión alpha de Simple World. Con esta versión, toda a funcionalidade da especificación 1.0 está implementada. Isto quere dicir que:

  1. Os bichos pódense codificar.
  2. Os bichos interactúan co mundo.
  3. Os bichos podem pór ovos.
  4. O código dos ovos pode mutar.

O código fonte pódese descargar dende as seguintes ligazóns:

O seguinte paso será publicar un par de versións betas. Nestas betas, en principio, non se engadirá nova funcionalidade, só corrección de erros e novos bichos. Isto quere dicir que a versión 1.0 será un uso un tanto áspero posto que non terá interface gráfica. Isto terá que esperar para futuras versións.

]]>
http://xoseotero.blogaliza.org/2008/01/28/simple-world-10a3/feed/ 1
Simple World 1.0a2 http://xoseotero.blogaliza.org/2007/12/10/simple-world-10a2/ Mon, 10 Dec 2007 06:01:20 +0000 http://xoseotero.blogaliza.org/2007/12/10/simple-world-10a2/ Simple WorldSimple World 1.0a2 acaba de ser publicado. Segue sendo unha versión alpha, polo que a estabilidade do código é relativa e aínda non está implementada toda a funcionalidade. Incluso a especificación cambiou un pouco. Despois desta versión, teño previsto publicar unha terceira versión alpha, unha ou dúas betas, e por fin a versión final.
O código fonte pódese descargar dende:

As principais novidades nesta versión son:

  1. Os bichos morren se comezan unha ación pero non teñen enerxía suficiente para facela.
  2. A interrupción TimerInterrupt envíase a tódolos bichos vivos canda 64 ciclos.
  3. O evento Attack envíase ós bichos atacados.
  4. Implementáronse as accións eat e attack.

Esta versión permite que se produzan as primeiras batallas entres os bichos. Poden percorrer todo o mundo, obter información sobre todo aquilo que se atopan no seu camiño, atacar a outros bichos e comer comida. O único bichos presente nesta versión, brainless, pode facer todo isto.

]]>
Primeiro bug en Simple World 1.0a1 http://xoseotero.blogaliza.org/2007/11/14/primeiro-bug-en-simple-world-10a1/ http://xoseotero.blogaliza.org/2007/11/14/primeiro-bug-en-simple-world-10a1/#comments Wed, 14 Nov 2007 05:39:06 +0000 http://xoseotero.blogaliza.org/2007/11/14/primeiro-bug-en-simple-world-10a1/ Simple WorldPouco durou a ledicia. Esta primeira versión de Simple World é un pouco de portas para dentro. Necesitaba libera-lo código por aquilo de release soon, release often e xa había varios meses dende que anunciara a especificación de Simple World 1.0. Debido a que esta versión ten unha funcionalidade reducida e nada espectacular, decidín non publicita-la (freshmeat.net, sourceforge.net, etc). Só o anunciei aquí e na páxina do proxecto. Así que, as modestas 18 descargas dos dous primeiros días viñeron por sorpresa. Pero, como dicía, pouco durou a ledicia.

O mesmo día que publiquei Simple World 1.0a1 xa vin que brainless actuaba dun xeito raro: podía moverse unha única vez e despois só xiraba ó seu redor. Onte, ó día seguinte, descubrín de onde viña o problema: a implementación dun xenerador de números pseudo aleatorios era de risa. Despois de calcular un par de números aleatorios chegaba a un punto onde sempre devolvía o mesmo valor.

O algoritmo que escollera, linear congruential generator (LCG), non é ningunha marabilla. Se se usa para calcular valores nun espazo en dúas dimensións acaba devolvendo valores que se poden agrupar en distintas rectas separadas por unha distanza constante as unhas das outras. Ó final acabei mirando como se implementa o algoritmo LCG a bliblioteca C de GNU (glibc). Esta debería ser a implementación que debería estar en Simple World 1.0a1, pero sempre andamos con presas e claro…

Ó final, tomeimo a mal, e para Simple World 1.0a2 implementarei un xerador de números pseudo aleatorios máis “aleatorio”. Quedoume un resultado moi semellante ó usado pola implementación da glibc da función rand().

rand() en SW 1.0a1
Dispersión do xerador de números aleatorios en Simple World 1.0a1 (só hai 3 puntos distintos)
Como deber�a ser rand() en SW 1.0a1
Así debería funcionar (puntos colocados en varias liñas rectas)
rand() en SW 1.0a2
Dispersión do xerador de números aleatorios de Simple World 1.0a2

rand() en glibc
Dispersión da implementación de rand() da glibc

]]>
http://xoseotero.blogaliza.org/2007/11/14/primeiro-bug-en-simple-world-10a1/feed/ 2
Simple World 1.0a1 http://xoseotero.blogaliza.org/2007/11/12/simple-world-10a1/ Mon, 12 Nov 2007 17:45:12 +0000 http://xoseotero.blogaliza.org/2007/11/12/simple-world-10a1/ Simple WorldSimple World 1.0a1 acaba de ser publicado. Podes obter esta versión na sección de descargas de SourceForge.net.

Como se trata da primeira versión de Simple World, esta versión débese considerar coma unha versión 0.1. A razón para ter un número de versión tan “alto” é porque cada versión de Simple World fai referenza a unha especificación concreata. Así, a versión 1.0a1 é a implementación de parte da funcionalidade proposta na especificación 1.0 de Simple World.

O Simple World Language (SWL) considérase completo, polo que non deberían haber cambios. O compilador (swlc) está totalmente implementado. Co cal, xa se poden escribir os primeiros bichos para Simple World. O decompilador (swld) está totalmente implementado. Posto que os bichos aínda non poden evolucionar en Simple World, o decompilador non é moi útil neste momento.

Os bichos introdúcense no Mundo en forma de ovos que co tempo se acaban convertindo en bichos. Os bichos nesta versión só se poden mover e obter información sobre o Mundo. Ademais, os bichos, aínda que consumen enerxía, nunca morren.

Creouse o primeiro bicho para Simple World: brainless. Este bicho fai movimentos aleatorios ata que detecta un elemento que o evite. Se o elemento é comida ou un ovo, brainless cómeo. Se o elemento é un bicho, brainless atácao. Despois de comer, se ten enerxía dabondo, brainless crea un ovo. Debido a algún erro no código SWL do propio bicho ou no código para a obtención de números pseudoaleatorios, brainless acaba nun estado no que se deixa de desprazar e só xira.

]]>
Primeiro programa executado por SWcpu http://xoseotero.blogaliza.org/2007/07/11/primeiro-programa-executado-por-swcpu/ Wed, 11 Jul 2007 07:46:41 +0000 http://xoseotero.blogaliza.org/2007/07/11/primeiro-programa-executado-por-swcpu/ Simple WorldA CPU de Simple World (SWcpu) aínda non está acabada de todo, fáltalle envia-las interrupcións provocadas por instruccións ou direccións de memoria erróneas. Aínda así, a SWcpu xa executou o primeiro programa.

O programa en cuestión é moi sinxelo, xa que só calcula os números da secuencia de Fibonacci dende o 1 ata 32768 sen parar. Pero serviu para probalo compilador e a CPU.

Código fonte de fibonacci.swl Código obxeto executado por SWcpu
Código fonte de fibonacci.swl Código obxeto de fibonacci.swo
]]> Especificación 1.0 de Simple World http://xoseotero.blogaliza.org/2007/07/11/especificacion-simple-world/ Wed, 11 Jul 2007 07:21:46 +0000 http://xoseotero.blogaliza.org/2007/07/11/206/ Simple WorldDespois de varios meses de traballo, liberouse a versión definitiva da especificación de Simple 1.0. Algunhas cousas aínda poden cambiar, coma a biblioteca estándar de SWL, pero nada demasiado importante.

A especificación, en inglés e en formato ODT e PDF, pódese atopar na páxina de Simple World.

A maior parte da codificación xa está feita: a CPU e a base de datos. Espero que a primeira versión de Simple World saia nos próximos meses.

]]>
Páxina web de Simple World http://xoseotero.blogaliza.org/2007/07/10/paxina-web-de-simple-world/ Tue, 10 Jul 2007 21:42:23 +0000 http://xoseotero.blogaliza.org/2007/07/10/paxina-web-de-simple-world/ Simple WorldDende hai uns días está dispoñible a páxina web de Simple World. Pasou medio ano dende que creara o proxecto en SourceForge.net e algúns xa daban o proxecto por abandonado. Que pouca confianza!

Para a páxina web empreguei Drupal 5.1, o tema bluebreeze minimamente modificado e uns cantos módulos (Codefilter, Diff, Focus, XML Sitemap, Quote, TinyMCE SYSIWYG Editor e TrackBack).

O logotipo non é que sexa moita cousa, máis é todo do que son capaz coa miña nula habilidade artística. O logotipo pretende ser un par de bichos pelexando.

]]>