Recent changes to this wiki:

add news item for debhelper 9.20130518
diff --git a/code/debhelper/news/version_9.20120909.mdwn b/code/debhelper/news/version_9.20120909.mdwn
deleted file mode 100644
index fedcd1f..0000000
--- a/code/debhelper/news/version_9.20120909.mdwn
+++ /dev/null
@@ -1,11 +0,0 @@
-debhelper 9.20120909 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * autoscript() can now be passed a perl sub to run to s/// lines of
-     the script, which avoids problems with using sed, including potentially
-     building too long a sed command-line. This will become the recommended
-     interface in the future; for now it can be used by specific commands
-     such as dh\_installxmlcatalogs that encounter the problem.
-     Closes: #[665296](http://bugs.debian.org/665296) Thanks, Marcin Owsiany
-   * Updated Spanish man page translation. Closes: #[686291](http://bugs.debian.org/686291)
-   * Updated German man page translation. Closes: #[685538](http://bugs.debian.org/685538)
-   * Updated French man page translation. Closes: #[685560](http://bugs.debian.org/685560)"""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20130518.mdwn b/code/debhelper/news/version_9.20130518.mdwn
new file mode 100644
index 0000000..9956c90
--- /dev/null
+++ b/code/debhelper/news/version_9.20130518.mdwn
@@ -0,0 +1,8 @@
+debhelper 9.20130518 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * dh\_installchangelogs: Write the changelog entry used for a binNMU,
+     as flagged by binary-only=yes to a separate file, in order to work
+     around infelicities in dpkg's multiarch support. Closes: #[708218](http://bugs.debian.org/708218)
+     (Thanks, Ansgar Burchardt)
+   * dh\_installinit: Add versioned dependency on sysv-rc
+     when shipping upstart jobs. Closes: #[708720](http://bugs.debian.org/708720)"""]]
\ No newline at end of file

add news item for debhelper 9.20130516
diff --git a/code/debhelper/news/version_9.20120830.mdwn b/code/debhelper/news/version_9.20120830.mdwn
deleted file mode 100644
index 2443966..0000000
--- a/code/debhelper/news/version_9.20120830.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-debhelper 9.20120830 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * dh\_installcatalogs: Adjust catalog conffile conversion to avoid
-     dpkg conffile prompt when upgrading from a removed package.
-     Closes: #[681194](http://bugs.debian.org/681194)"""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20130516.mdwn b/code/debhelper/news/version_9.20130516.mdwn
new file mode 100644
index 0000000..edfd9bf
--- /dev/null
+++ b/code/debhelper/news/version_9.20130516.mdwn
@@ -0,0 +1,3 @@
+debhelper 9.20130516 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Revert unsetting INSTALL\_BASE. Closes: #[708452](http://bugs.debian.org/708452) Reopens: #705141"""]]
\ No newline at end of file

update
diff --git a/hacker_tombstone.otl b/hacker_tombstone.otl
index 52ca4da..e878ff2 100644
--- a/hacker_tombstone.otl
+++ b/hacker_tombstone.otl
@@ -191,6 +191,14 @@ case studies
 			how well was it carried out? check later
 		memorial
 			http://www.rememberaaronsw.com/
+		ghost
+			http://www.newyorker.com/online/blogs/newsdesk/2013/05/strongbox-and-aaron-swartz.html
+			Nine days after Aaron’s death, his familiar Skype avatar popped up on my
+			computer screen. Somewhere, somebody—probably a family member—had booted up his
+			computer. I fought the irrational urge to click on the icon and resume our
+			conversation. Then he vanished from my screen again.
+			
+
 server issues
 	keep server up or take it down?
 		how long should it stay up?

change example slightly, to use a monadic method to get the size
diff --git a/blog/entry/the_newinwheezy_game:_STM.mdwn b/blog/entry/the_newinwheezy_game:_STM.mdwn
index 4d25ca2..702c8af 100644
--- a/blog/entry/the_newinwheezy_game:_STM.mdwn
+++ b/blog/entry/the_newinwheezy_game:_STM.mdwn
@@ -52,7 +52,8 @@ deadlock. It might be implemented like this:
 
 [[!format haskell """
 getQueuedFile = atomically $
-	if empty downloadQueue
+	size <- getSize downLoadQueue
+	if size == 0
 		then retry
 		else pop downloadQueue
 """]]

Added a comment
diff --git a/blog/entry/the_newinwheezy_game:_STM/comment_2_ef3c3ff9bad1ce4e7a93ced3247318ee._comment b/blog/entry/the_newinwheezy_game:_STM/comment_2_ef3c3ff9bad1ce4e7a93ced3247318ee._comment
new file mode 100644
index 0000000..1befec9
--- /dev/null
+++ b/blog/entry/the_newinwheezy_game:_STM/comment_2_ef3c3ff9bad1ce4e7a93ced3247318ee._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmU_2tE75oyG0h2ZPN4lcroIKEMC8G-otE"
+ nickname="Michael"
+ subject="comment 2"
+ date="2013-05-13T14:25:17Z"
+ content="""
+See also: https://news.ycombinator.com/item?id=5697367
+"""]]

poll vote (watched it all, liked it)
diff --git a/blog/entry/watch_me_code_for_half_an_hour.mdwn b/blog/entry/watch_me_code_for_half_an_hour.mdwn
index 2e63a4e..3b778ab 100644
--- a/blog/entry/watch_me_code_for_half_an_hour.mdwn
+++ b/blog/entry/watch_me_code_for_half_an_hour.mdwn
@@ -14,6 +14,6 @@ Not shown is the hour I spent the next day changing the "optimize"
 subcommand implemented here into "--auto" options that can be passed to
 [[code/git-annex]]'s get and drop commands.
 
-[[!poll 37 "watched it all, liked it" 8 "watched some, boring" 3 "too long for me" 14 "too haskell for me" 12 "not interested"]]
+[[!poll 38 "watched it all, liked it" 8 "watched some, boring" 3 "too long for me" 14 "too haskell for me" 12 "not interested"]]
 
 [[!meta title="watch me program for half an hour"]]

add news item for debhelper 9.20130509
diff --git a/code/debhelper/news/version_9.20120608.mdwn b/code/debhelper/news/version_9.20120608.mdwn
deleted file mode 100644
index 72fbbbd..0000000
--- a/code/debhelper/news/version_9.20120608.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-debhelper 9.20120608 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * dh: When there's an -indep override target without -arch, or vice versa,
-     avoid acting on packages covered by the override target when running
-     the command for packages not covered by it. Closes: #[676462](http://bugs.debian.org/676462)"""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20130509.mdwn b/code/debhelper/news/version_9.20130509.mdwn
new file mode 100644
index 0000000..2652e19
--- /dev/null
+++ b/code/debhelper/news/version_9.20130509.mdwn
@@ -0,0 +1,15 @@
+debhelper 9.20130509 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * dh\_installinit: Remove obsolete systemd-tempfiles hack in postinst
+     autoscript. Closes: #[707159](http://bugs.debian.org/707159)
+   * dh\_installinfo: Stop inserting dependencies for partial upgrades
+     from lenny to squeeze. Closes: #[707218](http://bugs.debian.org/707218)
+   * dh\_compress, dh\_perl: Avoid failing if the package build directory does
+     not exist. (Audited all the rest.)
+   * dh: As a workaround for anything not in debhelper that may rely
+     on debhelper command that is now skipped creating the package build
+     directory as a side effect, the directory is created when a command
+     is skipped. This workaround is disabled in compat level 10.
+     Closes: #[707336](http://bugs.debian.org/707336)
+   * dh\_auto\_install: Create package build directory for those packages
+     whose makefile falls over otherwise. Closes: #[707336](http://bugs.debian.org/707336)"""]]
\ No newline at end of file

add news item for etckeeper 1.3
diff --git a/code/etckeeper/news/version_1.2.mdwn b/code/etckeeper/news/version_1.2.mdwn
deleted file mode 100644
index 8d8d593..0000000
--- a/code/etckeeper/news/version_1.2.mdwn
+++ /dev/null
@@ -1,6 +0,0 @@
-etckeeper 1.2 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Call type -p in a more compatable way.
-   * When a file is owned by a uid or a gid with no corresponding user or
-     group, put a numeric chown into .etckeeper. Previously, a broken
-     chown was outputted."""]]
\ No newline at end of file
diff --git a/code/etckeeper/news/version_1.3.mdwn b/code/etckeeper/news/version_1.3.mdwn
new file mode 100644
index 0000000..c99b642
--- /dev/null
+++ b/code/etckeeper/news/version_1.3.mdwn
@@ -0,0 +1,3 @@
+etckeeper 1.3 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix type -p bashism that crept in via recent patches. Closes: #[707319](http://bugs.debian.org/707319)"""]]
\ No newline at end of file

blog update
diff --git a/blog/entry/faster_dh.mdwn b/blog/entry/faster_dh.mdwn
new file mode 100644
index 0000000..20269f0
--- /dev/null
+++ b/blog/entry/faster_dh.mdwn
@@ -0,0 +1,125 @@
+With wheezy released, the floodgates are opened on a lot of debhelper
+changes that have been piling up. Most of these should be pretty minor, but
+I released one yesterday that will affect all users of `dh`. Hopefully in a
+good way.
+
+I made `dh` smarter about selecting which debhelper commands it runs.
+It can tell when a package does not use the stuff done by a particular
+command, and skips running the command entirely.
+
+So the `debian/rules binary` of a package using `dh`
+will now often look like this:
+
+<pre>
+dh binary
+   dh_testroot
+   dh_prep
+   dh_auto_install
+   dh_installdocs
+   dh_installchangelogs
+   dh_perl
+   dh_link
+   dh_compress
+   dh_fixperms
+   dh_installdeb
+   dh_gencontrol
+   dh_md5sums
+   dh_builddeb
+</pre>
+
+Which is pretty close to the optimal hand-crafted `debian/rules` file (and just
+about as fast, too). But with the benefit that if you later add, say, cron job
+files, `dh_installcron` will automatically start being run too.
+
+Hopefully this will not result in any behavior changes, other than packages
+building faster and with less noise. If there is a bug it'll probably
+be something missing in the specification of when a command needs to be run.
+
+Beyond speed, I hope that this will help to lower the bar to adding new
+commands to debhelper, and to the default dh sequences. Before, every such
+new command slowed things down and was annoying. Now more special-purpose
+commands won't get in the way of packages that don't need them.
+
+----
+
+The way this works is that debhelper commands can include a "PROMISE"
+directive. An example from `dh_installexamples`
+
+	# PROMISE: DH NOOP WITHOUT examples
+
+Mostly this specifies the files in `debian/` that are used by the command, and
+whose presence triggers the command to run. There is also a syntax to specify
+items that can be present in the package build directory to trigger the command
+to run. 
+
+(Unfortunatly, `dh_perl` can't use this. There's no good way to specify
+when `dh_perl` needs to run, short of doing nearly as much work as `dh_perl`
+would do when run. Oh well.)
+
+Note that third-party `dh_` commands can include these directives too, if that
+makes sense.
+
+----
+
+I'm happy how this turned out, but I could be happier about the implementation.
+The PROMISE directives need to be maintained along with the code of the
+command. If another config file is added, they obviously must be updated.
+Other changes to a command can invalidate the PROMISE directive, and cause
+unexpected bugs.
+
+What would be ideal is to not repeat the inputs of the command in these
+directives, but instead write the command such that its inputs can be
+automatically extracted. I played around with some code like this:
+
+[[!format perl """
+$behavior = main_behavior("docs tmp(usr/share/doc/)", sub {
+       my $package=shift;
+       my $docs=shift;
+       my $docdir=shift;
+
+       install($docs, $docdir);
+});
+$behavior->($package);
+"""]]
+
+But refactoring all debhelper commands to be written in this style
+would be a big job. And I was not happy enough with the flexability
+and expressiveness of this to continue with it.
+
+I can however, dream about what this would look like if debhelper were written
+in Haskell. Then I would have a `Debhelper a` monad, within which each command
+executes.
+
+[[!format haskell """
+main = runDebhelperIO installDocs
+
+installDocs :: Monad a => Debhelper a
+installDocs = do
+	docs <- configFile "docs"
+	docdir <- tmpDir "usr/share/doc"
+	lift $ install docs docdir
+"""]]
+
+To run the command, `runDebhelperIO` would loop over all the packages
+and run the action, in the `Debhelper IO` monad.
+
+But, this also allows making an `examineDebhelper` that takes an action
+like `installDocs`, and runs it in a `Debhelper Writer` monad. That would
+accumulate a list of all the inputs used by the action, and return it,
+without performing any side effecting IO actions.
+
+It's been 15 years since I last changed the language debhelper was written
+in. I did that for less gains than this, really. (The issue back then was
+that shell `getopt` sucked.) IIRC it was not very hard, and only took a few
+days. Still, I don't really anticipate reimplementing debhelper in Haskell
+any time soon. 
+
+For one thing, individual Haskell binaries are quite large, statically
+linking all Haskell libraries they use, and so the installed size of
+debhelper would go up quite a bit. I hope that forthcoming changes will
+move things toward dynamically linked haskell libraries, and make it more
+appealing for projects that involve a lot of small commands.
+
+So, just a thought experiment for now..
+
+[[!meta title="faster dh"]]

add news item for etckeeper 1.2
diff --git a/code/etckeeper/news/version_1.1.mdwn b/code/etckeeper/news/version_1.1.mdwn
deleted file mode 100644
index 12205b8..0000000
--- a/code/etckeeper/news/version_1.1.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-etckeeper 1.1 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix warning when PUSH\_REMOTE is not set. Closes: #[706917](http://bugs.debian.org/706917)"""]]
\ No newline at end of file
diff --git a/code/etckeeper/news/version_1.2.mdwn b/code/etckeeper/news/version_1.2.mdwn
new file mode 100644
index 0000000..8d8d593
--- /dev/null
+++ b/code/etckeeper/news/version_1.2.mdwn
@@ -0,0 +1,6 @@
+etckeeper 1.2 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Call type -p in a more compatable way.
+   * When a file is owned by a uid or a gid with no corresponding user or
+     group, put a numeric chown into .etckeeper. Previously, a broken
+     chown was outputted."""]]
\ No newline at end of file

Added a comment: Clojure STM
diff --git a/blog/entry/the_newinwheezy_game:_STM/comment_1_7cd347485e1813bd979af1a835f56d67._comment b/blog/entry/the_newinwheezy_game:_STM/comment_1_7cd347485e1813bd979af1a835f56d67._comment
new file mode 100644
index 0000000..920b0fc
--- /dev/null
+++ b/blog/entry/the_newinwheezy_game:_STM/comment_1_7cd347485e1813bd979af1a835f56d67._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnQSpYixSpxOeYIKYLKIZo3jVA3LqfPqUw"
+ nickname="Ken"
+ subject="Clojure STM"
+ date="2013-05-08T00:32:36Z"
+ content="""
+Actually Clojure's STM works pretty hard to keep that kind of thing from happening. Agent sends are held until the transaction commits so you can do side-effecty things that way. Also, Clojure's impure stuff tends to be wrapped in the io macro that makes code throw an exception if called from a transaction.
+"""]]

add news item for debhelper 9.20130507
diff --git a/code/debhelper/news/version_9.20120528.mdwn b/code/debhelper/news/version_9.20120528.mdwn
deleted file mode 100644
index 62e4396..0000000
--- a/code/debhelper/news/version_9.20120528.mdwn
+++ /dev/null
@@ -1,5 +0,0 @@
-debhelper 9.20120528 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * dh\_installcatalogs: Turn /etc/sgml/$package.cat into conffiles
-     and introduce dependency on trigger-based sgml-base. Closes: #[477751](http://bugs.debian.org/477751)
-     Thanks, Helmut Grohne"""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20130507.mdwn b/code/debhelper/news/version_9.20130507.mdwn
new file mode 100644
index 0000000..32ae8ab
--- /dev/null
+++ b/code/debhelper/news/version_9.20130507.mdwn
@@ -0,0 +1,17 @@
+debhelper 9.20130507 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * dh: Skips running commands that it can tell will do nothing.
+     Closes: #[560423](http://bugs.debian.org/560423)
+     (Commands that can be skipped are determined by the presence of
+     PROMISE directives within commands that provide a high-level
+     description of the command.)
+   * perl\_makemaker: Unset INSTALL\_BASE in case the user has it set.
+     Closes: #[705141](http://bugs.debian.org/705141)
+   * dh\_installdeb: Drop pre-dependency on dpkg for dpkg-maintscript-helper.
+     Closes: #[703264](http://bugs.debian.org/703264)
+   * makefile buildsystem: Pass any parameters specified after -- when
+     running make -n to test for the existance of targets.
+     In some makefiles, the parameters may be necessary to enable a target.
+     Closes: #[706923](http://bugs.debian.org/706923)
+   * Revert python2.X-minimal fix, because it was buggy.
+     Closes: #[707111](http://bugs.debian.org/707111) (Reopens #683557)"""]]
\ No newline at end of file

