Búsquedas

viernes, 21 de septiembre de 2012

Uso de CASE en BBDD Oracle

En el trabajo se me dio la necesidad de en una consulta poner en función del valor de unas columnas un dato u otro (no los valores que contienen dichas columnas), para ello, tras investigar por la red descubrí el comando CASE, para mi caso en Oracle ya que es el gestor que usamos normalmente en nuestros proyectos.
Esta expresión usada en sentencias de consulta, hace las funciones de un IF-THEN-ELSE de programación de toda la vida, es decir, Oracle comprueba cada condición empezando por la primera de izquierda a derecha. Cuando una se cumple, la expresión devuelve el valor expuesto tras el "THEN" correspondiente. Si ninguna de las condiciones se satisface se devolvería lo expuesto en el "ELSE" (aunque esta parte no es obligatoria), en caso de no existir devolvería "NULL".
La sintaxis básica de CASE sería:

case when  then 
when  then 
...
else 
end 
 
Y un ejemplo podría ser:

- Devolver las categorías basadas en el salario de los empleados

select sal, case when sal < 2000 then 'category 1' 
                 when sal < 3000 then 'category 2' 
                 when sal < 4000 then 'category 3' 
                 else 'category 4' 
            end 
from emp; 

- Evaluar la edad de un empleado:

SELECT CASE lin_edad
When 25 Then lin_porcentaje:= 10;
When 30 Then lin_porcentaje:= 15;
When 35 Then lin_porcentaje:= 17;
Else lin_porcentaje:= 5;
END CASE;

- Veamos ahora el mismo ejemplo anterior pero aplicando la segunda forma del CASE, revisemos como se hace:

/* PL-SQL Packages en Oracle */
CASE
When lin_edad <= 25 Then lin_porcentaje:= 10;
When lin_edad >= 30 Then lin_porcentaje:= 15;
When lin_edad >= 35 and lin_edad <= 40 Then lin_porcentaje:= 17;
Else lin_porcentaje:= 5;
END CASE;

martes, 23 de noviembre de 2010

Si tienes una Mac ponte el Quicksilver

Hola, he vuelto, he decidido retomar el blog y volver a escribir artículos de cualquier tema que se me apetezca, pero sin obligaciones ni presión, sólo cuando tenga algo que considere interesante y breve, ya que tiempo no es lo que me sobra.
Para empezar, voy a hablar un poco de una aplicación bastante cómoda para los que somos usuarios de ordenadores de Apple (iMac, Macbook...), se trata de Quicksilver.
Al principio cuesta un poco cogerle el hilo pero después "se vuela", casi te olvidarás del ratón y del Dock para abrir y cerrar aplicaciones pero, además de un "launcher", permite realizar todo tipo de operaciones de forma súper rápida.
Para empezar haciendo una introducción podría hablar de las características del programa y soltar una parrafada, pero prefiero hacerlo de una manera más amena, a través de videotutoriales y, por ello, tengo que recomendar una serie de vídeos procedentes de una gran web que sigo habitualmente: Facilware
De nuevo vuelvo a recomendar esta web muy muy interesante para los amantes de los productos Apple y estar al día de las noticias tecnológicas.


jueves, 20 de agosto de 2009

Depurar una extensión de OpenOffice con Eclipse

Cada desarrollador necesita alguna forma de depurar sus aplicaciones. De igual forma sucede con las extensiones Java de OpenOffice.org para ello, seguimos los pasos descritos a continuación.

Configurando OpenOffice.org
Primero, necesitas añadir parámetros al inicio de la JVM de OpenOffice.org, los parámetros son:

  • -Xdebug
  • -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n

Para ello, necesitas abrir el menú de Opciones de OOo, y una vez allí seleccionar el elemento de configuración de Java.

Pinchar en el botón de Parámetros y añadir los parámetros indicados.

Para que se apliquen los parámetros necesitarás reiniciar OOo (cerrar también el inicio rápido). Esos parámetros harán que la JVM de OpenOffice.org esté a la escucha por el puerto 8000 de la máquina local.

Iniciar el modo de depuración de Eclipse

Abrir el menú Run -> Open Debug Dialog

Crear una nueva Remote Java Application con los siguientes parámetros:

  • Connection type: Standard (Socket Attach)
  • Host: localhost
  • Port: 8000
  • Sources: seleccionar el directorio de tu proyecto

Entonces, tras esto, ejecuta la extensión desde OpenOffice.org y después inicia el modo de depuración de creado desde Eclipse. Puede ser posible que la conexión no se establezca la primera vez porque OOo inicie la JVM sólo cuando sea necesaria. Después de una primera ejecución, la JVM arrancada no será detenida y el puerto permanecerá abierto con lo que podrá realizar la comunicación entre OOo y Eclipse.

