Capturar webcam con VB.NET

¿Que haremos? Crearemos una aplicación en Visual Studio, la cual hará uso de una webcam para capturar el video en frames independientes y depositarlos en memoria para despues mostralos al usuario a través de un picturebox y un Timer para crear la ilusión de movimiento. ¿Porque lo haremos? Porque es justo y necesario ¿Que necesitamos? [...]

Envío de correo con JavaMail/Netbeans

JavaMail es una expansión de Java que facilita el envío y recepción de e-mail desde código java. JavaMail implementa el protocolo SMTP (Simple Mail Transfer Protocol) así como los distintos tipos de conexión con servidores de correo -TLS, SSL, autentificación con usuario y password, etc [Según SantaWikipedia] ¿Qué necesitamos? JavaMail 1.4.5 Java y Netbeans 6.9 [...]

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic de Microsoft, este proyecto tendrá las funciones básicas de gestión INSERT, DELETE, UPDATE y una interfaz de usuario para utilizarlas. ¿Que necesitamos? Visual Studio 2008 o superior Firebird última versión Firebird ADO.NET Data Provider. Conocimientos básicos [...]

Imprimir imagen con Print

La siguiente clase hace uso de PRINT para imprimir una imagen que se encuentra en un variable de tipo FileInputStream, esta clase a su vez es implementada desde una interfaz que hace fácil su uso, la clase así como todo el proyecto esta comentado. import java.io.File; import javax.print.Doc; import java.io.IOException; import javax.print.DocFlavor; import javax.print.SimpleDoc; import java.io.FileInputStream; [...]

25/9/10

Cifrado de Vernam en java

JAN29

El cifrado de Vernam permite esconder mensajes secretos donde el texto se combina con una clave mediante operaciones matemáticas, mas info en Santa Wikipedia o el Santo patrono de los tecno-jovenes San Google.

Mejor un ejemplo, la teoria aburre:

1. Si queremos esconder el mensaje HOLA MUNDO, utilizando como plabra clave MOUSE, haremos lo siguiente, tomaremos como patron un "abcedario" en mayuscula donde cada caracter representa un digito, esto no siempre es asi, hay muchas variantes, podemos tomar tambien la tabla ascii como referencia o los bytes, etc.

A=0
B=1
C=2
D=3
E=5
F=5
G=6
H=7
I=8
J=9
K=10
L=12
M=12
N=13
O=14
P=15
Q=16
R=17
S=18
T=19
U=20
V=21
W=22
X=23
Y=24
Z=25
_= 26 //espacio en blanco

En total 27 caracteres

2. ahora intercambiamos cada caracter por su digito correspondiente en nuestro abcedario tanto en el texto del mensaje como en la palabra clave, sumamos ambas y realizamos la operacion MOD 27 (numero de caracteres de nuestro abcedario, 27 en nuestro ejemplo), el resultado que obtenemos lo reemplazamos por el caracter correspondiente en nuestro abecedario y ya tenemos el mensaje encriptado

H[7] + M[12] MOD 27 = T[19]
O[14] + O[14] MOD 27 = B[1]
L[11] + U[20] MOD 27 = E[4]
A[0] + S[18] MOD 27 = S[18]
_[26] + E[4] MOD 27 = D[3]
M[12] + M[12] MOD 27 = Y[24]
U[20] + O[14] MOD 27 = H[7]
N[13] + U[20] MOD 27 = G[6]
D[3] + S[18] MOD 27 = V[21]
O[14] + E[4] MOD 27 = S[18]

mensaje encriptado: TBESDYHGVS

Para desencriptar el mensaje, realizamos la operacion inversa, es decir:

27 + T[19] - M[12] MOD 27 = H[7]
.
.
.
y asi XD

AHORA EN JAVA:

La siguiente clase vernam.java, hace lo que hicimos mas arriba, pero utilizamos un abcdario mas completo, con mayusculas, minusculas, numeros y algunos caracteres especiales. Se hace uso de vectores para manipular los datos, si bien no es necesario, pero en fin...

