Automágica: durante 2017 estoy trabajando bastante en Automágica, mi software para editar libros: Más información - Posts relacionados

Viendo a los conectores lógicos como relaciones entre conjuntos

Mi amigo Joel estudia Filosofía en Rosario y este fin de semana estuvimos charlando sobre lógica. Durante la charla me enseño que los conectores lógicos se pueden pensar como relaciones entre conjuntos. Yo nunca los había visto así.

Esta forma de pensarlos es a veces muy útil y sirve para darnos cuenta cual es el conector indicado para representar cierto conocimiento. Por ejemplo, muchas veces me encontré queriendo representar conocimiento del tipo "Los conejos son blancos" y errónea e instintivamente escribía:

B(x): x es blanco

C(x): x es conejo

C(x) ^ B(x)

Lo cual es un error. La forma correcta de representar ese conocimiento es:

C(x) -> B(x)

La implicación entre C(x) y B(x) puede entenderse una forma muy simple:

C es el conjunto de todos los conejos y B es el conjunto de todas las cosas blancas.

Recordemos que la información que queremos representar es "Los conejos son blancos", enfatisando: Todos los conejos son blancos. No hay conejos grises o negros, todos son blancos.

El ejemplo en cuestión no era este, sino otro, pero lo importante es que Joel me explicó que la implicación es equivalente a la relación entre conjuntos de inclusión e hizo un dibujo parecido a este:

Conejos blancos

En el dibujo se ve claramente el exacto conocimiento que queríamos representar: si algo es conejo, entonces es blanco. Si pertenece al conjunto C entonces pertenece al conjunto B. Porque el conjunto B incluye al conjunto C. El conjunto de las cosas blancas incluye al conjunto de los conejos.

El resto de los conectores lógicos también pueden verse como relaciones entre conjuntos.

AND : intersección

AND o conjunción, muchas veces simbolizado con ^, es verdadero cuando los dos predicados que conecta lo son. Así pues B(x) ^ A(x) será verdadero cuando x pertenezca tanto a B como a A.

AND sin corchetes

OR: unión

OR o disyunción es una relación menos estricta ya que para ser verdadera solo necesita que uno de sus predicados sea verdadero. En el ejemplo anterior, que x pertenezca a B o a A. Eventualmente podría pertenecer a ambos conjuntos.

OR sin corchetes

XOR: unión - intersección

Unión MENOS intersección. La disyunción exclusiva es verdadera cuando x pertenece exclusivamente a uno de los conjuntos, pero es falsa cuando pertenece a ambos.

XOR

-> : inclusión

Es el caso del ejemplo de los conejos con el que empezó este post.

IMP sin corchetes

<-> : mutua inclusión

La doble implicación es un caso especial de la implicación ya que se define como A -> B AND B -> A. Así mismo su representación en forma de conjuntos es un caso especial de la inclusión. En el dibujo puede verse claramente que cuando decimos A(x) <-> B(x) estamos diciendo que cualquier elemento x que pertenezca a A también pertenece a B.

bimp

NOT : no pertenencia

Todos los conectores pueden pensarse como conjuntos: NOT A(x) significa que el elemento x no pertenece a A.

NOT

Para finalizar: todos los conectores lógicos pueden pensarse como relaciones entre conjuntos. Si se crean conectores a partir de algunos de los listados anteriormente, también se podrán definir las relaciones entre conjuntos correspondientes.


3 razones fundamentales por las cuales el Estado debe usar Software Libre

Plasmo en el blog esta idea por que me parece importante compartirla.

Primero repacemos dos conceptos:

Software Libre

Cuando hablamos de Software Libre nos referimos a software que da a sus usuarios una suma de libertades. La libertad de ejecutar, copiar, distribuir, estudiar, cambiar y mejorar. De un modo más preciso, un software es considerado libre cuando le da a todos sus usuarios estas 4 libertades:

  • La libertad de usar el programa, con cualquier propósito (libertad 0).
  • La libertad de estudiar el funcionamiento del programa, y adaptarlo a las necesidades (libertad 1).
  • La libertad de distribuir copias, con lo que puede ayudar a otros (libertad 2).
  • La libertad de mejorar el programa y hacer públicas las mejoras, de modo que toda la comunidad se beneficie (libertad 3)

Software Privativo

En oposición al tipo de software que da libertades a sus usuarios, se considera Software Privativo a aquel que limite su copia, ejecución, distribución, estudio o modificación.

