<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <br>
    -----BEGIN PGP SIGNED MESSAGE-----<br>
    Hash: SHA1<br>
    <br>
    Hola de nuevo:<br>
    <br>
        Pues Piranna tiene razón, así que ahí va mi propuesta: formar
    primeramente dos "equipos" de tres personas, uno digamos del lado de
    Twisted y otro de las alternativas a Twisted. Estas seis personas
    debatirían, desde un punto de vista técnico y de forma moderada (o
    sea, con un moderador), los pros y contras de las diferentes
    alternativas (Twisted y lo que no es Twisted). ¿Quienes están
    dispuestos a incorporarse a uno y otro equipo?. Ya que he hecho la
    propuesta, me ofrezco como moderador, aunque va a ser un trabajo
    muuuy difícil.<br>
    <br>
        Jesús Cea propone en un mensaje el establecer un reto, aceptado
    por ambos equipos, de forma que se pueda enseñar código escrito
    usando Twisted y usando una alternativa a Twisted, ¿qué os parece?.
    Entiendo que ese reto debería definirse una vez establecidos los
    equipos.<br>
    <br>
        Es una pena Aitor que no puedas estar, entiendo que una persona
    con tu experiencia sería una gran aportación en este debate.<br>
    <br>
        Por otro lado la propuesta que ha hecho Kiko también me parece
    interesante, no sé si habrá tiempo en la próxima charla (posible
    debate) de ver algo de este tema, pero si hay gente con propuestas
    en este sentido, que lo indiquen y así reservamos una parte del
    tiempo en el próximo encuentro para comentarlos.<br>
    <br>
        Bueno, por supuesto esta es mi propuesta respecto al debate,
    pero toda sugerencia, propuesta de como organizarlo, etc, es
    bienvenida.<br>
    <br>
    Un saludo.<br>
    <br>
    El 21/04/12 09:49, <a class="moz-txt-link-abbreviated" href="mailto:piranna@gmail.com">piranna@gmail.com</a> escribió:<br>
    <span style="white-space: pre;">><br>
      > Primero a ver si nos ponemos de acuerdo en si nos los tiramos
      o no y de que forma, porque todavia no lo tengo claro...<br>
      ><br>
      > Sent from my Android cell phone, please forgive the lack of
      format on the text, and my fat thumbs :-P<br>
      ><br>
      > El 21/04/2012 09:06, "Alberto Chamorro"
      <<a class="moz-txt-link-abbreviated" href="mailto:a.chamorro.ruiz@gmail.com">a.chamorro.ruiz@gmail.com</a>
      <a class="moz-txt-link-rfc2396E" href="mailto:a.chamorro.ruiz@gmail.com"><mailto:a.chamorro.ruiz@gmail.com></a>> escribió:<br>
      ><br>
      > Puedo prometer y prometo que me he leído todo!! Guau!! Estoy
      deseando llegar a la reunión y ver como os tiráis trastos ("de
      codigo") a la cabeza!<br>
      ><br>
      > El 20 de abril de 2012 23:48, Aitor Guevara
      <<a class="moz-txt-link-abbreviated" href="mailto:aitorciki@gmail.com">aitorciki@gmail.com</a> <a class="moz-txt-link-rfc2396E" href="mailto:aitorciki@gmail.com"><mailto:aitorciki@gmail.com></a>>
      escribió:<br>
      ><br>
      > En fin, creo que esto puede hacerse eterno, porque tiene
      mucho más que<br>
      > ver con gustos personales que con limitaciones técnicas.<br>
      ><br>
      > Si Twisted fuese inusable y la gente no quisiese "ni tocarlo
      con un<br>
      > palo", llevaría muerto años (lleva casi 10 dando guerra). En
      cambio en<br>
      > la lista de proyectos gordos que lo usan<br>
      > (<a class="moz-txt-link-freetext" href="http://twistedmatrix.com/trac/wiki/SuccessStories">http://twistedmatrix.com/trac/wiki/SuccessStories</a>) veo
      cantidad de<br>
      > cosas no sólo nuevas, sino tremendamente exitosas (HipChat,
      TweetDeck,<br>
      > JustinTV, ...). OpenStack levanta una expectación brutal, y
      ahí lo<br>
      > tienes, Twisted de los pies a la cabeza.<br>
      ><br>
      > Evidentemente, que otros lo usen o no no lo convierte en
      bueno o malo,<br>
      > pero la gente detrás de esos productos precisamente tontos no
      son.<br>
      ><br>
      > Varios puntos que se han tocado estos días, y como lo veo yo,
      por si a<br>
      > alguien le interesa (lo que sigue es un buen tochaco,
      avisados<br>
      > estáis):<br>
      ><br>
      > * Twisted es complicado, no es Pythonico<br>
      ><br>
      > Sí pero no :) Escribir software de red asíncrono de cierto
      tamaño es<br>
      > complicado, se use la herramienta que se use. Si alguien cree
      en<br>
      > librerías mágicas que eliminan toda la complejidad y permiten
      crear<br>
      > sistemas para cientos de miles de usuarios como si fuese un
      script<br>
      > chorra, se equivoca, y punto.<br>
      ><br>
      > Que la herramienta me permita trabajar de manera más
      eficiente,<br>
      > pudiendo escribir menos (Python es muy expresivo) y
      facilitando que el<br>
      > código sea legible (Python desde luego apuesta por esa vía),
      perfecto.<br>
      > Que pretenda "ocultar" la complejidad inherente al sistema ya
      no me<br>
      > gusta tanto, eso no suele acabar bien. Y no acaba bien porque
      cuando<br>
      > las cosas empiezan a petar bajo carga, es muy probable que
      los errores<br>
      > ocurran fuera de mi comprensión del sistema, y ahora ves a
      entender la<br>
      > magia que hace la librería x.<br>
      ><br>
      > Del famoso Zen de Python, mi afirmación favorita es "Explicit
      is<br>
      > better than implicit." Creo que es lo que distingue a Python
      de Ruby,<br>
      > donde mucha magia ocurre de manera implícita. Twisted es
      explícito en<br>
      > su tratamiento de la asincronía, sí, y eso para mí es bueno.
      Más<br>
      > cuando mi modelo mental de asincronía encaja muy bien con lo
      que<br>
      > propone Twisted.<br>
      ><br>
      > * Twisted es un framework, te obliga a hacer las cosas a su
      manera, eso es malo<br>
      ><br>
      > Sí pero no :) Entiendo que, según las necesidades del
      software que se<br>
      > escribe, Twisted es matar moscas a cañonazos. Como lo es usar
      Django<br>
      > para según que aplicaciones web pequeñas. Pero no parece que
      a Django<br>
      > o Ruby on Rails les vaya mal por ser frameworks, parece que a
      la gente<br>
      > les son bien útiles.<br>
      ><br>
      > Si sólo quiero hacer unas cuantas peticiones HTTP a un
      servicio de por<br>
      > ahí, mover toda mi aplicación al modelo reactor / deferred de
      Twisted<br>
      > es una locura, sin duda. Ahora bien, si pretendo escribir un
      proceso<br>
      > que sirve HTTP y HTTPS, además de ser cliente de otro
      servicio web,<br>
      > que ofrece una interfaz SSH a su estado de ejecución, usa su
      propia<br>
      > política de resolución de DNS por temas de geolocalización y
      cache, y<br>
      > que también es servidor de WebSocket, Twisted es excelente.
      Es<br>
      > excelente porque ese programa es, en el 90%, código de red
      que implica<br>
      > varios protocolos como cliente y servidor. Puedo usar 8
      librerías<br>
      > distintas, sí, y hacer que de algún modo funcionen juntas, y
      adaptarme<br>
      > a las peculiaridades de cada una. O puedo usar Twisted y
      escribir toda<br>
      > esa funcionalidad de manera integrada y con un único estilo.<br>
      ><br>
      > Y no, no es un caso de uso inventado, es el tipo de software
      que llevo<br>
      > años escribiendo para ganarme el pan :)<br>
      ><br>
      > * Twisted es feo, echa para atrás, nadie querría ni tocarlo
      con un palo, ...<br>
      ><br>
      > Mmmm, un poco sí, pero no :) Me costó introducirme en el
      modelo<br>
      > Twisted, viniendo del código procedural de toda la vida,
      habían cosas<br>
      > que no me encajaban. Además, todo ese camel case es horrible
      xD. Pero<br>
      > en algún momento se produjo un "click" en mi cabeza (como a
      la semana<br>
      > de usarlo, vamos, no penséis que lleva años) y de golpe todo
      tenía<br>
      > todo el sentido del mundo. El modelo de eventos, los
      protocolos, las<br>
      > cadenas de callbacks, de golpe todo encaja.<br>
      ><br>
      > Ahora mismo me costaría mucho pensar en código asíncrono de
      manera no<br>
      > orientada a eventos. Los eventos me parecen una manera muy
      natural de<br>
      > pensar: cuando pase x, haz y. No importa cuando sea, no
      esperes a que<br>
      > ocurra bloqueando. Yo te digo que cuando ocurra, quiero que
      lo hagas,<br>
      > y ya está. Como digo me parece muy natural. La sintaxis puede
      gustar<br>
      > más o menos, pero como con todo, es una simple cuestión de
      costumbre.<br>
      ><br>
      > * Resumiendo, que es gerundio.<br>
      ><br>
      > Entiendo que Twisted no guste a todo el mundo. De hecho, no
      está<br>
      > pensado para ser usado en cualquier proyecto, sólo en
      aquellos<br>
      > proyectos donde la comunicación de red es el núcleo del
      software. Y<br>
      > eso es una pequeña porción de todo el software que se
      escribe.<br>
      ><br>
      > Ahora bien, llevo cerca de 5 años escribiendo sistemas en
      Twisted.<br>
      > Sistemas que han soportado cargas totalmente locas (en
      Flumotion<br>
      > llegamos a tener cerca de 40Gbit/s de upload haciendo
      streaming para<br>
      > Antena3, TVE y otros). Me gusta Twisted, disfruto
      escribiéndolo y<br>
      > conozco a mucha gente que también lo hace. Es una solución
      excelente<br>
      > para un tipo dado de problema, y no valorarlo como tal por
      prejuicios<br>
      > me parece un error.<br>
      ><br>
      > Pero al final, todo es cuestión de gustos, si alguien no
      quiere<br>
      > usarlo, por mi perfecto. Pero si alguien tiene curiosidad, mi
      consejo<br>
      > es que no se deje asustar por tanto odio en la lista :)<br>
      ><br>
      > Ala, my two cents :)<br>
      ><br>
      > On Fri, Apr 20, 2012 at 20:21, Jesus Cea <<a class="moz-txt-link-abbreviated" href="mailto:jcea@jcea.es">jcea@jcea.es</a>
      <a class="moz-txt-link-rfc2396E" href="mailto:jcea@jcea.es"><mailto:jcea@jcea.es></a>> wrote:<br>
      > On 20/04/12 20:02, Josep Danti wrote:<br>
      > > >> Hay algún caso en el que creo que gana twisted.
      Si se quieren usar<br>
      > > >> puertos serie, twisted lo tiene implementado.
      gevent no lo tiene<br>
      > > >> por lo que en el primer read se quedaría
      bloqueado. Habría que<br>
      > > >> implementar el servicio con greenlets ¿verdad?
      En general veo que<br>
      > > >> Twisted tiene más protocolos.<br>
      ><br>
      > Como ya he dicho, twisted es un framework.<br>
      ><br>
      > Resumido, en cuanto tu código toca twisted, tiene que
      adaptarse a él y<br>
      > se vuelve dependiente, y si quieres usar una librería no
      soportada, ya<br>
      > puedes reescribirla...<br>
      ><br>
      > Eso provoca que twisted incluya mucho ecosistema alrededor.
      Pero es<br>
      > precisamente porque no se habla con nadie, así que todo lo
      que quieras<br>
      > hacer depende de twisted. Básicamente twisted es un mundo
      aparte,<br>
      > incluyo soporte de muchas cosas porque no es posible usar
      librerías<br>
      > "normales".<br>
      ><br>
      > Otros proyectos usando greenlets, por ejemplo, y con un
      simple<br>
      > "monkeypatching" del módulo "socket" (trivial) pueden
      utilizar<br>
      > CUALQUIER librería de terceros. Naturalmente, estos proyectos
      no<br>
      > incluyen apenas nada "de serie". No lo necesitan, porque usan<br>
      > cualquier librería python que encuentres y que te venga bien.
      No es<br>
      > necesario que esa librería esté programada para "twisted".<br>
      ><br>
      > Ejemplo simple:<br>
      ><br>
      > Si mi libreria hace "monkeypatch" de "socket" haciendo que
      cualquier<br>
      > lectura o escritura se meta automáticamente en un "select" y
      que ese<br>
      > "greenlet" se pare o se reanude cuando toca, mi programa
      puede usar<br>
      > CUALQUIER librería de la biblioteca estándar, como "smtplib"
      para<br>
      > enviar 1000 mensajes en paralelo sin tener que tocar esa
      librería y<br>
      > sin lanzar ni un solo hilo.<br>
      ><br>
      > Eso con twisted no se puede hacer.<br>
      ><br>
      > Así que sí, twisted incluye muchas cosa de serie... porque no
      tiene<br>
      > más remedio. Si necesitas algo que no está ahí, o no te gusta
      cómo lo<br>
      > hace... prepárate a sufrir.<br>
      ><br>
      > En su caso, si manejas el puerto serie como un fichero,
      puedes usar<br>
      > "select" o similares. Si tienes que hacer muchas más cosas a
      la vez,<br>
      > greenlets con un pelín de monkeypatching, o una librería
      específica<br>
      > como gevent o similar.<br>
      ><br>
      > PS: Yo sigo usando "poll" de forma masiva.<br>
      ><br>
      > --<br>
      > Jesus Cea Avion _/_/ _/_/_/ _/_/_/<br>
      > <a class="moz-txt-link-abbreviated" href="mailto:jcea@jcea.es">jcea@jcea.es</a> <a class="moz-txt-link-rfc2396E" href="mailto:jcea@jcea.es"><mailto:jcea@jcea.es></a> -
      <a class="moz-txt-link-freetext" href="http://www.jcea.es/">http://www.jcea.es/</a> _/_/ _/_/ _/_/ _/_/ _/_/<br>
      > jabber / <a class="moz-txt-link-freetext" href="xmpp:jcea@jabber.org">xmpp:jcea@jabber.org</a>
      <a class="moz-txt-link-rfc2396E" href="mailto:xmpp%3Ajcea@jabber.org"><mailto:xmpp%3Ajcea@jabber.org></a> _/_/ _/_/ _/_/_/_/_/<br>
      > . _/_/ _/_/ _/_/ _/_/ _/_/<br>
      > "Things are not so easy" _/_/ _/_/ _/_/ _/_/ _/_/ _/_/<br>
      > "My name is Dump, Core Dump" _/_/_/ _/_/_/ _/_/ _/_/<br>
      > "El amor es poner tu felicidad en la felicidad de otro" -
      Leibniz<br>
      > ><br>
      > > --<br>
      > > Grupo de usuarios de python ubicados en Madrid<br>
      > > <a class="moz-txt-link-freetext" href="http://groups.google.es/group/python-madrid">http://groups.google.es/group/python-madrid</a><br>
      > > <a class="moz-txt-link-freetext" href="http://python-madrid.es">http://python-madrid.es</a><br>
      > > <a class="moz-txt-link-freetext" href="http://twitter.com/#!/python_madrid">http://twitter.com/#!/python_madrid</a><br>
      > > Para darte de baja del grupo envía un mensaje a
      <a class="moz-txt-link-abbreviated" href="mailto:python-madrid+unsubscribe@googlegroups.com">python-madrid+unsubscribe@googlegroups.com</a>
      <a class="moz-txt-link-rfc2396E" href="mailto:python-madrid%2Bunsubscribe@googlegroups.com"><mailto:python-madrid%2Bunsubscribe@googlegroups.com></a><br>
      ><br>
      > --<br>
      > Grupo de usuarios de python ubicados en Madrid<br>
      > <a class="moz-txt-link-freetext" href="http://groups.google.es/group/python-madrid">http://groups.google.es/group/python-madrid</a><br>
      > <a class="moz-txt-link-freetext" href="http://python-madrid.es">http://python-madrid.es</a><br>
      > <a class="moz-txt-link-freetext" href="http://twitter.com/#!/python_madrid">http://twitter.com/#!/python_madrid</a><br>
      > Para darte de baja del grupo envía un mensaje a
      <a class="moz-txt-link-abbreviated" href="mailto:python-madrid+unsubscribe@googlegroups.com">python-madrid+unsubscribe@googlegroups.com</a>
      <a class="moz-txt-link-rfc2396E" href="mailto:python-madrid%2Bunsubscribe@googlegroups.com"><mailto:python-madrid%2Bunsubscribe@googlegroups.com></a><br>
      ><br>
      ><br>
      > -- <br>
      > Grupo de usuarios de python ubicados en Madrid<br>
      > <a class="moz-txt-link-freetext" href="http://groups.google.es/group/python-madrid">http://groups.google.es/group/python-madrid</a><br>
      > <a class="moz-txt-link-freetext" href="http://python-madrid.es">http://python-madrid.es</a><br>
      > <a class="moz-txt-link-freetext" href="http://twitter.com/#!/python_madrid">http://twitter.com/#!/python_madrid</a><br>
      > Para darte de baja del grupo envía un mensaje a
      <a class="moz-txt-link-abbreviated" href="mailto:python-madrid+unsubscribe@googlegroups.com">python-madrid+unsubscribe@googlegroups.com</a>
      <a class="moz-txt-link-rfc2396E" href="mailto:python-madrid%2Bunsubscribe@googlegroups.com"><mailto:python-madrid%2Bunsubscribe@googlegroups.com></a><br>
      ><br>
      > -- <br>
      > Grupo de usuarios de python ubicados en Madrid<br>
      > <a class="moz-txt-link-freetext" href="http://groups.google.es/group/python-madrid">http://groups.google.es/group/python-madrid</a><br>
      > <a class="moz-txt-link-freetext" href="http://python-madrid.es">http://python-madrid.es</a><br>
      > <a class="moz-txt-link-freetext" href="http://twitter.com/#!/python_madrid">http://twitter.com/#!/python_madrid</a><br>
      > Para darte de baja del grupo envía un mensaje a
      <a class="moz-txt-link-abbreviated" href="mailto:python-madrid+unsubscribe@googlegroups.com">python-madrid+unsubscribe@googlegroups.com</a></span><br>
    <br>
    -----BEGIN PGP SIGNATURE-----<br>
    Version: GnuPG v1.4.11 (Darwin)<br>
    Comment: GPGTools - <a class="moz-txt-link-freetext" href="http://gpgtools.org">http://gpgtools.org</a><br>
    <br>
    iEYEARECAAYFAk+UiXMACgkQnPFBatEMYOejXgCgoSNpVdLBh9rHV9rmp7mdacNk<br>
    MBEAoNJuDOL+DflELQNkX3B50aog9g/B<br>
    =4lq7<br>
    -----END PGP SIGNATURE-----<br>
    <br>
  </body>
</html>

<p></p>

-- <br />
Grupo de usuarios de python ubicados en Madrid<br />
<a href="http://groups.google.es/group/python-madrid">http://groups.google.es/group/python-madrid</a><br />
<a href="http://python-madrid.es">http://python-madrid.es</a><br />
<a href="http://twitter.com/#!/python_madrid">http://twitter.com/#!/python_madrid</a><br />
Para darte de baja del grupo envía un mensaje a python-madrid+unsubscribe@googlegroups.com<br />