domingo, 25 de octubre de 2015

Compilando xscreensaver

Con mi nuevo equipo, una HP ENVY Notebook 15-k212la, resulta que casi todo funcionó a la primera, incluso la tarjeta inalámbrica, que suele ser un verdadero problema para algunos.

Sin embargo, los controles para el brillo de pantalla no estaban funcionando. No es especialmente un problema, pero era sumamente incómoda la situación. Claro que es posible configurar estos valores por consola, pero una laptop es una buena ocasión para introducir a usuarios comunes en el mundo del software libre.

Incluso tomé las recomendaciones de instalar Bumblebee en OpenSuSE, que antes ya lo había probado con Fedora, pero parece que al final ni siquiera funciona como se supone y seguía sin solucionar el problema.

Así que al volver sobre mis pasos, me encuentro con que la respuesta era más sencilla de lo que había pensado: Intel graphics de Arch Wiki y [SOLVED] Backlight control not working in X/KDE me estaban gritando que la solución era tan sencilla como realizar el procedimiento que se estipula en [SOLVED] Brightness problem in Ubuntu 12.04 Precise Pangolin.

Nota: Una tontería. Configurada de esta forma, en
/sys/class/backlight/
sólo queda el directorio que corresponde al vendor. Así que es el valor en
/sys/class/backlight/intel_backlight/actual_brightness
el que cambia con las teclas para control de brillo

Además, parece que las entradas en el registro del sistema respecto a
[ 2273.719866] atkbd serio0: Unknown key pressed (translated set 2, code 0xab on isa0060/serio0).
[ 2273.719870] atkbd serio0: Use 'setkeycodes e02b ' to make it known.
[ 2273.773690] atkbd serio0: Unknown key released (translated set 2, code 0xab on isa0060/serio0).
[ 2273.773694] atkbd serio0: Use 'setkeycodes e02b ' to make it known.

eran sólo una pista falsa.

Así que en Fedora, bastará con agregar acpi_backlight=vendor" a la línea GRUB_CMDLINE_LINUX del fichero /etc/default/grub:
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora_ilaria/root rd.lvm.lv=fedora_ilaria/swap rhgb quiet acpi_backlight=vendor"
GRUB_DISABLE_RECOVERY="true"
Ahora ejecutamos para que vuelva a crear el fichero de configuración de grub (En este caso, para un equipo que usa UEFI) con el siguiente comando:
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
Y al reiniciar el equipo, las teclas correspondientes en el teclado será capaces de configurar el brillo de pantalla

lunes, 19 de octubre de 2015

Primeros pasos con Mustache

Mustache es un sistema de plantillas sin lógica, (Traducción literal de la descripción que hacen de si mismos en el sitio web), lo que significa que a diferencia de otros sistemas de plantillas para JavaScript este no define estructura de control, sino que trabaja definiendo etiquetas.

Es un gran adelanto usar un sistema de plantillas. Separar la "lógica de negocios" de la presentación siempre es un gusto, pese a los inconvenientes que pueda presentar en cuánto a rendimiento. Por otra parte, no es díficil aprender a usar Mustache, y su sencillez su no es problema para las capacidades que presenta:

Su uso puede resumirse de la siguiente forma:

  • Se crea una plantilla a usar sobre como han de tratarse los datos, tomando como referencia un objeto JSON. En mi caso, mi JSON es un array cuyos datos son los que necesito mostrar:

<tbody id="respuesta">
    <script id="respuesta-template" type="text/x-custom-template">
        {% verbatim %}
            {{#datos}}
                {{#.}}
                    <tr id="{{uid}}"><td>
                        <p class="col-md-12"><b>{{ cn }}</b></p>
                        <p class="col-md-12 col-sm-12 small">{{ #title }} {{ title }} en {{ /title }}{{ #ou }}{{ ou }} de {{ /ou }}{{ establecimiento }}</p>
                        <p class="col-md-6 col-sm-12 small">{{ mail }}</p>
                        <p class="col-md-6 col-sm-12 small">{{ telephoneNumber }</p>
                    </td></tr>
                {{/.}}
            {{/datos}}
        {% endverbatim %}
    </script>
</tbody>

  • El objeto JSON va definido, datos más, datos menos, de la siguiente forma:

{
    "datos": [
        {
            "cn": "AdaCruz",
            "mail": "acruz@salud.gob.sv",
            "uid": "acruz"
        },
        {
            "cn": "Adalberto Chavez",
            "mail": "achavez@salud.gob.sv",
            "uid": "achavez"
        }
    ],
    "mensajeError": null
}
La idea es que la etiqueta {{#datos}} permite acceder no a los datos de la clave en el objeto JSON, sino más bien a la funcionalidad por defecto que siendo un array es la de recorrerlo. Lo de {{#.}} es un extraño workaround ya que parece que el objeto JSON es recibido seccionado.
Por otra parte {{#.}}, podría ser útil para recorrer un objeto JSON que consista en una seria de array sin índice alguno.

Lo demás, es que cuando estemos recorriendo cada objeto json que compone el array tendremos el dato que cada índice contiene.

Luego, vale la pena mencionar el uso que se le ha vuelto a dar a la etiqueta de tipo {{ #etiqueta }} en el caso del segundo bloque:
<p class="col-md-12 col-sm-12 small">{{ #title }} {{ title }} en {{ /title }}{{ #ou }}{{ ou }} de {{ /ou }}{{ establecimiento }}</p>
Las etiquetas de este modo funcionan como un condicionante. Lo que este dentro de ellas no será mostrado a menos que haya contenido que mostrar. En este caso particular, lo he usado para construir la frase según haya uno u otro contenido, pero supongo que será posible enmarcar toda una etiqueta HTML si se antoja necesario.
  • Por último, el código que realiza todo el trabajo de presentación va de la siguiente forma:
var template = $('#respuesta-template').html();
Mustache.parse(template);
var contenido = Mustache.render(template, respuesta);
pmostrarError(respuesta);
pmostrarMensaje(respuesta);
$("#respuesta tr").remove();
$("#respuesta").append(contenido);

El resultado viene quedando de la siguiente forma:
Los íconos son parte del proyecto Material Icons de Google  y omití las etiquetas de imagen para hacer legible al ejemplo 

Tener en cuenta que este intento de manual ha obviado muchas cosas: El que este usando Bootstrap y JQuery por ejemplo.

Fuentes:
Defining a HTML "template" to append using JQuery
mustache.js - Logic-less {{mustache}} templates with JavaScript
Mustache.js + jQuery: what is the minimal working example ?
How to use Mustache with JS / jQuery – a working example

Otros apuntes interesantes

Otros apuntes interesantes