Monday, September 19, 2016

Backward incompatible change in handling permalinks with Reeborg coming soon

About two years ago, I implemented a permalink scheme which was intended to facilitate sharing various programming tasks in Reeborg's World. As I added new capabilities, the number of possible items to include grew tremendously. In fact, for rich enough worlds, the permalink can be too long for the browser to handle. To deal with such situations, I had to implement a clumsy way to import and interpret those permalinks after the page had been loaded. To give an idea of the potential complexity, here is a permalink (used by a teacher in Lithuania) that is still short enough to be handled by most browsers:

http://reeborg.ca/world.html?proglang=python-en&world=%7B%0A%20%20%22robots%22%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22x%22%3A%201%2C%0A%20%20%20%20%20%20%22y%22%3A%201%2C%0A%20%20%20%20%20%20%22_prev_x%22%3A%201%2C%0A%20%20%20%20%20%20%22_prev_y%22%3A%201%2C%0A%20%20%20%20%20%20%22_prev_orientation%22%3A%200%2C%0A%20%20%20%20%20%20%22start_positions%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%201%2C%0A%20%20%20%20%20%20%20%20%20%201%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%22objects%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%22_orientation%22%3A%200%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22walls%22%3A%20%7B%0A%20%20%20%20%2211%2C1%22%3A%20%5B%0A%20%20%20%20%20%20%22east%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%2211%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%2C%0A%20%20%20%20%20%20%22east%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%2210%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%229%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%228%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%227%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%226%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%225%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%224%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%223%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%222%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%221%2C9%22%3A%20%5B%0A%20%20%20%20%20%20%22north%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%2211%2C8%22%3A%20%5B%0A%20%20%20%20%20%20%22east%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%2211%2C7%22%3A%20%5B%0A%20%20%20%20%20%20%22east%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%2211%2C6%22%3A%20%5B%0A%20%20%20%20%20%20%22east%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%2211%2C5%22%3A%20%5B%0A%20%20%20%20%20%20%22east%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%2211%2C4%22%3A%20%5B%0A%20%20%20%20%20%20%22east%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%2211%2C3%22%3A%20%5B%0A%20%20%20%20%20%20%22east%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20%2211%2C2%22%3A%20%5B%0A%20%20%20%20%20%20%22east%22%0A%20%20%20%20%5D%0A%20%20%7D%2C%0A%20%20%22goal%22%3A%20%7B%0A%20%20%20%20%22possible_positions%22%3A%20%5B%0A%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%206%2C%0A%20%20%20%20%20%20%20%206%0A%20%20%20%20%20%20%5D%0A%20%20%20%20%5D%2C%0A%20%20%20%20%22position%22%3A%20%7B%0A%20%20%20%20%20%20%22x%22%3A%206%2C%0A%20%20%20%20%20%20%22y%22%3A%206%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22objects%22%3A%20%7B%0A%20%20%20%20%20%20%226%2C5%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22token%22%3A%201%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%20%20%22objects%22%3A%20%7B%0A%20%20%20%20%226%2C1%22%3A%20%7B%0A%20%20%20%20%20%20%22token%22%3A%201%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%20%20%22small_tiles%22%3A%20false%2C%0A%20%20%22rows%22%3A%2012%2C%0A%20%20%22cols%22%3A%2014%0A%7D&editor=%23%20jei%20ka%C5%BEkur%20stringate%2C%20vykdykite%20program%C4%85%20po%20%C5%BEingsn%C4%AF%20(%20%E2%96%BA%E2%96%8C)%0A%0A%22%22%22%20Komandos%3A%0Amove()%20%20%20%20%20%20%20%20-%20%20paeina%20langel%C4%AF%20%0Aturn_left()%20%20%20-%20pasisuka%20kair%C4%97n%20(de%C5%A1in%C4%97n%20nemoka)%0Atake()%20%20%20%20%20%20%20%20-%20paima%20objekt%C4%85%20i%C5%A1%20langelio%0Aput()%20%20%20%20%20%20%20%20%20-%20padeda%20objekt%C4%85%0A%22%22%22%0A%0A%23%20U%C5%BEduotis%3A%20%0A%23%20perne%C5%A1t%20%22kapeik%C4%85%22%20%C4%AF%20tu%C5%A1%C4%8Di%C4%85%20apskritim%C4%85%20%0A%23%20ir%20atsistoti%20%C4%AF%20fini%C5%A1o%20viet%C4%85%20(melsv%C4%85%20langel).%20%0A%0A%23%20pataisykite%2Fpabaikite%20program%C4%85%3A%0Amove()%0Aturn_left()%0Amove()&library=%23%20%27from%20my_lib%20import%20*%27%20in%20Python%20Code%20is%20required%20to%20use%0A%23%20the%20code%20in%20this%20library.%20%0A%0A

The above permalink appears to work ... but, due to a small addition to the old version of the site that handles these permalinks, the result is not quite what is desired: one must change "by hand" the programming mode (at the top) from Blockly to Editor.

The new permalinks will be much shorter and should be future proof; they can include, in any order:

  1. the programming mode/language
  2. the human language for the interface
  3. a URL pointing to a file containing the world definition
  4. an optional name to display in the world select menu instead of the URL.

The key here is the 3rd item. Instead of having to potentially deal with changing world format (to add new capabilities) AND permalinks to encode the new items, I only have to ensure that the world format remains backward compatible. Normal URL where a world can be found are usually quite short, and there is no need to worry about hitting some browser limit in terms of the number of characters.

For example, here is a URL that works on a temporary testing site, which loads a world definition I put on Pastebin (which anyone can do):

http://reeborg.ca/reeborg2.html?lang=en&mode=python&url=http://pastebin.com/raw/rGHudX7a&name=Desert

If you use Reeborg's World to teach and wish to be kept abreast of any major changes, please email me and I will add you to a mailing list that I just set up for this purpose.

Friday, September 09, 2016

Un nouveau livre au sujet de Reeborg

tl;dr: After two books published in Korean about Reeborg, a book on robotics written in French has a significant part of its content inspired by Reeborg's World.



Tel que je l'avais mentionné il y a déjà un certain temps, Samsung avait publié deux livres en Koréen basé sur un précurseur du Monde de Reeborg.  Aujourd'hui, j'ai reçu un livre sur la robotique dont environ le tiers est basé sur la robotique virtuelle du monde de Reeborg.

Vincent Maille, le co-auteur du livre sur la robotique, m'a fait plusieurs suggestions qui ont contribué à améliorer mon site.  Je n'ai pas encore eu le temps de lire ce livre (qu'on peut obtenir directement de l'éditeur ou de chez Amazon) ce que j'espère pouvoir faire très bientôt.