Archivo

Archivo para junio, 2009

Eclipse Galileo: Nueva versión, corriendola en OSX

Lunes, 29 de junio de 2009

stupidzombieUna captura vieja de pantalla de Eclipse Ganymede corriendo StupidZombie

Los lectores habituales de esta bitacora saben que yo uso Eclipse como editor para trabajar en el código de KodeGeek.com y StupidZombie. Al ver que ya tienen una versión (Galileo) para OSX decidí probarla de una vez, sobre todo con StupidZombie.

¿Y como se compara Galileo con la versión anterior, Ganimede?

Lo malo:

Bueno, primero que nada la importación de los proyectos en la versión anterior funcionó sin mucho problema (SVN no funcionó bien).

Una de las cosas que estaba esperando es el análisis de memoria. Este tipo de cosas son super útiles, Netbeans cuenta con visualvm y otras herramientas como Yourkit hacen un trabajo tremendo (Yourkit se puede integrar con Eclipse también). Pero el hecho de que Eclipse la integre de una vez es super cómodo y conveniente.

Sin embargo la instalación es un poco tediosa. Y al final me topé con que OSX no es soportado :(

Otra cosa irritante: El cliente de Subversion que viene con Eclipse no funcionó. Parece ser que requiere otros clientes nativos los cuales no están en OSX:

*** Validate Repository Location
Selected SVN connector library is not available or cannot be loaded.
If you selected native JavaHL connector, please check if binaries are available or install and select pure Java Subversion connector from the plug-in connectors update site.
If connectors already installed then you can change the selected one at: Window->Preferences->Team->SVN->SVN Client.
*** Error (took 00:00.007)

Sin embargo el menú ‘Window->Preferences->Team->SVN->SVN Client.’ no existe, lo cual es muy irritante. Al final instalé el cliente de Tigris.org y logré recuperar mi proyectos en SVN (En este caso StupidZombie). Todo bien después de eso

Eclipse Galileo corriendo StupidZombie

Lo bueno:

¿Que otras cosas interesantes noté? Bueno, los detalles pequeños siempre cuentan:

  • Puedo decir también que esta versión es más rápida a la hora de compilar el código en Java.
  • La completación de código (Ctrl+Space) es más rápida y si incluyes la clase con el paquete entonces la selección es más acertada
  • La instalación de plugins siendo siendo super fácil, incluso cuando hay problemas estos son fáciles de resolver
  • La ejecución de código de Ruby desde Eclipse es genial. De verdad es una adición genial al editor

Lo feo:

Sin embargo hay cosas que quisiera que mejoraran (no muchas, gracias a Dios):

  • Eclipse aún no incluye por omisión un editor de interfaces gráficas como Netbeans (La opción es el proyecto Visual Editor)
  • Eclipse debería ser más inteligente cuando se instalan plugins y las dependencias básicas no están

¿Me mudaría a Netbeans? No lo creo. Conozco a Eclipse muy bien, cada versión es más rápida y con más funcionalidad y los problemas que se presentan son fáciles de resolver. En un mundo en donde la productividad vale oro esta es una de las herramientas que quiero tener al lado, además de Ant :).

Veneblogs: , , ,

Blogalaxia: , , ,

To2Blogs: , , ,

Technorati: , , ,

Del.icio.us: , , ,

java , , ,

Haciendo que Java se vea más nativo en OSX: El caso de StupidZombie

Lunes, 22 de junio de 2009
Comentarios desactivados

Bueno, ya la parte de la localización de StupidZombie está casi resuelta, asi que ahora me sale integrarlo mejor con OSX. Linux y Windows son má llevaderos, pero OSX tiene su forma neurotica de hacer las cosas :)

java , , ,

Localización en Java (II): El caso de StupidZombie

Domingo, 21 de junio de 2009

StupidZombie localization issues¿Qué tiene de malo la imagen?. Pista: ¡Llámame p’atras!

Bueno, ya casi está listo. Pero cuando digo ya casi es porque aún tengo componentes de Swing los cuales no se portan muy bien en cuanto le cambio el lenguaje y la región al programa.

¿Qué hacer? Parece que es una cucaracha común, en especial con JFileChooser:

Hay soluciones, voy a probarlas y después les digo como me fué. Sin embargo con Swing es irritante ver como la promesa de Java “Run anywhere” se quiebra un poquito ;)

Veneblogs: , , , , ,

