Software – 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 As avantaxes dos sistemas de control de versións distribuídos http://xoseotero.blogaliza.org/2010/03/05/as-avantaxes-dos-sistemas-de-control-de-versions-distribuidos/ Fri, 05 Mar 2010 09:44:00 +0000 http://xoseotero.blogaliza.org/?p=256 Toca programa de testimonios: Eu era un usuario de subversion que durante moitos anos estivo moi satisfeito, ata que hai uns poucos meses coñecín git. Dende entón, de poder elexir, non volvería a tocar subversion ou calquera outro sistema de control de versións centralizado. De igual xeito que subversion supuña máis liberdade fronte a CVS, os sistemas de control de revisións distribuídos supoñen máis liberdade fronte ós centralizados. E é moi doado acostumarse ás novas liberdades.

Os sistemas de control de versións distribuídos (SCVD en adiante) libres non son novos: GNU arch comezou no 2001, bazaar, git e mercurial no 2005. O desenvolvemento de GNU arch abandonouse no 2008 debido á súa falta de competitividade co resto de alternativas libres. Por que se produciu esa explosión de SCVDs no 2005? Por un claro exemplo de porque un non se pode fiar do software privativo. BitKeeper, un SCVD privativo, durante un par de anos permitiu o uso dunha versión moi capada de forma gratuíta para o desenvolvemento de proxectos de software libres. No abril de 2005 anunciouse que este servizo gratuíto deixaríase de dar e uns días despois, no mesmo abril, anunciáronse tanto git coma mercurial. Software privativo is evil!

Se non probara antes un SCVD foi por non entender que é un SCVD, algo que penso é bastante común. Eu entendía as avantaxes que un SCVD supuña para un proxecto grande, pero non para uso persoal. A diferenza entre un sistema de control de versións centralizado e un distribuído é que no centralizado existe un respositorio (código fonte e historia dos cambios feitos) central mentres que nun sistema distribuído cada usuario ten un repositorio (aínda que hai un repositorio que fai de repositorio principal do proxecto). Os dous sistemas teñen fluxos de traballo distintos. Este novo fluxo de traballo permite facer cousas imposibles cun sistema centralizado.

Uns exemplos do que permiten os SCVD:

  1. Arranxo de erros triviais dun commit: Pódese arranxar un erro nun commit que aínda non se subiu sen ter que crear outro commit especificamente para isto. Con isto simplifícase a historia do repositorio ao eliminar commits innecesarios.
  2. Reordenación de commits: Pódense organizar os commits que aínda non se subiron e colocar xuntos os commits relacionados. Con isto auméntase a lexibilidade da historia do repositorio.
  3. Unificación de commits: Pódense xuntar varios commits que aínda non se subiron nun único commit. Este é un paso lóxico despois da reordenación dos commits: varios commits pequenos sobre o mesmo que quedan mellor xuntos.

A insistenza sobre “commits que aínda non se subiron” é a propósito. Ó non ter que subir cada commit que fas, pódelo modificar como queiras. Pero, unha vez subido xa non se poden modificar posto que xa é visible ao resto dos clientes e calquera modificación podería resultar en incoherencias nos repositorios.

En resumo, cun SCVD podes ter un historial máis limpo e coidado. Acabas mimando o historial de commits, unha oportunidade que nun sistema centralizado non se ten.

]]>
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.
]]>
Python 3.0 http://xoseotero.blogaliza.org/2008/12/04/python-30/ http://xoseotero.blogaliza.org/2008/12/04/python-30/#comments Thu, 04 Dec 2008 03:07:20 +0000 http://xoseotero.blogaliza.org/?p=245 Barry Warsaw acaba de publica-la versión 3.0 de Python. Esta versión non é unha versión máis, marca un antes e un despois. Ata o de agora a prioriedade estaba en ser compatible cara atrás. Engadíanse nova funcionalidade en cada nova versión, pero o código das versións anteriores seguía sendo válido nas novas versións. Co tempo viuse que había algúns aspectos da linguaxe que podía ser mellorada, pero non se podía mellorar porque racharía a compatibilidade coas versións anteriores. Así, dende hai bastantes anos falábase de dunha nova versión, coñecida coma Python 3000 ou py3k, que arranxaría tódolos problemas. Ó principio parecía máis un mito que outra cousa, pero hoxe esta versión mítica fíxose realidade. Cae un mito e nace unha realidade.

