domingo, 23 de diciembre de 2012

Validar números con JavaScript Firefox, IE, Chrome

Esta función sirve para validar que el campo solo sea númerico, esta función es valida para los principales navegadores:


function onlyNumbers(e) {
    var val = (document.all);
    var key = val ? e.keyCode : e.which;
    if (key > 31 && (key < 48 || key > 57)) {
        if (val)
            window.event.keyCode = 0;
        else {
            e.stopPropagation();
            e.preventDefault();
        }
    }
}

Autor: Miguel García

viernes, 9 de noviembre de 2012

Calcular días transcurridos entre dos fechas C#

Este metodo recibe dos fechas, inicial y posterior y devuelve el número de días transcurridos en esas dos fechas:


private int CalculateDays(DateTime oldDate, DateTime newDate)
    {
      // Diferencia de fechas
      TimeSpan ts = newDate - oldDate;

      // Diferencia de días
      return ts.Days;
    }

miércoles, 24 de octubre de 2012

Query para crear una base de datos en SQL Server

Con el siguiente query se crea un base de datos, primero valida si existe, de ser así la borra y la crea de nuevo desde cero. El texto que esta en verde BASE_DATOS_TEST es el nombre de la base de datos.

Nota: este query borra la base de datos si ya existe mucho cuidado al probarlo.

____________________________________________________________

IF db_id (N'BASE_DATOS_TEST') is not null drop database BASE_DATOS_TEST;
GO

CREATE DATABASE [BASE_DATOS_TEST] ON  PRIMARY
( NAME = N'BASE_DATOS_TEST', FILENAME = N'\\FSA\SQLDB\BASE_DATOS_TEST.mdf' ,
  SIZE = 2GB , MAXSIZE = 8GB, FILEGROWTH = 1GB )
LOG ON
( NAME = N'BASE_DATOS_TEST_log', FILENAME = N'\\FSA\SQLDB\BASE_DATOS_TEST_log.ldf' ,
  SIZE = 1GB , MAXSIZE = 2GB , FILEGROWTH = 10%)
GO
____________________________________________________________

Se debe tener permisos para crear base de datos sino sale error.

Seleccionar la hora de un campo Datetime en SQL server

Para consultar la hora de un campo Datetime de una tabla en SQL server se hacer con el siguiente query:

select convert(varchar, getdate(), 8)00:38:54


Entre otras consultas tenemos:

select convert(varchar, getdate(), 9)Dec 30 2006 12:38:54:840AM

select convert(varchar, getdate(), 14)00:38:54:840

domingo, 21 de octubre de 2012

Algoritmo recursivo en Java para descomponer un número en sus factores primos

Este es el algoritmo para descomponer un numero dado en sus factores primos:


import java.util.Scanner;

/**
 * @date
 * @author Wilmer Lopez
 */
public class ProgramacionV {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner leer = new Scanner(System.in);
        System.out.println("Ingrese un numero");
        int m = leer.nextInt();
        System.out.println("Los factores primo son:");
        FactoresPrimos(m);
        System.out.println("\n");
    }
 
    /**
     *
     * @param n
     */
    public static void FactoresPrimos(int n){
        if (esPrimo(n)){
         System.out.print("*"+n+" ");
         return;
        }
        int factor1 = (int) Math.sqrt(n);
        while (n % factor1 !=0) {
            factor1++;
        }
        FactoresPrimos(factor1);
        FactoresPrimos(n/factor1);

    }
 
    /**
     *
     * @param numero
     * @return
     */
    public static boolean esPrimo(int numero){
        int contador = 2;
        boolean primo=true;
        while ((primo) && (contador!=numero)){
          if (numero % contador == 0) {
                primo = false;
            }
          if (numero == 1) {
                primo = true;
                return primo;
            }
          contador++;
        }
        return primo;
  }

}

domingo, 26 de agosto de 2012

Fibonacci recursivo - función


Algoritmo recursivo de fibonacci, donde la función se llama a sí misma.



