Botones con texto y stock icons en PyGtk 1

He empezado a aprender un poco de Python, muy sencillito y una buena forma de escapar del boilerplate code constante en C. He empezado mirando el libro libre Dive into Python (con traducción al Español, pero desactualizada) y en lugar de andar haciendo las típicas pruebas de concepto, me he puesto con PyGtk. Así voy aprendiendo Python a la vez que van saliendo ventanitas.

Desde hacía tiempo tenía ganas de usar los iconos de los temas de Gnome en una aplicación mía, pero por mucho que buscaba no encontraba con la palabra clave. Si os fijáis, la mayoría de las aplicaciones basadas en Gtk utilizan los mismos iconos para las mismas cosas. Por lo visto estos iconos se conocen como stock items. Es fácil utilizar un botón con un icono de estos. Simplemente tendríamos que utilizar

  1. self.button = gtk.Button(stock=gtk.STOCK_SELECT_COLOR)

El valor que le demos al argumento stock determinará el tipo de icono. Directamente el sistema incluirá una etiqueta relacionada con el icono.

Por desgracia, si queremos incluir un stock icon de estos y a la vez una etiqueta personalizada, las cosas se complican - aunque no mucho. Fácilmente podemos hacer una clase derivada de gtk.Button, y dentro del mismo incluir una caja horizontal con dos widgets: una imagen con el stock icon y la etiqueta con el texto que queramos. The Code:

  1. class myCustomButton (gtk.Button):
  2.  
  3.         def __init__(self):
  4.                 super(myCustomButton, self).__init__()
  5.                 print “myCustomButton init”
  6.                
  7.                 self.estructura = gtk.HBox()
  8.                 self.icono = gtk.image_new_from_stock(gtk.STOCK_STOP, gtk.ICON_SIZE_LARGE_TOOLBAR)
  9.                 self.label = gtk.Label(‘Éste es mi texto’)
  10.                
  11.                 self.estructura.pack_start(self.icono, True, True, 3)
  12.                 self.estructura.pack_start(self.label, True, True, 3)
  13.                
  14.                 self.icono.show()
  15.                 self.label.show()
  16.                 self.estructura.show()
  17.                
  18.                 self.add(self.estructura)
  19.                 self.show()

Quedaría algo así de bonitorl:

Panel Multitouch casero 3

Creo que voy a probar a hacerlo. Encontré hace un par de semanas una librería llamada OpenCV, que te permite jugar con la webcam, ideal para estos casos. Casualmente la librería que utilizan en el vídeo, TouchLib, utiliza como base la OpenCV, así que mejor que mejor.

Hago Webs, ¿quieres una? 2

Desde mis inicios en internet me interesó el diseño y desarrollo web. Antes de tener acceso a internet empecé aprendiendo HTML y usando un programa que generaba banners bastante cutre, el Xara Web Studio. Más tarde instalé Photohop 5 y, aunque tardaba 10 minutos en cargar en mi Pentium a 200MHz, pude aprender a usarlo. Avancé con xhtml, css y Flash, aprendiendo de forma “offline”.

Más tarde el Corte Inglés trajo a casa el primer ordenador en condiciones, y posteriormente llegó… INTERNEEERRLL!! Empecé a meterme en foros de diseño web, flashla.com, nomaster.com, domestika.org, after-hours.org (del que fui moderador y en el que conocí a gente genial) y por supuesto en canales del IRC-Hispano (ahora en decadencia), del que destaco el canal #flash, que visitaban genios del programa de Macromedia tales como Manuel de la Higuera o BitByte (andandarán?).

En la lista de ASNativos conocí a uno de los pocos gaditanos flasheros con los que me he topado, Fede Rivas que, pese a ser yo por aquel entonces un mocoso sabiondillo de 15 años, confió en mis conocimientos de Flash y me dio mi primer curro remunerado. De ahí surgió mi primer trabajo: Jardines de Montealto, una web para una guardería de Jerez (Disclaimer: El uso de la tipografía Comic Sans era obligatorio). Más tarde me ofreció un segundo trabajo, la web de una Distribuidora Gaditana de Cerámicas, también en Flash. Creo que las dos webs que hice no quedaron mal.

