]> pere.pagekite.me Git - homepage.git/blob - blog/index.html
Converted pages to temp site.
[homepage.git] / blog / index.html
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">
4 <head>
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="https://www.hungry.com/~pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="https://www.hungry.com/~pere/blog/vim.css" />
9 <link rel="alternate" title="RSS Feed" href="https://www.hungry.com/~pere/blog/index.rss" type="application/rss+xml" />
10 </head>
11 <body>
12 <div class="title">
13 <h1>
14 <a href="https://www.hungry.com/~pere/blog/">Petter Reinholdtsen</a>
15
16 </h1>
17
18 </div>
19
20
21
22 <div class="entry">
23 <div class="title"><a href="https://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>
24 <div class="date">11th July 2024</div>
25 <div class="body"><p><a href="https://people.skolelinux.org/pere/blog/Time_to_move_orphaned_Debian_packages_to_git.html">In
26 April</a>, I started migrating orphaned Debian packages without any
27 version control system listed in debian/control to git. This morning,
28 my Debian QA page finally reached 200 QA packages migrated. In
29 reality there are a few more, as the packages uploaded by someone else
30 after my initial upload have disappeared from my QA uploads list. As
31 I am running out of steam and will most likely focus on other parts of
32 Debian moving forward, I hope someone else will find time to continue
33 the migration to bring the number of orphaned packages without any
34 version control system down to zero. Here is the updated recipe if
35 someone want to help out.</p>
36
37 <p>To locate packages to work on, the following one-liner can be used:</p>
38
39 <blockquote><pre>
40 PGPASSWORD="udd-mirror" psql --port=5432 --host=udd-mirror.debian.net \
41 --username=udd-mirror udd -c "select source from sources \
42 where release = 'sid' and (vcs_url ilike '%anonscm.debian.org%' \
43 OR vcs_browser ilike '%anonscm.debian.org%' or vcs_url IS NULL \
44 OR vcs_browser IS NULL) AND maintainer ilike '%packages@qa.debian.org%' \
45 order by random() limit 10;"
46 </pre></blockquote>
47
48 <p>Pick a random package from the list and run the latest edition of
49 the script
50 <tt><a href="https://people.skolelinux.org/pere/blog/images/2024-07-11-debian-snap-to-salsa.sh">debian-snap-to-salsa</a></tt>
51 with the package name as the argument to prepare a git repository with
52 the existing packaging. This will download old Debian packages from
53 <tt>snapshot.debian.org</tt>. Note that very recent uploads will not
54 be included, so check out the package on <tt>tracker.debian.org</tt>.
55 Next, run <tt>gbp buildpackage --git-ignore-new</tt> to verify that
56 the package build as it should, and then visit
57 <a href="https://salsa.debian.org/debian/">https://salsa.debian.org/debian/</a>
58 and make sure there is not already a git repository for the package
59 there. I also did <tt>git log -p debian/control</tt> and look for vcs
60 entries to check if the package used to have a git repository on
61 Alioth, and see if it can be a useful starting point moving forward.
62 If all this check out, I created a new gitlab project below the Debian
63 group on salsa, push the package source there and upload a new version.
64 I tend to also ensure build hardening is enabled, if it prove to be
65 easy, and check if I can easily fix any lintian issues or bug reports.
66 If the process took more than 20 minutes, I dropped it and moved on to
67 another package.</p>
68
69 <p>If I found patches in debian/patches/ that were not yet passed
70 upstream, I would send an email to make sure upstream know about them.
71 This has proved to be a valuable step, and caused several new releases
72 for software that initially appeared abandoned. :)</p>
73
74 <p>As usual, if you use Bitcoin and want to show your support of my
75 activities, please send Bitcoin donations to my address
76 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
77 </div>
78 <div class="tags">
79
80
81 Tags: <a href="https://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="https://www.hungry.com/~pere/blog/tags/english">english</a>.
82
83
84 </div>
85 </div>
86 <div class="padding"></div>
87
88 <div class="entry">
89 <div class="title"><a href="https://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>
90 <div class="date">10th July 2024</div>
91 <div class="body"><p>The Norwegian <a href="https://linuxcnc.org/">The LinuxCNC</a>
92 developer gathering 2024 is over. It was a great and productive
93 weekend, and I am sad that it is over.</p>
94
95 <p>Regular readers probably still remember what LinuxCNC is, but her
96 is a quick summary for those that forgot? LinuxCNC is a free software
97 system for numerical control of machines such as milling machines,
98 lathes, plasma cutters, routers, cutting machines, robots and
99 hexapods. It eats G-code and produce motor movement and other changes
100 to the physical world, while reading sensor input.</p>
101
102 <p>I am not quite sure about the total head count, as not all people
103 were present at the gathering the entire weekend, but I believe it was
104 close to 10 people showing their faces at the gathering. The "hard
105 core" of the group, who stayed the entire weekend, were two from
106 Norway, two from Germany and one from England. I am happy with the
107 outcome from the gathering. We managed to wrap up a new stable
108 LinuxCNC release 2.9.3 and even tested it on real hardware within
109 minutes of the release. The release notes for 2.9.3 are still being
110 written, but should show up on on the project site in the next few
111 days. We managed to go through around twenty pull requests and merge
112 then into either the stable release (2.9) or the development branch
113 (master). There are still around thirty pull requests left to
114 process, so we are not out of work yet. We even managed to
115 fix/improve a slightly worn lathe, and experiment with running a
116 mechanical clock using G-code.</p>
117
118 <p>The evening barbeque worked well both on Saturday and Sunday. It
119 is quite fun to light up a charcoal grill using compressed air. Sadly
120 the weather was not the best, so we stayed indoors most of the
121 time.</p>
122
123 <p>This gathering was made possible partly with sponsoring from both
124 <a href="https://www.redpill-linpro.com/">Redpill Linpro</a>,
125 <a href="https://debian.org/">Debian</a> and
126 <a href="https://nuugfoundation.no/">NUUG Foundation</a>, and we are
127 most grateful for the support. I would also like to thank the local
128 school for lending us some furniture, and of course the rest of the
129 members of the organizers team, Asle and Bosse, for their countless
130 contributions. The gathering was such success that we want to do it
131 again next year.</p>
132
133 <p>We plan to organize the next Norwegian LinuxCNC developer gathering
134 at the end of June next year, the weekend Friday 27th to Sunday 29th
135 of June 2025. I recommend you reserve the dates on your calendar
136 today. Other related communities are also welcome to join in, for
137 example those working on systems like FreeCAD and opencamlib, as I am
138 sure we have much in common and sharing experiences would be very
139 useful to all involved. We are of course looking for sponsors for
140 this gathering already. The total budget for this gathering was
141 around NOK 25.000 (around EUR 2.300), so our needs are quite modest.
142 Perhaps a machine or tools company would like to help out the free
143 software manufacturing community by sponsoring food, lodging and
144 transport for such gathering?</p>
145 </div>
146 <div class="tags">
147
148
149 Tags: <a href="https://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="https://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="https://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>.
150
151
152 </div>
153 </div>
154 <div class="padding"></div>
155
156 <div class="entry">
157 <div class="title"><a href="https://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>
158 <div class="date"> 4th June 2024</div>
159 <div class="body"><img align="center" src="https://people.skolelinux.org/pere/blog/images/2024-06-04-bok-elsa-laula.svg" width="20%" align="center" border="1"></a>
160
161 <p>Da jeg i høst hørte jeg et innslag på
162 <a href="https://radiorakel.no/">radiOrakel</a> om en inspirerende dame
163 som levde for over hundre år siden, fikk jeg en vill ide. Elsa Laula
164 var en svensk samisk dame som ikke bare fikk utdannelsen finansiert av
165 den danske dronningen, men som gjorde så god jobb med å inspirere og
166 organisere den samiske befolkningen at det visstnok ble forslått i
167 Sverige å straffeforfølge henne for oppvigleri før hun flyttet fra
168 Sverige til Norge. Radiopraterne fortalte videre at da Elsa Laula ga
169 ut en pamflett for å inspirere samene til samling var dette den
170 første bok gitt ut av en samisk dame noensinne. Jeg fikk høre at
171 denne korte teksten kun fantes på originalspråket svensk under
172 tittelen «Inför lif eller död» og aldri var oversatt til norsk. Da
173 tenkte jeg, der jeg satt i bilen, at en norsk utgave kan vel jeg
174 fikse. Jeg har jo fått oversatt endel bøker, og en liten pamflett på
175 noen få sider burde jo være grei skuring.</p>
176
177 <p>Den imponerende Elsa Laula, som senere la til etternavnet Renberg, har
178 blant annet fått dokumentaren
179 «<a href="https://www.nrk.no/video/elsa-laula-renberg-kvinnen-som-samlet-sapmi_SAPP67002117">Elsa
180 Laula Renberg, kvinnen som samlet Sápmi</a>» (2017) av Per Kristian
181 Olsen på NRK, NRK-artikkelen
182 «<a href="https://www.nrk.no/kultur/xl/et-liv-i-kamp-for-samefolkets-rettigheter-1.13351401">Samenes
183 Jeanne d’Arc</a>» av Karen Brodshaug Sveen (2017), oppgaven
184 «<a href="https://nordligefolk.no/wp-content/uploads/2020/03/Elsa-Laulas-Info%CC%88r-Lif-och-Do%CC%88d.pdf">Elsa
185 Laulas Innför lif och död – sanningsord i de lappska
186 förhållandena</a>» av Edel Olsen, biografien
187 «<a href="https://www.siribrochjohansen.no/biografien-om-elsa-laula-renberg/">Elsa
188 Laula Renberg - Historien om samefolkets store Minerva</a>» (2015) av
189 Siri Broch Johansen og radiOrakel-podkasten
190 <a href="https://radiorakel.no/podcast/revolusjonen-har-et-kvinnelig-ansikt-elsa-laula/">Revolusjonen
191 har et kvinnelig ansikt – Elsa Laula</a>, for å nevne de jeg har
192 finnet uten å lete spesielt hardt. En virkelig spennende dame, som i
193 tillegg til å inspirere til opprettelsen av samiske organisasjoner,
194 har inspirert til opprettelsen av Sametinget, og født seks barn der
195 fire vokste opp.</p>
196
197 <p>I dag er jeg veldig glad for å kunne annonsere at
198 <a href="http://www.hungry.com/~pere/publisher/#infoerlifellerdoed2024">bokmålsoversettelsen
199 er klar og tilgjengelig</a> for både bestilling på papir og
200 epub-utgave fra lulu.com, samt som nettside. Den kringkastede
201 bokinformasjonen ser slik ut:</p>
202
203 <blockquote>
204
205 <p>Den 27 år gamle sørsamiske kvinnen Elsa Laula ga i august 1904 ut
206 en pamflett i Stockholm. Opplaget var på 6000, finansiert av
207 Stockholmsredaktøren Gustav Hedenström, som også bidro i stiftelsen av
208 Lapparnes Centralforbund. Dette kampskriftet var den første boken gitt
209 ut av en samisk kvinne, og hadde som mål å inspirere til opprettelsen
210 av samiske foreninger over hele landet, samt skape blest om
211 sentralforbundet. Pamfletten er et politisk manifest som fortsatt
212 inspirerer i dag.</p>
213
214 <p>Denne pamfletten er nå for første gang tilgjengelig på bokmål,
215 sammen med en nyutgivelse av originalteksten på svensk.</p>
216
217 </blockquote>
218
219 <p>Oversettelsen hadde ikke vært mulig uten gode hjelpere. En virkelig
220 stor innsats både i korrekturarbeidet og utforskning av arkaiske
221 svenske ord, står Axel Rosén bak. I tillegg har jeg fått innspill fra
222 Edel May Karlsen og flere andre både på språkføring og historisk
223 bakgrunn for å forstå teksten.</p>
224
225 <p>En kuriositet som jeg oppdaget i arbeidet med oversettelsen er at
226 det ikke stemmer at denne boken ikke var oversatt til noen andre
227 språk. Anna Wuolab oversatte den til nordsamisk i 2017 i en utgave
228 gitt ut av samisk skribent- och författarförening (Bágu čálliid
229 searvi) under tittelen «Eallit vai jápmit? : duohtavuođasánit sámi
230 diliid birra = Inför lif eller död? : sanningsord i de lappska
231 förhållandena». Papirutgaven er så vidt jeg kan forstå utsolgt fra
232 forlaget og jeg har ikke klart å finne informasjonsside om boken på
233 Internett. Mulig den er mulig å få tak i som ebok, hvis en skal tro
234 <a href="https://search.worldcat.org/title/1405213087">oppføring i
235 worldcat</a>.</p>
236
237 <p>Oversetterrammeverket jeg har satt opp for å gjennomføre dette
238 oversettelsesprosjektet håndterer flere språk. Jeg er igang med
239 engelsk utgave, og er åpen for å også gi ut andre oversettelser hvis
240 noen er interessert i å gjøre jobben. Det hadde vært ekstra moro å gi
241 den ut på sørsamisk, det samiske språket i regionen der Elsa Laula kom
242 fra. Der er jeg som vanlig avhengig av frivillige som er også
243 interessert i å gjøre dette på dugnad.</p>
244
245 <p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
246 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
247 til min adresse
248 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>. Merk,
249 betaling med bitcoin er ikke anonymt. :)</p>
250 </div>
251 <div class="tags">
252
253
254 Tags: <a href="https://www.hungry.com/~pere/blog/tags/docbook">docbook</a>, <a href="https://www.hungry.com/~pere/blog/tags/norsk">norsk</a>.
255
256
257 </div>
258 </div>
259 <div class="padding"></div>
260
261 <div class="entry">
262 <div class="title"><a href="https://www.hungry.com/~pere/blog/The_2024_LinuxCNC_Norwegian_developer_gathering.html">The 2024 LinuxCNC Norwegian developer gathering</a></div>
263 <div class="date">31st May 2024</div>
264 <div class="body"><p><a href="https://linuxcnc.org/">The LinuxCNC project</a> is still
265 going strong. And I believe this great software system for numerical control of
266 machines such as milling machines, lathes, plasma cutters, routers,
267 cutting machines, robots and hexapods, would do even better with more
268 in-person developer gatherings, so we plan to organise such gathering
269 this summer too.</p>
270
271 <p>The Norwegian LinuxCNC developer gathering take place the weekend
272 Friday July 5th to 7th this year, and is open for everyone interested
273 in contributing to LinuxCNC and free software manufacturing. Up to
274 date information about the gathering can be found in
275 <a href="https://sourceforge.net/p/emc/mailman/emc-developers/thread/123eaae0-f3b9-4170-a251-b7d608f1e974%40bofh.no/">the
276 developer mailing list thread</a> where the gathering was announced.
277 Thanks to the good people at
278
279 <a href="https://www.debian.org/">Debian</a> as well as leftover money
280 from last years gathering from
281 <a href="https://www.redpill-linpro.com/">Redpill-Linpro</a> and
282 <a href="https://www.nuugfoundation.no/no/">NUUG Foundation</a>, we
283 have enough sponsor funds to pay for food, and probably also shelter
284 for the people traveling from afar to join us. If you would like to
285 join the gathering, get in touch and add your details on
286 <a href="https://pad.efn.no/p/linuxcnc-2024-norway">the pad</a>.</p>
287
288 <p>As usual, if you use Bitcoin and want to show your support of my
289 activities, please send Bitcoin donations to my address
290 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
291 </div>
292 <div class="tags">
293
294
295 Tags: <a href="https://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="https://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="https://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc</a>.
296
297
298 </div>
299 </div>
300 <div class="padding"></div>
301
302 <div class="entry">
303 <div class="title"><a href="https://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>
304 <div class="date">25th April 2024</div>
305 <div class="body"><p>Nine days ago, I started migrating orphaned Debian packages with no
306 version control system listed in debian/control of the source to git.
307 At the time there were 438 such packages. Now there are 391,
308 according to the UDD. In reality it is slightly less, as there is a
309 delay between uploads and UDD updates. In the nine days since, I have
310 thus been able to work my way through ten percent of the packages. I
311 am starting to run out of steam, and hope someone else will also help
312 brushing some dust of these packages. Here is a recipe how to do it.
313
314 I start by picking a random package by querying the UDD for a list of
315 10 random packages from the set of remaining packages:
316
317 <blockquote><pre>
318 PGPASSWORD="udd-mirror" psql --port=5432 --host=udd-mirror.debian.net \
319 --username=udd-mirror udd -c "select source from sources \
320 where release = 'sid' and (vcs_url ilike '%anonscm.debian.org%' \
321 OR vcs_browser ilike '%anonscm.debian.org%' or vcs_url IS NULL \
322 OR vcs_browser IS NULL) AND maintainer ilike '%packages@qa.debian.org%' \
323 order by random() limit 10;"
324 </pre></blockquote>
325
326 <p>Next, I visit http://salsa.debian.org/debian and search for the
327 package name, to ensure no git repository already exist. If it does,
328 I clone it and try to get it to an uploadable state, and add the Vcs-*
329 entries in d/control to make the repository more widely known. These
330 packages are a minority, so I will not cover that use case here.</p>
331
332 <p>For packages without an existing git repository, I run the
333 following script <tt>debian-snap-to-salsa</tt> to prepare a git
334 repository with the existing packaging.</p>
335
336 <blockquote><pre>
337 #!/bin/sh
338 #
339 # See also https://bugs.debian.org/804722#31
340
341 set -e
342
343 # Move to this Standards-Version.
344 SV_LATEST=4.7.0
345
346 PKG="$1"
347
348 if [ -z "$PKG" ]; then
349 echo "usage: $0 <pkgname>"
350 exit 1
351 fi
352
353 if [ -e "${PKG}-salsa" ]; then
354 echo "error: ${PKG}-salsa already exist, aborting."
355 exit 1
356 fi
357
358 if [ -z "ALLOWFAILURE" ] ; then
359 ALLOWFAILURE=false
360 fi
361
362 # Fetch every snapshotted source package. Manually loop until all
363 # transfers succeed, as 'gbp import-dscs --debsnap' do not fail on
364 # download failures.
365 until debsnap --force -v $PKG || $ALLOWFAILURE ; do sleep 1; done
366 mkdir ${PKG}-salsa; cd ${PKG}-salsa
367 git init
368
369 # Specify branches to override any debian/gbp.conf file present in the
370 # source package.
371 gbp import-dscs --debian-branch=master --upstream-branch=upstream \
372 --pristine-tar ../source-$PKG/*.dsc
373
374 # Add Vcs pointing to Salsa Debian project (must be manually created
375 # and pushed to).
376 if ! grep -q ^Vcs- debian/control ; then
377 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
378 git commit -m "Updated vcs in d/control to Salsa." debian/control
379 fi
380
381 # Tell gbp to enforce the use of pristine-tar.
382 inifile +inifile debian/gbp.conf +create +section DEFAULT +key pristine-tar +value True
383 git add debian/gbp.conf
384 git commit -m "Added d/gbp.conf to enforce the use of pristine-tar." debian/gbp.conf
385
386 # Update to latest Standards-Version.
387 SV="$(grep ^Standards-Version: debian/control|awk '{print $2}')"
388 if [ $SV_LATEST != $SV ]; then
389 sed -i "s/\(Standards-Version: \)\(.*\)/\1$SV_LATEST/" debian/control
390 git commit -m "Updated Standards-Version from $SV to $SV_LATEST." debian/control
391 fi
392
393 if grep -q pkg-config debian/control; then
394 sed -i s/pkg-config/pkgconf/ debian/control
395 git commit -m "Replaced obsolete pkg-config build dependency with pkgconf." debian/control
396 fi
397
398 if grep -q libncurses5-dev debian/control; then
399 sed -i s/libncurses5-dev/libncurses-dev/ debian/control
400 git commit -m "Replaced obsolete libncurses5-dev build dependency with libncurses-dev." debian/control
401 fi
402 </pre></blockquote>
403
404 Some times the debsnap script fail to download some of the versions.
405 In those cases I investigate, and if I decide the failing versions
406 will not be missed, I call it using ALLOWFAILURE=true to ignore the
407 problem and create the git repository anyway.</p>
408
409 <p>With the git repository in place, I do a test build (gbp
410 buildpackage) to ensure the build is actually working. If it does not
411 I pick a different package, or if the build failure is trivial to fix,
412 I fix it before continuing. At this stage I revisit
413 http://salsa.debian.org/debian and create the project under this group
414 for the package. I then follow the instructions to publish the local
415 git repository. Here is from a recent example:</p>
416
417 <blockquote><pre>
418 git remote add origin git@salsa.debian.org:debian/perl-byacc.git
419 git push --set-upstream origin master upstream pristine-tar
420 git push --tags
421 </pre></blockquote>
422
423 <p>With a working build, I have a look at the build rules if I want to
424 remove some more dust. I normally try to move to debhelper compat
425 level 13, which involves removing debian/compat and modifying
426 debian/control to build depend on debhelper-compat (=13). I also test
427 with 'Rules-Requires-Root: no' in debian/control and verify in
428 debian/rules that hardening is enabled, and include all of these if
429 the package still build. If it fail to build with level 13, I try
430 with 12, 11, 10 and so on until I find a level where it build, as I do
431 not want to spend a lot of time fixing build issues.</p>
432
433 <p>Some times, when I feel inspired, I make sure debian/copyright is
434 converted to the machine readable format, often by starting with
435 'debhelper -cc' and then cleaning up the autogenerated content until
436 it matches realities. If I feel like it, I might also clean up
437 non-dh-based debian/rules files to use the short style dh build
438 rules.</p>
439
440 <p>Once I have removed all the dust I care to process for the package,
441 I run 'gbp dch' to generate a debian/changelog entry based on the
442 commits done so far, run 'dch -r' to switch from 'UNRELEASED' to
443 'unstable' and get an editor to make sure the 'QA upload' marker is in
444 place and that all long commit descriptions are wrapped into sensible
445 lengths, run 'debcommit --release -a' to commit and tag the new
446 debian/changelog entry, run 'debuild -S' to build a source only
447 package, and 'dput ../perl-byacc_2.0-10_source.changes' to do the
448 upload. During the entire process, and many times per step, I run
449 'debuild' to verify the changes done still work. I also some times
450 verify the set of built files using 'find debian' to see if I can spot
451 any problems (like no file in usr/bin any more or empty package). I
452 also try to fix all lintian issues reported at the end of each
453 'debuild' run.</p>
454
455 <p>If I find Debian specific patches, I try to ensure their metadata
456 is fairly up to date and some times I even try to reach out to
457 upstream, to make the upstream project aware of the patches. Most of
458 my emails bounce, so the success rate is low. For projects with no
459 Homepage entry in debian/control I try to track down one, and for
460 packages with no debian/watch file I try to create one. But at least
461 for some of the packages I have been unable to find a functioning
462 upstream, and must skip both of these.</p>
463
464 <p>If I could handle ten percent in nine days, twenty people could
465 complete the rest in less then five days. I use approximately twenty
466 minutes per package, when I have twenty minutes spare time to spend.
467 Perhaps you got twenty minutes to spare too?</p>
468
469 <p>As usual, if you use Bitcoin and want to show your support of my
470 activities, please send Bitcoin donations to my address
471 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
472
473 <p><strong>Update 2024-05-04:</strong> There is
474 <a href="https://people.skolelinux.org/pere/blog/images/2024-05-04-debian-snap-to-salsa.sh">an
475 updated edition of my migration script</a>, last updated
476 2024-05-04.</p>
477 </div>
478 <div class="tags">
479
480
481 Tags: <a href="https://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="https://www.hungry.com/~pere/blog/tags/english">english</a>.
482
483
484 </div>
485 </div>
486 <div class="padding"></div>
487
488 <div class="entry">
489 <div class="title"><a href="https://www.hungry.com/~pere/blog/RAID_status_from_LSI_Megaraid_controllers_in_Debian.html">RAID status from LSI Megaraid controllers in Debian</a></div>
490 <div class="date">17th April 2024</div>
491 <div class="body"><p>I am happy to report that
492 <a href="https://github.com/namiltd/megactl">the megactl package</a>,
493 useful to fetch RAID status when using the LSI Megaraid controller,
494 now is available in Debian. It passed NEW a few days ago, and is now
495 <a href="https://tracker.debian.org/pkg/megactl">available in
496 unstable</a>, and probably showing up in testing in a weeks time. The
497 new version should provide Appstream hardware mapping and should
498 integrate nicely with isenkram.</p>
499
500 <p>As usual, if you use Bitcoin and want to show your support of my
501 activities, please send Bitcoin donations to my address
502 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
503
504 </div>
505 <div class="tags">
506
507
508 Tags: <a href="https://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="https://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>, <a href="https://www.hungry.com/~pere/blog/tags/raid">raid</a>.
509
510
511 </div>
512 </div>
513 <div class="padding"></div>
514
515 <div class="entry">
516 <div class="title"><a href="https://www.hungry.com/~pere/blog/Time_to_move_orphaned_Debian_packages_to_git.html">Time to move orphaned Debian packages to git</a></div>
517 <div class="date">14th April 2024</div>
518 <div class="body"><p>There are several packages in Debian without a associated git
519 repository with the packaging history. This is unfortunate and it
520 would be nice if more of these would do so. Quote a lot of these are
521 without a maintainer, ie listed as maintained by the
522 '<a href="https://qa.debian.org/developer.php?email=packages%40qa.debian.org">Debian
523 QA Group</a>' place holder. In fact, 438 packages have this property
524 according to UDD (<tt>SELECT source FROM sources WHERE release = 'sid'
525 AND (vcs_url ilike '%anonscm.debian.org%' OR vcs_browser ilike
526 '%anonscm.debian.org%' or vcs_url IS NULL OR vcs_browser IS NULL) AND
527 maintainer ilike '%packages@qa.debian.org%';</tt>). Such packages can
528 be updated without much coordination by any Debian developer, as they
529 are considered orphaned.</p>
530
531 <p>To try to improve the situation and reduce the number of packages
532 without associated git repository, I started a few days ago to search
533 out candiates and provide them with a git repository under the
534 'debian' collaborative Salsa project. I started with the packages
535 pointing to obsolete Alioth git repositories, and am now working my
536 way across the ones completely without git references. In addition to
537 updating the Vcs-* debian/control fields, I try to update
538 Standards-Version, debhelper compat level, simplify d/rules, switch to
539 Rules-Requires-Root: no and fix lintian issues reported. I only
540 implement those that are trivial to fix, to avoid spending too much
541 time on each orphaned package. So far my experience is that it take
542 aproximately 20 minutes to convert a package without any git
543 references, and a lot more for packages with existing git repositories
544 incompatible with git-buildpackages.</p>
545
546 <p>So far I have converted 10 packages, and I will keep going until I
547 run out of steam. As should be clear from the numbers, there is
548 enough packages remaining for more people to do the same without
549 stepping on each others toes. I find it useful to start by searching
550 for a git repo already on salsa, as I find that some times a git repo
551 has already been created, but no new version is uploaded to Debian
552 yet. In those cases I start with the existing git repository. I
553 convert to the git-buildpackage+pristine-tar workflow, and ensure a
554 debian/gbp.conf file with "pristine-tar=True" is added early, to avoid
555 uploading a orig.tar.gz with the wrong checksum by mistake. Did that
556 three times in the begin before I remembered my mistake.</p>
557
558 <p>So, if you are a Debian Developer and got some spare time, perhaps
559 considering migrating some orphaned packages to git?</p>
560
561 <p>As usual, if you use Bitcoin and want to show your support of my
562 activities, please send Bitcoin donations to my address
563 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
564 </div>
565 <div class="tags">
566
567
568 Tags: <a href="https://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="https://www.hungry.com/~pere/blog/tags/english">english</a>.
569
570
571 </div>
572 </div>
573 <div class="padding"></div>
574
575 <div class="entry">
576 <div class="title"><a href="https://www.hungry.com/~pere/blog/Plain_text_accounting_file_from_your_bitcoin_transactions.html">Plain text accounting file from your bitcoin transactions</a></div>
577 <div class="date"> 7th March 2024</div>
578 <div class="body"><p>A while back I wrote a small script to extract the Bitcoin
579 transactions in a wallet in the
580 <ahref="https://plaintextaccounting.org/">ledger plain text accounting
581 format</a>. The last few days I spent some time to get it working
582 better with more special cases. In case it can be useful for others,
583 here is a copy:</p>
584
585 <p><blockquote><pre>
586 #!/usr/bin/python3
587 # -*- coding: utf-8 -*-
588 # Copyright (c) 2023-2024 Petter Reinholdtsen
589
590 from decimal import Decimal
591 import json
592 import subprocess
593 import time
594
595 import numpy
596
597 def format_float(num):
598 return numpy.format_float_positional(num, trim='-')
599
600 accounts = {
601 u'amount' : 'Assets:BTC:main',
602 }
603
604 addresses = {
605 '<some address>' : 'Assets:bankkonto',
606 '<some address>' : 'Assets:bankkonto',
607 }
608
609 def exec_json(cmd):
610 proc = subprocess.Popen(cmd,stdout=subprocess.PIPE)
611 j = json.loads(proc.communicate()[0], parse_float=Decimal)
612 return j
613
614 def list_txs():
615 # get all transactions for all accounts / addresses
616 c = 0
617 txs = []
618 txidfee = {}
619 limit=100000
620 cmd = ['bitcoin-cli', 'listtransactions', '*', str(limit)]
621 if True:
622 txs.extend(exec_json(cmd))
623 else:
624 # Useful for debugging
625 with open('transactions.json') as f:
626 txs.extend(json.load(f, parse_float=Decimal))
627 #print txs
628 for tx in sorted(txs, key=lambda a: a['time']):
629 # print tx['category']
630 if 'abandoned' in tx and tx['abandoned']:
631 continue
632 if 'confirmations' in tx and 0 >= tx['confirmations']:
633 continue
634 when = time.strftime('%Y-%m-%d %H:%M', time.localtime(tx['time']))
635 if 'message' in tx:
636 desc = tx['message']
637 elif 'comment' in tx:
638 desc = tx['comment']
639 elif 'label' in tx:
640 desc = tx['label']
641 else:
642 desc = 'n/a'
643 print("%s %s" % (when, desc))
644 if 'address' in tx:
645 print(" ; to bitcoin address %s" % tx['address'])
646 else:
647 print(" ; missing address in transaction, txid=%s" % tx['txid'])
648 print(f" ; amount={tx['amount']}")
649 if 'fee'in tx:
650 print(f" ; fee={tx['fee']}")
651 for f in accounts.keys():
652 if f in tx and Decimal(0) != tx[f]:
653 amount = tx[f]
654 print(" %-20s %s BTC" % (accounts[f], format_float(amount)))
655 if 'fee' in tx and Decimal(0) != tx['fee']:
656 # Make sure to list fee used in several transactions only once.
657 if 'fee' in tx and tx['txid'] in txidfee \
658 and tx['fee'] == txidfee[tx['txid']]:
659 True
660 else:
661 fee = tx['fee']
662 print(" %-20s %s BTC" % (accounts['amount'], format_float(fee)))
663 print(" %-20s %s BTC" % ('Expences:BTC-fee', format_float(-fee)))
664 txidfee[tx['txid']] = tx['fee']
665
666 if 'address' in tx and tx['address'] in addresses:
667 print(" %s" % addresses[tx['address']])
668 else:
669 if 'generate' == tx['category']:
670 print(" Income:BTC-mining")
671 else:
672 if amount < Decimal(0):
673 print(f" Assets:unknown:sent:update-script-addr-{tx['address']}")
674 else:
675 print(f" Assets:unknown:received:update-script-addr-{tx['address']}")
676
677 print()
678 c = c + 1
679 print("# Found %d transactions" % c)
680 if limit == c:
681 print(f"# Warning: Limit {limit} reached, consider increasing limit.")
682
683 def main():
684 list_txs()
685
686 main()
687 </pre></blockquote></p>
688
689 <p>It is more of a proof of concept, and I do not expect it to handle
690 all edge cases, but it worked for me, and perhaps you can find it
691 useful too.</p>
692
693 <p>To get a more interesting result, it is useful to map accounts sent
694 to or received from to accounting accounts, using the
695 <tt>addresses</tt> hash. As these will be very context dependent, I
696 leave out my list to allow each user to fill out their own list of
697 accounts. Out of the box, 'ledger reg BTC:main' should be able to
698 show the amount of BTCs present in the wallet at any given time in the
699 past. For other and more valuable analysis, a account plan need to be
700 set up in the <tt>addresses</tt> hash. Here is an example
701 transaction:</p>
702
703 <p><blockquote><pre>
704 2024-03-07 17:00 Donated to good cause
705 Assets:BTC:main -0.1 BTC
706 Assets:BTC:main -0.00001 BTC
707 Expences:BTC-fee 0.00001 BTC
708 Expences:donations 0.1 BTC
709 </pre></blockquote></p>
710
711 <p>It need a running Bitcoin Core daemon running, as it connect to it
712 using <tt>bitcoin-cli listtransactions * 100000</tt> to extract the
713 transactions listed in the Wallet.</p>
714
715 <p>As usual, if you use Bitcoin and want to show your support of my
716 activities, please send Bitcoin donations to my address
717 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
718 </div>
719 <div class="tags">
720
721
722 Tags: <a href="https://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin</a>, <a href="https://www.hungry.com/~pere/blog/tags/english">english</a>.
723
724
725 </div>
726 </div>
727 <div class="padding"></div>
728
729 <div class="entry">
730 <div class="title"><a href="https://www.hungry.com/~pere/blog/RAID_status_from_LSI_Megaraid_controllers_using_free_software.html">RAID status from LSI Megaraid controllers using free software</a></div>
731 <div class="date"> 3rd March 2024</div>
732 <div class="body"><p>The last few days I have revisited RAID setup using the LSI
733 Megaraid controller. These are a family of controllers called PERC by
734 Dell, and is present in several old PowerEdge servers, and I recently
735 got my hands on one of these. I had forgotten how to handle this RAID
736 controller in Debian, so I had to take a peek in the
737 <a href="https://wiki.debian.org/LinuxRaidForAdmins">Debian wiki page
738 "Linux and Hardware RAID: an administrator's summary"</a> to remember
739 what kind of software is available to configure and monitor the disks
740 and controller. I prefer Free Software alternatives to proprietary
741 tools, as the later tend to fall into disarray once the manufacturer
742 loose interest, and often do not work with newer Linux Distributions.
743 Sadly there is no free software tool to configure the RAID setup, only
744 to monitor it. RAID can provide improved reliability and resilience in
745 a storage solution, but only if it is being regularly checked and any
746 broken disks are being replaced in time. I thus want to ensure some
747 automatic monitoring is available.</p>
748
749 <p>In the discovery process, I came across a old free software tool to
750 monitor PERC2, PERC3, PERC4 and PERC5 controllers, which to my
751 surprise is not present in debian. To help change that I created a
752 <a href="https://bugs.debian.org/1065322">request for packaging of the
753 megactl package</a>, and tried to track down a usable version.
754 <a href="https://sourceforge.net/p/megactl/">The original project
755 site</a> is on Sourceforge, but as far as I can tell that project has
756 been dead for more than 15 years. I managed to find a
757 <a href="https://github.com/hmage/megactl">more recent fork on
758 github</a> from user hmage, but it is unclear to me if this is still
759 being maintained. It has not seen much improvements since 2016. A
760 <a href="https://github.com/namiltd/megactl">more up to date
761 edition</a> is a git fork from the original github fork by user
762 namiltd, and this newer fork seem a lot more promising. The owner of
763 this github repository has replied to change proposals within hours,
764 and had already added some improvements and support for more hardware.
765 Sadly he is reluctant to commit to maintaining the tool and stated in
766 <a href="https://github.com/namiltd/megactl/pull/1">my first pull
767 request</A> that he think a new release should be made based on the
768 git repository owned by hmage. I perfectly understand this
769 reluctance, as I feel the same about maintaining yet another package
770 in Debian when I barely have time to take care of the ones I already
771 maintain, but do not really have high hopes that hmage will have time
772 to spend on it and hope namiltd will change his mind.</p>
773
774 <p>In any case, I created
775 <a href="https://salsa.debian.org/debian/megactl">a draft package</a>
776 based on the namiltd edition and put it under the debian group on
777 salsa.debian.org. If you own a Dell PowerEdge server with one of the
778 PERC controllers, or any other RAID controller using the megaraid or
779 megaraid_sas Linux kernel modules, you might want to check it out. If
780 enough people are interested, perhaps the package will make it into
781 the Debian archive.</p>
782
783 <p>There are two tools provided, megactl for the megaraid Linux kernel
784 module, and megasasctl for the megaraid_sas Linux kernel module. The
785 simple output from the command on one of my machines look like this
786 (yes, I know some of the disks have problems. :).</p>
787
788 <pre>
789 # megasasctl
790 a0 PERC H730 Mini encl:1 ldrv:2 batt:good
791 a0d0 558GiB RAID 1 1x2 optimal
792 a0d1 3067GiB RAID 0 1x11 optimal
793 a0e32s0 558GiB a0d0 online errs: media:0 other:19
794 a0e32s1 279GiB a0d1 online
795 a0e32s2 279GiB a0d1 online
796 a0e32s3 279GiB a0d1 online
797 a0e32s4 279GiB a0d1 online
798 a0e32s5 279GiB a0d1 online
799 a0e32s6 279GiB a0d1 online
800 a0e32s8 558GiB a0d0 online errs: media:0 other:17
801 a0e32s9 279GiB a0d1 online
802 a0e32s10 279GiB a0d1 online
803 a0e32s11 279GiB a0d1 online
804 a0e32s12 279GiB a0d1 online
805 a0e32s13 279GiB a0d1 online
806
807 #
808 </pre>
809
810 <p>In addition to displaying a simple status report, it can also test
811 individual drives and print the various event logs. Perhaps you too
812 find it useful?</p>
813
814 <p>In the packaging process I provided some patches upstream to
815 improve installation and ensure
816 <ahref="https://github.com/namiltd/megactl/pull/2">a Appstream
817 metainfo file is provided</a> to list all supported HW, to allow
818 <a href="https://tracker.debian.org/isenkram">isenkram</a> to propose
819 the package on all servers with a relevant PCI card.</p>
820
821 <p>As usual, if you use Bitcoin and want to show your support of my
822 activities, please send Bitcoin donations to my address
823 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
824
825 </div>
826 <div class="tags">
827
828
829 Tags: <a href="https://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="https://www.hungry.com/~pere/blog/tags/isenkram">isenkram</a>, <a href="https://www.hungry.com/~pere/blog/tags/raid">raid</a>.
830
831
832 </div>
833 </div>
834 <div class="padding"></div>
835
836 <div class="entry">
837 <div class="title"><a href="https://www.hungry.com/~pere/blog/Frokostseminar_om_Noark_5_i_Oslo_tirsdag_2024_03_12.html">Frokostseminar om Noark 5 i Oslo tirsdag 2024-03-12</a></div>
838 <div class="date">27th February 2024</div>
839 <div class="body"><p>Nikita-prosjektet, der jeg er involvert, inviterer i samarbeid med
840 Oslo Byarkiv, forskningsgruppen METAINFO og foreningen NUUG, til et
841 frokostseminar om Noark 5 og Noark 5 Tjenestegrensesnitt tirsdag
842 2024-03-12. Seminaret finner sted ved Oslo byarkiv. Vi håper å få
843 til videostrømming via Internett av presentasjoner og paneldiskusjon.
844 Oppdatert program og lenker til påmeldingsskjema er
845 <a href="https://noark.codeberg.page/noark5-seminars/2023-03-12-noark-workshop.html">tilgjengelig
846 fra Nikita-prosjektet</a>. Arrangementet er gratis.
847
848 <p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
849 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
850 til min adresse
851 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>. Merk,
852 betaling med bitcoin er ikke anonymt. :)</p>
853 </div>
854 <div class="tags">
855
856
857 Tags: <a href="https://www.hungry.com/~pere/blog/tags/noark5">noark5</a>, <a href="https://www.hungry.com/~pere/blog/tags/norsk">norsk</a>, <a href="https://www.hungry.com/~pere/blog/tags/nuug">nuug</a>, <a href="https://www.hungry.com/~pere/blog/tags/offentlig innsyn">offentlig innsyn</a>, <a href="https://www.hungry.com/~pere/blog/tags/standard">standard</a>.
858
859
860 </div>
861 </div>
862 <div class="padding"></div>
863
864 <p style="text-align: right;"><a href="index.rss"><img src="https://www.hungry.com/~pere/blog/xml.gif" alt="RSS feed" width="36" height="14" /></a></p>
865 <div id="sidebar">
866
867
868
869 <h2>Archive</h2>
870 <ul>
871
872 <li>2024
873 <ul>
874
875 <li><a href="https://www.hungry.com/~pere/blog/archive/2024/01/">January (1)</a></li>
876
877 <li><a href="https://www.hungry.com/~pere/blog/archive/2024/02/">February (1)</a></li>
878
879 <li><a href="https://www.hungry.com/~pere/blog/archive/2024/03/">March (2)</a></li>
880
881 <li><a href="https://www.hungry.com/~pere/blog/archive/2024/04/">April (3)</a></li>
882
883 <li><a href="https://www.hungry.com/~pere/blog/archive/2024/05/">May (1)</a></li>
884
885 <li><a href="https://www.hungry.com/~pere/blog/archive/2024/06/">June (1)</a></li>
886
887 <li><a href="https://www.hungry.com/~pere/blog/archive/2024/07/">July (2)</a></li>
888
889 </ul></li>
890
891 <li>2023
892 <ul>
893
894 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/01/">January (3)</a></li>
895
896 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/02/">February (1)</a></li>
897
898 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/04/">April (2)</a></li>
899
900 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/05/">May (3)</a></li>
901
902 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/06/">June (1)</a></li>
903
904 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/08/">August (1)</a></li>
905
906 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/09/">September (1)</a></li>
907
908 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/10/">October (1)</a></li>
909
910 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/11/">November (4)</a></li>
911
912 <li><a href="https://www.hungry.com/~pere/blog/archive/2023/12/">December (1)</a></li>
913
914 </ul></li>
915
916 <li>2022
917 <ul>
918
919 <li><a href="https://www.hungry.com/~pere/blog/archive/2022/02/">February (1)</a></li>
920
921 <li><a href="https://www.hungry.com/~pere/blog/archive/2022/03/">March (3)</a></li>
922
923 <li><a href="https://www.hungry.com/~pere/blog/archive/2022/04/">April (2)</a></li>
924
925 <li><a href="https://www.hungry.com/~pere/blog/archive/2022/06/">June (2)</a></li>
926
927 <li><a href="https://www.hungry.com/~pere/blog/archive/2022/07/">July (1)</a></li>
928
929 <li><a href="https://www.hungry.com/~pere/blog/archive/2022/09/">September (1)</a></li>
930
931 <li><a href="https://www.hungry.com/~pere/blog/archive/2022/10/">October (1)</a></li>
932
933 <li><a href="https://www.hungry.com/~pere/blog/archive/2022/12/">December (1)</a></li>
934
935 </ul></li>
936
937 <li>2021
938 <ul>
939
940 <li><a href="https://www.hungry.com/~pere/blog/archive/2021/01/">January (2)</a></li>
941
942 <li><a href="https://www.hungry.com/~pere/blog/archive/2021/02/">February (1)</a></li>
943
944 <li><a href="https://www.hungry.com/~pere/blog/archive/2021/05/">May (1)</a></li>
945
946 <li><a href="https://www.hungry.com/~pere/blog/archive/2021/06/">June (1)</a></li>
947
948 <li><a href="https://www.hungry.com/~pere/blog/archive/2021/07/">July (3)</a></li>
949
950 <li><a href="https://www.hungry.com/~pere/blog/archive/2021/08/">August (1)</a></li>
951
952 <li><a href="https://www.hungry.com/~pere/blog/archive/2021/09/">September (1)</a></li>
953
954 <li><a href="https://www.hungry.com/~pere/blog/archive/2021/10/">October (1)</a></li>
955
956 <li><a href="https://www.hungry.com/~pere/blog/archive/2021/12/">December (1)</a></li>
957
958 </ul></li>
959
960 <li>2020
961 <ul>
962
963 <li><a href="https://www.hungry.com/~pere/blog/archive/2020/02/">February (2)</a></li>
964
965 <li><a href="https://www.hungry.com/~pere/blog/archive/2020/03/">March (2)</a></li>
966
967 <li><a href="https://www.hungry.com/~pere/blog/archive/2020/04/">April (2)</a></li>
968
969 <li><a href="https://www.hungry.com/~pere/blog/archive/2020/05/">May (3)</a></li>
970
971 <li><a href="https://www.hungry.com/~pere/blog/archive/2020/06/">June (2)</a></li>
972
973 <li><a href="https://www.hungry.com/~pere/blog/archive/2020/07/">July (1)</a></li>
974
975 <li><a href="https://www.hungry.com/~pere/blog/archive/2020/09/">September (1)</a></li>
976
977 <li><a href="https://www.hungry.com/~pere/blog/archive/2020/10/">October (1)</a></li>
978
979 <li><a href="https://www.hungry.com/~pere/blog/archive/2020/11/">November (1)</a></li>
980
981 </ul></li>
982
983 <li>2019
984 <ul>
985
986 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/01/">January (4)</a></li>
987
988 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/02/">February (3)</a></li>
989
990 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/03/">March (3)</a></li>
991
992 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/05/">May (2)</a></li>
993
994 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/06/">June (5)</a></li>
995
996 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/07/">July (2)</a></li>
997
998 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/08/">August (1)</a></li>
999
1000 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/09/">September (1)</a></li>
1001
1002 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/11/">November (1)</a></li>
1003
1004 <li><a href="https://www.hungry.com/~pere/blog/archive/2019/12/">December (4)</a></li>
1005
1006 </ul></li>
1007
1008 <li>2018
1009 <ul>
1010
1011 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/01/">January (1)</a></li>
1012
1013 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/02/">February (5)</a></li>
1014
1015 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/03/">March (5)</a></li>
1016
1017 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/04/">April (3)</a></li>
1018
1019 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/06/">June (2)</a></li>
1020
1021 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/07/">July (5)</a></li>
1022
1023 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/08/">August (3)</a></li>
1024
1025 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/09/">September (3)</a></li>
1026
1027 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/10/">October (5)</a></li>
1028
1029 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/11/">November (2)</a></li>
1030
1031 <li><a href="https://www.hungry.com/~pere/blog/archive/2018/12/">December (4)</a></li>
1032
1033 </ul></li>
1034
1035 <li>2017
1036 <ul>
1037
1038 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/01/">January (4)</a></li>
1039
1040 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/02/">February (3)</a></li>
1041
1042 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/03/">March (5)</a></li>
1043
1044 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/04/">April (2)</a></li>
1045
1046 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/06/">June (5)</a></li>
1047
1048 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/07/">July (1)</a></li>
1049
1050 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/08/">August (1)</a></li>
1051
1052 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/09/">September (3)</a></li>
1053
1054 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/10/">October (5)</a></li>
1055
1056 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/11/">November (3)</a></li>
1057
1058 <li><a href="https://www.hungry.com/~pere/blog/archive/2017/12/">December (4)</a></li>
1059
1060 </ul></li>
1061
1062 <li>2016
1063 <ul>
1064
1065 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/01/">January (3)</a></li>
1066
1067 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/02/">February (2)</a></li>
1068
1069 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/03/">March (3)</a></li>
1070
1071 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/04/">April (8)</a></li>
1072
1073 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/05/">May (8)</a></li>
1074
1075 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/06/">June (2)</a></li>
1076
1077 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/07/">July (2)</a></li>
1078
1079 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/08/">August (5)</a></li>
1080
1081 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/09/">September (2)</a></li>
1082
1083 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/10/">October (3)</a></li>
1084
1085 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/11/">November (8)</a></li>
1086
1087 <li><a href="https://www.hungry.com/~pere/blog/archive/2016/12/">December (5)</a></li>
1088
1089 </ul></li>
1090
1091 <li>2015
1092 <ul>
1093
1094 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/01/">January (7)</a></li>
1095
1096 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/02/">February (6)</a></li>
1097
1098 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/03/">March (1)</a></li>
1099
1100 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/04/">April (4)</a></li>
1101
1102 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/05/">May (3)</a></li>
1103
1104 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/06/">June (4)</a></li>
1105
1106 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/07/">July (6)</a></li>
1107
1108 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/08/">August (2)</a></li>
1109
1110 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/09/">September (2)</a></li>
1111
1112 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/10/">October (9)</a></li>
1113
1114 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/11/">November (6)</a></li>
1115
1116 <li><a href="https://www.hungry.com/~pere/blog/archive/2015/12/">December (3)</a></li>
1117
1118 </ul></li>
1119
1120 <li>2014
1121 <ul>
1122
1123 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/01/">January (2)</a></li>
1124
1125 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/02/">February (3)</a></li>
1126
1127 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/03/">March (8)</a></li>
1128
1129 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/04/">April (7)</a></li>
1130
1131 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/05/">May (1)</a></li>
1132
1133 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/06/">June (2)</a></li>
1134
1135 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/07/">July (2)</a></li>
1136
1137 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/08/">August (2)</a></li>
1138
1139 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/09/">September (5)</a></li>
1140
1141 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/10/">October (6)</a></li>
1142
1143 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/11/">November (3)</a></li>
1144
1145 <li><a href="https://www.hungry.com/~pere/blog/archive/2014/12/">December (5)</a></li>
1146
1147 </ul></li>
1148
1149 <li>2013
1150 <ul>
1151
1152 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/01/">January (11)</a></li>
1153
1154 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/02/">February (9)</a></li>
1155
1156 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/03/">March (9)</a></li>
1157
1158 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/04/">April (6)</a></li>
1159
1160 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/05/">May (9)</a></li>
1161
1162 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/06/">June (10)</a></li>
1163
1164 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/07/">July (7)</a></li>
1165
1166 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/08/">August (3)</a></li>
1167
1168 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/09/">September (5)</a></li>
1169
1170 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/10/">October (7)</a></li>
1171
1172 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/11/">November (9)</a></li>
1173
1174 <li><a href="https://www.hungry.com/~pere/blog/archive/2013/12/">December (3)</a></li>
1175
1176 </ul></li>
1177
1178 <li>2012
1179 <ul>
1180
1181 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/01/">January (7)</a></li>
1182
1183 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/02/">February (10)</a></li>
1184
1185 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/03/">March (17)</a></li>
1186
1187 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/04/">April (12)</a></li>
1188
1189 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/05/">May (12)</a></li>
1190
1191 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/06/">June (20)</a></li>
1192
1193 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/07/">July (17)</a></li>
1194
1195 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/08/">August (6)</a></li>
1196
1197 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/09/">September (9)</a></li>
1198
1199 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/10/">October (17)</a></li>
1200
1201 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/11/">November (10)</a></li>
1202
1203 <li><a href="https://www.hungry.com/~pere/blog/archive/2012/12/">December (7)</a></li>
1204
1205 </ul></li>
1206
1207 <li>2011
1208 <ul>
1209
1210 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/01/">January (16)</a></li>
1211
1212 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/02/">February (6)</a></li>
1213
1214 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/03/">March (6)</a></li>
1215
1216 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/04/">April (7)</a></li>
1217
1218 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/05/">May (3)</a></li>
1219
1220 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/06/">June (2)</a></li>
1221
1222 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/07/">July (7)</a></li>
1223
1224 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/08/">August (6)</a></li>
1225
1226 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/09/">September (4)</a></li>
1227
1228 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/10/">October (2)</a></li>
1229
1230 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/11/">November (3)</a></li>
1231
1232 <li><a href="https://www.hungry.com/~pere/blog/archive/2011/12/">December (1)</a></li>
1233
1234 </ul></li>
1235
1236 <li>2010
1237 <ul>
1238
1239 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/01/">January (2)</a></li>
1240
1241 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/02/">February (1)</a></li>
1242
1243 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/03/">March (3)</a></li>
1244
1245 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/04/">April (3)</a></li>
1246
1247 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/05/">May (9)</a></li>
1248
1249 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/06/">June (14)</a></li>
1250
1251 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/07/">July (12)</a></li>
1252
1253 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/08/">August (13)</a></li>
1254
1255 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/09/">September (7)</a></li>
1256
1257 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/10/">October (9)</a></li>
1258
1259 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/11/">November (13)</a></li>
1260
1261 <li><a href="https://www.hungry.com/~pere/blog/archive/2010/12/">December (12)</a></li>
1262
1263 </ul></li>
1264
1265 <li>2009
1266 <ul>
1267
1268 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/01/">January (8)</a></li>
1269
1270 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/02/">February (8)</a></li>
1271
1272 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/03/">March (12)</a></li>
1273
1274 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/04/">April (10)</a></li>
1275
1276 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/05/">May (9)</a></li>
1277
1278 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/06/">June (3)</a></li>
1279
1280 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/07/">July (4)</a></li>
1281
1282 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/08/">August (3)</a></li>
1283
1284 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/09/">September (1)</a></li>
1285
1286 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/10/">October (2)</a></li>
1287
1288 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/11/">November (3)</a></li>
1289
1290 <li><a href="https://www.hungry.com/~pere/blog/archive/2009/12/">December (3)</a></li>
1291
1292 </ul></li>
1293
1294 <li>2008
1295 <ul>
1296
1297 <li><a href="https://www.hungry.com/~pere/blog/archive/2008/11/">November (5)</a></li>
1298
1299 <li><a href="https://www.hungry.com/~pere/blog/archive/2008/12/">December (7)</a></li>
1300
1301 </ul></li>
1302
1303 </ul>
1304
1305
1306
1307 <h2>Tags</h2>
1308 <ul>
1309
1310 <li><a href="https://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer (19)</a></li>
1311
1312 <li><a href="https://www.hungry.com/~pere/blog/tags/amiga">amiga (1)</a></li>
1313
1314 <li><a href="https://www.hungry.com/~pere/blog/tags/aros">aros (1)</a></li>
1315
1316 <li><a href="https://www.hungry.com/~pere/blog/tags/bankid">bankid (4)</a></li>
1317
1318 <li><a href="https://www.hungry.com/~pere/blog/tags/betalkontant">betalkontant (9)</a></li>
1319
1320 <li><a href="https://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin (13)</a></li>
1321
1322 <li><a href="https://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem (17)</a></li>
1323
1324 <li><a href="https://www.hungry.com/~pere/blog/tags/bsa">bsa (2)</a></li>
1325
1326 <li><a href="https://www.hungry.com/~pere/blog/tags/chrpath">chrpath (3)</a></li>
1327
1328 <li><a href="https://www.hungry.com/~pere/blog/tags/debian">debian (202)</a></li>
1329
1330 <li><a href="https://www.hungry.com/~pere/blog/tags/debian edu">debian edu (159)</a></li>
1331
1332 <li><a href="https://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
1333
1334 <li><a href="https://www.hungry.com/~pere/blog/tags/digistan">digistan (11)</a></li>
1335
1336 <li><a href="https://www.hungry.com/~pere/blog/tags/dld">dld (18)</a></li>
1337
1338 <li><a href="https://www.hungry.com/~pere/blog/tags/docbook">docbook (33)</a></li>
1339
1340 <li><a href="https://www.hungry.com/~pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
1341
1342 <li><a href="https://www.hungry.com/~pere/blog/tags/english">english (464)</a></li>
1343
1344 <li><a href="https://www.hungry.com/~pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
1345
1346 <li><a href="https://www.hungry.com/~pere/blog/tags/fildeling">fildeling (14)</a></li>
1347
1348 <li><a href="https://www.hungry.com/~pere/blog/tags/freeculture">freeculture (34)</a></li>
1349
1350 <li><a href="https://www.hungry.com/~pere/blog/tags/freedombox">freedombox (9)</a></li>
1351
1352 <li><a href="https://www.hungry.com/~pere/blog/tags/frikanalen">frikanalen (20)</a></li>
1353
1354 <li><a href="https://www.hungry.com/~pere/blog/tags/h264">h264 (20)</a></li>
1355
1356 <li><a href="https://www.hungry.com/~pere/blog/tags/intervju">intervju (43)</a></li>
1357
1358 <li><a href="https://www.hungry.com/~pere/blog/tags/isenkram">isenkram (18)</a></li>
1359
1360 <li><a href="https://www.hungry.com/~pere/blog/tags/kart">kart (23)</a></li>
1361
1362 <li><a href="https://www.hungry.com/~pere/blog/tags/kodi">kodi (6)</a></li>
1363
1364 <li><a href="https://www.hungry.com/~pere/blog/tags/ldap">ldap (9)</a></li>
1365
1366 <li><a href="https://www.hungry.com/~pere/blog/tags/lego">lego (5)</a></li>
1367
1368 <li><a href="https://www.hungry.com/~pere/blog/tags/lenker">lenker (8)</a></li>
1369
1370 <li><a href="https://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc (7)</a></li>
1371
1372 <li><a href="https://www.hungry.com/~pere/blog/tags/lsdvd">lsdvd (2)</a></li>
1373
1374 <li><a href="https://www.hungry.com/~pere/blog/tags/ltsp">ltsp (1)</a></li>
1375
1376 <li><a href="https://www.hungry.com/~pere/blog/tags/madewithcc">madewithcc (3)</a></li>
1377
1378 <li><a href="https://www.hungry.com/~pere/blog/tags/mesh network">mesh network (8)</a></li>
1379
1380 <li><a href="https://www.hungry.com/~pere/blog/tags/multimedia">multimedia (46)</a></li>
1381
1382 <li><a href="https://www.hungry.com/~pere/blog/tags/nice free software">nice free software (15)</a></li>
1383
1384 <li><a href="https://www.hungry.com/~pere/blog/tags/noark5">noark5 (25)</a></li>
1385
1386 <li><a href="https://www.hungry.com/~pere/blog/tags/norsk">norsk (325)</a></li>
1387
1388 <li><a href="https://www.hungry.com/~pere/blog/tags/nuug">nuug (199)</a></li>
1389
1390 <li><a href="https://www.hungry.com/~pere/blog/tags/offentlig innsyn">offentlig innsyn (41)</a></li>
1391
1392 <li><a href="https://www.hungry.com/~pere/blog/tags/open311">open311 (2)</a></li>
1393
1394 <li><a href="https://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch (4)</a></li>
1395
1396 <li><a href="https://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett (76)</a></li>
1397
1398 <li><a href="https://www.hungry.com/~pere/blog/tags/personvern">personvern (114)</a></li>
1399
1400 <li><a href="https://www.hungry.com/~pere/blog/tags/raid">raid (4)</a></li>
1401
1402 <li><a href="https://www.hungry.com/~pere/blog/tags/reactos">reactos (1)</a></li>
1403
1404 <li><a href="https://www.hungry.com/~pere/blog/tags/reprap">reprap (11)</a></li>
1405
1406 <li><a href="https://www.hungry.com/~pere/blog/tags/rfid">rfid (3)</a></li>
1407
1408 <li><a href="https://www.hungry.com/~pere/blog/tags/robot">robot (17)</a></li>
1409
1410 <li><a href="https://www.hungry.com/~pere/blog/tags/rss">rss (1)</a></li>
1411
1412 <li><a href="https://www.hungry.com/~pere/blog/tags/ruter">ruter (7)</a></li>
1413
1414 <li><a href="https://www.hungry.com/~pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
1415
1416 <li><a href="https://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet (60)</a></li>
1417
1418 <li><a href="https://www.hungry.com/~pere/blog/tags/sitesummary">sitesummary (4)</a></li>
1419
1420 <li><a href="https://www.hungry.com/~pere/blog/tags/skepsis">skepsis (5)</a></li>
1421
1422 <li><a href="https://www.hungry.com/~pere/blog/tags/standard">standard (76)</a></li>
1423
1424 <li><a href="https://www.hungry.com/~pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
1425
1426 <li><a href="https://www.hungry.com/~pere/blog/tags/stortinget">stortinget (14)</a></li>
1427
1428 <li><a href="https://www.hungry.com/~pere/blog/tags/surveillance">surveillance (65)</a></li>
1429
1430 <li><a href="https://www.hungry.com/~pere/blog/tags/sysadmin">sysadmin (5)</a></li>
1431
1432 <li><a href="https://www.hungry.com/~pere/blog/tags/usenix">usenix (2)</a></li>
1433
1434 <li><a href="https://www.hungry.com/~pere/blog/tags/valg">valg (9)</a></li>
1435
1436 <li><a href="https://www.hungry.com/~pere/blog/tags/verkidetfri">verkidetfri (22)</a></li>
1437
1438 <li><a href="https://www.hungry.com/~pere/blog/tags/video">video (80)</a></li>
1439
1440 <li><a href="https://www.hungry.com/~pere/blog/tags/vitenskap">vitenskap (4)</a></li>
1441
1442 <li><a href="https://www.hungry.com/~pere/blog/tags/web">web (42)</a></li>
1443
1444 </ul>
1445
1446
1447 </div>
1448 <p style="text-align: right">
1449 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
1450 </p>
1451
1452 </body>
1453 </html>