]> pere.pagekite.me Git - homepage.git/blob - blog/index.rss
Generated.
[homepage.git] / blog / index.rss
1 <?xml version="1.0" encoding="utf-8"?>
2 <rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:atom="http://www.w3.org/2005/Atom">
3 <channel>
4 <title>Petter Reinholdtsen</title>
5 <description></description>
6 <link>https://people.skolelinux.org/pere/blog/</link>
7 <atom:link href="https://people.skolelinux.org/pere/blog/index.rss" rel="self" type="application/rss+xml" />
8
9 <item>
10 <title>Welcome out of prison, Mickey, hope you find some freedom!</title>
11 <link>https://people.skolelinux.org/pere/blog/Welcome_out_of_prison__Mickey__hope_you_find_some_freedom_.html</link>
12 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/Welcome_out_of_prison__Mickey__hope_you_find_some_freedom_.html</guid>
13 <pubDate>Wed, 1 Jan 2025 20:45:00 +0100</pubDate>
14 <description>&lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://people.skolelinux.org/pere/blog/images/2024-01-01-mikke-verk-i-det-fri.jpeg&quot;/&gt;&lt;/p&gt;
15
16 &lt;p&gt;Today, the animation figure Mickey Mouse finally was released from
17 the corporate copyright prison, as the 1928 movie
18 &lt;a href=&quot;https://en.wikipedia.org/wiki/Steamboat_Willie&quot;&gt;Steamboat
19 Willie&lt;/a&gt; entered the public domain in USA. This movie was the first
20 public appearance of Mickey Mouse. Sadly the figure is still on
21 probation, thanks to trademark laws and a the Disney corporations
22 powerful pack of lawyers, as described in the 2017 article
23 in &lt;a href=&quot;https://priceonomics.com/how-mickey-mouse-evades-the-public-domain/&quot;&gt;&quot;How
24 Mickey Mouse Evades the Public Domain&quot;&lt;/a&gt; from Priceonomics. On the
25 positive side, the primary driver for repeated extentions of the
26 duration of copyright has been Disney thanks to Mickey Mouse and the
27 2028 movie, and as it now in the public domain I hope it will cause
28 less urge to extend the already unreasonable long copyright
29 duration.&lt;/p&gt;
30
31 &lt;p&gt;The first book I published, the 2004 book &lt;a
32 href=&quot;https://free-culture.cc/&quot;&gt;&quot;Free Culture&quot; by Lawrence Lessig&lt;/a&gt;,
33 &lt;a href=&quot;https://people.skolelinux.org/pere/publisher/#frikultur&quot;&gt;published
34 2015 in English, French and Norwegian Bokmål&lt;/a&gt;, touch on the story
35 of Disney pushed for extending the copyright duration in USA. It is a
36 great book explaining problems with the current copyright regime and
37 why we need Creative Commons movement, and I strongly recommend
38 everyone to read it.&lt;/p&gt;
39
40 &lt;p&gt;This movie (with
41 &lt;a href=&quot;https://www.imdb.com/title/tt0019422/&quot;&gt;IMDB ID tt0019422&lt;/a&gt;)
42 is now available from the Internet Archive. Two copies have been
43 uploaded so far, one uploaded
44 &lt;a href=&quot;https://archive.org/details/SteamboatWillie&quot;&gt;2015-11-04&lt;/a&gt;
45 (&lt;a href=&quot;https://archive.org/download/SteamboatWillie/SteamboatWillie_archive.torrent&quot;&gt;torrent&lt;/a&gt;)
46 and the other
47 &lt;a href=&quot;https://archive.org/details/steamboat-willie-mickey&quot;&gt;2023-01-01&lt;/a&gt;
48 (&lt;a href=&quot;https://archive.org/download/steamboat-willie-mickey/steamboat-willie-mickey_archive.torrent&quot;&gt;torrent&lt;/a&gt;).
49 I am very happy to see
50 &lt;a href=&quot;https://people.skolelinux.org/pere/blog/Legal_to_share_more_than_16_000_movies_listed_on_IMDB_.html&quot;&gt;the
51 number of public domain movies&lt;/a&gt; increasing. I look forward to
52 when those are the majority. Perhaps it will reduce the urge of the
53 copyright industry to control its customers.&lt;/p&gt;
54
55 &lt;p&gt;A more
56 &lt;a href=&quot;https://publicdomainreview.org/features/entering-the-public-domain/2024/&quot;&gt;comprehensive
57 list of works entering the public domain in 2024&lt;/a&gt; is available from
58 the Public Domain Review.&lt;/p&gt;
59
60 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
61 activities, please send Bitcoin donations to my address
62 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
63 </description>
64 </item>
65
66 <item>
67 <title>VLC bittorrent plugin still going strong, new upload 2.14-4</title>
68 <link>https://people.skolelinux.org/pere/blog/VLC_bittorrent_plugin_still_going_strong__new_upload_2_14_4.html</link>
69 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/VLC_bittorrent_plugin_still_going_strong__new_upload_2_14_4.html</guid>
70 <pubDate>Sun, 31 Dec 2023 10:45:00 +0100</pubDate>
71 <description>&lt;p&gt;The other day I uploaded a new version of
72 &lt;a href=&quot;https://tracker.debian.org/pkg/vlc-plugin-bittorrent&quot;&gt;the VLC
73 bittorrent plugin&lt;/a&gt; to Debian, version 2.14-4, to fix a few
74 packaging issues. This plugin extend VLC allowing it to stream videos
75 directly from a bittorrent source using both torrent files and magnet
76 links, as easy as using a HTTP or local file source. I believe such
77 protocol support is a vital feature in VLC, allowing efficient
78 streaming from sources such at the 11 million movies in
79 &lt;a href=&quot;https://archive.org/&quot;&gt;the Internet Archive&lt;/a&gt;. Bittorrent is
80 one of the most efficient content distribution protocols on the
81 Internet, without centralised control, and should be used more.&lt;/p&gt;
82
83 &lt;p&gt;The new version is now both in Debian Unstable and Testing, as well
84 as Ubuntu. While looking after the package, I decided to ask the VLC
85 upstream community if there was any hope to get Bittorrent support
86 into the official VLC program, and was very happy to learn that
87 someone is already working on it. I hope we can see some fruits of
88 that labour next year, but do not hold my breath. In the mean time we
89 can use the plugin, which is already
90 &lt;a href=&quot;https://qa.debian.org/popcon.php?package=vlc-plugin-bittorrent&quot;&gt;installed
91 by 0.23 percent of the Debian population&lt;/a&gt; according to
92 popularity-contest. It could use a new upstream release, and I hope
93 the upstream developer soon find time to polish it even more.&lt;/p&gt;
94
95 &lt;p&gt;It is worth noting that the plugin store the downloaded files in
96 &lt;tt&gt;~/Downloads/vlc-bittorrent/&lt;/tt&gt;, which can quickly fill up the
97 user home directory during use. Users of the plugin should keep an
98 eye with disk usage when streaming a bittorrent source.&lt;/p&gt;
99
100 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
101 activities, please send Bitcoin donations to my address
102 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
103 </description>
104 </item>
105
106 <item>
107 <title>«Når «på» blir «pÃ¥»: Et reservoar av tegn sett fra depotet» i tidsskriftet Aksess</title>
108 <link>https://people.skolelinux.org/pere/blog/_N_r__p___blir__p_____Et_reservoar_av_tegn_sett_fra_depotet__i_tidsskriftet_Aksess.html</link>
109 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/_N_r__p___blir__p_____Et_reservoar_av_tegn_sett_fra_depotet__i_tidsskriftet_Aksess.html</guid>
110 <pubDate>Wed, 15 Nov 2023 09:20:00 +0100</pubDate>
111 <description>&lt;p&gt;For noen uker siden skrev en kamerat og meg
112 &lt;a href=&quot;https://www.aksess-tidsskrift.no/fordypning/175530&quot;&gt;en
113 artikkel om tegnsett&lt;/a&gt; i
114 &lt;a href=&quot;https://www.aksess-tidsskrift.no/&quot;&gt;arkivtidsskriftet
115 Aksess&lt;/a&gt; både på web og i papirutgave nr. 3 2023. Her er det som
116 nettopp ble publisert.&lt;/p&gt;
117
118 &lt;blockquote&gt;
119
120 &lt;p&gt;&lt;strong&gt;Når «på» blir «pÃ¥»: Et reservoar av tegn sett fra
121 depotet&lt;/strong&gt;&lt;/p&gt;
122
123 &lt;p&gt;av Thomas Sødring og Petter Reinholdtsen&lt;/p&gt;
124
125 &lt;p&gt;De færreste av oss tenker over hva som skjer dypere i datamaskinen
126 mens vi sitter der og skriver noe på tastaturet. Når du trykker på
127 tasten «Å», så vises bokstaven Å. Men noen ganger blir det
128 feil. Hvorfor det – og hva er viktig å være klar over i
129 arkivsammenheng?&lt;/p&gt;
130
131 &lt;p&gt;Dersom bokstaver tolkes forskjellig mellom systemer, blir det fort
132 rot, dette kalles mojibake blant kjennere, etter det japanske
133 uttrykket for tegnomforming. Det er en lang historie her som tidvis
134 har vært preget av rot. Noen husker kanskje tilbake til en tid der
135 bokstavene æ, ø og å ofte var ødelagt i e-poster – et klassisk
136 eksempel på tegnsettproblemstilling.&lt;/p&gt;
137
138 &lt;p id=&quot;tegnsett_access_nå_og_før&quot;&gt;&lt;strong&gt;«Nå» og «før»&lt;/strong&gt;&lt;/p&gt;
139
140 &lt;p&gt;Tid er et skjult problem for depot fordi vi danner dokumentasjon i
141 en kontekst som er preget av å være «nå». Vår forståelse av verden og
142 bruken av teknologi er utgangspunktet for denne konteksten. Tenk selv
143 hvordan verden har utviklet seg de siste 20 årene, hva samfunnet er
144 opptatt av, og hvordan vi bruker teknologi i hverdagen. Tid er et
145 skjult problem fordi når vi trekker dokumentasjon ut av systemer og
146 deponerer for langtidsbevaring, er konteksten til materialet «nå», men
147 verden går videre. Ettersom teknologien og måten vi bruker den på,
148 utvikler seg, blir «nå» til «før», og dokumentasjonen befinner seg
149 snart i en «før»-kontekst.&lt;/p&gt;
150
151 &lt;p&gt;Dette med «før» og «nå» i forhold til dokumentasjonens kontekst er
152 noe vi er veldig lite bevisste på, men det er en problemstilling
153 depotarkivene eier og forvalter. En av disse utfordringene er hvorfor
154 «Ø» ikke nødvendigvis er det samme som «Ø», og hvorfor det i det hele
155 tatt gir mening å si noe sånt. Vi snakker her om noe som heter
156 tegnsett, som er en avtalt måte å representere bokstaver, tall og
157 andre symboler på slik at vi på en feilfri måte kan utveksle tekst
158 mellom datasystemer.&lt;/p&gt;
159
160 &lt;p&gt;Tegnsettproblemstillingen er satt sammen av fire fasetter;
161 repertoar, representasjon, koding og uttegning.&lt;/p&gt;
162
163 &lt;p id=&quot;tegnsett_access_repertoarer&quot;&gt;&lt;strong&gt;Repertoarer&lt;/strong&gt;&lt;/p&gt;
164
165 &lt;p&gt;Repertoar er en samling med tegn og symboler som kan
166 representeres. Tenk norsk alfabet eller japanske piktogrammer, men
167 også matematiske og elektroniske symboler. Bokstaven «stor a» kan være
168 en oppføring i et slikt repertoar. For å kunne brukes i en datamaskin
169 trenger hver oppføring i et slikt repertoar en representasjon, hvilket
170 i datamaskinsammenheng betyr at det tilordnes et tall. Tallet kan
171 lagres på ulike vis i en eller flere kodingsformater. For eksempel kan
172 en skrive tallet ti som både 10, X og A, i henholdsvis
173 titallssystemet, romertallssystemet og sekstentallssystemet.&lt;/p&gt;
174
175 &lt;p&gt;Hvis en skal kunne lese inn filer og vite hvilket tall og hvilken
176 representasjon og instans i et repertoar det er snakk om, så må en
177 vite hvordan tallet er kodet. Sist, men ikke minst, for å kunne bruke
178 symbolet til noe må det kunne være kjent hvordan det skal se ut eller
179 tegnes på ark. Det finnes utallige skrifttyper med norske bokstaver,
180 alle litt forskjellige, og skal en kunne tegne en stor A på skjermen,
181 så må datamaskinen vite hva den skal tegne. Skrifttyper inneholder
182 informasjon om hvordan ulike tall skal tegnes. De inneholder ikke
183 alltid alle symbolene som er brukt i en tekst, hvilket gjør at ikke
184 alle forståtte tegn vil kunne vises på skjerm eller ark.&lt;/p&gt;
185
186 &lt;p&gt;Hver av disse fasettene må være avklart for å kunne ta vare på og vise
187 frem tekst med en datamaskin. Kombinasjon av repertoar, representasjon
188 og koding er det en kaller et tegnsett. Kombinasjonen av
189 representasjon og uttegning kalles en skrifttype. De fleste
190 skrifttyper har også informasjon om repertoar, men det finnes
191 skrifttyper som kun kobler mellom tallkode og uttegning, uten å
192 fortelle noe om hvordan tallkodene egentlig skal tolkes.&lt;/p&gt;
193
194 &lt;p id=&quot;tegnsett_access_fra_ascii_til_iso_8859&quot;&gt;&lt;strong&gt;Fra ASCII til ISO-8859&lt;/strong&gt;&lt;/p&gt;
195
196 &lt;p&gt;Vi begynner historien med ASCII (American Standard Code for
197 Information Interchange) som har en historie som spores tilbake til
198 1963. Utgangspunktet til ASCII var at det kunne kode opp til 128
199 forskjellige symboler i vanlig bruk i USA. De visuelle symbolene i
200 ASCII er de små og store bokstavene (a til z og A til Z), tall (0 til
201 9) og tegnsettingssymboler (for eksempel semikolon, komma og
202 punktum). ASCII har også noen usynlige symboler som ble brukt for
203 bl.a. kommunikasjon. Før ASCII var det for eksempel teleks-tegnsett
204 med plass til bare 32 tegn og EBCDIC med plass til 256 tegn, alle med
205 en helt annen rekkefølge på symbolene enn ASCII, men de har vært lite
206 brukt de siste femti årene. Et eksempel på noen utvalgte symboler i
207 repertoaret til ASCII vises i tabell 1.&lt;/p&gt;
208
209 &lt;table align=&quot;center&quot; width=&quot;50%&quot;&gt;
210
211 &lt;caption&gt;Tabell 1. Eksempel på utvalgte symboler hentet fra
212 ASCII-tegnsettet. Kolonnen «Binær» viser symbolets verdi i
213 totallssystemet (1 og 0 tall), mens kolonnen «Desimal» viser symbolets
214 verdi i titallssystemet.&lt;/caption&gt;
215
216 &lt;tbody&gt;
217 &lt;tr&gt;
218 &lt;th&gt;Grafisk&lt;/th&gt;
219 &lt;th&gt;Binær&lt;/th&gt;
220 &lt;th&gt;Desimal&lt;/th&gt;
221 &lt;/tr&gt;
222 &lt;tr&gt;
223 &lt;td&gt;A&lt;/td&gt;
224 &lt;td&gt;1000001&lt;/td&gt;
225 &lt;td align=&quot;right&quot;&gt;65&lt;/td&gt;
226 &lt;/tr&gt;
227 &lt;tr&gt;
228 &lt;td&gt;M&lt;/td&gt;
229 &lt;td&gt;1001101&lt;/td&gt;
230 &lt;td align=&quot;right&quot;&gt;77&lt;/td&gt;
231 &lt;/tr&gt;
232 &lt;tr&gt;
233 &lt;td&gt;Z&lt;/td&gt;
234 &lt;td&gt;1011010&lt;/td&gt;
235 &lt;td align=&quot;right&quot;&gt;90&lt;/td&gt;
236 &lt;/tr&gt;
237 &lt;tr&gt;
238 &lt;td&gt;a&lt;/td&gt;
239 &lt;td&gt;1100001&lt;/td&gt;
240 &lt;td align=&quot;right&quot;&gt;97&lt;/td&gt;
241 &lt;/tr&gt;
242 &lt;tr&gt;
243 &lt;td&gt;m&lt;/td&gt;
244 &lt;td&gt;1101101&lt;/td&gt;
245 &lt;td align=&quot;right&quot;&gt;109&lt;/td&gt;
246 &lt;/tr&gt;
247 &lt;tr&gt;
248 &lt;td&gt;z&lt;/td&gt;
249 &lt;td&gt;1111010&lt;/td&gt;
250 &lt;td align=&quot;right&quot;&gt;122&lt;/td&gt;
251 &lt;/tr&gt;
252 &lt;tr&gt;
253 &lt;td&gt;0&lt;/td&gt;
254 &lt;td&gt;0110000&lt;/td&gt;
255 &lt;td align=&quot;right&quot;&gt;48&lt;/td&gt;
256 &lt;/tr&gt;
257 &lt;tr&gt;
258 &lt;td&gt;9&lt;/td&gt;
259 &lt;td&gt;0111001&lt;/td&gt;
260 &lt;td align=&quot;right&quot;&gt;58&lt;/td&gt;
261 &lt;/tr&gt;
262 &lt;tr&gt;
263 &lt;td&gt;;&lt;/td&gt;
264 &lt;td&gt;0111011&lt;/td&gt;
265 &lt;td align=&quot;right&quot;&gt;59&lt;/td&gt;
266 &lt;/tr&gt;
267 &lt;/tbody&gt;
268 &lt;/table&gt;
269
270 &lt;p&gt;Det opprinnelige ASCII-tegnsettet ble også omtalt som ASCII-7 og
271 brukte 7 bits (0 og 1) for å representere symboler. Datamaskiner er
272 ofte konfigurert til å jobbe med enheter der bits er gruppert som 4
273 eller 8 bits . Det lå en mulighet i å ta i bruk bit åtte. En slik
274 endring ville gjøre det mulig for datamaskiner å øke antall symboler
275 de kunne representere, noe som ga en økning fra 128 forskjellige
276 symboler til 256 forskjellige symboler. Det ble åpnet for å innlemme
277 de nordiske bokstavene sammen med ASCII, og dette ble etter hvert
278 standardisert som ISO-8859-1. Tabell 2 viser deler av ISO-8859-1 som
279 støtter de norske bokstavene.&lt;/p&gt;
280
281 &lt;p&gt;Det sier seg selv at muligheten til å representere inntil 256 symboler
282 ikke holder når vi snakker om en global verden, og det ble gjort et
283 standardiseringsløp som tok utgangspunkt i ASCII-7 med en utvidelse
284 til å bruke den åttende biten for ulike språkgrupper. Denne standarden
285 heter ISO-8859 og er inndelt i opptil 16 varianter, altså fra
286 ISO-8859-1 til ISO-8859-16.&lt;/p&gt;
287
288 &lt;table align=&quot;center&quot; width=&quot;50%&quot;&gt;
289
290 &lt;caption&gt;Tabell 2. Koding av de norske symbolene slik de er definert i
291 ISO-8859-1 tegnsettet.&lt;/caption&gt;
292
293 &lt;tbody&gt;
294 &lt;tr&gt;
295 &lt;th&gt;Grafisk&lt;/th&gt;
296 &lt;th&gt;Binær&lt;/th&gt;
297 &lt;th&gt;Desimal&lt;/th&gt;
298 &lt;/tr&gt;
299 &lt;tr&gt;
300 &lt;td&gt;Æ&lt;/td&gt;
301 &lt;td&gt;11000110&lt;/td&gt;
302 &lt;td align=&quot;right&quot;&gt;198&lt;/td&gt;
303 &lt;/tr&gt;
304 &lt;tr&gt;
305 &lt;td&gt;Ø&lt;/td&gt;
306 &lt;td&gt;11011000&lt;/td&gt;
307 &lt;td align=&quot;right&quot;&gt;216&lt;/td&gt;
308 &lt;/tr&gt;
309 &lt;tr&gt;
310 &lt;td&gt;Å&lt;/td&gt;
311 &lt;td&gt;11000101&lt;/td&gt;
312 &lt;td align=&quot;right&quot;&gt;197&lt;/td&gt;
313 &lt;/tr&gt;
314 &lt;tr&gt;
315 &lt;td&gt;æ&lt;/td&gt;
316 &lt;td&gt;11100110&lt;/td&gt;
317 &lt;td align=&quot;right&quot;&gt;230&lt;/td&gt;
318 &lt;/tr&gt;
319 &lt;tr&gt;
320 &lt;td&gt;ø&lt;/td&gt;
321 &lt;td&gt;11111000&lt;/td&gt;
322 &lt;td align=&quot;right&quot;&gt;248&lt;/td&gt;
323 &lt;/tr&gt;
324 &lt;tr&gt;
325 &lt;td&gt;å&lt;/td&gt;
326 &lt;td&gt;11100101&lt;/td&gt;
327 &lt;td align=&quot;right&quot;&gt;229&lt;/td&gt;
328 &lt;/tr&gt;
329 &lt;/tbody&gt;
330 &lt;/table&gt;
331
332 &lt;p&gt;Norske tegn er definert i ISO-8859-1, som også omtales som Latin 1, de
333 fleste samiske tegn er definert i ISO-8859-4 (Latin 4) mens tilgang
334 til €-symbolet kom med ISO-8859-15 (Latin 9). ISO-8859-15 er en
335 revisjon av ISO-8859-1 som fjerner noen lite brukte symboler og
336 erstatter bokstaver som er mer brukt, og introduserer €-symbolet. Det
337 er viktig å merke at alle ISO-8859-variantene har overlapp med
338 ASCII-7, noe som ga samvirke med de engelskspråklige landene som ikke
339 trengte å gjøre noe. Det innebærer også at de første 128 verdiene i
340 ISO-8859-variantene representerer de samme symbolene. Det er først når
341 du kommer til tolkningen av de resterende 128 verdiene med nummer 128
342 til 255, at det oppsto tolkningsutfordringer mellom
343 ISO-8859-variantene.&lt;/p&gt;
344
345 &lt;p&gt;ISO-8859-verdenen fungerte godt så lenge tegnsettet som ble brukt når
346 innhold ble skapt, også ble brukt når innhold ble gjengitt og du ikke
347 trengte å kombinere innhold fra forskjellige tegnsett i samme
348 dokument. Utfordringen med bruken av ISO-8859-variantene ble raskt
349 tydelig i en mer globalisert verden med utveksling av tekst på tvers
350 av landegrenser der tekstlig innhold i dokumenter, e-poster og
351 websider kunne bli skrevet med ett tegnsett og gjengitt med et annet
352 tegnsett.&lt;/p&gt;
353
354 &lt;table align=&quot;center&quot; width=&quot;60%&quot;&gt;
355
356 &lt;caption&gt;Tabell 3. Viser tolkning av verdiene som er tilegnet de
357 norske symbolene i ISO-8859-1 i de andre ISO 8859-variatene. Merk
358 ISO-8859-12 ikke finnes da arbeidet ble avsluttet.&lt;sup&gt;[&lt;a id=&quot;tegnsett_access_footnoteref_1&quot; href=&quot;#tegnsett_access_footnotedef_1&quot; title=&quot;View footnote.&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt;&lt;/caption&gt;
359
360 &lt;tbody&gt;
361 &lt;tr&gt;
362 &lt;th&gt;Binærverdi&lt;/th&gt;
363 &lt;th&gt;1&lt;/th&gt;
364 &lt;th&gt;2&lt;/th&gt;
365 &lt;th&gt;3&lt;/th&gt;
366 &lt;th&gt;4&lt;/th&gt;
367 &lt;th&gt;5&lt;/th&gt;
368 &lt;th&gt;6&lt;/th&gt;
369 &lt;th&gt;7&lt;/th&gt;
370 &lt;th&gt;8&lt;/th&gt;
371 &lt;th&gt;9&lt;/th&gt;
372 &lt;th&gt;10&lt;/th&gt;
373 &lt;th&gt;11&lt;/th&gt;
374 &lt;th&gt;13&lt;/th&gt;
375 &lt;th&gt;14&lt;/th&gt;
376 &lt;th&gt;15&lt;/th&gt;
377 &lt;th&gt;16&lt;/th&gt;
378 &lt;/tr&gt;
379 &lt;tr&gt;
380 &lt;td&gt;11000110&lt;/td&gt;
381 &lt;td&gt;Æ&lt;/td&gt;
382 &lt;td&gt;Ć&lt;/td&gt;
383 &lt;td&gt;Ĉ&lt;/td&gt;
384 &lt;td&gt;Æ&lt;/td&gt;
385 &lt;td&gt;Ц&lt;/td&gt;
386 &lt;td&gt;ئ&lt;/td&gt;
387 &lt;td&gt;Ζ&lt;/td&gt;
388 &lt;td&gt;&lt;/td&gt;
389 &lt;td&gt;Æ&lt;/td&gt;
390 &lt;td&gt;Æ&lt;/td&gt;
391 &lt;td&gt;&lt;/td&gt;
392 &lt;td&gt;Ę&lt;/td&gt;
393 &lt;td&gt;Æ&lt;/td&gt;
394 &lt;td&gt;Æ&lt;/td&gt;
395 &lt;td&gt;Æ&lt;/td&gt;
396 &lt;/tr&gt;
397 &lt;tr&gt;
398 &lt;td&gt;11011000&lt;/td&gt;
399 &lt;td&gt;Ø&lt;/td&gt;
400 &lt;td&gt;Ř&lt;/td&gt;
401 &lt;td&gt;Ĝ&lt;/td&gt;
402 &lt;td&gt;Ø&lt;/td&gt;
403 &lt;td&gt;и&lt;/td&gt;
404 &lt;td&gt;ظ&lt;/td&gt;
405 &lt;td&gt;Ψ&lt;/td&gt;
406 &lt;td&gt;&lt;/td&gt;
407 &lt;td&gt;Ø&lt;/td&gt;
408 &lt;td&gt;Ø&lt;/td&gt;
409 &lt;td&gt;&lt;/td&gt;
410 &lt;td&gt;Ų&lt;/td&gt;
411 &lt;td&gt;Ø&lt;/td&gt;
412 &lt;td&gt;Ø&lt;/td&gt;
413 &lt;td&gt;Ű&lt;/td&gt;
414 &lt;/tr&gt;
415 &lt;tr&gt;
416 &lt;td&gt;11000101&lt;/td&gt;
417 &lt;td&gt;Å&lt;/td&gt;
418 &lt;td&gt;Ĺ&lt;/td&gt;
419 &lt;td&gt;Ċ&lt;/td&gt;
420 &lt;td&gt;Å&lt;/td&gt;
421 &lt;td&gt;Х&lt;/td&gt;
422 &lt;td&gt;إ&lt;/td&gt;
423 &lt;td&gt;Ε&lt;/td&gt;
424 &lt;td&gt;&lt;/td&gt;
425 &lt;td&gt;Å&lt;/td&gt;
426 &lt;td&gt;Å&lt;/td&gt;
427 &lt;td&gt;&lt;/td&gt;
428 &lt;td&gt;Å&lt;/td&gt;
429 &lt;td&gt;Å&lt;/td&gt;
430 &lt;td&gt;Å&lt;/td&gt;
431 &lt;td&gt;Ć&lt;/td&gt;
432 &lt;/tr&gt;
433 &lt;tr&gt;
434 &lt;td&gt;11100110&lt;/td&gt;
435 &lt;td&gt;æ&lt;/td&gt;
436 &lt;td&gt;ć&lt;/td&gt;
437 &lt;td&gt;ĉ&lt;/td&gt;
438 &lt;td&gt;æ&lt;/td&gt;
439 &lt;td&gt;ц&lt;/td&gt;
440 &lt;td&gt;ن&lt;/td&gt;
441 &lt;td&gt;ζ&lt;/td&gt;
442 &lt;td&gt;ז&lt;/td&gt;
443 &lt;td&gt;æ&lt;/td&gt;
444 &lt;td&gt;æ&lt;/td&gt;
445 &lt;td&gt;&lt;/td&gt;
446 &lt;td&gt;ę&lt;/td&gt;
447 &lt;td&gt;æ&lt;/td&gt;
448 &lt;td&gt;æ&lt;/td&gt;
449 &lt;td&gt;v&lt;/td&gt;
450 &lt;/tr&gt;
451 &lt;tr&gt;
452 &lt;td&gt;11111000&lt;/td&gt;
453 &lt;td&gt;ø&lt;/td&gt;
454 &lt;td&gt;ř&lt;/td&gt;
455 &lt;td&gt;ĝ&lt;/td&gt;
456 &lt;td&gt;ø&lt;/td&gt;
457 &lt;td&gt;ј&lt;/td&gt;
458 &lt;td&gt;&lt;/td&gt;
459 &lt;td&gt;ψ&lt;/td&gt;
460 &lt;td&gt;ר&lt;/td&gt;
461 &lt;td&gt;ø&lt;/td&gt;
462 &lt;td&gt;ø&lt;/td&gt;
463 &lt;td&gt;&lt;/td&gt;
464 &lt;td&gt;ų&lt;/td&gt;
465 &lt;td&gt;ø&lt;/td&gt;
466 &lt;td&gt;ø&lt;/td&gt;
467 &lt;td&gt;ű&lt;/td&gt;
468 &lt;/tr&gt;
469 &lt;tr&gt;
470 &lt;td&gt;11100101&lt;/td&gt;
471 &lt;td&gt;å&lt;/td&gt;
472 &lt;td&gt;ĺ&lt;/td&gt;
473 &lt;td&gt;ċ&lt;/td&gt;
474 &lt;td&gt;å&lt;/td&gt;
475 &lt;td&gt;х&lt;/td&gt;
476 &lt;td&gt;م&lt;/td&gt;
477 &lt;td&gt;ε&lt;/td&gt;
478 &lt;td&gt;ו&lt;/td&gt;
479 &lt;td&gt;å&lt;/td&gt;
480 &lt;td&gt;å&lt;/td&gt;
481 &lt;td&gt;&lt;/td&gt;
482 &lt;td&gt;å&lt;/td&gt;
483 &lt;td&gt;å&lt;/td&gt;
484 &lt;td&gt;å&lt;/td&gt;
485 &lt;td&gt;ć&lt;/td&gt;
486 &lt;/tr&gt;
487 &lt;/tbody&gt;
488 &lt;/table&gt;
489
490 &lt;p&gt;Denne problemstillingen er illustrert i tabell 3, der vi ser verdiene
491 tilegnet de norske symbolene i ISO-8859-1 i kolonne «1». I de øvrige
492 kolonnene ser vi hvilket symbol verdien får i de andre
493 ISO-8859-variantene. Tar vi utgangspunkt i tabell 3, kan vi se at
494 ordet lærlingspørsmål gjengitt med ISO-8859-2 (kolonne 2) blir
495 lćrlingspřrsmĺl, mens det blir lζrlingspψrsmεl med ISO- 8859-7
496 (kolonne 7). Med ISO-8859-2 blir «æ» til «ć», «ø» til «ř» og «å» til
497 «ĺ». I ISO-8859-7 blir «æ» til «ζ», «ø» til «ψ», mens «å» blir «ε».&lt;/p&gt;
498
499 &lt;p&gt;Det er egentlig ingen utfordring med dette så lenge du vet hvilket
500 tegnsett innholdet ditt er representert med, og det ikke har skjedd
501 omforminger som du ikke er klar over. Det er det siste som er
502 problematisk, spesielt de datasystemene som har vært i bruk de siste
503 20 årene, som ikke har noe innebygd funksjonalitet for å forvalte
504 tegnsettproblematikken. Et godt eksempel på dette er
505 Microsoft-tegnsettet Windows-1252, som ble forvekslet som 100 %
506 kompatibel med ISO-8859-1, men hadde byttet ut plassene fra 127 til
507 159. Historisk vil det finnes en del variasjon i hvilket tegnsett som
508 har vært i bruk, og hvor vellykket konvertering mellom tegnsett har
509 vært.&lt;/p&gt;
510
511 &lt;p id=&quot;tegnsett_access_unicode_som_løsning&quot;&gt;&lt;strong&gt;Unicode som løsning&lt;/strong&gt;&lt;/p&gt;
512
513 &lt;p&gt;Tegnsettforvirring ble etter hvert et irritasjonsmoment og
514 samvirkeproblem. Ofte fikk man en e-post der æøå var erstattet av rare
515 symboler fordi e-posten hadde vært innom et eller annet datasystem som
516 ikke brukte samme tegnsett.&lt;/p&gt;
517
518 &lt;p&gt;For å løse dette samvirkeproblemet for tegnsett ble det startet et
519 arbeid og en ny standard så dagens lys etter hvert. Denne standarden
520 fikk navnet Unicode (ISO/ IEC 10646) og skulle resultere i et tegnsett
521 som alle skulle være enige om. Unicode er et repertoar og en
522 representasjon, dvs. navngivning og tilordning av tallverdi til alle
523 symboler i bruk i verden i dag. Oppføringer i Unicode skrives gjerne
524 U+XXXX der XXXX er tallkoden i sekstentallssystemet som oppføringen
525 har i Unicode-katalogen. Her finner vi tegn brukt av både levende og
526 døde språk, konstruerte språk, tekniske symboler, morsomme tegninger
527 (såkalte emojier) og tegn ingen vet hva betyr eller skal brukes
528 til. Et morsomt eksempel er i nettartikkelen: U+237C ⍼ RIGHT ANGLE
529 WITH DOWNWARDS ZIGZAG ARROW, av Jonathan Chan.&lt;sup&gt;[&lt;a id=&quot;tegnsett_access_footnoteref_2&quot; href=&quot;#tegnsett_access_footnotedef_2&quot; title=&quot;View footnote.&quot;&gt;2&lt;/a&gt;]&lt;/sup&gt;&lt;/p&gt;
530
531 &lt;p&gt;Sammen med Unicode kom det tre måter å kode disse tallene på; UTF-8,
532 UTF-16 og UTF-32. Av datatekniske årsaker er UTF-8 mye brukt, spesielt
533 når det gjelder utveksling av tekst over Internett, mens UTF-16 er
534 brukt en del til tekstfiler lagret på Windows. En utfordring med
535 Unicode og UTF-variantene er at disse gir flere måter å kode samme
536 symbol på med en kombinasjonsmekanisme. Dette kan gi utfordringer ved
537 søk, hvis en skal søke etter et ord som har ett eller flere symboler
538 som kan skrives på ulikt vis, så er det ikke sikkert at søkesystemet
539 vil finne alle forekomster. For eksempel kan bokstaven U+00F8 «Latin
540 Small Letter O with Stroke» kodes som den tradisjonelle norske tegnet
541 ø, men også som o kombinert med skråstrek U+0338. Begge deler er
542 gyldig bruk av Unicode, selv om det er tradisjon for å foretrekke å
543 «normalisere» kombinasjoner som enkelttegn der det er mulig, nettopp
544 for å forenkle søk.&lt;/p&gt;
545
546 &lt;p id=&quot;tegnsett_access_bare_unicode_fremover&quot;&gt;&lt;strong&gt;Bare Unicode fremover&lt;/strong&gt;&lt;/p&gt;
547
548 &lt;p&gt;Forvaltningens bruk av tegnsett er regulert i Forskrift om
549 IT-standarder i offentlig forvaltning&lt;sup&gt;[&lt;a id=&quot;tegnsett_access_footnoteref_3&quot; href=&quot;#tegnsett_access_footnotedef_3&quot; title=&quot;View footnote.&quot;&gt;3&lt;/a&gt;]&lt;/sup&gt;. Her står det: «Ved all
550 utveksling av informasjon mellom forvaltningsorganer og fra
551 forvaltningsorgan til innbyggere og næringsliv skal tegnsettstandarden
552 ISO/IEC 10646 representert ved UTF8 benyttes.» Det er forskjellige
553 bruksområder til UTF-8, UTF-16 og UTF-32, men UTF-8 er kodingen vi
554 kjenner mest til. Det er flere grunner at UTF-8 «vant» konkurransen
555 til å bli den utvalgte. Den kanskje viktigste er at UTF-8 er fullt
556 samvirkende med ASCII-7, slik at den engelskspråklige delen av verden
557 kunne rulle ut UTF-8 uten å merke noe forskjell. En tekstfil med kun
558 ASCII-tekst vil være identisk på disken hvis den lagres som UTF-8 og
559 ASCII. UTF-16 og UTF-32 byr på noen optimaliseringer som gjør dem
560 relevant for spesifikke problemområder, men for det meste vil vi aldri
561 oppleve disse standardene på nært hold i hverdagen. Det er uansett kun
562 bruken av UTF-8 som er lovregulert i Norge.&lt;/p&gt;
563
564 &lt;p&gt;Det er ikke slik at hele verden bruker ISO/IEC 10646 og UTF-8. Kina
565 har egne standarder for tegnsett, mye brukt er GB 18030, som er
566 Unicode med en annen koding enn UTF-8, mens Taiwan og andre asiatiske
567 land gjerne bruker Big5 eller andre tegnsett.&lt;/p&gt;
568
569 &lt;p&gt;UTF-8 er dominerende i Norge, men det er tidsperioder der forskjellige
570 datasystemer utvekslet data i henhold til ISO-8859-1, ISO-8859-15,
571 Windows-1252, Codepage 865 og ISO-646-60 / Codepage 1016 mens
572 overgangen til UTF-8 pågikk. Det er ikke slik at et datasystem enkelt
573 kan tvinges til å bruke et tegnsett, da det er flere lag i et
574 datasystem som må settes opp til å bruke riktig tegnsett, og
575 tegnsettproblemet fort oppstår når det er et eller annet i
576 datasystemet som bruker feil tegnsett.&lt;/p&gt;
577
578 &lt;p&gt;Et klassisk eksempel på problemet er en utveksling av tekst mellom to
579 systemer der teksten i utgangspunktet er kodet i UTF-8, men går
580 gjennom noe som er ISO-8859-1 underveis. Dette kan vises med at ordet
581 «på» i et slik scenario ender opp som «pÃ¥». Det er mulig å spore
582 dette tilbake til verdiene symbolene er tilordnet i tegnsettene. «på»
583 blir til «pÃ¥» fordi «å» i UTF-8 er representert med U+C3AF, og dersom
584 vi ser på hva disse verdiene representerer, ser vi at
585 sekstentallssystemverdien C3 er 1100 0011 i totallssystemet og
586 symbolet med dette tallet i ISO-8859-1 er Ã.&lt;/p&gt;
587
588 &lt;p&gt;Vi ser det samme med sekstentallssystemverdien A5, som er 1010 0101 i
589 totallssystemet, og tilsvarende symbol i ISO-8859-1 er ¥. Slik
590 mojibake kan lett skje hvis «på» i utgangspunktet var representert med
591 UTF-8, men ble behandlet med et system som bruker ISO-8859-1. Det er
592 ingen automatikk i å fange opp slike ødeleggelser mens tekstlig
593 innhold utveksles mellom datasystemer.&lt;/p&gt;
594
595 &lt;p&gt;En utfordring for depotarkivene er at bruken av tegnsett ikke alltid
596 har vært regulert, og at det kan finnes flere dokumentasjonssamlinger
597 som er opprettet med varierende tegnsett før gjeldende forskrift
598 inntraff – uten at det er mulig å avlede fra filene hvilket tegnsett
599 som ble brukt. Et eksempel på dette er €-symbolet, som kom først etter
600 at ISO-8859-1 var tatt i bruk. Det kan bli en utfordring for et
601 depotarkiv, men så lenge det er kjent hvilket tegnsett var i bruk, så
602 bør det gå bra. Riksarkivarens
603 forskrift&lt;sup&gt;[&lt;a id=&quot;tegnsett_access_footnoteref_4&quot; href=&quot;#tegnsett_access_footnotedef_4&quot; title=&quot;View footnote.&quot;&gt;4&lt;/a&gt;]&lt;/sup&gt;
604 formaliserer dette ved å kreve følgende:&lt;/p&gt;
605
606 &lt;blockquote&gt;
607 &lt;p&gt;§ 5-11. Tegnsett i arkivuttrekk&lt;/p&gt;
608
609 &lt;ol&gt;
610 &lt;li&gt;Arkivuttrekk og medfølgende struktur- og innholdsbeskrivelser skal
611 overføres som ren tekst i ukryptert form, og benytte godkjent
612 tegnsett.&lt;/li&gt;
613
614 &lt;li&gt;Godkjente tegnsett er:
615 &lt;ol&gt;
616 &lt;li&gt;Unicode UTF-8&lt;br&gt;
617 (ISO/IEC 10646-1:2000 Annex D)&lt;/li&gt;
618 &lt;li&gt;ISO 8859-1:1998, Latin 1&lt;/li&gt;
619 &lt;li&gt;ISO 8859-4:1998, Latin 4 for samiske tegn.&lt;/li&gt;
620 &lt;/ol&gt;&lt;/li&gt;
621
622 &lt;li&gt;Andre tegnsett aksepteres bare etter avtale med Arkivverket.&lt;/li&gt;
623 &lt;/ol&gt;
624 &lt;/blockquote&gt;
625
626 &lt;p id=&quot;tegnsett_access_ditt_ansvar&quot;&gt;&lt;strong&gt;Ditt ansvar&lt;/strong&gt;&lt;/p&gt;
627
628 &lt;p&gt;På mange måter burde ikke tegnsett være et problem i 2023, men sånn er
629 det nok ikke. Land som har oppgradert til UTF-8 som primærtegnsett for
630 utveksling av tekstlig innhold, begrenser problematikken betraktelig,
631 men globalt sett så er tegnsettutfordringen ikke løst fordi ikke alle
632 er enige om å bruke samme tegnsett. Det kan være geopolitiske eller
633 kulturelle hensyn som ligger til grunn for dette.&lt;/p&gt;
634
635 &lt;p&gt;Det er uansett verdt å merke at selv om bruken av UTF-8 skulle bli
636 100% utbredt, så er det et historisk perspektiv (ASCII-7,
637 ISO-8859-variantene, UTF-8) her som gjør tegnsett til et problemområde
638 arkivarene må forstå og håndtere. Som danningsarkivar har du et
639 ansvar for å vite hvilket tegnsett systemene og databasene dere
640 forvalter, er i samsvar med. Det er noe IT-avdelingen din eller
641 programvareleverandørene enkelt skal kunne svare på, og svaret skal
642 være UTF-8 for alle nye systemer.&lt;/p&gt;
643
644 &lt;hr&gt;
645
646 &lt;p id=&quot;tegnsett_access_footnotedef_1&quot;&gt;&lt;a href=&quot;#tegnsett_access_footnoteref_1&quot;&gt;1&lt;/a&gt;. Tegnsettkilde &lt;a href=&quot;https://en.wikipedia.org/wiki/ISO/IEC_8859&quot;&gt;https://en.wikipedia.org/wiki/ISO/IEC_8859&lt;/a&gt;&lt;/p&gt;
647
648 &lt;p id=&quot;tegnsett_access_footnotedef_2&quot;&gt;&lt;a href=&quot;#tegnsett_access_footnoteref_2&quot;&gt;2&lt;/a&gt;. &lt;a href=&quot;https://ionathan.ch/2022/04/09/angzarr.html&quot;&gt;https://ionathan.ch/2022/04/09/angzarr.html&lt;/a&gt;&lt;/p&gt;
649
650 &lt;p id=&quot;tegnsett_access_footnotedef_3&quot;&gt;&lt;a href=&quot;#tegnsett_access_footnoteref_3&quot;&gt;3&lt;/a&gt;. &lt;a href=&quot;https://lovdata.no/dokument/SF/forskrift/2013-04-05-959/%C2%A78#%C2%A78&quot;&gt;https://lovdata.no/dokument/SF/forskrift/2013-04-05-959/%C2%A78#%C2%A78&lt;/a&gt;&lt;/p&gt;
651
652 &lt;p id=&quot;tegnsett_access_footnotedef_4&quot;&gt;&lt;a href=&quot;#tegnsett_access_footnoteref_4&quot;&gt;4&lt;/a&gt;. &lt;a href=&quot;https://lovdata.no/forskrift/2017-12-19-22865-11&quot;&gt;https://lovdata.no/forskrift/2017-12-19-22865-11&lt;/a&gt;&lt;/p&gt;
653
654 &lt;/blockquote&gt;
655
656 &lt;p&gt;For øvrig burde varsleren Edward Snowden få politisk asyl i Norge.&lt;/p&gt;
657
658 &lt;p&gt;Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
659 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
660 til min adresse
661 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;. Merk,
662 betaling med bitcoin er ikke anonymt. :)&lt;/p&gt;
663 </description>
664 </item>
665
666 <item>
667 <title>New and improved sqlcipher in Debian for accessing Signal database</title>
668 <link>https://people.skolelinux.org/pere/blog/New_and_improved_sqlcipher_in_Debian_for_accessing_Signal_database.html</link>
669 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/New_and_improved_sqlcipher_in_Debian_for_accessing_Signal_database.html</guid>
670 <pubDate>Sun, 12 Nov 2023 12:00:00 +0100</pubDate>
671 <description>&lt;p&gt;For a while now I wanted to have direct access to the
672 &lt;a href=&quot;https://signal.org/&quot;&gt;Signal&lt;/a&gt; database of messages and
673 channels of my Desktop edition of Signal. I prefer the enforced end
674 to end encryption of Signal these days for my communication with
675 friends and family, to increase the level of safety and privacy as
676 well as raising the cost of the mass surveillance government and
677 non-government entities practice these days. In August I came across
678 a nice
679 &lt;a href=&quot;https://www.yoranbrondsema.com/post/the-guide-to-extracting-statistics-from-your-signal-conversations/&quot;&gt;recipe
680 on how to use sqlcipher to extract statistics from the Signal
681 database&lt;/a&gt; explaining how to do this. Unfortunately this did not
682 work with the version of sqlcipher in Debian. The
683 &lt;a href=&quot;http://tracker.debian.org/sqlcipher/&quot;&gt;sqlcipher&lt;/a&gt;
684 package is a &quot;fork&quot; of the sqlite package with added support for
685 encrypted databases. Sadly the current Debian maintainer
686 &lt;a href=&quot;https://bugs.debian.org/961598&quot;&gt;announced more than three
687 years ago that he did not have time to maintain sqlcipher&lt;/a&gt;, so it
688 seemed unlikely to be upgraded by the maintainer. I was reluctant to
689 take on the job myself, as I have very limited experience maintaining
690 shared libraries in Debian. After waiting and hoping for a few
691 months, I gave up the last week, and set out to update the package. In
692 the process I orphaned it to make it more obvious for the next person
693 looking at it that the package need proper maintenance.&lt;/p&gt;
694
695 &lt;p&gt;The version in Debian was around five years old, and quite a lot of
696 changes had taken place upstream into the Debian maintenance git
697 repository. After spending a few days importing the new upstream
698 versions, realising that upstream did not care much for SONAME
699 versioning as I saw library symbols being both added and removed with
700 minor version number changes to the project, I concluded that I had to
701 do a SONAME bump of the library package to avoid surprising the
702 reverse dependencies. I even added a simple
703 autopkgtest script to ensure the package work as intended. Dug deep
704 into the hole of learning shared library maintenance, I set out a few
705 days ago to upload the new version to Debian experimental to see what
706 the quality assurance framework in Debian had to say about the result.
707 The feedback told me the pacakge was not too shabby, and yesterday I
708 uploaded the latest version to Debian unstable. It should enter
709 testing today or tomorrow, perhaps delayed by
710 &lt;a href=&quot;https://bugs.debian.org/1055812&quot;&gt;a small library
711 transition&lt;/a&gt;.&lt;/p&gt;
712
713 &lt;p&gt;Armed with a new version of sqlcipher, I can now have a look at the
714 SQL database in ~/.config/Signal/sql/db.sqlite. First, one need to
715 fetch the encryption key from the Signal configuration using this
716 simple JSON extraction command:&lt;/p&gt;
717
718 &lt;pre&gt;/usr/bin/jq -r &#39;.&quot;key&quot;&#39; ~/.config/Signal/config.json&lt;/pre&gt;
719
720 &lt;p&gt;Assuming the result from that command is &#39;secretkey&#39;, which is a
721 hexadecimal number representing the key used to encrypt the database.
722 Next, one can now connect to the database and inject the encryption
723 key for access via SQL to fetch information from the database. Here
724 is an example dumping the database structure:&lt;/p&gt;
725
726 &lt;pre&gt;
727 % sqlcipher ~/.config/Signal/sql/db.sqlite
728 sqlite&gt; PRAGMA key = &quot;x&#39;secretkey&#39;&quot;;
729 sqlite&gt; .schema
730 CREATE TABLE sqlite_stat1(tbl,idx,stat);
731 CREATE TABLE conversations(
732 id STRING PRIMARY KEY ASC,
733 json TEXT,
734
735 active_at INTEGER,
736 type STRING,
737 members TEXT,
738 name TEXT,
739 profileName TEXT
740 , profileFamilyName TEXT, profileFullName TEXT, e164 TEXT, serviceId TEXT, groupId TEXT, profileLastFetchedAt INTEGER);
741 CREATE TABLE identityKeys(
742 id STRING PRIMARY KEY ASC,
743 json TEXT
744 );
745 CREATE TABLE items(
746 id STRING PRIMARY KEY ASC,
747 json TEXT
748 );
749 CREATE TABLE sessions(
750 id TEXT PRIMARY KEY,
751 conversationId TEXT,
752 json TEXT
753 , ourServiceId STRING, serviceId STRING);
754 CREATE TABLE attachment_downloads(
755 id STRING primary key,
756 timestamp INTEGER,
757 pending INTEGER,
758 json TEXT
759 );
760 CREATE TABLE sticker_packs(
761 id TEXT PRIMARY KEY,
762 key TEXT NOT NULL,
763
764 author STRING,
765 coverStickerId INTEGER,
766 createdAt INTEGER,
767 downloadAttempts INTEGER,
768 installedAt INTEGER,
769 lastUsed INTEGER,
770 status STRING,
771 stickerCount INTEGER,
772 title STRING
773 , attemptedStatus STRING, position INTEGER DEFAULT 0 NOT NULL, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync
774 INTEGER DEFAULT 0 NOT NULL);
775 CREATE TABLE stickers(
776 id INTEGER NOT NULL,
777 packId TEXT NOT NULL,
778
779 emoji STRING,
780 height INTEGER,
781 isCoverOnly INTEGER,
782 lastUsed INTEGER,
783 path STRING,
784 width INTEGER,
785
786 PRIMARY KEY (id, packId),
787 CONSTRAINT stickers_fk
788 FOREIGN KEY (packId)
789 REFERENCES sticker_packs(id)
790 ON DELETE CASCADE
791 );
792 CREATE TABLE sticker_references(
793 messageId STRING,
794 packId TEXT,
795 CONSTRAINT sticker_references_fk
796 FOREIGN KEY(packId)
797 REFERENCES sticker_packs(id)
798 ON DELETE CASCADE
799 );
800 CREATE TABLE emojis(
801 shortName TEXT PRIMARY KEY,
802 lastUsage INTEGER
803 );
804 CREATE TABLE messages(
805 rowid INTEGER PRIMARY KEY ASC,
806 id STRING UNIQUE,
807 json TEXT,
808 readStatus INTEGER,
809 expires_at INTEGER,
810 sent_at INTEGER,
811 schemaVersion INTEGER,
812 conversationId STRING,
813 received_at INTEGER,
814 source STRING,
815 hasAttachments INTEGER,
816 hasFileAttachments INTEGER,
817 hasVisualMediaAttachments INTEGER,
818 expireTimer INTEGER,
819 expirationStartTimestamp INTEGER,
820 type STRING,
821 body TEXT,
822 messageTimer INTEGER,
823 messageTimerStart INTEGER,
824 messageTimerExpiresAt INTEGER,
825 isErased INTEGER,
826 isViewOnce INTEGER,
827 sourceServiceId TEXT, serverGuid STRING NULL, sourceDevice INTEGER, storyId STRING, isStory INTEGER
828 GENERATED ALWAYS AS (type IS &#39;story&#39;), isChangeCreatedByUs INTEGER NOT NULL DEFAULT 0, isTimerChangeFromSync INTEGER
829 GENERATED ALWAYS AS (
830 json_extract(json, &#39;$.expirationTimerUpdate.fromSync&#39;) IS 1
831 ), seenStatus NUMBER default 0, storyDistributionListId STRING, expiresAt INT
832 GENERATED ALWAYS
833 AS (ifnull(
834 expirationStartTimestamp + (expireTimer * 1000),
835 9007199254740991
836 )), shouldAffectActivity INTEGER
837 GENERATED ALWAYS AS (
838 type IS NULL
839 OR
840 type NOT IN (
841 &#39;change-number-notification&#39;,
842 &#39;contact-removed-notification&#39;,
843 &#39;conversation-merge&#39;,
844 &#39;group-v1-migration&#39;,
845 &#39;keychange&#39;,
846 &#39;message-history-unsynced&#39;,
847 &#39;profile-change&#39;,
848 &#39;story&#39;,
849 &#39;universal-timer-notification&#39;,
850 &#39;verified-change&#39;
851 )
852 ), shouldAffectPreview INTEGER
853 GENERATED ALWAYS AS (
854 type IS NULL
855 OR
856 type NOT IN (
857 &#39;change-number-notification&#39;,
858 &#39;contact-removed-notification&#39;,
859 &#39;conversation-merge&#39;,
860 &#39;group-v1-migration&#39;,
861 &#39;keychange&#39;,
862 &#39;message-history-unsynced&#39;,
863 &#39;profile-change&#39;,
864 &#39;story&#39;,
865 &#39;universal-timer-notification&#39;,
866 &#39;verified-change&#39;
867 )
868 ), isUserInitiatedMessage INTEGER
869 GENERATED ALWAYS AS (
870 type IS NULL
871 OR
872 type NOT IN (
873 &#39;change-number-notification&#39;,
874 &#39;contact-removed-notification&#39;,
875 &#39;conversation-merge&#39;,
876 &#39;group-v1-migration&#39;,
877 &#39;group-v2-change&#39;,
878 &#39;keychange&#39;,
879 &#39;message-history-unsynced&#39;,
880 &#39;profile-change&#39;,
881 &#39;story&#39;,
882 &#39;universal-timer-notification&#39;,
883 &#39;verified-change&#39;
884 )
885 ), mentionsMe INTEGER NOT NULL DEFAULT 0, isGroupLeaveEvent INTEGER
886 GENERATED ALWAYS AS (
887 type IS &#39;group-v2-change&#39; AND
888 json_array_length(json_extract(json, &#39;$.groupV2Change.details&#39;)) IS 1 AND
889 json_extract(json, &#39;$.groupV2Change.details[0].type&#39;) IS &#39;member-remove&#39; AND
890 json_extract(json, &#39;$.groupV2Change.from&#39;) IS NOT NULL AND
891 json_extract(json, &#39;$.groupV2Change.from&#39;) IS json_extract(json, &#39;$.groupV2Change.details[0].aci&#39;)
892 ), isGroupLeaveEventFromOther INTEGER
893 GENERATED ALWAYS AS (
894 isGroupLeaveEvent IS 1
895 AND
896 isChangeCreatedByUs IS 0
897 ), callId TEXT
898 GENERATED ALWAYS AS (
899 json_extract(json, &#39;$.callId&#39;)
900 ));
901 CREATE TABLE sqlite_stat4(tbl,idx,neq,nlt,ndlt,sample);
902 CREATE TABLE jobs(
903 id TEXT PRIMARY KEY,
904 queueType TEXT STRING NOT NULL,
905 timestamp INTEGER NOT NULL,
906 data STRING TEXT
907 );
908 CREATE TABLE reactions(
909 conversationId STRING,
910 emoji STRING,
911 fromId STRING,
912 messageReceivedAt INTEGER,
913 targetAuthorAci STRING,
914 targetTimestamp INTEGER,
915 unread INTEGER
916 , messageId STRING);
917 CREATE TABLE senderKeys(
918 id TEXT PRIMARY KEY NOT NULL,
919 senderId TEXT NOT NULL,
920 distributionId TEXT NOT NULL,
921 data BLOB NOT NULL,
922 lastUpdatedDate NUMBER NOT NULL
923 );
924 CREATE TABLE unprocessed(
925 id STRING PRIMARY KEY ASC,
926 timestamp INTEGER,
927 version INTEGER,
928 attempts INTEGER,
929 envelope TEXT,
930 decrypted TEXT,
931 source TEXT,
932 serverTimestamp INTEGER,
933 sourceServiceId STRING
934 , serverGuid STRING NULL, sourceDevice INTEGER, receivedAtCounter INTEGER, urgent INTEGER, story INTEGER);
935 CREATE TABLE sendLogPayloads(
936 id INTEGER PRIMARY KEY ASC,
937
938 timestamp INTEGER NOT NULL,
939 contentHint INTEGER NOT NULL,
940 proto BLOB NOT NULL
941 , urgent INTEGER, hasPniSignatureMessage INTEGER DEFAULT 0 NOT NULL);
942 CREATE TABLE sendLogRecipients(
943 payloadId INTEGER NOT NULL,
944
945 recipientServiceId STRING NOT NULL,
946 deviceId INTEGER NOT NULL,
947
948 PRIMARY KEY (payloadId, recipientServiceId, deviceId),
949
950 CONSTRAINT sendLogRecipientsForeignKey
951 FOREIGN KEY (payloadId)
952 REFERENCES sendLogPayloads(id)
953 ON DELETE CASCADE
954 );
955 CREATE TABLE sendLogMessageIds(
956 payloadId INTEGER NOT NULL,
957
958 messageId STRING NOT NULL,
959
960 PRIMARY KEY (payloadId, messageId),
961
962 CONSTRAINT sendLogMessageIdsForeignKey
963 FOREIGN KEY (payloadId)
964 REFERENCES sendLogPayloads(id)
965 ON DELETE CASCADE
966 );
967 CREATE TABLE preKeys(
968 id STRING PRIMARY KEY ASC,
969 json TEXT
970 , ourServiceId NUMBER
971 GENERATED ALWAYS AS (json_extract(json, &#39;$.ourServiceId&#39;)));
972 CREATE TABLE signedPreKeys(
973 id STRING PRIMARY KEY ASC,
974 json TEXT
975 , ourServiceId NUMBER
976 GENERATED ALWAYS AS (json_extract(json, &#39;$.ourServiceId&#39;)));
977 CREATE TABLE badges(
978 id TEXT PRIMARY KEY,
979 category TEXT NOT NULL,
980 name TEXT NOT NULL,
981 descriptionTemplate TEXT NOT NULL
982 );
983 CREATE TABLE badgeImageFiles(
984 badgeId TEXT REFERENCES badges(id)
985 ON DELETE CASCADE
986 ON UPDATE CASCADE,
987 &#39;order&#39; INTEGER NOT NULL,
988 url TEXT NOT NULL,
989 localPath TEXT,
990 theme TEXT NOT NULL
991 );
992 CREATE TABLE storyReads (
993 authorId STRING NOT NULL,
994 conversationId STRING NOT NULL,
995 storyId STRING NOT NULL,
996 storyReadDate NUMBER NOT NULL,
997
998 PRIMARY KEY (authorId, storyId)
999 );
1000 CREATE TABLE storyDistributions(
1001 id STRING PRIMARY KEY NOT NULL,
1002 name TEXT,
1003
1004 senderKeyInfoJson STRING
1005 , deletedAtTimestamp INTEGER, allowsReplies INTEGER, isBlockList INTEGER, storageID STRING, storageVersion INTEGER, storageUnknownFields BLOB, storageNeedsSync INTEGER);
1006 CREATE TABLE storyDistributionMembers(
1007 listId STRING NOT NULL REFERENCES storyDistributions(id)
1008 ON DELETE CASCADE
1009 ON UPDATE CASCADE,
1010 serviceId STRING NOT NULL,
1011
1012 PRIMARY KEY (listId, serviceId)
1013 );
1014 CREATE TABLE uninstalled_sticker_packs (
1015 id STRING NOT NULL PRIMARY KEY,
1016 uninstalledAt NUMBER NOT NULL,
1017 storageID STRING,
1018 storageVersion NUMBER,
1019 storageUnknownFields BLOB,
1020 storageNeedsSync INTEGER NOT NULL
1021 );
1022 CREATE TABLE groupCallRingCancellations(
1023 ringId INTEGER PRIMARY KEY,
1024 createdAt INTEGER NOT NULL
1025 );
1026 CREATE TABLE IF NOT EXISTS &#39;messages_fts_data&#39;(id INTEGER PRIMARY KEY, block BLOB);
1027 CREATE TABLE IF NOT EXISTS &#39;messages_fts_idx&#39;(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
1028 CREATE TABLE IF NOT EXISTS &#39;messages_fts_content&#39;(id INTEGER PRIMARY KEY, c0);
1029 CREATE TABLE IF NOT EXISTS &#39;messages_fts_docsize&#39;(id INTEGER PRIMARY KEY, sz BLOB);
1030 CREATE TABLE IF NOT EXISTS &#39;messages_fts_config&#39;(k PRIMARY KEY, v) WITHOUT ROWID;
1031 CREATE TABLE edited_messages(
1032 messageId STRING REFERENCES messages(id)
1033 ON DELETE CASCADE,
1034 sentAt INTEGER,
1035 readStatus INTEGER
1036 , conversationId STRING);
1037 CREATE TABLE mentions (
1038 messageId REFERENCES messages(id) ON DELETE CASCADE,
1039 mentionAci STRING,
1040 start INTEGER,
1041 length INTEGER
1042 );
1043 CREATE TABLE kyberPreKeys(
1044 id STRING PRIMARY KEY NOT NULL,
1045 json TEXT NOT NULL, ourServiceId NUMBER
1046 GENERATED ALWAYS AS (json_extract(json, &#39;$.ourServiceId&#39;)));
1047 CREATE TABLE callsHistory (
1048 callId TEXT PRIMARY KEY,
1049 peerId TEXT NOT NULL, -- conversation id (legacy) | uuid | groupId | roomId
1050 ringerId TEXT DEFAULT NULL, -- ringer uuid
1051 mode TEXT NOT NULL, -- enum &quot;Direct&quot; | &quot;Group&quot;
1052 type TEXT NOT NULL, -- enum &quot;Audio&quot; | &quot;Video&quot; | &quot;Group&quot;
1053 direction TEXT NOT NULL, -- enum &quot;Incoming&quot; | &quot;Outgoing
1054 -- Direct: enum &quot;Pending&quot; | &quot;Missed&quot; | &quot;Accepted&quot; | &quot;Deleted&quot;
1055 -- Group: enum &quot;GenericGroupCall&quot; | &quot;OutgoingRing&quot; | &quot;Ringing&quot; | &quot;Joined&quot; | &quot;Missed&quot; | &quot;Declined&quot; | &quot;Accepted&quot; | &quot;Deleted&quot;
1056 status TEXT NOT NULL,
1057 timestamp INTEGER NOT NULL,
1058 UNIQUE (callId, peerId) ON CONFLICT FAIL
1059 );
1060 [ dropped all indexes to save space in this blog post ]
1061 CREATE TRIGGER messages_on_view_once_update AFTER UPDATE ON messages
1062 WHEN
1063 new.body IS NOT NULL AND new.isViewOnce = 1
1064 BEGIN
1065 DELETE FROM messages_fts WHERE rowid = old.rowid;
1066 END;
1067 CREATE TRIGGER messages_on_insert AFTER INSERT ON messages
1068 WHEN new.isViewOnce IS NOT 1 AND new.storyId IS NULL
1069 BEGIN
1070 INSERT INTO messages_fts
1071 (rowid, body)
1072 VALUES
1073 (new.rowid, new.body);
1074 END;
1075 CREATE TRIGGER messages_on_delete AFTER DELETE ON messages BEGIN
1076 DELETE FROM messages_fts WHERE rowid = old.rowid;
1077 DELETE FROM sendLogPayloads WHERE id IN (
1078 SELECT payloadId FROM sendLogMessageIds
1079 WHERE messageId = old.id
1080 );
1081 DELETE FROM reactions WHERE rowid IN (
1082 SELECT rowid FROM reactions
1083 WHERE messageId = old.id
1084 );
1085 DELETE FROM storyReads WHERE storyId = old.storyId;
1086 END;
1087 CREATE VIRTUAL TABLE messages_fts USING fts5(
1088 body,
1089 tokenize = &#39;signal_tokenizer&#39;
1090 );
1091 CREATE TRIGGER messages_on_update AFTER UPDATE ON messages
1092 WHEN
1093 (new.body IS NULL OR old.body IS NOT new.body) AND
1094 new.isViewOnce IS NOT 1 AND new.storyId IS NULL
1095 BEGIN
1096 DELETE FROM messages_fts WHERE rowid = old.rowid;
1097 INSERT INTO messages_fts
1098 (rowid, body)
1099 VALUES
1100 (new.rowid, new.body);
1101 END;
1102 CREATE TRIGGER messages_on_insert_insert_mentions AFTER INSERT ON messages
1103 BEGIN
1104 INSERT INTO mentions (messageId, mentionAci, start, length)
1105
1106 SELECT messages.id, bodyRanges.value -&gt;&gt; &#39;mentionAci&#39; as mentionAci,
1107 bodyRanges.value -&gt;&gt; &#39;start&#39; as start,
1108 bodyRanges.value -&gt;&gt; &#39;length&#39; as length
1109 FROM messages, json_each(messages.json -&gt;&gt; &#39;bodyRanges&#39;) as bodyRanges
1110 WHERE bodyRanges.value -&gt;&gt; &#39;mentionAci&#39; IS NOT NULL
1111
1112 AND messages.id = new.id;
1113 END;
1114 CREATE TRIGGER messages_on_update_update_mentions AFTER UPDATE ON messages
1115 BEGIN
1116 DELETE FROM mentions WHERE messageId = new.id;
1117 INSERT INTO mentions (messageId, mentionAci, start, length)
1118
1119 SELECT messages.id, bodyRanges.value -&gt;&gt; &#39;mentionAci&#39; as mentionAci,
1120 bodyRanges.value -&gt;&gt; &#39;start&#39; as start,
1121 bodyRanges.value -&gt;&gt; &#39;length&#39; as length
1122 FROM messages, json_each(messages.json -&gt;&gt; &#39;bodyRanges&#39;) as bodyRanges
1123 WHERE bodyRanges.value -&gt;&gt; &#39;mentionAci&#39; IS NOT NULL
1124
1125 AND messages.id = new.id;
1126 END;
1127 sqlite&gt;
1128 &lt;/pre&gt;
1129
1130 &lt;p&gt;Finally I have the tool needed to inspect and process Signal
1131 messages that I need, without using the vendor provided client. Now
1132 on to transforming it to a more useful format.&lt;/p&gt;
1133
1134 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1135 activities, please send Bitcoin donations to my address
1136 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1137 </description>
1138 </item>
1139
1140 <item>
1141 <title>New chrpath release 0.17</title>
1142 <link>https://people.skolelinux.org/pere/blog/New_chrpath_release_0_17.html</link>
1143 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/New_chrpath_release_0_17.html</guid>
1144 <pubDate>Fri, 10 Nov 2023 07:30:00 +0100</pubDate>
1145 <description>&lt;p&gt;The chrpath package provide a simple command line tool to remove or
1146 modify the rpath or runpath of compiled ELF program. It is almost 10
1147 years since I updated the code base, but I stumbled over the tool
1148 today, and decided it was time to move the code base from Subversion
1149 to git and find a new home for it, as the previous one (Debian Alioth)
1150 has been shut down. I decided to go with
1151 &lt;a href=&quot;https://codeberg.org/&quot;&gt;Codeberg&lt;/a&gt; this time, as it is my git
1152 service of choice these days, did a quick and dirty migration to git
1153 and updated the code with a few patches I found in the Debian bug
1154 tracker. These are the release notes:&lt;/p&gt;
1155
1156 &lt;p&gt;New in 0.17 released 2023-11-10:&lt;/p&gt;
1157
1158 &lt;ul&gt;
1159 &lt;li&gt;Moved project to Codeberg, as Alioth is shut down.&lt;/li&gt;
1160 &lt;li&gt;Add Solaris support (use &amp;lt;sys/byteorder.h&gt; instead of &amp;lt;byteswap.h&gt;).
1161 Patch from Rainer Orth.&lt;/li&gt;
1162 &lt;li&gt;Added missing newline from printf() line. Patch from Frank Dana.&lt;/li&gt;
1163 &lt;li&gt;Corrected handling of multiple ELF sections. Patch from Frank Dana.&lt;/li&gt;
1164 &lt;li&gt;Updated build rules for .deb. Partly based on patch from djcj.&lt;/li&gt;
1165 &lt;/ul&gt;
1166
1167 &lt;p&gt;The latest edition is tagged and available from
1168 &lt;a href=&quot;https://codeberg.org/pere/chrpath&quot;&gt;https://codeberg.org/pere/chrpath&lt;/a&gt;.
1169
1170 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1171 activities, please send Bitcoin donations to my address
1172 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1173 </description>
1174 </item>
1175
1176 <item>
1177 <title>Test framework for DocBook processors / formatters</title>
1178 <link>https://people.skolelinux.org/pere/blog/Test_framework_for_DocBook_processors___formatters.html</link>
1179 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/Test_framework_for_DocBook_processors___formatters.html</guid>
1180 <pubDate>Sun, 5 Nov 2023 13:00:00 +0100</pubDate>
1181 <description>&lt;p&gt;All the books I have published so far has been using
1182 &lt;a href=&quot;https://docbook.org/&quot;&gt;DocBook&lt;/a&gt; somewhere in the process.
1183 For the first book, the source format was DocBook, while for every
1184 later book it was an intermediate format used as the stepping stone to
1185 be able to present the same manuscript in several formats, on paper,
1186 as ebook in ePub format, as a HTML page and as a PDF file either for
1187 paper production or for Internet consumption. This is made possible
1188 with a wide variety of free software tools with DocBook support in
1189 Debian. The source format of later books have been docx via rst,
1190 Markdown, Filemaker and Asciidoc, and for all of these I was able to
1191 generate a suitable DocBook file for further processing using
1192 &lt;a href=&quot;https://tracker.debian.org/pkg/pandoc&quot;&gt;pandoc&lt;/a&gt;,
1193 &lt;a href=&quot;https://tracker.debian.org/pkg/asciidoc&quot;&gt;a2x&lt;/a&gt; and
1194 &lt;a href=&quot;https://tracker.debian.org/pkg/asciidoctor&quot;&gt;asciidoctor&lt;/a&gt;,
1195 as well as rendering using
1196 &lt;a href=&quot;https://tracker.debian.org/pkg/xmlto&quot;&gt;xmlto&lt;/a&gt;,
1197 &lt;a href=&quot;https://tracker.debian.org/pkg/dbtoepub&quot;&gt;dbtoepub&lt;/a&gt;,
1198 &lt;a href=&quot;https://tracker.debian.org/pkg/dblatex&quot;&gt;dblatex&lt;/a&gt;,
1199 &lt;a href=&quot;https://tracker.debian.org/pkg/docbook-xsl&quot;&gt;docbook-xsl&lt;/a&gt; and
1200 &lt;a href=&quot;https://tracker.debian.org/pkg/fop&quot;&gt;fop&lt;/a&gt;.&lt;/p&gt;
1201
1202 &lt;p&gt;Most of the &lt;a href=&quot;http://www.hungry.com/~pere/publisher/&quot;&gt;books I
1203 have published&lt;/a&gt; are translated books, with English as the source
1204 language. The use of
1205 &lt;a href=&quot;https://tracker.debian.org/pkg/po4a&quot;&gt;po4a&lt;/a&gt; to
1206 handle translations using the gettext PO format has been a blessing,
1207 but publishing translated books had triggered the need to ensure the
1208 DocBook tools handle relevant languages correctly. For every new
1209 language I have published, I had to submit patches dblatex, dbtoepub
1210 and docbook-xsl fixing incorrect language and country specific issues
1211 in the framework themselves. Typically this has been missing keywords
1212 like &#39;figure&#39; or sort ordering of index entries. After a while it
1213 became tiresome to only discover issues like this by accident, and I
1214 decided to write a DocBook &quot;test framework&quot; exercising various
1215 features of DocBook and allowing me to see all features exercised for
1216 a given language. It consist of a set of DocBook files, a version 4
1217 book, a version 5 book, a v4 book set, a v4 selection of problematic
1218 tables, one v4 testing sidefloat and finally one v4 testing a book of
1219 articles. The DocBook files are accompanied with a set of build rules
1220 for building PDF using dblatex and docbook-xsl/fop, HTML using xmlto
1221 or docbook-xsl and epub using dbtoepub. The result is a set of files
1222 visualizing footnotes, indexes, table of content list, figures,
1223 formulas and other DocBook features, allowing for a quick review on
1224 the completeness of the given locale settings. To build with a
1225 different language setting, all one need to do is edit the lang= value
1226 in the .xml file to pick a different ISO 639 code value and run
1227 &#39;make&#39;.&lt;/p&gt;
1228
1229 &lt;p&gt;The &lt;a href=&quot;https://codeberg.org/pere/docbook-example/&quot;&gt;test framework
1230 source code&lt;/a&gt; is available from Codeberg, and a generated set of
1231 presentations of the various examples is available as Codeberg static
1232 web pages at
1233 &lt;a href=&quot;https://pere.codeberg.page/docbook-example/&quot;&gt;https://pere.codeberg.page/docbook-example/&lt;/a&gt;.
1234 Using this test framework I have been able to discover and report
1235 several bugs and missing features in various tools, and got a lot of
1236 them fixed. For example I got Northern Sami keywords added to both
1237 docbook-xsl and dblatex, fixed several typos in Norwegian bokmål and
1238 Norwegian Nynorsk, support for non-ascii title IDs added to pandoc,
1239 Norwegian index sorting support fixed in xindy and initial Norwegian
1240 Bokmål support added to dblatex. Some issues still remains, though.
1241 Default index sorting rules are still broken in several tools, so the
1242 Norwegian letters æ, ø and å are more often than not sorted properly
1243 in the book index.&lt;/p&gt;
1244
1245 &lt;p&gt;The test framework recently received some more polish, as part of
1246 publishing my latest book. This book contained a lot of fairly
1247 complex tables, which exposed bugs in some of the tools. This made me
1248 add a new test file with various tables, as well as spend some time to
1249 brush up the build rules. My goal is for the test framework to
1250 exercise all DocBook features to make it easier to see which features
1251 work with different processors, and hopefully get them all to support
1252 the full set of DocBook features. Feel free to send patches to extend
1253 the test set, and test it with your favorite DocBook processor.
1254 Please visit these two URLs to learn more:&lt;/p&gt;
1255
1256 &lt;ul&gt;
1257 &lt;li&gt;&lt;a href=&quot;https://codeberg.org/pere/docbook-example/&quot;&gt;https://codeberg.org/pere/docbook-example/&lt;/a&gt;&lt;/li&gt;
1258 &lt;li&gt;&lt;a href=&quot;https://pere.codeberg.page/docbook-example/&quot;&gt;https://pere.codeberg.page/docbook-example/&lt;/a&gt;&lt;/li&gt;
1259 &lt;/ul&gt;
1260
1261 &lt;p&gt;If you want to learn more on Docbook and translations, I recommend
1262 having a look at the &lt;a href=&quot;https://docbook.org/&quot;&gt;the DocBook
1263 web site&lt;/a&gt;,
1264 &lt;a href=&quot;https://doccookbook.sourceforge.net/html/en/&quot;&gt;the DoCookBook
1265 site&lt;a/&gt; and my earlier blog post on
1266 &lt;a href=&quot;https://people.skolelinux.org/pere/blog/From_English_wiki_to_translated_PDF_and_epub_via_Docbook.html&quot;&gt;how
1267 the Skolelinux project process and translate documentation&lt;/a&gt;, a talk I gave earlier this year on
1268 &lt;a href=&quot;https://www.nuug.no/aktiviteter/20230314-oversetting-og-publisering-av-b%c3%b8ker-med-fri-programvare/&quot;&gt;how
1269 to translate and publish books using free software&lt;/a&gt; (Norwegian
1270 only).&lt;/p&gt;
1271
1272 &lt;!--
1273
1274 https://github.com/docbook/xslt10-stylesheets/issues/205 (docbook-xsl: sme support)
1275 https://bugs.debian.org/968437 (xindy: index sorting rules for nb/nn)
1276 https://bugs.debian.org/856123 (pandoc: markdown to docbook with non-english titles)
1277 https://bugs.debian.org/864813 (dblatex: missing nb words)
1278 https://bugs.debian.org/756386 (dblatex: index sorting rules for nb/nn)
1279 https://bugs.debian.org/796871 (dbtoepub: index sorting rules for nb/nn)
1280 https://bugs.debian.org/792616 (dblatex: PDF metadata)
1281 https://bugs.debian.org/686908 (docbook-xsl: index sorting rules for nb/nn)
1282 https://sourceforge.net/tracker/?func=detail&amp;atid=373747&amp;aid=3556630&amp;group_id=21935 (docbook-xsl: nb/nn support)
1283 https://bugs.debian.org/684391 (dblatex: initial nb support)
1284
1285 --&gt;
1286
1287 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1288 activities, please send Bitcoin donations to my address
1289 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1290 </description>
1291 </item>
1292
1293 <item>
1294 <title>«Virkninger av angrefristloven», hovedfagsoppgaven som fikk endret en lov</title>
1295 <link>https://people.skolelinux.org/pere/blog/_Virkninger_av_angrefristloven___hovedfagsoppgaven_som_fikk_endret_en_lov.html</link>
1296 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/_Virkninger_av_angrefristloven___hovedfagsoppgaven_som_fikk_endret_en_lov.html</guid>
1297 <pubDate>Sun, 29 Oct 2023 22:00:00 +0100</pubDate>
1298 <description>&lt;img src=&quot;http://people.skolelinux.org/pere/blog/images/2023-10-29-bok-angrefrist.svg&quot; width=&quot;20%&quot; align=&quot;center&quot;&gt;&lt;/a&gt;
1299
1300 &lt;p&gt;I 1979 leverte Ole-Erik Yrvin en hovedfagsoppgave for Cand. Scient.
1301 ved Institutt for sosiologi på Universitetet i Oslo på oppdrag fra
1302 Forbruker- og administrasjonsdepartementet. Oppgaven evaluerte
1303 Angrefristloven fra 1972, og det han oppdaget førte til at loven ble
1304 endret fire år senere.&lt;/p&gt;
1305
1306 &lt;p&gt;Jeg har kjent Ole-Erik en stund, og synes det var trist at hans
1307 oppgave ikke lenger er tilgjengelig, hverken fra oppdragsgiver
1308 eller fra universitetet. Hans forsøk på å få den avbildet og lagt
1309 ut på Internett har vist seg fånyttes, så derfor tilbød jeg meg for
1310 en stund tilbake å publisere den og gjøre den tilgjengelig med
1311 fribruksvilkår på Internett. Det er nå klart, og hovedfagsoppgaven
1312 er tilgjengelig blant annet via &lt;a
1313 href=&quot;http://www.hungry.com/~pere/publisher/&quot;&gt;min liste over
1314 publiserte bøker&lt;/a&gt;, både som nettside,
1315 &lt;a href=&quot;https://www.lulu.com/search?contributor=Ole-Erik+Yrvin&quot;&gt;digital
1316 bok i ePub-format og på papir fra lulu.com&lt;/a&gt;. Jeg regner med at
1317 den også vil dukke opp på nettbokhandlere i løpet av en måned eller
1318 to.&lt;/p&gt;
1319
1320 &lt;p&gt;Alle tabeller og figurer er gjenskapt for bedre lesbarhet, noen
1321 skrivefeil rettet opp og mange referanser har fått flere detaljer
1322 som ISBN-nummer og DOI-referanse. Selv om jeg ikke regner med at
1323 dette blir en kioskvelter, så håper jeg denne nye utgaven kan komme
1324 fremtiden til glede.&lt;/p&gt;
1325
1326 &lt;p&gt;Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
1327 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
1328 til min adresse
1329 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;. Merk,
1330 betaling med bitcoin er ikke anonymt. :)&lt;/p&gt;
1331 </description>
1332 </item>
1333
1334 <item>
1335 <title>«underordnet tjenestemann blir inhabil fordi en overordnet er inhabil».</title>
1336 <link>https://people.skolelinux.org/pere/blog/_underordnet_tjenestemann_blir_inhabil_fordi_en_overordnet_er_inhabil__.html</link>
1337 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/_underordnet_tjenestemann_blir_inhabil_fordi_en_overordnet_er_inhabil__.html</guid>
1338 <pubDate>Thu, 7 Sep 2023 09:10:00 +0200</pubDate>
1339 <description>&lt;p&gt;Medlemmene av Norges regjering har demonstert de siste månedene at
1340 habilitetsvureringer ikke er deres sterke side og det gjelder både
1341 Arbeiderpartiets og Senterpartiers representater. Det er heldigvis
1342 enklere i det private, da inhabilitetsreglene kun gjelder de som
1343 jobber for folket, ikke seg selv. Sist ut er utenriksminister
1344 Huitfeldt. I går kom nyheten om at
1345 &lt;a href=&quot;https://www.nrk.no/nyheter/riksadvokaten_-okokrim-nestsjef-kan-behandle-huitfeldt-saken-1.16545162&quot;&gt;Riksadvokaten
1346 har konkludert med at nestsjefen i Økokrim kan behandle sak om
1347 habilitet og innsidekunnskap&lt;/a&gt; for Huitfeldt, på tross av at hans
1348 overordnede, sjefen for Økokrim, har meldt seg inhabil i saken. Dette
1349 er litt rart. I veilednigen
1350 «&lt;a href=&quot;https://www.regjeringen.no/globalassets/upload/krd/vedlegg/komm/veiledere/habilitet_i_kommuner_og_fylkeskommuner.pdf&quot;&gt;Habilitet
1351 i kommuner og fylkeskommuner&lt;/a&gt;» av Kommunal- og regionaldepartementet
1352 forteller de hva som gjelder, riktig nok gjelder veiledningen ikke for
1353 Økokrim som jo ikke er kommune eller fylkeskommune, men jeg får ikke
1354 inntrykk av at dette er regler som kun gjelder for kommune og
1355 fylkeskommune:
1356
1357 &lt;blockquote&gt;
1358 &lt;p&gt;«&lt;strong&gt;2.1 Oversikt over inhabilitetsgrunnlagene&lt;/strong&gt;
1359
1360 &lt;p&gt;De alminnelige reglene om inhabilitet for den offentlige
1361 forvaltningen er gitt i
1362 &lt;a href=&quot;https://lovdata.no/dokument/NL/lov/1967-02-10/KAPITTEL_2#KAPITTEL_2&quot;&gt;forvaltningsloven
1363 §§ 6 til 10&lt;/a&gt;. Forvaltningslovens hovedregel om inhabilitet framgår
1364 av § 6. Her er det gitt tre ulike grunnlag som kan føre til at en
1365 tjenestemann eller folkevalgt blir inhabil. I § 6 første ledd
1366 bokstavene a til e er det oppstilt konkrete tilknytningsforhold mellom
1367 tjenestemannen og saken eller sakens parter som automatisk fører til
1368 inhabilitet. Annet ledd oppstiller en skjønnsmessig regel om at
1369 tjenestemannen også kan bli inhabil etter en konkret vurdering av
1370 inhabilitetsspørsmålet, der en lang rekke momenter kan være
1371 relevante. I tredje ledd er det regler om såkalt avledet
1372 inhabilitet. Det vil si at en underordnet tjenestemann blir inhabil
1373 fordi en overordnet er inhabil.»&lt;/p&gt;
1374 &lt;/blockquote&gt;
1375
1376 &lt;p&gt;Loven sier ganske enkelt «Er den overordnede tjenestemann ugild,
1377 kan avgjørelse i saken heller ikke treffes av en direkte underordnet
1378 tjenestemann i samme forvaltningsorgan.» Jeg antar tanken er at en
1379 underordnet vil stå i fare for å tilpasse sine konklusjoner til det
1380 overordnet vil ha fordel av, for å fortsatt ha et godt forhold til sin
1381 overordnede. Men jeg er ikke jurist og forstår nok ikke kompliserte
1382 juridiske vurderinger. For å sitere «Kamerat Napoleon» av George
1383 Orwell: «Alle dyr er like, men noen dyr er likere enn andre».
1384 </description>
1385 </item>
1386
1387 <item>
1388 <title>Invidious add-on for Kodi 20</title>
1389 <link>https://people.skolelinux.org/pere/blog/Invidious_add_on_for_Kodi_20.html</link>
1390 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/Invidious_add_on_for_Kodi_20.html</guid>
1391 <pubDate>Thu, 10 Aug 2023 19:50:00 +0200</pubDate>
1392 <description>&lt;p&gt;I still enjoy &lt;a href=&quot;https://kodi.tv/&quot;&gt;Kodi&lt;/a&gt; and
1393 &lt;a href=&quot;https://libreelec.tv/&quot;&gt;LibreELEC&lt;/a&gt; as my multimedia center
1394 at home. Sadly two of the services I really would like to use from
1395 within Kodi are not easily available. The most wanted add-on would be
1396 one making &lt;a href=&quot;https://archive.org/&quot;&gt;The Internet Archive&lt;/a&gt;
1397 available, and it has
1398 &lt;a href=&quot;https://kodi.wiki/view/Add-on:Internet_Archive&quot;&gt;not been
1399 working&lt;/a&gt; for many years. The second most wanted add-on is one
1400 using &lt;a href=&quot;https://invidious.io/&quot;&gt;the Invidious privacy enhanced
1401 Youtube frontent&lt;/a&gt;. A plugin for this has been partly working, but
1402 not been kept up to date in the Kodi add-on repository, and its
1403 upstream seem to have given it up in April this year, when the git
1404 repository was closed. A few days ago I got tired of this sad state
1405 of affairs and decided to
1406 &lt;a href=&quot;https://github.com/petterreinholdtsen/kodi-invidious-plugin&quot;&gt;have
1407 a go at improving the Invidious add-on&lt;/a&gt;. As
1408 &lt;a href=&quot;https://github.com/iv-org/invidious/issues/3872&quot;&gt;Google has
1409 already attacked&lt;/a&gt; the Invidious concept, so it need all the support
1410 if can get. My small contribution here is to improve the service
1411 status on Kodi.&lt;/p&gt;
1412
1413 &lt;p&gt;I added support to the Invidious add-on for automatically picking a
1414 working Invidious instance, instead of requiring the user to specify
1415 the URL to a specific instance after installation. I also had a look
1416 at the set of patches floating around in the various forks on github,
1417 and decided to clean up at least some of the features I liked and
1418 integrate them into my new release branch. Now the plugin can handle
1419 channel and short video items in search results. Earlier it could
1420 only handle single video instances in the search response. I also
1421 brushed up the set of metadata displayed a bit, but hope I can figure
1422 out how to get more relevant metadata displayed.&lt;/p&gt;
1423
1424 &lt;p&gt;Because I only use Kodi 20 myself, I only test on version 20 and am
1425 only motivated to ensure version 20 is working. Because of API changes
1426 between version 19 and 20, I suspect it will fail with earlier Kodi
1427 versions.&lt;/p&gt;
1428
1429 &lt;p&gt;I already
1430 &lt;a href=&quot;https://github.com/xbmc/repo-plugins/pull/4363&quot;&gt;asked to have
1431 the add-on added&lt;/a&gt; to the official Kodi 20 repository, and is
1432 waiting to heard back from the repo maintainers.&lt;/p&gt;
1433
1434 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1435 activities, please send Bitcoin donations to my address
1436 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1437 </description>
1438 </item>
1439
1440 <item>
1441 <title>What did I learn from OpenSnitch this summer?</title>
1442 <link>https://people.skolelinux.org/pere/blog/What_did_I_learn_from_OpenSnitch_this_summer_.html</link>
1443 <guid isPermaLink="true">https://people.skolelinux.org/pere/blog/What_did_I_learn_from_OpenSnitch_this_summer_.html</guid>
1444 <pubDate>Sun, 11 Jun 2023 08:30:00 +0200</pubDate>
1445 <description>&lt;p&gt;With yesterdays
1446 &lt;a href=&quot;https://www.debian.org/News/2023/20230610&quot;&gt;release of Debian
1447 12 Bookworm&lt;/a&gt;, I am happy to know the
1448 &lt;a href=&quot;https://tracker.debian.org/pkg/opensnitch&quot;&gt;the interactive
1449 application firewall OpenSnitch&lt;/a&gt; is available for a wider audience.
1450 I have been running it for a few weeks now, and have been surprised
1451 about some of the programs connecting to the Internet. Some programs
1452 are obviously calling out from my machine, like the NTP network based
1453 clock adjusting system and Tor to reach other Tor clients, but others
1454 were more dubious. For example, the KDE Window manager try to look up
1455 the host name in DNS, for no apparent reason, but if this lookup is
1456 blocked the KDE desktop get periodically stuck when I use it. Another
1457 surprise was how much Firefox call home directly to mozilla.com,
1458 mozilla.net and googleapis.com, to mention a few, when I visit other
1459 web pages. This direct connection happen even if I told Firefox to
1460 always use a proxy, and the proxy setting is ignored for this traffic.
1461 Other surprising connections come from audacity and dirmngr (I do not
1462 use Gnome). It took some trial and error to get a good default set of
1463 permissions. Without it, I would get popups asking for permissions at
1464 any time, also the most inconvenient ones where I am in the middle of
1465 a time sensitive gaming session.&lt;/p&gt;
1466
1467 &lt;p&gt;I suspect some application developers should rethink when then need
1468 to use network connections or DNS lookups, and recommend testing
1469 OpenSnitch (only &lt;tt&gt;apt install opensnitch&lt;/tt&gt; away in Debian
1470 Bookworm) to locate and report any surprising Internet connections on
1471 your desktop machine.&lt;/p&gt;
1472
1473 &lt;p&gt;At the moment the upstream developer and Debian package maintainer
1474 is working on making the system more reliable in Debian, by enabling
1475 the eBPF kernel module to track processes and connections instead of
1476 depending in content in /proc/. This should enter unstable fairly
1477 soon.&lt;/p&gt;
1478
1479 &lt;p&gt;As usual, if you use Bitcoin and want to show your support of my
1480 activities, please send Bitcoin donations to my address
1481 &lt;b&gt;&lt;a href=&quot;bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&quot;&gt;15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
1482
1483 &lt;p&gt;&lt;strong&gt;Update 2023-06-12&lt;/strong&gt;: I got a tip about
1484 &lt;a href=&quot;https://wiki.debian.org/PrivacyIssues&quot;&gt;a list of privacy
1485 issues in Free Software&lt;/a&gt; and the
1486 &lt;a href=&quot;irc://irc.debian.org/%23debian-privacy&quot;&gt;#debian-privacy IRC
1487 channel&lt;/a&gt; discussing these topics.&lt;/p&gt;
1488
1489 </description>
1490 </item>
1491
1492 </channel>
1493 </rss>