23 de abril de 2009

Autocontrol

Y esta era la paranoia que me perseguia hoy. No contento con el crontab que me habia creado para controlar que estoy currando lo he modificado para poder "saber" si realmente lo hago mirando el título de las ventanas. Dios, me persigo a mi mismo! :)
Como funciona: tengo una lista de títulos que sí puedo utilizar en un fichero de texto llamado "permitidos.txt". En el momento que use alguna aplicación que no esté en la lista saltará un pop-up avisandome. Para ello he utilizado el programa del post anterior, al que he llamado "getwindowname".

fichero "estudiaomuere.sh":

#!/bin/bash
export DISPLAY=:0
windowname=$(/home/ruben/Aplicaciones/getwindowname 2>/dev/null | sed -n '1 p')
set estudia = 0
while read line
do
if [[ $windowname == *$line* ]]
then
estudia=1
fi
done < /home/ruben/Aplicaciones/permitido.txt

if [[ $estudia -eq 0 ]]
then
gmessage -center -borderless -timeout 3 -buttons "" -wrap -fg RED -bg YELLOW "Deberias estar estudiando"
fi


Y luego solo hay que añadir una linea de este estilo al /etc/cron.d/anacron, para que lo mire cada minuto:

0-59 16-23 * * *    ruben    /home/ruben/Aplicaciones/estudiaomuere.sh


Si la rallada continua crearé un archivo nopermitidos.txt, para controlar mejor las aplicaciones. Posteriormente se podría ampliar para dar un número máximo de avisos antes de que te chape la aplicacion, tiempo máximo de uso al día,... las posibilidades de tortura son infinitas, juas :)

Obtener el nombre de la ventana actual en Linux

Se nota que estoy en epoca de estudios, se me ocurren las paridas mas increibles y lo peor es que las acabo realizando. En esta ocasión os dejo un programita para saber el título de la ventana actual en Linux (en una proxima entrada sabreis para que lo he hecho):

#include <glib.h>
#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1
#include <libwnck/libwnck.h>
#include <gtk/gtk.h>
#include <X11/Xlib.h>

main(int argc, char **argv)
{

WnckScreen *scr;
WnckWindow *win;
int x, y, width, height;
Display *disp = NULL;

gtk_init(&argc, &argv);

scr = wnck_screen_get_default();

while(gtk_events_pending())
gtk_main_iteration();

win = wnck_screen_get_active_window(scr);
printf("%s\n", wnck_window_get_name(win));
return(0);
}



Para compilar:

gcc getwindowname.c -o getwindowname `pkg-config --cflags --libs libwnck-1.0`



PD: Como curiosidad el codigo fuente lo he pegado en el post usando un formateador javascript de codigo a html

22 de abril de 2009

Mi fichero crontab

Hay gente que usa post-its, alarmas, horarios, etc... yo uso contrab:

Fichero: /etc/cron/anacron

00 16-23 * * * ruben export DISPLAY=:0 && gmessage -center -borderless -timeout 3 -buttons "" -wrap -fg RED -bg YELLOW "Deberias estar estudiando, gañan!"

Parámetros en urls a PDF

Imaginad que estais en clase y que quereis que un alumno consulte rápidamente una página o una imagen/esquema/lo que sea de un libro, que teneis en PDF en el servidor.
Una manera es escribir la referencia en el enunciado, por ejemplo: "Mirad la foto de la página 456, del libro X" y poner a cotinuación la url del PDF.
Otra manera mas sutil sería añadir un enlace del estilo:

http://servidor/doc.pdf#page=456&zoom=200,250,100

que lo que hace es situar el visor PDF en la página adecuada y mostrando la información deseada. Interesante no?

Y es que se pueden poner un montón de parámetros para abrir PDFs:

http://example.org/doc.pdf#nameddest=Chapter6
http://example.org/doc.pdf#page=3
http://example.org/doc.pdf#page=3&zoom=200,250,100
http://example.org/doc.pdf#zoom=50
http://example.org/doc.pdf#page=72&view=fitH,100
http://example.org/doc.pdf#view=fitb&nameddest=Chapter3
http://example.org/doc.pdf#pagemode=none
http://example.org/doc.pdf#pagemode=bookmarks&page=2
http://example.org/doc.pdf#page=3&pagemode=thumbs
http://example.org/doc.pdf#collab=DAVFDF@http://review_server/Collab/user1
http://example.org/doc.pdf#page=1&comment=452fde0e-fd22-457c-84aa-2cf5bed5a349
http://example.org/doc.pdf#fdf=http://example.org/doc.fdf
....


Para mas información consultar el siguiente PDF, prediquemos con el ejemplo:
PDF Open Parameters