add news item for etckeeper 1.1
diff --git a/code/etckeeper/news/version_1.0.mdwn b/code/etckeeper/news/version_1.0.mdwn
deleted file mode 100644
index 38f8696..0000000
--- a/code/etckeeper/news/version_1.0.mdwn
+++ /dev/null
@@ -1,10 +0,0 @@
-etckeeper 1.0 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
- * [ Joey Hess ]
-   * Unset GIT\_DIR and GIT\_WORK\_TREE. Closes: #[689101](http://bugs.debian.org/689101)
-   * PUSH\_REMOTE can be set to automatically push to a remote on commit.
-     Thanks, L. Alberto Giménez
-   * Ignore fake-hwclock.data. Closes: #[701491](http://bugs.debian.org/701491)
- * [ Jelmer Vernooij ]
-   * Auto-detect the VCS setting if there already is a repository in
-     /etc."""]]
\ No newline at end of file
diff --git a/code/etckeeper/news/version_1.1.mdwn b/code/etckeeper/news/version_1.1.mdwn
new file mode 100644
index 0000000..12205b8
--- /dev/null
+++ b/code/etckeeper/news/version_1.1.mdwn
@@ -0,0 +1,3 @@
+etckeeper 1.1 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix warning when PUSH\_REMOTE is not set. Closes: #[706917](http://bugs.debian.org/706917)"""]]
\ No newline at end of file

poll vote (watched it all, liked it)
diff --git a/blog/entry/watch_me_code_for_half_an_hour.mdwn b/blog/entry/watch_me_code_for_half_an_hour.mdwn
index 7f64f09..2e63a4e 100644
--- a/blog/entry/watch_me_code_for_half_an_hour.mdwn
+++ b/blog/entry/watch_me_code_for_half_an_hour.mdwn
@@ -14,6 +14,6 @@ Not shown is the hour I spent the next day changing the "optimize"
 subcommand implemented here into "--auto" options that can be passed to
 [[code/git-annex]]'s get and drop commands.
 
-[[!poll 36 "watched it all, liked it" 8 "watched some, boring" 3 "too long for me" 14 "too haskell for me" 12 "not interested"]]
+[[!poll 37 "watched it all, liked it" 8 "watched some, boring" 3 "too long for me" 14 "too haskell for me" 12 "not interested"]]
 
 [[!meta title="watch me program for half an hour"]]

add news item for etckeeper 1.0
diff --git a/code/etckeeper/news/version_1.0.mdwn b/code/etckeeper/news/version_1.0.mdwn
new file mode 100644
index 0000000..38f8696
--- /dev/null
+++ b/code/etckeeper/news/version_1.0.mdwn
@@ -0,0 +1,10 @@
+etckeeper 1.0 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+ * [ Joey Hess ]
+   * Unset GIT\_DIR and GIT\_WORK\_TREE. Closes: #[689101](http://bugs.debian.org/689101)
+   * PUSH\_REMOTE can be set to automatically push to a remote on commit.
+     Thanks, L. Alberto Giménez
+   * Ignore fake-hwclock.data. Closes: #[701491](http://bugs.debian.org/701491)
+ * [ Jelmer Vernooij ]
+   * Auto-detect the VCS setting if there already is a repository in
+     /etc."""]]
\ No newline at end of file

add news item for filters 2.49
diff --git a/code/filters/news/version_2.43.mdwn b/code/filters/news/version_2.43.mdwn
deleted file mode 100644
index 0733be7..0000000
--- a/code/filters/news/version_2.43.mdwn
+++ /dev/null
@@ -1,3 +0,0 @@
-filters 2.43 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Added the fanboy filter."""]]
\ No newline at end of file
diff --git a/code/filters/news/version_2.49.mdwn b/code/filters/news/version_2.49.mdwn
new file mode 100644
index 0000000..e1fb03c
--- /dev/null
+++ b/code/filters/news/version_2.49.mdwn
@@ -0,0 +1,4 @@
+filters 2.49 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * scottish: Fix typo. Closes: #[688905](http://bugs.debian.org/688905)
+   * lolcat: New filter."""]]
\ No newline at end of file

add news item for moreutils 0.48
diff --git a/code/moreutils/news/version_0.43.mdwn b/code/moreutils/news/version_0.43.mdwn
deleted file mode 100644
index 3916ec1..0000000
--- a/code/moreutils/news/version_0.43.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-moreutils 0.43 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * chronic: New command, runs a command quietly, unless it fails.
-   * Now depends on IPC::Run, used by chronic."""]]
\ No newline at end of file
diff --git a/code/moreutils/news/version_0.48.mdwn b/code/moreutils/news/version_0.48.mdwn
new file mode 100644
index 0000000..cb1ab02
--- /dev/null
+++ b/code/moreutils/news/version_0.48.mdwn
@@ -0,0 +1,10 @@
+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

add news item for mr 1.15
diff --git a/code/mr/news/version_1.14.mdwn b/code/mr/news/version_1.14.mdwn
deleted file mode 100644
index 067e138..0000000
--- a/code/mr/news/version_1.14.mdwn
+++ /dev/null
@@ -1,9 +0,0 @@
-mr 1.14 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Added a fetch command. Closes: #[480580](http://bugs.debian.org/480580)
-   * status: Now includes information about unpushed changes,
-     for git, git-svn, hg, and bzr. Closes: #[693021](http://bugs.debian.org/693021)
-   * Added lib/vis, an add-on to visualise repo history.
-     Closes: #[693022](http://bugs.debian.org/693022) Thanks, Paul Wise
-   * Drop an extra -m from various commit/record commands.
-     Closes: #[695478](http://bugs.debian.org/695478) Thanks, Paul Wise"""]]
\ No newline at end of file
diff --git a/code/mr/news/version_1.15.mdwn b/code/mr/news/version_1.15.mdwn
new file mode 100644
index 0000000..402dcc5
--- /dev/null
+++ b/code/mr/news/version_1.15.mdwn
@@ -0,0 +1,6 @@
+mr 1.15 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Added lib/repo, for support for repo (as used in Android)
+     Closes: #[705652](http://bugs.debian.org/705652) Thanks, Peter Eisentraut
+   * Better cvs status.
+     Closes: #[694037](http://bugs.debian.org/694037) Thanks, Paul Wise"""]]
\ No newline at end of file

add news item for debhelper 9.20130504
diff --git a/code/debhelper/news/version_9.20120523.mdwn b/code/debhelper/news/version_9.20120523.mdwn
deleted file mode 100644
index 7d2858b..0000000
--- a/code/debhelper/news/version_9.20120523.mdwn
+++ /dev/null
@@ -1,4 +0,0 @@
-debhelper 9.20120523 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Spanish translation update. Closes: #[673629](http://bugs.debian.org/673629) Thanks, Omar Campagne
-   * Set Multi-Arch: foreign. Closes: #[674193](http://bugs.debian.org/674193)"""]]
\ No newline at end of file
diff --git a/code/debhelper/news/version_9.20130504.mdwn b/code/debhelper/news/version_9.20130504.mdwn
new file mode 100644
index 0000000..6d11cee
--- /dev/null
+++ b/code/debhelper/news/version_9.20130504.mdwn
@@ -0,0 +1,33 @@
+debhelper 9.20130504 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * dh\_shlibdeps: Warn if -V flag is passed, to avoid it accidentially being
+     used here rather than in dh\_makeshlibs. Closes: #[680339](http://bugs.debian.org/680339)
+   * dh\_lintian: Source overrides doc improvement. Closes: #[683941](http://bugs.debian.org/683941)
+   * dh\_installmime: No longer makes maintainer scripts run update-mime and
+     update-mime-database, that is now handled by triggers. Closes: #[684689](http://bugs.debian.org/684689)
+     Thanks, Charles Plessy
+   * python distutils buildsystem: Propagate failure of pyversions.
+     Closes: #[683551](http://bugs.debian.org/683551) Thanks, Clint Byrum
+   * python distutils buildsystem: When checking if a version of python is
+     installed, don't trust the presense of the executable, as
+     a python2.X-minimal package may provide it while not having
+     distutils installed. Closes: #[683557](http://bugs.debian.org/683557), #[690378](http://bugs.debian.org/690378)
+   * dh\_icons: Improve documentation. Closes: #[684895](http://bugs.debian.org/684895)
+   * Improve -X documentation. Closes: #[686696](http://bugs.debian.org/686696)
+   * Support installing multiple doc-base files which use the same doc-id.
+     Closes: #[525821](http://bugs.debian.org/525821)
+   * dh\_installdocs: Support having the same document id in different binary
+     packages built from the same source.
+     Closes: #[525821](http://bugs.debian.org/525821) Thanks, Don Armstrong
+   * dh\_installdeb: Avoid unnecessary is\_udeb tests. Closes: #[691398](http://bugs.debian.org/691398)
+   * Updated German man page translation. Closes: #[691557](http://bugs.debian.org/691557), #[706314](http://bugs.debian.org/706314)
+   * dh\_installinit: Support systemd.
+     Closes: #[690399](http://bugs.debian.org/690399) Thanks, Michael Stapelberg
+   * Updated French man page translation. Closes: #[692208](http://bugs.debian.org/692208)
+   * dh\_icons: Reword description. Closes: #[693100](http://bugs.debian.org/693100)
+   * Avoid find -perm +mode breakage caused by findutils 4.5.11,
+     by instead using -perm /mode. Closes: #[700200](http://bugs.debian.org/700200)
+   * cmake: Configure with -DCMAKE\_BUILD\_TYPE=RelWithDebInfo
+     Closes: #[701233](http://bugs.debian.org/701233)
+   * dh\_auto\_test: Avoid doing anything when cross-compiling. Closes: #[703262](http://bugs.debian.org/703262)
+   * dh\_testdir: Fix error message. Closes: #[703515](http://bugs.debian.org/703515)"""]]
\ No newline at end of file

update
diff --git a/blog/entry/the_newinwheezy_game:_STM.mdwn b/blog/entry/the_newinwheezy_game:_STM.mdwn
index a64373a..4d25ca2 100644
--- a/blog/entry/the_newinwheezy_game:_STM.mdwn
+++ b/blog/entry/the_newinwheezy_game:_STM.mdwn
@@ -111,7 +111,7 @@ startDownload = do
 """]]
 
 If you appreciate that, you may want to check out some other #newinwheezy stuff like 
-[libghc-yesod-dev](http://packages.debian.org/wheezy/libghc-stm-dev),
+[libghc-yesod-dev](http://packages.debian.org/wheezy/libghc-yesod-dev),
 a web framework that uses type checking to avoid broken urls and XSS attacks,
 and also makes heavy use of threading, so is a great fit for using with
 STM. And

typo
diff --git a/blog/entry/the_newinwheezy_game:_STM.mdwn b/blog/entry/the_newinwheezy_game:_STM.mdwn
index c15d0cf..a64373a 100644
--- a/blog/entry/the_newinwheezy_game:_STM.mdwn
+++ b/blog/entry/the_newinwheezy_game:_STM.mdwn
@@ -105,7 +105,7 @@ spawned once the transaction succeeds:
 startDownload = do
 	file <- atomically $ do
 		f <- getQueuedFile
-		push file currentDownLoads
+		push f currentDownLoads
 		return f
 	startDownloadThread file
 """]]

