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=
"https://people.skolelinux.org/pere/blog/style.css" />
8 <link rel=
"stylesheet" type=
"text/css" media=
"screen" href=
"https://people.skolelinux.org/pere/blog/vim.css" />
9 <link rel=
"alternate" title=
"RSS Feed" href=
"https://people.skolelinux.org/pere/blog/index.rss" type=
"application/rss+xml" />
14 <a href=
"https://people.skolelinux.org/pere/blog/">Petter Reinholdtsen
</a>
23 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/New_and_improved_sqlcipher_in_Debian_for_accessing_Signal_database.html">New and improved sqlcipher in Debian for accessing Signal database
</a></div>
24 <div class=
"date">12th November
2023</div>
25 <div class=
"body"><p>For a while now I wanted to have direct access to the
26 <a href=
"https://signal.org/">Signal
</a> database of messages and
27 channels of my Desktop edition of Signal. I prefer the enforced end
28 to end encryption of Signal these days for my communication with
29 friends and family, to increase the level of safety and privacy as
30 well as raising the cost of the mass surveillance government and
31 non-government entities practice these days. In August I came across
33 <a href=
"https://www.yoranbrondsema.com/post/the-guide-to-extracting-statistics-from-your-signal-conversations/">recipe
34 on how to use sqlcipher to extract statistics from the Signal
35 database
</a> explaining how to do this. Unfortunately this did not
36 work with the version of sqlcipher in Debian. The
37 <a href=
"http://tracker.debian.org/sqlcipher/">sqlcipher
</a>
38 package is a "fork" of the sqlite package with added support for
39 encrypted databases. Sadly the current Debian maintainer
40 <a href=
"https://bugs.debian.org/961598">announced more than three
41 years ago that he did not have time to maintain sqlcipher
</a>, so it
42 seemed unlikely to be upgraded by the maintainer. I was reluctant to
43 take on the job myself, as I have very limited experience maintaining
44 shared libraries in Debian. After waiting and hoping for a few
45 months, I gave up the last week, and set out to update the package. In
46 the process I orphaned it to make it more obvious for the next person
47 looking at it that the package need proper maintenance.
</p>
49 <p>The version in Debian was around five years old, and quite a lot of
50 changes had taken place upstream into the Debian maintenance git
51 repository. After spending a few days importing the new upstream
52 versions, realising that upstream did not care much for SONAME
53 versioning as I saw library symbols being both added and removed with
54 minor version number changes to the project, I concluded that I had to
55 do a SONAME bump of the library package to avoid surprising the
56 reverse dependencies. I even added a simple
57 autopkgtest script to ensure the package work as intended. Dug deep
58 into the hole of learning shared library maintenance, I set out a few
59 days ago to upload the new version to Debian experimental to see what
60 the quality assurance framework in Debian had to say about the result.
61 The feedback told me the pacakge was not too shabby, and yesterday I
62 uploaded the latest version to Debian unstable. It should enter
63 testing today or tomorrow, perhaps delayed by
64 <a href=
"https://bugs.debian.org/1055812">a small library
67 <p>Armed with a new version of sqlcipher, I can now have a look at the
68 SQL database in ~/.config/Signal/sql/db.sqlite. First, one need to
69 fetch the encryption key from the Signal configuration using this
70 simple JSON extraction command:
</p>
72 <pre>/usr/bin/jq -r '."key"' ~/.config/Signal/config.json
</pre>
74 <p>Assuming the result from that command is 'secretkey', which is a
75 hexadecimal number representing the key used to encrypt the database.
76 Next, one can now connect to the database and inject the encryption
77 key for access via SQL to fetch information from the database. Here
78 is an example dumping the database structure:
</p>
81 % sqlcipher ~/.config/Signal/sql/db.sqlite
82 sqlite
> PRAGMA key = "x'secretkey'";
84 CREATE TABLE sqlite_stat1(tbl,idx,stat);
85 CREATE TABLE conversations(
86 id STRING PRIMARY KEY ASC,
94 , profileFamilyName TEXT, profileFullName TEXT, e164 TEXT, serviceId TEXT, groupId TEXT, profileLastFetchedAt INTEGER);
95 CREATE TABLE identityKeys(
96 id STRING PRIMARY KEY ASC,
100 id STRING PRIMARY KEY ASC,
103 CREATE TABLE sessions(
107 , ourServiceId STRING, serviceId STRING);
108 CREATE TABLE attachment_downloads(
109 id STRING primary key,
114 CREATE TABLE sticker_packs(
119 coverStickerId INTEGER,
121 downloadAttempts INTEGER,
125 stickerCount INTEGER,
127 , attemptedStatus STRING, position INTEGER DEFAULT
0 NOT NULL, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync
128 INTEGER DEFAULT
0 NOT NULL);
129 CREATE TABLE stickers(
131 packId TEXT NOT NULL,
140 PRIMARY KEY (id, packId),
141 CONSTRAINT stickers_fk
143 REFERENCES sticker_packs(id)
146 CREATE TABLE sticker_references(
149 CONSTRAINT sticker_references_fk
151 REFERENCES sticker_packs(id)
155 shortName TEXT PRIMARY KEY,
158 CREATE TABLE messages(
159 rowid INTEGER PRIMARY KEY ASC,
165 schemaVersion INTEGER,
166 conversationId STRING,
169 hasAttachments INTEGER,
170 hasFileAttachments INTEGER,
171 hasVisualMediaAttachments INTEGER,
173 expirationStartTimestamp INTEGER,
176 messageTimer INTEGER,
177 messageTimerStart INTEGER,
178 messageTimerExpiresAt INTEGER,
181 sourceServiceId TEXT, serverGuid STRING NULL, sourceDevice INTEGER, storyId STRING, isStory INTEGER
182 GENERATED ALWAYS AS (type IS 'story'), isChangeCreatedByUs INTEGER NOT NULL DEFAULT
0, isTimerChangeFromSync INTEGER
183 GENERATED ALWAYS AS (
184 json_extract(json, '$.expirationTimerUpdate.fromSync') IS
1
185 ), seenStatus NUMBER default
0, storyDistributionListId STRING, expiresAt INT
188 expirationStartTimestamp + (expireTimer *
1000),
190 )), shouldAffectActivity INTEGER
191 GENERATED ALWAYS AS (
195 'change-number-notification',
196 'contact-removed-notification',
197 'conversation-merge',
198 'group-v1-migration',
200 'message-history-unsynced',
203 'universal-timer-notification',
206 ), shouldAffectPreview INTEGER
207 GENERATED ALWAYS AS (
211 'change-number-notification',
212 'contact-removed-notification',
213 'conversation-merge',
214 'group-v1-migration',
216 'message-history-unsynced',
219 'universal-timer-notification',
222 ), isUserInitiatedMessage INTEGER
223 GENERATED ALWAYS AS (
227 'change-number-notification',
228 'contact-removed-notification',
229 'conversation-merge',
230 'group-v1-migration',
233 'message-history-unsynced',
236 'universal-timer-notification',
239 ), mentionsMe INTEGER NOT NULL DEFAULT
0, isGroupLeaveEvent INTEGER
240 GENERATED ALWAYS AS (
241 type IS 'group-v2-change' AND
242 json_array_length(json_extract(json, '$.groupV2Change.details')) IS
1 AND
243 json_extract(json, '$.groupV2Change.details[
0].type') IS 'member-remove' AND
244 json_extract(json, '$.groupV2Change.from') IS NOT NULL AND
245 json_extract(json, '$.groupV2Change.from') IS json_extract(json, '$.groupV2Change.details[
0].aci')
246 ), isGroupLeaveEventFromOther INTEGER
247 GENERATED ALWAYS AS (
248 isGroupLeaveEvent IS
1
250 isChangeCreatedByUs IS
0
252 GENERATED ALWAYS AS (
253 json_extract(json, '$.callId')
255 CREATE TABLE sqlite_stat4(tbl,idx,neq,nlt,ndlt,sample);
258 queueType TEXT STRING NOT NULL,
259 timestamp INTEGER NOT NULL,
262 CREATE TABLE reactions(
263 conversationId STRING,
266 messageReceivedAt INTEGER,
267 targetAuthorAci STRING,
268 targetTimestamp INTEGER,
271 CREATE TABLE senderKeys(
272 id TEXT PRIMARY KEY NOT NULL,
273 senderId TEXT NOT NULL,
274 distributionId TEXT NOT NULL,
276 lastUpdatedDate NUMBER NOT NULL
278 CREATE TABLE unprocessed(
279 id STRING PRIMARY KEY ASC,
286 serverTimestamp INTEGER,
287 sourceServiceId STRING
288 , serverGuid STRING NULL, sourceDevice INTEGER, receivedAtCounter INTEGER, urgent INTEGER, story INTEGER);
289 CREATE TABLE sendLogPayloads(
290 id INTEGER PRIMARY KEY ASC,
292 timestamp INTEGER NOT NULL,
293 contentHint INTEGER NOT NULL,
295 , urgent INTEGER, hasPniSignatureMessage INTEGER DEFAULT
0 NOT NULL);
296 CREATE TABLE sendLogRecipients(
297 payloadId INTEGER NOT NULL,
299 recipientServiceId STRING NOT NULL,
300 deviceId INTEGER NOT NULL,
302 PRIMARY KEY (payloadId, recipientServiceId, deviceId),
304 CONSTRAINT sendLogRecipientsForeignKey
305 FOREIGN KEY (payloadId)
306 REFERENCES sendLogPayloads(id)
309 CREATE TABLE sendLogMessageIds(
310 payloadId INTEGER NOT NULL,
312 messageId STRING NOT NULL,
314 PRIMARY KEY (payloadId, messageId),
316 CONSTRAINT sendLogMessageIdsForeignKey
317 FOREIGN KEY (payloadId)
318 REFERENCES sendLogPayloads(id)
321 CREATE TABLE preKeys(
322 id STRING PRIMARY KEY ASC,
324 , ourServiceId NUMBER
325 GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
326 CREATE TABLE signedPreKeys(
327 id STRING PRIMARY KEY ASC,
329 , ourServiceId NUMBER
330 GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
333 category TEXT NOT NULL,
335 descriptionTemplate TEXT NOT NULL
337 CREATE TABLE badgeImageFiles(
338 badgeId TEXT REFERENCES badges(id)
341 'order' INTEGER NOT NULL,
346 CREATE TABLE storyReads (
347 authorId STRING NOT NULL,
348 conversationId STRING NOT NULL,
349 storyId STRING NOT NULL,
350 storyReadDate NUMBER NOT NULL,
352 PRIMARY KEY (authorId, storyId)
354 CREATE TABLE storyDistributions(
355 id STRING PRIMARY KEY NOT NULL,
358 senderKeyInfoJson STRING
359 , deletedAtTimestamp INTEGER, allowsReplies INTEGER, isBlockList INTEGER, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync INTEGER);
360 CREATE TABLE storyDistributionMembers(
361 listId STRING NOT NULL REFERENCES storyDistributions(id)
364 serviceId STRING NOT NULL,
366 PRIMARY KEY (listId, serviceId)
368 CREATE TABLE uninstalled_sticker_packs (
369 id STRING NOT NULL PRIMARY KEY,
370 uninstalledAt NUMBER NOT NULL,
372 storageVersion NUMBER,
373 storageUnknownFields BLOB,
374 storageNeedsSync INTEGER NOT NULL
376 CREATE TABLE groupCallRingCancellations(
377 ringId INTEGER PRIMARY KEY,
378 createdAt INTEGER NOT NULL
380 CREATE TABLE IF NOT EXISTS 'messages_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
381 CREATE TABLE IF NOT EXISTS 'messages_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
382 CREATE TABLE IF NOT EXISTS 'messages_fts_content'(id INTEGER PRIMARY KEY, c0);
383 CREATE TABLE IF NOT EXISTS 'messages_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
384 CREATE TABLE IF NOT EXISTS 'messages_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
385 CREATE TABLE edited_messages(
386 messageId STRING REFERENCES messages(id)
390 , conversationId STRING);
391 CREATE TABLE mentions (
392 messageId REFERENCES messages(id) ON DELETE CASCADE,
397 CREATE TABLE kyberPreKeys(
398 id STRING PRIMARY KEY NOT NULL,
399 json TEXT NOT NULL, ourServiceId NUMBER
400 GENERATED ALWAYS AS (json_extract(json, '$.ourServiceId')));
401 CREATE TABLE callsHistory (
402 callId TEXT PRIMARY KEY,
403 peerId TEXT NOT NULL, -- conversation id (legacy) | uuid | groupId | roomId
404 ringerId TEXT DEFAULT NULL, -- ringer uuid
405 mode TEXT NOT NULL, -- enum "Direct" | "Group"
406 type TEXT NOT NULL, -- enum "Audio" | "Video" | "Group"
407 direction TEXT NOT NULL, -- enum "Incoming" | "Outgoing
408 -- Direct: enum "Pending" | "Missed" | "Accepted" | "Deleted"
409 -- Group: enum "GenericGroupCall" | "OutgoingRing" | "Ringing" | "Joined" | "Missed" | "Declined" | "Accepted" | "Deleted"
410 status TEXT NOT NULL,
411 timestamp INTEGER NOT NULL,
412 UNIQUE (callId, peerId) ON CONFLICT FAIL
414 [ dropped all indexes to save space in this blog post ]
415 CREATE TRIGGER messages_on_view_once_update AFTER UPDATE ON messages
417 new.body IS NOT NULL AND new.isViewOnce =
1
419 DELETE FROM messages_fts WHERE rowid = old.rowid;
421 CREATE TRIGGER messages_on_insert AFTER INSERT ON messages
422 WHEN new.isViewOnce IS NOT
1 AND new.storyId IS NULL
424 INSERT INTO messages_fts
427 (new.rowid, new.body);
429 CREATE TRIGGER messages_on_delete AFTER DELETE ON messages BEGIN
430 DELETE FROM messages_fts WHERE rowid = old.rowid;
431 DELETE FROM sendLogPayloads WHERE id IN (
432 SELECT payloadId FROM sendLogMessageIds
433 WHERE messageId = old.id
435 DELETE FROM reactions WHERE rowid IN (
436 SELECT rowid FROM reactions
437 WHERE messageId = old.id
439 DELETE FROM storyReads WHERE storyId = old.storyId;
441 CREATE VIRTUAL TABLE messages_fts USING fts5(
443 tokenize = 'signal_tokenizer'
445 CREATE TRIGGER messages_on_update AFTER UPDATE ON messages
447 (new.body IS NULL OR old.body IS NOT new.body) AND
448 new.isViewOnce IS NOT
1 AND new.storyId IS NULL
450 DELETE FROM messages_fts WHERE rowid = old.rowid;
451 INSERT INTO messages_fts
454 (new.rowid, new.body);
456 CREATE TRIGGER messages_on_insert_insert_mentions AFTER INSERT ON messages
458 INSERT INTO mentions (messageId, mentionAci, start, length)
460 SELECT messages.id, bodyRanges.value -
>> 'mentionAci' as mentionAci,
461 bodyRanges.value -
>> 'start' as start,
462 bodyRanges.value -
>> 'length' as length
463 FROM messages, json_each(messages.json -
>> 'bodyRanges') as bodyRanges
464 WHERE bodyRanges.value -
>> 'mentionAci' IS NOT NULL
466 AND messages.id = new.id;
468 CREATE TRIGGER messages_on_update_update_mentions AFTER UPDATE ON messages
470 DELETE FROM mentions WHERE messageId = new.id;
471 INSERT INTO mentions (messageId, mentionAci, start, length)
473 SELECT messages.id, bodyRanges.value -
>> 'mentionAci' as mentionAci,
474 bodyRanges.value -
>> 'start' as start,
475 bodyRanges.value -
>> 'length' as length
476 FROM messages, json_each(messages.json -
>> 'bodyRanges') as bodyRanges
477 WHERE bodyRanges.value -
>> 'mentionAci' IS NOT NULL
479 AND messages.id = new.id;
484 <p>Finally I have the tool needed to inspect and process Signal
485 messages that I need, without using the vendor provided client. Now
486 on to transforming it to a more useful format.
</p>
488 <p>As usual, if you use Bitcoin and want to show your support of my
489 activities, please send Bitcoin donations to my address
490 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
495 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance
</a>.
500 <div class=
"padding"></div>
503 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/New_chrpath_release_0_17.html">New chrpath release
0.17</a></div>
504 <div class=
"date">10th November
2023</div>
505 <div class=
"body"><p>The chrpath package provide a simple command line tool to remove or
506 modify the rpath or runpath of compiled ELF program. It is almost
10
507 years since I updated the code base, but I stumbled over the tool
508 today, and decided it was time to move the code base from Subversion
509 to git and find a new home for it, as the previous one (Debian Alioth)
510 has been shut down. I decided to go with
511 <a href=
"https://codeberg.org/">Codeberg
</a> this time, as it is my git
512 service of choice these days, did a quick and dirty migration to git
513 and updated the code with a few patches I found in the Debian bug
514 tracker. These are the release notes:
</p>
516 <p>New in
0.17 released
2023-
11-
10:
</p>
519 <li>Moved project to Codeberg, as Alioth is shut down.
</li>
520 <li>Add Solaris support (use
<sys/byteorder.h
> instead of
<byteswap.h
>).
521 Patch from Rainer Orth.
</li>
522 <li>Added missing newline from printf() line. Patch from Frank Dana.
</li>
523 <li>Corrected handling of multiple ELF sections. Patch from Frank Dana.
</li>
524 <li>Updated build rules for .deb. Partly based on patch from djcj.
</li>
527 <p>The latest edition is tagged and available from
528 <a href=
"https://codeberg.org/pere/chrpath">https://codeberg.org/pere/chrpath
</a>.
530 <p>As usual, if you use Bitcoin and want to show your support of my
531 activities, please send Bitcoin donations to my address
532 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
537 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/chrpath">chrpath
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>.
542 <div class=
"padding"></div>
545 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/Test_framework_for_DocBook_processors___formatters.html">Test framework for DocBook processors / formatters
</a></div>
546 <div class=
"date"> 5th November
2023</div>
547 <div class=
"body"><p>All the books I have published so far has been using
548 <a href=
"https://docbook.org/">DocBook
</a> somewhere in the process.
549 For the first book, the source format was DocBook, while for every
550 later book it was an intermediate format used as the stepping stone to
551 be able to present the same manuscript in several formats, on paper,
552 as ebook in ePub format, as a HTML page and as a PDF file either for
553 paper production or for Internet consumption. This is made possible
554 with a wide variety of free software tools with DocBook support in
555 Debian. The source format of later books have been docx via rst,
556 Markdown, Filemaker and Asciidoc, and for all of these I was able to
557 generate a suitable DocBook file for further processing using
558 <a href=
"https://tracker.debian.org/pkg/pandoc">pandoc
</a>,
559 <a href=
"https://tracker.debian.org/pkg/asciidoc">a2x
</a> and
560 <a href=
"https://tracker.debian.org/pkg/asciidoctor">asciidoctor
</a>,
561 as well as rendering using
562 <a href=
"https://tracker.debian.org/pkg/xmlto">xmlto
</a>,
563 <a href=
"https://tracker.debian.org/pkg/dbtoepub">dbtoepub
</a>,
564 <a href=
"https://tracker.debian.org/pkg/dblatex">dblatex
</a>,
565 <a href=
"https://tracker.debian.org/pkg/docbook-xsl">docbook-xsl
</a> and
566 <a href=
"https://tracker.debian.org/pkg/fop">fop
</a>.
</p>
568 <p>Most of the
<a href=
"http://www.hungry.com/~pere/publisher/">books I
569 have published
</a> are translated books, with English as the source
571 <a href=
"https://tracker.debian.org/pkg/po4a">po4a
</a> to
572 handle translations using the gettext PO format has been a blessing,
573 but publishing translated books had triggered the need to ensure the
574 DocBook tools handle relevant languages correctly. For every new
575 language I have published, I had to submit patches dblatex, dbtoepub
576 and docbook-xsl fixing incorrect language and country specific issues
577 in the framework themselves. Typically this has been missing keywords
578 like 'figure' or sort ordering of index entries. After a while it
579 became tiresome to only discover issues like this by accident, and I
580 decided to write a DocBook "test framework" exercising various
581 features of DocBook and allowing me to see all features exercised for
582 a given language. It consist of a set of DocBook files, a version
4
583 book, a version
5 book, a v4 book set, a v4 selection of problematic
584 tables, one v4 testing sidefloat and finally one v4 testing a book of
585 articles. The DocBook files are accompanied with a set of build rules
586 for building PDF using dblatex and docbook-xsl/fop, HTML using xmlto
587 or docbook-xsl and epub using dbtoepub. The result is a set of files
588 visualizing footnotes, indexes, table of content list, figures,
589 formulas and other DocBook features, allowing for a quick review on
590 the completeness of the given locale settings. To build with a
591 different language setting, all one need to do is edit the lang= value
592 in the .xml file to pick a different ISO
639 code value and run
595 <p>The
<a href=
"https://codeberg.org/pere/docbook-example/">test framework
596 source code
</a> is available from Codeberg, and a generated set of
597 presentations of the various examples is available as Codeberg static
599 <a href=
"https://pere.codeberg.page/docbook-example/">https://pere.codeberg.page/docbook-example/
</a>.
600 Using this test framework I have been able to discover and report
601 several bugs and missing features in various tools, and got a lot of
602 them fixed. For example I got Northern Sami keywords added to both
603 docbook-xsl and dblatex, fixed several typos in Norwegian bokmål and
604 Norwegian Nynorsk, support for non-ascii title IDs added to pandoc,
605 Norwegian index sorting support fixed in xindy and initial Norwegian
606 Bokmål support added to dblatex. Some issues still remains, though.
607 Default index sorting rules are still broken in several tools, so the
608 Norwegian letters æ, ø and å are more often than not sorted properly
609 in the book index.
</p>
611 <p>The test framework recently received some more polish, as part of
612 publishing my latest book. This book contained a lot of fairly
613 complex tables, which exposed bugs in some of the tools. This made me
614 add a new test file with various tables, as well as spend some time to
615 brush up the build rules. My goal is for the test framework to
616 exercise all DocBook features to make it easier to see which features
617 work with different processors, and hopefully get them all to support
618 the full set of DocBook features. Feel free to send patches to extend
619 the test set, and test it with your favorite DocBook processor.
620 Please visit these two URLs to learn more:
</p>
623 <li><a href=
"https://codeberg.org/pere/docbook-example/">https://codeberg.org/pere/docbook-example/
</a></li>
624 <li><a href=
"https://pere.codeberg.page/docbook-example/">https://pere.codeberg.page/docbook-example/
</a></li>
627 <p>If you want to learn more on Docbook and translations, I recommend
628 having a look at the
<a href=
"https://docbook.org/">the DocBook
630 <a href=
"https://doccookbook.sourceforge.net/html/en/">the DoCookBook
631 site
<a/> and my earlier blog post on
632 <a href=
"https://people.skolelinux.org/pere/blog/From_English_wiki_to_translated_PDF_and_epub_via_Docbook.html">how
633 the Skolelinux project process and translate documentation
</a>, a talk I gave earlier this year on
634 <a href=
"https://www.nuug.no/aktiviteter/20230314-oversetting-og-publisering-av-b%c3%b8ker-med-fri-programvare/">how
635 to translate and publish books using free software
</a> (Norwegian
640 https://github.com/docbook/xslt10-stylesheets/issues/205 (docbook-xsl: sme support)
641 https://bugs.debian.org/968437 (xindy: index sorting rules for nb/nn)
642 https://bugs.debian.org/856123 (pandoc: markdown to docbook with non-english titles)
643 https://bugs.debian.org/864813 (dblatex: missing nb words)
644 https://bugs.debian.org/756386 (dblatex: index sorting rules for nb/nn)
645 https://bugs.debian.org/796871 (dbtoepub: index sorting rules for nb/nn)
646 https://bugs.debian.org/792616 (dblatex: PDF metadata)
647 https://bugs.debian.org/686908 (docbook-xsl: index sorting rules for nb/nn)
648 https://sourceforge.net/tracker/?func=detail&atid=373747&aid=3556630&group_id=21935 (docbook-xsl: nb/nn support)
649 https://bugs.debian.org/684391 (dblatex: initial nb support)
653 <p>As usual, if you use Bitcoin and want to show your support of my
654 activities, please send Bitcoin donations to my address
655 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
660 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/docbook">docbook
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>.
665 <div class=
"padding"></div>
668 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/_Virkninger_av_angrefristloven___hovedfagsoppgaven_som_fikk_endret_en_lov.html">«Virkninger av angrefristloven», hovedfagsoppgaven som fikk endret en lov
</a></div>
669 <div class=
"date">29th October
2023</div>
670 <div class=
"body"><img src=
"http://people.skolelinux.org/pere/blog/images/2023-10-29-bok-angrefrist.svg" width=
"20%" align=
"center"></a>
672 <p>I
1979 leverte Ole-Erik Yrvin en hovedfagsoppgave for Cand. Scient.
673 ved Institutt for sosiologi på Universitetet i Oslo på oppdrag fra
674 Forbruker- og administrasjonsdepartementet. Oppgaven evaluerte
675 Angrefristloven fra
1972, og det han oppdaget førte til at loven ble
676 endret fire år senere.
</p>
678 <p>Jeg har kjent Ole-Erik en stund, og synes det var trist at hans
679 oppgave ikke lenger er tilgjengelig, hverken fra oppdragsgiver
680 eller fra universitetet. Hans forsøk på å få den avbildet og lagt
681 ut på Internett har vist seg fånyttes, så derfor tilbød jeg meg for
682 en stund tilbake å publisere den og gjøre den tilgjengelig med
683 fribruksvilkår på Internett. Det er nå klart, og hovedfagsoppgaven
684 er tilgjengelig blant annet via
<a
685 href=
"http://www.hungry.com/~pere/publisher/">min liste over
686 publiserte bøker
</a>, både som nettside,
687 <a href=
"https://www.lulu.com/search?contributor=Ole-Erik+Yrvin">digital
688 bok i ePub-format og på papir fra lulu.com
</a>. Jeg regner med at
689 den også vil dukke opp på nettbokhandlere i løpet av en måned eller
692 <p>Alle tabeller og figurer er gjenskapt for bedre lesbarhet, noen
693 skrivefeil rettet opp og mange referanser har fått flere detaljer
694 som ISBN-nummer og DOI-referanse. Selv om jeg ikke regner med at
695 dette blir en kioskvelter, så håper jeg denne nye utgaven kan komme
696 fremtiden til glede.
</p>
698 <p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
699 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
701 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>. Merk,
702 betaling med bitcoin er ikke anonymt. :)
</p>
707 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/docbook">docbook
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/norsk">norsk
</a>.
712 <div class=
"padding"></div>
715 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/_underordnet_tjenestemann_blir_inhabil_fordi_en_overordnet_er_inhabil__.html">«underordnet tjenestemann blir inhabil fordi en overordnet er inhabil».
</a></div>
716 <div class=
"date"> 7th September
2023</div>
717 <div class=
"body"><p>Medlemmene av Norges regjering har demonstert de siste månedene at
718 habilitetsvureringer ikke er deres sterke side og det gjelder både
719 Arbeiderpartiets og Senterpartiers representater. Det er heldigvis
720 enklere i det private, da inhabilitetsreglene kun gjelder de som
721 jobber for folket, ikke seg selv. Sist ut er utenriksminister
722 Huitfeldt. I går kom nyheten om at
723 <a href=
"https://www.nrk.no/nyheter/riksadvokaten_-okokrim-nestsjef-kan-behandle-huitfeldt-saken-1.16545162">Riksadvokaten
724 har konkludert med at nestsjefen i Økokrim kan behandle sak om
725 habilitet og innsidekunnskap
</a> for Huitfeldt, på tross av at hans
726 overordnede, sjefen for Økokrim, har meldt seg inhabil i saken. Dette
727 er litt rart. I veilednigen
728 «
<a href=
"https://www.regjeringen.no/globalassets/upload/krd/vedlegg/komm/veiledere/habilitet_i_kommuner_og_fylkeskommuner.pdf">Habilitet
729 i kommuner og fylkeskommuner
</a>» av Kommunal- og regionaldepartementet
730 forteller de hva som gjelder, riktig nok gjelder veiledningen ikke for
731 Økokrim som jo ikke er kommune eller fylkeskommune, men jeg får ikke
732 inntrykk av at dette er regler som kun gjelder for kommune og
736 <p>«
<strong>2.1 Oversikt over inhabilitetsgrunnlagene
</strong>
738 <p>De alminnelige reglene om inhabilitet for den offentlige
739 forvaltningen er gitt i
740 <a href=
"https://lovdata.no/dokument/NL/lov/1967-02-10/KAPITTEL_2#KAPITTEL_2">forvaltningsloven
741 §§
6 til
10</a>. Forvaltningslovens hovedregel om inhabilitet framgår
742 av §
6. Her er det gitt tre ulike grunnlag som kan føre til at en
743 tjenestemann eller folkevalgt blir inhabil. I §
6 første ledd
744 bokstavene a til e er det oppstilt konkrete tilknytningsforhold mellom
745 tjenestemannen og saken eller sakens parter som automatisk fører til
746 inhabilitet. Annet ledd oppstiller en skjønnsmessig regel om at
747 tjenestemannen også kan bli inhabil etter en konkret vurdering av
748 inhabilitetsspørsmålet, der en lang rekke momenter kan være
749 relevante. I tredje ledd er det regler om såkalt avledet
750 inhabilitet. Det vil si at en underordnet tjenestemann blir inhabil
751 fordi en overordnet er inhabil.»
</p>
754 <p>Loven sier ganske enkelt «Er den overordnede tjenestemann ugild,
755 kan avgjørelse i saken heller ikke treffes av en direkte underordnet
756 tjenestemann i samme forvaltningsorgan.» Jeg antar tanken er at en
757 underordnet vil stå i fare for å tilpasse sine konklusjoner til det
758 overordnet vil ha fordel av, for å fortsatt ha et godt forhold til sin
759 overordnede. Men jeg er ikke jurist og forstår nok ikke kompliserte
760 juridiske vurderinger. For å sitere «Kamerat Napoleon» av George
761 Orwell: «Alle dyr er like, men noen dyr er likere enn andre».
766 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/norsk">norsk
</a>.
771 <div class=
"padding"></div>
774 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/Invidious_add_on_for_Kodi_20.html">Invidious add-on for Kodi
20</a></div>
775 <div class=
"date">10th August
2023</div>
776 <div class=
"body"><p>I still enjoy
<a href=
"https://kodi.tv/">Kodi
</a> and
777 <a href=
"https://libreelec.tv/">LibreELEC
</a> as my multimedia center
778 at home. Sadly two of the services I really would like to use from
779 within Kodi are not easily available. The most wanted add-on would be
780 one making
<a href=
"https://archive.org/">The Internet Archive
</a>
781 available, and it has
782 <a href=
"https://kodi.wiki/view/Add-on:Internet_Archive">not been
783 working
</a> for many years. The second most wanted add-on is one
784 using
<a href=
"https://invidious.io/">the Invidious privacy enhanced
785 Youtube frontent
</a>. A plugin for this has been partly working, but
786 not been kept up to date in the Kodi add-on repository, and its
787 upstream seem to have given it up in April this year, when the git
788 repository was closed. A few days ago I got tired of this sad state
789 of affairs and decided to
790 <a href=
"https://github.com/petterreinholdtsen/kodi-invidious-plugin">have
791 a go at improving the Invidious add-on
</a>. As
792 <a href=
"https://github.com/iv-org/invidious/issues/3872">Google has
793 already attacked
</a> the Invidious concept, so it need all the support
794 if can get. My small contribution here is to improve the service
797 <p>I added support to the Invidious add-on for automatically picking a
798 working Invidious instance, instead of requiring the user to specify
799 the URL to a specific instance after installation. I also had a look
800 at the set of patches floating around in the various forks on github,
801 and decided to clean up at least some of the features I liked and
802 integrate them into my new release branch. Now the plugin can handle
803 channel and short video items in search results. Earlier it could
804 only handle single video instances in the search response. I also
805 brushed up the set of metadata displayed a bit, but hope I can figure
806 out how to get more relevant metadata displayed.
</p>
808 <p>Because I only use Kodi
20 myself, I only test on version
20 and am
809 only motivated to ensure version
20 is working. Because of API changes
810 between version
19 and
20, I suspect it will fail with earlier Kodi
814 <a href=
"https://github.com/xbmc/repo-plugins/pull/4363">asked to have
815 the add-on added
</a> to the official Kodi
20 repository, and is
816 waiting to heard back from the repo maintainers.
</p>
818 <p>As usual, if you use Bitcoin and want to show your support of my
819 activities, please send Bitcoin donations to my address
820 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
825 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/kodi">kodi
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/video">video
</a>.
830 <div class=
"padding"></div>
833 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/What_did_I_learn_from_OpenSnitch_this_summer_.html">What did I learn from OpenSnitch this summer?
</a></div>
834 <div class=
"date">11th June
2023</div>
835 <div class=
"body"><p>With yesterdays
836 <a href=
"https://www.debian.org/News/2023/20230610">release of Debian
837 12 Bookworm
</a>, I am happy to know the
838 <a href=
"https://tracker.debian.org/pkg/opensnitch">the interactive
839 application firewall OpenSnitch
</a> is available for a wider audience.
840 I have been running it for a few weeks now, and have been surprised
841 about some of the programs connecting to the Internet. Some programs
842 are obviously calling out from my machine, like the NTP network based
843 clock adjusting system and Tor to reach other Tor clients, but others
844 were more dubious. For example, the KDE Window manager try to look up
845 the host name in DNS, for no apparent reason, but if this lookup is
846 blocked the KDE desktop get periodically stuck when I use it. Another
847 surprise was how much Firefox call home directly to mozilla.com,
848 mozilla.net and googleapis.com, to mention a few, when I visit other
849 web pages. This direct connection happen even if I told Firefox to
850 always use a proxy, and the proxy setting is ignored for this traffic.
851 Other surprising connections come from audacity and dirmngr (I do not
852 use Gnome). It took some trial and error to get a good default set of
853 permissions. Without it, I would get popups asking for permissions at
854 any time, also the most inconvenient ones where I am in the middle of
855 a time sensitive gaming session.
</p>
857 <p>I suspect some application developers should rethink when then need
858 to use network connections or DNS lookups, and recommend testing
859 OpenSnitch (only
<tt>apt install opensnitch
</tt> away in Debian
860 Bookworm) to locate and report any surprising Internet connections on
861 your desktop machine.
</p>
863 <p>At the moment the upstream developer and Debian package maintainer
864 is working on making the system more reliable in Debian, by enabling
865 the eBPF kernel module to track processes and connections instead of
866 depending in content in /proc/. This should enter unstable fairly
869 <p>As usual, if you use Bitcoin and want to show your support of my
870 activities, please send Bitcoin donations to my address
871 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
873 <p><strong>Update
2023-
06-
12</strong>: I got a tip about
874 <a href=
"https://wiki.debian.org/PrivacyIssues">a list of privacy
875 issues in Free Software
</a> and the
876 <a href=
"irc://irc.debian.org/%23debian-privacy">#debian-privacy IRC
877 channel
</a> discussing these topics.
</p>
883 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/opensnitch">opensnitch
</a>.
888 <div class=
"padding"></div>
891 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/wmbusmeters__parse_data_from_your_utility_meter___nice_free_software.html">wmbusmeters, parse data from your utility meter - nice free software
</a></div>
892 <div class=
"date">19th May
2023</div>
893 <div class=
"body"><p>There is a European standard for reading utility meters like water,
894 gas, electricity or heat distribution meters. The
895 <a href=
"https://en.wikipedia.org/wiki/Meter-Bus">Meter-Bus standard
896 (EN
13757-
2, EN
13757-
3 and EN
13757–
4)
</a> provide a cross vendor way
897 to talk to and collect meter data. I ran into this standard when I
898 wanted to monitor some heat distribution meters, and managed to find
899 free software that could do the job. The meters in question broadcast
900 encrypted messages with meter information via radio, and the hardest
901 part was to track down the encryption keys from the vendor. With this
902 in place I could set up a MQTT gateway to submit the meter data for
905 <p>The free software systems in question,
906 <a href=
"https://tracker.debian.org/pkg/rtl-wmbus">rtl-wmbus
</a> to
907 read the messages from a software defined radio, and
908 <a href=
"https://tracker.debian.org/pkg/wmbusmeters">wmbusmeters
</a> to
909 decrypt and decode the content of the messages, is working very well
910 and allowe me to get frequent updates from my meters. I got in touch
911 with upstream last year to see if there was any interest in publishing
912 the packages via Debian. I was very happy to learn that Fredrik
913 Öhrström volunteered to maintain the packages, and I have since
914 assisted him in getting Debian package build rules in place as well as
915 sponsoring the packages into the Debian archive. Sadly we completed
916 it too late for them to become part of the next stable Debian release
917 (Bookworm). The wmbusmeters package just cleared the NEW queue. It
918 will need some work to fix a built problem, but I expect Fredrik will
919 find a solution soon.
</p>
921 <p>If you got a infrastructure meter supporting the Meter Bus
922 standard, I strongly recommend having a look at these nice
925 <p>As usual, if you use Bitcoin and want to show your support of my
926 activities, please send Bitcoin donations to my address
927 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
932 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software
</a>.
937 <div class=
"padding"></div>
940 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/The_2023_LinuxCNC_Norwegian_developer_gathering.html">The
2023 LinuxCNC Norwegian developer gathering
</a></div>
941 <div class=
"date">14th May
2023</div>
942 <div class=
"body"><p>The LinuxCNC project is making headway these days. A lot of
943 patches and issues have seen activity on
944 <a href=
"https://github.com/LinuxCNC/linuxcnc/">the project github
945 pages
</a> recently. A few weeks ago there was a developer gathering
946 over at the
<a href=
"https://tormach.com/">Tormach
</a> headquarter in
947 Wisconsin, and now we are planning a new gathering in Norway. If you
948 wonder what LinuxCNC is, lets quote Wikipedia:
</p>
951 "LinuxCNC is a software system for numerical control of
952 machines such as milling machines, lathes, plasma cutters, routers,
953 cutting machines, robots and hexapods. It can control up to
9 axes or
954 joints of a CNC machine using G-code (RS-
274NGC) as input. It has
955 several GUIs suited to specific kinds of usage (touch screen,
956 interactive development)."
959 <p>The Norwegian developer gathering take place the weekend June
16th
960 to
18th this year, and is open for everyone interested in contributing
961 to LinuxCNC. Up to date information about the gathering can be found
963 <a href=
"https://sourceforge.net/p/emc/mailman/emc-developers/thread/sa64jp06nob.fsf%40hjemme.reinholdtsen.name/#msg37837251">the
964 developer mailing list thread
</a> where the gathering was announced.
965 Thanks to the good people at
966 <a href=
"https://www.debian.org/">Debian
</a>,
967 <a href=
"https://www.redpill-linpro.com/">Redpill-Linpro
</a> and
968 <a href=
"https://www.nuugfoundation.no/no/">NUUG Foundation
</a>, we
969 have enough sponsor funds to pay for food, and shelter for the people
970 traveling from afar to join us. If you would like to join the
971 gathering, get in touch.
</p>
973 <p>As usual, if you use Bitcoin and want to show your support of my
974 activities, please send Bitcoin donations to my address
975 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
980 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc
</a>.
985 <div class=
"padding"></div>
988 <div class=
"title"><a href=
"https://people.skolelinux.org/pere/blog/OpenSnitch_in_Debian_ready_for_prime_time.html">OpenSnitch in Debian ready for prime time
</a></div>
989 <div class=
"date">13th May
2023</div>
990 <div class=
"body"><p>A bit delayed,
991 <a href=
"https://tracker.debian.org/pkg/opensnitch">the interactive
992 application firewall OpenSnitch
</a> package in Debian now got the
993 latest fixes ready for Debian Bookworm. Because it depend on a
994 package missing on some architectures, the autopkgtest check of the
995 testing migration script did not understand that the tests were
996 actually working, so the migration was delayed. A bug in the package
997 dependencies is also fixed, so those installing the firewall package
998 (opensnitch) now also get the GUI admin tool (python3-opensnitch-ui)
999 installed by default. I am very grateful to Gustavo Iñiguez Goya for
1000 his work on getting the package ready for Debian Bookworm.
</p>
1002 <p>Armed with this package I have discovered some surprising
1003 connections from programs I believed were able to work completly
1004 offline, and it has already proven its worth, at least to me. If you
1005 too want to get more familiar with the kind of programs using
1006 Internett connections on your machine, I recommend testing
<tt>apt
1007 install opensnitch
</tt> in Bookworm and see what you think.
</p>
1009 <p>The package is still not able to build its eBPF module within
1010 Debian. Not sure how much work it would be to get it working, but
1011 suspect some kernel related packages need to be extended with more
1012 header files to get it working.
</p>
1014 <p>As usual, if you use Bitcoin and want to show your support of my
1015 activities, please send Bitcoin donations to my address
1016 <b><a href=
"bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a></b>.
</p>
1021 Tags:
<a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/english">english
</a>,
<a href=
"https://people.skolelinux.org/pere/blog/tags/opensnitch">opensnitch
</a>.
1026 <div class=
"padding"></div>
1028 <p style=
"text-align: right;"><a href=
"index.rss"><img src=
"https://people.skolelinux.org/pere/blog/xml.gif" alt=
"RSS feed" width=
"36" height=
"14" /></a></p>
1039 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2023/01/">January (
3)
</a></li>
1041 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2023/02/">February (
1)
</a></li>
1043 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2023/04/">April (
2)
</a></li>
1045 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2023/05/">May (
3)
</a></li>
1047 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2023/06/">June (
1)
</a></li>
1049 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2023/08/">August (
1)
</a></li>
1051 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2023/09/">September (
1)
</a></li>
1053 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2023/10/">October (
1)
</a></li>
1055 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2023/11/">November (
3)
</a></li>
1062 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/02/">February (
1)
</a></li>
1064 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/03/">March (
3)
</a></li>
1066 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/04/">April (
2)
</a></li>
1068 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/06/">June (
2)
</a></li>
1070 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/07/">July (
1)
</a></li>
1072 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/09/">September (
1)
</a></li>
1074 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/10/">October (
1)
</a></li>
1076 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2022/12/">December (
1)
</a></li>
1083 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/01/">January (
2)
</a></li>
1085 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/02/">February (
1)
</a></li>
1087 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/05/">May (
1)
</a></li>
1089 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/06/">June (
1)
</a></li>
1091 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/07/">July (
3)
</a></li>
1093 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/08/">August (
1)
</a></li>
1095 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/09/">September (
1)
</a></li>
1097 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/10/">October (
1)
</a></li>
1099 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2021/12/">December (
1)
</a></li>
1106 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/02/">February (
2)
</a></li>
1108 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/03/">March (
2)
</a></li>
1110 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/04/">April (
2)
</a></li>
1112 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/05/">May (
3)
</a></li>
1114 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/06/">June (
2)
</a></li>
1116 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/07/">July (
1)
</a></li>
1118 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/09/">September (
1)
</a></li>
1120 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/10/">October (
1)
</a></li>
1122 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2020/11/">November (
1)
</a></li>
1129 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/01/">January (
4)
</a></li>
1131 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/02/">February (
3)
</a></li>
1133 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/03/">March (
3)
</a></li>
1135 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/05/">May (
2)
</a></li>
1137 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/06/">June (
5)
</a></li>
1139 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/07/">July (
2)
</a></li>
1141 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/08/">August (
1)
</a></li>
1143 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/09/">September (
1)
</a></li>
1145 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/11/">November (
1)
</a></li>
1147 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2019/12/">December (
4)
</a></li>
1154 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/01/">January (
1)
</a></li>
1156 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/02/">February (
5)
</a></li>
1158 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/03/">March (
5)
</a></li>
1160 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/04/">April (
3)
</a></li>
1162 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/06/">June (
2)
</a></li>
1164 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/07/">July (
5)
</a></li>
1166 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/08/">August (
3)
</a></li>
1168 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/09/">September (
3)
</a></li>
1170 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/10/">October (
5)
</a></li>
1172 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/11/">November (
2)
</a></li>
1174 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2018/12/">December (
4)
</a></li>
1181 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/01/">January (
4)
</a></li>
1183 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/02/">February (
3)
</a></li>
1185 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/03/">March (
5)
</a></li>
1187 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/04/">April (
2)
</a></li>
1189 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/06/">June (
5)
</a></li>
1191 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/07/">July (
1)
</a></li>
1193 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/08/">August (
1)
</a></li>
1195 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/09/">September (
3)
</a></li>
1197 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/10/">October (
5)
</a></li>
1199 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/11/">November (
3)
</a></li>
1201 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2017/12/">December (
4)
</a></li>
1208 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/01/">January (
3)
</a></li>
1210 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/02/">February (
2)
</a></li>
1212 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/03/">March (
3)
</a></li>
1214 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/04/">April (
8)
</a></li>
1216 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/05/">May (
8)
</a></li>
1218 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/06/">June (
2)
</a></li>
1220 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/07/">July (
2)
</a></li>
1222 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/08/">August (
5)
</a></li>
1224 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/09/">September (
2)
</a></li>
1226 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/10/">October (
3)
</a></li>
1228 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/11/">November (
8)
</a></li>
1230 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2016/12/">December (
5)
</a></li>
1237 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/01/">January (
7)
</a></li>
1239 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/02/">February (
6)
</a></li>
1241 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/03/">March (
1)
</a></li>
1243 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/04/">April (
4)
</a></li>
1245 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/05/">May (
3)
</a></li>
1247 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/06/">June (
4)
</a></li>
1249 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/07/">July (
6)
</a></li>
1251 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/08/">August (
2)
</a></li>
1253 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/09/">September (
2)
</a></li>
1255 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/10/">October (
9)
</a></li>
1257 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/11/">November (
6)
</a></li>
1259 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2015/12/">December (
3)
</a></li>
1266 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/01/">January (
2)
</a></li>
1268 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/02/">February (
3)
</a></li>
1270 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/03/">March (
8)
</a></li>
1272 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/04/">April (
7)
</a></li>
1274 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/05/">May (
1)
</a></li>
1276 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/06/">June (
2)
</a></li>
1278 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/07/">July (
2)
</a></li>
1280 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/08/">August (
2)
</a></li>
1282 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/09/">September (
5)
</a></li>
1284 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/10/">October (
6)
</a></li>
1286 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/11/">November (
3)
</a></li>
1288 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2014/12/">December (
5)
</a></li>
1295 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/01/">January (
11)
</a></li>
1297 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/02/">February (
9)
</a></li>
1299 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/03/">March (
9)
</a></li>
1301 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/04/">April (
6)
</a></li>
1303 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/05/">May (
9)
</a></li>
1305 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/06/">June (
10)
</a></li>
1307 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/07/">July (
7)
</a></li>
1309 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/08/">August (
3)
</a></li>
1311 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/09/">September (
5)
</a></li>
1313 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/10/">October (
7)
</a></li>
1315 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/11/">November (
9)
</a></li>
1317 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2013/12/">December (
3)
</a></li>
1324 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/01/">January (
7)
</a></li>
1326 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/02/">February (
10)
</a></li>
1328 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/03/">March (
17)
</a></li>
1330 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/04/">April (
12)
</a></li>
1332 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/05/">May (
12)
</a></li>
1334 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/06/">June (
20)
</a></li>
1336 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/07/">July (
17)
</a></li>
1338 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/08/">August (
6)
</a></li>
1340 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/09/">September (
9)
</a></li>
1342 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/10/">October (
17)
</a></li>
1344 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/11/">November (
10)
</a></li>
1346 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2012/12/">December (
7)
</a></li>
1353 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/01/">January (
16)
</a></li>
1355 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/02/">February (
6)
</a></li>
1357 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/03/">March (
6)
</a></li>
1359 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/04/">April (
7)
</a></li>
1361 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/05/">May (
3)
</a></li>
1363 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/06/">June (
2)
</a></li>
1365 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/07/">July (
7)
</a></li>
1367 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/08/">August (
6)
</a></li>
1369 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/09/">September (
4)
</a></li>
1371 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/10/">October (
2)
</a></li>
1373 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/11/">November (
3)
</a></li>
1375 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2011/12/">December (
1)
</a></li>
1382 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/01/">January (
2)
</a></li>
1384 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/02/">February (
1)
</a></li>
1386 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/03/">March (
3)
</a></li>
1388 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/04/">April (
3)
</a></li>
1390 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/05/">May (
9)
</a></li>
1392 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/06/">June (
14)
</a></li>
1394 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/07/">July (
12)
</a></li>
1396 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/08/">August (
13)
</a></li>
1398 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/09/">September (
7)
</a></li>
1400 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/10/">October (
9)
</a></li>
1402 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/11/">November (
13)
</a></li>
1404 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2010/12/">December (
12)
</a></li>
1411 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/01/">January (
8)
</a></li>
1413 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/02/">February (
8)
</a></li>
1415 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/03/">March (
12)
</a></li>
1417 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/04/">April (
10)
</a></li>
1419 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/05/">May (
9)
</a></li>
1421 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/06/">June (
3)
</a></li>
1423 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/07/">July (
4)
</a></li>
1425 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/08/">August (
3)
</a></li>
1427 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/09/">September (
1)
</a></li>
1429 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/10/">October (
2)
</a></li>
1431 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/11/">November (
3)
</a></li>
1433 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2009/12/">December (
3)
</a></li>
1440 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2008/11/">November (
5)
</a></li>
1442 <li><a href=
"https://people.skolelinux.org/pere/blog/archive/2008/12/">December (
7)
</a></li>
1453 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (
19)
</a></li>
1455 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/amiga">amiga (
1)
</a></li>
1457 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/aros">aros (
1)
</a></li>
1459 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/bankid">bankid (
4)
</a></li>
1461 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/betalkontant">betalkontant (
9)
</a></li>
1463 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (
12)
</a></li>
1465 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (
17)
</a></li>
1467 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/bsa">bsa (
2)
</a></li>
1469 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (
3)
</a></li>
1471 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/debian">debian (
197)
</a></li>
1473 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (
159)
</a></li>
1475 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (
9)
</a></li>
1477 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/digistan">digistan (
11)
</a></li>
1479 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/dld">dld (
18)
</a></li>
1481 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/docbook">docbook (
32)
</a></li>
1483 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (
4)
</a></li>
1485 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/english">english (
454)
</a></li>
1487 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (
23)
</a></li>
1489 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (
14)
</a></li>
1491 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (
34)
</a></li>
1493 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (
9)
</a></li>
1495 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (
20)
</a></li>
1497 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/h264">h264 (
20)
</a></li>
1499 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/intervju">intervju (
43)
</a></li>
1501 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (
16)
</a></li>
1503 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/kart">kart (
23)
</a></li>
1505 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/kodi">kodi (
6)
</a></li>
1507 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/ldap">ldap (
9)
</a></li>
1509 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/lego">lego (
5)
</a></li>
1511 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/lenker">lenker (
8)
</a></li>
1513 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc (
5)
</a></li>
1515 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (
2)
</a></li>
1517 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (
1)
</a></li>
1519 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/madewithcc">madewithcc (
3)
</a></li>
1521 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (
8)
</a></li>
1523 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (
46)
</a></li>
1525 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (
15)
</a></li>
1527 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/noark5">noark5 (
23)
</a></li>
1529 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/norsk">norsk (
322)
</a></li>
1531 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/nuug">nuug (
198)
</a></li>
1533 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (
40)
</a></li>
1535 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/open311">open311 (
2)
</a></li>
1537 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/opensnitch">opensnitch (
4)
</a></li>
1539 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (
75)
</a></li>
1541 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/personvern">personvern (
114)
</a></li>
1543 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/raid">raid (
2)
</a></li>
1545 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/reactos">reactos (
1)
</a></li>
1547 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/reprap">reprap (
11)
</a></li>
1549 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/rfid">rfid (
3)
</a></li>
1551 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/robot">robot (
17)
</a></li>
1553 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/rss">rss (
1)
</a></li>
1555 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/ruter">ruter (
7)
</a></li>
1557 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (
2)
</a></li>
1559 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (
60)
</a></li>
1561 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (
4)
</a></li>
1563 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (
5)
</a></li>
1565 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/standard">standard (
74)
</a></li>
1567 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (
7)
</a></li>
1569 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (
14)
</a></li>
1571 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (
65)
</a></li>
1573 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (
5)
</a></li>
1575 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/usenix">usenix (
2)
</a></li>
1577 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/valg">valg (
9)
</a></li>
1579 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (
20)
</a></li>
1581 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/video">video (
79)
</a></li>
1583 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (
4)
</a></li>
1585 <li><a href=
"https://people.skolelinux.org/pere/blog/tags/web">web (
42)
</a></li>
1591 <p style=
"text-align: right">
1592 Created by
<a href=
"http://steve.org.uk/Software/chronicle">Chronicle v4.6
</a>