Entradas

Mostrando entradas de 2012

Lógica de negocio en Base de datos o Java

  En el desarrollo de software surgen muchas dudas, una de ellas me hizo reflexionar el siguiente planteamiento: Lógica de negocio en la base de datos: por lógica de negocio se entiende las reglas y la manipulación de los datos para proveer un resultado esperado. La ubicación de esta lógica supone varias ventajas: Lógica centralizada: la lógica esta centralizada y no importa el cliente que intente accederla, siempre va a ser la misma, con un mismo lenguaje SQL. Velocidad: al tener los datos en el mismo motor que ejecuta los procedimientos, se evita el ir y venir entre el servidor web o cliente y la base de datos por datos a procesar. Actualización: al estar centralizada, un cambio en la lógica actualiza todos los clientes que la utilicen, sin importar la plataforma. También supone ciertas desventajas: Difícil de mantener: Trabajar con SQL es como trabajar con Cobol, es programación procedimental en su gran mayoría; agregar una nueva funcionalidad podría suponer revisar muy b

Swing Multihilo ProgressBar indeterminate

El anterior ejemplo se utilizo SwingWorker para hacer un llamado a un procedimiento que se demora mucho y de paso no bloquear la interfaz y poder actualizar. Este funciona bien pero por alguna razón no me funcionó igual cuando quería utilizar el progressbar de modo indeterminate. (.setIndeterminate(true)) así que encontré una forma de hacerlo y es en vez de extender el objeto de trabajo de Thread se extiende de SwingWorker, con esto, sobreescribiendo el metodo doInBackground el SwingWorker se encargaría de actualizar la interfaz sin bloquearla. public class Procesar extends SwingWorker { @Override protected Object doInBackground() throws Exception { barra.setIndeterminate(true); // proceso con duración indeterminada barra.setIndeterminate(false); return "Hecho."; } } } Lógicamente el llamado a dicha clase cambia y ya se ejecutaría con run() sino con execute() lanzador = new Procesar(); lanzador.execute(); Salud

Swing netbeans multihilo con barra de progreso

Con este ejemplo podemos usar una barra de progreso en Netbeans, los controles se pueden dibujar y cuando necesitemos procesar algo que consuma tiempo lo podemos mostrar con la barra de progreso desde esta clase     static class HiloDeLaBarra extends Thread {         private static int RETARDO = 500;         JProgressBar Barra;                     // Constructor         public HiloDeLaBarra(JProgressBar barra) {             Barra = barra;         }         // Subrutina que incrementa la barra de progreso         public void run() {             int minimo = Barra.getMinimum();             int maximo = Barra.getMaximum();                         Runnable Incrementa = new Runnable()             {                 public void run() {                     int valor = Barra.getValue();                     Barra.setValue(valor + 1);                 }             };             for (int i = minimo; i < maximo; i++) {                 try {                     Swin

Borrar Filas Duplicadas

Siempre es bueno tener una llave única en las tablas del sistema; pero en algunos casos, cuando las llaves son autonumericas o no tiene llave, las inserciones se pueden volver un problema cuando los registro son repetidos y no hay forma de identificar uno del otro, sino solamente por la autonumerica o por el rowid. Puedes eliminar los registros uno a uno, o con uno de los siguientes script’s: Borra todos los registros que no esten en los minimos de la misma tabla. DELETE FROM departamento WHERE rowid NOT IN (        SELECT MIN(rowid)           FROM departamento d       GROUP BY D.departamento_id ) Similar a la anterior, pero sin el NOT IN DELETE FROM departamento A WHERE ROWID > ( SELECT min(rowid) FROM departamento B WHERE A.departamento_id = B.departamento_id); Ahora con Exists DELETE FROM departamento A WHERE EXISTS ( SELECT ‘x’ FROM departamento B WHERE A.departamento_id = B.departamento_id AND B.rowid > A.rowid);

Teletrabajo

Ya existe en Colombia una ley que reglamenta el teletrabajo con las mismas garantías de un trabajador presencial; este es un resumen del reglamento: Abc del teletrabajo

Encontrar el 2do o N valor mas alto o mas bajo

Es fácil encontrar el valor mas alto o mas bajo de una consulta de datos con las funcionas max() y min(); pero cuando se necesita el segundo o tercer valor mas alto, la cosa cambia un poco, de esta forma: select id from (select rownum r, id from trabajo order by id desc) where r=2; De esa forma tendremos la consulta ordenada de forma descendente pero tomando a partir de la fila 2.

Grouping Sets Oracle

Grouping Sets es una extension del Group By, esta permite crear cortes de agrupaciones en un listado de datos agrupados; por ejemplo, si queremos totalizar una consulta por departamento y trabajo, grouping sets haria un corte cada vez que cambie uno de los campos segun el orden que sean escritos y totalizaria lo que lleva hasta el momento. Dichas columnas de agrupacion seran nulas y el campo de agrupacion del select sera el totalizado: SELECT fact_1_id, fact_2_id, fact_3_id, SUM(sales_value) AS sales_value, GROUPING_ID(fact_1_id, fact_2_id, fact_3_id) AS grouping_id FROM dimension_tab GROUP BY GROUPING SETS((fact_1_id, fact_2_id), (fact_1_id, fact_3_id)) ORDER BY fact_1_id, fact_2_id, fact_3_id; FACT_1_ID FACT_2_ID FACT_3_ID SALES_VALUE GROUPING_ID ---------- ---------- ---------- ----------- ----------- 1 1 4363.55 1 1 2 4794.76 1 1 3

Volviendo a Linux

  Hace un tiempo había cambiado el Ubuntu 11.10 a windows xp, esperando que fuese mas rápido, pero con un portátil de 1Gb de Ram y un Celeron a 1Ghz (o 1.2 no me acuerdo), después de instalar todas las aplicaciones necesarias, este se puso mas lento que el mismo Ubuntu, así que se me dio por pasarlo a windows 7, (también me habían dicho que era mas eficiente con los recursos…) pero al final siguió igual de lento; así que espere a que saliera Ubuntu 12.04 LTS (LTS significa Long Term Support, es decir, una versión con soporte de larga duración), pero esta vez no me aventure a instalar Ubuntu con unity, sino que baje Kubuntu, y hasta ahora esta corriendo fluido, incluso sin instalarle el paquete “kubuntu-low-fat-settings” el cual cambia la configuración de KDE para hacerlo mas liviano; hice esta prueba cuando tenia Ubuntu 11.10 con escritorio KDE, funcionó a la perfección,  el escritorio es mas liviano para equipos viejitos; pero la recomendación es si van a usar KDE instalen Kubuntu,

Encabezado Fijo ( con jquery )

Anteriormente había escrito un articulo sobre como mantener el encabezado fijo en el un tabla html con css; ahora he encontrado un plugin de jquery que permite hacerlo de forma mas facil: 1. Se descarga de:  http://www.tablefixedheader.com/download/ 2. Se vincula en la pagina donde esta la tabla que vas a fijar el encabezado: <script src="/js/jquery.fixheadertable.min.js" type="text/javascript"></script> 3.  Se llama al plugin con los siguientes parametros: $('#miTabla').fixheadertable({ caption : 'Titulo de la tabla', colratio     : [80, 90, 90, 90], // medidas del ancho de cada columna resizeCol         : true,  // se puede cambiar el tamaño de la columna minColWidth : 80 , height   : 400, showhide       : true // esto es para ocultar o mostrar los datos con un clic }); A petición de un lector: < table id = " miTabla " > < thead > &