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