]> git.jsancho.org Git - blog.git/commitdiff
Merge branch 'master' into spanish
authorJavier Sancho <jsf@jsancho.org>
Thu, 11 Jan 2018 18:11:05 +0000 (19:11 +0100)
committerJavier Sancho <jsf@jsancho.org>
Thu, 11 Jan 2018 18:11:05 +0000 (19:11 +0100)
haunt.scm
posts/20171227-midgaard_bot.html [new file with mode: 0644]

index 09bf58d941383d34cbcc1f858189995a71e482c0..6cdaae9d7e2223eb440afad2613d3419700f7393 100644 (file)
--- a/haunt.scm
+++ b/haunt.scm
@@ -66,7 +66,7 @@
           `((article (@ (class "single"))
                      (header
                       (h1 ,(post-ref post 'title))
-                      (p "Posted on " ,(date->string (post-date post) "~B ~d, ~Y")))
+                      (p "Publicado el " ,(date->string (post-date post) "~d/~m/~Y")))
                      ,(post-sxml post)
                      (div (@ (class "tag-cloud"))
                           (p
                         (h2
                          (a (@ (href ,(post-uri post)))
                             ,(post-ref post 'title)))
-                        (p "Posted on " ,(date->string (post-date post) "~B ~d, ~Y")))
+                        (p "Publicado el " ,(date->string (post-date post) "~d/~m/~Y")))
                        (div ,(post-summary post)
                             (br)
-                            (a (@ (class "btn") (href ,(post-uri post))) " Continue reading "))
+                            (a (@ (class "btn") (href ,(post-uri post))) " Seguir leyendo "))
                        (hr)))
                    (posts/reverse-chronological posts))))))
 
 (define about-page
   (static-page
-   "About me"
+   "Sobre mi"
    "about.html"
-   `((h2 "hi."))))
+   `((div
+      (article
+       (header (h2 "Sobre mi"))
+       (p "Conocí GNU/Linux y el software libre durante mis estudios universitarios en la " (a (@ (href "http://www.uji.es/")) "Universitat Jaume I") " y desde entonces mi compromiso con esas ideas ha ido en aumento.")
+       (p "Fue en 2003 cuando empecé como activista, participando en eventos relacionados con el software libre, manifestaciones en contra de las patentes de software, charlas y jornadas informativas en parties, institutos, etc.")
+       (p "Disfruto programando y lo hago con el lenguaje que más se ajuste a mis necesidades (Python, PHP, Golang, Erlang, ...). Durante muchos años mi lenguaje favorito fue C, aunque con el tiempo ese lugar privilegiado han pasado a ocuparlo Lisp y Scheme a partes iguales. Soy un enamorado del paradigma funcional.")
+       (p "Estoy casado con una mujer maravillosa y tengo un hijo que no deja de sorprenderme cada día. Son mi mayor alegría."))))))
 
 (define %collections
   `(("Home" "index.html" ,posts/reverse-chronological)))
 
 (site #:title "Javier Sancho"
       #:domain "jsancho.org"
+      #:build-directory "site-spanish"
       #:default-metadata
       '((author . "Javier Sancho")
-        (description . "Free Software Evangelist - Programmer")
+        (description . "Evangelizador del software libre - Programador")
         (email . "jsf@jsancho.org")
         (picture . "images/jsancho.jpg")
-        (pages . (("about" . "about.html")
-                  ("projects" . "http://git.jsancho.org/"))))
+        (pages . (("sobre mi" . "about.html")
+                  ("proyectos" . "http://git.jsancho.org/"))))
       #:readers (list sxml-reader html-reader)
       #:builders (list (blog #:theme flex-theme #:collections %collections)
                        (atom-feed)
diff --git a/posts/20171227-midgaard_bot.html b/posts/20171227-midgaard_bot.html
new file mode 100644 (file)
index 0000000..8cab6c8
--- /dev/null
@@ -0,0 +1,26 @@
+title: Midgaard Bot, conectando a un MUD con Telegram
+date: 2017-12-27 11:51
+---
+<div>
+  <p>Un compañero de trabajo, Vlad Nicu, está desarrollando un bot de Telegram para ofrecer información sobre criptomonedas (precio, etc). Tras hablar con él me entró el gusanillo de escribir un bot para conectar con un MUD (Multi User Dungeon) usando Telegram. Cuando era joven estuve mucho tiempo enganchado a este tipo de juegos online y me pareció divertido desarrollar algo del estilo.</p>
+
+  <p>Puestos a probar cosas decidí usar Golang y así practicar un poco con este lenguaje y sus gorrutinas. Como lenguaje, pienso que tiene muchas cosas que se podrían mejorar. En cuanto a la concurrencia nada que objetar, por supuesto. Es el punto fuerte de Go y se nota. Sí que es cierto que da la impresión de que la gente abusa de los canales y de las gorrutinas. He visto muchos ejemplos cuando me documentaba de problemas que se podrían haber resuelto simplemente con llamadas a funciones, sin usar tanta parafernalia.</p>
+
+  <p>El <a href="https://git.jsancho.org/?p=midgaard_bot.git;a=summary">código fuente de midgaard_bot</a> está disponible bajo licencia GPLv3.</p>
+
+  <p>Cuando el bot arranca, lanza una gorrutina que se queda escuchando los mensajes que le llegan desde Telegram. Cuando llega un mensaje comprueba si tiene una sesión abierta para el chat desde el que llega el mensaje. Lo normal es que cuando se trate del primer mensaje del chat no tenga sesión.</p>
+
+  <p>En el caso de no tener sesión, el bot lanza una nueva gorrutina para conectar por telnet al MUD y servir de conector entre Telegram y el juego.</p>
+
+  <p>Para controlar en qué momento la conexión telnet ha acabado de mandar un mensaje completo, y por lo tanto poder mandarlo a Telegram para que lo reciba el jugador, tuve que implementar un buffer que recogiera los datos que iban llegando desde el MUD y usar un timeout de 500 milisegundos, tras el cual se entiende que el mensaje está completo y se puede mandar. No es ninguna maravilla pero para conexiones locales funciona bien.</p>
+
+  <p>Cuando ya tenemos el mensaje completo lo mandamos a una gorrutina específica que se encarga de recibir mensajes desde las sesiones abiertas y los reenvía a Telegram.</p>
+
+  <p>Durante el desarrollo me ocurrió una cosa graciosa que me tuvo en jaque un buen rato y que te hace pensar en cómo funcionan en realidad las gorrutinas. La gorrutina que controla la sesión escribía un mensaje en un canal y se quedaba colgada. El problema estaba que aún no había implementado la otra parte del programa que leía de ese canal y los canales de Go son bloqueantes.</p>
+
+  <p>Al pensar en los canales yo tenía una idea de ellos similar a los mensajes de Erlang, que tienes un proceso que manda mensajes de forma asíncrona y y la ejecución sigue de forma independiente. Pero en Golang no es así, los canales no son "tuberías", son puntos de unión entre gorrutinas. Si escribes un mensaje en un canal, te quedas bloqueado hasta que otra gorrutina lee ese canal y libera a la gorrutina que ha escrito ese mensaje.</p>
+
+  <p>Cosas curiosas que tiene la concurrencia usando estos mecanismos.</p>
+
+  <p>Midgaard Bot está sin acabar y no creo que continue con su desarrollo, ya que mi objetivo era ver si podía conectar con el MUD a través de Telegram y eso ya está conseguido. Pero si alguien quiere seguir, en el repositorio están todas las bases para hacerlo crecer.</p>
+</div>