Recibir un software y tener prohibido darle copias de ese software a nuestros compañeros es un claro ejemplo de Software Privativo. También lo es software que no podemos modificar, ya sea porque su código fuente es inaccesible (no nos fue proporcionado y solo disponemos de una versión ejecutable del software) o porque (a pesar de disponer del código fuente, como es común en los programas escritos en lenguajes interpretados) su licencia de uso nos lo impide.

Para más información sobre Software Libre y Privativo, así como definiciones más exhaustivas, se puede visitar el sitio web del proyecto GNU: http://www.gnu.org/philosophy/philosophy.es.html

Dadas las dos definiciones previas enunciamos:

El estado no puede usar Software Privativo para cumplir sur rol, si lo hace está traicionando la confianza del pueblo.

En el resto del post se justifica esta afirmación.

¿Por qué?

Hoy vivismo en la llamada Sociedad de la Información. Muchas de las actividades que realizamos (como pagar impuestos o estudiar en la universidad) son replicadas en datos procesados por computadoras y archivados en soportes digitales. Muchas veces estamos en contacto con estas computadoras sin siquiera darnos cuenta o pensar en ello: cuando sacamos dinero del banco, pagamos por combustible o recibimos un ticket luego de comprar alimentos.

Entidades públicas y privadas hacen uso de este tipo de nuevas tecnologías para llevar a cabo de forma más eficiente sus actividades. El Estado imprimiendo impuestos para su cobro es un ejemplo de esto, pero por supuesto no el único.

En esta Sociedad de la Información el estado necesita utilizar Tecnologías de la Información para llevar a cabo una de sus funciones: mantener los registros públicos. Registros que indican quienes somos, que poseemos o que hacemos. Estos datos no pertenecen al estado, sino que son de los ciudadanos, pertenecen a la nación.

Cuando digo que necesita hacerlo trato de expresar que imperiosamente necesita hacerlo. No tiene otra alternativa, ya que no hacerlo así (no utilizar Tecnologías de Información para realizar las tareas que lo demanden) implicaría llevar un ritmo imposible de emparejar con el resto del mundo y se auto aislaría.

Cuando la administración pública maneja los datos de los ciudadanos con Tecnologías de la Información debe asegurarse de respetar 3 principios.

(1) Seguridad

Debe asegurarse de que nadie que no tenga el derecho de hacerlo acceda o altere los datos. También debe asegurarse de que nadie pueda evitar que los ciudadanos tengan acceso a esos datos.

(2) Persistencia

Debe tener en cuenta la persistencia de la información. Hay información que debe guardarse por 15, 50 o incluso 100 años. Tal vez no existe información que debamos guardar por tanto tiempo, pero de todas formas tenemos que poder hacerlo si así lo queremos, para utilizarla por ejemplo con fines estadísticos.

Tengamos en cuenta que estamos hablando de guardar información por más tiempo que el que la computación lleva existiendo.

(3) Transparencia

Cuando la administración pública usa software, lo está haciendo para implementar mandatos de la Ley. Y debe implementarla de una forma que pueda ser verificada por los ciudadanos. Ellos deben poder asegurarse de que la la ley se está siguiendo correctamente. Esto es fácil de hacer cuando se usas procedimientos manuales, pero cuando estos procedimientos son implementados parcial o totalmente en software, se necesita saber que hace el software. Si no se sabe, puede suceder que el software esté haciendo cosas en contra de la ley sin que nos enteremos. Si de alguna forma nos damos cuenta de que algo se está haciendo en contra de la ley, tampoco podríamos cambiarlo!

Justificación

De los 3 principios Persistencia es el único que podría cumplirse usando Software Privativo. Podría cumplirse solo si quien produce el software se compromete a adherirse a estándares libres, almacenando los datos que manejan exclusivamente con formatos considerados estándares libres y comunicándolos exclusivamente con protocolos considerados estándares libres. Solo en este caso el uso de Software Privativo podría no objetarse (para el cumplimiento de este principio), pero.. ¿hay algún Software Privativo que haga esto? ¿Algún productor de Software Privativo nunca cayó en la tentación de imponer su propio estándar?

Si bien sería teóricamente posible utilizar Software Privativo y cumplir con este principio, todavía existen otros 2 principios que se deben respetar.

Con Software Libre siempre se conoce la forma en que los datos son almacenados y comunicados.

Seguridad. Si bien el Software Libre no es naturalmente más seguro que el Software Privativo (ambos pueden tener bugs, los errores de programación simplemente suceden) insertar vulnerabilidades en forma intencional es mucho más difícil hacerlo en el primero.

