猫の部屋: Bienvenido a la habitación del gato

Bienvenido a la habitación del gato

Archivo de Septiembre 2008

Probando openSuSE 11.0

Publicado por abunaineko en Septiembre 23, 2008

Hace unos meses fue liberada la versión 11 de una de las distribuciones linux más populares: openSuSE 11. Esta (openSuSE) era mi distribución de uso diario hasta la versión 10.1, que fue donde preferí el uso de Ubuntu. Mucho se ha comentado sobre esta nueva versión y me decidí a descargar el DVD para poder probar todas las novedades que ofrece esta versión.
El escritorio de mi preferencia es Gnome, por lo que fue el escritorio que instalé por default aunque también instalé todos los demás escritorios (KDE 3.5, KDE 4 y Xfce). El proceso de instalación es bastante simple y muy elegante, clásico de SuSE, aunque si se lleva un tiempo considerable, unos 45 minutos, aunque hay que tomar en cuenta que prácticamente instalé todo el contenido.
Una de las cosas que nunca me ha agradado del instalador de SuSE es el hecho de no mostrar todas las opciones de configuración de teclado disponibles, por lo que hay que en la instalación hay que escoger una configuración de teclado para después, una vez instalado el sistema, cambiarla por la de español de México (Latinoamérica).
Una vez concluida la instalación supuse que habría algún problema con los drivers de video, pues tengo una tarjeta nVidia, y efectivamente no hay aceleración de gráficos por hardware, pues no se incluyen los drivers propietarios en la distribución. Supuse que el problema se resolvería fácilmente conectándome a internet y descargando los controladores, sin embargo lo primero que noté una vez iniciado mi sistema openSuSE es que no tenía conexión a internet.
Tengo una placa base Asus cuya interfaz de ethernet es una Attansic L2 100 Mbit Ethernet, y los controladores no se incluyen en el disco de openSuSE. Regresé a mi partición de Ubuntu y me puse a buscar información sobre este controlador en las páginas de openSuSE sin poder encontrar nada de información al respecto, de hecho encontré mas información en foros de Ubuntu y la solución en una lista de correos de Fedora. (En otro post escribiré una solución sencilla para quienes enfrenten el mismo problema).
Una vez con red instalé las actualizaciones de la distribución sin ningún problema, sin embargo no encontré ninguna referencia a instalación de controladores propietarios de nvidia. Así que me puse a “googlear” y me sorprendió que los principales resultados a “opensuse 11 nvidia” son diversos blogs y no el sitio oficial de opensuse. La instalación es muy sencilla, tal cual lo definen “one-click installer” se instala el driver con un solo click.
Una vez con la aceleración gráfica me puse a probar los efectos de escritorio para gnome, los cuales se muestran en un panel simple de configuración de efectos, muy distinto al famoso panel de compiz-fusion, en el que se pueden configurar algunas opciones básicas de efectos de escritorio, que aunque no es muy completa si son suficientes para tener un escritorio agradable.
Los efectos de escritorio en kde 3.5 no vienen habilitados por default y en los menús no encontré nigún lugar en dónde habilitarlos, por lo que en kde 3.5 tendremos por default un escritorio clásico sin efectos de escritorio.
Para kde 4 los efectos proporcionados son los que brinda este nuevo escritorio. Comparados con los efectos de compiz-fusion podríamos considerarlos muy limitados y aún no son muy estables, pues después de utilizar el escritorio un tiempo ví varios “bugs” en redimensión de ventanas y en la miniatura de la ventanas.
No haré una comparación de escritorios, puesto que eso es cuestión de gustos, yo me inclino por gnome, sobre cualquier versión de kde. Vale la pena mecionar que se incluyen algunas modificaciones notorias en estos escritorios para opensuse desde la versión 10.2 y estos son los nuevos menús, cuya funcionalidad y aceptación es debatido, pero que destaca que para esta versión han resuelto un problema importante que es la velocidad de respuesta de estos menús.
Otra mejora importante es la velocidad del manejador de paquetes, aunque siguen manejando distinta interfaz para gnome y kde, lo cual puede ser muy confuso para nuevos usuarios.
Finalmente para reproducción multimedia se instala por default un soporte para mp3, sin embargo para reproducir dvd’s y demás formatos y codecs multimedia con los que lidiamos día con día hay que recurrir a otros paquetes de “one-click-installer” que agregan los famosos repositorios de Packman y no están muy actualizados (instalan adicionalmente java 5 y flash, pese a que opensuse proporciona java 6 y flash). Además desgraciadamente me ocurrió que los repositorios tal vez no estén actualizados con los oficiales de opensuse, pues crean una gran cantidad de conflictos de dependencia que cualquier usuario quedaría con la impresión de que acaba de descomponer todo. Los conflictos no se resulven tan fácilmente, pues previo a instalar paquetes hay que desinstalar algunos otros y esto no se especifica en ninguna guía y no es muy simple intuir cómo hacerlo.
Finalmente comentaré un hecho que en particular me parece malísimo, el sistema no “ve” otras particiones, solamente las usadas por opensuse. Para acceder a mi partición de ubuntu tengo que montar el dispositivo por comandos, cosa que para un usuario nuevo no resulta muy agradable.
Una vez terminado todo este proceso de configuración me encuentro con un sistema estéticamente bonito, muy completo, con las aplicaciones más usadas comúnmente en sus últimas versiones, un tiempo de carga muy bueno, un tiempo de respuesta muy bueno también al hacer uso de varias aplicaciones simultáneamente y salvo todo el proceso de instalación y extras que describí antes, un sistema fácil de usar.

