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.

¿Netbook o subnotebook?

Lejos de debates absurdos sobre el tamaño de la pantalla o del teclado, y sus posibles problemas de ergonomía, cuando desde hace años existen dispositivos mucho más reducidos, que permiten hablar con gente a distancia y sin cables, y reciben el nombre de teléfonos móviles.

Mucho ha cambiado desde que los netbooks, ultraportátiles o microportátiles irrumpieron el mercado hace año y medio, alentados por el Atom de Intel. Ciertamente podrían haber optado por un procesador ARM que con mucho menos consumo consigue mejores resultados, pero claro, ciertos usuarios ignorantes no podrían comprender porqué ciertos programas estúpidos no funcionan en su cacharro recién comprado.

Intel Atom es lento, muy lento, excesivamente lento. Y por limitaciones impuestas por Intel, sólo puede emparejarse con chips gráficos muy antiguos, al menos hasta que Nvidia sacó al mercado su propia placa base integrada para Atom, la Nvidia ION.

Pero, ¿de verdad necesitáis un portátil de 5,6 o 9 pulgadas con la potencia de una tostadora? Volved a leer la pregunta. Hacedlo otra vez. ¿Y porqué en vez de uno de 9 pulgadas os hacéis con un portátil de 10 u 11 pulgadas?

Si atendemos al precio, mirando concienzudamente las especificaciones de un netbook y un subnotebook, nos damos cuenta de que el precio es muy similar, teniendo en cuenta que el netbook usará Atom y el subnotebook un procesador irremediablemente mejor, al igual que sucederá con sus chips gráficos, y su cantidad de memoria RAM.

A todo esto hay que sumar que, aunque al principio era relativamente fácil encontrar un netbook con Linux, normalmente de la más baja gama, a raíz del lanzamiento de Hasefroch-Vista-pero-con-la-barra-más-grande, y por presiones de Hasecorp, han ido desapareciendo hasta su extinción. De modo que ya solo queda comprarlo, pagar el impuesto, y luego pedir que te lo devuelvan. Cuando dadas las limitaciones de estos equipos, tanto por el hardward, como por la necesidad de adaptar la interfaz, Linux es especialmente adecuado para ellos, con el aliciente de la mejorada conectividad y el no necesitar miles de "soluciones de seguridad" que gasten recursos innecesarios para paliar fallos del diseño.

Mi opinión: si encontráis un netbook con Nvidia ION, y un Atom N330 a buen precio, pues avisad, pero de lo contrario siempre optad por el subnotebook, con un AMD Athlon, Athlon Neo o Sempron, o incluso Intel Celeron, y siempre siempre comprobad que no tenga un Intel Poulsbo (GMA 500) como chip gráfico: son un despropósito, no son realmente de Intel, y ni ellos ni su fabricante real les dan soporte.

Edito 25.02.2010: Vía menéame me entero de que Apemit ha ido recopilando los fabricantes que permiten devolver el impuesto Windows.

Pseudoclases en tiempo de ejecución con Python

Trasteando con mi código, en cierto momento (culpa de las plantillas de Django) me dí cuenta de que perdía una gran cantidad de tiempo declarando clases "auxiliares", que solo iba a usar una vez. Tiempo después, y quizás influenciado por la filosofía del Javascript, encontré una rápida solución: implementar clases a partir de diccionarios.

class DictClass(dict):
def __getattribute__(self,i):
if i[0:2] != "__" and self.__contains__(i):
return self.__getitem__(i)
return dict.__getattribute__(self,i)

Se usa muy fácilmente, en cualquier momento que quieras instanciar una clase, tan sólo tenemos que tratarlo como un diccionario. Pero sus atributos y método serán accesibles como si de una clase se tratase.

aux = DictClass({
"texto": "hola",
"method": lambda x:x+1,
})
aux["texto"] = "hasta la vista"
print(aux.texto)

Además, me he creado otra clase dinámica pero a partir de una lista, cuyos elementos son accesibles como si fuesen atributos (su utilidad se comenta al final).

import re
reitem = re_compile("^item_\d+$")
class ListClass(list):
def __getattribute__(self,i):
if reitem.match(i):
return self.__getitem__( int(i[5:]) )
return list.__getattribute__(self,i)

Y se usaría como una lista, cuyos valores son a su vez atributos.

lista = ListClass([1,2,3])
lista.append(4)
print(lista.item_4)

Tened en cuenta que esta técnica es menos eficiente que declarar las clases "tradicionales" desde el punto de vista del rendimiento, pero permite programar mucho mas rápido, y saltarse ciertas limitaciones del motor de plantillas de Django 1.0, que no permite acceder a las propiedades de los diccionarios y acceder a determinados valores de una lista, si no es a través de bucles.

<p>Valor de propiedad de DictClass: {{ clase.atributo }}</p>
<p>Valor de la primera posición de una lista: {{ lista.item_0 }}</p>

Espero que os haya sido de utilidad, no he descubierto la pólvora, y seguro que hay formas mejores o mas rápidas de ahorrarse tiempo de desarrollo (¿He oido Ruby por algún lado?), pero esto me ha sido muy útil ahorrándome un tercio de dicho tiempo, y por eso lo comparto.

Parser xHTML para Javascript

Basándome en el intérprete de HTML para javascript de John Resig, y aplicándole un par de cambios para hacerlo más adecuado para tratar con XHTML, he acabado haciendo una clase muy útil que a mas de uno os gustará.

Está bajo la Mozilla Public License por exigencia del código empleado.

Métodos:

  • HTMLParser: recibe una cadena con código HTML, y un diccionario (hashtable) con callbacks, al estilo SAX de Java, "start" para el inicio de una etiqueta, "end" para el final de una etiqueta, "chars" para texto y "comment" para comentarios html.
  • escapeXHTML y unescapeXHTML: reciben una cadena de HTML o XHTML y convierte los caracteres no permitidos por el estándar XHTML por sus códigos, y al revés, respectivamente.
  • HTMLtoXML: recibe una cadena de HTML o XHTML, y retorna otra de XHTML, intentando corregir los errores del código como etiquetas sin cerrar.
  • HTMLtoNODE: Recibe una cadena de HTML o XHTML y un nodo, y construye el árbol DOM a partir de la cadena en el nodo dado.
  • HTMLtoDOM: recibe una cadena de HTML o XHTML, y opcionalmente un nodo de tipo documento, y retorna el árbol DOM construído a partir de la cadena.

¿Qué utilidad tiene?

La técnica más usada, a día de hoy, para escribir código HTML en el documento sigue siendo innerHTML. innerHTML nunca fué estándar, es sucio, y tira por suelo la lógica de todo el DOM (Modelo del Objeto Documento, o Document Object Model), que es la forma en la que Javascript de comunica con el intérprete HTML del navegador.

Uno de dichos efectos secundarios es que, mientras construyendo nodos del DOM por javascript cualquier error en la manipulación árbol resulta en un fallo del intérprete, y no llega a reflejarse en el documento, si usamos innerHTML cualquier código malformado puede, y de hecho muy comúnmente sucede, destrozar la página web.

