Petter Reinholdtsen

PlantUML for text based UML diagram modelling - nice free software
25th March 2019

As part of my involvement with the Nikita Noark 5 core project, I have been proposing improvements to the API specification created by The National Archives of Norway 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.

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.

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 list of text mode uml tools, and tested out a few of the tools listed there. The PlantUML tool seemed most promising. After verifying that the packages is available in Debian and found its Java source under a GPL license on github, I set out to test if it could represent the diagrams we needed, ie the ones currently in the Noark 5 Tjenestegrensesnitt specification. I am happy to report that it could represent them, even thought it have a few warts here and there.

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 the github issue discussing the need for a text based UML format, 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.

Here is an example UML diagram, showing the core classes for keeping metadata about archived documents:

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

The format 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 media/uml-class-arkivskaper.iuml:

class Arkivstruktur.Arkivskaper  {
  +arkivskaperID : string
  +arkivskaperNavn : string
  +beskrivelse : string [0..1]

This is what the complete diagram for the PlantUML notation above look like:

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 exiftool. 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.

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.

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. :)

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

24th March 2019

Yesterday, a new release of Nikita Noark 5 core project was announced on the project mailing list. 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.3 since version 0.2.1 (from

  • Improved ClassificationSystem and Class behaviour.
  • Tidied up known inconsistencies between domain model and hateaos links.
  • Added experimental code for blockchain integration.
  • Make token expiry time configurable at upstart from properties file.
  • Continued work on OData search syntax.
  • Started work on pagination for entities, partly implemented for Saksmappe.
  • Finalise ClassifiedCode Metadata entity.
  • Implement mechanism to check if authentication token is still valid. This allow the GUI to return a more sensible message to the user if the token is expired.
  • Reintroduce browse.html page to allow user to browse JSON API using hateoas links.
  • Fix bug in handling file/mappe sequence number. Year change was not properly handled.
  • Update application yml files to be in sync with current development.
  • Stop 'converting' everything to PDF using libreoffice. Only convert the file formats doc, ppt, xls, docx, pptx, xlsx, odt, odp and ods.
  • Continued code style fixing, making code more readable.
  • Minor bug fixes.

If free and open standardized archiving API sound interesting to you, please contact us on IRC (#nikita on or email (nikita-noark mailing list).

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

11th March 2019

Et virksomhetsarkiv for meg, er et arbeidsverktøy der en enkelt kan finne informasjonen en trenger når en trenger det, og der virksomhetens samlede kunnskap er tilgjengelig. Det må være greit å finne frem i, litt som en bibliotek. Men der et bibliotek gjerne tar vare på offentliggjort informasjon som er tilgjengelig flere steder, tar et arkiv vare på virksomhetsintern og til tider personlig informasjon som ofte kun er tilgjengelig fra et sted.

Jeg mistenker den eneste måten å sikre at arkivet inneholder den samlede kunnskapen i en virksomhet, er å bruke det som virksomhetens kunnskapslager. Det innebærer å automatisk kopiere (brev, epost, SMS-er etc) inn i arkivet når de sendes og mottas, og der filtrere vekk det en ikke vil ta vare på, og legge på metadata om det som er samlet inn for enkel gjenfinning. En slik bruk av arkivet innebærer at arkivet er en del av daglig virke, ikke at det er siste hvilested for informasjon ingen lenger har daglig bruk for. For å kunne være en del av det daglige virket må arkivet enkelt kunne integreres med andre systemer. I disse dager betyr det å tilby arkivet som en nett-tjeneste til hele virksomheten, tilgjengelig for både mennesker og datamaskiner. Det betyr i tur å både tilby nettsider og et maskinlesbart grensesnitt.

For noen år siden erkjente visjonære arkivarer fordelene med et standardisert maskinlesbart grensesnitt til organisasjonens arkiv. De gikk igang med å lage noe de kalte Noark 5 Tjenestegrensesnitt. Gjort riktig, så åpner slike maskinlesbare grensesnitt for samvirke på tvers av uavhengige programvaresystemer. Gjort feil, vil det blokkere for samvirke og bidra til leverandørinnlåsing. For å gjøre det riktig så må grensesnittet være klart og entydig beskrevet i en spesifikasjon som gjør at spesifikasjonen tolkes på samme måte uavhengig av hvem som leser den, og uavhengig av hvem som tar den i bruk.

For å oppnå klare og entydige beskrivelser i en spesifikasjon, som trengs for å kunne få en fri og åpen standard (se Digistan-definisjon), så trengs det en åpen og gjennomsiktig inngangsport med lav terskel, der de som forsøker å ta den i bruk enkelt kan få inn korreksjoner, etterlyse klargjøringer og rapportere uklarheter i spesifikasjonen. En trenger også automatiserte datasystemer som måler og sjekker at et gitt grensesnitt fungerer i tråd med spesifikasjonen.

For Noark 5 Tjenestegrensesnittet er det nå etablert en slik åpen og gjennomsiktig inngangsport på prosjekttjenesten github. Denne inngangsporten består først og fremst av en åpen portal som lar enhver se hva som er gjort av endringer i spesifikasjonsteksten over tid, men det hører også med et åpent "diskusjonsforum" der en kan komme med endringsforslag og forespørsler om klargjøringer. Alle registrerte brukere på github kan bidra med innspill til disse henvendelsene.

I samarbeide med Arkivverket har jeg fått opprettet et git-depot med spesifikasjonsteksten for tjenestegrensesnittet, der det er lagt inn historikk for endringer i teksten de siste årene, samt lagt inn endringsforslag og forespørsler om klargjøring av teksten. Bakgrunnen for at jeg bidro med dette er at jeg er involvert i Nikita-prosjektet, som lager en fri programvare-utgave av Noark 5 Tjenestegrensesnitt. Det er først når en forsøker å lage noe i tråd med en spesifikasjon at en oppdager hvor mange detaljer som må beskrives i spesifikasjonen for å sikre samhandling.

Spesifikasjonen vedlikeholdes i et rent tekstformat, for å ha et format egnet for versjonskontroll via versjontrollsystemet git. Dette gjør det både enkelt å se konkret hvilke endringer som er gjort når, samt gjør det praktisk mulig for enhver med github-konto å sende inn endringsforslag med formuleringer til spesifikasjonsteksten. Dette tekstformatet vises frem som nettsider på github, slik at en ikke trenger spesielle verktøy for å se på siste utgave av spesifikasjonen.

Fra dette rene tekstformatet kan det så avledes ulike formater, som HTML for websider, PDF for utskrift på papir og ePub for lesing med ebokleser. Avlednings-systemet (byggesystemet) bruker i dag verktøyene pandoc, latex, docbook-xsl og GNU make til transformasjonen. Tekstformatet som brukes dag er Markdown, men det vurderes å endre til formatet RST i fremtiden for bedre styring av utseende på PDF-utgaven.

Versjonskontrollsystemet git ble valgt da det er både fleksibelt, avansert og enkelt å ta i bruk. Github ble valgt (foran f.eks. Gitlab som vi bruker i Nikita), da Arkivverket allerede hadde tatt i bruk Github i andre sammenhenger.

Enkle endringer i teksten kan gjøres av priviligerte brukere direkte i nettsidene til Github, ved å finne aktuell fil som skal endres (f.eks. kapitler/, klikke på den lille bokstaven i høyre hjørne over teksten. Det kommer opp en nettside der en kan endre teksten slik en ønsker. Når en er fornøyd med endringen så må endringen "sjekkes inn" i historikken. Det gjøres ved å gi en kort beskrivelse av endringen (beskriv helst hvorfor endringen trengs, ikke hva som er endret), under overskriften "Commit changes". En kan og bør legge inn en lengre forklaring i det større skrivefeltet, før en velger om endringen skal sendes direkte til 'master'-grenen (dvs. autorativ utgave av spesifikasjonen) eller om en skal lage en ny gren for denne endringen og opprette en endringsforespørsel (aka "Pull Request"/PR). Når alt dette er gjort kan en velge "Commit changes" for å sende inn endringen. Hvis den er lagt inn i "master"-grenen så er den en offisiell del av spesifikasjonen med en gang. Hvis den derimot er en endringsforespørsel, så legges den inn i listen over forslag til endringer som venter på korrekturlesing og godkjenning.

Større endringer (for eksempel samtidig endringer i flere filer) gjøres enklest ved å hente ned en kopi av git-depoet lokalt og gjøre endringene der før endringsforslaget sendes inn. Denne prosessen er godt beskrivet i dokumentasjon fra github. Git-prosjektet som skal "klones" er

For å registrere nye utfordringer (issues) eller kommentere på eksisterende utfordringer benyttes nettsiden I skrivende stund er det 48 åpne og 11 avsluttede utfordringer. Et forslag til hva som bør være med når en beskriver en utfordring er tilgjengelig som utfordring #14.

For å bygge en PDF-utgave av spesifikasjonen så bruker jeg i dag en Debian GNU/Linux-maskin med en rekke programpakker installert. Når dette er på plass, så holder det å kjøre kommandoen 'make pdf html' på kommandolinjen, vente ca. 20 sekunder, før spesifikasjon.pdf og spesifikasjon.html ligger klar på disken. Verktøyene for bygging av PDF, HTML og ePub-utgave er også tilgjengelig på Windows og MacOSX.

Github bidrar med rammeverket. Men for at åpent vedlikehold av spesifikasjonen skal fungere, så trengs det folk som bidrar med sin tid og kunnskap. Arkivverket har sagt de skal bidra med innspill og godkjenne forslag til endringer, men det blir størst suksess hvis alle som bruker og lager systemer basert på Noark 5 Tjenestegrensesnitt bidrar med sin kunnskap og kommer med forslag til forebedringer. Jeg stiller. Blir du med?

Det er viktig å legge til rette for åpen diskusjon blant alle interesserte, som ikke krever at en må godta lange kontrakter med vilkår for deltagelse. Inntil Arkivverket dukker opp på IRC har vi laget en IRC-kanal der interesserte enkelt kan orientere seg og diskutere tjenestegrensesnittet. Alle er velkommen til å ta turen innom #nikita (f.eks. via for å møte likesinnede.

Det holder dog ikke å ha en god spesifikasjon, hvis ikke de som tar den i bruk gjør en like god jobb. For å automatisk teste om et konkret tjenestegrensesnitt følger (min) forståelse av spesifikasjonsdokumentet, har jeg skrevet et program som kobler seg opp til et Noark 5v4 REST-tjeneste og tester alt den finner for å se om det er i henhold til min tolkning av spesifikasjonen. Dette verktøyet er tilgjengelig fra, og brukes daglig mens vi utvikler Nikita for å sikre at vi ikke introduserer nye feil. Hvis en skal sikre samvirke på tvers av ulike systemer er det helt essensielt å kunne raskt og automatisk sjekke at tjenestegrensesnittet oppfører seg som forventet. Jeg håper andre som lager sin utgave av tjenestegrensesnittet vi bruke dette verktøyet, slik at vi tidlig og raskt kan oppdage hvor vi har tolket spesifikasjonen ulikt, og dermed få et godt grunnlag for å gjøre spesifikasjonsteksten enda klarere og bedre.

Dagens beskrivelse av Noark 5 Tjenestegrensesnitt er et svært godt utgangspunkt for å gjøre virksomhetens arkiv til et dynamisk og sentralt arbeidsverktøy i organisasjonen. Blir du med å gjøre den enda bedre?

13th February 2019

For syv år siden oppdaget jeg at billettautomater for kollektivtrafikken i Oslo kjørte Windows 2000 Professional. Operativsystemet har ikke fått sikkerhetsfikser fra Microsoft siden 2010-07-13 i følge dem selv. Den samme versjonen av operativsystemet var i bruk for to og et halvt år siden, og jammen er det ikke også i bruk den dag i dag:

[Bilde av Ruters billettautomat med Windows 2000-feilmelding]

Bildet er tatt i dag av Kirill Miazine og tilgjengelig for bruk med bruksvilkårene til Creative Commons Attribution 4.0 International (CC BY 4.0).

Kanskje det hadde vært bedre med gratis kollektivtrafikk, slik at vi slapp å stole på datakompetansen til Ruter for å verne våre privatliv samt holde personopplysninger og betalingsinformasjon unna uvedkommende. Eneste måten å sikre at hvor en befinner seg ikke kan hentes ut fra Ruters systemer er å betale enkeltbilletter med kontanter. Jeg vet at Ruter har en god historie om hvor personvernvennlige mobil-app og RFID-kortene er, men den historien er ikke mulig å uavhengig kontrollere uten priviligert tilgang til interne system og blir dermed bare nok en god historie basert på tillit til de som forteller historien. Det er ikke slik en sikrer privatsfæren. Det gjør en ved å sikre at det ikke (kan) registreres informasjon om ens person.

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 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

7th February 2019

Jeg registrerer med glede at Stortinget i dag har vedtatt at det skal vedlikeholdes et åpent og maskinlesbart register over reelle rettighetshavere i Norge. Her kan en kanskje få et register som kan brukes til å analysere eierskap og kontroll i Norge maskinelt og knytte det til internasjonale databaser som OpenCorporates. Det liker jeg.

Den vedtatte grense på 25 prosents eierandel fikk stor oppmerksomhet i debatten. Jeg ser fra enkel analyse av skatteetatens eierskapsregister at 80.4% av alle selskapseiere i registeret har mindre enn 25% eierandel, mot 73.8% som har mindre enn 5% eierandel. En grense på 25% vil altså utelukke 80.4% av selskapseierne fra det vedtatte registeret, og en grense på 5% vil skjule 73.8%. En må helt ned i registrering av eierandeler over circa 0.002% for å få mer enn halvparten av selskapseierne i Norge. Mon tro hvor langt ned en må i eierprosent for å få med alle eierskapene til politisk valgte representanter?

Jeg biter meg også merke i at Sivert Bjørnstad fra FrP tilsynelatende tror at aksjonærregisteret er et eksisterende åpent register, på tross av at det så vidt jeg vet kun deles ved personlig oppmøte hos skatteetaten og ikke er tilgjengelig i maskinlesbart format for enhver, og dermed så langt ikke er importert inn i OpenCorporates. Det anser jeg ikke for et spesielt åpent register. Debatten ga ellers lite håp om at situasjonen bedrer seg, da finansministeren bare henviste til en fraværende næringsministeren og ikke ville uttale seg om et skikkelig aksjonærregister snart dukker opp.

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 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

1st February 2019

Yesterday, the Kraken virtual currency exchange announced their Websocket service, providing a stream of exchange updates to its clients. Getting updated rates quickly is a good idea, so I used their API documentation and added Websocket support to the Kraken service in Valutakrambod today. The python library can now get updates from Kraken several times per second, instead of every time the information is polled from the REST API.

If this sound interesting to you, the code for valutakrambod is available from github. Here is example output from the example client displaying rates in a curses view:

           Name Pair   Bid         Ask         Spr    Ftcd    Age
 BitcoinsNorway BTCEUR   2959.2800   3021.0500   2.0%   36    nan    nan
       Bitfinex BTCEUR   3087.9000   3088.0000   0.0%   36     37    nan
        Bitmynt BTCEUR   3001.8700   3135.4600   4.3%   36     52    nan
         Bitpay BTCEUR   3003.8659         nan   nan%   35    nan    nan
       Bitstamp BTCEUR   3008.0000   3010.2300   0.1%    0      1      1
           Bl3p BTCEUR   3000.6700   3010.9300   0.3%    1    nan    nan
       Coinbase BTCEUR   2992.1800   3023.2500   1.0%   34    nan    nan
         Kraken+BTCEUR   3005.7000   3006.6000   0.0%    0      1      0
        Paymium BTCEUR   2940.0100   2993.4400   1.8%    0   2688    nan
 BitcoinsNorway BTCNOK  29000.0000  29360.7400   1.2%   36    nan    nan
        Bitmynt BTCNOK  29115.6400  29720.7500   2.0%   36     52    nan
         Bitpay BTCNOK  29029.2512         nan   nan%   36    nan    nan
       Coinbase BTCNOK  28927.6000  29218.5900   1.0%   35    nan    nan
        MiraiEx BTCNOK  29097.7000  29741.4200   2.2%   36    nan    nan
 BitcoinsNorway BTCUSD   3385.4200   3456.0900   2.0%   36    nan    nan
       Bitfinex BTCUSD   3538.5000   3538.6000   0.0%   36     45    nan
         Bitpay BTCUSD   3443.4600         nan   nan%   34    nan    nan
       Bitstamp BTCUSD   3443.0100   3445.0500   0.1%    0      2      1
       Coinbase BTCUSD   3428.1600   3462.6300   1.0%   33    nan    nan
         Gemini BTCUSD   3445.8800   3445.8900   0.0%   36    326    nan
         Hitbtc BTCUSD   3473.4700   3473.0700  -0.0%    0      0      0
         Kraken+BTCUSD   3444.4000   3445.6000   0.0%    0      1      0
  Exchangerates EURNOK      9.6685      9.6685   0.0%   36  22226    nan
     Norgesbank EURNOK      9.6685      9.6685   0.0%   36  22226    nan
       Bitstamp EURUSD      1.1440      1.1462   0.2%    0      1      2
  Exchangerates EURUSD      1.1471      1.1471   0.0%   36  22226    nan
 BitcoinsNorway LTCEUR      1.0009     22.6538  95.6%   35    nan    nan
 BitcoinsNorway LTCNOK    259.0900    264.9300   2.2%   35    nan    nan
 BitcoinsNorway LTCUSD      0.0000     29.0000 100.0%   35    nan    nan
     Norgesbank USDNOK      8.4286      8.4286   0.0%   36  22226    nan

Yes, I notice the strange negative spread on Hitbtc. I've seen the same on Kraken. Another strange observation is that Kraken some times announce trade orders a fraction of a second in the future. I really wonder what is going on there.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: bitcoin, english.
23rd January 2019

I høst ble jeg inspirert til å bidra til oversettelsen av strategispillet Unknown Horizons, og oversatte de nesten 200 strengene i prosjektet til bokmål. Deretter har jeg gått å ventet på at det kom en ny utgave som inneholdt disse oversettelsene. Nå er endelig ventetiden over. Den nye versjonen kom på nyåret, og ble lastet opp i Debian for noen få dager siden. I går kveld fikk jeg testet det ut, og må innrømme at oversettelsene fungerer fint. Fant noen få tekster som måtte justeres, men ikke noe alvorlig. Har oppdatert oversettelsen på Weblate, slik at neste utgave vil være enda bedre. :)

Spillet er et ressursstyringsspill ala Civilization, og er morsomt å spille for oss som liker slikt. :)

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 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

Tags: debian, norsk.
22nd January 2019

I am amazed and very pleased to discover that since a few days ago, everything you need to program the BBC micro:bit is available from the Debian archive. All this is thanks to the hard work of Nick Morrott and the Debian python packaging team. The micro:bit project recommend the mu-editor to program the microcomputer, as this editor will take care of all the machinery required to injekt/flash micropython alongside the program into the micro:bit, as long as the pieces are available.

There are three main pieces involved. The first to enter Debian was python-uflash, which was accepted into the archive 2019-01-12. The next one was mu-editor, which showed up 2019-01-13. The final and hardest part to to into the archive was firmware-microbit-micropython, which needed to get its build system and dependencies into Debian before it was accepted 2019-01-20. The last one is already in Debian Unstable and should enter Debian Testing / Buster in three days. This all allow any user of the micro:bit to get going by simply running 'apt install mu-editor' when using Testing or Unstable, and once Buster is released as stable, all the users of Debian stable will be catered for.

As a minor final touch, I added rules to the isenkram package for recognizing micro:bit and recommend the mu-editor package. This make sure any user of the isenkram desktop daemon will get a popup suggesting to install mu-editor then the USB cable from the micro:bit is inserted for the first time.

This should make it easier to have fun.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

Tags: debian, english, robot.
16th January 2019

I forrige uke var jeg i Borgarting lagmannsrett som partshjelper og sakkyndig vitne og presenterte mine oppdaterte undersøkelser rundt telling av filmverk i det fri, relatert til foreningen NUUGs involvering i saken om Økokrims beslag og senere inndragning av DNS-domenet I forkant hadde jeg oppdatert mitt notat med kommentarer til et av aktors bevis, som forsøkte å måle hvor stor andel ulovligheter som var tilgjengelig via Popcorn Time-avspillere. Jeg mistenker flere kan ha glede av å lese dette notatet, som jeg publiserte en tidligere versjon av i fjor, så her er det. Legger også ved avskrift av dokument 09,13, som er det sentrale dokumentet jeg kommenterer.

Oppdaterte kommentarer til «Evaluation of (il)legality» for Popcorn Time


Målemetoden som Økokrim har lagt til grunn når de påstår at 99% av filmene tilgjengelig fra Popcorn Time deles ulovlig har svakheter som gjør resultatet upålitelig.

De eller den som har vurdert hvorvidt filmer kan lovlig deles er ikke i stand til å identifisere filmer som kan deles lovlig eller er falt i det fri og har tilsynelatende antatt at kun veldig gamle filmer kan deles lovlig. Økokrim legger til grunn at det bare finnes èn film, Charlie Chaplin-filmen «The Circus» fra 1928, som kan deles fritt blant de som ble observert tilgjengelig via ulike Popcorn Time-varianter. Med min begrensede og ufullstendige oversikt finner jeg tre flere blant de observerte filmene: «The Brain That Wouldn't Die» fra 1962, «God’s Little Acre» fra 1958 og «She Wore a Yellow Ribbon» fra 1949. Det er godt mulig det finnes flere. Det finnes dermed minst fire ganger så mange filmer som lovlig kan deles på Internett i datasettet Økokrim har lagt til grunn når det påstås at mindre enn 1 % kan deles lovlig.

Dernest, utplukket som gjøres ved søk på tilfeldige ord hentet fra ordlisten til Dale-Chall avviker fra årsfordelingen til de brukte filmkatalogene som helhet, hvilket påvirker fordelingen mellom filmer som kan lovlig deles og filmer som ikke kan lovlig deles. I tillegg gir valg av øvre del (de fem første) av søkeresultatene et avvik fra riktig årsfordeling, hvilket påvirker fordelingen av verk i det fri i søkeresultatet.

Til sist er det viktig å merke seg at det som måles er ikke (u)lovligheten knyttet til bruken av Popcorn Time, men (u)lovligheten til innholdet i ulike bittorrent-filmkataloger som vedlikeholdes av ulike miljøer uavhengig av Popcorn Time, og som ulike Popcorn Time-varianter har benyttet seg av.

Omtalte dokumenter: 09,12, 09,13, 09,14, 09,18, 09,19, 09,20.

Utfyllende kommentarer

Økokrim har forklart domstolene at minst 99% av alt som er tilgjengelig fra ulike Popcorn Time-varianter deles ulovlig på Internet. Jeg ble nysgjerrig på hvordan de er kommet frem til dette tallet, og dette notatet er en samling kommentarer rundt målingen Økokrim henviser til. Litt av bakgrunnen for at jeg valgte å se på saken er at jeg er interessert i å identifisere og telle hvor mange kunstneriske verk som er falt i det fri eller av andre grunner kan lovlig deles på Internett, og dermed var interessert i hvordan en hadde funnet den ene prosenten som kanskje deles lovlig.

Andelen på 99% kommer fra et ukreditert og udatert notatet som tar mål av seg å dokumentere en metode for å måle hvor (u)lovlig ulike Popcorn Time-varianter er.

Raskt oppsummert, så forteller metodedokumentet at fordi det ikke er mulig å få tak i komplett liste over alle filmtitler tilgjengelig via Popcorn Time, så lages noe som skal være et representativt utvalg ved å velge 50 tilfeldige søkeord større enn tre tegn fra en ordliste kjent som Dale-Chall. For hvert søkeord gjøres et søk og de første fem filmene i søkeresultatet samles inn inntil 100 unike filmtitler er funnet. Hvis 50 søkeord ikke var tilstrekkelig for å nå 100 unike filmtitler ble flere filmer fra hvert søkeresultat lagt til. Hvis dette heller ikke var tilstrekkelig, så ble det hentet ut og søkt på flere tilfeldig valgte søkeord inntil 100 unike filmtitler var identifisert.

Deretter ble for hver av filmtitlene «vurdert hvorvidt det var rimelig å forvente om at verket var vernet av copyright, ved å se på om filmen var tilgjengelig i IMDB, samt se på regissør, utgivelsesår, når det var utgitt for bestemte markedsområder samt hvilke produksjons- og distribusjonsselskap som var registrert» (min oversettelse).

Metoden er gjengitt både i de ukrediterte dokumentene 09,13 og 09,19, samt beskrevet fra side 47 i dokument 09,20, lysark datert 2017-02-01. Sistnevnte er kreditert Geerart Bourlon fra Motion Picture Association EMEA.

Metoden virker å ha flere svakheter som gir resultatene en slagside. Den starter med å slå fast at det ikke er mulig å hente ut en komplett liste over alle filmtitler som er tilgjengelig, og at dette er bakgrunnen for metodevalget. Denne forutsetningen er ikke i tråd med det som står i dokument 09,12, som ikke heller har oppgitt forfatter og dato. Dokument 09,12 forteller hvordan hele kataloginnholdet i en bittorrent-katalog ble lasted ned og talt opp. Dokument 09,12 er muligens samme rapport som det ble referert til i dom fra Oslo Tingrett 2017-11-03 (sak 17-093347TVI-OTIR/05) under navnet rapport av 1. juni 2017 av Alexander Kind Petersen. De ligner, men jeg har ikke sammenlignet dokumentene ord for ord for å kontrollere om de er identiske.

Det finnes flere kilder som kan brukes til å finne filmer som er allemannseie (public domain) eller har bruksvilkår som gjør det lovlig for alle å dele dem på Internett. Jeg har det siste året forsøkt å samle og krysskoble disse listene ved hjelp av tittel-ID i IMDB for å forsøke å telle antall filmer i det fri. Ved å ta utgangspunkt i slike lister (og publiserte filmer for Internett-arkivets del), har jeg så langt klart å identifisere over 14 000 filmer, hovedsaklig spillefilmer. Noen filmer er gått tapt ved at de eneste kjente eksemplarene er blitt ødelagt. Jeg har ikke forsøkt å finne ut hvilke filmer som er gått tapt, ut over å se hvilke filmer som er tilgjengelig på filmdelings-nettsteder.

IMDB er en forkortelse for The Internet Movie Database, en anerkjent kommersiell nettjeneste som brukes aktivt av både filmbransjen og andre til å holde rede på hvilke spillefilmer (og endel andre filmer) som finnes eller er under produksjon, samt informasjon om disse filmene. Datakvaliteten er høy, med få feil og få filmer som mangler. IMDB viser ikke informasjon om opphavsrettslig status for filmene på infosiden for hver film, men frivillige har lagt ut på IMDB-tjenesten lister med filmer som antas å være verk i det fri. Disse listene er en liten del av kildene for min telling av verk som kan lovlig deles på Internett.

De aller fleste oppføringene over verk i det fri er hentet fra IMDB selv, basert på det faktum at alle filmer laget i USA før 1923 er falt i det fri. Tilsvarende tidsgrense for Storbritannia er 1912-07-01, men dette utgjør bare veldig liten del av spillefilmene i IMDB (19 totalt). En annen stor andel kommer fra Internett-arkivet, der jeg har identifisert filmer som har referanse til IMDB. Internett-arkivet, som holder til i USA, har som policy å kun publisere filmer som det er lovlig å distribuere. Jeg har under arbeidet kommet over flere filmer som har blitt fjernet fra Internett-arkivet, hvilket gjør at jeg konkluderer med at folkene som kontrollerer Internett-arkivet har et aktivt forhold til kun å ha lovlig innhold der, selv om det i stor grad er drevet av frivillige. Internett-arkivet har publisert 4.6 millioner videofilmer som samtlige er tilgjengelig også med Bittorrent-protokollen. En annen stor liste med filmer kommer fra det kommersielle selskapet Retro Film Vault, som selger allemannseide filmer til TV- og filmbransjen, Jeg har også benyttet meg av lister over filmer som hevdes å være allemannseie, det være seg Public Domain Review, Public Domain Torrents og Public Domain Movies (to ulike tjenester med samme navn, på .net og .info), samt lister over filmer med Creative Commons-lisensiering fra Wikipedia, VODO og The Hill Productions. Jeg har gjort endel stikkontroll ved å vurdere filmer som kun omtales på en liste. Der jeg har funnet feil som har gjort meg i tvil om vurderingen til de som har laget listen har jeg forkastet listen fullstendig (gjelder for eksemel en av listene fra IMDB).

Ved å ta utgangspunkt i verk som kan antas å være lovlig delt på Internett (fra blant annet Internett-arkivet, Public Domain Torrents, Public Domain Reivew og Public Domain Movies), og knytte dem til oppføringer i IMDB, så har jeg så langt klart å identifisere over 14 000 filmer (hovedsaklig spillefilmer) det er grunn til å tro kan lovlig distribueres av alle på Internett. Som ekstra kilder er det brukt lister over filmer som antas/påstås å være allemannseie. Disse kildene kommer fra miljøer som jobber for å gjøre tilgjengelig for almennheten alle verk som er falt i det fri eller har bruksvilkår som tillater deling.

I tillegg til de over 14 000 filmene der tittel-ID i IMDB er identifisert, har jeg funnet mer enn 26 000 oppføringer der jeg ennå ikke har hatt kapasitet til å spore opp tittel-ID i IMDB. Jeg har sett at noen av disse er duplikater av de IMDB-oppføringene som er identifisert så langt, men de fleste jeg har hatt tid til å undersøke så langt har vist seg å ikke være duplikater. Retro Film Vault hevder å ha 44 000 filmverk i det fri i sin katalog, så det er mulig at det reelle tallet er betydelig høyere enn de jeg har klart å identifisere så langt. Konklusjonen en kan trekke fra dette er at tallet 14 000 er nedre grense for hvor mange filmer i IMDB som kan lovlig deles på Internett. I følge statistikk fra IMDB er det 4.6 millioner titler registrert, hvorav 3 millioner er TV-serieepisoder.

Hvis en fordeler på år alle tittel-IDene i IMDB som hevdes å deles lovlig på Internett, får en følgende histogram:

histogram over frie filmer per år

En kan i histogrammet se at effekten av manglende registrering eller fornying av registrering er at mange filmer gitt ut i USA før 1978 er allemannseie i dag. I tillegg kan en se at det finnes flere filmer gitt ut de siste årene med bruksvilkår som tillater deling, muligens på grunn av fremveksten av Creative Commons-bevegelsen.

IMDB har lagt ut en maskinlesbare liste over alle registreringene i sin database, og ved hjelp av denne har jeg oppsummert antall titler per år i kategoriene «movies» og «short», som er det jeg fokuserer på i min telling. Inn i oversikten er det tegnet hvor stor prosentandel antallet filmer som hevdes å kunne deles lovlig på Internett utgjør av IMDB-totalen. Ut fra oversikten får man en ide om hvor stor andel av totalen som kan mangle i min telling, for eksempel ved å merke seg at få prosenter av filmene utgitt tidlig på 1900-tallet er med i min telling.

histogram over filmer og frie filmer per år

For maskinell analyse av katalogene laget jeg et lite program som kobler seg til bittorrent-katalogene som brukes av ulike Popcorn Time-varianter og laster ned komplett liste over filmer i katalogene. Dette bekrefter at det er mulig å hente ut komplett liste med alle filmtitler som er tilgjengelig i katalogene, i strid med påstanden i dokumentene 09,13, 09,19 og 09,20. Jeg har sett på fire bittorrent-kataloger. Den ene ble brukt av klienten tilgjengelig fra 2017-12-18 og er navngitt «sh» i dette dokumentet. Den andre brukes i følge dokument 09,12 av klienten tilgjengelig fra og på ukjent tidspunkt og er navngitt «yts» i dette dokumentet. Den tredje ble brukt av websidene tilgjengelig fra 2017-12-18 og er navngitt «apidomain» i dette dokumentet. Den fjerde ble brukt av klienten tilgjengelig fra i følge dokument 09,12 på ukjent tidspunkt, og er navngitt «ukrfnlge» i dette dokumentet. Hvilke kataloger som brukes av ulike Popcorn Time-klienter endrer seg over tid, da Popcorn Time-klientene i praksis er nettlesere som viser frem ulike nettsider og disse nettsidene bytter datakilder når nettsidens eier ønsker det.

Metoden som Økokrim legger til grunn, skriver i sitt punkt fire at skjønn er en egnet metode for å finne ut om en film kan lovlig deles på Internett eller ikke, og sier at det ble «vurdert hvorvidt det var rimelig å forvente om at verket var vernet av copyright». For det første er det ikke nok å slå fast om en film er «vernet av copyright» for å vite om det er lovlig å dele den på Internett eller ikke, da det finnes flere filmer med opphavsrettslige bruksvilkår som tillater deling på Internett. Eksempler på dette er Creative Commons-lisensierte filmer som Citizenfour fra 2014 og Sintel fra 2010. I tillegg til slike finnes det flere filmer som nå er allemannseie (public domain) på grunn av manglende registrering eller fornying av registrering selv om både regisør, produksjonsselskap og distributør ønsker seg vern. Eksempler på dette er Plan 9 from Outer Space fra 1959 og Night of the Living Dead fra 1968. Alle filmer fra USA som var allemannseie før 1989-03-01 forble i det fri da Bern-konvensjonen, som tok effekt i USA på det tidspunktet, ikke ble gitt tilbakevirkende kraft. Historien om sangen «Happy birthday», der betaling for bruk har vært krevd inn i flere tiår selv om sangen ikke var vernet av åndsverksloven, forteller oss at hvert enkelt verk må vurderes nøye og i detalj før en kan slå fast om verket er allemannseie eller ikke, det holder ikke å tro på selverklærte rettighetshavere. Flere eksempel på verk i det fri som feilklassifiseres som vernet er fra dokument 09,18, som lister opp søkeresultater for pklienten omtalt som og i følge notatet kun inneholder en film (The Circus fra 1928) som under tvil kan antas å være allemannseie.

Ved rask gjennomlesning av dokument 09,18, som inneholder skjermbilder fra bruk av en Popcorn Time-variant, fant jeg omtalt både filmen «The Brain That Wouldn't Die» fra 1962 som er tilgjengelig fra Internett-arkivet og som i følge Wikipedia er allemannseie i USA da den ble gitt ut i 1962 uten «copyright»-merking, og filmen «God’s Little Acre» fra 1958 som er lagt ut på Wikipedia, der det fortelles at sort/hvit-utgaven er allemannseie. Det fremgår ikke fra dokument 09,18 om filmen omtalt der er sort/hvit-utgaven. Av kapasitetsårsaker og på grunn av at filmoversikten i dokument 09,18 ikke er maskinlesbart har jeg ikke forsøkt å sjekke alle filmene som listes opp der om mot liste med filmer som er antatt lovlig kan distribueres på Internet.

Ved maskinell gjennomgang av listen med IMDB-referanser under regnearkfanen «Unique titles» i dokument 09.14, fant jeg i tillegg filmen «She Wore a Yellow Ribbon» fra 1949) som nok også er feilklassifisert. Filmen «She Wore a Yellow Ribbon» er tilgjengelig fra Internett-arkivet og markert som allemannseie der. Det virker dermed å være minst fire ganger så mange filmer som kan lovlig deles på Internett enn det som er lagt til grunn når en påstår at minst 99% av innholdet er ulovlig. Jeg ser ikke bort fra at nærmere undersøkelser kan avdekke flere. Poenget er uansett ikke hvor mange filmer i listen som er lovlig å dele på Internet, men at metodens punkt med vurdering av «rimelig å forvente om at verket var vernet av copyright» gjør metoden upålitelig.

