]> pere.pagekite.me Git - homepage.git/blob - blog/index.html
Generated.
[homepage.git] / blog / index.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
4 <head>
5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/vim.css" />
9 <link rel="alternate" title="RSS Feed" href="http://people.skolelinux.org/pere/blog/index.rss" type="application/rss+xml" />
10 </head>
11 <body>
12 <div class="title">
13 <h1>
14 <a href="http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
15
16 </h1>
17
18 </div>
19
20
21
22 <div class="entry">
23 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Retten_til_kontant_betaling_er_en_rettighet_som_m__brukes_for___beholdes.html">Retten til kontant betaling er en rettighet som må brukes for å beholdes</a></div>
24 <div class="date">11th December 2018</div>
25 <div class="body"><p><a href="https://www.fn.no/Om-FN/Avtaler/Menneskerettigheter/FNs-verdenserklaering-om-menneskerettigheter">FNs
26 menneskerettighetserklæring</a> artikkel 13 første punkt lyder som
27 følger:</p>
28
29 <p><blockquote>
30 Enhver har rett til å bevege seg fritt og til fritt å velge
31 oppholdssted innenfor en stats grenser.
32 </blockquote></p>
33
34 <p>Det er altså en menneskerett å kunne bevege seg fritt i landet.
35 For å bevege seg fritt i landet, så må en kunne bevege seg uten å bli
36 sporet. Det vil i dagens samfunn innebære å bevege seg uten å legge
37 igjen digitale spor og uten å være radiomerket. Hvis en vet at ens
38 bevegelser, hvor en befinner seg når, og hvem som befinner seg i
39 nærheten, blir samlet inn og gjort tilgjengelig for fremmede, det være
40 seg myndighetene eller private organisasjoner, så kan en ikke lenger
41 bevege seg fritt. Dette gjør at det er en forutsetning for å ha glede
42 av retten til å bevege seg fritt i landet at en motstår fristelsen til
43 å legge igjen digitale spor når en betaler for seg. Rettigheter som
44 ikke blir brukt, blit fjernet. Den eneste måten i dag å unngå å legge
45 igjen digitale spor når en betaler for seg, er å betale med kontanter,
46 samt takke nei til å legge igjen navn og adresse (slik f.eks. Elkjøp
47 ber om &mdash; jeg sier de kan legge inn 'anonym anonym' når
48 datasystemet deres trenger et navn). Personlig bruker jeg derfor
49 konsekvent kontant betaling når jeg beveger meg rundt, for å bidra med
50 mitt for å forsvare menneskerettighetene i Norge. Kanskje noe også
51 for deg? Merk at det ikke er tilstrekkelig for å unngå sporing å
52 betale med kontanter, men det er et lite steg i riktig retning.</p>
53
54 <p>Det er flere andre argumenter i tillegg til
55 menneskerettighetsargumentet for å bruke kontanter. I går hadde
56 Dagbladet en utmerket kommentar av sin journalist John Olav Egeland om
57 hvilket
58 <a href="https://www.dagbladet.no/kultur/kontantlost-diktatur/70543434">kontantløst
59 diktatur</a> som venter oss hvis mange nok slutter å insistere på å
60 betale med kontanter. Jeg anbefaler deg å lese den.</p>
61
62 <p>Som vanlig, hvis du bruker Bitcoin og ønsker å vise din støtte til
63 det jeg driver med, setter jeg pris på om du sender Bitcoin-donasjoner
64 til min adresse
65 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.
66 Merk, betaling med bitcoin er ikke anonymt. :)</p>
67 </div>
68 <div class="tags">
69
70
71 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>.
72
73
74 </div>
75 </div>
76 <div class="padding"></div>
77
78 <div class="entry">
79 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Why_is_your_site_not_using_Content_Security_Policy___CSP_.html">Why is your site not using Content Security Policy / CSP?</a></div>
80 <div class="date"> 9th December 2018</div>
81 <div class="body"><p>Yesterday, I had the pleasure of watching on Frikanalen the OWASP
82 talk by Scott Helme titled
83 "<a href="https://frikanalen.no/video/626080/">What We’ve Learned From
84 Billions of Security Reports</a>". I had not heard of the
85 <a href="https://en.wikipedia.org/wiki/Content_Security_Policy">Content
86 Security Policy standard</a> nor its ability to "call home" when a
87 browser detect a policy breach (I do not follow web page design
88 development much these days), and found the talk very illuminating.</p>
89
90 <p>The mechanism allow a web site owner to use HTTP headers to tell
91 visitors web browser which sources (internal and external) are allowed to
92 be used on the web site. Thus it become possible to enforce a "only
93 local content" policy despite web designers urge to fetch programs
94 from random sites on the Internet, like the one
95 <a href="https://securityaffairs.co/wordpress/68966/hacking/browsealoud-plugin-hack.html">enabling
96 the attack</a> reported by Scott Helme earlier this year.</p>
97
98 <p>Using CSP seem like an obvious thing for a site admin to implement
99 to take some control over the information leak that occur when
100 external sources are used to render web pages, it is a mystery more
101 sites are not using CSP? It is being
102 <a href="https://www.w3.org/TR/CSP/">standardized under W3C</a> these
103 days, and is supposed by most web browsers</p>
104
105 <p>I managed to find <a href="https://github.com/mozilla/django-csp">a
106 Django middleware for implementing CSP</a> and was happy to discover
107 it was already in Debian. I plan to use it to add CSP support to the
108 Frikanalen web site soon.</p>
109
110 <p>As usual, if you use Bitcoin and want to show your support of my
111 activities, please send Bitcoin donations to my address
112 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
113 </div>
114 <div class="tags">
115
116
117 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/standard">standard</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
118
119
120 </div>
121 </div>
122 <div class="padding"></div>
123
124 <div class="entry">
125 <div class="title"><a href="http://people.skolelinux.org/pere/blog/New_and_improved_Frikanalen_Kodi_addon_version_0_0_3.html">New and improved Frikanalen Kodi addon version 0.0.3</a></div>
126 <div class="date"> 8th November 2018</div>
127 <div class="body"><p>If you read my blog regularly, you probably know I am involved in
128 running and developing the <a href="https://frikanalen.no/">Norwegian
129 TV channel Frikanalen</a>. It is an open channel, allowing everyone
130 in Norway to publish videos on a TV channel with national coverage.
131 You can think of it as Youtube for national television.
132 In addition to distribution on RiksTV and Uninett, Frikanalen is also
133 available as a Kodi addon. The last few days I have updated the code
134 to add more features. A
135 <a href="https://kodi.tv/addon/plugins-video-add-ons/frikanalen-nett-tv">new
136 and improved version 0.0.3 Frikanalen addon</a> was just made
137 available via the Kodi repositories. This new version include a
138 option to browse videos by category, as well as free text search
139 in the video archive. It will now also show the video duration in the
140 video lists, which were missing earlier. A new and experimental
141 link to the HD video stream currently being worked on is provided, for
142 those that want to see what the <a href="https://casparcg.com/">CasparCG</a>
143 output look like. The alternative is the SD video stream, generated
144 using MLT. CasparCG is controlled by our
145 <a href="https://github.com/Frikanalen/mltplayout/">mltplayout
146 server</a> which instead of talking to mlt is giving PLAY instructions
147 to the CasparCG server when it is time to start a new program.</p>
148
149 <p>By now, you are probably wondering what kind of content is being
150 played on the channel. These days, it is filled with technical
151 presentations like those from <a href="https://www.nuug.no/">NUUG</a>,
152 <a href="https://www.debconf.org/">Debconf</a>, Makercon, and TED,
153 but there are also some periods with
154 <a href="https://www.empo.no/">EMPT TV</a> and
155 <a href="https://www.p7.no/">P7</a>.
156
157 <p>As usual, if you use Bitcoin and want to show your support of my
158 activities, please send Bitcoin donations to my address
159 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
160 </div>
161 <div class="tags">
162
163
164 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen</a>, <a href="http://people.skolelinux.org/pere/blog/tags/kodi">kodi</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>.
165
166
167 </div>
168 </div>
169 <div class="padding"></div>
170
171 <div class="entry">
172 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Time_for_an_official_MIME_type_for_patches_.html">Time for an official MIME type for patches?</a></div>
173 <div class="date"> 1st November 2018</div>
174 <div class="body"><p>As part of my involvement in
175 <a href="https://gitlab.com/OsloMet-ABI/nikita-noark5-core">the Nikita
176 archive API project</a>, I've been importing a fairly large lump of
177 emails into a test instance of the archive to see how well this would
178 go. I picked a subset of <a href="https://notmuchmail.org/">my
179 notmuch email database</a>, all public emails sent to me via
180 @lists.debian.org, giving me a set of around 216 000 emails to import.
181 In the process, I had a look at the various attachments included in
182 these emails, to figure out what to do with attachments, and noticed
183 that one of the most common attachment formats do not have
184 <a href="https://www.iana.org/assignments/media-types/media-types.xhtml">an
185 official MIME type</a> registered with IANA/IETF. The output from
186 diff, ie the input for patch, is on the top 10 list of formats
187 included in these emails. At the moment people seem to use either
188 text/x-patch or text/x-diff, but neither is officially registered. It
189 would be better if one official MIME type were registered and used
190 everywhere.</p>
191
192 <p>To try to get one official MIME type for these files, I've brought
193 up the topic on
194 <a href="https://www.ietf.org/mailman/listinfo/media-types">the
195 media-types mailing list</a>. If you are interested in discussion
196 which MIME type to use as the official for patch files, or involved in
197 making software using a MIME type for patches, perhaps you would like
198 to join the discussion?</p>
199
200 <p>As usual, if you use Bitcoin and want to show your support of my
201 activities, please send Bitcoin donations to my address
202 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
203 </div>
204 <div class="tags">
205
206
207 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/standard">standard</a>.
208
209
210 </div>
211 </div>
212 <div class="padding"></div>
213
214 <div class="entry">
215 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Measuring_the_speaker_frequency_response_using_the_AUDMES_free_software_GUI___nice_free_software.html">Measuring the speaker frequency response using the AUDMES free software GUI - nice free software</a></div>
216 <div class="date">22nd October 2018</div>
217 <div class="body"><p><img src="http://people.skolelinux.org/pere/blog/images/2018-10-22-audmes-measure-speakers.png" align="right" width="40%"/></p>
218
219 <p>My current home stereo is a patchwork of various pieces I got on
220 flee markeds over the years. It is amazing what kind of equipment
221 show up there. I've been wondering for a while if it was possible to
222 measure how well this equipment is working together, and decided to
223 see how far I could get using free software. After trawling the web I
224 came across an article from DIY Audio and Video on
225 <a href="https://www.diyaudioandvideo.com/Tutorial/SpeakerResponseTesting/">Speaker
226 Testing and Analysis</a> describing how to test speakers, and it listing
227 several software options, among them
228 <a href="https://sourceforge.net/projects/audmes/">AUDio MEasurement
229 System (AUDMES)</a>. It is the only free software system I could find
230 focusing on measuring speakers and audio frequency response. In the
231 process I also found an interesting article from NOVO on
232 <a href="http://novo.press/understanding-speaker-specifications-and-frequency-response/">Understanding
233 Speaker Specifications and Frequency Response</a> and an article from
234 ecoustics on
235 <a href="https://www.ecoustics.com/articles/understanding-speaker-frequency-response/">Understanding
236 Speaker Frequency Response</a>, with a lot of information on what to
237 look for and how to interpret the graphs. Armed with this knowledge,
238 I set out to measure the state of my speakers.</p>
239
240 <p>The first hurdle was that AUDMES hadn't seen a commit for 10 years
241 and did not build with current compilers and libraries. I got in
242 touch with its author, who no longer was spending time on the program
243 but gave me write access to the subversion repository on Sourceforge.
244 The end result is that now the code build on Linux and is capable of
245 saving and loading the collected frequency response data in CSV
246 format. The application is quite nice and flexible, and I was able to
247 select the input and output audio interfaces independently. This made
248 it possible to use a USB mixer as the input source, while sending
249 output via my laptop headphone connection. I lacked the hardware and
250 cabling to figure out a different way to get independent cabling to
251 speakers and microphone.</p>
252
253 <p>Using this setup I could see how a large range of high frequencies
254 apparently were not making it out of my speakers. The picture show
255 the frequency response measurement of one of the speakers. Note the
256 frequency lines seem to be slightly misaligned, compared to the CSV
257 output from the program. I can not hear several of these are high
258 frequencies, according to measurement from
259 <a href="http://freehearingtestsoftware.com">Free Hearing Test
260 Software</a>, an freeware system to measure your hearing (still
261 looking for a free software alternative), so I do not know if they are
262 coming out out the speakers. I thus do not quite know how to figure
263 out if the missing frequencies is a problem with the microphone, the
264 amplifier or the speakers, but I managed to rule out the audio card in my
265 PC by measuring my Bose noise canceling headset using its own
266 microphone. This setup was able to see the high frequency tones, so
267 the problem with my stereo had to be in the amplifier or speakers.</p>
268
269 <p>Anyway, to try to role out one factor I ended up picking up a new
270 set of speakers at a flee marked, and these work a lot better than the
271 old speakers, so I guess the microphone and amplifier is OK. If you
272 need to measure your own speakers, check out AUDMES. If more people
273 get involved, perhaps the project could become good enough to
274 <a href="https://bugs.debian.org/910876">include in Debian</a>? And if
275 you know of some other free software to measure speakers and amplifier
276 performance, please let me know. I am aware of the freeware option
277 <a href="https://www.roomeqwizard.com/">REW</a>, but I want something
278 that can be developed also when the vendor looses interest.</p>
279
280 <p>As usual, if you use Bitcoin and want to show your support of my
281 activities, please send Bitcoin donations to my address
282 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
283 </div>
284 <div class="tags">
285
286
287 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
288
289
290 </div>
291 </div>
292 <div class="padding"></div>
293
294 <div class="entry">
295 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Web_browser_integration_of_VLC_with_Bittorrent_support.html">Web browser integration of VLC with Bittorrent support</a></div>
296 <div class="date">21st October 2018</div>
297 <div class="body"><p>Bittorrent is as far as I know, currently the most efficient way to
298 distribute content on the Internet. It is used all by all sorts of
299 content providers, from national TV stations like
300 <a href="https://www.nrk.no/">NRK</a>, Linux distributors like
301 <a href="https://www.debian.org/">Debian</a> and
302 <a href="https://www.ubuntu.com/">Ubuntu</a>, and of course the
303 <a href="https://archive.org/">Internet archive</A>.
304
305 <p>Almost a month ago
306 <a href="https://tracker.debian.org/pkg/vlc-plugin-bittorrent">a new
307 package adding Bittorrent support to VLC</a> became available in
308 Debian testing and unstable. To test it, simply install it like
309 this:</p>
310
311 <p><pre>
312 apt install vlc-plugin-bittorrent
313 </pre></p>
314
315 <p>Since the plugin was made available for the first time in Debian,
316 several improvements have been made to it. In version 2.2-4, now
317 available in both testing and unstable, a desktop file is provided to
318 teach browsers to start VLC when the user click on torrent files or
319 magnet links. The last part is thanks to me finally understanding
320 what the strange x-scheme-handler style MIME types in desktop files
321 are used for. By adding x-scheme-handler/magnet to the MimeType entry
322 in the desktop file, at least the browsers Firefox and Chromium will
323 suggest to start VLC when selecting a magnet URI on a web page. The
324 end result is that now, with the plugin installed in Buster and Sid,
325 one can visit any
326 <a href="https://archive.org/details/CopyingIsNotTheft1080p">Internet
327 Archive page with movies</a> using a web browser and click on the
328 torrent link to start streaming the movie.</p>
329
330 <p>Note, there is still some misfeatures in the plugin. One is the
331 fact that it will hang and
332 <a href="https://github.com/johang/vlc-bittorrent/issues/13">block VLC
333 from exiting until the torrent streaming starts</a>. Another is the
334 fact that it
335 <a href="https://github.com/johang/vlc-bittorrent/issues/9">will pick
336 and play a random file in a multi file torrent</a>. This is not
337 always the video file you want. Combined with the first it can be a
338 bit hard to get the video streaming going. But when it work, it seem
339 to do a good job.</p>
340
341 <p>For the Debian packaging, I would love to find a good way to test
342 if the plugin work with VLC using autopkgtest. I tried, but do not
343 know enough of the inner workings of VLC to get it working. For now
344 the autopkgtest script is only checking if the .so file was
345 successfully loaded by VLC. If you have any suggestions, please
346 submit a patch to the Debian bug tracking system.</p>
347
348 <p>As usual, if you use Bitcoin and want to show your support of my
349 activities, please send Bitcoin donations to my address
350 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
351 </div>
352 <div class="tags">
353
354
355 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>.
356
357
358 </div>
359 </div>
360 <div class="padding"></div>
361
362 <div class="entry">
363 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Release_0_2_of_free_software_archive_system_Nikita_announced.html">Release 0.2 of free software archive system Nikita announced</a></div>
364 <div class="date">18th October 2018</div>
365 <div class="body"><p>This morning, the new release of the
366 <a href="https://gitlab.com/OsloMet-ABI/nikita-noark5-core/">Nikita
367 Noark 5 core project</a> was
368 <a href="https://lists.nuug.no/pipermail/nikita-noark/2018-October/000406.html">announced
369 on the project mailing list</a>. The free software solution is an
370 implementation of the Norwegian archive standard Noark 5 used by
371 government offices in Norway. These were the changes in version 0.2
372 since version 0.1.1 (from NEWS.md):
373
374 <ul>
375 <li>Fix typos in REL names</li>
376 <li>Tidy up error message reporting</li>
377 <li>Fix issue where we used Integer.valueOf(), not Integer.getInteger()</li>
378 <li>Change some String handling to StringBuffer</li>
379 <li>Fix error reporting</li>
380 <li>Code tidy-up</li>
381 <li>Fix issue using static non-synchronized SimpleDateFormat to avoid
382 race conditions</li>
383 <li>Fix problem where deserialisers were treating integers as strings</li>
384 <li>Update methods to make them null-safe</li>
385 <li>Fix many issues reported by coverity</li>
386 <li>Improve equals(), compareTo() and hash() in domain model</li>
387 <li>Improvements to the domain model for metadata classes</li>
388 <li>Fix CORS issues when downloading document</li>
389 <li>Implementation of case-handling with registryEntry and document upload</li>
390 <li>Better support in Javascript for OPTIONS</li>
391 <li>Adding concept description of mail integration</li>
392 <li>Improve setting of default values for GET on ny-journalpost</li>
393 <li>Better handling of required values during deserialisation </li>
394 <li>Changed tilknyttetDato (M620) from date to dateTime</li>
395 <li>Corrected some opprettetDato (M600) (de)serialisation errors.</li>
396 <li>Improve parse error reporting.</li>
397 <li>Started on OData search and filtering.</li>
398 <li>Added Contributor Covenant Code of Conduct to project.</li>
399 <li>Moved repository and project from Github to Gitlab.</li>
400 <li>Restructured repository, moved code into src/ and web/.</li>
401 <li>Updated code to use Spring Boot version 2.</li>
402 <li>Added support for OAuth2 authentication.</li>
403 <li>Fixed several bugs discovered by Coverity.</li>
404 <li>Corrected handling of date/datetime fields.</li>
405 <li>Improved error reporting when rejecting during deserializatoin.</li>
406 <li>Adjusted default values provided for ny-arkivdel, ny-mappe,
407 ny-saksmappe, ny-journalpost and ny-dokumentbeskrivelse.</li>
408 <li>Several fixes for korrespondansepart*.</li>
409 <li>Updated web GUI:
410 <ul>
411 <li>Now handle both file upload and download.</li>
412 <li>Uses new OAuth2 authentication for login.</li>
413 <li>Forms now fetches default values from API using GET.</li>
414 <li>Added RFC 822 (email), TIFF and JPEG to list of possible file formats.</li>
415 </ul></li>
416 </ul>
417
418 <p>The changes and improvements are extensive. Running diffstat on
419 the changes between git tab 0.1.1 and 0.2 show 1098 files changed,
420 108666 insertions(+), 54066 deletions(-).</p>
421
422 <p>If free and open standardized archiving API sound interesting to
423 you, please contact us on IRC
424 (<a href="irc://irc.freenode.net/%23nikita">#nikita on
425 irc.freenode.net</a>) or email
426 (<a href="https://lists.nuug.no/mailman/listinfo/nikita-noark">nikita-noark
427 mailing list</a>).</p>
428
429 <p>As usual, if you use Bitcoin and want to show your support of my
430 activities, please send Bitcoin donations to my address
431 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
432 </div>
433 <div class="tags">
434
435
436 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>, <a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn</a>, <a href="http://people.skolelinux.org/pere/blog/tags/standard">standard</a>.
437
438
439 </div>
440 </div>
441 <div class="padding"></div>
442
443 <div class="entry">
444 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Fetching_trusted_timestamps_using_the_rfc3161ng_python_module.html">Fetching trusted timestamps using the rfc3161ng python module</a></div>
445 <div class="date"> 8th October 2018</div>
446 <div class="body"><p>I have earlier covered the basics of trusted timestamping using the
447 'openssl ts' client. See blog post for
448 <a href="http://people.skolelinux.org/pere/blog/Public_Trusted_Timestamping_services_for_everyone.html">2014</a>,
449 <a href="http://people.skolelinux.org/pere/blog/syslog_trusted_timestamp___chain_of_trusted_timestamps_for_your_syslog.html">2016</a>
450 and
451 <a href="http://people.skolelinux.org/pere/blog/Idea_for_storing_trusted_timestamps_in_a_Noark_5_archive.html">2017</a>
452 for those stories. But some times I want to integrate the timestamping
453 in other code, and recently I needed to integrate it into Python.
454 After searching a bit, I found
455 <a href="https://dev.entrouvert.org/projects/python-rfc3161">the
456 rfc3161 library</a> which seemed like a good fit, but I soon
457 discovered it only worked for python version 2, and I needed something
458 that work with python version 3. Luckily I next came across
459 <a href="https://github.com/trbs/rfc3161ng/">the rfc3161ng library</a>,
460 a fork of the original rfc3161 library. Not only is it working with
461 python 3, it have fixed a few of the bugs in the original library, and
462 it has an active maintainer. I decided to wrap it up and make it
463 <a href="https://tracker.debian.org/pkg/python-rfc3161ng">available in
464 Debian</a>, and a few days ago it entered Debian unstable and testing.</p>
465
466 <p>Using the library is fairly straight forward. The only slightly
467 problematic step is to fetch the required certificates to verify the
468 timestamp. For some services it is straight forward, while for others
469 I have not yet figured out how to do it. Here is a small standalone
470 code example based on of the integration tests in the library code:</p>
471
472 <pre>
473 #!/usr/bin/python3
474
475 """
476
477 Python 3 script demonstrating how to use the rfc3161ng module to
478 get trusted timestamps.
479
480 The license of this code is the same as the license of the rfc3161ng
481 library, ie MIT/BSD.
482
483 """
484
485 import os
486 import pyasn1.codec.der
487 import rfc3161ng
488 import subprocess
489 import tempfile
490 import urllib.request
491
492 def store(f, data):
493 f.write(data)
494 f.flush()
495 f.seek(0)
496
497 def fetch(url, f=None):
498 response = urllib.request.urlopen(url)
499 data = response.read()
500 if f:
501 store(f, data)
502 return data
503
504 def main():
505 with tempfile.NamedTemporaryFile() as cert_f,\
506 tempfile.NamedTemporaryFile() as ca_f,\
507 tempfile.NamedTemporaryFile() as msg_f,\
508 tempfile.NamedTemporaryFile() as tsr_f:
509
510 # First fetch certificates used by service
511 certificate_data = fetch('https://freetsa.org/files/tsa.crt', cert_f)
512 ca_data_data = fetch('https://freetsa.org/files/cacert.pem', ca_f)
513
514 # Then timestamp the message
515 timestamper = \
516 rfc3161ng.RemoteTimestamper('http://freetsa.org/tsr',
517 certificate=certificate_data)
518 data = b"Python forever!\n"
519 tsr = timestamper(data=data, return_tsr=True)
520
521 # Finally, convert message and response to something 'openssl ts' can verify
522 store(msg_f, data)
523 store(tsr_f, pyasn1.codec.der.encoder.encode(tsr))
524 args = ["openssl", "ts", "-verify",
525 "-data", msg_f.name,
526 "-in", tsr_f.name,
527 "-CAfile", ca_f.name,
528 "-untrusted", cert_f.name]
529 subprocess.check_call(args)
530
531 if '__main__' == __name__:
532 main()
533 </pre>
534
535 <p>The code fetches the required certificates, store them as temporary
536 files, timestamp a simple message, store the message and timestamp to
537 disk and ask 'openssl ts' to verify the timestamp. A timestamp is
538 around 1.5 kiB in size, and should be fairly easy to store for future
539 use.</p>
540
541 <p>As usual, if you use Bitcoin and want to show your support of my
542 activities, please send Bitcoin donations to my address
543 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
544 </div>
545 <div class="tags">
546
547
548 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
549
550
551 </div>
552 </div>
553 <div class="padding"></div>
554
555 <div class="entry">
556 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Automatic_Google_Drive_sync_using_grive_in_Debian.html">Automatic Google Drive sync using grive in Debian</a></div>
557 <div class="date"> 4th October 2018</div>
558 <div class="body"><p>A few days, I rescued a Windows victim over to Debian. To try to
559 rescue the remains, I helped set up automatic sync with Google Drive.
560 I did not find any sensible Debian package handling this
561 automatically, so I rebuild the grive2 source from
562 <a href="http://www.webupd8.org/">the Ubuntu UPD8 PPA</a> to do the
563 task and added a autostart desktop entry and a small shell script to
564 run in the background while the user is logged in to do the sync.
565 Here is a sketch of the setup for future reference.</p>
566
567 <p>I first created <tt>~/googledrive</tt>, entered the directory and
568 ran '<tt>grive -a</tt>' to authenticate the machine/user. Next, I
569 created a autostart hook in <tt>~/.config/autostart/grive.desktop</tt>
570 to start the sync when the user log in:</p>
571
572 <p><blockquote><pre>
573 [Desktop Entry]
574 Name=Google drive autosync
575 Type=Application
576 Exec=/home/user/bin/grive-sync
577 </pre></blockquote></p>
578
579 <p>Finally, I wrote the <tt>~/bin/grive-sync</tt> script to sync
580 ~/googledrive/ with the files in Google Drive.</p>
581
582 <p><blockquote><pre>
583 #!/bin/sh
584 set -e
585 cd ~/
586 cleanup() {
587 if [ "$syncpid" ] ; then
588 kill $syncpid
589 fi
590 }
591 trap cleanup EXIT INT QUIT
592 /usr/lib/grive/grive-sync.sh listen googledrive 2>&1 | sed "s%^%$0:%" &
593 syncpdi=$!
594 while true; do
595 if ! xhost >/dev/null 2>&1 ; then
596 echo "no DISPLAY, exiting as the user probably logged out"
597 exit 1
598 fi
599 if [ ! -e /run/user/1000/grive-sync.sh_googledrive ] ; then
600 /usr/lib/grive/grive-sync.sh sync googledrive
601 fi
602 sleep 300
603 done 2>&1 | sed "s%^%$0:%"
604 </pre></blockquote></p>
605
606 <p>Feel free to use the setup if you want. It can be assumed to be
607 GNU GPL v2 licensed (or any later version, at your leisure), but I
608 doubt this code is possible to claim copyright on.</p>
609
610 <p>As usual, if you use Bitcoin and want to show your support of my
611 activities, please send Bitcoin donations to my address
612 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
613 </div>
614 <div class="tags">
615
616
617 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
618
619
620 </div>
621 </div>
622 <div class="padding"></div>
623
624 <div class="entry">
625 <div class="title"><a href="http://people.skolelinux.org/pere/blog/Valutakrambod___A_python_and_bitcoin_love_story.html">Valutakrambod - A python and bitcoin love story</a></div>
626 <div class="date">29th September 2018</div>
627 <div class="body"><p>It would come as no surprise to anyone that I am interested in
628 bitcoins and virtual currencies. I've been keeping an eye on virtual
629 currencies for many years, and it is part of the reason a few months
630 ago, I started writing a python library for collecting currency
631 exchange rates and trade on virtual currency exchanges. I decided to
632 name the end result valutakrambod, which perhaps can be translated to
633 small currency shop.</p>
634
635 <p>The library uses the tornado python library to handle HTTP and
636 websocket connections, and provide a asynchronous system for
637 connecting to and tracking several services. The code is available
638 from
639 <a href="http://github.com/petterreinholdtsen/valutakrambod">github</a>.</p>
640
641 </p>There are two example clients of the library. One is very simple and
642 list every updated buy/sell price received from the various services.
643 This code is started by running bin/btc-rates and call the client code
644 in valutakrambod/client.py. The simple client look like this:</p>
645
646 <p><blockquote><pre>
647 import functools
648 import tornado.ioloop
649 import valutakrambod
650 class SimpleClient(object):
651 def __init__(self):
652 self.services = []
653 self.streams = []
654 pass
655 def newdata(self, service, pair, changed):
656 print("%-15s %s-%s: %8.3f %8.3f" % (
657 service.servicename(),
658 pair[0],
659 pair[1],
660 service.rates[pair]['ask'],
661 service.rates[pair]['bid'])
662 )
663 async def refresh(self, service):
664 await service.fetchRates(service.wantedpairs)
665 def run(self):
666 self.ioloop = tornado.ioloop.IOLoop.current()
667 self.services = valutakrambod.service.knownServices()
668 for e in self.services:
669 service = e()
670 service.subscribe(self.newdata)
671 stream = service.websocket()
672 if stream:
673 self.streams.append(stream)
674 else:
675 # Fetch information from non-streaming services immediately
676 self.ioloop.call_later(len(self.services),
677 functools.partial(self.refresh, service))
678 # as well as regularly
679 service.periodicUpdate(60)
680 for stream in self.streams:
681 stream.connect()
682 try:
683 self.ioloop.start()
684 except KeyboardInterrupt:
685 print("Interrupted by keyboard, closing all connections.")
686 pass
687 for stream in self.streams:
688 stream.close()
689 </pre></blockquote></p>
690
691 <p>The library client loops over all known "public" services,
692 initialises it, subscribes to any updates from the service, checks and
693 activates websocket streaming if the service provide it, and if no
694 streaming is supported, fetches information from the service and sets
695 up a periodic update every 60 seconds. The output from this client
696 can look like this:</p>
697
698 <p><blockquote><pre>
699 Bl3p BTC-EUR: 5687.110 5653.690
700 Bl3p BTC-EUR: 5687.110 5653.690
701 Bl3p BTC-EUR: 5687.110 5653.690
702 Hitbtc BTC-USD: 6594.560 6593.690
703 Hitbtc BTC-USD: 6594.560 6593.690
704 Bl3p BTC-EUR: 5687.110 5653.690
705 Hitbtc BTC-USD: 6594.570 6593.690
706 Bitstamp EUR-USD: 1.159 1.154
707 Hitbtc BTC-USD: 6594.570 6593.690
708 Hitbtc BTC-USD: 6594.580 6593.690
709 Hitbtc BTC-USD: 6594.580 6593.690
710 Hitbtc BTC-USD: 6594.580 6593.690
711 Bl3p BTC-EUR: 5687.110 5653.690
712 Paymium BTC-EUR: 5680.000 5620.240
713 </pre></blockquote></p>
714
715 <p>The exchange order book is tracked in addition to the best buy/sell
716 price, for those that need to know the details.</p>
717
718 <p>The other example client is focusing on providing a curses view
719 with updated buy/sell prices as soon as they are received from the
720 services. This code is located in bin/btc-rates-curses and activated
721 by using the '-c' argument. Without the argument the "curses" output
722 is printed without using curses, which is useful for debugging. The
723 curses view look like this:</p>
724
725 <p><blockquote><pre>
726 Name Pair Bid Ask Spr Ftcd Age
727 BitcoinsNorway BTCEUR 5591.8400 5711.0800 2.1% 16 nan 60
728 Bitfinex BTCEUR 5671.0000 5671.2000 0.0% 16 22 59
729 Bitmynt BTCEUR 5580.8000 5807.5200 3.9% 16 41 60
730 Bitpay BTCEUR 5663.2700 nan nan% 15 nan 60
731 Bitstamp BTCEUR 5664.8400 5676.5300 0.2% 0 1 1
732 Bl3p BTCEUR 5653.6900 5684.9400 0.5% 0 nan 19
733 Coinbase BTCEUR 5600.8200 5714.9000 2.0% 15 nan nan
734 Kraken BTCEUR 5670.1000 5670.2000 0.0% 14 17 60
735 Paymium BTCEUR 5620.0600 5680.0000 1.1% 1 7515 nan
736 BitcoinsNorway BTCNOK 52898.9700 54034.6100 2.1% 16 nan 60
737 Bitmynt BTCNOK 52960.3200 54031.1900 2.0% 16 41 60
738 Bitpay BTCNOK 53477.7833 nan nan% 16 nan 60
739 Coinbase BTCNOK 52990.3500 54063.0600 2.0% 15 nan nan
740 MiraiEx BTCNOK 52856.5300 54100.6000 2.3% 16 nan nan
741 BitcoinsNorway BTCUSD 6495.5300 6631.5400 2.1% 16 nan 60
742 Bitfinex BTCUSD 6590.6000 6590.7000 0.0% 16 23 57
743 Bitpay BTCUSD 6564.1300 nan nan% 15 nan 60
744 Bitstamp BTCUSD 6561.1400 6565.6200 0.1% 0 2 1
745 Coinbase BTCUSD 6504.0600 6635.9700 2.0% 14 nan 117
746 Gemini BTCUSD 6567.1300 6573.0700 0.1% 16 89 nan
747 Hitbtc+BTCUSD 6592.6200 6594.2100 0.0% 0 0 0
748 Kraken BTCUSD 6565.2000 6570.9000 0.1% 15 17 58
749 Exchangerates EURNOK 9.4665 9.4665 0.0% 16 107789 nan
750 Norgesbank EURNOK 9.4665 9.4665 0.0% 16 107789 nan
751 Bitstamp EURUSD 1.1537 1.1593 0.5% 4 5 1
752 Exchangerates EURUSD 1.1576 1.1576 0.0% 16 107789 nan
753 BitcoinsNorway LTCEUR 1.0000 49.0000 98.0% 16 nan nan
754 BitcoinsNorway LTCNOK 492.4800 503.7500 2.2% 16 nan 60
755 BitcoinsNorway LTCUSD 1.0221 49.0000 97.9% 15 nan nan
756 Norgesbank USDNOK 8.1777 8.1777 0.0% 16 107789 nan
757 </pre></blockquote></p>
758
759 <p>The code for this client is too complex for a simple blog post, so
760 you will have to check out the git repository to figure out how it
761 work. What I can tell is how the three last numbers on each line
762 should be interpreted. The first is how many seconds ago information
763 was received from the service. The second is how long ago, according
764 to the service, the provided information was updated. The last is an
765 estimate on how often the buy/sell values change.</p>
766
767 <p>If you find this library useful, or would like to improve it, I
768 would love to hear from you. Note that for some of the services I've
769 implemented a trading API. It might be the topic of a future blog
770 post.</p>
771
772 <p>As usual, if you use Bitcoin and want to show your support of my
773 activities, please send Bitcoin donations to my address
774 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
775 </div>
776 <div class="tags">
777
778
779 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>.
780
781
782 </div>
783 </div>
784 <div class="padding"></div>
785
786 <p style="text-align: right;"><a href="index.rss"><img src="http://people.skolelinux.org/pere/blog/xml.gif" alt="RSS feed" width="36" height="14" /></a></p>
787 <div id="sidebar">
788
789
790
791 <h2>Archive</h2>
792 <ul>
793
794 <li>2018
795 <ul>
796
797 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
798
799 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
800
801 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
802
803 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
804
805 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
806
807 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
808
809 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
810
811 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
812
813 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/10/">October (5)</a></li>
814
815 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/11/">November (2)</a></li>
816
817 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/12/">December (2)</a></li>
818
819 </ul></li>
820
821 <li>2017
822 <ul>
823
824 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
825
826 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
827
828 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
829
830 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
831
832 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
833
834 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
835
836 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
837
838 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
839
840 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
841
842 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
843
844 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
845
846 </ul></li>
847
848 <li>2016
849 <ul>
850
851 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
852
853 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
854
855 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
856
857 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
858
859 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
860
861 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
862
863 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
864
865 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
866
867 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
868
869 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
870
871 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
872
873 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
874
875 </ul></li>
876
877 <li>2015
878 <ul>
879
880 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
881
882 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
883
884 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
885
886 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
887
888 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
889
890 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
891
892 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
893
894 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
895
896 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
897
898 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
899
900 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
901
902 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
903
904 </ul></li>
905
906 <li>2014
907 <ul>
908
909 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
910
911 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
912
913 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
914
915 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
916
917 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
918
919 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
920
921 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
922
923 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
924
925 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
926
927 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
928
929 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
930
931 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
932
933 </ul></li>
934
935 <li>2013
936 <ul>
937
938 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
939
940 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
941
942 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
943
944 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
945
946 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
947
948 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
949
950 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
951
952 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
953
954 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
955
956 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
957
958 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
959
960 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
961
962 </ul></li>
963
964 <li>2012
965 <ul>
966
967 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
968
969 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
970
971 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
972
973 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
974
975 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
976
977 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
978
979 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
980
981 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
982
983 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
984
985 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
986
987 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
988
989 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
990
991 </ul></li>
992
993 <li>2011
994 <ul>
995
996 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
997
998 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
999
1000 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
1001
1002 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
1003
1004 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
1005
1006 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
1007
1008 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
1009
1010 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
1011
1012 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
1013
1014 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
1015
1016 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
1017
1018 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
1019
1020 </ul></li>
1021
1022 <li>2010
1023 <ul>
1024
1025 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
1026
1027 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
1028
1029 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
1030
1031 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
1032
1033 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
1034
1035 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
1036
1037 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
1038
1039 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
1040
1041 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
1042
1043 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
1044
1045 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
1046
1047 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
1048
1049 </ul></li>
1050
1051 <li>2009
1052 <ul>
1053
1054 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
1055
1056 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
1057
1058 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
1059
1060 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
1061
1062 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
1063
1064 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
1065
1066 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
1067
1068 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
1069
1070 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
1071
1072 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
1073
1074 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
1075
1076 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
1077
1078 </ul></li>
1079
1080 <li>2008
1081 <ul>
1082
1083 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
1084
1085 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
1086
1087 </ul></li>
1088
1089 </ul>
1090
1091
1092
1093 <h2>Tags</h2>
1094 <ul>
1095
1096 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (16)</a></li>
1097
1098 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
1099
1100 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
1101
1102 <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
1103
1104 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (10)</a></li>
1105
1106 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
1107
1108 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
1109
1110 <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
1111
1112 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (164)</a></li>
1113
1114 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (158)</a></li>
1115
1116 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (4)</a></li>
1117
1118 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
1119
1120 <li><a href="http://people.skolelinux.org/pere/blog/tags/dld">dld (17)</a></li>
1121
1122 <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (25)</a></li>
1123
1124 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
1125
1126 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (393)</a></li>
1127
1128 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
1129
1130 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (13)</a></li>
1131
1132 <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (32)</a></li>
1133
1134 <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
1135
1136 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (19)</a></li>
1137
1138 <li><a href="http://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
1139
1140 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (42)</a></li>
1141
1142 <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
1143
1144 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (20)</a></li>
1145
1146 <li><a href="http://people.skolelinux.org/pere/blog/tags/kodi">kodi (4)</a></li>
1147
1148 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
1149
1150 <li><a href="http://people.skolelinux.org/pere/blog/tags/lego">lego (4)</a></li>
1151
1152 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
1153
1154 <li><a href="http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
1155
1156 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
1157
1158 <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
1159
1160 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (41)</a></li>
1161
1162 <li><a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (11)</a></li>
1163
1164 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (300)</a></li>
1165
1166 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (191)</a></li>
1167
1168 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (34)</a></li>
1169
1170 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
1171
1172 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (72)</a></li>
1173
1174 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (108)</a></li>
1175
1176 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
1177
1178 <li><a href="http://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
1179
1180 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
1181
1182 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
1183
1184 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (10)</a></li>
1185
1186 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
1187
1188 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (6)</a></li>
1189
1190 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
1191
1192 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (55)</a></li>
1193
1194 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
1195
1196 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
1197
1198 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (58)</a></li>
1199
1200 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (6)</a></li>
1201
1202 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (12)</a></li>
1203
1204 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (55)</a></li>
1205
1206 <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (4)</a></li>
1207
1208 <li><a href="http://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
1209
1210 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
1211
1212 <li><a href="http://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (13)</a></li>
1213
1214 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (70)</a></li>
1215
1216 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
1217
1218 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (42)</a></li>
1219
1220 </ul>
1221
1222
1223 </div>
1224 <p style="text-align: right">
1225 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
1226 </p>
1227
1228 </body>
1229 </html>