Consejos & Trucos

  • No olvides añadir puntos de ruptura (breakpoints) en tu código antes de exportarlo, de otra forma no serán tomados en cuenta en tiempo de ejecución.
  • Necesitarás cerrar OpenOffice.org (también el inicio rápido) cuando se exporte el paquete desde Eclipse o tendrás un error que te diga que el puerto 8000 ya está en uso.
  • Puedes cambiar el puerto a uno distinto al 8000 por supuesto, cambialo en los parámetros de la JVM de OOo y en la configuración de la depuración de Eclipse.

Fuente: http://cedric.bosdonnat.free.fr/wordpress/?p=57

miércoles, 27 de mayo de 2009

Concatenar cadenas de caracteres en Java

En caso de tener la necesidad en nuestro código fuente de concatenar cadenas, tenemos la posibilidad de hacer uso de algunas clases que ofrece Java para ello. Esto es un requerimiento habitual para mensajes, errores, logs o excepciones.
Podemos hacer uso de
String o StringBuffer o StringBuilder, cualquiera de las tres realiza esta función, sin embargo, algunas presentan mejor rendimiento que otras.

String
Para realizar la concatenación usamos el operador + que está sobrecargado. Es la opción más habitual, sin embargo, también es la que peor rendimiento ofrece.
Al concatenar dos String, con el operador suma, se crea un nuevo String resultante, con lo que constantemente estamos creando objetos nuevos.

String hola = "Hola, ";
String mundo = "mundo";

String holamundo = hola + mundo;
StringBuffer
Esta clase permite concatenar caracteres de forma simple y eficiente.
Los métodos de StringBuffer son sincronizados, por lo que podemos usarlos de manera segura en un entorno multihilo.


