Recent changes to this wiki:

propellor website
diff --git a/code/propellor.mdwn b/code/propellor.mdwn
index 85b2ae5..4e8fd36 100644
--- a/code/propellor.mdwn
+++ b/code/propellor.mdwn
@@ -1,4 +1,4 @@
 property-based host configuration management in haskell
 
+* [propellor's website](https://propellor.branchable.com/)
 * [[Read my blog post about it|/blog/entry/propellor]]
-* [clone its git repository](http://git.kitenet.net/?p=propellor.git;a=summary)

sytax changes
diff --git a/blog/entry/propellor-driven_DNS_and_backups.mdwn b/blog/entry/propellor-driven_DNS_and_backups.mdwn
index 9e2f3ea..a1e0184 100644
--- a/blog/entry/propellor-driven_DNS_and_backups.mdwn
+++ b/blog/entry/propellor-driven_DNS_and_backups.mdwn
@@ -4,13 +4,13 @@ servers and I just had it deploy mine. Including generating DNS zone files.
 Configuration is dead simple, as far as DNS goes:
 
 [[!format haskell """
+		& alias "ns1.example.com"
 		& Dns.secondary hosts "joeyh.name"
                 & Dns.primary hosts "example.com"
-                        ( Dns.mkSOA "ns1.example.com" 100
-                                [ NS (AbsDomain "ns1.example.com")
-                                , NS (AbsDomain "ns2.example.com")
-                                ]
-                        ) []
+                        (Dns.mkSOA "ns1.example.com" 100)
+                        [ (RootDomain, NS $ AbsDomain "ns1.example.com")
+			, (RootDomain, NS $ AbsDomain "ns2.example.com")
+                        ]
 """]]
 
 The awesome thing is that propellor fills in all the other information
@@ -26,6 +26,9 @@ in the zone file by looking at the properties of the hosts it knows about.
 		& alias "example.museum"
 		& Docker.docked hosts "webserver"
 			`requres` backedup "/var/www"
+		
+		& alias "ns2.example.com"
+		& Dns.secondary hosts "example.com"
 """]]
 
 When it sees this host, Propellor adds its IP addresses to the example.com

blog update
diff --git a/blog/entry/propellor-driven_DNS_and_backups.mdwn b/blog/entry/propellor-driven_DNS_and_backups.mdwn
new file mode 100644
index 0000000..9e2f3ea
--- /dev/null
+++ b/blog/entry/propellor-driven_DNS_and_backups.mdwn
@@ -0,0 +1,101 @@
+Took a while to get here, but [[code/Propellor]] 0.4.0 can deploy DNS
+servers and I just had it deploy mine. Including generating DNS zone files.
+
+Configuration is dead simple, as far as DNS goes:
+
+[[!format haskell """
+		& Dns.secondary hosts "joeyh.name"
+                & Dns.primary hosts "example.com"
+                        ( Dns.mkSOA "ns1.example.com" 100
+                                [ NS (AbsDomain "ns1.example.com")
+                                , NS (AbsDomain "ns2.example.com")
+                                ]
+                        ) []
+"""]]
+
+The awesome thing is that propellor fills in all the other information
+in the zone file by looking at the properties of the hosts it knows about.
+
+[[!format haskell """
+	, host "blue.example.com"
+		& ipv4 "192.168.1.1"
+		& ipv6 "fe80::26fd:52ff:feea:2294"
+
+		& alias "example.com"
+		& alias "www.example.com"
+		& alias "example.museum"
+		& Docker.docked hosts "webserver"
+			`requres` backedup "/var/www"
+"""]]
+
+When it sees this host, Propellor adds its IP addresses to the example.com
+DNS zone file, for both its main hostname ("blue.example.com"), and also its
+relevant aliases. (The .museum alias would go into a different zone file.)
+
+Multiple hosts can define the same alias, and then you automaticlly get
+round-robin DNS.
+
+The web server part of of the blue.example.com config can be cut and
+pasted to another host in order to move its web server to the other host,
+including updating the DNS. That's really all there is to is, just cut,
+paste, and commit!
+
+I'm quite happy with how that worked out. And curious if Puppet etc
+have anything similar.
+
+----
+
+One tricky part of this was how to ensure that the serial number automtically
+updates when changes are made. The way this is handled is Propellor starts
+with a base serial number (100 in the example above), and then it adds to it
+the number of commits in its git repository. The zone file is only updated
+when something in it besides the serial number needs to change. 
+
+The result is nice small serial numbers that don't risk overflowing the
+(so 90's) 32 bit limit, and will be consistent even if the configuration
+had Propellor setting up multiple independent master DNS servers for the
+same domain.
+
+----
+
+Another recent feature in Propellor is that it can use Obnam
+to back up a directory. With the awesome feature that if
+the backed up directory is empty/missing,
+Propellor will automcatically *restore* it from the backup.
+
+Here's how the `backedup` property used in the example above
+might be implemented:
+
+[[!format haskell """
+backedup :: FilePath -> Property
+backedup dir = Obnam.backup dir daily
+	[ "--repository=sftp://rsync.example.com/~/webserver.obnam"
+	] Obnam.OnlyClient
+	`requires` Ssh.keyImported SshRsa "root"
+	`requires` Ssh.knownHost hosts "rsync.example.com" "root"
+	`requires` Gpg.keyImported "1B169BE1" "root"
+"""]]
+
+Notice that the `Ssh.knownHost` makes root trust the ssh host key
+belonging to rsync.example.com. So Propellor needs to be told what that
+host key is, like so:
+
+[[!format haskell """
+	, host "rsync.example.com"
+		& ipv4 "192.168.1.4"
+		& sshPubKey "ssh-rsa blahblahblah"
+"""]]
+
+Which of course ties back into the DNS and gets this hostname set in it.
+But also, the ssh public key is available for this host and visible to the
+DNS zone file generator, and that could also be set in the DNS, in a SSHFP
+record. I haven't gotten around to implementing that, but hope at some
+point to make Propellor support DNSSEC, and then this will all combine even
+more nicely.
+
+----
+
+By the way, Propellor is now up to 3 thousand lines of code
+(not including Utility library). In 20 days, as a 10% time side project.
+
+[[!meta title="propellor-driven DNS and backups"]]

foo
diff --git a/blog/entry/propellor_introspection_for_DNS.mdwn b/blog/entry/propellor_introspection_for_DNS.mdwn
index 1f7ad9e..a6077a6 100644
--- a/blog/entry/propellor_introspection_for_DNS.mdwn
+++ b/blog/entry/propellor_introspection_for_DNS.mdwn
@@ -63,7 +63,7 @@ and propellor will provision them, and update the zone file appropriately.
 
 Also, Chris Webber had suggested that Propellor be able to separate values
 from properties, so that eg, a web wizard could configure the values easily.
-I think this gets it of the way there. All that's left to do is two easy
+I think this gets it much of the way there. All that's left to do is two easy
 functions:
 
 [[!format haskell """

wording
diff --git a/blog/entry/propellor_introspection_for_DNS.mdwn b/blog/entry/propellor_introspection_for_DNS.mdwn
index 9faa61f..1f7ad9e 100644
--- a/blog/entry/propellor_introspection_for_DNS.mdwn
+++ b/blog/entry/propellor_introspection_for_DNS.mdwn
@@ -78,18 +78,18 @@ here's a containerized webserver that publishes a directory from
 the external host, as configured by JSON that it exports:
 
 [[!format haskell """
-	demo :: Host
-	demo = Docker.container "webserver" "joeyh/debian-unstable"
-		& Docker.publish "80:80"
-		& dir_to_publish "/home/mywebsite" -- dummy default
-		& Docker.volume (getAttr dir_to_publish ++":/var/www")
-		& Apt.serviceInstalledRunning "apache2"
-	
-	main = do
-		json <- readJSON "my.json"
-		let demo' = overrideAttrsFromJSON demo
-		writeJSON "my.json" (exportJSONAttrs demo')
-		defaultMain [demo']
+demo :: Host
+demo = Docker.container "webserver" "joeyh/debian-unstable"
+	& Docker.publish "80:80"
+	& dir_to_publish "/home/mywebsite" -- dummy default
+	& Docker.volume (getAttr dir_to_publish ++":/var/www")
+	& Apt.serviceInstalledRunning "apache2"
+
+main = do
+	json <- readJSON "my.json"
+	let demo' = overrideAttrsFromJSON demo
+	writeJSON "my.json" (exportJSONAttrs demo')
+	defaultMain [demo']
 """]]
 
 [[!meta title="propellor introspection for DNS"]]

wording
diff --git a/blog/entry/propellor_introspection_for_DNS.mdwn b/blog/entry/propellor_introspection_for_DNS.mdwn
index 09fcccb..9faa61f 100644
--- a/blog/entry/propellor_introspection_for_DNS.mdwn
+++ b/blog/entry/propellor_introspection_for_DNS.mdwn
@@ -79,16 +79,17 @@ the external host, as configured by JSON that it exports:
 
 [[!format haskell """
 	demo :: Host
-	demo = overrideAttrsFromJSON $
-		Docker.container "webserver" "joeyh/debian-unstable"
-			& Docker.publish "80:80"
-			& dir_to_publish "/home/mywebsite" -- dummy default
-			& Docker.volume (getAttr dir_to_publish ++":/var/www")
-			& Apt.serviceInstalledRunning "apache2"
+	demo = Docker.container "webserver" "joeyh/debian-unstable"
+		& Docker.publish "80:80"
+		& dir_to_publish "/home/mywebsite" -- dummy default
+		& Docker.volume (getAttr dir_to_publish ++":/var/www")
+		& Apt.serviceInstalledRunning "apache2"
 	
 	main = do
-		exportJSON "my.json" (exportJSONAttrs demo)
-		defaultMain [demo]
+		json <- readJSON "my.json"
+		let demo' = overrideAttrsFromJSON demo
+		writeJSON "my.json" (exportJSONAttrs demo')
+		defaultMain [demo']
 """]]
 
 [[!meta title="propellor introspection for DNS"]]

wording
diff --git a/blog/entry/propellor_introspection_for_DNS.mdwn b/blog/entry/propellor_introspection_for_DNS.mdwn
index 7982b49..09fcccb 100644
--- a/blog/entry/propellor_introspection_for_DNS.mdwn
+++ b/blog/entry/propellor_introspection_for_DNS.mdwn
@@ -47,7 +47,7 @@ of `hosts`! Tying the knot like this is a fun haskell laziness trick. :)
 Now I just need to write a little function to look over the hosts
 and generate a zone file from their hostname, cname, and address attributes:
 
-[[!format haselll """
+[[!format haskell """
 extractZoneFile :: Domain -> [Host] -> ZoneFile
 extractZoneFile = gen . map hostAttr
   where gen = -- TODO

wording
diff --git a/blog/entry/propellor_introspection_for_DNS.mdwn b/blog/entry/propellor_introspection_for_DNS.mdwn
index 0da523c..7982b49 100644
--- a/blog/entry/propellor_introspection_for_DNS.mdwn
+++ b/blog/entry/propellor_introspection_for_DNS.mdwn
@@ -1,6 +1,6 @@
 In just released Propellor 0.3.0, I've improved improved
 [[code/Propellor]]'s config file DSL significantly. Now properties can
-set attributes of a host, that can be looked up by its properties,
+set attributes of a host, that can be looked up by its other properties,
 using a Reader monad.
 
 This saves needing to repeat yourself:

blog update
diff --git a/blog/entry/propellor_introspection_for_DNS.mdwn b/blog/entry/propellor_introspection_for_DNS.mdwn
new file mode 100644
index 0000000..0da523c
--- /dev/null
+++ b/blog/entry/propellor_introspection_for_DNS.mdwn
@@ -0,0 +1,94 @@
+In just released Propellor 0.3.0, I've improved improved
+[[code/Propellor]]'s config file DSL significantly. Now properties can
+set attributes of a host, that can be looked up by its properties,
+using a Reader monad.
+
+This saves needing to repeat yourself:
+
+[[!format haskell """
+hosts = [ host "orca.kitenet.net"
+		& stdSourcesList Unstable
+		& Hostname.sane -- uses hostname from above
+"""]]
+
+And it simplifies docker setup, with no longer a need to differentiate between
+properties that configure docker vs properties of the container:
+
+[[!format haskell """
+	-- A generic webserver in a Docker container.
+	, Docker.container "webserver" "joeyh/debian-unstable"
+		& Docker.publish "80:80"
+		& Docker.volume "/var/www:/var/www"
+		& Apt.serviceInstalledRunning "apache2"
+"""]]
+
+But the really useful thing is, it allows automating DNS zone file
+creation, using attributes of hosts that are set and used alongside
+their other properties:
+
+[[!format haskell """
+hosts =
+	[ host "clam.kitenet.net"
+		& ipv4 "10.1.1.1"
+
+		& cname "openid.kitenet.net"
+		& Docker.docked hosts "openid-provider"
+
+		& cname "ancient.kitenet.net"
+		& Docker.docked hosts "ancient-kitenet"
+	, host "diatom.kitenet.net"
+		& Dns.primary "kitenet.net" hosts
+	]
+"""]]
+
+Notice that `hosts` is passed into `Dns.primary`, inside the definition
+of `hosts`! Tying the knot like this is a fun haskell laziness trick. :)
+
+Now I just need to write a little function to look over the hosts
+and generate a zone file from their hostname, cname, and address attributes:
+
+[[!format haselll """
+extractZoneFile :: Domain -> [Host] -> ZoneFile
+extractZoneFile = gen . map hostAttr
+  where gen = -- TODO
+"""]]
+
+The eventual plan is that the `cname` property won't be defined as a
+property of the host, but of the container running inside it.
+Then I'll be able to cut-n-paste move docker containers between hosts,
+or duplicate the same container onto several hosts to deal with load,
+and propellor will provision them, and update the zone file appropriately.
+
+----
+
+Also, Chris Webber had suggested that Propellor be able to separate values
+from properties, so that eg, a web wizard could configure the values easily.
+I think this gets it of the way there. All that's left to do is two easy
+functions:
+
+[[!format haskell """
+overrideAttrsFromJSON :: Host -> JSON -> Host
+
+exportJSONAttrs :: Host -> JSON
+"""]]
+
+With these, propellor's configuration could
+be adjusted at run time using JSON from a file or other source. For example,
+here's a containerized webserver that publishes a directory from 
+the external host, as configured by JSON that it exports:
+
+[[!format haskell """
+	demo :: Host
+	demo = overrideAttrsFromJSON $
+		Docker.container "webserver" "joeyh/debian-unstable"
+			& Docker.publish "80:80"
+			& dir_to_publish "/home/mywebsite" -- dummy default
+			& Docker.volume (getAttr dir_to_publish ++":/var/www")
+			& Apt.serviceInstalledRunning "apache2"
+	
+	main = do
+		exportJSON "my.json" (exportJSONAttrs demo)
+		defaultMain [demo]
+"""]]
+
+[[!meta title="propellor introspection for DNS"]]

wayback
diff --git a/blog/entry/kite.mdwn b/blog/entry/kite.mdwn
index b95df32..e777d9b 100644
--- a/blog/entry/kite.mdwn
+++ b/blog/entry/kite.mdwn
@@ -4,11 +4,13 @@ My server, Kite, is finishing its 20th year online.
 
 It started as kite.resnet.cornell.edu, a 486 under the desk in my dorm
 room. Early on, it bounced around the DNS -- kite.ithaca.ny.us,
-kite.ml.org, kite.preferred.com -- before landing on kite.kitenet.net. The
-hardware has changed too, from a succession of desktop machines, it
-eventually turned into a 2u rack-mount server in the CCCP co-op. And then
-it went virtual, and international, spending a brief time in Amsterdam,
-before relocating to England and the [kvm-hosting co-op](http://kvm-hosting.org/). 
+[kite.ml.org](http://web.archive.org/web/19961222095605/http://kite.ml.org/),
+[kite.preferred.com](http://web.archive.org/web/19970208005238/http://kite.preferred.com/)
+-- before landing on kite.kitenet.net. The hardware has
+changed too, from a succession of desktop machines, it eventually turned
+into a 2u rack-mount server in the CCCP co-op. And then it went virtual,
+and international, spending a brief time in Amsterdam, before relocating to
+England and the [kvm-hosting co-op](http://kvm-hosting.org/). 
 
 Through all this change, and no few reinstalls from scratch, it's had a
 single distinct personality. This is a multi-user unix system, of the old

fo
diff --git a/blog/entry/kite.mdwn b/blog/entry/kite.mdwn
index b91a7fa..b95df32 100644
--- a/blog/entry/kite.mdwn
+++ b/blog/entry/kite.mdwn
@@ -49,13 +49,14 @@ virtual abstract machine in a unknown computer in anther country.
 
 Now it seems that what will happen to Kite is that most of the important
 parts of it will split off into a constellation of specialized servers. The
-website, including the user sites, has mostly moved to branchable.com. The
-DNS server, git server and other crucial stuff is moving to various VPS
-instances and containers. (The exhibit above is just one more automatically
-deployed, soulless container..) A large part of Kite has always been about me
-playing with bleeding-edge stuff and installing random new toys; that has
-moved to a throwaway personal server at cloudatcost.com which might be gone
-tomorrow (or might keep running for free for years).
+website, including the user sites, has mostly moved to
+[branchable.com](https://www.branchable.com/). The DNS server, git server
+and other crucial stuff is moving to various VPS instances and containers.
+(The exhibit above is just one more automatically deployed, soulless
+container..) A large part of Kite has always been about me playing with
+bleeding-edge stuff and installing random new toys; that has moved to a
+throwaway personal server at cloudatcost.com which might be gone tomorrow
+(or might keep running for free for years).
 
 What it seems will be left is a shell box, with IMAP access to a mail
 server, and a web server for legacy `/~user/` sites, and a few tools that

fo
diff --git a/blog/entry/kite.mdwn b/blog/entry/kite.mdwn
index 2fb3a5a..b91a7fa 100644
--- a/blog/entry/kite.mdwn
+++ b/blog/entry/kite.mdwn
@@ -4,7 +4,7 @@ My server, Kite, is finishing its 20th year online.
 
 It started as kite.resnet.cornell.edu, a 486 under the desk in my dorm
 room. Early on, it bounced around the DNS -- kite.ithaca.ny.us,
-kite.ml.org, kite.preferred.com -- before landing on kitenet.net. The
+kite.ml.org, kite.preferred.com -- before landing on kite.kitenet.net. The
 hardware has changed too, from a succession of desktop machines, it
 eventually turned into a 2u rack-mount server in the CCCP co-op. And then
 it went virtual, and international, spending a brief time in Amsterdam,

blog update
diff --git a/blog/entry/kite.mdwn b/blog/entry/kite.mdwn
new file mode 100644
index 0000000..2fb3a5a
--- /dev/null
+++ b/blog/entry/kite.mdwn
@@ -0,0 +1,72 @@
+[[!meta title="Kite: a server's tale"]]
+
+My server, Kite, is finishing its 20th year online.
+
+It started as kite.resnet.cornell.edu, a 486 under the desk in my dorm
+room. Early on, it bounced around the DNS -- kite.ithaca.ny.us,
+kite.ml.org, kite.preferred.com -- before landing on kitenet.net. The
+hardware has changed too, from a succession of desktop machines, it
+eventually turned into a 2u rack-mount server in the CCCP co-op. And then
+it went virtual, and international, spending a brief time in Amsterdam,
+before relocating to England and the [kvm-hosting co-op](http://kvm-hosting.org/). 
+
+Through all this change, and no few reinstalls from scratch, it's had a
+single distinct personality. This is a multi-user unix system, of the old
+school, carefully (and not-so-carefully) configured and administered to
+perform a grab-bag of functions. Whatever the users need.
+
+I read the [olduse.net](http://olduse.net/) `hacknews` newsgroup, and I
+see, in their descriptions of their server in 1984, the prototype of Kite
+and all its ilk.
+
+It's consistently had a small group of users, a small subset of my family
+and friends. Not quite big enough to really turn into a community, and we
+`wall` and `talk` less than we once did.
+
+-----
+
+# Exhibit: [Kite as it appeared in the 90's](http://ancient.kitenet.net:1994/)
+
+[Intentionally partially broken, being able to read the cgi source code is
+half the fun.]
+
+<img src="http://ancient.kitenet.net:1994/gif/counter.gif"></img>
+
+Kite was an early server on the WWW, and
+[garnered mention](http://ancient.kitenet.net:1994/brag/) in books and
+print articles. Not because it did anything important, but because there
+were few enough interesting web sites that it slightly stood out.
+
+-----
+
+Many times over these 20 years I've wondered what will be the end of Kite's
+story. It seemed like I would either keep running it indefinitely, or
+perhaps lose interest. (Or funding -- it's eaten a *lot* of cash over the
+years, especially before the current days of $5/month VPS hosting.) But I
+failed to anticipate what seems to really be happening to it. Just as I didn't
+fathom, when kite was perched under my desk, that it would one day be some
+virtual abstract machine in a unknown computer in anther country.
+
+Now it seems that what will happen to Kite is that most of the important
+parts of it will split off into a constellation of specialized servers. The
+website, including the user sites, has mostly moved to branchable.com. The
+DNS server, git server and other crucial stuff is moving to various VPS
+instances and containers. (The exhibit above is just one more automatically
+deployed, soulless container..) A large part of Kite has always been about me
+playing with bleeding-edge stuff and installing random new toys; that has
+moved to a throwaway personal server at cloudatcost.com which might be gone
+tomorrow (or might keep running for free for years).
+
+What it seems will be left is a shell box, with IMAP access to a mail
+server, and a web server for legacy `/~user/` sites, and a few tools that
+my users need (including that `pine` program some of them are still stuck
+on.)
+
+Will it be worth calling that Kite?
+
+<a href="http://joeyh.name/"><img src="http://ancient.kitenet.net:1994/gif/kite.gif"></a>
+
+------
+
+[ Kite users: This transition needs to be done by December when the current
+host is scheduled to be retired. ]

grep
diff --git a/links/fun.mdwn b/links/fun.mdwn
index 9a4c82c..2ee6691 100644
--- a/links/fun.mdwn
+++ b/links/fun.mdwn
@@ -5,4 +5,5 @@
 [[languages]]  
 [[yurt]]  
 [[caving]]  
+[[grep]]  
 [[meta]]

Comment moderation
diff --git a/blog/entry/idea:_git_push_requests/comment_5_48bdd2410758292362e625b8905e0d1d._comment b/blog/entry/idea:_git_push_requests/comment_5_48bdd2410758292362e625b8905e0d1d._comment
new file mode 100644
index 0000000..6f78f1b
--- /dev/null
+++ b/blog/entry/idea:_git_push_requests/comment_5_48bdd2410758292362e625b8905e0d1d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://rjc.pip.verisignlabs.com.pip.verisignlabs.com/"
+ ip="87.213.42.234"
+ subject="git push request"
+ date="2013-08-30T05:38:49Z"
+ content="""
+suckless.org are already using this idea for updating their [web pages][0].
+
+[0]: http://suckless.org/wiki
+"""]]

typo
diff --git a/links/personal.mdwn b/links/personal.mdwn
index 6ad3beb..1c66d9d 100644
--- a/links/personal.mdwn
+++ b/links/personal.mdwn
@@ -6,4 +6,4 @@
 [[todo]]
 
 Funded in 2014 via  
-[campaign.joey.name](https://campaign.joeyh.name/)!
+[campaign.joeyh.name](https://campaign.joeyh.name/)!

Revert "lists"
This reverts commit 2bd804d3492ab0eaa839de6b0c8c7d80b5fac649.
diff --git a/index.mdwn b/index.mdwn
index 0412c63..59a79a9 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -9,9 +9,6 @@ html {
 	-o-background-size: cover;
 	background-size: cover;
 }
-li {
-        display: block;
-}
 .sidebar {
 	background: none;
 	border: none;
diff --git a/links/fun.mdwn b/links/fun.mdwn
index 6a74211..9a4c82c 100644
--- a/links/fun.mdwn
+++ b/links/fun.mdwn
@@ -1,8 +1,8 @@
 ### fun
 
-* [[Joey_Learns_to_Fly|learnstofly]]
-* [oldusenet](http://olduse.net/)
-* [[languages]]
-* [[yurt]]
-* [[caving]]
-* [[meta]]
+[[Joey_Learns_to_Fly|learnstofly]]  
+[oldusenet](http://olduse.net/)  
+[[languages]]  
+[[yurt]]  
+[[caving]]  
+[[meta]]
diff --git a/links/personal.mdwn b/links/personal.mdwn
index 61103a6..6ad3beb 100644
--- a/links/personal.mdwn
+++ b/links/personal.mdwn
@@ -1,9 +1,9 @@
 ### personal
 
-* [[blog]]
-* [[pics]]
-* [[contact_me|contact]]
-* [[todo]]
+[[blog]]  
+[[pics]]  
+[[contact_me|contact]]  
+[[todo]]
 
 Funded in 2014 via  
 [campaign.joey.name](https://campaign.joeyh.name/)!
diff --git a/links/technical.mdwn b/links/technical.mdwn
index df9ee68..2f568d0 100644
--- a/links/technical.mdwn
+++ b/links/technical.mdwn
@@ -1,9 +1,9 @@
 ### technical
 
-* [[code]]
-* [[vcshome]]
-* [[talks]]
-* [[screencasts]]
-* [[termcasts|termcast]]
-* [[rfcs|rfc]]
-* [[boxen]]
+[[code]]  
+[[vcshome]]  
+[[talks]]  
+[[screencasts]]  
+[[termcasts|termcast]]  
+[[rfcs|rfc]]  
+[[boxen]]  

Merge branch 'master' of ssh://joeyh.branchable.com
lists
diff --git a/links/personal.mdwn b/links/personal.mdwn
index a58bb79..6ad3beb 100644
--- a/links/personal.mdwn
+++ b/links/personal.mdwn
@@ -5,4 +5,5 @@
 [[contact_me|contact]]  
 [[todo]]
 
-Funded in 2014 via [campaign.joey.name](https://campaign.joeyh.name/)!
+Funded in 2014 via  
+[campaign.joey.name](https://campaign.joeyh.name/)!

lists
diff --git a/index.mdwn b/index.mdwn
index 59a79a9..0412c63 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -9,6 +9,9 @@ html {
 	-o-background-size: cover;
 	background-size: cover;
 }
+li {
+        display: block;
+}
 .sidebar {
 	background: none;
 	border: none;
diff --git a/links/fun.mdwn b/links/fun.mdwn
index 9a4c82c..6a74211 100644
--- a/links/fun.mdwn
+++ b/links/fun.mdwn
@@ -1,8 +1,8 @@
 ### fun
 
-[[Joey_Learns_to_Fly|learnstofly]]  
-[oldusenet](http://olduse.net/)  
-[[languages]]  
-[[yurt]]  
-[[caving]]  
-[[meta]]
+* [[Joey_Learns_to_Fly|learnstofly]]
+* [oldusenet](http://olduse.net/)
+* [[languages]]
+* [[yurt]]
+* [[caving]]
+* [[meta]]
diff --git a/links/personal.mdwn b/links/personal.mdwn
index a58bb79..4ec5ec1 100644
--- a/links/personal.mdwn
+++ b/links/personal.mdwn
@@ -1,8 +1,8 @@
 ### personal
 
-[[blog]]  
-[[pics]]  
-[[contact_me|contact]]  
-[[todo]]
+* [[blog]]
+* [[pics]]
+* [[contact_me|contact]]
+* [[todo]]
 
 Funded in 2014 via [campaign.joey.name](https://campaign.joeyh.name/)!
diff --git a/links/technical.mdwn b/links/technical.mdwn
index 2f568d0..df9ee68 100644
--- a/links/technical.mdwn
+++ b/links/technical.mdwn
@@ -1,9 +1,9 @@
 ### technical
 
-[[code]]  
-[[vcshome]]  
-[[talks]]  
-[[screencasts]]  
-[[termcasts|termcast]]  
-[[rfcs|rfc]]  
-[[boxen]]  
+* [[code]]
+* [[vcshome]]
+* [[talks]]
+* [[screencasts]]
+* [[termcasts|termcast]]
+* [[rfcs|rfc]]
+* [[boxen]]

foo
diff --git a/index.mdwn b/index.mdwn
index 4ab36cf..59a79a9 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -23,7 +23,7 @@ input#searchbox {
 	border-bottom: none;
 }
 #pagebody {
-	margin-left: 40%;
+	margin-left: 20%;
 }
 .archivepagedate {
 	font-size: 0.5em;

foo
diff --git a/index.mdwn b/index.mdwn
index 0b58c9e..4ab36cf 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -40,7 +40,7 @@ input#searchbox {
 </table>
 
 [[!sidebar content="""
-### recent [[bloggification]]
+### [[blog|blog]] posts
 [[!inline pages="blog/entry/* and !blog/entry/*/* and !link(blog/foo) and !link(unfinished)"
 show=5 feeds=no archive=yes]]
 """]]

foo
diff --git a/index.mdwn b/index.mdwn
index b2ec7b4..0b58c9e 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -40,7 +40,7 @@ input#searchbox {
 </table>
 
 [[!sidebar content="""
-### Recent [[blog]] posts:
+### recent [[bloggification]]
 [[!inline pages="blog/entry/* and !blog/entry/*/* and !link(blog/foo) and !link(unfinished)"
 show=5 feeds=no archive=yes]]
 """]]

foo
diff --git a/index.mdwn b/index.mdwn
index 22417ca..b2ec7b4 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -40,7 +40,7 @@ input#searchbox {
 </table>
 
 [[!sidebar content="""
-Recent [[blog]] posts:
+### Recent [[blog]] posts:
 [[!inline pages="blog/entry/* and !blog/entry/*/* and !link(blog/foo) and !link(unfinished)"
 show=5 feeds=no archive=yes]]
 """]]

foo
diff --git a/index.mdwn b/index.mdwn
index d809889..22417ca 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -31,31 +31,13 @@ input#searchbox {
 </style>
 </div>
 
-### personal
-
-* [[blog]]
-* [[pics]]
-* [[contact_information|contact]]
-* [[todo]]
-
-### technical
-
-* [[code]]
-* [[vcshome]]
-* [[talks]]
-* [[screencasts]]
-* [[termcasts|termcast]]
-* [[rfcs|rfc]]
-* [[boxen]]
-
-### fun
-
-* [[Joey_Learns_to_Fly|learnstofly]]
-* [oldusenet](http://olduse.net/)
-* [[languages]]
-* [[yurt]]
-* [[caving]]
-* [[meta]]
+<table>
+<tr>
+<td width="33%" valign=top>[[!inline feeds=no template=bare pages=links/personal]]</td>
+<td width="33%" valign=top>[[!inline feeds=no template=bare pages=links/technical]]</td>
+<td width="33%" valign=top>[[!inline feeds=no template=bare pages=links/fun]]</td>
+</tr>
+</table>
 
 [[!sidebar content="""
 Recent [[blog]] posts:
diff --git a/links/fun.mdwn b/links/fun.mdwn
index 6a74211..9a4c82c 100644
--- a/links/fun.mdwn
+++ b/links/fun.mdwn
@@ -1,8 +1,8 @@
 ### fun
 
-* [[Joey_Learns_to_Fly|learnstofly]]
-* [oldusenet](http://olduse.net/)
-* [[languages]]
-* [[yurt]]
-* [[caving]]
-* [[meta]]
+[[Joey_Learns_to_Fly|learnstofly]]  
+[oldusenet](http://olduse.net/)  
+[[languages]]  
+[[yurt]]  
+[[caving]]  
+[[meta]]
diff --git a/links/personal.mdwn b/links/personal.mdwn
index 439c3a8..a58bb79 100644
--- a/links/personal.mdwn
+++ b/links/personal.mdwn
@@ -1,7 +1,8 @@
 ### personal
 
-* [[blog]]
-* [[pics]]
-* [[contact_information|contact]]
-* [[todo]]
+[[blog]]  
+[[pics]]  
+[[contact_me|contact]]  
+[[todo]]
 
+Funded in 2014 via [campaign.joey.name](https://campaign.joeyh.name/)!
diff --git a/links/technical.mdwn b/links/technical.mdwn
index e2bb85a..2f568d0 100644
--- a/links/technical.mdwn
+++ b/links/technical.mdwn
@@ -1,10 +1,9 @@
 ### technical
 
-* [[code]]
-* [[vcshome]]
-* [[talks]]
-* [[screencasts]]
-* [[termcasts|termcast]]
-* [[rfcs|rfc]]
-* [[boxen]]
-
+[[code]]  
+[[vcshome]]  
+[[talks]]  
+[[screencasts]]  
+[[termcasts|termcast]]  
+[[rfcs|rfc]]  
+[[boxen]]  

foo
diff --git a/links/fun.mdwn b/links/fun.mdwn
new file mode 100644
index 0000000..6a74211
--- /dev/null
+++ b/links/fun.mdwn
@@ -0,0 +1,8 @@
+### fun
+
+* [[Joey_Learns_to_Fly|learnstofly]]
+* [oldusenet](http://olduse.net/)
+* [[languages]]
+* [[yurt]]
+* [[caving]]
+* [[meta]]
diff --git a/links/personal.mdwn b/links/personal.mdwn
new file mode 100644
index 0000000..439c3a8
--- /dev/null
+++ b/links/personal.mdwn
@@ -0,0 +1,7 @@
+### personal
+
+* [[blog]]
+* [[pics]]
+* [[contact_information|contact]]
+* [[todo]]
+
diff --git a/links/technical.mdwn b/links/technical.mdwn
new file mode 100644
index 0000000..e2bb85a
--- /dev/null
+++ b/links/technical.mdwn
@@ -0,0 +1,10 @@
+### technical
+
+* [[code]]
+* [[vcshome]]
+* [[talks]]
+* [[screencasts]]
+* [[termcasts|termcast]]
+* [[rfcs|rfc]]
+* [[boxen]]
+
diff --git a/templates/bare.tmpl b/templates/bare.tmpl
new file mode 100644
index 0000000..2d476b7
--- /dev/null
+++ b/templates/bare.tmpl
@@ -0,0 +1 @@
+<TMPL_VAR CONTENT>

foo
diff --git a/index.mdwn b/index.mdwn
index 504310f..d809889 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -61,9 +61,6 @@ input#searchbox {
 Recent [[blog]] posts:
 [[!inline pages="blog/entry/* and !blog/entry/*/* and !link(blog/foo) and !link(unfinished)"
 show=5 feeds=no archive=yes]]
-
-<a href="http://flattr.com/thing/39887/Joey-Hesss-blog" target="_blank">
-<img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a>
 """]]
 
 [[!meta openid="http://kitenet.net/"

foo
diff --git a/index.mdwn b/index.mdwn
index b72d02d..504310f 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -25,6 +25,9 @@ input#searchbox {
 #pagebody {
 	margin-left: 40%;
 }
+.archivepagedate {
+	font-size: 0.5em;
+}
 </style>
 </div>
 

foo
diff --git a/index.mdwn b/index.mdwn
index a495428..b72d02d 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -17,8 +17,6 @@ input#searchbox {
 	display: none;
 }
 #pageinfo {
-	border: none;
-	float: right;
 	display: none;
 }
 .pageheader .actions ul {

foo
diff --git a/index.mdwn b/index.mdwn
index 3f328e0..a495428 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -14,7 +14,7 @@ html {
 	border: none;
 }
 input#searchbox {
-	background: none;
+	display: none;
 }
 #pageinfo {
 	border: none;

foo
diff --git a/joeykite.jpg b/joeykite.jpg
index 728947c..1aae3c7 100644
Binary files a/joeykite.jpg and b/joeykite.jpg differ

foo
diff --git a/joeykite.jpg b/joeykite.jpg
index b4761c3..728947c 100644
Binary files a/joeykite.jpg and b/joeykite.jpg differ

foo
diff --git a/index.mdwn b/index.mdwn
index 301c943..3f328e0 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1,5 +1,6 @@
 [[!meta title="Joey Hess"]]
 
+<div>
 <style>
 html { 
 	background: url(joeykite.jpg) no-repeat center center fixed; 
@@ -27,6 +28,7 @@ input#searchbox {
 	margin-left: 40%;
 }
 </style>
+</div>
 
 ### personal
 

foo
diff --git a/index.mdwn b/index.mdwn
index d094bb2..301c943 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1,6 +1,32 @@
 [[!meta title="Joey Hess"]]
 
-<img src="joeykite.jpg" align=center" alt="picture of Joey Hess"></a>
+<style>
+html { 
+	background: url(joeykite.jpg) no-repeat center center fixed; 
+	-webkit-background-size: cover;
+	-moz-background-size: cover;
+	-o-background-size: cover;
+	background-size: cover;
+}
+.sidebar {
+	background: none;
+	border: none;
+}
+input#searchbox {
+	background: none;
+}
+#pageinfo {
+	border: none;
+	float: right;
+	display: none;
+}
+.pageheader .actions ul {
+	border-bottom: none;
+}
+#pagebody {
+	margin-left: 40%;
+}
+</style>
 
 ### personal
 
diff --git a/joeykite.jpg b/joeykite.jpg
index 9554a46..b4761c3 100644
Binary files a/joeykite.jpg and b/joeykite.jpg differ

foo
diff --git a/index.mdwn b/index.mdwn
index ad3388b..d094bb2 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -1,5 +1,7 @@
 [[!meta title="Joey Hess"]]
 
+<img src="joeykite.jpg" align=center" alt="picture of Joey Hess"></a>
+
 ### personal
 
 * [[blog]]
diff --git a/joeykite.jpg b/joeykite.jpg
new file mode 100644
index 0000000..9554a46
Binary files /dev/null and b/joeykite.jpg differ

show more posts
diff --git a/index.mdwn b/index.mdwn
index 372a79f..ad3388b 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -29,7 +29,7 @@
 [[!sidebar content="""
 Recent [[blog]] posts:
 [[!inline pages="blog/entry/* and !blog/entry/*/* and !link(blog/foo) and !link(unfinished)"
-show=3 feeds=no archive=yes]]
+show=5 feeds=no archive=yes]]
 
 <a href="http://flattr.com/thing/39887/Joey-Hesss-blog" target="_blank">
 <img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a>

openid provider changed
diff --git a/index.mdwn b/index.mdwn
index d2f83fe..372a79f 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -36,4 +36,4 @@ show=3 feeds=no archive=yes]]
 """]]
 
 [[!meta openid="http://kitenet.net/"
-server="http://kitenet.net/simpleid/"]]
+server="http://openid.kitenet.net:8081/simpleid/"]]

Added a comment
diff --git a/blog/entry/propellor/comment_3_fba841b0f6bc0d91d43a29d2f21dd690._comment b/blog/entry/propellor/comment_3_fba841b0f6bc0d91d43a29d2f21dd690._comment
new file mode 100644
index 0000000..2e99a4b
--- /dev/null
+++ b/blog/entry/propellor/comment_3_fba841b0f6bc0d91d43a29d2f21dd690._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.16"
+ subject="comment 3"
+ date="2014-04-05T22:03:46Z"
+ content="""
+> What kind of secret data are you copying to the hosts?
+
+That host's passwords, private keys, etc
+
+> Therefor I prefer a configuration management system that does not require SSH access to the controlled hosts
+
+Propellor can be run in this mode, with a cron job so it pulls changes into its git repository.
+"""]]

Added a comment: Ideas from cfengine
diff --git a/blog/entry/propellor/comment_2_ddfc143d862311efcb314162465f6736._comment b/blog/entry/propellor/comment_2_ddfc143d862311efcb314162465f6736._comment
new file mode 100644
index 0000000..1358c7f
--- /dev/null
+++ b/blog/entry/propellor/comment_2_ddfc143d862311efcb314162465f6736._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/thkoch2001#3d518"
+ nickname="thkoch2001"
+ subject="Ideas from cfengine"
+ date="2014-04-05T21:30:18Z"
+ content="""
+Hi Joey,
+
+I've started to learn cfengine3 recently. Its concepts seem to be very well thought out it's just a shame that the Debian packaging is lacking behind. But your approach is intriguing because you're using Git and Haskell. :-)
+
+In cfengine, everything is based on promises. A promise promises something and it knows, what needs to be done to eventually fulfill the promise. I very much like the approach of focusing on self-healing agents instead of external intervention to manipulate a machine. Therefor I prefer a configuration management system that does not require SSH access to the controlled hosts. In cfengine, an external process can only ever trigger a new evaluation of the promises and nothing else. Every cfengine managed machine runs a cf-serverd that has only two purposes: serve policies to other machines (that's done by git with propellor) and allow the promise evaluation to be triggered.
+
+I'm not sure, whether it's really a good idea to distribute secrets to managed hosts. What kind of secret data are you copying to the hosts?
+
+It's really time to finally learn Haskell...
+"""]]

Added a comment
diff --git a/blog/entry/propellor_type-safe_reversions/comment_3_4375eac18696eb2d53b8d383a9b849d6._comment b/blog/entry/propellor_type-safe_reversions/comment_3_4375eac18696eb2d53b8d383a9b849d6._comment
new file mode 100644
index 0000000..6c703a6
--- /dev/null
+++ b/blog/entry/propellor_type-safe_reversions/comment_3_4375eac18696eb2d53b8d383a9b849d6._comment
@@ -0,0 +1,56 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnqAh0do_lo96xyC7wSV1FkluTXsbhNrTA"
+ nickname="Anthony"
+ subject="comment 3"
+ date="2014-04-03T17:01:54Z"
+ content="""
+hmph, no \"reply to comment\" button? weeeaaak.
+
+So I just deleted a bunch of pseudo-haskell that demonstrated I've no idea what I'm talking about.
+
+Anyway, what you (I) want is:
+
+ - to be able to describe different aspects of the system (what distro, what packages, contents of files, user setup, shell snippets to run, whatever)
+ - to be able to split your configuration into modules
+ - to generate actions from a description that will set the system up according to the description
+
+You could \"type\" some of your descriptions into:
+
+ - distro (Debian unstable)
+ - distro configuration (debconf settings, installed debs, selected alternatives, system user ids...)
+ - package configuration (configure ldap, apache, pam, etc -- some bits might be systemd specific)
+ - local user configuration (populate /home, user account names/ids/shells, ...)
+ - local software (/usr/local/*, /opt/*)
+ - local content (/srv/*, /var/www, ...)
+
+You might want to be able to say \"There could be random stuff in /home\" as part of a description, if you don't want \"make this machine conform to this description\" to delete everything in /home/aj.bak, eg.
+
+I'm not sure how you'd build a good datastructure out of that -- you want to be able to configure lots of packages on a system, but you don't want to be able to define the system as running both Debian and Ubuntu (probably?). It might be okay to only validate that at runtime though?
+
+Actions would then be defined by changes in configuration. So you'd have to have functions to go from a description that says \"Oracle is installed in /opt\", to one that doesn't. Maybe something like:
+
+ matchConfig :: [Description] -> [Description] -> [Actions]
+ createAction :: Description -> [Action]
+ removeAction :: Description -> [Action]
+ configToAction :: Description -> Description -> [Description] -> ([Action], [Description])
+
+ matchConfig [] [] = []
+ matchConfig [] b = createAction (head b) : matchConfig [] (tail b)
+ matchConfig a [] = removeAction (head a) : matchConfig (tail a) []
+ matchConfig a b =
+    actions ++ (matchconfig (tail a) newb) where
+        (actions, newb) = configToAction (head a) (head b) (tail b)
+
+
+ createAction InstallOracle = ...
+ removeAction InstallOracle = ...
+
+ configToAction InstallOracle InstallOracle t = ([], t)
+ configToAction InstallOracle h [] = ([removeAction InstallOracle], [])
+ configToAction InstallOracle h t = 
+     (a, h:tt) where (a,tt) = configToAction InstallOracle (head t) (tail t)
+
+...
+
+I'm not sure I even know where I'm trying to go with this...
+"""]]

Added a comment
diff --git a/blog/entry/propellor_type-safe_reversions/comment_2_8c9116a99516c3be1a1ca9201f6d4d4c._comment b/blog/entry/propellor_type-safe_reversions/comment_2_8c9116a99516c3be1a1ca9201f6d4d4c._comment
new file mode 100644
index 0000000..70da9e0
--- /dev/null
+++ b/blog/entry/propellor_type-safe_reversions/comment_2_8c9116a99516c3be1a1ca9201f6d4d4c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.16"
+ subject="comment 2"
+ date="2014-04-03T15:01:12Z"
+ content="""
+@Anthony, these are good thoughts. I do see the Properties as being a description of a system. But one problem as it stands now is that since a Property includes an IO action which is a closure over any configuration, there is no way to serialize/deserialize Properties. Which is necessary for the kind of thing you are thinking of, and some ideas I have had too.
+
+Concrete suggestions for better types in this area would be appreciated. :)
+"""]]

Added a comment: properties versus actions
diff --git a/blog/entry/propellor_type-safe_reversions/comment_1_a17bcb34c294288e5ee3d74d475d9013._comment b/blog/entry/propellor_type-safe_reversions/comment_1_a17bcb34c294288e5ee3d74d475d9013._comment
new file mode 100644
index 0000000..2fb8d0a
--- /dev/null
+++ b/blog/entry/propellor_type-safe_reversions/comment_1_a17bcb34c294288e5ee3d74d475d9013._comment
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnqAh0do_lo96xyC7wSV1FkluTXsbhNrTA"
+ nickname="Anthony"
+ subject="properties versus actions"
+ date="2014-04-03T06:10:18Z"
+ content="""
+Maybe you could distinguish between properties and actions? A property being a description of the system, and an action being a change you make to a description (which may then make a property true or false).
+
+I think maintaining a \"description of a system\" makes more sense long term. That's what I'd like to have checked into a git repo, for instance.
+
+A list of actions is what you'd need to bring up a system from nothing, or to upgrade/downgrade it (stable -> testing, webserver to not-a-webserver), of course.
+
+You could obviously generate a list of actions to take to convert from one description of a system to another.
+
+Being able to \"apply a description\" to an existing system could be done with those steps if you also had something that would generate a description from a running system. That would be a really cool feature to have for converting to \"propellor\", just run the \"create-description\" thing on your hosts, check them into git, and you can recreate your system just by hitting a button...
+"""]]

Added a comment
diff --git a/blog/entry/adding_docker_support_to_propellor/comment_4_baa5e1392cbdfe705d4cd7a37a5900ed._comment b/blog/entry/adding_docker_support_to_propellor/comment_4_baa5e1392cbdfe705d4cd7a37a5900ed._comment
new file mode 100644
index 0000000..aa7261c
--- /dev/null
+++ b/blog/entry/adding_docker_support_to_propellor/comment_4_baa5e1392cbdfe705d4cd7a37a5900ed._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.16"
+ subject="comment 4"
+ date="2014-04-02T17:14:07Z"
+ content="""
+@Luca, propellor --spin automatically commits and deploys the local git repo. For security, it makes a signed commit, and to ensure that it's pushing a signed commit, it lets an empty commit be made if there are no changes. So, those are me re-running propellor --spin, mostly during debugging a new feature.
+"""]]

update
diff --git a/blog/entry/propellor_type-safe_reversions.mdwn b/blog/entry/propellor_type-safe_reversions.mdwn
index 19c8b83..3fdaa15 100644
--- a/blog/entry/propellor_type-safe_reversions.mdwn
+++ b/blog/entry/propellor_type-safe_reversions.mdwn
@@ -6,9 +6,8 @@ For example, I had a system with a webserver container:
 
 	Docker.docked container hostname "webserver"
 
-I don't want a web server there any more. Rather than need to look
-up that the way to make sure that container isn't running is
-"Docker.unDocked" or something, wouldn't it be nice to be able to say:
+I don't want a web server there any more. Rather than having a separate
+property to stop it, wouldn't it be nice to be able to say:
 
 	revert (Docker.docked container hostname "webserver")
 
@@ -20,7 +19,7 @@ that cannot be reverted.
 For example, `Docker.garbageCollected` is a property that makes sure there
 are no unused docker images wasting disk space. It can't be reverted.
 Nor can my personal `standardSystem Unstable` property, which amoung other
-things *upgrades* the system to unstable..
+things *upgrades* the system to unstable and sets up my home directory..
 
 I found a way to make Propellor statically check if a property can be
 reverted at compile time. So `revert Docker.garbageCollected` will fail

blog update
diff --git a/blog/entry/propellor_type-safe_reversions.mdwn b/blog/entry/propellor_type-safe_reversions.mdwn
new file mode 100644
index 0000000..19c8b83
--- /dev/null
+++ b/blog/entry/propellor_type-safe_reversions.mdwn
@@ -0,0 +1,46 @@
+[[code/Propellor]] ensures that a list of properties about a system
+are satisfied. But requirements change, and so you might want to revert
+a property that had been set up before.
+
+For example, I had a system with a webserver container:
+
+	Docker.docked container hostname "webserver"
+
+I don't want a web server there any more. Rather than need to look
+up that the way to make sure that container isn't running is
+"Docker.unDocked" or something, wouldn't it be nice to be able to say:
+
+	revert (Docker.docked container hostname "webserver")
+
+I've now gotten this working. The really fun part is, some properies
+support reversion, but other properties certianly do not. Maybe the code to
+revert them is not worth writing, or maybe the property does something
+that cannot be reverted.
+
+For example, `Docker.garbageCollected` is a property that makes sure there
+are no unused docker images wasting disk space. It can't be reverted.
+Nor can my personal `standardSystem Unstable` property, which amoung other
+things *upgrades* the system to unstable..
+
+I found a way to make Propellor statically check if a property can be
+reverted at compile time. So `revert Docker.garbageCollected` will fail
+to type check!
+
+The tricky part about implementing this is that the user configures
+Propellor with a list of properties. But now there are two distinct
+types of properties, revertable ones and non-revertable ones.
+And Haskell does not support heterogeneous lists..
+
+My solution to this is a typeclass and some syntactic sugar operators.
+To build a list of properties, with individual elements that might be
+revertable, and others not:
+
+[[!format haskell """
+	props
+		& standardSystem Unstable
+		& revert (Docker.docked container hostname "webserver")
+		& Docker.docked container hostname "amd64-git-annex-builder"
+		& Docker.garbageCollected
+"""]]
+
+[[!meta title="propellor type-safe reversions"]]

Added a comment: Propellor spin
diff --git a/blog/entry/adding_docker_support_to_propellor/comment_3_5121cb1b2b28a54615365828c8382752._comment b/blog/entry/adding_docker_support_to_propellor/comment_3_5121cb1b2b28a54615365828c8382752._comment
new file mode 100644
index 0000000..d762a12
--- /dev/null
+++ b/blog/entry/adding_docker_support_to_propellor/comment_3_5121cb1b2b28a54615365828c8382752._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmJSBuZtee1bBrGeLnNRFaRoxAIpE9ywws"
+ nickname="Luca"
+ subject="Propellor spin"
+ date="2014-04-02T07:42:26Z"
+ content="""
+Hi, what's up with all the \"propellor spin\" empty commits in the git log?
+"""]]

Added a comment
diff --git a/blog/entry/adding_docker_support_to_propellor/comment_2_30a454ce4e78068b0237423d0f86415f._comment b/blog/entry/adding_docker_support_to_propellor/comment_2_30a454ce4e78068b0237423d0f86415f._comment
new file mode 100644
index 0000000..1afe2e2
--- /dev/null
+++ b/blog/entry/adding_docker_support_to_propellor/comment_2_30a454ce4e78068b0237423d0f86415f._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="209.250.56.16"
+ subject="comment 2"
+ date="2014-04-01T19:09:54Z"
+ content="""
+Docker support is now fully working!
+"""]]

Added a comment: Docker clone in Haskell
diff --git a/blog/entry/adding_docker_support_to_propellor/comment_1_55cc9739d58c737b4dc21806994eddee._comment b/blog/entry/adding_docker_support_to_propellor/comment_1_55cc9739d58c737b4dc21806994eddee._comment
new file mode 100644
index 0000000..de09ea5
--- /dev/null
+++ b/blog/entry/adding_docker_support_to_propellor/comment_1_55cc9739d58c737b4dc21806994eddee._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://me.yahoo.com/thkoch2001#3d518"
+ nickname="thkoch2001"
+ subject="Docker clone in Haskell"
+ date="2014-04-01T18:56:22Z"
+ content="""
+Since you love Haskell so much, maybe you're interested to evaluate [scrz](https://github.com/scrz/scrz)? Unfortunately I've still not had the opportunity to learn Haskell myself.
+"""]]

layout
diff --git a/blog/entry/adding_docker_support_to_propellor.mdwn b/blog/entry/adding_docker_support_to_propellor.mdwn
index bd7ae2f..5c353a8 100644
--- a/blog/entry/adding_docker_support_to_propellor.mdwn
+++ b/blog/entry/adding_docker_support_to_propellor.mdwn
@@ -21,9 +21,9 @@ container _ "webserver" = Just $ Docker.containerFromImage "joeyh/debian-unstabl
         [ Docker.publish "80:80"
         , Docker.volume "/var/www:/var/www"
         , Docker.inside
-		[ serviceRunning "apache2"
-                	`requires` Apt.installed ["apache2"]
-		]
+            [ serviceRunning "apache2"
+                `requires` Apt.installed ["apache2"]
+            ]
         ]
 """]]
 

foo
diff --git a/blog/entry/adding_docker_support_to_propellor.mdwn b/blog/entry/adding_docker_support_to_propellor.mdwn
index 3c3e6eb..bd7ae2f 100644
--- a/blog/entry/adding_docker_support_to_propellor.mdwn
+++ b/blog/entry/adding_docker_support_to_propellor.mdwn
@@ -1,6 +1,9 @@
-Propellor development is churning away! Now supports secure handling of
-private data like passwords (only the host that owns it can see it),
-and fully end-to-end secured deployment via gpg signed and verified commits.
+[[code/Propellor]] development is churning away! (And leaving no few puns
+in its wake..)
+
+Now it supports secure handling of private data like passwords (only the
+host that owns it can see it), and fully end-to-end secured deployment via
+gpg signed and verified commits.
 
 And, I've just gotten support for Docker to build. Probably not quite
 work, but it should only be a few bugs away at this point.

blog update
diff --git a/blog/entry/adding_docker_support_to_propellor.mdwn b/blog/entry/adding_docker_support_to_propellor.mdwn
new file mode 100644
index 0000000..3c3e6eb
--- /dev/null
+++ b/blog/entry/adding_docker_support_to_propellor.mdwn
@@ -0,0 +1,68 @@
+Propellor development is churning away! Now supports secure handling of
+private data like passwords (only the host that owns it can see it),
+and fully end-to-end secured deployment via gpg signed and verified commits.
+
+And, I've just gotten support for Docker to build. Probably not quite
+work, but it should only be a few bugs away at this point.
+
+Here's how to deploy a dockerized webserver with propellor:
+
+[[!format haskell """
+host hostname@"clam.kitenet.net" = Just
+	[ Docker.configured
+	, File.dirExists "/var/www"
+	, Docker.hasContainer hostname "webserver" container
+	]
+
+container _ "webserver" = Just $ Docker.containerFromImage "joeyh/debian-unstable"
+        [ Docker.publish "80:80"
+        , Docker.volume "/var/www:/var/www"
+        , Docker.inside
+		[ serviceRunning "apache2"
+                	`requires` Apt.installed ["apache2"]
+		]
+        ]
+"""]]
+
+Docker containers are set up using Properties too, just like regular
+hosts, but their Properties are run inside the container.
+
+That means that, if I change the web server port above, Propellor will
+notice the container config is out of date, and stop the container,
+commit an image based on it, and quickly use that to bring up a new
+container with the new configuration.
+
+If I change the web server to say, lighttpd, Propellor will run inside
+the container, and notice that it needs to install lighttpd to satisfy
+the new property, and so will update the container without needing to take
+it down.
+
+Adding all this behavior took only 253 lines of code, and none of it
+impacts the core of Propellor at all; it's all in
+Propellor.Property.Docker. (Well, I did need another hundred lines
+to write a daemon that runs inside the container and reads commands
+to run over a named pipe... Docker makes running ad-hoc commands inside a
+container a PITA.)
+
+So, I think that this vindicates the approach of making the configuration
+of Propellor be a list of Properties, which can be constructed by
+abitrarily interesting Haskell code. I didn't design Propellor to support
+containers, but it was easy to find a way to express them as shown above.
+
+Compare that with how Puppet supports Docker: <http://docs.docker.io/en/latest/use/puppet/>
+
+<pre>
+docker::run { 'helloworld':
+  image        => 'ubuntu',
+  command      => '/bin/sh -c "while true; do echo hello world; sleep 1; done"',
+  ports        => ['4444', '4555'],
+...
+</pre>
+
+All puppet manages is running the image and a simple static command
+inside it. All the complexities that puppet provides for configuring
+servers cannot easily be brought to bear inside the container, and
+a large reason for that is, I think, that its configuration file is just
+not expressive enough.
+
+[[!meta title="adding docker support to propellor"]]

Added a comment
diff --git a/blog/entry/propellor/comment_1_2014586c3ec07b4bc28437a1daa2d113._comment b/blog/entry/propellor/comment_1_2014586c3ec07b4bc28437a1daa2d113._comment
new file mode 100644
index 0000000..3c98603
--- /dev/null
+++ b/blog/entry/propellor/comment_1_2014586c3ec07b4bc28437a1daa2d113._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmQL54KL0heX7a0hVZudt6RGO444XAiTqU"
+ nickname="Jimmy"
+ subject="comment 1"
+ date="2014-03-31T20:50:27Z"
+ content="""
+heh, took a quick look. seems interesting to use haskell for this.
+"""]]

update
diff --git a/code.mdwn b/code.mdwn
index f88b8d2..20381a1 100644
--- a/code.mdwn
+++ b/code.mdwn
@@ -19,6 +19,7 @@ The stuff that's swapped into my local cache at the moment.
 [[tasksel]]
 [[debmirror]]
 [[github-backup]]
+[[propellor]]
 
 ## Less active projects
 

update
diff --git a/code/propellor.mdwn b/code/propellor.mdwn
new file mode 100644
index 0000000..85b2ae5
--- /dev/null
+++ b/code/propellor.mdwn
@@ -0,0 +1,4 @@
+property-based host configuration management in haskell
+
+* [[Read my blog post about it|/blog/entry/propellor]]
+* [clone its git repository](http://git.kitenet.net/?p=propellor.git;a=summary)

update
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
index 53d2013..159dd2d 100644
--- a/blog/entry/propellor.mdwn
+++ b/blog/entry/propellor.mdwn
@@ -67,7 +67,7 @@ if a property has already been satisfied.
 [[!format haskell """
 installedFor :: UserName -> Property
 installedFor user = check (not <$> hasGitDir user) $
-        IOProperty ("githome " ++ user) (go =<< homedir user)
+        Property ("githome " ++ user) (go =<< homedir user)
 	                `requires` Apt.installed ["git", "myrepos"]
   where
 	go ... -- 12 lines elided

update
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
index c8ef57b..53d2013 100644
--- a/blog/entry/propellor.mdwn
+++ b/blog/entry/propellor.mdwn
@@ -55,7 +55,7 @@ another action if a change needed to be made to satisfy a property.
 
 [[!format haskell """
 set :: HostName -> Property
-set hostname = fileHasContent "/etc/hostname" [hostname]
+set hostname = "/etc/hostname" `File.hasContent` [hostname]
         `onChange` cmdProperty "hostname" [Param hostname]
 """]]
 

Added a comment: Thanks!
diff --git a/blog/entry/Joey_Learns_to_Fly/comment_2_7cf9fa1ee2bdbf4d0f43e78793023abe._comment b/blog/entry/Joey_Learns_to_Fly/comment_2_7cf9fa1ee2bdbf4d0f43e78793023abe._comment
new file mode 100644
index 0000000..89bc4a2
--- /dev/null
+++ b/blog/entry/Joey_Learns_to_Fly/comment_2_7cf9fa1ee2bdbf4d0f43e78793023abe._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkVgvPEPRm6B42nYthCYQgJKuW3hNIGqVY"
+ nickname="Mark"
+ subject="Thanks!"
+ date="2014-03-30T17:38:43Z"
+ content="""
+I saw this short on KET today, March 30, 2014. Enjoying it, I had to google when, where and who created and produced it. Thanks to all who created and brought the story to the screen. What a sweet piece of imagination, common to many and capitulated in story to warm the hearts, minds and spirits of all who have the good fortune to view and experience it! 
+
+Thank you to all involved!
+
+Mark Neff
+"""]]

