1 <?xml version=
"1.0" encoding=
"utf-8"?>
2 <rss version='
2.0' xmlns:lj='http://www.livejournal.org/rss/lj/
1.0/' xmlns:
atom=
"http://www.w3.org/2005/Atom">
4 <title>Petter Reinholdtsen
</title>
5 <description></description>
6 <link>http://people.skolelinux.org/pere/blog/
</link>
7 <atom:link href=
"http://people.skolelinux.org/pere/blog/index.rss" rel=
"self" type=
"application/rss+xml" />
10 <title>Measuring the speaker frequency response using the AUDMES free software GUI - nice free software
</title>
11 <link>http://people.skolelinux.org/pere/blog/Measuring_the_speaker_frequency_response_using_the_AUDMES_free_software_GUI___nice_free_software.html
</link>
12 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Measuring_the_speaker_frequency_response_using_the_AUDMES_free_software_GUI___nice_free_software.html
</guid>
13 <pubDate>Mon,
22 Oct
2018 08:
40:
00 +
0200</pubDate>
14 <description><p
><img src=
"http://people.skolelinux.org/pere/blog/images/
2018-
10-
22-audmes-measure-speakers.png
" align=
"right
" width=
"40%
"/
></p
>
16 <p
>My current home stereo is a patchwork of various pieces I got on
17 flee markeds over the years. It is amazing what kind of equipment
18 show up there. I
've been wondering for a while if it was possible to
19 measure how well this equipment is working together, and decided to
20 see how far I could get using free software. After trawling the web I
21 came across an article from DIY Audio and Video on
22 <a href=
"https://www.diyaudioandvideo.com/Tutorial/SpeakerResponseTesting/
">Speaker
23 Testing and Analysis
</a
> describing how to test speakers, and it listing
24 several software options, among them
25 <a href=
"https://sourceforge.net/projects/audmes/
">AUDio MEasurement
26 System (AUDMES)
</a
>. It is the only free software system I could find
27 focusing on measuring speakers and audio frequency response. In the
28 process I also found an interesting article from NOVO on
29 <a href=
"http://novo.press/understanding-speaker-specifications-and-frequency-response/
">Understanding
30 Speaker Specifications and Frequency Response
</a
> and an article from
32 <a href=
"https://www.ecoustics.com/articles/understanding-speaker-frequency-response/
">Understanding
33 Speaker Frequency Response
</a
>, with a lot of information on what to
34 look for and how to interpret the graphs. Armed with this knowledge,
35 I set out to measure the state of my speakers.
</p
>
37 <p
>The first hurdle was that AUDMES hadn
't seen a commit for
10 years
38 and did not build with current compilers and libraries. I got in
39 touch with its author, who no longer was spending time on the program
40 but gave me write access to the subversion repository on Sourceforge.
41 The end result is that now the code build on Linux and is capable of
42 saving and loading the collected frequency response data in CSV
43 format. The application is quite nice and flexible, and I was able to
44 select the input and output audio interfaces independently. This made
45 it possible to use a USB mixer as the input source, while sending
46 output via my laptop headphone connection. I lacked the hardware and
47 cabling to figure out a different way to get independent cabling to
48 speakers and microphone.
</p
>
50 <p
>Using this setup I could see how a large range of high frequencies
51 apparently were not making it out of my speakers. The picture show
52 the frequency response measurement of one of the speakers. Note the
53 frequency lines seem to be slightly misaligned, compared to the CSV
54 output from the program. I can not hear several of these are high
55 frequencies, according to measurement from
56 <a href=
"http://freehearingtestsoftware.com
">Free Hearing Test
57 Software
</a
>, an freeware system to measure your hearing (still
58 looking for a free software alternative), so I do not know if they are
59 coming out out the speakers. I thus do not quite know how to figure
60 out if the missing frequencies is a problem with the microphone, the
61 amplifier or the speakers, but I managed to rule out the audio card in my
62 PC by measuring my Bose noise canceling headset using its own
63 microphone. This setup was able to see the high frequency tones, so
64 the problem with my stereo had to be in the amplifier or speakers.
</p
>
66 <p
>Anyway, to try to role out one factor I ended up picking up a new
67 set of speakers at a flee marked, and these work a lot better than the
68 old speakers, so I guess the microphone and amplifier is OK. If you
69 need to measure your own speakers, check out AUDMES. If more people
70 get involved, perhaps the project could become good enough to include
71 in Debian? And if you know of some other free software to measure
72 speakers and amplifier performance, please let me know. I am aware of
73 the freeware option
<a href=
"https://www.roomeqwizard.com/
">REW
</a
>,
74 but I want something that can be developed also when the vendor
75 looses interest.
</p
>
77 <p
>As usual, if you use Bitcoin and want to show your support of my
78 activities, please send Bitcoin donations to my address
79 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
84 <title>Web browser integration of VLC with Bittorrent support
</title>
85 <link>http://people.skolelinux.org/pere/blog/Web_browser_integration_of_VLC_with_Bittorrent_support.html
</link>
86 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Web_browser_integration_of_VLC_with_Bittorrent_support.html
</guid>
87 <pubDate>Sun,
21 Oct
2018 09:
50:
00 +
0200</pubDate>
88 <description><p
>Bittorrent is as far as I know, currently the most efficient way to
89 distribute content on the Internet. It is used all by all sorts of
90 content providers, from national TV stations like
91 <a href=
"https://www.nrk.no/
">NRK
</a
>, Linux distributors like
92 <a href=
"https://www.debian.org/
">Debian
</a
> and
93 <a href=
"https://www.ubuntu.com/
">Ubuntu
</a
>, and of course the
94 <a href=
"https://archive.org/
">Internet archive
</A
>.
96 <p
>Almost a month ago
97 <a href=
"https://tracker.debian.org/pkg/vlc-plugin-bittorrent
">a new
98 package adding Bittorrent support to VLC
</a
> became available in
99 Debian testing and unstable. To test it, simply install it like
103 apt install vlc-plugin-bittorrent
104 </pre
></p
>
106 <p
>Since the plugin was made available for the first time in Debian,
107 several improvements have been made to it. In version
2.2-
4, now
108 available in both testing and unstable, a desktop file is provided to
109 teach browsers to start VLC when the user click on torrent files or
110 magnet links. The last part is thanks to me finally understanding
111 what the strange x-scheme-handler style MIME types in desktop files
112 are used for. By adding x-scheme-handler/magnet to the MimeType entry
113 in the desktop file, at least the browsers Firefox and Chromium will
114 suggest to start VLC when selecting a magnet URI on a web page. The
115 end result is that now, with the plugin installed in Buster and Sid,
117 <a href=
"https://archive.org/details/CopyingIsNotTheft1080p
">Internet
118 Archive page with movies
</a
> using a web browser and click on the
119 torrent link to start streaming the movie.
</p
>
121 <p
>Note, there is still some misfeatures in the plugin. One is the
122 fact that it will hang and
123 <a href=
"https://github.com/johang/vlc-bittorrent/issues/
13">block VLC
124 from exiting until the torrent streaming starts
</a
>. Another is the
126 <a href=
"https://github.com/johang/vlc-bittorrent/issues/
9">will pick
127 and play a random file in a multi file torrent
</a
>. This is not
128 always the video file you want. Combined with the first it can be a
129 bit hard to get the video streaming going. But when it work, it seem
130 to do a good job.
</p
>
132 <p
>For the Debian packaging, I would love to find a good way to test
133 if the plugin work with VLC using autopkgtest. I tried, but do not
134 know enough of the inner workings of VLC to get it working. For now
135 the autopkgtest script is only checking if the .so file was
136 successfully loaded by VLC. If you have any suggestions, please
137 submit a patch to the Debian bug tracking system.
</p
>
139 <p
>As usual, if you use Bitcoin and want to show your support of my
140 activities, please send Bitcoin donations to my address
141 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
146 <title>Release
0.2 of free software archive system Nikita announced
</title>
147 <link>http://people.skolelinux.org/pere/blog/Release_0_2_of_free_software_archive_system_Nikita_announced.html
</link>
148 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Release_0_2_of_free_software_archive_system_Nikita_announced.html
</guid>
149 <pubDate>Thu,
18 Oct
2018 14:
40:
00 +
0200</pubDate>
150 <description><p
>This morning, the new release of the
151 <a href=
"https://gitlab.com/OsloMet-ABI/nikita-noark5-core/
">Nikita
152 Noark
5 core project
</a
> was
153 <a href=
"https://lists.nuug.no/pipermail/nikita-noark/
2018-October/
000406.html
">announced
154 on the project mailing list
</a
>. The free software solution is an
155 implementation of the Norwegian archive standard Noark
5 used by
156 government offices in Norway. These were the changes in version
0.2
157 since version
0.1.1 (from NEWS.md):
160 <li
>Fix typos in REL names
</li
>
161 <li
>Tidy up error message reporting
</li
>
162 <li
>Fix issue where we used Integer.valueOf(), not Integer.getInteger()
</li
>
163 <li
>Change some String handling to StringBuffer
</li
>
164 <li
>Fix error reporting
</li
>
165 <li
>Code tidy-up
</li
>
166 <li
>Fix issue using static non-synchronized SimpleDateFormat to avoid
167 race conditions
</li
>
168 <li
>Fix problem where deserialisers were treating integers as strings
</li
>
169 <li
>Update methods to make them null-safe
</li
>
170 <li
>Fix many issues reported by coverity
</li
>
171 <li
>Improve equals(), compareTo() and hash() in domain model
</li
>
172 <li
>Improvements to the domain model for metadata classes
</li
>
173 <li
>Fix CORS issues when downloading document
</li
>
174 <li
>Implementation of case-handling with registryEntry and document upload
</li
>
175 <li
>Better support in Javascript for OPTIONS
</li
>
176 <li
>Adding concept description of mail integration
</li
>
177 <li
>Improve setting of default values for GET on ny-journalpost
</li
>
178 <li
>Better handling of required values during deserialisation
</li
>
179 <li
>Changed tilknyttetDato (M620) from date to dateTime
</li
>
180 <li
>Corrected some opprettetDato (M600) (de)serialisation errors.
</li
>
181 <li
>Improve parse error reporting.
</li
>
182 <li
>Started on OData search and filtering.
</li
>
183 <li
>Added Contributor Covenant Code of Conduct to project.
</li
>
184 <li
>Moved repository and project from Github to Gitlab.
</li
>
185 <li
>Restructured repository, moved code into src/ and web/.
</li
>
186 <li
>Updated code to use Spring Boot version
2.
</li
>
187 <li
>Added support for OAuth2 authentication.
</li
>
188 <li
>Fixed several bugs discovered by Coverity.
</li
>
189 <li
>Corrected handling of date/datetime fields.
</li
>
190 <li
>Improved error reporting when rejecting during deserializatoin.
</li
>
191 <li
>Adjusted default values provided for ny-arkivdel, ny-mappe,
192 ny-saksmappe, ny-journalpost and ny-dokumentbeskrivelse.
</li
>
193 <li
>Several fixes for korrespondansepart*.
</li
>
194 <li
>Updated web GUI:
196 <li
>Now handle both file upload and download.
</li
>
197 <li
>Uses new OAuth2 authentication for login.
</li
>
198 <li
>Forms now fetches default values from API using GET.
</li
>
199 <li
>Added RFC
822 (email), TIFF and JPEG to list of possible file formats.
</li
>
200 </ul
></li
>
203 <p
>The changes and improvements are extensive. Running diffstat on
204 the changes between git tab
0.1.1 and
0.2 show
1098 files changed,
205 108666 insertions(+),
54066 deletions(-).
</p
>
207 <p
>If free and open standardized archiving API sound interesting to
208 you, please contact us on IRC
209 (
<a href=
"irc://irc.freenode.net/%
23nikita
">#nikita on
210 irc.freenode.net
</a
>) or email
211 (
<a href=
"https://lists.nuug.no/mailman/listinfo/nikita-noark
">nikita-noark
212 mailing list
</a
>).
</p
>
214 <p
>As usual, if you use Bitcoin and want to show your support of my
215 activities, please send Bitcoin donations to my address
216 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
221 <title>Fetching trusted timestamps using the rfc3161ng python module
</title>
222 <link>http://people.skolelinux.org/pere/blog/Fetching_trusted_timestamps_using_the_rfc3161ng_python_module.html
</link>
223 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Fetching_trusted_timestamps_using_the_rfc3161ng_python_module.html
</guid>
224 <pubDate>Mon,
8 Oct
2018 12:
30:
00 +
0200</pubDate>
225 <description><p
>I have earlier covered the basics of trusted timestamping using the
226 'openssl ts
' client. See blog post for
227 <a href=
"http://people.skolelinux.org/pere/blog/Public_Trusted_Timestamping_services_for_everyone.html
">2014</a
>,
228 <a href=
"http://people.skolelinux.org/pere/blog/syslog_trusted_timestamp___chain_of_trusted_timestamps_for_your_syslog.html
">2016</a
>
230 <a href=
"http://people.skolelinux.org/pere/blog/Idea_for_storing_trusted_timestamps_in_a_Noark_5_archive.html
">2017</a
>
231 for those stories. But some times I want to integrate the timestamping
232 in other code, and recently I needed to integrate it into Python.
233 After searching a bit, I found
234 <a href=
"https://dev.entrouvert.org/projects/python-rfc3161
">the
235 rfc3161 library
</a
> which seemed like a good fit, but I soon
236 discovered it only worked for python version
2, and I needed something
237 that work with python version
3. Luckily I next came across
238 <a href=
"https://github.com/trbs/rfc3161ng/
">the rfc3161ng library
</a
>,
239 a fork of the original rfc3161 library. Not only is it working with
240 python
3, it have fixed a few of the bugs in the original library, and
241 it has an active maintainer. I decided to wrap it up and make it
242 <a href=
"https://tracker.debian.org/pkg/python-rfc3161ng
">available in
243 Debian
</a
>, and a few days ago it entered Debian unstable and testing.
</p
>
245 <p
>Using the library is fairly straight forward. The only slightly
246 problematic step is to fetch the required certificates to verify the
247 timestamp. For some services it is straight forward, while for others
248 I have not yet figured out how to do it. Here is a small standalone
249 code example based on of the integration tests in the library code:
</p
>
256 Python
3 script demonstrating how to use the rfc3161ng module to
257 get trusted timestamps.
259 The license of this code is the same as the license of the rfc3161ng
265 import pyasn1.codec.der
269 import urllib.request
276 def fetch(url, f=None):
277 response = urllib.request.urlopen(url)
278 data = response.read()
284 with tempfile.NamedTemporaryFile() as cert_f,\
285 tempfile.NamedTemporaryFile() as ca_f,\
286 tempfile.NamedTemporaryFile() as msg_f,\
287 tempfile.NamedTemporaryFile() as tsr_f:
289 # First fetch certificates used by service
290 certificate_data = fetch(
'https://freetsa.org/files/tsa.crt
', cert_f)
291 ca_data_data = fetch(
'https://freetsa.org/files/cacert.pem
', ca_f)
293 # Then timestamp the message
295 rfc3161ng.RemoteTimestamper(
'http://freetsa.org/tsr
',
296 certificate=certificate_data)
297 data = b
"Python forever!\n
"
298 tsr = timestamper(data=data, return_tsr=True)
300 # Finally, convert message and response to something
'openssl ts
' can verify
302 store(tsr_f, pyasn1.codec.der.encoder.encode(tsr))
303 args = [
"openssl
",
"ts
",
"-verify
",
304 "-data
", msg_f.name,
305 "-in
", tsr_f.name,
306 "-CAfile
", ca_f.name,
307 "-untrusted
", cert_f.name]
308 subprocess.check_call(args)
310 if
'__main__
' == __name__:
314 <p
>The code fetches the required certificates, store them as temporary
315 files, timestamp a simple message, store the message and timestamp to
316 disk and ask
'openssl ts
' to verify the timestamp. A timestamp is
317 around
1.5 kiB in size, and should be fairly easy to store for future
320 <p
>As usual, if you use Bitcoin and want to show your support of my
321 activities, please send Bitcoin donations to my address
322 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
327 <title>Automatic Google Drive sync using grive in Debian
</title>
328 <link>http://people.skolelinux.org/pere/blog/Automatic_Google_Drive_sync_using_grive_in_Debian.html
</link>
329 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Automatic_Google_Drive_sync_using_grive_in_Debian.html
</guid>
330 <pubDate>Thu,
4 Oct
2018 15:
20:
00 +
0200</pubDate>
331 <description><p
>A few days, I rescued a Windows victim over to Debian. To try to
332 rescue the remains, I helped set up automatic sync with Google Drive.
333 I did not find any sensible Debian package handling this
334 automatically, so I rebuild the grive2 source from
335 <a href=
"http://www.webupd8.org/
">the Ubuntu UPD8 PPA
</a
> to do the
336 task and added a autostart desktop entry and a small shell script to
337 run in the background while the user is logged in to do the sync.
338 Here is a sketch of the setup for future reference.
</p
>
340 <p
>I first created
<tt
>~/googledrive
</tt
>, entered the directory and
341 ran
'<tt
>grive -a
</tt
>' to authenticate the machine/user. Next, I
342 created a autostart hook in
<tt
>~/.config/autostart/grive.desktop
</tt
>
343 to start the sync when the user log in:
</p
>
345 <p
><blockquote
><pre
>
347 Name=Google drive autosync
349 Exec=/home/user/bin/grive-sync
350 </pre
></blockquote
></p
>
352 <p
>Finally, I wrote the
<tt
>~/bin/grive-sync
</tt
> script to sync
353 ~/googledrive/ with the files in Google Drive.
</p
>
355 <p
><blockquote
><pre
>
360 if [
"$syncpid
" ] ; then
364 trap cleanup EXIT INT QUIT
365 /usr/lib/grive/grive-sync.sh listen googledrive
2>&1 | sed
"s%^%$
0:%
" &
368 if ! xhost
>/dev/null
2>&1 ; then
369 echo
"no DISPLAY, exiting as the user probably logged out
"
372 if [ ! -e /run/user/
1000/grive-sync.sh_googledrive ] ; then
373 /usr/lib/grive/grive-sync.sh sync googledrive
376 done
2>&1 | sed
"s%^%$
0:%
"
377 </pre
></blockquote
></p
>
379 <p
>Feel free to use the setup if you want. It can be assumed to be
380 GNU GPL v2 licensed (or any later version, at your leisure), but I
381 doubt this code is possible to claim copyright on.
</p
>
383 <p
>As usual, if you use Bitcoin and want to show your support of my
384 activities, please send Bitcoin donations to my address
385 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
390 <title>Valutakrambod - A python and bitcoin love story
</title>
391 <link>http://people.skolelinux.org/pere/blog/Valutakrambod___A_python_and_bitcoin_love_story.html
</link>
392 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Valutakrambod___A_python_and_bitcoin_love_story.html
</guid>
393 <pubDate>Sat,
29 Sep
2018 22:
20:
00 +
0200</pubDate>
394 <description><p
>It would come as no surprise to anyone that I am interested in
395 bitcoins and virtual currencies. I
've been keeping an eye on virtual
396 currencies for many years, and it is part of the reason a few months
397 ago, I started writing a python library for collecting currency
398 exchange rates and trade on virtual currency exchanges. I decided to
399 name the end result valutakrambod, which perhaps can be translated to
400 small currency shop.
</p
>
402 <p
>The library uses the tornado python library to handle HTTP and
403 websocket connections, and provide a asynchronous system for
404 connecting to and tracking several services. The code is available
406 <a href=
"http://github.com/petterreinholdtsen/valutakrambod
">github
</a
>.
</p
>
408 </p
>There are two example clients of the library. One is very simple and
409 list every updated buy/sell price received from the various services.
410 This code is started by running bin/btc-rates and call the client code
411 in valutakrambod/client.py. The simple client look like this:
</p
>
413 <p
><blockquote
><pre
>
415 import tornado.ioloop
417 class SimpleClient(object):
422 def newdata(self, service, pair, changed):
423 print(
"%-
15s %s-%s: %
8.3f %
8.3f
" % (
424 service.servicename(),
427 service.rates[pair][
'ask
'],
428 service.rates[pair][
'bid
'])
430 async def refresh(self, service):
431 await service.fetchRates(service.wantedpairs)
433 self.ioloop = tornado.ioloop.IOLoop.current()
434 self.services = valutakrambod.service.knownServices()
435 for e in self.services:
437 service.subscribe(self.newdata)
438 stream = service.websocket()
440 self.streams.append(stream)
442 # Fetch information from non-streaming services immediately
443 self.ioloop.call_later(len(self.services),
444 functools.partial(self.refresh, service))
445 # as well as regularly
446 service.periodicUpdate(
60)
447 for stream in self.streams:
451 except KeyboardInterrupt:
452 print(
"Interrupted by keyboard, closing all connections.
")
454 for stream in self.streams:
456 </pre
></blockquote
></p
>
458 <p
>The library client loops over all known
"public
" services,
459 initialises it, subscribes to any updates from the service, checks and
460 activates websocket streaming if the service provide it, and if no
461 streaming is supported, fetches information from the service and sets
462 up a periodic update every
60 seconds. The output from this client
463 can look like this:
</p
>
465 <p
><blockquote
><pre
>
466 Bl3p BTC-EUR:
5687.110 5653.690
467 Bl3p BTC-EUR:
5687.110 5653.690
468 Bl3p BTC-EUR:
5687.110 5653.690
469 Hitbtc BTC-USD:
6594.560 6593.690
470 Hitbtc BTC-USD:
6594.560 6593.690
471 Bl3p BTC-EUR:
5687.110 5653.690
472 Hitbtc BTC-USD:
6594.570 6593.690
473 Bitstamp EUR-USD:
1.159 1.154
474 Hitbtc BTC-USD:
6594.570 6593.690
475 Hitbtc BTC-USD:
6594.580 6593.690
476 Hitbtc BTC-USD:
6594.580 6593.690
477 Hitbtc BTC-USD:
6594.580 6593.690
478 Bl3p BTC-EUR:
5687.110 5653.690
479 Paymium BTC-EUR:
5680.000 5620.240
480 </pre
></blockquote
></p
>
482 <p
>The exchange order book is tracked in addition to the best buy/sell
483 price, for those that need to know the details.
</p
>
485 <p
>The other example client is focusing on providing a curses view
486 with updated buy/sell prices as soon as they are received from the
487 services. This code is located in bin/btc-rates-curses and activated
488 by using the
'-c
' argument. Without the argument the
"curses
" output
489 is printed without using curses, which is useful for debugging. The
490 curses view look like this:
</p
>
492 <p
><blockquote
><pre
>
493 Name Pair Bid Ask Spr Ftcd Age
494 BitcoinsNorway BTCEUR
5591.8400 5711.0800 2.1%
16 nan
60
495 Bitfinex BTCEUR
5671.0000 5671.2000 0.0%
16 22 59
496 Bitmynt BTCEUR
5580.8000 5807.5200 3.9%
16 41 60
497 Bitpay BTCEUR
5663.2700 nan nan%
15 nan
60
498 Bitstamp BTCEUR
5664.8400 5676.5300 0.2%
0 1 1
499 Bl3p BTCEUR
5653.6900 5684.9400 0.5%
0 nan
19
500 Coinbase BTCEUR
5600.8200 5714.9000 2.0%
15 nan nan
501 Kraken BTCEUR
5670.1000 5670.2000 0.0%
14 17 60
502 Paymium BTCEUR
5620.0600 5680.0000 1.1%
1 7515 nan
503 BitcoinsNorway BTCNOK
52898.9700 54034.6100 2.1%
16 nan
60
504 Bitmynt BTCNOK
52960.3200 54031.1900 2.0%
16 41 60
505 Bitpay BTCNOK
53477.7833 nan nan%
16 nan
60
506 Coinbase BTCNOK
52990.3500 54063.0600 2.0%
15 nan nan
507 MiraiEx BTCNOK
52856.5300 54100.6000 2.3%
16 nan nan
508 BitcoinsNorway BTCUSD
6495.5300 6631.5400 2.1%
16 nan
60
509 Bitfinex BTCUSD
6590.6000 6590.7000 0.0%
16 23 57
510 Bitpay BTCUSD
6564.1300 nan nan%
15 nan
60
511 Bitstamp BTCUSD
6561.1400 6565.6200 0.1%
0 2 1
512 Coinbase BTCUSD
6504.0600 6635.9700 2.0%
14 nan
117
513 Gemini BTCUSD
6567.1300 6573.0700 0.1%
16 89 nan
514 Hitbtc+BTCUSD
6592.6200 6594.2100 0.0%
0 0 0
515 Kraken BTCUSD
6565.2000 6570.9000 0.1%
15 17 58
516 Exchangerates EURNOK
9.4665 9.4665 0.0%
16 107789 nan
517 Norgesbank EURNOK
9.4665 9.4665 0.0%
16 107789 nan
518 Bitstamp EURUSD
1.1537 1.1593 0.5%
4 5 1
519 Exchangerates EURUSD
1.1576 1.1576 0.0%
16 107789 nan
520 BitcoinsNorway LTCEUR
1.0000 49.0000 98.0%
16 nan nan
521 BitcoinsNorway LTCNOK
492.4800 503.7500 2.2%
16 nan
60
522 BitcoinsNorway LTCUSD
1.0221 49.0000 97.9%
15 nan nan
523 Norgesbank USDNOK
8.1777 8.1777 0.0%
16 107789 nan
524 </pre
></blockquote
></p
>
526 <p
>The code for this client is too complex for a simple blog post, so
527 you will have to check out the git repository to figure out how it
528 work. What I can tell is how the three last numbers on each line
529 should be interpreted. The first is how many seconds ago information
530 was received from the service. The second is how long ago, according
531 to the service, the provided information was updated. The last is an
532 estimate on how often the buy/sell values change.
</p
>
534 <p
>If you find this library useful, or would like to improve it, I
535 would love to hear from you. Note that for some of the services I
've
536 implemented a trading API. It might be the topic of a future blog
539 <p
>As usual, if you use Bitcoin and want to show your support of my
540 activities, please send Bitcoin donations to my address
541 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
546 <title>VLC in Debian now can do bittorrent streaming
</title>
547 <link>http://people.skolelinux.org/pere/blog/VLC_in_Debian_now_can_do_bittorrent_streaming.html
</link>
548 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/VLC_in_Debian_now_can_do_bittorrent_streaming.html
</guid>
549 <pubDate>Mon,
24 Sep
2018 21:
20:
00 +
0200</pubDate>
550 <description><p
>Back in February, I got curious to see
551 <a href=
"http://people.skolelinux.org/pere/blog/Using_VLC_to_stream_bittorrent_sources.html
">if
552 VLC now supported Bittorrent streaming
</a
>. It did not, despite the
553 fact that the idea and code to handle such streaming had been floating
554 around for years. I did however find
555 <a href=
"https://github.com/johang/vlc-bittorrent
">a standalone plugin
556 for VLC
</a
> to do it, and half a year later I decided to wrap up the
557 plugin and get it into Debian. I uploaded it to NEW a few days ago,
558 and am very happy to report that it
559 <a href=
"https://tracker.debian.org/pkg/vlc-plugin-bittorrent
">entered
560 Debian
</a
> a few hours ago, and should be available in Debian/Unstable
561 tomorrow, and Debian/Testing in a few days.
</p
>
563 <p
>With the vlc-plugin-bittorrent package installed you should be able
564 to stream videos using a simple call to
</p
>
566 <p
><blockquote
><pre
>
567 vlc https://archive.org/download/TheGoat/TheGoat_archive.torrent
568 </pre
></blockquote
></p
>
570 </p
>It can handle magnet links too. Now if only native vlc had
571 bittorrent support. Then a lot more would be helping each other to
572 share public domain and creative commons movies. The plugin need some
573 stability work with seeking and picking the right file in a torrent
574 with many files, but is already usable. Please note that the plugin
575 is not removing downloaded files when vlc is stopped, so it can fill
576 up your disk if you are not careful. Have fun. :)
</p
>
578 <p
>I would love to get help maintaining this package. Get in touch if
579 you are interested.
</p
>
581 <p
>As usual, if you use Bitcoin and want to show your support of my
582 activities, please send Bitcoin donations to my address
583 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
588 <title>Using the Kodi API to play Youtube videos
</title>
589 <link>http://people.skolelinux.org/pere/blog/Using_the_Kodi_API_to_play_Youtube_videos.html
</link>
590 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Using_the_Kodi_API_to_play_Youtube_videos.html
</guid>
591 <pubDate>Sun,
2 Sep
2018 23:
40:
00 +
0200</pubDate>
592 <description><p
>I continue to explore my Kodi installation, and today I wanted to
593 tell it to play a youtube URL I received in a chat, without having to
594 insert search terms using the on-screen keyboard. After searching the
595 web for API access to the Youtube plugin and testing a bit, I managed
596 to find a recipe that worked. If you got a kodi instance with its API
597 available from http://kodihost/jsonrpc, you can try the following to
598 have check out a nice cover band.
</p
>
600 <p
><blockquote
><pre
>curl --silent --header
'Content-Type: application/json
' \
601 --data-binary
'{
"id
":
1,
"jsonrpc
":
"2.0",
"method
":
"Player.Open
",
602 "params
": {
"item
": {
"file
":
603 "plugin://plugin.video.youtube/play/?video_id=LuRGVM9O0qg
" } } }
' \
604 http://projector.local/jsonrpc
</pre
></blockquote
></p
>
606 <p
>I
've extended kodi-stream program to take a video source as its
607 first argument. It can now handle direct video links, youtube links
608 and
'desktop
' to stream my desktop to Kodi. It is almost like a
609 Chromecast. :)
</p
>
611 <p
>As usual, if you use Bitcoin and want to show your support of my
612 activities, please send Bitcoin donations to my address
613 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>
618 <title>Software created using taxpayers’ money should be Free Software
</title>
619 <link>http://people.skolelinux.org/pere/blog/Software_created_using_taxpayers__money_should_be_Free_Software.html
</link>
620 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/Software_created_using_taxpayers__money_should_be_Free_Software.html
</guid>
621 <pubDate>Thu,
30 Aug
2018 13:
50:
00 +
0200</pubDate>
622 <description><p
>It might seem obvious that software created using tax money should
623 be available for everyone to use and improve. Free Software
624 Foundation Europe recentlystarted a campaign to help get more people
625 to understand this, and I just signed the petition on
626 <a href=
"https://publiccode.eu/
">Public Money, Public Code
</a
> to help
627 them. I hope you too will do the same.
</p
>
632 <title>A bit more on privacy respecting health monitor / fitness tracker
</title>
633 <link>http://people.skolelinux.org/pere/blog/A_bit_more_on_privacy_respecting_health_monitor___fitness_tracker.html
</link>
634 <guid isPermaLink=
"true">http://people.skolelinux.org/pere/blog/A_bit_more_on_privacy_respecting_health_monitor___fitness_tracker.html
</guid>
635 <pubDate>Mon,
13 Aug
2018 09:
00:
00 +
0200</pubDate>
636 <description><p
>A few days ago, I wondered if there are any privacy respecting
637 health monitors and/or fitness trackers available for sale these days.
638 I would like to buy one, but do not want to share my personal data
639 with strangers, nor be forced to have a mobile phone to get data out
640 of the unit. I
've received some ideas, and would like to share them
643 One interesting data point was a pointer to a Free Software app for
645 <a href=
"https://github.com/Freeyourgadget/Gadgetbridge/
">Gadgetbridge
</a
>.
646 It provide cloudless collection and storing of data from a variety of
648 <a href=
"https://github.com/Freeyourgadget/Gadgetbridge/#supported-devices
">list
649 of supported devices
</a
> is a good indicator for units where the
650 protocol is fairly open, as it is obviously being handled by Free
651 Software. Other units are reportedly encrypting the collected
652 information with their own public key, making sure only the vendor
653 cloud service is able to extract data from the unit. The people
654 contacting me about Gadgetbirde said they were using
655 <a href=
"https://us.amazfit.com/shop/bip?variant=
336750">Amazfit
657 <a href=
"http://www.xiaomimi6phone.com/xiaomi-mi-band-
3-features-release-date-rumors/
">Xiaomi
658 Band
3</a
>.
</p
>
660 <p
>I also got a suggestion to look at some of the units from Garmin.
661 I was told their GPS watches can be connected via USB and show up as a
662 USB storage device with
663 <a href=
"https://www.gpsbabel.org/htmldoc-development/fmt_garmin_fit.html
">Garmin
664 FIT files
</a
> containing the collected measurements. While
665 proprietary, FIT files apparently can be read at least by
666 <a href=
"https://www.gpsbabel.org
">GPSBabel
</a
> and the
667 <a href=
"https://apps.nextcloud.com/apps/gpxpod
">GpxPod
</a
> Nextcloud
668 app. It is unclear to me if they can read step count and heart rate
669 data. The person I talked to was using a
670 <a href=
"https://buy.garmin.com/en-US/US/p/
564291">Garmin Forerunner
671 935</a
>, which is a fairly expensive unit. I doubt it is worth it for
672 a unit where the vendor clearly is trying its best to move from open
673 to closed systems. I still remember when Garmin dropped NMEA support
674 in its GPSes.
</p
>
676 <p
>A final idea was to build ones own unit, perhaps by basing it on a
677 wearable hardware platforms like
678 <a href=
"https://learn.adafruit.com/flora-geo-watch
">the Flora Geo
679 Watch
</a
>. Sound like fun, but I had more money than time to spend on
680 the topic, so I suspect it will have to wait for another time.
</p
>
682 <p
>While I was working on tracking down links, I came across an
683 inspiring TED talk by Dave Debronkart about
684 <a href=
"https://archive.org/details/DavedeBronkart_2010X
">being a
685 e-patient
</a
>, and discovered the web site
686 <a href=
"https://participatorymedicine.org/epatients/
">Participatory
687 Medicine
</a
>. If you too want to track your own health and fitness
688 without having information about your private life floating around on
689 computers owned by others, I recommend checking it out.
</p
>
691 <p
>As usual, if you use Bitcoin and want to show your support of my
692 activities, please send Bitcoin donations to my address
693 <b
><a href=
"bitcoin:
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b
</a
></b
>.
</p
>