miércoles, 25 de febrero de 2009

El modelo Google, un modelo innovador

Un modelo innovador, así es como cataloga Bernard Girard al modelo de negocio de Google en su libro titulado “The Google Model”, aunque la historia de Sergey Brin y Larry Page se parece a la de muchos de los empresarios como; Steve Jobs y Bill Gates, Herry Ford y Alfred Sloan, ellos decidieron llevar su empresa de una manera poco convencional.

Estoy leyendo el libro por segunda vez, la verdad es que me parece que es una buena inversión, para aquellos que desean crear una compañía,ayuda a tener idea de los modelos administrativos que pueden servir como referencia a la hora de emprender su propio negocio.

Les dejo el enlace de Bernard Girard hablando sobre su libro, en lo personal lo recomiendo.

sábado, 14 de febrero de 2009

Usando CORBA con el compilador de java

En 4 pasos describiré como usar corba.

PASO 1:
Lo primero que hay que hacer es crear el idl, la interface que deberá ser implementada

ClienteRemoto.idl
module ClienteRemoto{
              interface ClienteRem
             {
                   string Saludar(in string nombre);
     };
};
Esta idl será compilada para usar POA (Portable Object Adaptor) con el comando idlj de java :
>idlj -fall ClienteRemoto.idl

este comando creará una carpeta de nombre ClienteRemoto dentro de ella existirá el codigo necesario tanto en el servidor y en el cliente 

PASO 2:
Implementamos la interface que se creó usando el idl , crearemos un archivo llamado ClienteRemImp.java y haremos que extienda de la interface ClienteRemotoPOA que se encuentra en la carpeta  ClienteRemoto

ClienteRemImpl.java

public class ClienteRemImpl extends ClienteRemoto.ClienteRemPOA
{
                 public ClienteRemImpl(){}
                 public String Saludar(String nombre){
                        return "Hola "+nombre;
                  }
}
PASO 3 
Crear el Servidor que se quedará escuchando por peticiones

Servidor.java

import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
                         public class Servidor{
                             public static void main(String[] args){
                                      //inicializa orb 
                                        System.out.println("Iniciando");
                                       try {
                                               // crear e inicializar ORB
                                               ORB orb = ORB.init(args, null);
                                                // crear un objeto remoto
                                              ClienteRemImpl impl = new ClienteRemImpl();
                                               // obtener referencia rootpoa y activar el POAManager
                                               POA rootpoa = POAHelper.narrow(orb
                                                                                  .resolve_initial_references("RootPOA"));
                                              rootpoa.the_POAManager().activate();
                                             // obtener una referencia al objeto remoto
                                               org.omg.CORBA.Object ref = rootpoa.servant_to_reference(impl);
                                             ClienteRemoto.ClienteRem href =                                    ClienteRemoto.ClienteRemHelper.narrow(ref);
                                               // las siguientes lineas me permiten publicar un obj remoto
                                                org.omg.CORBA.Object objRef = orb
                                                                   .resolve_initial_references("NameService");
                                                NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
                                               // nombre con el cual voy a publicar mi objeto
                                                 String nombre = "ClienteRemoto";
                                                 NameComponent path[] = ncRef.to_name(nombre);
                                                // publicar el objeto
                                                 ncRef.rebind(path, href);
                                                // ejecutar el orb
                                                orb.run();
                                      } catch (Exception e) {
                                                   System.err.println("ERROR: " + e);
                                     }
       }
}
Paso 4
Crear el cliente, que usará los objetos remotos

Cliente.java 

import org.omg.CORBA.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
     public class Cliente {
        public static void main(String args[]) {
            try{
                ORB orb = ORB.init(args,null);
// obtener una referencia a NameService
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// las siguientes lineas nos permiten obtener una ref a un objeto remoto
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// nombre del obj remoto
String nombre = "ClienteRemoto";
   ClienteRemoto.ClienteRem impl =ClienteRemoto.ClienteRemHelper.narrow(ncRef.resolve_str(nombre));
System.out.println(impl.Saludar("Irene"));
}
catch (Exception e) {
System.out.println("ERROR : " + e);
e.printStackTrace(System.out);
}
}
}
 Ahora si, a compilar y usar, en la ventana de comando nos movemos al directorio donde hemos creado estos archivos y ejecutamos
 
> java *.java

luego en consolas  diferentes ejecutamos

>orbd -ORBInitialPort 2500
 
>java Servidor -ORBInitialPort 2500
 
>java Cliente -ORBInitialPort 2500

y hemos creado el hola mundo distribuido usando CORBA , espero sea útil.









viernes, 6 de febrero de 2009

Para reflexionar un poco!!!!

Como ayudante de cátedra de la materia Estructura de datos materia dictada en una universidad X de nuestro querido Ecuador, tuve que dar un pequeño taller de como usar la librería Gráfica GraphApp para que los compañeros tomando la materia pudieran hacer su proyecto final, aunque no comparto la idea de que aún se use esta librería cuya última actualización fue en el 2007, y cuya librería que no la volverán a utilizar en su vida a menos que se conviertan en ayudante de la materia en esta universidad X, como yo, pese a esto el taller fue dictado.

Leyendo El Universo, períodico muy conocido en nuestro medio, en la sección de tecnología hallé una noticia que decía niño de 9 años creó una aplicación para el Iphone.. Que contraste este tipo de noticias contra la pequeña introducción mencionada para este entrada, no queda más que concluir que en este país nos falta creatividad, tecnología y ganas. Mientras el común denominador de los ingenieros en computación salimos al mercado laboral a desarrollar el software contable, el modulo de inventario y roles de pago, el sistema académico, mientras sigamos inventando la rueda, de este país no saldrá un google un yahoo un amazon. Nos hace falta estar más informados de lo que sucede en el mundo, hay que estar en la jugada.... algo que es un poco difícil de conseguir!!!, pues las universidades del Ecuador sacan profesionales mediocres....