sábado, 15 de noviembre de 2008

Ejemplo con Vectores

Este ejemplo corresponde a 3 locales con diferente capacidad que registran ventas de 3 promociones distintas ($1000, $1500, $2000) lo que hace es vender y luego ver el informe de ventas por cada local.

PD: Es un ejemplo bàsico ...



//Clase Locales.java

import javax.swing.*;
/**
*
* @author jorge
*/
public class Locales {


private int totalventa;

Vector local1 = new Vector(this.capacidad_local1);
Vector local2 = new Vector(this.capacidad_local2);
Vector local3 = new Vector(this.capacidad_local3);


// Cantidad de Elementos a Almacenar
public int capacidad_local1= 20;
public int capacidad_local2= 25;
public int capacidad_local3= 33;

// Gastos Fihjos Por Local
public int gastos_local1= 5000;
public int gastos_local2= 6000;
public int gastos_local3= 7000;

public Locales(){

this.totalventa = 0;

}


public void venderPromocion (){

int combo1 = 1000;
int combo2 = 1500;
int combo3 = 2500;


this.totalventa = 0;

int local= Integer.parseInt(JOptionPane.showInputDialog("Seleccione local de venta : \n" +
"1 - Local 1 \n" +
"2 - Local 2 \n" +
"3 - Local 3 "));
if (local ==1)
{
int compra= Integer.parseInt(JOptionPane.showInputDialog("Seleccione promocion : \n" +
"1 - Combo 1 $1000 \n" +
"2 - Combo 2 $1500 \n" +
"3 - Combo 3 $2500 "));
if (compra == 1)
compra = combo1;
if (compra == 2)
compra = combo2;
if (compra == 3)
compra = combo3;

int cant= Integer.parseInt(JOptionPane.showInputDialog("Seleccione cantidad de promociones: "));

//El Limite de Compras no puede ser mayor a capacidad_local1

if(cant > this.capacidad_local1) {
JOptionPane.showMessageDialog( null, "Puede Comprar un Maximo "+this.capacidad_local1 +
" Promociones","ALERTA", JOptionPane.INFORMATION_MESSAGE );
Integer.parseInt(JOptionPane.showInputDialog("Seleccione cantidad de promociones: "));
}

this.totalventa = cant * compra;
local1.addElement(totalventa);
JOptionPane.showMessageDialog( null, "Debe Cancelar $ "+totalventa,"ALERTA", JOptionPane.INFORMATION_MESSAGE );
}



if (local ==2) {
int compra= Integer.parseInt(JOptionPane.showInputDialog("Seleccione promocion : \n" +
"1 - Combo 1 $1000 \n" +
"2 - Combo 2 $1500 \n" +
"3 - Combo 3 $2500 "));
if (compra == 1)
compra = combo1;
if (compra == 2)
compra = combo2;
if (compra == 3)
compra = combo3;

int cant= Integer.parseInt(JOptionPane.showInputDialog("Seleccione cantidad de promociones: "));
if(cant > this.capacidad_local2)
{
JOptionPane.showMessageDialog( null, "Puede Comprar un Maximo "+this.capacidad_local2 +
" Promociones","ALERTA", JOptionPane.INFORMATION_MESSAGE );

Integer.parseInt(JOptionPane.showInputDialog("Seleccione cantidad de promociones: "));
}

this.totalventa = cant * compra;
local2.addElement(totalventa);
JOptionPane.showMessageDialog( null, "Debe Cancelar $ "+totalventa,"ALERTA", JOptionPane.INFORMATION_MESSAGE );

}

if (local ==3)
{
int compra= Integer.parseInt(JOptionPane.showInputDialog("Seleccione promocion : \n" +
"1 - Combo 1 $1000 \n" +
"2 - Combo 2 $1500 \n" +
"3 - Combo 3 $2500 "));
if (compra == 1)
compra = combo1;
if (compra == 2)
compra = combo2;
if (compra == 3)
compra = combo3;


int cant= Integer.parseInt(JOptionPane.showInputDialog("Seleccione cantidad de promociones: "));
if(cant > this.capacidad_local3) {
JOptionPane.showMessageDialog( null, "Puede Comprar un Maximo "+this.capacidad_local3 +
" Promociones","ALERTA", JOptionPane.INFORMATION_MESSAGE );
Integer.parseInt(JOptionPane.showInputDialog("Seleccione cantidad de promociones: "));
}
this.totalventa = cant * compra;
local3.addElement(totalventa);
JOptionPane.showMessageDialog( null, "Debe Cancelar $ "+totalventa,"ALERTA", JOptionPane.INFORMATION_MESSAGE );

}

}

public void verVentasTotales () {

// Informe Local 1




String Salida ="Indice\tValor\n";

for(int i=0; i Salida += i + "\t" + local1.elementAt(i) + "\t" + "\n";


}

JTextArea ventanaSalida = new JTextArea();
ventanaSalida.setText(Salida);

JOptionPane.showMessageDialog(null,ventanaSalida, "INFORME LOCAL 1", JOptionPane.INFORMATION_MESSAGE);

// Informe Local 2

String Salida2 ="Indice\tValor\n";

for(int i=0; i Salida2 += i + "\t" + local2.elementAt(i) + "\n";
}

JTextArea ventanaSalida2 = new JTextArea();
ventanaSalida2.setText(Salida2);

JOptionPane.showMessageDialog(null,ventanaSalida2, "INFORME LOCAL 2", JOptionPane.INFORMATION_MESSAGE);


// Informe Local 3

String Salida3 ="Indice\tValor\n";

for(int i=0; i Salida3 += i + "\t" + local3.elementAt(i) + "\n";
}

JTextArea ventanaSalida3 = new JTextArea();
ventanaSalida3.setText(Salida3);

JOptionPane.showMessageDialog(null,ventanaSalida3, "INFORME LOCAL 3", JOptionPane.INFORMATION_MESSAGE);
}
}



