Tip: Desmagnetiza tu televisor/CRT

20.8.08. Por ooscarr (ooscarr)

Esto es un recuerdo. Para todas esas pantallas que he visto por ahí con todos los colores distorsionados como arco iris, la solución es muy fácil y rápida.

Para qué voy a hacer una introducción de la función Degauss, si saben de qué estoy hablando y al final sólo hay que hacer play al video de más abajo (en inglés).

Es tan fácil la solución que si corremos la voz, se acabó el problema. No vayan a cometer la tontera de llevar la tele a un técnico, a menos que lo cubra la garantía.

A ver si tienes más suerte visitando la página de donde saqué el video
Si no tienes taladro, mueve los imanes con la mano, pídeselo al vecino o arrienda uno por 24 horas en un homecenter por menos de $4000 o US$8 (deberían pagarme por la publicidad).

Algunos parlantes hacen de imanes y son ellos los responsables de las pantallas magnetizadas.

Si toda la pantalla está de un color (algún RGB), entonces deben ser los enchufes de atrás que están mal conectados. Siempre pasa en clases a la hora de enchufar el notebook PC al proyector.

Yo de pura suerte pasé del CRT al LCD, de pura suerte. Pero todavía veo a algunos sufrir con esto (y yo mismo me he visto en los laboratorios de la universidad o unos cuantos cibercafés).

Etiquetas: , ,

Lágrimas de San Lorenzo

16.8.08. Por ooscarr (ooscarr)

El martes por la noche el cielo se cubrió de lágrimas. Las Perseidas o Lágrimas de San Lorenzo es la lluvia de estrellas fugaces o meteoros más espectacular y conocida.

Acerca de las Perseidas

Perseidas

El nombre de Perseidas se debe a que la zona del cielo desde donde parecen salir los meteoros se encuentra en la constelación de Perseo. La popularidad de las Perseidas es debida parcialmente a su gran actividad, más intensa que la mayoría de las lluvias, y en parte a que se produce en agosto, mes de verano (en el hemisferio norte) durante el cual, lejos de las luces de las ciudades, se puede disfrutar más del cielo nocturno debido a las cálidas temperaturas.

El Sistema Solar contiene gran cantidad de partículas de polvo formando nubes. Las partículas que componen este polvo presentan diferentes tamaños (la mayoría miden alrededor de una micra, una millonésima de metro). Estas aglomeraciones de polvo suelen asociarse a restos de materia que los cometas van dejando a lo largo de sus órbitas en sus sucesivos pasos por las proximidades del Sol y la Tierra. Cuando una de estas partículas entra a gran velocidad en la atmósfera de nuestro planeta, produce un trazo brillante en el cielo que denominamos comúnmente "estrella fugaz".

¿Y quién fue San Lorenzo anyway?

San Lorenzo

Según la wikipedia, fue un diácono de Roma que tenía el Santo Grial, lo persiguieron y lo quemaron asado a la parrilla (literalmente) y mientras lo quemaban vivo, cuenta la leyenda, él dijo que lo voltearan, para asarse bien; y antes de exalar, exclamó: "la carne ya está asada, pueden comer ya".

:-S. De todos modos, en mi localidad, este evento se celebra religiosamente todos los años el mismo día de la lluvia de las Perseas. (Aunque este santo aquí está asociado al alcoholismo y la pobreza).

Asunción de María, cuadro de Johann Gebhard (1750)
También esta semana se celebró la Asunción de la Virgen. Y yo siempre he asociado a las vírgenes y otros seres celestiales con visiones en el cielo nocturno. Como la princesa Rosalina de Super Mario Galaxy, por ejemplo.

Otros astro-eventos de Agosto

También, en este preciso momento está ocurriendo un eclipse parcial de Luna que será visible en Europa, Asia, África, Australia y Este de Sudamérica. En Chile tendrá poca notoriedad a simple vista, ya que la Luna pasará principalmente por la penumbra de la Tierra entre las 18:30 y 18:44. Y en mi ciudad —al igual que en la lluvia de meteoritos— está nublado debido a una extraña lluvia que surgió de repente.

Referencias

Etiquetas: , , ,

Un gráfico bajo JSP con Cewolf en NetBeans

15.8.08. Por ooscarr (ooscarr)

Netbeans

Traduje las instrucciones del tutorial de la página de Cewolf y consideré que se merecía un post, digamos, para actualizarlo/corregirlo.

Primero, para qué sirve Cewolf

