<atom:link href="http://people.skolelinux.org/pere/blog/index.rss" rel="self" type="application/rss+xml" />
<item>
- <title>Why is your site not using Content Security Policy / CSP?</title>
- <link>http://people.skolelinux.org/pere/blog/Why_is_your_site_not_using_Content_Security_Policy___CSP_.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Why_is_your_site_not_using_Content_Security_Policy___CSP_.html</guid>
- <pubDate>Sun, 9 Dec 2018 15:00:00 +0100</pubDate>
- <description><p>Yesterday, I had the pleasure of watching on Frikanalen the OWASP
-talk by Scott Helme titled
-"<a href="https://frikanalen.no/video/626080/">What We’ve Learned From
-Billions of Security Reports</a>". I had not heard of the
-<a href="https://en.wikipedia.org/wiki/Content_Security_Policy">Content
-Security Policy standard</a> nor its ability to "call home" when a
-browser detect a policy breach (I do not follow web page design
-development much these days), and found the talk very illuminating.</p>
-
-<p>The mechanism allow a web site owner to use HTTP headers to tell
-visitors web browser which sources (internal and external) are allowed to
-be used on the web site. Thus it become possible to enforce a "only
-local content" policy despite web designers urge to fetch programs
-from random sites on the Internet, like the one
-<a href="https://securityaffairs.co/wordpress/68966/hacking/browsealoud-plugin-hack.html">enabling
-the attack</a> reported by Scott Helme earlier this year.</p>
-
-<p>Using CSP seem like an obvious thing for a site admin to implement
-to take some control over the information leak that occur when
-external sources are used to render web pages, it is a mystery more
-sites are not using CSP? It is being
-<a href="https://www.w3.org/TR/CSP/">standardized under W3C</a> these
-days, and is supposed by most web browsers</p>
-
-<p>I managed to find <a href="https://github.com/mozilla/django-csp">a
-Django middleware for implementing CSP</a> and was happy to discover
-it was already in Debian. I plan to use it to add CSP support to the
-Frikanalen web site soon.</p>
+ <title>Oppdatert Noark 5 Tjenestegrenesnitt versjon 1.0 for Noark 5.5.0</title>
+ <link>http://people.skolelinux.org/pere/blog/Oppdatert_Noark_5_Tjenestegrenesnitt_versjon_1_0_for_Noark_5_5_0.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Oppdatert_Noark_5_Tjenestegrenesnitt_versjon_1_0_for_Noark_5_5_0.html</guid>
+ <pubDate>Fri, 5 Jul 2019 17:20:00 +0200</pubDate>
+ <description><p>Jeg er veldig glad for å kunne fortelle at i går ble ny versjon av
+<a href="https://www.arkivverket.no/forvaltning-og-utvikling/noark-standarden/noark-5/tjenestegrensesnitt-noark5">API-spesifikasjonen
+for Noark 5 Tjenestegrensesnitt</a> gitt ut. Det så lenge mørkt ut
+for sjansene for å få inn nødvendige korreksjoner i
+spesifikasjonsteksten innen rimelig tid, men takket være intens og god
+innsats fra Mona og Anne Sofie hos Arkivverket de siste ukene, så ble
+resultatet som ble gitt ut på USAs frigjøringsdag mye bedre enn jeg
+fryktet.</p>
+
+<p>Spesifikasjonen er
+<a href="https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/">tilgjengelig
+som markdown-filer i Arkivverkets github-prosjekt for dette</a>, og de
+aller fleste av forslagene til forbedringer fra oss som holder på med
+<a href="https://gitlab.com/OsloMet-ABI/nikita-noark5-core">Nikita-prosjektet</a>
+kom med i denne nye og oppdaterte spesifikasjonsteksten. Det er
+fortsatt mye som gjenstår før den er entydig, klar og sikrer samvirke
+på tvers av leverandører, men utgangspunktet er veldig mye bedre enn
+forrige versjon fra 2016. Ta gjerne en titt.</p>
+
+<p>Ellers må jeg jo si at det var hyggelig å se at min forrige
+bloggpost om tjenestegrensesnittet fikk en
+<ahref="https://beta.arkivverket.no/post/186020592045/noark-5-versjon-50-tjenestegrensesnitt-10">lenke
+fra Arkivverket Beta</a>.</p>
+
+<p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
+det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
+til min adresse
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.
+Merk, betaling med bitcoin er ikke anonymt. :)</p>
+</description>
+ </item>
+
+ <item>
+ <title>Teach kids to protect their privacy - the EDRi way</title>
+ <link>http://people.skolelinux.org/pere/blog/Teach_kids_to_protect_their_privacy___the_EDRi_way.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Teach_kids_to_protect_their_privacy___the_EDRi_way.html</guid>
+ <pubDate>Thu, 4 Jul 2019 19:10:00 +0200</pubDate>
+ <description><p>Childs need to learn how to guard their privacy too. To help them,
+<a href="https://edri.org/">European Digital Rights (EDRi)</a> created
+a colorful booklet providing information on several privacy related topics,
+and tips on how to protect ones privacy in the digital age.</p>
+
+<p>The 24 page booklet titled Digital Defenders is
+<a href="https://edri.org/digital-defenders-help-kids-defend-their-privacy-around-europe">available
+in several languages</a>. Thanks to the valuable contributions from
+members of <a href="https://efn.no/">the Electronic Foundation Norway
+(EFN)</a> and others, it is also available in Norwegian Bokmål.
+If you would like to have it available in your language too,
+<a href="https://hosted.weblate.org/projects/efn/privacy4kids/">contribute
+via Weblate</a> and get in touch.</p>
+
+<p>But a funny, well written and good looking PDF do not have much
+impact, unless it is read by the right audience. To increase the
+chance of kids reading it, I am currently assisting EFN in getting
+copies printed on paper to distribute on the street and in class
+rooms. Print the booklet was made possible thanks to a small et of
+great sponsors. Thank you very much to each and every one of them! I
+hope to have the printed booklet ready to hand out on Tuesday, when
+<a href="https://www.nuug.no/>">the Norwegian Unix Users Group</a> is
+organizing <a href="https://wiki.nuug.no/sommerfest2019">its yearly
+barbecue for geeks and free software zealots in the Oslo area</a>. If
+you are nearby, feel free to come by and check out the party and the
+booklet.</p>
+
+<p>If the booklet prove to be a success, it would be great to get
+more sponsoring and distribute it to every kid in the country. :)</p>
<p>As usual, if you use Bitcoin and want to show your support of my
activities, please send Bitcoin donations to my address
</item>
<item>
- <title>New and improved Frikanalen Kodi addon version 0.0.3</title>
- <link>http://people.skolelinux.org/pere/blog/New_and_improved_Frikanalen_Kodi_addon_version_0_0_3.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/New_and_improved_Frikanalen_Kodi_addon_version_0_0_3.html</guid>
- <pubDate>Thu, 8 Nov 2018 10:30:00 +0100</pubDate>
- <description><p>If you read my blog regularly, you probably know I am involved in
-running and developing the <a href="https://frikanalen.no/">Norwegian
-TV channel Frikanalen</a>. It is an open channel, allowing everyone
-in Norway to publish videos on a TV channel with national coverage.
-You can think of it as Youtube for national television.
-In addition to distribution on RiksTV and Uninett, Frikanalen is also
-available as a Kodi addon. The last few days I have updated the code
-to add more features. A
-<a href="https://kodi.tv/addon/plugins-video-add-ons/frikanalen-nett-tv">new
-and improved version 0.0.3 Frikanalen addon</a> was just made
-available via the Kodi repositories. This new version include a
-option to browse videos by category, as well as free text search
-in the video archive. It will now also show the video duration in the
-video lists, which were missing earlier. A new and experimental
-link to the HD video stream currently being worked on is provided, for
-those that want to see what the <a href="https://casparcg.com/">CasparCG</a>
-output look like. The alternative is the SD video stream, generated
-using MLT. CasparCG is controlled by our
-<a href="https://github.com/Frikanalen/mltplayout/">mltplayout
-server</a> which instead of talking to mlt is giving PLAY instructions
-to the CasparCG server when it is time to start a new program.</p>
-
-<p>By now, you are probably wondering what kind of content is being
-played on the channel. These days, it is filled with technical
-presentations like those from <a href="https://www.nuug.no/">NUUG</a>,
-<a href="https://www.debconf.org/">Debconf</a>, Makercon, and TED,
-but there are also some periods with
-<a href="https://www.empo.no/">EMPT TV</a> and
-<a href="https://www.p7.no/">P7</a>.
-
-<p>As usual, if you use Bitcoin and want to show your support of my
-activities, please send Bitcoin donations to my address
+ <title>Nikita og Noark 5 tjenestegrensesnittet tilbyr ny måte å tenke arkivering</title>
+ <link>http://people.skolelinux.org/pere/blog/Nikita_og_Noark_5_tjenestegrensesnittet_tilbyr_ny_m_te___tenke_arkivering.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Nikita_og_Noark_5_tjenestegrensesnittet_tilbyr_ny_m_te___tenke_arkivering.html</guid>
+ <pubDate>Fri, 21 Jun 2019 11:30:00 +0200</pubDate>
+ <description><p><em>av Thomas Sødring (OsloMet) og Petter Reinholdtsen (foreningen
+NUUG)</em></p>
+
+<p>Nikita Noark 5-kjerne er et fri programvareprosjekt som tar i bruk
+Arkivverkets spesifikasjonen for Noark 5 Tjenestegrensesnitt og tilbyr
+et maskinlesbart grensesnitt (arkiv-API) til datasystemer som trenger å
+arkivere dokumenter og informasjon. I tillegg tilbyr Nikita et
+nettleserbasert brukergrensesnitt for brukere av arkivet. Dette
+brukergrensesnittet benytter det maskinlesbare grensesnittet. Noark 5
+Tjenestegrensesnitt er en ny måte å tenke arkivering, med fokus på
+automatisering og maskinell behandling av arkivmateriale, i stedet for
+å fokusere på brukergrensesnitt. En kan tenke på
+tjenestegrensesnittet som arkivet uten brukergrensesnitt, der flere
+aktører kan koble til ulike brukergrensesnitt, tilpasset ulike
+behov.</p>
+
+<p>Historisk sett gjorde Noark standarden en veldig bra jobb med
+overgangen fra
+papir til digital saksbehandling, men det har kommet til kort på andre
+områder. Den teknologiske utviklingen har brakt oss ditt at vi kan og
+skal forvente langt mer fra en arkivkjerne enn før, men det offentlig
+er ofte konservativ når det gjelder nytenking. For lengst skulle
+begreper som samvirke mellom datasystemer, metadata, prosess og
+tjenestegrensesnitt (API) vært dominerende når systemer kjøpes
+inn. Dessverre er det slik at ikke alle ønsker samvirke mellom
+datasystemer velkommen, og det kan være trygt å kjøpe «svarte bokser»
+der du slipper å ta stilling til hvordan man skal få flere systemer
+til å virke sammen. Men IT-arkitektur er et begrep arkivfolk også
+begynner å ta inn over seg.</p>
+
+<p>Slike systemer for å organisere metadata bør ha nettbaserte
+tjenestegrensesnitt der brukergrensesnitt er tydelig adskilt fra
+bakenforliggende system. Det finnes mange rapporter som snakker om å
+bryte ned siloer i forvaltningen og standardiserte tjenestegrensesnitt
+er det viktigste virkemiddel mot datasiloer og legger til rette for
+økt samvirke mellom systemer. Et standardisert tjenestegrensesnitt er
+et viktig middel for å få systemer til å samhandle da det sikrer at
+ulike produsenters systemer kan snakke sammen på tvers. Samfunnet
+fungerer ikke uten standardisering. Vi har alle samme strømstyrke og
+kontakter i veggene og kjører alle på høyre side av veien i Norge. Det er i en slik
+sammenheng at prosjektet «Noark 5 Tjenestegrensesnitt» er veldig
+viktig. Hvis alle leverandører av arkivsystemer forholdt seg til et
+standardisert tjenestegrensesnitt kunne kostnadene for arkivering
+reduseres. Tenk deg at du er en kommune som ønsker et fagsystem integrert
+med arkivløsningen din. I dag må fagsystemleverandøren vite og
+tilpasse seg den spesifikke versjonen og varianten av arkivløsningen
+du har. Hvis vi antar at alle leverandører av arkivkjerner har solgt
+inn enten SOAP eller REST-grensesnitt til kunder de siste 10 årene og
+det kommer endret versjon av grensesnittet innimellom, så gir det
+veldig mange forskjellige tjenestegrensesnitt en fagsystemleverandør
+må forholde seg til. Med 12 leverandører og kvartalsvise oppdateringer
+kan det potensielt bli 96 ulike varianter hvert eneste år. Det sier
+seg selv at det blir dyrt. Men det blir faktisk verre. Hvis du senere
+ønsker å bytte ut arkivsystemet med et annet så er du avhengig å få
+alle integrasjonene dine laget på nytt. Dette kan gjøre at du velger å
+forbli hos en dårlig leverandør framfor å skaffe nytt system, fordi
+det blir for vanskelig og dyrt å bytte. Dermed etableres det «små»
+monopolsituasjoner som er vanskelig å bryte ut av. Dårlige valg i dag
+kan ha uante kostander på sikt. I Nikita-prosjektet har vi kun jobbet
+opp mot Noark 5 Tjenestegrensesnittet. Det har tatt en god del
+ressurser å sette seg inn i spesifikasjonen og ta den i bruk, spesielt
+på grunn av uklarheter i spesifikasjonen. Hvis vi måtte gjøre det
+samme for alle versjoner og varianter av de forskjellige
+tjenestegrensesnittene ville det blitt veldig tidkrevende og
+kostbart.</p>
+
+<p>For deg som arkivar er digitalisering og systemer som skal virke
+sammen en del av den nye hverdagen. Du har kanskje blitt skånet for
+det ved å kjøpe svarte bokser, men du risikerer at du gjør deg selv en
+bjørnetjeneste. Det kan oppleves som kjedelig å fortelle kolleger at
+du skal sette deg inn i et tjenestegrensesnitt, men dette er faktisk
+veldig spennende. Tjenestegrensesnittet er på en måte blitt levende og
+det er spesielt et begrep du bør merke deg: OData. Å trekke inn deler
+av OData-standarden som en måte å filtrere entitetsøk i et arkivsystem
+var et nyttig trekk i prosjektet. Følgende eksempel er en
+OData-spørring det går an å sende inn til en standardisert
+arkivkjerne:</p>
+
+<p><blockquote>
+.../sakarkiv/journalpost?filter=contains(tittel, 'nabovarsel')
+</blockquote></p>
+
+<p>Spørringen over vil hente en liste av alle dine journalposter der
+tittelen til journalposten inneholder ordet 'nabovarsel'. Alle
+leverandører som implementerer tjenestegrensesnittet vil måtte tilby
+dette. Det betyr at hvis du lærer dette språket for et system, vil det
+være gjeldende for alle. Dette er egentlig en ny måte å søke i
+arkivdatabasen på og vil være svært nyttig, for eksempel kan søk i
+tjenestegrensesnittet antagelig brukes til å hente ut offentlig
+postjournal. I arkivverden pleier vi å like teknologier som er
+menneskelesbart, da vet vi det er enkelt og nyttig! OData er også
+viktig fordi det kan bli en ny måte å svare innsynsforespørsler på i
+tråd med offentlighetsloven § 9, der retten til å kreve innsyn i
+sammenstilling fra databaser er nedfelt. I dag ser vi
+forvaltningsorganer som avviser slike krav fordi det «ikke kan gjøres
+med enkle framgangsmåter». Bruken av OData i tjenestegrensesnittet,
+sammen med maskinlesbar markeringsformater kan være et viktig bidrag
+til å åpne arkivene i tråd med prinsippene om en åpen og transparent
+forvaltning.</p>
+
+<p>Standardisering er viktig fordi det <em>kan</em> sikre samvirke.
+Men den effekten kommer kun hvis standardiseringen sikrer at alle
+forstår standarden på samme måte, dvs. at den er entydig og klar. En
+god måte å sikre en entydig og klar spesifikasjon er ved å kreve at
+det finnes minst to ulike implementasjoner som følger spesifikasjonen
+og som kan snakke sammen, det vil si at de snakker samme språk, slik
+IETF krever for alle sine standarder, før spesifikasjonen anses å være
+ferdig. Tilbakemelding fra miljøet forteller at både leverandører og
+kunder har et avslappet forhold til Noark 5 Tjenestegrensesnitt og det
+er så langt kun Evry som har visst offentlig at de har en
+implementasjon av tjenestegrensesnittet. Evry, HK Data og Fredrikstad
+kommune er igang med et pilotprosjekt på Noark 5
+Tjenestegrensesnitt. For å redusere kostnadene for samvirkende
+datasystemer betraktelig, er det veldig viktig at vi kommer i en
+situasjon der alle leverandører har sine egne implementasjoner av
+tjenestegrensesnittet, og at disse oppfører seg likt og i tråd med det
+som er beskrevet i spesifikasjonen.</p>
+
+<p>Det er her fri programvare spiller en viktig rolle. Med en uklar
+standard blir det som en polsk riksdag, der ingenting fungerer. Nikita
+er en fri programvareimplementasjon av tjenestegrensesnitt og kan
+fungere som teknisk referanse slik at leverandører enklere kan se og
+forstå hvordan standarden skal tolkes. Vi har i Nikitaprosjektet
+erfart å ende opp med vidt forskjellige tolkninger når
+prosjektmedlemmene leser spesifikasjonsteksten, en effekt av en uklar
+spesifikasjon. Men Nikitaprosjektet har også utviklet et test-program
+som sjekker om et tjenestegrensesnitt er i samsvar med standarden, og
+prosjektet bruker det hele tiden for å sikre at endringer og
+forbedringer fungerer. Egenerklæringsskjemaenes dager kan være talte!
+Snart vil du selv kunne teste hver oppdatering av arkivsystemet med en
+uavhengig sjekk.</p>
+
+<p>Fri programvare representerer en demokratisering av kunnskap der
+tolkning- og innlåsingsmakt flyttes fra leverandør til allmenheten.
+Med fri programvare har du en litt annerledes verdikjede, der selve
+produktet ikke holdes hemmelig for å tjene penger, slik en gjør med
+ufri programvare og skytjenester som ikke bruker fri programvare, men
+du kan tjene penger på andre deler av verdikjeden. Med fri programvare
+kan samfunnet betale for å videreutvikle nyttig
+fellesfunksjonalitet.</p>
+
+<p>Nikita er en fri programvareimplementasjon av tjenestegrensesnittet og
+kan fungere som en referanseimplementasjon dersom det er ønskelig.
+Alle har lik tilgang til koden og det koster ingenting å ta den i bruk
+og utforske det. Nikitaprosjektet ønsker tjenestegrensesnittet
+velkommen og stiller veldig gjerne opp i diskusjoner om tolkning av
+tjenestegrensesnittet. Nikita er bygget på moderne
+programmeringsrammeverk og utviklet i full åpenhet. Men Nikita er ikke
+noe du kan kjøpe. Nikita er først og fremst et verktøy for forsking og
+utvikling laget for å fremme forskning på arkivfeltet. Systemer som
+virker sammen har alltid vært hovedfokus og vil være det fremover.
+Det brukes som undervisningsverktøy der studentene ved OsloMet lærer
+om administrativt oppsett, saksbehandling, uttrekk og samvirkende
+datasystemer. Det brukes også som forskningsobjekt der vi ser på
+import av dokumentsamlinger, bruk av blokkjede og andre nyskapende
+måter å tenke arkiv på. Det er dog helt greit om andre tar Nikita og
+pakker det for å selge det som produkt. Forvaltningsorganer med
+sterke drift- og utviklingsmiljøer kan også se på Nikita og utforske
+hva som er mulig. Dette kan de gjøre uten å måtte betale for
+bruksrettigheter eller tilgang til konsulenter. Men arkivering blir
+ikke gratis på grunn av Nikita. Det trengs fortsatt folk med
+kompetanse og tid til å ta i bruk Nikita.</p>
+
+<p>Nikita har nylig kommet med en ny utgave, den sjette i rekken.
+Systemet er ikke ferdig, mest på grunn av at API-spesifikasjonen for
+Noark 5 Tjenestegrensesnitt ikke er ferdig, men allerede i dag kan en
+bruke Nikita som arkiv. Vi har laget eksempelsystem for å importere
+data fra deponi-XML og slik gjøre eksisterende arkivdata tilgjengelig
+via et API. Vi har også laget en testklient som importerer epost inn
+i arkivet med vedlegg der epostenes trådinformasjon brukes til å legge
+eposttråder i samme arkivmappe, og en annen testklient som henter
+epost ut av en arkivmappe på mbox-format slik at en vanlig epostklient
+kan brukes til å lese igjennom og svare på epostene i en
+arkivmappe. De som vil ta en titt på Nikita kan besøke
+<a href="https://nikita.oslomet.no">https://nikita.oslomet.no</a> og
+logge inn med brukernavn «admin@example.com» og passord «password».
+Dette gir tilgang til det forenklede brukergrensesnittet som brukes
+til undervisning. De som heller vil ta en titt under panseret kan
+besøke
+<a href="https://nikita.oslomet.no/browse.html">https://nikita.oslomet.no/browse.html</a>
+og der se hvordan API-et fungerer mer i detalj. Innloggingsdetaljer
+her er det samme som for brukergrensesnittet.</p>
+
+<p>Fremover er fokuset på forbedring av spesifikasjonen Noark 5
+Tjenestegrensesnitt. De som skrev tjenestegrensesnittet gjorde et
+interessant og framtidsrettet grep, de skilte sak fra arkiv.
+Tjenestegrensesnittet består av flere "pakker", der noen er
+grunnleggende mens andre bygger på de grunnleggende pakkene. Pakkene
+som er beskrevet så langt heter «arkivstruktur», «sakarkiv»,
+«administrasjon», «loggogsporing» og «moeter» (dessverre
+<a href="https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/pull/120">planlagt
+fjernet</a> i første utgave). Etter hvert håper vi å utforske
+prosses- og metadatabeskrivelser til flere fagområder og bidra til at
+tjenestegrensesnittet kan legge til flere pakker som «byggarkiv»,
+«barnevern», «personal», «barnehage», der arkivfaglig metadata- og
+dokumentasjonsbehov er kartlagt og standardisert.</p>
+
+<p>Nikita utvikles av en liten prosjektgruppe, og vi er alltid
+interessert å bli flere. Hvis en åpen, fri og standardisert tilnærming
+til arkivering høres interessant ut, bli med oss på veien videre. Vi
+er tilstede på IRC-kanalen #nikita hos FreeNode (tilgjengelig via
+nettleser på
+<a href="https://webchat.freenode.net?channels=#nikita">https://webchat.freenode.net?channels=#nikita</a>),
+og har en e-postliste nikita-noark@nuug.no hos NUUG (tilgjengelig for
+påmelding og arkiv på
+<a href="https://lists.nuug.no/mailman/listinfo/nikita-noark">https://lists.nuug.no/mailman/listinfo/nikita-noark</a>)
+der en kan følge med eller være med oss på den spennende veien videre.
+Spesifikasjonen for Noark 5 Tjenestegrensesnitt vedlikeholdes på
+github,
+<a href="https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/">https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/</a>.</p>
+
+<p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
+det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
+til min adresse
<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
</description>
</item>
<item>
- <title>Time for an official MIME type for patches?</title>
- <link>http://people.skolelinux.org/pere/blog/Time_for_an_official_MIME_type_for_patches_.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Time_for_an_official_MIME_type_for_patches_.html</guid>
- <pubDate>Thu, 1 Nov 2018 08:15:00 +0100</pubDate>
- <description><p>As part of my involvement in
-<a href="https://gitlab.com/OsloMet-ABI/nikita-noark5-core">the Nikita
-archive API project</a>, I've been importing a fairly large lump of
-emails into a test instance of the archive to see how well this would
-go. I picked a subset of <a href="https://notmuchmail.org/">my
-notmuch email database</a>, all public emails sent to me via
-@lists.debian.org, giving me a set of around 216 000 emails to import.
-In the process, I had a look at the various attachments included in
-these emails, to figure out what to do with attachments, and noticed
-that one of the most common attachment formats do not have
-<a href="https://www.iana.org/assignments/media-types/media-types.xhtml">an
-official MIME type</a> registered with IANA/IETF. The output from
-diff, ie the input for patch, is on the top 10 list of formats
-included in these emails. At the moment people seem to use either
-text/x-patch or text/x-diff, but neither is officially registered. It
-would be better if one official MIME type were registered and used
-everywhere.</p>
-
-<p>To try to get one official MIME type for these files, I've brought
-up the topic on
-<a href="https://www.ietf.org/mailman/listinfo/media-types">the
-media-types mailing list</a>. If you are interested in discussion
-which MIME type to use as the official for patch files, or involved in
-making software using a MIME type for patches, perhaps you would like
-to join the discussion?</p>
+ <title>Jami/Ring, finally functioning peer to peer communication client</title>
+ <link>http://people.skolelinux.org/pere/blog/Jami_Ring__finally_functioning_peer_to_peer_communication_client.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Jami_Ring__finally_functioning_peer_to_peer_communication_client.html</guid>
+ <pubDate>Wed, 19 Jun 2019 08:50:00 +0200</pubDate>
+ <description><p>Some years ago, in 2016, I
+<a href="http://people.skolelinux.org/pere/blog/Experience_and_updated_recipe_for_using_the_Signal_app_without_a_mobile_phone.html">wrote
+for the first time about</a> the Ring peer to peer messaging system.
+It would provide messaging without any central server coordinating the
+system and without requiring all users to register a phone number or
+own a mobile phone. Back then, I could not get it to work, and put it
+aside until it had seen more development. A few days ago I decided to
+give it another try, and am happy to report that this time I am able
+to not only send and receive messages, but also place audio and video
+calls. But only if UDP is not blocked into your network.</p>
+
+<p>The Ring system changed name earlier this year to
+<a href="https://en.wikipedia.org/wiki/Jami_(software)">Jami</a>. I
+tried doing web search for 'ring' when I discovered it for the first
+time, and can only applaud this change as it is impossible to find
+something called Ring among the noise of other uses of that word. Now
+you can search for 'jami' and this client and
+<a href="https://jami.net/">the Jami system</a> is the first hit at
+least on duckduckgo.</p>
+
+<p>Jami will by default encrypt messages as well as audio and video
+calls, and try to send them directly between the communicating parties
+if possible. If this proves impossible (for example if both ends are
+behind NAT), it will use a central SIP TURN server maintained by the
+Jami project. Jami can also be a normal SIP client. If the SIP
+server is unencrypted, the audio and video calls will also be
+unencrypted. This is as far as I know the only case where Jami will
+do anything without encryption.</p>
+
+<p>Jami is available for several platforms: Linux, Windows, MacOSX,
+Android, iOS, and Android TV. It is included in Debian already. Jami
+also work for those using F-Droid without any Google connections,
+while Signal do not.
+<a href="https://git.jami.net/savoirfairelinux/ring-project/wikis/technical/Protocol">The
+protocol</a> is described in the Ring project wiki. The system uses a
+distributed hash table (DHT) system (similar to BitTorrent) running
+over UDP. On one of the networks I use, I discovered Jami failed to
+work. I tracked this down to the fact that incoming UDP packages
+going to ports 1-49999 were blocked, and the DHT would pick a random
+port and end up in the low range most of the time. After talking to
+the developers, I solved this by enabling the dhtproxy in the
+settings, thus using TCP to talk to a central DHT proxy instead of
+
+peering directly with others. I've been told the developers are
+working on allowing DHT to use TCP to avoid this problem. I also ran
+into a problem when trying to talk to the version of Ring included in
+Debian Stable (Stretch). Apparently the protocol changed between
+beta2 and the current version, making these clients incompatible.
+Hopefully the protocol will not be made incompatible in the
+future.</p>
+
+<p>It is worth noting that while looking at Jami and its features, I
+came across another communication platform I have not tested yet. The
+<a href="https://en.wikipedia.org/wiki/Tox_(protocol)">Tox protocol</a>
+and <a href="https://tox.chat/">family of Tox clients</a>. It might
+become the topic of a future blog post.</p>
<p>As usual, if you use Bitcoin and want to show your support of my
activities, please send Bitcoin donations to my address
</item>
<item>
- <title>Measuring the speaker frequency response using the AUDMES free software GUI - nice free software</title>
- <link>http://people.skolelinux.org/pere/blog/Measuring_the_speaker_frequency_response_using_the_AUDMES_free_software_GUI___nice_free_software.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Measuring_the_speaker_frequency_response_using_the_AUDMES_free_software_GUI___nice_free_software.html</guid>
- <pubDate>Mon, 22 Oct 2018 08:40:00 +0200</pubDate>
- <description><p><img src="http://people.skolelinux.org/pere/blog/images/2018-10-22-audmes-measure-speakers.png" align="right" width="40%"/></p>
-
-<p>My current home stereo is a patchwork of various pieces I got on
-flee markeds over the years. It is amazing what kind of equipment
-show up there. I've been wondering for a while if it was possible to
-measure how well this equipment is working together, and decided to
-see how far I could get using free software. After trawling the web I
-came across an article from DIY Audio and Video on
-<a href="https://www.diyaudioandvideo.com/Tutorial/SpeakerResponseTesting/">Speaker
-Testing and Analysis</a> describing how to test speakers, and it listing
-several software options, among them
-<a href="https://sourceforge.net/projects/audmes/">AUDio MEasurement
-System (AUDMES)</a>. It is the only free software system I could find
-focusing on measuring speakers and audio frequency response. In the
-process I also found an interesting article from NOVO on
-<a href="http://novo.press/understanding-speaker-specifications-and-frequency-response/">Understanding
-Speaker Specifications and Frequency Response</a> and an article from
-ecoustics on
-<a href="https://www.ecoustics.com/articles/understanding-speaker-frequency-response/">Understanding
-Speaker Frequency Response</a>, with a lot of information on what to
-look for and how to interpret the graphs. Armed with this knowledge,
-I set out to measure the state of my speakers.</p>
-
-<p>The first hurdle was that AUDMES hadn't seen a commit for 10 years
-and did not build with current compilers and libraries. I got in
-touch with its author, who no longer was spending time on the program
-but gave me write access to the subversion repository on Sourceforge.
-The end result is that now the code build on Linux and is capable of
-saving and loading the collected frequency response data in CSV
-format. The application is quite nice and flexible, and I was able to
-select the input and output audio interfaces independently. This made
-it possible to use a USB mixer as the input source, while sending
-output via my laptop headphone connection. I lacked the hardware and
-cabling to figure out a different way to get independent cabling to
-speakers and microphone.</p>
-
-<p>Using this setup I could see how a large range of high frequencies
-apparently were not making it out of my speakers. The picture show
-the frequency response measurement of one of the speakers. Note the
-frequency lines seem to be slightly misaligned, compared to the CSV
-output from the program. I can not hear several of these are high
-frequencies, according to measurement from
-<a href="http://freehearingtestsoftware.com">Free Hearing Test
-Software</a>, an freeware system to measure your hearing (still
-looking for a free software alternative), so I do not know if they are
-coming out out the speakers. I thus do not quite know how to figure
-out if the missing frequencies is a problem with the microphone, the
-amplifier or the speakers, but I managed to rule out the audio card in my
-PC by measuring my Bose noise canceling headset using its own
-microphone. This setup was able to see the high frequency tones, so
-the problem with my stereo had to be in the amplifier or speakers.</p>
-
-<p>Anyway, to try to role out one factor I ended up picking up a new
-set of speakers at a flee marked, and these work a lot better than the
-old speakers, so I guess the microphone and amplifier is OK. If you
-need to measure your own speakers, check out AUDMES. If more people
-get involved, perhaps the project could become good enough to
-<a href="https://bugs.debian.org/910876">include in Debian</a>? And if
-you know of some other free software to measure speakers and amplifier
-performance, please let me know. I am aware of the freeware option
-<a href="https://www.roomeqwizard.com/">REW</a>, but I want something
-that can be developed also when the vendor looses interest.</p>
+ <title>More sales number for my Free Culture paper editions (2019-edition)</title>
+ <link>http://people.skolelinux.org/pere/blog/More_sales_number_for_my_Free_Culture_paper_editions__2019_edition_.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/More_sales_number_for_my_Free_Culture_paper_editions__2019_edition_.html</guid>
+ <pubDate>Tue, 11 Jun 2019 16:05:00 +0200</pubDate>
+ <description><p>The first book I published,
+<a href="http://www.free-culture.cc/">Free Culture by Lawrence
+Lessig</a>, is still selling a few copies. Not a lot, but enough to
+have contributed slightly over $500 to the <a
+href="https://creativecommons.org/">Creative Commons Corporation</a>
+so far. All the profit is sent there. Most books are still sold via
+Amazon (83 copies), with Ingram second (49) and Lulu (12) and Machette (7) as
+minor channels. Bying directly from Lulu bring the largest cut to
+Creative Commons. The English Edition sold 80 copies so far, the
+French 59 copies, and Norwegian only 8 copies. Nothing impressive,
+but nice to see the work we put down is still being appreciated. The
+ebook edition is available for free from
+<a href="https://github.com/petterreinholdtsen/free-culture-lessig">Github</a>.</p>
+
+<table border="0">
+<tr><th rowspan="2" valign="bottom">Title / language</th>
+<th colspan="7">Quantity</th></tr>
+<tr>
+<th>2016 jan-jun</th>
+<th>2016 jul-dec</th>
+<th>2017 jan-jun</th>
+<th>2017 jul-dec</th>
+<th>2018 jan-jun</th>
+<th>2018 jul-dec</th>
+<th>2019 jan-may</th>
+</tr>
+
+<tr>
+ <td><a href="http://www.lulu.com/shop/lawrence-lessig/culture-libre/paperback/product-22645082.html">Culture Libre / French</a></td>
+ <td align="right">3</td>
+ <td align="right">6</td>
+ <td align="right">19</td>
+ <td align="right">11</td>
+ <td align="right">7</td>
+ <td align="right">6</td>
+ <td align="right">7</td>
+</tr>
+
+<tr>
+ <td><a href="http://www.lulu.com/shop/lawrence-lessig/fri-kultur/paperback/product-22441576.html">Fri kultur / Norwegian</a></td>
+ <td align="right">7</td>
+ <td align="right">1</td>
+ <td align="right">0</td>
+ <td align="right">0</td>
+ <td align="right">0</td>
+ <td align="right">0</td>
+ <td align="right">0</td>
+</tr>
+
+<tr>
+ <td><a href="http://www.lulu.com/shop/lawrence-lessig/free-culture/paperback/product-22440520.html">Free Culture / English</a></td>
+ <td align="right">14</td>
+ <td align="right">27</td>
+ <td align="right">16</td>
+ <td align="right">9</td>
+ <td align="right">3</td>
+ <td align="right">7</td>
+ <td align="right">3</td>
+</tr>
+
+<tr>
+ <td>Total</td>
+ <td align="right">24</td>
+ <td align="right">34</td>
+ <td align="right">35</td>
+ <td align="right">20</td>
+ <td align="right">10</td>
+ <td align="right">13</td>
+ <td align="right">10</td>
+</tr>
+
+</table>
+
+<p>It is fun to see the French edition being more popular than the
+English one.</p>
+
+<p>If you would like to translate and publish the book in your native
+language, I would be happy to help make it happen. Please get in
+touch.</p>
+</description>
+ </item>
+
+ <item>
+ <title>Official MIME type "text/vnd.sosi" for SOSI map data</title>
+ <link>http://people.skolelinux.org/pere/blog/Official_MIME_type__text_vnd_sosi__for_SOSI_map_data.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Official_MIME_type__text_vnd_sosi__for_SOSI_map_data.html</guid>
+ <pubDate>Tue, 4 Jun 2019 09:20:00 +0200</pubDate>
+ <description><p>Just 15 days ago,
+<ahref="http://people.skolelinux.org/pere/blog/MIME_type__text_vnd_sosi__for_SOSI_map_data.html">I
+mentioned</a> my submission to IANA to register an official MIME type
+for the SOSI vector map format. This morning, just an hour ago, I was
+notified that
+<a href="https://www.iana.org/assignments/media-types/text/vnd.sosi">the
+MIME type "text/vnd.sosi"</a> is registered for this format. In
+addition to this registration, my
+<a href="https://github.com/file/file/blob/master/magic/Magdir/sosi">file(1)
+patch for a pattern matching rule for SOSI files</a> has been accepted
+into the official source of that program (pending a new release), and
+I've been told by the team behind
+<a href="https://www.nationalarchives.gov.uk/PRONOM/">PRONOM</a> that
+the SOSI format will be included in the next release of PRONOM, which
+they plan to release this summer around July.</p>
+
+<p>I am very happy to see all of this fall into place, for use by
+<a href="https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/">the
+Noark 5 Tjenestegrensesnitt</a> implementations.</p>
<p>As usual, if you use Bitcoin and want to show your support of my
activities, please send Bitcoin donations to my address
</item>
<item>
- <title>Web browser integration of VLC with Bittorrent support</title>
- <link>http://people.skolelinux.org/pere/blog/Web_browser_integration_of_VLC_with_Bittorrent_support.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Web_browser_integration_of_VLC_with_Bittorrent_support.html</guid>
- <pubDate>Sun, 21 Oct 2018 09:50:00 +0200</pubDate>
- <description><p>Bittorrent is as far as I know, currently the most efficient way to
-distribute content on the Internet. It is used all by all sorts of
-content providers, from national TV stations like
-<a href="https://www.nrk.no/">NRK</a>, Linux distributors like
-<a href="https://www.debian.org/">Debian</a> and
-<a href="https://www.ubuntu.com/">Ubuntu</a>, and of course the
-<a href="https://archive.org/">Internet archive</A>.
-
-<p>Almost a month ago
-<a href="https://tracker.debian.org/pkg/vlc-plugin-bittorrent">a new
-package adding Bittorrent support to VLC</a> became available in
-Debian testing and unstable. To test it, simply install it like
-this:</p>
-
-<p><pre>
-apt install vlc-plugin-bittorrent
-</pre></p>
-
-<p>Since the plugin was made available for the first time in Debian,
-several improvements have been made to it. In version 2.2-4, now
-available in both testing and unstable, a desktop file is provided to
-teach browsers to start VLC when the user click on torrent files or
-magnet links. The last part is thanks to me finally understanding
-what the strange x-scheme-handler style MIME types in desktop files
-are used for. By adding x-scheme-handler/magnet to the MimeType entry
-in the desktop file, at least the browsers Firefox and Chromium will
-suggest to start VLC when selecting a magnet URI on a web page. The
-end result is that now, with the plugin installed in Buster and Sid,
-one can visit any
-<a href="https://archive.org/details/CopyingIsNotTheft1080p">Internet
-Archive page with movies</a> using a web browser and click on the
-torrent link to start streaming the movie.</p>
-
-<p>Note, there is still some misfeatures in the plugin. One is the
-fact that it will hang and
-<a href="https://github.com/johang/vlc-bittorrent/issues/13">block VLC
-from exiting until the torrent streaming starts</a>. Another is the
-fact that it
-<a href="https://github.com/johang/vlc-bittorrent/issues/9">will pick
-and play a random file in a multi file torrent</a>. This is not
-always the video file you want. Combined with the first it can be a
-bit hard to get the video streaming going. But when it work, it seem
-to do a good job.</p>
-
-<p>For the Debian packaging, I would love to find a good way to test
-if the plugin work with VLC using autopkgtest. I tried, but do not
-know enough of the inner workings of VLC to get it working. For now
-the autopkgtest script is only checking if the .so file was
-successfully loaded by VLC. If you have any suggestions, please
-submit a patch to the Debian bug tracking system.</p>
+ <title>The space rover coquine, or how I ended up on the dark side of the moon</title>
+ <link>http://people.skolelinux.org/pere/blog/The_space_rover_coquine__or_how_I_ended_up_on_the_dark_side_of_the_moon.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/The_space_rover_coquine__or_how_I_ended_up_on_the_dark_side_of_the_moon.html</guid>
+ <pubDate>Sun, 2 Jun 2019 23:55:00 +0200</pubDate>
+ <description><p>A while back a college and friend from Debian and the Skolelinux /
+Debian Edu project approached me, asking if I knew someone that might
+be interested in helping out with a technology project he was running
+as a teacher at <a href="https://www.ecolefrancodanoise.dk/">L'école
+franco-danoise</a> - the Danish-French school and kindergarden. The
+kids were building robots, rovers. The story behind it is to build a
+rover for use
+<a href="http://blog.ecolefrancodanoise.dk/first-week-on-the-dark-side">on
+the dark side of the moon</a>, and remote control it. As travel cost
+was a bit high for the final destination, and they wanted to test the
+concept first, he was looking for volunteers to host a rover for the
+kids to control in a foreign country. I ended up volunteering as a
+host, and last week the rover arrived. It took a while to arrive
+after <a href="http://blog.ecolefrancodanoise.dk/model-moms">it was
+built and shipped</a>, because of customs confusion. Luckily we were
+able fix it quickly with help from my colleges at work.</p>
+
+<p>This is what it looked like when the rover arrived. Note the cute
+eyes looking up on me from the wrapping</p>
+
+<img src="http://people.skolelinux.org/pere/blog/images/2019-06-02-robot-dark-side-of-moon-esken-med-det-rare-i.jpeg" width="32%" style="clear:left"/>
+<img src="http://people.skolelinux.org/pere/blog/images/2019-06-02-robot-dark-side-of-moon-den-ser-meg.jpeg" width="32%" style="clear:left"/>
+<img src="http://people.skolelinux.org/pere/blog/images/2019-06-02-robot-dark-side-of-moon-en-skrue-loes.jpeg" width="32%" style="clear:left"/>
+
+<p style="text-align:left">Once the robot arrived, we needed to track
+down batteries and figure out how to build custom firmware for it with
+the appropriate wifi settings. I asked a friend if I could get two
+18650 batteries from his pile of Tesla batteries (he had them from the
+wrack of a crashed Tesla), so now the rover is running on Tesla
+batteries.</p>
+
+<p>Building
+<a href="https://gitlab.com/ecolefrancodanoise/arduino-efd/">the rover
+firmware</a> proved a bit harder, as the code did not work out of the
+box with the Arduino IDE package in Debian Buster. I suspect this is
+due to a unsolved
+<a href="https://github.com/arduino/Arduino/pull/2703"> license problem
+with arduino</a> blocking Debian from upgrading to the latest version.
+In the end we gave up debugging why the IDE failed to find the
+required libraries, and ended up using the Arduino Makefile from the
+<a href="https://tracker.debian.org/pkg/arduino-mk">arduino-mk Debian
+package</a> instead. Unfortunately the camera library is missing from
+the Arduino environment in Debian, so we disabled the camera support
+for the first firmware build, to get something up and running. With
+this reduced firmware, the robot could be controlled via the
+controller server, driving around and measuring distance using its
+internal acoustic sensor.</p>
+
+<p>Next, With some help from my friend in Denmark, which checked in the
+camera library into the gitlab repository for me to use, we were able
+to build a new and more complete version of the firmware, and the
+robot is now up and running. This is what the "commander" web page
+look like after taking a measurement and a snapshot:</p>
+
+<img src="http://people.skolelinux.org/pere/blog/images/2019-06-02-robot-dark-side-of-moon-commander.png" width="40%" border="1" align="center"/>
+
+<p>If you want to learn more about this project, you can check out the
+<a href="https://hackaday.io/project/164082-the-dark-side-challenge">The
+Dark Side Challenge</a> Hackaday web pages.</p>
<p>As usual, if you use Bitcoin and want to show your support of my
activities, please send Bitcoin donations to my address
</item>
<item>
- <title>Release 0.2 of free software archive system Nikita announced</title>
- <link>http://people.skolelinux.org/pere/blog/Release_0_2_of_free_software_archive_system_Nikita_announced.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Release_0_2_of_free_software_archive_system_Nikita_announced.html</guid>
- <pubDate>Thu, 18 Oct 2018 14:40:00 +0200</pubDate>
- <description><p>This morning, the new release of the
+ <title>Nikita version 0.4 released - free software archive API server</title>
+ <link>http://people.skolelinux.org/pere/blog/Nikita_version_0_4_released___free_software_archive_API_server.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Nikita_version_0_4_released___free_software_archive_API_server.html</guid>
+ <pubDate>Wed, 22 May 2019 11:30:00 +0200</pubDate>
+ <description><p>This morning, a new release of
<a href="https://gitlab.com/OsloMet-ABI/nikita-noark5-core/">Nikita
Noark 5 core project</a> was
-<a href="https://lists.nuug.no/pipermail/nikita-noark/2018-October/000406.html">announced
-on the project mailing list</a>. The free software solution is an
-implementation of the Norwegian archive standard Noark 5 used by
-government offices in Norway. These were the changes in version 0.2
-since version 0.1.1 (from NEWS.md):
+<a href="https://lists.nuug.no/pipermail/nikita-noark/2019-May/000468.html">announced
+on the project mailing list</a>. The Nikita free software solution is
+an implementation of the Norwegian archive standard Noark 5 used by
+government offices in Norway. These were the changes in version 0.4
+since version 0.3, see the email link above for links to a demo site:</p>
<ul>
- <li>Fix typos in REL names</li>
- <li>Tidy up error message reporting</li>
- <li>Fix issue where we used Integer.valueOf(), not Integer.getInteger()</li>
- <li>Change some String handling to StringBuffer</li>
- <li>Fix error reporting</li>
- <li>Code tidy-up</li>
- <li>Fix issue using static non-synchronized SimpleDateFormat to avoid
- race conditions</li>
- <li>Fix problem where deserialisers were treating integers as strings</li>
- <li>Update methods to make them null-safe</li>
- <li>Fix many issues reported by coverity</li>
- <li>Improve equals(), compareTo() and hash() in domain model</li>
- <li>Improvements to the domain model for metadata classes</li>
- <li>Fix CORS issues when downloading document</li>
- <li>Implementation of case-handling with registryEntry and document upload</li>
- <li>Better support in Javascript for OPTIONS</li>
- <li>Adding concept description of mail integration</li>
- <li>Improve setting of default values for GET on ny-journalpost</li>
- <li>Better handling of required values during deserialisation </li>
- <li>Changed tilknyttetDato (M620) from date to dateTime</li>
- <li>Corrected some opprettetDato (M600) (de)serialisation errors.</li>
- <li>Improve parse error reporting.</li>
- <li>Started on OData search and filtering.</li>
- <li>Added Contributor Covenant Code of Conduct to project.</li>
- <li>Moved repository and project from Github to Gitlab.</li>
- <li>Restructured repository, moved code into src/ and web/.</li>
- <li>Updated code to use Spring Boot version 2.</li>
- <li>Added support for OAuth2 authentication.</li>
- <li>Fixed several bugs discovered by Coverity.</li>
- <li>Corrected handling of date/datetime fields.</li>
- <li>Improved error reporting when rejecting during deserializatoin.</li>
- <li>Adjusted default values provided for ny-arkivdel, ny-mappe,
- ny-saksmappe, ny-journalpost and ny-dokumentbeskrivelse.</li>
- <li>Several fixes for korrespondansepart*.</li>
- <li>Updated web GUI:
- <ul>
- <li>Now handle both file upload and download.</li>
- <li>Uses new OAuth2 authentication for login.</li>
- <li>Forms now fetches default values from API using GET.</li>
- <li>Added RFC 822 (email), TIFF and JPEG to list of possible file formats.</li>
- </ul></li>
-</ul>
-<p>The changes and improvements are extensive. Running diffstat on
-the changes between git tab 0.1.1 and 0.2 show 1098 files changed,
-108666 insertions(+), 54066 deletions(-).</p>
+ <li>Roll out OData handling to all endpoints where applicable</li>
+ <li>Changed the relation key for "ny-journalpost" to the official one.</li>
+ <li>Better link generation on outgoing links.</li>
+ <li>Tidy up code and make code and approaches more consistent throughout
+ the codebase</li>
+ <li>Update rels to be in compliance with updated version in the
+ interface standard</li>
+ <li>Avoid printing links on empty objects as they can't have links</li>
+ <li>Small bug fixes and improvements</li>
+ <li>Start moving generation of outgoing links to @Service layer so access
+ control can be used when generating links</li>
+ <li>Log exception that was being swallowed so it's traceable</li>
+ <li>Fix name mapping problem</li>
+ <li>Update templated printing so templated should only be printed if it
+ is set true. Requires more work to roll out across entire
+ application.</li>
+ <li>Remove Record->DocumentObject as per domain model of n5v4</li>
+ <li>Add ability to delete lists filtered with OData</li>
+ <li>Return NO_CONTENT (204) on delete as per interface standard</li>
+ <li>Introduce support for ConstraintViolationException exception</li>
+ <li>Make Service classes extend NoarkService</li>
+ <li>Make code base respect X-Forwarded-Host, X-Forwarded-Proto and
+ X-Forwarded-Port</li>
+ <li>Update CorrespondencePart* code to be more in line with Single
+ Responsibility Principle</li>
+ <li>Make package name follow directory structure</li>
+ <li>Make sure Document number starts at 1, not 0</li>
+ <li>Fix isues discovered by FindBugs</li>
+ <li>Update from Date to ZonedDateTime</li>
+ <li>Fix wrong tablename</li>
+ <li>Introduce Service layer tests</li>
+ <li>Improvements to CorrespondencePart</li>
+ <li>Continued work on Class / Classificationsystem</li>
+ <li>Fix feature where authors were stored as storageLocations</li>
+ <li>Update HQL builder for OData</li>
+ <li>Update OData search capability from webpage</li>
+
+</ul>
<p>If free and open standardized archiving API sound interesting to
you, please contact us on IRC
</item>
<item>
- <title>Fetching trusted timestamps using the rfc3161ng python module</title>
- <link>http://people.skolelinux.org/pere/blog/Fetching_trusted_timestamps_using_the_rfc3161ng_python_module.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Fetching_trusted_timestamps_using_the_rfc3161ng_python_module.html</guid>
- <pubDate>Mon, 8 Oct 2018 12:30:00 +0200</pubDate>
- <description><p>I have earlier covered the basics of trusted timestamping using the
-'openssl ts' client. See blog post for
-<a href="http://people.skolelinux.org/pere/blog/Public_Trusted_Timestamping_services_for_everyone.html">2014</a>,
-<a href="http://people.skolelinux.org/pere/blog/syslog_trusted_timestamp___chain_of_trusted_timestamps_for_your_syslog.html">2016</a>
-and
-<a href="http://people.skolelinux.org/pere/blog/Idea_for_storing_trusted_timestamps_in_a_Noark_5_archive.html">2017</a>
-for those stories. But some times I want to integrate the timestamping
-in other code, and recently I needed to integrate it into Python.
-After searching a bit, I found
-<a href="https://dev.entrouvert.org/projects/python-rfc3161">the
-rfc3161 library</a> which seemed like a good fit, but I soon
-discovered it only worked for python version 2, and I needed something
-that work with python version 3. Luckily I next came across
-<a href="https://github.com/trbs/rfc3161ng/">the rfc3161ng library</a>,
-a fork of the original rfc3161 library. Not only is it working with
-python 3, it have fixed a few of the bugs in the original library, and
-it has an active maintainer. I decided to wrap it up and make it
-<a href="https://tracker.debian.org/pkg/python-rfc3161ng">available in
-Debian</a>, and a few days ago it entered Debian unstable and testing.</p>
-
-<p>Using the library is fairly straight forward. The only slightly
-problematic step is to fetch the required certificates to verify the
-timestamp. For some services it is straight forward, while for others
-I have not yet figured out how to do it. Here is a small standalone
-code example based on of the integration tests in the library code:</p>
-
-<pre>
-#!/usr/bin/python3
-
-"""
-
-Python 3 script demonstrating how to use the rfc3161ng module to
-get trusted timestamps.
-
-The license of this code is the same as the license of the rfc3161ng
-library, ie MIT/BSD.
-
-"""
-
-import os
-import pyasn1.codec.der
-import rfc3161ng
-import subprocess
-import tempfile
-import urllib.request
-
-def store(f, data):
- f.write(data)
- f.flush()
- f.seek(0)
-
-def fetch(url, f=None):
- response = urllib.request.urlopen(url)
- data = response.read()
- if f:
- store(f, data)
- return data
-
-def main():
- with tempfile.NamedTemporaryFile() as cert_f,\
- tempfile.NamedTemporaryFile() as ca_f,\
- tempfile.NamedTemporaryFile() as msg_f,\
- tempfile.NamedTemporaryFile() as tsr_f:
-
- # First fetch certificates used by service
- certificate_data = fetch('https://freetsa.org/files/tsa.crt', cert_f)
- ca_data_data = fetch('https://freetsa.org/files/cacert.pem', ca_f)
-
- # Then timestamp the message
- timestamper = \
- rfc3161ng.RemoteTimestamper('http://freetsa.org/tsr',
- certificate=certificate_data)
- data = b"Python forever!\n"
- tsr = timestamper(data=data, return_tsr=True)
-
- # Finally, convert message and response to something 'openssl ts' can verify
- store(msg_f, data)
- store(tsr_f, pyasn1.codec.der.encoder.encode(tsr))
- args = ["openssl", "ts", "-verify",
- "-data", msg_f.name,
- "-in", tsr_f.name,
- "-CAfile", ca_f.name,
- "-untrusted", cert_f.name]
- subprocess.check_call(args)
-
-if '__main__' == __name__:
- main()
-</pre>
-
-<p>The code fetches the required certificates, store them as temporary
-files, timestamp a simple message, store the message and timestamp to
-disk and ask 'openssl ts' to verify the timestamp. A timestamp is
-around 1.5 kiB in size, and should be fairly easy to store for future
-use.</p>
+ <title>MIME type "text/vnd.sosi" for SOSI map data</title>
+ <link>http://people.skolelinux.org/pere/blog/MIME_type__text_vnd_sosi__for_SOSI_map_data.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/MIME_type__text_vnd_sosi__for_SOSI_map_data.html</guid>
+ <pubDate>Mon, 20 May 2019 08:35:00 +0200</pubDate>
+ <description><p>As part of my involvement in the work to
+<a href="https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard">standardise
+a REST based API for Noark 5</a>, the Norwegian archiving standard, I
+spent some time the last few months to try to register a
+<a href="https://www.iana.org/assignments/media-types/">MIME type</a>
+and <a href="https://www.nationalarchives.gov.uk/PRONOM/">PRONOM
+code</a> for the SOSI file format. The background is that there is a
+set of formats approved for long term storage and archiving in Norway,
+and among these formats, SOSI is the only format missing a MIME type
+and PRONOM code.</p>
+
+<p>What is SOSI, you might ask? To quote Wikipedia: SOSI is short for
+Samordnet Opplegg for Stedfestet Informasjon (literally "Coordinated
+Approach for Spatial Information", but more commonly expanded in
+English to Systematic Organization of Spatial Information). It is a
+text based file format for geo-spatial vector information used in
+Norway. Information about the SOSI format can be found in English
+from <a href="https://en.wikipedia.org/wiki/SOSI">Wikipedia</a>. The
+specification is available in Norwegian from
+<a href="https://www.kartverket.no/geodataarbeid/Standarder/SOSI/">the
+Norwegian mapping authority</a>. The SOSI standard, which originated
+in the beginning of nineteen eighties, was the inspiration and formed the
+basis for the XML based
+<a href="https://en.wikipedia.org/wiki/Geography_Markup_Language">Geography
+Markup Language</a>.</p>
+
+<p>I have so far written
+<a href="https://github.com/file/file/pull/67">a pattern matching
+rule</a> for the file(1) unix tool to recognize SOSI files, submitted
+a request to the PRONOM project to have a PRONOM ID assigned to the
+format (reference TNA1555078202S60), and today send a request to IANA
+to register the "text/vnd.sosi" MIME type for this format (referanse
+<a href="https://tools.iana.org/public-view/viewticket/1143144">IANA
+#1143144</a>). If all goes well, in a few months, anyone implementing
+the Noark 5 Tjenestegrensesnitt API spesification should be able to
+use an official MIME type and PRONOM code for SOSI files. In
+addition, anyone using SOSI files on Linux should be able to
+automatically recognise the format and web sites handing out SOSI
+files can begin providing a more specific MIME type. So far, SOSI
+files has been handed out from web sites using the
+"application/octet-stream" MIME type, which is just a nice way of
+stating "I do not know". Soon, we will know. :)</p>
<p>As usual, if you use Bitcoin and want to show your support of my
activities, please send Bitcoin donations to my address
</item>
<item>
- <title>Automatic Google Drive sync using grive in Debian</title>
- <link>http://people.skolelinux.org/pere/blog/Automatic_Google_Drive_sync_using_grive_in_Debian.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Automatic_Google_Drive_sync_using_grive_in_Debian.html</guid>
- <pubDate>Thu, 4 Oct 2018 15:20:00 +0200</pubDate>
- <description><p>A few days, I rescued a Windows victim over to Debian. To try to
-rescue the remains, I helped set up automatic sync with Google Drive.
-I did not find any sensible Debian package handling this
-automatically, so I rebuild the grive2 source from
-<a href="http://www.webupd8.org/">the Ubuntu UPD8 PPA</a> to do the
-task and added a autostart desktop entry and a small shell script to
-run in the background while the user is logged in to do the sync.
-Here is a sketch of the setup for future reference.</p>
-
-<p>I first created <tt>~/googledrive</tt>, entered the directory and
-ran '<tt>grive -a</tt>' to authenticate the machine/user. Next, I
-created a autostart hook in <tt>~/.config/autostart/grive.desktop</tt>
-to start the sync when the user log in:</p>
-
-<p><blockquote><pre>
-[Desktop Entry]
-Name=Google drive autosync
-Type=Application
-Exec=/home/user/bin/grive-sync
-</pre></blockquote></p>
-
-<p>Finally, I wrote the <tt>~/bin/grive-sync</tt> script to sync
-~/googledrive/ with the files in Google Drive.</p>
-
-<p><blockquote><pre>
-#!/bin/sh
-set -e
-cd ~/
-cleanup() {
- if [ "$syncpid" ] ; then
- kill $syncpid
- fi
-}
-trap cleanup EXIT INT QUIT
-/usr/lib/grive/grive-sync.sh listen googledrive 2>&1 | sed "s%^%$0:%" &
-syncpdi=$!
-while true; do
- if ! xhost >/dev/null 2>&1 ; then
- echo "no DISPLAY, exiting as the user probably logged out"
- exit 1
- fi
- if [ ! -e /run/user/1000/grive-sync.sh_googledrive ] ; then
- /usr/lib/grive/grive-sync.sh sync googledrive
- fi
- sleep 300
-done 2>&1 | sed "s%^%$0:%"
-</pre></blockquote></p>
-
-<p>Feel free to use the setup if you want. It can be assumed to be
-GNU GPL v2 licensed (or any later version, at your leisure), but I
-doubt this code is possible to claim copyright on.</p>
+ <title>PlantUML for text based UML diagram modelling - nice free software</title>
+ <link>http://people.skolelinux.org/pere/blog/PlantUML_for_text_based_UML_diagram_modelling___nice_free_software.html</link>
+ <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/PlantUML_for_text_based_UML_diagram_modelling___nice_free_software.html</guid>
+ <pubDate>Mon, 25 Mar 2019 09:35:00 +0100</pubDate>
+ <description><p>As part of my involvement with the
+<a href="https://gitlab.com/OsloMet-ABI/nikita-noark5-core/">Nikita
+Noark 5 core project</a>, I have been proposing improvements to the
+API specification created by <a href="https://www.arkivverket.no/">The
+National Archives of Norway</a> and helped migrating the text from a
+version control system unfriendly binary format (docx) to Markdown in
+git. Combined with the migration to a public git repository (on
+github), this has made it possible for anyone to suggest improvement
+to the text.</p>
+
+<p>The specification is filled with UML diagrams. I believe the
+original diagrams were modelled using Sparx Systems Enterprise
+Architect, and exported as EMF files for import into docx. This
+approach make it very hard to track changes using a version control
+system. To improve the situation I have been looking for a good text
+based UML format with associated command line free software tools on
+Linux and Windows, to allow anyone to send in corrections to the UML
+diagrams in the specification. The tool must be text based to work
+with git, and command line to be able to run it automatically to
+generate the diagram images. Finally, it must be free software to
+allow anyone, even those that can not accept a non-free software
+license, to contribute.</p>
+
+<p>I did not know much about free software UML modelling tools when I
+started. I have used dia and inkscape for simple modelling in the
+past, but neither are available on Windows, as far as I could tell. I
+came across a nice
+<a href="https://modeling-languages.com/text-uml-tools-complete-list/">list
+of text mode uml tools</a>, and tested out a few of the tools listed
+there. <a href="http://plantuml.com/">The PlantUML tool</a> seemed
+most promising. After verifying that the packages
+<a href="https://tracker.debian.org/pkg/plantuml">is available in
+Debian</a> and found <a href="https://github.com/plantuml/plantuml">its
+Java source</a> under a GPL license on github, I set out to test if it
+could represent the diagrams we needed, ie the ones currently in
+<a href="https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/">the
+Noark 5 Tjenestegrensesnitt specification</a>. I am happy to report
+that it could represent them, even thought it have a few warts here
+and there.</p>
+
+<p>After a few days of modelling I completed the task this weekend. A
+temporary link to the complete set of diagrams (original and from
+PlantUML) is available in
+<a href="https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/issues/76">the
+github issue discussing the need for a text based UML format</a>, but
+please note I lack a sensible tool to convert EMF files to PNGs, so
+the "original" rendering is not as good as the original was in the
+publised PDF.</p>
+
+<p>Here is an example UML diagram, showing the core classes for
+keeping metadata about archived documents:</p>
-<p>As usual, if you use Bitcoin and want to show your support of my
-activities, please send Bitcoin donations to my address
-<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
-</description>
- </item>
-
- <item>
- <title>Valutakrambod - A python and bitcoin love story</title>
- <link>http://people.skolelinux.org/pere/blog/Valutakrambod___A_python_and_bitcoin_love_story.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/Valutakrambod___A_python_and_bitcoin_love_story.html</guid>
- <pubDate>Sat, 29 Sep 2018 22:20:00 +0200</pubDate>
- <description><p>It would come as no surprise to anyone that I am interested in
-bitcoins and virtual currencies. I've been keeping an eye on virtual
-currencies for many years, and it is part of the reason a few months
-ago, I started writing a python library for collecting currency
-exchange rates and trade on virtual currency exchanges. I decided to
-name the end result valutakrambod, which perhaps can be translated to
-small currency shop.</p>
-
-<p>The library uses the tornado python library to handle HTTP and
-websocket connections, and provide a asynchronous system for
-connecting to and tracking several services. The code is available
-from
-<a href="http://github.com/petterreinholdtsen/valutakrambod">github</a>.</p>
-
-</p>There are two example clients of the library. One is very simple and
-list every updated buy/sell price received from the various services.
-This code is started by running bin/btc-rates and call the client code
-in valutakrambod/client.py. The simple client look like this:</p>
-
-<p><blockquote><pre>
-import functools
-import tornado.ioloop
-import valutakrambod
-class SimpleClient(object):
- def __init__(self):
- self.services = []
- self.streams = []
- pass
- def newdata(self, service, pair, changed):
- print("%-15s %s-%s: %8.3f %8.3f" % (
- service.servicename(),
- pair[0],
- pair[1],
- service.rates[pair]['ask'],
- service.rates[pair]['bid'])
- )
- async def refresh(self, service):
- await service.fetchRates(service.wantedpairs)
- def run(self):
- self.ioloop = tornado.ioloop.IOLoop.current()
- self.services = valutakrambod.service.knownServices()
- for e in self.services:
- service = e()
- service.subscribe(self.newdata)
- stream = service.websocket()
- if stream:
- self.streams.append(stream)
- else:
- # Fetch information from non-streaming services immediately
- self.ioloop.call_later(len(self.services),
- functools.partial(self.refresh, service))
- # as well as regularly
- service.periodicUpdate(60)
- for stream in self.streams:
- stream.connect()
- try:
- self.ioloop.start()
- except KeyboardInterrupt:
- print("Interrupted by keyboard, closing all connections.")
- pass
- for stream in self.streams:
- stream.close()
-</pre></blockquote></p>
-
-<p>The library client loops over all known "public" services,
-initialises it, subscribes to any updates from the service, checks and
-activates websocket streaming if the service provide it, and if no
-streaming is supported, fetches information from the service and sets
-up a periodic update every 60 seconds. The output from this client
-can look like this:</p>
-
-<p><blockquote><pre>
-Bl3p BTC-EUR: 5687.110 5653.690
-Bl3p BTC-EUR: 5687.110 5653.690
-Bl3p BTC-EUR: 5687.110 5653.690
-Hitbtc BTC-USD: 6594.560 6593.690
-Hitbtc BTC-USD: 6594.560 6593.690
-Bl3p BTC-EUR: 5687.110 5653.690
-Hitbtc BTC-USD: 6594.570 6593.690
-Bitstamp EUR-USD: 1.159 1.154
-Hitbtc BTC-USD: 6594.570 6593.690
-Hitbtc BTC-USD: 6594.580 6593.690
-Hitbtc BTC-USD: 6594.580 6593.690
-Hitbtc BTC-USD: 6594.580 6593.690
-Bl3p BTC-EUR: 5687.110 5653.690
-Paymium BTC-EUR: 5680.000 5620.240
-</pre></blockquote></p>
-
-<p>The exchange order book is tracked in addition to the best buy/sell
-price, for those that need to know the details.</p>
-
-<p>The other example client is focusing on providing a curses view
-with updated buy/sell prices as soon as they are received from the
-services. This code is located in bin/btc-rates-curses and activated
-by using the '-c' argument. Without the argument the "curses" output
-is printed without using curses, which is useful for debugging. The
-curses view look like this:</p>
-
-<p><blockquote><pre>
- Name Pair Bid Ask Spr Ftcd Age
- BitcoinsNorway BTCEUR 5591.8400 5711.0800 2.1% 16 nan 60
- Bitfinex BTCEUR 5671.0000 5671.2000 0.0% 16 22 59
- Bitmynt BTCEUR 5580.8000 5807.5200 3.9% 16 41 60
- Bitpay BTCEUR 5663.2700 nan nan% 15 nan 60
- Bitstamp BTCEUR 5664.8400 5676.5300 0.2% 0 1 1
- Bl3p BTCEUR 5653.6900 5684.9400 0.5% 0 nan 19
- Coinbase BTCEUR 5600.8200 5714.9000 2.0% 15 nan nan
- Kraken BTCEUR 5670.1000 5670.2000 0.0% 14 17 60
- Paymium BTCEUR 5620.0600 5680.0000 1.1% 1 7515 nan
- BitcoinsNorway BTCNOK 52898.9700 54034.6100 2.1% 16 nan 60
- Bitmynt BTCNOK 52960.3200 54031.1900 2.0% 16 41 60
- Bitpay BTCNOK 53477.7833 nan nan% 16 nan 60
- Coinbase BTCNOK 52990.3500 54063.0600 2.0% 15 nan nan
- MiraiEx BTCNOK 52856.5300 54100.6000 2.3% 16 nan nan
- BitcoinsNorway BTCUSD 6495.5300 6631.5400 2.1% 16 nan 60
- Bitfinex BTCUSD 6590.6000 6590.7000 0.0% 16 23 57
- Bitpay BTCUSD 6564.1300 nan nan% 15 nan 60
- Bitstamp BTCUSD 6561.1400 6565.6200 0.1% 0 2 1
- Coinbase BTCUSD 6504.0600 6635.9700 2.0% 14 nan 117
- Gemini BTCUSD 6567.1300 6573.0700 0.1% 16 89 nan
- Hitbtc+BTCUSD 6592.6200 6594.2100 0.0% 0 0 0
- Kraken BTCUSD 6565.2000 6570.9000 0.1% 15 17 58
- Exchangerates EURNOK 9.4665 9.4665 0.0% 16 107789 nan
- Norgesbank EURNOK 9.4665 9.4665 0.0% 16 107789 nan
- Bitstamp EURUSD 1.1537 1.1593 0.5% 4 5 1
- Exchangerates EURUSD 1.1576 1.1576 0.0% 16 107789 nan
- BitcoinsNorway LTCEUR 1.0000 49.0000 98.0% 16 nan nan
- BitcoinsNorway LTCNOK 492.4800 503.7500 2.2% 16 nan 60
- BitcoinsNorway LTCUSD 1.0221 49.0000 97.9% 15 nan nan
- Norgesbank USDNOK 8.1777 8.1777 0.0% 16 107789 nan
-</pre></blockquote></p>
-
-<p>The code for this client is too complex for a simple blog post, so
-you will have to check out the git repository to figure out how it
-work. What I can tell is how the three last numbers on each line
-should be interpreted. The first is how many seconds ago information
-was received from the service. The second is how long ago, according
-to the service, the provided information was updated. The last is an
-estimate on how often the buy/sell values change.</p>
-
-<p>If you find this library useful, or would like to improve it, I
-would love to hear from you. Note that for some of the services I've
-implemented a trading API. It might be the topic of a future blog
-post.</p>
+<pre>
+@startuml
+skinparam classAttributeIconSize 0
+
+!include media/uml-class-arkivskaper.iuml
+!include media/uml-class-arkiv.iuml
+!include media/uml-class-klassifikasjonssystem.iuml
+!include media/uml-class-klasse.iuml
+!include media/uml-class-arkivdel.iuml
+!include media/uml-class-mappe.iuml
+!include media/uml-class-merknad.iuml
+!include media/uml-class-registrering.iuml
+!include media/uml-class-basisregistrering.iuml
+!include media/uml-class-dokumentbeskrivelse.iuml
+!include media/uml-class-dokumentobjekt.iuml
+!include media/uml-class-konvertering.iuml
+!include media/uml-datatype-elektronisksignatur.iuml
+
+Arkivstruktur.Arkivskaper "+arkivskaper 1..*" <-o "+arkiv 0..*" Arkivstruktur.Arkiv
+Arkivstruktur.Arkiv o--> "+underarkiv 0..*" Arkivstruktur.Arkiv
+Arkivstruktur.Arkiv "+arkiv 1" o--> "+arkivdel 0..*" Arkivstruktur.Arkivdel
+Arkivstruktur.Klassifikasjonssystem "+klassifikasjonssystem [0..1]" <--o "+arkivdel 1..*" Arkivstruktur.Arkivdel
+Arkivstruktur.Klassifikasjonssystem "+klassifikasjonssystem [0..1]" o--> "+klasse 0..*" Arkivstruktur.Klasse
+Arkivstruktur.Arkivdel "+arkivdel 0..1" o--> "+mappe 0..*" Arkivstruktur.Mappe
+Arkivstruktur.Arkivdel "+arkivdel 0..1" o--> "+registrering 0..*" Arkivstruktur.Registrering
+Arkivstruktur.Klasse "+klasse 0..1" o--> "+mappe 0..*" Arkivstruktur.Mappe
+Arkivstruktur.Klasse "+klasse 0..1" o--> "+registrering 0..*" Arkivstruktur.Registrering
+Arkivstruktur.Mappe --> "+undermappe 0..*" Arkivstruktur.Mappe
+Arkivstruktur.Mappe "+mappe 0..1" o--> "+registrering 0..*" Arkivstruktur.Registrering
+Arkivstruktur.Merknad "+merknad 0..*" <--* Arkivstruktur.Mappe
+Arkivstruktur.Merknad "+merknad 0..*" <--* Arkivstruktur.Dokumentbeskrivelse
+Arkivstruktur.Basisregistrering -|> Arkivstruktur.Registrering
+Arkivstruktur.Merknad "+merknad 0..*" <--* Arkivstruktur.Basisregistrering
+Arkivstruktur.Registrering "+registrering 1..*" o--> "+dokumentbeskrivelse 0..*" Arkivstruktur.Dokumentbeskrivelse
+Arkivstruktur.Dokumentbeskrivelse "+dokumentbeskrivelse 1" o-> "+dokumentobjekt 0..*" Arkivstruktur.Dokumentobjekt
+Arkivstruktur.Dokumentobjekt *-> "+konvertering 0..*" Arkivstruktur.Konvertering
+Arkivstruktur.ElektroniskSignatur -[hidden]-> Arkivstruktur.Dokumentobjekt
+@enduml
+</pre>
-<p>As usual, if you use Bitcoin and want to show your support of my
-activities, please send Bitcoin donations to my address
-<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
-</description>
- </item>
-
- <item>
- <title>VLC in Debian now can do bittorrent streaming</title>
- <link>http://people.skolelinux.org/pere/blog/VLC_in_Debian_now_can_do_bittorrent_streaming.html</link>
- <guid isPermaLink="true">http://people.skolelinux.org/pere/blog/VLC_in_Debian_now_can_do_bittorrent_streaming.html</guid>
- <pubDate>Mon, 24 Sep 2018 21:20:00 +0200</pubDate>
- <description><p>Back in February, I got curious to see
-<a href="http://people.skolelinux.org/pere/blog/Using_VLC_to_stream_bittorrent_sources.html">if
-VLC now supported Bittorrent streaming</a>. It did not, despite the
-fact that the idea and code to handle such streaming had been floating
-around for years. I did however find
-<a href="https://github.com/johang/vlc-bittorrent">a standalone plugin
-for VLC</a> to do it, and half a year later I decided to wrap up the
-plugin and get it into Debian. I uploaded it to NEW a few days ago,
-and am very happy to report that it
-<a href="https://tracker.debian.org/pkg/vlc-plugin-bittorrent">entered
-Debian</a> a few hours ago, and should be available in Debian/Unstable
-tomorrow, and Debian/Testing in a few days.</p>
-
-<p>With the vlc-plugin-bittorrent package installed you should be able
-to stream videos using a simple call to</p>
-
-<p><blockquote><pre>
-vlc https://archive.org/download/TheGoat/TheGoat_archive.torrent
-</pre></blockquote></p>
-
-</p>It can handle magnet links too. Now if only native vlc had
-bittorrent support. Then a lot more would be helping each other to
-share public domain and creative commons movies. The plugin need some
-stability work with seeking and picking the right file in a torrent
-with many files, but is already usable. Please note that the plugin
-is not removing downloaded files when vlc is stopped, so it can fill
-up your disk if you are not careful. Have fun. :)</p>
-
-<p>I would love to get help maintaining this package. Get in touch if
-you are interested.</p>
+<p><a href="http://plantuml.com/class-diagram">The format</a> is quite
+compact, with little redundant information. The text expresses
+entities and relations, and there is little layout related fluff. One
+can reuse content by using include files, allowing for consistent
+naming across several diagrams. The include files can be standalone
+PlantUML too. Here is the content of
+<tt>media/uml-class-arkivskaper.iuml<tt>:</p>
+
+<pre>
+@startuml
+class Arkivstruktur.Arkivskaper <Arkivenhet> {
+ +arkivskaperID : string
+ +arkivskaperNavn : string
+ +beskrivelse : string [0..1]
+}
+@enduml
+</pre>
+
+<p>This is what the complete diagram for the PlantUML notation above
+look like:</p>
+
+<p><img width="80%" src="http://people.skolelinux.org/pere/blog/images/2019-03-25-noark5-plantuml-diagrameksempel.png"></p>
+
+<p>A cool feature of PlantUML is that the generated PNG files include
+the entire original source diagram as text. The source (with include
+statements expanded) can be extracted using for example
+<tt>exiftool</tt>. Another cool feature is that parts of the entities
+can be hidden after inclusion. This allow to use include files with
+all attributes listed, even for UML diagrams that should not list any
+attributes.</p>
+
+<p>The diagram also show some of the warts. Some times the layout
+engine place text labels on top of each other, and some times it place
+the class boxes too close to each other, not leaving room for the
+labels on the relationship arrows. The former can be worked around by
+placing extra newlines in the labes (ie "\n"). I did not do it here
+to be able to demonstrate the issue. I have not found a good way
+around the latter, so I normally try to reduce the problem by changing
+from vertical to horizontal links to improve the layout.</p>
+
+<p>All in all, I am quite happy with PlantUML, and very impressed with
+how quickly its lead developer responds to questions. So far I got an
+answer to my questions in a few hours when I send an email. I
+definitely recommend looking at PlantUML if you need to make UML
+diagrams. Note, PlantUML can draw a lot more than class relations.
+Check out the documention for a complete list. :)</p>
<p>As usual, if you use Bitcoin and want to show your support of my
activities, please send Bitcoin donations to my address