fo
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
index eac90be..c8ef57b 100644
--- a/blog/entry/propellor.mdwn
+++ b/blog/entry/propellor.mdwn
@@ -83,7 +83,8 @@ Propellor is 564 lines of code, including 25 or so built-in properties like
 the examples above. It took around 4 hours to build. 
 
 I'm pretty sure it was easier to write it than it would have been to look
-into ansible and salt and slaughter in enough detail to pick one, and learn
+into ansible and salt and slaughter (and also liw's human-readable configuration
+language whose name I've forgotten) in enough detail to pick one, and learn
 how its configuration worked, and warp it into something close to how I
 wanted this to work.
 

foo
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
index 63058f1..eac90be 100644
--- a/blog/entry/propellor.mdwn
+++ b/blog/entry/propellor.mdwn
@@ -47,7 +47,7 @@ installed :: [Package] -> Property
 installed ps = check (isInstallable ps) go
   where
         go = runApt $ [Param "-y", Param "install"] ++ map Param ps
-"""]]]
+"""]]
 
 Here's one that ensures the hostname is set to the desired value,
 which shows how to specify content for a file, and also how to run

foo
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
index 7408f3c..63058f1 100644
--- a/blog/entry/propellor.mdwn
+++ b/blog/entry/propellor.mdwn
@@ -28,7 +28,7 @@ main = ensureProperties
 	[ Apt.stdSourcesList Apt.Stable `onChange` Apt.upgrade
 	, Apt.removed ["exim4"] `onChange` Apt.autoRemove
 	, Hostname.set "bridget"
-	, Ssh.uniqueHostKeys
+	, Ssh.uniqueHostKeys
 	, Tor.isBridge
 	]
 """]]

foo
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
index 282a0e7..7408f3c 100644
--- a/blog/entry/propellor.mdwn
+++ b/blog/entry/propellor.mdwn
@@ -11,7 +11,7 @@ along after it. And you may not want to stand too close.
 Disclaimer: I'm not really a sysadmin, except for on the scale of "diffuse
 administration of every Debian machine on planet earth or nearby", and so I
 don't really understand configuration management. (Well, I did write
-debconf, which claims to be the "Debian Configurtion Management system"..
+debconf, which claims to be the "Debian Configuration Management system"..
 But I didn't understand configuration management back then either.)
 
 So, propellor makes some perhaps wacky choices. The least of these

blog update
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
new file mode 100644
index 0000000..282a0e7
--- /dev/null
+++ b/blog/entry/propellor.mdwn
@@ -0,0 +1,94 @@
+Whups, I seem to have built a configuration management system this evening!
+
+Propellor has similar goals to chef or puppet or ansible, but with an approach
+much more like [slaughter](http://www.steve.org.uk/Software/slaughter/).
+Except it's configured by writing Haskell code.
+
+The name is because propellor ensures that a system is configured with the
+desired PROPerties, and also because it kind of pulls system configuration
+along after it. And you may not want to stand too close.
+
+Disclaimer: I'm not really a sysadmin, except for on the scale of "diffuse
+administration of every Debian machine on planet earth or nearby", and so I
+don't really understand configuration management. (Well, I did write
+debconf, which claims to be the "Debian Configurtion Management system"..
+But I didn't understand configuration management back then either.)
+
+So, propellor makes some perhaps wacky choices. The least of these
+is that it's built from [a git repository](http://git.kitenet.net/?p=propellor.git;a=summary)
+that any (theoretical) other users will fork and modify; a cron job can
+re-make it from time to time and pull down configuration changes, or
+*something* can be run to push changes.
+
+A really simple configuration for a Tor bridge server 
+using propellor looks something like this:
+
+[[!format haskell """
+main = ensureProperties
+	[ Apt.stdSourcesList Apt.Stable `onChange` Apt.upgrade
+	, Apt.removed ["exim4"] `onChange` Apt.autoRemove
+	, Hostname.set "bridget"
+	, Ssh.uniqueHostKeys
+	, Tor.isBridge
+	]
+"""]]
+
+Since it's just haskell code, it's "easy" to refactor out common
+configurations for classes of servers, etc. Or perhaps integrate
+[reclass](,http://reclass.pantsfullofunix.net/)? I don't know. I'm happy
+with just pure functions and type-safe refactorings of my configs, I
+think.
+
+Properties are also written in Haskell of course. This one ensures that
+all the packages in a list are installed.
+
+[[!format haskell """
+installed :: [Package] -> Property
+installed ps = check (isInstallable ps) go
+  where
+        go = runApt $ [Param "-y", Param "install"] ++ map Param ps
+"""]]]
+
+Here's one that ensures the hostname is set to the desired value,
+which shows how to specify content for a file, and also how to run
+another action if a change needed to be made to satisfy a property.
+
+[[!format haskell """
+set :: HostName -> Property
+set hostname = fileHasContent "/etc/hostname" [hostname]
+        `onChange` cmdProperty "hostname" [Param hostname]
+"""]]
+
+Here's part of a custom one that I use to check out a user's
+home directory from git. Shows how to make a property require
+that some other property is satisfied first, and how to test
+if a property has already been satisfied.
+
+[[!format haskell """
+installedFor :: UserName -> Property
+installedFor user = check (not <$> hasGitDir user) $
+        IOProperty ("githome " ++ user) (go =<< homedir user)
+	                `requires` Apt.installed ["git", "myrepos"]
+  where
+	go ... -- 12 lines elided
+"""]]
+
+I'm about 37% happy with the overall approach to listing properties
+and combining properties into larger properties etc. I think that some
+unifying insight is missing -- perhaps there should be a Property monad?
+But as long as it yields a list of properties, any smarter thing should
+be able to be built on top of this.
+
+Propellor is 564 lines of code, including 25 or so built-in properties like
+the examples above. It took around 4 hours to build. 
+
+I'm pretty sure it was easier to write it than it would have been to look
+into ansible and salt and slaughter in enough detail to pick one, and learn
+how its configuration worked, and warp it into something close to how I
+wanted this to work.
+
+I think that's interesting.. It's partly about NIH and
+I-want-everything-in-Haskell, but it's also about a complicated system
+that is a lot of things to a lot of people -- 
+of the kind I see when I look at ansible -- vs the tools and experience
+to build just the thing you want without the cruft. Nice to have the latter!
diff --git a/boxen/clam.mdwn b/boxen/clam.mdwn
index 4c5f20f..6d41d9c 100644
--- a/boxen/clam.mdwn
+++ b/boxen/clam.mdwn
@@ -1,6 +1,5 @@
 Cloudatcost host with supposed lifetime paid for. Let's see how long it lasts!
 
 This system is untrusted; it is used only for experimentation and services
-using untrusted data that I don't mind losing.
-
-Only service of note currently there is nntp.olduse.net.
+using untrusted data that I don't mind losing. The provider has been known
+to lose data in the past.

foo
diff --git a/boxen/clam.mdwn b/boxen/clam.mdwn
index a9b397b..4c5f20f 100644
--- a/boxen/clam.mdwn
+++ b/boxen/clam.mdwn
@@ -2,3 +2,5 @@ Cloudatcost host with supposed lifetime paid for. Let's see how long it lasts!
 
 This system is untrusted; it is used only for experimentation and services
 using untrusted data that I don't mind losing.
+
+Only service of note currently there is nntp.olduse.net.

orca
diff --git a/boxen.mdwn b/boxen.mdwn
index 737d930..d566600 100644
--- a/boxen.mdwn
+++ b/boxen.mdwn
@@ -38,6 +38,7 @@ Mostly birds.
 * [[box]] {*}
 * [[finch]]
 * [[pell]] {*}
+* orca
 
 ## small machines
 

add news item for debhelper 9.20140228
diff --git a/code/debhelper/news/version_9.20131105.mdwn b/code/debhelper/news/version_9.20131105.mdwn
deleted file mode 100644
index 90b65f0..0000000
--- a/code/debhelper/news/version_9.20131105.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-debhelper 9.20131105 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix (horrible) make output parsing code to work with make 4.0.
-     Closes: #[728800](http://bugs.debian.org/728800) Thanks, Julien Pinon"""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20140228.mdwn b/code/debhelper/news/version_9.20140228.mdwn
new file mode 100644
index 0000000..aa2ba79
--- /dev/null
+++ b/code/debhelper/news/version_9.20140228.mdwn
@@ -0,0 +1,3 @@
+debhelper 9.20140228 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix breakage in no-act mode introduced in last release."""]]
\ No newline at end of file

add news item for moreutils 0.51
diff --git a/code/moreutils/news/version_0.46.mdwn b/code/moreutils/news/version_0.46.mdwn
deleted file mode 100644
index 833817f..0000000
--- a/code/moreutils/news/version_0.46.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-moreutils 0.46 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Typo. Closes: #[649158](http://bugs.debian.org/649158)
-   * combine: Avoid reading files twice, to support data coming from
-     pipes. Closes: #[667960](http://bugs.debian.org/667960) Thanks, Carsten Hey"""]]
\ No newline at end of file
diff --git a/code/moreutils/news/version_0.51.mdwn b/code/moreutils/news/version_0.51.mdwn
new file mode 100644
index 0000000..c733127
--- /dev/null
+++ b/code/moreutils/news/version_0.51.mdwn
@@ -0,0 +1,9 @@
+moreutils 0.51 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix ifdata to build on OS X. Thanks, Peter Eisentraut
+     Closes: #[575294](http://bugs.debian.org/575294)
+   * use docbook-xsl for building man pages. Thanks, Peter Eisentraut
+     for extensive patch set!
+     Closes: #[728831](http://bugs.debian.org/728831)
+   * Fix ifdata, ifne, parallel to build on illumos. Thanks, Gabriele Giacone
+     Closes: #[733736](http://bugs.debian.org/733736)"""]]
\ No newline at end of file

add news item for alien 8.90
diff --git a/code/alien/news/version_8.84.mdwn b/code/alien/news/version_8.84.mdwn
deleted file mode 100644
index 5b27781..0000000
--- a/code/alien/news/version_8.84.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-alien 8.84 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Silence error message when deleting build tree after making an rpm,
-     if rpmbuild has already deleted it. Closes: #[622846](http://bugs.debian.org/622846)
-   * Squash an uninitialized value when creating a deb."""]]
\ No newline at end of file
diff --git a/code/alien/news/version_8.90.mdwn b/code/alien/news/version_8.90.mdwn
new file mode 100644
index 0000000..04f4a5c
--- /dev/null
+++ b/code/alien/news/version_8.90.mdwn
@@ -0,0 +1,6 @@
+alien 8.90 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Add --target=&lt;arch&gt; option for setting architecture. Closes: #[260948](http://bugs.debian.org/260948)
+     (Thanks, Teemu Ikonen)
+   * Add conversion from ppc64le (rpm) to ppc64el (deb).
+   * debhelper v9"""]]
\ No newline at end of file

add news item for debhelper 9.20140227
diff --git a/code/debhelper/news/version_9.20130921.mdwn b/code/debhelper/news/version_9.20130921.mdwn
deleted file mode 100644
index 2646b2e..0000000
--- a/code/debhelper/news/version_9.20130921.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-debhelper 9.20130921 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * dh: Call dh\_installxfonts after dh\_link, so that it will
-     notice fonts installed via symlinks. Closes: #[721264](http://bugs.debian.org/721264)
-   * Fix FTBFS with perl 5.18. Closes: #[722501](http://bugs.debian.org/722501)
-   * dh\_installchangelogs: Add changelog.md to the list of common
-     changelog filenames."""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20140227.mdwn b/code/debhelper/news/version_9.20140227.mdwn
new file mode 100644
index 0000000..4b5431d
--- /dev/null
+++ b/code/debhelper/news/version_9.20140227.mdwn
@@ -0,0 +1,20 @@
+debhelper 9.20140227 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * dh\_compress: Avoid compressing .map files, which may be html
+     usemaps. Closes: #[704443](http://bugs.debian.org/704443)
+   * dh\_installdocs: When doc dirs are symlinked make the dependency
+     versioned per policy. Closes: #[676777](http://bugs.debian.org/676777)
+   * dh\_makeshlibs: Defer propigating dpkg-gensymbols error until
+     all packages have been processed. Closes: #[736640](http://bugs.debian.org/736640)
+   * dh: Reject unknown parameters that are not dashed command-line
+     parameters intended to be passed on to debhelper commands.
+     Closes: #[737635](http://bugs.debian.org/737635)
+   * perl\_build: Use realclean instead of distclean. Closes: #[737662](http://bugs.debian.org/737662)
+   * Initial implementation of support for Build-Profiles fields.
+     Thanks, Daniel Schepler.
+   * dh\_gencontrol: Revert change made in version 4.0.13 that avoided
+     passing -p to dpkg-gencontrol when only operating on one package.
+     There seems to be no benefit to doing that, and it breaks when using
+     Build-Profiles, since while debhelper may know a profile only allows
+     for one package, dpkg-gencontrol may see other packages in the
+     control file."""]]
\ No newline at end of file

