Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Initial development blogs

  • Loading branch information...
commit ab35e15df7bd23b59cb1136fd276e8a35bf60fbf 1 parent 4814650
@hugoduncan authored
View
1  .gitignore
@@ -1,3 +1,4 @@
#*#
.#*
*.fasl
+*.DS_Store
View
35 content/drafts/configuration.post
@@ -0,0 +1,35 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<html xmlns='http://hugoduncan.org/xmlns/post'>
+<head>
+ <title>Blog Generator Configuration</title>
+ <tag>lisp</tag>
+</head>
+<body>
+<p>The blog generator is intended to be quite flexible, within the design constraints, which has lead to a large number of possible configurations, both on the lisp side, and for Emacs. Drafts can be written using any editor, but I shall describe use with Emacs. The package has only been tested with SBCL, but should work with any common lisp implentation.</p>
+
+<h2>Prerequisites</h2>
+<p>The blog generator uses <a href="http://common-lisp.net/project/cxml/">CXML</a>, <a href="http://common-lisp.net/project/elephant/">Elephant</a>, <a href="http://weitz.de/cl-fad/">CL-FAD</a>, <a href="http://common-lisp.net/project/local-time/">Local-Time</a>, and <a href="http://common-lisp.net/project/stefil/">Stefil</a> for testing. I am using clbuild to obtain these.</p>
+<p>For Emacs, I use <a href="http://www.thaiopensource.com/nxml-mode/">nXML mode</a>.</p>
+
+<h2>Configuration Environments</h2>
+<p>A configuration switching method is included in the package, but it's use is optional, and as is usual for lisp, configuration is through special variables.</p>
+<p>For an example of using the configuration environments, look at the <code>config.lisp</code> file loaded by the <code>my-blog.asd</code> system. This defines the three environments that I use, <code>:test</code>, <code>:development</code>, and <code>:production</code>. Configurations are defined using <code>SET-ENVIRONMENT</code> and activated with <code>CONFIGURE</code>.</p>
+
+<h2>Basic Configuration</h2>
+<p>The first configuration required is the choice of file system locations for the published posts (<code>*PUBLISHED-PATH*</code>), the generated web pages(<code>*SITE-PATH*</code>) and the page templates (<code>*TEMPLATE-PATH*</code>). Drafts can exist anywhere, and are not tracked by the generator.</p>
+<p>Next, the web paths need to be configured. The path of the blog's index file relative to the site root is required (<code>*BLOG-ROOT-PATH*</code>), as is the domain of the site (<code>*BLOG-DOMAIN*</code>), in order for it to be used in the Atom feed.</p>
+<p>Finally, the database connection expression is required (<code>*BLOG-DB-SPEC*</code>). Please refer to the Elephant documentation for your choices here. I use postgres, but it should work with the BDB backend as well.</p>
+
+<h2>Templates</h2>
+<p>The site requires three templates in <code>*TEMPLATE-PATH*</code>; for the index file (<code>index.html</code>), for the posts (<code>post.xhtml</code>) and for the Atom feed (<code>atom.xml</code>). The templates are very simple - each div or span with a recognised id has content injected into it. The recoginised id's are:</p>
+<ul>
+ <li><code>posts</code> - replaced with the current post synopses, and links to the posts</li>
+ <li><code>post</code> - replaced with the current post's content</li>
+ <li><code>post-title</code> - replaced with the current post's title</li>
+ <li><code>post-when</code> - replaced with the current post's published date</li>
+ <li><code>post-update</code> - replaced with the current post's updated date</li>
+</ul>
+<p>For the Atom feed, the <code>updated</code> element is filled out correctly, and the posts are automatically inserted, ie. there are no special id's.</p>
+
+</body>
+</html>
View
20 content/drafts/design.post
@@ -0,0 +1,20 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<html xmlns='http://hugoduncan.org/xmlns/post'>
+<head>
+ <title>Blog Generator Design</title>
+ <tag>lisp</tag>
+ <tag>blog</tag>
+ <tag>generator</tag>
+</head>
+<body>
+<p>I want to be able publish posts easily to a statically served site. I am sure that there are lots of blog site generators out there, but I could not find one that I liked, and which was in a language I would enjoy hacking, and so I wrote my own.</p>
+
+<p>The blog site is generated from file based posts, using an augmented version of xhtml as the input format. The input format has a DTD, as well as a Relax NG compressed schema generated using <a href="http://www.thaiopensource.com/relaxng/trang.html">Trang</a> which is used in the provided schemas.xml file to allow validation in Emacs <a href="http://www.thaiopensource.com/nxml-mode/">nXML mode</a>.</p>
+
+<p>When ready, the drafts are merged into a post template, in standard xhtml, to produce a site that can be rsync'd to a web host. The merging of the templates is done using <a href="http://www.sbcl.org/">SBCL</a> and <a href="http://common-lisp.net/project/cxml/">CXML</a>. The generator maintains a database of posts, so that it can generate the index page, etc, and uses <a href="http://common-lisp.net/project/elephant/">Elephant</a>. The whole site can be re-generated from the input post files, so a revision control system, such as git, can be used to manage the posts, and we don't have to worry about backing up the the database too frequently.</p>
+
+<p>An Emacs minor-mode can be used to trigger the publishing and site generation.</p>
+
+<p>The generator is intended to produce a personol blog, with one user. I am however misusing it here to provide a sort of update blog for the software itself.</p>
+</body>
+</html>
View
34 content/published/post/2009/blog_generator_configuration.post
@@ -0,0 +1,34 @@
+<html xmlns="http://hugoduncan.org/xmlns/post">
+<head>
+ <title>Blog Generator Configuration</title>
+ <tag>lisp</tag>
+<when day="4" month="3" year="2009"/><linkname>blog_generator_configuration</linkname></head>
+<body>
+<p>The blog generator is intended to be quite flexible, within the design constraints, which has lead to a large number of possible configurations, both on the lisp side, and for Emacs. Drafts can be written using any editor, but I shall describe use with Emacs. The package has only been tested with SBCL, but should work with any common lisp implentation.</p>
+
+<h2>Prerequisites</h2>
+<p>The blog generator uses <a href="http://common-lisp.net/project/cxml/">CXML</a>, <a href="http://common-lisp.net/project/elephant/">Elephant</a>, <a href="http://weitz.de/cl-fad/">CL-FAD</a>, <a href="http://common-lisp.net/project/local-time/">Local-Time</a>, and <a href="http://common-lisp.net/project/stefil/">Stefil</a> for testing. I am using clbuild to obtain these.</p>
+<p>For Emacs, I use <a href="http://www.thaiopensource.com/nxml-mode/">nXML mode</a>.</p>
+
+<h2>Configuration Environments</h2>
+<p>A configuration switching method is included in the package, but it's use is optional, and as is usual for lisp, configuration is through special variables.</p>
+<p>For an example of using the configuration environments, look at the <code>config.lisp</code> file loaded by the <code>my-blog.asd</code> system. This defines the three environments that I use, <code>:test</code>, <code>:development</code>, and <code>:production</code>. Configurations are defined using <code>SET-ENVIRONMENT</code> and activated with <code>CONFIGURE</code>.</p>
+
+<h2>Basic Configuration</h2>
+<p>The first configuration required is the choice of file system locations for the published posts (<code>*PUBLISHED-PATH*</code>), the generated web pages(<code>*SITE-PATH*</code>) and the page templates (<code>*TEMPLATE-PATH*</code>). Drafts can exist anywhere, and are not tracked by the generator.</p>
+<p>Next, the web paths need to be configured. The path of the blog's index file relative to the site root is required (<code>*BLOG-ROOT-PATH*</code>), as is the domain of the site (<code>*BLOG-DOMAIN*</code>), in order for it to be used in the Atom feed.</p>
+<p>Finally, the database connection expression is required (<code>*BLOG-DB-SPEC*</code>). Please refer to the Elephant documentation for your choices here. I use postgres, but it should work with the BDB backend as well.</p>
+
+<h2>Templates</h2>
+<p>The site requires three templates in <code>*TEMPLATE-PATH*</code>; for the index file (<code>index.html</code>), for the posts (<code>post.xhtml</code>) and for the Atom feed (<code>atom.xml</code>). The templates are very simple - each div or span with a recognised id has content injected into it. The recoginised id's are:</p>
+<ul>
+ <li><code>posts</code> - replaced with the current post synopses, and links to the posts</li>
+ <li><code>post</code> - replaced with the current post's content</li>
+ <li><code>post-title</code> - replaced with the current post's title</li>
+ <li><code>post-when</code> - replaced with the current post's published date</li>
+ <li><code>post-update</code> - replaced with the current post's updated date</li>
+</ul>
+<p>For the Atom feed, the <code>updated</code> element is filled out correctly, and the posts are automatically inserted, ie. there are no special id's.</p>
+
+</body>
+</html>
View
19 content/published/post/2009/blog_generator_design.post
@@ -0,0 +1,19 @@
+<html xmlns="http://hugoduncan.org/xmlns/post">
+<head>
+ <title>Blog Generator Design</title>
+ <tag>lisp</tag>
+ <tag>blog</tag>
+ <tag>generator</tag>
+<when day="4" month="3" year="2009"/><linkname>blog_generator_design</linkname></head>
+<body>
+<p>I want to be able publish posts easily to a statically served site. I am sure that there are lots of blog site generators out there, but I could not find one that I liked, and which was in a language I would enjoy hacking, and so I wrote my own.</p>
+
+<p>The blog site is generated from file based posts, using an augmented version of xhtml as the input format. The input format has a DTD, as well as a Relax NG compressed schema generated using <a href="http://www.thaiopensource.com/relaxng/trang.html">Trang</a> which is used in the provided schemas.xml file to allow validation in Emacs <a href="http://www.thaiopensource.com/nxml-mode/">nXML mode</a>.</p>
+
+<p>When ready, the drafts are merged into a post template, in standard xhtml, to produce a site that can be rsync'd to a web host. The merging of the templates is done using <a href="http://www.sbcl.org/">SBCL</a> and <a href="http://common-lisp.net/project/cxml/">CXML</a>. The generator maintains a database of posts, so that it can generate the index page, etc, and uses <a href="http://common-lisp.net/project/elephant/">Elephant</a>. The whole site can be re-generated from the input post files, so a revision control system, such as git, can be used to manage the posts, and we don't have to worry about backing up the the database too frequently.</p>
+
+<p>An Emacs minor-mode can be used to trigger the publishing and site generation.</p>
+
+<p>The generator is intended to produce a personol blog, with one user. I am however misusing it here to provide a sort of update blog for the software itself.</p>
+</body>
+</html>
View
3  content/site/.gitignore
@@ -1,3 +0,0 @@
-post
-index.xhtml
-feed.atom
View
33 content/site/feed.atom
@@ -0,0 +1,33 @@
+<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
+ <title>Hugo Duncan</title>
+ <id>http://hugoduncan.org/blog/</id>
+ <link href="./"/>
+ <link href="" rel="self"/>
+ <logo>rsslogo.jpg</logo>
+ <icon>/favicon.ico</icon>
+ <author><name>Hugo Duncan</name></author>
+ <subtitle>My ramblings</subtitle>
+ <rights>All content written by Hugo Duncan and photos by Hugo Duncan Copyright Hugo Duncan, some rights reserved, see /blog/misc/Copyright</rights>
+ <generator uri="/misc/Colophon">Generated from XHTML source code using Common Lisp, Emacs, and Postgres.</generator>
+ <updated>2009-03-04T22:41:15.341016-05:00</updated><entry xml:base="http://localhost/blog/"><title>Blog Generator Configuration</title><link href="http://localhost/blog/post/2009/blog_generator_configuration.xhtml"/><id>http://localhost/blog/post/2009/blog_generator_configuration.xhtml</id><published>2009-03-03T19:00:00.000000-05:00</published><updated>2009-03-03T19:00:00.000000-05:00</updated><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The blog generator is intended to be quite flexible, within the design constraints, which has lead to a large number of possible configurations, both on the lisp side, and for Emacs. Drafts can be written using any editor, but I shall describe use with Emacs. The package has only been tested with SBCL, but should work with any common lisp implentation.</p></div></summary><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
+<p>The blog generator is intended to be quite flexible, within the design constraints, which has lead to a large number of possible configurations, both on the lisp side, and for Emacs. Drafts can be written using any editor, but I shall describe use with Emacs. The package has only been tested with SBCL, but should work with any common lisp implentation.</p>
+
+<h2>Prerequisites</h2>
+<p>The blog generator uses <a href="http://common-lisp.net/project/cxml/">CXML</a>, <a href="http://common-lisp.net/project/elephant/">Elephant</a>, <a href="http://weitz.de/cl-fad/">CL-FAD</a>, <a href="http://common-lisp.net/project/local-time/">Local-Time</a>, and <a href="http://common-lisp.net/project/stefil/">Stefil</a> for testing. I am using clbuild to obtain these.</p>
+
+
+<p>A configuration switching method is included in the package, but it's use is optional, and as is usual for lisp, configuration is through special variables.</p>
+</div></content></entry><entry xml:base="http://localhost/blog/"><title>Blog Generator Design</title><link href="http://localhost/blog/post/2009/blog_generator_design.xhtml"/><id>http://localhost/blog/post/2009/blog_generator_design.xhtml</id><published>2009-03-03T19:00:00.000000-05:00</published><updated>2009-03-03T19:00:00.000000-05:00</updated><summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I want to be able publish posts easily to a statically served site. I am sure that there are lots of blog site generators out there, but I could not find one that I liked, and which was in a language I would enjoy hacking, and so I wrote my own.</p></div></summary><content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">
+<p>I want to be able publish posts easily to a statically served site. I am sure that there are lots of blog site generators out there, but I could not find one that I liked, and which was in a language I would enjoy hacking, and so I wrote my own.</p>
+
+<p>The blog site is generated from file based posts, using an augmented version of xhtml as the input format. The input format has a DTD, as well as a Relax NG compressed schema generated using <a href="http://www.thaiopensource.com/relaxng/trang.html">Trang</a> which is used in the provided schemas.xml file to allow validation in Emacs <a href="http://www.thaiopensource.com/nxml-mode/">nXML mode</a>.</p>
+
+<p>When ready, the drafts are merged into a post template, in standard xhtml, to produce a site that can be rsync'd to a web host. The merging of the templates is done using <a href="http://www.sbcl.org/">SBCL</a> and <a href="http://common-lisp.net/project/cxml/">CXML</a>. The generator maintains a database of posts, so that it can generate the index page, etc, and uses <a href="http://common-lisp.net/project/elephant/">Elephant</a>. The whole site can be re-generated from the input post files, so a revision control system, such as git, can be used to manage the posts, and we don't have to worry about backing up the the database too frequently.</p>
+
+<p>An Emacs minor-mode can be used to trigger the publishing and site generation.</p>
+
+<p>The generator is intended to produce a personol blog, with one user. I am however misusing it here to provide a sort of update blog for the software itself.</p>
+</div></content></entry>
+
+
+</feed>
View
1  content/site/index.xhtml
@@ -0,0 +1 @@
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">&#10;<head>&#10;<meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta>&#10;<link href="style.css" media="screen" rel="stylesheet" title="style" type="text/css"></link>&#10;<meta content="lisp,blog" name="keywords"></meta>&#10;<meta content="Development blog for lisp based blog site generator" name="description"></meta>&#10;<title>Blog Site Generator</title>&#10;</head>&#10;<body>&#10;<div id="container">&#10;<div id="banner"><h1>cl-blog-generator</h1></div>&#10;<div id="centercontent">&#10;<div id="posts"><div class="post-synopsis"><span class="post-link"><a href="post/2009/blog_generator_configuration.xhtml">Blog Generator Configuration</a></span><p>The blog generator is intended to be quite flexible, within the design constraints, which has lead to a large number of possible configurations, both on the lisp side, and for Emacs. Drafts can be written using any editor, but I shall describe use with Emacs. The package has only been tested with SBCL, but should work with any common lisp implentation.</p><span class="post-link"><a href="post/2009/blog_generator_design.xhtml">Blog Generator Design</a></span><p>I want to be able publish posts easily to a statically served site. I am sure that there are lots of blog site generators out there, but I could not find one that I liked, and which was in a language I would enjoy hacking, and so I wrote my own.</p></div></div>&#10;<div id="footer"></div>&#10;</div>&#10;&#10;<div id="rightcontent">&#10;<div class="oo"><a href="/" id="to-home"><span id="home">home</span></a></div>&#10; <a href="" rel="me">source</a>&#10; <a href="http://hugoduncan.org" rel="me">Hugo Duncan</a>&#10;<div class="vcard">&#10; <a class="fn url" href="http://hugoduncan.org/">Hugo Duncan</a>&#10; <div><a class="email" href="mailto:blogen@hugoduncan.org">&#10; <span class="type">pref</span><span>erred email</span>&#10; </a></div>&#10;</div>&#10;</div>&#10;</div>&#10;</body>&#10;</html>
View
1  content/site/post/2009/blog_generator_configuration.xhtml
@@ -0,0 +1 @@
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">&#10;<head>&#10;<meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta>&#10;<link href="../../style.css" media="screen" rel="stylesheet" title="sans" type="text/css"></link>&#10;<title>cl-blog-generator : Blog Generator Configuration</title>&#10;</head>&#10;<body>&#10;<div id="container">&#10;<div id="banner"><h1><span id="post-title">Blog Generator Configuration</span></h1></div>&#10;<div id="centercontent">&#10;<div id="post">&#10;<p>The blog generator is intended to be quite flexible, within the design constraints, which has lead to a large number of possible configurations, both on the lisp side, and for Emacs. Drafts can be written using any editor, but I shall describe use with Emacs. The package has only been tested with SBCL, but should work with any common lisp implentation.</p>&#10;&#10;<h2>Prerequisites</h2>&#10;<p>The blog generator uses <a href="http://common-lisp.net/project/cxml/">CXML</a>, <a href="http://common-lisp.net/project/elephant/">Elephant</a>, <a href="http://weitz.de/cl-fad/">CL-FAD</a>, <a href="http://common-lisp.net/project/local-time/">Local-Time</a>, and <a href="http://common-lisp.net/project/stefil/">Stefil</a> for testing. I am using clbuild to obtain these.</p>&#10;<p>For Emacs, I use <a href="http://www.thaiopensource.com/nxml-mode/">nXML mode</a>.</p>&#10;&#10;<h2>Configuration Environments</h2>&#10;<p>A configuration switching method is included in the package, but it's use is optional, and as is usual for lisp, configuration is through special variables.</p>&#10;<p>For an example of using the configuration environments, look at the <code>config.lisp</code> file loaded by the <code>my-blog.asd</code> system. This defines the three environments that I use, <code>:test</code>, <code>:development</code>, and <code>:production</code>. Configurations are defined using <code>SET-ENVIRONMENT</code> and activated with <code>CONFIGURE</code>.</p>&#10;&#10;<h2>Basic Configuration</h2>&#10;<p>The first configuration required is the choice of file system locations for the published posts (<code>*PUBLISHED-PATH*</code>), the generated web pages(<code>*SITE-PATH*</code>) and the page templates (<code>*TEMPLATE-PATH*</code>). Drafts can exist anywhere, and are not tracked by the generator.</p>&#10;<p>Next, the web paths need to be configured. The path of the blog's index file relative to the site root is required (<code>*BLOG-ROOT-PATH*</code>), as is the domain of the site (<code>*BLOG-DOMAIN*</code>), in order for it to be used in the Atom feed.</p>&#10;<p>Finally, the database connection expression is required (<code>*BLOG-DB-SPEC*</code>). Please refer to the Elephant documentation for your choices here. I use postgres, but it should work with the BDB backend as well.</p>&#10;&#10;<h2>Templates</h2>&#10;<p>The site requires three templates in <code>*TEMPLATE-PATH*</code>; for the index file (<code>index.html</code>), for the posts (<code>post.xhtml</code>) and for the Atom feed (<code>atom.xml</code>). The templates are very simple - each div or span with a recognised id has content injected into it. The recoginised id's are:</p>&#10;<ul>&#10; <li><code>posts</code> - replaced with the current post synopses, and links to the posts</li>&#10; <li><code>post</code> - replaced with the current post's content</li>&#10; <li><code>post-title</code> - replaced with the current post's title</li>&#10; <li><code>post-when</code> - replaced with the current post's published date</li>&#10; <li><code>post-update</code> - replaced with the current post's updated date</li>&#10;</ul>&#10;<p>For the Atom feed, the <code>updated</code> element is filled out correctly, and the posts are automatically inserted, ie. there are no special id's.</p>&#10;&#10;</div>&#10;</div>&#10;&#10;<div id="rightcontent">&#10;<div class="oo"><a href="/" id="to-home"><span id="home">home</span></a></div>&#10; <a href="" rel="me">source</a>&#10; <a href="http://hugoduncan.org" rel="me">Hugo Duncan</a>&#10;<div class="vcard">&#10; <a class="fn url" href="http://hugoduncan.org/">Hugo Duncan</a>&#10; <div><a class="email" href="mailto:blogen@hugoduncan.org">&#10; <span class="type">pref</span><span>erred email</span>&#10; </a></div>&#10;</div>&#10;</div>&#10;</div>&#10;</body>&#10;</html>
View
1  content/site/post/2009/blog_generator_design.xhtml
@@ -0,0 +1 @@
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">&#10;<head>&#10;<meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta>&#10;<link href="../../style.css" media="screen" rel="stylesheet" title="sans" type="text/css"></link>&#10;<title>cl-blog-generator : Blog Generator Design</title><link href="/blog/post/2009/blog_generator_configuration.xhtml" rel="next" title="Blog Generator Configuration"></link>&#10;</head>&#10;<body>&#10;<div id="container">&#10;<div id="banner"><h1><span id="post-title">Blog Generator Design</span></h1></div>&#10;<div id="centercontent">&#10;<div id="post">&#10;<p>I want to be able publish posts easily to a statically served site. I am sure that there are lots of blog site generators out there, but I could not find one that I liked, and which was in a language I would enjoy hacking, and so I wrote my own.</p>&#10;&#10;<p>The blog site is generated from file based posts, using an augmented version of xhtml as the input format. The input format has a DTD, as well as a Relax NG compressed schema generated using <a href="http://www.thaiopensource.com/relaxng/trang.html">Trang</a> which is used in the provided schemas.xml file to allow validation in Emacs <a href="http://www.thaiopensource.com/nxml-mode/">nXML mode</a>.</p>&#10;&#10;<p>When ready, the drafts are merged into a post template, in standard xhtml, to produce a site that can be rsync'd to a web host. The merging of the templates is done using <a href="http://www.sbcl.org/">SBCL</a> and <a href="http://common-lisp.net/project/cxml/">CXML</a>. The generator maintains a database of posts, so that it can generate the index page, etc, and uses <a href="http://common-lisp.net/project/elephant/">Elephant</a>. The whole site can be re-generated from the input post files, so a revision control system, such as git, can be used to manage the posts, and we don't have to worry about backing up the the database too frequently.</p>&#10;&#10;<p>An Emacs minor-mode can be used to trigger the publishing and site generation.</p>&#10;&#10;<p>The generator is intended to produce a personol blog, with one user. I am however misusing it here to provide a sort of update blog for the software itself.</p>&#10;</div>&#10;</div>&#10;&#10;<div id="rightcontent">&#10;<div class="oo"><a href="/" id="to-home"><span id="home">home</span></a></div>&#10; <a href="" rel="me">source</a>&#10; <a href="http://hugoduncan.org" rel="me">Hugo Duncan</a>&#10;<div class="vcard">&#10; <a class="fn url" href="http://hugoduncan.org/">Hugo Duncan</a>&#10; <div><a class="email" href="mailto:blogen@hugoduncan.org">&#10; <span class="type">pref</span><span>erred email</span>&#10; </a></div>&#10;</div>&#10;</div>&#10;</div>&#10;</body>&#10;</html>
View
1  content/site/post/2009/now_with_updates_to_existing_posts.xhtml
@@ -0,0 +1 @@
+<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">&#10;<head profile="http://gmpg.org/xfn/11 http://www.w3.org/2006/03/hcard">&#10;<meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta>&#10;<link href="/sans.css" media="screen" rel="stylesheet" title="sans" type="text/css"></link>&#10;<link href="/serif.css" media="screen" rel="alternate stylesheet" title="serif" type="text/css"></link>&#10;<script src="/site.js" type="text/javascript"></script>&#10;<link href="http://www.myopenid.com/server" rel="openid.server"></link>&#10;<link href="http://hugoduncan.myopenid.com/" rel="openid.delegate"></link>&#10;<link href="foaf.rdf" rel="meta" title="FOAF" type="application/rdf+xml"></link>&#10;<meta content="boost,c++,cavitation,propeller,artificial intelligence,sematic web,lisp,common lisp" name="keywords"></meta>&#10;<meta content="Home page for Hugo Duncan, with current projects" name="description"></meta>&#10;<title>Hugo Duncan : Now with updates to existing posts</title>&#10;</head>&#10;<body>&#10;<div id="banner"><h1><span id="post-title">Now with updates to existing posts</span></h1><div id="search"><form action="http://www.google.com/search"><div>Search <input name="as_q" size="15"></input><input name="hl" type="hidden" value="en"></input><input name="ie" type="hidden" value="UTF-8"></input><input name="btnG" type="hidden" value="Google+Search"></input><input name="as_qdr" type="hidden" value="all"></input><input name="as_occt" type="hidden" value="any"></input><input name="as_dt" type="hidden" value="i"></input><input name="as_sitesearch" type="hidden" value="hugoduncan.org"></input></div></form></div></div>&#10;<div id="centercontent">&#10;<div id="post">&#10;<p>Updating of existing posts has been added. Use PUBLISH-UPDATED-POST from the REPL, or BLOG-GEN-PUBLISH-UPDATE from Emacs.</p>&#10;</div>&#10;<hr></hr>&#10;<div id="footer"><div id="post-when">4-3-2009</div><div id="post-updated"></div>&#10;<p><a accesskey="p" href="/" onclick="setActiveStyleSheet('serif')" onkeypress="setActiveStyleSheet('serif')">Serif</a> / <a accesskey="p" href="/" onclick="setActiveStyleSheet('sans')" onkeypress="setActiveStyleSheet('sans')">Sans-Serif</a></p>&#10;</div>&#10;</div>&#10;&#10;<div id="rightcontent">&#10;<div class="oo"><a href="/" id="to-home"><span id="home">home</span></a></div>&#10; <a href="about.xhtml" rel="me">author</a> ·&#10; <a href="http://www.yellowfin.com" rel="me">Yellowfin</a>&#10;<div class="vcard">&#10; <a class="fn url" href="http://hugoduncan.org/">Hugo Duncan</a>&#10; <div><a class="email" href="mailto:tabcdef@hugoduncan.org"><span class="type">pref</span><span>erred email</span></a></div>&#10;</div>&#10;<div id="fonts">&#10;<hr></hr>&#10;<a accesskey="p" href="/" id="serif" onclick="setActiveStyleSheet('serif'); return false;" onkeypress="setActiveStyleSheet('serif'); return false;">Serif</a> ·&#10;<a accesskey="p" href="/" id="sans" onclick="setActiveStyleSheet('sans'); return false;" onkeypress="setActiveStyleSheet('sans'); return false;">Sans-Serif</a>&#10;<hr></hr>&#10;</div>&#10;</div>&#10;&#10;&#10;<script type="text/javascript">&#10;var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);&#10;document.write(unescape(&quot;%3Cscript src='&quot; + gaJsHost + &quot;google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E&quot;));&#10;</script>&#10;<script type="text/javascript">&#10;var pageTracker = _gat._getTracker(&quot;UA-3688366-1&quot;);&#10;pageTracker._initData();&#10;pageTracker._trackPageview();&#10;</script>&#10;</body>&#10;</html>
View
212 content/site/style.css
@@ -0,0 +1,212 @@
+html { height: 100%; padding: 0; margin: 0; background-color: #fffcfc; }
+
+body {
+ font-size: x-small;
+ font-family: Verdana, sans-serif; /* sans */
+ color: #050505 inherit;
+ padding: 0px;
+}
+
+div#container {
+padding-top: 40px;
+padding-right: 24%;
+padding-left: 4%;
+margin-right: auto;
+margin-left: 0;
+}
+
+#container hr {
+ color: #eee;
+ background-color: #eee;
+ border: 0;
+ height: 1px;
+ width: 60%;
+ margin: 0.5em 0;
+ text-align: left;
+ padding-left: 3em;
+ padding-right: 10em;
+}
+
+#banner {
+ height: 60px;
+}
+
+
+#centercontent {
+ font-size: 127%;
+ width: 80%;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+
+a {
+ text-decoration: none;
+ font-weight: bold;
+}
+
+#container a {
+ text-decoration: none;
+ font-weight: bold;
+ color: #a00;
+}
+.el a {
+ text-decoration: none;
+ font-weight: bold;
+ color: #040;
+}
+#leftcontent a {
+ text-decoration: none;
+ font-weight: bold;
+ color: #040;
+}
+.ot a {
+ text-decoration: none;
+ font-weight: bold;
+ color: black;
+}
+#rightcontent a {
+ text-decoration: none;
+ color: #040;
+}
+
+.big { font-size: 14px; }
+
+.caption {
+ text-align: center;
+ margin-left: 85px;
+ margin-right: 85px;
+ margin-bottom: 10px;
+}
+
+code {
+ font-family: monospace;
+ font-weight: bold;
+ font-size: larger;
+}
+
+#container code { color: #080; }
+
+dfn { font-style: italic; }
+
+/* ellipses */
+.el { font-weight: bold; }
+
+
+.vcard {
+ font-family: Verdana, sans-serif;
+ font-size: 80%;
+ color: black;
+ text-align: center;
+}
+
+div.vcard {
+ padding-top: 20px;
+}
+
+
+#post-data {
+ text-align: center;
+ margin: 0 20px 0px 20px;
+}
+
+#centercontent hr {
+ width: 80%;
+}
+
+
+#banner h1 {
+ font-size: 20px;
+ font-weight: normal;
+ padding: 6px 10px 0px 10px;
+ margin: 0px;
+}
+
+h2 {
+ font-weight: bold;
+ font-size: 100%;
+ margin-bottom: 0;
+}
+
+.h3 {
+ font-weight: bold;
+ font-size: 14px;
+}
+
+.hide { display: none; }
+
+#centercontent img { margin-left: 8px; margin-top: 10px; border: 0px; }
+
+#potd img { margin-left: -4px; border: 0px; }
+
+#rightcontent img { border: 0px; }
+
+#centercontent li {
+ margin: 0.5em 0 0.5em 0;
+ line-height: 1.2;
+}
+
+#rightcontent li { margin-bottom: 0; }
+
+li { margin-bottom: 10px; }
+
+.loser { margin-left: 10px; color: red; }
+
+#rightcontent .misc { text-align: center; margin-bottom: 4px; }
+.misc { text-align: center; }
+
+.o { font-style: italic; }
+
+.od { color: #a00; }
+
+ol { margin-right: 40px; }
+
+.oo { font-size: 16px; margin-bottom: 4px; }
+
+#centercontent .os {
+ padding-top: 10pt;
+ text-indent: -5px;
+}
+#rightcontent .os {
+ padding-bottom: 12pt;
+ text-indent: -5px;
+}
+
+.ot {
+ font-weight: bold;
+ font-size: 16px;
+}
+
+#centercontent p {
+ margin: 0.5em 0 0.5em 0;
+ line-height: 1.2;
+}
+.p1 { text-indent: -5px; }
+
+#centercontent p a.plink {
+ text-decoration: none;
+ color: #fdfdfd; /* the page background colour */
+}
+
+#centercontent p:hover a.plink, p a:hover.plink {
+ color: #c8a8ff;
+}
+
+#rightcontent {
+ padding-left: 10px;
+ position: absolute; right: 10px; top: 130px;
+ padding-top: 0px;
+ padding-bottom: 0px;
+ width: 212px;
+ color: #040;
+ border-left: 1px solid #040;
+}
+
+.show { display: inline; }
+
+#rightcontent ul
+{
+ margin-top: 0px;
+ padding-top: 0px;
+}
+
View
52 content/template/index.xhtml
@@ -1,61 +1,31 @@
<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head profile="http://gmpg.org/xfn/11 http://www.w3.org/2006/03/hcard">
+<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<link rel='stylesheet' type='text/css' media='screen' title='sans' href='/sans.css' />
-<link rel='alternate stylesheet' type='text/css' media='screen' title='serif' href='/serif.css' />
-<script type='text/javascript' src='/site.js'></script>
-<link rel="openid.server" href="http://www.myopenid.com/server" />
-<link rel="openid.delegate" href="http://hugoduncan.myopenid.com/" />
-<link rel="meta" type="application/rdf+xml" title="FOAF" href="foaf.rdf" />
-<meta name="keywords" content="boost,c++,cavitation,propeller,artificial intelligence,sematic web"/>
-<meta name="description" content="Home page for Hugo Duncan, with current projects"/>
-<title>Hugo Duncan</title>
+<link rel='stylesheet' type='text/css' media='screen' title='style' href='style.css' />
+<meta name="keywords" content="lisp,blog"/>
+<meta name="description" content="Development blog for lisp based blog site generator"/>
+<title>Blog Site Generator</title>
</head>
<body>
-<div id='banner'><h1>Hugo Duncan</h1><div id='search'><form action="http://www.google.com/search"><div>Search <input size="15" name="as_q" /><input type="hidden" name="hl" value="en" /><input type="hidden" name="ie" value="UTF-8" /><input type="hidden" name="btnG" value="Google+Search" /><input type="hidden" name="as_qdr" value="all" /><input type="hidden" name="as_occt" value="any" /><input type="hidden" name="as_dt" value="i" /><input type="hidden" name="as_sitesearch" value="hugoduncan.org" /></div></form></div></div>
+<div id='container'>
+<div id='banner'><h1>cl-blog-generator</h1></div>
<div id='centercontent'>
<div id='posts'/>
-<hr />
-<div id='footer'><p><b id='updated'>Updated: 2008/02/20</b><br />
-<a href='/' onclick="setActiveStyleSheet('serif')" onkeypress="setActiveStyleSheet('serif')" accesskey='p'>Serif</a> / <a href='/' onclick="setActiveStyleSheet('sans')" onkeypress="setActiveStyleSheet('sans')" accesskey='p'>Sans-Serif</a><br />
-</p>
-</div>
+<div id='footer'></div>
</div>
<div id='rightcontent'>
<div class='oo'><a id='to-home' href='/'><span id='home'>home</span></a></div>
- <a rel="me" href="about.xhtml">author</a> &#xb7;
- <a rel="me" href="http://www.yellowfin.com">Yellowfin</a>
+ <a rel="me" href="">source</a>
+ <a rel="me" href="http://hugoduncan.org">Hugo Duncan</a>
<div class="vcard">
<a class="fn url" href="http://hugoduncan.org/">Hugo Duncan</a>
- <div><a class="email" href="mailto:tabcdef@hugoduncan.org">
+ <div><a class="email" href="mailto:blogen@hugoduncan.org">
<span class="type">pref</span><span>erred email</span>
</a></div>
</div>
-<div id="fonts">
-<hr />
-<a href="/"
- onclick="setActiveStyleSheet('serif')"
- onkeypress = "setActiveStyleSheet('serif')"
- accesskey="p" id="serif">Serif</a> &#xb7;
-<a href="/"
- onclick="setActiveStyleSheet('sans')"
- onkeypress = "setActiveStyleSheet('sans')"
- accesskey="p" id="sans">Sans-Serif</a>
-<hr />
</div>
</div>
-
-
-<script type='text/javascript'>
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-<script type='text/javascript'>
-var pageTracker = _gat._getTracker("UA-3688366-1");
-pageTracker._initData();
-pageTracker._trackPageview();
-</script>
</body>
</html>
View
50 content/template/post.xhtml
@@ -1,58 +1,28 @@
<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<head profile="http://gmpg.org/xfn/11 http://www.w3.org/2006/03/hcard">
+<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<link rel='stylesheet' type='text/css' media='screen' title='sans' href='/sans.css' />
-<link rel='alternate stylesheet' type='text/css' media='screen' title='serif' href='/serif.css' />
-<script type='text/javascript' src='/site.js'></script>
-<link rel="openid.server" href="http://www.myopenid.com/server" />
-<link rel="openid.delegate" href="http://hugoduncan.myopenid.com/" />
-<link rel="meta" type="application/rdf+xml" title="FOAF" href="foaf.rdf" />
-<meta name="keywords" content="boost,c++,cavitation,propeller,artificial intelligence,sematic web,lisp,common lisp"/>
-<meta name="description" content="Home page for Hugo Duncan, with current projects"/>
-<title>Hugo Duncan : </title>
+<link rel='stylesheet' type='text/css' media='screen' title='sans' href='../../style.css' />
+<title>cl-blog-generator : </title>
</head>
<body>
-<div id='banner'><h1><span id='post-title'></span></h1><div id='search'><form action="http://www.google.com/search"><div>Search <input size="15" name="as_q" /><input type="hidden" name="hl" value="en" /><input type="hidden" name="ie" value="UTF-8" /><input type="hidden" name="btnG" value="Google+Search" /><input type="hidden" name="as_qdr" value="all" /><input type="hidden" name="as_occt" value="any" /><input type="hidden" name="as_dt" value="i" /><input type="hidden" name="as_sitesearch" value="hugoduncan.org" /></div></form></div></div>
+<div id='container'>
+<div id='banner'><h1><span id='post-title'></span></h1></div>
<div id='centercontent'>
<div id='post'/>
-<hr />
-<div id='footer'><div id='post-when'></div><div id='post-updated'></div>
-<p><a href='/' onclick="setActiveStyleSheet('serif')" onkeypress="setActiveStyleSheet('serif')" accesskey='p'>Serif</a> / <a href='/' onclick="setActiveStyleSheet('sans')" onkeypress="setActiveStyleSheet('sans')" accesskey='p'>Sans-Serif</a></p>
-</div>
</div>
<div id='rightcontent'>
<div class='oo'><a id='to-home' href='/'><span id='home'>home</span></a></div>
- <a rel="me" href="about.xhtml">author</a> &#xb7;
- <a rel="me" href="http://www.yellowfin.com">Yellowfin</a>
+ <a rel="me" href="">source</a>
+ <a rel="me" href="http://hugoduncan.org">Hugo Duncan</a>
<div class="vcard">
<a class="fn url" href="http://hugoduncan.org/">Hugo Duncan</a>
- <div><a class="email" href="mailto:tabcdef@hugoduncan.org"><span class="type">pref</span><span>erred email</span></a></div>
+ <div><a class="email" href="mailto:blogen@hugoduncan.org">
+ <span class="type">pref</span><span>erred email</span>
+ </a></div>
</div>
-<div id="fonts">
-<hr />
-<a href="/"
- onclick="setActiveStyleSheet('serif'); return false;"
- onkeypress = "setActiveStyleSheet('serif'); return false;"
- accesskey="p" id="serif">Serif</a> &#xb7;
-<a href="/"
- onclick="setActiveStyleSheet('sans'); return false;"
- onkeypress = "setActiveStyleSheet('sans'); return false;"
- accesskey="p" id="sans">Sans-Serif</a>
-<hr />
</div>
</div>
-
-
-<script type='text/javascript'>
-var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
-document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-<script type='text/javascript'>
-var pageTracker = _gat._getTracker("UA-3688366-1");
-pageTracker._initData();
-pageTracker._trackPageview();
-</script>
</body>
</html>
View
2  src/config.lisp
@@ -6,7 +6,7 @@
(eval-when (:compile-toplevel :load-toplevel :execute)
(defparameter *development-environment*
'((:blog-db-spec . (:postmodern (:postgresql "127.0.0.1" "blog_dev" "duncan" "")))
- (:blog-domain . "hugoduncan.org")
+ (:blog-domain . "localhost")
(:blog-root-path . "/blog/") ;; should end in /
(:site-path . #p"/Users/duncan/projects/blog/content/site/")
(:published-path . #p"/Users/duncan/projects/blog/content/published/")
View
12 test/drafts/fith.post
@@ -0,0 +1,12 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+<html xmlns="http://hugoduncan.org/xmlns/post">
+<head>
+ <title>My Fith Blog Post</title>
+ <when year="2009" month="02" day="25"/>
+ <tag>blog</tag>
+ <tag>lisp</tag>
+</head>
+<body>
+<p>My fith post, when identical to third post.</p>
+</body>
+</html>
View
12 test/drafts/sixth.post
@@ -0,0 +1,12 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+<html xmlns="http://hugoduncan.org/xmlns/post">
+<head>
+ <title>My Sixth Blog Post</title>
+ <when year="2009" month="02" day="25"/>
+ <tag>blog</tag>
+ <tag>lisp</tag>
+</head>
+<body>
+<p>My sixth post, when identical to third post.</p>
+</body>
+</html>
Please sign in to comment.
Something went wrong with that request. Please try again.