martes, marzo 31, 2009

Tutorial de Python



Como parte de mis objetivos 2009, se encuentra aprender al menos 3 nuevos lenguajes Groovy, Python y reaprender Perl, lenguaje que hace tiempo utilizo pero solo para cosas muy puntuales, sin embargo ahora al parecer voy a reaprender Perl, pues en mi próximo trabajo en BACKCOUNTRY, necesitaré utilizar este lenguaje.

Otro lenguaje que quizá intente aprender, puede que sea Scala, según he escuchado el manejo de hilos y procesos es bastante bueno, cosa que en Java standard, pues no es del todo una maravilla.

Hace poco me encontré con un tutorial de Python en Español, por si le quieren llegar.

Un saludo,
J

ninja 2009 - Summer Tour - Jane's Addiction, Nine Inch Nails & Street Sweeper.

Por ahí me pasaron el volado de este sitio, NIN|JA 2009 es un tour de verano con bandas de la talla de Jane's Addiction, Nine Inch Nails y Street Sweeper; en el sitio Web de Ninja2009, puedes escuchar y con inscripción bajar música de los 3 artistas.

Ahí les paso el volado por si quieren llegarle.

Saludos,
J

lunes, marzo 30, 2009

Mi primera aportación al Mundo Open Source - Siena



A pesar que he intentado crear mis propias iniciativas de sistemas open sources, pienso que los objetivos siempre han sido muy complejos o de gran tamaño. Dejando de lado esas salidas en falso y que revelaban la necesidad y ganas que se ha venido manifestando para integrarme en algún proyecto open source; tengo el gusto de proclamar mi primer aporte oficial al mundo del Open Source.

El proyecto al cual he dado mi pequeño granito de arena es llamado Siena, el mismo es un liviano y muy sencillo framework para persistir objetos. En su primera fase tiene un soporte para MySQL, sin embargo me parece que los planes futuros es integrarlo con otras bases de datos y/o mecanismos de persistencia diferentes, como las base de datos en la nube con aplicaciones distribuidas al estilo de Amazon o Google Engine, entre otros mecanismos de persistencia basados en servicios RestFul, etc.

Mi primera aportación se basa en la integración de Maven al proyecto; anteriormente se distribuía como un proyecto Ant con las dependencia subidas en SVN, con Maven y su manejo de dependencias, esta necesidad fue cubierta de una mejor manera.

Quiero seguir cooperando, pues siempre me ha gustado mucho JDBC y las API's de persistencia en si. Mis siguiente objetivo es discutir la posibilidad de integrar Siena con Spring, para reutilizar los diferentes DataSources que se encuentren creados en el contexto de Spring así como crear un objeto al estilo de Proxy Transaction Manager para manejar transparentemente las transacciones.

En fin, espero seguir apoyando al proyecto Siena y quien sabe expandir mis aportes a otros proyectos o reiniciar y/o empezar alguno propio,

Un saludo,
J

Gustos musicales - 11 episodios sinfonicos Cerati



Con el objetivo de compartir gustos musicales similares y expandir mis gustos actuales intentaré dar fiel feedback, de la música que compro.

La nueva adquisición de la DVDteca, es el concierto sinfónico de Gustavo Cerati, donde practicamente relee en nuevas y etéreas versiones que varían entre los ritmos claros y el dark gótico y pesadillesco del cine de horror, ejecutado por una enorme sinfónica de músicos.

Las versiones son un viaje y el disco es un ride riquisimo, aun mas que el chineado música para volar de Soda y eso ya es decir mucho; los 11 episodios son altamente recomendables tanto para gente que le gusta la música de Soda así como la de Cerati en su faceta de solista, e inclusive me atrevo asegurar para cualquiera que no conozca su música y tenga un oído delicado o quiera algo tranquilo para pasar la noche.

El DVD, incluye 3 episodios mas y un demo (el episodio cero), así como entrevistas muy interesantes de la gira y realización del proyecto.

En mi calificación final le doy un 9 en la parte música, el show me parece que pudo haber sido mas vistoso, con un manejo de luces mas gótico y un escenario mejor manejado así que le doy en el contenido visual un 7, así que en promedio se gana un super 8 y con conva positiva debo agregar!

