sábado, 11 de octubre de 2014

Hungry code

Cuando una persona no-programadora tiene hambre seguramente se quejará y/o lo publicará en alguna de las redes sociales que use, para pasar el rato, para distraer su mente mientras consigue comida, yo como programadora fui un paso más allá y escribí un script ;)

When a non-programmer person is hungry, probably will complain about it or will write a post in some of its social networks, to kill time, to distract its mind while can get food, as programmer I went a step ahead and wrote a script ;)


Puedes verlo en ejecución en 
You can run it on 

viernes, 12 de abril de 2013

Script arranque automático de Tomcat en Linux

La siguiente entrada contiene la serie de pasos que hay que seguir para lograr el servicio de Tomcat se inicie automáticamente al encender un maquina con Linux. Este script lo has sido probando particularmente en Ubuntu y CentOs

This post contains the steps that you need to follow to start Tomcat's service automatically when your Linux machine is turned on. This script have been tested on Ubuntu and CentOs


Paso #1: Ingresar al directorio /etc/int.d/ en este directorio se encuentra los scripts de arranque automáticos del sistema.
Step #1: Go to the /etc/int.d/ directory,  here are the automatic startup scripts

Paso #2: Crear un fichero, que tendrá los comandos de arranque y detención del servicio de Tomcat
Step #2: Make a file where the start and stop Tomcat's service commands will be placed

$ sudo nano tomcat


Paso #3: Dentro del fichero "tomcat" copiar el script siguiente:
Step #3: Copy and paste the next script into the file "tomcat"

#!/bin/sh
#
# description: Demonio de arranque Tomcat
#

export TOMCAT_HOME=/root/apache/apache-tomcat-6.0.20
start(){
  $TOMCAT_HOME/bin/startup.sh
}
stop(){
  $TOMCAT_HOME/bin/shutdown.sh
}

case "$1" in
    start)

        echo "Iniciado / Starting tomcat ..."
        start
    ;;
    stop)

        echo "Deteniendo / Stopping tomcat ..."
        stop
    ;;

    restart)       
        echo "Reiniciando / Restarting tomcat ..."
        stop 

        start
    ;;
    *)
        echo $"Uso / Using : $0 {start|stop}"
        exit 1
esac


* El contenido  de la variable TOMCAT_HOME es la ruta donde se encuentran los archivos de tomcat tu equipo.

* The variable  TOMCAT_HOME should contain the path where are the tomcat's file on your machine

Paso #4: Asignar permiso de ejecución (x) al archivo si es necesario:
Step #4: Add execute access to "tomcat" file whether necessary

   $ chmod o+x  tomcat


Paso #5: Para arrancar/detener/reiniciar respectivamente el servicio manualmente se 
utilizan los siguientes comandos:
Step #5: To start/stop/restart manually the service, use the following commands:

 $ service tomcat start
 $ service tomcat stop

 $ service tomcat restart


Paso #6: Agregar los enlaces de arranque y detención  mediante el comando  chkconfig --add <nombre archivo>
Step #6: Add the links start/stop/restart manually the service, use the following commands:

  $ sudo chkconfig --add tomcat

  ********
 - Para eliminar los enlances se utiliza el comando chkconfig --del <nombre archivo> 
 - To remove the links, use the command chkconfig --del <filename>

  $ sudo chkconfig --del tomcat

Paso #7:  Activar el servicio en los distintos niveles de ejecución (runlevels) se utiliza el comando chkconfig  <nombre archivo> on (esto activará por defecto los niveles 2345)
Step #7: To activate the service on the several run levels, use the command chkconfig <file name> on ( that will activate the leel 2345 by default) :

  $ sudo chkconfig tomcat on

  ********
 - Para desctivar el servicio en los distintos niveles de ejecución (runlevels)  se utiliza el comando chkconfig  <nombre archivo> off
  $ sudo chkconfig tomcat off

- Tambien es posible activar/desactivar la ejecución del script en un nivel especifo con el comando    chkconfig  --level  <numero del nivel>  <nombre archivo>  on

 $ sudo chkconfig --level 23 tomcat on

- Se puede verificar el estado del script con el comando  chkconfig  --list <nombre archivo>
 $ sudo chkconfig --list tomcat


Paso #8: Confirmar que el enlace fue agregado en los niveles especificados se revisa el contenido de archivo /etc/rcX.d/, donde X es el nivel que se quiere revisar.

 $ ls -l /etc/rc2.d/  


Paso #9: Reiniciar la máquina y comprobar que el servicio inicie por si solo.
 $ sudo reboot
 
 

Fuente: http://www.youtube.com/watch?v=OdnELC0D5JE&feature=player_embedded#!

viernes, 1 de marzo de 2013

Enredo 'Mix Collations"

