Archive for the ‘Superkb’ Category.

Superkb estrena Wiki

Gracias a SourceForge y su implementación de MediaWiki, el proyecto Superkb cuenta con su propio Wiki.

Por el momento está sólo en inglés. Realmente tengo en la mira poner el equivalente en español.

Con esto será mucho más fácil mantener la documentación al día.

El Wiki de SourceForge no admite ediciones anónimas, así que es necesario contar con una cuenta de SourceForge para poder incluir a las personas en el grupo de edición.

Las sugerencias y contribuciones son bienvenidas.

Superkb brand new Wiki

Thanks to SourceForge and its MediaWiki implementation, the Superkb project now has its own Wiki.

For now, it is only in English. I’m really looking forward to adding a full Spanish equivalent.

I think this will make it a lot easier to keep the documentation up to date.

The SourceForge Wiki doesn’t allow anonymous contributions, so an SF account is needed to include the people in the editors group.

Suggestions and contributions are welcome.

De Superkb, GCC pedante y portabilidad

Por fin se me hizo: cambiar el Makefile de Superkb para usar gcc -std=c99 -pedantic-errors en lugar de -std=gnu99.

Lo que me impedía hacerlo era que uso algunas extensiones de GNU, BSD o POSIX que no se encuentran en el estándar C.

Yo no sabía, pero basta con añadir la línea

#define _GNU_SOURCE

o, según el caso,

#define _POSIX_C_SOURCE 2

al principio del código fuente y glibc reconoce y habilita las funciones que hagan falta.

Esto es un paso hacia adelante, pues ahora ya puedo usar un simple “grep” para ver en qué archivos están “solicitando extensiones”.

Desafortunadamente aún falta bastante para llegar al ideal, pues sigo atado a las herramientas de GNU. Por ejemplo ¿qué pasa si trato de compilar sobre OpenSolaris? La última vez que lo intenté, resultó que el Makefile usa extensiones que dependen de gmake (una de ellas es el include no fatal). Pero si hubiera gmake, ¿compilaría?

Sólo hay una manera de saberlo… ;-)

Superkb 0.20

Teclado Microsoft Natural, pintado por Superkb (Cairo, flat_key). Haz clic para ver la imagen completa.

Teclado Microsoft Natural, pintado por Superkb (Cairo, flat_key)

Ha habido mucho trabajo en esta versión y lo más notable es el soporte para pintar el teclado usando Cairo.

Cualquier falla que encuentren, por favor levanten un bug en el sistema de seguimiento de bugs, o bug tracking system. Al levantar un caso de bug, todo queda escrito y no se nos van a olvidar las cosas. Lo más importante es que el caso o bug quedará documentado para evitar que usuarios y desarrollador(es) trabajemos doble.

Por supuesto, lo anterior no quita que podamos platicar y discutir en #superkb en irc.freenode.net.

Quiero agradecer al Grupo de Usuarios de Linux de Tijuana por la retroalimentación sobre Superkb, sobre todo estos últimos días, en particular a:

  • IsReal, por el post en su blog y usar Superkb para aprender a hacer paquetes RPM. Si tendremos uno para la 0.20 será gracias a él. Update: Ya tenemos paquete para Fedora Core 12! Gracias, IsReal.
  • aduarte, por las eternas recomendaciones.
  • biker, por intentar incansablemente de instalarlo por más que le falle. Al ver los errores he podido corregirlos.
  • y me faltó juan_arandaalva, por la ayuda con Cairo (que al final resultó ser una tontería).

Bien, los recursos y descargas están donde siempre: en la página de Superkb en este blog y en el sitio oficial.

De cualquier manera, cito todo eso aquí:

Seguimiento de bugs para Superkb

Nota rápida: Si al usar Superkb encuentras algún bug, lo mejor es reportarlo al sistema de seguimiento de casos en Launchpad.

Superkb 0.17

Una de las metas que quería cumplir antes de sacar Superkb 0.17 fue convertir el código fuente a Git, manteniendo los historiales anteriores, tanto de CVS como de Subversion, así que, aquí está Superkb 0.17 con todos los links relevantes en la página usual.