Un saludo,
j

Ideas para un eco-hogar

Un Eco Hogar,



Ultimamente he estado pensando al respecto (en la implementación de una casa ecológica), leyendo un poco me entero que existen diferentes alternativas para el ahorro de consumo electrico del hogar; paneles solares, mini hidro turbinas, energía eólica, etc. Algunas alternativas interesantes representan los termos calentados por paneles solares, para no gastar energía en la ducha caliente, etc.

Todas estas alternativas están muy bien, aunque la inversión por el momento es algo grande para un hogar promedio, con el consumo masivo, podría convertirse en una opción de facto.

Estas opciones representa un ahorro en el consumo eléctrico, pero que hay con el consumo del H2O; sin necesidad de ser muy observador, nos damos cuenta que uno de los mayores puntos donde se desperdicia agua son: el baño y la ducha.

En cuanto a la ducha no se me ocurre mas que algunos habitos en vez de soluciones tecnicas, como mojarse, cerrar el tuvo, enjabonarse, etc. Cerrar el tuvo cuando no lo estamos utilizando, es una alternativa que ahorra mucho liquido.

Sin embargo se ha puesto a pensar en la cantidad de agua que se desperdicia cuando vamos al baño.

En cuanto a los hombres, me parece que una solución podría ser orinar al aire libre cuando sea posible, así evitamos gastar agua, sin embargo puede que resulte algo poco aceptado a nivel social, así que intente hacerlo sin que lo noten :).

En cuanto a las mujeres por razones tecnicas, no pueden hacer lo mismo, sin embargo si tomamos en cuenta que el agua que usamos para el inodoro no debe ser potable, podemos canalizar diferentes fuentes acuíferas que no estamos utilizando, la primera de ellas es el agua de la ducha, regularmente enjabonada, lo que proporcionaría un olor aromático al inodoro, la otra opción es el agua que cae de la lluvia, si esta agua se recolecta, puede ser utilizada para diferentes actividades como la antes mencionada, así como regar el jardín, limpiar el piso, etc.

Otra opción importante es colocar en la medida de lo posible un orinal (como los que se colocan en los bares), para los hombres, pues la cantidad de agua utilizada es mínima o menor que la utilizada en un inorodo.

Sin duda estas y otras ideas, pueden resultar complicadas de implementar en las casas actuales, sin embargo para las casas por construir de personas que desean economizar y pensar en nuestro futuro ecológico, me parecen ideas y opciones viables.

Saludos,
J

domingo, marzo 22, 2009

Advertencia Gaia



Según he aprendido en los documentales de National Geo.; el desierto tiene un clima extremo de calor y frío; infierno por la mañana y frío asotador por la noche.

Para los que estamos acostumbrado a vivir en Costa Rica, el clima por estos días de marzo, es cálido, sin embargo para nadie es un secreto que nuestro clima fluctúa entre el frío y el calor fuerte de la mañana, casi como un pequeño desierto.

Me pregunto si esto es simplemente una coincidencia, consecuencias del fenómeno del niño (que a su vez, tiene su raíz en los cambios climáticos) o de alguna manera una advertencia de Gaia, dándonos una ligera probada de lo que se nos avecina, como esfera de nieve en caída libre.

Me parece que debemos hacer conciencia colectiva y cambiar nuestros habitos, para entrar con una armonía con la naturaleza antes que sea demasiado tarde y no tengamos nada que heredar a nuestras futuras generaciones.

Buena nota,
J

miércoles, marzo 18, 2009

Permutaciones con String en Java

A continuación una clasesilla que implemente, para realizar la permutación de String en Java.

La idea es la siguiente, si usted le pasa la palabra "cat", la clase hace cat.length! permutaciones con las diferentes combinaciones para esta cadena, es decir:

[act, atc, cat, cta, tac, tca]

A continuación el código (perdón por los comentarios en ingles):




