miércoles, 26 de mayo de 2010

XAMPP, un servidor web en tu MEMORIA USB


Hay veces que no funciona la conexión a Internet o no nos interesa que los alumnos se distraigan e impedimos el acceso, en otras ocasiones nos es necesario distribuir archivos de forma rápida y sencilla entre varios ordenadores, sin depender del ancho de banda de la conexión exterior o de las carpetas compartidas, permisos, límite de 10 usuarios, contraseñas y topología general de la red de ordenadores del aula de informática.

Servidor web en un pendrive

Una posible solución a estos problemas es disponer de un servidor web local, en este tutorial vamos aprender cómo tener un servidor web con XAMPP, siempre disponible en nuestro lápiz de memoria USB, ocupando 132 MB y listo para ser ejecutado desde cualquier ordenador con Windows (XAMPP es multiplataforma pero únicamente está disponible en portable para los sistemas operativos de Microsoft y sólo para los de 32 bits).

Básicamente lo que tenemos que hacer es obtener el software y configurarlo, después de instalado deberemos ejecutar un archivo para poner en marcha el servidor y otro cuando queramos pararlo.

Obtención, instalación y configuración de XAMPP

Conseguir el sevidor web portable XAMPP.

  • El servidor web portable se puede bajar aquí . La versión Lite (17 MB) nos vale para un servidor web sencillo.
  • Guardamos el fichero en nuestro pendrive.

Instalarlo en nuestro pendrive

  • Localizar el archivo xampplite-win32-1.7.1.exe donde lo hayamos guardado y hacer doble clic en él para descomprimirle.
  • Debemos elegir el directorio raíz (el de más alto nivel) de nuestro pendrive. En nuestro ejemplo la letra asignada a la unidad del pendrive es F:

Elegir como directorio de destino de la  instalación seimpre el directorio de más alto nivel de nuestro pen  drive, en este caso la unidad asignada es F: y por tanto el directorio  de raíz es F:/

  • Esperar a que se descomprima. Puede tardar un rato.

Arrancar el servidor

  • En nuestro pendrive habrá un directorio llamado xampplite. Entrar en ese directorio y hacer doble clic en el archivo "xampp_start.exe". Es posible que salte alguna alarma del firewall, en cuyo caso habrá que configurarlo para que deje ejecutarse a los procesos httpd.exe (servidor Apache) y mysqld.exe (servidor MySQL).

Cambiar las contraseñas por defecto

  • Escribir en un navegador de internet la dirección http://localhost/security/
  • Elegir "Español" en la barra de la izquierda como idioma, por defecto sale en alemán.


Elegir español en la barra de la izquierda para cambiar el  idioma



Hacer clic en el enlace  http://localhost/security/xamppsecurity.php para cambiar las contraseñas  por defecto

  • Cambiar la contraseña de root de MySQL introduciéndola por duplicado en las cajas de texto tituladas "New Password" y "Repeat the new password", y luego hacer clic en el botón "Password changing".



Introducir contraseña para el usuario root de MySQL

Opcional

  • Si queremos que sólo alguien con usuario y contraseña acceda a nuestro servidor, introducir usuario y contraseña para el XAMPP en las cajas de texto "User" y "Password" y darle al botón "Make safe the XAMPP directory".



Introducir usuario y contraseña para XAMPP



Configurar la página web de inicio

  • Ir al directorio xampplite/htdocs.
  • Cambiar de nombre el arvhivo index.php a index.php.copia. Lo que queremos es cambiarle la extensión php a ese archivo para que no se ejecute y así el servidor muestre como inicio index.html. Si no lo hacemos, muestra la página del XAMPP configurada en el index.php.
  • Editar el archivo index.html con lo que queramos que aparezca en la página principal de nuestro servidor.
  • En nuestro ejemplo la página principal del servidor ofrece la descarga de 2 aplicaciones portables que hemos movido al directorio xampplite/htdocs.
  • El código del archivo index.html lo hemos editado con el Kompozer.