Durante un tempo seguirase a desenvolver dúas ramas da linguaxe. Por un lado, o desenvolvemento da rama 2.x centrarase no arranxo de erros e en facilita-la transición á nova rama. Por outro lado, o desenvolvemento da rama 3.x centrarase na inclusión de funcionalidade de nova funcionalidade, como certos aspectos que se querían introducir para a versión 3.0 pero que por falta de tempo non se puido engadir. Desto xeito, a versión a versión 2.6, engadiu as novas clases que se engadiron na versión 3.0 e que non son incompatibles coa rama 2.x. Espérase sacar, alomenos, outra nova versión da rama 2.x que engadirá a nova funcionalidade introducida na versión 3.1.

Esta é a tradución de parte do anuncio oficial:

Python 3.0 (tamén coñecido coma “Python 3000” ou “Py3k”) representa un fito histórico para Python, e foron necesarios case que 3 anos para o seu desenvolvemento. Esta nova versión da linguaxe é incompatible coas versións 2.x, mentres que continúa sendo fiel á visión do BDFL (Benevolent Dictator For Life – dictador benevolente de por vida) Guido van Rossum. Algunhas cousas que merecen mención son:

  1. Arranxos para moitas imperfecións
  2. Eliminación de características obsoletas e sintaxe redundante
  3. Melloras e reorganización da biblioteca estándar
  4. Cambios nos detalles de como funcionan os obxectos incorporados coma as cadeas e os dicionarios
  5. …e moitas novas máis características novas

Ligazóns de interese:

]]>
http://xoseotero.blogaliza.org/2008/12/04/python-30/feed/ 2
Python Sudoku 0.13 http://xoseotero.blogaliza.org/2008/09/19/python-sudoku-013/ http://xoseotero.blogaliza.org/2008/09/19/python-sudoku-013/#comments Fri, 19 Sep 2008 12:08:18 +0000 http://xoseotero.blogaliza.org/?p=243 Despois de dous anos dende a última versión de Python Sudoku xa ía sendo hora de sacar unha versión nova… Python Sudoku 0.13 non trae melloras moi significativas nin arranxos de erros, pero espero que sexa unha versión de transición ata un código máis limpo, fácil de manter e extender.

Por certo, se alguén está interesado na programación en python, nos sudokus e quere axudar no desenolvemento de Python Sudoku que levante a man; dous anos para sacar unha nova versión é moito tempo…

Novas características:

  • Dividi-lo script en varios scripts con funcións específicas: pysdk.py para crear e resolver sudokus dende a liña de comandos, pysdk-pdf.py para crear PDFs, pysdk-image.py para crear imaxes and pysdk-gui.py para a interface gráfica.
  • Simplificación da configuración.
  • Engadida a opción -t | –test para obte-la dificultade dun sudoku.
  • Engadida a opción –force para asegurarse de que a dificultade dun sudoku se corresponde exactamente coa dada.
  • Soporte para abrir ficheiros .sdk entre distintos sistemas con diferentes separadores de liña.

Descargas:

Instalación/configuración:

Baixando o código fonte:

  1. Descarga-lo código fonte e descomprimi-lo.
  2. Opcional: edita-lo ficheiro pysdk.cfg do directorio descomprimido.
  3. Executa-los scripts.

Empregando o paquete debian:

  1. Descarga-lo paquete debian e instala-lo.
  2. Opcional: copia-lo ficheiro /usr/share/doc/pythonsudoku/pysdk.cfg no directorio persoal coma ~/.pysdk.cfg (ollo ó punto ó inicio do nome do ficheiro) e edita-lo.
  3. Executa-los scripts (ter en conta que coa instalación dende o paquete debian os scripts non teñen extensión .py).
]]>
http://xoseotero.blogaliza.org/2008/09/19/python-sudoku-013/feed/ 2
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.

]]>
FUD the Bill Gates sobre o software libre http://xoseotero.blogaliza.org/2008/04/24/fud-the-bill-gates-sobre-o-software-libre/ Thu, 24 Apr 2008 19:43:39 +0000 http://xoseotero.blogaliza.org/2008/04/24/fud-the-bill-gates-sobre-o-software-libre/ Acabo de ver o último FUD que lanzou Bill Gates sobre o software libre[0][1] cando falaba sobre a industria farmacéutica (tradución un tanto libre):

“Existe o free software e despois tamén existe o open source“, suxire, facendo ver que Microsoft regala o seu software nos países en vías de desenvolvemento. Co open source, pola outra banda, “existe esa cousa chamada a GPL, coa que nós non estamos dacordo”. O open source, di, crea unha licenza “de tal xeito que ninguén pode mellora-lo software”, afirma, lamentando a oportunidade desperdiciada para o traballo e os negocios. El volve á analoxía das farmacéuticas: “Creo que se ti inventas medicamentos, deberías ser capaz de cobrar por eles”, di, engadindo mentres se encolle de ombreiros: “Iso podería parecer radical”.