/**
* Useful class to figure out the permutation of the strings.
* @author jsanca
*
*/
public class StringPermutations {

/**
* Use this method to figure out the permutation of the String.
* @param string
* @return collection with the permutation.
*/
public static Collection doPermutations(String string) {

Collection permutationsCollection = new TreeSet();

// verify the trival case, the permutation of 1 is 1, anything else, will use the permutation.
permutationsCollection.addAll((string.length() == 1) ? Arrays.asList(string)
: permutations(string, string.length()));

return permutationsCollection;
} // permutations.

/// apply the shiftleft over the string
private static String shiftleft(String s) {

return new StringBuilder(s.substring(1)).append(s.substring(0, 1))
.toString();
} // shiftleft.

private static Collection permutations(String string, int depth) {

Collection permutations = new ArrayList();

if (depth >= 1) {

// do the permutations of the current string.
permutations.addAll(permutations(string));
// do the permutations of the next string.
permutations.addAll(permutations(shiftleft(string), --depth));
}

return permutations;
} // permutation.

private static Collection permutations(String string) {

Collection permutations = new HashSet();
String subSet = null;

// stop condition, this is the trivial case for the items.
if (string.length() == 2) {

// basic permutation.
permutations(permutations, string.substring(0, 1), string
.substring(1));
} else {

// do the permutations merging the index with the rest of the subset.
for (int i = 0; i < string.length(); ++i) {

subSet = buildString(string, i);
// combinate the index with the permutation of the rest of the subset.
permutations(permutations, string.subSequence(i, i + 1),
permutations(subSet, subSet.length()));
}
}

return permutations;
} // permutations.

// create a string except the "i" index.
private static String buildString(String string, int i) {

String buildString = null;

if (i == 0) {

buildString = string.substring(1);
} else {

if (i == string.length() - 1) {

buildString = string.substring(0, string.length() - 1);
} else {

buildString = new StringBuilder(string.substring(0, i)).append(
string.substring(i + 1)).toString();
}
}

return buildString;
} // buildString.

// BASIC CASE OF PERMUTATION.
private static void permutations(Collection permutations,
CharSequence permutation1, CharSequence permutation2) {

permutations.add(new StringBuilder(permutation1).append(permutation2)
.toString());
permutations.add(new StringBuilder(permutation2).append(permutation1)
.toString());
} // permutations.

// SCALAR + SET PERMUTATION.
private static void permutations(Collection permutations,
CharSequence aPermutation, Collection permutation) {

CharSequence otherPermutation = null;

for (Iterator iterator = permutation.iterator(); iterator
.hasNext();) {

otherPermutation = iterator.next();
permutations.add(new StringBuilder(aPermutation).append(
otherPermutation).toString());
}
} // permutations.


} // E:O:F:Permutations.


/**
* Util class for Math operations.
* @author jsanca
*
*/
public class MathUtil {

/**
* Calculate the factorial of the number, if it is negative, it will figure out like C++ uint.
* @param number Some number
* @return if the number is 0 will returns 1, in other case will returns the factorial:
* n! = 1 * 2 * 3 * 4 * ... * (n-1) * n
*/
public static double factorial(double number) {

return (0 >= number) ? 1 :
number * factorial(number - 1);
}


}


BeanDescriptor

En algunas ocasiones necesitamos, en tiempo de ejecución obtener los cambos de un bean, es decir que propiedades tiene y su respectivo valor, lo anterior porque no tenemos acceso al código, deseamos conocer el estado de un objeto en un momento dado, etc.

Aquí tiene la clase BeanDescriptor, esta pequeña me ha sido muy útil cuando ocupo espiar el estado de un objeto en un JSP y no tengo la librería bean utils en el classpath, enjoy!


public class BeanDescriptor {


public java.util.Map describe(Object bean) throws IllegalAccessException,
java.lang.reflect.InvocationTargetException, NoSuchMethodException, java.beans.IntrospectionException {

java.util.Map description = new java.util.HashMap();
String name = null;
java.beans.PropertyDescriptor descriptors[] =
java.beans.Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors ();
for (int i = 0; i < descriptors.length; i++) {
name = descriptors[i].getName();
if (descriptors[i].getReadMethod() != null) {
description.put(name, descriptors[i].getReadMethod().invoke (bean, new Object []{}));
}
}
return (description);
}
}

Apache Xalan - Herramienta para procesar XML con XSL