import java.util.Enumeration;
import java.util.Vector;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class vernam {
    //nuestro ABCDARIO 
    private String abcdario = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzáéíóú 1234567890@.,;:-+*/$#¿?!¡=()[]{}";    
       
    public vernam(){
        System.out.println("Cifrado de Vernam by jc Mouse");
        System.out.println();
    }
    
    public String encriptar(String texto, String clave){        
        String t="";
        int a,b;
        char c;
        int i = 0;
        /* Se transforma las cadenas de texto en vectores */
        Vector vtexto = to_vector(texto);
        Vector vclave = to_vector(clave);
        //se recorre uno a uno los elementos del vecto "texto", y junto al vector "clave" se realizan las 
        //operaciones para encriptar/desencritar el mensaje
        Enumeration e = vtexto.elements();        
        while (e.hasMoreElements()) {
            //se obtiene la posicion de cada caracter del mensaje respecto a nuestro abcdario
            char caracter = e.nextElement().toString().charAt(0);
            a = abcdario.indexOf(caracter);
            //se hace lo mismo para la "clave"
            b = abcdario.indexOf(vclave.get(i).toString().charAt(0));               
            //esto encripta el caracter de acuerdo al cifrado de vernam
            c = abcdario.charAt((a+b)%abcdario.length());            
            // muestra con detalle el proceso de encriptado
            //System.out.println(caracter+"[" + a + "] + " + vclave.get(i) + "[" + b + "] MOD " + abcdario.length() + " = " + c + "[" + ((a+b)%abcdario.length())+"]");
            //se concatena el resultado
            t = t + c;
            i++;               
            if(i==vclave.size()){i=0;}
         }         
         return t;
    }
    
     public String desencriptar(String texto, String clave){         
        String t="";
        int a,b;
        char c;
        int i =0;        
        Vector vtexto = to_vector(texto);
        Vector vclave = to_vector(clave);        
        Enumeration e = vtexto.elements();        
        while (e.hasMoreElements()) {
           a = abcdario.indexOf(e.nextElement().toString().charAt(0));
           b = abcdario.indexOf(vclave.get(i).toString().charAt(0));                
           c = abcdario.charAt((abcdario.length()+ a - b)%abcdario.length());               
           t = t + c;           
           i++;               
           if(i==vclave.size()){i=0;}
         }         
         return t;
     }
    
    /* metodo que transforma una cadena de texto a un vector*/
    private Vector to_vector(String texto){
        Vector v = new Vector(10,2);    
        //convertimos el texto en un array
        char[] array = texto.toCharArray();                
        //pasamos del array al vector
        for(int j=0;j<array.length;j++){
            v.addElement(array[j]);
        }
        return v;
    }     
}

La implementacion de esta clase para su ejecucion desde consola, es :


public class Main {
    public static void main(String[] args) {
        vernam cripto = new vernam();
        String clave = "mouse";
        String texto = "HOLA MUNDO mensaje encriptado utilizando el Cifrado de Vernam";
        
        System.out.println( "Texto original: "  + texto);
        System.out.println();
        System.out.println( "------------------------------------------------------------");
        System.out.println( "Mensaje encriptado: " );
        String t = cripto.encriptar(texto, clave);
        System.out.println(t);                
        System.out.println( "------------------------------------------------------------");
        System.out.println();
        System.out.println( "Mensaje desencriptado: " );
        System.out.println( cripto.desencriptar(t, clave) );
        System.out.println( "------------------------------------------------------------");
    }
}
el resultado:


Texto original: HOLA MUNDO mensaje encriptado utilizando el Cifrado de Vernam

------------------------------------------------------------
Mensaje encriptado: 
H[7] + m[38] MOD 90 = t[45]
O[14] + o[40] MOD 90 = í[54]
L[11] + u[46] MOD 90 =  [57]
A[0] + s[44] MOD 90 = s[44]
 [57] + e[30] MOD 90 = ][87]
M[12] + m[38] MOD 90 = y[50]
U[20] + o[40] MOD 90 = 3[60]
N[13] + u[46] MOD 90 = 2[59]
D[3] + s[44] MOD 90 = v[47]
O[14] + e[30] MOD 90 = s[44]
 [57] + m[38] MOD 90 = F[5]
m[38] + o[40] MOD 90 = #[78]
e[30] + u[46] MOD 90 = /[76]
n[39] + s[44] MOD 90 = =[83]
s[44] + e[30] MOD 90 = +[74]
a[26] + m[38] MOD 90 = 7[64]
j[35] + o[40] MOD 90 = *[75]
e[30] + u[46] MOD 90 = /[76]
 [57] + s[44] MOD 90 = L[11]
e[30] + e[30] MOD 90 = 3[60]
n[39] + m[38] MOD 90 = $[77]
c[28] + o[40] MOD 90 = @[68]
r[43] + u[46] MOD 90 = }[89]
i[34] + s[44] MOD 90 = #[78]
p[41] + e[30] MOD 90 = ;[71]
t[45] + m[38] MOD 90 = =[83]
a[26] + o[40] MOD 90 = 9[66]
d[29] + u[46] MOD 90 = *[75]
o[40] + s[44] MOD 90 = ([84]
 [57] + e[30] MOD 90 = ][87]