Error:  2013-03-01 11:01:45,192 [http-8080-2] ERROR fm.ApiController  - GET: /convenio/buscar: org.hibernate.exception.GenericJDBCException: could not execute query
2013-03-01 11:01:45,196 [http-8080-4] ERROR util.JDBCExceptionReporter  - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (latin1_spanish_ci,IMPLICIT) for operation '='

 
Situación: Un día agregé un nuevo dominio en mi aplicación Grails con MySQL,  como es lógico se creó una tabla en mi base de datos, realicé mi desarollo el cual incluyó hacer un cruce entre tablas anteriores y la nueva, hasta ahí todo ok,  pero como siempre el error antes mencionado surgió cuando hice el despliege en producción !!  (el karma eterno de los desarrolladores).

Diagnóstico: La tablas anteriores y la nueva no tenian el mismo collation (parece tan obvio después que sabes que esto y como lo solucionas :D )
Para saber ver que collation tiene cada tabla se consulta la la tabla tables en la base de datos information_schema en MySQL



Solución: Ir a las tablas resultantes de la consulta anterior y hacer el cambio de collation a nivel de tabla y campos, puesto que estos pueden ser distintos.

El cambio se pude hacer mediante la siguiente sentencia SQL:

viernes, 27 de julio de 2012

Groovy web console

Todo desarrollador Grails debe conocer Groovy web console,  una consola online de groovy que te ayuda muchisimo para hacer rapidamente pruebas pequeñas.
La interfaz es agradable e intuitiva, solo escribes tu codigo y le das "Execute script" y en obtendras la salida en la pestaña "Output",
ademas puedes guardar el codigo escrito para referencias futuras y ver los script escritos por otros.

lunes, 15 de agosto de 2011

Llenar un combo o g:select utilizando un Enum (Groovy - Grails)

En la mayoría de lenguajes de programación existe un tipo de datos llamado enumerado (Enumerated) o como suelen conocerse  Enum type, estos son fantásticos para una pequeña lista de datos que puedes utilizar en distintos puntos de tu aplicacion y cuyo contenido no van a cambiar en el futuro, y por tanto no amerita crear una tabla en nuestra base de datos. Ejemplo: los meses del año o días de la semana.

Particularmente esta entrada es sobre de uso de los Enum en Groovy en aplicaciones desarrolladas con Grails.


Paso 1 : Crear el enum
Podemos utilizar la versión simple
package org.blog.ejemplos

enum Dias {
    LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, DOMINGO
}

o una versión más avanzada que nos permita añadir más funcionalidad

package org.blog.ejemplos

enum Dias {
      
       // Datos del enum
       LUNES(1, "Lunes","LUN"),
       MARTES(2,"Martes","MAR"),
       MIERCOLES(3,"Miércoles","MIE"),
       JUEVES(4,"Jueves","JUE"),
       VIERNES(5,"Viernes","VIE"),
       SABADO(7,"Sábado","SAB"),
       DOMINGO(8,"Domingo","DOM");

       private final int numero
       private final String nombre
       private final String abreviatura

       Dias(int numero,String nombre,String abreviatura){
             this.numero = numero
             this.nombre = nombre
             this.abreviatura = abreviatura
       }
            
       // Metodos Getters para acceder a las propiedades del enum
       private int numero() { return numero }
       private String nombre() { return nombre }
       private String abreviatura() { return abreviatura }

}
  
Paso 2 : Importar enum
Al inicio de nuestra página .gsp agregamos el tag necesario para importar nuestro enum

<%! import org.blog.ejemplos.Dias %>

<html>
    <head> … </head>
    <body> … </body>
</html>


Paso 3 : Obtener datos del enum

Creamos el g:select, en la propiedad optionKey escribrimos el valor que deseamos recuperar y en optionValue lo que queremos mostrar.
 
   <div class="dialog">
      <h2>Escoge tu d&iacute;a favorito:</h2> 
      <g:select id="dias" name="dias"
                noSelection="['': '']"
                from="${Dias.values()}"
                optionKey="abreviatura"
                optionValue="nombre"
                onchange="escribirDia(this)"/>
  </div>

 Adicionalmente y según sea nuestra necesidad, podemos definir una función javascript para recuperar el valor seleccionado.

<script type="text/javascript">
   function escribirDia(itemSeleccionado){

         // Devuelve el index de la opcion seleccionada, ej: 0,1,2... 
         var index = itemSeleccionado.selectedIndex        

         // Devuelve el valor de la opcion seleccionada
         var abreviatura = itemSeleccionado.value        

         // Devuelve el texto una opcion, segun el index dado         
         var nombre = itemSeleccionado.options[index].text 
        
      document.getElementById("tuDia").innerHTML = abreviatura  + " - " + nombre;
   }
 </script>
  

Resultado