StringBuffer holamundoBuffer = new StringBuffer();
holamundoBuffer.append("Hola, ");
holamundoBuffer.append("mundo);

String holamundo = holamundoBuffer.toString();

StringBuilder
Esta clase es nueva desde el JDK 5, y es la realmente recomendada para realizar la operación que estamos tratando. Su uso es idéntico al de StringBuffer.
Sus métodos no son sincronizados, por lo que tienen mejor rendimiento que StringBuffer. En general, la concatenación de String ocurre con variables locales a un método, por lo que es seguro usar StringBuilder en lugar de StringBuffer. En métodos que hacen uso intensivo de la concatenación, la diferencia en rendimiento puede ser importante.


StringBuilder holamundoBuilder = new StringBuilder();
holamundoBuilder.append("Hola, ");
holamundoBuilder.append("mundo");

String holamundo = holamundoBuilder.toString();

Rendimiento StringBuilder vs StringBuffer
Vamos a concatenar un millón de String ("zim") a un StringBuilder y a un StringBuffer y comparamos los tiempos:

 
StringBuffer sbuffer = new StringBuffer();
inicio = System.currentTimeMillis();
for (int i=0; i<1000000; i++) {
sbuffer.append("zim");
}
fin = System.currentTimeMillis();
System.out.println("Tiempo del StringBuffer: " + (fin-inicio));

StringBuilder sbuilder = new StringBuilder();
inicio = System.currentTimeMillis();
for (int i=0; i<1000000; i++) {
sbuilder.append("zim");
}
fin = System.currentTimeMillis();
System.out.println("Tiempo del StringBuilder: " + (fin-inicio));



Tras varias pruebas los tiempos se van haciendo constantes:
  • StringBuffer: 93 milisegundos
  • StringBuilder: 47 milisegundos


Por lo tanto, podemos observar que en la mayoría de los casos StringBuilder es casi un 50% más rápido en concatenar String.

Con el operador suma de String es una prueba que está fuera de lugar ya que tarda demasiado y puede producir desbordamientos de memoria y su rendimiento no es nada óptimo.

Por lo tanto, parece evidente que en la mayoría de los casos se debe hacer uso de StringBuilder para obtener un rendimiento máximo para realizar esta operación de concatenación de String.





miércoles, 4 de febrero de 2009

Alfresco - Instalación (Windows XP)

La versión de Alfresco utilizada es 3.0 SP1
  • Descomprimir el archivo "alfresco-enterprise-tomcat-3.0.1.zip" (puede realizarse con la versión "Labs", el funcionamiento es el mismo)
  • Instalar si no se tiene el JDK (1.5 ó 1.6) de Java en el pc
  • una Base de Datos, por ejemplo, MYSQL (configurar Mysql usando un motor InnoDB para el soporte de transacciones)
    • crear un esquema de Base de Datos con nombre "alfresco"
    • usuario de Base de Datos llamado "alfresco"
    • su password es también "alfresco"
    • ir a "tomcat/shared/classes/alfresco/extension/"
    • en "custom-hibernate-dialect.properties" comentar cualquier línea referente a HSQL (Derby) y descomentar la información de MySql
    • hacer lo mismo con "custom-repository.properties" y, además, editar si fuera necesario el valor de "dir.root="
  • Arrancar el servidor Tomcat o ejecutar desde la línea de comandos si se usa el servidor incluido en la distribución de Alfresco "alf_start.bat"
  • Una vez arrancado el servidor, acceder a la url:
    • http://servidor:puerto/alfresco
    • Para el caso de la aplicación Share: http://servidor:puerto/share

martes, 27 de enero de 2009

Debug Remoto en Tomcat desde Eclipse

Desde el directorio "bin" de Tomcat hacer lo siguiente:
  • cd C:/tomcat/bin
  • set JPDA_ADDRESS = 8000
  • set JPDA_TRANSPORT = dt_socket
  • catalina jpda start
Posteriormente, desde Eclipse hacemos esto:
  • Ir al menú Run>Open Debug Dialog
  • Seleccionamos en la ventana que se abre "New Remote Java Application"
  • Rellenamos los campos "Host = localhost" y "Port=8000"
  • Seleccionamos el proyecto de Eclipse que identificamos con la aplicación con la que nos conectamos remotamente para hacer el "debug".
  • Finalmente los ejecutamos "Run" estando arrancado el tomcat
Entonces se realizará la conexión con la aplicación y podemos establecer puntos de ruptura y hacer la depuración requerida.

sábado, 11 de octubre de 2008

Bienvenido

Bienvenido a este blog, dedicado a la aplicación web WTESTGEN, encargada de gestionar las necesidades básicas de un profesor a la hora de generar exámenes de tipo test de manera automática, con un control de alumnos para cada asignatura, así como las notas de éstos tras resolver los tests.
En este blog se explica una aplicación desarrollada para facilitar la labor de los profesores. Así, se intenta fomentar el empleo de las nuevas tecnologías por parte de los profesionales de la educación para ayudar a los alumnos a tener un contacto más ameno con sus necesidades de formación.
Esta aplicación, WTestGen, tiene dos perspectivas bien diferenciadas.
Por un lado, está la parte de administración enfocada para los profesores, en la que se puede llevar un mantenimiento bastante sencillo de sus labores. A esta sección se accede tras realizar una autenticación del usuario proporcionando dos datos: el nombre de usuario y la contraseña.
En la página principal tenemos un menú central con acceso al mantenimiento de Asignaturas, Alumnos, Preguntas, Respuestas, Exámenes y Notas. De esta forma, partimos de que la aplicación se basa en primer lugar en las asignaturas que tenga el profesor o docente, para, a partir de ahí, gestionar los alumnos de cada asignatura, sus preguntas que puedan generar los posteriores exámenes, las respuestas a cada pregunta y los exámenes de cada asignatura.
  • Mantenimiento de Asignaturas: es la parte encargada de gestionar las asignaturas de cada docente.
  • Mantenimiento de Alumnos: cada profesor podrá dar de alta a sus alumnos relacionándolos con determinadas asignaturas.
  • Mantenimiento de Preguntas: para poder generar exámenes de tipo test automáticamente, las asignaturas deben tener preguntas en el sistema. Desde aquí se gestiona todo lo relacionado con las preguntas.
  • Mantenimiento de Respuestas: para relacionar cada respuesta a una pregunta, ya que una respuesta no tiene sentido sin la pregunta a la que se refiera.
  • Mantenimiento de Exámenes: este es el módulo principal de la aplicación, ya que es el encargado de controlar la generación automática de exámenes siguiendo los parámetros indicados en un asistente de creación, a partir del cuál, se pueden dar más o menos datos según las necesidades del profesor. De esta forma, se tendrá una bandeja de exámenes para publicar. En el momento que se publican los exámenes, los alumnos de la asignatura del examen obtendrán en su bandeja de entrada en el sistema una lista de tareas que realmente son exámenes tipo test a resolver.
  • Mantenimiento de Notas: en esta sección se resumen los datos obtenidos de las correcciones de los test. Puede ser en función de cada alumno o bien por asignaturas.

Por otro lado, está la sección para los alumnos, la cuál se centra en tener una bandeja de tareas pendientes de realizar. En principio, estas tareas serán exámenes de tipo tests que podrán ser autocorregidos en el momento de resolverlos.

De la misma forma, cada alumno puede hacer un seguimiento de sus notas por examen de cada asignatura, y comprobar sus notas medias.