En el Software Libre el código fuente está disponible para ser examinado por cualquiera que quiera hacerlo y esto es justamente lo que hace que sea en extremo difícil, sino imposible, esconder en él instrucciones maliciosas como sería una puerta trasera. En la práctica esta dificultad aumenta a medida que el software en cuestión tiene más usuarios y desarrolladores. La Ley de Linus enuncia que Dados muchos ojos, todos los errores serán obvios.

El tercer principio, Transparencia, SI es inherente al Software Libre y está relacionado con el principio anterior. La segunda libertad consiste en poder estudiar cómo el software está hecho. Esto permite a los usuarios del software, a los responsables de su funcionamiento (en este caso el Estado) o a quienes son afectados por este (los ciudadanos) auditar cómo se esta implementando la ley. Si alguien detecta un error puede corregirlo y verificar que el error ha desaparecido (si no posee las habilidades necesarias para corregirlo puede contratar a alguien que lo haga por él, pero no esta limitado de otra forma). Eventualmente la mejora podrá ser incorporada al software original.

Otras razones pueden darse para justificar el uso de Software Libre en el Estado y estas mismas pueden desarrollarse con más profundidad. Mucha documentación al respeto está disponible en Internet. Pero creo que estos 3 puntos son claves y es importante que los tengamos presente.

Una cuarta razón

No todos los países son monoculturales, y esto es especialmente cierto en América Latina. Hay países que se han comprometido en mantener la cultura de sus pueblos originarios. Una forma de hacer esto es manteniendo los registros públicos en las lenguas nativas del país (lenguas sin importancia comercial, pero muy importantes para el país). No hay esperanza de que las empresas de Software Privativo den soporte a estas lenguas, pero si se usa Software Libre los propios países pueden soportarlas.

Fuente e ideas

Este artículo está basado en un video en el que habla Federico Heinz. El video es referenciado desde wikipedia en inglés.

En el video se mencionan los 3 principios pero no le dieron tiempo a Fede para justificar los 3. Para completar la información utilicé partes de este artículo.

Más información al respecto puede encontrarse en el sitio web de Fundación Vía Libre.


Robos cerca de la facultad

replico esta nota de El Litoral por si sale de línea.

Estudiantes y personal de la casa de estudios son víctimas de robos

Preocupan los asaltos en la zona de la Universidad Tecnológica

Les arrebatan celulares y los intimidan -a veces a mano armada- para apropiarse de dinero, aparatos electrónicos y zapatillas. Los ladrones son jóvenes, en su mayoría menores. Algunos estudiantes y trabajadores de la facultad cambiaron su rutina y salen en grupo o se vuelven a sus casas en taxi.

Con armas blancas, revólveres o bajo intimidación son asaltados los alumnos, docentes y no docentes en las inmediaciones de la Facultad Regional Santa Fe de la Universidad Tecnológica Nacional.

Los hechos suceden principalmente de noche y son perpetrados por jóvenes, en su mayoría menores, a pocas cuadras de la casa de estudio. Los ladrones andan a pie o en bicicleta, merodean la zona y transitan por las calles que conducen a las paradas de colectivo. Exigen celulares, plata y zapatillas y no se amedrentan al toparse con grupos.

Las historias se comentan como pan caliente en las aulas y oficinas de la Universidad Tecnológica. Y aunque los asaltos en la vía pública los sufren desde febrero, los testigos sostienen que se incrementaron en los últimos meses.

"Desde que empezaron las clases no hay noche que no haya un alumno afectado. Incluso, al hijo de un empleado de la UTN le gatillaron el arma pero la bala no salió. El jueves o viernes pasado, a tres chicos que esperaban el colectivo juntos les robaron con armas", comenta Sonia, una docente de la casa de estudios, cuyo hijo, Eduardo, fue intimidado por ladrones hace tres semanas.

Sonia, al igual que otras personas, nota que a partir del asesinato de la vecina de Guadalupe hay más policías "de mañana y de tarde; pero de noche no hay".

Esta docente está "preocupada porque no ve presencia policial desde las 7 de la tarde y hasta las 12 de la noche que es cuando los estudiantes salen de la facultad". "Me preocupa como trabajadora de esta facultad, como mamá de un estudiante pero además como miembro de la sociedad porque estamos viendo que hay varios asaltos cometidos por rateritos, no son ladrones que se mueven en auto, son chicos de la calle. Se soluciona poniendo uno o dos patrulleros que se vayan moviendo desde la facultad a las paradas de colectivo".

Solos o en grupos

Eduardo tiene 22 años y estudia ingeniería civil. Le robaron hace tres semanas, cerca de las 11 de la noche, en el camino de la facultad a su casa. Dos chicos que parecían estar alcoholizados lo siguieron unas cuadras por Patricio Cullen. Eduardo simuló atarse los cordones para dejarlos pasar, pero no logró desviar de su objetivo a los malvivientes.

Uno lo frenó y le dijo que se quedara quieto."Pensé en pegarle porque lo vi solo pero apareció el otro por atrás. Cuando me dijo: `Dame todo porque si no te mato o algo así, porque ya no me acuerdo bien, le di el celular que tenía a mano. Pero cuando escucho que el que venía atrás monta una pistola, le di todo", relata Eduardo.

Sonia, su mamá, sostiene que cuando le robaron a su hijo le llamó la atención que la zona parecía "liberada". "Salieron con mi esposo a recorrer el barrio, desde La Lona hasta la Iglesia de San Cayetano, por la costanera y por Guadalupe, lo recorrieron durante dos horas y no encontraron un solo móvil de policía".

Silvina trabaja en la Dirección Académica de la UTN y fue otra víctima de los ladrones, en las inmediaciones de la facultad. El 10 de agosto, luego de pasar la plaza Chaplin, dos personas la interceptaron. "Una me amenazó con un cuchillo y me pidió la cartera. Le decía que no pero cuando me acercó más el cuchillo me asusté. Terminó de tironear la cartera, me rompió el saco que llevaba puesto y se la llevó", relató.

A Valeria, una joven de 19 años, y a sus cuatro amigas le salieron al cruce hace dos semanas, también a la altura de la plaza Chaplin. Terminaron de practicar fútbol en el estadio de la UTN y las sorprendieron para robarles. "Eran dos, tenían más o menos nuestra misma edad y estaban bien vestidos. Nos pidieron primero los celulares, cuando le dije que no tenía me pidieron lo que tuviera". Las chicas escaparon corriendo y a los gritos, y los rateros se fugaron por la ciclovía.

La UTN se ocupa

Las autoridades de la Facultad Regional Santa Fe de la Universidad Tecnológica Nacional (FRSF-UTN) están preocupadas por los robos que sufren alumnos, docentes y no docentes.

El Ing. Jorge Caminos, secretario General de la casa de estudios, dijo que cada vez son "más frecuentes" los asaltos y que "la inseguridad es bastante importante en la zona". "No es en la facultad misma sino cuando la gente termina sus actividades y se va a tomar un colectivo o a otro lado".

Si bien la situación se registra desde hace algún tiempo, Caminos sostiene que "en el último mes, pasó a ser extremadamente preocupante. Convivimos diariamente con gente que se está drogando con pegamento y continuamente hay muchachos dando vueltas por acá. Hemos hecho todas las denuncias correspondientes a todos los lugares posibles, pero vienen, se los llevan y al rato están nuevamente acá. Y esta gente también está causando algunos problemas", comentó Caminos.

"La mayor preocupación es que cuando uno hace la denuncia o habla con la gente te dicen que son menores, que los detienen pero al rato salen. Y con los drogadictos que hay dando vueltas pasa lo mismo. Y uno ve que es así. Viene un patrullero, los cargan y a las cuatro horas están instalados otra vez acá", sostiene el secretario de la facultad.

Los asaltos no son todos iguales. "Hay de todo un poco: manoteos, acciones con violencia; todo depende de cómo reaccione la gente que está siendo asaltada. Han agredido a algunos docentes y hay otros casos que los paran, les dan algo y no pasan a una agresión física", comentó Caminos, tras indicar que están preocupados de que la situación pase a mayores.

Para evitar eso, desde la UTN se comunicaron con autoridades de la comisaría 5°, con personal de gobierno y de la Jefatura de la Policía Provincial.

La respuesta que recibieron es que "toman acciones pero no lo vemos en los hechos", dice Caminos. "Hay un patrullero dando vueltas y por ahí algunos policías, pero nada más que eso. Los asaltos siguen sucediendo", remata la autoridad universitaria, quien dice que hablan en forma permanente "con todos los actores que puedan ayudar" a solucionar el tema.

Cambio de hábitos

Los que fueron protagonistas de robos ahora se cuidan u optan por cambiar la rutina. Quienes viven cerca de la facultad utilizan taxis y remises, los demás salen en grupo para tomar el colectivo o esperan que alguien los pase a buscar en auto. Pero más allá de las precauciones que toman, no se sienten seguros. Queda el miedo, la incertidumbre de que vuelva a pasar.

"Antes salías tranquila, ahora tenés que tomar todos los recaudos del caso: no andar con bolsos grandes, el celular te lo tenés que meter dentro del vaquero, no podés llevar billetera y tenés que andar con la plata justa porque corrés el riesgo de que te desvalijen", sostiene Gladys, una empleada de la Universidad que trabaja en el Departamento de Concursos de la Dirección de Recursos Humanos y que se salvó de ser asaltada gracias a que pidió auxilio a un vecino.

"Hace cuatro años que vivo en esta zona. Siempre alquilo por acá para ir caminando hasta la facultad. Ahora tengo que arreglar con mi novio para que me vaya a buscar o molestar a alguien en la facultad para que me traiga. No es como antes que vos salías tranquila y en 5 minutos estabas en tu casa", agregó Gladys.

Similares medidas toma Valeria, que a partir de las 20 horas vuelve en taxi hasta su casa. Eduardo comenzó a utilizar la bicicleta, porque así se siente más seguro y Sonia se compró un auto para unir el camino de su casa a la facultad, o si va sin móvil espera a que alguien la acerque o acompañe a su casa.


Harry Potter y los Lenguajes de Programación

Buscando información sobre diseño de lenguajes de programación (just for fun) me topé con un artículo que relaciona este tópico con los libros de Harry Potter (de los que soy un feliz lector). Para darle más fuerza a la casualidad, el autor del artículo es la misma persona que creó el lenguaje de programación que más me gusta.

Me tomo la libertad de traducir este artículo de Guido Van Rossum, creador del lenguaje de programación Python.

La Teoría de Harry Potter para el Diseño de Lenguajes de Programación

por Guido van Rossum

14 de Agosto de 2005

Resumen

Una comparación alegre de como exitosos autores de ficción y diseñadores de lenguajes de programación pueden por accidente encontrar en su primer trabajo las pistas de sus éxitos futuros.

La teoría

Me encanta leer los libros de Harry Potter, y recientemente se me ocurrió una analogía interesante entre escribir series de libros de ficción y diseñar lenguajes de programación.

Estoy seguro de esto: cuando J.K. Rowling escribió el primer libro de Harry Potter (como el primero de una serie de siete) había desarrollado una buena idea de las cosas que eventualmente iban a pasar en la serie pero no tenía la idea exacta de lo que iba a pasar en los restantes libros, tampoco todos los detalles de cómo funcionaría la magia en el mundo que estaba creando.

También estoy asumiendo que a medida que iba escribiendo los volúmenes sucesivos, volvía a los primeros libros para rescatar detalles que habían sido introducidos solo para darle color a la historia y darles un nuevo significado. Por ejemplo, dudo que cuando inventó el nombre Voldemort ya haya pensado que "I am Lord Voldemort" (Yo soy el Señor Voldemort) sería un anagrama de "Tom Marvolo Riddle" (Tom Riddle no es un nombre muy convincente para quien terminaría siendo la persona más mala del mundo, pero aparentemente no pudo encontrar un buen anagrama para Voldemort solo). Tampoco pienso que haya pensado que la patética rata de Ron, Scrabbers, sería un animago (el hecho de que le falte un dedo, al menos en lo que yo se, no aparece en ninguno de los dos primeros libros). Creo que ya captaron mi idea.

De forma similar, no había pensado en iteradores o generadores cuando se me ocurrió por primera vez el for-loop de Python o usar % como un operador para el formateo de strings, y de hecho, usar 'def' para definir tanto funciones como métodos tampoco fue parte del plan inicial.

De la misma forma en que los sucesivos libros de Harry Potter requieren tener continuidad (el gusto de Dumblendor por los dulces no puede cambiar drásticamente en el tercer libro), las versiones sucesivas de Python están limitadas por serios requerimientos de compatibilidad hacia atrás.

A veces es fácil volver y generalizar una característica, por ejemplo, trasnformar las funciones de conversión int(), str() y list() en clases. Por otro lado, una reciente discusión en python-dev sobre la jerarquía de las excepciones (PEP 348) ha mostrado que deciciones anteriores pueden ser menos que ideales. Las inconsistencias en la convención de nombres y la calidad del API son otro ejemplo.

Comentarios al artículo original: http://www.artima.com/forums/flat.jsp?forum=106&thread=123234

Correcciones: por desconocer cuestiones internas del lenguaje o de mi traducción en sí son bienvenidas.


Nos subimos al podio de PyWeek 5!!

En vísperas de un examen final y esperando encontrar a mi mamá en el departamento (pasó de visita luego de un curso todo el día en Paraná) llegué a mi casa esta noche a las 20:55. Mientras subía las escaleras recibí un mensajito:

Avisen los resultados, estoy en un casorio.

Diego Levental

