reKonq

ReKonq es lo que Konqueror nunca debió dejar de ser, un moderno navegador para KDE4.

Utilizando el motor webkit, en vez de KHTML, es mucho más rápido y moderno, además de incluir sus geniales herramientas para desarrolladores. Importa los marcadores de Konqueror, y en vez de éste es fácil de configurar y tiene una interfaz muy clara y limpia.

Por cierto, se ve que KDE4 sigue, en Ubuntu, plagado de Bugs. De modo que si os gusta este escritorio os aconsejaré que hagáis como Cristóbal de Linux Music pasándoos a Mandriva.

Si sois de esos que os gustan las aplicaciones de QT4 en escritorios GTK pero os molesta su apariencia, tenéis un tutorial para que adopten el estilo del escritorio.

La versión 0.3 está en backports y la 0.2 en universe de Ubuntu Karmic. Su página web es rekonq.sourceforge.net.

Jugando con __getattribute__ y Django

Siguiento mi pequeño experimento de pseudoclases-dicionario para facilitarme la vida con Django, se me ocurrió una forma de poder establecer y recoger valores de variable directamente desde las plantillas de Django.

El motor de plantillas de Django, por una acertada decisión de diseño, hizo a bien de no incluir la posibilidad de establecer variables o ejecutar métodos en su motor de plantillas, al igual que ocurre por ejemplo con Smarty (motor de plantillas para PHP).

Sin embargo, dada la gran potencia de Python, existe una forma de hacerlo, muy limitada pero efectiva, sobrecargando el método __getattribute__ .

# Importamos compile del modulo de expresiones regulares
from re import compile as rec

# Declaramos la expresion regular que identifica los nombres de propiedad
gs = rec("^(get_(.*))|(set_(.*)_(.*))|(setn_(.*)_(\d+))|(setb_(.*)_(true|True|false|False|0|1|-1))$")
class Strangelet(dict):
''' Clase que permite la asignacion con nombres de propiedad '''
def __getattribute__(self,x):
# Sobrecargamos el metodo que pide los atributos
a = gs.match(x)
if a: # Si cumple la expresion regular
a=a.groups()
if a[0]:
# Primer caso, devolvemos valor
return dict.__getitem__(self, a[1])
elif a[2]:
# Segundo caso, establecemos valor como cadena
dict.__setitem__(self, a[3], a[4])
elif a[5]:
# Tercer caso, establecemos valor como entero
dict.__setitem__(self, a[6], int(a[7]))
elif a[8]:
# Cuarto caso, establecemos valor como booleano
# muy util para trabajar con los IF de Django
dict.__setitem__(self, a[9], a[10] in ("true","True","1","-1"))
# Retornamos cadena vacia, para no mostrar nada
return ""
# se podria retornar None, pero Django los muestra.
else:
# Si no se cumple la expresion regular, usamos el metodo heredado
return dict.__getattribute__(self,x)

if __name__ == "__main__":
# Test de unidad
a = Strangelet()
a.setb_var_0
print a.get_var
a.setb_var_True
print a.get_var
a.setn_var_1
print a.get_var
a.set_text_EstoEsUnTexto
print a.get_text

Y podríamos usarlo para asignar variables en Django:

{{ instancia_strangelet.setn_variable_1 }}
{% ifequal instancia_strangelet.get_variable 1 %}¡Es igual a uno!{% endifequal %}
{{ instancia_strangelet.setb_variable_false }}
{% if instancia_strangelet.get_variable %}No pasará por aquí.{% else %}¡Y ahora es False!{% endif %}

Que en efecto mostraría:

¡Es igual a uno! ¡Y ahora es False!

Todo esto es posible porque Django respeta los __getattribute__ de las clases, al ser puramente Python. ¿Divertido, eh?

Python no tiene getters ni setters, pero ni falta que le hace.

Aviso que este experimento es sólo eso, un experimento, no apto para entornos de producción o proyectos serios, y es una aberración contra la naturaleza tanto de Python como del motor de plantillas de Django. Pero es curioso, eso sí.

XMoto

He de confesar que este tipo de juegos no me resultan muy atractivos, pero me he animado comentarlo después de ver cómo lo disfrutando tanto mi padre (él mismo lo descubrió navegando por el Synaptic) como mi hermano, al que se lo instalé para que no sufriera con otro parecido en Flash con el penoso rendimiento del plugin de Adobe.

XMoto es el clásico juego de motocross, en dos dimensiones, con tintes de plataformas, de los que llevan existiendo desde finales de los 80 (todavía me acuerdo de uno de carreras para la GameBoy). Destaca por su vistosidad y el motor de físicas, que hacen que tanto la moto como el conductor reaccionen a los impactos.

Tiene un decente apartado sonoro, pero lo que destaca es la gran cantidad de niveles y la oportunidad de descargar puntuaciones y nuevos niveles a través de internet, desde el mismo juego.

La última versión a día de hoy, 0.5.2 se encuentra en los repositorios Universe de Ubuntu y en los repositorios oficiales de muchas otras.

La página web del proyecto está en xmoto.tuxfamily.org.

Créditos: Las capturas del juego están sacadas de la página web oficial de Xmoto.

Daniel Bautista

Tal vez no os suene su nombre, es normal, ni siquiera si eres de ese ínfimo porcentaje de canariones que visitan el blog. No me extraña. Daniel Bautista no es de esos señores que, idiotas de ellos, se convierten en esclavos de las mafias de explotación artístico-comercial: las mal llamadas productoras.

Este señor hace música, y bastante decente, que aprovecho pare recomendaros encarecidamente.

[Reproductor Jamendo]

Podéis encontrar su música en jamendo y en su sitio web personal.

Vía Gulic.

Nota: Antes de que empecéis a reventarme el correo con peticiones para que haga propaganda de cualquier tipo, que sepáis que a este señor se la hago gratis porque: es linuxero de Gentoo, canario, está en jamendo y publica su música bajo licencias libres.

PokerTH

Un genial juego de Póker Texas Hold'em, para jugar sólo, a través de Internet (usando sus servidores centralizados) o a través de LAN, aunque con éste último modo se puede jugar también a través de Internet redirigiendo los puertos del router.

Tiene miles de temas gráficos para descargar, y es tremendamente divertido, pero sobretodo contra oponentes que sean capaz de pasar el test Voight-Kampff.

Instrucciones de descarga (incluyendo paquetes para ubuntu) en su página oficial pokerth.net.

Comix

Comix es un útil visor de imágenes, especializado en la visualización de cómics.

Funciona a la perfección, y reconoce ZIP, TAR, y RAR (si unrar está instalado), con los que comúnmente se comprimen los ficheros .CBR, comúnmente usados por visores de cómics.

Incluye mil opciones de visualización, modo japonés para la página doble, zoom, navegador de páginas y colección...

Página web: comix.sourceforge.net

La versión 4.0.4 (la última a día de este artículo) está en los repositorios.