viernes, 9 de octubre de 2009

Entre Java y C#

Hace tiempo ando liado con un proyecto en java con el que poder controlar remotamente mi ordenador desde cualquier sitio de la red. Lo mejor de hacerlo en java por supuesto es que, una vez lo tenga terminado, podria portarlo a cualquier plataforma sin tocar una linea de codigo. Vale, esta bien, si ahroa tengo un Vista o un XP lo mas seguro es que mas adelante lo que tenga sea un Windows 7…. pero no esta de mas tener esa posibilidad.

El proyecto empezo con los problemas previsibles de que hasta ahora la unica comunicacion por internet que yo habia hecho era un programita estilo chat… lo cual no tenia mucho lio, pero ahroa la intencion era poder controlar en la mayor medida posible mi ordenador desde la web, y esto incluia desde poder ver mi escritorio hasta subir o bajar archivos de mi disco duro. Algunos problemas se solventaron, otros quedaron en el aire, pero la cosa quedo paralizada hace algunas semanas cuando buscando añadirle nuevas funcionalidades, se me ocurrio que no estaria de mas poder saber si alguien andaba trasteando mi ordenador sin mi permiso, por lo tanto deberia de enterarme si alguien estaba tocando mi teclado o raton… y aqui es donde java se encuentra ante una falla insalvable

Java, y todas las ventajas que tiene, depende de su maquina virtual, una maquina que si bien es capaz de generar eventos de bajo nivel si yo se lo pido amablemente (teclear algo, mover el raton) es un tanto terca en cuanto al efecto contrario. No hay manera de pedirle que si ocurre algun evento de bajo nivel (supuestamente generado por un usuario que esta tocando cosas sin mi permiso, no los que yo mismo lanzo) que me avise de algun mudo, que mande un evento a mi aplicacion, que me diga algo… pero no, mi aplicacion permanece asilada en su mundo virtual donde solo hay eventos si el usuario pone la aplicacion en primer plano…

Como no tengo problema en aprender otros lenguajes de programacion, y como tengo ganas desde hace tiempo de meterme un poco en las tecnologias .NET, decidi “traducir” mi programa a alguno de los Cs, (C, C++ ó C#). Los problemas no terminan aqui.

Primero pense en C++, no tan complicado como C (para alguien que no ha visto apenas nada de C), y con una orientacion a objetos… no podia ser demasiado dificil. O si podia. Lo que en java me ocupaba unas lineas de nada

ServerSocket s = new ServerSocket(int puerto);

s.accept;

En C++ requeria la llamada a una libreria no estandar, declarar varios argumentos que serian necesarios para el travase de informacion y demas parafernalia, en total, que en varias paginas de codigo quizas (solo quizas) podria conseguir conectar dos maquinas. Despeus de algunos dias intentando hacerme una idea de C++, de su estructura, sus intsrucciones y demas, alguien me comento que podria probar con C#.

Pues nada, C#, un nuevo lenguaje de programacion, a ver que tal funcionaba este. No parecia especialmente complicado, empezaba a ver las similaridades entre este y Java, vamos, que empezabamos a llevarnos bien. Ya habia comunicacion entre las maquinas, ya podria hacer algunas de las cosas que tenia implementadas en Java… Y de nuevo los muros se alzaron entre mi aplicacion y la alarma de usuarios no deseados. C#, aunque no corra sobre la maquina virtual de java, lo hace sobre el FrameWork .NET de microsoft, lo cual se traduce en practicamente lo mismo que en el otro caso. Bueno, casi, en este caso al parecer si que era posible establecer una via de comunicacion y que mi aplicacion consiguiese enterarse cuando se producen eventos de bajo nivel. Solo un problema, para poder hacerlo tienes que ser una aplicacion de Win32, y yo habia definido la mia como una aplicacion de consola… De nuevo estrellado…

¿Que sera mas dificil?¿ hacer que mi aplicacion de vigilancia para mantener a salvo mi ordenador pase inadvertida para un posible usuario no autorizado?¿Volver a intentar trabajar con C++, esta vez buscando una Libreria que haga todo el lio de los sockets?¿pasarme a Basic y rezar por que en ese lenguaje las ventanas puedan ser invisibles y los eventos de bajo nivel algo cotidiano de usar?

El gran dilema, entre lo bonito y facil de usar que es java, y la gran potencialidad pero tambien complejidad de C.

2 comentarios:

  1. hey,soy angy =)
    A seguidores.
    Un beso ^^

    ResponderEliminar
  2. C# es tan facil como Java

    Todo lo que puedas hacer en "basic" lo puedes hacer en C#

    Has probado a usar "terminal services"?

    ResponderEliminar