Y ahí lo recordé: hoy sábado a las 21 hs (Argentina) estaban los resultados de la competencia PyWeek 5.

Entonces encendí mi computadora y entré al canal de chat de #pyweek, anunciaban que faltaba 1 minuto para que estén los resultados. Apunté mi navegador a la página del evento y me quedé unos momento apretando el botón de recargar.

Luego aparecieron los resultados. Estábamos en tercer lugar (Yupiii!!). Los resultados puede verse aquí. Y estos son los resultados de nuestro Twisted Zombie.

Si el viernes anterior a que empieza la competencia, cuando me anotaba para participar y empezaba a convocar a mis amigos para formar un equipo, me hubiesen dicho que lograríamos ese resultado no lo habría creído de seguro. Pero la semana de trabajo paso, fue productiva, nos divertimos, aprendimos y el sábado que entregamos nuestro juego estuvimos satisfechos con el trabajo realizado.

Creo que no me equivoco al decir que superamos nuestro objetivo.

Muchas gracias a todo el equipo:

  • Manu
  • Mariano
  • César
  • Diego
  • David
  • y Seba

Muchas gracias también a todos los que probaron el juego y nos dieron sus comentarios.

Felicitaciones a todos (más de 50) los otros equipos e individuales que participaron del concurso. Son los que le dan sentido al mismo. En especial, felicitaciones a los equipos argentinos que siempre dejan huella. Y gracias por incentivarlos a participar!

PS: Ho! llegaste a este blog por alguna misteriosa razón y no sabés de que estoy hablando? No dejes de jugar Twisted Zombie!


Una historia de emoticons

El 19 de septiembre de 1982 a las 11:44, hora de la costa este de los Estados Unidos, Scott Fahlman proponía en medio de una serie de mensajes medio en serio y medio en broma el uso de la secuencia de caracteres :-) para denotar que algo se estaba escribiendo en broma en un mensaje que decía:

19-Sep-82, 11:44

From: Scott E Fahlman <Fahlman at Cmu-20c>

I propose that the following character sequence for joke markers:

:-)

Read it sideways. Actually, it is probably more economical to mark things

that are NOT jokes, given current trends. For this, use