Cewolf puede ser usado dentro de una aplicación basada en Servlet/JSP para insertar gráficos complejos de todo tipo (p.e. lineales, de torta o pastel o circular o 100%, de barras, histogramas, diagramas de caja, etc.) en una página web. Además provee una completa librería de etiquetas (tags) para definir todas las propiedades del gráfico (colores, rayas, leyendas, etc.). De este modo el JSP que incluye el gráfico no queda lleno de código java. Todo es descrito con etiquetas XML válidas.

Cewolf está basado en JFreeChart y usa su motor de renderizado para renderizar la imagen del gráfico final al flujo de respuesta de los clientes. Ningún archivo es creado en el lado del servidor. Todo está basado en objetos de sesiones livianas y análisis de datos dinámico. Cewolf consiste de un servlet el cual maneja el renderizado de los gráficos y una librería de etiquetas (Tag Library) que traduce la definición del gráfico incluida en el JSP a una etiqueta img que consulta al servlet de renderizado para la obtención del gráfico apropiado.

Cewolf

Completamente gratis, libre y abierto

  • Licencia LGPL
  • Sin cargos
  • Sin restrictions
  • Todos los archivos fuentes documentados y disponibles
  • Soporte las 48 horas en los foros de SourceForge
  • Rápido desarrollo y ciclos de mejores versiones

100% Java

  • sin uso de librerías nativas
  • debería correr en todo servidor compatible con J2EE o en contenedores servlet
  • uso extenso de proyectos open source disponibles

Completa librería de etiquetas para gráficos

  • Sin necesidad de código java dentro del JSP
  • Descripción XML de un gráfico
  • Validación de etiquetas de gráficas en tiempo de diseño
  • Extensa documentación de las etiquetas

Enorme número de diferentes gráficas

  • Lineal [XY]
  • Torta [3D]
  • Barras horizontales [3D]
  • Barras [XY] Verticales [3D]
  • [3D] Barras verticales apiladas
  • De área [XY]
  • Gráfico disperso
  • Gráfico de velas
  • Alto Bajo
  • Gantt
  • Sobrepuestos
  • Combinados

Antes

Antes de empezar, asegúrate:

Hola, mundo

PASO 1: Instalamos las librerías

  1. Creamos un Nuevo proyecto de tipo Aplicación Web
    Captura de pantalla del asistente para crear un Nuevo proyecto en Netbeans
  2. Elejimos un nombre
    Captura de pantalla del asistente para crear una Nueva Aplicación Web
  3. Usamos una carpeta dedicada para los archivos JAR
    Use dedicated library folder for server JAR files
  4. Ahora, en la parte de los proyectos, seleccionamos Propiedades. Y en el panel de propiedades, sección Librerías presionamos el botón de Agregar JAR
    Libraries > Add JAR/Folder
  5. Aquí tenemos que abrir la carpeta del Cewolf recién descargada y dentro de la carpeta /lib/ seleccionar todos los archivos .jar que aparecezcan, marcar la opción Copiar a la carpeta de librerías y presionar Seleccionar.
    Copy to Libraries Folder
  6. OK
    Panel de Propiedades del proyecto en Netbeans para Mac OS X con el botón OK focalizado
    No se olviden también de agregar la librería JSTL con el botón Agregar Librería, o sino no va a funcionar nada.

PASO 2: Nos ponemos desagradables

Ahora que están las librerías, debemos preparar la aplicación.

Primero debemos mover o copiar la carpeta /etc/ que viene en Cewolf a nuestra carpeta /WEB-INF

Captura de pantalla que muestra cómo se arrastra una carpeta del panel Favoritos al panel de archivos del proyecto en Netbeans
Para ver nuestras carpetas locales en Netbeans, debemos seleccionar el menú Ventana > Favoritos (o Window > Favorites, si tienes el Netbeans en inglés).

web.xml

Ahora editamos el archivo web.xml que hizo un cameo en la imagen anterior, en el modo XML y le metemos el siguiente código antes que se cierre la etiqueta </web-app>