Den omtalte målemetoden velger ut tilfeldige søketermer fra ordlisten Dale-Chall. Den ordlisten inneholder 3000 enkle engelske ord som fjerdeklassinger i USA er forventet å forstå. Det fremgår ikke hvorfor akkurat denne ordlisten er valgt, og det er uklart for meg om den er egnet til å få et representativt utvalg av filmer. Mange av ordene gir tomt søkeresultat. Ved å simulerte tilsvarende søk ser jeg store avvik fra fordelingen i katalogen for enkeltmålinger. Dette antyder at enkeltmålinger av 100 filmer slik målemetoden beskriver er gjort, ikke er velegnet til å finne andel ulovlig innhold i bittorrent-katalogene.

En kan motvirke dette store avviket for enkeltmålinger ved å gjøre mange søk og slå sammen resultatet. Jeg har testet ved å gjennomføre 100 enkeltmålinger (dvs. måling av (100x100=) 10 000 tilfeldig valgte filmer) som gir mindre, men fortsatt betydelig avvik, i forhold til telling av filmer pr år i hele katalogen.

Målemetoden henter ut de fem øverste i søkeresultatet. Søkeresultatene er sortert på antall bittorrent-klienter registrert som delere i katalogene, hvilket kan gi en slagside mot hvilke filmer som er populære blant de som bruker bittorrent-katalogene, uten at det forteller noe om hvilket innhold som er tilgjengelig eller hvilket innhold som deles med Popcorn Time-klienter. Jeg har forsøkt å måle hvor stor en slik slagside eventuelt er ved å sammenligne fordelingen hvis en tar de 5 nederste i søkeresultatet i stedet. Avviket for disse to metodene for flere av katalogene er godt synlig på histogramet. Her er histogram over filmer funnet i den komplette katalogen (grønn strek), og filmer funnet ved søk etter ord i Dale-Chall. Grafer merket «top» henter fra de 5 første i søkeresultatet, mens de merket «bottom» henter fra de 5 siste. En kan her se at resultatene påvirkes betydelig av hvorvidt en ser på de første eller de siste filmene i et søketreff.