Publicado en Linux, Software | Deja un Comentario »

GnomeArt Screenlet

Publicado por abunaineko en Septiembre 16, 2008

De entre todas las curiosidades que podemos agregar a nuestro linux (en gnome) surgieron algunos artefactos que se pueden agregar al escritorio similares a los widgets de Mac.  Entre estos artefactos se encuentran un conjunto de programas llamados Screenlets, aplicaciones escritas en python que dan un buen aspecto visual al escritorio además de brindarnos algunas funcionalidades adicionales de gran utilidad.

Una que en particular me agradó bastante es el screenlet de GnomeArt, que se muestra en la imagen anterior en la parte derecha del escritorio hasta arriba. Este screenlet muestra una imagen descargada de http://art.gnome.org/ y la utiliza como fondo de escritorio, podemos configurarla para que cambie cada determinado tiempo y además nos da la posibilidad de utilizar imágenes de nuestro disco duro en vez de las de gnomeart.

No conozco mucho sobre el lenguaje de programación python, sin embargo me aventuré a hacer unas modificaciones a este screenlet, pues carecía de un par de funcionalidades que me parecieron importantes:
- Cuando seleccionas una carpeta como origen de imágenes no toma en cuenta las imágenes de los subdirectorios contenidos en la carpeta.
- No cuenta con un modo en el que aleatoriamente tome imágenes de la carpeta especificada y de gnomeart.
Para cubrir los puntos antes mencionados hice algunas modificaciones para incluir un par de opciones con las cuales podremos seleccionar si se desea explorar subcarpetas y un modo mixto para ver imágenes locales y de gnomeart.

Es un screenlet bastante práctico con el cual siempre podremos contar con un fondo de escritorio diferente.
El screenlet original pueden descargarla desde aquí
Y si quieren la versión modificada que incluye estas dos funcionalidades antes mencionadas pueden descargarla en la siguiente liga:
GnomeArt Screenlet

Espero les sea de utilidad

Publicado en Entretenimiento, Linux, Programación | Deja un Comentario »

AJAX usando JQuery y Struts

Publicado por abunaineko en Septiembre 15, 2008

Hace ya un buen rato que no escribo nada por falta de tiempo y exceso de trabajo. Esta vez me toca escribir algo de programación para quienes requieran un ejemplo rápido de cómo comenzar a incluir AJAX en su aplicación.
Decidí usar Struts (1.x) en este ejemplo ya que muchas aplicaciones existentes usan este framework y es muy comun que en el mantenimiento de estas aplicaciones se desee agregar alguna funcionalidad que utilice AJAX. Por otro lado el uso de la biblioteca JQuery es una forma rápida y eficiente de escribir código Javascript, pues nos evitamos de complicaciones innecesarias excribiendo código javascript para tareas comunes, además de que es muy fácil de entender y aprender.