Added a comment: Wonder if it would be possible to build aspects of ZigZag using this...
diff --git a/blog/entry/subverting_hierarchy_with_git/comment_2_0759bae9abad454ed21abf0db2b2d164._comment b/blog/entry/subverting_hierarchy_with_git/comment_2_0759bae9abad454ed21abf0db2b2d164._comment
new file mode 100644
index 0000000..be7568e
--- /dev/null
+++ b/blog/entry/subverting_hierarchy_with_git/comment_2_0759bae9abad454ed21abf0db2b2d164._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnrfbItMvn8qr5bB9oUiIxiV_dky3j_eD0"
+ nickname="Benjamin"
+ subject="Wonder if it would be possible to build aspects of ZigZag using this..."
+ date="2014-02-22T12:58:37Z"
+ content="""
+http://xanadu.com/zigzag/
+
+I really need to find some time to play around with git-annex... :-)
+"""]]

Added a comment: tags
diff --git a/blog/entry/subverting_hierarchy_with_git/comment_1_af650a75337be700fc6b1a1b0e90ca8a._comment b/blog/entry/subverting_hierarchy_with_git/comment_1_af650a75337be700fc6b1a1b0e90ca8a._comment
new file mode 100644
index 0000000..7340f4b
--- /dev/null
+++ b/blog/entry/subverting_hierarchy_with_git/comment_1_af650a75337be700fc6b1a1b0e90ca8a._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkuwCYnPO1-leQXKhBLGdJ6G-4O2aUSiQY"
+ nickname="Chris"
+ subject="tags"
+ date="2014-02-21T21:03:26Z"
+ content="""
+That's really interesting. I have been using git annex as a basis for a tag based image store for a few weeks now. The tags are directories, a file has a tag if it is in the corresponding directory. For my uses, this works really well, and allows things such as hierarchical tags. I then just have some scripts that allow me to view the data in useful ways, such as list the tags for a file.
+"""]]

