The Organization

Scary Hanging Body
Halloween Horror from the neighbourhood

Stopping the yak shaving with the javascript conversion work. Going to package it up and leave it to the side so i can get back to the game project. Maybe i will some day do a straight up js port of tumblelog, but that day is not today.

Ok, have working output for items, converting the Tumblelog python version over to javascript. With some changes to the formatting of the blog. But the rendering is still the same..ish. Also i was dumb and tried to force too much into a single regex, am rethinking how to extract tags out of the item separator. Anyway, a couple functions and blocks a day, in a week i should have it done. The most notable thing that i don't think i can get working is the html figure tag stuff working for images. In the python code it edits the AST for the html/markdown directly. The markdown lib i am using does allow for something like it, but not exactly? Again, i could make it work by messing with how the markdown renders the title element, making that the <figcaption> value, but that does not work how the existing code works, with a line directly after the markdown image line becoming the caption. This is something that i should not be worrying about right now, as there is still lots of other stuff to get working first!

No Style, just the content
Man, it does not look good

Might be able to do something much less extreme and more inline with the current formatting, actually. Which would be much better, from my POV -- would like to work within the format already designed. Not enough brain power to try it out tonight...

Working on a ... branch of Tumblelog in javascript and using Deno as the execution environment. I was never a big fan of Node.js, and so Deno has been a breath of fresh air. Trying out a different meaning of % right now, inline with some of the proposed changes I outlined the other day, and fighting with the different required regular expressions to make it work. Progress is ok so far, but that is because i'm doing the easy stuff.

Here is where i got with a couple hours hacking, mostly spent figuring out how to setup the regular expressions. Thank goodness for regexr to help with experimentation! It would have taken a lot longer with out it. And, of course, the original project to crib from.

import {Marked} from "https://deno.land/x/markdown@v2.0.0/mod.ts";
import { parse } from 'https://deno.land/std@0.69.0/datetime/mod.ts'

const decoder = new TextDecoder("utf-8");
const filename = Deno.args[0];
const raw = decoder.decode(await Deno.readFile(filename));

// "% @pagename(a page title)"
// found[1] == "pagename"
// found[2] == "a page title"
const pageRegex = /% @(.*)\((.*)\)/;