long fibonacci( long n )
{
   /* caso base */
   if ( n == 0 || n == 1 ) {
      return n;   } /* fin de if */
   else { /* paso recursivo */ 
      return fibonacci( n - 1 ) + fibonacci( n - 2 );
   } /* fin de else */

domingo, 17 de junio de 2012

Ejemplo Canvas en HTML5

Un ejemplo basico de un canvas en html5, esto se escribe en el editor que se este usando, o si no en un block de notas y se guarda como html


<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Canvas</title>
<script type="application/javascript" src="game.js"></script>
</head>
<body>
<h1>Ejemplo Canvas</h1>
<p><canvas id="canvas" width="350" height="200" style="border:1px solid #000">
Canvas not supported by your browser.
</canvas></p>
</body>
</html>


En esta linea se está llamando el Javascript

<script type="application/javascript" src="game.js"></script>


Este sería el javascript


window.addEventListener('load',init,false);
var canvas=null,ctx=null;
function init(){
 canvas=document.getElementById('canvas');
 canvas.style.background='#999';
 ctx=canvas.getContext('2d');
 paint(ctx);
}
function paint(ctx){
 ctx.fillStyle='#0f0';
 ctx.fillRect(60,60,100,70);
}

sábado, 9 de junio de 2012

Autoincremento en ORACLE


Campo de autoincremento en ORACLE

Ejemplo, la tabla 'TBLDETALLE_PEDIDOS' y tendrá dos campos, del cual id_cliente será el autoincrement.

create table  TBLDETALLE_PEDIDOS (
id_cliente number PRIMARY KEY,
pedido varchar2(20));


Luego será necesario crear una secuencia que se encargue de hacer el incremento,  'secuencia_id_detallepedido', comenzará desde el valor 1 y se incrementará de uno.

create sequence secuencia_id_detallepedido
   start with 1 
   increment by 1 
   nomaxvalue;

Se crea un trigger, el cual hará elautoincremento cada vez que se realice un insert a esta tabla. 

create trigger trig_id_pedido
before insert on TBLDETALLE_PEDIDOS
for each row
begin
select  secuencia_id_detallepedido.nextval into :new.id_cliente from dual;
end;

Luego los insert a la tabla '
TBLDETALLE_PEDIDOS', serían de la forma:

insert into 
TBLDETALLE_PEDIDOS values ('pedido');

O de la forma:

insert into  TBLDETALLE_PEDIDOS values (null,'pedido');

domingo, 13 de mayo de 2012

Suma, multiplicación y traspuesta de una matriz en JAVA


Calculos con matrices en Java.


public class Matriz {
 
    //almacena los datos de la matriz usada en los calculos
    int [][] maDatos;

    public Matriz(int f, int c){

        //if anidados que verifican si la matriz es cuadrada para evitar matrices
        //rectangulares.
     
        //si las filas son igual a la columna
        if (f  ==  c){
            maDatos = new int [f][c];
        }
        //si las filas son menores que las columnas usar las columnas
        else if(f < c){
            maDatos = new int [c][c];
        }
        //si las filas son mayores que las columnas usar las filas
        else {
            maDatos = new int [f][f];
        }
    }

    //permite insertar un arreglo al instanciar el objeto
    public Matriz (int [][] d){
        maDatos  = d;
    }

    //metodo que suma dos matrices
    public Matriz sumar(Matriz m){
        int laRes[][] = new int [maDatos.length][maDatos[0].length];
        //instrucciones for que permiten sumar una matriz elemento
        //por elemento
        for(int i = 0; i < maDatos.length; i++){
            for (int j = 0; j < maDatos[0].length; j++){
                laRes [i][j] = maDatos[i][j] + m.maDatos[i][j];
            }
        }

        return new Matriz (laRes);
    }

    //metodo que genera la traspuesta de una matriz
    public Matriz traspuesta(){
        int laRes[][] = new int [maDatos[0].length][maDatos.length];
        for(int i = 0; i < maDatos.length; i++){
            for (int j = 0; j < maDatos[0].length; j++){
                laRes [j][i] = maDatos[i][j];
            }
        }

        return new Matriz (laRes);
    }

    //metodo que multiplica dos matrices
    public Matriz multiplicar(Matriz m){
        int laRes[][] = new int [maDatos.length][maDatos[0].length];

        //se necesitan tres instrucciones for para multiplicar cada
        //fila de la una matriz por las columnas de la otra
        for(int i = 0; i < maDatos.length; i++){
            for (int j = 0; j < maDatos[0].length; j++){
                for (int k = 0; k < maDatos[0].length; k++){
                    laRes [i][j] += maDatos[i][k] * m.maDatos[k][j];
                }
            }
        }

        return new Matriz (laRes);
    }

   //permite visualizar la matriz
    public void mostrar(){
        for(int i = 0; i < maDatos.length; i++){
            for (int j = 0; j < maDatos[0].length; j++){
                System.out.print("|" + maDatos[i][j]);
            }
            System.out.print("|\n");
        }
        System.out.print("\n");
    }
}

jueves, 22 de marzo de 2012

Consultas SQL

Aqui algunos ejemplos de consultas basicas en SQL:

1. Obtener  nombre completo y teléfono para el cliente identificado como 87459.

SELECT nombre_completo, telefono
FROM Clientes
WHERE identificacion=87459;

2. Desplegar el número, tipo y saldo actual de los productos para el cliente identificado como 87459.

SELECT numero, saldo_actual, tipo_producto
FROM Productos
WHERE id_cliente='87459';

3. Mostrar el número, tipo, saldo actual, antigüedad (en años) de los productos de ahorro (cuentas de ahorro y corriente) activos para el cliente identificado como 87459.

SELECT numero, saldo_actual, tipo_producto,((ROUND (SYSDATE-fecha_apertura))/365)as antiguedad;
FROM Productos
WHERE id_cliente='87459'
AND tipo_producto='11'
AND tipo_producto='12'
AND estado='3';

4. Visualizar el número de transacción, fecha, valor y estado de las transacciones realizadas para el producto 97662.

SELECT numero_transaccion, Fecha, Valor, Estado
FROM MovimientosProductos
WHERE numero_producto='97662';

5. Obtener el número de transacción, fecha, valor de las consignaciones del producto número 97662 desde el último corte (el corte se produjo el 17 de septiembre del 2009).

SELECT numero_transaccion, Fecha, Valor
FROM MovimientosProductos
WHERE numero_producto='97662'
AND fecha >= 17/09/2009
AND fecha <= SYSDATE;

6. Visualizar el número de transacción, fecha y valor de las transacciones exitosas realizadas para el producto 97662 desde el último corte (el corte se produjo el 17 de septiembre del 2009).

SELECT numero_transaccion, Fecha, Valor
FROM MovimientosProductos
WHERE numero_producto='97662'
AND fecha >= 17/09/2009
AND fecha <= SYSDATE
AND tipo_movimiento='1'
AND tipo_movimiento='2';

7. Mostrar el número, tipo y saldo disponible (saldo actual – saldo mínimo) de los productos de ahorro (cuentas de ahorro y corriente) activos para el cliente identificado como 87459.

SELECT numero, tipo_producto,(saldo_actual-saldo_minimo)as saldo_disponible
FROM Productos
WHERE id_cliente='87459'
AND tipo_producto='11'
AND tipo_producto='12'
GROUP BY tipo_producto, numero, (saldo_actual-saldo_minimo)as saldp_disponible;

8. Visualizar el valor total del endeudamiento para el cliente identificado como 87459.

SELECT SUM(saldo_actual)
FROM Productos
WHERE tipo_producto='13'
AND tipo_producto='14'
AND tipo_producto='16';

9. Mostrar el valor total del ahorro para el cliente identificado como 87459.

SELECT SUM(saldo_actual)
FROM Productos
WHERE tipo_producto='11'
AND tipo_producto='12';

10. Bloquear los productos de ahorro con saldo actual inferior a $100 y antigüedad menor a dos años.

UPDATE Productos
SET Estado=1
WHERE tipo_producto='11'
AND saldo_actual <='100'
AND fecha_apertura >=17/09/2007 ;

domingo, 8 de enero de 2012

Node.js


 





Hola hoy compartiré un fenómeno que esta ocurriendo en la web y de pronto muchos desarrolladores web ya están poniendo su atención el en lenguaje de programación al lado del servidor que curiosamente funciona con JAVASCRIPT y no con cualquier compilador de javascript, utiliza el motor de compilación de javascript que utiliza Google Chrome javascript v8 estoy hablando de Node.js, les contare algunas de las características que hacen de este lenguaje un lenguaje que hay puesto sus miradas en el y las ventajas que nos trae en el mundo de la web.

CARACTERÍSTICAS Y VENTAJAS
  •  A diferencia de Apache que crea un hilo de proceso por cada cliente que pida datos al servidor, Node.js crea solo un hilo de procesos para todos los clientes lo que hace que el servidor soporte muchas mas conexiones.
  • Es OpenSource.
  • No hay necesidad de Ajax para poder mantener una conexión asincronica con el servidor, gracias a los websockets de html5 y para otros exploradores viejos "IE8-" con polyfills.
  • Por lo anterior podemos hacer Chats o aplicaciones web con multiples usuarios de una manera impresinante ejemplos de aplicaciones que usen esto pues, Facebook, Google Plus, Gmail, etc...
  • ya no hay problemas cuando vas a realizar una aplicacion web y tienes que programar en dos lenguajes una para el servidor y otra para el cliente y hacer doble trabajo, con Node.js hay cliente-servidor son  dos gotas de agua totalmente iguales hay transparencia total.
Lo unico malo es que si quieres probar node.js remotamente necesitas instalar node.js en un servidor dedicado el cual tu puedas manipular. Ademas como dice freddy Vega (@freddier en el twitter) de mejorando la web "si ustedes son adultos y tienen trabajo, que les cuesta comprar un servidor para hacer experimentos?".

Si respondieron que solo quieren probar pero que el servidor dedicado tal vez lo comprarían mas adelante ya hay servicios que ofrecen el hosting gratuito en node.js:



Existen aplicaciones creadas para Node.js que son interesantes y ayudan mucho a los desarrolladores:

  • Jade: Un proyecto interesante con el cual puedes tratar el html con otra sintaxis no como etiquetas.
  • Stylus: Con este puedes tratar el css con otra sintaxis y totalmente compatible con todos los navegadores.
  • Coffescript: Con este puedes tratar el javascript con otra sintaxis y totalmente compatible con todos los navegadores.
  • Socket.io: Es un muy buen famework de Node.js y hay que instalarlo tanto en el servidor como en el cliente (mediante la inclución de un .js).

ENLACES  RECOMENDABLES



sábado, 7 de enero de 2012

Factorial recursivo en Java

Este es un metodo de un algoritmo recursivo que calcula el factorial:


   int factorial(int n){
      if(n==0) return 1;   //AXIOMA
      else return n*factorial(n-1);  //FORMULA RECURSIVA
   } 

Recursividad directa: cuando un método P contiene dentro de si un llamado a si mismo.

Recursividad indirecta: cuando un método  contiene dentro de si un llamado a otro método Q que contiene llamados (directos o indirectos) a P.

Variables locales

Si un método recursivo utiliza variables locales, estas serán creadas para cada invocación del método. Las variables locales (y sus valores) serán visibles sólo en la correspondiente invocación (cada invocación del procedimiento tiene su propia área de datos).
Cada invocación a un procedimiento requiere de cierto  espacio de memoria, el que sólo es liberado al terminar la ejecución de éste. El espacio de memoria disponible es limitado.
Los métodos recursivos son normalmente más lentos y consumen más memoria que sus equivalentes no recursivos.

Fuente: Franco Guidi Polanco