Det er viktig å merke seg at de omtalte bittorrent-katalogene ikke er laget for bruk med Popcorn Time, men for ulike miljøer av bittorrent-brukere. Eksempelvis tilhører katalogen YTS, som brukes av klientet som ble lastes ned fra, et selvstendig fildelings-relatert nettsted YTS.AG med et separat brukermiljø. Målemetoden foreslått av Økokrim måler dermed ikke (u)lovligheten rundt bruken av Popcorn Time, men (u)lovligheten til innholdet i disse katalogene.

Metoden fra Økokrims dokument 09,13 i straffesaken om DNS-beslag.

1. Evaluation of (il)legality

1.1. Methodology

Due to its technical configuration, Popcorn Time applications don't allow to make a full list of all titles made available. In order to evaluate the level of illegal operation of PCT, the following methodology was applied:

  1. A random selection of 50 keywords, greater than 3 letters, was made from the Dale-Chall list that contains 3000 simple English words1. The selection was made by using a Random Number Generator2.
  2. For each keyword, starting with the first randomly selected keyword, a search query was conducted in the movie section of the respective Popcorn Time application. For each keyword, the first five results were added to the title list until the number of 100 unique titles was reached (duplicates were removed).
  3. For one fork, .CH, insufficient titles were generated via this approach to reach 100 titles. This was solved by adding any additional query results above five for each of the 50 keywords. Since this still was not enough, another 42 random keywords were selected to finally reach 100 titles.
  4. It was verified whether or not there is a reasonable expectation that the work is copyrighted by checking if they are available on IMDb, also verifying the director, the year when the title was released, the release date for a certain market, the production company/ies of the title and the distribution company/ies.

