Monthly Archive for Febrero, 2008

¿Eres un “posero” de Linux?

Vi el diagrama en Linux and Open Source Blog y me hizo gracia, así que decidí traducilo.

Dicen algunos que la comunidad Linux peca de soberbia y muchos critican si es que alguna distribución hace las cosas demasiado fáciles al usuario (ya saben, se rememora los viejos tiempos donde se tenía que configurar todo por línea de comandos). Por cierto, hay un post interesante en Linux Music sobre las fraternas discusiones entre miembros de la comunidad Debian y Ubuntu.

Click para ver el diagrama a tamaño completo. Por favor tomarlo como lo que es: un post en plan de broma.

Linux Poser

Entradas Relacionadas:
  • Instalación de Linux a domicilio
  • Curso de Administración de Sistemas en GNU / Linux
  • Joost en Linux
  • Personalizar Kubuntu (KDE): Accesos rápidos de teclado

    Si tenemos un teclado multimedia o simplemente deseamos asociar una tecla a alguna aplicación en KDE, podemos hacerlo en forma sencilla. En este ejemplo asociaremos la tecla “Imprimir pantalla” a la aplicación KSnapshot, que justamente hace eso: capturar la pantalla (permite seleccionar un área de captura, una ventana en particular y asignar un retardo). Me parece que KSnapshot viene instalado por defecto, pero si no pueden buscarla en Adept o en consola:

    sudo apt-get install ksnapshot

    Asignar tecla a aplicación

    Navegamos por Menú K / Preferencias del Sistema / Teclado y ratón / Accesos rápidos de teclado

    . Desde ahi podremos configurar los atajos para las aplicaciones (cerrar ventana con ALT+F4, copiar con CTRL+C, etc.) o revisar las teclas modificadoras. Pero lo que nos interesa en esta oportunidad es la pestaña Atajos de Ordenes.

    Teclado y ratón

    En esta pantalla seleccionamos la aplicación a la que queremos asignarle una tecla (en este ejemplo KSnapshot que se encuentra bajo Gráficos) y en la parte inferior (sección Atajo para la orden seleccionada) escogemos Personalizar. Se nos abrirá un diálogo y en ese momento debemos pulsar la tecla (o combinación de teclas) deseadas, en el ejemplo la tecla de “Imprimir pantalla”.

    Asignar tecla

    Aplicamos los cambios y listo, la próxima vez que pulsemos la combinación de teclas configuradas se lanzará la aplicación seleccionada.

    Entradas Relacionadas:
  • Solución al crash de Kopete al conectar a MSN (KDE 3.5.8)
  • Activar BloqNum o NumLock al inicio
  • Teclado Geek
  • Original diseño de blog

    Leyendo Smashing Magazine me topé con uno de los más originales diseños de blog que he visto: el de Chris Contolini, integrado con Google Maps. Den click a la imagen para verla a mayor tamaño (en caso el autor decida cambiar de diseño), pero para apreciarlo mejor es visitar su blog.

    Diseño original

    Entradas Relacionadas:
  • Planet Ubuntu
  • Tipos de Comentaristas en Blogs
  • Diseño Gráfico Publicitario
  • Di NO a la violencia contra la mujer

    Cuántas veces nos han llegado emails cadena de supuestas campañas en las que la compañía X dará 1 dólar por cada email enviado para ayudar a tal persona con alguna enfermedad. Bueno, esos emails suelen ser mentiras (y se les llama hoax).

    Sin embargo, hoy recibí un email de una campaña de las Naciones Unidas que me consta que es verdadera. Es la campaña Di No a la Violencia Contra la Mujer y cada firma recolectada representa simbólicamente 1 dólar. Se tiene como meta recolectar la firma de cien mil personas que estén en contra de la violencia de género.

    Invito a todos/as a firmar el libro de apoyo.

    Entradas Relacionadas:
  • Día Internacional de la Mujer
  • The Prodigy - Smack My Bitch Up (NSFW)
  • Foto de la Semana: Feliz Día Internacional de la Mujer
  • Continue en un Loop en PL SQL

    Imaginen este caso: están en un loop en PL-SQL y quieren que, bajo ciertas condiciones, no continúe su ejecución sino que vuelva al inicio y siga con la siguiente "vuelta". Por ejemplo, un Loop en el que se muestra en consola un valor del 1 al 10 y se quiere que no se muestre el valor 5. Esto sería sencillo:

    
    DECLARE
    i     NUMBER := 0;
    BEGIN
    LOOP
    i := i + 1;
    EXIT WHEN i > 10;
    IF i != 5 THEN
    dbms_output.put_line('i: '||i);
    END IF;
    END LOOP;
    END;
    

    Hay casos en los que evaluar mediante un IF THEN no es la mejor solución. Imaginen que dentro del Loop se llama a varios stored procedures que pueden arrojar un error y sólo continuar en caso no ocurra. Se podría hacer algo así, pero no se vería muy bien:

    
    DECLARE
    i        NUMBER := 0;
    bError   BOOLEAN := FALSE;
    BEGIN
    LOOP
    i := i + 1;
    EXIT WHEN i >10 10;
    SP_QUE_PUEDE_ARROJAR_ERROR(bError);
    IF NOT bError THEN
    --(...código)
    SP_QUE_PUEDE_ARROJAR_ERROR(bError);
    IF NOT bError THEN
    --(...código)
    SP_QUE_PUEDE_ARROJAR_ERROR(bError);
    IF NOT bError THEN
    --(...código)
    END IF;
    END IF;
    END IF;
    END LOOP;
    END;
    

    Como se puede apreciar, con sólo 3 llamadas a procedimientos almacenados, se va formando una "escalera" y el programa se puede hace difícil de seguir (imaginen llamar a 10 procedimientos)

    ¿Qué hacer?

    La solución pasaría por usar una instrucción que detenga la ejecución del loop y vuelva al inicio (como el continue de Java). En Oracle 11, existe una instrucción CONTINUE, así que sería cuestión de hacer:

    PLSQL:
    1. --(...)
    2. IF bError THEN
    3. CONTINUE;
    4. --(...)

    El problema viene si es que usamos una versión anterior de Oracle, en estos casos podemos usar un truco que consiste en encerrar en dentro de un BEGIN END el código dentro del bucle y lanzar una excepción cuando se produzca un error.

    PLSQL:
    1. i                    NUMBER := 0;
    2. bError             BOOLEAN := FALSE;
    3. CONTINUE_EXCEPTION   EXCEPTION;
    4. i := i + 1;
    5. EXIT WHEN i> 10;
    6. SP_QUE_PUEDE_ARROJAR_ERROR(bError);
    7. IF bError THEN
    8. RAISE CONTINUE_EXCEPTION;
    9. --(...código)
    10. SP_QUE_PUEDE_ARROJAR_ERROR(bError);
    11. IF bError THEN
    12. RAISE CONTINUE_EXCEPTION;
    13. --(...código)
    14. SP_QUE_PUEDE_ARROJAR_ERROR(bError);
    15. IF bError THEN
    16. RAISE CONTINUE_EXCEPTION;
    17. --(...código)
    18. WHEN CONTINUE_EXCEPTION THEN
    19. END;

    El primer ejemplo (el de imprimir números del 1 al 10 exceptuando el 5, quedaría así):

    PLSQL:
    1. i                       NUMBER := 0;
    2. CONTINUE_EXCEPTION   EXCEPTION;
    3. i := i + 1;
    4. EXIT WHEN i> 10;
    5. IF i = 5 THEN
    6. RAISE CONTINUE_EXCEPTION;
    7. DBMS_OUTPUT.put_line('i: '||i);
    8. WHEN CONTINUE_EXCEPTION THEN
    9. DBMS_OUTPUT.put_line('Para el 5 no se imprime nada');
    10. END;

    Espero les sea de utilidad.

    Entradas Relacionadas:
  • Cursores con parámetros en PL SQL
  • Cursores en PL SQL (1)
  • Malditos programas
  • Monta tu propio proxy web

    Una vez más bloquearon Gmail en el trabajo. Supongo que quieren evitar que la gente pierda el tiempo en cosas no relacionadas al trabajo (aunque creo que yo pierdo más tiempo buscando formas para acceder a Gmail cuando lo bloquean).

    Después de cansarme de buscar proxys y diversos métodos (incluso probé el ) que no siempre funcionan (bloquean las webs de los proxys al poco tiempo, algunos proxys después de un tiempo ya no funcionan, etc, etc.) decidí seguir el consejo del buen RedWarrior e instalé mi propio web proxy en mi servidor de hosting.

    ¿Las ventajas?

    Puedes configurarlo a tu gusto, es libre de publicidad, da mayor seguridad (si uno usa un proxy público no sabe qué uso se le da a la información) y ofrece algo de anonimato/privacidad (por ejemplo si es que queremos conectarnos desde una cabina/cibercafé)

    Yo estoy utilizando PHProxy, que es muy sencillo de instalar (en realidad sólo es necesario subir los archivos a nuestro servidor), se puede configurar editando un simple archivo de texto y ha funcionado muy bien.

    Otra opción es utilizar Privoxy, que al parecer ofrece mayores posibilidades de configuración, pero no lo he probado pues es necesario instalar el programa (compilando las fuentes o instalándolo alguno de los paquetes) en el servidor (algo que no se puede hacer si uno usa un shared-hosting).

    ¿Desventajas?

    El contenido con javascript no siempre funciona bien (por ejemplo, se tiene que usar la versión básica de Gmail), si pierde un poco de velocidad y el contenido flash no se ve (olvídense de YouTube).

    Entradas Relacionadas:
  • Cómo acceder a un sitio bloqueado
  • Solución al problema de registro en War Rock usando un proxy
  • Be Funky - Web de la semana