foo
diff --git a/blog/entry/the_newinwheezy_game:_STM.mdwn b/blog/entry/the_newinwheezy_game:_STM.mdwn
index 60a51b5..c15d0cf 100644
--- a/blog/entry/the_newinwheezy_game:_STM.mdwn
+++ b/blog/entry/the_newinwheezy_game:_STM.mdwn
@@ -112,7 +112,7 @@ startDownload = do
 
 If you appreciate that, you may want to check out some other #newinwheezy stuff like 
 [libghc-yesod-dev](http://packages.debian.org/wheezy/libghc-stm-dev),
-a web framework that uses type checking to avoid broken urls,
+a web framework that uses type checking to avoid broken urls and XSS attacks,
 and also makes heavy use of threading, so is a great fit for using with
 STM. And
 [libghc-quickcheck2-dev](http://packages.debian.org/wheezy/libghc-quickcheck2-dev),

typo
diff --git a/blog/entry/the_newinwheezy_game:_STM.mdwn b/blog/entry/the_newinwheezy_game:_STM.mdwn
index 5844922..60a51b5 100644
--- a/blog/entry/the_newinwheezy_game:_STM.mdwn
+++ b/blog/entry/the_newinwheezy_game:_STM.mdwn
@@ -60,7 +60,7 @@ getQueuedFile = atomically $
 When the queue is empty and this calls "retry", STM automatically waits
 for the queue to change before restarting the transaction. So this blocks
 until a file becomes available. It does it without any locking, and without
-you needing to tell explicitly tell STM what you're waiting on.
+you needing to explicitly tell STM what you're waiting on.
 
 I find this beautiful, and am happier with it the more I use it in my code.
 Functions like `getQueuedFile` that run entirely in STM are building blocks

tweak
diff --git a/blog/entry/the_newinwheezy_game:_STM.mdwn b/blog/entry/the_newinwheezy_game:_STM.mdwn
index 924194a..5844922 100644
--- a/blog/entry/the_newinwheezy_game:_STM.mdwn
+++ b/blog/entry/the_newinwheezy_game:_STM.mdwn
@@ -17,8 +17,8 @@ a new download would go something like this:
 [[!format haskell """
 startDownload = do
 	file <- getQueuedFile
-	push file currentDownLoads
 	startDownloadThread file
+	push file currentDownLoads
 """]]
 
 But there's a point in time in which another thread, that refreshes the
@@ -38,8 +38,8 @@ STM deals with this in a much nicer way:
 [[!format haskell """
 startDownload = atomically $ do
 	file <- getQueuedFile
-	push file currentDownLoads
 	startDownloadThread file
+	push file currentDownLoads
 """]]
 
 Now the two operations are performed as one atomic transaction. It's not
@@ -84,8 +84,8 @@ Wait a second.. Doesn't that mean this code has a problem?
 [[!format haskell """
 startDownload = atomically $ do
 	file <- getQueuedFile
-	push file currentDownLoads
 	startDownloadThread file
+	push file currentDownLoads
 """]]
 
 Yes, this code is buggy! If the download thread is started, but then STM 

format
diff --git a/blog/entry/the_newinwheezy_game:_STM.mdwn b/blog/entry/the_newinwheezy_game:_STM.mdwn
index 81ea51d..924194a 100644
--- a/blog/entry/the_newinwheezy_game:_STM.mdwn
+++ b/blog/entry/the_newinwheezy_game:_STM.mdwn
@@ -110,8 +110,7 @@ startDownload = do
 	startDownloadThread file
 """]]
 
-If you appreciate that, you may want to check out some other
-#newinwheezy stuff like 
+If you appreciate that, you may want to check out some other #newinwheezy stuff like 
 [libghc-yesod-dev](http://packages.debian.org/wheezy/libghc-stm-dev),
 a web framework that uses type checking to avoid broken urls,
 and also makes heavy use of threading, so is a great fit for using with

blog update
diff --git a/blog/entry/the_newinwheezy_game:_STM.mdwn b/blog/entry/the_newinwheezy_game:_STM.mdwn
new file mode 100644
index 0000000..81ea51d
--- /dev/null
+++ b/blog/entry/the_newinwheezy_game:_STM.mdwn
@@ -0,0 +1,123 @@
+Debian wheezy includes a bunch of excellent new Haskell libraries.
+I'm going to highlight one that should be interesting to non-Haskell
+developers, who may have struggled with writing non-buggy threaded
+programs in other languages:
+[libghc-stm-dev](http://packages.debian.org/wheezy/libghc-stm-dev)
+
+I had given up on most threaded programs before learning about
+[Software Transactional Memory](http://en.wikipedia.org/wiki/Software_transactional_memory).
+Writing a correct threaded program, when multiple threads needed
+to modify the same state, needed careful uses of locking.
+In my experience, locking is almost never gotten right the first time.
+
+A real life example I encountered is an app that displays a queue of files
+to be downloaded, and a list of files currently downloading. Starting
+a new download would go something like this:
+
+[[!format haskell """
+startDownload = do
+	file <- getQueuedFile
+	push file currentDownLoads
+	startDownloadThread file
+"""]]
+
+But there's a point in time in which another thread, that refreshes the
+display, could then see an inconsistent state, where the file is in neither
+place. To fix this, you'd need to add lock checking around all accesses to
+the download queue and current downloads list, and lock them both here.
+(And be sure to always take the locks in the same order!)
+
+But, it's worse than that, because how is `getQueuedFile` implemented?
+If the queue is empty, it needs to wait on a file being added. But how
+can a file be added the queue if we've locked it in order to perform this
+larger `startDownload` operation? What should be really simple code
+has become really complex juggling of locks.
+
+STM deals with this in a much nicer way:
+
+[[!format haskell """
+startDownload = atomically $ do
+	file <- getQueuedFile
+	push file currentDownLoads
+	startDownloadThread file
+"""]]
+
+Now the two operations are performed as one atomic transaction. It's not
+possible for any other thread to see an inconsistent state. No explicit
+locking is needed.
+
+And, `getQueuedFile` can do whatever waiting it needs to, also using STM.
+This becomes part of the same larger transaction, in a way that cannot
+deadlock. It might be implemented like this:
+
+[[!format haskell """
+getQueuedFile = atomically $
+	if empty downloadQueue
+		then retry
+		else pop downloadQueue
+"""]]
+
+When the queue is empty and this calls "retry", STM automatically waits
+for the queue to change before restarting the transaction. So this blocks
+until a file becomes available. It does it without any locking, and without
+you needing to tell explicitly tell STM what you're waiting on.
+
+I find this beautiful, and am happier with it the more I use it in my code.
+Functions like `getQueuedFile` that run entirely in STM are building blocks
+that can be snapped together without worries to build more and more complex
+things.
+
+For non-Haskell developers, STM is also available in Clojure, and work
+is underway to add it to gcc. There is also Hardware Transactional Memory
+coming, to speed it up. Although in my experience it's quite acceptably
+fast already.
+
+However, as far as I know, all these other implementations of STM leave
+developers with a problem nearly as thorny as the original problem with
+locking. STM inherently works by detecting when a change is made that
+conflicts with another transaction, throwing away the change,
+and retrying. This means that code inside a STM transaction may
+run more than once.
+
+Wait a second.. Doesn't that mean this code has a problem?
+
+[[!format haskell """
+startDownload = atomically $ do
+	file <- getQueuedFile
+	push file currentDownLoads
+	startDownloadThread file
+"""]]
+
+Yes, this code is buggy! If the download thread is started, but then STM 
+restarts the transaction, the same file will be downloaded repeatedly.
+
+The C, Clojure, etc, STM implementations all let you write this buggy
+code. 
+
+Haskell, however, does not. The buggy code I showed won't even compile. The
+way it prevents this involves, well, monads. But essentially, it is able to
+use type checking to automatically determine that `startDownloadThread` is
+not safe to put in the middle of a STM transaction. You're left with no
+choice but to change things so the thread is only
+spawned once the transaction succeeds:
+
+[[!format haskell """
+startDownload = do
+	file <- atomically $ do
+		f <- getQueuedFile
+		push file currentDownLoads
+		return f
+	startDownloadThread file
+"""]]
+
+If you appreciate that, you may want to check out some other
+#newinwheezy stuff like 
+[libghc-yesod-dev](http://packages.debian.org/wheezy/libghc-stm-dev),
+a web framework that uses type checking to avoid broken urls,
+and also makes heavy use of threading, so is a great fit for using with
+STM. And
+[libghc-quickcheck2-dev](http://packages.debian.org/wheezy/libghc-quickcheck2-dev),
+which leverages the type system to automatically test properties about your
+program.
+
+[[!meta title="the #newinwheezy game: STM"]]

update
diff --git a/grep.mdwn b/grep.mdwn
index 86513f9..712da62 100644
--- a/grep.mdwn
+++ b/grep.mdwn
@@ -8,10 +8,8 @@ on the net.
 List of feeds:
 
 * [[!aggregate expirecount=25 name="music" feedurl="http://libre.fm/rdf.php?fmt=rss&page=%2Fuser%2Fjoeyhess%2Frecent-tracks" url="http://libre.fm/user/joeyhess"]]
-* [[!aggregate expirecount=25 name="commits" feedurl="http://cia.vc/stats/author/joeyh/.rss" url="http://cia.vc/stats/author/joeyh"]]
-* [[!aggregate expirecount=25 name="commits2" feedurl="http://cia.vc/stats/author/joey/.rss" url="http://cia.vc/stats/author/joey"]]
 * [[!aggregate expirecount=25 name="identi.ca posts" feedurl="http://identi.ca/api/statuses/user_timeline/14601.rss" url="http://identi.ca/joeyh"]]
 * [[!aggregate expirecount=25 name="identi.ca replies" feedurl="http://identi.ca/joeyh/replies/rss" url="http://identi.ca/joeyh/replies"]]
 * [[!aggregate expirecount=25 name="twitter mentions" feedurl="http://search.twitter.com/search.atom?q=olduse+OR+git-annex+OR+debhelper+OR+etckeeper+OR+ikiwiki+-ashley_ikiwiki" url="http://twitter.com/"]]
 * [[!aggregate expirecount=25 name="books" feedurl="http://www.goodreads.com/review/list_rss/2159448?key=afd7e8432b3f9e33edab442a7c94e95849af4527&shelf=currently-reading" url="http://www.goodreads.com/user/show/2159448"]]
-* [[!aggregate expirecount=25 name="google" feedurl="""http://blogsearch.google.com/blogsearch_feeds?hl=en&c2coff=1&scoring=d&as_drrb=q&as_qdr=a&q=joey.kitenet.net+OR+joey@kitenet.net+OR+joeyh@debian.org+OR+"joey+hess"+OR+kitenet.net/~joey&ie=utf-8&num=10&output=rss""" url="http://blogsearch.google.com/"]]
+* [[!aggregate expirecount=25 name="google" feedurl="""http://www.google.com/search?hl=en&q=git-annex+OR+etckeeper+OR+ikiwiki&tbm=blg&output=rss""" url="http://blogsearch.google.com/"]]

add news item for github-backup 1.20120628.1
diff --git a/code/github-backup/news/version_1.20120628.1.mdwn b/code/github-backup/news/version_1.20120628.1.mdwn
new file mode 100644
index 0000000..93e4249
--- /dev/null
+++ b/code/github-backup/news/version_1.20120628.1.mdwn
@@ -0,0 +1,5 @@
+github-backup 1.20120628.1 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Rebuilt with new haskell-github, to deal with a github API change.
+     (See #706187)
+   * Also a minor change to build when haskell-monads-tf is installed."""]]
\ No newline at end of file

Added a comment
diff --git a/blog/entry/Template_Haskell_on_impossible_architectures/comment_3_5000dfd17f6c30867e31318003f655f9._comment b/blog/entry/Template_Haskell_on_impossible_architectures/comment_3_5000dfd17f6c30867e31318003f655f9._comment
new file mode 100644
index 0000000..10395fb
--- /dev/null
+++ b/blog/entry/Template_Haskell_on_impossible_architectures/comment_3_5000dfd17f6c30867e31318003f655f9._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ nickname="joey"
+ subject="comment 3"
+ date="2013-04-19T15:22:50Z"
+ content="""
+Yesod-pure was useful early on since I was able to use its test program as a proof of concept that my template splicing method worked. You see, while yesod-pure allows writing yesod sites without using TH, it depends on parts of yesod that themselves use TH to build.
+
+While the routing code is not too bad w/o TH. yesod-pure doesn't really have a usable approach for hamlet templates.
+
+I've since learned about [zeroth](http://hackage.haskell.org/package/zeroth) which appears to use a better approach to removing TH splices than the EvilSplicer. (Haven't had time to try it.)
+"""]]

Added a comment: non-TH options
diff --git a/blog/entry/Template_Haskell_on_impossible_architectures/comment_2_458832c78e53d30c66214a5fc30845cc._comment b/blog/entry/Template_Haskell_on_impossible_architectures/comment_2_458832c78e53d30c66214a5fc30845cc._comment
new file mode 100644
index 0000000..7dd5353
--- /dev/null
+++ b/blog/entry/Template_Haskell_on_impossible_architectures/comment_2_458832c78e53d30c66214a5fc30845cc._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawnQtGWN7Q5ZbZoGiDnjeIRtU0DXg0b4x8s"
+ nickname="Greg"
+ subject="non-TH options"
+ date="2013-04-19T01:07:24Z"
+ content="""
+Hi Joey,
+
+Did you try using persistent without TH or routing (yesod-pure) without TH?
+"""]]

new bitcoin address
gpg signed commit..
diff --git a/bitcoin b/bitcoin
index ad5b541..1f04046 100644
--- a/bitcoin
+++ b/bitcoin
@@ -1 +1 @@
-17eJwrWXQKJRzM2mBcXFstksRcriPJPq6q
+1F5Dke8Wd3Y92EAwiv1LSoT9hDDnqGYdR4

Added a comment
diff --git a/blog/entry/Template_Haskell_on_impossible_architectures/comment_1_14d53f9a3cc42344d492562ace32d819._comment b/blog/entry/Template_Haskell_on_impossible_architectures/comment_1_14d53f9a3cc42344d492562ace32d819._comment
new file mode 100644
index 0000000..f63631b
--- /dev/null
+++ b/blog/entry/Template_Haskell_on_impossible_architectures/comment_1_14d53f9a3cc42344d492562ace32d819._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://joshtriplett.org/"
+ nickname="Josh"
+ subject="comment 1"
+ date="2013-04-17T07:28:16Z"
+ content="""
+You might find the upcoming GHC 7.8 useful; it has first-class support for cross-compilation.
+"""]]

foo
diff --git a/blog/entry/Template_Haskell_on_impossible_architectures.mdwn b/blog/entry/Template_Haskell_on_impossible_architectures.mdwn
index e848b2f..43d5876 100644
--- a/blog/entry/Template_Haskell_on_impossible_architectures.mdwn
+++ b/blog/entry/Template_Haskell_on_impossible_architectures.mdwn
@@ -101,7 +101,7 @@ But oh, the caveats. There are so many ways this can go wrong..
   (My longest GHC error message seen on this odyessy was actually
   a full 500+ kilobytes in size. It included the complete text of
   Jquery and Bootstrap. At times like these you notice that GHC outputs
-  its error messages o.n.e . c.h.a.r.a.c.t.e.r a.t . a . t.i.m.e.)
+  its error messages o.n.e . c.h.a.r.a.c.t.e.r . a.t . a . t.i.m.e.)
 
 Anyway, if you struggle with it, or pay me vast quantities of money,
 your program will, eventually, link. And that's all I can promise for now.

tweak
diff --git a/blog/entry/Template_Haskell_on_impossible_architectures.mdwn b/blog/entry/Template_Haskell_on_impossible_architectures.mdwn
index 80a6663..e848b2f 100644
--- a/blog/entry/Template_Haskell_on_impossible_architectures.mdwn
+++ b/blog/entry/Template_Haskell_on_impossible_architectures.mdwn
@@ -27,7 +27,7 @@ compiler on Android doesn't do the trick. Perhaps you missed something
 though.)
 
 At this point you can give up and write a separate Android UI (perhaps
-using these new Android SDK API bindings for Haskell that have also
+using these new [Android JNI bindings for Haskell](https://github.com/neurocyte/foreign-jni) that have also
 appeared in the meantime). Or you can procrastinate for a while, and mull
 it over; consider rewriting the webapp to not use Yesod but some other
 framework that doesn't need Template Haskell.
@@ -36,7 +36,7 @@ Eventually you might think this: If I run `ghc -ddump-splices` when I'm
 building my Yesod code, I can see all the thousands of lines of delicious
 machine generated Haskell code. I just have to paste that in, in
 place of the Template Haskell that generated it, and I'll get a program I
-can build on Android!
+can build on Android! What could go wrong?
 
 And you even try it, and yeah, it seems to work. For small amounts of code
 that you paste in and carefully modify and get working. Not a whole

blog update
diff --git a/blog/entry/Template_Haskell_on_impossible_architectures.mdwn b/blog/entry/Template_Haskell_on_impossible_architectures.mdwn
new file mode 100644
index 0000000..80a6663
--- /dev/null
+++ b/blog/entry/Template_Haskell_on_impossible_architectures.mdwn
@@ -0,0 +1,116 @@
+Imagine you had an excellent successful Kickstarter campaign, and during
+it a lot of people asked for an Android port to be made of the software.
+Which is written in Haskell. No problem, you'd think -- the user interface
+can be written as a local webapp, which will be nicely platform agnostic
+and so make it easy to port. Also, it's easy to promise a lot of stuff
+during a Kickstarter campaign. Keeps the graph going up. What could go
+wrong?
+
+So, rather later you realize there is no Haskell compiler for Android. At
+all. But surely there will be eventually. And so you go off and build the
+webapp. Since Yesod seems to be the pinnacle of type-safe Haskell web
+frameworks, you use it. Hmm, there's this Template Haskell stuff that it
+uses a lot, but it only makes compiles a little slow, and the result is
+cool, so why not.
+
+Then, about half-way through the project, it seems time to get around
+to this Android port. And, amazingly, a
+[Haskell compiler for Android](https://github.com/neurocyte/ghc-android)
+has appeared in the meantime. Like the Haskell community has your back.
+(Which they generally seem to.) It's early days and rough, lots of libraries
+need to be hacked to work, but it only takes around 2 weeks to get a
+port of your program that basically works.
+
+But, no webapp. Cause nobody seems to know how to make a cross-compiling
+Haskell compiler do Template Haskell. (Even building a fully native
+compiler on Android doesn't do the trick. Perhaps you missed something
+though.)
+
+At this point you can give up and write a separate Android UI (perhaps
+using these new Android SDK API bindings for Haskell that have also
+appeared in the meantime). Or you can procrastinate for a while, and mull
+it over; consider rewriting the webapp to not use Yesod but some other
+framework that doesn't need Template Haskell.
+
+Eventually you might think this: If I run `ghc -ddump-splices` when I'm
+building my Yesod code, I can see all the thousands of lines of delicious
+machine generated Haskell code. I just have to paste that in, in
+place of the Template Haskell that generated it, and I'll get a program I
+can build on Android!
+
+And you even try it, and yeah, it seems to work. For small amounts of code
+that you paste in and carefully modify and get working. Not a whole
+big, constantly improving webapp where every single line of html gets
+converted to types and lambdas that are somehow screamingly fast.
+
+So then, let's automate this pasting.
+And so the [EvilSplicer](http://source.git-annex.branchable.com/?p=source.git;a=blob;f=Build/EvilSplicer.hs) is born!
+
+That's a fairly general-purpose Template Haskell splicer. First do a native
+build with -ddump-splices output redirected to a log file. Run the
+EvilSplicer to fix up the code. Then run an Android cross-compile.
+
+But oh, the caveats. There are so many ways this can go wrong..
+
+* The first and most annoying problem you'll encounter is
+  that often Template Haskell splices refer to hidden symbols that
+  are not exported from the modules that define the splices.
+  This lets the splices use those symbols, but prevents them being used in
+  your code.
+
+  This does not seem like a good part of the Template Haskell design,
+  to be honest. It would be better if it required all symbols used in
+  splices to be exported.
+
+  But it can be worked around. Just use trial and error to find every
+  Haskell library that does this, and then modify them to export
+  all the symbols they use. And after each one, rebuild all libraries
+  that depend on it.
+
+  You're very unlikely to end up with more than 9 thousand lines of
+  patches. Because that's all it took me..
+
+* The next problem (and the next one, and the next ...) is that
+  while GHC's code output by `-dump-splices` (and indeed, by GHC
+  error messages, etc) looks like valid Haskell code to the casual viewer,
+  it's often not.
+
+  To start with, it often has symbols qualified with the package
+  and module name. `ghc-prim:GHC.Types.:` does not work well
+  where code originally contained `:`.
+
+  And then there's fun with multi-line strings, which sometimes
+  cannot be parsed back in by GHC in the form it outputs them.
+  
+  And then there's the strange way GHC outputs `case` expressions,
+  which is not valid Haskell at all. (It's missing some semicolons.)
+
+  Oh, and there's the lambda expressions that GHC outputs with insufficient
+  parentheses, leading to type errors at compile time.
+
+  And so much more fun. Enough fun to give one the idea that this
+  GHC output has never really been treated as code that could be run again.
+  Because that would be a dumb thing to need to do.
+
+* Just to keep things interesting, the Haskell libraries used by
+  your native GHC and your Android GHC need to be pretty much identical
+  versions. Maybe a little wiggle room, but any version skew could
+  cause unwanted results. Probably, most of the time, unwanted results
+  in the form of a 3 screen long type error message.
+
+  (My longest GHC error message seen on this odyessy was actually
+  a full 500+ kilobytes in size. It included the complete text of
+  Jquery and Bootstrap. At times like these you notice that GHC outputs
+  its error messages o.n.e . c.h.a.r.a.c.t.e.r a.t . a . t.i.m.e.)
+
+Anyway, if you struggle with it, or pay me vast quantities of money,
+your program will, eventually, link. And that's all I can promise for now.
+
+----
+
+PS, I hope nobody will ever find this blog post useful in their work.
+
+PPS, Also, if you let this put you off Haskell in any way .. well, don't.
+You just might want to wait a year or so before doing Haskell on Android.
+
+[[!meta title="Template Haskell on impossible architectures"]]

CIA and google code search both MIA
diff --git a/code.mdwn b/code.mdwn
index 357bd7d..9efc1d2 100644
--- a/code.mdwn
+++ b/code.mdwn
@@ -71,11 +71,8 @@ Other stuff..
 If you want to keep up with new projects, [[WhatsNew]] is a feed of any new
 pages I add to this site, and [[grep]] aggregates my recent commits.
 
-Also, [CIA](http://cia.navi.cx/stats/author/joeyh) tracks my commits to
-many projects, and [Ohloh](http://www.ohloh.net/accounts/6835) mines them
+Also, [Ohloh](http://www.ohloh.net/accounts/6835) tracks and mines my commits to many projects 
 for interesting metrics.
-[Google code](http://www.google.com/codesearch?as_q=joeyh%7Cjoey+hess&btnG=Search+Code&as_lang=&as_license_restrict=i&as_license=&as_package=&as_filename=&as_case=)
-finds lots of other code that I've written.
 
 [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)
 is a graph of Debian popcon stats for my newest projects.

link
diff --git a/contact.mdwn b/contact.mdwn
index 40402aa..79d9fee 100644
--- a/contact.mdwn
+++ b/contact.mdwn
@@ -1,3 +1,4 @@
 * email: <id@joeyh.name> or <joey@kitenet.net> or <joeyh@debian.org>
 * jabber: [joey@kitenet.net](xmpp:joey@kitenet.net)
 * identi.ca: <http://identi.ca/joeyh>
+* some ways to send me a "thank you" for my work, if you're so inclined: [[thanks]]

Added a comment: tarballs versus repositories
diff --git a/blog/entry/upstream_git_repositories/comment_1_b05cd5a4667ed49156ad6387677f2054._comment b/blog/entry/upstream_git_repositories/comment_1_b05cd5a4667ed49156ad6387677f2054._comment
new file mode 100644
index 0000000..d4bf702
--- /dev/null
+++ b/blog/entry/upstream_git_repositories/comment_1_b05cd5a4667ed49156ad6387677f2054._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://sees.myopenid.com/"
+ ip="203.28.81.70"
+ subject="tarballs versus repositories"
+ date="2013-04-03T21:52:29Z"
+ content="""
+One interesting difference I've seen with upstream tarballs versus just using the git or whatever repository is generated files.  The standard autoconf stuff has additional files in the tarball that do not appear in the git repository (they are generated at the make dist stage).
+
+While they can be generated by the packager this is sometimes troublesome. The alternative is to put the generated files into the repository, but that's bad too.
+"""]]

blog update
diff --git a/blog/entry/upstream_git_repositories.mdwn b/blog/entry/upstream_git_repositories.mdwn
new file mode 100644
index 0000000..74f54e8
--- /dev/null
+++ b/blog/entry/upstream_git_repositories.mdwn
@@ -0,0 +1,75 @@
+Daniel Pocock posted 
+[The multiple repository conundrum in Linux packaging](http://danielpocock.com/autotools-project-distribution-and-packaging-on-debian).
+While a generally good and useful post, which upstream developers
+will find helpful to understand how Debian packages their software,
+it contains this statement:
+
+> If it is the first download, the maintainer creates a new git
+> repository. If it has been packaged before, he clones the repository.
+> The important point here is that this is not the upstream repository,
+> it is an independent repository for Debian packaging.
+
+The only thing important about that point is that it highlights an
+unnecessary disconnect between the Debian developer and upstream development.
+One which upstream will surely find annoying and should certainly not
+be bothered with.
+
+There is absolutely no technical reason to not use the upstream
+git repository as the basis for the git repository used in Debian packaging.
+I would never package software maintained in a git repository upstream
+and not do so.
+
+The details are as follows:
+
+* For historical reasons that are continuingly vanishing in importance,
+  Debian fetishises the tarballs produced by upstream. While upstreams
+  increasingly consider them an unimportant distraction, Debian insists
+  in hoarding and rolling around in on its nest of gleaming pristine tarballs.
+
+  I wrote [[code/pristine-tar]] to facilitate this behavior, while
+  also pointing fun at it, and perhaps introducing a weak spot with which to
+  eventually slay this particular dragon. It is widely used within Debian.
+
+  .. Anyway, the point is that it's no problem to import upstream's tarball
+  into a clone if their git repository. It's fine if that tarball includes
+  files not present in their git repository. Indeed, upstream can do this at
+  release time if they like. Or Debian developers can do it and push a small
+  quantity of data back to upstream in a branch.
+
+* Sometimes tagged releases in upstream git repositories differ from
+  the files in their released tarballs. This is actually, in my experience,
+  less due to autotools generated files, and more due to manual and
+  imperfect release processes, human error, etc.
+  (Arguably, autotools are a form of human error.)
+
+  When this happens, and the Debian developer is tracking upstream git,
+  they can quite easily modify their branch to reflect the contents of
+  the tarball as closely as they desire. Or modify the source package
+  uploaded to Debian to include anything left out of the tarball.  
+  
+  My favorite example of this is an upstream who forgot to include
+  their README in their released tarball. Not a made up example; as mentioned
+  tarballs are increasingly an irrelevant side-show to upstreams. If
+  I had been treating the tarball as canonical I would have released a package
+  with no documentation.
+
+* Whenever Debian developers interact with upstream, whether it's by filing
+  bug reports or sending patches, they're going to be referring to refs in
+  the upstream git repository. They need to have that repository available.
+  The closer and better the relationship with upstream, the more 
+  the DD will use that repository. Anything that pulls them away from
+  using that repository is going to add friction to dealing with upstream.
+
+  There have, historically, been quite a lot of sources of friction.
+  From upstreams who choose one VCS while the DD preferred using another,
+  to DDs low on disk space who decided to only version control the
+  `debian` directory, and not the upstream source code. With disk
+  space increasingly absurdly cheap, and the preponderance of development
+  converging on git, there's no reason for this friction to be allowed to 
+  continue.
+
+So using the upstream git repository is valuable.
+And there is absolutely no technical value, and plenty of potential friction
+in maintaining a history-disconnected git repository for Debian packaging.
+
+[[!meta title="upstream git repositories"]]

Added a comment: Recomendations in a federated world
diff --git a/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_7_ad068483ad534c5699231cf48637bc4c._comment b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_7_ad068483ad534c5699231cf48637bc4c._comment
new file mode 100644
index 0000000..de46a3d
--- /dev/null
+++ b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_7_ad068483ad534c5699231cf48637bc4c._comment
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://www.dumain.com/"
+ nickname="William Hay"
+ subject="Recomendations in a federated world"
+ date="2013-04-03T06:20:22Z"
+ content="""
+While in general I'm in favour of a decentralised federated approach wouldn't making book recommendations work via collaborative filtering require broadcasting all the data to the entire federation?  With the data centralised one only has to worry about Tim Spalding abusing it not every member of the federation.
+
+I also tried the LT import from goodreads functionality and found it missing data (ratings specifically).  I found I could get more data in by converting goodreads export to 
+[librarything's preferred import format](https://www.librarything.com/LibraryThingSample.csv) as long as I made sure all text fields were quoted.  
+"""]]

Added a comment: LibraryThing is cataloging-centric, Goodreads is reading-centric.
diff --git a/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_6_b13f1a520ef9ff95f35798de46c62669._comment b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_6_b13f1a520ef9ff95f35798de46c62669._comment
new file mode 100644
index 0000000..7422b1e
--- /dev/null
+++ b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_6_b13f1a520ef9ff95f35798de46c62669._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://lovesgoodfood.com/jason/"
+ nickname="Jason Riedy"
+ subject="LibraryThing is cataloging-centric, Goodreads is reading-centric."
+ date="2013-04-02T15:33:12Z"
+ content="""
+LibraryThing counts differences where Goodreads doesn't, so I'm not surprised transfer isn't easy.  Also, LT is pretty open about accepting bug reports...  But as you note they don't have that much manpower.  I'm biased towards LT even though they aren't willing to open the code.  I'm not sure the code matters as much as the data here...  Although federation may help the libraries a bit more over the long term, IMHO the value is in the merged data.  LT is an interesting example for the future of federation.  It's both vertical (library-oriented) and widely applicable (readers).  They already are challenging certain tightly-licensed cataloging methods with open ones...  Interesting set of trade-offs I haven't fully considered.
+
+BTW, @LibraryThingTim posted an etherpad over on the T-world asking for help on \"What Makes LibraryThing LibraryThing?\" that may bring out more points: http://librarything.piratenpad.de/449
+"""]]

Added a comment: hledger CSV reader improved
diff --git a/blog/entry/hledger/comment_7_23e52a413cbb5f82f2e28826795c933b._comment b/blog/entry/hledger/comment_7_23e52a413cbb5f82f2e28826795c933b._comment
new file mode 100644
index 0000000..b294298
--- /dev/null
+++ b/blog/entry/hledger/comment_7_23e52a413cbb5f82f2e28826795c933b._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlLxKVJdtIlFyco0extRJZLAKoD7pBCL2c"
+ nickname="Simon"
+ subject="hledger CSV reader improved"
+ date="2013-04-01T22:07:42Z"
+ content="""
+Here's the new [hledger CSV reader](http://hledger.org/MANUAL.html#csv-files), so far.
+"""]]

Added a comment
diff --git a/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_5_b4d4eb9b62d2c1fb7825d4a372b3624d._comment b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_5_b4d4eb9b62d2c1fb7825d4a372b3624d._comment
new file mode 100644
index 0000000..d8287ee
--- /dev/null
+++ b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_5_b4d4eb9b62d2c1fb7825d4a372b3624d._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlBBFpthHkm1i3Q0oJ3DraeVtIHoNSFIJU"
+ nickname="gwern"
+ subject="comment 5"
+ date="2013-04-01T20:14:16Z"
+ content="""
+I don't see any cite for the figure being wrong, and I'd guess it's now an underestimate rather than an overestimate (where would LT get the money to buy out any part of Amazon's stake?).
+
+Regardless, as a ~40% minority shareholder an a multi-billion-dollar Internet giant, Amazon can make LT and its founder's life a living hell if it so chooses, and hence its suggestions are less suggestions than orders which are ignored at a high cost. The war between Craigslist and eBay (which holds just a ~25% stake) is a recent demonstration of this. LT operates at Amazon's sufferance; I'd guess that its lack of (known) interference and purchase of GoodReads has more to do with GR growing much more than LT, and I don't see why Amazon would interfere substantially with GR either.
+"""]]

Added a comment
diff --git a/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_4_f00baec8488a18c55eb228d9a8a16682._comment b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_4_f00baec8488a18c55eb228d9a8a16682._comment
new file mode 100644
index 0000000..6e36e4f
--- /dev/null
+++ b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_4_f00baec8488a18c55eb228d9a8a16682._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ nickname="joey"
+ subject="comment 4"
+ date="2013-04-01T19:58:52Z"
+ content="""
+The 40% number that has been going around is not accurate, according to the LT founder. In any case, he still has a controlling interest in his company.
+
+(With that said, I could file half a dozen bugs on LT right now that any engineer could fix in a day; they don't seem to have a lot of manpower developing the site.)
+"""]]

Added a comment: Future
diff --git a/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_3_685bddf9efce9c15d69f322f7cb022a1._comment b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_3_685bddf9efce9c15d69f322f7cb022a1._comment
new file mode 100644
index 0000000..3b17538
--- /dev/null
+++ b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_3_685bddf9efce9c15d69f322f7cb022a1._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlBBFpthHkm1i3Q0oJ3DraeVtIHoNSFIJU"
+ nickname="gwern"
+ subject="Future"
+ date="2013-04-01T18:39:05Z"
+ content="""
+> Now GoodRead's been acquired by Amazon. I doubt it will survive in its current form for more than 2 years
+
+https://en.wikipedia.org/wiki/LibraryThing#Ownership_and_membership
+
+> Online bookseller AbeBooks (now owned by Amazon) bought a 40% share in LibraryThing in May 2006 for an undisclosed sum.
+"""]]

Added a comment: BookBrainz
diff --git a/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_2_3a0f7fe9740cfcea34b49b57ce4ce16e._comment b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_2_3a0f7fe9740cfcea34b49b57ce4ce16e._comment
new file mode 100644
index 0000000..aece691
--- /dev/null
+++ b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_2_3a0f7fe9740cfcea34b49b57ce4ce16e._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://frob.nl/"
+ nickname="Kuno Woudt"
+ subject="BookBrainz"
+ date="2013-03-31T11:51:48Z"
+ content="""
+A co-worker at MusicBrainz (a metadata database about music :) has spent a bit of time on this at https://github.com/ocharles/BookBrainz .  At MetaBrainz we would like to eventually have a family of open databases for music, books, video games, etc..  If anyone else reading this is interested in building a Goodreads/LibraryThing alternative I'd like to invite you to join us in #musicbrainz or #bookbrainz on freenode irc.  MusicBrainz is a community edited database, and many people in our community would be interested in helping out on open source + open data metadata databases focused on other media.   -- warp / kuno. 
+"""]]

Added a comment: Zotero, Filmaster...
diff --git a/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_1_ef78fa75ff638dd16c12f8d0be31e767._comment b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_1_ef78fa75ff638dd16c12f8d0be31e767._comment
new file mode 100644
index 0000000..7a7ecf3
--- /dev/null
+++ b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software/comment_1_ef78fa75ff638dd16c12f8d0be31e767._comment
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://identi.ca/magicfab"
+ nickname="magicfab"
+ subject="Zotero, Filmaster..."
+ date="2013-03-31T01:39:18Z"
+ content="""
+I use Zotero when I want to remember a book I read or want to read. 
+
+There is also http://filmaster.com/about/ which could be examined to find a similar model for books.
+
+http://pump.io/ could be the glue between all this.
+
+"""]]

blog update
diff --git a/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software.mdwn b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software.mdwn
new file mode 100644
index 0000000..09e5f96
--- /dev/null
+++ b/blog/entry/Goodreads_vs_LibraryThing_vs_Free_software.mdwn
@@ -0,0 +1,80 @@
+Four years ago I [[started_using_Goodreads|"whatcha reading?"]] to maintain
+the list of books I've read (which had lived in a flat text file for a
+decade+ before that).
+
+Now it's been aquired by Amazon. I doubt it will survive in its current
+form for more than 2 years. Anyway, while Goodreads has been a quite good
+way to find what my friends are reading, I've been increasingly annoyed by
+the quality of its recommendations, and its paucity of other features I
+need. It really doesn't seem to help me keep up with new and interesting
+fiction at all, unless my friends happen to read it.
+
+So I looked at LibraryThing. Actually, I seem to have looked at it several
+times before, since it had accounts named "joey", "joeyh", and "joeyhess"
+that were all mine. Which is what happens to me on sites that lack Openid
+or Browserid.
+
+Digging a little deeper this time, I am finding its recommendations much
+better than Goodreads' -- although it seems to sometimes recommend
+books I've already read. And it has some nice features like tracking
+series, so you can easily tell when you've read all the books in a series
+or not. The analytics overall seem quite impressive. The UI is cluttered
+and it seems to take 5 clicks to add and rate a single book. It supports
+half stars.
+
+Overall I get the feeling this was designed for a set of needs that doesn't
+quite match mine. For example, it seems it doesn't have a single database
+entry per book; instead each time I add a book, it seems to pull in data
+from primary sources (library of congress, Amazon *cough*) and treat this
+as a separate (but related) entry somehow. Weird. Perhaps this makes sense
+to say, librarians. I'm willing to adjust how I think about things if
+there's an underlying reason that can be grasped.
+
+There's a [quite interesting thread on LibraryThing](http://www.librarything.com/topic/152033)
+where the founder says:
+
+> Don't say we should open-source the code. That would be a nightmare! And
+> I have limited confidence in APIs. LibraryThing has the book geeks, but
+> not so much the computers geeks.
+
+I assume that the nightmare is that there would be dozens of clones of
+the site, all balkanized, with no data transfer, no federation between
+them.
+
+Except, that's the current situation, as every Goodreads user who is
+now trying to use LibraryThing is discovering.
+
+Before I ever started using Goodreads, I [[made sure|"whatcha reading?"]]
+it met my minimum criteria for putting my data into a proprietary silo:
+That I could get the data back out. I can, and have. LibraryThing can
+import it. But the import process loses data! And it's majorly clunky.
+If I want to continue using Goodreads due to its better UI, and get the
+data into LibraryThing, for its better analytics, I have to do
+periodic dumps and loads of CSV files with manual fixups.
+
+This is why we have standards. This is why we're building federated social
+networks like status.net and the upcoming pump.io that can pass structured
+data between nodes transparently. It doesn't have to be a nightmare. It
+doesn't have to rely on proprietary APIs. We have the computer geeks.
+
+Thing is, sites like GoodReads and LibraryThing need domain-specific
+knowledge, and communities to curate data, and stuff like that. Things
+that work well in a smallish company. (LibraryThing even has a business
+model that makes sense, yearly payments to store more books in it.)
+
+With free software, it's much more appealing to sink the time we have into
+the most general-purpose solution we can. Why build a LibraryThing when we
+could build something that tracks not only books but movies and music? Why
+build that when we could build a generic federated network for structured
+social data? And that's great, as infrastructure, but if that
+infrastructure is only used to build a succession of proprietary data
+silos, what was the point?
+
+So, could some computer & book geeks please build a free software
+alternative to these things, focused on books, that federates using any of
+the fine APIs we have available? Bear in mind that there is already a nice
+start at a comprehensive collection of book data in the
+[Open Library](http://openlibrary.org/). I'd happily contribute to a crowd
+funded project doing this.
+
+[[!meta title="Goodreads vs LibraryThing vs Free software"]]

update
diff --git a/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn b/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
index bc7938d..f6feb13 100644
--- a/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
+++ b/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
@@ -81,8 +81,9 @@ network availability; can't check), but here are some scenarios to consider:
     the correct ref for the objects you do have.
     
     **This is a bad failure mode.** git could improve this, perhaps, by
-    maintaining a reflog for bare repositories, which, in my limited
-    testing, it does not do.
+    maintaining a reflog for bare repositories. (Update:
+    `core.logAllRefUpdates` can be set to true for bare repositories, but
+    is disabled by default.)
 
 * A "backup" of a git repository can consist of other clones of it.
   Which do not include `.git/hooks/` scripts, `.git/config` settings,

Added a comment: How to put git hooks into version control
diff --git a/blog/entry/difficulties_in_backing_up_live_git_repositories/comment_3_e324ad815cb85144937a974ebae3b178._comment b/blog/entry/difficulties_in_backing_up_live_git_repositories/comment_3_e324ad815cb85144937a974ebae3b178._comment
new file mode 100644
index 0000000..0344800
--- /dev/null
+++ b/blog/entry/difficulties_in_backing_up_live_git_repositories/comment_3_e324ad815cb85144937a974ebae3b178._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawllV6sHTaQtZJ3oTQZFOzEgGcBG5gPK04U"
+ nickname="Dennis"
+ subject="How to put git hooks into version control"
+ date="2013-03-25T23:01:21Z"
+ content="""
+It <emph>is<emph> possible to put <code>.git/hooks/</code> into version control (<a href=\"http://stackoverflow.com/questions/3462955/putting-git-hooks-into-repository\">use symlinks</a>). It’s just not the standard approach, since git hooks tends to be specific for a repository (think of ikiwiki like workflows).
+"""]]

Added a comment: Update from the Git guys
diff --git a/blog/entry/difficulties_in_backing_up_live_git_repositories/comment_2_c93c5c06c868a4740821a0e939b8f498._comment b/blog/entry/difficulties_in_backing_up_live_git_repositories/comment_2_c93c5c06c868a4740821a0e939b8f498._comment
new file mode 100644
index 0000000..9e2282a
--- /dev/null
+++ b/blog/entry/difficulties_in_backing_up_live_git_repositories/comment_2_c93c5c06c868a4740821a0e939b8f498._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmfvX6HEOct1-bsuu6oMQIlhofsDeuIePY"
+ nickname="Jeff"
+ subject="Update from the Git guys"
+ date="2013-03-25T16:41:40Z"
+ content="""
+Got an update on the git list -- your analysis seems to be pretty much correct:
+
+http://marc.info/?l=git&m=136422341014631&w=2
+"""]]

Added a comment
diff --git a/blog/entry/difficulties_in_backing_up_live_git_repositories/comment_1_89bd583ba4f864e649e57f437e303717._comment b/blog/entry/difficulties_in_backing_up_live_git_repositories/comment_1_89bd583ba4f864e649e57f437e303717._comment
new file mode 100644
index 0000000..986c86a
--- /dev/null
+++ b/blog/entry/difficulties_in_backing_up_live_git_repositories/comment_1_89bd583ba4f864e649e57f437e303717._comment
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmfvX6HEOct1-bsuu6oMQIlhofsDeuIePY"
+ nickname="Jeff"
+ subject="comment 1"
+ date="2013-03-25T13:50:54Z"
+ content="""
+Hi Joey,
+
+I should make it clear that that statement is based on our thinking, and one experience of mine, and if the Git guys say it should be robust about that then I could well be wrong.
+
+We were thinking of bare repositories not just in the process of being pushed to, but also in the process of being garbage collected or repacked. It's possible that all of those cases have been thought of and worked around already, and my statement is not true. But...
+
+At some point I had a git repository on a local machine that suffered a power outage while in the process of fetching. When I booted back up, the repository was corrupt. Yes, it's entirely possible that it could be due to filesystem problems (FWIW, it was a journaling filesystem), but when thinking about the server, it seemed better to not rely on rsync or tar to interact properly with git and for both of those to do the right thing in all possible cases. Especially when Git itself already provides consistency checking. So backing up by making multiple clones (which were not true offline backups as they then were read-only to clients) seemed a straightforward way to go, except, of course, for our implementation flaw.
+"""]]

typo
diff --git a/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn b/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
index f0c59a3..bc7938d 100644
--- a/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
+++ b/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
@@ -88,7 +88,7 @@ network availability; can't check), but here are some scenarios to consider:
   Which do not include `.git/hooks/` scripts, `.git/config` settings,
   and potentially other valuable information, that strangely, we do not
   check into revision control despite having this nice revision control
-  system available. This is the most likely falure more with "git backups".
+  system available. This is the most likely failure mode with "git backups".
   :P
 
 I think that it's important git support naive backups of git repositories

update
diff --git a/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn b/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
index 9ce4713..f0c59a3 100644
--- a/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
+++ b/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
@@ -84,10 +84,25 @@ network availability; can't check), but here are some scenarios to consider:
     maintaining a reflog for bare repositories, which, in my limited
     testing, it does not do.
 
+* A "backup" of a git repository can consist of other clones of it.
+  Which do not include `.git/hooks/` scripts, `.git/config` settings,
+  and potentially other valuable information, that strangely, we do not
+  check into revision control despite having this nice revision control
+  system available. This is the most likely falure more with "git backups".
+  :P
+
+I think that it's important git support naive backups of git repositories
+as well as possible, because that's probably how most backups of git
+repositories are made. We don't all have time to carefully tune our
+backup systems to do something special around our git repositories to
+ensure we get them in a consistent state like the KDE project did, and as
+their experience shows, even if we do it, we can easily introduce other,
+unanticipated problems.
+
 Can anyone else think of any other failure modes like these, or
 find holes in my slightly rushed analysis?
 
---
+----
 
 PS: [[code/git-annex]] is itself entirely crash-safe, to the best of my
 abilities, and also safe for naive backups. But inherits any

blog update
diff --git a/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn b/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
new file mode 100644
index 0000000..9ce4713
--- /dev/null
+++ b/blog/entry/difficulties_in_backing_up_live_git_repositories.mdwn
@@ -0,0 +1,96 @@
+> But you can’t just tar.gz up the bare repositories on the server and hope
+> for the best. Maybe a given repository will be in a valid state; maybe it
+> won’t.
+
+-- Jeff Mitchell in [a followup to the recent KDE near git disaster](http://jefferai.org/2013/03/24/screw-the-mirrors/)
+
+This was a surprising statement to me. I seem to remember that one of
+(many) selling points for git talked about back in the day was that it
+avoided the problem that making a simple `cp` (or backup) of a repository
+could lead to an inconsistent result. A problem that subversion
+repositories had, and required annoying commands to work around.
+(`svnadmin $something` -- iirc the backend FSFS fixed or avoided most of
+this issue.)
+
+This prompted me to check how I handle it in
+[ikiwiki-hosting](http://ikiwiki-hosting.branchable.com). I must have
+anticipated a problem at some point, since `ikisite backup` takes care
+to lock the git repository in a way that prevents eg, incoming pushes
+while a backup is running. Probably, like the KDE developers, I was
+simply exercising reasonable caution.
+
+
+The following analysis has probably been written up before (train; limited
+network availability; can't check), but here are some scenarios to consider:
+
+* A non-bare repository has two parts that can clearly get out of sync
+  during a backup: The work tree and the `.git` directory.
+  
+  - The `.git` directory will likely be backed up first,
+    since `getdirent` will typically return it first, since it gets created
+    first . If a change is made
+    to the work tree during that backup, and committed while the work
+    tree is being backed up, the backup won't include that commit -- which
+    is no particular problem and would not be surprising upon restore.
+    Make commit again and get on with life.
+
+  - However, if (part of) the work tree is backed up before `.git`, then
+    any changes that are committed to git during the backup would not be
+    reflected in the restored work tree, and `git diff` would show a
+    reversion of those changes. After restore, care would need to be taken
+    to reset the work tree (without losing any legitimate uncommitted
+    changes).
+
+* A non-bare repository can also become broken in other ways if just
+  the wrong state is snapshotted. For example, if a commit is in progress
+  during a backup, `.git/index.lock` may exist, and prevent future commits
+  from happening, until it's deleted. These problems can also occur
+  if the machine dies at just the right time during a commit. Git tells
+  you how to recover. (git
+  could go further to avoid these problems than it does; for example
+  it could check if `.git/index.lock` is actually locked using fcntl.
+  Something I do in [[code/git-annex]] to make the `.git/annex/index.lock`
+  file crash safe.)
+
+* A bare repository could be receiving a push (or a non-bare repository
+  a pull) while the backup occurs. These are fairly similar cases,
+  with the main difference being that a non-bare repository has the reflog,
+  which can be used to recover from some inconsist states that could be
+  backed up. Let's concentrate on pushes to bare repositories.
+
+  - A pack could be in the process of being uploaded during a backup.
+    The KDE developers apparently worried that this could result in
+    a corrupt or inconsistent repository, but TTBOMK it cannot;
+    git transfers the pack to a temp file and atomically renames it into
+    place once the transfer is complete. A backup may include an excess
+    temp file, but this can also happen if the system goes down
+    while a push is in progress. Git cleans these things up.
+
+  - A push first transfers the `.git/objects`, and then updates `.git/refs`.
+    A backup might first back up the refs, and then the objects. In this
+    case, it would lose the record that refs were pushed. After being
+    restored, any push from another repository would update the refs,
+    even using the objects that did get backed up. So git recovers from
+    this, and it's not really a concern.
+
+  - Perhaps a backup chooses to first back up the objects, and then the
+    refs. In this case, it could back up a newly changed ref, without
+    having backed up the referenced objects (because they arrived 
+    after the backup had finished with the objects). When this happens,
+    your bare repository is inconsistent; you have to somehow hunt down
+    the correct ref for the objects you do have.
+    
+    **This is a bad failure mode.** git could improve this, perhaps, by
+    maintaining a reflog for bare repositories, which, in my limited
+    testing, it does not do.
+
+Can anyone else think of any other failure modes like these, or
+find holes in my slightly rushed analysis?
+
+--
+
+PS: [[code/git-annex]] is itself entirely crash-safe, to the best of my
+abilities, and also safe for naive backups. But inherits any
+problems with naive backups of git repositories.
+
+[[!meta title="difficulties in backing up live git repositories"]]

eread suggestion
diff --git a/code/moreutils/discussion.mdwn b/code/moreutils/discussion.mdwn
index 6469c4e..f99f5af 100644
--- a/code/moreutils/discussion.mdwn
+++ b/code/moreutils/discussion.mdwn
@@ -374,3 +374,32 @@ What do you think?
 
 Bye,
 -- Bence Romsics
+
+## eread
+
+I do a lot of scripts that interact with the user, and over the years have developed tools around tput to manage the screen. The piece that's lacking is an enhanced read command. The bash read -e creates some screen problems in that it will allow the cursor to backspace and left arrow out of the field, and jump to the left margin. This will also disturb coloring on the screen.
+
+So, the first thing I'd like is a mode that allows the width (columns, min=1, max=console cols) and height (lines, min=1, max=console rows) to be defined, and to constrain the cursor and all screen handling to that area. Perhaps with ncurses? It should use the current colors, but I suppose having those as options wouldn't hurt either. It should also be able to either limit the input to rows*cols chars, or provide scrolling when input data exceeds the defined area.
+
+With the cursor and screen under control, the other thing I'd like to see are input masks. For example, when inputting a US-style telephone number, I'd like to define --mask="(###) ###-####". Then eread would display the mask, sans # markers, and accept only numbers in their places. An option to store (ie, output to stdout or to a defined file) either the fully masked result (ie, (123) 456-7890) or the input only (ie, 1234567890) would be useful. Other masks my be the basic key/word list, date/time, filespec, etc.
+
+There are many apps with such schemes, so the masking options should be relatively easy to borrow. Implementation, of course, is the problem, although I suspect the core code for the input masking probably exists in free/open space. The screen and keyboard handling might also. As I'm not a C coder, it is beyond my skills to pull it all together.
+
+If we're dreaming -- auto-accept on length, key, or timeout, and other common bells and whistles, would be good things, too.
+
+As a rough example:
+
+    # position cursor to 12,5
+    # display prompt
+    # set input color
+    myNumber="$(eread --auto-skip --mask="{us-phone}" --store-input --default="1234567890")"
+    # reposition to fetch notes
+    myNotes="$(eread --accept="^W,F10" --mask="{printable}" --default="$myNotes" --rows=5 --cols=50 --scroll)"
+
+I would expect the cursor to be pushed/popped back to its starting position, and if possible the console state (colors, primarily) retained. If not, easy enough to do in script.
+
+Performance isn't such a concern with this command. It's not like it's going into a loop and doing a few thousand iterations. It can be big and fat. So long as it loads within the span of a keypress or three, that should be sufficient.
+
+I know dialog et al could be used; however, what I don't like about dialog is that it is a dialog manager that expects to put boxes all over my console. I also have not found the magic to convince dialog to create a 1-row by x-col input. It's also not a masking editor, for the most part. And provides a bunch of features I'm not usually interested in. What I want is an enhanced read that doesn't add to or change my display, except as I tell it to, that can also wrangle input into a mask and other constraints.
+
+--grimblefritz

add suggestion about auto-commits including apt-get command line
diff --git a/code/etckeeper/discussion.mdwn b/code/etckeeper/discussion.mdwn
index 24dc28a..71d2d09 100644
--- a/code/etckeeper/discussion.mdwn
+++ b/code/etckeeper/discussion.mdwn
@@ -173,3 +173,17 @@ Also, openvpn/openvpn-status.log should be ignored. It is rewritten every minute
 prelink.cache should also be ignored I guess.
 
 > Added these additional FHS violators to the default ignores. --[[Joey]] 
+
+---
+
+It'd be great if the automatic commits generated by the package manager could include the command run in the commit message, like
+
+    /etc$ sudo git log --oneline
+    6bc763e committing changes in /etc after apt run: apt-get install emacs23-nox
+    96f15bf committing changes in /etc after apt run: apt-get upgrade
+    ...
+
+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
+
+
+

decruft
diff --git a/grep.mdwn b/grep.mdwn
index 9dd6946..86513f9 100644
--- a/grep.mdwn
+++ b/grep.mdwn
@@ -12,6 +12,6 @@ List of feeds:
 * [[!aggregate expirecount=25 name="commits2" feedurl="http://cia.vc/stats/author/joey/.rss" url="http://cia.vc/stats/author/joey"]]
 * [[!aggregate expirecount=25 name="identi.ca posts" feedurl="http://identi.ca/api/statuses/user_timeline/14601.rss" url="http://identi.ca/joeyh"]]
 * [[!aggregate expirecount=25 name="identi.ca replies" feedurl="http://identi.ca/joeyh/replies/rss" url="http://identi.ca/joeyh/replies"]]
-* [[!aggregate expirecount=25 name="twitter mentions" feedurl="http://search.twitter.com/search.atom?q=olduse+OR+git-annex+OR+ikiwiki+OR+debhelper+OR+etckeeper" url="http://twitter.com/"]]
+* [[!aggregate expirecount=25 name="twitter mentions" feedurl="http://search.twitter.com/search.atom?q=olduse+OR+git-annex+OR+debhelper+OR+etckeeper+OR+ikiwiki+-ashley_ikiwiki" url="http://twitter.com/"]]
 * [[!aggregate expirecount=25 name="books" feedurl="http://www.goodreads.com/review/list_rss/2159448?key=afd7e8432b3f9e33edab442a7c94e95849af4527&shelf=currently-reading" url="http://www.goodreads.com/user/show/2159448"]]
 * [[!aggregate expirecount=25 name="google" feedurl="""http://blogsearch.google.com/blogsearch_feeds?hl=en&c2coff=1&scoring=d&as_drrb=q&as_qdr=a&q=joey.kitenet.net+OR+joey@kitenet.net+OR+joeyh@debian.org+OR+"joey+hess"+OR+kitenet.net/~joey&ie=utf-8&num=10&output=rss""" url="http://blogsearch.google.com/"]]

update
diff --git a/talks.mdwn b/talks.mdwn
index ea56bc7..9fb3c41 100644
--- a/talks.mdwn
+++ b/talks.mdwn
@@ -63,3 +63,8 @@ by others.
 * "Git and Debian Packaging panel"
   - video: [low](http://meetings-archive.debian.net/pub/debian-meetings/2012/debconf12/low/861_Git_and_Debian_Packaging.ogv)
     [high](http://meetings-archive.debian.net/pub/debian-meetings/2012/debconf12/high/861_Git_and_Debian_Packaging.ogv)
+
+## Linux.Conf.AU 2013, Canberra
+
+* "git-annex"
+  - video: [ogg](http://mirror.linux.org.au/linux.conf.au/2013/ogv/gitannex.ogv)

add
diff --git a/screencasts/git-annex_assistant_introduction.mdwn b/screencasts/git-annex_assistant_introduction.mdwn
new file mode 100644
index 0000000..4a02554
--- /dev/null
+++ b/screencasts/git-annex_assistant_introduction.mdwn
@@ -0,0 +1,5 @@
+<video controls width=400>
+<source type="video/mp4" src="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.mp4">
+</video><br>
+A <a href="http://downloads.kitenet.net/videos/git-annex/git-annex-assistant-intro.mp4">8 minute screencast</a>
+introducing the [[git-annex assistant|/assistant]]</a>.

change openid provider
diff --git a/index.mdwn b/index.mdwn
index a062c13..4c050d4 100644
--- a/index.mdwn
+++ b/index.mdwn
@@ -35,5 +35,5 @@ show=3 feeds=no archive=yes]]
 <img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a>
 """]]
 
-[[!meta openid="http://joeyh.myid.net/"
-server="http://server.myid.net/server"]]
+[[!meta openid="https://joeyh.myopenid.com/"
+server="http://www.myopenid.com/server"]]

just saw the BTS link, removing my previous comment
diff --git a/code/etckeeper/discussion.mdwn b/code/etckeeper/discussion.mdwn
index 2c95d1b..24dc28a 100644
--- a/code/etckeeper/discussion.mdwn
+++ b/code/etckeeper/discussion.mdwn
@@ -173,7 +173,3 @@ Also, openvpn/openvpn-status.log should be ignored. It is rewritten every minute
 prelink.cache should also be ignored I guess.
 
 > Added these additional FHS violators to the default ignores. --[[Joey]] 
-
----
-
-A minor suggestion: etckeeper could perhaps ignore "fake-hwclock.data" (used to store the time between reboots on some systems without hardware clock) by default.

ignore "fake-hwclock.data"?
diff --git a/code/etckeeper/discussion.mdwn b/code/etckeeper/discussion.mdwn
index 24dc28a..2c95d1b 100644
--- a/code/etckeeper/discussion.mdwn
+++ b/code/etckeeper/discussion.mdwn
@@ -173,3 +173,7 @@ Also, openvpn/openvpn-status.log should be ignored. It is rewritten every minute
 prelink.cache should also be ignored I guess.
 
 > Added these additional FHS violators to the default ignores. --[[Joey]] 
+
+---
+
+A minor suggestion: etckeeper could perhaps ignore "fake-hwclock.data" (used to store the time between reboots on some systems without hardware clock) by default.

poll vote (watched it all, liked it)
diff --git a/blog/entry/watch_me_code_for_half_an_hour.mdwn b/blog/entry/watch_me_code_for_half_an_hour.mdwn
index a95cf8b..7f64f09 100644
--- a/blog/entry/watch_me_code_for_half_an_hour.mdwn
+++ b/blog/entry/watch_me_code_for_half_an_hour.mdwn
@@ -14,6 +14,6 @@ Not shown is the hour I spent the next day changing the "optimize"
 subcommand implemented here into "--auto" options that can be passed to
 [[code/git-annex]]'s get and drop commands.
 
-[[!poll 35 "watched it all, liked it" 8 "watched some, boring" 3 "too long for me" 14 "too haskell for me" 12 "not interested"]]
+[[!poll 36 "watched it all, liked it" 8 "watched some, boring" 3 "too long for me" 14 "too haskell for me" 12 "not interested"]]
 
 [[!meta title="watch me program for half an hour"]]

fix
diff --git a/blog/entry/Kickstarter_rewards_wrap-up.mdwn b/blog/entry/Kickstarter_rewards_wrap-up.mdwn
index 309df7b..f85a05b 100644
--- a/blog/entry/Kickstarter_rewards_wrap-up.mdwn
+++ b/blog/entry/Kickstarter_rewards_wrap-up.mdwn
@@ -57,7 +57,7 @@ print shops I tried have very annoying interfaces to upload artwork though.
 I had to do quite a bit of math to render TIFF files with appropriate DPI
 and margins.
 
-[[!img pics/kickstarter/keyarrived.png]]
+[[!img pics/kickstarter/keyarrived.jpg]]
 
 The USB keys were my favorite reward. I got them from
 [USB Memory Direct](http://www.usbmemorydirect.com/), who gave me quite a

blog update
diff --git a/blog/entry/Kickstarter_rewards_wrap-up.mdwn b/blog/entry/Kickstarter_rewards_wrap-up.mdwn
new file mode 100644
index 0000000..309df7b
--- /dev/null
+++ b/blog/entry/Kickstarter_rewards_wrap-up.mdwn
@@ -0,0 +1,84 @@
+I finished delivering all my
+[[Kickstarter|kickstarter_for_git-annex_assistant]] rewards at the end of
+the year. This is an overview of how that went, both financially and in
+general.
+
+[[!img pics/kickstarter/moneypie.png caption="my Kickstarter pie (not including taxes)"]]
+
+While the Kickstarter was under way, several friends warned me that I might
+end up spending a lot of the money for rewards, or even shipping, and come
+out a loser. It's happened to some people, but I avoided it. Most of the
+pie went to its intended purpose.
+
+[[!img pics/kickstarter/keyletteramsterdam.jpeg caption="USB key arrives in Amsterdam"]]
+
+I kept shipping cost low by shipping everything by US postal service,
+including Air Mail for international shipping. This was particularly
+important for the stickers (which cost $1.05 to ship internationally).
+But I also shipped USB keys in regular mail envelopes, protected by bubble
+wrap, which worked very well and avoided the bother of shipping packages.
+The USPS will be annoyed at you for a rigid letter and add a non-machinable
+surcharge, but it's still a nice savings.
+
+[[!img pics/kickstarter/expenses.png caption="expenses"]]
+
+I spent more on rewards than on transaction fees, but the fees are still
+pretty large. Being dinged a second time by Amazon is the worst part. I
+have not been able to work out exactly what formula Kickstarter uses to
+determine its fee per pledge. It does not seem to be a simple percentage of
+the pledge. For example, they seem to have charged $0.25 per $10 pledge,
+but $25 for a $500 pledge. I wanted to solve this, but I'd have to match up
+all the pledges and fees manually to do it.
+
+[[!img pics/kickstarter/rewardpie.png caption="gross income by reward type"]]
+
+This chart is slightly innacurrate, because it puts any money pledged,
+beyond the amount needed to get a reward, into the "intangibles" category,
+despite the reward being probably responsible for that money being pledged.
+
+(The intangibles also includes people who did not ask for a reward, and
+several categories of rewards not involving shipping matter around.)
+
+But, the surprise for me is how large a peice the T-shirts are responsible
+for. It was my least favorite reward, and a low volume one, but I made out
+pretty well on it. However, I'd still try to avoid putting T-shirts on
+Kickstarter again. It's hard to do a good design (I didn't, really);
+they're expensive, and were by far the most annoying thing to ship. Also, I
+was not happy with the countries Cafe Press sourced their shirts from; I've
+been to Honduras and talked with people who have relatives in las machinas.
+
+[[!img pics/kickstarter/rewardbar.png caption="gross and net income by
+reward type (excluding shipping)"]]
+
+In contrast, the stickers had an amazing margin; they're so inexpensive
+to print that I printed up two kinds and included multiple with every other
+reward I mailed. I still have hundreds left over, too.. All the online
+print shops I tried have very annoying interfaces to upload artwork though.
+I had to do quite a bit of math to render TIFF files with appropriate DPI
+and margins.
+
+[[!img pics/kickstarter/keyarrived.png]]
+
+The USB keys were my favorite reward. I got them from
+[USB Memory Direct](http://www.usbmemorydirect.com/), who gave me quite a
+nice deal. I was very happy that I was able to send them a SVG file
+of my artwork, so I didn't need to worry about lacking resolution for the
+laser engraving. And it came out looking great. 
+
+The best part was when their sales guy Mike actually did a minor alteration
+of the artwork, to better fit on the key, when I, being overloaded with
+Kickstarter stuff asked him too. A bit above and beyond.
+
+There was an issue with their Chinese manufacturer's quality control of the
+16 gb drives, but they were willing to send me replacement for all the ones
+I found problems with.
+
+----
+
+All told I spent probably 3 full days stuffing and shipping envelopes,
+and probably spent a week working on Kickstarter reward fullfillment.
+As work-related overhead goes, that's not bad. Maybe someone considering a
+Kickstarter will find this information useful somehow. Oh well, back to
+[work](http://git-annex.branchable.com/design/assistant/blog). :)
+
+[[!meta title="Kickstarter rewards wrap-up"]]
diff --git a/blog/pics/kickstarter/rewardbar.png b/blog/pics/kickstarter/rewardbar.png
index d38652e..468c5a2 100644
Binary files a/blog/pics/kickstarter/rewardbar.png and b/blog/pics/kickstarter/rewardbar.png differ

add
diff --git a/blog/pics/kickstarter/expenses.png b/blog/pics/kickstarter/expenses.png
new file mode 100644
index 0000000..eba413a
Binary files /dev/null and b/blog/pics/kickstarter/expenses.png differ
diff --git a/blog/pics/kickstarter/keyarrived.jpg b/blog/pics/kickstarter/keyarrived.jpg
new file mode 100644
index 0000000..89b65b1
Binary files /dev/null and b/blog/pics/kickstarter/keyarrived.jpg differ
diff --git a/blog/pics/kickstarter/keyletteramsterdam.jpeg b/blog/pics/kickstarter/keyletteramsterdam.jpeg
new file mode 100644
index 0000000..1c462d8
Binary files /dev/null and b/blog/pics/kickstarter/keyletteramsterdam.jpeg differ
diff --git a/blog/pics/kickstarter/moneypie.png b/blog/pics/kickstarter/moneypie.png
new file mode 100644
index 0000000..b60270f
Binary files /dev/null and b/blog/pics/kickstarter/moneypie.png differ
diff --git a/blog/pics/kickstarter/rewardbar.png b/blog/pics/kickstarter/rewardbar.png
new file mode 100644
index 0000000..d38652e
Binary files /dev/null and b/blog/pics/kickstarter/rewardbar.png differ
diff --git a/blog/pics/kickstarter/rewardpie.png b/blog/pics/kickstarter/rewardpie.png
new file mode 100644
index 0000000..6cdb2cd
Binary files /dev/null and b/blog/pics/kickstarter/rewardpie.png differ

Added a comment: Youtube mirror?
diff --git a/blog/entry/LCA2013_wrapup/comment_5_29975812e5656aad1336fb9bfe1f39b3._comment b/blog/entry/LCA2013_wrapup/comment_5_29975812e5656aad1336fb9bfe1f39b3._comment
new file mode 100644
index 0000000..b2ecbac
--- /dev/null
+++ b/blog/entry/LCA2013_wrapup/comment_5_29975812e5656aad1336fb9bfe1f39b3._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkurjhi0CRJvgm7QNaZDWS9hitBtavqIpc"
+ nickname="Bret"
+ subject="Youtube mirror?"
+ date="2013-02-15T05:44:59Z"
+ content="""
+Are these up on youtube yet?  I cant find them there as I wait for them to download.
+"""]]

add news item for mr 1.14
diff --git a/code/mr/news/version_1.13.mdwn b/code/mr/news/version_1.13.mdwn
deleted file mode 100644
index 70a13e8..0000000
--- a/code/mr/news/version_1.13.mdwn
+++ /dev/null
@@ -1,7 +0,0 @@
-mr 1.13 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Pass -q to cvs diff and update. Closes: #[673367](http://bugs.debian.org/673367)
-   * mr bootstrap: Now supports ssh:// urls.
-   * Simpler vcsh status command line. Closes: #[685089](http://bugs.debian.org/685089)
-   * Add grep subcommand. Uses ack-grep on VCS that do not have their own.
-     Closes: #[685122](http://bugs.debian.org/685122)"""]]
\ No newline at end of file
diff --git a/code/mr/news/version_1.14.mdwn b/code/mr/news/version_1.14.mdwn
new file mode 100644
index 0000000..067e138
--- /dev/null
+++ b/code/mr/news/version_1.14.mdwn
@@ -0,0 +1,9 @@
+mr 1.14 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Added a fetch command. Closes: #[480580](http://bugs.debian.org/480580)
+   * status: Now includes information about unpushed changes,
+     for git, git-svn, hg, and bzr. Closes: #[693021](http://bugs.debian.org/693021)
+   * Added lib/vis, an add-on to visualise repo history.
+     Closes: #[693022](http://bugs.debian.org/693022) Thanks, Paul Wise
+   * Drop an extra -m from various commit/record commands.
+     Closes: #[695478](http://bugs.debian.org/695478) Thanks, Paul Wise"""]]
\ No newline at end of file

Added a comment
diff --git a/blog/entry/Sydney_nostalgia/comment_1_2b77104b4b7f69a49d9401eb071c33ee._comment b/blog/entry/Sydney_nostalgia/comment_1_2b77104b4b7f69a49d9401eb071c33ee._comment
new file mode 100644
index 0000000..6e496bd
--- /dev/null
+++ b/blog/entry/Sydney_nostalgia/comment_1_2b77104b4b7f69a49d9401eb071c33ee._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawl97HnGsiJRJZmMog8r_5is4o6DWAsFXh8"
+ nickname="Carlo"
+ subject="comment 1"
+ date="2013-02-12T01:28:32Z"
+ content="""
+For some history of the place, I highly recommend _The Fatal Shore_ by Robert Hughes.
+"""]]

Added a comment: Unexpected monad
diff --git a/blog/entry/LCA2013_wrapup/comment_4_7705f0abb9124eb0d40ef4e942af8764._comment b/blog/entry/LCA2013_wrapup/comment_4_7705f0abb9124eb0d40ef4e942af8764._comment
new file mode 100644
index 0000000..fc53ecc
--- /dev/null
+++ b/blog/entry/LCA2013_wrapup/comment_4_7705f0abb9124eb0d40ef4e942af8764._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkeoejgDbtIG_WBFDiBcreNtUPLK8znZiA"
+ nickname="Patrick"
+ subject="Unexpected monad"
+ date="2013-02-09T03:57:10Z"
+ content="""
+Well if they read this I am looking forward to it.
+"""]]

