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