Blogalaxia: , , , , ,

To2Blogs: , , , , ,

Technorati: , , , , ,

Del.icio.us: , , , , ,

java , , , , ,

Localización en Java (I): El caso de StupidZombie

Sábado, 20 de junio de 2009
Comentarios desactivados

Bueno, ya trabajando en la versión 1.1 de StupidZombie. En este caso una de las cosas que dejé fuera de la versión 1.0 fué el soporte del lenguaje Español.

Si el usuario ya tiene a su sistema operativo con localización en Español entonces no hay problema, sin embargo ¿que pasa si no es así? Pienso resolver eso permitiendo al usuario agregar esto como una propiedad más en la interfaz gráfica de SZ:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.stupidzombie.ping;
 
import java.util.Locale;
 
 
/**
 * Manages the access to the StupidZombie localized resources
 * @author undead@stupidzombie.com
 */
public class LocaleManager {
 
	private static PreferenceManager pref;
 
	private LocaleManager() {
		// EMPTY
	}
 
	/**
	 * Return the desired locale. First check user preferences and if not there check system default.
	 * Once the a locale is found make it the default locale and return it. 
	 * @return locale
	 */
	public static Locale getZombieLocale(String variant) {
		pref = new PreferenceManager();
		String languaje = pref.getPref().get("languaje", System.getProperty("user.language", "en"));
		String country = pref.getPref().get("country", System.getProperty("user.region", "US"));
		Locale.setDefault(new Locale(languaje, country, variant == null? "": variant));
		return Locale.getDefault();
	}	
}

La idea es buscar en las preferencias (PreferenceManager es una clase que escribí la cual maneja las preferencias de SZ), si no está allí entonces revizar las propiedades del sistema y si hay nada definido entonces agregamos valores por omisión.

Usandolo desde Java:

1
2
3
4
	static {
		BUNDLE = 
			ResourceBundle.getBundle(StupidZombieGui.class.getName(), LocaleManager.getZombieLocale(null));
	}

Por ahora si usted quiere compilar el código y ver como trabaja puede llamar al programa de la siguiente manera:

1
java -jar -Duser.languaje=es -Duser.region=VE StupidZombie.jar

Por cierto, para todos aquellos lectores que tienen hijos, ¡feliz día del padre (adelantadas) :)!

Veneblogs: , , , ,

Blogalaxia: , , , ,

To2Blogs: , , , ,

Technorati: , , , ,

Del.icio.us: , , , ,

java

Comienza la cuenta regresiva para StupidZombie 1.1

Sábado, 13 de junio de 2009
Comentarios desactivados

Ya comenzó la cuenta regresiva para StupidZombie 1.1. Hoy cree las ‘ramas’ en SubVersion, hice pequeños cambios en la compilación del proyecto, y actualice las librerías de terceros (con la ganancia grátis en velocidad del Pinger de XML-RPC).

Pero lo más importante es que ya tengo la lista completa de tareas para la versión 1.1.

Veneblogs: , , ,

Blogalaxia: , , ,

To2Blogs: , , ,

Technorati: , , ,

Del.icio.us: , , ,

java ,

Usando Visualvm en StupidZombie con Eclipse y OSX: Resultados mixtos

Jueves, 11 de junio de 2009
Comentarios desactivados
StupidZombie memory profile - ping

StupidZombie memory profile - ping

Hoy me decidí a probar VisualVM de Sun (O debería decir Oracle). Bajarselo del sitio web es un paseo y la instalación es trivial (descomprimir, correr y ya). La aplicación a la cual estudié no es más que StupidZombie.

(Si usted tiene Windows entonces quizas no necesite bajarselo ya que viene con la última máquina virtual de Java de Sun).

Correr VisualVM es bastante sencillo, sólo tuve que:

  1. Ejecutar a StupidZombie
  2. Ejecutar a VisualVM (haciendo click en su icono en el directorio bin en donde quedó instalado).

Lo primero que hice fué ver cuanta memoria se estaba comiendo StupidZombie; Una aplicación tan sencilla debería ser liviana y me encontré con que usa sólo 20MB en OSX (Una ridiculez considerando lo que pesan ciertas aplicaciones hoy en día). Sin embargo me soprendió ver que cuando StupidZombie hay más de 5000 mil clases de Java en memoria, (¿porqué tanta basura?).