:-(

Que traducido quiere decir:

19-Sep-82 11:44 From: Scott E Fahlman Propongo que se utilice la siguiente secuencia de caracteres para marcar lo que sean chistes: :-) Se lee girando la cabeza. De hecho, probablemente sería más práctico marcar las cosas que NO sean chistes, dado como está el patio. Para eso, se podría usar :-(

La propuesta cayó bien, fue ganando apoyo en la CMU y luego en otras universidades y empresas, se fue difundiendo por Internet, y el resto, como se suele decir, es historia y ahora hay montones y montones de emoticonos distintos para indicar otras tantas cosas (http://es.wikipedia.org/wiki/Emoticono#Estilo_occidental).

El propio Scott Fahlman reconoce en la página Smiley Lore :-) que es perfectamente posible que se le hubiera podido ocurrir utilizar estos mismos caracteres antes a alguien, pero dice que nunca ha conocido a nadie que diga tal cosa y que nunca ha visto ninguna prueba de que esto hubiera sucedido.

Pero casi más curiosa que la del origen del smiley en sí es la de como se recuperó el mensaje original de Fahlman, que durante mucho tiempo se consideró perdido pues ni él ni nadie lo habían guardado porque en su momento nadie pensó que pudiera llegar a tener una relevancia tan especial; desde luego es como para pensar otra vez más si no formamos parte de una civilización virtual.

Así, después de varios intentos fallidos anteriores para localizarlo Mike Jones se propuso encontrar el mensaje en cuestión y en febrero de 2002 se puso a repasar el código fuente de los programas bajo los que corría el sistema de mensajes en los que fue publicado el de Fahlman para averiguar qué nombre podía tener el archivo en el que se guardaban los mensajes.

Con esta información se puso en contacto con Howard Wactlar, el antiguo director de los servicios de informática de la CMU, para ver si se podrían recuperar esos ficheros. Watclar y Bob Cosgrove, quien en ese momento dirigía los servicios de informática de la universidad, descubrieron que aún había almacenadas cintas con copias de seguridad de la época en la que

Fahlman más o menos recordaba haber escrito el mensaje… el problema era localizar un lector y un ordenador que fueran capaces de leerlas, además de localizar las cintas en sí.

Dave Livingston encontró una unidad de cinta de 9 pistas que aún funcionaba, que conectada a un ordenador con FreeBSD instalado permitió leer las cintas que Kirk Berthold y Michael Riley finalmente localizaron almacenadas en otro lugar, y, finalmente, Jef Baird se encargó de ir leyendo cinta tras cinta de las que aún funcionaban hasta que el 10 de septiembre de 2002 por finlocalizó el mensaje en cuestión, poniendo fin a un interesante ejercicio de arqueología informática al que el propio Fahlman llamaba el «Proyecto Celacanto Digital».

El hilo de discusión en el que fue publicada la propuesta de Fahlman, junto con una descripción más detallada del proceso de recuperación de este se puede leer en el hilo original :-) (http://www.cs.cmu.edu/%7Esef/Orig-Smiley.htm).

Fuente: http://www.microsiervos.com/archivo/internet/cuarto-siglo-emoticonos.html

Gracias Gustavo por pasarme este artículo por mail.


Twisted Zombie para Windows

Twisted Zombie, el juego que desarrollamos en una semana para la quinta edición del concurso PyWeek ya funciona en Windows. Está escrito en Python, un lenguaje multiplataforma, y hemos tenido en cuenta algunas consideraciones para que funcione sin problemas en distintos sistemas operativos. Incluso lo hemos probado en un par.

Pero para usarlo en Windows necesitás tener instalado Python y Pygame.

El siguiente es un paquete con todo lo necesario para correr el juego si necesidad de instalar nada más: Twisted-Zombie-1-Win.zip

Este es el código fuente del archivo setup.py que utilicé para crear el paquete:

# setup.py es usado para generar un paquete autocontenido

# para Windows. Incluye el interprete de Python, PyGame

# y otros modulos utilizados en el juego.

# Uso: C:Python25python.exe stup.py py2exe

# Version de py2exe: 0.66

# Nota: en run_game.pyw cambiar os.path.dirname(__file__)

# por la ruta al directorio donde esten los fuentes del

# juego. Ej: 'C:tz'



from distutils.core import setup

import py2exe

import os



options = {

    "py2exe": {

        #"compressed": 1,

        #"optimize": 2,

        #"excludes": excludes,

        "includes": ["pygame", "pygame.locals", "random", "pickle"],

    }

}



data_files = [ (x, [os.path.join(x, e) for e in z]) for d in ("lib", "data")

               for x,y,z in os.walk(d) if not ".svn" in x ] + [ "README.txt"]



setup( console=["run_game.pyw"], data_files=data_files, options=options)


irc2html.py

Ayer colgué del blog el log de un tutorial dictado a través del IRC. Cuando busqué en Google un formateador de logs de irc no encontré lo que buscaba. El principal feature que me interesaba era que se distinga a los diferentes usuarios con diferentes colores. Probablemente podría haber buscado con un poco más de empeño y habría encontrado lo que buscada, al fin de cuentas ya había usado un programa así hace unos años, pero me hubiera perdido de una hora entretenida programando y aprendiendo Python.

Script irc2html.py

Primero lo primero. Tal vez llegaste a este blog buscando lo mismo que yo pero más adelante en el tiempo. Good news: irc2html.py. UPDATE: irc2html-f.py es una versión mejorada tras recibir un comentario en este post.

Uso:

./irc2html.py charla.log

escribe en la salida estándar código html listo para embeber. También podés hacer:

./irc2html.py charla.log > charla.html

(prometo que tu browser no se va a quejar)

Un color para cada uno

Como decía más arriba, lo que más me interesaba era que se distinga, mediante colores, lo que los distintos usuarios dicen. Esto se hace más difícil a medida que aumenta el número de usuarios. La dificultad radica en encontrar colores lo suficientemente diferentes como para distinguir a los usuarios. Lo primero en lo que pensé fue en hacer una función que reciba un color inicial y que luego vaya saltando por la paleta de colores a medida que iba necesitando más colores.

Paleta de Colores

Hice algunas pruebas pero no prosperaron. Por suerte esto me sirvió como escusa para practicar yield y generadores y Python. Terminé con una implementación mucho menos ambiciosa que la original:


# Generador de colores:

#

# Para ayudar a distingir lo que dice un usuario de lo que dice otro,

# se utilizan distintos colores para cada uno.

#

# La idea original del generador de colores era que vaya saltando por

# la paleta de colores según un patrón matemático.

# La actual implementación es más simple y etática.



color_list = ['ff0000', 'fff200', '00ff00', '00fff2', '0000ff', 'aa18ff',

              'ff00fb', 'fbb636', 'b1466b', '3d3166',  'bfbf2e', '377972']



# Lighter colors:

#color_list = ['fff1df', 'feffdf', 'e3ffce', 'ffe4df', 'fcdfff', 'e7dfff',

#              'e7f1ff', 'e7fff9', 'f3ffe7', 'e9e9e9', 'ffedb9', 'f0e9d5']



def color_gen(l):

    colors = l[:]

    colors.reverse()

    while True:

        if colors:

            yield colors.pop()

        else:

            colors = l[:]

Expresiones regulares

En el script hago uso de expresiones regulares para parsear las líneas del archivo de log. El archivo sobre el que trabajé tenía dos tipos de líneas. Con mensajes de usuarios, como:

'<pablo_!~pablo@r190-64-130-143.dialup.adsl.anteldata.net.uy> [17:00] comprendido marga :)\n'

o de información como:

'-charm.oftc.net- [17:00] garaguas (~garaguas@host193.200-82-125.telecom.net.ar) joined the channel\n'

Me interesan la primeras, a las segundas las puedo ignorar. La expresión regular que usé fue:

'\<(?P<nombre>.+)!.*\>(?P<dicho>.+)$'

y se lee:

1) el carácter '<'.