<servlet>
 <servlet-name>CewolfServlet</servlet-name>
 <servlet-class>
  de.laures.cewolf.CewolfRenderer
 </servlet-class>
 <!-- sets storage implementation -->
 <init-param>
  <param-name>storage</param-name>
  <param-value>
  de.laures.cewolf.storage.TransientSessionStorage
  </param-value>
 </init-param>
 <!-- sets overlib.js location relative to webapp -->
 <init-param>
  <param-name>overliburl</param-name>
  <param-value>etc/overlib.js</param-value>
 </init-param>
 <!-- turn on or off debugging logging -->
 <init-param>
  <param-name>debug</param-name>
  <param-value>true</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
 <servlet-name>CewolfServlet</servlet-name>
 <url-pattern>/cewolf/*</url-pattern>
</servlet-mapping>

Para probar, prueba ejecutar la aplicación web (o presionar el botón Play) y visitar la carpeta /cewolf como en el siguiente ejemplo:

http://localhost:8080/ejemplo/cewolf?state

Y debería aparecer:

Cewolf servlet up and running.
Requests served so far: 0

O sino, te equivocaste de puerto (prueba el :8084).

PASO 3: Java

Con Cewolf, todavía se debe escribir la parte de los datos de JFreeChart con código Java. Lo que sucede es que una clase se encarga de preparar los datos y a través de un bean se accede a ellos desde la JSP.

  1. Para crear la clase, vamos a Nuevo archivo > Java > Java Class
    Panel de nuevo archivo de Netbeans en Mac OS X
  2. Le ponemos un nombre a la clase, en este caso NumeroDeVisitas; y al paquete (Package) le podríamos llamar de.laures.cewolf.datos
    Captura de pantalla del panel de nueva clase java en Netbeans para Mac OS X
  3. Luego de presionar el botón Finalizar, el archivo debería aparecer dentro de la carpeta Source Packages en nuestro proyecto.

    Captura de pantalla con el árbol de archivos en Netbeans mostrando el archivo ejemplo > Source Packages > de.laures.cewolf.datos > NumeroDeVisitas.java

Códigos fuentes

Y en ese archivo escribamos, por ejemplo, el siguiente código java que he traducido especialmente para ti:

NumeroDevisitas.java
package de.laures.cewolf.datos;

import java.io.Serializable;
import java.util.Date;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

import de.laures.cewolf.DatasetProduceException;
import de.laures.cewolf.DatasetProducer;
import de.laures.cewolf.links.CategoryItemLinkGenerator;
import de.laures.cewolf.tooltips.CategoryToolTipGenerator;

/** 
 * Un ejempplo de productor de datos.
 * @author  Guido Laures
 * Traducido por Oscar Fernández
 */

public class NumeroDeVisitas implements DatasetProducer,
 CategoryToolTipGenerator, CategoryItemLinkGenerator, Serializable{

 private static final Log log=LogFactory.getLog(NumeroDeVisitas.class);

 // Estos valores normalmente no se deberían escribir
 // sino producidos por algún tipo de fuente de datos
 // como una base de datos o un archivo
 private final String[] categories={"Lun","Mar","Mié","Jue","Vie","Sáb","Dom"};
 private final String[] seriesNames={"Portada","Noticias","Foros","Buscador"};

 //Produce datos aleatorios
 public Object produceDataset(Map params) throws DatasetProduceException{
  log.debug("produciendo datos.");
  DefaultCategoryDataset dataset=new DefaultCategoryDataset(){
   // @see java.lang.Object#finalize()
   protected void finalize() throws Throwable {
    super.finalize();
    log.debug(this +" terminado.");
   }
  };
  for(int series=0;series<seriesNames.length;series ++){
   int lastY=(int)(Math.random()*1000+1000);
   for(int i=0;i<categories.length;i++){
    final int y=lastY+(int)(Math.random()*200-100);
    lastY=y;
    dataset.addValue(y,seriesNames[series],categories[i]);
   }
  }
  return dataset;
 }

 /**
  * Estos datos producidos son invalidados después de 5 segundos.
  * Por este método el productor puede influenciar el comportamiento
  * de caché de Cewolf de la forma que quiera.
  */
 public boolean hasExpired(Map params,Date since){
  log.debug(getClass().getName()+"hasExpired()");
  return(System.currentTimeMillis()-since.getTime())>5000;
 }

 // Retorna un ID único para este DatasetProducer
 public String getProducerId(){
  return "NumeroDeVisitas DatasetProducer";
 }
 
 // Retorna un link target para un item de datos especial.
 public String generateLink(Object data,int series,Object category){
  return seriesNames[series];
 }

 // @see java.lang.Object#finalize()
 protected void finalize() throws Throwable{
  super.finalize();
  log.debug(this+" finalized.");
 }

 /**
  * @see org.jfree.chart.tooltips.CategoryToolTipGenerator#generateToolTip(CategoryDataset, int, int)
  */
 public String generateToolTip(CategoryDataset arg0,int series,int arg2){
  return seriesNames[series];
 }
}
index.jsp