Esto me hace pensar que es hora de poner a dieta a la aplicación; Por ello me decidí hacer un perfil del uso de memoria (memory profile) y lo dejé corriendo un rato mientras hacia Pings a varios directorios y escribia etiquetas con el generador de etiquetas automático:

StupidZombie and VisualVM

StupidZombie and VisualVM

Mucha creación de arreglos de caracteres. No es soprendente ya que StupidZombie hace mucho “procesamiento” de cadenas de texto, proveniente de los directorios. Sin embargo me gustaría como se porta si lo corro paso a paso desde Eclipse (en mi caso no utilizo NetBeans donde la integración es más natural).

¿Y que sabemos del uso del procesador (CPU)? Bueno, siempre que intentaba cambiar a ese modo la aplicación corria bien un rato y luego se moria, dejandome a un proceso zombie en la máquina (que ironia StupidZombie es ahora un verdadero Zombie :)):

Nunca pude medir el desempeño del procesador

Nunca pude medir el desempeño del procesador

Por ahora mi opinión de la herramienta es mixta. Si bien es genial que la máquina virtual de Java venga una herramienta de este calibre es también decepcionante que no se pueda medir el desempeño del procesador en OSX.

¿Pero es justa la comparación? Es decir, ¿como se mide en OSX con otras herramientas similares?

Bueno, yo tengo buenas experiencias en mi trabajo con YourKit. Resulta que ellos ofrecen una licencia OpenSource (aunque también tienen una licencia de evaluación de 15 días), así que también me baje esta versión de la herramienta y la probé (primero claro, hubo que hacer ciertos pasos en OSX antes de poder utilizar la herramienta, nada del otro mundo):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
auyan:bin josevnz$ export DYLD_LIBRARY_PATH=/Users/josevnz/Desktop/YourKit_Java_Profiler_8.0.9.app/bin/mac:$DYLD_LIBRARY_PATH
auyan:bin josevnz$ java -agentlib:yjpagent=helpYourKit Java Profiler 8.0.9 JVMTI agent usage: -agentlib:yjpagent=[help]|[option, ...]
 
Option             Description
------------------ ----------------------------------------
port=value       port to listen on (1-65535, by default any free port is chosen)
listen=ip:port same as 'port', but bind agent socket to particular IP only
onlylocal          allow only local connections to profiled application
dir=custom dir   directory where snapshots are created (by default $user home/Snapshots)
telemetrylimit=$n limit telemetry buffer capacity to N hours (approximately)
sampling           startup with CPU sampling
tracing            startup with CPU tracing
                   (cannot be used together with 'disablecounts')
noj2ee             do not perform J2EE high level profiling
                   (use only in combination with 'sampling' or 'tracing')
alloceach=$n      startup with object allocation recording: record each N-th allocation;
                   can be used together with 'allocsizelimit';
                   cannot be used together with 'disablealloc'
allocsizelimit=$b startup with object allocation recording: record objects with size >= B bytes
                   can be used together with 'alloceach';
                   cannot be used together with 'disablealloc'
monitors           startup with monitor usage profiling
usedmem=$percent  capture memory snapshot automatically when used heap memory
                   reaches the threshold
onexit=memory      always capture memory snapshot on exit
onexit=snapshot    always capture performance snapshot on exit (i.e. without heap)
disablealloc       do not instrument bytecode for object allocation recording
disablecounts      do not instrument bytecode for CPU tracing
disablej2ee        do not instrument bytecode for J2EE profiling
disablestacktelemetry
                   do not collect thread stack and status information
quiet              suppress diagnostic messages
 
Please find detailed description in the Help section "Startup options":
http://www.yourkit.com/docs/80/help/additional_agent_options.jsp
 
Examples:
java -agentlib:yjpagent FooClass
java -agentlib:yjpagent=alloceach=10,allocsizelimit=1000000,dir=c:\MySnapshots FooClass
java -agentlib:yjpagent=usedmem=70 FooClass

Bueno, funciona. Ahora corremos a StupidZombie con las opciones de YourKit y la cosa se ve más o menos así:

YourKit profiling StupidZombie

YourKit profiling StupidZombie