update
diff --git a/blog/entry/subverting_hierarchy_with_git.mdwn b/blog/entry/subverting_hierarchy_with_git.mdwn
new file mode 100644
index 0000000..94b5ee7
--- /dev/null
+++ b/blog/entry/subverting_hierarchy_with_git.mdwn
@@ -0,0 +1,40 @@
+Did you ever want to be able to tag your files, and use the tags to query
+and select the files you want? For many sorts of files we use, this is clearly
+better than being locked into a single hierarchial view of nested directories.
+
+[Semantic file systems](http://en.wikipedia.org/wiki/Semantic_File_System)
+are a way to do things like this. But that's an entire separate filesystem,
+often implemented as a FUSE layer. I have never wanted tagging enough to
+take on that layer of complications.
+
+A week ago I realized that there was a way to do this without using an
+entirely separate filesystem. When we use git, we're used to having
+different views of our files, called branches, that we switch between.
+
+What then, if a git branch were generated from tags and other metadata
+that meet a query, providing a custom view that meet the user's current
+needs and could be incrementally refined.
+
+<video controls src="https://downloads.kitenet.net/videos/git-annex/git-annex_views_demo.ogg" height=480></video>
+
+[Here's a short screencast demoing these views.](http://git-annex.branchable.com/videos/git-annex_views_demo/)  
+And [here's a walkthrough for setting it up](http://git-annex.branchable.com/tips/metadata_driven_views/).
+
+To build this, I needed a nice way to store metadata in git, and since
+git-annex happens to have a very nice way of
+[[using_git_as_a_database|databranches]], I naturally built it on top of
+git-annex. 
+
+This means that the tags and other metadata are automatically synchronized
+between different clones of the repository. Multiple users can be tagging
+and setting other metadata at the same time, and their changes will merge
+in a consistent way.
+
+I have a [long list of things to do](http://git-annex.branchable.com/design/metadata/) to fully integrate
+views into git-annex. However, they're already basically usable, and I'm
+very pleased with how these dymanic views of the contents of a repository
+are working out.
+
+Today's release of git-annex includes views support, so give them a try!
+
+[[!meta title="subverting hierarchy with git"]]

detailed build problem + environment
diff --git a/code/etckeeper/discussion.mdwn b/code/etckeeper/discussion.mdwn
index dbd805a..3222ee6 100644
--- a/code/etckeeper/discussion.mdwn
+++ b/code/etckeeper/discussion.mdwn
@@ -1,10 +1,48 @@
 ---
 I'd like to use etckeeper on Mac OS X, specifically 10.9.1 or above, primarily to get proper file-metadata control in git as per http://goo.gl/4opL4L .  Not for /etc nor pkg-management integration.
 
-I git-cloned the etckeeper source and tried to build on a homebew-based 10.9.1 macos system, with no success.  I can post details if that's helpful, pls advise.  In meantime:  got any suggestions?  Is there any chance of the current code base or branch building and running successfully on macos?
+I git-cloned the etckeeper source and tried to build on a homebew-based 10.9.1 macos system, with no success.  Details below.  Any suggestions?  Is there any chance of the current code base or branch building and running successfully on macos?  If not, can you scope the amount of effort to port it simply to support file-metadata management outside of /etc, and no pkg management?
 
 -Johnny Utahh
 
+ps.  Here's the details:
+
+    mba4mme Feb 07 13:29:42 ~/.../etckeeper$ git remote show origin | grep URL
+      Fetch URL: http://git.kitenet.net/git/etckeeper.git
+      Push  URL: http://git.kitenet.net/git/etckeeper.git
+    mba4mme Feb 07 13:29:50 ~/.../etckeeper$ git rev-parse HEAD
+    214332b020b03e603d84ab3327f1c17509b49c47
+    mba4mme Feb 07 13:29:52 ~/.../etckeeper$ git status
+    On branch master
+    Your branch is up-to-date with 'origin/master'.
+    
+    nothing to commit, working directory clean
+    mba4mme Feb 07 13:30:02 ~/.../etckeeper$ make
+    sed -i~ "s/Version:.*/Version: $(perl -e '$_=<>;print m/\((.*?)\)/'<debian/changelog)/" etckeeper.spec
+    rm -f etckeeper.spec~
+    ./etckeeper-bzr/__init__.py build || echo "** bzr support not built"
+    Traceback (most recent call last):
+      File "./etckeeper-bzr/__init__.py", line 6, in <module>
+        from bzrlib.errors import BzrError
+    ImportError: No module named bzrlib.errors
+    ** bzr support not built
+    mba4mme Feb 07 13:30:07 ~/.../etckeeper$ sw_vers 
+    ProductName:	Mac OS X
+    ProductVersion:	10.9.1
+    BuildVersion:	13B42
+    mba4mme Feb 07 13:30:09 ~/.../etckeeper$ 
+    mba4mme Feb 07 13:31:15 ~/.../etckeeper$ bzr --version | head -1
+    Bazaar (bzr) 2.6.0
+    mba4mme Feb 07 13:31:22 ~/.../etckeeper$ 
+    mba4mme Feb 07 13:31:47 ~/.../etckeeper$ which bzr
+    /usr/local/bin/bzr
+    mba4mme Feb 07 13:31:53 ~/.../etckeeper$ brew list bzr
+    /usr/local/Cellar/bazaar/2.6.0/bin/bzr
+    /usr/local/Cellar/bazaar/2.6.0/libexec/bzrlib/ (979 files)
+    /usr/local/Cellar/bazaar/2.6.0/libexec/bzr
+    /usr/local/Cellar/bazaar/2.6.0/share/man/man1/bzr.1
+    mba4mme Feb 07 13:31:58 ~/.../etckeeper$     
+
 ---
 thanks for etckeeper! it's really useful :)
 

Making better superuser.com reference (the -answer- instead of the question)
diff --git a/code/etckeeper/discussion.mdwn b/code/etckeeper/discussion.mdwn
index b7246a0..dbd805a 100644
--- a/code/etckeeper/discussion.mdwn
+++ b/code/etckeeper/discussion.mdwn
@@ -1,7 +1,7 @@
 ---
-I'd like to use etckeeper on Mac OS X, specifically 10.9.1 or above, primarily to get proper file-metadata control in git as per http://goo.gl/xZYkWX .  Not for /etc or pkg-management integration.
+I'd like to use etckeeper on Mac OS X, specifically 10.9.1 or above, primarily to get proper file-metadata control in git as per http://goo.gl/4opL4L .  Not for /etc nor pkg-management integration.
 
-I git-cloned the etckeeper source and tried to build on a homebew-based 10.9.1 macos system, with no success.  I can post details if that's helpful.  In meantime:  got any suggestions?  Is there any chance of the current code base or branch building and running successfully on macos?
+I git-cloned the etckeeper source and tried to build on a homebew-based 10.9.1 macos system, with no success.  I can post details if that's helpful, pls advise.  In meantime:  got any suggestions?  Is there any chance of the current code base or branch building and running successfully on macos?
 
 -Johnny Utahh
 

adding signature
diff --git a/code/etckeeper/discussion.mdwn b/code/etckeeper/discussion.mdwn
index 498db50..b7246a0 100644
--- a/code/etckeeper/discussion.mdwn
+++ b/code/etckeeper/discussion.mdwn
@@ -3,6 +3,8 @@ I'd like to use etckeeper on Mac OS X, specifically 10.9.1 or above, primarily t
 
 I git-cloned the etckeeper source and tried to build on a homebew-based 10.9.1 macos system, with no success.  I can post details if that's helpful.  In meantime:  got any suggestions?  Is there any chance of the current code base or branch building and running successfully on macos?
 
+-Johnny Utahh
+
 ---
 thanks for etckeeper! it's really useful :)
 

formatting fix... hopefully
diff --git a/code/etckeeper/discussion.mdwn b/code/etckeeper/discussion.mdwn
index d8a7076..498db50 100644
--- a/code/etckeeper/discussion.mdwn
+++ b/code/etckeeper/discussion.mdwn
@@ -2,6 +2,7 @@
 I'd like to use etckeeper on Mac OS X, specifically 10.9.1 or above, primarily to get proper file-metadata control in git as per http://goo.gl/xZYkWX .  Not for /etc or pkg-management integration.
 
 I git-cloned the etckeeper source and tried to build on a homebew-based 10.9.1 macos system, with no success.  I can post details if that's helpful.  In meantime:  got any suggestions?  Is there any chance of the current code base or branch building and running successfully on macos?
+
 ---
 thanks for etckeeper! it's really useful :)
 

asking about port to macos
diff --git a/code/etckeeper/discussion.mdwn b/code/etckeeper/discussion.mdwn
index 02a2ef9..d8a7076 100644
--- a/code/etckeeper/discussion.mdwn
+++ b/code/etckeeper/discussion.mdwn
@@ -1,4 +1,8 @@
 ---
+I'd like to use etckeeper on Mac OS X, specifically 10.9.1 or above, primarily to get proper file-metadata control in git as per http://goo.gl/xZYkWX .  Not for /etc or pkg-management integration.
+
+I git-cloned the etckeeper source and tried to build on a homebew-based 10.9.1 macos system, with no success.  I can post details if that's helpful.  In meantime:  got any suggestions?  Is there any chance of the current code base or branch building and running successfully on macos?
+---
 thanks for etckeeper! it's really useful :)
 
 I'm always find myself trying to do "etckeeper status" so I've put in /etc/etckeeper/status.d/50status

diff --git a/code/moreutils/discussion.mdwn b/code/moreutils/discussion.mdwn
index 30d89ad..766e0bb 100644
--- a/code/moreutils/discussion.mdwn
+++ b/code/moreutils/discussion.mdwn
@@ -430,3 +430,15 @@ Performance isn't such a concern with this command. It's not like it's going int
 I know dialog et al could be used; however, what I don't like about dialog is that it is a dialog manager that expects to put boxes all over my console. I also have not found the magic to convince dialog to create a 1-row by x-col input. It's also not a masking editor, for the most part. And provides a bunch of features I'm not usually interested in. What I want is an enhanced read that doesn't add to or change my display, except as I tell it to, that can also wrangle input into a mask and other constraints.
 
 --grimblefritz
+
+## ts
+
+Suggestions: 
+
+It would be nice to have an option to add a blank line or other string as an indicator that time has elapsed.  Seeing blank lines is easier on the eyes than parsing numbers when your goal is just to see clusters of debug info that happened around the same time.  e.g.  
+
+    testprogram | ts -b 0.1
+
+would break into a different cluster whenever the time from one line to the next exceeds 0.1 second, and there could be another option to set the break string to something other than "\n", which is the default.
+
+It would be nice to show both stdin and stderr, and distinguish them.  (Otherwise one needs 2>&1 to combine stdin and stderr.)  But that could alternatively be done with a colorizer, which would be a good separate tool to have.

update
diff --git a/languages/ascountry/pascal.mdwn b/languages/ascountry/pascal.mdwn
index cbba854..ff9fe73 100644
--- a/languages/ascountry/pascal.mdwn
+++ b/languages/ascountry/pascal.mdwn
@@ -2,6 +2,6 @@ If pascal were a foreign country...
 
 It would be a place I remember visiting when young, not quite understanding it,
 not connecting with it, but seeing a certian kind of clean, awkward
-brchitectural eauty. I sometimes wonder, did it make a small impression, or
+architectural beauty. I sometimes wonder, did it make a small impression, or
 such a deep one I'm not aware? But I've never been back, and I'm not even
 sure it's still around. That was long ago, and the map has changed..

update
diff --git a/languages/ascountry/C.mdwn b/languages/ascountry/C.mdwn
index 048dfb0..521c9f2 100644
--- a/languages/ascountry/C.mdwn
+++ b/languages/ascountry/C.mdwn
@@ -5,7 +5,7 @@ of a certian kind of sense. The trains run on time, there's an order
 and sanity to everything, and citizens are also given great personal
 freedom and responsibility, and a vast and noble history informs all.
 Almost makes up for having to wear a hat and gloves, and fill out 3 page
-forms for every simple task. Pity about the stikes that bring everything to
+forms for every simple task. Pity about the strikes that bring everything to
 a screeching halt if a single number is transposed.
 
 (And then there's the strange bordering dutchy of C++, where things are

update
diff --git a/boxen/clam.mdwn b/boxen/clam.mdwn
index 03519dc..a9b397b 100644
--- a/boxen/clam.mdwn
+++ b/boxen/clam.mdwn
@@ -1,2 +1,4 @@
 Cloudatcost host with supposed lifetime paid for. Let's see how long it lasts!
 
+This system is untrusted; it is used only for experimentation and services
+using untrusted data that I don't mind losing.
diff --git a/languages/ascountry/haskell.mdwn b/languages/ascountry/haskell.mdwn
index 8f469a9..96fea5e 100644
--- a/languages/ascountry/haskell.mdwn
+++ b/languages/ascountry/haskell.mdwn
@@ -10,3 +10,7 @@ And it's so utopian! It all seems so right, they've found such a good way.
 But as I listen to them, I wonder, where do the good ideas stop, and the
 wild-eyed fervors begin? Have I already been sucked in by these gorgeous
 ideas, can this place really be as perfect as it seems?
+
+----
+
+Update after 5 years: Proud to be an expat living in Haskell!

update
diff --git a/boxen.mdwn b/boxen.mdwn
index e139bf8..737d930 100644
--- a/boxen.mdwn
+++ b/boxen.mdwn
@@ -6,7 +6,7 @@ living things with some broad divisions for different types of machines.
 
 Machines marked with a {*} are in active use.
 
-## latops
+## laptops
 
 Mostly mythical creatures.
 
@@ -22,10 +22,6 @@ Mostly mythical creatures.
 * corvid
 * kraken
 
-## phones
-
-* [[limpet]] Palm Pre
-
 ## servers
 
 Mostly birds.
@@ -49,14 +45,19 @@ Mostly birds.
 * [[slug]]
 * snail
 * [[stick]]
+* [[clam]]
+
+## phones
+
+* [[limpet]] Palm Pre
 
 ## wireless routers
 
 Flying insects.
 
-* [[dragonfly]] {*} (primary at home)
-* [[gnat]] {*} (link to Mom's)
-* [[butterfly]] {*} ([[yurt]])
+* [[dragonfly]]
+* [[gnat]]
+* [[butterfly]]
 * [[moth]] {*} (Mom's)
 * [[fly]] {*} (Anna's)
 
@@ -88,8 +89,8 @@ Large herbovores.
 
 Small amphibians.
 
-* frog {*} (bitsyxb)
-* toad {*} (bitsyg5)
+* frog (bitsyxb)
+* toad (bitsyg5)
 
 ## guest machines (pre-allocated DHCP IPs)
 
diff --git a/boxen/clam.mdwn b/boxen/clam.mdwn
new file mode 100644
index 0000000..03519dc
--- /dev/null
+++ b/boxen/clam.mdwn
@@ -0,0 +1,2 @@
+Cloudatcost host with supposed lifetime paid for. Let's see how long it lasts!
+

change link for dateutils
diff --git a/code/moreutils/discussion.mdwn b/code/moreutils/discussion.mdwn
index 4702914..30d89ad 100644
--- a/code/moreutils/discussion.mdwn
+++ b/code/moreutils/discussion.mdwn
@@ -137,7 +137,7 @@ It computes the number of days between two dates and can check whether a date ex
     $ datediff today -30
     2009-08-28
 
-> How about "ddiff" (and more nice tools) in dateutils at <http://hroptatyr.github.com/dateutils/> -- miriam_e
+> How about "ddiff" (and more nice tools) in dateutils at <http://www.fresse.org/dateutils/> -- miriam_e
 
 ## vidir
 

Revert spam
ad.ly? If it's not spam, someone is being an idiot. Did not let page load.
This reverts commit 7265e16f9de194afe0036a8a1e9f6300149c8d3e.
diff --git a/blog/entry/local_rsync_accelerator/comment_10_54bd706aa4ae810f181fad2e1f31182c._comment b/blog/entry/local_rsync_accelerator/comment_10_54bd706aa4ae810f181fad2e1f31182c._comment
deleted file mode 100644
index 29c45d3..0000000
--- a/blog/entry/local_rsync_accelerator/comment_10_54bd706aa4ae810f181fad2e1f31182c._comment
+++ /dev/null
@@ -1,8 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkFalzaKO0pHgT_yoH8pPLcLLEUcqox2n4"
- nickname="Marcus"
- subject="comment 10"
- date="2014-01-11T20:38:39Z"
- content="""
-Very good article on rsync. Here is one from around 1999 but still the very best rsync tutorial I've ever read. Explains it very well IMO: http://tinyurl.com/l37guv8
-"""]]

Added a comment
diff --git a/blog/entry/local_rsync_accelerator/comment_10_54bd706aa4ae810f181fad2e1f31182c._comment b/blog/entry/local_rsync_accelerator/comment_10_54bd706aa4ae810f181fad2e1f31182c._comment
new file mode 100644
index 0000000..29c45d3
--- /dev/null
+++ b/blog/entry/local_rsync_accelerator/comment_10_54bd706aa4ae810f181fad2e1f31182c._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkFalzaKO0pHgT_yoH8pPLcLLEUcqox2n4"
+ nickname="Marcus"
+ subject="comment 10"
+ date="2014-01-11T20:38:39Z"
+ content="""
+Very good article on rsync. Here is one from around 1999 but still the very best rsync tutorial I've ever read. Explains it very well IMO: http://tinyurl.com/l37guv8
+"""]]

back to default template, campaign over
diff --git a/templates/page.tmpl b/templates/page.tmpl
deleted file mode 100644
index cf80204..0000000
--- a/templates/page.tmpl
+++ /dev/null
@@ -1,243 +0,0 @@
-<TMPL_IF HTML5><!DOCTYPE html>
-<html>
-<TMPL_ELSE><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-</TMPL_IF>
-<head>
-<TMPL_IF DYNAMIC>
-<TMPL_IF FORCEBASEURL><base href="<TMPL_VAR FORCEBASEURL>" /><TMPL_ELSE>
-<TMPL_IF BASEURL><base href="<TMPL_VAR BASEURL>" /></TMPL_IF>
-</TMPL_IF>
-</TMPL_IF>
-<TMPL_IF HTML5><meta charset="utf-8" /><TMPL_ELSE><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></TMPL_IF>
-<title><TMPL_VAR TITLE></title>
-<TMPL_IF FAVICON>
-<link rel="icon" href="<TMPL_VAR BASEURL><TMPL_VAR FAVICON>" type="image/x-icon" />
-</TMPL_IF>
-<link rel="stylesheet" href="<TMPL_VAR BASEURL>style.css" type="text/css" />
-<TMPL_IF LOCAL_CSS>
-<link rel="stylesheet" href="<TMPL_VAR BASEURL><TMPL_VAR LOCAL_CSS>" type="text/css" />
-<TMPL_ELSE>
-<link rel="stylesheet" href="<TMPL_VAR BASEURL>local.css" type="text/css" />
-</TMPL_IF>
-
-<TMPL_UNLESS DYNAMIC>
-<TMPL_IF EDITURL>
-<link rel="alternate" type="application/x-wiki" title="Edit this page" href="<TMPL_VAR EDITURL>" />
-</TMPL_IF>
-<TMPL_IF FEEDLINKS><TMPL_VAR FEEDLINKS></TMPL_IF>
-<TMPL_IF RELVCS><TMPL_VAR RELVCS></TMPL_IF>
-<TMPL_IF META><TMPL_VAR META></TMPL_IF>
-<TMPL_LOOP TRAILLOOP>
-<TMPL_IF PREVPAGE>
-<link rel="prev" href="<TMPL_VAR PREVURL>" title="<TMPL_VAR PREVTITLE>" />
-</TMPL_IF>
-<link rel="up" href="<TMPL_VAR TRAILURL>" title="<TMPL_VAR TRAILTITLE>" />
-<TMPL_IF NEXTPAGE>
-<link rel="next" href="<TMPL_VAR NEXTURL>" title="<TMPL_VAR NEXTTITLE>" />
-</TMPL_IF>
-</TMPL_LOOP>
-</TMPL_UNLESS>
-
-</head>
-<body>
-
-<style>
-.topbar {
-	-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-	-moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
-}
-a.toplink {
-	color: #999999;
-	text-decoration: none;
-}
-a.toplink:hover {
-	color: #ffffff;;
-	text-decoration: underline
-}
-</style>
-<div class=topbar style="color: #999999; background: #2C2C2C; width: 100%; height: 2em; border-bottom: 10px solid #2C2C2C; position: fixed; left: 0; top: 0; margin-bottom: 0px; margin-top: 0; margin-left: 0; margin-right: 0">
-<div style="margin-top: 0.5em; text-align: center">
-<big>
-I'm running a crowdfunding campaign to support continuing git-annex development: <a class=toplink href="https://campaign.joeyh.name/">campaign.joeyh.name</a>
-</big>
-</div>
-</div>
-<div style="height: 2em; margin-bottom: 20px; margin-top: 0; margin-left: 0; margin-right: 0">
-</div>
-
-<TMPL_IF HTML5><article class="page"><TMPL_ELSE><div class="page"></TMPL_IF>
-
-<TMPL_IF HTML5><section class="pageheader"><TMPL_ELSE><div class="pageheader"></TMPL_IF>
-<TMPL_IF HTML5><header class="header"><TMPL_ELSE><div class="header"></TMPL_IF>
-<span>
-<span class="parentlinks">
-<TMPL_LOOP PARENTLINKS>
-<a href="<TMPL_VAR URL>"><TMPL_VAR PAGE></a>/ 
-</TMPL_LOOP>
-</span>
-<span class="title">
-<TMPL_VAR TITLE>
-<TMPL_IF ISTRANSLATION>
-&nbsp;(<TMPL_VAR PERCENTTRANSLATED>%)
-</TMPL_IF>
-</span>
-</span>
-<TMPL_UNLESS DYNAMIC>
-<TMPL_IF SEARCHFORM>
-<TMPL_VAR SEARCHFORM>
-</TMPL_IF>
-</TMPL_UNLESS>
-<TMPL_IF HTML5></header><TMPL_ELSE></div></TMPL_IF>
-
-<TMPL_IF HAVE_ACTIONS>
-<TMPL_IF HTML5><nav class="actions"><TMPL_ELSE><div class="actions"></TMPL_IF>
-<ul>
-<TMPL_IF EDITURL>
-<li><a href="<TMPL_VAR EDITURL>" rel="nofollow">Edit</a></li>
-</TMPL_IF>
-<TMPL_IF RECENTCHANGESURL>
-<li><a href="<TMPL_VAR RECENTCHANGESURL>">RecentChanges</a></li>
-</TMPL_IF>
-<TMPL_IF HISTORYURL>
-<li><a href="<TMPL_VAR HISTORYURL>">History</a></li>
-</TMPL_IF>
-<TMPL_IF GETSOURCEURL>
-<li><a href="<TMPL_VAR GETSOURCEURL>">Source</a></li>
-</TMPL_IF>
-<TMPL_IF PREFSURL>
-<li><a href="<TMPL_VAR PREFSURL>">Preferences</a></li>
-</TMPL_IF>
-<TMPL_IF ACTIONS>
-<TMPL_LOOP ACTIONS>
-<li><TMPL_VAR ACTION></li>
-</TMPL_LOOP>
-</TMPL_IF>
-<TMPL_IF COMMENTSLINK>
-<li><TMPL_VAR COMMENTSLINK></li>
-<TMPL_ELSE>
-<TMPL_IF DISCUSSIONLINK>
-<li><TMPL_VAR DISCUSSIONLINK></li>
-</TMPL_IF>
-</TMPL_IF>
-</ul>
-<TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>
-</TMPL_IF>
-
-<TMPL_IF OTHERLANGUAGES>
-<TMPL_IF HTML5><nav id="otherlanguages"><TMPL_ELSE><div id="otherlanguages"></TMPL_IF>
-<ul>
-<TMPL_LOOP OTHERLANGUAGES>
-<li>
-<a href="<TMPL_VAR URL>"><TMPL_VAR LANGUAGE></a>
-<TMPL_IF MASTER>
-(master)
-<TMPL_ELSE>
-&nbsp;(<TMPL_VAR PERCENT>%)
-</TMPL_IF>
-</li>
-</TMPL_LOOP>
-</ul>
-<TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>
-</TMPL_IF>
-
-<TMPL_UNLESS DYNAMIC>
-<TMPL_VAR TRAILS>
-</TMPL_UNLESS>
-
-<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
-
-<TMPL_UNLESS DYNAMIC>
-<TMPL_IF SIDEBAR>
-<TMPL_IF HTML5><aside class="sidebar"><TMPL_ELSE><div class="sidebar"></TMPL_IF>
-<TMPL_VAR SIDEBAR>
-<TMPL_IF HTML5></aside><TMPL_ELSE></div></TMPL_IF>
-</TMPL_IF>
-</TMPL_UNLESS>
-
-<div id="pagebody">
-
-<TMPL_IF HTML5><section id="content"><TMPL_ELSE><div id="content"></TMPL_IF>
-<TMPL_VAR CONTENT>
-<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
-
-<TMPL_UNLESS DYNAMIC>
-<TMPL_IF COMMENTS>
-<TMPL_IF HTML5><section id="comments"><TMPL_ELSE><div id="comments"></TMPL_IF>
-<TMPL_VAR COMMENTS>
-<TMPL_IF ADDCOMMENTURL>
-<div class="addcomment">
-<a href="<TMPL_VAR ADDCOMMENTURL>">Add a comment</a>
-</div>
-<TMPL_ELSE>
-<div class="addcomment">Comments on this page are closed.</div>
-</TMPL_IF>
-<TMPL_IF HTML5></section><TMPL_ELSE></div></TMPL_IF>
-</TMPL_IF>
-</TMPL_UNLESS>
-
-</div>
-
-<TMPL_IF HTML5><footer id="footer" class="pagefooter"><TMPL_ELSE><div id="footer" class="pagefooter"></TMPL_IF>
-<TMPL_UNLESS DYNAMIC>
-<TMPL_IF HTML5><nav id="pageinfo"><TMPL_ELSE><div id="pageinfo"></TMPL_IF>
-
-<TMPL_VAR TRAILS>
-
-<TMPL_IF TAGS>
-<TMPL_IF HTML5><nav class="tags"><TMPL_ELSE><div class="tags"></TMPL_IF>
-Tags:
-<TMPL_LOOP TAGS>
-<TMPL_VAR LINK>
-</TMPL_LOOP>
-<TMPL_IF HTML5></nav><TMPL_ELSE></div></TMPL_IF>

(Diff truncated)
diff --git a/rfc/rel-vcs/discussion.mdwn b/rfc/rel-vcs/discussion.mdwn
index 1f42021..73f213d 100644
--- a/rfc/rel-vcs/discussion.mdwn
+++ b/rfc/rel-vcs/discussion.mdwn
@@ -18,6 +18,8 @@ repos (through HTML containment).
 
 >> I would be really interested to see the protocol name torn out of the rel - I don't think it really belongs there. In microformats I think you could get away with generally using class="vcs-git", and rel="vcs", but I'm not sure what the best practices are. --[MarkTraceur](http://marktraceur.info)
 
+>> In fact I think we should *not* use the type attribute unless there are valid MIME types we could use to accurately represent the types we want (I had temporarily forgotten what the type attribute was for, last night, but now I'm sane again), so maybe class values are the "better" option for now. --[MarkTraceur](http://marktraceur.info)
+
 In the "Multiple Repositories" section, why leave the rules for  
 divining which repository is writable up to the client?  Seems like a  
 bit of metadata would help ensure consistent treatment by all clients.

Ideas
diff --git a/rfc/rel-vcs/discussion.mdwn b/rfc/rel-vcs/discussion.mdwn
index d731a6f..1f42021 100644
--- a/rfc/rel-vcs/discussion.mdwn
+++ b/rfc/rel-vcs/discussion.mdwn
@@ -14,7 +14,9 @@ repos (through HTML containment).
 	<a rel="vcs" type="git" href="git://example.org/foo.git" title="git repository">git://example.org/foo.git</a>
 
 > The only problem with this form is it uses a URI form that the browser
-> will be unable to follow in a visible link. --[[Joey]] 
+> will be unable to follow in a visible link. --[[Joey]]
+
+>> I would be really interested to see the protocol name torn out of the rel - I don't think it really belongs there. In microformats I think you could get away with generally using class="vcs-git", and rel="vcs", but I'm not sure what the best practices are. --[MarkTraceur](http://marktraceur.info)
 
 In the "Multiple Repositories" section, why leave the rules for  
 divining which repository is writable up to the client?  Seems like a  
@@ -102,3 +104,25 @@ But don't just take my word for it, there is
 URI schemes</a>...
 
 -- [smcv](http://smcv.pseudorandom.co.uk/)
+
+---
+
+I'd really like to have support for human-readable "browse" pages. Probably this would just consist of adding a "browse" type to the spec. I suspect it would look like this:
+
+	<link href="https://git.gitorious.org/stattr/stattr.git" rel="vcs" type="git" />
+	<link href="https://gitorious.org/stattr/stattr" rel="vcs" type="browse" />
+
+I would also appreciate a way to signify one project or another, useful when multiple different projects are represented on a page. For example, MediaWiki is considering printing human-readable documentation about source code for all extensions on a wiki - it would be great to print machine-readable ones too. e.g.
+
+	<div class="vcs-project">
+		<span class="vcs-project-name">MediaWiki</span>:
+		<a href="https://git.wikimedia.org/summary/mediawiki%2Fcore" rel="vcs" type="browse">Source</a> |
+		<a href="https://git.wikimedia.org/git/mediawiki/core.git" rel="vcs" type="git">Repository</a>
+	</div>
+	<div class="vcs-project">
+		<span class="vcs-project-name">WikiEditor</span>:
+		<a href="https://git.wikimedia.org/summary/mediawiki%2Fextensions%2FWikiEditor" rel="vcs" type="browse">Source</a> |
+		<a href="https://git.wikimedia.org/git/mediawiki/extensions/WikiEditor.git" rel="vcs" type="git">Repository</a>
+	</div>
+
+Some thoughts :) --[MarkTraceur](http://marktraceur.info)

Added a comment
diff --git a/blog/entry/charlie_bitcoin/comment_1_ec0b5ab0afbe5be4b4640897e74f7243._comment b/blog/entry/charlie_bitcoin/comment_1_ec0b5ab0afbe5be4b4640897e74f7243._comment
new file mode 100644
index 0000000..c2e474d
--- /dev/null
+++ b/blog/entry/charlie_bitcoin/comment_1_ec0b5ab0afbe5be4b4640897e74f7243._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnG_tpToBCU0KfcLlYr6GW9MdlhcxM6dBw"
+ nickname="Daniel"
+ subject="comment 1"
+ date="2014-01-02T07:32:59Z"
+ content="""
+You make a good point about converting it to an inflationary currency. I doubt most of the current users have considered that risk
+
+Also, Stross's recent book Neptune's Brood uses bitcoin (by name, even if the details are left slightly murky) as the basis for an interstellar currency. Having an open register and requiring confirmations of all transactions is actually a hugely useful aspect of bitcoin, one that I suspect will eventually be adopted, even if the rest isn't.
+"""]]

calendar update
diff --git a/blog/archives/2014.mdwn b/blog/archives/2014.mdwn
new file mode 100644
index 0000000..d0326b8
--- /dev/null
+++ b/blog/archives/2014.mdwn
@@ -0,0 +1 @@
+[[!calendar type=year year=2014 pages="blog/entry/* and !*/Discussion"]]
diff --git a/blog/archives/2014/01.mdwn b/blog/archives/2014/01.mdwn
new file mode 100644
index 0000000..805cc07
--- /dev/null
+++ b/blog/archives/2014/01.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=01 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(01) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/02.mdwn b/blog/archives/2014/02.mdwn
new file mode 100644
index 0000000..f2d9a72
--- /dev/null
+++ b/blog/archives/2014/02.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=02 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(02) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/03.mdwn b/blog/archives/2014/03.mdwn
new file mode 100644
index 0000000..12f2ef5
--- /dev/null
+++ b/blog/archives/2014/03.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=03 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(03) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/04.mdwn b/blog/archives/2014/04.mdwn
new file mode 100644
index 0000000..4ec053a
--- /dev/null
+++ b/blog/archives/2014/04.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=04 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(04) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/05.mdwn b/blog/archives/2014/05.mdwn
new file mode 100644
index 0000000..651baf5
--- /dev/null
+++ b/blog/archives/2014/05.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=05 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(05) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/06.mdwn b/blog/archives/2014/06.mdwn
new file mode 100644
index 0000000..f932e8d
--- /dev/null
+++ b/blog/archives/2014/06.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=06 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(06) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/07.mdwn b/blog/archives/2014/07.mdwn
new file mode 100644
index 0000000..478a887
--- /dev/null
+++ b/blog/archives/2014/07.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=07 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(07) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/08.mdwn b/blog/archives/2014/08.mdwn
new file mode 100644
index 0000000..324a969
--- /dev/null
+++ b/blog/archives/2014/08.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=08 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(08) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/09.mdwn b/blog/archives/2014/09.mdwn
new file mode 100644
index 0000000..ab63f40
--- /dev/null
+++ b/blog/archives/2014/09.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=09 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(09) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/10.mdwn b/blog/archives/2014/10.mdwn
new file mode 100644
index 0000000..21243bd
--- /dev/null
+++ b/blog/archives/2014/10.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=10 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(10) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/11.mdwn b/blog/archives/2014/11.mdwn
new file mode 100644
index 0000000..3837ba0
--- /dev/null
+++ b/blog/archives/2014/11.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=11 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(11) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]
diff --git a/blog/archives/2014/12.mdwn b/blog/archives/2014/12.mdwn
new file mode 100644
index 0000000..90f52d4
--- /dev/null
+++ b/blog/archives/2014/12.mdwn
@@ -0,0 +1,5 @@
+[[!sidebar content="""
+[[!calendar type=month month=12 year=2014 pages="blog/entry/* and !*/Discussion"]]
+"""]]
+
+[[!inline pages="creation_month(12) and creation_year(2014) and blog/entry/* and !*/Discussion" show=0 feeds=no reverse=yes]]

add news item for debhelper 9.20131227
diff --git a/code/debhelper/news/version_9.20130720.mdwn b/code/debhelper/news/version_9.20130720.mdwn
deleted file mode 100644
index 3d6a9f8..0000000
--- a/code/debhelper/news/version_9.20130720.mdwn
+++ /dev/null
@@ -1,17 +0,0 @@
-debhelper 9.20130720 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * dh\_python: Removed this deprecated and unused command.
-     Closes: #[717374](http://bugs.debian.org/717374)
-     (Thanks, Luca Falavigna)
-   * Type fixes. Closes: #[719216](http://bugs.debian.org/719216)
-   * dh\_installinit: Fix a longstanding accidental behavior that caused
-     a file named debian/package to be installed as the init script.
-     Only fixed in v10 since packages might depend on this behavior.
-     Closes: #[719359](http://bugs.debian.org/719359)
-   * dh\_install, dh\_installdocs, dh\_clean: Fix uses of find -exec
-     which cause it to ignore exit status of the commands run.
-     Closes: [719598](http://bugs.debian.org/719598)
-   * makefile buildsystem: Tighten heuristic to detect if makefile target
-     exists. An error message that some other target does not exist just means
-     the makefile spaghetti has problems later on when run with -n,
-     but not that the called target didn't exist. Closes: #[718121](http://bugs.debian.org/718121)"""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20131227.mdwn b/code/debhelper/news/version_9.20131227.mdwn
new file mode 100644
index 0000000..517e9ea
--- /dev/null
+++ b/code/debhelper/news/version_9.20131227.mdwn
@@ -0,0 +1,7 @@
+debhelper 9.20131227 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * [ Guillem Jover ]
+   * dh\_shlibdeps: Use new dpkg-shlibdeps -l option instead of LD\_LIBRARY\_PATH
+     Closes: #[717505](http://bugs.debian.org/717505)
+   * Depend on dpkg-dev (&gt;= 1.17.0), the version that introduced
+     dpkg-shlibdeps -l option."""]]
\ No newline at end of file

Added a comment: integration
diff --git a/blog/entry/completely_linux_distribution-independent_packaging/comment_3_d6c80ac9de798a78df2cf2be97baee9c._comment b/blog/entry/completely_linux_distribution-independent_packaging/comment_3_d6c80ac9de798a78df2cf2be97baee9c._comment
new file mode 100644
index 0000000..fddd7bd
--- /dev/null
+++ b/blog/entry/completely_linux_distribution-independent_packaging/comment_3_d6c80ac9de798a78df2cf2be97baee9c._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmBWAHvOsqn9pFIZFYn01RulIuaRDqv7vg"
+ nickname="mandrit"
+ subject="integration"
+ date="2013-12-22T00:59:50Z"
+ content="""
+@joey: Interesting, reminds me on Autopackage.
+
+@Shnatsel \"And with Linux you have another problem many people don't realize - integration.\"
+
+Yeah, integration (in the sense of \"centralization\") is problem in current linux distros, see Molnar's analysis (https://plus.google.com/109922199462633401279/posts/HgdeFDfRzNe), distros should not try to own all the apps and overburden the system. Separation between apps and core system (e.g. Android: http://www.youtube.com/watch?v=GT5fUcMUfYg) by bundling the apps is the proven solution. This is called recently \"half-rolling release\" (http://chakra-project.org/wiki/index.php?title=Half-Rolling_Release_Model).
+
+"""]]

Added a comment
diff --git a/blog/entry/completely_linux_distribution-independent_packaging/comment_2_705db0b344a12c130e7766446a94d357._comment b/blog/entry/completely_linux_distribution-independent_packaging/comment_2_705db0b344a12c130e7766446a94d357._comment
new file mode 100644
index 0000000..df8ec80
--- /dev/null
+++ b/blog/entry/completely_linux_distribution-independent_packaging/comment_2_705db0b344a12c130e7766446a94d357._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmBIyAlD0tInETl7LVi01xABTY_85ESfaE"
+ nickname="Shnatsel"
+ subject="comment 2"
+ date="2013-12-19T14:02:56Z"
+ content="""
+We've been through this so many times that it's painful that people STILL buy this.
+
+I've seen over 10 such solutions come and go in the mere 5 years I've been following the open-source community. Some even had backing of major software projects, e.g. Inkscape making their binaries available in such form. Not even a single one took off, ever.
+
+I could go on and on about how and why this is broken, but I've done this like 10 times already - each time somebody wanted to embrace such a thing - and I don't want to do this any more. I'll give a hint though: this is exactly what Windows forces developers to do. And I'd be hard-pressed to name a platform with an even more borked software management than Windows.
+
+And with Linux you have another problem many people don't realize - integration. As long as it's done well people don't know it's even there. Admittedly, it doesn't matter all that much for fullscreen games, but for anything else it's cruicial. With traditional repository model integration it is handled by the package maintainer, who actually knows the distro and how to make things work well with it. If you try to shift that burden to app developers, bad things tend to happen, because the app developers have no idea about distribution internals and conventions, and because they're usually not interested in that stuff. Oh, and if you try to shift that burden to developers AND make them target several distributions at once, that's a recipe for disaster.
+"""]]

title
diff --git a/blog/entry/charlie_bitcoin.mdwn b/blog/entry/charlie_bitcoin.mdwn
index 7510ad4..23b2a4a 100644
--- a/blog/entry/charlie_bitcoin.mdwn
+++ b/blog/entry/charlie_bitcoin.mdwn
@@ -26,5 +26,3 @@ it could play out.
 That's only one scenario, covering one of the many problems with Bitcoin
 that make Charlie hate it. So it seems to me that Bitcoin should be a gold
 mine for Science Fiction authors, if nothing else..
-
-[[!meta title="charlie bitcoin"]]

blog update
diff --git a/blog/entry/charlie_bitcoin.mdwn b/blog/entry/charlie_bitcoin.mdwn
new file mode 100644
index 0000000..7510ad4
--- /dev/null
+++ b/blog/entry/charlie_bitcoin.mdwn
@@ -0,0 +1,30 @@
+[[!meta title="what charlie's missing about bitcoin"]]
+
+(Posted as a comment to [Charles Stross's blog post about bitcoin](http://www.antipope.org/charlie/blog-static/2013/12/why-i-want-bitcoin-to-die-in-a.html))
+
+Bitcoin is a piece of software which tries to implement a particular
+SFnal future. One in which the world currency is de-centralized,
+deflationary, all early bitcoin adopters own their own planetoids, and
+all visitors are automatically charged for the air they breath.
+
+Thing is, the real world is more complicated than that. Assuming Bitcoin
+did manage to become an important currency, countries would naturally try
+to regulate it. In 30 years, by the time bitcoin mining has slowed right
+down, the legal system will be fully caught up to the internet. 
+
+Bitcoin tries to make its code the law (as Lessig used to say), but the law
+can certainly affect its code.
+
+The law could, for example, require that bitcoin be changed to stop
+increasing the difficulty of mining new blocks. Then bitcoin is
+suddenly an inflationary currency. This would be a hard fork in the block
+chain, but one enforced by financial regulators. Miners would be tracked
+down and forced to comply. Some would perhaps go underground and run the
+deflationary bitcoin network on TOR hidden services. Lots of possible ways
+it could play out.
+
+That's only one scenario, covering one of the many problems with Bitcoin
+that make Charlie hate it. So it seems to me that Bitcoin should be a gold
+mine for Science Fiction authors, if nothing else..
+
+[[!meta title="charlie bitcoin"]]

add news item for etckeeper 1.11
diff --git a/code/etckeeper/news/version_1.11.mdwn b/code/etckeeper/news/version_1.11.mdwn
new file mode 100644
index 0000000..c50fcce
--- /dev/null
+++ b/code/etckeeper/news/version_1.11.mdwn
@@ -0,0 +1,4 @@
+etckeeper 1.11 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix too broad matching of .gitignored files.
+     Closes: #[732339](http://bugs.debian.org/732339)"""]]
\ No newline at end of file
diff --git a/code/etckeeper/news/version_1.6.mdwn b/code/etckeeper/news/version_1.6.mdwn
deleted file mode 100644
index 1d10648..0000000
--- a/code/etckeeper/news/version_1.6.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-etckeeper 1.6 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Guard git config calls. Closes: #[717957](http://bugs.debian.org/717957)"""]]
\ No newline at end of file