home of the madduck/
RecentChanges

Recent changes to this wiki:

new post
diff --git a/blog/2013.05.19:streaming-a-camera-to-the-local-network.mdwn b/blog/2013.05.19:streaming-a-camera-to-the-local-network.mdwn
new file mode 100644
index 0000000..0440f72
--- /dev/null
+++ b/blog/2013.05.19:streaming-a-camera-to-the-local-network.mdwn
@@ -0,0 +1,19 @@
+[[!meta title="Streaming a camera to the local network"]]
+[[!tag blog planet-debian lazyweb usb camera raspi]]
+
+I have a [Raspberry Pi](http://www.raspberrypi.org/) running
+[Raspbian](http://www.raspbian.org/) (wheezy) with a [[!wikipedia desc=UVC
+USB_video_device_class]] camera available as `/dev/video0`.
+
+I've been trying for three weeks to live-stream the picture from the camera
+onto the local network. I have tried [crtmpserver](http://rtmpd.com) and
+[vlc](http://videolan.org), read several dozens of how-tos, but so far I have
+not been able to get a streaming setup working, no matter what I tried.
+
+Hence my plea to the lazy web: does anyone have such a setup running on top of
+Debian? Would you please [let me know how you did
+it](mailto:camera-streaming@pobox.madduck.net)?
+
+Thanks a lot!
+
+NP: [Eels](http://www.allmusic.com/cg/amg.dll?SQL=Eels&P=amg&OPT1=1): *End Times*

new post
diff --git a/blog/2013.04.04:packaging-workflows.mdwn b/blog/2013.04.04:packaging-workflows.mdwn
new file mode 100644
index 0000000..85d0643
--- /dev/null
+++ b/blog/2013.04.04:packaging-workflows.mdwn
@@ -0,0 +1,12 @@
+[[!meta title="Packaging workflows"]]
+[[!tag blog vcs git vcs-pkg debian planet-debian]]
+
+[All](http://danielpocock.com/autotools-project-distribution-and-packaging-on-debian)
+[recent](http://joeyh.name/blog/entry/upstream_git_repositories/)
+[articles](http://www.eyrie.org/~eagle/journal/2013-04/001.html)
+[on](http://thomas.goirand.fr/blog/?p=94)
+[packaging](http://danielpocock.com/comparing-packaging-workflows-in-debian-and-beyond)
+[using](http://blog.brlink.eu/index.html#i62)
+a version control system should really appear over at [Planet
+vcs-pkg](http://vcs-pkg.org/planet/). Feel free to just ping me with a feed
+URL that is vcs-pkg-specific.

fix typos and links
diff --git a/blog/2013.02.01:a-botnet-for-configuration-management.mdwn b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
index 03a86f7..3061ab9 100644
--- a/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
+++ b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
@@ -31,9 +31,9 @@ Salt has some very good ideas, for instance:
     implemented through persistent connections from the clients to the
     master. This neatly solves all problems relating to firewalling and NAT,
     and it also means that the master always has a pretty good understanding
-    of who's around. It feels good to me. And there is no [[!wikipedia NIH]]
-    going on with respect to pulling: there is no daemon, you have to use
-    `cron`. Good.
+    of who's around. It feels good to me. And there is no [[!wikipedia
+    desc=NIH Not_Invented_Here]] going on with respect to pulling: there is no
+    daemon, you have to use `cron`. Good.
 
 But there are also a couple of downsides to Salt:
 
@@ -119,7 +119,7 @@ But there are also a couple of downsides to Salt:
     `msgpack` apparently [cannot handle
     Unicode](https://github.com/saltstack/salt/issues/3436). Yay.
 
-Those are the big issues. There are many small issues two, but those won't be
+Those are the big issues. There are many small issues too, but those won't be
 around for too long as the project is moving along quickly and the community
 is vibrant. This is surely an important point that speaks for Salt.
 

remove width from content div
diff --git a/local.css b/local.css
index aa34e2a..9fd680f 100644
--- a/local.css
+++ b/local.css
@@ -99,9 +99,9 @@ h1, h2, h3, h4, h5¸ h6 {
   margin-top: 0;
 }
 
-#content p, #content pre, #content ul, #content ol, #content dl, #content {
+/*#content p, #content pre, #content ul, #content ol, #content dl, #content {
   width: 36em;
-}
+}*/
 
 #content hr {
   width: 36em;

link fix
diff --git a/blog/2013.02.01:a-botnet-for-configuration-management.mdwn b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
index 8f2b62c..03a86f7 100644
--- a/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
+++ b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
@@ -157,9 +157,10 @@ Here are some thoughts:
     case for this.
 
   - The clients should be able to feed back information to the master, where
-    data can be accumulated, allowing for cross-node configuration (cf.
-    http://comments.gmane.org/gmane.comp.sysutils.salt.user/2098). This could
-    be implemented using master-side polls to keep the protocol easier.
+    data can be accumulated, allowing [for cross-node
+    configuration](http://comments.gmane.org/gmane.comp.sysutils.salt.user/2098).
+    This could be implemented using master-side polls to keep the protocol
+    easier.
 
 Doesn't this sound like a Unix botnet to you? ;)
 

creating tag page tag/remote-execution
diff --git a/tag/remote-execution.mdwn b/tag/remote-execution.mdwn
new file mode 100644
index 0000000..78b98a4
--- /dev/null
+++ b/tag/remote-execution.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged remote-execution"]]
+
+[[!inline pages="tagged(remote-execution)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/twisted
diff --git a/tag/twisted.mdwn b/tag/twisted.mdwn
new file mode 100644
index 0000000..bc08939
--- /dev/null
+++ b/tag/twisted.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged twisted"]]
+
+[[!inline pages="tagged(twisted)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/botnet
diff --git a/tag/botnet.mdwn b/tag/botnet.mdwn
new file mode 100644
index 0000000..63d04f7
--- /dev/null
+++ b/tag/botnet.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged botnet"]]
+
+[[!inline pages="tagged(botnet)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/ssh
diff --git a/tag/ssh.mdwn b/tag/ssh.mdwn
new file mode 100644
index 0000000..1086d1c
--- /dev/null
+++ b/tag/ssh.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged ssh"]]
+
+[[!inline pages="tagged(ssh)" actions="no" archive="yes"
+feedshow=10]]

updates
diff --git a/blog/2013.02.01:a-botnet-for-configuration-management.mdwn b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
index e4cbca2..8f2b62c 100644
--- a/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
+++ b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
@@ -1,6 +1,6 @@
 [[!meta title="A botnet for configuration management"]]
 [[!tag blog planet-debian system-administration configuration-management
-lazyweb debian linux unix salt draft]]
+lazyweb debian linux unix salt remote-execution python ssh twisted botnet]]
 
 Following my last [[rant about configuration
 management|blog/2012.10.19:configuration-management]], I've had a closer look
@@ -31,7 +31,9 @@ Salt has some very good ideas, for instance:
     implemented through persistent connections from the clients to the
     master. This neatly solves all problems relating to firewalling and NAT,
     and it also means that the master always has a pretty good understanding
-    of who's around. It feels good to me.
+    of who's around. It feels good to me. And there is no [[!wikipedia NIH]]
+    going on with respect to pulling: there is no daemon, you have to use
+    `cron`. Good.
 
 But there are also a couple of downsides to Salt:
 
@@ -65,8 +67,13 @@ But there are also a couple of downsides to Salt:
     [pdb](http://docs.python.org/library/pdb.html), but it's not ideal.
 
   - Exceptions are not properly handled, the file descriptors aren't closed
-    when daemonising, and the exit code will almost always be zero, even on
-    failure.
+    when daemonising, [children are not reaped as they
+    should](https://github.com/saltstack/salt/issues/3395), and the exit code
+    will almost always be zero, even on failure.
+
+  - [State requirements are not enforced where they are
+    required](https://github.com/saltstack/salt/issues/3527), but only come
+    into play when a higher order function is called.
 
   - The code reinvents module loading and does that in very complex ways,
     while putting [tight](https://github.com/saltstack/salt/issues/2385)

add note about classes and o-o
diff --git a/blog/2013.02.01:a-botnet-for-configuration-management.mdwn b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
index 439d676..e4cbca2 100644
--- a/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
+++ b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
@@ -93,6 +93,13 @@ But there are also a couple of downsides to Salt:
     client](https://github.com/saltstack/salt/issues/2375) (although the same
     code base is being used).
 
+  - And why aren't state and execution modules implemented as classes?
+    Instead, the module is itself treated as an entity, and a home-cooked
+    ["virtual"
+    system](https://salt.readthedocs.org/en/latest/ref/modules/index.html?highlight=__virtual__#virtual-modules)
+    is used to determine which platforms support which modules.
+    Object-oriented programming principles gives you all of that, and more.
+
   - Fortunately, the Salt authors didn't cave in and write the entire
     communication layer themselves. Instead, they employed
     [ZeroMQ](http://www.zeromq.org/), but it's still quite common for a client

new post
diff --git a/blog/2013.02.01:a-botnet-for-configuration-management.mdwn b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
new file mode 100644
index 0000000..439d676
--- /dev/null
+++ b/blog/2013.02.01:a-botnet-for-configuration-management.mdwn
@@ -0,0 +1,165 @@
+[[!meta title="A botnet for configuration management"]]
+[[!tag blog planet-debian system-administration configuration-management
+lazyweb debian linux unix salt draft]]
+
+Following my last [[rant about configuration
+management|blog/2012.10.19:configuration-management]], I've had a closer look
+at [Salt](http://saltstack.org/), both for my personal use, as well as for
+a client who would like to deploy something that is not Puppet.
+
+Salt has some very good ideas, for instance:
+
+  - Configuration is just data in YAML format, which makes it really easy to
+    whack up stuff — and also to generate it using other means;
+
+  - There's a lot of plugability: runners, renderers, states, modules,
+    returners, outputters, all of which can be replaced with custom
+    implementations;
+
+  - It builds on remote execution. In fact, in the docs, they talk first about
+    [remote
+    execution](http://docs.saltstack.org/en/latest/#tutorial-1-remote-execution)
+    and then about [configuration
+    management](http://docs.saltstack.org/en/latest/#tutorial-2-configuration-management).
+    Not only does this makes a lot of sense, it also gives the admin the
+    additional benefit of having quick, remote access to all hosts in the
+    infrastructure. I like that as it means I don't also have to deploy
+    a parallel-execution solution.
+
+  - Salt supports both, a push and a pull model for configuration management.
+    In fact, the push model is part of its remote execution base and it's
+    implemented through persistent connections from the clients to the
+    master. This neatly solves all problems relating to firewalling and NAT,
+    and it also means that the master always has a pretty good understanding
+    of who's around. It feels good to me.
+
+But there are also a couple of downsides to Salt:
+
+  - The default templating engine is [Jinja](http://jinja.pocoo.org/). While
+    that may be an excellent choice for applications in inherently insecure
+    environments, such as the Web, they are quite painful in the context of
+    Salt: no multi-line logic, whitespace control is a nightmare, and
+    a completely unfamiliar set of conditionals and filters, rather than
+    access to e.g. Python. This is only the default, and
+    [mako](http://www.makotemplates.org/) is an alternative, but it seems like
+    a poor choice and that does not instill confidence.
+
+  - I don't think that the method of [targeting
+    hosts](http://comments.gmane.org/gmane.comp.sysutils.salt.user/2097) that
+    Salt uses is scalable. I don't want to intersperse my configuration with
+    if-then-else statements referencing hostnames (what would that mean if
+    a hostname changed or a new host was added?). Instead, I want the
+    configuration to be fully parametrised and assemble the parameters from
+    a node database, ideally a hierarchical one. I have a solution for that
+    which works with Salt, called
+    [reclass](https://github.com/madduck/salt-reclass).
+
+  - I don't think much of "pillars", which are Salt way to provide random data
+    (parameters) to nodes, again because data needs to be targeted at hosts,
+    rather than defined for a host. This is also solved with
+    [reclass](https://github.com/madduck/salt-reclass).
+
+  - [Logging](https://github.com/saltstack/salt/issues/3373) and error
+    reporting in Salt are abysmal, inconsistent, and useless. This is offset
+    a little bit by the ability to use
+    [pdb](http://docs.python.org/library/pdb.html), but it's not ideal.
+
+  - Exceptions are not properly handled, the file descriptors aren't closed
+    when daemonising, and the exit code will almost always be zero, even on
+    failure.
+
+  - The code reinvents module loading and does that in very complex ways,
+    while putting [tight](https://github.com/saltstack/salt/issues/2385)
+    [limitations](https://github.com/saltstack/salt/issues/3513) on what's
+    possible. State functions and modules cannot be namespaced, for instance,
+    nor can they easily make use of each other. There is also no way to
+    [quickly define macros](https://github.com/saltstack/salt/issues/3460)
+    without resorting to the templating language (and thus a completely
+    different syntax and paradigm), and the concept of having modular,
+    self-contained states (e.g. one for `sudo`, one for `SSH`, etc.) with all
+    their dependencies in one hierarchy is [not really part of the
+    design](https://github.com/saltstack/salt/issues/2385). Also, it's not
+    trivial for a state definition to [export an interface for other states to
+    use](http://thread.gmane.org/gmane.comp.sysutils.salt.user/4203/focus=4276).
+
+  - While we're on the topic of code and design, there's a lot of duplicate
+    stuff in need of refactoring (e.g.
+    [saltutil._sync](https://github.com/saltstack/salt/blob/develop/salt/modules/saltutil.py#L32),
+    and it seems that this even causes a lot of [crypto work to be done over
+    and over again](https://github.com/saltstack/salt/issues/2359). It also
+    doesn't help that `salt-call`, which is used to execute commands on the
+    clients (e.g. pull configuration), works [completely independently of the
+    daemon process running on each
+    client](https://github.com/saltstack/salt/issues/2375) (although the same
+    code base is being used).
+
+  - Fortunately, the Salt authors didn't cave in and write the entire
+    communication layer themselves. Instead, they employed
+    [ZeroMQ](http://www.zeromq.org/), but it's still quite common for a client
+    to become unreachable (permanently), e.g. due to an [IP address
+    change](https://github.com/saltstack/salt/issues/2358), or networking
+    problems. What's worse is that [the master does not keep track of who's
+    listening](https://github.com/saltstack/salt/issues/2361).
+
+  - While we're on the subject of standing on the shoulders of giants, Python's
+    `msgpack` apparently [cannot handle
+    Unicode](https://github.com/saltstack/salt/issues/3436). Yay.
+
+Those are the big issues. There are many small issues two, but those won't be
+around for too long as the project is moving along quickly and the community
+is vibrant. This is surely an important point that speaks for Salt.
+
+However, the above issues seem to hint at design choices that might well turn
+out to stand in the way later.
+
+Following a day of frustration, I now feel the overpowering urge to write my
+own configuration management system, because of course I feel that I could do
+it better than everyone else. Does this sound familiar to you?
+
+Let's just say — hypothetically — that I would, then I'd want to reuse as much
+existing functionality as possible. For instance, I'd want the entire remote
+execution framework to be independent from any configuration management
+implemented on top.
+
+So what does this mean? What would such a remote execution framework need?
+Here are some thoughts:
+
+  - I'd want to keep it the way of Salt, i.e. the clients maintain persistent
+    connections to the master, and the master regularly pings the clients, for
+    housekeeping. And the clients know to expect such pings at regular
+    intervals, so can reset themselves in case they don't hear from the
+    master. Or scream.
+
+  - Of course, authentication and encryption need to be part of this. Ideally,
+    key and roster management are already available in the tool that's being
+    reused. I don't want to have to have a new PKI for this…
+
+  - The protocol would probably be something like XMLRPC, with an extensible
+    list of modules on the client to do the work. Data would be standardised
+    to JSON-format.
+
+  - Asynchronous execution would be a plus. I am even tempted to say that it
+    should be all built asynchronously, even though I don't really know a use
+    case for this.
+
+  - The clients should be able to feed back information to the master, where
+    data can be accumulated, allowing for cross-node configuration (cf.
+    http://comments.gmane.org/gmane.comp.sysutils.salt.user/2098). This could
+    be implemented using master-side polls to keep the protocol easier.
+
+Doesn't this sound like a Unix botnet to you? ;)
+
+I could imagine whacking this up with a bit of Python, some shell glue,
+`socat` and SSH: the server would have an `authorized_keys` file with forced
+commands connecting the client to the server process via sockets.
+
+Or I could imagine using [twisted](http://twistedmatrix.com/) for that.
+
+But I would prefer if something like this already existed. Anyone?
+
+Comments are broken on my blog, and I cannot be bothered to work on them. If
+you have any input, please [write to
+me](mailto:unix-botnet@pobox.madduck.net). I will (eventually) condense all
+feedback into a new article.
+
+NP: [Mouse on Mars](http://www.allmusic.com/cg/amg.dll?SQL=Mouse%20on%20Mars&P=amg&OPT1=1): *Parastrophics*

creating tag page tag/office
diff --git a/tag/office.mdwn b/tag/office.mdwn
new file mode 100644
index 0000000..131f9f4
--- /dev/null
+++ b/tag/office.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged office"]]
+
+[[!inline pages="tagged(office)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/printer
diff --git a/tag/printer.mdwn b/tag/printer.mdwn
new file mode 100644
index 0000000..52a3229
--- /dev/null
+++ b/tag/printer.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged printer"]]
+
+[[!inline pages="tagged(printer)" actions="no" archive="yes"
+feedshow=10]]

new post
diff --git a/blog/2012.11.14:a-small-office-multi-function-printer.mdwn b/blog/2012.11.14:a-small-office-multi-function-printer.mdwn
new file mode 100644
index 0000000..d3ce776
--- /dev/null
+++ b/blog/2012.11.14:a-small-office-multi-function-printer.mdwn
@@ -0,0 +1,36 @@
+[[!meta title="A small office, multi-function printer"]]
+[[!tag blog planet-debian lazyweb printer office samsung hp]]
+
+Dear lazyweb, we need a new printer-scanner combination for our new office,
+ideally a laser printer and a high-resolution scanner (1200dpi). It must
+integrate nicely with CUPS and SANE, *without* requiring any proprietary,
+closed-licence drivers or plugins. It also has to come with an automatic
+document feeder in addition to the plain flatbed scanner.
+
+Additional, would-be-nice features in decreasing order of preference are
+
+  - Colour printing (separate cartridges a must)
+  - Duplex printing (real duplex preferred over soft solutions)
+  - Direct scanning to PDF (distribution by E-mail, Samba or FTP)
+
+I have investigated the [Samsung
+CLX-6220FX](http://www.samsung.com/uk/consumer/print-solutions/print-solutions/colour-multifunction-printer/CLX-6220FX/SEE),
+but the driver situation was such a nightmare (and the printer so loud), that
+we returned it right away. I should have read [this article by
+Peter](http://cafuego.net/2011/02/15/linux-multifunction-printy-thing)
+beforehand…
+
+I have recently seen the [HP Laserjet Pro 200
+M276n](http://www8.hp.com/de/de/products/printers/product-detail.html?oid=5097652),
+the successor of the [HP Laserjet
+CM1415nf](http://h10010.www1.hp.com/wwpc/us/en/sm/WF10a/18972-18972-3328064-12004-3328083-4089171.html)
+which looks promising, but according to LinuxPrinting.org, a [proprietary
+plugin is
+required](http://hplipopensource.com/hplip-web/models/color_laserjet/hp_laserjet_200_colormfp_m276n.html#note3) (WTF HP?).
+
+Does anyone have experience with these HP models and can recommend them for
+use with Debian stable?
+
+Does anyone have another recommendation?
+
+Please [send me a message](mailto:new-mfp@pobox.madduck.net). Thanks!

add links to samsung reviews
diff --git a/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn b/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
index 2acd68d..816e2fb 100644
--- a/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
+++ b/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
@@ -76,9 +76,11 @@ tablet. Some suggested [Raspberry Pi](http://www.raspberrypi.org/)s in USB
 host mode (emulating the USB stick and hence the source of the images,
 provided that the frame doesn't cache). Other suggestions included the
 [Samsung
-SPF-85V](http://www.samsung.com/au/consumer/pc-peripherals/monitor/archive/LP08CBQSBT/XY),
-which can display images according to an RSS feed, and the
-[community-developed](http://www.jogglerwiki.com/), Linux-based
+SPF-85V](http://trevinchow.com/blog/2009/01/09/shopping-for-a-digital-photo-frame-with-wifi-and-rss/)
+which can display images according to an RSS feed but needs Microsoft for
+that (or [maybe
+not](http://web.archive.org/web/20101018174507/http://www.infolexikon.de/blog/samsung-spf-83v-info-system/)),
+and the [community-developed](http://www.jogglerwiki.com/), Linux-based
 [Joggler](http://en.wikipedia.org/wiki/O2_Joggler).
 
 Regarding the non-random order on the Intenso frame, Paul Hedderly postulated

updates to photo frames post
diff --git a/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn b/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
index 0ff39b1..2acd68d 100644
--- a/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
+++ b/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
@@ -70,3 +70,17 @@ images in random order, ideally loading them off a CIFS share via Wifi?
 Or is it really the case that consumer electronics are completely useless
 these days, by which I mean that "consumers" have dumbed down so far to buy
 this crap?
+
+**Update**: a lot of people wrote in suggesting to invest in a cheap Android
+tablet. Some suggested [Raspberry Pi](http://www.raspberrypi.org/)s in USB
+host mode (emulating the USB stick and hence the source of the images,
+provided that the frame doesn't cache). Other suggestions included the
+[Samsung
+SPF-85V](http://www.samsung.com/au/consumer/pc-peripherals/monitor/archive/LP08CBQSBT/XY),
+which can display images according to an RSS feed, and the
+[community-developed](http://www.jogglerwiki.com/), Linux-based
+[Joggler](http://en.wikipedia.org/wiki/O2_Joggler).
+
+Regarding the non-random order on the Intenso frame, Paul Hedderly postulated
+that the order comes from the filesystems (FAT order) and can be changed by
+writing the files differently.

link fix
diff --git a/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn b/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
index a6f63d7..0ff39b1 100644
--- a/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
+++ b/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
@@ -23,7 +23,7 @@ retailers and want to support them, my first stop was [Foto
 Sauter](www.foto-video-sauter.de/) at Sendlinger Tor. Unfortunately, none of
 the frames they had came with Wifi, so I decided to look further. I vehemently
 oppose to the business practices of the [[!wikipedia desc="Metro
-group METRO_AG]], thus skipped Saturn and MediaMarkt, and eventually ended up
+group" METRO_AG]], thus skipped Saturn and MediaMarkt, and eventually ended up
 at [Conrad](http://conrad.de).
 
 They had a frame with Wifi! I jumped for joy, until I read the manual:

creating tag page tag/stupid
diff --git a/tag/stupid.mdwn b/tag/stupid.mdwn
new file mode 100644
index 0000000..adbded6
--- /dev/null
+++ b/tag/stupid.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged stupid"]]
+
+[[!inline pages="tagged(stupid)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/headbanging
diff --git a/tag/headbanging.mdwn b/tag/headbanging.mdwn
new file mode 100644
index 0000000..9b501e7
--- /dev/null
+++ b/tag/headbanging.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged headbanging"]]
+
+[[!inline pages="tagged(headbanging)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/photography
diff --git a/tag/photography.mdwn b/tag/photography.mdwn
new file mode 100644
index 0000000..f41b0b8
--- /dev/null
+++ b/tag/photography.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged photography"]]
+
+[[!inline pages="tagged(photography)" actions="no" archive="yes"
+feedshow=10]]

new post
diff --git a/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn b/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
new file mode 100644
index 0000000..a6f63d7
--- /dev/null
+++ b/blog/2012.10.19:digital-picture-frames-and-random-image-order.mdwn
@@ -0,0 +1,72 @@
+[[!meta title="Digital picture frames and random image order"]]
+[[!tag blog headbanging planet-debian photography stupid]]
+
+I am moving into an office. And as any proud husband and father, I want to
+have photos of my wife and daughter on my desk. The year being 2012, I did not
+hike to the photo shop to get a print framed, but instead thought to myself
+that I should put a digital photo frame onto my table.
+
+This idea exposed me to the ridiculous world of consumer electronics. It led
+me to conclude that digital picture frame designers need to be whacked with
+cluebats.
+
+Step by step…
+
+Once accepted, the thought of a digital photo frame developed into a product
+definition along the following lines: my idea photo frame would connect to my
+Wifi-network, and obtain the photos on-the-go from a folder exposed via HTTP
+or CIFS, and then go on to display them in random order, incorporating new
+photos as it encounters them.
+
+With this in mind, I went to the shops, and since I believe in specialised
+retailers and want to support them, my first stop was [Foto
+Sauter](www.foto-video-sauter.de/) at Sendlinger Tor. Unfortunately, none of
+the frames they had came with Wifi, so I decided to look further. I vehemently
+oppose to the business practices of the [[!wikipedia desc="Metro
+group METRO_AG]], thus skipped Saturn and MediaMarkt, and eventually ended up
+at [Conrad](http://conrad.de).
+
+They had a frame with Wifi! I jumped for joy, until I read the manual:
+pictures can be obtained from Flickr and Picasa. Period.
+
+All other models on the Internet seem to be similarly limited, including the
+new Sony S-frame.
+
+The night before, [Penny](http://mjollnir.org) had researched the field a bit
+and came to the conclusion that the S-frame would be the best product
+available. This led me to scratch Wifi off my requirements list and get
+a model that would read photos off a USB stick.
+
+I went back to the photo store and bought a "Sony S-frame", only to discover
+that it *cannot show photos in random order*. It has three viewing modes
+(single photo, collage, single photo with clock), … *and a random mode*, but
+guess what: the random mode randomly switches the viewing modes, which then
+display the photos in lexicographical order.
+
+How stupid is that???
+
+I returned the product and left the store after discovering that *none* of
+their products could do random playback.
+
+I went back to Conrad and found an "Intenso MediaCreator" (what media does it
+create???), which displayed the photos seemingly randomly.
+
+But at home I found out that the "random" order is always the same, probably
+because the bright engineer that programmed this thought it was better to sort
+filenames by last letter and call it random, than to figure out a way to roll
+a dice on the device.
+
+I wrote to the support team and asked them. The response was that the desired
+functionality (random selection) is not possible and won't be made available.
+
+So I am returning the product.
+
+Gah!
+
+Would someone please [tell me about a digital picture
+frame](mailto:digital-frame@pobox.madduck.net) (8 inch or so) that can display
+images in random order, ideally loading them off a CIFS share via Wifi?
+
+Or is it really the case that consumer electronics are completely useless
+these days, by which I mean that "consumers" have dumbed down so far to buy
+this crap?

fix
diff --git a/blog/2012.10.19:configuration-management.mdwn b/blog/2012.10.19:configuration-management.mdwn
index 273a94b..fbccccb 100644
--- a/blog/2012.10.19:configuration-management.mdwn
+++ b/blog/2012.10.19:configuration-management.mdwn
@@ -71,7 +71,7 @@ page](http://alternativeto.net/software/puppet), I gleaned a couple of links:
 [Ansible](http://ansible.cc/), [Quattor](http://quattor.org/),
 [Salt](http://saltstack.org/), and
 [bcfg2](http://trac.mcs.anl.gov/projects/bcfg2/) (which uses XML though). And
-of course, there remains the ephemeral (cfengine)[http://cfengine.com/).
+of course, there remains the ephemeral [cfengine](http://cfengine.com/).
 
 cfengine
 ========

fix debbug links; publish
diff --git a/blog/2012.10.19:configuration-management.mdwn b/blog/2012.10.19:configuration-management.mdwn
index d7563da..273a94b 100644
--- a/blog/2012.10.19:configuration-management.mdwn
+++ b/blog/2012.10.19:configuration-management.mdwn
@@ -1,6 +1,6 @@
 [[!meta title="Configuration management"]]
 [[!tag blog planet-debian system-administration configuration-management
-puppet chef lazyweb debian linux unix cfengine ansible salt draft]]
+puppet chef lazyweb debian linux unix cfengine ansible salt]]
 
 Puppet
 ======
@@ -160,8 +160,8 @@ community is accomodating.
 Unfortunately, Salt does not use SSH, but at least it reuses existing
 functionality ([ZeroMQ](http://www.zeromq.org/)). As opposed to the push/pull
 model, Salt "minions" interestingly maintain a persistent connection to the
-server (which [[!debbugs desc="is not yet very stable" 690525]]), and while
-non-root usage is still [[!debbugs desc="not unproblematic" 690481]], at least
+server (which [[!debbug desc="is not yet very stable" 690525]]), and while
+non-root usage is still [[!debbug desc="not unproblematic" 690481]], at least
 there has already been work done in this direction.
 
 I think I will investigate Salt more as it does look like it can do what

creating tag page tag/salt
diff --git a/tag/salt.mdwn b/tag/salt.mdwn
new file mode 100644
index 0000000..7327c1b
--- /dev/null
+++ b/tag/salt.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged salt"]]
+
+[[!inline pages="tagged(salt)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/ansible
diff --git a/tag/ansible.mdwn b/tag/ansible.mdwn
new file mode 100644
index 0000000..78d2ea1
--- /dev/null
+++ b/tag/ansible.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged ansible"]]
+
+[[!inline pages="tagged(ansible)" actions="no" archive="yes"
+feedshow=10]]

updates
diff --git a/blog/2012.10.14:configuration-management.mdwn b/blog/2012.10.14:configuration-management.mdwn
deleted file mode 100644
index 93c7285..0000000
--- a/blog/2012.10.14:configuration-management.mdwn
+++ /dev/null
@@ -1,76 +0,0 @@
-[[!meta title="Configuration management"]]
-[[!tag blog planet-debian system-administration configuration-management
-puppet chef lazyweb debian linux unix cfengine draft]]
-
-I've really had it with [Puppet](http://puppetlabs.com). I used to be able to
-put up with all its downsides
-
-  - Non-Unix approach to everything (own transport, self-made PKI,
-    non-intuitive configuration language, a faint attempt at versioning
-    (bitbucket), and much much more…)
-  - Ruby
-  - Abysmal slowness
-  - Lack of basic functionality (e.g. replace a line of text)
-  - Host management and configuration programming intertwined, lack of
-    a high-level approach to defining functionality
-  - Horrific error messages
-  - Catastrophic upgrade paths
-  - Did I mention Ruby and its speed?
-  - [I could keep going…]
-
-but now that my fourth attempt to upgrade my complex configuration from
-version 0.25.5 to version 2.7 failed due to a myriad of completely
-incomprehensible errors ("err: Could not run Puppet configuration client:
-interning empty string") and many hours were lost in trying to hunt these down
-using binary searches, I am giving up. Bye bye Puppet.
-
-But I need an alternative. I want a system that is capable of handling a large
-number of hosts, but not so complex that one wouldn't put it to use for half
-a dozen machines. The configuration management system I want looks about as
-follows: It
-
-  - makes use of existing infrastructure (e.g. SSH transport and public
-    keys, Unix toolchain, Debian package management and debconf)
-  - interacts with the package management system (Debian only in my case)
-  - can provision files whose contents might depend on context, particular
-    machine data and conditionals. There should be a unified templating
-    approach for static and dynamic files, with the ability to override the
-    source of data (e.g. a default template used unless a template exists for
-    a class of machine, or a specific hostname)
-  - can edit files on the target machine in a flexible and robust manner
-  - can remove files
-  - can run commands when files change
-  - can reference data from other machines (e.g. obtain the certificate
-    fingerprint of each hosts that define me as their SMTP smarthost)
-  - can control running services (i.e. enable init.d scripts, check that
-    a process is running
-  - is written in a sensible language
-  - is modular and easily extensible, ideally using a well-known language
-    (e.g. Python!)
-  - allows to specify infrastructure with tags ("all webservers", "all
-    machines in Zurich", "machines that are in Munich and receive mail"), but
-    with the ability to override every parameter for a specific host
-  - should just do configuration management, and not try to take away jobs
-    from monitoring software
-  - logs changes per-machine and collects data about applied configurations in
-    a central location
-  - is configured using flat files that are human-readable so that the
-    configuration may be stored in Git (e.g. YAML, *not* XML)
-  - can be configured using scripts in a flexible way
-
-Since for me, Ruby is a downside of Puppet, I won't look at
-[Chef](http://www.opscode.com/chef/), but from [this
-page](http://alternativeto.net/software/puppet), I gleaned a couple of links:
-[Ansible](http://ansible.cc/), [Quattor](http://quattor.org/),
-[Salt](http://saltstack.org/), and
-[bcfg2](http://trac.mcs.anl.gov/projects/bcfg2/) (which uses XML though). And
-of course, there remains the ephemeral (cfengine)[http://cfengine.com/), which
-I was using until about 2002 until I lost my configuration and did not want to
-face restarting it — it might just be worth another look.
-
-With this post, I would like to ask you, the lazyweb, for anything you might
-have to say to the above. Please [let me know your opinion or
-advice](mailto:puppet-alternatives@pobox.madduck.net)! I will summarise my
-findings in a later post.
-
-NP: [The Pineapple Thief](http://www.allmusic.com/cg/amg.dll?SQL=The%20Pineapple%20Thief&P=amg&OPT1=1): *Someone Here is Missing*
diff --git a/blog/2012.10.19:configuration-management.mdwn b/blog/2012.10.19:configuration-management.mdwn
new file mode 100644
index 0000000..d7563da
--- /dev/null
+++ b/blog/2012.10.19:configuration-management.mdwn
@@ -0,0 +1,171 @@
+[[!meta title="Configuration management"]]
+[[!tag blog planet-debian system-administration configuration-management
+puppet chef lazyweb debian linux unix cfengine ansible salt draft]]
+
+Puppet
+======
+
+I've really had it with [Puppet](http://puppetlabs.com). I used to be able to
+put up with all its downsides
+
+  - Non-Unix approach to everything (own transport, self-made PKI,
+    non-intuitive configuration language, a faint attempt at versioning
+    (bitbucket), and much much more…)
+  - Ruby
+  - Abysmal slowness
+  - Lack of basic functionality (e.g. replace a line of text)
+  - Host management and configuration programming intertwined, lack of
+    a high-level approach to defining functionality
+  - Horrific error messages
+  - Catastrophic upgrade paths
+  - Did I mention Ruby and its speed?
+  - Lack of IPv6 support
+  - [I could keep going…]
+
+but now that my fourth attempt to upgrade my complex configuration from
+version 0.25.5 to version 2.7 failed due to a myriad of completely
+incomprehensible errors ("err: Could not run Puppet configuration client:
+interning empty string") and many hours were lost in trying to hunt these down
+using binary searches, I am giving up. Bye bye Puppet.
+
+An alternative
+==============
+
+But I need an alternative. I want a system that is capable of handling a large
+number of hosts, but not so complex that one wouldn't put it to use for half
+a dozen machines. The configuration management system I want looks about as
+follows: It
+
+  - makes use of existing infrastructure (e.g. SSH transport and public
+    keys, Unix toolchain, Debian package management and debconf)
+  - interacts with the package management system (Debian only in my case)
+  - can provision files whose contents might depend on context, particular
+    machine data and conditionals. There should be a unified templating
+    approach for static and dynamic files, with the ability to override the
+    source of data (e.g. a default template used unless a template exists for
+    a class of machine, or a specific hostname)
+  - can edit files on the target machine in a flexible and robust manner
+  - can remove files
+  - can run commands when files change
+  - can reference data from other machines (e.g. obtain the certificate
+    fingerprint of each hosts that define me as their SMTP smarthost)
+  - can control running services (i.e. enable init.d scripts, check that
+    a process is running
+  - is written in a sensible language
+  - is modular and easily extensible, ideally using a well-known language
+    (e.g. Python!)
+  - allows to specify infrastructure with tags ("all webservers", "all
+    machines in Zurich", "machines that are in Munich and receive mail"), but
+    with the ability to override every parameter for a specific host
+  - should just do configuration management, and not try to take away jobs
+    from monitoring software
+  - logs changes per-machine and collects data about applied configurations in
+    a central location
+  - is configured using flat files that are human-readable so that the
+    configuration may be stored in Git (e.g. YAML, *not* XML)
+  - can be configured using scripts in a flexible way
+
+Since for me, Ruby is a downside of Puppet, I won't look at
+[Chef](http://www.opscode.com/chef/), but from [this
+page](http://alternativeto.net/software/puppet), I gleaned a couple of links:
+[Ansible](http://ansible.cc/), [Quattor](http://quattor.org/),
+[Salt](http://saltstack.org/), and
+[bcfg2](http://trac.mcs.anl.gov/projects/bcfg2/) (which uses XML though). And
+of course, there remains the ephemeral (cfengine)[http://cfengine.com/).
+
+cfengine
+========
+
+I haven't used [cfengine](http://cfengine.com/) since 2002, but I am not
+convinced it's worth a new look because it seems to be an academic project
+with gigantic complexity and a whole vernacular to its own. There is no doubt
+that it is a powerful solution, and the most mature of all of them, but it's
+far away from the Unix-like simplicity that I've come to love in almost 20
+years of Debian.
+
+Do correct me if I am wrong.
+
+Ansible
+=======
+
+[Ansible](http://ansible.cc/) looks interesting. It seems rather bottom-up,
+first introducing a way to remotely execute commands on hosts, which you can
+then later extend/automate to manage the host configurations. It uses SSH for
+transport, and its [reason-to-be](http://ansible.cc/faq.html#faq-2) made me
+want to look at it.
+
+My ventures into the Ansible domain are not over yet, but I've put them on
+hold. First of all, it's not yet packaged for Debian ([Ubuntu-PPA
+packages](https://launchpad.net/~rquillo/+archive/ansible) work on Debian
+squeeze and wheezy).
+
+Second, I was put off a bit by its gratuitous use of the shell to run
+commands, as well as other design decisions.
+
+Check this out: there are modules for the remote execution of commands, namely
+"shell", "command", and "raw". The
+[shell](http://ansible.cc/docs/modules.html#shell) modules should be
+self-explanatory; the [command](http://ansible.cc/docs/modules.html#command)
+module provides some idempotency, such as not running the command if a file
+exists (or not). To do this, it creates a Python script in `/tmp` on the
+target… and then executes that like so:
+

(Diff truncated)
creating tag page tag/finance
diff --git a/tag/finance.mdwn b/tag/finance.mdwn
new file mode 100644
index 0000000..bd70414
--- /dev/null
+++ b/tag/finance.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged finance"]]
+
+[[!inline pages="tagged(finance)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/microblogging
diff --git a/tag/microblogging.mdwn b/tag/microblogging.mdwn
new file mode 100644
index 0000000..b3121e9
--- /dev/null
+++ b/tag/microblogging.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged microblogging"]]
+
+[[!inline pages="tagged(microblogging)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/admin
diff --git a/tag/admin.mdwn b/tag/admin.mdwn
new file mode 100644
index 0000000..5fce91c
--- /dev/null
+++ b/tag/admin.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged admin"]]
+
+[[!inline pages="tagged(admin)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/taxis
diff --git a/tag/taxis.mdwn b/tag/taxis.mdwn
new file mode 100644
index 0000000..e69358a
--- /dev/null
+++ b/tag/taxis.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged taxis"]]
+
+[[!inline pages="tagged(taxis)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/howto
diff --git a/tag/howto.mdwn b/tag/howto.mdwn
new file mode 100644
index 0000000..a91c992
--- /dev/null
+++ b/tag/howto.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged howto"]]
+
+[[!inline pages="tagged(howto)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/tamagotchis
diff --git a/tag/tamagotchis.mdwn b/tag/tamagotchis.mdwn
new file mode 100644
index 0000000..020888b
--- /dev/null
+++ b/tag/tamagotchis.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged tamagotchis"]]
+
+[[!inline pages="tagged(tamagotchis)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/debugging
diff --git a/tag/debugging.mdwn b/tag/debugging.mdwn
new file mode 100644
index 0000000..ecf8aba
--- /dev/null
+++ b/tag/debugging.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged debugging"]]
+
+[[!inline pages="tagged(debugging)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/geek
diff --git a/tag/geek.mdwn b/tag/geek.mdwn
new file mode 100644
index 0000000..a81c796
--- /dev/null
+++ b/tag/geek.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged geek"]]
+
+[[!inline pages="tagged(geek)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/cooperation
diff --git a/tag/cooperation.mdwn b/tag/cooperation.mdwn
new file mode 100644
index 0000000..5d8e6ca
--- /dev/null
+++ b/tag/cooperation.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged cooperation"]]
+
+[[!inline pages="tagged(cooperation)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/e71
diff --git a/tag/e71.mdwn b/tag/e71.mdwn
new file mode 100644
index 0000000..6b87a65
--- /dev/null
+++ b/tag/e71.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged e71"]]
+
+[[!inline pages="tagged(e71)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/years-ago
diff --git a/tag/years-ago.mdwn b/tag/years-ago.mdwn
new file mode 100644
index 0000000..7c0c40e
--- /dev/null
+++ b/tag/years-ago.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged years-ago"]]
+
+[[!inline pages="tagged(years-ago)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/conference
diff --git a/tag/conference.mdwn b/tag/conference.mdwn
new file mode 100644
index 0000000..4165b0b
--- /dev/null
+++ b/tag/conference.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged conference"]]
+
+[[!inline pages="tagged(conference)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/ikiwiki
diff --git a/tag/ikiwiki.mdwn b/tag/ikiwiki.mdwn
new file mode 100644
index 0000000..d94a88c
--- /dev/null
+++ b/tag/ikiwiki.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged ikiwiki"]]
+
+[[!inline pages="tagged(ikiwiki)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/mailman
diff --git a/tag/mailman.mdwn b/tag/mailman.mdwn
new file mode 100644
index 0000000..79007f5
--- /dev/null
+++ b/tag/mailman.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged mailman"]]
+
+[[!inline pages="tagged(mailman)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/arch
diff --git a/tag/arch.mdwn b/tag/arch.mdwn
new file mode 100644
index 0000000..b396bb9
--- /dev/null
+++ b/tag/arch.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged arch"]]
+
+[[!inline pages="tagged(arch)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/zsh
diff --git a/tag/zsh.mdwn b/tag/zsh.mdwn
new file mode 100644
index 0000000..65367db
--- /dev/null
+++ b/tag/zsh.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged zsh"]]
+
+[[!inline pages="tagged(zsh)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/hg
diff --git a/tag/hg.mdwn b/tag/hg.mdwn
new file mode 100644
index 0000000..8f3ab22
--- /dev/null
+++ b/tag/hg.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged hg"]]
+
+[[!inline pages="tagged(hg)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/vcard
diff --git a/tag/vcard.mdwn b/tag/vcard.mdwn
new file mode 100644
index 0000000..d942982
--- /dev/null
+++ b/tag/vcard.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged vcard"]]
+
+[[!inline pages="tagged(vcard)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/p2p
diff --git a/tag/p2p.mdwn b/tag/p2p.mdwn
new file mode 100644
index 0000000..fe91d0a
--- /dev/null
+++ b/tag/p2p.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged p2p"]]
+
+[[!inline pages="tagged(p2p)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/laptops
diff --git a/tag/laptops.mdwn b/tag/laptops.mdwn
new file mode 100644
index 0000000..f62c293
--- /dev/null
+++ b/tag/laptops.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged laptops"]]
+
+[[!inline pages="tagged(laptops)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/initramfs
diff --git a/tag/initramfs.mdwn b/tag/initramfs.mdwn
new file mode 100644
index 0000000..29c30bd
--- /dev/null
+++ b/tag/initramfs.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged initramfs"]]
+
+[[!inline pages="tagged(initramfs)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/nokia-e72
diff --git a/tag/nokia-e72.mdwn b/tag/nokia-e72.mdwn
new file mode 100644
index 0000000..c1f613d
--- /dev/null
+++ b/tag/nokia-e72.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged nokia-e72"]]
+
+[[!inline pages="tagged(nokia-e72)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/terrorism
diff --git a/tag/terrorism.mdwn b/tag/terrorism.mdwn
new file mode 100644
index 0000000..96a53aa
--- /dev/null
+++ b/tag/terrorism.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged terrorism"]]
+
+[[!inline pages="tagged(terrorism)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/activism
diff --git a/tag/activism.mdwn b/tag/activism.mdwn
new file mode 100644
index 0000000..19aa2de
--- /dev/null
+++ b/tag/activism.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged activism"]]
+
+[[!inline pages="tagged(activism)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/rant
diff --git a/tag/rant.mdwn b/tag/rant.mdwn
new file mode 100644
index 0000000..22db6c6
--- /dev/null
+++ b/tag/rant.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged rant"]]
+
+[[!inline pages="tagged(rant)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/settings
diff --git a/tag/settings.mdwn b/tag/settings.mdwn
new file mode 100644
index 0000000..f1177c0
--- /dev/null
+++ b/tag/settings.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged settings"]]
+
+[[!inline pages="tagged(settings)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/queen
diff --git a/tag/queen.mdwn b/tag/queen.mdwn
new file mode 100644
index 0000000..ea4666b
--- /dev/null
+++ b/tag/queen.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged queen"]]
+
+[[!inline pages="tagged(queen)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/ubuntu
diff --git a/tag/ubuntu.mdwn b/tag/ubuntu.mdwn
new file mode 100644
index 0000000..b4f2ff1
--- /dev/null
+++ b/tag/ubuntu.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged ubuntu"]]
+
+[[!inline pages="tagged(ubuntu)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/customer-experience
diff --git a/tag/customer-experience.mdwn b/tag/customer-experience.mdwn
new file mode 100644
index 0000000..7608879
--- /dev/null
+++ b/tag/customer-experience.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged customer-experience"]]
+
+[[!inline pages="tagged(customer-experience)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/ku-klux-klan
diff --git a/tag/ku-klux-klan.mdwn b/tag/ku-klux-klan.mdwn
new file mode 100644
index 0000000..073d78c
--- /dev/null
+++ b/tag/ku-klux-klan.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged ku-klux-klan"]]
+
+[[!inline pages="tagged(ku-klux-klan)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/intellectual-property
diff --git a/tag/intellectual-property.mdwn b/tag/intellectual-property.mdwn
new file mode 100644
index 0000000..0f7fa34
--- /dev/null
+++ b/tag/intellectual-property.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged intellectual-property"]]
+
+[[!inline pages="tagged(intellectual-property)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/miles-and-more
diff --git a/tag/miles-and-more.mdwn b/tag/miles-and-more.mdwn
new file mode 100644
index 0000000..631046a
--- /dev/null
+++ b/tag/miles-and-more.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged miles-and-more"]]
+
+[[!inline pages="tagged(miles-and-more)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/pgp
diff --git a/tag/pgp.mdwn b/tag/pgp.mdwn
new file mode 100644
index 0000000..73313f1
--- /dev/null
+++ b/tag/pgp.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged pgp"]]
+
+[[!inline pages="tagged(pgp)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/dms
diff --git a/tag/dms.mdwn b/tag/dms.mdwn
new file mode 100644
index 0000000..a4364c3
--- /dev/null
+++ b/tag/dms.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged dms"]]
+
+[[!inline pages="tagged(dms)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/the-cure
diff --git a/tag/the-cure.mdwn b/tag/the-cure.mdwn
new file mode 100644
index 0000000..8b1884d
--- /dev/null
+++ b/tag/the-cure.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged the-cure"]]
+
+[[!inline pages="tagged(the-cure)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/freedom
diff --git a/tag/freedom.mdwn b/tag/freedom.mdwn
new file mode 100644
index 0000000..28b0b54
--- /dev/null
+++ b/tag/freedom.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged freedom"]]
+
+[[!inline pages="tagged(freedom)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/google
diff --git a/tag/google.mdwn b/tag/google.mdwn
new file mode 100644
index 0000000..d00052c
--- /dev/null
+++ b/tag/google.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged google"]]
+
+[[!inline pages="tagged(google)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/cellphones
diff --git a/tag/cellphones.mdwn b/tag/cellphones.mdwn
new file mode 100644
index 0000000..b7cc1f4
--- /dev/null
+++ b/tag/cellphones.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged cellphones"]]
+
+[[!inline pages="tagged(cellphones)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/places
diff --git a/tag/places.mdwn b/tag/places.mdwn
new file mode 100644
index 0000000..0ade894
--- /dev/null
+++ b/tag/places.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged places"]]
+
+[[!inline pages="tagged(places)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/pop-culture
diff --git a/tag/pop-culture.mdwn b/tag/pop-culture.mdwn
new file mode 100644
index 0000000..7594c6d
--- /dev/null
+++ b/tag/pop-culture.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged pop-culture"]]
+
+[[!inline pages="tagged(pop-culture)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/cost-average-effect
diff --git a/tag/cost-average-effect.mdwn b/tag/cost-average-effect.mdwn
new file mode 100644
index 0000000..68b5891
--- /dev/null
+++ b/tag/cost-average-effect.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged cost-average-effect"]]
+
+[[!inline pages="tagged(cost-average-effect)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/alphascorpii
diff --git a/tag/alphascorpii.mdwn b/tag/alphascorpii.mdwn
new file mode 100644
index 0000000..b14a8bf
--- /dev/null
+++ b/tag/alphascorpii.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged alphascorpii"]]
+
+[[!inline pages="tagged(alphascorpii)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/vegetables
diff --git a/tag/vegetables.mdwn b/tag/vegetables.mdwn
new file mode 100644
index 0000000..55c7cc6
--- /dev/null
+++ b/tag/vegetables.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged vegetables"]]
+
+[[!inline pages="tagged(vegetables)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/love
diff --git a/tag/love.mdwn b/tag/love.mdwn
new file mode 100644
index 0000000..40a4cd3
--- /dev/null
+++ b/tag/love.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged love"]]
+
+[[!inline pages="tagged(love)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/tv
diff --git a/tag/tv.mdwn b/tag/tv.mdwn
new file mode 100644
index 0000000..9ca4f13
--- /dev/null
+++ b/tag/tv.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged tv"]]
+
+[[!inline pages="tagged(tv)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/sbb
diff --git a/tag/sbb.mdwn b/tag/sbb.mdwn
new file mode 100644
index 0000000..032b132
--- /dev/null
+++ b/tag/sbb.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged sbb"]]
+
+[[!inline pages="tagged(sbb)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/thailand
diff --git a/tag/thailand.mdwn b/tag/thailand.mdwn
new file mode 100644
index 0000000..12b0fa5
--- /dev/null
+++ b/tag/thailand.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged thailand"]]
+
+[[!inline pages="tagged(thailand)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/us
diff --git a/tag/us.mdwn b/tag/us.mdwn
new file mode 100644
index 0000000..6aae228
--- /dev/null
+++ b/tag/us.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged us"]]
+
+[[!inline pages="tagged(us)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/kiwifoocamp
diff --git a/tag/kiwifoocamp.mdwn b/tag/kiwifoocamp.mdwn
new file mode 100644
index 0000000..df31f49
--- /dev/null
+++ b/tag/kiwifoocamp.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged kiwifoocamp"]]
+
+[[!inline pages="tagged(kiwifoocamp)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/firefox
diff --git a/tag/firefox.mdwn b/tag/firefox.mdwn
new file mode 100644
index 0000000..617785c
--- /dev/null
+++ b/tag/firefox.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged firefox"]]
+
+[[!inline pages="tagged(firefox)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/oev
diff --git a/tag/oev.mdwn b/tag/oev.mdwn
new file mode 100644
index 0000000..b887f5f
--- /dev/null
+++ b/tag/oev.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged oev"]]
+
+[[!inline pages="tagged(oev)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/keyboard
diff --git a/tag/keyboard.mdwn b/tag/keyboard.mdwn
new file mode 100644
index 0000000..86ee43c
--- /dev/null
+++ b/tag/keyboard.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged keyboard"]]
+
+[[!inline pages="tagged(keyboard)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/fiscal-pact
diff --git a/tag/fiscal-pact.mdwn b/tag/fiscal-pact.mdwn
new file mode 100644
index 0000000..886436a
--- /dev/null
+++ b/tag/fiscal-pact.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged fiscal-pact"]]
+
+[[!inline pages="tagged(fiscal-pact)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/ups
diff --git a/tag/ups.mdwn b/tag/ups.mdwn
new file mode 100644
index 0000000..63928d8
--- /dev/null
+++ b/tag/ups.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged ups"]]
+
+[[!inline pages="tagged(ups)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/symbian
diff --git a/tag/symbian.mdwn b/tag/symbian.mdwn
new file mode 100644
index 0000000..a6bc139
--- /dev/null
+++ b/tag/symbian.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged symbian"]]
+
+[[!inline pages="tagged(symbian)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/consumers
diff --git a/tag/consumers.mdwn b/tag/consumers.mdwn
new file mode 100644
index 0000000..7434d9c
--- /dev/null
+++ b/tag/consumers.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged consumers"]]
+
+[[!inline pages="tagged(consumers)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/interview
diff --git a/tag/interview.mdwn b/tag/interview.mdwn
new file mode 100644
index 0000000..91db163
--- /dev/null
+++ b/tag/interview.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged interview"]]
+
+[[!inline pages="tagged(interview)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/lazyweb
diff --git a/tag/lazyweb.mdwn b/tag/lazyweb.mdwn
new file mode 100644
index 0000000..025cb60
--- /dev/null
+++ b/tag/lazyweb.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged lazyweb"]]
+
+[[!inline pages="tagged(lazyweb)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/nestle
diff --git a/tag/nestle.mdwn b/tag/nestle.mdwn
new file mode 100644
index 0000000..2e2b557
--- /dev/null
+++ b/tag/nestle.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged nestle"]]
+
+[[!inline pages="tagged(nestle)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/burma
diff --git a/tag/burma.mdwn b/tag/burma.mdwn
new file mode 100644
index 0000000..1e9f7a4
--- /dev/null
+++ b/tag/burma.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged burma"]]
+
+[[!inline pages="tagged(burma)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/planet
diff --git a/tag/planet.mdwn b/tag/planet.mdwn
new file mode 100644
index 0000000..0b62d6c
--- /dev/null
+++ b/tag/planet.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged planet"]]
+
+[[!inline pages="tagged(planet)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/samsung
diff --git a/tag/samsung.mdwn b/tag/samsung.mdwn
new file mode 100644
index 0000000..190aae2
--- /dev/null
+++ b/tag/samsung.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged samsung"]]
+
+[[!inline pages="tagged(samsung)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/opensourcepress
diff --git a/tag/opensourcepress.mdwn b/tag/opensourcepress.mdwn
new file mode 100644
index 0000000..4e70a28
--- /dev/null
+++ b/tag/opensourcepress.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged opensourcepress"]]
+
+[[!inline pages="tagged(opensourcepress)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/solution
diff --git a/tag/solution.mdwn b/tag/solution.mdwn
new file mode 100644
index 0000000..d864ef6
--- /dev/null
+++ b/tag/solution.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged solution"]]
+
+[[!inline pages="tagged(solution)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/std11
diff --git a/tag/std11.mdwn b/tag/std11.mdwn
new file mode 100644
index 0000000..5a6407c
--- /dev/null
+++ b/tag/std11.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged std11"]]
+
+[[!inline pages="tagged(std11)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/bugs
diff --git a/tag/bugs.mdwn b/tag/bugs.mdwn
new file mode 100644
index 0000000..ad9d1b0
--- /dev/null
+++ b/tag/bugs.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged bugs"]]
+
+[[!inline pages="tagged(bugs)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/software-development
diff --git a/tag/software-development.mdwn b/tag/software-development.mdwn
new file mode 100644
index 0000000..df568da
--- /dev/null
+++ b/tag/software-development.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged software-development"]]
+
+[[!inline pages="tagged(software-development)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/browsers
diff --git a/tag/browsers.mdwn b/tag/browsers.mdwn
new file mode 100644
index 0000000..cb69218
--- /dev/null
+++ b/tag/browsers.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged browsers"]]
+
+[[!inline pages="tagged(browsers)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/internet
diff --git a/tag/internet.mdwn b/tag/internet.mdwn
new file mode 100644
index 0000000..c2e2394
--- /dev/null
+++ b/tag/internet.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged internet"]]
+
+[[!inline pages="tagged(internet)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/flashrom
diff --git a/tag/flashrom.mdwn b/tag/flashrom.mdwn
new file mode 100644
index 0000000..6fcf0bd
--- /dev/null
+++ b/tag/flashrom.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged flashrom"]]
+
+[[!inline pages="tagged(flashrom)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/vcs
diff --git a/tag/vcs.mdwn b/tag/vcs.mdwn
new file mode 100644
index 0000000..96a34da
--- /dev/null
+++ b/tag/vcs.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged vcs"]]
+
+[[!inline pages="tagged(vcs)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/tabs
diff --git a/tag/tabs.mdwn b/tag/tabs.mdwn
new file mode 100644
index 0000000..1aafe1f
--- /dev/null
+++ b/tag/tabs.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged tabs"]]
+
+[[!inline pages="tagged(tabs)" actions="no" archive="yes"
+feedshow=10]]

creating tag page tag/cellphonegotchis
diff --git a/tag/cellphonegotchis.mdwn b/tag/cellphonegotchis.mdwn
new file mode 100644
index 0000000..480c8e9
--- /dev/null
+++ b/tag/cellphonegotchis.mdwn
@@ -0,0 +1,4 @@
+[[!meta title="pages tagged cellphonegotchis"]]
+
+[[!inline pages="tagged(cellphonegotchis)" actions="no" archive="yes"
+feedshow=10]]