Por mi cuenta, hice y programé un diseño en CSS para el portal csszengarden.com, que finalmente y para mi sorpresa fue elegido como uno de los diseños oficiales, el número 185. Puedes visitarlo pulsando en este enlace. Creo que fue un buen ejercicio de desarrollo web accesible. También en XHTML y CSS diseñé y programé la web de la ONG Adacca, de Cádiz, aunque me temo que han añadido un par de cosas desde que la subí cuya implementación no comparto, como un par de tablas para maquetar los logos de la junta (arg, tablas para maquetar :S), pero bueno ya las modificaré para hacerlas xhtml & css compliant.

La última web que hice fue la de ActivaSur, un grupo que oferta servicios de animación y ocio, sito en Granada. De nuevo, otra en Flash para el bote.

La cosa es que me gustaría encontrar algún trabajillo de diseño y/o desarrollo web en XHtml & CSS o en Flash. He estado mandando algunos correos a empresas de aquí de Cádiz pero náh, parece que la gente no se da cuenta de que una buena presencia en internet es importante y prefieren mantenerse con esperpentos como éste. ¿Tienes un negocio familiar y quieres saltar a la red de redes? ¿Tienes un proyecto interesante o necesitas un diseño webdospuntocérico a la medida? ¿Quieres regalarme un portátil para mis estudios de informática? Envíame un correo a theom3ga [ARROBA] gmail.com. ¡A ver si hay suerte!

El patrón Observer 2

Los patrones de diseño son como soluciones precocinadas para problemas comunes en el diseño y desarrollo del software. Hay muchos problemas recurrentes al diseñar un programa, y los patrones de diseño nos pueden servir para adelantar unos pasos y no repetir trabajo.

Uno de estos patrones es el patrón Observer. Funciona como… como Apple, por ejemplo. Apple tiene miles de fanboys por el mundo expectantes a que saquen algún nuevo producto. Cuando Apple hace un lanzamiento, todos sus fanboys se enteran y cada uno actúa de manera distinta: Unos van a comprar el producto el mismo día del lanzamiento, otros esperan un par de meses a que pase el hype y otros se lamentan de no tener dinero para agenciarse el nuevo cacharro. Obviamente, Apple sólo se ha molestado de informar del nuevo producto, no tiene constancia de lo que va a hacer cada uno de los pringaos fanboys.

El patrón Observer funciona igual. Tenemos una clase Observable, que guarda un conjunto de referencias a unas clases Observadoras, y en un momento dado envía una notificación a todos los observadores. Cada una de las clases observadoras tendrá un método con una especificación común, pero en cada caso hará algo diferente, dependiendo de la clase.

Vamos a poner un pequeño ejemplo en C++.
Read more »

Descomponer GIF animado para juegos 2

Para el curso que viene voy a coger la optativa de Diseño de Videojuegos, así que llevo un par de semanas mirándome la SDL, una librería multiplataforma open-source que ofrece rutinas para manejar gráficos 2D, sonidos, entrada/salida, etc. y es muy utilizada en el desarrollo de videojuegos sencillitos, así como al portar juegos de plataformas antiguas.

Y ese regustillo a los 8 bits me está impulsando a buscar sprites y tilesets de juegos antiguos, principalmente para poder utilizarlos mientras aprendo y así no perder tanto tiempo dibujando mis propios gráficos. Cabe destacar la impresionante labor de este tío recopilando links a webs de sprites gratuitos, generadores de sprites, etcétera.

La cosa es que encontré algunos sprites con animaciones interesantes pero venían en formato GIF animado, y en la SDL se suelen utilizar tilesets, es decir, poner todos los fotogramas de la animación en una sola imagen, uno al lado del otro, y dibujar sólo el fotograma que nos interesa en cada momento. Así sólo se carga del disco una imagen que se mantiene en memoria, lo cual resulta óptimo. Así, me he puesto a buscar alguna forma de “descomponer” el gif en una sola imagen con todos los fotogramas uno al lado de otro y, cómo no, la inmensa y genial suite ImageMagick dispone de formas de hacerlo, bastante sencillas por cierto.

En esta web explican los usos más comunes de la ImageMagick con gifs animados y demás, y en uno de los apartados explican lo que yo busco. Tomando la siguiente imagen como partida:

Podemos utilizar el siguiente comando:
montage imagen_origen.gif -coalesce -tile x1 -geometry '+2+2' -background none -bordercolor none montaje_destino.gif

Y obtener lo siguiente:

Que es exactamente lo que venía buscando. Mañana más y mejor.

Amiguismos en Flickr 1

La blogocutresfera española da pena. Pasa lo mismo que hace unos años (y supongo que ahora) en el mundillo del Flash hispano: Una serie de gurús (que no lo son tanto) son idolatrados y se chupan el culo entre sí a diestro y siniestro, y el resto de mortales también tiene que chuparles el culo, pero no reciben paga.

