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