Recent changes to this wiki:

add news item for github-backup 1.20141222
diff --git a/code/github-backup/news/version_1.20140807.mdwn b/code/github-backup/news/version_1.20140807.mdwn
deleted file mode 100644
index a71336c..0000000
--- a/code/github-backup/news/version_1.20140807.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-github-backup 1.20140807 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix build with github 0.9.
-   * Fix creation of github branch."""]]
\ No newline at end of file
diff --git a/code/github-backup/news/version_1.20141222.mdwn b/code/github-backup/news/version_1.20141222.mdwn
new file mode 100644
index 0000000..b429657
--- /dev/null
+++ b/code/github-backup/news/version_1.20141222.mdwn
@@ -0,0 +1,8 @@
+github-backup 1.20141222 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Added gitriddance(1), a utility to close all issues and pull requests,
+     for repos that don't want to be bothered with GitHub's proprietary
+     issue tracker.
+   * gitriddance depends on github 0.13.1, which has bug fixes
+     for posting comments.
+   * Various updates to internal git and utility libraries shared with git-annex."""]]
\ No newline at end of file

add
diff --git a/pics/brazil/2014/meeting-in-terravista.jpeg b/pics/brazil/2014/meeting-in-terravista.jpeg
new file mode 100644
index 0000000..deb8130
Binary files /dev/null and b/pics/brazil/2014/meeting-in-terravista.jpeg differ

update
diff --git a/code.mdwn b/code.mdwn
index 93302ef..68243c1 100644
--- a/code.mdwn
+++ b/code.mdwn
@@ -6,22 +6,24 @@ occasionally basic websites about my software.
 The stuff that's swapped into my local cache at the moment.
 
 [[git-annex]]
-[[ikiwiki]]
 [[propellor]]
 [[myrepos|mr]]
 [[etckeeper]]
+[[ikiwiki]]
 [[moreutils]]
 [[ikiwiki-hosting]]
 [[github-backup]]
-[[mpdtoys]]
 
 ## Less active projects
 
 In maintenance mode mostly, but I still have my hands in it somewhat.
 
+[[mpdtoys]]
 [[Words2Nums]]
 [[pdmenu]]
 [[filters]]
+[electrum-mnemonic](http://hackage.haskell.org/package/electrum-mnemonic)
+[brainfuck-monad](http://hackage.haskell.org/package/brainfuck-monad)
 
 ## Past projects
 

comment
diff --git a/blog/entry/a_brainfuck_monad/comment_3_156c49d4a06acddecdb4f6a74a643f52._comment b/blog/entry/a_brainfuck_monad/comment_3_156c49d4a06acddecdb4f6a74a643f52._comment
new file mode 100644
index 0000000..6cc4291
--- /dev/null
+++ b/blog/entry/a_brainfuck_monad/comment_3_156c49d4a06acddecdb4f6a74a643f52._comment
@@ -0,0 +1,45 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""alloc"""
+ date="2014-12-12T17:42:51Z"
+ content="""
+Instead of the constants hack, it's useful to define a stack-based
+function call model in brainfuck. This alloc higher-level function
+implements that, and is simplifying the code significantly.
+
+<pre>
+-- | For higher-level programming in brainfuck, it's useful to have a way
+-- to run a function, while allocating a memory cell, which is initialized
+-- to contain 0.
+--
+-- This and many of the functions below assume that
+-- cells to the left are in use, while cells to the right
+-- are unused and may contain any data. Higher-level functions should
+-- generally avoid changing the current cell, and should instead alloc
+-- a new one to use.
+alloc :: BrainFuck a -> BrainFuck a
+alloc a = do
+        next
+        zero
+        cell <- addr
+        r <- a
+        setAddr cell
+        prev
+        return r
+</pre>
+
+Using alloc, we can build a nicer loopFrom, etc.
+
+<pre>
+-- | Allocates a cell and uses it as the loop counter, starting from 
+-- the provided value. The action will continue running in a loop until
+-- it decrements the counter to 0.
+loopFrom :: Int -> (DataPointer -> BrainFuck ()) -> BrainFuck ()
+loopFrom n a = alloc $ do
+        i <- addr
+        add n
+        loopUnless0 $ do
+                a i
+                setAddr i
+</pre>
+"""]]

Added a comment: Ah, so that’s where the “useless” numbers come from…
diff --git a/blog/entry/a_brainfuck_monad/comment_3_435056729f4e0dc16e01a8110e1baa64._comment b/blog/entry/a_brainfuck_monad/comment_3_435056729f4e0dc16e01a8110e1baa64._comment
new file mode 100644
index 0000000..166ec49
--- /dev/null
+++ b/blog/entry/a_brainfuck_monad/comment_3_435056729f4e0dc16e01a8110e1baa64._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://mirsolutions.de/"
+ nickname="mirabilos"
+ subject="Ah, so that’s where the “useless” numbers come from…"
+ date="2014-12-12T12:12:22Z"
+ content="""
+… I had wondered.
+
+And it’s probably saying something about me that I find the brainfuck output more legible than the Haskell input ☺
+
+(But only that I speak only one of the two languages.)
+"""]]

innaccurate
diff --git a/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment b/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment
deleted file mode 100644
index 06e827f..0000000
--- a/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment
+++ /dev/null
@@ -1,13 +0,0 @@
-[[!comment format=mdwn
- username="joey"
- subject="""comment 3"""
- date="2014-12-12T08:10:37Z"
- content="""
-Ah, here's a way to avoid the mess with the constants:
-
-<pre>
--- | Fills the current data cell with zero.
-zero :: BrainFuck ()
-zero = loopUnless0 decr
-</pre>
-"""]]

typo
diff --git a/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment b/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment
index ec0eee8..06e827f 100644
--- a/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment
+++ b/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment
@@ -8,6 +8,6 @@ Ah, here's a way to avoid the mess with the constants:
 <pre>
 -- | Fills the current data cell with zero.
 zero :: BrainFuck ()
-zero n = loopUnless0 decr
+zero = loopUnless0 decr
 </pre>
 """]]

comment
diff --git a/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment b/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment
new file mode 100644
index 0000000..ec0eee8
--- /dev/null
+++ b/blog/entry/a_brainfuck_monad/comment_3_01fd8cad33389e3a614d7686f9217888._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 3"""
+ date="2014-12-12T08:10:37Z"
+ content="""
+Ah, here's a way to avoid the mess with the constants:
+
+<pre>
+-- | Fills the current data cell with zero.
+zero :: BrainFuck ()
+zero n = loopUnless0 decr
+</pre>
+"""]]

comment
diff --git a/blog/entry/a_brainfuck_monad/comment_1_0c53bef9e32440f6296f0d58ba89118e._comment b/blog/entry/a_brainfuck_monad/comment_1_0c53bef9e32440f6296f0d58ba89118e._comment
new file mode 100644
index 0000000..ab45f40
--- /dev/null
+++ b/blog/entry/a_brainfuck_monad/comment_1_0c53bef9e32440f6296f0d58ba89118e._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""more example code"""
+ date="2014-12-12T06:46:32Z"
+ content="""
+I posted several examples, include a size-optimised "hello world" program
+in this thread:
+<https://identi.ca/joeyh/note/htuYlTRfRnKLGud0xCOcmg>
+"""]]

Added a comment: Unlambda
diff --git a/blog/entry/a_brainfuck_monad/comment_1_eccbec82a396057fd7c67d3e73095560._comment b/blog/entry/a_brainfuck_monad/comment_1_eccbec82a396057fd7c67d3e73095560._comment
new file mode 100644
index 0000000..ac526dd
--- /dev/null
+++ b/blog/entry/a_brainfuck_monad/comment_1_eccbec82a396057fd7c67d3e73095560._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk9j9q_rKhvu7DAecZp-oEGRQmT3bvymVc"
+ nickname="Geoffrey"
+ subject="Unlambda"
+ date="2014-12-12T05:56:47Z"
+ content="""
+Wouldn't an Unlambda monad be more Haskell-ish? :)
+"""]]

foo
diff --git a/blog/entry/a_brainfuck_monad.mdwn b/blog/entry/a_brainfuck_monad.mdwn
index d647e00..941aa84 100644
--- a/blog/entry/a_brainfuck_monad.mdwn
+++ b/blog/entry/a_brainfuck_monad.mdwn
@@ -101,7 +101,7 @@ loop a = do
 """]]
 
 I haven't bothered to make sure that the constants are really constant,
-but that could be done. It would just need a Contaol.Monad.BrainFuck.Safe
+but that could be done. It would just need a Control.Monad.BrainFuck.Safe
 module, that uses a different monad, in which `incr` and `decr` and `input`
 don't do anything when the data pointer is pointing at a constant.
 Or, perhaps this could be statically checked at the type level, with

foo
diff --git a/blog/entry/a_brainfuck_monad.mdwn b/blog/entry/a_brainfuck_monad.mdwn
index 394a398..d647e00 100644
--- a/blog/entry/a_brainfuck_monad.mdwn
+++ b/blog/entry/a_brainfuck_monad.mdwn
@@ -84,7 +84,7 @@ program with these constants set up at the beginning.
 It just generates the brainfuck code for a series of ASCII art fishes:
 `>+>++>+++>++++>+++++>++++++>+++++++>++++++++>`
 
-With the fishes^Wconstants in place, it's possible to write a more useful
+With the fishes\^Wconstants in place, it's possible to write a more useful
 `loop`. Notice how the data pointer location is saved at the beginning, and
 restored inside the loop body. This ensures that the provided BrainFuck
 action doesn't stomp on our constants.

foo
diff --git a/blog/entry/a_brainfuck_monad.mdwn b/blog/entry/a_brainfuck_monad.mdwn
index 7830c8d..394a398 100644
--- a/blog/entry/a_brainfuck_monad.mdwn
+++ b/blog/entry/a_brainfuck_monad.mdwn
@@ -43,7 +43,8 @@ addr = BrainFuck $ \loc -> ([], loc, loc)
 
 Having the data pointer address available 
 allows writing some useful utility functions like this one,
-which uses the `next` (`>`) and `prev` (`<`) instructions.
+which uses the `next` (brainfuck opcode `>`) and `prev` (brainfuck opcode `<`)
+instructions.
 
 [[!format haskell """
 -- Moves the data pointer to a specific address.

typo
diff --git a/blog/entry/a_brainfuck_monad.mdwn b/blog/entry/a_brainfuck_monad.mdwn
index 6cf491a..7830c8d 100644
--- a/blog/entry/a_brainfuck_monad.mdwn
+++ b/blog/entry/a_brainfuck_monad.mdwn
@@ -23,7 +23,7 @@ Here's the brainfuck code that `demo` generates:
 `>+>++>+++>++++>+++++>++++++>+++++++>++++++++>++++++++++++++++++++++++++++++++<<<<<<<<[>>>>>>>>+.<<<<<<<<]`
 
 If you feed that into a brainfuck interpreter (I'm using `hsbrainfuck` for my
-testing), you'll find that it loops forever and prints out the each character,
+testing), you'll find that it loops forever and prints out each character,
 starting with space (32), in ASCIIbetical order.
 
 The implementation is quite similar to the ASM monad. The main differences