1.2. Results

Between 6 and 9 June 2016, four forks of Popcorn Time were investigated:,, and An excel sheet with the results is included in Appendix 1. Screenshots were secured in separate Appendixes for each respective fork, see Appendix 2-5.

For each fork, out of 100, de-duplicated titles it was possible to retrieve data according to the parameters set out above that indicate that the title is commercially available. Per fork, there was 1 title that presumably falls within the public domain, i.e. the 1928 movie "The Circus" by and with Charles Chaplin.

Based on the above it is reasonable to assume that 99% of the movie content of each fork is copyright protected and is made available illegally.

This exercise was not repeated for TV series, but considering that besides production companies and distribution companies also broadcasters may have relevant rights, it is reasonable to assume that at least a similar level of infringement will be established.

Based on the above it is reasonable to assume that 99% of all the content of each fork is copyright protected and are made available illegally.

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 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b. Merk, betaling med bitcoin er ikke anonymt. :)

15th January 2019

The layered video playout server created by Sveriges Television, CasparCG Server, entered Debian today. This completes many months of work to get the source ready to go into Debian. The first upload to the Debian NEW queue happened a month ago, but the work upstream to prepare it for Debian started more than two and a half month ago. So far the casparcg-server package is only available for amd64, but I hope this can be improved. The package is in contrib because it depend on the non-free fdk-aac library. The Debian package lack support for streaming web pages because Debian is missing CEF, Chromium Embedded Framework. CEF is wanted by several packages in Debian. But because the Chromium source is not available as a build dependency, it is not yet possible to upload CEF to Debian. I hope this will change in the future.

The reason I got involved is that the Norwegian open channel Frikanalen is starting to use CasparCG for our HD playout, and I would like to have all the free software tools we use to run the TV channel available as packages from the Debian project. The last remaining piece in the puzzle is Open Broadcast Encoder, but it depend on quite a lot of patched libraries which would have to be included in Debian first.

As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.

RSS feed

Created by Chronicle v4.6