Programación – 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 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
sloccount, o amigo de todo programador http://xoseotero.blogaliza.org/2008/06/01/sloccount-o-amigo-de-todo-programador/ http://xoseotero.blogaliza.org/2008/06/01/sloccount-o-amigo-de-todo-programador/#comments Sun, 01 Jun 2008 18:41:10 +0000 http://xoseotero.blogaliza.org/2008/06/01/sloccount-o-amigo-de-todo-programador/ Programar pode resultar moi duro. Nunha primeira fase, estás no paraíso e todo parece ir perfecto. Levas algún tempo pensando en como resolver un problema pero atopaches a solución óptima, eficaz e eficiente. Cu sorriso nos beizos empezas a implementa-la solución. Todo cambia cando chegamos ó primeiro imprevisto, que sempre chega e veñen en grupo. O que pensabas que era perfecto, resulta que non tiña en conta determinados efectos colaterais. Ó principio segues co sorriso, porque os problemas empezan dende o máis pequeno ata o que che quita definitivamente o sorriso da cara.

Despois de varias horas de contra ataques, o teu estado de ánimo empeza a non se-lo máis propicio para programar. O cabreo impide que penses con claridade. E se por iso non fora dabondo, por experienza sabes que non lle podes dar un puñetazo á pantalla, nin unha patada ó ordenador, nin tan sequera un manotazo contra a mesa. Ti es o culpable, o único culpable.

É nese momento cando todo programador precisa dun amigo que o anime, que o alente a seguir adiante. É ahí onde entra en escena SLOCCount. SLOCCount é un programa moi sinxe-lo que conta as liñas de código dun proxecto e calcula tanto o tempo estimado para o seu desenvolvemento coma o seu custe. O que fai a SLOCCount tan amigable para o programador é que ten unhas fórmulas para calcular estes datos moi optimistas.

A continuación varios exemplos dos resultados obtidos ó executar SLOCCount sobre varios proxectos.

Un simple “Ola mundo!” en python consta dunha única liña de código e SLOCCount valora o seu desenvolvemento en 19 dólares. Non está nada ma.

Total Physical Source Lines of Code (SLOC) = 1
Development Effort Estimate, Person-Years (Person-Months) = 0.00 (0.00)
Schedule Estimate, Years (Months) = 0.02 (0.22)
Estimated Average Number of Developers (Effort/Schedule) = 0.01
Total Estimated Cost to Develop = $ 19

Linux 2.6.25.4 consta de case 6 millóns de liñas de código e SLOCCount valora o seu desenvolvemento en 250 millóns de dólares e unha duración de 9 anos. Bueno, aquí prodúcese o efecto contrario, porque ó non ter en conta as liñas reescritas e só as finais, moito traballo intermedio non é valorado.

Total Physical Source Lines of Code (SLOC) = 5,913,850
Development Effort Estimate, Person-Years (Person-Months) = 1,825.97 (21,911.65)
Schedule Estimate, Years (Months) = 9.29 (111.53)
Estimated Average Number of Developers (Effort/Schedule) = 196.46
Total Estimated Cost to Develop = $ 246,663,815

E por último, Simple World consta dunhas 9 mil liñas de código e SLOCCount valora o seu desenvolvemento en 284 mill dólares e unha duración de 8 meses.

Total Physical Source Lines of Code (SLOC) = 9,413
Development Effort Estimate, Person-Years (Person-Months) = 2.11 (25.27)
Schedule Estimate, Years (Months) = 0.71 (8.53)
Estimated Average Number of Developers (Effort/Schedule) = 2.96
Total Estimated Cost to Develop = $ 284,483

