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