u[46] + m[38] MOD 90 = ([84]
t[45] + o[40] MOD 90 = )[85]
i[34] + u[46] MOD 90 = ?[80]
l[37] + s[44] MOD 90 = ![81]
i[34] + e[30] MOD 90 = 7[64]
z[51] + m[38] MOD 90 = }[89]
a[26] + o[40] MOD 90 = 9[66]
n[39] + u[46] MOD 90 = )[85]
d[29] + s[44] MOD 90 = -[73]
o[40] + e[30] MOD 90 = ,[70]
 [57] + m[38] MOD 90 = F[5]
e[30] + o[40] MOD 90 = ,[70]
l[37] + u[46] MOD 90 = =[83]
 [57] + s[44] MOD 90 = L[11]
C[2] + e[30] MOD 90 = g[32]
i[34] + m[38] MOD 90 = :[72]
f[31] + o[40] MOD 90 = ;[71]
r[43] + u[46] MOD 90 = }[89]
a[26] + s[44] MOD 90 = ,[70]
d[29] + e[30] MOD 90 = 2[59]
o[40] + m[38] MOD 90 = #[78]
 [57] + o[40] MOD 90 = H[7]
d[29] + u[46] MOD 90 = *[75]
e[30] + s[44] MOD 90 = +[74]
 [57] + e[30] MOD 90 = ][87]
V[21] + m[38] MOD 90 = 2[59]
e[30] + o[40] MOD 90 = ,[70]
r[43] + u[46] MOD 90 = }[89]
n[39] + s[44] MOD 90 = =[83]
a[26] + e[30] MOD 90 = ú[56]
m[38] + m[38] MOD 90 = /[76]
tí s]y32vsF#/=+7*/L3$@}#;=9*(]()?!7}9)-,F,=Lg:;},2#H*+]2,}=ú/
------------------------------------------------------------

Mensaje desencriptado: 
HOLA MUNDO mensaje encriptado utilizando el Cifrado de Vernam
------------------------------------------------------------
BUILD SUCCESSFUL (total time: 3 seconds)


FIN

continue reading

21/9/10

ROI: Retorno de la Inversión

JAN29


¿Que es el ROI?

Es el beneficio que obtenemos por cada unidad monetaria invertida en tecnologías de información (TI) durante un periodo de tiempo.

Se utiliza para analizar la viabilidad de un proyecto y medir su éxito. En épocas de crisis, se convierte en una herramienta fundamental para que cada centavo invertido en tecnología regrese a ser posible acompañado de más.

Ecuación estándar del ROI

Ventajas:
  • Simplicidad de su cálculo.
  • Mayormente aplicable por organizaciones funcionales e industriales.
  • Es un primer paso para estimar la recuperación de la inversión en un proyecto sin usar recursos considerables.
  • Permite que los encargados identifiquen y que entiendan mejor las funciones del proyecto, las dependencias y su impacto total en el ROI.
Desventajas:
  • El cálculo del ROI no considera el valor del dinero en el tiempo. (1 $ hoy, no es igual a 1 $ mañana).
  • No considera el riesgo asociado a un proyecto o a una inversión.
  • La ecuación favorece ahorros a corto plazo y pasa por alto costes a largo plazo tales como mantenimiento, ayuda y mejoras. 

Ejemplo:

Calcular el ROI a un año para un proyecto de software que tiene las siguientes caracteristicas

a- Costos de desarrollo ...............................1500 bs.
b- Costo de instalacion ................................200 bs.
c- Costo de capacitacion .............................250 bs.
d- Costo de migracion de datos ...................150 bs.
e- Gastos evitados (1er periodo) .................800 bs.
f- Ingresos mejorados (1er periodo) ..........1500 bs.
g- Reduccion de gastos ...............................400 bs.
h- Costos de operaciones ...........................500 bs.

Solución:

Separando entre los ingresos del primer año y los costos de la inversion, tenemos

Inversión incisos a,b,c,d tenemos:
1500 + 200 + 250 + 150 = 2100

Ingresos incisos e,f,g,h tenemos:
800+1500+400+(-500) = 2200

Aplicando la formula ROI:

ROI = ((2200-2100)/2100)*100% = 4,76%

¿Que quiere decir este 4,76%?

Si el ROI es menor o igual a cero, significa que el proyecto NO ES RENTABLE, mientras mayor sea el ROI que se obtiene, MAYOR ES LA RENTABILIDAD DEL PROYECTO, por tanto en nuestro ejemplo no ingresamos en perdida ya que obtuvimos ganancias y recuperamos nuestra inversión, pero nuestra rentabilidad es demasiado baja, esto es normal en el primer periodo, pero si se continua con esa tendencia en los siguientes periodos, el proyecto no sera rentable.

