Angel "Java" Lopez

NET, Java, PHP y Desarrollo de Software

This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

.NET

ASP.NET

Windows Form

VB.NET

C#

Sitios

Blogs

February 2009 - Posts

Presentando AjLambda: implementación de Cálculo Lambda en C#

Estuve trabajando en my "code kata" AjLambda, una implementación de Cálculo Lambda escrita en C#:

http://code.google.com/p/ajcodekatas/source/browse/#svn/trunk/AjLambda

(Si no conoce el cálculo lambda, hay enlaces sobre el tema al final de este post)

La solución es simple, contiene tres proyectos:

Es una librería núcleo, AjLambda, un proyecto de test AjLambda.Tests y un programa de consola AjLambda.Console para ejecutar. El núcleo tiene unas pocas clases principales:

Expression es la clase base abstracta. .Reduce es el método que implementa la reducción de una expresión. .Replaces se usa para cambiar una variable por otra. Algunas veces, es necesario elegir un nuevo nombre para una variable, que no colisione con otros nombres de variables libres. .FreeVariables es el método para obtener la lista de variables libres en una expresión. Por ejemplo, en la expresión lambda:

\x.xy

x e y son variables, pero y es una variable libre, mientras que x es un parámetro ligado.

Variable expresa una variable (una letra minúscula, en esta implementación). Lambda es la lambda (parámetro más cuerpo). La lambda identidad se ingresa:

\x.x

La versión con múltiples parámetros está soportada:

\xy.yx

Como ejemplo, ésta es la implementación de .Reduce para Pair (un pare de expresiones, left and right): 

public override Expression Reduce() { if (this.left is Lambda) return ((Lambda)this.left).Apply(this.right); Expression newLeft = this.left.Reduce(); if (newLeft != this.left) return new Pair(newLeft, this.right); Expression newRight = this.right.Reduce(); if (newRight == this.right) return this; return new Pair(newLeft, newRight); }

Ejecutando AjLamnda.Console con un parámetro:

AjLambda.Console Boot.l

lee y procesa el archivo auxiliar Boot.l, donde definí algunas funciones predefinidas:

; True
T = \xy.x
; False
F = \xy.y
; And
AND = \ab.abF
; If Then Else
IFTHENELSE = \x.x
; Natural numbers
0 = \fx.x
1 = \fx.fx
2 = \fx.f(fx)
3 = \fx.f(f(fx))
; Succesor
SUCC = \nfx.f(nfx)
; Add
ADD = \nmfx.nf(mfx)
; Multiply
MULT = \nmf.n(mf)
; Is Zero
ISZERO = \nxy.n(\z.y)x
; Predecessor
PRED = \nfx.n(\gh.h(gf))(\u.x)(\u.u)
; Pair Functions
PAIR = \xyf.fxy
FIRST = \p.pT
SECOND = \p.pF
NIL = \x.T
NULL = \p.p(\xy.F)
; Fixed Point
A = \xy.y(xxy)
Y = A A
; Factorial
FACT = Y (\f.\n.IFTHENELSE (ISZERO n) (1) (MULT n (f (PRED n)))))

Podemos preguntar por los nombre predefinidos. Están definidos los primeros números naturales, incluyendo el cero:

Los nombres son palabras que comienzan con una letra mayúscula (o números). Los nombres de variables son letras minúsculas (desde 'a' a 'z', una sola letra).

Como es usual, definí SUCC and PRED (funciones sucesor y predecesor):

Cada paso de reducción se imprime, hasta que no es posible más reducción.

Podemos definir nuevas funciones usando Name = <expression>:

Más información sobre Cálculo Lambda en:

Lecture Notes on the Lambda Calculus (pdf) (excelente paper para estudiar Lambda Calculus)

Peter Selinger- Papers

Lambda calculus - Wikipedia, the free encyclopedia

A Tutorial Introduction to the Lambda Calculus

http://delicious.com/ajlopez/lambda

Lambda Calculus implementation from Fred's Page

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

Posted Thu, Feb 26 2009 8:19 by lopez | 2 comment(s)

No más C:>, Dorothy

Ya recordé en otro post, mis primeros años en el desarrollo de software:

Treinta años en desarrollo de software

donde las tarjetas perforadas eran la forma de programar, y la excepción era tener acceso a una terminal. Recuerdo a escenas de Alien, 1979 (la primera película) donde la interacción con una computadora era mediante un monitor donde se había una interfaz de línea de comando, con letras verdes sobre fondo negro. Era un reflejo de lo que era común en aquellos años: aunque había interfaces gráficas, no era lo común aún en las computadoras que se usaban. Esa vuelta en el futuro a la interfaz de caracteres me pareció razonable.

Pero en otra película, 1994, Disclosure, Michael Douglas, Demi Moore (una película completamente de ficción, no puedo imaginar a un hombre quejándose de acoso sexual con la preciosa Demi... ;-), Douglas era el gerente de tecnología de una importante empresa dedicada al desarrollo de software y hardware, y recibía emails en un programa que era muy vistoso gráficamente: cada email era un sobre que giraba, con animaciones al abrir el email, al imprimirlo y demás. La empresa hasta había desarrollado una base de datos de realidad virtual, donde uno podía sumergirse en 3D. Esa es la visión más común de Hollywood, las interfaces futuristas, desde las representaciones 3D de Unix en Parque Jurásico, hasta la interacción en pantalla táctil de Minority Report.

Siempre pensé que la línea de comando era lo más racional para muchas operaciones. Si se resisten a la línea de comando, creo que aceptarán que el teclado es más usado y usable que un mouse. Algo que hemos vivido muchos de nosotros, es el placer de manejar el Norton Commander, en vez de luchar con el Windows Explorer. Arrastrar el mouse sigue siendo una operación algo trabajosa (de hecho, lo que hacemos gran parte del tiempo es escribir con el teclado, solamente para algunas operaciones usamos el mouse). Pero el mercado y la historia, ha hecho que triunfara la visión de Hollywood que no es la de Alien: todos quieren interfaces lindas. Desde los nuevos diseños "web 2.0", hasta sistemas operativos como Mac OS y Windows Vista, hoy por hoy, la operación de una computadora pasa por los ojos. No dejo de estremecerme ante el tamaño esfuerzo de procesadores y diversos hardware, que implica hoy el dibujo, el rendering, de la más simple pieza de nuestro escritorio virtual. Pero es así: la época de las plaquetas Hércules ya pasó.

Este nuevo mundo, donde ya no basta con programar con ventanas de Turbo Pascal, sino que tenemos que estar al tanto de los distintos tipos de letras, controles, distribuciones y cambios de tamaño en ventanas y resoluciones, se ha visto dominado, tanto en el ambiente Unix, Linux y Windows, por el desarrollo de interfaces de ventanas para usuario. En el ambiente Microsoft, Visual Basic ha sido el entorno de desarrollo que nos ha facilitiado el desarrollo de semenjantes aplicaciones. Debería agregar a Delphi y Visual Fox. Visual C++, en ese sentido, ha sido más duro, y solo algún ser humano auto flagelante, podría alabar el editor de cajas de diálogo y a la librería ATL, ambos engendros que han aparecido, para vergüenza de la historia humana. En el ambiente Unix/Linux, no ha sido tampoco fácil la programación, debido a la variedad de implementaciones. Tenemos que reconocer que Visual Basic ha sido una de las interfaces de programación que más ha conseguido abstraernos de las complejidades de desarrollo de ventana, y aún hoy, diría, Java le va en la saga a un simple VB 3.0.

Con el auge de la web, HTML ha sido nuestra nueva forma de plantear la interfaz inmediata de usuario. Primero con CGI (Common Gateway Interface), ayudado luego con el gran PHP (redentor lenguaje que nos evitó seguir con Perl), JSP (JavaServer Pages y otros), y la abstracción brindada por ASP.NET, hoy podemos desarrollar aplicaciones web de forma razonable. En los últimos años se han sumado ideas y aproximaciones, desde MVC, hasta JSF (JavaServer Faces), y hasta el ambiente Smalltalk se ha sumado con Seaside.

Lo que ha surgido con una tecnología como ASP.NET (y otras), es la separación entre código de lógica y gran parte de la presentación gráfica. Ese es el punto a explorar en un próximo post, sobre los por qué de la aparición de Windows Presentation Foundation (recuerdo una charla de Miguel de Icaza, aquí en Argentina, donde ya mostraba el diseño declarativo de un formulario en Mono).

Por hoy, basta. La interfaz gráfica domina gran parte de nuestros desarrollos. Parafraseando a alguna frase conocida de "El mago de Oz", "No estamos más en Kansas. No más C:>, Dorothy".

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

Posted Sun, Feb 22 2009 16:38 by lopez | 1 comment(s)

Análisis de casos en Arquitectum.org

El miércoles pasado asistí al Architect Forum de Microsoft de Argentina. Muy interesante tarde, gracias a los buenos de Ezequiel Glinsky y Juan Ladetto por la invitación (che, a ver cuando me invitan a algún desayuno de arquitectura...;-). Tuvo tres presentaciones principales. Mi idea es publicar un post detallada de cada una. Por ahora, pueden visitar el sitio www.architectum.org:

http://www.arquitectum.org

Pueden descargar las presentaciones (están como enlaces en cada título de tema) desde:

http://www.arquitectum.org/portal/Eventos/ArchitectForums/tabid/62/Default.aspx

Los casos presentados:

Renovación de plataforma en Despegar.com: experiencias y aprendizajes

Para acompañar el crecimiento pronosticado para los próximos años en la empresa y consolidarse como líder en la región, se ha decidido la renovación de la plataforma de la aplicación de ventas de servicios turísticos. Se comentará la experiencia del equipo de Despegar.com a lo largo de la implementación del motor de venta en internet basada en tecnología .NET. Se cubrirán aspectos de tecnología, arquitectura, metodología y lecciones aprendidas durante el proceso para compartir y discutir con la audiencia.

Oradores:

Carlos Granitto, Javier Canillas, Sergio Urin, Daniel Goldstein (Despegar.com)
Diego Gonzalez (Lagash)

Implementación de una arquitectura de alta escalabilidad  en el Mercado Abierto Electrónico (MAE)

Conectarse al mundo para proveer servicios implica estar preparado para soportar una concurrencia masiva de transacciones de manera robusta, escalable y con rendimientos adecuados. El estilo de arquitectura SEDA (Staged Event-Driven Architecture) se enfoca en la escalabilidad y descompone el diseño de servicios complejos en una serie de etapas interconectadas a través de colas. La descomposición del servicio en etapas independientemente desplegables provee la base para distribuir el procesamiento y el mecanismo de interconexión a través de colas aísla y amortigua la demanda masiva del servicio entre cada una de estas etapas. Durante esta sesión presentaremos una implementación de la arquitectura SEDA y su framework para desarrollo de aplicaciones construido bajo la plataforma y abanico de tecnologías .NET, que fueron desarrollados para la solución ORS (Order Routing System) de MAE.

Oradores:

Diego Anfossi (MAE)
Gastón Real (Baufest)

Eficiencia, Seguridad y Compliance A-la-Carte en Banco Comafi

En búsqueda de hacer más eficiente sus procesos de Identity Management, Seguridad y Compliance, el Banco Comafi desarrolló en conjunto con Globant/Accendra una solución basada en la auto-gestión del empleado sin perder el control de la seguridad informática del Banco. El Portal de Seguridad Informática hace más fácil el trabajo diario de sus empleados y acelera los procesos internos sin perder de vista la auditoría y control de los sistemas.

Oradores:

Rafael Utrero (Comafi)
Mariano Baldineli (Comafi)
Martin Iglesias (Globant/Accendra)

Visiten el sitio

http://www.arquitectum.org

donde van a encontrar material de otros eventos, anuncios de los que se vienen en marzo, y noticias relacionadas.

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

Posted Fri, Feb 20 2009 8:16 by lopez | 1 comment(s)

Computer Go y Windows HPC Server

El último año, en el PDC 2008, el equipo de Windows HPC Server presentó un cluster de computadores jugando el juego del Go. Este video muestra la estupenda interfaz Surface que montaron:

(Si no conocen el juego del Go, visiten:

http://www.gobase.org

Hay mucha información sobre el juego y sus reglas. Hay una sección dedicada solamente a  Computer Go:

http://gobase.org/information/computers/

)

David Fotland es el autor del programa original que se muestra en el video. David es un reconocido programador de computer go. Este es el email de David, explicando este programa y su trato con la gente de Windows HPC Server:

http://computer-go.org/pipermail/computer-go/2008-November/017025.html

(Esa es LA lista de correo a seguir, si queremos conocer más sobre el ploblema de Computer Go). David programó una solución tipo MonteCarlo, usando MPI y Windows HPC Cluster.

ManyFacesOfGo, el programa de Fotland, ganó el campeonato mundial de computer go, el año pasado, corriendo sobre un Windows HPC Server cluster (ver los resultados). Nota: el programa que quedó segunda también se ejecutó sobre un cluster. Hay más información sobre el programa (comercial) ManyFacesOfGo en:

http://www.smart-games.com/

2008 fue un año lleno de sorpresas en el ámbito de computer go. Actualmente, los programas no pueden ganarle a un profesional o a un amateur fuerte humano, pero algo está cambiando. Pueden leer:

Latest Advance in Artificial Intelligence: Computer Wins a Game Against a Go Master

y los últimos avances en la página de Wikipedia sobre Computer Go:

http://en.wikipedia.org/wiki/Computer_Go

Después de décadas de pobres resultados, los programas de computación comienzan a ganar a jugadores humanos, pero hay mucho por mejorar. La complejidad del juego evita el uso puro de métodos de fuerza bruto: pienso que la solución vendrá de una mezcla de fuerza bruta, clustering, Monte Carlo, y métodos más clasicos de planeamiento.

I tengo mi propio programa, AjGo para explorar algoritmos que puedan usar este juego fascinante, el "hard problem" en Inteligencia Artificial de juegos de tablero. Un ejemplo de formulario de ese programa:


Posts explicando algo del programa:

AjGo- hacia un programa que juegue al go
Computer Go y el programa AjGo

Mantengo una colección de enlaces sobre Computer Go en delicious y en mi sitio personal:

http://delicious.com/ajlopez/computergo
Computer Go links

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/en
http://twitter.com/ajlopez

Posted Wed, Feb 18 2009 8:25 by lopez | with no comments

Webcast sobre Geneva Framework

Mañana miércoles daré, junto con Sebastián Renzi  (@SebaRenzi) un nuevo webcast, esta vez sobre Geneva Framework, el nuevo framework de Microsoft para el manejo de seguridad basado en claims.

Pueden registrarse en:

Webcast MSDN: Identidad - Profundizando Geneva

Es a las 2:00PM, hora de Bogotá (GMT -5). Es 5:00PM, hora de Buenos Aires (GMT -2).

Estaremos mostrando:

- Identidad
- Qué es un claim
- Qué es un Token
- Cómo programar un Security Token Service
- Revisión de Código de ejemplo de Geneva Framework

Como siempre, colecciono enlaces sobre un tema. Pueden visitar:

http://delicious.com/ajlopez/geneva
http://delicious.com/ajlopez/sts
http://delicious.com/ajlopez/authentication
http://delicious.com/ajlopez/security

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

Posted Tue, Feb 10 2009 9:34 by lopez | 1 comment(s)

Material y enlaces de Inteligencia Artificial

El pasado miércoles tuve el gusto de dar una charla sobre Inteligencia Artificial, organizada por el Club de Programadores. Quería presentar en este post el material usado, ejemplos, enlaces mencionados, recursos y bibliografía que recomendé.

El campo de la Inteligencia Artificial es inmenso, y con el correr de los años se ha ido abriendo en ramas distintas, que a veces, poco tienen que ver unas con otras.

La presentación que usé la pueden bajar de IntroIA2009012003b.ppt. Una presentación más antigua, pero más completa (de un curso de dos días) en: IntroIA200501.zip.

Se está formando un grupo de gente interesada en la Inteligencia Artificial, acá en Argentina, leer:

Inteligencia Artificial en Argentina

Mencioné que este año hay un congreso de Inteligencia Computacional Aplicada, leer

Congreso de Inteligencia Computacional Aplicada

Para un primer pantallazo de las ramas, y algo de la historia, puede servir de base el artículo de la Wikipedia:

Artificial Intelligence
History of Artificial Intelligence

Un sitio a visitar es el de Peter Norvig:

Peter Norvig

Un paper totalmente recomendable, para leer las ideas de Marvin Minksy, sobre cómo podría funcionar una mente:

Future Models for Mind-Machines

Más discutible, desde mi punto de vista, son las ideas de Kurzweil, pueden visitar su sitio:

KurzweilAI.net

Mencioné en varios puntos de la charla, un paper que describía la historia de la Inteligencia Artificial, y cómo durante décadas, todos los intentos comerciales fueron fracansando:

If it works, It's not AI

Un artículo reciente, que tiene una visión más optimista:

Future Watch: A.I. comes of ages

Mencioné el trabajo de Douglas Lenat. Pueden ver lo que está haciendo ahora, persiguiendo el sentido común en:

http://www.cyc.com/

Sitios a visitar sobre Inteligencia Artificial:

http://www.aboutai.net About AI, enlaces sobre distintos temas de AI
http://www.pcai.com/ PC AI Free Magazine
http://www.jair.org/ Journal of Artificial Intelligence Research
http://www.aaai.org/ Association for the advance of Artificial Intelligence

Varias explicaciones de distintos temas, con ejemplos de codigo en

AI Junkie

Lenguajes de Programación

Mencioné en la charla algunos lenguajes. Tienen enlaces dedicados en:

Lisp donde los programas se pueden manipular como datos
Prolog dedicado a implementar programación declarativa

Al final del post, hay libros sobre distintos temas, donde se usan esos lenguajes (ver por ejemplo libros en la web).

Un ejemplo que tenía preparado, pero no mostré, se basaba en usar P#, una implementación de Prolog de código abierto.

Yo estoy trabajando en un intérprete Lisp, ver AjLisp- un intérprete Lisp en .NET.

Ver también

AI Programming (Lisp)
AI Programming (Prolog)

Lógica difusa

El ejemplo que usé en la charla (el de la grúa con contenedor controlado por lógica difusa) es de:

Fuzzy Tech http://www.fuzzytech.com

Sistemas basados en reglas

No vimos ejemplos en la charla, pero pueden visitar:

Jess sistema basado en reglas, en Java (basado en el algoritmo Rete).

Aprendizaje automático

Algunos enlaces

UCI Machine Learning Group
Machine Learning in Games
Machine Learning (AI on the Web)

Planeación

Nombramos los problemas de la planeación. Visitar:

What is Partial-Order Planning?
Review of An introduction to Least Commitment Planning
Selected History of Partial Order Planning, Part 1 (donde aparece Sacerdoti, mi primer referente en el tema)
Selected History of Partial Order Planning, Part 2

Redes Neuronales

En la charla vimos una demo del producto comercial:

NeuroSolutions

El ejemplo de hormigas controladas por redes neuronales que evolucionaban por algoritmos genéticos, en:

Neural Networks in plain English

Algunos enlaces adicionales:

http://www.inns.org/
http://www.nips.cc
http://www.makhfi.com/resources.htm
http://www.makhfi.com/realworld.htm
http://www.neoxi.com/NNR/index.html
http://www.ri.cmu.edu/pubs/pub_926.html
http://vasc.ri.cmu.edu/NNFaceDetector/
http://www.deepinsight.com/
http://satirist.org/learn-game/systems/neurochess.html
http://satirist.org/learn-game/systems/go-net.html
http://satirist.org/learn-game/systems/gammon/
http://www.20q.net/ Twenty Questions Neural-Net on the Web
http://gpdev.net/NeuroDriver_bpnet.html
http://www.codeproject.com/csharp/neural_dot_net.asp
http://www.codeproject.com/dotnet/simple_ocr.asp
http://www.codeproject.com/script/articles/list_articles.asp?userid=441940

Algoritmos Genéticos

Leer como introducción

Genetic Algorithms in plain English

Mostré mi ejemplo de:

AjGa- una librería de algoritmos genéticos

Otros enlaces:

Galib Librería de Algoritmos Genéticos http://lancet.mit.edu/ga/
http://delicious.com/ajlopez/geneticalgorithms

Enlaces adicionales

Genetic Algorithms and Genetic Programming (multitud de enlaces)
What is Genetic Algorithms?
Genetic Programming
Genetic Algorithms
Survival of the Fittest: Natural Selection with Windows Forms (en .NET)
An introduction to Genetic Algorithms In Java
AIAI Technology Genetic Algorithms
Genetic Algorithms and the Traveling Salesman Problem (en C++ para Windows)

Programación Evolutiva

Estuvimos viendo mi ejemplo

Jugando con programas evolutivos

Estuvimos corriendo el ejemplo de AI_Life, donde vimos redes neuronales, algoritmos genéticos y conductas de persecución. 

Juegos e Inteligencia Artificial

Primero, el tema juegos de tablero.

En el proyecto Reversi pueden ver una implementación del algoritmo MinMax con Alfa Beta.

En Connect Four y en Learning Draughts pudimos ver algunas estrategias simples de aprendizaje.

Para tener un panorama de los problemas actuales, hay que visitar el grupo de la Universidad de Alberta:

http://www.cs.ualberta.ca/~games/

Pueden visitar el grupo de Research de Microsoft:

Applied Games

Pero también hay inteligencia artificial en juegos de video. Recomendaría visitar:

Game IA

What is BattleCode-

Artificial Intelligence and Computer Games

AI- AAAI Library online

Game AI for Developers — AiGameDev.com

El tema de máquinas de estado es muy usado, pueden leer

State-Driven Game Agent Design

 

Computer Go

Para mí, un tema fascinante. Vimos en la charla, a mi ejemplo AjGo:

AjGo- hacia un programa que juegue al go

Pueden visitar:

Computer Go in Microsoft

Hay otro grupo de investigación sobre el tema en Beijing:

Craking Go a cargo de Feng-hsiung Hsu

Mis enlaces sobre Computer Go en http://delicious.com/ajlopez/computergo

Todo sobre Go en http://www.gobase.org

Si quieren aprender el juego, pueden visitar el sitio de la Asociación Argentina de Go.

Vida Artificial

Un tema fascinante, nombrado al pasar en la charla. Visiten el proyecto Tierra

http://life.ou.edu/tierra/

Vean las "fotos" de:

http://life.ou.edu/pubs/images/

Otro proyecto que también investiga el tema evolución es:

Darwin at home el resultado de aplicar Fuidiom
Fluidiom Implementado en Java, sería interesante implementar algo similar en .NET y DirectX/OpenGL

Robótica

Mostré el ejemplo de:

Que lindo el guaguau- BigDog de Boston Dynamics

Más enlaces en:

Post sobre Robótica
http://delicious.com/ajlopez/robotics

GRASP Laboratory of Robotics Research and Education @ Penn
Microsoft Invisible Computing
Concious Robots
Robotics Studio at Concious Robots (con algún foro en español)
An introduction to Programming Robots with Microsoft Robotics Studio
Wimo: The Windows Mobile Robot

Bibliografía

Nils J. Nilsson escribió varios libros en estas últimas décadas. Yo recomendaría este libro para una primera aproximación, bastante completa, a la Inteligencia Artificial actual:

Artificial Intelligence: a new synthesis

En español, en Argentina, Librería Cúspide como Inteligencia Artificial: una nueva síntesis.

Uno de sus libros está en línea: How Are We To Know-

Uno de los libros que recomendé es el de Russell y Norvig (es muy bueno en las notas históricas al final de cada capítulo):

AI- A Modern Approach

Si están en Argentina, lo pueden encontrar en español, por ejemplo, en librería Cúspide, como Inteligencia Artificial un enfoque moderno.

Otro de Norvig es

Paradigms of AI Programming

 

Los interesados en lenguajes de programación e Inteligencia Artificial, pueden examinar el clásico de Bratko, muy bueno para aprender la relación entre programación declarativa e Inteligencia Artificial:

Prolog Programming for Artificial Intelligence

Varios libros gratuitos en línea sobre Inteligencia Artificial en

Free Artificial Intelligence Books (visiten el sitio, que hay todos temas, de computación, matemáticas y ciencia).

Enlaces adicionales

Desde hace unos años, mantengo en mi sitio

Enlaces sobre Inteligencia Artificial
Enlaces sobre Redes Neuronales
Enlaces sobre Computer Go

En los últimos tiempos, directamente agrego en mis enlaces de Delicious:

http://delicious.com/ajlopez/artificialintelligence

Los posts que escribo están bajo el tag:

Inteligencia Artificial

Espero que les sirva este material, para explorar tan fascinante tema.

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

Posted Mon, Feb 9 2009 8:21 by lopez | 2 comment(s)

Bertrand Meyer en Buenos Aires, Argentina

Recibo en estos días, un email, avisando de una charla de Bertrand Meyer, aquí, en Buenos Aires. Meyer es uno de los padres de la programación orientada a objetos con contratos, y creador del lenguaje Eiffel. Para ver en qué está trabajando, lo mejor es visitar su página en el sitio de Software Engineering del famoso ETH Zurich:

http://se.ethz.ch/~meyer/

(en mis intereses, ETH Zurich es también conocido por su trabajo en física y ciencias naturales, vean algunos de los premios Nobel que pasaron por ahí http://www.ethz.ch/about/bginfos/nobelprize/index_EN).

La charla es gratuita, no necesitan inscribirse, y es parte de los Seminarios Athena, de la gente de la Universidad Tecnológica Nacional, de Buenos Aires.

Para más información sobre los seminarios Athena (charlas anteriores,charlas futuras, comentarios, etc)
ver: http://www.seminariosathena.com.ar/

Como en esta seminario, en esas charlas no es necesaria inscripción previa ni conocimientos de alguna tecnología en particular.

El titulo del seminario es Touch of Class: How we teach introductory programming. Y será dado el próximo miércoles 11 de febrero. El lugar, el aula magna de Medrano 951, Buenos Aires, a las 19.00 hs. Está basado en el libro que publicó Meyer este año, con el mismo título.

El abstract en inglés:

Teaching programming faces a host of challenges, due in particular to the unprecedented variety of student backgrounds and to the demands of the IT industry. Techniques that worked well in the seventies do not scale up to today's context. The "concepts or skills?" debate is more relevant than ever, especially in the ever more globalized world of software development.

For the past 6 years, we have taught introductory programming at ETH, based on an "outside-in" approach that makes it possible to introduce the reality of large software while emphasizing the principles of sound software development. This approach has resulted in a forthcoming textbook ("Touch of Class: An Introduction to Programming Well With Objects and Contracts", Springer-Verlag, May 2009).

I will present the result of our experience, including metrics that we have systematically collected along the way, and draw conclusions regarding how to teach programming today. I will argue the task consists of teaching twenty-six seminal concepts, and will explore one of them in depth.

Hay otra charla el jueves, esta vez en la Facultad de Ciencias Exactas, de la Universidad de Buenos Aires. La charla sera en el aula 4 del Pabellon I de la Facultad de Ciencias Exactas y Naturales, en Ciudad Universitaria.

Programs that test themselves
Bertrand Meyer, ETH Zurich and Eiffel Software

"Automated" testing techniques as widely used today automate only part of the task, but leave aside the most difficult and time-consuming aspects: test case generation and test oracles. Using software with built-in contracts addresses both of these issues, leading to software that tests itself completely automatically, in a
"push-button"  style.

The talk will present concepts and principles behind push-button contract-based testing and present experiences with two tools, AutoTest and CDD (Contract-Driven Development), which have already uncovered
hundreds of bugs in released commercial software and have now been integrated as a standard component of the EiffelStudio IDE.

Bertrand Meyer is Professor of Software Engineering at ETH Zurich and Chief Architect of Eiffel Software. He is the author of a number of books including the best-seller "Object-Oriented Software Construction" (Prentice
Hall, Jolt Award 1998). He has led the development of the Eiffel language and supporting tools and libraries. He is a fellow of the ACM and has received the ACM Software System Award as well as the Dahl-Nygaard prize for
object technology and an honorary doctorate from the Technical University of Saint Petersburg. His latest book is "Touch of Class", an introductory programming textbook to be published in May 2009 by Springer.

Recuerdo haber leído varias veces, el libro de Meyer: "Object-Oriented Software Construction". Es un libro que merece ser releído cada tanto tiempo. Totalmente recomendable. Ahí encontré por primera vez al lenguaje Eiffel, y los contratos, muy interesante. Temo que Eiffel me chocó un poco, por el uso de mayúsculas, que en aquellos años me recordaban a Cobol y Ada. Recuerdo que en aquellos tiempos, Eiffel tenía renaming de clases, cuando había colisión de nombres. No había lenguajes con claros Namespaces, que aparecieron luego como extensión de C++.

Espero que Meyer disfrute de la visita a mi país. Aun en el mundo de Internet, es importante el contacto personal. Es muy bueno que gente de la industria y de la academia, venga a visitarnos. Muy bueno, también, que la UTN y la UBA hayan podido organizar estas charlas.

Si conocen otras actividades de Meyer en mi país, dejen comentario!

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

Posted Sat, Feb 7 2009 11:15 by lopez | 2 comment(s)

Charla de Inteligencia Artificial

Como saben, el tema de Inteligencia Artificial me entusiasma e interesa. Este siglo ya di tres charlas sobre el tema, es hora de volver sobre el amplio y diverso temario de lo que se ha dado a llamar históricamente IA.

Hoy, es un término que abarca disciplinas muy diferentes, con distintos temas como:

- Sistemas expertos
- Redes neuronales
- Algoritmos genéticos
- Programación evolutiva
- Lenguajes de programación
- Aplicaciones en juegos
- Robótica
- Algoritmos
- Vida artificial
- Agentes autónomos
- Mineria de datos

y como siempre, el tema de fondo: conseguir reproducir la inteligencia humana, que recién estamos comenzando a conocer. También existe el costado filosófico: ¿qué es inteligencia? ¿será posible crearla artificialmente?

Voy a tratar una introducción de varios de esos temas (no todos, que es demasiado), con conceptos y ejemplos, en la charla gratuita del próximo miércoles 4 de Febrero, desde las 18:30, en el Club de Programadores. Es gratuita, pero tienen que inscribirse:

Charla de Inteligencia Artificial

Espero que les interese. Algunos (demasiados) enlaces sobre el tema, en:

http://delicious.com/ajlopez/artificialintelligence
http://www.ajlopez.com/ia/

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

Posted Sun, Feb 1 2009 22:08 by lopez | 2 comment(s)