Evita acoplamiento al remitente de una petición a su receptor dando la posibilidad de un objeto de tramitar la solicitud. Cadena de la recepción de los objetos y pasar la solicitud a lo largo de la cadena hasta que un objeto se ocupa de él.
Este Patron es muy poco usado.
Participantes
Las clases y / o de los objetos que participan en este modelo son:
* Handler
Define una interfaz para el manejo de las solicitudes
(Opcional) implementa el sucesor enlace
* ConcreteHandler
Se ocupa de las solicitudes que es responsable
Puede acceder a su sucesor
Si el ConcreteHandler puede tramitar la solicitud, lo hace; de otra forma, lo que remite la solicitud a su sucesor
* Client
Inicia la petición a un ConcreteHandler objeto en la cadena
Puedes bajar el ejemplo y probarlo en tu pc. Fue desarrollado en Eclipse con Java 1.6SE
[descargar]
Este es el codigo Java,
abstract class Handler{
protected Handler successor;
public void SetSuccessor(Handler successor){
this.successor = successor;
}
public abstract void HandleRequest(int request);
}
class ConcreteHandler1 extends Handler{
public void HandleRequest(int request){
if (request >= 0 && request < 10){
System.out.println(this.getClass().toString() + " handled request " + request);
} else if (successor != null){
successor.HandleRequest(request);
}
}
}
class ConcreteHandler2 extends Handler{
public void HandleRequest(int request) {
if (request >= 10 && request < 20){
System.out.println(this.getClass().toString() + " handled request " + request);
} else if (successor != null){
successor.HandleRequest(request);
}
}
}
class ConcreteHandler3 extends Handler{
public void HandleRequest(int request) {
if (request >= 20 && request < 30){
System.out.println(this.getClass().toString() + " handled request " + request);
}else if (successor != null){
successor.HandleRequest(request);
}
}
}
public class Main {
public static void main(String[] args) {
// Configuracion del Chain of Responsibility
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();
Handler h3 = new ConcreteHandler3();
h1.SetSuccessor(h2);
h2.SetSuccessor(h3);
// Generar y procesar request
int[] requests = {2, 5, 14, 22, 18, 3, 27, 20};
for(int request : requests){
h1.HandleRequest(request);
}
}
}
lunes, 19 de noviembre de 2007
miércoles, 7 de noviembre de 2007
Problema Javac java lang OutOfMemoryError
Muchos desarrolladores Java habrán tenido este error al tratar de compilar una gran cantidad de clases, java.lang.OutOfMemoryError:
The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: Java heap space
Si estas compilando con javac em Apache Ant, sete el atributo fork como true, para correr javac en un proceso separado con su propio espacio. Si el atributo fork es seteado false o no es seteado (por defecto es false), javac correra en el mismo proceso que Ant y su heap size sera de 64m.
<javac fork="true"
srcdir="${basedir}/src"
destdir="${basedir}/build/classes"
classpath="${project.classpath}"
memoryinitialsize="256m"
memorymaximumsize="256m">
</javac>
Si no quieres modificar el archivo build.xml, otra opcion es incrementar el heap size de la JVM Ant y seguir ejecutando javac. Solo necesitas setear la variable de entorno ANT_OPTS:
export ANT_OPTS="-Xms256m -Xmx256m" (ksh/bash)
setenv ANT_OPTS="-Xms256m -Xmx256m" (tcsh/csh)
set ANT_OPTS="-Xms256m -Xmx256m" (Windows)
De estas maneras podrás lograr compilar tus clases java si te sale este problema de memoria
;)
Protege tu Sitio Web sin usar CAPTCHA
Aqui posteo una solucion para evitar q tu sitio web sea objeto de spam
1. Añada el campo de entrada a su formulario, con algun nombre interesante por ejemplo 'URL'.
<input name="url" value="" type="text">
2. Esconde el textbox utilizando estilos css para que los usuarios (auténtico) no puede ver directamente.
<style>
.style1 {
display: none;
}
</style>
<p class="style1"><input name="url" value="" type="text">
3. El form verifica si el "URL" contiene algun valor. Si es así, rechazar el envio.
if (strlen(trim($_POST['url'])) > 0){
//It is a spam, reject this post here
}
//It is a spam, reject this post here
}
4. ¿Por qué esto funciona? Bueno, funciona simplemente porque los usuarios no pueden ver un cuadro de entrada oculto en su formulario y, por lo tanto, no van a ocupar de él, mientras que los robots lo van a hacer.
lunes, 22 de octubre de 2007
Como Proteger tus consultas PHP-MySQL del Sql Injection
El Sql-Injection es una gran preocupación a la hora de crear sitios o sistemas web para los desarrolladores, es una tecnica de hacking en donde el atacante puede obtener informacion importante y llegar a corromper o destruir tu base de datos.
Una practica simple puede ayudarte a proteger tu aplicación y por que no decir hasta tu "negocio" de intrusos que no deseas. En PHP es la manera más fácil de transmitir sus datos a través de la función mysql_real_escape_string. Al escapar los caracteres especiales en los campos donde el usuario puede manipular la base de datos, usted evitar ser vulnerables.
Una practica simple puede ayudarte a proteger tu aplicación y por que no decir hasta tu "negocio" de intrusos que no deseas. En PHP es la manera más fácil de transmitir sus datos a través de la función mysql_real_escape_string. Al escapar los caracteres especiales en los campos donde el usuario puede manipular la base de datos, usted evitar ser vulnerables.
Ejemplo :
// This is a vulnerable query.
$query = "SELECT * FROM products WHERE name='$productname'";
mysql_query($query);
// This query is more secure
$query = sprintf("SELECT * FROM products WHERE name='%s'",
mysql_real_escape_string($productname));
mysql_query($query);
La parte más importante de ti mismo es poner fin a la protección de los usuarios de ser capaces de pasar sin alterar la base de datos de manipulación de los caracteres especiales, como comillas simples.
viernes, 12 de octubre de 2007
Patron de Diseño Builder, Java
El Patrón de diseño Builder o Constructor es usado para permitir la creación de una variedad de objetos complejos desde un objeto fuente(Producto), el objeto fuente se compone de una variedad de partes que contribuyen individualmente a la creación de cada objeto complejo a través de un conjunto de llamadas a interfaces comunes de la clase Abstract Builder.
Este patrón es medianamente usado.
Su intención es de abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto, de tal forma que el mismo proceso de construcción pueda crear representaciones diferentes.
Las clases y/u objetos que participan en este patron son los siguientes:
Puedes bajar el ejemplo y probarlo en tu pc. Fue desarrollado en Eclipse con Java 1.6SE
[descargar]
Este es el codigo:
public class Director {
//Builder uses a complex series of steps
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
public abstract class Builder {
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product getResult();
}
public class ConcreteBuilder1 extends Builder{
private Product product = new Product();
@Override
public void BuildPartA() {
product.Add("PartA");
}
@Override
public void BuildPartB() {
product.Add("PartB");
}
public Product getResult()
{
return product;
}
}
public class ConcreteBuilder2 extends Builder{
private Product product = new Product();
@Override
public void BuildPartA() {
product.Add("PartX");
}
@Override
public void BuildPartB() {
product.Add("PartY");
}
public Product getResult()
{
return product;
}
}
import java.util.ArrayList;
public class Product {
ArrayList parts = new ArrayList();
public void Add(String part)
{
parts.add(part);
}
public void Show()
{
System.out.println("\nProduct Parts -------");
for(Object part:parts)
System.out.println(part);
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// Create director and builders
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
// Construct two products
director.Construct(b1);
Product p1 = b1.getResult();
p1.Show();
director.Construct(b2);
Product p2 = b2.getResult();
p2.Show();
}
}
Saludos
Askpipe99
Este patrón es medianamente usado.
Su intención es de abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto, de tal forma que el mismo proceso de construcción pueda crear representaciones diferentes.
Las clases y/u objetos que participan en este patron son los siguientes:
- Builder
- Define una interfaz abstracta para crear productos
- ConcreteBuilder
- Implementación de la interfaz Builder
- Construye y reune las partes necesarias para construir los productos
- Director
- Construye un objeto usando la interfaz Builder
- Producto
- El objeto complejo bajo construcción
- Metodos Propios
Puedes bajar el ejemplo y probarlo en tu pc. Fue desarrollado en Eclipse con Java 1.6SE
[descargar]
Este es el codigo:
public class Director {
//Builder uses a complex series of steps
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
public abstract class Builder {
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product getResult();
}
public class ConcreteBuilder1 extends Builder{
private Product product = new Product();
@Override
public void BuildPartA() {
product.Add("PartA");
}
@Override
public void BuildPartB() {
product.Add("PartB");
}
public Product getResult()
{
return product;
}
}
public class ConcreteBuilder2 extends Builder{
private Product product = new Product();
@Override
public void BuildPartA() {
product.Add("PartX");
}
@Override
public void BuildPartB() {
product.Add("PartY");
}
public Product getResult()
{
return product;
}
}
import java.util.ArrayList;
public class Product {
ArrayList
public void Add(String part)
{
parts.add(part);
}
public void Show()
{
System.out.println("\nProduct Parts -------");
for(Object part:parts)
System.out.println(part);
}
}
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// Create director and builders
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
// Construct two products
director.Construct(b1);
Product p1 = b1.getResult();
p1.Show();
director.Construct(b2);
Product p2 = b2.getResult();
p2.Show();
}
}
Saludos
Askpipe99
Suscribirse a:
Entradas (Atom)