Added a comment
diff --git a/blog/entry/LCA2013_wrapup/comment_3_76cd42cf51060389a4174b147ede502d._comment b/blog/entry/LCA2013_wrapup/comment_3_76cd42cf51060389a4174b147ede502d._comment
new file mode 100644
index 0000000..c5d28a8
--- /dev/null
+++ b/blog/entry/LCA2013_wrapup/comment_3_76cd42cf51060389a4174b147ede502d._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="4.152.108.183"
+ subject="comment 3"
+ date="2013-02-09T01:53:06Z"
+ content="""
+I don't want to steal anyone's thunder, but I will say it uses a most unexpected monad.. ;)
+"""]]

removed
diff --git a/blog/entry/LCA2013_wrapup/comment_2_fa05f892bfaa7a4963917d94071528fc._comment b/blog/entry/LCA2013_wrapup/comment_2_fa05f892bfaa7a4963917d94071528fc._comment
deleted file mode 100644
index 05a7d0d..0000000
--- a/blog/entry/LCA2013_wrapup/comment_2_fa05f892bfaa7a4963917d94071528fc._comment
+++ /dev/null
@@ -1,10 +0,0 @@
-[[!comment format=mdwn
- username="https://www.google.com/accounts/o8/id?id=AItOawkeoejgDbtIG_WBFDiBcreNtUPLK8znZiA"
- nickname="Patrick"
- subject="Another waiting in the wings"
- date="2013-02-08T07:34:54Z"
- content="""
->  including details of IO management frameworks like conduit and pipes, and a new one that's waiting in the wings. 
-
-Anything public yet? Or any hints at what it brings to the table over conduit and/or pipes. I have really enjoyed writing some pipes code recently and have been trying to keep an eye on the space in general.
-"""]]