Dejo el ejemplo de AJAX en el siguiente archivo zip que es un proyecto Web para NetBeans 6.1, espero que les sea de utilidad.

Pueden descargar el archivo desde aquí: Ejemplo de Ajax
Este archivo está alojado con el servicio de http://www.sendspace.com

Brevemente explicaré aquí los archivos más importantes, comenzaremos con el archivo de configuración de struts:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">

<struts-config>
    <form-beans>

    </form-beans>

    <global-exceptions>

    </global-exceptions>

    <global-forwards>
        <forward name="welcome"  path="/Welcome.do"/>
    </global-forwards>

    <action-mappings>
        <action path="/Welcome" forward="/welcomeStruts.jsp"/>
        <action path="/saludoAjax" type="corp.neko.ajaxdemo.struts.SaludoAjax"/>
    </action-mappings>

    <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>

    <message-resources parameter="corp/neko/ajaxdemo/struts/ApplicationResource"/>    

    <plug-in className="org.apache.struts.tiles.TilesPlugin" >
        <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
        <set-property property="moduleAware" value="true" />
    </plug-in>

    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property
            property="pathnames"
            value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
    </plug-in>

</struts-config>

- En la línea 21 definimos un redireccionamiento para la ruta /Welcome.do que va al archivo jsp que utilizaremos como ejemplo.
- En la línea 22 asociamos una acción para la ruta /SaludoAjax.do definida en la clase “corp.neko.ajaxdemo.struts.SaludoAjax”. Es destacable que no estamos definiendo ningún tipo de redireccionamiento, es decir, la acción se va a realizar sin ningún tipo de redirección una vez que esta se ha ejecutado.

Ahora analicemos la clase “corp.neko.ajaxdemo.struts.SaludoAjax” que realizará la acción:

package corp.neko.ajaxdemo.struts;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
 *
 * @author abunai
 */
