{"id":996,"date":"2015-08-06T18:31:24","date_gmt":"2015-08-06T18:31:24","guid":{"rendered":"http:\/\/sdi.thoughtstorms.info\/?p=993"},"modified":"2015-08-06T18:31:24","modified_gmt":"2015-08-06T18:31:24","slug":"conceptual-refactoring-project-geekweaver","status":"publish","type":"post","link":"https:\/\/sdi.thoughtstorms.info\/?p=996","title":{"rendered":"Conceptual Refactoring : Project GeekWeaver"},"content":{"rendered":"<p>A few years ago I looked at some of the programs I was writing, both for public release and libraries \/ scripts for internal consumption, and realized that even I was confused.<br \/>\nI needed a new map to understand what I was doing. Hence I came up with <a href=\"http:\/\/project.thoughtstorms.info\/\">Project ThoughtStorms<\/a>. A quick and dirty overview of what I was up to in this space of wikis, personal information and knowledge management.<br \/>\nI think that helps. I know what I&#8217;m up to, with the legacy of my ThoughtStorms UseMod wiki and SdiDesk, my experiments with Smallest Federated Wiki, the new OWL stuff, etc. It&#8217;s still a mess, but it&#8217;s conceptually &#8220;encapsulated&#8221; in a single place.<br \/>\nNow I find myself with a similar situation with a number of different tries at some tools to make it easier for me to produce static web-sites. Originally there was <a href=\"http:\/\/www.geekweaver.com\/\">GeekWeaver<\/a>, a way for me to generate static sites quickly and easily from an OPML outline. That was a great idea &#8230; except &#8230; it got mixed up with my n00bie enthusiasm for Lisp and desire to create a powerful Lisp-like programming language.<br \/>\nGeekWeaver also foundered on two other issues : soon after I wrote it, there were no popular OPML outliner tools. Although Dave Winer has resolved that issue and I have, indeed, <a href=\"http:\/\/sdi.thoughtstorms.info\/?p=23\">used<\/a> Fargo to author GeekWeaver programs.<br \/>\nThe other, more subtle and pernicious issue is that few people want to develop a site from scratch these days. Most people use huge frameworks with not just Javascript, but CSS, LESS etc. It really doesn&#8217;t make sense to try to use a tool which denies the file-system or the fact that you&#8217;ll want to be working with a large number of external files.<br \/>\nSo the next time I needed to produce some quick static pages I went back to the drawing-board and came up with <a href=\"https:\/\/github.com\/interstar\/bootdown\">BootDown<\/a> : a very simple Python script that lets you write text in Markdown and wraps it in a BootStrap \/ BootSwatch template. It&#8217;s the opposite of GeekWeaver, it isn&#8217;t trying to be a rich and clever language that lets you define your own templates, it&#8217;s just a quick way to take advantage of a lot of templates that already exist.<br \/>\nBootDown adds two things to conventional Markdown. A shorthand for declaring div tags. And a page separator. So you can still make a multi-page site inside a single file. And you can explicitly reference the div classes and ids you need.<br \/>\nMore recently still, I&#8217;ve been getting into a real Lisp : Clojure. Today, that&#8217;s the language I really want to be working with. And I have a current project that again involves generating a multi-page, fairly static site. But the inputs are a little bit more complicated : some more structured data, not just text. And it makes sense to store it in an outline. So I&#8217;ve started writing Clojure code to read OPML and spit out a BootDown Markdown file, to wrap in HTML.<br \/>\nI can see this project starting to grow too.<br \/>\nAnd so here I am &#8230; three Python code-bases : GeekWeaver, BootDown and the OWL back-end server. Two Clojure projects : the beginnings of a library to work on OPML outlines (<a href=\"https:\/\/github.com\/interstar\/opmlkit\">OPMLKit<\/a>) and my unreleased code I&#8217;m writing for this current project. And some clunky pipelines to use them together. It&#8217;s starting to be another mess. And that&#8217;s why I need <a href=\"http:\/\/project.geekweaver.com\/\">Project GeekWeaver<\/a> : an umbrella to pull together these different strands together, at least conceptually.<br \/>\nThere are some thoughts &#8230; would it make sense to pull at least some of the original GeekWeaver code INTO the OWL back-end server? So that &#8220;run transformations on this outline&#8221; is a standard OWL feature, and OWL becomes GeekWeaver&#8217;s built-in IDE? But what about the OWLdroid version that doesn&#8217;t have Python? Should I rewrite that code in CoffeeScript. (Or ClojureScript &#8230; a working but still fairly slow option at the moment.) BootDown &#8220;just works&#8221;. Am I better off scrapping the GeekWeaver idea altogether and just focusing on such practical solutions?<br \/>\nSome of this will become clearer as I work through this current site I&#8217;m making. meanwhile Project GeekWeaver is the category and (shortly) the site for the high-level overview.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A few years ago I looked at some of the programs I was writing, both for public release and libraries \/ scripts for internal consumption, and realized that even I was confused. I needed a new map to understand what I was doing. Hence I came up with Project ThoughtStorms. A quick and dirty overview [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[67,74,173,324,358,365],"class_list":["post-996","post","type-post","status-publish","format-standard","hentry","category-me","tag-clojurescript","tag-code-generation","tag-geekweaver","tag-owl","tag-project-geekweaver","tag-python"],"_links":{"self":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts\/996","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=996"}],"version-history":[{"count":0,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=\/wp\/v2\/posts\/996\/revisions"}],"wp:attachment":[{"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=996"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=996"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sdi.thoughtstorms.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}