//Clase Main.java

import javax.swing.*;
/**
*
* @author jorge
*/
public class Main {
private static int x;
private static boolean continuar = true;

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

Locales milocal = new Locales();

do
{

// Menu Principal
x = Integer.parseInt(JOptionPane.showInputDialog("Seleccione Opcion : \n" +
"1 - Ventas \n" +
"2 - Informe Ventas \n" +
"3 - Salir "));

switch (x)
{
// Ventas
case 1: milocal.venderPromocion();

// Pregunto para realizar otra Operacion como calcular ventas o continuar vendiendo
int b = Integer.parseInt(JOptionPane.showInputDialog("Presione : \n" +
"1 - Continuar \n" +
"2 - Salir \n"));

if (b == 2)
continuar = false;

break;

// Informes , mostrar los informes de los 3 locales juntos
case 2: milocal.verVentasTotales();

// Pregunto para realizar otra Operacion como calcular ventas o continuar vendiendo
b = Integer.parseInt(JOptionPane.showInputDialog("Presione : \n" +
"1 - Continuar \n" +
"2 - Salir \n"));
if (b == 2)
continuar = false;

break;

// Salgo del siste
case 3: continuar = false;;

default: break;


}


}while (continuar); //Saldra del Sistema

JOptionPane.showMessageDialog(null,"Que tenga buen dia", "Cerrar Sistema", JOptionPane.INFORMATION_MESSAGE);

}
}


Veamos unas pantallas

Menu Locales


Menu Promociones


Cantidad de Promociones a Comprar


Total a Pagar por la Compra


Informe de las Ventas






xJlara

miércoles, 22 de octubre de 2008

Encuentro Nacional Linux 2008 en la UdeC

Por fin ha llegado el día del Noveno Encuentro Linux en la UdeC, realmente me siento contento de participar en este evento.


El encuentro sera realizado los días 22, 23, 24 de Octubre (más información).

Para los rezagados o los que no pueden asistir por su trabajo ... pueden asistir el día Sábado 25 al Gnome Day también en la UdeC


Para más información visitar http://live.gnome.org/DiaGNOME.

x Jlara

domingo, 19 de octubre de 2008

Vectores, Arreglos, Arrays o como se llamen .... en JAVA

Siempre he pensado que uno de los conceptos que nos cuenta aprender en cualquier lenguaje de programación son los Arreglos o Vectores más aún cuando nosotros somos simples aprendices y no poseemos ninguna base de conocimientos solida en esto.

