martes, 13 de octubre de 2009

Desarrollo web : PHP o ASP.NET

Introduccion:

Antes de empezar quiero decir que me declaro un ferviente admirador y seguidor de php, sobre todo con el giro que dio a Orientacion a objetos, esto hizo que el lenguaje sea mucho mas poderoso y profesional, ahora el objetivo de este blog, es dar pautas para las personas que estan pensando en incursionar en el apasionante mundo del desarrollo web, aun recuerdo los primeros pasos de las aplicaciones web cuando el html daba sus primero pasos y ya solo el hecho de tener diseñar un pagina web era un reto, ahora con el avance de la tecnologia web tenemos aplicaciones web sumamente poderosas que llegan a funcionar como si estuvieran instalada localmente en un PC gracias a la tecnologia AJAX, que no estan nueva que digamos , y que no es un invento de microsoft, sino que nace con el todo poderoso java, ahora incluso la conexion a bases de datos es algo tan normal en un website asi como librerias que ayudan a que el explorador se vuelve mas que un visor de paginas con bonitos colores, sino que se convierta en cliente de sistemas informaticos que apoyan a los objetivos de la empresa desde que cualquier lugar del mundo y desde cualquier sistema operativo e incluso desde cualquier dispositivo movil que tenga un explorador web... interesante no?.

Ventajas PHP5

- Facil y rapido de instalar.

- Automaticamente se configuran las opciones basicas, es decir te lo deja listo para programar.

- las aplicaciones contruidas con PHP son extremadamente ligeras

- Es el mejor medio educativo para dar los primeros pasos en POO y en el desarrollo web