public class SaludoAjax extends Action{

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){

        response.setContentType("text/xml");
        response.setHeader("Cache-Control", "no-cache");
        String nombre = request.getParameter("nombre");
        try {
            PrintWriter writer = response.getWriter();
            writer.print("<xml><respuesta><![CDATA[¡Hola "+nombre+"! Este es un ejemplo de AJAX]]></respuesta></xml>");
            writer.flush();
            writer.close();
        } catch (IOException ex) {
            Logger.getLogger(SaludoAjax.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
    }

}

La idea de esta clase es generar una respuesta de tipo xml recibiendo algunos parámetros vía “Request”.
- En la línea 23 y 24 tomamos el objeto de tipo HttpServletResponse que es pasado como parámetro al método execute y lo preparamos para dar una salida de tipo xml. Es muy importante prevenir que los exploradores guarden en caché el recurso, pues nuestro xml cambiará de acuerdo a los parámetros que se envíen en la petición.
- En las líneas 27-30 generamos la salida xml, hay que destacar que en la respuesta estamos poniendo un CDATA, esto para evitar cualquier problema de interepretación de caracteres reservados y especiales que pudiese contener nuestra respuesta.

Finalmente analizaremos nuestra página de prueba welcomeStruts.jsp:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>

<html:html locale="true">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title><bean:message key="welcome.title"/></title>
        <script type="text/javascript" src="js/jquery-1.2.6.js"></script>
        <script type="text/javascript">
            $(function(){
                $("#usuario").blur(validaUsuario);
            });

            function validaUsuario(){
                var name = $("#usuario").val();
                $.get("/AjaxExample/saludoAjax.do", { nombre: name },
                    preparaRespuesta
                );
            }

            function preparaRespuesta(data){
                        var respuesta = $(data).find("respuesta").text();
                        $("#respuesta").hide();
                        $("#respuesta").empty();
                        $("#respuesta").append(respuesta);
                        $("#respuesta").show("slow");
                    }
        </script>
        <html:base/>
    </head>
    <body style="background-color: white">

        <logic:notPresent name="org.apache.struts.action.MESSAGE" scope="application">
            <div  style="color: red">
                ERROR:  Application resources not loaded -- check servlet container
                logs for error messages.
            </div>
        </logic:notPresent>

        <h3><bean:message key="welcome.heading"/></h3>
        <p><bean:message key="welcome.message"/></p>
        <input name="usuario" id="usuario" type="text">

        <div id="respuesta"></div>

    </body>
</html:html>

- En las líneas 14-16 declaramos una función anónima cuyo contenido se ejecutará antes de cargar la página, es decir este es el lugar indicado para escribir toda la funcionalidad requerida por el documento antes de comenzar a interactuar con él.
- En la línea 15 destacan dos cosas, la primera es la forma de hacer referencia a un componente de la página utilizando el id: “#componenteX”, que en este caso hace referencia al componente de entrada de texto con id “usuario”. La segunda es que se aplica una función al elemento de acuerdo al evento que se especifique, en este caso “blur”.
- En las líneas 18-23 se define la función que se ejecutará en el evento “blur”, en la línea 19 se recupera el valor que contenga el elemento “usuario”. Las líneas 20-22 son la llamada Ajax a /saludoAjax.do, se especifica que la llamada va a contener un parámetro de nombre “nombre” y cuyo valor es el de la variable “name”. Finalmente se especifica un tercer parámetro, el cual es la función que se ejecutará una vez recibida la respuesta de la llamada Ajax.
- En las líneas 25-31 definimos la función que se ejecutará con el resultado de la llamada a /SaludoAjax.do la cual recibe como parámetro una variable “data” que es el xml que generamos en el método action. En la línea 26 obtenemos el valor de “respuesta” utilizando el método “find” de JQuery. En las líneas 27-31 se manipula el elemento div con id “respuesta” para insertar y mostrar el contenido obtenido en 26.

Publicado en Programación | 12 Comentarios »

ScribeFire: una herramienta para blogs

Publicado por abunaineko en Septiembre 15, 2008

Mientras buscaba un nuevo skin para mi Thunderbird encontré un complemento para firefox llamado ScribeFire Blog Editor. Al ver la palabra blog pensé en el mío y decidí probar esta extensión para ver los beneficios que ofrece.
En primer lugar notaremos que tenemos un editor de texto, este editor nos evita las complicaciones de edición existentes en los blogs, pues pese a que cada vez son mucho mejores los editores web de archivos (como Google Docs) es indiscutible la facilidad de uso y la velocidad que nos ofrece un editor “stand-alone”.
Este editor es ajustable al tamaño de la ventana permitiendo así navegar por internet con firefox y al mismo tiempo editar la entrada del blog, ya sea para buscar mayor información respecto al tema mientras se escribe o simplemente distraerse con algún video (para aquellos que les gusta hacer dos cosas a la vez).

Es muy sencillo registrar el blog para poder comenzar a usar la aplicación, simplemente se debe introducir la dirección del blog y seleccionar un API de acuerdo al blog que se va a registrar (en mi caso WordPress) una vez hecho esto se introducen usuario y contraseña para poder comenzar a editar.

Se puede insertar videos de YouTube fácilmente con el botón de YouTube que nos mostrará una nueva ventana con un campo de búsqueda gracias al cual podremos ir explorando los videos disponibles, previsualizarlos y en caso de ser de nuestro agrado insertarlos en el blog.

Igualmente el botón de añadir imágenes nos hará este proceso mucho más sencillo, pues nos mostrará una ventana en donde podremos elegir si queremos insertar una imagen que se encuentra en la web o una que se encuentre en nuestro equipo local, la cual se subirá fácilmente a wordpress o al blog al que esten suscritos mediante el API. A nosotros nos basta con dar un click y tendremos nuestra imágen arriba sin complicaciones. En caso de contar con un servidor FTP este es configurable para que los archivos sean depositados allí.

Estas son las funciones básicas que he probado de ScribeFire y que me parecen sumamente prácticas para todos aquellos que les gusta escribir en un Blog. Esta herramienta tiene también su parte de negocio, pues al parecer venden extensiones o algo similar, sin embargo las opciones gratuitas bastan.

Publicado en General, Software | Deja un Comentario »

Festín celeste

Publicado por abunaineko en Septiembre 4, 2008

Quiero morder una nube jugosa,
llover con ella y evaporarme,
subir hasta la Luna,
beberla a cucharadas
y terminar el festín con una estrella:
volver a la Tierra y verte reir.

Publicado en Poemas | Deja un Comentario »