Utilizar un traductor de cadenas de HTML a DOM mediante javascript es una buena solución, y aunque sea menos eficiente que innerHTML, que recordemos está integrado en el navegador, es mucho más fiable y estándar.

Yo lo uso para escribir en el documento todo el HTML recibido con técnicas AJAX, y me ha ahorrado muchos dolores de cabeza con el código malformado.

El código

Podéis descargar este mismo código (6.59 KiB) a o la versión minificada (4.93 KiB).

/*
* Raw xHTML parser
* A pure JavaScript SAX-like HTML/XHTML parser.
*
* Felipe A. Hernández - http://spayder26.blogspot.com
* John Resig - http://ejohn.org/blog/pure-javascript-html-parser/
* Erik Arvidsson - http://erik.eae.net/archives/2004/11/20/12.18.31/
* Licensed under Mozilla Public License
*/
window.rhp=(function(){
/* Raw xHTML parser */
var $def=function(a,b){return typeof((b||window)[a])!="undefined";},
makeMap=function(a){
var r={},b=a.split(",");
for(var i=0,j=b.length;i<j;i++){r[b[i]]=1;}
return r;
},
startTag=/^<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,
endTag=/^<\/(\w+)[^>]*>/,
attr=/(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g,
me={},
esc=[["&","&amp;"],[">","&gt;"],["<","&lt;"],["\"","&quot;"],["'","&apos;"]],
esr=[],unesr=[],esl,
getDoc=function(node){
if(node.nodeType==9){return node;}
return (node.ownerDocument||(node.getOwnerDocument&&node.getOwnerDocument())||document);};
esl=esc.length;
for(var i=0;i<esl;i++){esr[i]=new RegExp(esc[i][0],"g");unesr[i]=new RegExp(esc[i][1],"g");}
var empty=makeMap("area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed"),
block=makeMap("address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul"),
inline=makeMap("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"),
closeSelf=makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"),
fillAttrs=makeMap("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),
special=makeMap("script,style");
me.HTMLParser=function(html,handler){
// SAX-like HTML parser
var stack=[];
var parseEndTag=function(tag,tagName){
var pos,i;
if(!tagName){pos=0;}
else{for(pos=stack.length-1;pos>-1;pos--){
if(stack[pos]==tagName){break;}}}
if(pos>=0){
for(i=stack.length-1;i>=pos;i--){
if(handler.end){handler.end(stack[i]);}}
stack.length=pos;}};
var parseStartTag=function(tag,tagName,rest,unary){
if(block[tagName]){
while(stack.last()&&$def(stack.last(),inline)){
parseEndTag("",stack.last());}}
if(closeSelf[tagName]&&stack.last()==tagName){
parseEndTag("",tagName);}
unary=(empty[tagName]||!!unary);
if(!unary){stack.push(tagName);}
if(handler.start){
var attrs=[];
rest.replace(attr,
function(match,name){
var value=arguments[2]?arguments[2]:(arguments[3]?arguments[3]:(arguments[4]?arguments[4]:(fillAttrs[name]?name:"")));
attrs.push({
name:name,
value:value,
escaped:value.replace(/(^|[^\\])"/g,'$1\\\"')});});
if(handler.start){handler.start(tagName,attrs,unary);}}},
last=html,index,chars,match;
stack.last=function(){return (this.length)?this[this.length-1]:null;};
while(html){
chars=true;
if(!stack.last()||!special[stack.last()]){
if(html.indexOf("<!--")===0){
index=html.indexOf("-->");
if(index>=0){
if(handler.comment){handler.comment(html.substring(4,index));}
html=html.substring(index+3);chars=false;}}
else if(html.indexOf("</")===0){
match=html.match(endTag);
if(match){html=html.substring(match[0].length);
match[0].replace(endTag,parseEndTag);
chars=false;}}
else if(html.indexOf("<")===0){
match=html.match(startTag);
if(match){
html=html.substring(match[0].length);
match[0].replace(startTag,parseStartTag);
chars=false;}}
if(chars){
index=html.indexOf("<");
var text=(index<0)?html:html.substring(0,index);
html=(index<0)?"":html.substring(index);
if(handler.chars){handler.chars(text);}}}
else{
html=html.replace(new RegExp("(.*)<\/"+stack.last()+"[^>]*>"),
(function(){
return function(all,text){
text=text.replace(/<!--(.*?)-->/g,"$1").replace(/<!\[CDATA\[(.*?)\]\]>/g,"$1");
if(handler.chars){handler.chars(text);}
return "";};})());
parseEndTag("",stack.last());}
if(html==last){throw "Parse Error: "+html;}
last=html;}
parseEndTag();};
me.escapeXHTML=function(html){
// Escape XHTML characters
for(var i=0;i<esl;i++){
html=html.replace(esr[i],esc[i][1]);}
return html;};
me.unescapeXHTML=function(html){
// Unescape XHTML characters
for(var i=esl-1;i>-1;i--){
html=html.replace(unesr[i],esc[i][0]);}
return html;};
me.HTMLtoXML=function(html){
// Parses HTML string to XML string (XHTML)
var results="";
me.HTMLParser(html,{
start:function(tag,attrs,unary){
results+="<"+tag.toLowerCase();
for(var i=0,il=attrs.length;i<il;i++){
results+=" "+attrs[i].name.toLowerCase()+'="'+attrs[i].escaped+'"';}
results+=(unary?"/":"")+">";},
end:function(tag){
results+="</"+tag.toLowerCase()+">";},
chars:function(text){results+=text;},
comment:function(text){results+="<!--"+text+"-->";}});
return results;};
me.HTMLtoNODE=function(html,node){
// Writes an HTML string to DOM's node
var elems=[node],doc=getDoc(node),cur=node;
me.HTMLParser(html,{
start:function(tagName,attrs,unary){
var elem=doc.createElement(tagName);
for(var i=0,il=attrs.length;i<il;i++){
elem.setAttribute(attrs[i].name,me.unescapeXHTML(attrs[i].value));}
if(cur&&cur.appendChild){
cur.appendChild(elem);}
if(!unary){elems.push(elem);cur=elem;}},
end:function(tag){
elems.length-=1;
cur=elems[elems.length-1];},
chars:function(text){
cur.appendChild(doc.createTextNode(me.unescapeXHTML(text)));},
comment:function(text){
if(doc.createComment){cur.appendChild(doc.createComment(text));}}});};
me.HTMLtoDOM=function(html,doc){
// HTML string to DOM's document node
if(!doc){doc=document;}
else{doc=getDoc(doc);}
var n=doc.createElement("div");
me.HTMLtoNODE(html,n);
return n.childNodes;};
return me;}());

Créditos

Android en netbooks

Ayer me pasé por mi macrosuperficie de electrónica más cercanaTM (os sigo recomendando que antes de comprar nada en ese tipo de establecimientos, vayáis a otras tiendas para comparar precios para que no os den gato por liebre). Yo soy de esos que aunque la blogosfera se haga eco de cualquier noticia, hasta que no lo veo no lo creo, y ayer me topé con mi primer portátil con arranque doble con Android y Hasefroch-Vista-Pero-Con-La-Barra-Más-Gorda, y bien de precio, oiga. Lástima que el impuestazo del segundo sistema ya venga en el precio.

Pero a la vuelta de la esquina...

¡Qué confianza! ¡Qué fiabilidad! ¡Que buen rollito en general!

Python: ágil y elegante

Nota: aunque Python ya va por la versión 3.1, dado que muchas librerías no están todavía adaptadas, los ejemplos de esta entrada están enfocadas a rama 2.6.

Python (pronúnciese paiton o paizon), es un lenguaje de programación interpretado (o de scripting) muy rápido de trabajar y con una muy suave curva de aprendizaje.

El típico hola mundo (mostar un texto en la salida estándar, comúnmente la consola):

print "Hola mundo"

Con este lenguaje, se pueden dar comúnmente esos casos de programas muy completos en menos de 100 líneas de código, programados en un tiempo ínfimo (se suele incluir un intérprete interactivo para hacer pruebas), siendo el código muy legible, y por eso es uno de los lenguajes preferidos para programar en linux (donde Python viene comúnmente incluido en muchas distribuciones).

Ejemplo de sintaxis:

# Esto es un comentario
'''
Esto es un comentario multilínea
'''

class Padre:
''' Clase Padre, con atributos y métodos '''
pelo = "negro" # Atributo de Padre, de tipo cadena de texto o str
ojos = "marrones"
dedos = 21 # Atributo de padre, de tipo número entero o int

def colorPelo(self):
''' Método, retorna el atributo pelo de la clase.
En Python, el primer argumento de un método es la
instancia de la propia clase, y sólo es necesario si
no se llama a través de una instancia.
'''
return self.pelo # Retorna un valor

class Hijo(Padre):
''' Clase Hijo, hereda los atributos y métodos de padre. '''
ojos = "verdes" # Sobreescribimos un atributo heredado con un nuevo valor

instancia = Hijo() # Instancia de una clase
print instancia.colorPelo() # Mostramos lo que nos retorna el método heredado
print Hijo.colorPelo(instancia) # Igual que el anterior

def pruebaFor(numero):
''' Función, recibe un valor por parámetro '''
for i in range(numero+1):
''' La función range devuelve una lista de números, que parten desde
cero o un valor dado, hasta el anterior al pasado por parámetro.
p.ej. range(0,5) es igual a range(5) y es igual a [0,1,2,3,4]
El for, en python, recorre todos los valores, asignándolos a
la variable, i en este caso (como hace foreach en otros lenguajes).
'''
print i # Muestro el valor de i

lista = [1, 2, "a", instancia] # Lista de valores (array en otros lenguajes)
pruebaFor(5) # Ejecuto la función, dándole el valor 5 por parámetro

Incluye una gran serie de librerías por defecto, incluyendo Tkinter, una utilería de ventanas basada en el vetusto Tk/Tcl.

Por suerte, existen PyGTK y Glade. El primero son las librerías para nuestro lenguaje, con el que poder operar con las librerías GTK, las utilizadas por Gnome, Xfce, y demás, siendo muy ligeras y bien diseñadas.

Glade, por su parte, permite desarrollar ventanas de forma sencilla, guardadas en formato XML (lenguaje de etiquetas), y utilizables por las librerías GTK para cualquier lenguaje.

Usando Python y Glade, crear un programa que tan sólo muestre una ventana es muy sencillo:

# Importamos las librerías
import gtk
import gtk.glade

# Cargamos el fichero de glade
xml = gtk.glade.XML("interfaz.glade")

# Elegimos la ventana
ventana = xml.get_widget("window1") # Si la ventana se llama window1

# Creamos la función de cierre
def cerrar():
print "Ventana cerrada, salimos del bucle de GTK"
# Cerramos el bucle de GTK para devolver el control a Python
gtk.main_quit()

# Conectamos el evento "destroy" de la ventana con nuestra función cerrar
ventana.connect("destroy", cerrar)

# Mostramos la ventana
ventana.show()

# Iniciamos el bucle principal de GTK
gtk.main()

Ya tenéis lo básico para programar con Python.

Enlaces útiles:

Créditos:

La entrada del miércoles

Esta entrada es una chorrada, señor autor, bórrela y escriba una de verdad. O no.

Un servidor, desde que era chiquitín, o chiquitón, de mayor tenía para elegir dibujante (profesión con futuro ¿eh?) o desarrollador de videojuegos, ambas dos profesiones molonas, bohemias, e interesantes. Al final, dada mi escasa paciencia por el dibujo, porque algo se me daba, me encaminé a lo segundo, aunque viendo lo "divertida" que es la vida universitaria en las facultades de Bellas Artes, me arrepiento un poco.

Estudié desarrollo de aplicaciones informáticas en un momento algo convulso de mi vida, y durante el proceso conocí a mi actual señorita pareja sentimental, pero llegado a ese punto, mi sueño de dedicarme al mundo del ocio multimedia ya se había desvanecido. El mercado es algo difícil. Y no me quejo, poder hacer software que ayuda a la gente no es algo que me disguste, pero sí que hay demasiadas empresas que lo que verdaderamente les interesa es crear software-saca-cuartos, que haga la vida imposible a sus usuarios, y es muy complicado no caer en una de esas.

Si alguno de vosotros piensa dedicarse a esto, al mundo del desarrollo de software, debéis saber que nunca terminaréis de estudiar, es más, cuando acabéis cualquier tipo de estudio, os daréis cuenta que aún no sabéis prácticamente nada (aunque tengáis una buena base de la que partir), este mundo evoluciona muy rápido, y lo que hace meses era dogma, ya está desfasado. Todavía me acuerdo de un jefe, que presumía de haber estudiado con tarjetas perforadas y haber programado un poco en Cobol, y desde entonces no había escrito ni una sóla línea de código. Reciclarse continuamente, descubrir o redescubrir la tecnología es el pan de cada día, y es algo que os tiene que gustar.

Yo seguiré haciendo mis experimentos, algunos orientados al ocio, otros al web, pero siempre tendré a mi novia dándome caña para que no abandone mi sueño de hacer juegos. Si algún día me animo, subiré mis experimentos.

Minipost: Ahora soy millonario gracias a Adsense

ImpresionesClicksCTR de la páginaeCPM de la páginaIngresos estimados
22.834140,06%€ 0,16€ 3,65

¿En el mundo real un anuncio para 22000 personas cuesta 3.65 €? Vamos, esto es un atraco a mano armada.

Encuesta de jugador a jugador

Esta encuesta lleva tiempo entre los borradores, pero ya puestos a sincerarme, ahí va.

Tu primera consola de videojuegos: Una GameBoy Pocket

Tu primer ordenador: Un 386 a 80Mhz.

La primera vez que jugaste a Street Fighter 2: Pues con un Diskette prestado con una copia para PC... hace muchos años. Y todavía lo conservo.

Algún truco de un juego que todavía recuerdes: set JCDentonMale bCheatsEnabled True , de Deus Ex, sensible a mayúsculas, necesario ponerlo en cada misión, antes de cualquier otro truco.

Tu peor momento como gamer: 6 horas de juego jugando al Final Fantasy VIII sin guardar, y se fué la luz.

¿Prefieres jugar solo o acompañado? Acompañadísmo, la compañía convierte juegos insulsos en fábricas de diversión.

¿Mario o Sonic? Dura decisión... me gusta más Jazz Jackrabbit. Mario, pero sólo por el Mario Land original para el ladrillazo de Nintendo.

¿Sony, Nintendo o Microsoft? De vieja generación Sony, de la nueva Nintendo.

¿Has jugado a World of Warcraft?Sí, mucho, gracias a que funciona con wine a las mil maravillas.

¿Has jugado a algún Roguelike? He "intentado" jugar a un port de nethack... infructuosamente.

Tu primera revista de videojuegos: PC para juegos y jugadores (o Juegos y jugadores para PC) la versión española de PC Gamer, una revista de enorme calidad, con CDs de demos, pero que acabó siendo muy cara.

Videojuego al que más horas le has dedicado: Difícil elección, creo que StarCraft.

Aventura gráfica preferida: Monkey Island, el original, me lo he pasado 100 veces, y voy a por otra (lo tengo en el móvil con el ScummVM).

¿Utilizas emuladores?: Por supuesto.

¿Has creado tú mismo un videojuego?: Sí, con el primero (con RPGMaker) gané un concurso hace 5 años y me fui un fin de semana a Bruselas por la patilla. Actualmente hago mis pinitos con pygame, Javascript+XHTML+CSS, Mono con SDL...

¿Tu género preferido? Un buen juego de estrategia, que cada vez salen menos, o un buen RPG.

¿Mejor consola? Un ultraportátil lleno de emuladores.

¿2D ó 3D? Un 2D de calidad, hace que te olvides de... ¿cuál era la otra opción?

Último juego que has comprado (ojo, comprado!): Casi no me acuerdo... puede que el Final Fantasy Chronicles para la Gameboy Advance.

Profesión medieval fantástica que eliges en este tipo de videojuegos: Ladrón, invocador, guerrero... depende de lo divertido que resulte el juego.

FIFA o Pro: Odio los juegos de fútbol. Pero en su día me gustó el PCFútbol 6, de Dinamic.

El dinero peor invertido en ocio electrónico: Chaos Legion, no me malinterpretéis, es un juego muy bueno, pero me lo pasé en un día, y encima luego me lo robaron.

¿Y el dinero mejor invertido?: Puede sonar raro, pero el Final Fantasy VI para la primera PlayStation, con sus vídeos y sus extras, y con el vídeo del Aria di Mezzo.

¿Conseguiste que tus padres jugaran a videojuegos? Por supuesto, mi padre jugaba antes que yo, todavía me acuerdo de esas partidas por turnos al Duke Nukem 3D. Y hoy en día al Frozen-Bubble, estuvo enganchadísimo. En cuanto a mi madre, ha jugado muy poco, se le da fatal.

¿Te has pasado algún Final Fantasy? Pareceré un raro, pero me he pasado II, III, VI, VII, VIII, IX, X, XII ¡Bingo!

¿Qué títulos que te interesan no llegaste a jugar? Runaway, Halo y Gears of War.

Adiós, querido anonimato

Si soy lectores asiduos del blog 1 os habréis percatado de que ha pasado de ser uno de esos millones de blogs anónimos, para convertirse en uno de esos con autor de nombre feo y apellidos poco originales2.

Muchos aprovecharán para buscarme, encontrarme, identificarme y llevarme a algún sótano oscuro para hacer que me retracte de las opiniones aquí vertidas3 usando métodos de probada efectividad, pero creo que si uno trabaja en este mundo, es bueno hacerse un poco visible.

He actualizado mi sitio web, mi currículo, estoy en Infojobs y Tecnoempleo.

  1. Improbable, según las estadísticas.
  2. Así se comienza un artículo, sí señor.
  3. Espero que la proporción de los que intenten sobornarme sea mayor.

¿Phishing? Ni falta que hace

Advertencia: Este post no es más que una pataleta infantil de nulo interés. No llaméis a la Buaaaaambulancia, ya viene de camino.

Me he hartado de mi banco, como si ya fuera poco complicado el tener un trabajo, ahora les ha dado a estos señores muchimillonarios de la Banca March por cobrarme por todo todo: me está cosiendo a comisiones, después de prometerme que no lo harían, después supuestamente haberlo "arreglado" hace unos meses, lo vuelven a hacer, y la única solución es cambiar de banco, obviamente.

Y he ido raudo y veloz a la de ING Direct, que seguramente algún idiota habrá hecho con el Frontpeich, creyendo, iluso de mí, que me podría crear una cuenta allí. Pero el Mundo Real® nunca deja de sorprenderme: la web falla más que una escopeta de feria, me lleva a lugares a donde no debería llevarme, oculta botones necesarios y muestra errores de código. Vamos, una joya.

Sus señores programadores tienen en su buen haber el escoger la peor de las tecnologías posibles, ASP, plagada de errores irresolubles, ademán de tortuoso diseño. Siendo una corporación que factura miles de millones de euros, ¿qué te cuesta contratar un profesional? Aunque sólo sea uno, que verifique que tu sitio web no sea tan horrible.

(¿Una clave con 5 dígitos para elegir? ¡No me jodas!)

Al final resultó que, aunque fallase el proceso, han registrado mis datos, y he podido cambiar la contraseña, acceder a la gestión online, y descubrir las opiniones de quienes han sufrido este banco. Y no me dan ninguna confianza. Dicen que no hay forma de darse de baja, y aunque yo no he firmado nada, se hartarán a enviarme correos ordinarios para pedirme la firma y la cuenta corriente de la que van a traspasar los recibos. Total, mientras no me cobren, que envíen todo el papel que quieran.

Miro la competencia:

  • Para iBanesto, los que cobran menos de 800 euros no son personas, ni tienen nómina, no es problema para mí, pero esto deja muy claro cual es su actitud.
  • Los del Santander no dejan las cosas demasiado claras, pero parece que me coserán a comisiones en cuanto me quede otra vez sin trabajo. Cosa inevitable en estos tiempos.

Que se le va a hacer, Spain is different.

Al final, me voy a un banco endémico de mi provincia, que me prometen el oro y el moro, hasta que deje de ser menor de 26 años. Al final Conxurita siempre acaba teniendo la razón.

Fin de la pataleta.

Especial emuladores

A todos aquellos que creéis sabéis que cualquier tiempo pasado fué mejor, os dedico este...

Especial emuladores; para revivir esos clásicos imprescindibles.
Definitivamente, este blog no es nada serio.

Snes9x-gtk

Snes9x es un emulador para Super Nintendo Entertainment System, SNES ó Super Famicom, sin interfaz gráfica (esto es, mediante comandos), no libre pero gratuito para uso personal, y bastante bueno. Recientemente Brandon Wright, alias bearoso, creó un frontend en gtk para hacerlo más fácil de usar, y que a mí personalmente me encanta. Es fácil de usar, se integra bastante bien y la emulación es prácticamente perfecta.

Podéis conseguirlo en la página del proyecto en google code y entre los paquetes del Launchpad de bearoso.

Zsnes

Zsnes es, probablemente, el emulador de SNES para linux con más solera. Posee una interfaz propia (bastante arcaica) que cumple su cometido, y una emulación rozando la perfección, ademas de varios filtros y bastantes opciones para mejorar el aspecto gráfico final del juego. En contrapartida se puede decir que, para conseguir los mismos resultados que Snes9x, consume más recursos de procesador. Pero se merece estar aquí.

Está disponible en los repositorios de debian y ubuntu como znes. Su web oficial es www.znes.com.

Fceux

Este es un ligero emulador de Nintendo Entertainment System (NES), o Famicom. Para jugar a los juegos que ahora sólo se ven en las consolas de los chinos, pero sin pasar vergüenza.

Está en los repositorios. Pero no todo puede ser bueno, la interfaz gráfica, gfceux, no funciona si no tenéis python2.5 como versión de Python por defecto (al menos en la versión de los repos), pero tiene solución fácil, teniendo python2.5 instalado, ejecutándolo como "python2.5 $(which gfceux)".

Web de fceux.

Epsxe

Es cerrado, luce feo, y está más caducado que un yogur en una cápsula del tiempo. Pero está aquí, porque sigue siendo el emulador de PlayStation, la primera, que mejor lo hace. Es cierto que hay que estar haciendo piruetas que para hacerlo andar pero bueno, sigue siendo el mejor.

Web oficial de epsxe.

Gens

Emulador de Sega Genesis, o como la conocemos a este lado de ése charco, Sega Megadrive. Porque jugar al Sonic 3 con filtros, a todo color, y con un sonido excelente es algo que no se puede pagar con dinero, puede que con sexo sí, pero no con dinero.

Paquetes precompilados para Debian (y Ubuntu) y Red Hat en la web de Gens en sourceforge.

DesMuMe

Los emuladores del último despropósito portátil de Nintendo, adalid de juegazos como "Imagina ser... idiota", "CanguroZ" y "Barbie visita el huerto por enésima vez, de rosa y montada a caballo hermafrodita", ambos de Ubisoft.

Vale, tiene juegos decentes, pocos, muy pocos, poquísimos, poquitísimos, pero haberlos haylos. Como la consola está algo recién salida del horno (es un decir) la emulación dista de ser perfecta, aunque se está trabajando en ello, y muchos juegos son jugables, incluso alguno lo he disfrutado (durante 30 segundos), así que aquí queda eso.

Web del proyecto.

Mame

La archiconocida quimera de la emulación de máquinas recreativas, y funciona, aunque sin 3D. Aunque tiempo al tiempo. Nada como jugar al King Of Fighters o el Street Fighter 2 como japón los trajo al mundo.

En los repositorios como xmame o sdlmame (este último es preferido), con sus frontends kxmame y gmameui. La web de xmame ha desaparecido y aquí está la web de sdlmame.

VisualBoyAdvance

El emulador por excelencia de GameBoy Advance, permitiendo jugar también a los de Gameboy y Gameboy Color. Sí, se que los juegos diseñados para la portátil pueden considerarse "poco atractivos" para jugar en un ordenador pero, ¿y si estamos hablando de un netbook? ¿Y si estamos hablando de imprescindibles como Golden Sun y su secuela o Final Fantasy Chrystal Chronicles? Pues eso, a jugar.

En los repositorios: visualboyadvance y visualboyadvace-gtk (el ejecutable se llama gvba).

Página web del proyecto.

ScummVM

Supongo que no esperábais el SCUMMVM aquí. ¿Es un emulador? ¿Un pájaro? ¿Un avión? Aclaro. No es un emulador al uso, ya que no se dedica a traducir instrucciones de memoria, procesadores, y chips gráficos. Es mas bien un motor que, sustituyendo a los originales de las aventuras gráficas de LucasArts, Sierra, y otras, permite usar sus archivos y jugarlas tal cual lo harías normalmente y normalmente no puedes, porque son muy antiguas, no son para tu arquitectura de procesador o sistema operativo... Pero merece estar aquí, porque hace para nosotros exactamente lo mismo que un emulador: permitirnos jugar en nuestro ordenador, PSP, GP2X, o incluso en nuestro móvil, a juegos para otras plataformas, en definitiva, permitirnos revivir esos clásicos imprescindibles.

El costo de haber cerrado en Enero

En Enero cerramos, y tal como me esperaba, ha habido consecuencias en cuanto a visitas,que han descendido un 8%. Pero no pasa nada, ha sido por una buena causa.


Google Chart

Un 8% no parece una bajada tan pronunciada, pero la verdad es que teniendo en cuenta que la mayoría de las visitas van encaminadas a unos pocos tutoriales, guiados por Google, es una caída importante de lectores asiduos, los que de verdad importan.

Pero no todo va a ser malo, el hecho de descansar un poco de la bitácora, ha hecho que vuelva con las pilas recargadas, y con más ganas de escribir que nunca. A ver cuánto me dura...

Trabajar en la nube

Mucho se habla de las soluciones de la nube, y más concretamente los servicios en línea que vienen a sustituir aplicaciones de escritorio, pero su grado de penetración de mercado es residual. Cierto es que trabajo entre usuarios informáticos de muy baja capacitación, pero me sigue sorprendiendo que prefieran la inoperancia de vetustos programas a la agilidad de trabajo de estas nuevas herramientas.

Por otro lado, sé que a muchos de vosotros os asusta que Google tenga tanta información sobre vosotros, es comprensible, pero aunque tome como ejemplo a Google Docs, será extrapolable a otras soluciones de otras empresas, como Zoho.

Si no trabajáis en la nube, al crear, por ejemplo, un documento de texto con formato, creáis un archivo en vuestro disco duro. Sí, únicamente en vuestro disco duro. Y esto no está mal en absoluto.

Si alguien os pide ese documento porque, al fin y al cabo, ni vivís, ni trabajáis o estudiáis solos, lo normal es hacer un email y se lo adjuntas o, siendo muy optimista, usáis un servicio de almacenamiento online como un FTP público. Hasta ahí todo bien.

El documento, será susceptible de correcciones y modificaciones, por varias personas, y cada uno acabará teniendo una decena de versiones irreconciliables del mismo documento original en cada unas de las bandejas de vuestros correos.

Cuando se trabaja en la nube, solo hay un documento, en la nube, y si además usáis un editor colaborativo, todos vosotros podréis modificar, a la vez, el mismo documento y ver todos los cambios que vayáis realizando en el mismo, teniendo y trabajando siempre sobre la versión actualizada.

Ello no evita que en un momento dado, si queréis, hagáis una copia sólo para vosotros, o creéis un documento que no queréis compartir. Pero en cualquier caso, vuestros documentos siempre estarán accesibles desde cualquier ordenador con conexión a Internet.

La aparente falta de funcionalidad de muchos de los servicios, muchas de ellas absolutamente superfluas, de las que los usuarios menos capacitados usualmente abusan, no son tanto por las limitaciones de las tecnologías usadas para desarrollar estas herramientas (juntar XHTML, Javascript y un navegador que no sea una puta mierda como Internet Explorer porquería, tiene un potencial prácticamente ilimitado) sino por la decisión unilateral de no añadir funcionalidades "basura", que no hacen más que complicar la interfaz de cualquier aplicación.

Mucho podría hablar sobre el mal diseño de interfaces, y la adicción a las mismas de usuarios de bajo nivel. Pero este no es el tema y, como podéis comprobar, los beneficios son muchos.

Aquí tenéis una lista de editores colaborativos

Fotos de la lluvia de febrero

A principios de febrero, en Canarias, ha caído agua, mucha agua, y una amiga me ha enviado una recopilación de fotos de la correspondiente inundación de Santa Cruz.

¿Porqué cada vez que llueve, Santa Cruz de inunda? Es normal cuando la planificación urbana de una ciudad de realiza conforme a amiguismos, falsos concursos públicos adjudicados a dedo y se desvían dinero destinado a obras públicas a bolsillos privados. Ale, a seguir votando a los mismos.

EDITO, que se me había olvidado:

Cine: The Road (La carretera)

De entrada aclarar que no soy yo muy de hacer propaganda gratuita a productos meramente comerciales como puede ser el cine americano (y ni hablar de la basura hipersubvencionada española).

Esta película de 111 minutos es una por las que vale la pena pagar. Un argumento sólido, y un buen enfoque al manido tema postapocalíptico: la lucha por la supervivencia cuando la supervivencia es poco más que imposible.

No esperéis otro Resident Evil, ni una chorrada del estilo 2012, esta película tiene más que ver con Gorilas en la niebla. Es un drama, no una película de acción.

Muy bien actuada, hasta el punto que el papel de Viggo Mortensen queda eclipsado por actores de reparto como Robert Duvall (que hace del viejo Eli) o Michael K. Williams (el ladrón). Con una fotografía y efectos especiales maravillosos, y un buen guión increíblemente desarrollado, de verdad que te crees que el mundo se ha acabado, y después solo quedan hambre, locura y muerte.

Por si no ha quedado claro, la recomiendo para todo aquel que quiera ver una buena película.

Entrada de la película en el imdb.

¿Quien inventó el Blu-ray?

Esta entrada no va de patentes. Las patentes frenan el desarrollo tecnológico y dan un poder inmenso a grandes multinacionales que usarán única y exclusivamente para extorsionar a empresas mas pequeñas. Pero esto no va sobre patentes.

Esta entrada viene de un genio, científico, que ha logrado grandes cosas que han pasado demasiado desapercibidas entre la mayoría de vosotros. Pero primero os contextualizaré.

Recién estrenados los años noventa, la electrónica, circuitos integrados de una escala que a día de hoy serían considerados gigantescos, sus enormes y vetustos controladores integrados, y por supuesto, sus diodos.

El diodo emisor de luz, o LED, es decir, un semiconductor con dos estados uno de ellos con la peculiaridad de emitir luz, dados los avances en materia de semiconductores, por limitaciones físicas, sólo podía emitir luz roja. Al igual que cualquier tipo de láser en ese momento. Lo que limitaba enormemente sus aplicaciones, puesto que la luz roja tiene la mayor longitud de onda y la menor frecuencia de todo el espectro visible por el hombre, lo que inevitablemente la convierte en la menos precisa. No obstante, parecía ser suficiente, como evidencia el desarrollo de la tecnología de almacenamiento óptico, CD (1985) y DVD (1996), usando esta tecnología.

Entonces fué cuando Shūji Nakamura, ingeniero electrónico japonés y empleado de la corporación Nichia, desarrolló el LED de nitruro de galio con luz azul. Si bien las propiedades lumínicas del nitruro de galio se conocían desde los 60, nunca se habían considerado aprovechables. Además, este LED azul, con una cobertura extra de fósforo, se convirtió en el primer LED de luz blanca, un hito histórico, presentado en 1993, y que le ha valido a Nakamura un gran reconocimiento internacional por sentar las bases de lo que hoy conocemos como "bombillas" LED (aunque el término bombilla sea muy incorrecto), muy eficientes y con una potencia lumínica muy superior a los tubos fosforescentes.

Toda esta tecnología, que sentó las bases que hicieron posibles el desarrollo de las grandes pantallas LED, del LCD+LED, que incrementan espectacularmente la nitidez del LCD; del OLED, LED orgánicos que posibilitan pantallas muy finas y flexibles; y del Blu-ray.

El Blu-ray, originalmente BD-Rom, fué diseñado por Sony, y paralelamente por Pioneer, aprovechando que un láser de luz azul, siendo este espectro el de más frecuencia y menor longitud de onda, es muchísimo más preciso que el rojo. Si a esto añadimos los avances tecnológicos que permitían crear lentes más pequeñas, resultó que ahora se podía grabar y leer más datos en un espacio menor, siendo además esta capacidad multiplicada al poseer más de una capa de datos.

Sony se considera creadora del Blu-ray, y de hecho fué corriendo a la oficina de patentes incluso sin haberlo creado todavía, como si mereciese algún mérito el cambiarle el nombre a algo que ya existía.

El auténtico creador de la tecnología fué Shūji Nakamura, un genio de la electrónica, en su etapa en Echi Corporation. Hoy es profesor en la Universidad de California Santa Bárvara (UCSB) y ha recibido diversos galardones: Society for Information Display (1996), Rank Prize (Reino Unido, 1998), Premio de Electrónica Cuántica del Instituto de Ingenieros Eléctricos y Electrónicos de EEUU. (2002), a Medalla Benjamin Franklin (2002), Premio de Tecnología del Milenio de Finlandia (2006), el premio Príncipe de Asturias de Investigación Científica y Técnica (2008), Doctor Honorario de Ingeniería por la Universidad de Hong Kong (2008) y el Premio Harvey Prize por la Technion de Israel (2009).


Lo dicho, Shūji Nakamura, un genio.
Fiat lux

(Anónimo. Proverbio del latín y lema de la UCSB. Hágase la luz.)

Créditos:Fuentes:

Si queréis saber más, tenéis Brilliant!: Shuji Nakamura And the Revolution in Lighting Technology, un libro de Bob Johnstone, o ir a estudiar electronica en la Universidad de Santa Barbara y preguntarle.

Syntensity

De vez en cuando, un par de alemanes locos, Wouter van Oortmerssen y Lee Salzman, crean el motor 3D definitivo en cuanto a deleite visual y rendimiento, Cube2 Engine, y como prueba de concepto crean un juego de disparos del montón, Sauerbraten, que aunque bonito, jugable, y divertido no resulta para nada innovador. Eventualmente se les ocurre crear un mmorpg con el motor, Eisensterm, que luce increíblemente bien, pero cuyo desarrollo se toman con demasiada paciencia.

Pero no todo va a ser malo porque, eventualmente, de la comunidad de modders surgen varios locos capaces de convertir una buena idea en una idea aún mejor, Syntesity: un metaverso (todavía verde), construido sobre Cube 2 Engine (reciclando Sauerbraten), sobre el que construir y acceder a diferentes juegos, por ahora prototipos de varios juegos de disparos, uno de pintar otro de carreras.

Es mandatario seguir la pista a este juego, ya que de él, de entrada, pueden surgir tanto el primer juego de carreras realmente divertido para linux (excluyendo a Supertuxkart, claro), como toda una nueva serie de minijuegos y juegos realmente innovadores, y quien sabe, tal vez ese esperadísimo MMORPG ambientado en medio de la guerra entre Decapod 10 y la Tierra1.

  1. No creo que a Matt Groening le haga mucha gracia, pero siempre podremos soñar...

Gnome Schedule

Para los adictos a la eficiencia, tareas programadas, o esos extraños señores obsesionados con ejecutar acciones repetitivas, existe un demonio (de los que se ejecutan en segundo plano, no de esos rojos con cuernos) llamado cron, y una utilidad llamada at.

Cron, aunque simple, no es muy amigo de los novatos, quizás sea porque la sintaxis del crontab (su fichero de configuración) luzca extraña o porque, todo hay que decirlo, es tímido, hace lo que tiene que hacer, y como viene, se va, en silencio, cabizbajo, directo a su agujero. At es mas sencillo, siendo un comando que permite que el comando dado se ejecute a una hora determinada.

Ambos son la pareja perfecta para planificar, retrasar, o definir intervalos para la ejecución de comandos, y para facilitarnos la vida, Gaute Hope el amigo de los niños, ha creado una completa y agradable aplicación que simplifica enormemente lo anterior: Gnome Schedule.

Podéis encontrar su página en Sourceforge, su entrada en packages.ubuntu.com, o instalarlo desde el repositorio 'universe', de Ubuntu, teniéndolo activado como origen de software, con vuestro gestor de paquetes preferido (Packagekit, Synaptic, aptitude, apt-get...) o usando apturl.

Sintel: Durian Blender Open Movie Project

Los chicos de Blender, después de deleitarnos con Elephant's Dream y Big Buck Bunny, vuelven a hacerlo con una nueva obra maestra de la animación por ordenador, utilizando únicamente herramientas de software libre, y su talento.

Para quien no lo sepa, Blender es, desde el punto de vista técnico, una potente aplicación de de modelado 3D, animación 3D, con soporte para shaders, iluminación multifocal y difuminada, texturizados, físicas, motor para videojuegos, y Python como lenguaje scripting. En la práctica, es uno de los principales adalides de las altas cotas de calidad del software libre, algo que la Fundación Blender, está empeñada en demostrar a todos, como ya ha venido haciendo, con los siguientes proyectos:
  • Proyecto Orange: Elephant's Dream, un corto onírico con estética steampunk en la que un joven y un anciano se adentran en el mundo de los sueños.
  • Proyecto Peach: Big Buck Bunny, otro corto, con estética mucho más vistosa, divertido, en la que un enorme conejo demuestra quién manda a un grupo de ardillas.
  • Proyecto Apricot: Yo! Frankie, un videojuego de gran calidad gráfica (no opinaré sobre el aspecto jugable) que toma como protagonista a una de las ardillas de Big Buck Bunny, enfocado a demostrar la potencia del motor para videojuegos de Blender.
  • Proyecto Durian: Sintel, el corto actualmente en proceso de producción, destinado a un público adolescente, y ambientado en un mundo fantástico.
Lee Salvemini
De hecho, el numeroso equipo, apoyados económicamente por la misma Fundación Blender y varios patrocinadores (a los que cualquiera puede sumarse), han participado también en proyectos anteriores, aspiran a realizar el proyecto con el mínimo presupuesto posible (casi todos colaboran en su tiempo libre), y son profesionales, muchos trabajando para empresas importantes del sector. Iba a copiarlos a todos aquí pero son muchos y podéis verlos, algunos con portafolio, en la página del proyecto, sección About, apartado Core Team.
Más información en durian.blender.org
Crédito: Las imágenes son propiedad de Blender Foundation, y están licenciadas bajo Creative Commons Attribution 3.0.

Videos y musica del PC a la PS3

Ojeando por internet sobre como montar un servidor multimedia y acceder al contenido de mi ordenador desde mi nueva PlayStation3, me topé con PS3 Media Server, que no sólo cumple su cometido con creces, permitiendo ver mis fotos, vídeos, e incluso escuchar la música almacenada en mi disco duro, todo ello a través de la WIFI en mi televisor; sino que además permite transcoding, esto es conversión en tiempo real, para aquellos formatos que la consola de Sony sea incapaz de reproducir (cosas del software privativo).

Está programado en Java (nada es perfecto), es multiplataforma, y es libre.

Podéis encontrarlo en su página en Google Code.

Créditos: La captura de pantalla me la he fusilado de la web del proyecto.

¿Qué es el iPad?

Sí, sé que esta entrada viene con retraso, pero el blog estaba cerrado en contra de la censura, se siente.

Respondiendo a la pregunta: el iPad es muchas cosas:

  • Si preguntas a los señores de Marketing, incluyendo a Steve Jobs, de la empresa más cerrada, obtusa, y enemiga de las libertad del software, te dirán que es una revolución, algo que hay que tener, un Mac pero mejor que un Mac, la nueva forma de conectarse a internet...
  • Si preguntas a alguien independiente, te dirá que es un iPhone, grande, más caro o muchísimo más caro dependiendo de la versión, con todas sus limitaciones heredadas de su obtuso y cerradísimo sistema operativo, diseñado por Apple para encontrar otro producto blindado a terceros con los que ganar mucho dinero.
  • Si preguntas a cualquiera de los que apoyamos el software libre, te diremos que es una piedra con una bonita carcasa, con la que la empresa que mejor sabe hacer sentir a sus esclavizados usuarios pretende exprimir los bolsillos de esa gente que cree guay por tener algo inútil de diseño que vale una fortuna.

Y como este es mi blog, y no voy a comisión (si alguien de Apple quiere sobornarme, mejor que me compre un Nexus One libre), toca desarrollar este tercer planteamiento.

El iPhoneOS, el sistema operativo común entre iPad e iPhone, es un software limitado por diseño, cerradísimo, que sólo puede ejecutar las aplicaciones que Apple quiere que ejecute. Si eventualmente Apple cambia de opinión sobre una aplicación que has instalado, desaparecerá mágicamente de tu terminal. Única y exclusivamente puedes instalar aplicaciones pasando por su tienda, Apple App Store, y única y exclusivamente podrás escuchar y ver la música y vídeos que Apple te venda. Punto.

Apple no aceptó el plugin de Flash para su navegador, por lo que no se puede ver ningún contenido que use esta tecnología, que por cierto odio, ni en el iPhone ni el iPad. Y Steve Jobs hablaba de una forma nueva e innovadora de acceder a Internet, cuando en realidad se refería al 80% de Internet.

Un iPhone, pero más grande y caro, con el que no se puede llamar ni recibir SMS, a pesar de incluir conexión 3G con algunos de sus modelos. Al fin y al cabo, también quieren que compres unos de esos cacharros multitáctiles que renuevan cada año, y ciertos "genios" vuelven a comprarse.

Tiene lector de libros electrónicos al igual que cualquier ordenador, pero tardará años en dejar de estar limitado a Estados Unidos de América, cansará la vista (no es de tinta electrónica), y obviamente los libros los tendrás que comprar, entre un catálogo "preseleccionado" y con los precios bastante inflados, en la tienda de Apple.

Tiene un procesador de un gigaherz de frecuencia de reloj, pero sólo puede tener una aplicación funcionando al mismo tiempo (no soporta multitasking). Admite la mayoría de aplicaciones de iPhone, pero la mayoría de esas aplicaciones no están preparadas para una pantalla tan grande, que por cierto es LED, pantalla de cristal líquido (LCD) retroiluminada con diodos luminosos, y no OLED, en la que cada pixel de la imagen es un diodo orgánico en sí mismo y emite su propia luz.

Sí, es multitáctil, pero mi perro también lo es.

El control de Apple sobre el iPad llega hasta el punto de que, de la misma forma que Amazon hace con el Kindle, eventualmente bloqueará noticias que a sus socios e inversores no les guste que leas, borrarán contenido de tu terminal que no les guste que tengas, y en definitiva, tu terminal no sea tuyo, sino suyo, e imbécil de ti que has pagado una fortuna a cambio de que te controlen, monitoricen, y elijan lo que puedes hacer o no.

Pero todo no va a ser malo, puesto que iPad es una marca registrada desde hace años por Toshiba, al igual que ocurrió con el iPhone propiedad de Cisco Systems e Infogear, al menos tendremos un interesante culebrón legal que seguir. Y gratis, pero no para los de la manzanita.

Compraos una tableta de Nokia, que viene con Maemo, alguna de las tabletas que próximamente aparecerán con Android o un Netbook, que están tirados de precio; podréis aprovecharlo mejor, ya que podréis hacer con él lo que os de la gana, porque es vuestro, porque lo habréis pagado, y esto es algo que los fanboyeros de la manzana no comprenden. Y aunque, en el caso de Android, Google sea dueño de tus datos, ¿no es ya demasiado tarde?

Créditos

Cerramos en enero, reabrimos en febrero

Ante la iniciativa inmoral y pro fascista del Gobierno de España de reinstaurar la censura en Internet, a petición de la mafia de la cultura basura; este blog ha permanecido cerrado durante el mes de enero como protesta.

Esta bitácora ha permanecida en silencio durante "la Cuesta de Enero" como protesta a un artículo que el Ejecutivo-Legislativo Español (en España, la separación de poderes es mentira) pretende incluir en la Ley de Economía Sostenible. Dicho artículo permite, sin orden judicial, que una Comisión Administrativa dependiente del Ministerio de Cultura pueda cerrar, bloquear o censurar cualquier web por cualquier razón que ellos consideren oportuna.

Dicha decisión ha sido tomada ante la negativa de los jueces españoles de aceptar a trámite el cierre de páginas web, y en algunos casos obligar a las gestoras de derechos de autor a pagar las costas del proceso e indemnizaciones a los administradores de dichas webs por mala fe procesal. Ante este panorama, el Ministerio de Cultura, en su rol de garante del negocio no regulado, inmoral y mafioso que realizan las gestoras de derechos de autor, ha optado por modificar la ley y eliminar de un plumazo esos molestos derechos elementales, tipificados en la Constitución, que son la Presunción de Inocencia y Libertad de Expresión, y contradecir a la misma, base de nuestra democracia, que advierte que sólo mediante orden judicial podría secuestrarse un medio de comunicación.

El hecho que una comisión administrativa reciba tal poder, por que los jueces no contentan a las gestoras, atenta directamente contra la separación de poderes, e instaura un estado de excepción en Internet al estar formada tal coalición por representantes de sociedades que continuamente vierten insultos, amenazas y extorsiones a ya no sólo a los que publicamos contenidos en Internet, sino a todos los medios de comunicación.

La última vez que algo parecido sucedió en España ocurrió con la instauración del Órgano Censor, también dependiente de un Ministerio de Cultura a manos de un gobierno no democrático. Ahora un gobierno autodenominado democrático quiere hacer lo mismo, censurar medios de comunicación en base a cualquier criterio arbitrario a su propia elección y discreción, tal como se viene haciendo en Cuba, China, Corea del Norte...

Una de las razones que se han esgrimido, según he leído en la blogosfera, son las presiones que el Gobierno Estadounidense ha estado realizando después de ver informes sobre la piratería en España, falsificados por Promomusicae, otra gestora de derechos, que por cierto se ha llevado varios millones de Euros en concepto de subvenciones, incluyendo una para la realización de un inoperativo portal web que no visita nadie). Una vez más, se premia a los causantes de los problemas, y el resto se convierten "mágicamente" en culpables.

Éste y otros sucesos anteriores, como la instauración del Canon Digital, nos hacen pensar que las actuaciones del Ejecutivo español no van tan encaminadas a beneficiar a la población o defender una creación sociocultural (a la que Internet está beneficiando enormemente), sino que están llevándose a cabo, junto con el desvío de grandes sumas de dinero en concepto de subvenciones, en concepto de contraprestación a los favores de propaganda y apoyo realizado por ciertos colectivos durante pasadas elecciones.

Los "amigos de la ceja" nunca hubieran estado tan contentos: Mientras a los piratas que matan, violan, y amenazan se les pagan grandes sumas de dinero, a los piratas que creamos cultura se nos mata, viola, y amenaza. El país en quiebra, la clase media, considerada baja en el resto de Europa, sufriendo la crisis y estos corruptísimos señores, como siempre, legislando a la carta para sus corruptísimos amigos.

Créditos:Más información en Red-Sostenible.net.

Edito 27.03.2010: Según la RAE, los nombres de los meses van en minúscula.