Primeiro: Confunde, apropósito, sen dúbida, o significado de free software aproveitándose de que en inglés “free” significa “gratis” e “libre”. O free software é software libre, non gratuíto. Ademais, habería que matizar a afirmación de que Microsoft regala o seu software ós países en vías de desenvolvemento. Cando unha empresa de software privativo di que regala algo, o que nos está a ofrecer é a dependencia que en canto se dispoña de capital haberá que pagar. A típica táctica do camello que pretende aumenta-lo seu mercado.

Segundo: O software libre garinte que calquera poida mellora-lo software, forma parte da definición. O que eu non podo mellorar é o software privativo, do que non dispoño o código fonte. Isto, ademais de FUD, é absurdo.

Terceiro: O software libre véndese e con el as empresas poden facer bastante diñeiro. Que llo digan a Red Hat e a tantas outras…


[0] Via Slashdot.
[1] Definición de FUD.

]]>
Código fonte do oráculo http://xoseotero.blogaliza.org/2008/04/14/codigo-fonte-do-oraculo/ http://xoseotero.blogaliza.org/2008/04/14/codigo-fonte-do-oraculo/#comments Mon, 14 Apr 2008 18:58:04 +0000 http://xoseotero.blogaliza.org/2008/04/14/codigo-fonte-do-oraculo/ O outro día interesáronse polo código do oráculo que utilicei para face-las acertadas predicións sobre as recentes elecións xerais. Pois ben… aquí está. Está escrito en python, así que con copia-lo texto nun ficheiro (oracle.py, por exemplo) e executa-lo no intérprete de python xa teremos un oráculo plenamente funcional!

#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-

import sys
import random

def oracle(maybe, probably, sure):
        """Return the answer to a question.

        This is the Wise Oracle. It checks the Universe in the search of the
        truth.

        Arguments:
        maybe -- % for the "maybe" answer
        probably -- % for "probable" answer
        sure -- % for "sure" answer

        """
        probability = random.randint(0, 100)

        # Yes
        if probability < sure:
            return "Yes, I'm absolutly sure!"
        elif probability < probably:
            return "Yes, I'm sure."
        elif probability < maybe:
            return "Yes."

        probability = 100 - probability

        # No
        if probability < sure:
            return "No, I'm absolutly sure!"
        elif probability < probably:
            return "No, I'm sure."
        elif probability < maybe:
            return "No."

        # I don't know
        return "I don't know"

if __name__ == "__main__":
    for question in sys.argv[1:]:
        print "%s -> %s" % (question, oracle(35, 20, 5))
]]>
http://xoseotero.blogaliza.org/2008/04/14/codigo-fonte-do-oraculo/feed/ 3
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
From BFS to ZFS: past, present, and future of file systems http://xoseotero.blogaliza.org/2008/03/17/from-bfs-to-zfs-past-present-and-future-of-file-systems/ http://xoseotero.blogaliza.org/2008/03/17/from-bfs-to-zfs-past-present-and-future-of-file-systems/#comments Mon, 17 Mar 2008 09:13:53 +0000 http://xoseotero.blogaliza.org/2008/03/17/from-bfs-to-zfs-past-present-and-future-of-file-systems/ Acabo de ler From BFS to ZFS: past, present, and future of file systems[0], un artigo, en inglés, moi interesante e entretido que merece ser recomendado. Trátanse de 8 páxinas coa historia dos sistemas de ficheiros que foron acompañando ós sistemas operativos máis importantes da historia. De cada sistema de ficheiros coméntanse as súas características diferenciadoras e as limitacións que tiñan.

O último parágrafo do artigo é un perfecto resumo do artigo:

Mentres que os sistemas de ficheiros poida que, en si, non parezan excitantes, a súa historia cóntanos a historia de como os ordenador e os sistemas operativos evolucionario cos anos. “Polas súas obras os coñeceremos” é certo tanto para as persoas coma para os sistemas de ficheiros. Coñecendo como garda o sistema un simple ficheiro, un pode chegar a vislumbrar as limitacións e aspiracións dos seus deseñadores.


[0] Vía OSNews.

]]>
http://xoseotero.blogaliza.org/2008/03/17/from-bfs-to-zfs-past-present-and-future-of-file-systems/feed/ 4
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