Apache Xalan - Herramienta para procesar XML con XSL

En algunas ocasiones, tenemos que embarrarnos las manos utilizando XML de transformación para procesar un XML hacia otro formato de salida.

Se que existen algunas herramientas que realizan el trabajo, sin embargo quiero compartir con ustedes una sencilla herramienta (Apache Xalan), la cual podemos utilizar ya sean en Linux o Windows, mediante un "sh" o un "bat", o dentro de cualquier otro sistema que tenga una VM.

Para comentar un poco, Apache Xalan es una librería la cual expone tanto herramientas como un API para trabajar en Java con XML y XSL, entre otras cosas; en nuestro caso particular, solo nos interesa las herramientas.

Manos a la obra, lo primero que hacemos es dirigirnos al sitio de Apache Xalan y bajar la librería, si todo va bien, deberías tener:

xalan.jar
serializer.jar
xml-apis.jar
xercesImpl.jar

Coloca las librerías en el mismo lugar de trabajo, ahora dentro de nuestro .bat o .sh, colocamos las siguientes líneas:

java -classpath "xalan.jar;serializer.jar;xml-apis.jar;xercesImpl.jar" org.apache.xalan.xslt.Process -IN algunXML.xml -XSL algunXLS.xsl -OUT algunArchivoSalida.AlgunFormato

Los tokens, algunXML.xml, algunXLS.xls y algunArchivoSalida.AlgunFormato, representan el XML, el XLS y algún archivo en algún formato que estamos generando, cambie estos parámetros por los que us desea o recibalos como parámetro y listo, corra el archivo asegurándose que los jar se encuentren en la misma carpeta y listo, ya tiene un procesador XML/XSL.

Enjoy!
J

martes, marzo 17, 2009

Buscando texto en Oracle data base

El siguiente script, nos es útil cuando deseamos buscar texto dentro de una base de datos Oracle, la idea es buscar en todas las tablas del esquema, así como en todas las columnas, es útil cuando queremos saber si un texto se encuentra dentro de alguna columna, a continuación el código:

SET SERVEROUTPUT ON SIZE 100000

DECLARE
match_count INTEGER;
BEGIN
FOR t IN (SELECT table_name, column_name, data_type FROM user_tab_columns) LOOP
--dbms_output.put_line( t.table_name ||' '||t.column_name );
IF t.data_type = 'VARCHAR2' THEN

EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM '||t.table_name||' WHERE '||t.column_name||' like :1 '
INTO match_count
USING 'algun texto aqui';

IF match_count > 0 THEN
dbms_output.put_line( t.table_name ||' '||t.column_name||' '||match_count );
END IF;

END IF;
END LOOP;

END;

Simplemente, cambie la línea:

USING 'algún texto aquí';

Por el texto o criterio de búsqueda que desea.

jueves, marzo 05, 2009

Lenguajes script que pueden correr en la VM de Java

Ahora que se están colocando en boga, los lenguajes script y para la comunidad Java en especial, los script languages para Java, aquí les ofrezco una lista con una cantidad enorme de lenguajes que se puende correr en la VM.

Entre los lenguajes que me son mas interesantes, por supuesto Groovy, Jython, Rhino (el cual estoy usando y la verdad esta bastante cool, es JavaScript 1.7 en Java, eBTW; en el CMS Alfresco la capa de controlador se encuentra implementado con este script language), Jelly, Beanshell parecía interesante, pero con Groovy es mas que suficiente, Scala también esta en mi lista de cosas a ver proximamente.

En fin, espero les parezca interesante y les ayude a tener una perspectiva de la extra-comunidad que existe alrededor de Java.

Saludos,
J

lunes, marzo 02, 2009

Frase de la semana



La frase de la semana, esta vez le pertenece autoría del párrafo de turno, al autor del Guernica, me refiero a uno de los mas famosos artistas, si no el mas famoso pintor que vio nacer España, honores y glorias para el mismísimo maestro del pincel y del cubismo;.... Pablo Picasso


"Un pintor es un hombre que pinta lo que vende. Un artista, en cambio, es un hombre que vende lo que pinta." *

Pablo Picasso