¡Ni se te ocurra ir en contra de ellos! ¿Quieres morir? Qué pasa, ¿es que quieres que alguno ponga en su chachiblog que eres un zurullo y arruinarte la vida? Hombre por Dios, no tientes a aquél que tiene PageRank 4, no me seas masoquista.

En este artículo el fotógrafo australiano Neil Creek comenta 10 cosas que odia sobre Flickr y sus usuarios, pero se puede extrapolar perfectamente al resto de la cutresfera.

Los puntos que resaltaría del artículo son varios.

  • “If I like your photo, I want to know more about it. I don’t want to read death metal lyrics or emo goth poetry”. Lo que quiere decir que en las descripciones de las fotos va eso, una descripción, información sobre la misma, no un cacho de poesía emo gótica o la letra de una canción de death metal. Joas, cuánta razón. Emos del mundo, huid a vuestras cuevas, o al menos huid de Flickr. Ya tenemos suficientes casos de emo-melancolía de interesante estudio psiquiátrico en fotolog.com.
  • Gaudy large banners and “awards”. [...] I don’t give a damn about your invented ‘awards’, and I really hate the comments on my photo getting clogged up with huge icons that look like they were stolen from a circa 1998 web site. La verdad es que no sé quién inició la moda de los premios estos, pero son cutres a más no poder. Ya podrían currarse unas imágenes más elegantes, no esos gifs de la era Netscape.
  • One or two word comments. ¡La máxima expresión del chupaculismo en flickr! No hay nada mejor que visitar la galería de algún gurú webdospuntocérico moderno y visitar alguna de sus fotos (aunque sea cutre) para tener toda la colección de comentarios chupaculescos de dos a tres palabras y sin contenido ninguno. Vamos, que lo mismo podrían poner “I was here” o “¡Podemos!”, que poca diferencia habría. Eso sí, estos comentarios son los que hacen que el ego de los gurús vaya en aumento.

Pero bueno, supongo que toda la vida habrá gurús. La gente parece que necesita seguir y chuparle el culo a seres superiores para sentirse parte de una comunidad. Lo peor de todo es que la ignorancia del resto les abre puertas, un tanto injusto en mi opinión. Allá ellos, el tiempo pondrá a cada uno en su lugar.

P.D.: Vaya tela lo de Mago de Oz en el Viña. Ya van de estrellitas, cuando lo único que tocan es pelea de perros.

Elegir carrera: Ingeniería Informática 4

Por estas fechas, los bachillerines ya habrán terminado los exámenes de selectividad y estarán a la espera de las notas. Tranquilos, como ya os habrán dicho sienes y sienes de veces, la selectividad es fácil, no sirve como prueba selectiva para que sólo entren a la universidad los que realmente la van a aprovechar, pero por lo menos algún que otro garrulo se queda por el camino.

En fin, la carrera a elegir tras selectividad debería estar clara, pero si alguien aún duda y está pensando en hacer alguna clase de ingeniería en informática, voy a comentar mi experiencia. Yo estudio Ingeniería Técnica en Informática de Sistemas por la Universidad de Cádiz (qué moderno queda eso de “por la universidad de…”, muy de película americana).

Para empezar, hazte una pregunta: ¿Cuánto te interesa la informática? Si tus intereses informáticos se limitan al méseñer y al fotolog, métete en empresariales. Si te da dolor de cabeza pensar cómo es que puedes leer este texto en tu pantalla, métete en empresariales. Y, sobre todo, si al poner

javascript:alert(1-(window.navigator.userAgent.indexOf("MSIE") == -1))

en la línea de direcciones, aparece un mensaje con un 1, ese 1 es la nota media que sacarías en informática, así que métete en empresariales.

En la carrera de informática, ya sea la superior o cualquiera de las ingenierías técnicas (gestión o sistemas), se dan una serie de asignaturas que podríamos dividir en varias áreas.

  • Por un lado están las asignaturas de matemáticas, que sirven de herramientas para las otras asignaturas, aunque algunas a veces parezca que no sirvan de nada
  • Luego están las asignaturas de programación. Un programa está formado por algoritmos y por estructuras de datos que son procesadas por esos algoritmos. Así, tenemos asignaturas de análisis y diseño de algoritmos, otras de estructuras de datos, y otras varias sobre enfoques y paradigmas de la programación, como la POO o la programación lógica.
  • Tenemos asignaturas de informática teórica. Se estudia la informática desde un punto de vista teórico, las posibilidades de que un problema sea computable, los diferentes modelos teóricos de computación, etcétera.
  • Si nos vamos un nivel más bajo, encontramos asignaturas que estudian la estructura de los computadores, en especial la lógica booleana en la que se basan las puertas lógicas de las que están compuestas los ordenadores,
  • así como la organización básica de un computador (camino de datos, bancos de memoria, tipos de instrucciones, etc).

  • También están las asignaturas de bases de datos, redes,sistemas operativos, etc.
  • Por último están las asignaturas de bulto, como por ejemplo física.

