HowTos – 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 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
Facer funcionar o driver privativo de ATI (fglrx) en debian sid http://xoseotero.blogaliza.org/2007/04/27/facer-funcionar-o-driver-privativo-de-ati-fglrx-en-debian-sid/ http://xoseotero.blogaliza.org/2007/04/27/facer-funcionar-o-driver-privativo-de-ati-fglrx-en-debian-sid/#comments Fri, 27 Apr 2007 13:44:18 +0000 http://xoseotero.blogaliza.org/2007/04/27/facer-funcionar-o-driver-privativo-de-ati-fglrx-en-debian-sid/ Hai uns días produciuse un cambio nas X de debian sid. Este cambio provoca que a parte do driver en user-space xa non se poida cargar coas X e que, por tanto, non se pode levantar o modo gráfico. Antes o comando /usr/bin/Xorg -version devolvía coma versión a 7.1.0, pero agora devolve 1.3.0:

xose@debian:~$ /usr/bin/Xorg -version

X Window System Version 1.3.0
Release Date: 19 April 2007
X Protocol Version 11, Revision 0, Release 1.3
Build Operating System: Linux Debian
Current Operating System: Linux debian 2.6.21-2 #2 PREEMPT Thu Apr 26 22:48:45 CEST 2007 i686
Build Date: 21 April 2007
        Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
Module Loader present

Nos foros de rage 3d apareceu a forma de arranxalo; tan só dous comandos. Para a arquitectura x86-32:

sed -i 's/xe8xecx4fxfexffx85xc0x7fx31/xe8xecx4fxfexffx85xc0x90x90/' \
       /usr/lib/xorg/modules/drivers/fglrx_dri.so
sed -i 's/x0fx88x3cx09x00x00/x90xe9x3cx09x00x00/' \
       /usr/lib/xorg/modules/drivers/glrx_dri.so

Para a arquitectura x86-64:

sed -i 's/xe8xaax72xfexffx85xc0x7fx23/xe8xaax72xfexffx85xc0x90x90/' \
       /usr/lib/xorg/modules/drivers/fglrx_dri.so
sed -i 's/x0fx88x3bx08x00x00/x90xe9x3bx08x00x00/' \
       /usr/lib/xorg/modules/drivers/fglrx_dri.so

Eu probeino coa última versión do driver, a 8.36.5, na arquitectura x86-32 e funcionoume perfectamente.

Actualización: A versión 1:7.2-3 de xorg cambiou o directorio onde se gardan os drivers. Antes desta versión, o ficheiro fglrx_dri.so estaba no directorio /usr/X11R6/lib/modules/dri/ para a arquitectura x86-32 e no directorio /usr/X11R6/lib64/modules/dri/ para a arquitectura x86-64.

]]>
http://xoseotero.blogaliza.org/2007/04/27/facer-funcionar-o-driver-privativo-de-ati-fglrx-en-debian-sid/feed/ 2
Crear paquetes .deb http://xoseotero.blogaliza.org/2006/11/06/crear-paquetes-deb/ Mon, 06 Nov 2006 17:11:14 +0000 http://xoseotero.blogaliza.org/2006/11/06/crear-paquetes-deb/ Logotipo de debianCrear e manter un pacote para unha distribución non é unha tarefa doada. Crear un pacote require amplos coñecementos sobre o sistema de pacotes da distribución e coidado para pór as dependenzas correctas. Por outra banda, cada tipo de distribución ten o seu xeito particular de face-las cousas: así, as distribucións baseadas en .rpm crean un ficheiro na raíz do código fonte, mentres que as baseadas en .deb crean un subdirectorio cunha morea de ficheiros.

AGNIX publicou un artigo sobre a creación de pacotes deb onde se describe en profundiade como se crea un pacote debian, pero paréceme que para crear un pacote a nivel particular non é preciso meterse en tanto lío. Para facer un pacote para uso particular, sen preocuparse de dependezas, existe unha ferramenta chamada checkinstall que permite construír pacotes deb, rpm ou slackware de xeito moi doado.

Coma exemplo, crearei un pacote para etswitch, un programa que permite minimizar un xogo que empregue o motor gráfico do Quake 3. Os primeiros pasos son idénticos a instala-lo programa independentemente ó sistema de pacotes da distribución (estes pasos estándares para un programa que empregue as autotools, que non ten por que se-lo caso):

  1. Obtención do código fonte: wget http://hem.bredband.net/b400150/etswitch/etswitch-0.1.14.tar.gz
  2. Descomprimilo: tar -xvzf etswitch-0.1.14.tar.gz
  3. Configuralo indicando onde o queremos instalar: ./configure –prefix=/usr
  4. Compilación: make

Unha vez chegado a este punto é cando empregamos checkinstall para a creación do pacote:

checkinstall -D –pkgname=etswitch –pkgversion=0.1.14 –pkgrelease=1 –install=no

Isto crearanos un ficheiro chamado etswitch_0.1.14-1_i386.deb preparado para ser instalado no sistema.

Se en vez de crear un deb quixeramos crear un rpm, en vez de -D empregaríamos -R e para un pacote de Slackware -S. Os seguintes parámetros son o nome do pacote, versión e release (veces que se empaquetou esa versión). Por último, –install=no é para que non intente instala-lo pacote, que pode requerir privilexios de root segundo onde lle dixeramos que queriamos instala-lo programa.

]]>
Engadir sudokus a unha páxina web http://xoseotero.blogaliza.org/2006/06/24/engadir-sudokus-a-unha-paxina-web/ http://xoseotero.blogaliza.org/2006/06/24/engadir-sudokus-a-unha-paxina-web/#comments Sat, 24 Jun 2006 13:56:31 +0000 http://xoseotero.blogaliza.org/2006/06/24/engadir-sudokus-a-unha-paxina-web/ A páxina web de Python Sudoku ten un script para obter imaxes en formato PNG de sudokus que se poden engadir á nosa páxina web.