// "% 2020-10-21 A Title #TagOne #TagTwo"
// found[1] = "2020-10-21"
// found[2] = "A Title"
// found[3] = "#TagOne #TagTwo"
const itemRegex = /^% (\d{4}-\d{2}-\d{2})?\s?([^#]*)?\s(#.*\b)?/;

const rawItems = raw.split(/(^% .*)/gm);

const pages = [];
const items = [];

// 'id' is used to keep items in the order they are found in the
// source data file, incase we are doing other sorting operations.
const pageData = { name:'', title:'', rawContent:'', id:0};
const itemData = { date:new Date(), title:'', tags:[], rawContent:'', id:0};

let counter = 0;

for(let index = 0; index < rawItems.length; ++index) {
    let value = rawItems[index];
    
    let found = value.match(pageRegex);
    if(found) 
    {
        console.log("Page: " + found);
        let page = Object.assign({}, pageData);
        page.id = counter++;
        page.name = found[1];
        page.title = found[2];
        page.rawContent = rawItems[index+1];

        pages.push(page);

        index++;

        continue;
    }
    
    found = value.match(itemRegex);
    if(found)
    {
        console.log("Item: " + found);
        let item = Object.assign({}, itemData);
        item.id = counter++;
        item.title = found[2];
        if(found[3]) item.tags = found[3].split(" ");
        if(found[1]) item.date = parse(found[1], "yyyy-MM-dd");
        item.rawContent = rawItems[index+1];

        items.push(item);

        index++;

        continue;
    }
}

// Test html output for a "post" item. 
for(let index = 0; index < items.length; ++index)
{
    let item = items[index];
    console.log('<article>\n' + Marked.parse(item.rawContent).content + '</article>\n');
}

Also downloaded Visual Studio Code in order to be able to use the Deno code-formatting helper thingie. Anyway, VS Code is much better then when i last used it, might move over to using it for my Unity3d/C# day-job-dev.

Deno is super easy to use, and program with. I am just writing js code, and executing it via deno: deno run --allow-read=./ neo.js text.md

Will see if i keep at it.

... Oh, i just figure out the format i should be using for the transclusion/including of tagged items -- [% include <tag name> %] -- this follows the format used in the html template file.

Got the dang Dijkstra Maps stuff working in the game finally. I had obviously made some dumb programming error when i first coded it up, but i don't know what it was. I threw it all away and started from scratch, which was the key to moving forward.

I now have a "players distance" map, that NPCs can "roll down" towards the players. Will probably split this out into per-player maps, so NPCs can use the player map for the player they are interested in. And still have to figure out the whole multi-maps with desirability coefficients.

DijkstraMapVisualization
Yeah, numbers on the tiles, that is what we needed!

Still trying to workout what i want this to be? Is it "just" a roguelike game, with the multiplayer aspects? Is it some attempt at building a distributed meshed shared world? There are things i can, and want, to try to do, but also don't want to be just another , there should be something new that i can bring to the table. Maybe the multiplayer is enough? For now anyway? I'd like to have a bit more interactivity for the players in the prototype, so something there should be my next focus... And i'm kinda set on environment actions -- digging, making, breaking...

Snapped this photo in High Park the other day.

BeeAndFlower
"Yo, that looks good, move over so i can have some..."

Tags and Transclusion for Tumblelog, a WIP proposal.

The start of a discussion about new features for tumblelog. This may be a bit ramblely, sorry!

Tags

Right now "posts" in tumblelog are separated by DATES, and all the items posted within a date are, sort of, considered a single post. Items inside a single day can be separated by using the % character.

My suggestion is to extend the % separator, so it can include more meta-data about each item, and promote this separator to define individual "posts". For example:

% <date> <title> <tags>

"% 2020-10-19 This new meta-data idea is dope! #blog-tech #idea #so-good"

All <date>, <title> and <tags> are optional, allowing the format to be very similar to the existing one. A change would be that every % item "inherits" the previously used date from %.

Tag collection pages would be created in the same general way that the archive is created.

Rendering of "dates" at the top of a group of similarly dated posts, like how the current parser works, would require a bit more logic and state.

Transclusion

Transcluding is more complicated, and i don't have a clear understanding myself about what the common use case for this would be, other than my own desire for how it would work. This Markdown-Content-Blocks proposal is interesting, although in this case it isn't the markdown compiler that would be dealing with the transclusion but the blog-engine itself.

My usecase is that i have pages setup for a bunch of different projects, and i want to tags posts with a project name, and then have those posts included in the project pages. Which is another reason for more fine-grained "post" definition.

Next steps

Is this even something that could be ported into the existing system? it would be a breaking change to the blog format, which is no small deal. A "half" step could be adding just the tags and titles to the %, maybe? I guess some feedback on this idea is the first step.

Adding personal site search via Search My Site, accessible via the search link at the top of the page. I like the reasons behind the building of this engine, details in the about page, and the "What went wrong with the internet (and how can it be fixed)?" article by the author and developer.

High level, another move to make the small web available to people again. Me blogging is an attempt to have a voice on the web which isn't filtered or owned by twitter or facebook.

Reading a 4 part series about iron, "Iron, How Did They Make It?', in the pre-modern age. Very interesting, especially in thinking about the differences between the reality of making iron and steel, and how it is frequently depicted in video games around crafting and resource management. Notably that iron is actually very prevalent and not difficult to find "in the wild", and the conversion/smelting of it didn't actually use coal, but a lot of charcoal. Anyway, the writing style is very approachable and, dare i say it, fun to read. History, it can be interesting! Lots of other articles that i'm looking forward to reading there too. Oh, and there is a lovely collection of articles setup/indexed for World Builders.