{"id":23,"date":"2013-07-30T20:01:00","date_gmt":"2013-07-30T20:01:00","guid":{"rendered":"http:\/\/sdi.thoughtstorms.info\/?p=23"},"modified":"2013-07-30T20:01:00","modified_gmt":"2013-07-30T20:01:00","slug":"cthulhu","status":"publish","type":"post","link":"https:\/\/sdi.thoughtstorms.info\/?p=23","title":{"rendered":"Cthulhu"},"content":{"rendered":"<div dir=\"ltr\" trbidi=\"on\">My software is more or less like Cthulhu. Normally dead and at the bottom of the sea, but occasionally stirring and throwing out a languid tentacle to drive men&#8217;s minds insane. (Or at least perturb a couple of more recklessly adventurous users.)<\/p>\n<p>However there&#8217;s been a bit more bubbling agitation down in <span>R&#8217;lyeh recently. The latest weird dream returning to trouble the world is <a href=\"http:\/\/www.geekweaver.com\/\">GeekWeaver<\/a>, the outline based templating language I wrote several years ago.<\/span><\/p>\n<div><a href=\"http:\/\/4.bp.blogspot.com\/-xsa4iVxebz0\/UfgNdjBUB6I\/AAAAAAAAAaM\/Qhvec487BAs\/s1600\/geekweaver.png\" imageanchor=\"1\"><img loading=\"lazy\" decoding=\"async\" border=\"0\" height=\"281\" src=\"http:\/\/4.bp.blogspot.com\/-xsa4iVxebz0\/UfgNdjBUB6I\/AAAAAAAAAaM\/Qhvec487BAs\/s400\/geekweaver.png\" width=\"400\"><\/a><\/div>\n<p><span>GeekWeaver was basically driven by two things : <\/span><span>my interest in the OPML Editor outliner, and a need I had to create flat HTML file documentation. <\/span><span>While the idea was strong, after the basic draft was released, it languished.\u00a0<\/span><\/p>\n<p><span>Partly because I shifted from Windows to Linux where the OPML Editor just wasn&#8217;t such a pleasurable experience. Partly because GW&#8217;s strength is really in having a templating language when you don&#8217;t have a web server; b<\/span><span>ut I moved on to doing a lot of web-server based projects where that wasn&#8217;t an issue.<\/span><span> And partly, it<\/span><span> got led astray &#8211; spiralling way  out of control &#8211; by my desire to recreate the more sophisticated aspects  of Lisp, with all kinds of closures, macros, recursion  etc. <\/span><\/p>\n<p><span>I ended up assuming that the whole enterprise had got horribly crufty and complicated and was an evolutionary dead end.<\/span><\/p>\n<p><span>But suddenly it&#8217;s 2013, I went to have quick look at GeekWeaver, and I really think it&#8217;s worth taking seriously again.<\/span><\/p>\n<p><span>Here are the three reasons why GeekWeaver is very much back in 2013 :<\/span><\/p>\n<p><b><span>Fargo<\/span><\/b><\/p>\n<p><span>Most obviously, Dave Winer has also been doing a refresh of his whole outlining vision with the excellent browser-based <a href=\"http:\/\/fargo.io\/\">Fargo<\/a> editor. Fargo is an up-to-date, no-comprise, easy to use online OPML Editor. But particularly important, it uses Dropbox to sync. outlines with your local file-system. That makes it practical to install GeekWeaver on your machine and compile outlines that you work on in Fargo.<\/span><br \/><span><br \/><\/span><span>I typically create a working directory on my machine with a symbolic link to the OPML file which is in the Fargo subdirectory in Dropbox and the fact that the editor is remote<\/span><span> is hardly noticable (maybe a couple of seconds lag between finishing an edit and being able to compile it).<\/span><br \/><span><br \/><\/span><b><span>GitHub<\/span><\/b><\/p>\n<p><span>What did we do before GitHub? Faffed, that&#8217;s what. I tried to put GeekWeaver into a Python Egg or something, but it was complicated and full of confusing layers of directory.\u00a0 And you need a certain understanding of Python arcana to handle it right. In contrast, everyone uses Git and GitHub these days. Installing and playing on your machine is easier. Updates are more visible. <\/span><br \/><span><br \/>GeekWeaver <a href=\"https:\/\/github.com\/interstar\/geekweaver\">is now on GitHub<\/a><\/span><span>. And as you can see from the quickstart guide on that page, you can be up and running by copying and pasting 4 instructions to your Linux terminal. (Should work on Mac too.) Getting into editing outlines with Fargo (or the OPML Editor still works fine) is a bit more complicated, but not that hard. <\/span><span>(See above.)<\/p>\n<p><b>Markdown<\/b><\/span><br \/><span><br \/><\/span><span>Originally GeekWeaver was conceived as using the same UseMod derived wiki-markup that I used in SdiDesk (and now Project ThoughtStorms for Smallest Federated Wiki). Then part of the Lisp purism got to me and I decided that such things should be implementable in the language, not hardwired, and so started removing them.\u00a0<\/span><br \/><span><br \/><\/span><span>The result was, while GeekWeaver was always better than hand-crafting HTML, it was still, basically hand-crafting HTML, and maybe a lot less convenient that using your favourite editor with built-in snippets or auto-complete. <\/span><br \/><span><br \/>In 2013 I accepted the inevitable. Markdown is one of the dominant wiki-like markup languages. There&#8217;s a handy Python library for it which is a single, install away. And Winer&#8217;s Fargo \/ Trex ecosystem already uses it.\u00a0<\/span><br \/><span><br \/><\/span><span>So in the last couple of days I managed to incorporate a <i>&#038;&#038;markdown<\/i> mode into GeekWeaver pretty easily. There are a couple of issues to resolve, mainly because of collisions between Markdown and other bits of GeekWeaver markup, but I&#8217;m now willing to change GeekWeaver to make Markdown work. It&#8217;s obvious that even in its half-working state, Markdown is a big win that makes it a lot easier to write a bigger chunks of text in GeekWeaver. And, given that generating static documentation was GeekWeaver&#8217;s original and most-common use-case, that&#8217;s crucial.<\/span><br \/><span><br \/><b>Where Next?<\/b><\/span><br \/><span><br \/><\/span><span>Simplification. I&#8217;m cleaning out the cruft, throwing out the convoluted and buggy attempts to make higer-order blocks and lexical closures. (For the meantime.)\u00a0<\/span><br \/><span>\u00a0<\/span><span>\u00a0<\/span><br \/><span>Throwing out some of my own idiosyncratic markup to simplify HTML forms, PHP and javascript. Instead GW is going to refocus on being a great tool for adding user-defined re-usable abstractions to a) Markdown and b) any other text file. <\/p>\n<p>In recent years I&#8217;ve done other libraries for code-generation. For example, <a href=\"https:\/\/github.com\/interstar\/Gates-Of-Dawn\/\">Gates of Dawn<\/a> is Python for generating synthesizers as PureData files. (BTW : I cleaned up that code-base a bit, recently, too.) <\/p>\n<p>Could you generate synths from GeekWeaver? Sure you could. It doesn&#8217;t really help though, but I&#8217;ve learned some interesting patterns from Gates of Dawn, that may find their way into GW. <\/p>\n<p>Code Generation has an ambiguous reputation. It can be useful and can be more trouble than it&#8217;s worth. But if you&#8217;re inclined to think using outlining AND you believe in code-gen then GeekWeaver is aiming to become the perfect tool for you. <\/span><\/div>\n","protected":false},"excerpt":{"rendered":"<p>My software is more or less like Cthulhu. Normally dead and at the bottom of the sea, but occasionally stirring and throwing out a languid tentacle to drive men&#8217;s minds insane. (Or at least perturb a couple of more recklessly adventurous users.) However there&#8217;s been a bit more bubbling agitation down in R&#8217;lyeh recently. The [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[74,173,178,297,319,321,356],"class_list":["post-23","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-code-generation","tag-geekweaver","tag-github","tag-my-stuff","tag-opml","tag-outliner","tag-programming-languages"],"_links":{"self":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=23"}],"version-history":[{"count":0,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts\/23\/revisions"}],"wp:attachment":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=23"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=23"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}