Archivo para 3/06/08

Eclipse Ganymede RC2

Si sois de los que actualizan Eclipse, ya tenemos disponibles los paquetes de Eclipse Ganymede RC2

Enlace | Eclipse

Canonical presenta Ubuntu Netbook Remix (pantallazos)

Ya adelantamos que la familia de Ubuntu crecia con Ubuntu Netbook Remix, un nuevo sistema operativo destinado a dispositivos moviles y portatiles de bajo coste.
En la feria Computex 2008 de Taipei Canonical sin embargo ya ha presentado algunos pantallazos:

¿Hay ganas de hincarle el diente?

Visto en | Zeirus

La lectura del dia: Analisis de Ubuntu, Fedora, Mandriva y OpenSUSE

Interesante documento que encuentro en Barrapunto

«En esta comparativa enfrentan a Ubuntu 8.04, Fedora 9, Mandriva 2008.1 y openSUSE 11.0 (beta 2, eso sí), y en cada uno de los largos análisis se demuestra la importancia que todas ellas dan a la interfaz de usuario. KDE 4 parece haber llegado para quedarse, y mientras que unas apuestan por la tecnología punta (Fedora 9, pero con ciertos problemas) otras son más conservadoras (como Mandriva 2008.1). La inclusión de GNOME 2.22 es muy bien recibida, y la verdad es que todas ellas tienen una pinta genial. Incluso openSUSE 11.0, que parece por fin haber solucionado de manera definitiva los problemas de gestión de paquetes. Sorprendentemente, Ubuntu es la que sale peor parada, con un análisis titulado “Un paso atrás”.»

Enlace | ¿Que se cuece en el mundo Linux?

caca-utils

$ apt-get install caca-utils

jojo, me parto (vaya nombrecito), pero al menos tienen una utilidad clara, ver una imagen o reproducir un video desde la consola, en modo ascii:

para ver imagenes:

$ cacaview nombre-archivo

para ver videos:

$ mplayer -vo caca archivo_video ##este lo muestra a "color"
$ mplayer -vo aa archivo_video ##en blanco y negro.

curioso!!!

Enlace | Lee y te daras cuenta

Hacienda somos todos…

Los Técnicos del Ministerio de Hacienda (Gestha) consideran que el 59% de los borradores remitidos por la Agencia Tributaria a los contribuyentes, con motivo de la Campaña de Renta 2007, esconden “omisiones” en las deducciones o reducciones fiscales, y fallos que perjudican a los contribuyentes.

Si ya lo decia yo, a ver repetid conmigo:
Yo robo..
Tu robas..
Nosotros robamos…

Enlace | Meneame

Potenciando tus Shell Scripts con Groovy

Este es un post muy tecnico (si no eres desarrollador, no pasa nada, puedes leerme en alguna otra ocasion, que yo publico muchas cosas)

Yo suelo programar muchos shell scripts, pero a veces se quedan cortos respecto a ciertas funcionalidades y los complemento con trozos de codigo escritos en otros lenguajes. Suelo utilizar Java pero realmente puedes usar el lenguaje que quieras. Simplemente has de escribir una funcion que reciba parametros como entrada y te devuelva un String como salida. Asi, invocar a esa funcion (o programa) escrita desde el shell script es muy simple.
Por ejemplo. Podriamos escribir una clase Java que recibiera 2 parametros de entrada y que nos devolviera como resultado la concatenacion de ambas. Si la llamamos “Concatenar.java” y la compilamos, obtendremos un “Concatenar.class”.
Entonces podriamos escribir una funcion en shell script que fuera parecida a esta:

function concatena()
{
RESULTADO=`$JAVA Concatenar $1 $2`
echo "$RESULTADO"
}

Donde JAVA es una variable de entorno que apunta a donde tenemos nuestro JDK.
Es importante tambien exportar el CLASSPATH y que en el, se apunte al directorio donde almacenemos nuestras clases compiladas.

Asi cuando desde shell script llamemos a concatena, realmente se esta ejecutando la clase java y recibe como parametros los valores pasados en $1 y $2

Si quisieramos pasar mas parametros en el shell script, a la clase java, usariamos mas variables: $1, $2, $3, etc..

Usar la funcion desde el shell script ya es tan sencillo como simplemente invocarla:

mi_cadena=`concatena "este" "es un texto concatenado"`

Pues bien, de esta forma podemos complementar cualquier shell script con programitas hechos en el lenguaje que mas nos guste.

Pero ahora he descubierto hace poco Groovy y es una alternativa muy potente para desarrollar nuestros shell scripts. Hablemos de ella.

Lo primero que tenemos que hacer es instalar Groovy en nuestro sistema.
Nos descargamos la version mas actual desde el siguiente enlace. Y lo descomprimimos en el directorio deseado.
Con esto ya estaria instalado.
Unicamente tenemos que definir las variables de entorno JAVA_HOME, apuntando a nuestro JDK, GROOVY_HOME apuntando al directorio donde hayamos instalado Groovy, y añadir al PATH los directorios: $JAVA_HOME/bin y $GROOVY_HOME/bin.
Aqui para mi caso particular seria:

export JAVA_HOME=/usr/lib/jvm/java-6-sun
export GROOVY_HOME=/home/jose/groovy-1.6-beta-1
export PATH=$PATH:$JAVA_HOME/bin:$GROOVY_HOME/bin

Si queremos usar librerias java adicionales en nuestros shell script, debemos copiar los .jar correspondiente en nuestro directorio Home, en la carpeta .groovy/lib. Por ejemplo, si nuestro script va a conectar a una base de datos, tendremos que copiar el correspondiente driver JDBC en el directorio /home/nuestro_usuario/.groovy/lib o a la hora de ejecutar el script nos dara un error de “Clase no encontrada”.

Escribamos ahora un shell script de Groovy sencillito.
Abre tu editor de texto y escribe las siguientes lineas:

#!/usr/bin/env groovy
println "Este es mi primer ejemplo de Groovy"

Guardalo como Ejemplo.groovy y ejecuta:

$ chmod +x Ejemplo.groovy
$ ./Ejemplo.groovy

Bingo!!!, si todo ha ido bien, deberias poder leer la cadena por la salida estandard.

¿Que es lo bueno de Groovy?

Pues que si eres desarrollador de Java es como escribir codigo Java embebido en el propio Shell script, puedes hacer import de paquetes java, y hacer uso de las clases de Java. Alucinante!!! en serio.
Imagina que potencia le puedes dar a un script, con esto.

Pero escribir codigo Groovy a “pelo” puede ser algo duro. Instalemos el plugin para Eclipse. Con este plugin es realmente sencillo escribir e ir depurando codigo, pues podemos hacer uso del Editor de eclipse para ir escribiendo nuestras lineas de codigo Groovy ( Fichero > Nueva > Clase Groovy) y con click derecho y “Ejecutar”, ejecutar de manera inmediate el codigo escrito cuya salida podremos ir viendo en la Consola. De esta manera es sencillo ir adaptando el codigo a nuestras necesidades.

Para instalar el Plugin sigue los pasos que se comentan en este documento.

Vamos a escribir ahora un ejemplo mas completo. Escribiremos un script Groovy que se conecte a una base de datos Oracle, realice una consulta, nos la muestre por la consola estandard y ademas genere un fichero con los resultados. Y todo ello, en un par de lineas, a que mola!!!

Ejemplo de la consulta en Base de datos:

Y aqui el resultado de ejecutar la misma consulta desde un shell script:

Para los que querais ir practicando os dejo el codigo que he usado (no esta muy depurado, pero lleva ejemplos de como imprimir texto, como hacer el paso de variables o como recorrer la consulta SQL para recuperar los resultados e imprimirlos). En este script tambien podeis ver como importo una clase java de acceso a Entrada y Salida para generar el fichero y ejecuto comandos del sistema operativo como puede ser un “ls”. Esta bastante completito:


