{"action":"created","issue":{"url":"https://api.github.com/repos/NaNoGenMo/2018/issues/6","repository_url":"https://api.github.com/repos/NaNoGenMo/2018","labels_url":"https://api.github.com/repos/NaNoGenMo/2018/issues/6/labels{/name}","comments_url":"https://api.github.com/repos/NaNoGenMo/2018/issues/6/comments","events_url":"https://api.github.com/repos/NaNoGenMo/2018/issues/6/events","html_url":"https://github.com/NaNoGenMo/2018/issues/6","id":369529712,"node_id":"MDU6SXNzdWUzNjk1Mjk3MTI=","number":6,"title":"Railroading in a \"propositions world\"","user":{"login":"cpressey","id":6860877,"node_id":"MDQ6VXNlcjY4NjA4Nzc=","avatar_url":"https://avatars1.githubusercontent.com/u/6860877?v=4","gravatar_id":"","url":"https://api.github.com/users/cpressey","html_url":"https://github.com/cpressey","followers_url":"https://api.github.com/users/cpressey/followers","following_url":"https://api.github.com/users/cpressey/following{/other_user}","gists_url":"https://api.github.com/users/cpressey/gists{/gist_id}","starred_url":"https://api.github.com/users/cpressey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cpressey/subscriptions","organizations_url":"https://api.github.com/users/cpressey/orgs","repos_url":"https://api.github.com/users/cpressey/repos","events_url":"https://api.github.com/users/cpressey/events{/privacy}","received_events_url":"https://api.github.com/users/cpressey/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":25,"created_at":"2018-10-12T12:26:43Z","updated_at":"2018-11-03T18:39:43Z","closed_at":null,"author_association":"NONE","body":"For past NaNoGenMos I've alternated between \"experimental works\" and generating \"proper novels\".  Last year I did some \"experimental works\" so this year I guess I better generate a proper novel, hey?  Not that I have the time for this.\r\n\r\nLooking at my previous generators, The Swallows was essentially simulation-based and MARYSUE was more-or-less grammar-based.  For this one, I'd like to combine the two approaches using techniques that could be called [railroading (TVTropes link)](https://tvtropes.org/pmwiki/pmwiki.php/Main/RailRoading).\r\n\r\nAlso, both of those generators modelled the world as discrete objects, in the manner of, say, a typical text adventure game.  In this one, in contrast, I'd like to model the world as a set of propositions, similar to the [\"database\" in Prolog](http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse48).  (I don't think I'll actually use Prolog - I mean logic is great and all but I've never been convinced it's very good for *programming* in.  I actually sketched [a DSL for this approach](https://github.com/catseye/Samovar) a while back, but I don't think I'll use that either.  With the right set of abstractions, doing it in a \"mainstream\" language should be fine, and Python is what I'm most used to these days.)\r\n\r\nMy hope is that those two things will work well together and will allow some more sophisticated narrative development, stuff that was kind of awkward in the previous generators, to fall out fairly naturally.\r\n\r\nThere are certainly other things I'd like to tackle, but finding the time to do what I've already described is already a stretch.  But at least one deserves mentioning, which is the actual construction of sentences.  The output of a simulation is a sequence of events, and yes you can write one sentence per event, but it's horrendous, even if you use a lot of templates.  What would be ideal is if the actual \"writing\" part of the generator could construct sentences more \"from scratch\", based on a grammar (obviously) but not just expanding that grammar randomly (obviously) but rather reflecting the content of the events. This is  obviously  incredibly difficult and I'm not going to get very far in this area, but I'd regard even a tiny bit of progress here a success."},"comment":{"url":"https://api.github.com/repos/NaNoGenMo/2018/issues/comments/435611171","html_url":"https://github.com/NaNoGenMo/2018/issues/6#issuecomment-435611171","issue_url":"https://api.github.com/repos/NaNoGenMo/2018/issues/6","id":435611171,"node_id":"MDEyOklzc3VlQ29tbWVudDQzNTYxMTE3MQ==","user":{"login":"cpressey","id":6860877,"node_id":"MDQ6VXNlcjY4NjA4Nzc=","avatar_url":"https://avatars1.githubusercontent.com/u/6860877?v=4","gravatar_id":"","url":"https://api.github.com/users/cpressey","html_url":"https://github.com/cpressey","followers_url":"https://api.github.com/users/cpressey/followers","following_url":"https://api.github.com/users/cpressey/following{/other_user}","gists_url":"https://api.github.com/users/cpressey/gists{/gist_id}","starred_url":"https://api.github.com/users/cpressey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cpressey/subscriptions","organizations_url":"https://api.github.com/users/cpressey/orgs","repos_url":"https://api.github.com/users/cpressey/repos","events_url":"https://api.github.com/users/cpressey/events{/privacy}","received_events_url":"https://api.github.com/users/cpressey/received_events","type":"User","site_admin":false},"created_at":"2018-11-03T18:39:43Z","updated_at":"2018-11-03T18:39:43Z","author_association":"NONE","body":"NaNoGenMo Dev Diary, Day 3:\r\n\r\nNot much progress today, so here's an unnecessarily verbose report on the current status.\r\n\r\n#### 1/3 Simulation\r\n\r\nI've implemented the \"propositions world\" query in Samovar, and it works fine. I'm very pleased that it is not a full inference engine, yet it suffices for my purposes.\r\n\r\nSamovar has a NOT operator, so I had to add a \"failure as negation\" step (search for term in database, and only succeed if you *can't* find it.)\r\n\r\nI will also need to add some kind of binding-uniqueness condition since I don't really want to keep seeing \"Alice looked at Alice.\"\r\n\r\n#### 2/3 Story\r\n\r\nSeveral participants this year have mentioned readability.  I dealt with the issue of readability in A Time for Destiny in 2015, and readabillity is not my goal here.  Instead, my goal is to tell a story over the course of 50,000 words.  (A Time for Destiny arguably did that, if you look at the \"She Gets the Guy\" subplot, but in this case I mean, a *single* story, not an arc over many episodes.)\r\n\r\nIn the absence of any better ideas I'm settling on \"The League of Extraordinarily Dull Gentlemen\". Synopsis:\r\n\r\n> The golden falcon that normally resides on the mantel in the Great Hall, much beloved of all members of the Widgets Club, has been stolen. Accusations are made, improprieties surface, diaries are burnt. Also, Pranehurst has misplaced his umbrella, and asks people he meets if they've seen it, a lot. It is\r\neventually discovered that \\[SPOILERS REDACTED\\]. In the end, Pranehurst buys a new umbrella.\r\n\r\nIt's unlikely that that alone will fill 50,000 words so there will almost certainly be a large amount\r\nof [padding](https://tvtropes.org/pmwiki/pmwiki.php/Main/Padding), of the Deep Hurting variety, around the middle.\r\n\r\n#### 3/3 Diction\r\n\r\nI have decided that Samovar will not do any stylistic processing of the text.  It will produce a straight-up \"caveman narrator\" series of sentences which bluntly describe the events.\r\n\r\nInstead, I'm planning to write a separate tool that I'll use to post-process those gormless utterances into something nominally less grating to read.\r\n\r\nIn theory this other tool could be used on other texts, but I'm sure that's just a theory; the goal will only be for it to work for my use case (if I even get this far.)"}}
{"actor":{"display_login":"cpressey"}}