- Hay full informacion en internet sobre el lenguaje como la pagina (http://www.phpclasses.org)

- Existen lilbrerias desarrolladas en PHP que permiten hacer cualquier cosa, hasta reconocimeinto de caracteres utilizando inteligencia artificial con redes competitivas.

- Tiene IDE's bastante buenos y robustos, como PHP designer.

- Obviamente es de uso Libre

Desventajas PHP5

- No existe un framework amigable para PHP (Desde mi punto de vista), he probado symphony , P4A , kumbia y todos ellos no tienen una interfaz grafica que te guie .

- Para agregarle funciones avanzadas como extensiones te va llevar lago de tiempo hasta investigar y editar los arhcivos de configuracion.

- Los IDE's no son integrados a un framework.

- EL desarrollo en PHP puede llegar hacer largo y complicado cuando utilizas arquitectura MVC con POO, es decir cuando haces desarrollo empresarial

- las configuraciones de seguridad en apache estan bajo tu total administracion, la mayoria de las instaladores de PHP y apache tipo wamp, xamp, y appserver, vienen seteados con seguridad baja, por lo que si haces un desarrollo para una empresa debes tomar en cuenta que necesitas tiemo para afinar la seguridad de tu servidor web.

- El sitio de PHP no brinda mayor ayuda, sobre el lenguaje, desde mi punto de vista suponen que eres experto en linux, por que aquellos pasos claves y basicos no te los explican.

- No tiene un debuger facil de implementar lo cual es escencial para un desarrollador, en mi humilde experiencia se que existen ,pero nunca he logrado activarlos son muy complicados,
insisto desde mi punto de vista.

- El codigo esta a la vista del cualquier perosna con acceso al servidor, por lo que te pueden meter mano en el codigo, e incluso obtener las claves de la acceso a la base de datos, todo eso tu lo tienes que controlar.

-La conexion a base de datos con my SQL es un juego de niños, pero si te toca interatuar con otras bases como informix u oracle si tendras que pasrte algunos dias investigado sobre el tema


Ventajas ASP.NET con c#

- Tiene un framework poderoso, facil de usar y super amigable.

- Su IDE esta integrado al farmework

- El debuger se configura y activa automaticamente, es decir despues de la instalacion esta listo para ser utilizado.

- Lo recomiendo cuando se desee construir un sistema web complicado con muchos modulos ya que te va hacer la vida mas facil al contruirlo y al dar mantenimiento.

- Te permite aplciar arquitectura MVC sin complicaciones.

- Su mantenimiento es claro no te pierdes en el codigo.

- Si lo instalas con vs Studio tendras un sin numero de librerias para utilizar en tu aplicacion, solo te relajas y construyes tu aplicacion web.

- Si deseas agregar funcionalidades adicionales a tu web, es cuestion de buscar las librerias en internet las encuentras en muchos sitios o tambien puedes buscar en la pagina de microsoft, y claro por ser microsoft vienen con sus wizards y ejemplos ( de nuevo te relajas y sigues construyendo tu sistema web)

- puedes compilar tu codigo delicado como dll's, es decir el Modelo y el controlador de tu sistema web, asi estas seguro que no sera legible por nadie mas, y solo tu vista queda legible.

- Si instalas asp.net con vs Studio adicionalmente tienes la posibilidad de crear proyectos para equipos mobiles con controles especificos para estos dispositivos, puedes crear webservices que pueden ser consumidos por cualquier plataforma incluso php.

- Los controles web vienen con templates modificables

-Al publicar tu aplicacion con el IIS por default el sito queda protegido puedo asegurar que es asi desde el framewor 2.0, incluso cuando hay errores en el runtime el servidor el envia al usuario una pagina de error estandard, es decir no le muestra el detalle de la exepcion, mientras que si navegas desde el servidor te dejara ver el error que provoco la caida de la aplicacion.

- Desde vs2005 puedes usar tecnologia AJAX solo arrastras y continuas construyendo tu aplicacion web

- Tienes la posibilidad de publicar tu sitio web generando un proyecto de instalacion web, esto le entregas al adminsitrador y con dos clics la aplicacion se instala donde debe estar, o puedes tambien publicar tu sitio desde el mismo visual studio seleccionando donde esta tu IIS en la red y el resto lo hace microsoft por ti.

-Puedes conectarte a cualquier base de datos con la misma facilidad, solo necesitas el driver del database y utilizar un libreria ODBC que viene por defecto con framework 2.0 en adelante.

Desventajas ASP.NET

- Claro como todo en la vida tanta maravilla tiene un precio, ASP.NET al venir con visual studio profesional tiene un precio, la licencia que activa al visual studio. lo bueno es que de ahi en adelante no le debes nada mas microsoft y puedes hacer las aplicaciones que quieras y distribuir a los clientes que desees sin ningun pago ni restriccion.

Hay tambien versiones de ASP.NET libres las puedes encontrar en http://www.asp.net/downloads/essential/, las cuales talvez no tengan todas las cosas que he descrito pero si la gran mayoria, incluso hay visual studio libre si deseas profundizar en entorno .NET.

- Para publicar tu sitio debes teber un servidor windows habilitado el IIS, debes pagar por la licencia del servidor windows pero no por IIS ni por los clientes que se contecten a tu web.

- No lo recomiendo para personas que estan dando sus primeros pasos en aplicaciones web, ya que al ser tan dinamico y facil de utilizar, no te permitira ver mas alla de lo evidente (sono como a leon O)y no tendras un conocimiento web solido lo cual te puede evitar de muchos dolores de cabeza cuando se presenten fallas en la aplicacion o en la contruccion de tu sistema web.

-Los sitios ocupan mas espacio en disco

Conclusiones:

En conclusion PHP5 como lo dije antes es un lenguaje poderoso con mucho futuro pero me parece que esta huerfano, la empresa que lo creo no le da la importancia que tiene, prueba de eso es el framework Zend es el mas complicado de utilizar y el menos amigable,y es creado por la casa de PHP, tambien es verdad que hay muy buenos intentos llenos de ganas y valentia para sacar adelante a PHP pero vienen de comunidades que obiamente no tienen los recursos como para desarrollar un "Visual Studio" para PHP, lo cual hace que pierda terreno frente a ASP.net, por lo tanto es logico que si vas a desarrollar una aplicacion web empresarial, desde mi punto de vista y por las horas de vuelo que llevo en le area debes utilizar ASP.net con C#, ahora si deseas desarrollar una aplicacion que no es complicada o si deseas aprender a desarrollar aplicaciones web como se debe, utiliza PHP5, pero sin ningun framework es mi consejo, solo asi te daras cuenta que hay atras de un framework y valoraras las herramientas que dispones para hacer tu aplicacion como javascript , CSS, el viejo html, y las utilizaras mejor cuando utilices un framework como el de ASP.net ya que en el fondo siguen utilizando la mismas herramientas.

domingo, 4 de octubre de 2009

VALE LA PENA PROTEGER ESPECIES ANIMALES

Hoy pasaron por la TV un documental del grupo Tierra, me dejo haciendo algunas reflexiones y talvez llegue un poco a comprender porque hay poblaciones donde se matan especies para fines comerciales, como todos sabemos hay muchas especies que estan en peligro de extinsion ya sea porque son cazadas descontroladamente o porque su medio ambiente esta desapareciendo, en cualquiera de estos casos hemos escuchado noticias que nos dejan el corazon chiquito al enterarnos de este comportamiento incrompresible de los humanos contra los animales, seguramente hemos pensado como es posible que una persona albergue tanta maldad tanta inconsiencia frente a una inminente desapracicion de especies que son importanes para el ecosistema y por ende para nuestra futura existencia... bueno hasta aqui creo que son palabras que todos hemos escuchado o sentido en algun momento, pero el reportaje que vi hoy justamente se hacia la siguiente pregunta y fue lo que cambio de cierta manera mi punto de vista frente a estas noticias tan desagradables, ¿Es dable gastar dinero protegiendo especies animales en peligro de existencion habieno tanta pobreza en el mundo?, se exponian casos de la india donde hay personas que mueren de inanicion, y en este pais se queria implementar un plan de proteccion animal con dinero del estado, y comentaba el experto en cuidado animal que es dificil hacer comprender a la autoridades la importancia de la proteccion animal y peor aun lograr que den parte de su presupuesto para el cuidado animal, incluso se han hecho campañas en los poblados donde se han dado estos hechos lamentables y la realidad que sea ha encontrado es que las personas lo hacen por que no tienen otra forma de llevar alimento a sus casas, explicarles de un futuro terrible para la humanidad sin animales queda sin piso pues tienen que pensar en el presente de sus familias..... y aqui hacian una reflexion mas tenaz, la conservacion de las especies en extinsion es un lujo de los paisas ricos de occiendente que no entiende la realidad de paises del tercer mundo?.... wow no.... me dejo sin palabras... me puse en un momento en los zapatos de esas personas, y hablo de los dueños de pequenas parcelas que después de todo un año de trabajo duro de toda la familia esperan recibir dinero para poder alimentarse, ahora si esa es mi realidad ... que haria yo si mi cosecha o mi ganado es asechado por alguna especie en exticion? o por mi pobreza es mas facil quemar la paja seca para poder sembrar mi cultivo mas rapido sin importarme que el habitat se alguna especie sea destrudido como sucede con el jabali enano....que haria para poder llevar un plato de comida a mis hijos.... depues de todo las personas que hacen estas cosas ya no parecen tan malvadas....lo hacen a veces por amor a sus familias pero que hacer al respecto cierto.... los cientificos respindieron a la pregunta que plantee al principio indicando que si vale la pena todo el dinero que pueda invertiri en preservar una especie animal en extinsion, pero que esta conservacion debe venir de la mano con el compromiso de los gobiernos de apoyar a los grupos mas vulnerables invirtiendo menos dinero en armas y en la guerra y mas en su poblacion y en el cuidado de sus especies animales.

Como conclusion puedo decir que no es bueno señalar o criticar el acto de una persona si no se tiene el conocimiento de todas las variables que entran en la ecuacion, y claro si estamos en posibilidad de tomar la decision de suspender alguna actividad que daña al planeta hagamoslo y si esta en nuestras manos dar soluciones alternativas de sustento economico ecologico a las pobalciones rurales alejadas de las grandes cuidades hagamoslo, cualquier cosa que hagamos hoy en pro del planeta sera para el beneficio de nuestras futuras generaciones.

viernes, 2 de octubre de 2009

INSTALANDO FIREWALL CON REDHAT E 5

Actualmente estoy empezando en mi trabajo un proyecto de instalacion de un firewall, gracias a nuestro super administrado de red elegimos red hat, se preguntan cual es el problema.. cierto, pues el problema es que soy nuevo en linux, he realizado algunos experimentos en la U con linux pero nada mas, esta es la primera vez que pondre un servidor linux en produccion y para colmo red hat, no conozco nada de este sistema operativo y he esuchado que es complejo su uso, todos los trabajos realizados anteriormente por mi persona en linux los he hecho con ubuntu me parece un buen sistema operativo y un buen intento de parecer un windows pero falta mucho para que lo llegue a reemplazar los usuarios desktop necesitamos algo mas facil de usar y productivo, es decir no tener que entrar a la famosa pantallita negra para arreglar el sonido del pc o esas cosas que hacen que linux sea para genios informaticos.

Bueno volviendo al tema el comienzo de la instalacion ha sido un poco traumatica, despues de luhcar con la configuracion RAID y con las particiones he logrado instalar el sistema operativo, pero cuando estaba a punto de cantar vicoria el sistema por momentos se volvia inestable, despues de pasar todo el dia de hoy revisando discos duros, particiones y configuraciones de RAID en linux he dado con la respuesta de la inestabilidad, tan solo tenia que acudir a la pagina del fabricante pero como buen informatico los manuales e intrucciones de instalacion se los utiliza cuando ya no sabemos que mas hacer, por que sera que somos mal llevados lo logico seria empezar por ahi no?, bueno resulta que el SERVIDOR DELL OPTIPLEX 7200 no es compatible con linux, segun lapagina de DELL el hardware solo es compatible con windows.... lo se malas noticias y mas aun se que se preguntan quien compro el equipo sin verificar eso... bueno gracias a Dios no fui yo, fue el encargado de infraestructura que cometio el error despues de una charla comprensiva con mi jefe y el super adminsitrador y su famosa frase yo te dije que revises eso primero, he aprendido mi primera leccion en linux...windows manda en compatibilidad con harware y si vas a instalar linux verifica que la maquina sea compatible.

miércoles, 18 de febrero de 2009

Ecualización del histograma de una imagen


La ecualización del histograma consiste, en una expansión del histograma de la imagen, dotando al mismo de mayor linealidad y haciendo que éste ocupe el ancho del espectro de tonalidades grises por completo


Ventajas


- Al ecualizar el histograma, vemos como los tonos que antes estaban más agrupados, ahora se han separado, ocupando todo el rango de grises, por lo que la imagen se está enriqueciendo al tener niveles de gris más distintos entre sí, mejorando, por tanto, la apariencia visual de la imagen.


- Un aumento del contraste: esta ventaja es consecuencia del punto anterior, ya que si hacemos que el histograma de la imagen ocupe todo el rango de grises, estamos aumentando la distancia entre el tono más claro y el más oscuro, convirtiendo a éstos, en blanco y negro y consecuentemente aumentando el contraste de la imagen.


- Constituye una regulación óptima y automática del contraste de la imagen. Evitando ajustes manuales que no llegan a localizar el equilibrio exacto en una imagen del blanco y el negro.


Desventajas


-Pérdida de información: puede ocurrir que a algunos pixeles que en la imagen original tenían distintos niveles de gris se les asigne, tras la ecualización global, al mismo nivel de gris. Por otro lado, hay casos en los que dos niveles de gris muy próximos se separen, dejando huecos en el histograma.


-Las bandas horizontales debido a una deficiente digitalización pueden resultar intensificadas, resaltando aún más este error indeseado.



A continuacion el codigo fuente en Java:

import ij.*;

import ij.process.*;

import ij.gui.*;

import java.awt.*;

import ij.plugin.filter.*;

public class Filtro_Equalizacion implements PlugInFilter

{ ImagePlus imp;
public int setup(String arg, ImagePlus imp)

{ this.imp = imp;

return DOES_ALL;

}
public void run(ImageProcessor ip)

{ int [] vec= ip.getHistogram();

int I=255;

for (int k=1; k<>

{

vec[k]=vec[k-1]+vec[k];

}
int w=ip.getWidth();

int h=ip.getHeight();

for(int i =0; i

for(int j= 0; j<=h;j++)

{

int img =(int)(ip.getPixel(i, j));

img=vec[img]*((I-1)/(i*j));

ip.putPixel(i,j,i,img);

}

}

}
}

Definicion de Contraste y Brillo

El contraste incrementa el cambio de luminosidad entre las zonas más oscuras o más claras de una fotografía, simulando a su vez, un mejor enfoque y claridad de imagen.El retoque del contraste es muy adecuado en fotografías un poco claras.

El contraste se define como la diferencia relativa en intensidad entre un punto de una imagen y sus alrededores.

Un ejemplo simple es el contraste entre un objeto de brillo constante sobre un fondo de un brillo constante. Si ambas superficies tienen el mismo brillo, el contraste será nulo, y el objeto tanto física como perceptivamente será indistinguible del fondo. Según se incrementa la diferencia en brillo el objeto será perceptivamente distinguible del fondo una vez alcanzado el umbral de contraste, que se sitúa alrededor del 0.3% de diferencia en brillo.

Calculo de contraste segun Michelson en imagenes periodicas simples



Donde CM es el contraste de Michelson, Lmax es el mayor valor de brillo de la imagen, y Lmin es el menor valor de brillo de la imagen.


A continuacion el codigo fuente en Java:

import ij.*;

import ij.process.*;

import ij.gui.*;

import java.awt.*;

import ij.plugin.filter.*;
public class Filter_Contraste implements PlugInFilter{

ImagePlus imp;
public int setup(String arg, ImagePlus imp)

{ this.imp = imp;

return DOES_8G;

}
public void run(ImageProcessor ip)

{ int w=ip.getWidth();

int n=ip.getHeight();

for(int i =0; i

for(int j= 0; j<=n;j++)

{

int p =ip.getPixel(i,j);

p = (int)(p*2+50);

if (p >255){

p=255;

}

ip.putPixel(i,j,p);

}

}

}
}


UMBRALIZACIÓN

Umbralizacion o binarizacion de Imagenes


Una imagen binaria es una imagen en la cual cada píxel puede tener solo uno de dos valores posibles 1 o 0. Cuando una imagen esta en esas condiciones es mucho mas fácil encontrar y distinguir características estructurales.


La forma mas común de generar imágenes binarias es mediante la utilización del valor umbral de una imagen a escala de grises; es decir se elige un valor limite (o bien un intervalo) a partir del cual todos los valores de intensidades mayores serán codificados como 1 mientras que los que estén por debajo serán codificados a cero.


Por ejemplo si de la imagen que se muestra a continuacion quisiera realizarse este tipo de operación de tal forma que los píxeles mayores a 128 sean considerados como 1 y los que son menores o iguales a 128 como cero




A continuacion el codigo fuente en Java:


import ij.*;

import ij.process.*;

import ij.gui.*;

import java.awt.*;

import ij.plugin.filter.*;
public class Filter_Umbralizacion1 implements PlugInFilter

{ ImagePlus imp;
public int setup(String arg, ImagePlus imp)

{ this.imp = imp;

return DOES_8G;

}
public void run(ImageProcessor ip) {

int w=ip.getWidth();

int n=ip.getHeight();

for(int i =0; i

for(int j= 0; j

int p =ip.getPixel(i,j);

//p = (int)(p*2+50);

if (p <50){

p=0;

}else if(p>=50){

p=255; }

ip.putPixel(i,j,p);

}

}

}
}


martes, 10 de febrero de 2009

UMBRALIZACIÓN

Técnica de segmentación (partición de la imagen en áreas con significado)
en imágenes con fondo uniforme y objetos a extraer



Tipos de Umbralización utilizando el histograma

–P-tile
–Modales
–Iterativos
–Adaptativos
–Variables

Codigo Fuente de funcion java:

import java.applet.*;
import java.awt.*;
import java.awt.Image.*;
import java.awt.event.*;
import java.awt.image.renderable.ParameterBlock;
import java.io.*;
import java.util.Hashtable;
import java.util.Vector;
import javax.media.jai.*;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.media.jai.Histogram;
import javax.media.jai.operator.HistogramDescriptor;
import javax.media.jai.RenderedOp;
import javax.media.jai.ROI;
import javax.media.jai.widget.ScrollingImagePanel;


public class umbralizacion extends Applet implements ItemListener, ActionListener{
//declaramos como variables globales todas las que deban ser accedidas por más de un método
public Choice menu;
private Button boton;
Image foto;
String fotoelegida;
int marcador,max1,max2,media1,media2 ;
int opciones[]=new int[7];
int cadena[]=new int[256];
//en el método init inicializamos la varible opciones y el entorno gráfico inicial
public void init() {
String eleccion;
for (int i=0; i<7; marcador="0;" eleccion="llaves" menu="new" fotoelegida="eleccion+" foto="getImage(getDocumentBase(),fotoelegida);" boton="new" fotoelegida="menu.getSelectedItem()+" foto="getImage(getDocumentBase(),fotoelegida);" marcador="menu.getSelectedIndex();//marcador" image1 =" JAI.create(" bins =" {256};" low =" {0.0D};" high =" {256.0D};" hist =" new" pb =" new" region =" null;" dst =" JAI.create(" hist =" (Histogram)" cadena =" hist.getBins(0);" max1="cadena[0];" media1="0;" media2="256;" max2="cadena[128];" i="0;">=max1) {
max1=cadena[i];
media1=i;
}

}

for (int j=128; j<>=max2) {
max2=cadena[j];
media2=j;
}

}

repaint(); //dibujamos en pantalla,la imagen elegida junto con su histograma

}

}

