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