Added a comment: Another waiting in the wings
diff --git a/blog/entry/LCA2013_wrapup/comment_3_260a98f300291a434ad0439bc0b2345c._comment b/blog/entry/LCA2013_wrapup/comment_3_260a98f300291a434ad0439bc0b2345c._comment
new file mode 100644
index 0000000..af61e69
--- /dev/null
+++ b/blog/entry/LCA2013_wrapup/comment_3_260a98f300291a434ad0439bc0b2345c._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkeoejgDbtIG_WBFDiBcreNtUPLK8znZiA"
+ nickname="Patrick"
+ subject="Another waiting in the wings"
+ date="2013-02-08T07:35:33Z"
+ content="""
+>  including details of IO management frameworks like conduit and pipes, and a new one that's waiting in the wings. 
+
+Anything public yet? Or any hints at what it brings to the table over conduit and/or pipes. I have really enjoyed writing some pipes code recently and have been trying to keep an eye on the space in general.
+"""]]

Added a comment: Another waiting in the wings
diff --git a/blog/entry/LCA2013_wrapup/comment_2_fa05f892bfaa7a4963917d94071528fc._comment b/blog/entry/LCA2013_wrapup/comment_2_fa05f892bfaa7a4963917d94071528fc._comment
new file mode 100644
index 0000000..05a7d0d
--- /dev/null
+++ b/blog/entry/LCA2013_wrapup/comment_2_fa05f892bfaa7a4963917d94071528fc._comment
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkeoejgDbtIG_WBFDiBcreNtUPLK8znZiA"
+ nickname="Patrick"
+ subject="Another waiting in the wings"
+ date="2013-02-08T07:34:54Z"
+ content="""
+>  including details of IO management frameworks like conduit and pipes, and a new one that's waiting in the wings. 
+
+Anything public yet? Or any hints at what it brings to the table over conduit and/or pipes. I have really enjoyed writing some pipes code recently and have been trying to keep an eye on the space in general.
+"""]]