En java un arreglo es un conjunto de variables (llamados elementos o componentes) en el que se almacenan valores del mismo tipo. (más).



El siguiente ejemplo es tomado y adaptado del libro "Como Programar JAVA" quinta edición de DEITEL he tenido la oportunidad de adquirir este grandioso libro y realmente es bueno (La editorial lo ha rebajado en un 40%).


//Creación de un arreglo // http://geekslinuxchile.blogspot.com/ // Adaptado del libro "Como Programar JAVA" DEITEL

public class arreglo {

public static void main ( String args[] )
{
int arreglo[]; // Declarar la referencia del arregl0

arreglo = new int[10]; // Crear arreglo

String salida = "Indice\tValor\n";

// anexar de cada elemnto del arreglo al string salida

for ( int contador = 0; contador < arreglo.length; contador ++ )
salida += contador + "\t" + arreglo[contador] + "\n";

System.out.println (salida);

}

}



Como no le asignamos ningún valor a los elementos del arreglo se imprime cada elemento con un valor por defecto (en este caso 0).



(Pronto continuare con el manual.... )

x Jlara

jueves, 16 de octubre de 2008

Aprendiendo a Programar en JAVA


Uno de los lenguajes de programación que siempre me ha llamado la atención es JAVA por su portabilidad y además es multi pltaforma.

Es por esto que en esta sección ire subiendo todos mis avances en este lenguaje... no prometo mucho ya que estoy partiendo desde Cero.

Utilizare Java en Ubuntu 8.04 en entorno gráfico Xface para ver como instalar java visitar el siguiente vinculo en este bloc (Instalar JDK en Linux)


Creando nuestro primero programa (Hola Mundo)

NOTA: Guardar archivo con el mismo nombre de la Class y con extensión .java (holaMundo.java)

Compilar javac holaMundo.java
ejecutar java holaMundo

(siempre seguir esta secuencia con todos los ejemplos)

/*Primer ejercicio de Java http://geekslinuxchile.blogspot.com/ Autor: Jorge Lara Cravero */

import javax.swing.*;
public class holaMundo{
public static void main(String[] args) {
String mensaje = "Hola Mundo";

JOptionPane.showMessageDialog( null, mensaje, "Hola, Mundo!", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );

}
}

















Este segundo Script busca una letra o palabra dentro de una cadena

Incluir la clase Input

/* Jorge Lara Cravero
http://geekslinuxchile.blogspot.com/ */

public class buscar{

public static void main( String args[] )
{

Input dato= new Input();
System.out.println(".... Ingrese Cadena ....");
String letras = dato.getValue();

System.out.println(".... Ingrese frase ....");
String frase = dato.getValue();

String salida = " se encuentra en el índice " + letras.indexOf( frase );

System.out.println (salida);

}
}

Código se ejecutará de la siguiente forma:





Si observamos yo escribí Jorge Lara y quiero buscar la palabra lara con minúsculas


Obviamente Lara != lara

Nota : las imágenes corresponden a un código mas completo ya que si ustedes revisan el ejemplo todo sera por consola

Además si quieren que el sistema diga no se encuentra!!! deben realizar una condición if - else
considerando que cuando no se encuentra la palabra el sistema les arrojará un -1

Sería algo así

int a = letras.indexOf( frase );

if (a == -1)
adivinen que sucede

else

adivinen que sucede




x Jlara

miércoles, 15 de octubre de 2008

Páginas falsas de YouTube para atacar ordenadores


Piratas informáticos están aprovechando las redes sociales para enviar vínculos a supuestos vídeos de YouTube, donde el usuario tiene que actualizar el software para su visualización.

Especialistas en seguridad informática advierten de que hackers están usando páginas falsas de YouTube para engañar a los internautas a que abran sus ordenadores a software malicioso.

Los hackers envían enlaces a supuestos vídeos del portal de Google y los vínculos conectan a réplicas realistas de páginas de YouTube, indicando que se necesita una actualización del programa para ver el vídeo requerido. Aceptar esta actualización permite al hacker instalar malware que podrían inutilizar teclas, robar datos o permitir que tomase el control del ordenador afectado. Lo más probable es que las víctimas no se den cuenta, ya que el programa pirata les enviará luego al sitio real de YouTube mostrando el vídeo prometido.