Resultado final: Sencilla forma de que los alumnos  descarguen 2 apliaciones.



¡Listo! Sólo queda teclear en la barra de direcciones del navegador la dirección ip de nuestra máquina y podremos ver lo mismo que verán los usuarios que hagan lo mismo desde sus ordenadores. Ahora con un simple clic se podrán bajar las aplicaciones compartidas, con todo el ancho de banda de la red local.

Para parar el servidor (imprescindible antes de poder retirar el pendrive) a la carpeta xampplite del pendrive y ejecutar "xampp_stop.exe".

Funcionamiento una vez instalado y configurado

Una vez instalado y realizados todos los pasos descritos arriba, para tener nuestro servidor disponible sólo tendremos que:

1. Insertar el pendrive en un ordenador.

2. Ir a la carpeta xampplite y ejecutar "xampp_start.exe".

3. Averiguar la IP del ordenador.

  • Hacer clic en el botón de inicio
  • Hacer clic en "Ejecutar..." (en Windows Vista no es necesario este paso, se pueden ejecutar órdenes directamente en la casilla de búsqueda).
  • Escribir "cmd" (sin comillas) en la caja de texto para abir un terminal o consola..
  • Escribir "ipconfig" en el terminal.


La dirección IP en windows aparece como Dirección IPv4
  • Identificar la dirección IPv4, en el caso de la imagen es 192.168.1.13

4. Compartir la dirección con los alumnos, que deberán teclear en la barra de direcciones de su navegador.

  • En nuestro caso: http://192.168.1.13

5. Para terminar y extraer el pendrive.

  • Acceder a la carpeta xampplite dentro del pendrive y ejecutar "xampp_stop.exe".
  • Extraer el pendrive normalmente ("Quitar hardware de forma segura").

Conectar una bd con mysql

http://apdaza-poo.blogspot.com/2007/09/conectar-java-con-mysql.html

Un Timer en JAVA

Como se puede programar una tarea repetitiva y automática en un aplicativo tipo Swing de java?, esta pregunta me la plantearon los alumnos de programación orientada a objetos, mi respuesta un Timer. Pero veamos como se hace esto.

La idea es generar una aplicación con una etiqueta que usaremos como display del contador y tres botones con las acciones de iniciar, parar y reset.


El contador se mantendrá contando una ves pulsemos el botón Iniciar y solo se detendrá al pulsar el botón Parar; si pulsamos el botón Reset su contador debe regresar a cero.


Para este fin utilizaremos la clase Timer de java.util, entonces nuestros imports quedaran de la siguiente manera:

import java.awt.*;

import java.awt.event.*;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.*;


Para poder manejar una tarea de manera automática y repetitiva debemos sobre-escribir el método run de la clase TimerTask; para esto crearemos una clase interna que llamaremos RemindTask y nuestro método run quedara como sigue:


class RemindTask extends TimerTask {
public void run() {
segundos++;
lblTime.setText(String.valueOf(segundos));
if(frozen){
System.out.println("Terminamos la ejecucion del timer");
timer.cancel();
}
}
}


Este método lo único que hace es incrementar una variable segundos y cargar este valor en el display de nuestro contador. Recuerden que dijimos que era una clase interna, así que se debe declarar dentro del cuerpo de la clase de la interfaz gráfica con lo que el código total queda de la siguiente manera:


public class AppContadorSwing implements ActionListener{
JFrame frame;
JPanel panel;
JButton btnIniciar,btnParar,btnReset;
JLabel lblTime;
Timer timer;
int segundos;
//manejar el valor del contador
boolean frozen;
//manejar el estado del contador

public AppContadorSwing() {
frame = new JFrame("Contador Swing");
panel = new JPanel(new GridLayout(1,3));
btnIniciar = new JButton("Iniciar");
btnIniciar.addActionListener(this);
btnParar = new JButton("Parar");
btnParar.addActionListener(this);
btnReset = new JButton("Reset");
btnReset.addActionListener(this);
lblTime = new JLabel("0",SwingConstants.CENTER);

panel.add(btnIniciar);
panel.add(btnParar);
panel.add(btnReset);

frame.getContentPane().add(lblTime, BorderLayout.NORTH);
frame.getContentPane().add(panel, BorderLayout.SOUTH);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();
frame.setVisible(true);

frozen = true;
//iniciamos el estado en congelado
segundos = 0;
}

//clase interna que sobre-escribe el metodo run de TimerTask

class RemindTask extends TimerTask {
public void run() {
segundos++;
lblTime.setText(String.valueOf(segundos));
if(frozen){
System.out.println("Terminamos la ejecucion del timer");
timer.cancel();
//detenemos el timer
}
}
}

public void actionPerformed(ActionEvent a) {
System.out.println(a.getActionCommand());
if(a.getActionCommand().equals("Iniciar")){
frozen = false;
timer = new Timer();
//le asignamos una tarea al timer
timer.schedule(new RemindTask(),0, 1*100);
}
if(a.getActionCommand().equals("Parar")){
frozen = true;
}
if(a.getActionCommand().equals("Reset")){
frozen = true;
segundos = 0;
lblTime.setText(String.valueOf(segundos));
}
}

public static void main(String[] args){
JFrame.setDefaultLookAndFeelDecorated(true);
AppContadorSwing c = new AppContadorSwing();
}
}


En color verde van los comentarios que afectan la ejecución del timer como tal, el resto del código se refiere a la interfaz gráfica, que no es tema de esta guía.

jueves, 22 de abril de 2010

Clase prueba objeto imagenes y refuerzo

package capagrafica;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import capacodigo.codigos;

public class formulario {
JFrame miframe;
JPanel mipanel,otropanel;
JTextField texto;
JButton boton;
public JLabel imagen1;



public static void main(String arg[]){

formulario form=new formulario();

}


public formulario(){


miframe= new JFrame("GRITADOR!!!!");
miframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


mipanel=new JPanel(new GridLayout(1,3));
otropanel=new JPanel(new GridLayout(1,1));

texto= new JTextField(10);
boton=new JButton("GRITAR");

ImageIcon Img3 = new ImageIcon("Imagen/ceres.JPG");//SE CREA UNA OBJETO ima DE LA CLASE ImageIcon
imagen1 = new JLabel(Img3);//SE AGREGA EL OBJETO ima AL LABEL imagen

mipanel.add(texto);
mipanel.add(boton);

mipanel.add(imagen1);

boton.addActionListener(new ActionListener(){




public void actionPerformed(ActionEvent e) {
codigos hacer= new codigos();


hacer.mostrar(texto.getText());


}
});



miframe.getContentPane().add(mipanel,BorderLayout.NORTH);
miframe.getContentPane().add(otropanel,BorderLayout.CENTER);



miframe.pack();
miframe.setVisible(true);


}


}

martes, 20 de abril de 2010

¿Qué es la Programación por Capas?


La programación por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño; un ejemplo básico de esto consiste en separar la capa de datos de la capa de presentación al usuario.

Veamos como se utiliza y cuales son las mejores prácticas:

tres_capas

La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio, sólo se ataca al nivel requerido sin tener que revisar entre código mezclado. Un buen ejemplo de este método de programación sería el modelo de interconexión de sistemas abiertos.

Modelo de 3 Capas:

  1. Capa de presentación: es la que ve el usuario (también se la denomina “capa de usuario”), presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso.
  2. Capa de negocio: es donde residen los programas que se ejecutan, se reciben las peticiones del usuario y se envían las respuestas tras el proceso. Se denomina capa de negocio (e incluso de lógica del negocio) porque es aquí donde se establecen todas las reglas que deben cumplirse.
  3. Capa de datos: es donde residen los datos y es la encargada de acceder a los mismos. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio.

Mejores Prácticas de la capa de Reglas de Negocio:

Toda regla de negocio debe ser implementada en esta capa; la capa de negocios debería ser vista como un conjunto de servicios expuestos a las capas de presentación de las aplicaciones. Es muy importante definir y diseñar los componentes de esta capa en términos de negocios. Por ejemplo, un componente podría ser ServiciosFinancieros, una clase dentro de este componente podría ser ServiciosBancarios, y un método dentro de la clase podría ser ObtenerBalances. Estos componentes deberían estar orientados a las tareas y no orientados a las entidades, para facilitar el desarrollo y mantenimiento de las aplicaciones.

En las aplicaciones DNA, los componentes de negocio generalmente residen en COM+ (COM+ para Windows 2000 y servidor .NET con Microsoft Transaction Server para Windows NT). El motivo para esto es que COM+ provee la infraestructura necesitada por aplicaciones de alta disponibilidad, escalables, de buen comportamiento y desempeño; algunos de los servicios de infraestructura proporcionados por COM+ son grupos de threads (thread pooling), grupos de objetos (object pooling), sincronización, administración de transacciones distribuidas, invocaciones asíncronas, y otros mas.

Muchos de los problemas al interrumpir el servicio de una aplicación, con síntomas como que el IIS deje de responder, degradación del servicio, etc., recae en componentes que no cumplen con las mejores prácticas.

Mejores Prácticas de la capa de Acceso a Datos:

El objetivo de la capa de acceso a datos es el de abstraer los detalles del formato y localización del almacén de datos, de las capas de presentación y negocios. La meta principal por la cual hacer esto es que esto provee la habilidad de cambiar a una fuente de datos distinta sin tener que impactar al resto de las capas de la aplicación. Esta capa usualmente está compuesta de componentes que corren en COM+ y de una fuente de datos, que muchas veces es una base de datos acceder a través de procedimientos almacenados.

Las siguientes mejores prácticas aplican a objetos de datos ActiveX (ADO) sin embargo algunos pueden aplicar también a otros modelos de conexión:

  1. Devolver siempre Recordsets desconectados
  2. Siempre abrir Recordsets con tipo de cursor Static
  3. Guardar una copia en el caché del servidor de los datos estáticos y usados frecuentemente.
  4. Adquirir recursos tarde y liberarlos temprano.
  5. No devolver un Recordset para los métodos que solo devuelven un registro.
Articulo sacado de el sitio web http://www.videoaprendizaje.net

jueves, 15 de abril de 2010

CLASE CERES POZON 15 de abril 2010

Saludos muchachos.....

Para solucionar las dudas de los estudiantes con respecto al colocar una imagen...

lo primero es crear un paquete en el proyecto llamado "imagenes" donde guardaremos las imagenes

luego debo crear una variable tipo LABEL para que carge la imagen en la clase de la interfaz asi.

public JLabel imagen1;

label para la imagen: donde imagen1 es la variable que nombro para el label que contiene la imagen.....(recuerde que JLabel es el nombre del objeto LABEL o etiqueta en JAVA).


este codigo va en el constructor de la clase......

donde "img3" es la variable que nombro para crear la imagen...

ImageIcon Img3 = new ImageIcon("Imagen/Euro.JPG");
//SE CREA UNA OBJETO ima DE LA CLASE ImageIcon

image1 es la variable que creee anteriormente...recordemos que es la variable para crear el label y le paso como parametro mi variable imagen "img3" que contiene la imagen en ves de un texto


imagen1 = new JLabel(Img3);//SE AGREGA EL OBJETO ima AL LABEL imagen



pImag: es un panel cualquiera donde adiciono la imagen para mostrarla en el formulario------


pImag.add(imagen1); //SE AGREGA EL LABEL AL PANEL

martes, 6 de abril de 2010

CODIGO IMAGEN

Icon Imgboton= new ImageIcon(getClass().getResource("/imagenes/yopreynaldo.jpg"));
boton.setIcon(Imgboton);