public void actionPerformed(ActionEvent e) {
//si se pulsa el botón Procesar imagen,realizamos la umbralización
RenderedOp image1 = JAI.create("fileload",fotoelegida);
int valor=opciones[marcador];//sólo realizamos el proceso si no lo hemos hecho antes
if (valor==0){
//declaramos las variables necesarias,teniendo en cuenta que el cambio de tipos
//numéricos en Java pasa por la creación de objetos numericos.
Integer mx1 = new Integer(max1);
Integer mx2 = new Integer(max2);
Integer m1 = new Integer(media1);
Integer m2 = new Integer(media2);
double vari1=0;
double vari2=0;
double vartemp1=0;
double vartemp2=0;
double f1;
double num;
double den1;
double f2;
double den2;
for ( int k=5; k<10;k++) ent =" new" f1="ent.doubleValue();" cad1 =" new" num=" Math.pow(f1,2.0F)/(-2.0F);" den1=" Math.log(cad1.doubleValue()/mx1.doubleValue());" vartemp1=" num/den1;" vari1="vari1+" cad2 =" new" den2=" Math.log(cad2.doubleValue()/mx2.doubleValue());" vartemp2=" num/den2;" vari2="vari2+" vari1="vari1/5;" vari2="vari2/5;" a="(0.5D/vari1-0.5D/vari2);" b="(m2.doubleValue()/vari2)-(m1.doubleValue()/vari1);" c="0.5D*(Math.pow(m1.doubleValue(),2.0F)/vari1)-0.5D*(Math.pow(m2.doubleValue(),2.0F)/vari2)+Math.log(mx2.doubleValue()/mx1.doubleValue());" u="(-1.0D*b" umbral=" new" bp =" new" procesada =" JAI.create(" ancho =" procesada.getWidth();" alto =" procesada.getHeight();" panel =" new" window =" new" max="1;//Para">max2) {
max=max1;
}
else {
max=max2;
}
g.drawRect( 349,49,2*257,402);
g.setColor(Color.white);
g.fillRect( 350,50,2*256,400 );
g.setColor(Color.black);
g.drawString("Histograma de "+ fotoelegida,370,440);
for ( int n=0; n<255;n++) {//representamos el histograma normalizado a su máximo
if (max!=0){
g.setColor( Color.black );
g.drawRect(350+n*2,400-(cadena[n]*350)/max,2,(cadena[n]*350)/max);
g.setColor(Color.blue);
g.fillRect(350+n*2,400-(cadena[n]*350)/max,1,(cadena[n]*350)/max-1);
}
}
}
}