1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 2015 David Thompson
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License". -->
<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Introduction (Haunt Reference Manual)</title>
<meta name="description" content="Introduction (Haunt Reference Manual)">
<meta name="keywords" content="Introduction (Haunt Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="index.html#Top" rel="up" title="Top">
<link href="Installation.html#Installation" rel="next" title="Installation">
<link href="index.html#Top" rel="prev" title="Top">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en">
<a name="Introduction"></a>
<div class="header">
<p>
Next: <a href="Installation.html#Installation" accesskey="n" rel="next">Installation</a>, Previous: <a href="index.html#Top" accesskey="p" rel="prev">Top</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Introduction-1"></a>
<h2 class="chapter">1 Introduction</h2>
<p>Haunt is a hackable static site generator written in Guile Scheme. A
static site generator assists an author with generating the HTML pages
that they publish on the web. Unlike “content management systems”
such as Wordpress or Drupal, static site generators are not dynamic
web applications (complete with a relational database) that build
pages on-the-fly. Instead, web pages are built in advance, on the
author’s computer, and copied to a web server when it is time to
publish changes. The consequence of this design is that the web
server no longer needs to run a complex, potentially insecure web
application that connects to a database to retrieve data. Static
files can be served easily by any generic web server. Since there is
no web application or database server to deal with, static websites
are easier to maintain, more secure, and resistant to high web traffic
(“slashdotting.”) Furthermore, the entire website is stored in
plain text, which allows the files to be version-controlled rather
than kept in a relational database with no concept of history that
needs to be backed up regularly.
</p>
<p>At the time that Haunt was conceived, there existed literally hundreds
of other static site generators. Why add another one? Haunt
differentiates itself from most other static site generators in that
it aspires to the Emacs philosophy of “practical software freedom.”
Not only is the source code available under a Free Software license,
as most static site generators are, it is designed to be easily hacked
and extended without altering the core source code. Haunt
purposefully blurs the line between document and program, author and
programmer, by embracing the notion of data as code. A Haunt-based
website is not simply data, but a computer program. This design
strategy encourages authors to automate repetitive tasks and empowers
them to extend the software with their own ideas.
</p>
<p>To make such a system work well, a general-purpose, extensible
programming language is needed. A traditional configuration file
format simply will not do. The programming language that we feel is
best suited to this task is Scheme, a clean and elegant dialect of
Lisp. We believe that by giving authors the full expressive power of
Scheme, they will be able to produce better websites and make better
use of their time than with less programmable systems and less capable
programming languages. Authors should feel empowered to hack the
system to make it do what they want rather than what some programmer
decided they should want. And perhaps most importantly, building
websites with Haunt should be <em>fun</em>.
</p>
<p>Websites written in Haunt are described as purely functional programs
that accept “posts”, text documents containing arbitrary metadata,
as input and transform them into complete HTML pages using Scheme
procedures. Haunt has no opinion about what markup language authors
should use to write their posts and will happily work with any format
for which a “reader” procedure exists. Likewise, Haunt also has no
opinion about how authors should structure their sites, but has sane
defaults. Currently, there exist helpful “builder” procedures that
do common tasks such as generating a blog or Atom feed. While the
built-in features may be enough for some, they surely will not be
enough for all. Haunt’s Scheme API empowers authors to easily tweak
existing components, write replacements, or add entirely new features
that do things no else has thought to do yet.
</p>
<p>Happy haunting!
</p>
<hr>
<div class="header">
<p>
Next: <a href="Installation.html#Installation" accesskey="n" rel="next">Installation</a>, Previous: <a href="index.html#Top" accesskey="p" rel="prev">Top</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|