¿Qué cambia en esta versión?

  • Hay soporte para Xinerama. Eso significa que si tienes dos pantallas y no manejas XRandR todavía, Superkb saldrá correctamente.
  • El código fuente fue migrado a Git.
  • Mensajes más amigables durante la compilación.

Implementando soporte para Xinerama en Superkb

Desde hace tiempo, Alfredo observó el problema. Incluso, hay un screenshot en la sección de bloopers (al final de la sección de Pantallazos) donde se ve una pantalla doble con un teclado muy bonito. Pero, ¿por qué es eso un blooper?

Para pintar el teclado, Superkb le pregunta a X el tamaño de la pantalla, y pinta el teclado aprovechando al máximo la pantalla, según el tamaño que se le reporta.

El problema

Para X, una tarjeta dual con dos monitores, es en realidad un solo “display”, de modo que Superkb no logra percatarse de la existencia de dos monitores, y aunque el screenshot se ve perfecto, la realidad es muy distinta. (Disculpen ustedes mi falta de pulso.)


(Superkb sin soporte para Xinerama: A la izquierda, el screenshot, a la derecha, las pantallas reales)

Nótese que en este caso, el problema se agrava debido a que cada monitor tiene una resolución distinta, de modo que no sólo el teclado se ve partido, sino que además una parte se pierde.

¿Cómo se podría resolver el problema? El problema dejaría de existir si Superkb tuviera la capacidad de conocer la cantidad de monitores existentes y la resolución de cada uno, y pintar varios teclados a la vez, uno por monitor.

XINERAMA

En una configuración de doble monitor, para X.org, se sigue tratando de un único “display”, es sólo que un conjunto de pixeles se asignan al primer monitor y otro conjunto de pixeles se asignan al segundo monitor.

Xinerama es una librería que, en esencia, cuenta con sólo una función, llamada XineramaQueryScreens. Aunque en realidad son 4 funciones, las tres restantes sólo se usan para consultar la versión, disponibilidad y compatibilidad de Xinerama como extensión de X.

Con esta función le pregunto a X.org cuántos monitores hay y qué pixeles se mapean a cada uno de los monitores, y me contesta en un arreglo de estructuras XineramaScreenInfo.

Por ejemplo, en la PC que se usó para el screenshot, esta es la información que regresa:

screen_number = 0
x_org = 0
y_org = 0
width = 1024
height = 768

screen_number = 1
x_org = 1024
y_org = 0
width = 1280
height = 1024

Con esta información, Superkb sólo se limita a pintar los teclados en sus correspondientes coordenadas: un teclado entre 0-1023 x 0-767 y otro en 1024-2303 x 0-1023. El screenshot queda un poco diferente, y tal vez no se vea del todo bien. Pero ya en pantalla se ve como se espera.


(Superkb con soporte para Xinerama: A la izquierda, el screenshot, a la derecha, las pantallas reales)

Debido esto, hubo que convertir el pixmap y la ventana de Superkb, en un arreglo de pixmaps y ventanas. (No, no puedo usar un mismo pixmap para todas las ventanas, porque pueden ser monitores de diferente resolución).

En conclusión: para el tiempo que duré con conocimiento del bug y sin arreglarlo (desde la versión 0.10), creo que hice una tormenta con un vaso de agua. El cambio fue relativamente fácil de implementar.

… y todo para Xinerama se desprecie en favor de Xrandr. ;-)

Superkb 0.16

Una nota rápida para anunciar Superkb 0.16.

La bitácora de cambios:

  • Algunos bichos corregidos, reportados por gcc -Wextra.
  • Reescrito el código de dibujado de textos mediante Xft.
  • Corregida una condición de carrera en el procesamiento de los eventos de X.

Sobre Xft, la migración se realizó para aprovechar la funcionalidad de antialias que provee Xft, en comparación con Xlib. En Debian Sid, por algún motivo renderea igual la versión 0.15 que la 0.16, pero en Ubuntu Feisty se nota la diferencia en la calidad del texto.

Sobre la condición de carrera, se trata de un bug espantoso que podía volver inutilizable Superkb. Significa que el mismo código en la misma distribución en diferentes PC, podría funcionar para una persona y para otra no.

No hay pantallazos por el momento.

Para los diversos recursos del proyecto (descargas y demás), visita la página de Superkb en este mismo blog.