update
diff --git a/blog/entry/Sydney_nostalgia.mdwn b/blog/entry/Sydney_nostalgia.mdwn
index 8e5703f..c8e19a9 100644
--- a/blog/entry/Sydney_nostalgia.mdwn
+++ b/blog/entry/Sydney_nostalgia.mdwn
@@ -1,11 +1,11 @@
-[[!img pics/operahouse.jpg size=x400]]
+[[!img pics/operahouse.jpg size=x350 alt="Sydney opera house viewed from a ferry"]]
 
 Last Saturday, when the bus from Canberra pulled into Sydney's central
 station, I found myself feeling curiously nostalgic for this city, and
 particularly this bustling and somewhat seedy[1] neighborhood of Haymarket
 and Redfern.
 
-[[!img pics/kimberlang.jpg size=x400]]
+[[!img pics/kimberlane.jpg size=x400 alt="glowing angels in Kimber lane"]]
 
 I only spent 5 days in Sydney, but living in a shared house there, walking
 up to Central every day, and returning to the outskirts of the Haymarket
@@ -13,18 +13,19 @@ every evening to slurp noodles or other asian food, I got into a routine.
 And got a sense of the place that goes perhaps a bit beyond the tourist
 sights.
 
-[[!img pics/manlypano.jpg size=1024x]]
+[[!img pics/manlypano.jpg size=1024x alt="Manly beach panorama"]]
 
 Perhaps if I'd had more time I would have found a decent coffee shop
 that had both free wifi and abundant seating. They seem scarce in Sydney.
 I instead often got on the ferry to Manly when I wanted some sit down and
 code time.
 