Ahora en serio, si no te interesa realmente la informática y lo único que has programado en tu vida es el vídeo, o te quieres meter porque crees que tiene muchas salidas, no te metas en la carrera. No te engañes: Es prácticamente imposible aprender a programar en condiciones si lo haces a desgana. Para estas carreras debes tener un mínimo de manejo en las matemáticas (un mínimo, no estamos en física pero esto no es filología hispánica), algo de interés por la informática y curiosidad y ganas de aprender. Sin motivación se puede hacer realmente pesada, pero si te gusta, la mayor parte del tiempo “va sola”.

Nuevo theme! 2

Ahora que empieza el veranito, toca cambiar de theme. Venía buscando un theme sencillo y con espacio para poder poner código y texto sin que ocupara muchas líneas, y lo ví en el blog de @tauron32. La base es el theme Elite, le he añadido una cabecera (lo siento por los que usen IE6, pero como ya dijo haradsul, somos nosotros los desarrolladores los que tenemos que meter caña para que cumplan los estándares. Suerte que el IE7 cada vez está más extendido.

Estoy mirando plugins curiosos y he añadido el plugin SyntaxHighlighter que, como su nombre indica, resalta automáticamente el código que le añadamos. Un ejemplo en c++ (viva el polimorfismo y la stl)

template < typename T >
ostream& operator << (ostream& fs, std::vector& V){
	for(std::vector::iterator I = V.begin(); I != V.end(); I++){
		std::cout << "ALO" << std::endl;
	}
}

De todas formas aún tengo que añadir una luna o alguna que otra cosilla que recuerde al theme anterior y no se me enfade mi niñaa :D

Colocando ventanas con Devil’s Pie 1

Ahora que tengo un segundo monitor (Samsung 206BW, ya pondré fotos), aparte de usarlo con la PS3 lo he conectado al ordenador. Según dicen, la productividad aumenta con dos monitores, a ver si es verdad.

La cosa es que ahora que tengo dos monitores, resulta muy pesado tener que andar arrastrando las ventanas desde el monitor de la izquierda, que es donde salen por defecto, al de la derecha. Por lo visto en KDE las aplicaciones “recuerdan” la posición y el tamaño de la ventana la última vez que se ejecutó, y mantienen esas propiedades en las siguientes ejecuciones, no así en GNOME.

Según he leido, los desarrolladores de GNOME pensaron que recolocar las ventanas en la última posición en la que se abrieron no es trabajo del gestor de ventanas, sino de las propias aplicaciones. ¿Qué les costará mantener un registro de las posiciones y tamaños de las ventanas para no tener que andar recolocándolas todo el rato? Así cualquiera se pasa a KDE… xD

Pero bueno, existe Devil’s Pie, un pequeño demonio que se sirve de sencillos fragmentos de códigos en lisp que nos permitirán definir las propiedades de las ventanas que se vayan abriendo. Inicialmente habrá que identificar la ventana a la que queremos aplicarle las propiedades (matching a window), y luego escribiremos las acciones y propiedades que queremos aplicarle a la ventana.

Al principio es un poco difícil identificar algunas ventanas, como la terminal de gnome, cuya barra de título cambia y esas cosas, pero podemos utilizar otras propiedades para identificarla, como window_class. De todas formas, se puede utilizar el comando xprop para ver las propiedades de una ventana en concreto.

¡Mi primer hoygan! 5

Sí señores, mi blog se ha hecho mayor y ha recibido la visita de su primer HOYGAN!! GRASIAS DE HANTEVRASO!

El extraordinario evento se ha dado en este post, os reproduzco el comentario:

porfavor kiero un ds porfavor!!
lo nesesito
siempre he soñado kon tener uno

Tiene todos los elementos: cuenta de hotmail, faltas de ortografía, peticiones de cosas, procedencia geográfica propicia al hoyganismo… de tó!

Entradas siguientes »