-</pre></blockquote></p>
-
-<p>In 1.7 seconds I had checked two mailing lists and confirmed that
-there are no message in the moderation queue. Every morning I
-currently moderate 68 mailman lists, and it normally take around two
-minutes. When I took over the two pkg-xiph lists above a few days
-ago, there were 400 emails waiting in the moderator queue. It took me
-less than 15 minutes to process them all using the listadmin
-program.</p>
-
-<p>If you install
-<a href="https://tracker.debian.org/pkg/listadmin">the listadmin
-package</a> from Debian and create a file <tt>~/.listadmin.ini</tt>
-with content like this, the moderation task is a breeze:</p>
-
-<p><blockquote><pre>
-username username@example.org
-spamlevel 23
-default discard
-discard_if_reason "Posting restricted to members only. Remove us from your mail list."
-
-password secret
-adminurl https://{domain}/mailman/admindb/{list}
-mailman-list@lists.example.com
-
-password hidden
-other-list@otherserver.example.org
-</pre></blockquote></p>
-
-<p>There are other options to set as well. Check the manual page to
-learn the details.</p>
-
-<p>If you are forced to moderate lists on a mailman installation where
-the SSL certificate is self signed or not properly signed by a
-generally accepted signing authority, you can set a environment
-variable when calling listadmin to disable SSL verification:</p>
-
-<p><blockquote><pre>
-PERL_LWP_SSL_VERIFY_HOSTNAME=0 listadmin
-</pre></blockquote></p>
-
-<p>If you want to moderate a subset of the lists you take care of, you
-can provide an argument to the listadmin script like I do in the
-initial screen dump (the xiph argument). Using an argument, only
-lists matching the argument string will be processed. This make it
-quick to accept messages if you notice the moderation request in your
-email.</p>
-
-<p>Without the listadmin program, I would never be the moderator of 68
-mailing lists, as I simply do not have time to spend on that if the
-process was any slower. The listadmin program have saved me hours of
-time I could spend elsewhere over the years. It truly is nice free
-software.</p>
-
-<p>As usual, if you use Bitcoin and want to show your support of my
-activities, please send Bitcoin donations to my address
-<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&label=PetterReinholdtsenBlog">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
-
-<p>Update 2014-10-27: Added missing 'username' statement in
-configuration example. Also, I've been told that the
-PERL_LWP_SSL_VERIFY_HOSTNAME=0 setting do not work for everyone. Not
-sure why.</p>
-</description>
- </item>
-
- <item>
- <title>Debian Jessie, PXE and automatic firmware installation</title>
- <link>http://people.skolelinux.org/pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Debian_Jessie__PXE_and_automatic_firmware_installation.html</guid>
- <pubDate>Fri, 17 Oct 2014 14:10:00 +0200</pubDate>
- <description><p>When PXE installing laptops with Debian, I often run into the
-problem that the WiFi card require some firmware to work properly.
-And it has been a pain to fix this using preseeding in Debian.
-Normally something more is needed. But thanks to
-<a href="https://packages.qa.debian.org/i/isenkram.html">my isenkram
-package</a> and its recent tasksel extension, it has now become easy
-to do this using simple preseeding.</p>
-
-<p>The isenkram-cli package provide tasksel tasks which will install
-firmware for the hardware found in the machine (actually, requested by
-the kernel modules for the hardware). (It can also install user space
-programs supporting the hardware detected, but that is not the focus
-of this story.)</p>
-
-<p>To get this working in the default installation, two preeseding
-values are needed. First, the isenkram-cli package must be installed
-into the target chroot (aka the hard drive) before tasksel is executed
-in the pkgsel step of the debian-installer system. This is done by
-preseeding the base-installer/includes debconf value to include the
-isenkram-cli package. The package name is next passed to debootstrap
-for installation. With the isenkram-cli package in place, tasksel
-will automatically use the isenkram tasks to detect hardware specific
-packages for the machine being installed and install them, because
-isenkram-cli contain tasksel tasks.</p>
-
-<p>Second, one need to enable the non-free APT repository, because
-most firmware unfortunately is non-free. This is done by preseeding
-the apt-mirror-setup step. This is unfortunate, but for a lot of
-hardware it is the only option in Debian.</p>
-
-<p>The end result is two lines needed in your preseeding file to get
-firmware installed automatically by the installer:</p>
-
-<p><blockquote><pre>
-base-installer base-installer/includes string isenkram-cli
-apt-mirror-setup apt-setup/non-free boolean true
-</pre></blockquote></p>
-
-<p>The current version of isenkram-cli in testing/jessie will install
-both firmware and user space packages when using this method. It also
-do not work well, so use version 0.15 or later. Installing both
-firmware and user space packages might give you a bit more than you
-want, so I decided to split the tasksel task in two, one for firmware
-and one for user space programs. The firmware task is enabled by
-default, while the one for user space programs is not. This split is
-implemented in the package currently in unstable.</p>
-
-<p>If you decide to give this a go, please let me know (via email) how
-this recipe work for you. :)</p>
-
-<p>So, I bet you are wondering, how can this work. First and
-foremost, it work because tasksel is modular, and driven by whatever
-files it find in /usr/lib/tasksel/ and /usr/share/tasksel/. So the
-isenkram-cli package place two files for tasksel to find. First there
-is the task description file (/usr/share/tasksel/descs/isenkram.desc):</p>
-
-<p><blockquote><pre>
-Task: isenkram-packages
-Section: hardware
-Description: Hardware specific packages (autodetected by isenkram)
- Based on the detected hardware various hardware specific packages are
- proposed.
-Test-new-install: show show
-Relevance: 8
-Packages: for-current-hardware
-
-Task: isenkram-firmware
-Section: hardware
-Description: Hardware specific firmware packages (autodetected by isenkram)
- Based on the detected hardware various hardware specific firmware
- packages are proposed.
-Test-new-install: mark show
-Relevance: 8
-Packages: for-current-hardware-firmware
-</pre></blockquote></p>
-
-<p>The key parts are Test-new-install which indicate how the task
-should be handled and the Packages line referencing to a script in
-/usr/lib/tasksel/packages/. The scripts use other scripts to get a
-list of packages to install. The for-current-hardware-firmware script
-look like this to list relevant firmware for the machine:
-
-<p><blockquote><pre>
-#!/bin/sh
-#
-PATH=/usr/sbin:$PATH
-export PATH
-isenkram-autoinstall-firmware -l
-</pre></blockquote></p>
-
-<p>With those two pieces in place, the firmware is installed by
-tasksel during the normal d-i run. :)</p>
-
-<p>If you want to test what tasksel will install when isenkram-cli is
-installed, run <tt>DEBIAN_PRIORITY=critical tasksel --test
---new-install</tt> to get the list of packages that tasksel would
-install.</p>
-
-<p><a href="https://wiki.debian.org/DebianEdu/">Debian Edu</a> will be
-pilots in testing this feature, as isenkram is used there now to
-install firmware, replacing the earlier scripts.</p>
+</pre>
+
+<p>The script accept several organisation numbers on the command line,
+allowing a cluster of companies to be graphed in the same image. The
+resulting dot file for the example above look like this. The edges
+are labeled with the ownership percentage, and the nodes uses the
+organisation number as their name and the name as the label:</p>
+
+<pre>
+digraph ownership {
+rankdir = LR;
+"Aller Holding A/s" -> "910119877" [label="100%"]
+"910119877" -> "998689015" [label="100%"]
+"998689015" -> "958033540" [label="99%"]
+"974530600" -> "958033540" [label="1%"]
+"958033540" [label="AS DAGBLADET"]
+"998689015" [label="Berner Media Holding AS"]
+"974530600" [label="Dagbladets Stiftelse"]
+"910119877" [label="Aller Media AS"]
+}
+</pre>
+
+<p>To view the ownership graph, run "<tt>dotty dagbladet.dot</tt>" or
+convert it to a PNG using "<tt>dot -T png dagbladet.dot >
+dagbladet.png</tt>". The result can be seen below:</p>
+
+<img src="http://people.skolelinux.org/pere/blog/images/2015-06-15-ownership-graphs-norway-dagbladet.png" width="80%">
+
+<p>Note that I suspect the "Aller Holding A/S" entry to be incorrect
+data in the official ownership register, as that name is not
+registered in the official company register for Norway. The ownership
+register is sensitive to typos and there seem to be no strict checking
+of the ownership links.</p>
+
+<p>Let me know if you improve the script or find better data sources.
+The code is licensed according to GPL 2 or newer.</p>
+
+<p>Update 2015-06-15: Since the initial post I've been told that
+"<a href="http://www.proff.dk/firma/carl-allers-etablissement-aktieselskab/københavn-v/hovedkontorer/13624518-3/">Aller
+Holding A/S</a>" is a Danish company, which explain why it did not
+have a Norwegian organisation number. I've also been told that there
+is a <a href="http://www.brreg.no/automatiske/webservices/">web
+services API available</a> from Brønnøysundsregistrene, for those
+willing to accept the terms or pay the price.</p>