Documentos de Académico
Documentos de Profesional
Documentos de Cultura
codigo=6485413
2. http://www.redalyc.org/articulo.oa?id=92521310
Conciencia Tecnológica No. 33, Enero-Junio 2007
Lic. Héctor de Jesús Carlos Pérez (1), C.L.I. José Alfredo Alonso Esquivel (2) (1) Miembro del Cuerpo Académico de Sistemas
Distribuidos del Instituto Tecnológico de Aguascalientes (2) Alumno de la Carrera de Licenciatura en Informática del
Instituto Tecnológico de Aguascalientes Departamento de Sistemas y Computación del Instituto Tecnológico de
Aguascalientes, Av. A. Lopez Mateos 1801, Fracc. Bona Gens, Aguascalientes, Ags., C.P. 20256 Tel. (449) 9105002, Fax
(449)9700423 hicarlos(Qhotmail.com, chokmah19 (hotmail.com
Resumen
El desarrollo de los lenguajes de programación se está orientando a la generación de código distribuido. Mediante este tipo
de código se puede hacer uso de programas, recursos, objetos y sistemas que no se tienen en el equipo local, pero que para
el usuario final pareciera como si realmente estuvieran en su equipo.
Gran parte de los sistemas distribuidos requieren que los usuarios adquieran los respectivos permisos y licencias.
En este trabajo se describen las características y ventajas de Ruby, un lenguaje que permite generar este tipo de sistemas
distribuidos de manera relativamente sencilla, y además presenta la ventaja de ser un lenguaje de código abierto y libre de
distribución y mejoras por parte del usuario- programador.
The development of programming languages is addressing to the generation of distributed code. Through this type of code
it is possible to use programs, resources, objects and systems that not exist in local equipment, but they seems as if really
they were in the equipment of local station.
Most of distributed systems need users acquire the permissions and licenses.
This work describes characteristics and advantages of Ruby, which is a language that allows to generate this type of
distributed systems in a relatively simple way. Additionaly has the advantage of being a free language and open source of
distribution and improvements for the programmer and users.
Key words
Introducción
De acuerdo a Wikipedia Ruby “es un lenguaje de programación reflexivo y orientado a objetos creado por el programador
¡japonés Yukihiro "Matz" Matsumoto en 1993. Combina una sintaxis inspirada en Perl con características de programación
orientada a objetos similares a Smalltalk. Comparte también funcionalidad con otros lenguajes de programación como
Python, Lisp, Dylan y CLU. Ruby es un lenguaje de programación interpretado y su implementación oficial es distribuida
bajo una licencia de software libre”.
La popularidad de este lenguaje radica en que reúne las características de los mejores lenguajes (Java, C, Python, entre
otros) dentro de un relativamente sencillo lenguaje de programación. Dichas características son:
e Es poderoso: combina el poderío de los lenguajes orientados a objetos con la conveniencia de los lenguajes basados en
scripts, como Perl. Los programas en Ruby son compactos, pero aún así muy mantenibles.
e Simple: La sintaxis y la semántica son intuitivas y muy limpias. No hay ningún “caso especial” por tomar en cuenta. Por
ejemplo, variables como integer, string, inclusive NULL son todas objetos.
e Transparente: Ruby libera de las limitaciones de espacio. No requiere compilar cada código para cada mejora o agregado
de un nuevo módulo.
e Posee alta disponibilidad: con Ruby se pueden generar aplicaciones y correrlas sin ningún problema bajo Unix, Linux,
Windows o sistemas especializados como lo es el BeOS, entre otros.
Características
81
RUBY: LENGUAJE DE PROGRAMACIÓN PARA SISTEMAS DISTRIBUIDOS Lic. Héctor de Jesús Carlos Pérez y C.L.1. José Alfredo
Alonso Esquivel
Ls
Hilos.
Iteradores y cierres.
Ruby distribuido
Se pueden crear objetos independientes para poder llamarse después, (por ejemplo .dll). Si a estas características le
agregamos que se pueden transmitir estos objetos a diferentes procesos, todó esto en conjunto con las tecnologías de
comunicaciones, permite obtener los sistemas distribuidos.
Utilizando las características de Distributed Ruby Library, este puede ser usado como servidor, como host o inclusive como
ambos. Actuando como servidor es un origen para los objetos; actuando como cliente pareciera que los objetos se obtienen
localmente, pero realmente el código se está ejecutanto en alguna otra parte del sistema distribuido.
El servidor comienza un servicio o demonio asociando un objeto con un puerto determinado. Los hilos se crean dentro del
servidor para manejar requisiciones que provengan de dicho puerto.
Ruby y la Web
Con este lenguaje se pueden crear gran cantidad de tecnologías. Algunas de ellas son:
e Servidor SMTP.
e Demonios FTP.
e Servidores Web.
Inclusive se puede usar para trabajos más específicos, como programar CGlIs o como reemplazo para PHP. Los CGI's son
simplemente páginas Web, pero estas son resueltas por el servidor; el usuario final no se da cuenta de todos los procesos
(accesos a bases de datos, manejo de formularios, etc.) que se generan en el servidor; el usuario final sólo recibe los
resultados, en comparación con las páginas ASP, PHP en las cuales se puede tener acceso a ciertas partes del código que se
utiliza para crear las páginas; un ejemplo de esto es simplemente dar clic derecho en la página y seleccionar “ver código
fuente”.
Como se menciono anteriormente, Ruby se puede usar para generar CGI's. Para escribir scripts en CGI
con Ruby, simplemente se necesita mandar un encabezado al inicio de la programación, como el siguiente:
H/usr/bin/env ruby
Print “
Hello World!
”;
Con esto basta para comenzar a generar CGPs. También de una manera muy sencilla e intuitiva, para aquellos
familiarizados con los lenguajes mencionados al principio de este artículo, se pueden crear cualquier tipo de elementos
Web (para el caso de los CGP's) como son:
e Formularios
e Cookies
e Sesiones
Con Ruby, se pueden observar todos los objetos vivos dentro del bloque de código que se tiene en cierto momento. Para
ejemplificar esto, tomemos el siguiente segmento de código:
95.1
Una nota curiosa acerca de este lenguaje es que originalmente era el nombre de un tipo de letra británico de 5,5 puntos
usado para anotaciones en documentos impresos. En japonés, el significado de la palabra cambió para referirse a los
caracteres furigana.
Conclusiones
El lenguaje Ruby viene a reemplazar muchos otros lenguajes, siendo éste capaz de cumplir con todas las características de
estos, e inclusive llegando hasta donde los demás lenguajes no pueden.
En México no hay gran aceptación por los sistemas de código abierto, situacion que debe de cambiar, ya que éste ofrece
grandes ventajas por sobre los otros sistemas: amplia disponibilidad, bajo costo si no es que nulo, robustez, capacidad de
crecimiento, soporte por bastantes grupos de programadores en todo el mundo, más seguridad que los demás sistemas
operativos,
82 Conciencia Tecnológica No. 33, Enero-Junio 2007 RUBY: LENGUAJE DE PROGRAMACIÓN PARA SISTEMAS DISTRIBUIDOS
Lic. Héctor de Jesús Carlos Pérez y C.L.I. José Alfredo Alonso Esquivel
capacidades de sistemas operativos distribuidos, en fin, el uso de estas herramientas beneficia tanto a las empresas que
deseen implementer tecnología de punta así como a programadores, usuarios finales y administradores. Ruby, aunque
requiere cierto nivel de experiencia en programación, es una excelente herramienta para comenzar la migración de otros
sistemas operativos hacia los de código abierto.
Referencias
Agradecimientos
Queremos agradecer al Cuerpo Académico de Sistemas Distribuidos del Instituto Tecnológico de Aguascalientes, así como a
todos los colaboradores que brindaron su apoyo, los servicios y recursos necesarios para llevar a cabo la publicación de.este
trabajo.
ISSN: 1137-3601
revista@aepia.org
España
Inteligencia Artificial. Revista Iberoamericana de Inteligencia Artificial, vol. 5, núm. 13, 2001, pp. 94-99
Asociación Española para la Inteligencia Artificial
Valencia, España
Resumen
La programación de sistemas multi-agentes ha sido generalmente soportada por lenguajes orientados a objetos o
lenguajes lógicos. Ambos paradigmas muestran poseer características para soportar parcialmente el desarrollo
de agentes. Sin embargo, si ambos paradigmas son integrados, una solución a la programación de agentes aparece
en forma evidente. En este artículo, un lenguaje multi-paradigma para la programación de agentes denominado
JavaLog es presentado. Este lenguaje integra el lenguaje orientado a objetos Java y el lenguaje lógico Prolog. Esta
combinación permite que agentes sean construidos como objetos manipulando un estado mental definido a través
de cláusulas lógicas que son encapsuladas en módulos lógicos. Estos módulos lógicos permiten combinar
dinámicamente actitudes mentales para adaptar el comportamiento de agentes considerando diferentes contextos o
circunstancias.
preferencia(A,10):-
evento(A,negocios,P,Fecha,Hora,Lugar),
member(X,P), jefe(P).
preferencia(A,9):-
evento(A,golf,_,_,_,_).
Figura 3. Redefinición de un módulo lógico
preferencia(A,10):-
evento(A,social,P,Fecha,_,_),
noLaborable(Fecha), member(X,P),
Considérese otro escenario, en el cual no se desean
amigo(X).
redefinir las cláusulas presentes en la superclase, sino
que se necesitan añadir cláusulas que especifican la
contexto2.add(contexto1) resulta en un módulo
forma de tratar eventos relacionados con el trabajo. En
lógico conteniendo las siguientes cláusulas: la Figura 4 se ejemplifica este caso.
preferencia(A,10):-
evento(A,social,P,Fecha,_,_), AsistentePersonal
noLaborable(Fecha), member(X,P),
amigo(X). evaluarPreferencias()
preferencia(A,10):-
...
evento(A,negocios,P,Fecha,Hora,Lugar),
member(X,P), jefe(P). AsistentePersonalTrabajo
{{preferencia(A,5) :- ...
preferencia(A,9):- evaluarPreferencias() ...}};
evento(A,golf,_,_,_,_).
...
contexto1.rewrite(contexto2) resulta en un módulo
lógico conteniendo las siguientes cláusulas: Figura 4. Adición de módulos lógicos
A diferencia de los trabajos mencionados, nuestro enfoque intenta tomar ventaja de ambos
paradigmas a partir de una integración de ambos estilos de programación.
6. Experiencias
Varias experiencias han sido realizadas con este lenguaje. Por ejemplo, un agente de interfaz
para generar periódicos personalizados en Internet denominado NewsAgent (Cordero, 1999)
es una de estas experiencias.
NewsAgent es un agente que aprende las preferencias de los usuarios observándolos cuando
ellos están leyendo noticias en periódicos localizados en la WWW. A partir de este
aprendizaje, el agente genera diariamente un periódico personal para cada usuario respetando
sus preferencias, ahorrándole así tiempo en la examinación de noticias que no son de su
interés y colocando prioritariamente aquellas de mayor interés.
7. Conclusiones
Se ha presentado en este artículo el lenguaje de programación JavaLog que permite la
implementeación de sistemas multi-agentes utilizando tanto Java como Prolog. Un agente es
definido como un objeto Java, el cual manipula su estado mental a través de programación
lógica ya que sus actitudes mentales están definidas por cláusulas lógicas.
Referencias
D. Cordero, P. Roldan, S. Schiaffino, A. Amandi. (1999) “Intelligent Agents Generating
Personal Newspapers”. In Proceedings of the International Conference on Enterprise
Information Systems, Portugal.
E. Denti, A. Omicini, (1999) “Engineering Multi- Agent Systems in LuCe” in Proceedings
of the Workshop on Multi-Agent Systems in Logic Programming - MAS’99 (in
conjunction with the International Conference on Logic Programming
1999), Las Cruces, New Mexico, USA, December 4, 1999.
M. Fisher. (1994) “Representing and Executing Agent-Based Systems”. In Proceedings of the
ECAI-94 Workshop on Agent Theories, Architectures, and Languages
K. Fukunaga, S. Hirose. (1986) “An Experience with a Prolog-Based Object-Oriented
Language. Proc. OOPSLA´86 Conference.
Y. Ishikawa, M. Tokoro. (1986) “A Concurrent Object-Oriented Knowledge Representation
Language Orient84/K: It’s features and implementation”. SIGPLAN Notices, 21(11): 232-
241.
A. Kellett, M. Fisher (2001) “Coordinating Heterogeneous Components Using Executable
Temporal Logic”. In, Meyer and Treur (eds), Agents, Reasoning and Dynamics. Vol. 6 in
Series of Handbooks in Defeasible Reasoning and Uncertainty Management Systems.
Kluwer Academic Publishers.
P. Mello, A. Natali. (1987) “Objects as Communicating Prolog Units”. In Proceedings of
ECCOP’87, European Conference on Object- Oriented Programming.
R. O'Keefe. (1985) “Towards an Algebra for Constructing Logic Programs”. In J. Cohen and
J. Conery (eds), Proceedings of IEEE Symposium on Logic Programming, IEEE Computer
Society Press, New York, pages 152- 160, 1985.
A. Poggy. (1994) “Daisy: an Object-Oriented System for Distributed Artificial Intelligence”.
In Proceedings of the ECAI-94 Workshop on Agent Theories, Architectures, and
Languages.
D. Weerasooriya, A. Rao, K. Ramamohanarao. (1995) “Design of a Concurrent Agent-Oriented
Language”. In Wooldridge, M.; Jennings, N. (Eds.). Intelligent Agents (LNAI 890).