blog update
diff --git a/blog/entry/a_brainfuck_monad.mdwn b/blog/entry/a_brainfuck_monad.mdwn
new file mode 100644
index 0000000..6cf491a
--- /dev/null
+++ b/blog/entry/a_brainfuck_monad.mdwn
@@ -0,0 +1,118 @@
+Inspired by "[An ASM Monad](http://wall.org/~lewis/2013/10/15/asm-monad.html)",
+I've built a Haskell monad that produces
+[brainfuck programs](https://en.wikipedia.org/wiki/Brainfuck).
+The code for this monad is available
+[on hackage](http://hackage.haskell.org/package/brainfuck-monad),
+so `cabal install brainfuck-monad`.
+
+Here's a simple program written using this monad. See if you can guess
+what it might do:
+
+[[!format haskell """
+import Control.Monad.BrainFuck
+
+demo :: String
+demo = brainfuckConstants $ \constants -> do
+        add 31
+        forever constants $ do
+                add 1
+                output
+"""]]
+
+Here's the brainfuck code that `demo` generates:
+`>+>++>+++>++++>+++++>++++++>+++++++>++++++++>++++++++++++++++++++++++++++++++<<<<<<<<[>>>>>>>>+.<<<<<<<<]`
+
+If you feed that into a brainfuck interpreter (I'm using `hsbrainfuck` for my
+testing), you'll find that it loops forever and prints out the each character,
+starting with space (32), in ASCIIbetical order.
+
+The implementation is quite similar to the ASM monad. The main differences
+are that it builds a String, and that the BrainFuck monad keeps track
+of the current position of the data pointer (as brainfuck lacks any
+sane way to manipulate its instruction pointer).
+
+[[!format haskell """
+newtype BrainFuck a = BrainFuck (DataPointer -> ([Char], DataPointer, a))
+
+type DataPointer = Integer
+
+-- Gets the current address of the data pointer.
+addr :: BrainFuck DataPointer
+addr = BrainFuck $ \loc -> ([], loc, loc)
+"""]]
+
+Having the data pointer address available 
+allows writing some useful utility functions like this one,
+which uses the `next` (`>`) and `prev` (`<`) instructions.
+
+[[!format haskell """
+-- Moves the data pointer to a specific address.
+setAddr :: Integer -> BrainFuck ()
+setAddr n = do
+        a <- addr
+        if a > n
+                then prev >> setAddr n
+                else if a < n
+                        then next >> setAddr n
+                        else return ()
+"""]]
+
+Of course, brainfuck is a horrible language, designed to be nearly impossible
+to use. Here's the code to run a loop, but it's really hard to use this to
+build anything useful..
+
+[[!format haskell """
+-- The loop is only entered if the byte at the data pointer is not zero.
+-- On entry, the loop body is run, and then it loops when
+-- the byte at the data pointer is not zero.
+loopUnless0 :: BrainFuck () -> BrainFuck ()
+loopUnless0 a = do
+        open
+        a
+        close
+"""]]
+
+To tame brainfuck a bit, I decided to treat data addresses 0-8 as constants,
+which will contain the numbers 0-8. Otherwise, it's very hard to ensure
+that the data pointer is pointing at a nonzero number when you want
+to start a loop. (After all, brainfuck doesn't let you set data
+to some fixed value like 0 or 1!) 
+
+I wrote a little `brainfuckConstants` that runs a BrainFuck
+program with these constants set up at the beginning.
+It just generates the brainfuck code for a series of ASCII art fishes:
+`>+>++>+++>++++>+++++>++++++>+++++++>++++++++>`
+
+With the fishes^Wconstants in place, it's possible to write a more useful
+`loop`. Notice how the data pointer location is saved at the beginning, and
+restored inside the loop body. This ensures that the provided BrainFuck
+action doesn't stomp on our constants.
+
+[[!format haskell """
+-- Run an action in a loop, until it sets its data pointer to 0.
+loop :: BrainFuck () -> BrainFuck ()
+loop a = do
+	here <- addr
+	setAddr 1
+	loopUnless0 $ do
+		setAddr here
+		a
+"""]]
+
+I haven't bothered to make sure that the constants are really constant,
+but that could be done. It would just need a Contaol.Monad.BrainFuck.Safe
+module, that uses a different monad, in which `incr` and `decr` and `input`
+don't do anything when the data pointer is pointing at a constant.
+Or, perhaps this could be statically checked at the type level, with
+type level naturals. It's Haskell, we can make it safer if we want to. ;)
+
+So, not only does this BrainFuck monad allow writing brainfuck code using
+crazy haskell syntax, instead of crazy brainfuck syntax, but it
+allows doing some higher-level programming, building up a useful(!?) library
+of BrainFuck combinators and using them to generate brainfuck code
+you'd not want to try to write by hand.
+
+Of course, the real point is that "monad" and "brainfuck" so obviously
+belonged together that it would have been a crime not to write this.
+
+[[!meta title="a brainfuck monad"]]

Added a comment: Thanks!
diff --git a/blog/entry/podcasts_that_dont_suck_2014/comment_2_99e8f555f72b85e20f48a42a3ee73c13._comment b/blog/entry/podcasts_that_dont_suck_2014/comment_2_99e8f555f72b85e20f48a42a3ee73c13._comment
new file mode 100644
index 0000000..e4df2fd
--- /dev/null
+++ b/blog/entry/podcasts_that_dont_suck_2014/comment_2_99e8f555f72b85e20f48a42a3ee73c13._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnlGmuCn25UzL_oQLm03QfW8vZV9dYHpSg"
+ nickname="Michael"
+ subject="Thanks!"
+ date="2014-12-11T06:45:50Z"
+ content="""
+I really enjoyed the last edition. Especially the Long Now seminars are amazing. Off to try your new recommendations. Looking forward to the 2015 edition.
+"""]]

Added a comment: You can cherry-pick
diff --git a/blog/entry/podcasts_that_dont_suck_2014/comment_1_76dc9dbae3c67f3eb6fb2da66fae2adf._comment b/blog/entry/podcasts_that_dont_suck_2014/comment_1_76dc9dbae3c67f3eb6fb2da66fae2adf._comment
new file mode 100644
index 0000000..0957089
--- /dev/null
+++ b/blog/entry/podcasts_that_dont_suck_2014/comment_1_76dc9dbae3c67f3eb6fb2da66fae2adf._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://launchpad.net/~skellat"
+ nickname="skellat"
+ subject="You can cherry-pick"
+ date="2014-12-10T04:34:44Z"
+ content="""
+My subscriptions list is available [on gpodder.net](https://gpodder.net/user/alpacaherder/subscriptions?token=eE3pZxQwVMJvKgimaAG6ITtY9u7k58oS) for now.
+"""]]

