]> git.jsancho.org Git - blog.git/commitdiff
Merge branch 'master' into spanish
authorJavier Sancho <jsf@jsancho.org>
Mon, 26 Feb 2018 16:02:13 +0000 (17:02 +0100)
committerJavier Sancho <jsf@jsancho.org>
Mon, 26 Feb 2018 16:02:13 +0000 (17:02 +0100)
haunt.scm
images/lugaru.jpg [new file with mode: 0644]
posts/154.html
posts/20171227-midgaard_bot.html [new file with mode: 0644]
posts/20180223-lugaru.html [new file with mode: 0644]

index 7ad26eebc47d1e48cce23476d47d4f6bd9f05d62..5003a42540f531ec8634f520471cad1d7b51c1ba 100644 (file)
--- a/haunt.scm
+++ b/haunt.scm
@@ -66,7 +66,8 @@
                                  (li (@ (id "blog-title-header"))
                                      (a (@ (href "index.html"))
                                         (h1 ,(assoc-ref metadata 'author)))))
-                             (ul (@ (class "navigation-items center")))
+                             (ul (@ (class "navigation-items center"))
+                                 (li (a (@ (href "https://en.jsancho.org/")) "in english")))
                              (ul (@ (class "navigation-items right"))
                                  ,@(map (lambda (page)
                                           `(li (a (@ (href ,(cdr page))) ,(car page))))
                                 ,(post-date-and-tags (post-date post) (get-tags post)))
                                ,(post-summary post)
                                (footer (@ (class "read-more"))
-                                          (a (@ (href ,(post-uri post))) "...read more..."))))
+                                          (a (@ (href ,(post-uri post))) "...seguir leyendo..."))))
                    (posts/reverse-chronological posts))))))
 
 (define about-page
   (static-page
-   "About me"
+   "Sobre mi"
    "about.html"
-   `((h2 "hi."))))
+   `((div
+      (article
+       (header (h2 "Sobre mi"))
+       (img (@ (src "images/jsancho.jpg") (width "150") (height "150") (align "left") (style "margin: 10px;")))
+       (p "Me llamo Javier Sancho y soy programador y defensor del software libre. Vivo en Castellón, España.")
+       (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.")
+       (p "Aparte de este blog, a veces comparto pensamientos en " (a (@ (href "https://twitter.com/jsancho_gpl")) "Twitter") ". Puedes contactar conmigo en " (a (@ (href "mailto:jsf@jsancho.org")) "jsf@jsancho.org") "."))))))
 
 (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 . (("projects" . "http://git.jsancho.org/")
-                 ("about me" . "about.html"))))
+        (pages . (("proyectos" . "http://git.jsancho.org/")
+                 ("sobre mi" . "about.html"))))
       #:readers (list sxml-reader html-reader)
       #:builders (list (blog #:theme flex-theme #:collections %collections)
                        (atom-feed)
diff --git a/images/lugaru.jpg b/images/lugaru.jpg
new file mode 100644 (file)
index 0000000..7e90e5f
Binary files /dev/null and b/images/lugaru.jpg differ
index 356213dca3846a7dc29d67a015906739290e6d46..6cd87d7969d08c46abf5326a869014da0d03d2df 100644 (file)
@@ -1,4 +1,4 @@
-title: La perversión empesarial no tiene límites
+title: La perversión empresarial no tiene límites
 date: 2016-01-03 21:56
 ---
 <div>
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>
diff --git a/posts/20180223-lugaru.html b/posts/20180223-lugaru.html
new file mode 100644 (file)
index 0000000..7e0da6a
--- /dev/null
@@ -0,0 +1,19 @@
+title: Lugaru: los amigos de Turner
+date: 2018-02-23 10:31
+tags: juegos, lugaru
+---
+<div>
+  <a href="images/lugaru.jpg"><img src="images/lugaru.jpg" alt="Lugaru" width="300" height="225" class="image-left" /></a>
+
+  <p><a href="https://en.wikipedia.org/wiki/Lugaru">Lugaru</a> es un juego de acción en 3D en el que conduces al protagonista, el conejo Turner, a través de una serie de aventuras contra otros conejos hostiles y lobos. Turner es un experto en artes marciales. El <a href="https://gitlab.com/osslugaru/lugaru.git">código de Lugaru y sus contenidos</a> son libres.</p>
+
+  <p>Escribo sobre este juego porque se ha convertido en uno de los favoritos de mi hijo. Y eso es así por las enormes falicidades que proporciona el juego para editar niveles, añadir nuevos personajes, crear histórias nuevas y, en general, hacer lo que queramos con él.</p>
+
+  <p>Pero la cosa fue a más y pronto Roberto empezó a pedirme más cosas. Y es que, en Lugaru, Turner se enfrenta en solitario a todos los peligros y mi hijo quería poder contar con una serie de amigos que le ayudarán a combatir a las fuerzas del mal. Al principio le fui dando largas pero la insistencia de un niño de 5 años es poderosa y finalmente me puse a estudiar el código del juego para ver hasta qué punto podía complacerle.</p>
+
+  <p>Lugaru utiliza SDL, lo cual me sorprendió, ya que esperaba algún motor más evolucionado, y su código no está demasiado depurado y tiene muchas partes que se podrían refactorizar, pero usa nombres muy descriptivos para variables y funciones que me permitieron comprender en poco tiempo la estructura interna del juego y cómo podía conseguir lo que quería.</p>
+
+  <p>Tras una semana, podeis comprobar lo que he conseguido, que la verdad esta bastante logrado para la poca experiencia que tengo en este tipo de desarrollos. En <a href="https://git.jsancho.org/?p=lugaru.git;a=shortlog;h=refs/heads/improvements">mi rama personal de mejoras de Lugaru</a> podeis ver cómo he resuelto el problema y también he creado el vídeo <a href="https://www.youtube.com/watch?v=hk79QqtMcZo">Lugaru: los amigos de Turner</a> para que podais ver el resultado.</p>
+
+  <p>Seguro que con juegos privativos podeis hacer estas cosas igual de fácil, ¿verdad?</p>
+</div>