Pois si, o meu querido amigo SLOCCount valora Simple World en case 300 mill dólares! Grazas. Con amigos coma ti da gusto programar! 🙂

]]>
http://xoseotero.blogaliza.org/2008/06/01/sloccount-o-amigo-de-todo-programador/feed/ 2
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.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.

]]>
GNU Affero General Public License (versión 3) http://xoseotero.blogaliza.org/2007/11/20/gnu-affero-general-public-license-version-3/ Tue, 20 Nov 2007 21:44:23 +0000 http://xoseotero.blogaliza.org/2007/11/20/gnu-affero-general-public-license-version-3/ Onte publicouse a terceira versión da GNU Affero General Public License. Unha das novidades desta licenza é a compatibilidade coa GNU General Public License (versión 3), algo que a anterior versión da Affero non permitía. Os obxectivos desta licenza espóñense no seu preámbulo:

A GNU Affero General Public License é unha licenza copyleft para software e outros tipos de traballos, especialmente deseñada para asegura-la coperación coa comunidade no caso do software executado en servidores.

[…]

A licenza require que o operador do servidor de rede ofreza o código fonte da versión modificación que se estexa executando ós usuarios do servidor. Deste xeito, o uso público dunha versión modificada, nun servidor accesible públicamente, dá acceso público ó código fonte da versión modificada.

A GNU Affero General Public License pódese descargar nos seguintes formatos:

]]>
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
Qt 4.3.1 poderase usar con máis licenzas de software libre (pero aínda non coa GPLv3) http://xoseotero.blogaliza.org/2007/08/10/qt-431-poderase-usar-con-mais-licenzas-de-software-libre-pero-ainda-non-coa-gplv3/ Fri, 10 Aug 2007 18:09:40 +0000 http://xoseotero.blogaliza.org/2007/08/10/qt-431-poderase-usar-con-mais-licenzas-de-software-libre-pero-ainda-non-coa-gplv3/ Anunciouse recentemente a saída da versión 4.3.1 de Qt. A novidade máis destacada desta versión é que se poderá usar dende unha maior cantidade de licenzas de software libre mediante o engadido dunha excepción á licenza GPLv2 que usa Qt. Algunhas das novas licenzas coas que se poderá usar Qt son:

  1. Apache License 2.0
  2. BSD
  3. LGPL 2.0 ou 2.1
  4. Mozilla Public License (MPL) 1.0 ou 1.1

A GPLv3 non é unha destas novas licenzas, así que, seguimos sen poder usar a biblioteca Qt en software baixo a GPLv3. Afortunadamente estase a traballando no asunto. Segundo palabras dun dos desenvolvedores de Qt:

Sobre a GPL v3, estamos traballando activamente no asunto. Polo que entendo, é un paso máis grande [que o dado para permitir as outras licenzas libres] e non algo que poidamos ofrecer cunha Excepción [á licenza de Qt].


Vía Barrapunto.
Vía KDE.news.

]]>
O software GPLv3 non pode usar Qt http://xoseotero.blogaliza.org/2007/07/19/o-software-gplv3-non-pode-usar-qt/ http://xoseotero.blogaliza.org/2007/07/19/o-software-gplv3-non-pode-usar-qt/#comments Thu, 19 Jul 2007 06:06:19 +0000 http://xoseotero.blogaliza.org/2007/07/19/o-software-gplv3-non-pode-usar-qt/ Qt é unha biblioteca multiplataforma escrita en C++ para, principalmente, crear interfaces gráficas. Esta biblioteca está dispoñible baixo dúas licenzas:

  1. Q Public License
  2. GNU General Public License version 2 sen a cláusula “or any later version”

Estas dúas licenzas son incompatibles coa nova GNU General Public License version 3. Isto significa que, agora mesmo, non se poderá empregar esta biblioteca con software baixo a GPLv3.

Estiven buscando información pola páxina de Trolltech a ver se atopaba algunha información sobre a súa postura sobre a GPLv3. Non atopei nada, tan só unha anotación nun blogue anunciando a aparición dun esbozo. Espero que na próxima versión de Qt engadan como terceira licenza a GPLv3.

]]>
http://xoseotero.blogaliza.org/2007/07/19/o-software-gplv3-non-pode-usar-qt/feed/ 1
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
]]>