typo
diff --git a/blog/entry/podcasts_that_dont_suck_2014.mdwn b/blog/entry/podcasts_that_dont_suck_2014.mdwn
index 8104925..17bc499 100644
--- a/blog/entry/podcasts_that_dont_suck_2014.mdwn
+++ b/blog/entry/podcasts_that_dont_suck_2014.mdwn
@@ -34,7 +34,7 @@
   If you didn't before: You're welcome. :) Nuff said.
 
 * [Redecentralize](http://redecentralize.org/podcast/feed.rss): Interviews
-  with creatores of decentralized internet tools like Tahoe-LAFS, Ethereum,
+  with creators of decentralized internet tools like Tahoe-LAFS, Ethereum,
   Media Goblin, TeleHash. I just wish it went into more depth on protocols
   and how they work.
 

title
diff --git a/blog/entry/podcasts_that_dont_suck_2014.mdwn b/blog/entry/podcasts_that_dont_suck_2014.mdwn
index 51458ba..8104925 100644
--- a/blog/entry/podcasts_that_dont_suck_2014.mdwn
+++ b/blog/entry/podcasts_that_dont_suck_2014.mdwn
@@ -60,5 +60,3 @@ Seminars.
 PS: A nice podcatcher, for the technically inclined is
 [git-annex importfeed](http://git-annex.branchable.com/tips/downloading_podcasts/).
 Featuring list of feeds in a text file, and distributed podcatching!
-
-[[!meta title="podcasts that dont suck 2014"]]

format
diff --git a/blog/entry/podcasts_that_dont_suck_2014.mdwn b/blog/entry/podcasts_that_dont_suck_2014.mdwn
index d1a3d66..51458ba 100644
--- a/blog/entry/podcasts_that_dont_suck_2014.mdwn
+++ b/blog/entry/podcasts_that_dont_suck_2014.mdwn
@@ -9,14 +9,17 @@
   [description of when Niagra falls stopped](http://traffic.libsyn.com/memorypalace/Rush_and_Roar.mp3).
   I have listened to the entire back archive, and want *more*. Only downside
   is it's a looong time between new episodes.
+
 * [The Haskell Cast](http://www.haskellcast.com/feed.xml): Panel
   discussion with a guest, there is
   a lot of expertise amoung them and I'm often scrambling to keep up with
   the barrage of ideas. If this seems too tame, check out
   [The Type Theory Podcast](http://typetheorypodcast.com/feed/podcast) instead..
+
 * [Benjamen Walker's Theory of Everything](http://toe.prx.org/feed/): Only
   caught 2 episodes so far, but they've both been great. Short, punchy,
   quirky, geeky. Astoundingly good production values.
+
 * [Lightspeed magazine](http://www.lightspeedmagazine.com/feed/) and
   [Escape Pod](http://escapepod.org/feed/) blur together for me. Both
   feature 20-50 minute science fiction short stories, and occasionally
@@ -25,19 +28,24 @@
   for strange dreams. Two strongly contrasting examples:
   "[Observations About Eggs from the Man Sitting Next to Me on a Flight from Chicago, Illinois to Cedar Rapids, Iowa](http://www.podtrac.com/pts/redirect.mp3/www.lightspeedmagazine.com/podcasts/podcast_155-Observations_About_Eggs_from_etc-Carmen_Maria_Machado.mp3)"
   and "[Pay Phobetor](http://www.podtrac.com/pts/redirect.mp3/www.lightspeedmagazine.com/podcasts/podcast_191-Pay_Phobetor-Shale_Nelson.mp3)"
+
 * [Serial](http://feeds.serialpodcast.org/serialpodcast): You probably
   already know about this high profile TAL spinoff.
   If you didn't before: You're welcome. :) Nuff said.
+
 * [Redecentralize](http://redecentralize.org/podcast/feed.rss): Interviews
   with creatores of decentralized internet tools like Tahoe-LAFS, Ethereum,
   Media Goblin, TeleHash. I just wish it went into more depth on protocols
   and how they work.
+
 * [Love and Radio](http://feed.loveandradio.org/loveplusradio):
   This American Life squared and on acid.
+
 * [Debian & Stuff](http://www.debianandstuff.com/listen/?format=rss):
   My friend Asheesh and that guy I ate Thai food with once in Portland
   in a marvelously unfocused podcast that somehow connects everything
   up in the end. Only one episode so far; what are you guys waiting on? :P
+
 * [Hacker Public Radio](http://hackerpublicradio.org/hpr_ogg_rss.php):
   Anyone can upload an episode, and multiple episodes are published each
   week, which makes this a grab bag to pick and choose from occasionally.

blog update
diff --git a/blog/entry/podcasts_that_dont_suck_2014.mdwn b/blog/entry/podcasts_that_dont_suck_2014.mdwn
new file mode 100644
index 0000000..d1a3d66
--- /dev/null
+++ b/blog/entry/podcasts_that_dont_suck_2014.mdwn
@@ -0,0 +1,56 @@
+[[!meta title="podcasts that don't suck, 2014 edition"]]
+
+* [The Memory Palace](http://feeds.feedburner.com/thememorypalace):
+  This is the way history should be taught, but rarely is. Nate DiMeo
+  takes past events and puts you in the middle of them, in a way that
+  makes you emphathise so much with people from the past. Each episode
+  is a little short story, and they're often only a few minutes long.
+  A great example is this
+  [description of when Niagra falls stopped](http://traffic.libsyn.com/memorypalace/Rush_and_Roar.mp3).
+  I have listened to the entire back archive, and want *more*. Only downside
+  is it's a looong time between new episodes.
+* [The Haskell Cast](http://www.haskellcast.com/feed.xml): Panel
+  discussion with a guest, there is
+  a lot of expertise amoung them and I'm often scrambling to keep up with
+  the barrage of ideas. If this seems too tame, check out
+  [The Type Theory Podcast](http://typetheorypodcast.com/feed/podcast) instead..
+* [Benjamen Walker's Theory of Everything](http://toe.prx.org/feed/): Only
+  caught 2 episodes so far, but they've both been great. Short, punchy,
+  quirky, geeky. Astoundingly good production values.
+* [Lightspeed magazine](http://www.lightspeedmagazine.com/feed/) and
+  [Escape Pod](http://escapepod.org/feed/) blur together for me. Both
+  feature 20-50 minute science fiction short stories, and occasionally
+  other genre fictions. They seem to get all the award-winning short
+  stories. I sometimes fall asleep to these which can make
+  for strange dreams. Two strongly contrasting examples:
+  "[Observations About Eggs from the Man Sitting Next to Me on a Flight from Chicago, Illinois to Cedar Rapids, Iowa](http://www.podtrac.com/pts/redirect.mp3/www.lightspeedmagazine.com/podcasts/podcast_155-Observations_About_Eggs_from_etc-Carmen_Maria_Machado.mp3)"
+  and "[Pay Phobetor](http://www.podtrac.com/pts/redirect.mp3/www.lightspeedmagazine.com/podcasts/podcast_191-Pay_Phobetor-Shale_Nelson.mp3)"
+* [Serial](http://feeds.serialpodcast.org/serialpodcast): You probably
+  already know about this high profile TAL spinoff.
+  If you didn't before: You're welcome. :) Nuff said.
+* [Redecentralize](http://redecentralize.org/podcast/feed.rss): Interviews
+  with creatores of decentralized internet tools like Tahoe-LAFS, Ethereum,
+  Media Goblin, TeleHash. I just wish it went into more depth on protocols
+  and how they work.
+* [Love and Radio](http://feed.loveandradio.org/loveplusradio):
+  This American Life squared and on acid.
+* [Debian & Stuff](http://www.debianandstuff.com/listen/?format=rss):
+  My friend Asheesh and that guy I ate Thai food with once in Portland
+  in a marvelously unfocused podcast that somehow connects everything
+  up in the end. Only one episode so far; what are you guys waiting on? :P
+* [Hacker Public Radio](http://hackerpublicradio.org/hpr_ogg_rss.php):
+  Anyone can upload an episode, and multiple episodes are published each
+  week, which makes this a grab bag to pick and choose from occasionally.
+  While mostly about Linux and Free Software, the best episodes
+  are those that veer var afield, such as the 40 minute river swim
+  recording featured in [Wildswimming in France](http://hackerpublicradio.org/eps/hpr1528.ogg).
+
+Also, out of the podcasts I listed [[previously|podcasts_that_dont_suck]],
+I still listen to and enjoy Free As In Freedom, Off the Hook, and the Long Now
+Seminars.
+
+PS: A nice podcatcher, for the technically inclined is
+[git-annex importfeed](http://git-annex.branchable.com/tips/downloading_podcasts/).
+Featuring list of feeds in a text file, and distributed podcatching!
+
+[[!meta title="podcasts that dont suck 2014"]]

Added a comment: debirf?
diff --git a/blog/entry/clean_OS_reinstalls_with_propellor/comment_1_fd1f47d30d9a39df44fabb8c2b93a65c._comment b/blog/entry/clean_OS_reinstalls_with_propellor/comment_1_fd1f47d30d9a39df44fabb8c2b93a65c._comment
new file mode 100644
index 0000000..8677ff8
--- /dev/null
+++ b/blog/entry/clean_OS_reinstalls_with_propellor/comment_1_fd1f47d30d9a39df44fabb8c2b93a65c._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://id.koumbit.net/anarcat"
+ subject="debirf?"
+ date="2014-12-09T17:21:17Z"
+ content="""
+instead of reimplementing debian-live - could we interest you in using debirf? http://cmrg.fifthhorseman.net/wiki/debirf
+
+i've had good success in implementing initrd-based bootable filesystems (which is basically what d-i is) using it, and i can't imagine why propellor couldn't be added to a debirf image... 
+"""]]

video
diff --git a/blog/entry/clean_OS_reinstalls_with_propellor.mdwn b/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
index 2b22e2e..9fcd34e 100644
--- a/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
+++ b/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
@@ -31,6 +31,8 @@ testvm = host "testvm.kitenet.net"
         & User.hasSomePassword "root"
 """]]
 
+And here's [a video of it in action](http://downloads.kitenet.net/videos/propellor_clean_OS_reinstall.ogv).
+
 ----
 
 It was surprisingly easy to build this. Propellor already knew how to

tweak
diff --git a/blog/entry/clean_OS_reinstalls_with_propellor.mdwn b/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
index 4e6cfbf..2b22e2e 100644
--- a/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
+++ b/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
@@ -71,11 +71,12 @@ So, what gives? Why is this so much easier? There are a lot of reasons:
   calling underpowered busybox commands etc. Properties often Just Work
   the first time they're tested.
 
-* No separate runtime. d-i runs in its own environment. Propellor
-  drops into a live system and runs there. So I don't need to worry about
-  booting up the system, getting it on the network, etc etc. This probably
-  removes another order of magnitude of complexity from propellor as
-  compared with d-i.
+* No separate runtime. d-i runs in its own environment, which is really
+  a little custom linux distribution. Developing linux distributions is
+  hard. Propellor drops into a live system and runs there. So I don't need
+  to worry about booting up the system, getting it on the network, etc etc.
+  This probably removes another order of magnitude of complexity from
+  propellor as compared with d-i.
 
 This seems like the opposite of the Second System effect to me.
 So perhaps d-i was the second system all along?

indent
diff --git a/blog/entry/clean_OS_reinstalls_with_propellor.mdwn b/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
index f025faf..4e6cfbf 100644
--- a/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
+++ b/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
@@ -28,7 +28,7 @@ testvm = host "testvm.kitenet.net"
         & Hostname.searchDomain
         & Apt.installed ["linux-image-amd64"]
         & Apt.installed ["ssh"]
-	& User.hasSomePassword "root"
+        & User.hasSomePassword "root"
 """]]
 
 ----

blog update
diff --git a/blog/entry/clean_OS_reinstalls_with_propellor.mdwn b/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
new file mode 100644
index 0000000..f025faf
--- /dev/null
+++ b/blog/entry/clean_OS_reinstalls_with_propellor.mdwn
@@ -0,0 +1,105 @@
+You have a machine someplace, probably in The Cloud, and it has Linux
+installed, but not to your liking. You want to do a clean reinstall,
+maybe switching the distribution, or getting rid of the cruft. But
+this requires running an installer, and it's too difficult to run d-i on
+remote machines.
+
+Wouldn't it be nice if you could point a program at that machine and have
+it do a reinstall, on the fly, while the machine was running?
+
+This is what I've now taught propellor to do! Here's a working
+configuration which will make propellor convert a system running Fedora
+(or probably many other Linux distros) to Debian:
+
+[[!format haskell """
+testvm :: Host
+testvm = host "testvm.kitenet.net"
+        & os (System (Debian Unstable) "amd64")
+        & OS.cleanInstallOnce (OS.Confirmed "testvm.kitenet.net")
+                `onChange` propertyList "fixing up after clean install"
+                        [ User.shadowConfig True
+                        , OS.preserveRootSshAuthorized
+                        , OS.preserveResolvConf
+                        , Apt.update
+                        , Grub.boots "/dev/sda"
+                                `requires` Grub.installed Grub.PC
+                        ]
+        & Hostname.sane
+        & Hostname.searchDomain
+        & Apt.installed ["linux-image-amd64"]
+        & Apt.installed ["ssh"]
+	& User.hasSomePassword "root"
+"""]]
+
+----
+
+It was surprisingly easy to build this. Propellor already knew how to
+[[create a chroot|propelling_containers]], so from there it basically
+just has to move files around until the chroot takes over from the old OS.
+
+After the cleanInstallOnce property does its thing, propellor is running
+inside a freshly debootstrapped Debian system. Then we just need a few more
+Propertites to get from there to a bootable, usable system: Install grub
+and the kernel, turn on shadow passwords, preserve a few config files
+from the old OS, etc.
+
+It's really astounding to me how much easier this was to build than it
+was to build d-i. It took *years* to get d-i to the point of being able to
+install a working system. It took me a few part days to add this capability
+to propellor (It's 200 lines of code), and I've probably spent a total of
+less than 30 days total developing propellor in its entirity.
+
+So, what gives? Why is this so much easier? There are a lot of reasons:
+
+* Technology is so much better now. I can spin up cloud VMs for testing
+  in seconds; I use VirtualBox to restore a system from a snapshot. So
+  testing is much much easier. The first work on d-i was done by booting
+  real machines, and for a while I was booting them using *floppies*.
+
+* Propellor doesn't have a user interface. The best part of d-i is preseeding,
+  but that was mostly an accident; when I started developing d-i the first
+  thing I wrote was main-menu (which is invisible 99.9% of the time)
+  and we had to develop cdebconf, and tons of other UI. Probably 90% of
+  d-i work involves the UI. Jettisoning the UI entirely thus speeds up
+  development enormously. And propellor's configuration file blows d-i
+  preseeding out of the water in expressiveness and flexability.
+
+* Propellor has a much more principled design and implementation.
+  Separating things into Properties, which are composable and reusable
+  gives enormous leverage. Strong type checking and a powerful programming
+  language make it much easier to develop than d-i's mess of shell scripts
+  calling underpowered busybox commands etc. Properties often Just Work
+  the first time they're tested.
+
+* No separate runtime. d-i runs in its own environment. Propellor
+  drops into a live system and runs there. So I don't need to worry about
+  booting up the system, getting it on the network, etc etc. This probably
+  removes another order of magnitude of complexity from propellor as
+  compared with d-i.
+
+This seems like the opposite of the Second System effect to me.
+So perhaps d-i was the second system all along?
+
+I don't know if I'm going to take this all the way to
+[[propellor_is_d-i_2.0]]. But in theory, all that's needed now is:
+
+* Teaching propellor how to build a bootable image, containing a
+  live Debian system and propellor. (Yes, this would mean reimplementing
+  debian-live, but I estimate 100 lines of code to do it in propellor;
+  most of the Properties needed already exist.)
+  That image would then be booted up and perform the installation.
+* Some kind of UI that generates the propellor config file.
+* Adding Properties to partition the disk.
+
+----
+
+`cleanInstallOnce` and associated Properties will be included in
+propellor's upcoming 1.1.0 release, and are available in git now.
+
+Oh BTW, you could parameterize a few Properties by OS, and Propellor
+could be used to install not just Debian or Ubuntu, but whatever Linux
+distribution you want. Patches welcomed...
+
+[[!tag propellor]]
+
+[[!meta title="clean OS reinstalls with propellor"]]

add news item for github-backup 1.20141204
diff --git a/code/github-backup/news/version_1.20140721.mdwn b/code/github-backup/news/version_1.20140721.mdwn
deleted file mode 100644
index db35154..0000000
--- a/code/github-backup/news/version_1.20140721.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-github-backup 1.20140721 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix typo in fix for url parsing. Closes: #[755261](http://bugs.debian.org/755261)"""]]
\ No newline at end of file
diff --git a/code/github-backup/news/version_1.20141204.mdwn b/code/github-backup/news/version_1.20141204.mdwn
new file mode 100644
index 0000000..4d9fef2
--- /dev/null
+++ b/code/github-backup/news/version_1.20141204.mdwn
@@ -0,0 +1,4 @@
+github-backup 1.20141204 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix broken argument parser for the username|organization parameter.
+     Closes: #[772043](http://bugs.debian.org/772043)"""]]
\ No newline at end of file

typo
diff --git a/blog/entry/snowdrift.mdwn b/blog/entry/snowdrift.mdwn
index deb704d..78c60ae 100644
--- a/blog/entry/snowdrift.mdwn
+++ b/blog/entry/snowdrift.mdwn
@@ -20,7 +20,7 @@ about, and seeing this button:
 <img src="https://snowdrift.coop/static/img/intro/pledge-button-draft.png"
 alt="1283 patrons will donate MORE when you pledge">
 
-That's a lot stronger incentive than some paypal dontation button or flattr
+That's a lot stronger incentive than some paypal donation button or flattr
 link! The details of how it works are explained on 
 [their intro page](https://snowdrift.coop/p/snowdrift/w/en/intro),
 or see the ever-insightful and thoughtful Mike Linksvayer's

blog update
diff --git a/blog/entry/snowdrift.mdwn b/blog/entry/snowdrift.mdwn
new file mode 100644
index 0000000..deb704d
--- /dev/null
+++ b/blog/entry/snowdrift.mdwn
@@ -0,0 +1,40 @@
+[[!meta title="snowdrift - sustainable crowdfunding for free software development"]]
+
+In a [recent blog post](blog/entry/continuing_to_be_pleasantly_surprised),
+I mentioned how lucky I feel to keep finding ways to work on free software.
+In the past couple years, I've had a successful Kickstarter, and followed
+that up with a second crowdfunding campaign, and now a grant is funding my
+work. A lot to be thankful for.
+
+A one-off crowdfunding campaign to fund free software development is
+wonderful, if you can pull it off. It can start a new project, or kick
+an existing one into a higher gear. But in many ways, free software
+development is a poor match for kickstarter-type crowdfunding. Especially
+when it comes to ongoing development, which it's really hard to do a
+crowdfunding pitch for. That's why I was excited to find
+[Snowdrift.coop](https://snowdrift.coop/), which has a unique approach.
+
+Imagine going to a web page for a free software project that you care
+about, and seeing this button:
+
+<img src="https://snowdrift.coop/static/img/intro/pledge-button-draft.png"
+alt="1283 patrons will donate MORE when you pledge">
+
+That's a lot stronger incentive than some paypal dontation button or flattr
+link! The details of how it works are explained on 
+[their intro page](https://snowdrift.coop/p/snowdrift/w/en/intro),
+or see the ever-insightful and thoughtful Mike Linksvayer's
+[blog post about it](http://gondwanaland.com/mlog/2014/11/30/snowdrift/).
+
+When I found out about this, I immediately sent them a one-off donation.
+Later, I got to meet one of the developers face to face in Portland.
+I've also done a small amount of work on the Snowdrift platform,
+which is itself free software. (My haskell code will actually render
+that button above!)
+
+Free software is important, and its funding should be based, not on how
+lucky or good we are at kickstarter pitches, but on its quality and how
+useful it is to everyone. Snowdrift is the most interesting thing I've seen
+in this space, and I really hope they succeed. If you agree, they're
+[running their own crowdfunding campaign right now](https://snowdrift.tilt.com/launch-snowdrift-coop).
+

add news item for moreutils 0.54
diff --git a/code/moreutils/news/version_0.48.mdwn b/code/moreutils/news/version_0.48.mdwn
deleted file mode 100644
index cb1ab02..0000000
--- a/code/moreutils/news/version_0.48.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-moreutils 0.48 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Allow overriding PREFIX and CFLAGS to make the build more flexible
-     (Thanks, Ben Walton)
-   * Typo. Closes: #[697113](http://bugs.debian.org/697113)
-   * ts: -i enables incremental timestamping.
-     Thanks, Thomas Vander Stichele
-   * ts: Support single-digit day dates.
-     Thanks, Peter Lunicks
-   * sponge: Check fclose to detect certian short reads. Closes: #[704453](http://bugs.debian.org/704453)"""]]
\ No newline at end of file
diff --git a/code/moreutils/news/version_0.54.mdwn b/code/moreutils/news/version_0.54.mdwn
new file mode 100644
index 0000000..fd13712
--- /dev/null
+++ b/code/moreutils/news/version_0.54.mdwn
@@ -0,0 +1,5 @@
+moreutils 0.54 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * vidir: Fix bug in handling filenames that share a common
+     prefix when renaming. Closes: #[654326](http://bugs.debian.org/654326)
+     Thanks, Kushal Kumaran"""]]
\ No newline at end of file

add flier
diff --git a/learnstofly.mdwn b/learnstofly.mdwn
index c2fc1c9..bd36fbb 100644
--- a/learnstofly.mdwn
+++ b/learnstofly.mdwn
@@ -34,4 +34,4 @@ Supported by The Kentucky Educational Telvision Fund for Independent Production
 If you can't see the video above, [[download_it|joey_learns_to_fly.ogg]].
 
 Copyright 1992 Ed Counts, made available for personal use 
-only. [[flying.png]]
+only. <a href="flyer.jpg">[[flying.png]]</a>
diff --git a/learnstofly/flyer.jpg b/learnstofly/flyer.jpg
new file mode 100644
index 0000000..2dac875
Binary files /dev/null and b/learnstofly/flyer.jpg differ

diff --git a/code/etckeeper/discussion.mdwn b/code/etckeeper/discussion.mdwn
index 3222ee6..e1d111f 100644
--- a/code/etckeeper/discussion.mdwn
+++ b/code/etckeeper/discussion.mdwn
@@ -241,5 +241,6 @@ It'd be great if the automatic commits generated by the package manager could in
 
 I looked at the post-invoke hook that etckeeper puts in /etc/apt/apt.conf.d, but it wasn't clear to me if there was an easy way to get the apt-get command line that was run directly.  But I thought maybe one could scrape that out of the logs, if apt-get writes the /var/log/apt/history.log entry before it calls the post-invoke hooks?  I realize there might be a bit of a race condition there with multiple executions of apt-get, but it seems like it'd usually work pretty well.  --Nick
 
+---
 
-
+There is some odd behavior when doing a rebase with a reword. The .etckeeper file gets conflicts (could be because of http://git.661346.n2.nabble.com/rebase-i-reword-runs-pre-commit-hook-with-curious-results-td7244648.html). This is easy to work-around with a manual `etckeeper pre-commit` before `git rebase --continue` but I wonder if the pre-commit hook can be modified to make this work seamlessly?

typo
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
index f3ea580..0399a90 100644
--- a/blog/entry/propelling_containers.mdwn
+++ b/blog/entry/propelling_containers.mdwn
@@ -83,7 +83,7 @@ example = host "mylaptop"
 	& Chroot.provisioned (buildDepChroot "git-annex")
 
 buildDepChroot :: Apt.Package -> Chroot.Chroot
-buildDepChroot pkg = Chroot.debootstrapped system Debootstrap.buildd dir
+buildDepChroot pkg = Chroot.debootstrapped system Debootstrap.BuildD dir
 	& Apt.buildDep pkg
   where
 	dir = /srv/chroot/builddep/"++pkg

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_4a88a65fc9f1b607323779e18ede544d._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_4a88a65fc9f1b607323779e18ede544d._comment
new file mode 100644
index 0000000..a7d6fad
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_4a88a65fc9f1b607323779e18ede544d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
+ nickname="Ivan"
+ subject="comment 9"
+ date="2014-11-22T09:23:22Z"
+ content="""
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+
+Strange, I've got a similar setup (without inhibition, though) working flawlessly as a per-user unit. Arch, systemd 217, all defaults (no special configuration of privileges took place).
+"""]]

removed
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment
deleted file mode 100644
index 0b9a31f..0000000
--- a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
- nickname="Ivan"
- subject="comment 11"
- date="2014-11-22T09:21:02Z"
- content="""
-> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
-Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
-"""]]

removed
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment
deleted file mode 100644
index 9b37235..0000000
--- a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment
+++ /dev/null
@@ -1,9 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
- nickname="Ivan"
- subject="comment 9"
- date="2014-11-22T09:18:05Z"
- content="""
-> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
-Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
-"""]]

removed
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment
deleted file mode 100644
index 75f74c1..0000000
--- a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
- nickname="Ivan"
- subject="comment 10"
- date="2014-11-22T09:19:58Z"
- content="""
-> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
-
-Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
-"""]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment
new file mode 100644
index 0000000..0b9a31f
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_11_e85a77418ab6ce01939799f2af20f5ef._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
+ nickname="Ivan"
+ subject="comment 11"
+ date="2014-11-22T09:21:02Z"
+ content="""
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
+"""]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment
new file mode 100644
index 0000000..75f74c1
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_10_0340f8604bbac5ce622bf69be08ff6f0._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
+ nickname="Ivan"
+ subject="comment 10"
+ date="2014-11-22T09:19:58Z"
+ content="""
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+
+Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
+"""]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment
new file mode 100644
index 0000000..9b37235
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_9_64abd8a595f1b8ffeb788fa1c8078bff._comment
@@ -0,0 +1,9 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmAf-ieEypOj0tLTIEE3tEJe2F939erllY"
+ nickname="Ivan"
+ subject="comment 9"
+ date="2014-11-22T09:18:05Z"
+ content="""
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+Strange, I've got a similar setup (without inhibition, though) which works flawlessly as a per-user unit. Arch, systemd 217, all defaults.
+"""]]

fix
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
index 9ecf73a..f3ea580 100644
--- a/blog/entry/propelling_containers.mdwn
+++ b/blog/entry/propelling_containers.mdwn
@@ -82,8 +82,8 @@ example :: Host
 example = host "mylaptop"
 	& Chroot.provisioned (buildDepChroot "git-annex")
 
-buildDepChroot :: Apt.Package -> System -> Chroot.Chroot
-buildDepChroot pkg system = Chroot.debootstrapped system Debootstrap.buildd dir
+buildDepChroot :: Apt.Package -> Chroot.Chroot
+buildDepChroot pkg = Chroot.debootstrapped system Debootstrap.buildd dir
 	& Apt.buildDep pkg
   where
 	dir = /srv/chroot/builddep/"++pkg

typoski
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
index 7c98cde..9ecf73a 100644
--- a/blog/entry/propelling_containers.mdwn
+++ b/blog/entry/propelling_containers.mdwn
@@ -125,7 +125,7 @@ between these systems.
 
 ## PS
 
-Seems like that systemd-nspawn containers can be nested to any depth.
+Seems likely that systemd-nspawn containers can be nested to any depth.
 So, here's a new kind of fork bomb!
 
 [[!format haskell """

simplify
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
index 75753a6..7c98cde 100644
--- a/blog/entry/propelling_containers.mdwn
+++ b/blog/entry/propelling_containers.mdwn
@@ -123,15 +123,6 @@ that Propellor can add support for a new container system in a few hundred
 lines of code, and that it abstracts away all the unimportant differences
 between these systems.
 
-Oh BTW, all of these different sorts of containers can easily be removed
-from a host, by reverting their properties:
-
-[[!format haskell """
-	! Docker.docked webserverContainer
-	! Systemd.nspawned webserverContainer
-	! Chroot.provisioned (buildDepChroot "git-annex")
-"""]]
-
 ## PS
 
 Seems like that systemd-nspawn containers can be nested to any depth.

format
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
index 3e80963..75753a6 100644
--- a/blog/entry/propelling_containers.mdwn
+++ b/blog/entry/propelling_containers.mdwn
@@ -137,10 +137,12 @@ from a host, by reverting their properties:
 Seems like that systemd-nspawn containers can be nested to any depth.
 So, here's a new kind of fork bomb!
 
+[[!format haskell """
 infinitelyNestedContainer :: Systemd.Container
 infinitelyNestedContainer = Systemd.container "evil-systemd"
 	(Chroot.debootstrapped (System (Debian Unstable) "amd64") Debootstrap.MinBase)
 	& Systemd.nspawned infinitelyNestedContainer
+"""]]
 
 Strongly typed purely functional container deployment can only protect us
 against a certian subset of all badly thought out systems. ;)

blog update
diff --git a/blog/entry/propelling_containers.mdwn b/blog/entry/propelling_containers.mdwn
new file mode 100644
index 0000000..3e80963
--- /dev/null
+++ b/blog/entry/propelling_containers.mdwn
@@ -0,0 +1,148 @@
+[[!tag propellor]]
+
+Propellor has supported docker containers for a "long" time, and it works
+great. This week I've worked on adding more container support.
+
+## docker containers (revisited)
+
+The syntax for docker containers has changed slightly. Here's how it looks
+now:
+
+[[!format haskell """
+example :: Host
+example = host "example.com"
+	& Docker.docked webserverContainer
+
+webserverContainer :: Docker.Container
+webserverContainer = Docker.container "webserver" "joeyh/debian-stable"
+	& os (System (Debian (Stable "wheezy")) "amd64")
+	& Docker.publish "80:80"
+	& Apt.serviceInstalledRunning "apache2"
+	& alias "www.example.com"
+"""]]
+
+That makes example.com have a web server in a docker container, as you'd
+expect, and when propellor is used to deploy the DNS server it'll
+automatically make www.example.com point to the host (or hosts!) where
+this container is docked.
+
+I use docker a lot, but I have drank little of the Docker KoolAid.
+I'm not keen on using random blobs created by random third parties
+using either unreproducible methods, or the weirdly underpowered dockerfiles.
+(As for vast complicated collections of containers that each run one
+program and talk to one another etc ... I'll wait and see.)
+
+That's why propellor runs inside the docker container and deploys whatever
+configuration I tell it to, in a way that's both replicatable later
+and lets me use the full power of Haskell.
+
+Which turns out to be useful when moving on from docker containers to
+something else...
+
+## systemd-nspawn containers
+
+Propellor now supports containers using systemd-nspawn. It looks a lot
+like the docker example.
+
+[[!format haskell """
+example :: Host
+example = host "example.com"
+	& Systemd.persistentJournal
+	& Systemd.nspawned webserverContainer
+
+webserverContainer :: Systemd.Container
+webserverContainer = Systemd.container "webserver" chroot
+	& Apt.serviceInstalledRunning "apache2"
+	& alias "www.example.com"
+  where
+	chroot = Chroot.debootstrapped (System (Debian Unstable) "amd64") Debootstrap.MinBase
+"""]]
+
+Notice how I specified the Debian Unstable chroot that forms the basis of
+this container. Propellor sets up the container by running debootstrap,
+boots it up using systemd-nspawn, and then runs inside the container
+to provision it.
+
+Unlike docker containers, systemd-nspawn containers use systemd as their
+init, and it all integrates rather beautifully. You can see the container
+listed in `systemctl status`, including the services running inside it,
+use `journalctl` to examine its logs, etc.
+
+But no, systemd is the devil, and docker is too trendy...
+
+## chroots
+
+Propellor now also supports deploying good old chroots. It looks a lot
+like the other containers. Rather than repeat myself a third time,
+and because we don't really run webservers inside chroots much,
+here's a slightly different example.
+
+[[!format haskell """
+example :: Host
+example = host "mylaptop"
+	& Chroot.provisioned (buildDepChroot "git-annex")
+
+buildDepChroot :: Apt.Package -> System -> Chroot.Chroot
+buildDepChroot pkg system = Chroot.debootstrapped system Debootstrap.buildd dir
+	& Apt.buildDep pkg
+  where
+	dir = /srv/chroot/builddep/"++pkg
+	system = System (Debian Unstable) "amd64"
+"""]]
+
+Again this uses debootstrap to build the chroot, and then it runs
+propellor inside the chroot to provision it
+(btw without bothering to install propellor there,
+thanks to the magic of bind mounts and
+[[completely_linux_distribution-independent_packaging]]).
+
+In fact, the systemd-nspawn container code reuses the chroot code,
+and so turns out to be really rather simple. 132 lines for the chroot
+support, and 167 lines for the systemd support (which goes somewhat beyond
+the nspawn containers shown above).
+
+Which leads to the hardest part of all this...
+
+## debootstrap
+
+Making a propellor property for debootstrap should be easy. And it was,
+for Debian systems. However, I have crazy plans that involve running
+propellor on non-Debian systems, to debootstrap something, and installing
+debootstrap on an arbitrary linux system is ... too hard.
+
+In the end, I needed 253 lines of code to do it, which is barely
+one magnitude less code than the size of debootstrap itself.
+I won't go into the ugly details, but this could be made a lot easier
+if debootstrap catered more to being used outside of Debian.
+
+## closing
+
+Docker and systemd-nspawn have different strengths and weaknesses,
+and there are sure to be more container systems to come. I'm pleased
+that Propellor can add support for a new container system in a few hundred
+lines of code, and that it abstracts away all the unimportant differences
+between these systems.
+
+Oh BTW, all of these different sorts of containers can easily be removed
+from a host, by reverting their properties:
+
+[[!format haskell """
+	! Docker.docked webserverContainer
+	! Systemd.nspawned webserverContainer
+	! Chroot.provisioned (buildDepChroot "git-annex")
+"""]]
+
+## PS
+
+Seems like that systemd-nspawn containers can be nested to any depth.
+So, here's a new kind of fork bomb!
+
+infinitelyNestedContainer :: Systemd.Container
+infinitelyNestedContainer = Systemd.container "evil-systemd"
+	(Chroot.debootstrapped (System (Debian Unstable) "amd64") Debootstrap.MinBase)
+	& Systemd.nspawned infinitelyNestedContainer
+
+Strongly typed purely functional container deployment can only protect us
+against a certian subset of all badly thought out systems. ;)
+
+[[!meta title="propelling containers"]]

Added a comment: Sorry to hear you're leaving
diff --git a/blog/entry/on_leaving/comment_5_35688f9e1e7b417eee340e8c783d938c._comment b/blog/entry/on_leaving/comment_5_35688f9e1e7b417eee340e8c783d938c._comment
new file mode 100644
index 0000000..3ffd7ba
--- /dev/null
+++ b/blog/entry/on_leaving/comment_5_35688f9e1e7b417eee340e8c783d938c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://deirdresm.wordpress.com/"
+ nickname="deirdresm"
+ subject="Sorry to hear you're leaving"
+ date="2014-11-21T17:14:17Z"
+ content="""
+...but it sounds like you picked a good time.
+
+I remember the BAD meetings of yore, and miss your company at them (and other gatherings).
+
+Hope all is well with you, and best of luck in your future ventures.
+"""]]

more
diff --git a/blog/entry/propellor_is_d-i_2.0.mdwn b/blog/entry/propellor_is_d-i_2.0.mdwn
index 9e9f090..90b51e9 100644
--- a/blog/entry/propellor_is_d-i_2.0.mdwn
+++ b/blog/entry/propellor_is_d-i_2.0.mdwn
@@ -65,3 +65,4 @@ Well, now I know where propellor might end up if I felt like spending a month
 and adding a few thousand lines of code to it.
 
 [[!meta title="propellor is d-i 2.0"]]
+[[!tag propellor]]
diff --git a/code/propellor.mdwn b/code/propellor.mdwn
index 4e8fd36..7b08f4a 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]]
+* [[Read my blog posts about it|/blog/propellor]]

move blog post that conflicted with tag
diff --git a/blog/entry/introducing_propellor.mdwn b/blog/entry/introducing_propellor.mdwn
new file mode 100644
index 0000000..c05b524
--- /dev/null
+++ b/blog/entry/introducing_propellor.mdwn
@@ -0,0 +1,98 @@
+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 Configuration 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 = "/etc/hostname" `File.hasContent` [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) $
+        Property ("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 (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.
+
+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!
+
+[[!tag propellor]]
+[[!meta date="Sun Mar 30 03:50:42 2014 -0400"]]
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
deleted file mode 100644
index e4bf65c..0000000
--- a/blog/entry/propellor.mdwn
+++ /dev/null
@@ -1,97 +0,0 @@
-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 Configuration 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 = "/etc/hostname" `File.hasContent` [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) $
-        Property ("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 (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.
-

(Diff truncated)
one more
diff --git a/blog/entry/how_I_wrote_init_by_accident.mdwn b/blog/entry/how_I_wrote_init_by_accident.mdwn
index ea76d3b..1edb65e 100644
--- a/blog/entry/how_I_wrote_init_by_accident.mdwn
+++ b/blog/entry/how_I_wrote_init_by_accident.mdwn
@@ -53,3 +53,4 @@ If that does happen, perhaps I'll eventually be able to remove 2 lines of code
 from propellor.
 
 [[!meta title="how I wrote init by accident"]]
+[[!tag propellor]]

tag propellor posts
diff --git a/blog/entry/adding_docker_support_to_propellor.mdwn b/blog/entry/adding_docker_support_to_propellor.mdwn
index 5c353a8..492bf30 100644
--- a/blog/entry/adding_docker_support_to_propellor.mdwn
+++ b/blog/entry/adding_docker_support_to_propellor.mdwn
@@ -69,3 +69,4 @@ a large reason for that is, I think, that its configuration file is just
 not expressive enough.
 
 [[!meta title="adding docker support to propellor"]]
+[[!tag propellor]]
diff --git a/blog/entry/propellor-driven_DNS_and_backups.mdwn b/blog/entry/propellor-driven_DNS_and_backups.mdwn
index a1e0184..954539a 100644
--- a/blog/entry/propellor-driven_DNS_and_backups.mdwn
+++ b/blog/entry/propellor-driven_DNS_and_backups.mdwn
@@ -102,3 +102,4 @@ 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"]]
+[[!tag propellor]]
diff --git a/blog/entry/propellor.mdwn b/blog/entry/propellor.mdwn
index 159dd2d..e4bf65c 100644
--- a/blog/entry/propellor.mdwn
+++ b/blog/entry/propellor.mdwn
@@ -93,3 +93,5 @@ 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!
+
+[[!tag propellor]]
diff --git a/blog/entry/propellor_introspection_for_DNS.mdwn b/blog/entry/propellor_introspection_for_DNS.mdwn
index a6077a6..9bc8d0b 100644
--- a/blog/entry/propellor_introspection_for_DNS.mdwn
+++ b/blog/entry/propellor_introspection_for_DNS.mdwn
@@ -93,3 +93,4 @@ main = do
 """]]
 
 [[!meta title="propellor introspection for DNS"]]
+[[!tag propellor]]
diff --git a/blog/entry/propellor_type-safe_reversions.mdwn b/blog/entry/propellor_type-safe_reversions.mdwn
index 3fdaa15..62993c8 100644
--- a/blog/entry/propellor_type-safe_reversions.mdwn
+++ b/blog/entry/propellor_type-safe_reversions.mdwn
@@ -43,3 +43,4 @@ revertable, and others not:
 """]]
 
 [[!meta title="propellor type-safe reversions"]]
+[[!tag propellor]]
diff --git a/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
index c5b739e..1e4ed59 100644
--- a/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
+++ b/blog/entry/using_a_debian_package_as_the_remote_for_a_local_config_repo.mdwn
@@ -76,3 +76,4 @@ somewhere in /usr, and check them into a new empty repository as part of the
 generation of the upstream/master branch.
 
 [[!meta title="using a debian package as the remote for a local config repo"]]
+[[!tag propellor]]
diff --git a/blog/propellor.mdwn b/blog/propellor.mdwn
new file mode 100644
index 0000000..a719ba4
--- /dev/null
+++ b/blog/propellor.mdwn
@@ -0,0 +1 @@
+[[!inline pages="blog/entry/* and link(propellor) and !*/Discussion" actions=yes show="10"]]

reorg
diff --git a/code/debian/ctte-nomination-reply.txt b/code/debian/ctte-nomination-reply.txt
new file mode 100644
index 0000000..e443ce8
--- /dev/null
+++ b/code/debian/ctte-nomination-reply.txt
@@ -0,0 +1,90 @@
+From joey Mon Dec 19 18:39:28 2005
+Date: Mon, 19 Dec 2005 18:39:28 -0500
+X-OfflineIMAP-1326022817-6b697465-494e424f582e53656e74: 1135037001-0644317843492-v4.0.11
+From: Joey Hess <joeyh@debian.org>
+To: Manoj Srivastava <srivasta@debian.org>
+Cc: Branden Robinson / Debian Project Leader <leader@debian.org>,
+	debian-ctte-private@lists.debian.org
+Subject: Re: [Branden Robinson / Debian Project Leader] solicitation for interest in joining Technical Committee
+Message-ID: <20051219233928.GA32095@kitenet.net>
+References: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
+MIME-Version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+	protocol="application/pgp-signature"; boundary="ReaqsoxgOBHFXBhH"
+Content-Disposition: inline
+In-Reply-To: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
+User-Agent: Mutt/1.5.11
+Status: RO
+Content-Length: 2875
+Lines: 69
+
+
+--ReaqsoxgOBHFXBhH
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+Content-Transfer-Encoding: quoted-printable
+
+Both I and my ego thank you for considering me (again) for the technical
+committee.
+
+Upon reviewing the recent decisions of the technical committee, I was
+struck by the slim influence that the committee's decisions seem to have
+on the project. Of the decisions listed on the web page:
+
+1. After the committee went to great lengths to avoid cardinfo needing
+   to be split out of pcmcia-cs, it was removed from the package this
+   year with the comment from the (new) maintainer that:
+
+     * Removed the graphical cardinfo utility. I don't think anybody uses it
+       and it should be in a separate package anyway.
+
+2. After overruling the kernel maintainer on whether versafb should be
+   compiled into the kernel, he (I think) ignored the committee, added
+   lots of patches to make it a module, and closed the bugs. Now 4 years
+   later the new kernel maintainers are planning to ditch those patches
+   due to the maintenance load, and build it into the kernel, which will
+   finally comply with the committee's decision, although I don't know
+   that the committee's ruling influenced their decision at all.
+
+3. The maintainer of md5sum ignored for 1.5 years the committee's decision
+   on its output. When someone finally noticed that change was not made,
+   he stated that:
+
+      I'm frankly going to ignore this unless the tech ctte revisits it.
+      AFAICT this was dealt with in the tech ctte because it was a pet peeve
+      of ian jackson. I find it vaguely disturbing that there was an entire
+      thread about changing the behavior of a program in coreutils that *was
+      never mentioned to the coreutils maintainer*.=20
+
+4. amd64 is indeed being used as the name of that port, although it is
+   still not an official Debian port. Newer architectures (such as armeb)
+   seem to be getting their names decided without recourse the the
+   technical committee.
+
+So with one success out of four, there seems to be a problem with either
+the follow-through on decisions of the committee, or not enough weight
+is being given to those decisions, or perhaps the issues that come to
+the committee are not actually very important compared to others in
+Debian.
+
+My time to work on Debian is not unlimited and this does not seem to be
+the most productive place I could spend it, so I must once again decline
+the offer to serve on the technical committee.
+
+--=20
+see shy jo
+
+--ReaqsoxgOBHFXBhH
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: Digital signature
+Content-Disposition: inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.2 (GNU/Linux)
+
+iD8DBQFDp0Swd8HHehbQuO8RAtuxAKCWoB5Rc4ltfWb3krsoysqzHHUk0QCg6IUb
+bM79Q6jtwAvLe7VEAGCiHRY=
+=SJ3L
+-----END PGP SIGNATURE-----
+
+--ReaqsoxgOBHFXBhH--
diff --git a/ctte-nomination-reply.txt b/ctte-nomination-reply.txt
deleted file mode 100644
index e443ce8..0000000
--- a/ctte-nomination-reply.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-From joey Mon Dec 19 18:39:28 2005
-Date: Mon, 19 Dec 2005 18:39:28 -0500
-X-OfflineIMAP-1326022817-6b697465-494e424f582e53656e74: 1135037001-0644317843492-v4.0.11
-From: Joey Hess <joeyh@debian.org>
-To: Manoj Srivastava <srivasta@debian.org>
-Cc: Branden Robinson / Debian Project Leader <leader@debian.org>,
-	debian-ctte-private@lists.debian.org
-Subject: Re: [Branden Robinson / Debian Project Leader] solicitation for interest in joining Technical Committee
-Message-ID: <20051219233928.GA32095@kitenet.net>
-References: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
-MIME-Version: 1.0
-Content-Type: multipart/signed; micalg=pgp-sha1;
-	protocol="application/pgp-signature"; boundary="ReaqsoxgOBHFXBhH"
-Content-Disposition: inline
-In-Reply-To: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
-User-Agent: Mutt/1.5.11
-Status: RO
-Content-Length: 2875
-Lines: 69
-
-
---ReaqsoxgOBHFXBhH
-Content-Type: text/plain; charset=us-ascii
-Content-Disposition: inline
-Content-Transfer-Encoding: quoted-printable
-
-Both I and my ego thank you for considering me (again) for the technical
-committee.
-
-Upon reviewing the recent decisions of the technical committee, I was
-struck by the slim influence that the committee's decisions seem to have
-on the project. Of the decisions listed on the web page:
-
-1. After the committee went to great lengths to avoid cardinfo needing
-   to be split out of pcmcia-cs, it was removed from the package this
-   year with the comment from the (new) maintainer that:
-
-     * Removed the graphical cardinfo utility. I don't think anybody uses it
-       and it should be in a separate package anyway.
-
-2. After overruling the kernel maintainer on whether versafb should be
-   compiled into the kernel, he (I think) ignored the committee, added
-   lots of patches to make it a module, and closed the bugs. Now 4 years
-   later the new kernel maintainers are planning to ditch those patches
-   due to the maintenance load, and build it into the kernel, which will
-   finally comply with the committee's decision, although I don't know
-   that the committee's ruling influenced their decision at all.
-
-3. The maintainer of md5sum ignored for 1.5 years the committee's decision
-   on its output. When someone finally noticed that change was not made,
-   he stated that:
-
-      I'm frankly going to ignore this unless the tech ctte revisits it.
-      AFAICT this was dealt with in the tech ctte because it was a pet peeve
-      of ian jackson. I find it vaguely disturbing that there was an entire
-      thread about changing the behavior of a program in coreutils that *was
-      never mentioned to the coreutils maintainer*.=20
-
-4. amd64 is indeed being used as the name of that port, although it is
-   still not an official Debian port. Newer architectures (such as armeb)
-   seem to be getting their names decided without recourse the the
-   technical committee.
-
-So with one success out of four, there seems to be a problem with either
-the follow-through on decisions of the committee, or not enough weight
-is being given to those decisions, or perhaps the issues that come to
-the committee are not actually very important compared to others in
-Debian.
-
-My time to work on Debian is not unlimited and this does not seem to be
-the most productive place I could spend it, so I must once again decline
-the offer to serve on the technical committee.
-
---=20
-see shy jo
-
---ReaqsoxgOBHFXBhH
-Content-Type: application/pgp-signature; name="signature.asc"
-Content-Description: Digital signature
-Content-Disposition: inline
-
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.2 (GNU/Linux)
-
-iD8DBQFDp0Swd8HHehbQuO8RAtuxAKCWoB5Rc4ltfWb3krsoysqzHHUk0QCg6IUb
-bM79Q6jtwAvLe7VEAGCiHRY=
-=SJ3L
------END PGP SIGNATURE-----
-
---ReaqsoxgOBHFXBhH--

foo
diff --git a/ctte-nomination-reply.txt b/ctte-nomination-reply.txt
new file mode 100644
index 0000000..e443ce8
--- /dev/null
+++ b/ctte-nomination-reply.txt
@@ -0,0 +1,90 @@
+From joey Mon Dec 19 18:39:28 2005
+Date: Mon, 19 Dec 2005 18:39:28 -0500
+X-OfflineIMAP-1326022817-6b697465-494e424f582e53656e74: 1135037001-0644317843492-v4.0.11
+From: Joey Hess <joeyh@debian.org>
+To: Manoj Srivastava <srivasta@debian.org>
+Cc: Branden Robinson / Debian Project Leader <leader@debian.org>,
+	debian-ctte-private@lists.debian.org
+Subject: Re: [Branden Robinson / Debian Project Leader] solicitation for interest in joining Technical Committee
+Message-ID: <20051219233928.GA32095@kitenet.net>
+References: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
+MIME-Version: 1.0
+Content-Type: multipart/signed; micalg=pgp-sha1;
+	protocol="application/pgp-signature"; boundary="ReaqsoxgOBHFXBhH"
+Content-Disposition: inline
+In-Reply-To: <87vexn6psv.fsf@glaurung.internal.golden-gryphon.com>
+User-Agent: Mutt/1.5.11
+Status: RO
+Content-Length: 2875
+Lines: 69
+
+
+--ReaqsoxgOBHFXBhH
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+Content-Transfer-Encoding: quoted-printable
+
+Both I and my ego thank you for considering me (again) for the technical
+committee.
+
+Upon reviewing the recent decisions of the technical committee, I was
+struck by the slim influence that the committee's decisions seem to have
+on the project. Of the decisions listed on the web page:
+
+1. After the committee went to great lengths to avoid cardinfo needing
+   to be split out of pcmcia-cs, it was removed from the package this
+   year with the comment from the (new) maintainer that:
+
+     * Removed the graphical cardinfo utility. I don't think anybody uses it
+       and it should be in a separate package anyway.
+
+2. After overruling the kernel maintainer on whether versafb should be
+   compiled into the kernel, he (I think) ignored the committee, added
+   lots of patches to make it a module, and closed the bugs. Now 4 years
+   later the new kernel maintainers are planning to ditch those patches
+   due to the maintenance load, and build it into the kernel, which will
+   finally comply with the committee's decision, although I don't know
+   that the committee's ruling influenced their decision at all.
+
+3. The maintainer of md5sum ignored for 1.5 years the committee's decision
+   on its output. When someone finally noticed that change was not made,
+   he stated that:
+
+      I'm frankly going to ignore this unless the tech ctte revisits it.
+      AFAICT this was dealt with in the tech ctte because it was a pet peeve
+      of ian jackson. I find it vaguely disturbing that there was an entire
+      thread about changing the behavior of a program in coreutils that *was
+      never mentioned to the coreutils maintainer*.=20
+
+4. amd64 is indeed being used as the name of that port, although it is
+   still not an official Debian port. Newer architectures (such as armeb)
+   seem to be getting their names decided without recourse the the
+   technical committee.
+
+So with one success out of four, there seems to be a problem with either
+the follow-through on decisions of the committee, or not enough weight
+is being given to those decisions, or perhaps the issues that come to
+the committee are not actually very important compared to others in
+Debian.
+
+My time to work on Debian is not unlimited and this does not seem to be
+the most productive place I could spend it, so I must once again decline
+the offer to serve on the technical committee.
+
+--=20
+see shy jo
+
+--ReaqsoxgOBHFXBhH
+Content-Type: application/pgp-signature; name="signature.asc"
+Content-Description: Digital signature
+Content-Disposition: inline
+
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v1.4.2 (GNU/Linux)
+
+iD8DBQFDp0Swd8HHehbQuO8RAtuxAKCWoB5Rc4ltfWb3krsoysqzHHUk0QCg6IUb
+bM79Q6jtwAvLe7VEAGCiHRY=
+=SJ3L
+-----END PGP SIGNATURE-----
+
+--ReaqsoxgOBHFXBhH--

update
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
index 18b871b..38fdcbb 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
@@ -10,5 +10,7 @@ the math about when to wake up, etc -- but systemd already did.
 Also, notice that this is a composable solution; I can have multiple wakeup
 jobs that wake up at the same or different times, do activities of
 different lengths, etc. The laptop will be set to wake up at the next time
-any such job is scheduled to run.
+any such job is scheduled to run. It will keep running until no such jobs
+remain running and then, as long as the lid is closed, it will go back to
+sleep.
 """]]

comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
new file mode 100644
index 0000000..18b871b
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_8_6a47092491b426b9f7e3844e6d91c7c7._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 8"""
+ date="2014-11-18T14:46:24Z"
+ content="""
+I suspend my laptop by closing its lid at some random time.
+I could build everything needed to make rtcwake run on lid close, do
+the math about when to wake up, etc -- but systemd already did.
+
+Also, notice that this is a composable solution; I can have multiple wakeup
+jobs that wake up at the same or different times, do activities of
+different lengths, etc. The laptop will be set to wake up at the next time
+any such job is scheduled to run.
+"""]]

Added a comment: why not just
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_7_2415dc124c96feb589582ab762616508._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_7_2415dc124c96feb589582ab762616508._comment
new file mode 100644
index 0000000..97ec8e1
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_7_2415dc124c96feb589582ab762616508._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkQQKKnSwCo39-9IEoQI_bi5FjFjbVMPpU"
+ nickname="Mark"
+ subject="why not just "
+ date="2014-11-18T11:13:52Z"
+ content="""
+rtcwake -m mem -s 120 && /path/script 
+
+in a cron job?  I would guess it's about entering sleep again?
+
+Seems like a very complex way to solve a simple problem?
+"""]]

Added a comment: Sad story and I liked the fish
diff --git a/blog/entry/on_leaving/comment_4_ed9ed082c5a65cd4630fdf520f3abbd7._comment b/blog/entry/on_leaving/comment_4_ed9ed082c5a65cd4630fdf520f3abbd7._comment
new file mode 100644
index 0000000..b4e2c31
--- /dev/null
+++ b/blog/entry/on_leaving/comment_4_ed9ed082c5a65cd4630fdf520f3abbd7._comment
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkZRMYUHCCNbLDOcTC4hN00jK7mrOZoakM"
+ nickname="Sedat"
+ subject="Sad story and I liked the fish"
+ date="2014-11-16T03:04:08Z"
+ content="""
+It's a big loss, really. I remember your vital help, even for my questions via private email.
+Right now I followed your thread on debian-devel and read some replies.
+Doing so, I got some more helpful informations like autopkg-testing from pitti, etc.
+While my reading I remembered my initial contributions to Debian's systemd.
+At the beginning I was impressed and if I had ever knew.
+NO, you never know :-)!
+
+I lost my parents the last two years and I had to dissolve their household after 35+ years.
+\"Life is change\", look ahead and live in the present, that counts.
+
+Chapeau,
+Sedat (dileks on IRC)
+"""]]

Added a comment: Good luck!
diff --git a/blog/entry/on_leaving/comment_3_405a226354eb7c1416376058d6fbdfc3._comment b/blog/entry/on_leaving/comment_3_405a226354eb7c1416376058d6fbdfc3._comment
new file mode 100644
index 0000000..e1f3b19
--- /dev/null
+++ b/blog/entry/on_leaving/comment_3_405a226354eb7c1416376058d6fbdfc3._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlYPDgJVIC9eiG2E7I480vFHmmWXn0Nauc"
+ nickname="Piruthiviraj"
+ subject="Good luck!"
+ date="2014-11-15T03:59:21Z"
+ content="""
+I am a Arch linux user and contributed to Debian wiki couple of times and I have read so much good things about you on the Debian media and I have to wish you good luck in your future endeavors. 
+All that is gold does not glitter, Not all those who wander are lost; The old that is strong does not wither, Deep roots are not reached by the frost. - J. R. R. Tolkien, The Fellowship of the Ring
+
+"""]]

Added a comment: So...
diff --git a/blog/entry/on_leaving/comment_2_d53cc99b266af3a3fb27f699e9744627._comment b/blog/entry/on_leaving/comment_2_d53cc99b266af3a3fb27f699e9744627._comment
new file mode 100644
index 0000000..7ae332c
--- /dev/null
+++ b/blog/entry/on_leaving/comment_2_d53cc99b266af3a3fb27f699e9744627._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawk6i-hhgN2tbRxiWto6NnuTCUeLvnhb5s0"
+ nickname="Joshua"
+ subject="So..."
+ date="2014-11-14T21:39:50Z"
+ content="""
+Will you still be using Debian or moving on to a different distribution?
+"""]]

Added a comment: Supporting comment :)
diff --git a/blog/entry/on_leaving/comment_1_0958c977c8faa26b1a52c11f309d51d3._comment b/blog/entry/on_leaving/comment_1_0958c977c8faa26b1a52c11f309d51d3._comment
new file mode 100644
index 0000000..805ad5d
--- /dev/null
+++ b/blog/entry/on_leaving/comment_1_0958c977c8faa26b1a52c11f309d51d3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmNXyFwYjjrWNNIsNueKKhpcFd7cFpX_L0"
+ nickname="Rafael"
+ subject="Supporting comment :)"
+ date="2014-11-13T22:10:12Z"
+ content="""
+I am not an active volunteer on Debian (I maintained two packages which are orphaned now), but you are a person I've always looked up to. We never met, but I love reading your blog entries and source codes. I'm sad to see you leaving Debian (now there are no hopes of ever seeing a Haskell dh :P). I will keep following your coding endeavors. Do you think of, some day, joining other linux distribution development?
+"""]]

on leaving
diff --git a/blog/entry/on_leaving.mdwn b/blog/entry/on_leaving.mdwn
new file mode 100644
index 0000000..1ba94fc
--- /dev/null
+++ b/blog/entry/on_leaving.mdwn
@@ -0,0 +1,47 @@
+I left Debian. I don't really have a lot to say about why, but I do
+want to clear one thing up right away. It's not about systemd.
+
+As far as systemd goes, I agree with my friend John Goerzen:
+
+> I promise you – 18 years from now, it will not matter what init Debian chose
+> in 2014. It will probably barely matter in 3 years.
+
+[read the rest](http://changelog.complete.org/archives/9255-debian-a-plea-to-worry-about-what-matters-and-not-take-ourselves-too-seriously)
+
+And with Jonathan Corbet:
+
+> However things turn out, if it becomes clear that there is a better solution
+> than systemd available, we will be able to move to it. 
+
+[read the rest](http://lwn.net/Articles/619992/)
+
+I have no problem with trying out a piece of Free Software, that might have
+abrasive authors, all kinds of technical warts, a debatable design, scope
+creep etc. None of that stopped me from giving Linux a try in 1995, and I'm
+glad I jumped in with both feet.
+
+It's important to be unafraid to make a decision, try it out, and if it doesn't
+work, be unafraid to iterate, rethink, or throw a bad choice out. That's how
+progress happens. Free Software empowers us to do this.
+
+Debian used to be a lot better at that than it is now. This seems to have less
+to do with the size of the project, and more to do with the project having
+aged, ossified, and become comfortable with increasing layers of complexity
+around how it makes decisions. To the point that I no longer feel I can
+understand the decision-making process at all ... or at least, that I'd rather
+be spending those scarce brain cycles on understanding something equally
+hard but more useful, like category theory.
+
+It's been a long time since Debian was my main focus; I feel much more
+useful when I'm working in a small nimble project, making fast and loose
+decisions and iterating on them. Recent events brought it to a head, but
+this is not a new feeling. I've been less and less involved in Debian since
+2007, when I dropped maintaining any packages I wasn't the upstream author
+of, and took a year of mostly ignoring the larger project. 
+
+Now I've made the shift from being a Debian developer to being an upstream
+author of stuff in Debian (and other distros). It seems best to make a clean
+break rather than hang around and risk being sucked back in.
+
+My mailbox has been amazing over the past week by the way. I've heard from
+so many friends, and it's been very sad but also beautiful.

wording
diff --git a/blog/entry/continuing_to_be_pleasantly_surprised.mdwn b/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
index 74c838b..d108693 100644
--- a/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
+++ b/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
@@ -4,7 +4,8 @@ continue that streak.
 
 The latest is that I'm being funded for a couple of years to work part-time
 on git-annex. The funding comes from the [DataLad project](http://datalad.org/),
-which was recently awarded by [National Science Foundation](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1429999).
+which was recently awarded a grant by the 
+[National Science Foundation](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1429999).
 DataLad folks (at Dartmouth College and at Magdeburg University in Germany)
 are working on providing easy access to scientific data (particularly
 neuroimaging). So git-annex will actually be used for science!

blog
diff --git a/blog/entry/continuing_to_be_pleasantly_surprised.mdwn b/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
new file mode 100644
index 0000000..74c838b
--- /dev/null
+++ b/blog/entry/continuing_to_be_pleasantly_surprised.mdwn
@@ -0,0 +1,21 @@
+Free software has been my career for a long time -- nothing else since 1999 --
+and it continues to be a happy surprise each time I find a way to
+continue that streak.
+
+The latest is that I'm being funded for a couple of years to work part-time
+on git-annex. The funding comes from the [DataLad project](http://datalad.org/),
+which was recently awarded by [National Science Foundation](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1429999).
+DataLad folks (at Dartmouth College and at Magdeburg University in Germany)
+are working on providing easy access to scientific data (particularly
+neuroimaging). So git-annex will actually be used for science!
+
+I'm being funded for around 30 hours of work each month, to do
+general work on the git-annex core (not on the webapp or assistant).
+That includes bugfixes and some improvements that are wanted for
+DataLad, but are all themselves generally useful.
+([see issue list](https://github.com/datalad/datalad/issues?q=is%3Aopen+label%3Agit-annex))
+
+This is enough to get by on, at least in my current living situation. It
+would be great if I could find some funding for my other work time -- but
+it's also wonderful to have the flexibility to spend time on whatever other
+interesting projects I might want to.

Added a comment: A recommendation for you
diff --git a/blog/entry/new_and_old_laptops/comment_2_543a3d41c7fc06dec5df7b0326127cab._comment b/blog/entry/new_and_old_laptops/comment_2_543a3d41c7fc06dec5df7b0326127cab._comment
new file mode 100644
index 0000000..ea50eda
--- /dev/null
+++ b/blog/entry/new_and_old_laptops/comment_2_543a3d41c7fc06dec5df7b0326127cab._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnfZFpLbVv9n44IaC4V5-yhW9lRVXAzr10"
+ nickname="Fang"
+ subject="A recommendation for you"
+ date="2014-11-10T18:14:03Z"
+ content="""
+I just noted that you want an eink display laptop. There is one that is very close, it's the 10.1 pixel qi display. I have one that works very well on a samsung n145, I am sure you can put it on the dell mini if you can figure out how to turn off the backlight. From my experience it works very well outdoors, and you can display videos too. You can get one of the display on ebay or from taobao.
+I am really sorry to hear that you are leaving debian.
+Wish you all the best.
+Q
+"""]]

update
diff --git a/code/debian-installer/dilab.mdwn b/code/debian-installer/dilab.mdwn
index ba2108c..5b7d17d 100644
--- a/code/debian-installer/dilab.mdwn
+++ b/code/debian-installer/dilab.mdwn
@@ -1,5 +1,7 @@
 [[!meta title="debian-installer test lab"]]
-	
+
+** This is no longer operational. **
+
 [[!img rack.jpg size="200x400"]]
 	
 The debian-installer test lab is used by d-i developers to perform

tense
diff --git a/code/debian-installer.mdwn b/code/debian-installer.mdwn
index d270102..5573352 100644
--- a/code/debian-installer.mdwn
+++ b/code/debian-installer.mdwn
@@ -1,6 +1,5 @@
 A while ago I designed and then on and off led development of [[Debian]]'s
-new installer. It's been quite a successful project and I remain active in
-it.
+new installer. It's been quite a successful project.
 
 I wrote a [[blog/entry/d-i_retrospective]] on the first four years of
 working on debian-installer in my blog, with some cool graphs.
@@ -8,6 +7,6 @@ working on debian-installer in my blog, with some cool graphs.
 Its website is formally <http://www.debian.org/devel/debian-installer>, but 
 <http://wiki.debian.org/DebianInstaller> is perhaps more interesting.
 
-The [[dilab]] is my own rack of d-i test
+The [[dilab]] was my own rack of d-i test
 machines. This runs on `digress`, the d-i regression suite, which is the
 most obscure part of d-i I know of, and which I wrote.

update for debian retirement
diff --git a/code.mdwn b/code.mdwn
index ac175f0..93302ef 100644
--- a/code.mdwn
+++ b/code.mdwn
@@ -7,35 +7,21 @@ The stuff that's swapped into my local cache at the moment.
 
 [[git-annex]]
 [[ikiwiki]]
-[[ikiwiki-hosting]]
-[[Debian]]
-[[debian-installer]]
-[[debhelper]]
-[[moreutils]]
+[[propellor]]
 [[myrepos|mr]]
 [[etckeeper]]
-[[mpdtoys]]
-[[tasksel]]
-[[debmirror]]
+[[moreutils]]
+[[ikiwiki-hosting]]
 [[github-backup]]
-[[propellor]]
+[[mpdtoys]]
 
 ## Less active projects
 
-In maintenance mode, or handled more by others, mostly, but I still
-have my hands in it somewhat.
+In maintenance mode mostly, but I still have my hands in it somewhat.
 
-[[alien]]
-[[debconf]]
-[[dpkg-repack]]
 [[Words2Nums]]
 [[pdmenu]]
 [[filters]]
-[[os-prober]]
-[[devscripts]]
-[[rootsync]]
-[[nslu2-utils]]
-[[jetring]]
 
 ## Past projects
 
@@ -46,6 +32,11 @@ continued life:
 
 Passed on to others, or dead and buried:
 
+[[Debian]]
+[[debian-installer]]
+[[debhelper]]
+[[tasksel]]
+[[debmirror]]
 [[shoop]]
 [[apt-src]]
 [[pentium-builder]]
@@ -58,6 +49,14 @@ Passed on to others, or dead and buried:
 [[wmbattery]]
 [[sleepd]]
 [[pristine-tar]]
+[[alien]]
+[[debconf]]
+[[dpkg-repack]]
+[[os-prober]]
+[[devscripts]]
+[[jetring]]
+[[nslu2-utils]]
+[[rootsync]]
 
 ## Misc
 
@@ -75,10 +74,8 @@ pages I add to this site, and [[grep]] aggregates my recent commits.
 Also, [Ohloh](http://www.ohloh.net/accounts/6835) tracks and mines my commits to many projects 
 for interesting metrics.
 
-[Here](http://qa.debian.org/popcon-graph.php?packages=etckeeper+mr+pristine-tar+ikiwiki+mpdtoys&show_installed=on&want_legend=on&want_ticks=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1)
+[Here](http://qa.debian.org/popcon-graph.php?packages=etckeeper+mr+propellor+ikiwiki+git-annex&show_installed=on&want_legend=on&want_ticks=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1)
 is a graph of Debian popcon stats for my newest projects.
-[Here](http://qa.debian.org/popcon-graph.php?packages=nslu2-utils+lingua-en-words2nums-perl+jetring+moreutils+dpkg-repack+wmbattery+sleepd+filters+satutils+ticker+flashybrid&show_installed=on&want_legend=on&want_ticks=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1)
-is a graph for my older, more-established projects, and
 [here](http://qa.debian.org/popcon-graph.php?packages=alien+debhelper+debconf+tasksel+os-prober&show_installed=on&want_legend=on&want_ticks=on&from_date=&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1)
 is a graph for my most popular projects. I assume popcon only reflects 1/10th
 to 1/100th or less of total users.

update; left debian
diff --git a/code/debian.mdwn b/code/debian.mdwn
index c36d5cb..7933a26 100644
--- a/code/debian.mdwn
+++ b/code/debian.mdwn
@@ -11,7 +11,7 @@ subprojects _of_ Debian, and while nearly anything else on the whole wiki
 is probably available _in_ Debian, all that is just a fraction of all the
 work I've done _for_ Debian.
 
-## Some of Joey's random plans for Debian[1][2]
+## Some of Joey's random plans for Debian[1][2][3]
 
 * Make [[testing]] a proper Debian release that releases at some sane rate (unlike stable).
 
@@ -38,41 +38,12 @@ work I've done _for_ Debian.
   developer's reference, or the RM's list of RC type issues, or something
   like that, and leave policy as-is.
 
-* Get all my packages lintian clean (eg, fix lintian ;-)
-
-* Fix all my [bugs](http://bugs.debian.org/joeyh@debian.org) (eg, orphan buggy packages ;-)
-
-* Find co-maintainers for all my packages; move all package repos to alioth.
-
-* Completely change everything I'm working on in Debian at least once per 5 years.
-
-* Propose a vote to try to double DPL term of office.
-
-  It's nice for the project to examine itself every year in the DPL elections, but it loses a month or two doing it, and one year is not enough time to bring many plans, such as the ones listed above, to fruition. Not that I'm planning to run for DPL or anything, oh no..
-
 * Make <http://wiki.debian.org> supplant <http://www.debian.org> as the most important website of the project.
 
-* zeroconf and mdns goodness on Debian
-
-   - <http://wiki.debian.org/ZeroConf>
-   - really need to set up that mailing list
-
-* Clean up the embedded debian stuff we use at work (busybox-links, 
-  adsrootbuilder etc) and integrate it into Debian. See also: 
-  [[blog/entry/replacing_stuff_with_busybox]]:
-
-    > In the future, I for one would like to see a broad agreement in Debian
-    > that making init scripts and the like compatable with busybox is worth 
-    > doing if it doesn't make them significantly slower or uglier. 
-
-* Add a tasksel task to install software to back the machine up. backupninja is a nice frontend to several backup tools. Needs more thought..
-
-* Make dinstall/archive sync happen more frequently, AKA increase the
-  heartbeat of the project. (Already doubled to 2x/day, I would prefer
-  6x/day.)
-
 * Work on [[blog/entry/ending_the_tyranny_of_unix_permissions]]!
 
 ----
 [1] Plans may not be sufficiently random for government use.  
 [2] Goals in mirror may be closer than they appear.  
+[3] Trimmed down now that I've left Debian to the ones I really wish I'd
+    gotten to when I had the chance.

add news item for github-backup 1.20141110
diff --git a/code/github-backup/news/version_1.20140720.mdwn b/code/github-backup/news/version_1.20140720.mdwn
deleted file mode 100644
index 5d8f796..0000000
--- a/code/github-backup/news/version_1.20140720.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-github-backup 1.20140720 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Deal with trailing slashes on github repo urls. Closes: #[755261](http://bugs.debian.org/755261)
-   * Fix bug introduced by change to embedded git libraries
-     in last release. Closes: #[755262](http://bugs.debian.org/755262)"""]]
\ No newline at end of file
diff --git a/code/github-backup/news/version_1.20141110.mdwn b/code/github-backup/news/version_1.20141110.mdwn
new file mode 100644
index 0000000..2c24e28
--- /dev/null
+++ b/code/github-backup/news/version_1.20141110.mdwn
@@ -0,0 +1,4 @@
+github-backup 1.20141110 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package.
+     (I continue to maintain github-backup upstream.)"""]]
\ No newline at end of file

add news item for filters 2.53
diff --git a/code/filters/news/version_2.46.mdwn b/code/filters/news/version_2.46.mdwn
deleted file mode 100644
index 57d03eb..0000000
--- a/code/filters/news/version_2.46.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-filters 2.46 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * fanboy: Improve docs and remove from SAMPLES. Closes: #[496588](http://bugs.debian.org/496588)"""]]
\ No newline at end of file
diff --git a/code/filters/news/version_2.53.mdwn b/code/filters/news/version_2.53.mdwn
new file mode 100644
index 0000000..aa06a5e
--- /dev/null
+++ b/code/filters/news/version_2.53.mdwn
@@ -0,0 +1,3 @@
+filters 2.53 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for moreutils 0.53
diff --git a/code/moreutils/news/version_0.47.mdwn b/code/moreutils/news/version_0.47.mdwn
deleted file mode 100644
index cbc697c..0000000
--- a/code/moreutils/news/version_0.47.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-moreutils 0.47 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * errno: New utility that looks up errno numbers or names."""]]
\ No newline at end of file
diff --git a/code/moreutils/news/version_0.53.mdwn b/code/moreutils/news/version_0.53.mdwn
new file mode 100644
index 0000000..4a86bd2
--- /dev/null
+++ b/code/moreutils/news/version_0.53.mdwn
@@ -0,0 +1,3 @@
+moreutils 0.53 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for pdmenu 1.3.4
diff --git a/code/pdmenu/news/version_1.2.99.mdwn b/code/pdmenu/news/version_1.2.99.mdwn
deleted file mode 100644
index 4c7d09b..0000000
--- a/code/pdmenu/news/version_1.2.99.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-pdmenu 1.2.99 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Add Danish translation from Joe Dalton. Closes: #[609579](http://bugs.debian.org/609579)"""]]
\ No newline at end of file
diff --git a/code/pdmenu/news/version_1.3.4.mdwn b/code/pdmenu/news/version_1.3.4.mdwn
new file mode 100644
index 0000000..b638306
--- /dev/null
+++ b/code/pdmenu/news/version_1.3.4.mdwn
@@ -0,0 +1,3 @@
+pdmenu 1.3.4 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for liblingua-en-words2nums-perl 0.19
diff --git a/code/words2nums/news/version_0.14.mdwn b/code/words2nums/news/version_0.14.mdwn
deleted file mode 100644
index c7c83aa..0000000
--- a/code/words2nums/news/version_0.14.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-liblingua-en-words2nums-perl 0.14 released with these changes:
-
-   * Remove the tests that involve exponentents, as they may not on 64 bit
-     machines, and will cause false test failures. Closes: #[250610](http://bugs.debian.org/250610)
\ No newline at end of file
diff --git a/code/words2nums/news/version_0.19.mdwn b/code/words2nums/news/version_0.19.mdwn
new file mode 100644
index 0000000..f08188c
--- /dev/null
+++ b/code/words2nums/news/version_0.19.mdwn
@@ -0,0 +1,3 @@
+liblingua-en-words2nums-perl 0.19 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaning the Debian package."""]]
\ No newline at end of file

add news item for mpdtoys 0.25
diff --git a/code/mpdtoys/news/version_0.20.mdwn b/code/mpdtoys/news/version_0.20.mdwn
deleted file mode 100644
index e3d5267..0000000
--- a/code/mpdtoys/news/version_0.20.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-mpdtoys 0.20 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Work around bug #548305."""]]
\ No newline at end of file
diff --git a/code/mpdtoys/news/version_0.25.mdwn b/code/mpdtoys/news/version_0.25.mdwn
new file mode 100644
index 0000000..8f90429
--- /dev/null
+++ b/code/mpdtoys/news/version_0.25.mdwn
@@ -0,0 +1,3 @@
+mpdtoys 0.25 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for etckeeper 1.16
diff --git a/code/etckeeper/news/version_1.11.mdwn b/code/etckeeper/news/version_1.11.mdwn
deleted file mode 100644
index c50fcce..0000000
--- a/code/etckeeper/news/version_1.11.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-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.16.mdwn b/code/etckeeper/news/version_1.16.mdwn
new file mode 100644
index 0000000..91d93b4
--- /dev/null
+++ b/code/etckeeper/news/version_1.16.mdwn
@@ -0,0 +1,6 @@
+etckeeper 1.16 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Added support for Fedora's DNF highlevel package manager.
+     Thanks, Peter Listiak and Petr Spacek.
+   * Add architecture info to dpkg list-installed. Closes: #[768145](http://bugs.debian.org/768145)
+   * Orphaned the Debian package."""]]
\ No newline at end of file

add news item for alien 8.93
diff --git a/code/alien/news/version_8.87.mdwn b/code/alien/news/version_8.87.mdwn
deleted file mode 100644
index 5fdd13a..0000000
--- a/code/alien/news/version_8.87.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-alien 8.87 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Use lsb-rpmbuild, not lsb-rpm. Closes: #[667044](http://bugs.debian.org/667044)
-   * Fix adding of postinst script to deb, containing rpm permissions
-     fixups code. Closes: #[667651](http://bugs.debian.org/667651)"""]]
\ No newline at end of file
diff --git a/code/alien/news/version_8.93.mdwn b/code/alien/news/version_8.93.mdwn
new file mode 100644
index 0000000..afdb329
--- /dev/null
+++ b/code/alien/news/version_8.93.mdwn
@@ -0,0 +1,3 @@
+alien 8.93 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Alien needs a new maintainer, both in Debian and upstream."""]]
\ No newline at end of file

add news item for debhelper 9.20141107
diff --git a/code/debhelper/news/version_9.20140809.mdwn b/code/debhelper/news/version_9.20140809.mdwn
deleted file mode 100644
index 4774c3f..0000000
--- a/code/debhelper/news/version_9.20140809.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-debhelper 9.20140809 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * dh\_perl: Add perlapi-* dependency on packages installed to
-     $Config{vendorarch} Closes: #[751684](http://bugs.debian.org/751684)
-   * dh\_perl: Use vendorlib and vendorarch from Config instead of
-     hardcoding their values. Closes: #[750021](http://bugs.debian.org/750021)
-   * Typo: Closes: #[755237](http://bugs.debian.org/755237)"""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20141107.mdwn b/code/debhelper/news/version_9.20141107.mdwn
new file mode 100644
index 0000000..9c226c0
--- /dev/null
+++ b/code/debhelper/news/version_9.20141107.mdwn
@@ -0,0 +1,3 @@
+debhelper 9.20141107 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * I'm leaving Debian, and Debhelper needs a new maintainer."""]]
\ No newline at end of file

syntax
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 1416195..e5b9148 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -42,7 +42,7 @@ ConditionACPower=true
 
 [Service]
 Type=oneshot
-ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /usr/bin/timeout 45m /home/joey/bin/goodmorning
+ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c "/usr/bin/timeout 45m /home/joey/bin/goodmorning"
 </pre>
 
 ## installation

add timeout
Prevents scenario where eg, mail fetch stalls and keeps laptop on.
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 7963427..1416195 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -42,7 +42,7 @@ ConditionACPower=true
 
 [Service]
 Type=oneshot
-ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /home/joey/bin/goodmorning
+ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /usr/bin/timeout 45m /home/joey/bin/goodmorning
 </pre>
 
 ## installation

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_6_7f13435cdfd83f8eb0a3520c06061046._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_6_7f13435cdfd83f8eb0a3520c06061046._comment
new file mode 100644
index 0000000..99f939a
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_6_7f13435cdfd83f8eb0a3520c06061046._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkyvp3cHZUjFtgqf5gTg-QoYBZ-kpkgUDc"
+ nickname="Maik"
+ subject="comment 6"
+ date="2014-11-03T13:53:07Z"
+ content="""
+Generally nice, but I really don't see why this needs to be:
+
+> Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+
+So why can't I give that privilege to the user? A normal user shouldn't have to touch root for user-tasks like this. Please, Mr. Pöttering, please, please, please, spend a month with a group of experienced sys admins. Maybe then you will see the errors of your ways and why systemd is a nice toy but not a serious tool.
+"""]]

add news item for github-backup 1.20141031
diff --git a/code/github-backup/news/version_1.20140707.mdwn b/code/github-backup/news/version_1.20140707.mdwn
deleted file mode 100644
index ed63eea..0000000
--- a/code/github-backup/news/version_1.20140707.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-github-backup 1.20140707 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Add --exclude to skip backing up a specific repository
-     when backing up a user or organization's repositories.
-     Closes: #[754072](http://bugs.debian.org/754072)
-   * Converted to using optparse-applicative.
-   * Multiple usernames can now be specified to back up at once."""]]
\ No newline at end of file
diff --git a/code/github-backup/news/version_1.20141031.mdwn b/code/github-backup/news/version_1.20141031.mdwn
new file mode 100644
index 0000000..8a79eda
--- /dev/null
+++ b/code/github-backup/news/version_1.20141031.mdwn
@@ -0,0 +1,7 @@
+github-backup 1.20141031 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Adjust cabal file for network-uri split.
+   * Avoid using optparse-applicate's argument combinator, so it will build
+     with 0.11 and older too.
+   * Various updates to internal git and utility libraries shared with
+     git-annex."""]]
\ No newline at end of file

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_5_057aff1b495bd7f5f58d5a25914382e6._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_5_057aff1b495bd7f5f58d5a25914382e6._comment
new file mode 100644
index 0000000..25b0067
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_5_057aff1b495bd7f5f58d5a25914382e6._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkwGyT-xQG956hj3PjmNMoQb_iqdOALS9Q"
+ nickname="Mantas"
+ subject="comment 5"
+ date="2014-10-28T10:09:34Z"
+ content="""
+I think almost all x86 systems have a RTC with wake support.
+
+The \"\*IgnoreInhibited\" settings shouldn't be needed; they're about the lid overriding normal \"sleep\" inhibitors, not handle-\* ones.
+"""]]

Added a comment: per-user unit
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_4_225414e1d42e4882c5f6979d66734dec._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_4_225414e1d42e4882c5f6979d66734dec._comment
new file mode 100644
index 0000000..bd808c8
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_4_225414e1d42e4882c5f6979d66734dec._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkk-9UbXJdtsz_3c1Sxjo7TCAPlfm5zE08"
+ nickname="Lennart"
+ subject="per-user unit"
+ date="2014-10-28T09:56:57Z"
+ content="""
+Heya! Unfortunately this wouldn't work as a per-user unit btw, as WakeSystem= timers require privileges.
+
+The Unit=goodmorning.service line is implied btw. Persistent=false is the default, so could be dropped too.
+
+Lennart
+"""]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_3_54c05708f76ff01b74272ce6813aa60e._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_3_54c05708f76ff01b74272ce6813aa60e._comment
new file mode 100644
index 0000000..9224d69
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_3_54c05708f76ff01b74272ce6813aa60e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmeUbp_bTPJg__VA4WR7RFrmocmmkeWwx0"
+ nickname="Franco"
+ subject="comment 3"
+ date="2014-10-28T05:35:03Z"
+ content="""
+crond, this unknown daemon that will do the same in only one line and exists tens of years before systemd...
+"""]]

typo
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 062fcce..7963427 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -66,7 +66,7 @@ available that is.
 
 Also, notice the  `ConditionACPower=true`, which I added once I realized I
 don't want the job to run if I forgot to leave the laptop plugged in
-overnight. Technically, it will still wake up when on batter power, but
+overnight. Technically, it will still wake up when on battery power, but
 then it should go right back to sleep.
 
 Quite a lot of nice peices of systemd all working together here!

reorg
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index d753641..062fcce 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -55,15 +55,15 @@ is not to let systemd-inhibit block sleep on lid close.
 
 ## almost too easy
 
+I don't think this would be anywhere near as easy to do without systemd,
+logind, etc. Especially the handling of waking the system at the right
+time, and the behavior around lid sleep inhibiting.
+
 The WakeSystem=true relies on some 
 [hardware support for waking from sleep](https://en.wikipedia.org/wiki/Real-time_clock_alarm);
 my laptop supported it with no trouble but I don't know how broadly
 available that is.
 
-I don't think this would be anywhere near as easy to do without systemd,
-logind, etc. Especially the handling of waking the system at the right
-time, and the behavior around lid sleep inhibiting.
-
 Also, notice the  `ConditionACPower=true`, which I added once I realized I
 don't want the job to run if I forgot to leave the laptop plugged in
 overnight. Technically, it will still wake up when on batter power, but

updates
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
index 83c0837..d753641 100644
--- a/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd.mdwn
@@ -15,7 +15,7 @@ This took some time to figure out, but it's surprisingly simple.
 Besides ~/bin/goodmorning, which can be any program/script,
 I needed just two files to configure systemd to do this.
 
-First, `/etc/systemd/system/goodmorning.timer`
+## /etc/systemd/system/goodmorning.timer
 
 <pre>
 [Unit]
@@ -31,7 +31,7 @@ Persistent=false
 WantedBy=multi-user.target
 </pre>
 
-Second, `/etc/systemd/system/goodmorning.service`
+## /etc/systemd/system/goodmorning.service
 
 <pre>
 [Unit]
@@ -42,35 +42,53 @@ ConditionACPower=true
 
 [Service]
 Type=oneshot
-ExecStart=/bin/sh -c 'systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /home/joey/bin/goodmorning; if ! grep -q open /proc/acpi/button/lid/LID0/state; then systemctl suspend; fi'
+ExecStart=/bin/systemd-inhibit --what=handle-lid-switch --why=goodmorning /bin/su joey -c /home/joey/bin/goodmorning
 </pre>
 
-After installing these files, run (as root): `systemctl enable goodmorning.timer; systemctl start goodmorning.timer`
+## installation
+
+After installing those files, run (as root): `systemctl enable goodmorning.timer; systemctl start goodmorning.timer`
 
 Then, you'll also need to edit `/etc/systemd/logind.conf`, and
 set `LidSwitchIgnoreInhibited=no` -- this overrides the default, which
 is not to let systemd-inhibit block sleep on lid close.
 
-The WakeSystem=true relies on some hardware support for waking from sleep;
+## almost too easy
+
+The WakeSystem=true relies on some 
+[hardware support for waking from sleep](https://en.wikipedia.org/wiki/Real-time_clock_alarm);
 my laptop supported it with no trouble but I don't know how broadly
 available that is.
 
 I don't think this would be anywhere near as easy to do without systemd,
 logind, etc. Especially the handling of waking the system at the right
-time, and the behavior around lid sleep inhibiting. Also, notice the 
-`ConditionACPower=true`, which I added once I realized I don't want
-the job to run if I forgot to leave the laptop plugged in overnight.
+time, and the behavior around lid sleep inhibiting.
+
+Also, notice the  `ConditionACPower=true`, which I added once I realized I
+don't want the job to run if I forgot to leave the laptop plugged in
+overnight. Technically, it will still wake up when on batter power, but
+then it should go right back to sleep.
+
 Quite a lot of nice peices of systemd all working together here!
 
-Unfortunately, xfce4-power-manager reimplements its own lid switch handling,
-overriding systemd's, and this cannot be disabled. That's why the ExecStart
-above checks if the lid is still closed at the end, and manually suspends. That
-hack is not necessary when not using xfce4-power-manager.
+## xfce workaround
+
+If using xfce, xfce4-power-manager takes over handling of lid close from
+systemd, and currently prevents the system from going back to sleep if the
+lid is still closed when goodmorning finishes. Happily, there is an easy
+workaround; this configures xfce to not override the lid switch behavior:
 
-(It would perhaps be better to use the per-user systemd, not the system wide
+`xfconf-query -c xfce4-power-manager -n -p /xfce4-power-manager/logind-handle-lid-switch -t bool -s true`
+
+Other desktop environments may have similar issues.
+
+## why not a per-user unit?
+
+It would perhaps be better to use the per-user systemd, not the system wide
 one. Then I could change the time the alarm runs without using root.
+
 What's prevented me from doing this is that systemd-inhibit uses policykit,
 and policykit prevents it from being used in this situation. It's a lot
-easier to run it as root and use su, than it is to reconfigure policykit.)
+easier to run it as root and use su, than it is to reconfigure policykit.
 
 [[!meta title="a programmable alarm clock using systemd"]]

boo
diff --git a/index.mdwn b/index.mdwn
index 12a7a41..fbe185a 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="https://joeyh.name/"
+[[!meta openid="http://joeyh.name/"
 server="http://openid.kitenet.net:8081/simpleid/"]]

switch to https
diff --git a/index.mdwn b/index.mdwn
index fbe185a..12a7a41 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="http://joeyh.name/"
+[[!meta openid="https://joeyh.name/"
 server="http://openid.kitenet.net:8081/simpleid/"]]

Added a comment
diff --git a/blog/entry/a_programmable_alarm_clock_using_systemd/comment_2_3071b3486b4d9f7a2c77a35829f4b5ba._comment b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_2_3071b3486b4d9f7a2c77a35829f4b5ba._comment
new file mode 100644
index 0000000..b819d5b
--- /dev/null
+++ b/blog/entry/a_programmable_alarm_clock_using_systemd/comment_2_3071b3486b4d9f7a2c77a35829f4b5ba._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://www.kitenet.net/"
+ ip="67.223.1.203"
+ subject="comment 2"
+ date="2014-10-27T16:26:59Z"
+ content="""
+systemd-inhibit can only be used in a login session, or by root, that's why the command has to run as root.
+"""]]

openid tweak
diff --git a/index.mdwn b/index.mdwn
index 59a79a9..fbe185a 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="http://kitenet.net/"
+[[!meta openid="http://joeyh.name/"
 server="http://openid.kitenet.net:8081/simpleid/"]]

Revert "openid tweak"
This reverts commit cfff21db8880c746c936110efe95f504d81fb8b5.
diff --git a/index.mdwn b/index.mdwn
index fbe185a..59a79a9 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="http://joeyh.name/"
+[[!meta openid="http://kitenet.net/"
 server="http://openid.kitenet.net:8081/simpleid/"]]

openid tweak
diff --git a/index.mdwn b/index.mdwn
index 59a79a9..fbe185a 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -45,5 +45,5 @@ input#searchbox {
 show=5 feeds=no archive=yes]]
 """]]
 
-[[!meta openid="http://kitenet.net/"
+[[!meta openid="http://joeyh.name/"
 server="http://openid.kitenet.net:8081/simpleid/"]]