Archivo

Archivo para la categoría ‘linux’

¿Amanda se vuelve una solución comercial?

Sábado, 27 de Febrero de 2010

Hoy leyendo mis correos de la lista de Amanda (a la cual estoy metido más por razones sentimentales que otra cosa) me conseguí con esto:

Greetings;

I have taken note that there have been no new snapshots made available in a
bit over 3 weeks now, and other than the downloads page, all of the rest of
the new web pages point to paid support.

What is the future direction of amanda?

No es una sorpresa, yo ya habia visto algo de esto en Community East con ZAmanda. Amanda es en mi opinión el mejor software de respaldo de código abierto que existe hoy en día y su evolución hacia software comercial con raíces de código abierto (como MySQL) es evolucionaría.

Yo realmente creo que el producto va a mejorar, sobre todo que ahora puede ser considerado una alternativa con soporte pago para las empresas (y definitivamente no creo que lo cierren).

java, kodegeek, linux, opensource , , ,

Usando Visualvm en StupidZombie con Eclipse y OSX: Resultados mixtos

Jueves, 11 de Junio de 2009
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 , , ,

¿Como hacer que las aplicaciones de Java se vean como nativas en OSX?

Domingo, 31 de Mayo de 2009
Bajate a StupidZombie

Bajate a StupidZombie

En este caso estoy tratando de que mi aplicación, StupidZombie, tenga un instalador nativo para OSX. Si bien el uso de Webstart es increiblemente conveniente yo también quiero que mis usuarios puedan correr la aplicación de manera similar a otras aplicaciones.

Me conseguí dos excelentes recursos, los cuales son muy fáciles de seguir:

El segundo enlace en particular tiene información sobre como capturar eventos, jugar con la barra de estado y otros.

¿Y que pasa con Linux / Windows? Creo que el instalador de Windows va a ser la segunda prioridad ya que (horror) no tengo Linux instalado en ninguna de las máquinas que tengo en la casa :(
Veneblogs: , , ,

Blogalaxia: , , ,

To2Blogs: , , ,

Technorati: , , ,

Del.icio.us: , , ,

java, linux , , ,

¿Ext4 en Linux no apto para consumo?

Sábado, 4 de Abril de 2009

Una de las pocas mañanas los fines de semana en los que me levanto temprano (si, 6:30 AM) y me puedo sentar a leer mis blogs favoritos. Entre esos, me conseguí un articulo en que hablan sobre la nueva instalación de Fedora Core (Leonidas). Pero lo que más me llamó la atención no fué el ya de por si breve articulo, sino la discusión sobre los problemas de Ext4 (el nuevo sistema de archivo de Linux) el cual parece ser escribe Metadata demasiado rápido.

El sistema de archivos es una de las cosas con las que nadie quiere joder. En serio. ¿De que sirve tener los datos en el servidor, si estos se van a corromper de manera silenciosa?

Esta es una de las discusiones que pienso seguir de cerca, no creo que nadie quiera ponerse a jugar con sus datos.

Veneblogs: , , ,

Blogalaxia: , , ,

To2blogs: , , ,

Technorati: , , ,

Del.icio.us: , , ,

linux, opensource , , ,

El Kernel de Linux tiene una nueva mascota: TUZ

Domingo, 22 de Marzo de 2009

Parece ser que el pinguino TUX se va a tomar unas vacaciones y en cambio llega un nuevo animalito (TUZ), según la gente de Linux foundation.

¿Qué les parece? Yo en particular prefiero a TUX, aunque es una buena causa la de salvar a los demonios de Tazmania :)

Veneblogs: , , , ,

Blogalaxia: , , , ,

To2blogs: , , , ,

Technorati: , , , ,

Del.icio.us: , , , ,

linux, opensource , , , ,

Resumen de CommunityEastOne Dia 2

Jueves, 19 de Marzo de 2009

Hoy fué el último día de los tutoriales de CommunityOne East. Yo me decidí a asistir al curso de MySQL para desarrolladores en la mañana y la continuación de MySQL para desarrolladores en la tarde.