continue reading

18/9/10

MiniCAD con java2D [Completo]

JAN29

Java 2d es un API muy potente para poder realizar todo tipo de aplicaciones multimedia, como por ejemplo, una aplicación que simule ser un programa de diseño 2d al estilo de CAD (Programas de diseño asistido por computadora), claro este es un ejemplo sencillo hecho en un par de horas, pero un proyecto bien trabajado no tendria nada que envidiar a otros programas hechos en C u otros lenguajes de alto nivel.

Un video de como quedo
 
Ahora les dejo el codigo fuente en Netbeans 6.0 para que lo analicen, critiquen, pirateen, descuartizen o lo que se les antoje hacer
Click para descargar

continue reading

13/9/10

Ingenieria del Software, Ian Sommerville 7 Edición en Español [NO ESCANEADO]

JAN29


Buscando por muchos lugares al fin encontre el libro de Ian Somerville "Ingenieria del Software" 7 edición en Español, pero lo bueno es que este libro, NO ESTA ESCANEADO, asi que aparte de que el libro puede leerse mucho mas facilmente, porque no es pesado, se pueden realizar busquedas de texto cosa que no se puede con las otras versiones escaneadas del libro que circulan por la red
 Prueba para que se vea que se puede seleccionar texto XD
INDICE

Parte I. VISIÓN GENERAL 1
1. Introducción
2. Sistemas socio-técnicos
3. Sistemas críticos
4. Procesos del software
5. Gestión de proyectos

Parte II. REQUERIMIENTOS
6. Requerimientos del software
7. Procesos de la ingeniería de requerimientos
8. Modelos del sistema
9. Especificación de sistemas críticos
10. Especificación formal

Parte III. DISEÑO
11. Diseño arquitectónico
12. Arquitecturas de sistemas distribuidos
13. Arquitecturas de aplicaciones
14. Diseño orientado a objetos
15. Diseño de software de tiempo real
16. Diseño de interfaces de usuario

Parte IV. DESARROLLO
17. Desarrollo
18. Reutilización del software
19. Ingeniería del software basada en componentes
20. Desarrollo de sistemas críticos
21. Evolución del software

Parte V. VERIFICACIÓN Y VALIDACIÓN
22. Verificación y validación
23. Pruebas del software
24. Validación de sistemas críticos

Parte V I . GESTIÓN DE PERSONAL
25. Gestión de personal
26. Estimación de costes del software
27. Gestión de calidad
28. Mejora de procesos
29. Gestión de configuraciones

Sin más aqui el enlace de descarga, no pesa nada
Click para descargar

continue reading

1/9/10

Proyecto pagina web "Contáme!"

JAN29


Me encontre con un tipo de web en donde uno tiene que "contar sus secretos" y si bien la web no tiene ningúna utilidad más que hacer perder el tiempo, es bastante entretenida leer los "secretos"  de las demas personas ;)

Asi que busque un clon script de ese tipo de web y la encontre en una web argentina bastante conocida! (asi que no le hago publidad gratis XD ) estudie un poco el script en cuestión y aunque tiene algunos errores y no esta del todo completa, me anime a hacer algunos cambios para hacer la interfaz mas agradable pero preservando el estilo original de la web.

El resultado me deja satisfecho por el momento, aunque aun tiene algunos errores que se me pasaron:
  1. Al introducir el "secreto"  solo acepta letras y numeros, no signos de puntacion ni caracteres extraños.
  2. Al introducir el CAPTCHA, si se comete un error muestra una pagina en blanco
  3. y otros errores que no me acuerdo.
Pero en fin, creo que la web esta bastante aceptable, asi que invito a quienes quieran perder el tiempo unos minutos a darse una vuelta por el sitio y dejar su más oscuro secreto mejor si son pecados, estan cordialmente invitados, se que no es ético mostrar un proyecto a medias, pero estoy ocupado asi que si no lo pongo ahora se me olvida para despues


la url es: http://www.contame.webcindario.com/

agradesco mucho sus  opiniones del sitio, nadie es perfecto, pero solo equivocandose se aprende

[Actualizado]
corregi la mayoria de los errores XD

continue reading

Figuras básicas con Java2D [Proyecto Completo]

JAN29


Continuando con el estudio de Java2D, ahora les presento un videotutorial completo para diseñar, codificar e implementar un programa en netbeans 6.0 especialmente dirigido a los novatos en programación java y el uso del IDE Netbeans.



El videotutorial mas archivos de ayuda en el siguiente enlace
Click para descargar

Si el enlace esta roto por favor avisar, tengo una conexion a internet que dan ganas de #0."@L0L

continue reading

Post recomendado