1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns=
"http://www.w3.org/1999/xhtml" dir=
"ltr">
5 <meta http-equiv=
"Content-Type" content=
"text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen
</title>
7 <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"http://www.hungry.com/~pere/blog/style.css" />
8 <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"http://www.hungry.com/~pere/blog/vim.css" />
9 <link rel=
"alternate" title=
"RSS Feed" href=
"http://www.hungry.com/~pere/blog/index.rss" type=
"application/rss+xml" />
14 <a href=
"http://www.hungry.com/~pere/blog/">Petter Reinholdtsen
</a>
23 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/Frokostseminar_om_Noark_5_i_Oslo_fredag_2025_03_14.html">Frokostseminar om Noark
5 i Oslo fredag
2025-
03-
14</a></div>
24 <div class=
"date">31st January
2025</div>
25 <div class=
"body"><p>Nikita-prosjektet, der jeg er involvert, inviterer i samarbeid med
26 forskningsgruppen METAINFO og foreningen NUUG, til et frokostseminar
27 om Noark
5 og Noark
5 Tjenestegrensesnitt fredag
2025-
03-
14. Fokus
28 denne gangen er på bevaring og kassasjon. Seminaret finner sted ved
29 OsloMet, Pilestredet
46. Vi håper å få til videostrømming via
30 Internett av presentasjoner og paneldiskusjon. Oppdatert program og
31 lenker til påmeldingsskjema finner en via
32 <a href=
"https://noark.codeberg.page/noark5-seminars/2025-03-14-noark-workshop.html">arrangementets infoside
</a>. Arrangementet er gratis.
34 <p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
35 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
37 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>. Merk,
38 betaling med bitcoin er ikke anonymt. :)
</p>
43 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/noark5">noark5
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/norsk">norsk
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/nuug">nuug
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/offentlig innsyn">offentlig innsyn
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/standard">standard
</a>.
48 <div class=
"padding"></div>
51 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/121_packages_in_Debian_mapped_to_hardware_for_automatic_recommendation.html">121 packages in Debian mapped to hardware for automatic recommendation
</a></div>
52 <div class=
"date">19th January
2025</div>
53 <div class=
"body"><p>For some years now, I have been working on a automatic hardware
54 based package recommendation system for Debian and other Linux
55 distributions. The isenkram system I started on back in
2013 now
56 consist of two subsystems, one locating firmware files using the
57 information provided by apt-file, and one matching hardware to
58 packages using information provided by AppStream. The former is very
59 similar to the mechanism implemented in debian-installer to pick the
60 right firmware packages to install. This post is about the latter
61 system. Thanks to steady progress and good help from both other
62 Debian and upstream developers, I am happy to report that
63 <a href=
"https://tracker.debian.org/pkg/isenkram">the Isenkram
64 system
</a> now are able to recommend
121 packages using information
66 <a href=
"https://www.freedesktop.org/wiki/Distributions/AppStream/">AppStream
</a>.
</p>
68 <p>The mapping is done using modalias information provided by the
69 kernel, the same information used by udev when creating device files,
70 and the kernel when deciding which kernel modules to load. To get all
71 the modalias identifiers relevant for your machine, you can run the
72 following command on the command line:
</p>
75 find /sys/devices -name modalias -print0 | xargs -
0 sort -u
78 <p>The modalias identifiers can look something like this:
</p>
82 cpu:type:x86,ven0000fam0006mod003F:feature:,
0000,
0001,
0002,
0003,
0004,
0005,
0006,
0007,
0008,
0009,
000B,
000C,
000D,
000E,
000F,
0010,
0011,
0013,
0015,
0016,
0017,
0018,
0019,
001A,
001B,
001C,
001D,
001F,
002B,
0034,
003A,
003B,
003D,
0068,
006B,
006C,
006D,
006F,
0070,
0072,
0074,
0075,
0076,
0078,
0079,
007C,
0080,
0081,
0082,
0083,
0084,
0085,
0086,
0087,
0088,
0089,
008B,
008C,
008D,
008E,
008F,
0091,
0092,
0093,
0094,
0095,
0096,
0097,
0098,
0099,
009A,
009B,
009C,
009D,
009E,
00C0,
00C5,
00E1,
00E3,
00EB,
00ED,
00F0,
00F1,
00F3,
00F5,
00F6,
00F9,
00FA,
00FB,
00FD,
00FF,
0100,
0101,
0102,
0103,
0111,
0120,
0121,
0123,
0125,
0127,
0128,
0129,
012A,
012C,
012D,
0140,
0160,
0161,
0165,
016C,
017B,
01C0,
01C1,
01C2,
01C4,
01C5,
01C6,
01F9,
024A,
025A,
025B,
025C,
025F,
0282
83 dmi:bvnDellInc.:bvr2.18
.1:bd08/
14/
2023:br2.18:svnDellInc.:pnPowerEdgeR730:pvr:rvnDellInc.:rn0H21J3:rvrA09:cvnDellInc.:ct23:cvr:skuSKU=NotProvided
84 pci:v00008086d00008D3Bsv00001028sd00000600bc07sc80i00
87 usb:v413CpA001d0000dc09dsc00dp00ic09isc00ip00in00
90 <p>The entries above are a selection of the complete set available on
91 a Dell PowerEdge R730 machine I have access to, to give an idea about
92 the various styles of hardware identifiers presented in the modalias
93 format. When looking up relevant packages in a Debian Testing
94 installation on the same R730, I get this list of packages
98 % sudo isenkram-lookup
100 firmware-nvidia-graphics
107 <p>The list consist of firmware packages requested by kernel modules,
108 as well packages with program to get the status from the RAID
109 controller and to maintain the LAN console. When the edac-utils
110 package providing tools to check the ECC RAM status will enter testing
111 in a few days, it will also show up as a proposal from isenkram. In
112 addition, once the mfiutil package we uploaded in October get past the
113 NEW processing, it will also propose a tool to configure the RAID
116 <p>Another example is the trusty old Lenovo Thinkpad X230, which have
117 hardware handled by several packages in the archive. This is running
118 on Debian Stable:
</p>
127 firmware-misc-nonfree
141 <p>Here there proposal consist of software to handle the camera,
142 bluetooth, network card, wifi card, GPU, fan, fingerprint reader and
143 acceleration sensor on the machine.
</p>
145 <p>Here is the complete set of packages currently providing hardware
146 mapping via AppStream in Debian Unstable: air-quality-sensor,
147 alsa-firmware-loaders, antpm, array-info, avarice, avrdude,
148 bmusb-v4l2proxy, brltty, calibre, colorhug-client, concordance-common,
149 consolekit, dahdi-firmware-nonfree, dahdi-linux, edac-utils,
150 eegdev-plugins-free, ekeyd, elogind, firmware-amd-graphics,
151 firmware-ath9k-htc, firmware-atheros, firmware-b43-installer,
152 firmware-b43legacy-installer, firmware-bnx2, firmware-bnx2x,
153 firmware-brcm80211, firmware-carl9170, firmware-cavium,
154 firmware-intel-graphics, firmware-intel-misc, firmware-ipw2x00,
155 firmware-ivtv, firmware-iwlwifi, firmware-libertas,
156 firmware-linux-free, firmware-mediatek, firmware-misc-nonfree,
157 firmware-myricom, firmware-netronome, firmware-netxen,
158 firmware-nvidia-graphics, firmware-qcom-soc, firmware-qlogic,
159 firmware-realtek, firmware-ti-connectivity, fpga-icestorm, g810-led,
160 galileo, garmin-forerunner-tools, gkrellm-thinkbat, goldencheetah,
161 gpsman, gpstrans, gqrx-sdr, i8kutils, imsprog, ledger-wallets-udev,
162 libairspy0, libam7xxx0.1, libbladerf2, libgphoto2-
6t64,
163 libhamlib-utils, libm2k0.9
.0, libmirisdr4, libnxt, libopenxr1-monado,
164 libosmosdr0, librem5-flash-image, librtlsdr0, libticables2-
8,
165 libx52pro0, libykpers-
1-
1, libyubikey-udev, limesuite,
166 linuxcnc-uspace, lomoco, madwimax, media-player-info, megactl, mixxx,
167 mkgmap, msi-keyboard, mu-editor, mustang-plug, nbc, nitrokey-app, nqc,
168 ola, openfpgaloader, openocd, openrazer-driver-dkms, pcmciautils,
169 pcscd, pidgin-blinklight, ponyprog, printer-driver-splix,
170 python-yubico-tools, python3-btchip, qlcplus, rosegarden, scdaemon,
171 sispmctl, solaar, spectools, sunxi-tools, t2n, thinkfan, tlp,
172 tp-smapi-dkms, trezor, tucnak, ubertooth, usbrelay, uuu, viking,
173 w1retap, wsl, xawtv, xinput-calibrator, xserver-xorg-input-wacom and
176 <p>In addition to these, there are several
177 <a href=
"https://udd.debian.org/cgi-bin/bts-usertags.cgi?user=pere%40hungry.com&tag=appstream-modalias">with
178 patches pending in the Debian bug tracking system
</a>, and even more
179 where no-one wrote patches yet. Good candiates for the latter are
181 <a href=
"https://udd.debian.org/lintian-tag.cgi?tag=appstream-metadata-missing-modalias-provide">with
182 udev rules but no AppStream hardware information
</a>.
</p>
184 <p>The isenkram system consist of two packages, isenkram-cli with the
185 command line tools, and isenkram with a GUI background process. The
186 latter will listen for dbus events from udev emitted when new hardware
187 become available (like when inserting a USB dongle or discovering a
188 new bluetooth device), look up the modalias entry for this piece of
189 hardware in AppStream (and a hard coded list of mappings from isenkram
190 - currently working hard to move this list to AppStream), and pop up a
191 dialog proposing to install any not already installed packages
192 supporting this hardware. It work very well today when inserting the
193 LEGO Mindstorms RCX, NXT and EV3 controllers. :) If you want to make
194 sure more hardware related packages get recommended, please help out
195 fixing the remaining packages in Debian to provide AppStream metadata
196 with hardware mappings.
</p>
198 <p>As usual, if you use Bitcoin and want to show your support of my
199 activities, please send Bitcoin donations to my address
200 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
205 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/english">english
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/isenkram">isenkram
</a>.
210 <div class=
"padding"></div>
213 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2025_.html">What is the most supported MIME type in Debian in
2025?
</a></div>
214 <div class=
"date">18th January
2025</div>
215 <div class=
"body"><p><a href=
"http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html">Seven
</a>
217 <a href=
"http://www.hungry.com/~pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html">twelve
</a>
218 years ago, I measured what the most supported MIME type in Debian
219 was
</a>, first by analysing the desktop files in all packages in the
220 archive, then by analysing the DEP-
11 AppStream data set. I guess it
221 is time to repeat the measurement, only for unstable as last time:
</p>
223 <p><strong>Debian Unstable:
</strong></p>
227 ----- -----------------------
239 36 audio/x-vorbis+ogg
250 <p>The list was created like this using a sid chroot:
</p>
253 cat /var/lib/apt/lists/*sid*_dep11_Components-amd64.yml.gz | \
254 zcat | awk '/^ - \S+\/\S+$/ {print $
2 }' | sort | \
255 uniq -c | sort -nr | head -
20
258 <p>It is nice to see that the same number of packages now support PNG
259 and JPEG. Last time JPEG had more support than PNG. Most of the MIME
260 types are known to me, but the 'audio/x-scpls' one I have no idea what
261 represent, except it being an audio format. To find the packages
262 claiming support for this format, the appstreamcli command from the
263 appstream package can be used:
266 % appstreamcli what-provides mediatype audio/x-scpls | grep Package: | sort -u
267 Package: alsaplayer-common
274 Package: cynthiune.app
279 Package: kylin-burner
281 Package: mediaconch-gui
282 Package: mediainfo-gui
294 Package: soundconverter
301 <p>Look like several video and auto tools understand the format.
302 Similarly one can check out the number of packages supporting the STL
303 format commonly used for
3D printing:
</p>
306 % appstreamcli what-provides mediatype model/stl | grep Package: | sort -u
309 Package: open3d-viewer
314 <a href=
"https://tracker.debian.org/pkg/slic3r">slic3r
</a> and
315 <a href=
"https://tracker.debian.org/pkg/slic3r-prusa">prusa-slicer
</a>
316 packages do not support STL. Perhaps just missing package metadata?
317 Luckily the amount of package metadata in Debian is getting better,
318 and hopefully this way of locating relevant packages for any file
319 format will be the preferred one soon.
321 <p>As usual, if you use Bitcoin and want to show your support of my
322 activities, please send Bitcoin donations to my address
323 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
328 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/english">english
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/isenkram">isenkram
</a>.
333 <div class=
"padding"></div>
336 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/The_2025_LinuxCNC_Norwegian_developer_gathering.html">The
2025 LinuxCNC Norwegian developer gathering
</a></div>
337 <div class=
"date">11th January
2025</div>
338 <div class=
"body"><p><a href=
"https://linuxcnc.org/">The LinuxCNC project
</a> is
339 trotting along. And I believe this great software system for
340 numerical control of machines such as milling machines, lathes, plasma
341 cutters, routers, cutting machines, robots and hexapods, would do even
342 better with more in-person developer gatherings, so we plan to
343 organise such gathering this summer too.
</p>
345 <p>This year we would like to invite to a small LinuxCNC and free
346 software fabrication workshop/gathering in Norway this summer for the
347 weekend starting July
4th
2025. New this year is the slightly larger
348 scope, and we invite people also outside the LinuxCNC community to
349 join. As earlier, we suggest to organize it as an
350 <a href=
"https://en.wikipedia.org/wiki/Unconference">unconference
</a>,
351 where the participants create the program upon arrival.
</p>
353 <p>The location is a metal workshop
15 minutes drive away from to the
354 Gardermoen airport (OSL), where there is a lot of space and a hotel only
355 5 minutes away by car. We plan to fire up the barbeque in the evenings.
</p>
357 <p>Please let us know if you would like to join. We track the list of
358 participants on
<a href=
"https://pad.efn.no/p/linuxcnc-2025-norway">a
359 simple pad
</a>, please add yourself there if you are interested in joining.
</p>
361 <p><a href=
"https://www.nuugfoundation.no/">The NUUG Foundation
</a> has on
362 our request offered to handle any money involved with this gathering,
363 in other words holding any sponsor funds and paying any bills.
364 NUUG Foundation is a spinnoff from the NUUG member organisation here
365 in Norway with long ties to the free software and open standards
368 <p>As usual we hope to find sponsors to pay for food, lodging and travel.
</p>
370 <p>As usual, if you use Bitcoin and want to show your support of my
371 activities, please send Bitcoin donations to my address
372 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
377 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/english">english
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc
</a>.
382 <div class=
"padding"></div>
385 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/New_lsdvd_release_0_18_after_ten_years.html">New lsdvd release
0.18 after ten years
</a></div>
386 <div class=
"date">21st December
2024</div>
387 <div class=
"body"><p>The rumors of the death of
388 <a href=
"https://sourceforge.net/projects/lsdvd/">the lsdvd project
</a>
389 is slightly exaggerated. And the last few months, we have been
390 working on fixing and improving it, culminating in a new release last
391 night. This is the list of changes in the new
0.18 release, as
392 <a href=
"https://sourceforge.net/p/lsdvd/mailman/message/59108028/">announced
393 on the project mailing list
</a>:
</p>
397 <li>Simplified autoconf setup, dropped --enable-debug option.
</li>
398 <li>Improved video resolution reporting (
<a href=
"https://sourceforge.net/p/lsdvd/patches/8/">Fixes #
8</a>).
</li>
399 <li>Applied patches fetched from BSDs (
<a href=
"https://sourceforge.net/p/lsdvd/patches/7/">Fixes #
7</a>).
</li>
400 <li>Corrected Perl output (
<a href=
"https://sourceforge.net/p/lsdvd/patches/1/">Fixes #
1</a>).
</li>
401 <li>Adjusted Pan and Scan entries to produce valid XML.
</li>
402 <li>Changed --help output from stderr to stdout.
</li>
403 <li>Corrected aspect ratio and audio format formatting.
</li>
404 <li>Avoid segfault when hitting a NULL pointer in the IFO structure.
</li>
405 <li>Change build rules to supress compiler flags, to make it easier to
407 <li>Set default DVD device based on OS (Linux, *BSD, Darwin)
</li>
408 <li>Added libdvdread DVDDiscID to output.
</li>
409 <li>Corrected typo in longest track value in XML format.
</li>
410 <li>Switched XML output to use libxml to avoid string encoding issues.
</li>
411 <li>Added simple build time test suite.
</li>
412 <li>Cleaned up language code handling and adding missing mapping for
413 language codes 'nb' and 'nn'.
</li>
414 <li>Added JSON output support using -Oj.
</li>
417 <p>The most exciting news to me is easy access to the DVDDiscID, which
418 make it a lot easier to identify DVD duplicates across a large
419 collection of DVDs. During testing it has proved to be very effective
420 ad identifying when DVDs in a DVD box (say all Star Wars movies) is
421 identical to DVDs sold individually (like the same Star Wars movies
422 packaged individually).
</p>
424 <p>Because none of the current developers got access to do tarball
425 releases on Sourceforge any more, the release is only available as
426 <a href=
"https://sourceforge.net/p/lsdvd/git/ci/0.18/tree/">a git
427 tag
</a> in the repository. Lets hope it do not take ten years for the
428 next release. The project are discussing to move away from
429 Sourceforge, but it has not yet concluded.
</p>
431 <p>As usual, if you use Bitcoin and want to show your support of my
432 activities, please send Bitcoin donations to my address
433 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
438 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/english">english
</a>.
443 <div class=
"padding"></div>
446 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/More_than_200_orphaned_Debian_packages_moved_to_git__216_to_go.html">More than
200 orphaned Debian packages moved to git,
216 to go
</a></div>
447 <div class=
"date">11th July
2024</div>
448 <div class=
"body"><p><a href=
"http://www.hungry.com/~pere/blog/Time_to_move_orphaned_Debian_packages_to_git.html">In
449 April
</a>, I started migrating orphaned Debian packages without any
450 version control system listed in debian/control to git. This morning,
451 my Debian QA page finally reached
200 QA packages migrated. In
452 reality there are a few more, as the packages uploaded by someone else
453 after my initial upload have disappeared from my QA uploads list. As
454 I am running out of steam and will most likely focus on other parts of
455 Debian moving forward, I hope someone else will find time to continue
456 the migration to bring the number of orphaned packages without any
457 version control system down to zero. Here is the updated recipe if
458 someone want to help out.
</p>
460 <p>To locate packages to work on, the following one-liner can be used:
</p>
463 PGPASSWORD="udd-mirror" psql --port=
5432 --host=udd-mirror.debian.net \
464 --username=udd-mirror udd -c "select source from sources \
465 where release = 'sid' and (vcs_url ilike '%anonscm.debian.org%' \
466 OR vcs_browser ilike '%anonscm.debian.org%' or vcs_url IS NULL \
467 OR vcs_browser IS NULL) AND maintainer ilike '%packages@qa.debian.org%' \
468 order by random() limit
10;"
471 <p>Pick a random package from the list and run the latest edition of
473 <tt><a href=
"http://www.hungry.com/~pere/blog/images/2024-07-11-debian-snap-to-salsa.sh">debian-snap-to-salsa
</a></tt>
474 with the package name as the argument to prepare a git repository with
475 the existing packaging. This will download old Debian packages from
476 <tt>snapshot.debian.org
</tt>. Note that very recent uploads will not
477 be included, so check out the package on
<tt>tracker.debian.org
</tt>.
478 Next, run
<tt>gbp buildpackage --git-ignore-new
</tt> to verify that
479 the package build as it should, and then visit
480 <a href=
"https://salsa.debian.org/debian/">https://salsa.debian.org/debian/
</a>
481 and make sure there is not already a git repository for the package
482 there. I also did
<tt>git log -p debian/control
</tt> and look for vcs
483 entries to check if the package used to have a git repository on
484 Alioth, and see if it can be a useful starting point moving forward.
485 If all this check out, I created a new gitlab project below the Debian
486 group on salsa, push the package source there and upload a new version.
487 I tend to also ensure build hardening is enabled, if it prove to be
488 easy, and check if I can easily fix any lintian issues or bug reports.
489 If the process took more than
20 minutes, I dropped it and moved on to
492 <p>If I found patches in debian/patches/ that were not yet passed
493 upstream, I would send an email to make sure upstream know about them.
494 This has proved to be a valuable step, and caused several new releases
495 for software that initially appeared abandoned. :)
</p>
497 <p>As usual, if you use Bitcoin and want to show your support of my
498 activities, please send Bitcoin donations to my address
499 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
504 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/english">english
</a>.
509 <div class=
"padding"></div>
512 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/Some_notes_from_the_2024_LinuxCNC_Norwegian_developer_gathering.html">Some notes from the
2024 LinuxCNC Norwegian developer gathering
</a></div>
513 <div class=
"date">10th July
2024</div>
514 <div class=
"body"><p>The Norwegian
<a href=
"https://linuxcnc.org/">The LinuxCNC
</a>
515 developer gathering
2024 is over. It was a great and productive
516 weekend, and I am sad that it is over.
</p>
518 <p>Regular readers probably still remember what LinuxCNC is, but her
519 is a quick summary for those that forgot? LinuxCNC is a free software
520 system for numerical control of machines such as milling machines,
521 lathes, plasma cutters, routers, cutting machines, robots and
522 hexapods. It eats G-code and produce motor movement and other changes
523 to the physical world, while reading sensor input.
</p>
525 <p>I am not quite sure about the total head count, as not all people
526 were present at the gathering the entire weekend, but I believe it was
527 close to
10 people showing their faces at the gathering. The "hard
528 core" of the group, who stayed the entire weekend, were two from
529 Norway, two from Germany and one from England. I am happy with the
530 outcome from the gathering. We managed to wrap up a new stable
531 LinuxCNC release
2.9.3 and even tested it on real hardware within
532 minutes of the release. The release notes for
2.9.3 are still being
533 written, but should show up on on the project site in the next few
534 days. We managed to go through around twenty pull requests and merge
535 then into either the stable release (
2.9) or the development branch
536 (master). There are still around thirty pull requests left to
537 process, so we are not out of work yet. We even managed to
538 fix/improve a slightly worn lathe, and experiment with running a
539 mechanical clock using G-code.
</p>
541 <p>The evening barbeque worked well both on Saturday and Sunday. It
542 is quite fun to light up a charcoal grill using compressed air. Sadly
543 the weather was not the best, so we stayed indoors most of the
546 <p>This gathering was made possible partly with sponsoring from both
547 <a href=
"https://www.redpill-linpro.com/">Redpill Linpro
</a>,
548 <a href=
"https://debian.org/">Debian
</a> and
549 <a href=
"https://nuugfoundation.no/">NUUG Foundation
</a>, and we are
550 most grateful for the support. I would also like to thank the local
551 school for lending us some furniture, and of course the rest of the
552 members of the organizers team, Asle and Bosse, for their countless
553 contributions. The gathering was such success that we want to do it
556 <p>We plan to organize the next Norwegian LinuxCNC developer gathering
557 at the end of June next year, the weekend Friday
27th to Sunday
29th
558 of June
2025. I recommend you reserve the dates on your calendar
559 today. Other related communities are also welcome to join in, for
560 example those working on systems like FreeCAD and opencamlib, as I am
561 sure we have much in common and sharing experiences would be very
562 useful to all involved. We are of course looking for sponsors for
563 this gathering already. The total budget for this gathering was
564 around NOK
25.000 (around EUR
2.300), so our needs are quite modest.
565 Perhaps a machine or tools company would like to help out the free
566 software manufacturing community by sponsoring food, lodging and
567 transport for such gathering?
</p>
572 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/english">english
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc
</a>.
577 <div class=
"padding"></div>
580 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/_M_ter_vi_liv_eller_d_d____pamfletten_som_inspirerte.html">«Møter vi liv eller død?», pamfletten som inspirerte
</a></div>
581 <div class=
"date"> 4th June
2024</div>
582 <div class=
"body"><img align=
"center" src=
"http://www.hungry.com/~pere/blog/images/2024-06-04-bok-elsa-laula.svg" width=
"20%" align=
"center" border=
"1"></a>
584 <p>Da jeg i høst hørte jeg et innslag på
585 <a href=
"https://radiorakel.no/">radiOrakel
</a> om en inspirerende dame
586 som levde for over hundre år siden, fikk jeg en vill ide. Elsa Laula
587 var en svensk samisk dame som ikke bare fikk utdannelsen finansiert av
588 den danske dronningen, men som gjorde så god jobb med å inspirere og
589 organisere den samiske befolkningen at det visstnok ble forslått i
590 Sverige å straffeforfølge henne for oppvigleri før hun flyttet fra
591 Sverige til Norge. Radiopraterne fortalte videre at da Elsa Laula ga
592 ut en pamflett for å inspirere samene til samling var dette den
593 første bok gitt ut av en samisk dame noensinne. Jeg fikk høre at
594 denne korte teksten kun fantes på originalspråket svensk under
595 tittelen «Inför lif eller död» og aldri var oversatt til norsk. Da
596 tenkte jeg, der jeg satt i bilen, at en norsk utgave kan vel jeg
597 fikse. Jeg har jo fått oversatt endel bøker, og en liten pamflett på
598 noen få sider burde jo være grei skuring.
</p>
600 <p>Den imponerende Elsa Laula, som senere la til etternavnet Renberg, har
601 blant annet fått dokumentaren
602 «
<a href=
"https://www.nrk.no/video/elsa-laula-renberg-kvinnen-som-samlet-sapmi_SAPP67002117">Elsa
603 Laula Renberg, kvinnen som samlet Sápmi
</a>» (
2017) av Per Kristian
604 Olsen på NRK, NRK-artikkelen
605 «
<a href=
"https://www.nrk.no/kultur/xl/et-liv-i-kamp-for-samefolkets-rettigheter-1.13351401">Samenes
606 Jeanne d’Arc
</a>» av Karen Brodshaug Sveen (
2017), oppgaven
607 «
<a href=
"https://nordligefolk.no/wp-content/uploads/2020/03/Elsa-Laulas-Info%CC%88r-Lif-och-Do%CC%88d.pdf">Elsa
608 Laulas Innför lif och död – sanningsord i de lappska
609 förhållandena
</a>» av Edel Olsen, biografien
610 «
<a href=
"https://www.siribrochjohansen.no/biografien-om-elsa-laula-renberg/">Elsa
611 Laula Renberg - Historien om samefolkets store Minerva
</a>» (
2015) av
612 Siri Broch Johansen og radiOrakel-podkasten
613 <a href=
"https://radiorakel.no/podcast/revolusjonen-har-et-kvinnelig-ansikt-elsa-laula/">Revolusjonen
614 har et kvinnelig ansikt – Elsa Laula
</a>, for å nevne de jeg har
615 finnet uten å lete spesielt hardt. En virkelig spennende dame, som i
616 tillegg til å inspirere til opprettelsen av samiske organisasjoner,
617 har inspirert til opprettelsen av Sametinget, og født seks barn der
620 <p>I dag er jeg veldig glad for å kunne annonsere at
621 <a href=
"http://www.hungry.com/~pere/publisher/#infoerlifellerdoed2024">bokmålsoversettelsen
622 er klar og tilgjengelig
</a> for både bestilling på papir og
623 epub-utgave fra lulu.com, samt som nettside. Den kringkastede
624 bokinformasjonen ser slik ut:
</p>
628 <p>Den
27 år gamle sørsamiske kvinnen Elsa Laula ga i august
1904 ut
629 en pamflett i Stockholm. Opplaget var på
6000, finansiert av
630 Stockholmsredaktøren Gustav Hedenström, som også bidro i stiftelsen av
631 Lapparnes Centralforbund. Dette kampskriftet var den første boken gitt
632 ut av en samisk kvinne, og hadde som mål å inspirere til opprettelsen
633 av samiske foreninger over hele landet, samt skape blest om
634 sentralforbundet. Pamfletten er et politisk manifest som fortsatt
635 inspirerer i dag.
</p>
637 <p>Denne pamfletten er nå for første gang tilgjengelig på bokmål,
638 sammen med en nyutgivelse av originalteksten på svensk.
</p>
642 <p>Oversettelsen hadde ikke vært mulig uten gode hjelpere. En virkelig
643 stor innsats både i korrekturarbeidet og utforskning av arkaiske
644 svenske ord, står Axel Rosén bak. I tillegg har jeg fått innspill fra
645 Edel May Karlsen og flere andre både på språkføring og historisk
646 bakgrunn for å forstå teksten.
</p>
648 <p>En kuriositet som jeg oppdaget i arbeidet med oversettelsen er at
649 det ikke stemmer at denne boken ikke var oversatt til noen andre
650 språk. Anna Wuolab oversatte den til nordsamisk i
2017 i en utgave
651 gitt ut av samisk skribent- och författarförening (Bágu čálliid
652 searvi) under tittelen «Eallit vai jápmit? : duohtavuođasánit sámi
653 diliid birra = Inför lif eller död? : sanningsord i de lappska
654 förhållandena». Papirutgaven er så vidt jeg kan forstå utsolgt fra
655 forlaget og jeg har ikke klart å finne informasjonsside om boken på
656 Internett. Mulig den er mulig å få tak i som ebok, hvis en skal tro
657 <a href=
"https://search.worldcat.org/title/1405213087">oppføring i
660 <p>Oversetterrammeverket jeg har satt opp for å gjennomføre dette
661 oversettelsesprosjektet håndterer flere språk. Jeg er igang med
662 engelsk utgave, og er åpen for å også gi ut andre oversettelser hvis
663 noen er interessert i å gjøre jobben. Det hadde vært ekstra moro å gi
664 den ut på sørsamisk, det samiske språket i regionen der Elsa Laula kom
665 fra. Der er jeg som vanlig avhengig av frivillige som er også
666 interessert i å gjøre dette på dugnad.
</p>
668 <p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
669 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
671 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>. Merk,
672 betaling med bitcoin er ikke anonymt. :)
</p>
677 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/docbook">docbook
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/norsk">norsk
</a>.
682 <div class=
"padding"></div>
685 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/The_2024_LinuxCNC_Norwegian_developer_gathering.html">The
2024 LinuxCNC Norwegian developer gathering
</a></div>
686 <div class=
"date">31st May
2024</div>
687 <div class=
"body"><p><a href=
"https://linuxcnc.org/">The LinuxCNC project
</a> is still
688 going strong. And I believe this great software system for numerical control of
689 machines such as milling machines, lathes, plasma cutters, routers,
690 cutting machines, robots and hexapods, would do even better with more
691 in-person developer gatherings, so we plan to organise such gathering
694 <p>The Norwegian LinuxCNC developer gathering take place the weekend
695 Friday July
5th to
7th this year, and is open for everyone interested
696 in contributing to LinuxCNC and free software manufacturing. Up to
697 date information about the gathering can be found in
698 <a href=
"https://sourceforge.net/p/emc/mailman/emc-developers/thread/123eaae0-f3b9-4170-a251-b7d608f1e974%40bofh.no/">the
699 developer mailing list thread
</a> where the gathering was announced.
700 Thanks to the good people at
702 <a href=
"https://www.debian.org/">Debian
</a> as well as leftover money
703 from last years gathering from
704 <a href=
"https://www.redpill-linpro.com/">Redpill-Linpro
</a> and
705 <a href=
"https://www.nuugfoundation.no/no/">NUUG Foundation
</a>, we
706 have enough sponsor funds to pay for food, and probably also shelter
707 for the people traveling from afar to join us. If you would like to
708 join the gathering, get in touch and add your details on
709 <a href=
"https://pad.efn.no/p/linuxcnc-2024-norway">the pad
</a>.
</p>
711 <p>As usual, if you use Bitcoin and want to show your support of my
712 activities, please send Bitcoin donations to my address
713 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
718 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/english">english
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc
</a>.
723 <div class=
"padding"></div>
726 <div class=
"title"><a href=
"http://www.hungry.com/~pere/blog/45_orphaned_Debian_packages_moved_to_git__391_to_go.html">45 orphaned Debian packages moved to git,
391 to go
</a></div>
727 <div class=
"date">25th April
2024</div>
728 <div class=
"body"><p>Nine days ago, I started migrating orphaned Debian packages with no
729 version control system listed in debian/control of the source to git.
730 At the time there were
438 such packages. Now there are
391,
731 according to the UDD. In reality it is slightly less, as there is a
732 delay between uploads and UDD updates. In the nine days since, I have
733 thus been able to work my way through ten percent of the packages. I
734 am starting to run out of steam, and hope someone else will also help
735 brushing some dust of these packages. Here is a recipe how to do it.
737 I start by picking a random package by querying the UDD for a list of
738 10 random packages from the set of remaining packages:
741 PGPASSWORD="udd-mirror" psql --port=
5432 --host=udd-mirror.debian.net \
742 --username=udd-mirror udd -c "select source from sources \
743 where release = 'sid' and (vcs_url ilike '%anonscm.debian.org%' \
744 OR vcs_browser ilike '%anonscm.debian.org%' or vcs_url IS NULL \
745 OR vcs_browser IS NULL) AND maintainer ilike '%packages@qa.debian.org%' \
746 order by random() limit
10;"
749 <p>Next, I visit http://salsa.debian.org/debian and search for the
750 package name, to ensure no git repository already exist. If it does,
751 I clone it and try to get it to an uploadable state, and add the Vcs-*
752 entries in d/control to make the repository more widely known. These
753 packages are a minority, so I will not cover that use case here.
</p>
755 <p>For packages without an existing git repository, I run the
756 following script
<tt>debian-snap-to-salsa
</tt> to prepare a git
757 repository with the existing packaging.
</p>
762 # See also https://bugs.debian.org/
804722#
31
766 # Move to this Standards-Version.
771 if [ -z "$PKG" ]; then
772 echo "usage: $
0 <pkgname>"
776 if [ -e "${PKG}-salsa
" ]; then
777 echo "error: ${PKG}-salsa already exist, aborting.
"
781 if [ -z "ALLOWFAILURE
" ] ; then
785 # Fetch every snapshotted source package. Manually loop until all
786 # transfers succeed, as 'gbp import-dscs --debsnap' do not fail on
788 until debsnap --force -v $PKG || $ALLOWFAILURE ; do sleep 1; done
789 mkdir ${PKG}-salsa; cd ${PKG}-salsa
792 # Specify branches to override any debian/gbp.conf file present in the
794 gbp import-dscs --debian-branch=master --upstream-branch=upstream \
795 --pristine-tar ../source-$PKG/*.dsc
797 # Add Vcs pointing to Salsa Debian project (must be manually created
799 if ! grep -q ^Vcs- debian/control ; then
800 awk "BEGIN { s=
1 } /^\$/ { if (s==
1) { print \
"Vcs-Browser: https://salsa.debian.org/debian/$PKG\"; print \
"Vcs-Git: https://salsa.debian.org/debian/$PKG.git\" }; s=
0 } { print }
" < debian/control > debian/control.new && mv debian/control.new debian/control
801 git commit -m "Updated vcs in d/control to Salsa." debian/control
804 # Tell gbp to enforce the use of pristine-tar.
805 inifile +inifile debian/gbp.conf +create +section DEFAULT +key pristine-tar +value True
806 git add debian/gbp.conf
807 git commit -m "Added d/gbp.conf to enforce the use of pristine-tar." debian/gbp.conf
809 # Update to latest Standards-Version.
810 SV="$(grep ^Standards-Version: debian/control|awk '{print $
2}')"
811 if [ $SV_LATEST != $SV ]; then
812 sed -i "s/\(Standards-Version: \)\(.*\)/\
1$SV_LATEST/" debian/control
813 git commit -m "Updated Standards-Version from $SV to $SV_LATEST." debian/control
816 if grep -q pkg-config debian/control; then
817 sed -i s/pkg-config/pkgconf/ debian/control
818 git commit -m "Replaced obsolete pkg-config build dependency with pkgconf." debian/control
821 if grep -q libncurses5-dev debian/control; then
822 sed -i s/libncurses5-dev/libncurses-dev/ debian/control
823 git commit -m "Replaced obsolete libncurses5-dev build dependency with libncurses-dev." debian/control
827 Some times the debsnap script fail to download some of the versions.
828 In those cases I investigate, and if I decide the failing versions
829 will not be missed, I call it using ALLOWFAILURE=true to ignore the
830 problem and create the git repository anyway.
</p>
832 <p>With the git repository in place, I do a test build (gbp
833 buildpackage) to ensure the build is actually working. If it does not
834 I pick a different package, or if the build failure is trivial to fix,
835 I fix it before continuing. At this stage I revisit
836 http://salsa.debian.org/debian and create the project under this group
837 for the package. I then follow the instructions to publish the local
838 git repository. Here is from a recent example:
</p>
841 git remote add origin git@salsa.debian.org:debian/perl-byacc.git
842 git push --set-upstream origin master upstream pristine-tar
846 <p>With a working build, I have a look at the build rules if I want to
847 remove some more dust. I normally try to move to debhelper compat
848 level
13, which involves removing debian/compat and modifying
849 debian/control to build depend on debhelper-compat (=
13). I also test
850 with 'Rules-Requires-Root: no' in debian/control and verify in
851 debian/rules that hardening is enabled, and include all of these if
852 the package still build. If it fail to build with level
13, I try
853 with
12,
11,
10 and so on until I find a level where it build, as I do
854 not want to spend a lot of time fixing build issues.
</p>
856 <p>Some times, when I feel inspired, I make sure debian/copyright is
857 converted to the machine readable format, often by starting with
858 'debhelper -cc' and then cleaning up the autogenerated content until
859 it matches realities. If I feel like it, I might also clean up
860 non-dh-based debian/rules files to use the short style dh build
863 <p>Once I have removed all the dust I care to process for the package,
864 I run 'gbp dch' to generate a debian/changelog entry based on the
865 commits done so far, run 'dch -r' to switch from 'UNRELEASED' to
866 'unstable' and get an editor to make sure the 'QA upload' marker is in
867 place and that all long commit descriptions are wrapped into sensible
868 lengths, run 'debcommit --release -a' to commit and tag the new
869 debian/changelog entry, run 'debuild -S' to build a source only
870 package, and 'dput ../perl-byacc_2.0-
10_source.changes' to do the
871 upload. During the entire process, and many times per step, I run
872 'debuild' to verify the changes done still work. I also some times
873 verify the set of built files using 'find debian' to see if I can spot
874 any problems (like no file in usr/bin any more or empty package). I
875 also try to fix all lintian issues reported at the end of each
878 <p>If I find Debian specific patches, I try to ensure their metadata
879 is fairly up to date and some times I even try to reach out to
880 upstream, to make the upstream project aware of the patches. Most of
881 my emails bounce, so the success rate is low. For projects with no
882 Homepage entry in debian/control I try to track down one, and for
883 packages with no debian/watch file I try to create one. But at least
884 for some of the packages I have been unable to find a functioning
885 upstream, and must skip both of these.
</p>
887 <p>If I could handle ten percent in nine days, twenty people could
888 complete the rest in less then five days. I use approximately twenty
889 minutes per package, when I have twenty minutes spare time to spend.
890 Perhaps you got twenty minutes to spare too?
</p>
892 <p>As usual, if you use Bitcoin and want to show your support of my
893 activities, please send Bitcoin donations to my address
894 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
896 <p><strong>Update
2024-
05-
04:
</strong> There is
897 <a href=
"http://www.hungry.com/~pere/blog/images/2024-05-04-debian-snap-to-salsa.sh">an
898 updated edition of my migration script
</a>, last updated
904 Tags:
<a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian
</a>,
<a href=
"http://www.hungry.com/~pere/blog/tags/english">english
</a>.
909 <div class=
"padding"></div>
911 <p style=
"text-align: right;"><a href=
"index.rss"><img src=
"http://www.hungry.com/~pere/blog/xml.gif" alt=
"RSS feed" width=
"36" height=
"14" /></a></p>
922 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2025/01/">January (
4)
</a></li>
929 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/01/">January (
1)
</a></li>
931 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/02/">February (
1)
</a></li>
933 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/03/">March (
2)
</a></li>
935 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/04/">April (
3)
</a></li>
937 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/05/">May (
1)
</a></li>
939 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/06/">June (
1)
</a></li>
941 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/07/">July (
2)
</a></li>
943 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2024/12/">December (
1)
</a></li>
950 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/01/">January (
3)
</a></li>
952 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/02/">February (
1)
</a></li>
954 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/04/">April (
2)
</a></li>
956 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/05/">May (
3)
</a></li>
958 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/06/">June (
1)
</a></li>
960 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/08/">August (
1)
</a></li>
962 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/09/">September (
1)
</a></li>
964 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/10/">October (
1)
</a></li>
966 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/11/">November (
4)
</a></li>
968 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2023/12/">December (
1)
</a></li>
975 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/02/">February (
1)
</a></li>
977 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/03/">March (
3)
</a></li>
979 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/04/">April (
2)
</a></li>
981 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/06/">June (
2)
</a></li>
983 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/07/">July (
1)
</a></li>
985 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/09/">September (
1)
</a></li>
987 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/10/">October (
1)
</a></li>
989 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2022/12/">December (
1)
</a></li>
996 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/01/">January (
2)
</a></li>
998 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/02/">February (
1)
</a></li>
1000 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/05/">May (
1)
</a></li>
1002 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/06/">June (
1)
</a></li>
1004 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/07/">July (
3)
</a></li>
1006 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/08/">August (
1)
</a></li>
1008 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/09/">September (
1)
</a></li>
1010 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/10/">October (
1)
</a></li>
1012 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2021/12/">December (
1)
</a></li>
1019 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/02/">February (
2)
</a></li>
1021 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/03/">March (
2)
</a></li>
1023 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/04/">April (
2)
</a></li>
1025 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/05/">May (
3)
</a></li>
1027 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/06/">June (
2)
</a></li>
1029 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/07/">July (
1)
</a></li>
1031 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/09/">September (
1)
</a></li>
1033 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/10/">October (
1)
</a></li>
1035 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2020/11/">November (
1)
</a></li>
1042 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/01/">January (
4)
</a></li>
1044 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/02/">February (
3)
</a></li>
1046 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/03/">March (
3)
</a></li>
1048 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/05/">May (
2)
</a></li>
1050 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/06/">June (
5)
</a></li>
1052 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/07/">July (
2)
</a></li>
1054 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/08/">August (
1)
</a></li>
1056 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/09/">September (
1)
</a></li>
1058 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/11/">November (
1)
</a></li>
1060 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2019/12/">December (
4)
</a></li>
1067 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/01/">January (
1)
</a></li>
1069 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/02/">February (
5)
</a></li>
1071 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/03/">March (
5)
</a></li>
1073 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/04/">April (
3)
</a></li>
1075 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/06/">June (
2)
</a></li>
1077 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/07/">July (
5)
</a></li>
1079 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/08/">August (
3)
</a></li>
1081 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/09/">September (
3)
</a></li>
1083 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/10/">October (
5)
</a></li>
1085 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/11/">November (
2)
</a></li>
1087 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2018/12/">December (
4)
</a></li>
1094 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/01/">January (
4)
</a></li>
1096 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/02/">February (
3)
</a></li>
1098 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/03/">March (
5)
</a></li>
1100 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/04/">April (
2)
</a></li>
1102 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/06/">June (
5)
</a></li>
1104 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/07/">July (
1)
</a></li>
1106 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/08/">August (
1)
</a></li>
1108 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/09/">September (
3)
</a></li>
1110 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/10/">October (
5)
</a></li>
1112 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/11/">November (
3)
</a></li>
1114 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2017/12/">December (
4)
</a></li>
1121 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/01/">January (
3)
</a></li>
1123 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/02/">February (
2)
</a></li>
1125 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/03/">March (
3)
</a></li>
1127 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/04/">April (
8)
</a></li>
1129 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/05/">May (
8)
</a></li>
1131 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/06/">June (
2)
</a></li>
1133 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/07/">July (
2)
</a></li>
1135 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/08/">August (
5)
</a></li>
1137 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/09/">September (
2)
</a></li>
1139 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/10/">October (
3)
</a></li>
1141 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/11/">November (
8)
</a></li>
1143 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2016/12/">December (
5)
</a></li>
1150 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/01/">January (
7)
</a></li>
1152 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/02/">February (
6)
</a></li>
1154 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/03/">March (
1)
</a></li>
1156 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/04/">April (
4)
</a></li>
1158 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/05/">May (
3)
</a></li>
1160 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/06/">June (
4)
</a></li>
1162 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/07/">July (
6)
</a></li>
1164 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/08/">August (
2)
</a></li>
1166 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/09/">September (
2)
</a></li>
1168 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/10/">October (
9)
</a></li>
1170 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/11/">November (
6)
</a></li>
1172 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2015/12/">December (
3)
</a></li>
1179 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/01/">January (
2)
</a></li>
1181 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/02/">February (
3)
</a></li>
1183 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/03/">March (
8)
</a></li>
1185 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/04/">April (
7)
</a></li>
1187 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/05/">May (
1)
</a></li>
1189 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/06/">June (
2)
</a></li>
1191 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/07/">July (
2)
</a></li>
1193 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/08/">August (
2)
</a></li>
1195 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/09/">September (
5)
</a></li>
1197 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/10/">October (
6)
</a></li>
1199 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/11/">November (
3)
</a></li>
1201 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2014/12/">December (
5)
</a></li>
1208 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/01/">January (
11)
</a></li>
1210 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/02/">February (
9)
</a></li>
1212 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/03/">March (
9)
</a></li>
1214 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/04/">April (
6)
</a></li>
1216 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/05/">May (
9)
</a></li>
1218 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/06/">June (
10)
</a></li>
1220 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/07/">July (
7)
</a></li>
1222 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/08/">August (
3)
</a></li>
1224 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/09/">September (
5)
</a></li>
1226 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/10/">October (
7)
</a></li>
1228 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/11/">November (
9)
</a></li>
1230 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2013/12/">December (
3)
</a></li>
1237 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/01/">January (
7)
</a></li>
1239 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/02/">February (
10)
</a></li>
1241 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/03/">March (
17)
</a></li>
1243 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/04/">April (
12)
</a></li>
1245 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/05/">May (
12)
</a></li>
1247 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/06/">June (
20)
</a></li>
1249 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/07/">July (
17)
</a></li>
1251 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/08/">August (
6)
</a></li>
1253 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/09/">September (
9)
</a></li>
1255 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/10/">October (
17)
</a></li>
1257 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/11/">November (
10)
</a></li>
1259 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2012/12/">December (
7)
</a></li>
1266 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/01/">January (
16)
</a></li>
1268 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/02/">February (
6)
</a></li>
1270 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/03/">March (
6)
</a></li>
1272 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/04/">April (
7)
</a></li>
1274 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/05/">May (
3)
</a></li>
1276 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/06/">June (
2)
</a></li>
1278 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/07/">July (
7)
</a></li>
1280 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/08/">August (
6)
</a></li>
1282 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/09/">September (
4)
</a></li>
1284 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/10/">October (
2)
</a></li>
1286 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/11/">November (
3)
</a></li>
1288 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2011/12/">December (
1)
</a></li>
1295 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/01/">January (
2)
</a></li>
1297 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/02/">February (
1)
</a></li>
1299 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/03/">March (
3)
</a></li>
1301 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/04/">April (
3)
</a></li>
1303 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/05/">May (
9)
</a></li>
1305 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/06/">June (
14)
</a></li>
1307 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/07/">July (
12)
</a></li>
1309 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/08/">August (
13)
</a></li>
1311 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/09/">September (
7)
</a></li>
1313 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/10/">October (
9)
</a></li>
1315 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/11/">November (
13)
</a></li>
1317 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2010/12/">December (
12)
</a></li>
1324 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/01/">January (
8)
</a></li>
1326 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/02/">February (
8)
</a></li>
1328 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/03/">March (
12)
</a></li>
1330 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/04/">April (
10)
</a></li>
1332 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/05/">May (
9)
</a></li>
1334 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/06/">June (
3)
</a></li>
1336 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/07/">July (
4)
</a></li>
1338 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/08/">August (
3)
</a></li>
1340 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/09/">September (
1)
</a></li>
1342 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/10/">October (
2)
</a></li>
1344 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/11/">November (
3)
</a></li>
1346 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2009/12/">December (
3)
</a></li>
1353 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2008/11/">November (
5)
</a></li>
1355 <li><a href=
"http://www.hungry.com/~pere/blog/archive/2008/12/">December (
7)
</a></li>
1366 <li><a href=
"http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer (
19)
</a></li>
1368 <li><a href=
"http://www.hungry.com/~pere/blog/tags/amiga">amiga (
1)
</a></li>
1370 <li><a href=
"http://www.hungry.com/~pere/blog/tags/aros">aros (
1)
</a></li>
1372 <li><a href=
"http://www.hungry.com/~pere/blog/tags/bankid">bankid (
4)
</a></li>
1374 <li><a href=
"http://www.hungry.com/~pere/blog/tags/betalkontant">betalkontant (
9)
</a></li>
1376 <li><a href=
"http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin (
13)
</a></li>
1378 <li><a href=
"http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem (
17)
</a></li>
1380 <li><a href=
"http://www.hungry.com/~pere/blog/tags/bsa">bsa (
2)
</a></li>
1382 <li><a href=
"http://www.hungry.com/~pere/blog/tags/chrpath">chrpath (
3)
</a></li>
1384 <li><a href=
"http://www.hungry.com/~pere/blog/tags/debian">debian (
206)
</a></li>
1386 <li><a href=
"http://www.hungry.com/~pere/blog/tags/debian edu">debian edu (
159)
</a></li>
1388 <li><a href=
"http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook (
9)
</a></li>
1390 <li><a href=
"http://www.hungry.com/~pere/blog/tags/digistan">digistan (
11)
</a></li>
1392 <li><a href=
"http://www.hungry.com/~pere/blog/tags/dld">dld (
18)
</a></li>
1394 <li><a href=
"http://www.hungry.com/~pere/blog/tags/docbook">docbook (
33)
</a></li>
1396 <li><a href=
"http://www.hungry.com/~pere/blog/tags/drivstoffpriser">drivstoffpriser (
4)
</a></li>
1398 <li><a href=
"http://www.hungry.com/~pere/blog/tags/english">english (
468)
</a></li>
1400 <li><a href=
"http://www.hungry.com/~pere/blog/tags/fiksgatami">fiksgatami (
23)
</a></li>
1402 <li><a href=
"http://www.hungry.com/~pere/blog/tags/fildeling">fildeling (
14)
</a></li>
1404 <li><a href=
"http://www.hungry.com/~pere/blog/tags/freeculture">freeculture (
34)
</a></li>
1406 <li><a href=
"http://www.hungry.com/~pere/blog/tags/freedombox">freedombox (
9)
</a></li>
1408 <li><a href=
"http://www.hungry.com/~pere/blog/tags/frikanalen">frikanalen (
20)
</a></li>
1410 <li><a href=
"http://www.hungry.com/~pere/blog/tags/h264">h264 (
20)
</a></li>
1412 <li><a href=
"http://www.hungry.com/~pere/blog/tags/intervju">intervju (
43)
</a></li>
1414 <li><a href=
"http://www.hungry.com/~pere/blog/tags/isenkram">isenkram (
20)
</a></li>
1416 <li><a href=
"http://www.hungry.com/~pere/blog/tags/kart">kart (
23)
</a></li>
1418 <li><a href=
"http://www.hungry.com/~pere/blog/tags/kodi">kodi (
6)
</a></li>
1420 <li><a href=
"http://www.hungry.com/~pere/blog/tags/ldap">ldap (
9)
</a></li>
1422 <li><a href=
"http://www.hungry.com/~pere/blog/tags/lego">lego (
5)
</a></li>
1424 <li><a href=
"http://www.hungry.com/~pere/blog/tags/lenker">lenker (
8)
</a></li>
1426 <li><a href=
"http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc (
8)
</a></li>
1428 <li><a href=
"http://www.hungry.com/~pere/blog/tags/lsdvd">lsdvd (
2)
</a></li>
1430 <li><a href=
"http://www.hungry.com/~pere/blog/tags/ltsp">ltsp (
1)
</a></li>
1432 <li><a href=
"http://www.hungry.com/~pere/blog/tags/madewithcc">madewithcc (
3)
</a></li>
1434 <li><a href=
"http://www.hungry.com/~pere/blog/tags/mesh network">mesh network (
8)
</a></li>
1436 <li><a href=
"http://www.hungry.com/~pere/blog/tags/multimedia">multimedia (
46)
</a></li>
1438 <li><a href=
"http://www.hungry.com/~pere/blog/tags/nice free software">nice free software (
15)
</a></li>
1440 <li><a href=
"http://www.hungry.com/~pere/blog/tags/noark5">noark5 (
26)
</a></li>
1442 <li><a href=
"http://www.hungry.com/~pere/blog/tags/norsk">norsk (
326)
</a></li>
1444 <li><a href=
"http://www.hungry.com/~pere/blog/tags/nuug">nuug (
200)
</a></li>
1446 <li><a href=
"http://www.hungry.com/~pere/blog/tags/offentlig innsyn">offentlig innsyn (
42)
</a></li>
1448 <li><a href=
"http://www.hungry.com/~pere/blog/tags/open311">open311 (
2)
</a></li>
1450 <li><a href=
"http://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch (
4)
</a></li>
1452 <li><a href=
"http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett (
76)
</a></li>
1454 <li><a href=
"http://www.hungry.com/~pere/blog/tags/personvern">personvern (
114)
</a></li>
1456 <li><a href=
"http://www.hungry.com/~pere/blog/tags/raid">raid (
4)
</a></li>
1458 <li><a href=
"http://www.hungry.com/~pere/blog/tags/reactos">reactos (
1)
</a></li>
1460 <li><a href=
"http://www.hungry.com/~pere/blog/tags/reprap">reprap (
11)
</a></li>
1462 <li><a href=
"http://www.hungry.com/~pere/blog/tags/rfid">rfid (
3)
</a></li>
1464 <li><a href=
"http://www.hungry.com/~pere/blog/tags/robot">robot (
17)
</a></li>
1466 <li><a href=
"http://www.hungry.com/~pere/blog/tags/rss">rss (
1)
</a></li>
1468 <li><a href=
"http://www.hungry.com/~pere/blog/tags/ruter">ruter (
7)
</a></li>
1470 <li><a href=
"http://www.hungry.com/~pere/blog/tags/scraperwiki">scraperwiki (
2)
</a></li>
1472 <li><a href=
"http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet (
60)
</a></li>
1474 <li><a href=
"http://www.hungry.com/~pere/blog/tags/sitesummary">sitesummary (
4)
</a></li>
1476 <li><a href=
"http://www.hungry.com/~pere/blog/tags/skepsis">skepsis (
5)
</a></li>
1478 <li><a href=
"http://www.hungry.com/~pere/blog/tags/standard">standard (
77)
</a></li>
1480 <li><a href=
"http://www.hungry.com/~pere/blog/tags/stavekontroll">stavekontroll (
7)
</a></li>
1482 <li><a href=
"http://www.hungry.com/~pere/blog/tags/stortinget">stortinget (
14)
</a></li>
1484 <li><a href=
"http://www.hungry.com/~pere/blog/tags/surveillance">surveillance (
65)
</a></li>
1486 <li><a href=
"http://www.hungry.com/~pere/blog/tags/sysadmin">sysadmin (
5)
</a></li>
1488 <li><a href=
"http://www.hungry.com/~pere/blog/tags/usenix">usenix (
2)
</a></li>
1490 <li><a href=
"http://www.hungry.com/~pere/blog/tags/valg">valg (
9)
</a></li>
1492 <li><a href=
"http://www.hungry.com/~pere/blog/tags/verkidetfri">verkidetfri (
22)
</a></li>
1494 <li><a href=
"http://www.hungry.com/~pere/blog/tags/video">video (
80)
</a></li>
1496 <li><a href=
"http://www.hungry.com/~pere/blog/tags/vitenskap">vitenskap (
4)
</a></li>
1498 <li><a href=
"http://www.hungry.com/~pere/blog/tags/web">web (
42)
</a></li>
1504 <p style=
"text-align: right">
1505 Created by
<a href=
"http://steve.org.uk/Software/chronicle">Chronicle v4.6
</a>