Este engaño a través de páginas de YouTube falsas, según la agencia AFP, es parte de una creciente tendencia de los hackers a hacer uso de los populares sitios de redes sociales donde los internautas comparten vínculos y programas.


Fuente (http://www.vnunet.es)

martes, 14 de octubre de 2008

Creando un Trigger en MYSQL


En este pequeño articulo mostraré como crear un trigger (o disparador) en MYSQL que nos indique que usuario a eliminado algún registro de una tabla fabricantes de nuestra base de datos informática (ver en el ítem bases de datos de este bloc).

Aunque son las 1 de la mañana realizaré este manual pues durante la tarde estuve trabajando con un compañero en esto y me di cuenta que los triggers de mysql soportan fácilmente realizar insert con registros por defecto como:

- CURRENT_USER() => Inserta el usuario que realizo la operacción;
- CURRENT_DATE() => Inserta la fecha en que se realizo la operacción;
- CURRENT_TIME() => Inserta la hora en que se realizo la operacción;
- CURRENT_TIMESTAMP() => Inserta la fecha y hora en que se realizo la operacción;

Pero insertar registros como por ejemplo el código o nombre del registro que se elimino (o actualizo) mediante un trigger requiere de una mayor habilidad que espero se aclare ahora.

NOTA: MYSQL no soporta más de 1 trigger en la misma tabla;

Manos a ala obra

Creando las tablas (nota: la base de datos pueden llamarla informática o el nombre que deseen)

Código SQL
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE `articulos` (
`CODIGOART` int(11) NOT NULL,
`NOMBRE` varchar(100) default NULL,
`PRECIO` int(11) default NULL,
`CODFRABICANTE` int(11) NOT NULL,
PRIMARY KEY (`CODIGOART`,`CODFRABICANTE`),
KEY `CODFRABICANTE` (`CODFRABICANTE`) )
ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `articulos`
(`CODIGOART`, `NOMBRE`, `PRECIO`, `CODFRABICANTE`)
VALUES
(100, 'MOUSE', 4230, 5),
(101, 'Notebook DELL', 439223, 3),
(102, 'Torre 50 DVD +R', 7110, 1),
(104, 'Base para notebook', 22514, 8),
(105, 'Computador Ensamblado PIV', 178214, 10),
(106, 'Teclado Multimedia PS/2', 4491, 6),
(107, 'Notebook Aspire 5610', 466223, 4),

(108, 'Impresora Laser', 12591, 7),
(109, 'Audifonos y microfono Gamer', 18923, 9),
(110, 'lampara USB notebook', 9000, 5),
(111, 'mouse pad', 891, 10), (112, 'Key PAD', 2691, 1),
(112, 'Limpiador de Pantallas', 4500, 8),

(113, 'Mochila de Notebook', 29723, 6);


CREATE TABLE `fabricantes` (
`CODIGO` int(11) NOT NULL,

`NOMBRE` varchar(100) default NULL,
PRIMARY KEY (`CODIGO`) )
ENGINE=InnoDB DEFAULT CHARSET=latin1;



INSERT INTO `fabricantes` (`CODIGO`, `NOMBRE`)
VALUES
(1, 'Isumos Nacionales y cía.'),
(3, 'Dell Computer Inc.'),
(2, 'HP'),
(4, 'Acer internacional'),
(5, 'Genius'),
(6, 'PC Tronix'),
(7, 'Sony'),
(8, 'Kensignton'),
(9, 'Logitech'),
(10, 'Importadora Nacional');


ALTER TABLE `articulos` ADD CONSTRAINT `articulos_ibfk_1` FOREIGN KEY (`CODFRABICANTE`) REFERENCES `fabricantes` (`CODIGO`) ON DELETE CASCADE ON UPDATE CASCADE;


Bien ya poseemos 2 tablas relacionadas (fabricantes y articulos) ahora crearemos una nueva tabla a la que llamaremos cambios.

CREATE TABLE `cambios` (
`id` int(11) NOT NULL,
`nombre_art` varchar(50) default NULL,
`usuario` varchar(50) default NULL,
`FECHA` TIMESTAMP(0) NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`) )
ENGINE=InnoDB DEFAULT CHARSET=latin1;





En esta tabla guardaremos el id de articulo, el nombre, el usuario, la fecha y hora en que se elimine un registro de la tabla fabricantes.

Creando el Trigger

CREATE TRIGGER `informatica`.`fabricantes_before_ins_tr` BEFORE DELETE ON `informatica`.`fabricantes`
FOR EACH ROW
BEGIN
INSERT INTO cambios SET id = old.CODIGO, nombre_art = old.Nombre, usuario = CURRENT_USER(), fecha = CURRENT_TIMESTAMP;
END;

En este caso he utilizado old pues se trata de un delete en la tabla pero si fuese un update o insert se debe utilizar el alias New.

Ahora solo nos queda eliminar algun registro de la tabla fabricantes y revisar en la tabla cambios como ha quedado almacenda la información.

Nota: Para la creación de trigger hay que poseer atributos de super usuario del motor de bases de datos.

(Si falla revisar los puntos y comas ya que blogger me elimina algunos caracteres especiales al subir la información).

más informacion en wikipedia

x Jlara.

viernes, 10 de octubre de 2008

Cambiando la MAC en Linux


Hace mas o menos un mes tuve que instalar un servidor linux como Gateway, firewall y Proxi... en un hotel Conocido de la región.

La situación era la siguiente :

1. No existia una conexión de Internet dedicada y en su lugar había una DHCP de (VTR) empresa que se destaca por capturar la MAC Address de las tarjetas de red para asi solo entregar la conexión de Internet a un equipo.

Bueno inicialmente existia un router con la opción Clone Mac para compartir la conexión un una solo red.

Yo por mi Parte tenía que separar fisicamente la red en 2 redes.. hasta ahi todo ok... pero como además tenia que configurar un cortafuegos y compartir Internet me encontre con la necesidad que clonar la dirección MAC del router a la tarjeta eth0 de Linux (Debian 4.0)...

La forma de hacerlo.

1.- Instalar
aptitude install macchanger (apt-get install)

2.- Detener la red
/etc/init.d/networking stop

3.- Clonar MAC
$macchanger -m XX:XX:XX:XX:XX:XX eth0
Con esto último he ingreso la direccion MAC personalizada

4.- Iniciar la red
/etc/init.d/networking start

Con eso ya logre tener la Salida a Internet por la eth0.

Sin duda que se pueden hacer muchas cosas más y aunque machanger guada la MAC y las carga automaticamente, yo para asegurarme cree un pequeno script que se carga junto con el inicio de la red (para no perder la MAC).


ALGUNOS EJEMPLOS

# macchanger eth1
Current MAC: 00:40:96:43:ef:9c [wireless] (Cisco/Aironet 4800/340)
Faked MAC: 00:40:96:43:ef:9d [wireless] (Cisco/Aironet 4800/340)
# macchanger --endding eth1
Current MAC: 00:40:96:43:e8:ec [wireless] (Cisco/Aironet 4800/340)
Faked MAC: 00:40:96:6f:0f:f2 [wireless] (Cisco/Aironet 4800/340)
# macchanger --another eth1
Current MAC: 00:40:96:43:87:1f [wireless] (Cisco/Aironet 4800/340)
Faked MAC: 00:02:2d:ec:00:6f [wireless] (Lucent Wavelan IEEE)
# macchanger -A eth1
Current MAC: 00:40:96:43:39:a6 [wireless] (Cisco/Aironet 4800/340)
Faked MAC: 00:10:5a:1e:06:93 (3Com, Fast Etherlink XL in a Gateway)
# macchanger -r eth1
Current MAC: 00:40:96:43:f1:fc [wireless] (Cisco/Aironet 4800/340)
Faked MAC: 6b:fd:10:37:d2:34 (unknown)
# macchanger --mac=01:23:45:67:89:AB eth1
Current MAC: 00:40:96:43:87:65 [wireless] (Cisco/Aironet 4800/340)
Faked MAC: 01:23:45:67:89:ab (unknown)
# ./macchanger --list=Cray
Misc MACs:
Num MAC Vendor
--- --- ------
065 - 00:00:7d - Cray Research Superservers,Inc
068 - 00:00:80 - Cray Communications (formerly Dowty Network Services)
317 - 00:40:a6 - Cray Research Inc.

Visitar el sitio del creador de macchanger

Jlara