blog de rodrigo salado anaya

Convertir números a letras.

Este ejercicio estuvo de moda esta semana, y solo con el fin de que no se quede este humilde código en el baúl de los olvidos, lo dejo para la comunidad.

Soy nuevo en Groovy, y como siempre me gustan las recomendaciones y críticas sobre mi código.

Resumen del código: Convierte números enteros del 0 al 1000 en su forma escrita, letras en minúsculas y español.
Conforme se analicen números en la función ‘convierteNumeroAPalabras’ se irán agregando en el mapa ‘numerosEscritos’. Así que si se deseara llenar el mapa con la secuencia completa se usaría algo como:  (0..1000).each{convierteNumeroAPalabras(it) } , después solo se podrían recuperar la conversión con un método propio del mapa, por ejemplo: numerosEscritos.get(numero)

/*Mapa con las conversiones de los números*/
numerosEscritos = [
                0:"cero",  1:"uno",  2:"dos",   3:"tres", 4:"cuatro",
                5:"cinco", 6:"seis", 7:"siete", 8:"ocho", 9:"nueve",
               
                10:"diez",   11:"once",      12:"doce",       13:"trece",     14:"catorce",

Complejo del programador sobreprotector.

Últimamente he pensado que soy un programador sobreprotector, le impongo muchos límites a mi código (clases/métodos/funciones/…), le digo con que otros códigos juntarse y cómo comportarse ante las malas influencias. Un ejemplo es: http://www.javamexico.org/blogs/rodrigo_salado_anaya/ayuda_me_urge_ejemp...

Si algún medio le manda un String nulo a mi método, debería de generar una excepción. Eso lleva a que el código que lo implementa cuide ese detalle, así delegando esas obligaciones en el momento adecuado.

Y porque en el momento adecuado, bueno porque si el método que manda la ruta se da cuenta que es nula antes de mandarla, podría hacer otro intento para generar la correcta y no tener que esperar la excepción del validador para decir “a pus si cierto, te la mande nula verdad :S”
En estos tiempo no debería de existir null, con la cantidad de RAM que tenemos, el GC nos la pellizca (¡Claro es broma!)
Y bueno ya me decidí a no validar eso, pero aun así me quedo con la espinita y ¿Si yo no soy el que escribe el código de los dos métodos? ¿Si simplemente falla él envió de la ruta entre los dos medios? No puedo ser tan indulgente con esos detalles.

Ayuda me urge (ejemplo ε TDD)

Pretendo validar un directorio usando TDD. Les dejo las iteraciones y agradecería los comentarios y sugerencias acerca del tema, ya que uso algo similar a diario y aun que he leído un poco del tema estaría bien saber que buenas prácticas me recomiendan.

Paso 1:...
[test]

public class ValidadorTest {
}

[java]

public class Validador {
}

Paso 2:rojo
[test]

public class ValidadorTest {
    private Validador v = new Validador();
   
    @Test
    public void validaDirectorio(){
        assertFalse("Ruta null", v.directorioValido(null));
    }
}

[java]

public class Validador {
    public boolean directorioValido(String ruta){
        return true;
    }
}

Paso 3:verde
[test]

public class ValidadorTest {
    private Validador v = new Validador();
   
    @Test
    public void validaDirectorio(){
        assertFalse("Ruta null", v.directorioValido(null));
    }
}

[java]

public class Validador {
    public boolean directorioValido(String ruta){
        if(ruta == null){

Quitar etiquetas HTML

Me preguntaba si existe una librería Java para quitar las etiquetas de un documento HTML y pues no pude buscar mucho y decidi hacer un pequeño ejercicio.

Para mi es un tema complejo por que una pagina html se ejecuta casi normal aun que no este validado el documento, o X, X, X, cosa, también si deseo quietar los CSS o los Scripts se convierte en algo más rudo.

Les dejo lo que pude hacer y si saben o quieren compartirme otra forma de resolverlo (haber si pueden? jejeje es broma ) se los agradezco mucho.

Nop, no es para producción ni para algo que llegara a ser lo, solo es por pasar el rato :D.

import java.io.IOException;

public class Main {

    public static void main(String args[]) throws IOException {
        ReadUrlContent readUrlContent = new ReadUrlContent();
        String html = readUrlContent.getContent("http://www.javamexico.org/foros/comunidad/ayuda_lista_enlazada");
        TakeOutTags takeOutTags = new TakeOutTags();
        String text = takeOutTags.getText(html, "<", ">");
        //Solo para ponerlo mas bonito se quitan los saltos de linea
        // y se reemplazan los simbolos html por ascii

Calculador (Mini) en Java

MiniCalculus… :P
Pues con la novedad que hoy tuve un poco de tiempo y viendo el post de @JaimeItlzc http://www.javamexico.org/foros/java_standard_edition/desarrollando_un_a...

Me decidí a jugar un poquito y crear mi propia calculadora.

¿Cómo se usa? Para declara una nueva variable usamos ‘rd’ seguido de un espacio en blanco y una palabra como ‘a’ y finalizando con ‘;’ o el carácter que más te guste : ). Toma el valor de 0 por omisión:
rd a;
Para asignar un valor a ‘a’ puede ser otra variable o un número:

a + 23;

rd b; b 3; a + b;

Para imprimir el valor de una variable usamos 'wr' y las mismas reglas.

Se le asigna el valor de retorno a la variable de la izquierda, incluso puedes asignar un número como variable algo como.

String pTxt = ""
                + "rd a;"
                + "rd b;"
                + "rd respuesta_del_universo;"
                + "a 40;"
                + "b 2;"
                + "respuesta_del_universo +a;"
                + "respuesta_del_universo +b;"
                + "wr respuesta_del_universo;"
                + "42 +respuesta_del_universo;"

JavaFX 2.0 Beta TIP 1.

Pues con la novedad que ya salió JavaFX 2.0 (beta), y si como siempre solo para Windows Microsoft ("#$%).

http://javafx.com/
http://www.oracle.com/technetwork/java/javafx/overview/index.html

Como nos damos una ligera idea de cómo se come ahora esto? Pues sigue estos simples pasos.

1. Descarga el jdk: http://download.oracle.com/otn/beta/javafx/javafx_sdk-2_0-beta-windows-i...
2. Lo descomprimes y navegas hasta javafx_sdk-2_0-beta-windows-i586\javafx-sdk2.0-beta
3. Ejecutas el javafx-2_0-beta-windows-i586.exe
4. Con un IDE (yo use NetBeans 6.9.1) abres un proyecto ya existente navegando hasta la carpeta javafx_sdk-2_0-beta-windows-i586\javafx-sdk2.0-beta\apps\src
5. Elijes uno y no queda más que probar.

Y conste que lo deje en la categoría de JSE a propósito.
Suerte a todos y pásenla chévere :D

JavaFX Tip 1

jQuery[ejem]: map, each, html, attr...

Me acabo de enterar de que salio 1.6 (http://blog.jquery.com/2011/05/03/jquery-16-released/), y vi en http://www.learningjquery.com/2011/05/jquery-map-in-16 por un twitt de @javahispano, que sacaron mejoraron una monadas como map y ... pues mejor revisa los Breaking Changes.

Decidí hacer un post de contenido jQuery. ¿Por qué?, pues por que no se donde poner mis aventuras con jQuery y recibir las opiniones de los expertos en la comunidad, también me interesa mucho saber que opinan de contenido que no es relacionado con la JVM. Tal ves otros usuarios de la comunidad han elegido no publicar material por ese motivo; no relacionarse con la JVM. Y lo entiendo y lo respeto por eso lo deje en la categoría 'Comunidad', pero uso jQuery con Java y me parece natural verlos juntos.

Bueno pues el objetivo es solo ejercitar las bondades de la API de jQuery, como map, each, etc., obteniendo elementos del DOM; todos los div's para modificar su atributo id así como su contenido.

OpenSource ¿Cosa solo de marcianos y hackers?

OpenSource ¿Cosa solo de marcianos y hackers?

Programando un Servlet para crear código HTML, use String, StringBuilder, etc., para crear el contenido de mi pagina, no quede muy satisfecho con los resultado, después de cierto tiempo perdí el control de mi código. Busque un API libre y fácil de usar para salvarme la cordura, me encontré con Java HTML Generator v0.9: http://artho.com/webtools/java/index.shtml, vi los ejemplos, lo use y me gusto mucho, luego revise el código a detalle y me sorprendí de lo ingenioso del código y recordé que muchos de nosotros en la comunidad nos preguntamos por un proyecto al cual contribuir, aprender, ver crecer, en fin, ser parte del proyecto mismo.

Tengo la sensación de que cuando se habla de proyectos de código abierto se mencionan proyectos enormes, que requieren un conocimiento extenso en el lenguaje en el que se programo, tiempo, tiempo, y más tiempo libre para estudiar el código, ya que como yo y mucho otros, no nos pagan para contribuir al OpenSource.

Oracle BPM 10g. Asignar 'Roles' a Participantes de una sesión.

Nota: El código que pongo lo estudie en mi tiempo libre ( no laboral).
Este es un pequeño ejemplo de cómo asignar Roles a participantes por medio de unmétodo en Oracle BPM 10g, usando un archivo de texto con la siguiente forma:

Par: admin
        Rol: f4
        Rol: f5
        Rol: f5

Por favor si tienes ideas de cómo mejorar este ejemplo comenta las, te lo gracias.
Usar algo como JSON/XML sería lo más sencillo según yo : P.
Saludos a todos.

String msg;
String txtName = "pload.txt";
String participanteHead = "Par:";
String participanteId;
String rolHead = "Rol:";
String rolId;
String salto = "\\n";
session = DirectorySession.currentEngineSession;
txt.open(name : txtName, lineSeparator : "\n");
if(!txt.exists){
        display("El archivo ["+txtName+"] no existe");
}else{
        foreach(linea in txt.lines){
                esParticipante = linea.contains(text : linea, pattern : participanteHead);
                esRol = linea.contains(text : linea, pattern : rolHead);
                if(esParticipante){
                        participanteId = linea.replace(from : participanteHead, @to : "").replace(from : salto, @to : "").trim();
                }else if(esRol){

Oracle BPM 10g. Obtener los Participante de todos los 'Roles' y 'Grupos' de una sesión.

Nota: El código que pongo lo estudie en mi tiempo libre ( no laboral).
Soy un fiel creyente en compartir el conocimiento es por eso que coloco este pequeño ejemplo de cómo obtener los participantes de una sesión en Oracle BPM 10g y guardar los resultados en un archivo de texto.
Si tienes una idea y me dices como mejorar este pequeñísimo ejemplo te lo agradecería. Viva la Retroalimentación : P
Saludos a todos…

String msg;
boolean delete;
session = DirectorySession.currentEngineSession;
roles = DirOrganizationalRole.fetchAll(session : session);
participantes = DirHumanParticipant.fetchAll(session : session);
grupos = DirOrganizationalGroup.fetchAll(session : session);

foreach (rol in roles) {
    txt.openForWriting(name : rol.id + ".alk", append : false, lineSeparator : "\n");

    msg = "Rol: " + rol.id;
    writeOkTxt = txt.writeLineTo(line : msg);
    delete = true;

    foreach (participante in participantes) {
        tieneEsteRol = participante.hasRoleAssigned(role : rol.id);

        if (tieneEsteRol) {
            msg = "   Participante: " + participante.id;
            writeOkTxt = txt.writeLineTo(line : msg);

Distribuir contenido