Cada día engádense 4 sudokus á base de datos, un para cada unha dos seguintes handicaps: 0, 5, 10 e 15. Mediante este script pódense obter tódolos sudokus.

O tamaño das imaxes é de 300×300, ocupando aproximadamente 6KBs, pero pódese obter unha versión de previsualización de 100×100, ocupando aproximadamente 2KBs.

Parámetros
O script ten varios parámetros:

  • date: A data en formato AAAA-MM-DD (para hoxe sería 2006-06-24). Se non se especifica tómase por defecto o día de hoxe.
  • handicap: O número de números de máis que se dan; 0 significa que se dan só os necesarios, 1 que se da un de máis, etc. Os valores permitidos son 0, 5, 10 e 15. Se non se especifica tómase por defecto 0.
  • format: O formato, que pode ser png, pdf ou sdk (texto plano). Se non se especifica tómase por defecto png.
  • thumb: (Só para formato png, incompatible con solved) Amósase unha imaxe de tamaño máis pequeno a modo de previsualización.
  • solved: Amosa o sudoku resolto.

Exempros
Para meter un sudoku nunha páxina web só hai que insertar o código onde queiramos que se vexa.

Previsualización con ligazón á páxina web de Python Sudoku (recomendado):

<a href="http://pythonsudoku.sourceforge.net/index.php?view&handicap=0#sudokus"><img src="http://pythonsudoku.sourceforge.net/sudoku.php?thumb&format=png&handicap=0" /></a>

Imaxe co sudoku e ligazón á páxina web de Python Sudoku:

<a href="http://pythonsudoku.sourceforge.net/index.php?view&handicap=0#sudokus"><img src="http://pythonsudoku.sourceforge.net/sudoku.php?format=png&handicap=0" /></a>

Imaxe co sudoku e ligazón á imaxe co sudoku resolto:

<a href="http://pythonsudoku.sourceforge.net/sudoku.php?solved&format=png&handicap=0"><img src="http://pythonsudoku.sourceforge.net/sudoku.php?format=png&handicap=0" /></a>

]]>
http://xoseotero.blogaliza.org/2006/06/24/engadir-sudokus-a-unha-paxina-web/feed/ 5
Facer capturas de pantalla periódicamente http://xoseotero.blogaliza.org/2006/06/22/facer-capturas-de-pantalla-periodicamente/ Thu, 22 Jun 2006 17:30:55 +0000 http://xoseotero.blogaliza.org/2006/06/22/facer-capturas-de-pantalla-periodicamente/ Para as capturas de pantalla dos posts sobre Xogos de código aberto necesito un programa que cada certo tempo faga unha captura de pantalla. Hai moitos que fan capturas de pantalla, pero o único que atopei que fixera varias foi xvidcap. Está pensado para facer vídeos de presentación, co que ten a opción de cuspir directamente en formato vídeo ou imaxes soltas. Hai un tempo dera conseguido que me funcionase, pero agora, cando o intentei, non o din nin compilado nin instalado os pacotes binarios que hai por ahí.

Acabei descubrindo que as X traen un programa que se encarga de facer capturas de pantalla. Chámase xwd e en debian atópase no pacote xbase-clients. Pode facer capturas de toda a pantalla ou de fiestras en particular, pero nun formato propio: “X Window Dump image data”. Por sorte con Imagemagick poderémolo converter a calquera outro formato de imaxe máis normal.

O caso é que acabei facendo dous pequenos Shell Scripts: capturar.sh e converter.sh, o primeiro para face-las capturas mentres ando polo xogo e o segundo para as converter a PNG.

capturar.sh

#! /bin/sh
# capturar.sh crea capturas de pantalla de toda a pantalla en formato xwd
# con nomes $i.xwd con un determinado intervalo de tempo entre
# captura e captura.
#
# capturar.sh DENDE ATA ESPERA
#
# Dependencias: xwd (X)
#
# DENDE: valor da primeira captura de pantalla (por defecto 0)
# ATA: valor da última captura de pantalla (Por defecto DENDE + 1000)
# ESPERA: tempo que se espera entre captura e captura (por defecto 5 segundos)

if [ “$1” ]; then
    since=$1
else
    since=0
fi

if [ “$2” ]; then
    to=$2
else
    let to=${since}+1000
fi

if [ “$3” ]; then
    secs=$3
else
    secs=5
fi

for i in `seq -w ${since} ${to}`; do
    echo -ne “r${i}.xwd”
    xwd -root -screen -silent > ${i}.xwd
    sleep ${secs}s
done

converter.sh

#! /bin/sh
# converter.sh converte do formato xwd ata FORMATO.
#
# converter.sh DENDE ATA FORMATO
#
# Dependencias: convert (Imagemagick)
#
# DENDE: valor da primeira captura de pantalla (por defecto 0)
# ATA: valor da última captura de pantalla (Por defecto DENDE + 1000)
# FORMATO: (por defecto png)

if [ “$1” ]; then
    since=$1
else
    since=0
fi

if [ “$2” ]; then
    to=$2
else
    let to=${since}+1000
fi

if [ “$3” ]; then
    format=$3
else
    format=png
fi

for i in `seq -w ${since} ${to}`; do
    echo -ne “r${i}.xwd -> ${i}.${format}”
    convert ${i}.xwd ${i}.${format} 2> /dev/null
done

]]>