Ya. Ahora que la parte complicada está hecha, para llamar al gráfico desde la JSP, escribimos:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri='/WEB-INF/etc/cewolf.tld' prefix='cewolf' %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
  <title>Hola, mundo</title>
 </head>
 <body>
  <jsp:useBean id="visitas" class="de.laures.cewolf.datos.NumeroDeVisitas"/>
  <cewolf:chart 
   id="line"
   title="Estadísticas de visitas al sitio"
   type="line"
   xaxislabel="Página"
   yaxislabel="Número de Visitas">
   <cewolf:data><cewolf:producer id="visitas"/></cewolf:data>
  </cewolf:chart>

  <h1>Hola, mundo!</h1>
  <p><img src="<cewolf:imgurl
      chartid="line"
      renderer="cewolf"
      width="400"
      height="300"></cewolf:imgurl>"
   alt="Gráfico" /></p>
 </body>
</html>

Para que funcione, se debe poner atención a las partes marcadas del código.

¡Y listo!

Ahora al visitar la página recién editada, debería aparecer algo así:

ver index.jsp.
* Las líneas del gráfico lineal pueden ser diferentes, ya que, como se vio en el código java, corresponden a datos aleatorios que cambian cada vez que se refresca la página.
** La página es de referencia

Algo más útil

Algo más útil sería obtener los datos desde una base de datos o algún otro servicio. Eso lo veré en otro capítulo. Se me acabó el tiempo. Chao.

Referencias

Etiquetas: ,

Tip: Guardar pestañas al cerrar Firefox

14.8.08. Por ooscarr (ooscarr)
Mozilla Firefox

Ahora Firefox 3 te da la opción de guardar las pestañas que tienes abiertas antes de cerrar la aplicación y poder restaurarlas después (mañana) cuando vuelvas a abrir Firefox.

Para hacer esto, sólo debes elegir Salir desde la barra de menú (Archivo o Firefox) y elegir la opción indicada. También existe la opción de guardar siempre las pestañas abiertas al momento de salir automáticamente y sin preguntar nada.

Cuadro de diálogo Salir de Firefox para Mac OS X - ¿Desea que Firefox guarde sus pestañas para la próxima vez que se inicie?

Si marcaste No preguntar la próxima vez y no sabes cómo hacer que vuelva a preguntar (como yo), la opción está en las Preferencias eligiendo cualquiera de las otras 2 opciones Al iniciar Firefox en la sección Principal.

Captura de pantalla del Panel de preferencias de Mozilla Firefox 3 para Mac OS X

¿Seré yo el tonto al que le costó tanto encontrar cómo volver a hacer aparecer el diálogo o fue una falla de diseño de interfaz? Porque si para hacer desaparecer el diálogo tuve que marcar una casilla, lo que menos me esperaba era hacerlo volver desplegando un cuadro de selección relacionado. Es lógico pero no obvio.

Referencias

Etiquetas: , , , ,

Tip: Agregar carpeta al PATH

31.7.08. Por ooscarr (ooscarr)
terminal

Los paths son una lista de directorios que son buscados cuando escribes el nombre de un programa en las líneas de comandos.

Permanentemente

Para agregar permanentemente, se edita el archivo /etc/paths con permisos de superusuario así:

  1. Abrir el terminal
  2. tipear:
    sudo vi /etc/paths
  3. Escribir la contraseña si la pide
  4. Se abrirá una interfaz llamada vi, presionar la tecla i para insertar texto
  5. En la última línea, agregramos la ruta (path, por eso se llama path) al directorio
  6. esc
  7. En mi caso guardo el archivo presionando dos veces la combinación de teclas shift Z
  8. Listo

Temporalmente

También se puede agregar una ruta al PATH temporalmente mientras no cerremos la ventana. El método depende de qué sistema de comandos estén usando.

Con csh o tcsh

Si están usando el csh o el tcsh, los comandos serían:

setenv PATH ${PATH}:/ruta/a/la/carpeta

Con sh o bash

Y si están usando el sh o el bash, sería:

export PATH=$PATH:/ruta/a/la/carpeta

Estos últimos comandos se deshacen cuando se cierra la ventana del terminal.

Algunos sistemas como linux tienen métodos adicionales de agregar los PATHs, y otros (como Windows) tienen los PATHs ubicados en otras partes (Propiedades del Sistema).

Referencias

Etiquetas: , , , ,

Publicidad