-[[!img pics/cliffside.jpg size=300x]]
+[[!img pics/cliffside.jpg size=300x alt="Cliffside"]]
+[[!img pics/protectdragons.jpg size=300x alt="Protect Our Water Dragons sign"]]  
 One time when I was exploring the headlands above Manly beach, I noticed
-this sign. [[!img pics/protectdragons.jpg size=300x]] Then I ran into this
-guy. Click him for an amusing video.
-[[!img pics/waterdragon.jpg size=300x link=http://downloads.kitenet.net/videos/dragon.ogv]]
+this sign.  
+Then I ran into this guy. Click him for an amusing video.  
+[[!img pics/waterdragon.jpg alt="lizard" size=300x link=http://downloads.kitenet.net/videos/dragon.ogv]]
 
 Anyway, Sydney is on my very short list of cities I'd actually enjoy spending
 some more time in some day, along with San Francisco, Vancouver, Oslo, and
@@ -33,6 +34,6 @@ London.
 ----
 
 [1] Depending on what's inside all the "VIP lounges" and "Thai massage
-parlours" that I did not explore, perhaps thouroughly seedy?
+parlours" on every corner that I did not explore, perhaps thoroughly seedy?
 
 [[!meta title="Sydney nostalgia"]]

blog update
diff --git a/blog/entry/Sydney_nostalgia.mdwn b/blog/entry/Sydney_nostalgia.mdwn
new file mode 100644
index 0000000..8e5703f
--- /dev/null
+++ b/blog/entry/Sydney_nostalgia.mdwn
@@ -0,0 +1,38 @@
+[[!img pics/operahouse.jpg size=x400]]
+
+Last Saturday, when the bus from Canberra pulled into Sydney's central
+station, I found myself feeling curiously nostalgic for this city, and
+particularly this bustling and somewhat seedy[1] neighborhood of Haymarket
+and Redfern.
+
+[[!img pics/kimberlang.jpg size=x400]]
+
+I only spent 5 days in Sydney, but living in a shared house there, walking
+up to Central every day, and returning to the outskirts of the Haymarket
+every evening to slurp noodles or other asian food, I got into a routine.
+And got a sense of the place that goes perhaps a bit beyond the tourist
+sights.
+
+[[!img pics/manlypano.jpg size=1024x]]
+
+Perhaps if I'd had more time I would have found a decent coffee shop
+that had both free wifi and abundant seating. They seem scarce in Sydney.
+I instead often got on the ferry to Manly when I wanted some sit down and
+code time.
+
+[[!img pics/cliffside.jpg size=300x]]
+One time when I was exploring the headlands above Manly beach, I noticed
+this sign. [[!img pics/protectdragons.jpg size=300x]] Then I ran into this
+guy. Click him for an amusing video.
+[[!img pics/waterdragon.jpg size=300x link=http://downloads.kitenet.net/videos/dragon.ogv]]
+
+Anyway, Sydney is on my very short list of cities I'd actually enjoy spending
+some more time in some day, along with San Francisco, Vancouver, Oslo, and
+London.
+
+----
+
+[1] Depending on what's inside all the "VIP lounges" and "Thai massage
+parlours" that I did not explore, perhaps thouroughly seedy?
+
+[[!meta title="Sydney nostalgia"]]

Added a comment
diff --git a/blog/entry/LCA2013_wrapup/comment_1_a30bef5b78d1d54144cbe35768f53cae._comment b/blog/entry/LCA2013_wrapup/comment_1_a30bef5b78d1d54144cbe35768f53cae._comment
new file mode 100644
index 0000000..5c33bb8
--- /dev/null
+++ b/blog/entry/LCA2013_wrapup/comment_1_a30bef5b78d1d54144cbe35768f53cae._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://joshtriplett.org/"
+ nickname="Josh"
+ subject="comment 1"
+ date="2013-02-07T10:33:50Z"
+ content="""
+s/Jamie/Jamey/
+"""]]

blog update
diff --git a/blog/entry/LCA2013_wrapup.mdwn b/blog/entry/LCA2013_wrapup.mdwn
new file mode 100644
index 0000000..91263c1
--- /dev/null
+++ b/blog/entry/LCA2013_wrapup.mdwn
@@ -0,0 +1,106 @@
+After 27 hours of travel, I'm finally back from my
+first [Linux.conf.au](http://linux.conf.au/).
+
+This was a great conference! Some of my favorite highlights:
+
+* Out for dinner the first night, my whole table started spontaneously 
+  talking about Haskell, including details of IO management frameworks
+  like conduit and pipes, and a new one that's waiting in the wings.
+  That just doesn't happen in the real world. A lot of us continued to
+  do Haskell stuff in the hallway track, although for some reason there
+  were no Haskell talks on the official schedule. Maybe it's time for a
+  Haskell miniconf at LCA?
+* Meeting Josh, Jamie, Sarah, Brendan, Craig, and others I've worked with
+  online but never encountered IRL. Also reconnecting with old friends
+  (some I'd not seen in 13 years) and finding new ones.
+* The speaker's dinner in a revolving restaurant overlooking Canberra.
+  Leave it to a restaurant full of geeks to invent an asychronous communications
+  medium in such a setting. (Notes attached to windows to be read and
+  answered by tables as they rotated by.)
+* Meeting quite a lot of git-annex users, Kickstarter backers, and
+  people interested in using git-annex. Thanks to everyone who came up
+  to me for a chat.
+* The evening pickup board game sessions. Especially my wiping out three
+  other Tsuro players at once by forcing them all to end on the same square. ;)
+  These were where I felt the most at home in Australia.
+* [Robert Llewellyn](http://en.wikipedia.org/wiki/Robert_Llewellyn) dropping
+  in and mingling with fans of Red Dwarf and Scrapheap Challenge. One of the
+  very few actors I could possibly fanboy on, and LCA not only somehow got
+  him, but constructed an atmosphere that allowed for this photo of us.
+
+[[!img blog/pics/with_Llewellyn.jpg size=320x]]
+
+----
+
+[My git-annex talk](http://mirror.linux.org.au/linux.conf.au/2013/mp4/gitannex.mp4)
+went ok, despite technical problems with the video output, which the video
+team did a great job of working around. The first demo went well, and the Q&A
+was excellent.
+
+The demo of the git-annex assistant webapp was marred by, apparently, a
+bad build of the webapp -- which I ironically used rather than my usual
+development build because I assumed it'd be less likely to fail. At least I
+may have a way to reproduce that hang somewhat reliably now, so I can get
+on with debugging it. I will be redoing a demo of the webapp as a screencast.
+
+----
+
+Here are some of the best talks I attended. (I have quite a lot more queued
+up to watch still, and had to cut several due to space.) 
+Click titles for videos, or [browse all the videos](http://mirror.linux.org.au/linux.conf.au/2013/mp4/).
+
+* [Git for Ages 4 and Up](http://mirror.linux.org.au/linux.conf.au/2013/mp4/Git_For_Ages_4_And_Up.mp4)  
+  Schwern has found a new, excellent way to explain git. I felt rather
+  bad for using up a seat, especially once people were kicked out
+  when the room was filled over capacity. But I enjoyed every minute of it.
+  (Also has the best speaker intro ever. "Schwern once typed `git pull --hard`
+  and pulled GitHub's sever room across the street.")
+
+  [[!img blog/pics/git4up.png size=320x caption="""
+  BTW, I must confess: I left the red apple on teacher's desk.
+  """]]
+
+* [Radia Perlman's keynote](http://mirror.linux.org.au/linux.conf.au/2013/mp4/Keynote_Radia_Perlman.mp4)  
+  Network protocol design and poetry from one of the quiet heros of
+  our field. I knew Spanning Tree Protocol was used in ethernet,
+  but it just works, so like many I never paid much attention to it.
+  This talk felt like the best lectures, where you're learning from a master
+  on multiple levels at once.
+  Well done work often becomes an unremarked part of the landscape,
+  which I sometimes find unrewarding, so it was great to have Radia give
+  some perspective on what that's like over the course of decades.
+
+* [Lightning Talks](http://mirror.linux.org.au/linux.conf.au/2013/mp4/Conference_Closing_Lightning_Talks.mp4)  
+  A 90 second time limit really helps. Too many conferences have 5 minute
+  talks, which is less exciting. If you still find them boring,
+  skip forward to 13:50, where [pjf](http://twitter.com/pjf)
+  does two talks in 90 seconds! (If a 20 second talk on depression
+  is too .. manic, there's an encore at the end.)
+
+* [The IPocalypse 20 months later](http://mirror.linux.org.au/linux.conf.au/2013/mp4/The_IPocalypse_20_months_later.mp4)  
+  A reality check, with real data. Very important stuff here.
+  We need to work to avoid this worst case scenario, and we also need to design
+  around it.
+
+* [REPENT!!! FOR THE END OF THE UNIX EPOCH IS NIGH!!!](http://mirror.linux.org.au/linux.conf.au/2013/mp4/REPENT_FOR_THE_END_OF_THE_UNIX_EPOCH_IS_NIGH.mp4)  
+  Wildest talk beginning I've seen since RMS put the hard drive halo on his
+  head. And to an important point: Any programs that deal with dates 25 years
+  in the future already need to be fixed today to deal with the epoch rollover.
+  This got me digging around in Haskell date libraries, to make sure they're
+  ok.
+
+* [Building Persona: Federated and Privacy Sensitive Identity for the Web](http://mirror.linux.org.au/linux.conf.au/2013/mp4/Building_Persona_federated_and_privacysensitive_identity_for_the_Web.mp4)  
+  This talk and some previous conversation with Francois have convinced
+  me that Persona (AKA Browserid) has a design that can succeed.
+  I will be adding Persona login support to ikiwiki.
+
+* [Beyond Alt Text: What Every Project Should Know About Accessibility](http://mirror.linux.org.au/linux.conf.au/2013/mp4/Beyond_Alt_Text_What_Every_Project_Should_Know_About_Accessibility.mp4)  
+  I missed the first half due to giving my talk, but the second half
+  was full of rather a lot of excellent information, some of which I'd 
+  only guessed at before.
+
+* [Git: Not Just for Source Code Anymore](http://mirror.linux.org.au/linux.conf.au/2013/mp4/Git_not_just_for_source_code_anymore.mp4)  
+  Good overview of the new ways to use git. Also kept giving examples from
+  my body of work, which is some nice ego stroking, thanks Josh. ;-)
+
+[[!meta title="LCA2013 wrapup"]]
diff --git a/blog/pics/cliffside.jpg b/blog/pics/cliffside.jpg
new file mode 100644
index 0000000..bbb60fb
Binary files /dev/null and b/blog/pics/cliffside.jpg differ
diff --git a/blog/pics/kimberlane.jpg b/blog/pics/kimberlane.jpg
new file mode 100644
index 0000000..35ad79c
Binary files /dev/null and b/blog/pics/kimberlane.jpg differ
diff --git a/blog/pics/manlypano.jpg b/blog/pics/manlypano.jpg
new file mode 100644
index 0000000..2db8be0
Binary files /dev/null and b/blog/pics/manlypano.jpg differ
diff --git a/blog/pics/operahouse.jpg b/blog/pics/operahouse.jpg
new file mode 100644
index 0000000..9d1c164
Binary files /dev/null and b/blog/pics/operahouse.jpg differ
diff --git a/blog/pics/protectdragons.jpg b/blog/pics/protectdragons.jpg
new file mode 100644
index 0000000..ad4aa7b
Binary files /dev/null and b/blog/pics/protectdragons.jpg differ
diff --git a/blog/pics/waterdragon.jpg b/blog/pics/waterdragon.jpg
new file mode 100644
index 0000000..352202d
Binary files /dev/null and b/blog/pics/waterdragon.jpg differ

add
diff --git a/blog/pics/with_Llewellyn.jpg b/blog/pics/with_Llewellyn.jpg
new file mode 100644
index 0000000..141aeed
Binary files /dev/null and b/blog/pics/with_Llewellyn.jpg differ

added
diff --git a/blog/pics/git4up.png b/blog/pics/git4up.png
new file mode 100644
index 0000000..e65add3
Binary files /dev/null and b/blog/pics/git4up.png differ

Add vidir suggestion
diff --git a/code/moreutils/discussion.mdwn b/code/moreutils/discussion.mdwn
index 14dd91f..6469c4e 100644
--- a/code/moreutils/discussion.mdwn
+++ b/code/moreutils/discussion.mdwn
@@ -164,6 +164,9 @@ it would first present a summary of the request (“the following commands will
 remove blah, remove blah, rename blahblah etc; proceed? yes/no/all”), aborting on ‘n’o, doing
 everything on ‘a’ll, or ask again before each action (yes/no/all the rest). --G. Bilotta
 
+Another possible improvement would be to automatically create needed directories.
+For example, renaming dir/file to dir2/file will also create "dir2" to avoid a failing mv.
+This may be an option or a change to the default behavior, I'm not sure what's better. -- M. Poletti
 
 ## seddir?
 

Added a comment: Limiting shell access to multiple
diff --git a/blog/entry/locking_down_ssh_authorized_keys/comment_2_9ab226f97ba77b3a56a51a9fdc253ab2._comment b/blog/entry/locking_down_ssh_authorized_keys/comment_2_9ab226f97ba77b3a56a51a9fdc253ab2._comment
new file mode 100644
index 0000000..f038dc3
--- /dev/null
+++ b/blog/entry/locking_down_ssh_authorized_keys/comment_2_9ab226f97ba77b3a56a51a9fdc253ab2._comment
@@ -0,0 +1,51 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmr2PNRkbu0FVq8LvqiweC5OtGq4BnqIEY"
+ nickname="Galen"
+ subject="Limiting shell access to multiple "
+ date="2013-01-30T07:12:13Z"
+ content="""
+Since git 1.7.4, you can extend git-shell with custom commands by placing executables in ~/git-shell-commands (see the [git-shell][1] man page for details). The user must have read and execute permissions on this directory and (as with all commands) execute permission on the executables. According to user mimrock in answer to his \"[Custom commands with git-shell][2]\" question, these commands only work in interactive mode as of 1.7.10. For earlier and later versions of git, you can use a shell script to run commands in git-shell-commands in non-interactive mode:
+
+    #!/bin/bash                                                                     
+    
+    cmdline=($1)
+    cmd=$(basename \"${cmdline[0]}\")
+    
+    if [ -z \"$cmd\" ] ; then
+        exec git-shell
+    elif [ -n \"$cmd\" -a -x ~/git-shell-commands/\"$cmd\" ] ; then
+        ~/git-shell-commands/\"$cmd\" \"${cmdline[@]:1}\"
+    else
+        exec git-shell -c \"$1\"
+    fi
+
+Use this in place of git-shell in the authorize_keys \"command\" option. Invocation is basically the same as for git-shell. Assuming the script is named \"sshsh\", and following svend's example, we have:
+
+    command=\"sshsh \\"$SSH_ORIGINAL_COMMAND\\"\" ...
+
+If you'd rather not require `$SSH_ORIGINAL_COMMAND` to be quoted, use the following script:
+
+    #!/bin/bash                                                                     
+    
+    cmd=$(basename $1)
+    
+    if [ -z \"$cmd\" ] ; then
+        exec git-shell
+    elif [ -n \"$cmd\" -a -x ~/git-shell-commands/\"$cmd\" ] ; then
+        shift
+        ~/git-shell-commands/\"$cmd\" \"$@\"
+    else
+        exec git-shell -c \"$*\"
+    fi
+
+The authorized_key entry then becomes:
+
+    command=\"sshsh $SSH_ORIGINAL_COMMAND\" ...
+
+Any other commands you wish to allow through ssh can be created within ~/git-shell-commands as links or scripts. For example, to allow rsync as well as git:
+
+    $ ln -s $(which rsync) ~/git-shell-commands/
+
+  [1]: http://git-scm.com/docs/git-shell/1.7.4
+  [2]: http://stackoverflow.com/q/14460967/90527
+"""]]

Added a comment
diff --git a/blog/entry/in_Sydney/comment_3_c70ef0b73ba43df220900132d151a5fc._comment b/blog/entry/in_Sydney/comment_3_c70ef0b73ba43df220900132d151a5fc._comment
new file mode 100644
index 0000000..1be7025
--- /dev/null
+++ b/blog/entry/in_Sydney/comment_3_c70ef0b73ba43df220900132d151a5fc._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="2001:4978:f:21a::2"
+ subject="comment 3"
+ date="2013-01-24T02:09:56Z"
+ content="""
+I enjoy meeting Haskellers, would be up for that tomorrow. Shoot me an email id@joeyh.name
+"""]]

Added a comment: Workbench
diff --git a/blog/entry/in_Sydney/comment_2_47b7fd58c3be1e5dd4821821878d7db0._comment b/blog/entry/in_Sydney/comment_2_47b7fd58c3be1e5dd4821821878d7db0._comment
new file mode 100644
index 0000000..9d2485c
--- /dev/null
+++ b/blog/entry/in_Sydney/comment_2_47b7fd58c3be1e5dd4821821878d7db0._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawn3JlV5JO2Tbp9N4LIEq1lhok4DlVa86K4"
+ nickname="Mark"
+ subject="Workbench"
+ date="2013-01-23T22:26:38Z"
+ content="""
+There's theworkben.ch - also, some of us get out to sweeney's pub on fridays and commandeer a table. Let me know if you want to meet up, always good to meet overseas Haskellers.
+"""]]

Added a comment: Fishburners in Ultimo
diff --git a/blog/entry/in_Sydney/comment_1_9295f889c3a78caab4db4c9d69e5057c._comment b/blog/entry/in_Sydney/comment_1_9295f889c3a78caab4db4c9d69e5057c._comment
new file mode 100644
index 0000000..21d5406
--- /dev/null
+++ b/blog/entry/in_Sydney/comment_1_9295f889c3a78caab4db4c9d69e5057c._comment
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkzny8YFnEVYGA7MkjdTMWB0DxNNsuZXZs"
+ nickname="Simon"
+ subject="Fishburners in Ultimo"
+ date="2013-01-23T13:46:11Z"
+ content="""
+I've never been but Fishburners is close to you in Central.
+
+http://fishburners.org/
+
+Though more startup co-working rather then hackerspace.
+"""]]

sillyness
diff --git a/blog/entry/in_Sydney.mdwn b/blog/entry/in_Sydney.mdwn
index 62c2842..420d704 100644
--- a/blog/entry/in_Sydney.mdwn
+++ b/blog/entry/in_Sydney.mdwn
@@ -9,7 +9,7 @@ very convenient to transport and there's lots of cheap ethnic food.
 Today I took the ferry over to [Manly Beach](http://en.wikipedia.org/wiki/Manly_beach).
 I had to get in some in swimming of course, although today was cloudy and only
 in the 80's (F). That was ok, but the really nice bit was walking over to
-[Shelly Beach](http://en.wikipedia.org/wiki/Shelly_Beach_(Manly))
+[Shelly Beach](http://bit.ly/ijHVQR)
 and up along the sandstone cliffs near
 [North Head](http://en.wikipedia.org/wiki/Sydney_Heads).
 

typo
diff --git a/blog/entry/in_Sydney.mdwn b/blog/entry/in_Sydney.mdwn
index 806b9b2..62c2842 100644
--- a/blog/entry/in_Sydney.mdwn
+++ b/blog/entry/in_Sydney.mdwn
@@ -9,7 +9,7 @@ very convenient to transport and there's lots of cheap ethnic food.
 Today I took the ferry over to [Manly Beach](http://en.wikipedia.org/wiki/Manly_beach).
 I had to get in some in swimming of course, although today was cloudy and only
 in the 80's (F). That was ok, but the really nice bit was walking over to
-[Shelly Beach](http://en.wikipedia.org/wiki/Shelly_Beach_(Manly)
+[Shelly Beach](http://en.wikipedia.org/wiki/Shelly_Beach_(Manly))
 and up along the sandstone cliffs near
 [North Head](http://en.wikipedia.org/wiki/Sydney_Heads).
 

blog update
diff --git a/blog/entry/in_Sydney.mdwn b/blog/entry/in_Sydney.mdwn
new file mode 100644
index 0000000..806b9b2
--- /dev/null
+++ b/blog/entry/in_Sydney.mdwn
@@ -0,0 +1,32 @@
+After arriving yesterday, and doing the obligatory jetlagged wander around
+[Circular Quay](http://en.wikipedia.org/wiki/Circular_Quay) to the
+Opera House, I crashed for 15 hours sleep and seem reasonably well over the
+jetlag now. I'm staying near Central Station, which is great because it's
+very convenient to transport and there's lots of cheap ethnic food.
+
+[[!img pics/chalmersst.jpg size=640x caption="view down my street"]]
+
+Today I took the ferry over to [Manly Beach](http://en.wikipedia.org/wiki/Manly_beach).
+I had to get in some in swimming of course, although today was cloudy and only
+in the 80's (F). That was ok, but the really nice bit was walking over to
+[Shelly Beach](http://en.wikipedia.org/wiki/Shelly_Beach_(Manly)
+and up along the sandstone cliffs near
+[North Head](http://en.wikipedia.org/wiki/Sydney_Heads).
+
+Highlight was finding a small gotto high on the cliff,
+with some beautiful sandstone filigree overhead,
+that seemed carved by water (but probably really by wind), and
+contained a shady bench overlooking the Pacific.
+Great place to enjoy a lunch of crusty bread and salami if you're
+ever in the area.
+
+Topped off a great day with a random trip to
+[Neutral Bay](http://en.wikipedia.org/wiki/Neutral_Bay)
+(the D&Der in me liked the name, and why not, ferries are free) and
+a wander through the
+[Royal Botanic Gardens](http://en.wikipedia.org/wiki/Royal_Botanical_Gardens,_Sydney).
+
+I'm hoping to spend either Thursday or Friday at a co-working or hackerspace
+in Sydney, but I don't know where yet. Any locals have ideas?
+
+[[!meta title="in Sydney"]]

add
diff --git a/blog/pics/chalmersst.jpg b/blog/pics/chalmersst.jpg
new file mode 100644
index 0000000..ec02ceb
Binary files /dev/null and b/blog/pics/chalmersst.jpg differ

PATCH: make -i and -n not mutually exclusive in parallel
diff --git a/code/moreutils/discussion.mdwn b/code/moreutils/discussion.mdwn
index 8d47ab8..14dd91f 100644
--- a/code/moreutils/discussion.mdwn
+++ b/code/moreutils/discussion.mdwn
@@ -304,6 +304,24 @@ It would be great if sponge had this same feature as an option: only create the
 
 Need to resolve the name conflict with GNU parallel (http://www.gnu.org/software/parallel/).  As far as I can tell, these are two distinct implementations addressing the same general problem space. --ckester
 
+##### PATCH: make -i and -n not mutually exclusive in parallel
+I wrote some patches for parallel (https://github.com/ghuls/moreutils-parallel/commits/master), so now -i and -n are not mutually exclusive. Also parallel -h displays all options with a small description. The manual page has some additional examples too.
+
+    parallel -j 3 -i mv {}.JPG {}.jpeg -- photo1 photo2 photo3
+
+      This  runs three mv commands at the same time.  In each mv command, the
+      {} strings will be replaced by the current argument.  For the first  mv
+      command, the executed command line will be: mv photo1.JPG photo1.jpeg
+
+    parallel -j 2 -n 2 -i mv {}.JPG {}.jpeg -- photo1 photo2 photo3 photo4
+
+      This runs two mv commands at the same time.  In each mv command, the {}
+      strings will be replaced by different arguments.  For the first mv com‐
+      mand, the executed command line will be: mv photo1.JPG photo2.jpeg
+
+-- Gert Hulselmans
+
+
 ## "sponge" being careful with symlinks
 
 I wonder whether "sponge" will preserve symlinks and replace the content of a symlinked file with the new content (like expected from "editing in place" or from the usual shell redicrections to symlinks), as asked in [a question at that Q&A site](http://unix.stackexchange.com/q/9318/4319).

Added a comment
diff --git a/blog/entry/trying_obnam/comment_4_afbf5ad8a9a374d888f5a725eb46e4d1._comment b/blog/entry/trying_obnam/comment_4_afbf5ad8a9a374d888f5a725eb46e4d1._comment
new file mode 100644
index 0000000..a4d27f1
--- /dev/null
+++ b/blog/entry/trying_obnam/comment_4_afbf5ad8a9a374d888f5a725eb46e4d1._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joeyh.name/"
+ ip="2001:4978:f:21a::2"
+ subject="comment 4"
+ date="2013-01-16T18:52:45Z"
+ content="""
+I'm still using obnam after 6 months. Fairly happily.
+"""]]

Added a comment
diff --git a/blog/entry/trying_obnam/comment_3_9d3f91bbea8fb95cd2a11b3fd0f13453._comment b/blog/entry/trying_obnam/comment_3_9d3f91bbea8fb95cd2a11b3fd0f13453._comment
new file mode 100644
index 0000000..ac07f12
--- /dev/null
+++ b/blog/entry/trying_obnam/comment_3_9d3f91bbea8fb95cd2a11b3fd0f13453._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://pigmonkey.myopenid.com/"
+ ip="24.16.193.140"
+ subject="comment 3"
+ date="2013-01-15T19:08:31Z"
+ content="""
+Are you still using obnam? I'd be curious to hear your thoughts on it after half a year of use. (Or, if you're not using it, what you've replaced it with for encrypted network backups.)
+"""]]