/**
*-------------------------------------------------------------------------------
* EJECUTA_SQL.groovy
*
* Ejemplo de Script Groovy para ejecutar consultas SQL sobre una base de datos
*
* @author: jose
* @version: 0.0.1
* @since: Eclipse Europa + Plugin Groovy
*
*
* Parametros:
*
* Ejecutar una sentencia SQL:
* EJECUTA_SQL -sql SENTENCIA_SQL DRIVER URL USER PASS
*
* Ejecutar un fichero .sql:
* EJECUTA_SQL -file FICHERO_SQL DRIVER URL USER PASS
*
* Devuelve por la salida estandard el resultado de la consulta.
* Opcionalmente, guarda en un archivo de texto los resultados.
* ------------------------------------------------------------------------------
*/
import groovy.sql.Sql
import java.io.*;
// TODO: Implementar clase para imprimir mensajes de depuracion
boolean DEBUG=true;
// recuperamos los argumentos que le pasamos a la entrada en la linea de comandos
if (DEBUG) println "DEBUG: ejecutar_sql"
int num_argumentos=args.size()
if (DEBUG) println "DEBUG: numero de argumentos: ${num_argumentos}"
// Comprobar si se pasar el numero de argumentos necesario
if (num_argumentos<2)
{
println "Sintaxis: ejecutar_sql
"
println " Opcion:"
println " -sql : indica que se usara una sentencia SQL"
println " -file : indica que se usara un fichero SQL"
println "Ejemplo: ejecutar_sql -file inserts.sql"
System.exit(-1);
}
// Recuperar los parametros
String PARAMETRO1 = args[0];
String PARAMETRO2 = args[1];
if (DEBUG) println 'DEBUG: Parametro 0: '+ args[0];
if (DEBUG) println 'DEBUG: Parametro 1: '+ args[1];
//println "Parametro1: ${PARAMETRO1}"
//println "Parametro2: ${PARAMETRO2}"
// Obtener la fecha actual
def fecha = new java.text.SimpleDateFormat("dd.MM.yyyy").format(new Date())
// TODO: Propiedades de conexion, recuperarlas del paso de parametros
def host = "AQUI_TU_HOST_DE_BASE_DE_DATOS"
def port = "1521"
def user = "AQUI_TU_USER"
def pass = "AQUI_TU_PASSWORD"
def schema = "AQUI_TU_BASE_DE_DATOS"
def driver = "oracle.jdbc.driver.OracleDriver"
if (PARAMETRO1.equalsIgnoreCase("-sql"))
{
if (DEBUG) println "DEBUG: Es consulta sql";
def query="SELECT sysdate FROM DUAL";
// La consulta a ejecutar la leeriamos desde el parametro que pasamos por consola
query=PARAMETRO2;
// pero en este ejemplo, lo fuerzo a hacer una consulta para que se vea
query="SELECT PROJECT,SID, password FROM STCORE_USER where PROJECT<4";
def resultado = "SYSDATE\n-------------------\n"
if (DEBUG) println "DEBUG: -> La fecha es \"${fecha}\" <-"
// Conectamos a la base de datos
if (DEBUG) println "DEBUG: Conectando con la base de datos..."
sql = Sql.newInstance("jdbc:oracle:thin:@${host}:${port}:${schema}", user, pass, driver)
// Ejecutamos la consulta SQL
// Recuperar resultados
println "DEBUG: Consultando... Query=[${query}]"
// EJEMPLO: Snippet para una Consulta simple
//sql.eachRow(query,{resultado += "${it}\n"})
// Imprimir los resultados recuperados de la consulta
//println "${resultado}"
// EJEMPLO: Snippet par el caso de que quisieramos insertar
//sql.execute "INSERT INTO STCORE_PROJECT values ('20')"
def resultadoSQL="";
// Consulta a la base de datos
sql.query(query)
{ rs ->
while (rs.next())
{
def meta = rs.metaData
if (meta.columnCount <= 0) return
for (i in 0..
{
print "${i}: ${meta.getColumnLabel(i+1)}".padRight(20)
print rs.getString(i+1);
def columnValue = rs.getString(i+1);
print "\n"
//resultadoSQL += "${i}:${meta.getColumnLabel(i+1)}"
resultadoSQL += "${columnValue}:"
//def columnName = md.getColumnLabel(i)
//def columnValue = rs.getString(i) != null ? rs.getString(i) : ''
}
resultadoSQL += "\n"
println "-------------------------------"
}
}
// Vamos a guardar los resultados en 1 fichero
def tmpFile = new File("/home/jose/Desktop/Consulta_${fecha}.txt");
tmpFile.write("${resultadoSQL}");
/*
* Ejemplo: SNIPPET
* Otra forma de crear un archivo
// Creamos un fichero "pepe.txt"
// cuidado con las palabras reservadas, "in" no valdria es palabra clave
File f=new File("pepe.txt");
FileOutputStream outf = new FileOutputStream(f);
outf.write("${texto}".getBytes());
outf.close();
*/
if (DEBUG) println "DEBUG: FIN de PROCESO"
//println "Y PARA MOLAR AUN MAS!!!, EJEMPLO de como ejecutar comandos de shell:"
//p = "ls -l".execute()
//println p.text
// pero para que funcionen las PIPES, debe ir en un ARRAY de valores
p=['sh','-c','ls -l | sort'].execute()
println p.text
def COMANDO="ps -ef";
p=['sh','-c','echo PEPEPEPEPE | cut -c 2-5 >> /home/jose/Desktop/pipe.txt'].execute()
//p=['sh','-c',"ps -ef"].execute()
println p.text
}
//end of class EJECUTA_SQL.groovy
// Fin de la introduccion a GROOVY

Mas ventajas, Con groovy es muy “sencillo” crear y probar servicios web. Apenas son 4 lineas de codigo, escribes una clase groovy con el servidor y los metodos que expone y otra clase cliente para ejecutarlos remotamente (para que funcione el ejemplo de la pagina no te olvides de añadir los .jar necesarios en tu carpeta .groovy/lib):

Mas informacion | Introduccion a Groovy | Como supervitaminar y mineralizar tus shell scripts

Intrepid Ibex Wallpaper

Enlace | Deviant Art





¿Es compatible tu equipo con Ubuntu?


( Muchos fondos de pantalla, aqui )

DESCARGATE SCIFI LIFE

365 Dias de Soledad
Me debes los sueños, las promesas y las noches rotas. Me debes la paz, la sonrisa y la esperanza robadas. Me debes la sangre, las lágrimas y el sudor vertido. Me debes las noches vacías, los abrazos anhelados. Me debes un beso de ajenjo de tu amarga boca.

The Ubuntu Counter Project - user number # 11961
Geo Visitors Map
junio 2008
L M X J V S D
« May   Jul »
 1
2345678
9101112131415
16171819202122
23242526272829
30  

Blog Stats

  • 30.909.144 hits