El instructor hizo un gran esfuerzo concentrando un par de cursos que se dan durante el transcurso de una semana en sólo un día; Muchísima información, pero sobre todo me dió una idea de que seguir estudiando para profundizar mis conocimientos.

Hubo tips de todos los colores y sabores; Uno de los mejores fué la lista de cosas por hacer en una nueva instalación de MySQL del veterano George Trujillo.

En general valió la pena. Será hasta el año que viene ;)

java, kodegeek, linux, opensource, perl, programación , , , ,

Resumen de CommunityEastOne Dia 1

Miércoles, 18 de Marzo de 2009

Es una de las pocas excepciones en las cuales sólo puedo decir que no sé por donde empezar. ¡WOW!; Este año me decidí a tomar videos sobre mis experiencias en vez de tomar fotos, al mismo tiempo que escribía casi en tiempo real sobre la conferencia en Facebook, Twitter y el blog. Debo decir que es la primera vez que me quedo sin baterías por andar jodiendo la paciencia ;)

El énfasis de la conferencia fué Cloud Computing; Sun definitivamente está apostando a que este va a ser el siguiente gran boom (junto con otras compañías como Amazon.com) y durante el evento mostraron muchas de sus herramientas de desarrollo, administración y virtualización (en el video pueden ver a David Douglas, Senior Vice President, Cloud Computing and Developer Plarforms quien abrió el evento.):

Me encanto ver compañias como ZAmanda, las cuales han llevado el famoso programa de backup Amanda al mundo enpresarial y ahora también soportan el paradigma de respaldos en Cloud Computing.

No pude ir a todas las charlas (si quieren ver los videos revizen mi grupo en Flickr); Por razones de tiempo tuve que escoger entre las que más me interesaban, así que aquí les doy un pequeño resumen:

Moving Forward: High-Performance Application Development in a Multicore World: Michael Marden, de AMD junto con Patrick Leonard (Rogue Wave), David Maples (Allinea Software) y Duncan Mc Callum (Cilk Arts) se encargaron de explicar las últimas tendencias en cuanto al uso de procesadores multicore y como nos afecta a los desarrolladores.

Si bien no hubo demostraciones de productos ni código estuvo interesante en cuanto a las explicaciones de los problemas actuales y sus posibles soluciones. Pero eso si, preparese para ver más cores por procesador (hasta 48 en dos años) y siga el siguiente consejo: Si no tiene que utilizar multithreading entonces no lo haga :)

Les recomiendo el sitio de desarrolladores de AMD el cual tiene varios documentos y herramientas al respecto de este tema.

Sigo con la descripción, no hay más vídeos porque mi camara se quedó sin baterías :(


Cloud Computing for the Enterprise Software Developers:
Aburridisima, sólo mostraron herramientas y la teoría detrás del funcionamiento de la plataforma que mostraron fué floja. Parecía más un “informercial” que otra cosa. Perdí una hora de mi vida allí :(

Beyond Impossible: How Jruby Evolved the Java Platform
: La mejor charla del día en mi opinión. El trabajo que el desarrollador Charles Nutter de Sun y sus compañeros hicieron con JRuby es admirable. No sólo reprodujeron a C Ruby en Java, sino que en el proceso le agregaron más funcionalidad a la máquina virtual de Java (versión 7). Nos demostraron como JRuby es más rápido que C Ruby 1.9 en varios demos (uno de fractales en particular), además de las historias heroicas de ciertos desarrolladores, ¡como el que portó la librería de expresiones regulares en C de Ruby (JAnigurama) en sólo un mes!

Yo pregunté cual es la estrategia de Sun a largo plazo con todos estos lenguajes; La respuesta es soportar a aquellos que tengan las comunidades más grandes, pero en teoría todos los lenguajes. Este es el legado de Java, aunque el lenguaje muera este va a seguir con implementaciones de otros lenguajes en la máquina virtual.

Si quiere saber más sobre Jruby y el progreso de otros lenguajes dinamicos en la máquina virtual de Java (como Jython, Groovy, Scala) entonces visite el blog de Chales Nutter

Building an Atom-Enabled, Map-Driven, Location-Aware, Web-Centric Mobile Application with POJOs and Android: Verga, leer el titulo cansa imagine escribirlo ;) . Sin embargo la charla estuvo super interesante ya que el autor (Tim Bray, un experto en Cloud Computing) nos mostró una aplicación que escribió para Android en sólo 4 días (el programa, llamado storyteller, permite guardar historias en el telefono, haciendo anotaciones de texto y voz).

Datos curiosos de esta charla:

  • Microsoft es el jugador más debil del mercado móvil, con sólo %3 de todo la torta. Symbian es el mostruo con más de %27
  • Pese a la recesión mundial y a que menos usuarios compraron celulares el trimestre pasado comparado con el 2007, el mercado creció en un %5. ¡Carajo, este es el único mercado a prueba de recesión en el mundo!
  • El Java de Android no es realmente Java. Por ejemplo, este no puede correr JRuby. Por otro lado, tener root shell en el telefono de desarrollador simplemente no tiene precio :) )
  • Mientras probaba la aplicación, el programa se fué a un sitio que tenía la palabra “f*ck” en todos los colores y tamaños. Tim lo manejó muy bien diciendo que nunca nos ibamos a olvidar de su charla :)

Fué interesante ver como funciona el modelo de programación de aplicaciones en Android (les recomiendo el blog androiddiary.com para más detalles)

Building a Twitter Analisys Tool from Scratch Using PHP, MySQL, Yahoo UI and Netbeans: Eso es lo que yo llamo una demostración en caliente. Justin Bolter, de Sun, se lanzó de cabeza y escribió esa aplicación de memoria en una hora. Paso a paso demostró un dominio increíble de Netbeans (y sus capacidades) y al final nos dejó loco con un programa que mostraba los twitters (y sus detalles) usando un motor de búsqueda el cual guardaba sus datos en MySQL. Demasiado bueno.

JavaFX: The New Platform for Rich Internet Applications: Fué decepcionante ya que Chuk-Munn Lee de Sun sólo leyó la presentación sin detenerse mucho en los ejemplos con código (y Dios, si habia código). Pudo haber sido mejor aunque se nota que Lee sabia de lo que estaba hablando.

En general hubo muchos participantes de otros países (yo conté un viaje de gente de Japón, Alemania y Rusia por ejemplo. Sólo conté dos hispanos, yo y un Mejicano) y aproveche para preguntar sobre algunas cosas interesantes:

  • La adquisión de SUN por parte de IBM: Nadie quiso hablar de eso. Sin embargo el precio de SUN subió hoy de $4 a $8 :)
  • Open Storage:Mi grupo tiene un apetito inmenso por almacenamiento y Sun procalama que sus Storage Servers 7000 cuestan %75 menos que la competencia ya que estan basados en Open Solaris, y utilizan componentes comunes (han estado en venta desde Noviembre del año pasado, estoy averiguando a ver que tal)
  • Sun está alejandose de Java.net y en cambio está proponiendo una nueva plataforma, la cual va a soportar Cloud Computing: Kenai.com. Por haber asistido al evento y por tener un proyecto en java.net me dieron una cuenta, ya les contaré como me fué con esta nueva iniciativa de SUN en el mundo OpenSource la cual compite con SourceForge
  • Bueno, mañana me toca el dia 2 del evento, llamado “Deep Dive“. Son los tutoriales pagos en tecnologías OpenSource, me voy a lanzar un curso completo de un día sobre MySQL. Ya les comentaré como me fué ;)

Veneblogs: , , , , , , , , , , , ,

Blogalaxia: , , , , , , , , , , , ,

To2blogs: , , , , , , , , , , , ,

Technorati: , , , , , , , , , , , ,

Del.icio.us: , , , , , , , , , , , ,

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

Escribiendo desde CommunityOne

Miércoles, 18 de Marzo de 2009

Bueno, ya estoy en el Marriot. Tratare de escribir Durante el Dia de hoy, sin embargo siganme en twitter para actualizaciones en tiempo real: http://twitter.com/josevnz

java, kodegeek, linux, opensource, ruby , ,

Mañana es Sun CommunityOne East

Martes, 17 de Marzo de 2009

Bueno, ya quedan sólo horas para el Sun CommunityOne East. Yo ando imprimiendo mis entradas, preparando mi camara y sobre todo abriendo el cerebro para todo lo que voy a aprender el día de mañana.

Ya les contaré como me fué, esten pendientes por este espacio. También puede seguir el progreso del evento en Twitter y Facebook.

Blogalaxia: , , , ,

To2blogs: , , , ,

Technorati: , , , ,

Del.icio.us: , , , ,

java, linux, opensource, programación, ruby , , ,

Construyendo un servidor de logs usando Netcat, tail y Bash

Sábado, 14 de Marzo de 2009

Me toco entre estos días escribir un hack (no por lo malo sino por lo rápido que tenia que hacerlo) un servidor que debía proporcional el contenido de una bitacora la cual crece de manera continua durante el día. El grupo que nos pidio esto es de auditoria, lo cual implica que no debe perderse información.

Primero les muestro el código del programa y explico como funciona:

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
#!/bin/bash
# author: josevnz@kodegeek.com
#
set -o monitor
declare -a pids
declare -r SCRIPT=${0##*/}
declare -r FIFO="/tmp/$SCRIPT-$$.fifo"
 
if [ -z "$1" ]; then
        echo "Please provide the file to tail and try again"
        exit 192
fi
 
if [ -z "$2" ]; then
        echo "Please provide port and try again"
        exit 192
fi
 
trap cleanup exit INT TERM
 
if [ ! -e "$FIFO" ]; then
        mkfifo "$FIFO"
        if [ $? != 0 ]; then
                exit $?
        fi
fi
 
tail -F "$1" > "$FIFO" &
trap "test -e $FIFO && rm -f $FIFO" exit INT TERM
while true; do
        test -e "$FIFO" && netcat -v -v -v -l -p $2 < "$FIFO"
done
trap "kill -9 $! $$" exit INT TERM

La idea es revisar los contenidos del archivo usando ‘tail -F’. La opción ‘-F’ le dice a tail que reintente si tiene problemas eyendo el archivo; De allí redirigimos los contenidos a una cola (FIFO, first in first out) en Unix la cual garantiza que aunque el servidor TCP muera los datos estaran allí listos para ser enviados al cliente. Dejamos a tail corriendo en segundo plano…

El siguiente paso es arrancar nuestro servidor TCP. Netcat recibe los contenidos de la cola que creamos en el paso anterior. Fijense como lo encerramos en un ciclo infinito ya que si el cliente se muere (o desconecta por otra razón) Netcat cerrará la conexión.

Finalmente le decimos al script que mate todos los procesos hijos o el mismo programa si decidimos matar al servidor o nos matan el proceso.

Bueno, aqui les muestro como correr el servidor:

auyan:~ josevnz$ ./nettail fakelog.log 9000
Listening on any address 9000 (cslistener)
Connection from 127.0.0.1:50754
Total received bytes: 0
Total sent bytes: 432
Listening on any address 9000 (cslistener)
Connection from 127.0.0.1:50819

Y un ejemplo de como conectarse:

auyan:~ josevnz$ nc -v -v -v localhost 9000
nc: connect to localhost port 9000 (tcp) failed: Connection refused
Connection to localhost 9000 port [tcp/cslistener] succeeded!
This is a kodegeek test: Sat Mar 14 00:02:15 EDT 2009
This is a kodegeek test: Sat Mar 14 00:02:45 EDT 2009
This is a kodegeek test: Sat Mar 14 00:03:15 EDT 2009
This is a kodegeek test: Sat Mar 14 00:03:45 EDT 2009
This is a kodegeek test: Sat Mar 14 00:04:15 EDT 2009
This is a kodegeek test: Sat Mar 14 00:04:45 EDT 2009
This is a kodegeek test: Sat Mar 14 00:05:15 EDT 2009
This is a kodegeek test: Sat Mar 14 00:05:45 EDT 2009
This is a kodegeek test: Sat Mar 14 00:06:15 EDT 2009

Espero les guste esta solución de 5 minutos :)

Veneblogs: , , , ,

Blogalaxia: , , , ,

To2blogs: , , , ,

Technorati: , , , ,

Del.icio.us: , , , ,

java, linux, opensource, ruby, venezuela