2) de 1 a n caracteres de cualquier tipo (excepto '\n') y a las cadenas que matchen en esta parte de la expresión voy a referenciarlas luego como 'nombre'.

3) el carácter '!'.

4) de 0 a n caracteres de cualquier tipo (excepto '\n').

5) el carácter '>'

6) de 1 a n caracteres de cualquier tipo (excepto '\n') y a las cadenas que matchen en esta parte de la expresión voy a referenciarlas luego como 'dicho'.

7) final de línea ($).

Un ejemplo en el REPL de Python:

>>> import re

>>> a = '<pablo_!~pablo@r190-64-130-143....> [17:00] comprendido marga :)n'

>>> b = '-charm.oftc.net- [17:00] garaguas (~garaguas@host...) joined the channeln'

>>> rex = <(?P<nombre>.+)!.*>(?P<dicho>.+)$'

>>> pat = re.compile(rex)

>>> m = pat.match(b)

>>> m

>>> m == None

True

>>> m = pat.match(a)

>>> m

<_sre.SRE_Match object at 0x8707698>

>>> m.group('nombre')

'pablo_'

>>> m.group('dicho')

' [17:00] comprendido marga :)'

Resultado final

Comentando y descomentando las líneas:

#line_format = "<span style='color:#%s'>%s:</span>%s<br/>"

line_format = "<div style='background-color:#%s'><b>%s:</b> %s</div>"

se pueden obtener dos resultados distintos:

Formato 1:

Chat1

Formato 2:

Chat2

Notas finales

  • Espero este script les haya sido útil, ya sea para formatear logs de irc como para seguir aprendiendo Python (yo en particular casi no había usado yield y con re solo había hecho pruebas).
  • La primer imagen del post es una composición de una captura de pantalla y esta linda imagen lgpl de un gotero.



De regreso de las 7mas Jornadas Regionales de Software Libre

20:01 del sábado 11 de agosto (tengo que mirar la parte derecha superior de mi pantalla para corroborar en que mes vivo, soy tremendo..). Estoy dejando la ciudad de Córdoba en colectivo. Un guiño graciosos: me acaban de golpear la ventanilla, Maxi y Gastón (otros santafecinos que también vinieron a participar de las 7mas Jornadas Regionales de Software Libre acaban de llegar también a la terminal). Más tarde o más temprano todos vamos empezando nuestro viaje de vuelta a casa.

En mi caso particular la expresión vuelta a casa es más que una frase armada. Estoy viajando a mi pueblo Carlos Pellegrini. La mayor parte del tiempo estoy en Santa Fe, dónde estudio.

Tuvo la intención de contar, escribir, durante los días que participe del evento, las cosas interesantes que iba aprendiendo y conociendo. Lamentablemente no soy un blogger tan prolífero como el Seba Criado :)

Sin embargo, algunso temas sobre los que me gustaría bloggear:

    <li>LUGLi presente (Aikido y la GPL)</li>
    
    <li>Música Libre (en la máquina quemadora)</li>
    
    <li>Enseñanza de programación (un ejemplo de la charla de <a href="http://dicosmo.org/" title="Roberto di Cosmo" target="_blank">Roberto di Cosmo</a>)</li>
    
    <li>Cómo ser un Freelance (vocación Hacker, de la charla de Marcelo Desimone)</li>
    
    <li>Bs As Libre y redes inalámbricas de alta velocidad</li>
    
    <li>Software Libre en Venezuela</li>
    
    <li>Lo que tus Clientes Quieren (una charla de ifPeople)</li>
    
    <li>Tal vez algo más que no recuerde ahora..</li>