1
2
3
4
5
6
auyan:bin josevnz$ java -agentlib:yjpagent -jar ~/Documents/stupidzombie/kenai/dist/StupidZombie.jar 
[YourKit Java Profiler 8.0.9] JVMTI version 3001016a; 1.6.0_07-b06-57; Apple Inc.; mixed mode, sharing; Mac OS X; 64-bit JVM
[YourKit Java Profiler 8.0.9] Profiler agent is listening on port 10001...
[YourKit Java Profiler 8.0.9] *** HINT ***: To get profiling results, connect to the application from the profiler UI
Jun 11, 2009 11:15:24 PM com.stupidzombie.gui.StupidZombieGui main
INFO: Starting...

Hice un montón de pruebas y debo decir que YourKit es una opción mucho más madura que VisualVM. Solo me queda ver si la gente de YourKit me dá una licencia OpenSource para seguirla utilizando en StupidZombie por más de 15 días.

¿Y ustedes, que utilizan para medir el desempeño de sus aplicaciones?

comics, internet, java, kodegeek, linux, opensource, programación, ruby , , ,

Los bemoles del OpenSource: ¿Y que pasa con los proyectos pequeños?

Domingo, 7 de junio de 2009
Comentarios desactivados

SZv9_blockhead_180x200_wht

Blockhead no ha tenido una vida fácil

Ahh, si sólo los bemoles se aplicaran a la música.  Pero no es así, en este caso el código abierto u OpenSource también tiene los suyos. En particular voy a hablar de los proyectos gratuitos a los cuales casi llamaría “pasatiempos“, en este caso StupidZombie.

El lado feo de un proyecto de código abierto:

Sentilla Swing temperature display - Time Series
¿Alguien se acuerda de agua y fuego?

  • Es un proyecto costoso: StupidZombie es bien costoso. Cuesta tiempo que pudiera estar utilizando en otras cosas. Me cuesta el dominio de DNS, el hospedaje. Cuesta el esfuerzo de convencer a otras personas para que se involucren y participen en el proyecto.
  • Es dificil conseguir colaboradores: Nadie quiere trabajar en un proyecto pequeño, y menos de gratis. Si el proyecto es en Español entonces las posibilidades de conseguir colaboradores bajan dramáticamente (yo tengo varias teorías, con gusto las discutimos en cuanto me dejen sus comentarios). Hay que promocionar el proyecto en muchos sitios, de muchas maneras para darlo a conocer, explicando el potencial (Por ejemplo, después de mucho trabajo tuve la suerte que DrRomney se interesara en el diseño del proyecto. De allí nació Blockhead y el sitio web del proyecto).
  • Requiere dedicación: La tentación de hacer cualquier otra cosa a estar echando código en solitario es grande. Revizar cucarachas, probar cosas nuevas. Si usted no disfruta de su proyecto entonces ni siquiera empiece (por ejemplo muchos de los proyectos en Source Forge nunca liberaron una linea de código y ahora están abandonados).

Con el tiempo uno aprende a hacer mejores propuestas. Por ejemplo, uno de mis primeros pasatiempos OpenSource fué CVEBrowser. En aquel entonces estaba aprendiendo Servlets y JSP y me pareció buena idea dejar algo atrás. El proyecto llegó a su versión 1.0 y allí murió ya que nunca hubo interés de nadie en ver nuevas cosas (sin embargo hasta el día de hoy hay descargas del código desde su sitio web).

Al mismo tiempo PingBlog (el ancestro de StupidZombie) y ElAngelNegro (Kodegeek) nacieron. PingBlog nunca fué popular y ciertos cambios le dieron nueva vida el proyecto. Kodegeek es bien experimental y recoge todas (bueno, casi todas) los experimentos con código de los cuales he hablado en este blog a través de los años (todos los meses tiene descargas de código, así que hay bastante interés en el proyecto, pese a que son piezas de código aquí y allá)

No todos fueron grandes éxitos: The Java Simple Registration System (JSRS) nunca liberó código y sólo se quedo en documentación (razones personales y desde entonces otros proyectos han despegado). AguaYFuego fué otro experimento interesante mientras jugaba con los motes de Sentilla, pero nunca tuvo la intención de despegar como algo más serio.

Con el tiempo uno aprende una que otra lección:

Google Maps KodeGeek
Kodegeek y sus múltiples experimentos

  • Algunos éxitos vinieron de otros proyectos: Hace ya unos años atrás yo era un usuario avido de OpenNMS. En ese tiempo el proyecto no tenia un ‘plugin’ para monitorear bases de datos usando JDBC (sólo uno que detectaba si el puerto en TCP/IP estaba abierto o no). Después de jugar un poco envié el código al proyecto y (suerte para mi) fué aceptado. Hoy en día estan trabajando en un código más limpio, pero en ese entonces esta pieza de código ayudo a unos cuantos (y yo muy agradecido por poder ayudar).
  • Mercadeo, mentiras y vídeo: Como cambiar el nombre del proyecto ayuda: Desde que el proyecto cambio su nombre a StupidZombie (bendito dominio en DNS) ha habido más colaboración e interés. Gracias a esto conseguí que alguien se interesara en el proyecto y creara un diseño atractivo que a logrado que la gente se baje la aplicación, juegue con ella. Las redes sociales como Facebook, Twitter y proyectos  como Kenai.com han ayudado mucho, en comparación con métodos más tradicionales como anunciar el proyecto en Freshmeat.net o hospedarlo en Source Forge
  • Siempre ayuda escribir algo que solucione un problema de verdad: A veces reinventar la rueda no es tan malo ;)

Sin embargo quedan obstáculos:

  • Aún es costoso competir con el código comercial: Por ejemplo, obtener certificados digitales para firmar el código es costoso. Si lo quieres hacer gratis es un proceso complejo. Promocionar el producto como si fuera comercial cuesta dinero (por ejemplo la tienda Java Store no es grátis, ya que ellos tienen que pagar los costos de mantenimiento y distribución). Si a eso le suma el hecho de que nadie paga por código abierto (olvidense de las donaciones, yo nunca he recibido una en ninguno de mis proyectos)

¿Y al final, hay algo de valor en todo esto?

Linux console on Buglab
Buglabs: La combinación del OpenSource en Hardware y Software

Yo soy de los que cree que hay que dejar algo atrás, algo que hable de ti. No tiene que ser perfecto, sólo tiene que ser útil. Si es útil entonces seguirá creciendo, no importa si no se le dedica la misma atención. El hecho de involucrarse en varios aspectos del desarrollo de un proyecto (no sólo el echar código) es altamente gratificante ya que se aprenden muchas cosas, sobre todo el como actuar en diferentes roles (promotor de mercadeo, desarrollador, gerente de producto, diseñador de imagen y madrina del equipo ;)).

Ya para terminar los dejo con un pequeño pero interesante articulo sobre el verdadero valor del código OpenSource.

java, kodegeek, opensource, programación , , , ,

Bitacoras.com apoyando a StupidZombie

Miércoles, 3 de junio de 2009
Comentarios desactivados

¡Genial!. Un millón de gracias a los chamos de bitacoras.com, los cuales hablan sobre StupidZombie!:

http://bitacoras.com/noticias/archivos/stupidzombie-aplicacion-de-escritorio-para-envio-de-ping.php

Ahora a dominar el mundo Pinki :D

internet, java, kodegeek, opensource , ,

Hoy es un día triste para mi blog: Autocensura

Martes, 2 de junio de 2009
Comentarios desactivados

SZGUI_greenWhite

Queria escribir sobre StupidZombie pero el topico terminó siendo otra cosa

Hoy es un día triste para mi blog, ya que he decidido autocensurar varios de mis escritos sobre politica; Hoy por descubrí por desgracia que cierto grupo de personas se dedicó a copiar mis articulos al pié de la letra para ponerlos en sus sitios web, apoyando sus puntos de vista.

Encima de eso estaban haciendo enlaces directos de imagenes a mi servidores, gastando mi ya escaso ancho de banda :)

Si bien el plagio es una de las mejores formas de alabanza he decidido que desde el día de hoy todos esos escritos no serán mostrados más en el blog, ya que no me gusta ser citado fuera de contexto. Lo siento, yo creo en la libertad de expresión pero también creo en el respeto mutuo.

Este blog siempre se ha interesado en mostrar el aspecto tecnológico de las cosas (por algo se llama KodeGeek) y en algunos casos el aspecto politico de estas no puede ser divorciado. Sin embargo este no es un blog de politica (además de que no apoyo a nadie en particular) y creo que este paso es algo que he debido hacer hace mucho tiempo atrás.

Bueno, cambiando el tópico les escribo también para comentarles que estoy muy emocionado porque Sun Microsystems aceptó mi aplicación a la tienda Java. ¡La aplicación que pienso poner allí no es otra más que StupidZombie!

Tiempos interesantes.

kodegeek , ,

A %d blogueros les gusta esto: