viernes, 22 de agosto de 2008

Jornadas de software libre 2008


Ayer estuve en las Jornadas Regionales de Software Libre, muy bien organizadas por CaFelug, la verdad es que estuvo muy bueno (hoy sigue) y les recomiendo ir.

Tuve la oportunidad de ir a las charlas de Raymond Hettinger, core developer de python y la verdad me encataron sus charlas. En la primera habló de python-3000 (py3k) y algunos de los features/cambios que hicieron en el lenguaje (que vale la pena aclarar, no es backward-compatible con código 2.x, aunque proveen de las tools para transformar el código). En cuanto suban el material de las charlas lo apunto.

En cuanto a la segunda charla, dió un tutorial de descriptors que estuvo muy bueno. Basicamente fue una charla muy didactica y con un nivel tecnico interesante.

Sobre el final del día y como broche de oro, habló John "maddog" Hall (su blog) titulada "Making Money and Saving Money with Free Software" donde hizo un muy comico (vestido de astronauta!) recorrido sobre las formas de emprender proyectos con software libre, los beneficios reales de este y en particular, se concentró en desmentir la falacia del TCO (Total Cost of Ownership), medida que algunas empresas utulizan como bandera de ataque el software libre, contra el valor del software libre en cuanto a flexibilidad para adaptarse a las necesidades de negocios y no de los negocios al software.

Bueno, no queria dejar de contar algunas cosas que vi, pronto pongo links al material

jueves, 3 de julio de 2008

El fin de los tiempos

Bueno, hace tiempo que quiero postear algo sobre esto. Parece que un cambio de paradigma GROSO se esta gestando.

Resulta que hay un señor llamado Alan Kay, ya consagrado científico, ganador del Turing Award 2003 (que es como el oscar pero en ciencias de la computacion), premio que otorgaron a Dijkstra, Knuth, Rivest+Shamir+Adelman (RSA), y otros. Kay se embarco en un proyecto cuyo proposito es "Revolucionar la programacion".

Para variar, entre las cosas que hizo Kay, está el lenguaje Smalltalk que lo inventó mientras trabajaba para Xerox. Dicho sea de paso, este lenguaje revolucionó el mundo de la programación, con el denominado Object Oriented Programming (OOP) que basicamente se transformo en el paradigma de-facto para la industria de software (salvo uno que otro kamikaze que programa COBOL u otras yerbas), ojo, en el ambito academico hay muchos otros paradigmas recopados como el funcional, pero no me quiero ir de tema.

Entonces Kay Recibió un funding de la NSF para llevar a cabo un proyecto PARA REVOLUCIONAR LA COMPUTACION, asi, como lo digo. Y se lo grantearon.

Este es el informe de avance del primer año, donde cuentan los delirios que se les ocurrieron. Basicamente proponen:

  • Reinventar los sistemas operativos

  • Reinventar las conexiones entre redes

  • Reinventar los soportes de informacion

  • Reinventar todo



Como? Inventaron un Meta-meta language- language (lo escribo en ingles porque los modificadores directos tienen sentido solo en ese idioma) que basicamente es un lenguaje para escribir lenguajes, incluso para reescribirse a si mismo. Si, limaron.

Entonces comenzaron a reinventar todo, obviamente, con el concepto de que TODO, TODO es un objeto. Conexiones de red, documentos impresos, pdf. Todo combinable, ya que los objetos deberian poder recibir estimulos de otros objetos, y saber responder, todo con mensajes. O sea, que un objeto deberia poder hacer SOLO lo que su interfaz (de objeto) le permite.

Es muy largo el informe, y sinceramente parece de ciencia ficcion al principio, pero a medida que vas leyendo no podes creer lo que estan haciendo.

Cada vez mas convencido, si este tipo levanta un dedo, es porque tiene algo para decir, ninguna pavada.

Les recomiendo, leanlo. Por mi parte a medida que pueda seguir les voy a contar mas.

Ahh, otra cosa, Kay tambien invento cosas como Etoys para enseñar a programar a los chicos, ya que tambien da clases en escuelas primarias, enseñando programación. En el informe (entre tantas cosas) dice que "los chicos deberian aprender a programar en el mismo momento en el que aprenden a escribir". Loco? en 20 años vemos.

Que lo disfruten!

Toda la info del proyecto en : http://www.vpri.org/html/work/ifnct.htm

gutes

miércoles, 21 de mayo de 2008

ET Phone Home: sobre neutrinos

Ayer encontré en slashdot un paper (en formato pdf) sobre unos tipos que plantean las comunicaciones intergalacticas (suena muy a ficción, pero básicamente se refieren a distancias enormes en el espacio) que como medio usan a los neutrinos.

Para entender mejor de que hablaban volvi a leer con mas detenimiento que son los neutrinos, que tipos hay, etc. Les cito algo de historia:

(NOTA: también descubrí que los papers de física de este tipo, estan escritos horribles, como una narrativa del siglo 13 sobre alguna construcción matemática, pero bue, debe ser su estilo particular)

Neutrinos


Los neutrinos son de la familia de los fermiones, son particulas super chiquitas, tan chiquitas que traspasan cualquier tipo de materia (mas chiquitos incluso que los fotones).

Resulta que W. Pauli postuló la noción de neutrino para encajar un error de cuenta que tenía cuando estab midiendo la conservación de energía y de momento en beta decays (según la sabia wikipedia, esto es cuando por resultado de un decaimiento radioactivo una particula beta (electron o positron) es emitido). Bueno, en fin, lo postuló (aparentemente) para describir que una particula no detectaba se llevaba la energía que le faltaba en la medición de energía, momento y momento angular.
El nombre "neutrino" se lo dió E. Fermi pero no voy a ahondar en esto que no lei nada.



Volviendo al paper. Primero discuten qué tipo de neutrinos son mejores para este tipo de comunicaciones, basandose en los niveles de Señal/Ruido que aceptan, también evalúa neutrinos de distintos niveles de energía (medidos en eV, electronVolt - 1 MeV/c² = 1.783×10−30 kg, parede que en fisica de particulas, la masa y la energía son intercambiables, gracias al laburo de Einstein, entonces esta medida se usa como medida de masa o energía).

Una de las cosas que postulan estos tipos es que los de SETI que son una fundación que se dedica a tratar de explicar la vida en el universo, no encuentran hace años ninguna señal que viene del espacio (o del mas alla) porque de alguna manera ya no se transmite sobre fotones o particulas mas grandes. O sea, que como no tenemos la tecnología como para sensar partículas más chicas entonces por eso (podría ser) que no podemos escuchar a los parientes de ET.

Después discute como codificar la información (usando la oscilación de los neutrinos) con propiedades de los neutrinos, tambien parece que plantean una especie de super rayos de neutrinos que tienen mucha energía (o masa) pero bue, mi super nulo entendimiento de la materia no me permite llegar ams alla.

Les recomiendo el paper, yo no lo terminé de leer, ni entendí un 10%. Lo que sí pude hacer, es acordarme por qué era eso de que quería estudiar física después de computación :D .

martes, 18 de marzo de 2008

Teorias acerca de otras mentes

Disclaimer: Este NO es un post computronico pero debo advertirles que es un poco volado (al menos el tema que trata). Si esperan algo mas terricola salteen este post.

Un amigo me prestó un libro Titulado Sistemas emergentes. O qué tienen en común hormigas neuronas, ciudades y software. de Steven Johnson. El libro es una especie de introducción un tanto computrónica a la inteligencia colectiva, este término refiere a la inteligencia que (con un apropiado uso del término) emerge de la interacción de indivduos (personas/animales/programas) con comportamiento de cierta forma acotado y atómico. Un ejemplo recurrente en el libro son las hormigas.

Las hormigas forman colonias y poseen un comportamiento bastante elemental como individuos. Una hormiga puede decidir cargar comida y llevarla al hormiguero, recolectar cadáveres y llevarlos al área que la propia colonia designó para esto. El asunto es (brevemente, ya que no es el propósito del post) que la colonia como una unidad tiene comportamiento del cual los individuos que la componen (las hormigas) no son conscientes, ni siquiera saben que está'ocurriendo, y por supuesto, tampoco ejercen una conducta que lleve a estos resultados colectivos. En fin, esa es muy brevemente, una posible explicación mediante un ejemplo de lo que significa el comportamiento emergente.

Pero dentro del libro, descubrí un tema que realmente me interesa, y es la capacidad del ser humano de elaborar teorías acerca de otras mentes. Y me voy a detener un rato en contar de qué se trata esto con 2 ejemplos sacados del libro:

La prueba de los smarties (Perner, Leekam, & Wimmer, 1987)


Si clickean en la imagen la van a ver mas grande. Pero aca va al traducción: Una maestra muestra a un niño una caja de smarties (unas pastillitas de chocolate muy conocidas, que vienen en tubito) y le pregunta:
- "Qué hay dentro de la caja?", a lo que el niño responde
- "Smarties."
- "No. Hay un lápiz." Responde la maestra.
Entretanto la maestra le cuenta que otro adulto (Jose) se va a incorporar a la charla, y le dice que Jose no vió el contenido de la caja. Entonces le pregunta al niño:
- "Si le muestro el paquete a Jose y le pregunto 'Qué pensas que hay en la caja'? Que pensás que me va a contestar?

Y aquí la diferencia: Un chico de 4 años respondería (en general y correctamente) "Smarties" pues sabe que le va a pasar igual que a el, que pensó que había eso. En cambio, uno de 3 años contestaría "un lápiz", erróneamente. Esto es a lo que me refiero con las teorías sobre otras mentes.

Algunas definiciones que encontré sobre este tema:


  • "Teoría de la mente": Es la atribución de estados mentales (e.g. pensamientos, creencias, deseos, intenciones) a otros (y uno mismo)(Premack & Woodruff, 1978).



  • Ojo que acá "mindreading" es como se lo llama nomas, no es nada paranormal...

    El entendimiento de estados mentales (lectura de la mente/mindreading) nos permite explicar eventos observables (acciones) mediante la inferencia de entidades no observables (creencias, deseos, etc.)


  • También involucra entender que los estados mentales del otro pueden diferir de los de uno mismo, y también pueden diferir con la realidad (lo que sea que sea la realidad :D) (por ej: falsas creencias, intentos insatisfechos)


Bueno, podría seguir escribiendo pero tengo este post en el tintero hace demasiado tiempo asi que corto acá, y quiza hago otro post después.

Unos links que pueden ser útiles para entender de que se trata esto:

La pagina de Malinda Carpenter: Esta mujer hizo una cantidad notable de estudios sobre el comportamiento de los chimpances. Les recomiendo leer su material.

Un curso de M. Carpenter [slides]. Esta muy bueno este PPT es como un resumen de un montón de laburos de muchas personas.

Shared intentionality. Lo escribieron M. Tomasello y M. Carpenter. Hasta ahora, los que me parece hicieron mas laburo en este campo.

Psychological projection: La visión de Freud de este fenomeno (Wikipedia)

Theory of mind (Wikipedia)

Este es un breve escrito sobre la relación entre la teoría de otras mentes y los "False Beliefs"

The mathematics of human thought. Quiza no tenga mucho que ver con lo que escribí, pero me parece que puede interesarles si llegaron a leer hasta acá (en realidad no tiene NADA que ver).

RECURSION AND HUMAN THOUGHT: WHY THE PIRAHÃ DON'T HAVE NUMBERS

\g

lunes, 25 de febrero de 2008

Cape Town Open Education Declaration

La verdad es que ya hice un post sobre esto en otro blog, pero parece que no intereso como pense que lo iba a hacer.

De todos modos ahora que tengo mi blog ( :D ) voy a expresar algunos pensamientos sobre esta iniciativa.

Qué es esta decalaración?


Básicamente se trata de un listado de puntos sobre el uso de recursos libres en la enseñanza.

La declaración la pueden encontrar en español acá. Entre otras cosas que me gustaría destacar sobre esta iniciativa estan:


  • Uso de recursos educativos libres, como ser "materiales de cursos con licencias abiertas, planificaciones de clases, libros de textos, juegos, software y otros materiales que apoyen la enseñanza y el aprendizaje".

  • Uso de "tecnologías abiertas que facilitan un aprendizaje colaborativo, flexible y en el compartir practicas de enseñanza que facultan a los educadores a beneficiarse de las mejores ideas de sus colegas".



Muchas veces me veo discutiendo el por que SI el software libre. Las personas con las que constructivamente discuto piensan que están intentando que un testarudo idealista cambie de idea, puede ser, no se. Lo que si se, es que el uso de tecnologías de software libre y de licenciamiento libre (es decir, material no-software distribuido bajo licencias que autorizan compartirlo, modificarlo y redistribuirlo, por ejemplo Creative Commons) permiten que el intercambio sea mas ágil, mas provechoso para la comunidad y para las generaciones futuras.

Desde el punto de vista educativo (al que me interesa llegar) es importante ver cómo repercute sobre la formación de nuestros alumnos el hecho de poder compartir lo que es de su autoría.
Una vez (hace un par de horas... ) un compañero educador que respeto mucho me dijo "Si a los chicos no los dejas escribir y ser autores, entonces lo que vos escribas no lo van a leer, de ninguna manera". Esto es buenisimo, qué pasaría si transpolamos esta idea al aprendizaje y al conocimiento?

Creo que dejar ese rol exclusivamente expositor al momento de dar una clase colabora a la incorporación de conocimiento.

Creo que incitar a que los recursos sean libres y no privativos (repito que no me refiero solo al software) colaboran a formar otro tipo de apertura mental.

En fin, ojalá les quede clara mi postura y ahonden un poco mas en recursos libres para la enseñanza.

Les dejo algunos links interesantes sobre los temas que mencioné y otros que no.

Iniciativas para educación libre: Un listado de inciativas relacionadas con la declaración de Cape Town.

Creative Commons: Esquema de licenciamiento libre para distribuir trabajos en general (educadores, cientificos, artistas, etc.) con distintos niveles de proteccion de la propiedad intelectual.

Free Software en Wikipedia: Explicacion del termino y un poco de historia.

Free Software Foundation: Eso.

Pagina de R. Stallman: Ferviente activista y fundador de la FSF.


\g

miércoles, 20 de febrero de 2008

RFC: Traits para PHP

22-02-2008 Disclaimer: Este es un post computronico. Si esperan algo mas terricola salteen este post.

Leyendo la lista de internals de PHP (version web: http://news.php.net/php.internals) Stefan Marr mando un patch mas que interesante.
Se trata de una implementacion de Traits para PHP.

Pero qué son traits?


Traits son básicamente Behavioral Blocks (en castellano, bloques de comportamiento) que engloban "funcionalidad" (lo pongo entre comillas porque en realidad engloban funciones).

En general estamos acostumbrados (o no, depende del lenguaje de programación...) a usar interfaces y hacer que nuestras jerarquías de clase implementen esas interfaces. Por ejemplo: (en algún lenguaje de programació que se lo banque)


Interface LaInterface
{
   public void metodo1();
   public int metodo2();
   ...
}

interface LaInterface
{
   public void metodoA();
   public int metodoB();
   ...
}


class LaClase implements LaInterface, LaOtraInterface
{
   /* Aca deben estar implementados todos los
     * metodos de LaInterface y LaOtraInterface
     */
}

Pero qué pasa con las jerarquías de clases? A veces tenemos que elegir entre un diseño elegante y bien objetoso, respetando los conceptos que aprendimos en OOP (o_O) como abstracción, encapsulamiento, bajo acoplamiento, polimorfismo, etc. (debo admitir que los tuve que buscar... ya que no me los acordaba...) que respete el problema a modelar o bien, hacer un codigo mas pulenta y que sea mas reusable faltando un poquito nomas, a los principios puristas de la OOP.

Entonces tenemos jerarquías de clases, donde hay clases que extienden a otras, creando familias complejas de padres con hijos herederos de algunos metodos que pueden modificar, o no, visibles dentro de la familia, privados a la clase o publicos al mundo en general...

Pero a veces, tenemos funcionalidades que queremos que muchas familias disfruten, por ejemplo: queremos que todas sepan hacer asado, sean del origen que sean... ya que viven en Argentina.

Entonces supongamos el siguiente ejemplo:



Acá tenemos una jerarquí (no muy util por cierto) que modela familias, de distinto origen. Todas las familias tienen un apellido, y saben tener hijos (espero sepan entender el propósito ilustrativo del ejemplo).
Entonces las familias saben cocinar diferentes tipos de comidas, dependiendo de donde son originarios. En el caso de los tanos: cocinar pasta, risotto y canoli. Los japoneses cocinan sushi y saben tomar sake y los argentinos, sabemos hacer asado, tomar mate e ir a la cancha (yo no, no voy a la cancha :D).

Pero estaría bueno que cualquier familia que viva en argentina sepa cocinar asado y tomar mate (lo mismo vale para cualquier actividad...). Entonces podemos hacer un "paquetito", o Trait (que ni por asomo se parece a un package) con distintas "habilidades". Por ejemplo:

trait CostumbresArgentinas
{
   public void cocinarAsado(){
     // codigo para cocinar asado...
   }
   public void tomarMate(){
     // codigo para tomar mate...
   }
}

Entonces podriamos tener una clase por ejemplo:

class FamiliaItaliana
{
   use CostumbresArgentinas;
   public void cocinarRisotto(){...}
   public void cocinarPasta(){...}
   public void cocinarCanoli(){...}
}

Y tener facilmente una familia italiana que tiene costumbres argentinas (raro no???).

A mi me gusta pensar en una forma de atravesar una jerarquía de clases de manera horizontal, como intento mostrar en este dibujo (click para agrandar):



Traits para PHP



Hay muchos detalles con que lidiar, por ejemplo los conflictos. Qué pasa si 2 traits tienen métodos con igual nombre? quién los rsuelve?

En esta primer implementacion para PHP, los traits son "Aplanados" dentro del c&código de la clase, el propio lenguaje no decide a quién darle prioridad con los conflictos (como se hace en algunos lenguajes) esto se dejo a decision del programador. Uno puede hacer cosas como:

class Hablador {
    use A { !smallTalk }
    use B { !bigTalk }
}

Donde la clase Hablador tiene los metodos del Trait A y del Trait B, pero excluyendo el metodo smallTalk del Trait A y el bigTalk del trait B. También se pueden renombrar métodos al incluir un Trait en una clase.

Una ventaja que tiene esto es que no tiene penalizaci&ocaute;n en runtime, ya que solo es una forma de copy-pastear codigo de una manera formal entre clases.

Les recomiendo leer lo que escribio este hombre Stefan, esta muy bien explicado el caso para PHP.

Bueno, dejo de escribir porque si no se van a aburrir. Espero que se entienda lo suficiente para que si les interesa, lean mas.

/g

Lean aca.
Mas info sobre traits aca.
O pueden leer mas sobre esto en la Tesis de Nathanael Schäarli.

Primer post

Hola,
bueno hace muchos meses que tengo este blog y esta vez me decidi a empezar a escribir.
Basicamente quiero que este sea un lugar donde volcar ideas, opiniones y demases. Son todos bienvenidos a discutir y eso..

chau!