]> pere.pagekite.me Git - homepage.git/blobdiff - blog/index.html
New post.
[homepage.git] / blog / index.html
index 4a1c377120d4a07f5fb6c460973e79aa7dfe3d40..6b3194e75e3d0396e1e424cef827436ad62c7b46 100644 (file)
 
 
     
+    <div class="entry">
+      <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>
+      <div class="date"> 4th October 2018</div>
+      <div class="body"><p>A few days, I rescued a Windows victim over to Debian.  To try to
+rescue the remains, I helped set up automatic sync with Google Drive.
+I did not find any sensible Debian package handling this
+automatically, so I rebuild the grive2 source from
+<a href="http://www.webupd8.org/">the Ubuntu UPD8 PPA</a> to do the
+task and added a autostart desktop entry and a small shell script to
+run in the background while the user is logged in to do the sync.
+Here is a sketch of the setup for future reference.</p>
+
+<p>I first created <tt>~/googledrive</tt>, entered the directory and
+ran '<tt>grive -a</tt>' to authenticate the machine/user.  Next, I
+created a autostart hook in <tt>~/.config/autostart/grive.desktop</tt>
+to start the sync when the user log in:</p>
+
+<p><blockquote><pre>
+[Desktop Entry]
+Name=Google drive autosync
+Type=Application
+Exec=/home/user/bin/grive-sync
+</pre></blockquote></p>
+
+<p>Finally, I wrote the <tt>~/bin/grive-sync</tt> script to sync
+~/googledrive/ with the files in Google Drive.</p>
+
+<p><blockquote><pre>
+#!/bin/sh
+set -e
+cd ~/
+cleanup() {
+    if [ "$syncpid" ] ; then
+        kill $syncpid
+    fi
+}
+trap cleanup EXIT INT QUIT
+/usr/lib/grive/grive-sync.sh listen googledrive 2>&1 | sed "s%^%$0:%" &
+syncpdi=$!
+while true; do
+    if ! xhost >/dev/null 2>&1 ; then
+        echo "no DISPLAY, exiting as the user probably logged out"
+        exit 1
+    fi
+    if [ ! -e /run/user/1000/grive-sync.sh_googledrive ] ; then
+        /usr/lib/grive/grive-sync.sh sync googledrive
+    fi
+    sleep 300
+done 2>&1 | sed "s%^%$0:%"
+</pre></blockquote></p>
+
+<p>Feel free to use the setup if you want.  It can be assumed to be
+GNU GPL v2 licensed (or any later version, at your leisure), but I
+doubt this code is possible to claim copyright on.</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+</div>
+      <div class="tags">
+        
+        
+        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>. 
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <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>
+      <div class="date">29th September 2018</div>
+      <div class="body"><p>It would come as no surprise to anyone that I am interested in
+bitcoins and virtual currencies.  I've been keeping an eye on virtual
+currencies for many years, and it is part of the reason a few months
+ago, I started writing a python library for collecting currency
+exchange rates and trade on virtual currency exchanges.  I decided to
+name the end result valutakrambod, which perhaps can be translated to
+small currency shop.</p>
+
+<p>The library uses the tornado python library to handle HTTP and
+websocket connections, and provide a asynchronous system for
+connecting to and tracking several services.  The code is available
+from
+<a href="http://github.com/petterreinholdtsen/valutakrambod">github</a>.</p>
+
+</p>There are two example clients of the library.  One is very simple and
+list every updated buy/sell price received from the various services.
+This code is started by running bin/btc-rates and call the client code
+in valutakrambod/client.py.  The simple client look like this:</p>
+
+<p><blockquote><pre>
+import functools
+import tornado.ioloop
+import valutakrambod
+class SimpleClient(object):
+    def __init__(self):
+        self.services = []
+        self.streams = []
+        pass
+    def newdata(self, service, pair, changed):
+        print("%-15s %s-%s: %8.3f %8.3f" % (
+            service.servicename(),
+            pair[0],
+            pair[1],
+            service.rates[pair]['ask'],
+            service.rates[pair]['bid'])
+        )
+    async def refresh(self, service):
+        await service.fetchRates(service.wantedpairs)
+    def run(self):
+        self.ioloop = tornado.ioloop.IOLoop.current()
+        self.services = valutakrambod.service.knownServices()
+        for e in self.services:
+            service = e()
+            service.subscribe(self.newdata)
+            stream = service.websocket()
+            if stream:
+                self.streams.append(stream)
+            else:
+                # Fetch information from non-streaming services immediately
+                self.ioloop.call_later(len(self.services),
+                                       functools.partial(self.refresh, service))
+                # as well as regularly
+                service.periodicUpdate(60)
+        for stream in self.streams:
+            stream.connect()
+        try:
+            self.ioloop.start()
+        except KeyboardInterrupt:
+            print("Interrupted by keyboard, closing all connections.")
+            pass
+        for stream in self.streams:
+            stream.close()
+</pre></blockquote></p>
+
+<p>The library client loops over all known "public" services,
+initialises it, subscribes to any updates from the service, checks and
+activates websocket streaming if the service provide it, and if no
+streaming is supported, fetches information from the service and sets
+up a periodic update every 60 seconds.  The output from this client
+can look like this:</p>
+
+<p><blockquote><pre>
+Bl3p            BTC-EUR: 5687.110 5653.690
+Bl3p            BTC-EUR: 5687.110 5653.690
+Bl3p            BTC-EUR: 5687.110 5653.690
+Hitbtc          BTC-USD: 6594.560 6593.690
+Hitbtc          BTC-USD: 6594.560 6593.690
+Bl3p            BTC-EUR: 5687.110 5653.690
+Hitbtc          BTC-USD: 6594.570 6593.690
+Bitstamp        EUR-USD:    1.159    1.154
+Hitbtc          BTC-USD: 6594.570 6593.690
+Hitbtc          BTC-USD: 6594.580 6593.690
+Hitbtc          BTC-USD: 6594.580 6593.690
+Hitbtc          BTC-USD: 6594.580 6593.690
+Bl3p            BTC-EUR: 5687.110 5653.690
+Paymium         BTC-EUR: 5680.000 5620.240
+</pre></blockquote></p>
+
+<p>The exchange order book is tracked in addition to the best buy/sell
+price, for those that need to know the details.</p>
+
+<p>The other example client is focusing on providing a curses view
+with updated buy/sell prices as soon as they are received from the
+services.  This code is located in bin/btc-rates-curses and activated
+by using the '-c' argument.  Without the argument the "curses" output
+is printed without using curses, which is useful for debugging.  The
+curses view look like this:</p>
+
+<p><blockquote><pre>
+           Name Pair   Bid         Ask         Spr    Ftcd    Age
+ BitcoinsNorway BTCEUR   5591.8400   5711.0800   2.1%   16    nan     60
+       Bitfinex BTCEUR   5671.0000   5671.2000   0.0%   16     22     59
+        Bitmynt BTCEUR   5580.8000   5807.5200   3.9%   16     41     60
+         Bitpay BTCEUR   5663.2700         nan   nan%   15    nan     60
+       Bitstamp BTCEUR   5664.8400   5676.5300   0.2%    0      1      1
+           Bl3p BTCEUR   5653.6900   5684.9400   0.5%    0    nan     19
+       Coinbase BTCEUR   5600.8200   5714.9000   2.0%   15    nan    nan
+         Kraken BTCEUR   5670.1000   5670.2000   0.0%   14     17     60
+        Paymium BTCEUR   5620.0600   5680.0000   1.1%    1   7515    nan
+ BitcoinsNorway BTCNOK  52898.9700  54034.6100   2.1%   16    nan     60
+        Bitmynt BTCNOK  52960.3200  54031.1900   2.0%   16     41     60
+         Bitpay BTCNOK  53477.7833         nan   nan%   16    nan     60
+       Coinbase BTCNOK  52990.3500  54063.0600   2.0%   15    nan    nan
+        MiraiEx BTCNOK  52856.5300  54100.6000   2.3%   16    nan    nan
+ BitcoinsNorway BTCUSD   6495.5300   6631.5400   2.1%   16    nan     60
+       Bitfinex BTCUSD   6590.6000   6590.7000   0.0%   16     23     57
+         Bitpay BTCUSD   6564.1300         nan   nan%   15    nan     60
+       Bitstamp BTCUSD   6561.1400   6565.6200   0.1%    0      2      1
+       Coinbase BTCUSD   6504.0600   6635.9700   2.0%   14    nan    117
+         Gemini BTCUSD   6567.1300   6573.0700   0.1%   16     89    nan
+         Hitbtc+BTCUSD   6592.6200   6594.2100   0.0%    0      0      0
+         Kraken BTCUSD   6565.2000   6570.9000   0.1%   15     17     58
+  Exchangerates EURNOK      9.4665      9.4665   0.0%   16 107789    nan
+     Norgesbank EURNOK      9.4665      9.4665   0.0%   16 107789    nan
+       Bitstamp EURUSD      1.1537      1.1593   0.5%    4      5      1
+  Exchangerates EURUSD      1.1576      1.1576   0.0%   16 107789    nan
+ BitcoinsNorway LTCEUR      1.0000     49.0000  98.0%   16    nan    nan
+ BitcoinsNorway LTCNOK    492.4800    503.7500   2.2%   16    nan     60
+ BitcoinsNorway LTCUSD      1.0221     49.0000  97.9%   15    nan    nan
+     Norgesbank USDNOK      8.1777      8.1777   0.0%   16 107789    nan
+</pre></blockquote></p>
+
+<p>The code for this client is too complex for a simple blog post, so
+you will have to check out the git repository to figure out how it
+work.  What I can tell is how the three last numbers on each line
+should be interpreted.  The first is how many seconds ago information
+was received from the service.  The second is how long ago, according
+to the service, the provided information was updated.  The last is an
+estimate on how often the buy/sell values change.</p>
+
+<p>If you find this library useful, or would like to improve it, I
+would love to hear from you.  Note that for some of the services I've
+implemented a trading API.  It might be the topic of a future blog
+post.</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+</div>
+      <div class="tags">
+        
+        
+        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>. 
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <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>
+      <div class="date">24th September 2018</div>
+      <div class="body"><p>Back in February, I got curious to see
+<a href="http://people.skolelinux.org/pere/blog/Using_VLC_to_stream_bittorrent_sources.html">if
+VLC now supported Bittorrent streaming</a>.  It did not, despite the
+fact that the idea and code to handle such streaming had been floating
+around for years.  I did however find
+<a href="https://github.com/johang/vlc-bittorrent">a standalone plugin
+for VLC</a> to do it, and half a year later I decided to wrap up the
+plugin and get it into Debian.  I uploaded it to NEW a few days ago,
+and am very happy to report that it
+<a href="https://tracker.debian.org/pkg/vlc-plugin-bittorrent">entered
+Debian</a> a few hours ago, and should be available in Debian/Unstable
+tomorrow, and Debian/Testing in a few days.</p>
+
+<p>With the vlc-plugin-bittorrent package installed you should be able
+to stream videos using a simple call to</p>
+
+<p><blockquote><pre>
+vlc https://archive.org/download/TheGoat/TheGoat_archive.torrent
+</pre></blockquote></p>
+
+</p>It can handle magnet links too.  Now if only native vlc had
+bittorrent support.  Then a lot more would be helping each other to
+share public domain and creative commons movies.  The plugin need some
+stability work with seeking and picking the right file in a torrent
+with many files, but is already usable.  Please note that the plugin
+is not removing downloaded files when vlc is stopped, so it can fill
+up your disk if you are not careful.  Have fun. :)</p>
+
+<p>I would love to get help maintaining this package.  Get in touch if
+you are interested.</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+</div>
+      <div class="tags">
+        
+        
+        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>. 
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <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>
+      <div class="date"> 2nd September 2018</div>
+      <div class="body"><p>I continue to explore my Kodi installation, and today I wanted to
+tell it to play a youtube URL I received in a chat, without having to
+insert search terms using the on-screen keyboard.  After searching the
+web for API access to the Youtube plugin and testing a bit, I managed
+to find a recipe that worked.  If you got a kodi instance with its API
+available from http://kodihost/jsonrpc, you can try the following to
+have check out a nice cover band.</p>
+
+<p><blockquote><pre>curl --silent --header 'Content-Type: application/json' \
+  --data-binary '{ "id": 1, "jsonrpc": "2.0", "method": "Player.Open",
+  "params": {"item": { "file":
+  "plugin://plugin.video.youtube/play/?video_id=LuRGVM9O0qg" } } }' \
+  http://projector.local/jsonrpc</pre></blockquote></p>
+
+<p>I've extended kodi-stream program to take a video source as its
+first argument.  It can now handle direct video links, youtube links
+and 'desktop' to stream my desktop to Kodi.  It is almost like a
+Chromecast. :)</p>
+
+<p>As usual, if you use Bitcoin and want to show your support of my
+activities, please send Bitcoin donations to my address
+<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
+</div>
+      <div class="tags">
+        
+        
+        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>. 
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
+    <div class="entry">
+      <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>
+      <div class="date">30th August 2018</div>
+      <div class="body"><p>It might seem obvious that software created using tax money should
+be available for everyone to use and improve.  Free Software
+Foundation Europe recentlystarted a campaign to help get more people
+to understand this, and I just signed the petition on
+<a href="https://publiccode.eu/">Public Money, Public Code</a> to help
+them. I hope you too will do the same.</p>
+</div>
+      <div class="tags">
+        
+        
+        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>. 
+        
+        
+      </div>
+    </div>
+    <div class="padding"></div>
+    
     <div class="entry">
       <div class="title"><a href="http://people.skolelinux.org/pere/blog/A_bit_more_on_privacy_respecting_health_monitor___fitness_tracker.html">A bit more on privacy respecting health monitor / fitness tracker</a></div>
       <div class="date">13th August 2018</div>
@@ -30,7 +365,7 @@ of the unit.  I've received some ideas, and would like to share them
 with you.
 
 One interesting data point was a pointer to a Free Software app for
-Android called
+Android named
 <a href="https://github.com/Freeyourgadget/Gadgetbridge/">Gadgetbridge</a>.
 It provide cloudless collection and storing of data from a variety of
 trackers.  Its
@@ -40,7 +375,7 @@ protocol is fairly open, as it is obviously being handled by Free
 Software.  Other units are reportedly encrypting the collected
 information with their own public key, making sure only the vendor
 cloud service is able to extract data from the unit.  The people
-contacting me about it said they were using
+contacting me about Gadgetbirde said they were using
 <a href="https://us.amazfit.com/shop/bip?variant=336750">Amazfit
 Bip</a> and
 <a href="http://www.xiaomimi6phone.com/xiaomi-mi-band-3-features-release-date-rumors/">Xiaomi
@@ -55,7 +390,7 @@ proprietary, FIT files apparently can be read at least by
 <a href="https://www.gpsbabel.org">GPSBabel</a> and the
 <a href="https://apps.nextcloud.com/apps/gpxpod">GpxPod</a> Nextcloud
 app.  It is unclear to me if they can read step count and heart rate
-data.  The person I talked to was using a Garmin
+data.  The person I talked to was using a
 <a href="https://buy.garmin.com/en-US/US/p/564291">Garmin Forerunner
 935</a>, which is a fairly expensive unit.  I doubt it is worth it for
 a unit where the vendor clearly is trying its best to move from open
@@ -303,7 +638,7 @@ activities, please send Bitcoin donations to my address
       <div class="tags">
         
         
-        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/video">video</a>. 
+        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>. 
         
         
       </div>
@@ -456,385 +791,7 @@ activities, please send Bitcoin donations to my address
       <div class="tags">
         
         
-        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/video">video</a>. 
-        
-        
-      </div>
-    </div>
-    <div class="padding"></div>
-    
-    <div class="entry">
-      <div class="title"><a href="http://people.skolelinux.org/pere/blog/What_is_the_most_supported_MIME_type_in_Debian_in_2018_.html">What is the most supported MIME type in Debian in 2018?</a></div>
-      <div class="date"> 9th July 2018</div>
-      <div class="body"><p>Five years ago,
-<a href="http://people.skolelinux.org/pere/blog/What_is_the_most_supported_MIME_type_in_Debian_.html">I
-measured what the most supported MIME type in Debian was</a>, by
-analysing the desktop files in all packages in the archive.  Since
-then, the DEP-11 AppStream system has been put into production, making
-the task a lot easier.  This made me want to repeat the measurement,
-to see how much things changed.  Here are the new numbers, for
-unstable only this time:
-
-<p><strong>Debian Unstable:</strong></p>
-
-<pre>
-  count MIME type
-  ----- -----------------------
-     56 image/jpeg
-     55 image/png
-     49 image/tiff
-     48 image/gif
-     39 image/bmp
-     38 text/plain
-     37 audio/mpeg
-     34 application/ogg
-     33 audio/x-flac
-     32 audio/x-mp3
-     30 audio/x-wav
-     30 audio/x-vorbis+ogg
-     29 image/x-portable-pixmap
-     27 inode/directory
-     27 image/x-portable-bitmap
-     27 audio/x-mpeg
-     26 application/x-ogg
-     25 audio/x-mpegurl
-     25 audio/ogg
-     24 text/html
-</pre>
-
-<p>The list was created like this using a sid chroot: "cat
-/var/lib/apt/lists/*sid*_dep11_Components-amd64.yml.gz| zcat | awk '/^
-- \S+\/\S+$/ {print $2 }' | sort | uniq -c | sort -nr | head -20"</p>
-
-<p>It is interesting to see how image formats have passed text/plain
-as the most announced supported MIME type.  These days, thanks to the
-AppStream system, if you run into a file format you do not know, and
-want to figure out which packages support the format, you can find the
-MIME type of the file using "file --mime &lt;filename&gt;", and then
-look up all packages announcing support for this format in their
-AppStream metadata (XML or .desktop file) using "appstreamcli
-what-provides mimetype &lt;mime-type&gt;.  For example if you, like
-me, want to know which packages support inode/directory, you can get a
-list like this:</p>
-
-<p><blockquote><pre>
-% appstreamcli what-provides mimetype inode/directory | grep Package: | sort
-Package: anjuta
-Package: audacious
-Package: baobab
-Package: cervisia
-Package: chirp
-Package: dolphin
-Package: doublecmd-common
-Package: easytag
-Package: enlightenment
-Package: ephoto
-Package: filelight
-Package: gwenview
-Package: k4dirstat
-Package: kaffeine
-Package: kdesvn
-Package: kid3
-Package: kid3-qt
-Package: nautilus
-Package: nemo
-Package: pcmanfm
-Package: pcmanfm-qt
-Package: qweborf
-Package: ranger
-Package: sirikali
-Package: spacefm
-Package: spacefm
-Package: vifm
-%
-</pre></blockquote></p>
-
-<p>Using the same method, I can quickly discover that the Sketchup file
-format is not yet supported by any package in Debian:</p>
-
-<p><blockquote><pre>
-% appstreamcli what-provides mimetype  application/vnd.sketchup.skp
-Could not find component providing 'mimetype::application/vnd.sketchup.skp'.
-%
-</pre></blockquote></p>
-
-<p>Yesterday I used it to figure out which packages support the STL 3D
-format:</p>
-
-<p><blockquote><pre>
-% appstreamcli what-provides mimetype  application/sla|grep Package
-Package: cura
-Package: meshlab
-Package: printrun
-%
-</pre></blockquote></p>
-
-<p>PS: A new version of Cura was uploaded to Debian yesterday.</p>
-
-<p>As usual, if you use Bitcoin and want to show your support of my
-activities, please send Bitcoin donations to my address
-<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
-</div>
-      <div class="tags">
-        
-        
-        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/isenkram">isenkram</a>. 
-        
-        
-      </div>
-    </div>
-    <div class="padding"></div>
-    
-    <div class="entry">
-      <div class="title"><a href="http://people.skolelinux.org/pere/blog/Debian_APT_upgrade_without_enough_free_space_on_the_disk___.html">Debian APT upgrade without enough free space on the disk...</a></div>
-      <div class="date"> 8th July 2018</div>
-      <div class="body"><p>Quite regularly, I let my Debian Sid/Unstable chroot stay untouch
-for a while, and when I need to update it there is not enough free
-space on the disk for apt to do a normal 'apt upgrade'.  I normally
-would resolve the issue by doing 'apt install &lt;somepackages&gt;' to
-upgrade only some of the packages in one batch, until the amount of
-packages to download fall below the amount of free space available.
-Today, I had about 500 packages to upgrade, and after a while I got
-tired of trying to install chunks of packages manually.  I concluded
-that I did not have the spare hours required to complete the task, and
-decided to see if I could automate it.  I came up with this small
-script which I call 'apt-in-chunks':</p>
-
-<p><blockquote><pre>
-#!/bin/sh
-#
-# Upgrade packages when the disk is too full to upgrade every
-# upgradable package in one lump.  Fetching packages to upgrade using
-# apt, and then installing using dpkg, to avoid changing the package
-# flag for manual/automatic.
-
-set -e
-
-ignore() {
-    if [ "$1" ]; then
-       grep -v "$1"
-    else
-       cat
-    fi
-}
-
-for p in $(apt list --upgradable | ignore "$@" |cut -d/ -f1 | grep -v '^Listing...'); do
-    echo "Upgrading $p"
-    apt clean
-    apt install --download-only -y $p
-    for f in /var/cache/apt/archives/*.deb; do
-       if [ -e "$f" ]; then
-           dpkg -i /var/cache/apt/archives/*.deb
-           break
-       fi
-    done
-done
-</pre></blockquote></p>
-
-<p>The script will extract the list of packages to upgrade, try to
-download the packages needed to upgrade one package, install the
-downloaded packages using dpkg.  The idea is to upgrade packages
-without changing the APT mark for the package (ie the one recording of
-the package was manually requested or pulled in as a dependency).  To
-use it, simply run it as root from the command line.  If it fail, try
-'apt install -f' to clean up the mess and run the script again.  This
-might happen if the new packages conflict with one of the old
-packages.  dpkg is unable to remove, while apt can do this.</p>
-
-<p>It take one option, a package to ignore in the list of packages to
-upgrade.  The option to ignore a package is there to be able to skip
-the packages that are simply too large to unpack.  Today this was
-'ghc', but I have run into other large packages causing similar
-problems earlier (like TeX).</p>
-
-<p>Update 2018-07-08: Thanks to Paul Wise, I am aware of two
-alternative ways to handle this.  The "unattended-upgrades
---minimal-upgrade-steps" option will try to calculate upgrade sets for
-each package to upgrade, and then upgrade them in order, smallest set
-first.  It might be a better option than my above mentioned script.
-Also, "aptutude upgrade" can upgrade single packages, thus avoiding
-the need for using "dpkg -i" in the script above.</p>
-
-<p>As usual, if you use Bitcoin and want to show your support of my
-activities, please send Bitcoin donations to my address
-<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
-</div>
-      <div class="tags">
-        
-        
-        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>. 
-        
-        
-      </div>
-    </div>
-    <div class="padding"></div>
-    
-    <div class="entry">
-      <div class="title"><a href="http://people.skolelinux.org/pere/blog/The_worlds_only_stone_power_plant_.html">The worlds only stone power plant?</a></div>
-      <div class="date">30th June 2018</div>
-      <div class="body"><p>So far, at least hydro-electric power, coal power, wind power,
-solar power, and wood power are well known.  Until a few days ago, I
-had never heard of stone power.  Then I learn about a quarry in a
-mountain in
-<a href="https://en.wikipedia.org/wiki/Bremanger">Bremanger</a> i
-Norway, where
-<a href="https://www.bontrup.com/en/activities/raw-materials/bremanger-quarry/">the
-Bremanger Quarry</a> company is extracting stone and dumping the stone
-into a shaft leading to its shipping harbour.  This downward movement
-in this shaft is used to produce electricity.  In short, it is using
-falling rocks instead of falling water to produce electricity, and
-according to its own statements it is producing more power than it is
-using, and selling the surplus electricity to the Norwegian power
-grid.  I find the concept truly amazing.  Is this the worlds only
-stone power plant?</p>
-
-<p>As usual, if you use Bitcoin and want to show your support of my
-activities, please send Bitcoin donations to my address
-<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
-</div>
-      <div class="tags">
-        
-        
-        Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>. 
-        
-        
-      </div>
-    </div>
-    <div class="padding"></div>
-    
-    <div class="entry">
-      <div class="title"><a href="http://people.skolelinux.org/pere/blog/Add_on_to_control_the_projector_from_within_Kodi.html">Add-on to control the projector from within Kodi</a></div>
-      <div class="date">26th June 2018</div>
-      <div class="body"><p>My movie playing setup involve <a href="https://kodi.tv/">Kodi</a>,
-<a href="https://openelec.tv">OpenELEC</a> (probably soon to be
-replaced with <a href="https://libreelec.tv/">LibreELEC</a>) and an
-Infocus IN76 video projector.  My projector can be controlled via both
-a infrared remote controller, and a RS-232 serial line.  The vendor of
-my projector, <a href="https://www.infocus.com/">InFocus</a>, had been
-sensible enough to document the serial protocol in its user manual, so
-it is easily available, and I used it some years ago to write
-<a href="https://github.com/petterreinholdtsen/infocus-projector-control">a
-small script to control the projector</a>.  For a while now, I longed
-for a setup where the projector was controlled by Kodi, for example in
-such a way that when the screen saver went on, the projector was
-turned off, and when the screen saver exited, the projector was turned
-on again.</p>
-
-<p>A few days ago, with very good help from parts of my family, I
-managed to find a Kodi Add-on for controlling a Epson projector, and
-got in touch with its author to see if we could join forces and make a
-Add-on with support for several projectors.  To my pleasure, he was
-positive to the idea, and we set out to add InFocus support to his
-add-on, and make the add-on suitable for the official Kodi add-on
-repository.</p>
-
-<p>The Add-on is now working (for me, at least), with a few minor
-adjustments.  The most important change I do relative to the master
-branch in the github repository is embedding the
-<a href="https://github.com/pyserial/pyserial">pyserial module</a> in
-the add-on.  The long term solution is to make a "script" type
-pyserial module for Kodi, that can be pulled in as a dependency in
-Kodi.  But until that in place, I embed it.</p>
-
-<p>The add-on can be configured to turn on the projector when Kodi
-starts, off when Kodi stops as well as turn the projector off when the
-screensaver start and on when the screesaver stops.  It can also be
-told to set the projector source when turning on the projector.
-
-<p>If this sound interesting to you, check out
-<a href="https://github.com/fredrik-eriksson/kodi_projcontrol">the
-project github repository</a>.  Perhaps you can send patches to
-support your projector too?  As soon as we find time to wrap up the
-latest changes, it should be available for easy installation using any
-Kodi instance.</p>
-
-<p>For future improvements, I would like to add projector model
-detection and the ability to adjust the brightness level of the
-projector from within Kodi.  We also need to figure out how to handle
-the cooling period of the projector.  My projector refuses to turn on
-for 60 seconds after it was turned off.  This is not handled well by
-the add-on at the moment.</p>
-
-<p>As usual, if you use Bitcoin and want to show your support of my
-activities, please send Bitcoin donations to my address
-<b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
-</div>
-      <div class="tags">
-        
-        
-        Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>. 
-        
-        
-      </div>
-    </div>
-    <div class="padding"></div>
-    
-    <div class="entry">
-      <div class="title"><a href="http://people.skolelinux.org/pere/blog/youtube_dl_for_nedlasting_fra_NRK_med_undertekster___nice_free_software.html">youtube-dl for nedlasting fra NRK med undertekster - nice free software</a></div>
-      <div class="date">28th April 2018</div>
-      <div class="body"><p>I <a href="https://no.wikipedia.org/wiki/VHS">VHS-kassettenes</a>
-tid var det rett frem å ta vare på et TV-program en ønsket å kunne se
-senere, uten å være avhengig av at programmet ble sendt på nytt.
-Kanskje ønsket en å se programmet på hytten der det ikke var
-TV-signal, eller av andre grunner ha det tilgjengelig for fremtidig
-fornøyelse.  Dette er blitt vanskeligere med introduksjon av
-digital-TV og webstreaming, der opptak til harddisk er utenfor de
-flestes kontroll hvis de bruker ufri programvare og bokser kontrollert
-av andre.  Men for NRK her i Norge, finnes det heldigvis flere fri
-programvare-alternativer, som jeg har
-<a href="http://people.skolelinux.org/pere/blog/Hvordan_enkelt_laste_ned_filmer_fra_NRK.html">skrevet</a>
-<a href="http://people.skolelinux.org/pere/blog/Hvordan_enkelt_laste_ned_filmer_fra_NRK_med_den__nye__l_sningen.html">om</a>
-<a href="http://people.skolelinux.org/pere/blog/Nedlasting_fra_NRK__som_Matroska_med_undertekster.html">før</a>.
-Så lenge kilden for nedlastingen er lovlig lagt ut på nett (hvilket
-jeg antar NRK gjør), så er slik lagring til privat bruk også lovlig i
-Norge.</p>
-
-<p>Sist jeg så på saken, i 2016, nevnte jeg at
-<a href="https://rg3.github.com/youtube-dl/">youtube-dl</a> ikke kunne
-bake undertekster fra NRK inn i videofilene, og at jeg derfor
-foretrakk andre alternativer.  Nylig oppdaget jeg at dette har endret
-seg.  Fordelen med youtube-dl er at den er tilgjengelig direkte fra
-Linux-distribusjoner som <a href="https://www.debian.org/">Debian</a>
-og <a href="https://www.ubuntu.com/">Ubuntu</a>, slik at en slipper å
-finne ut selv hvordan en skal få dem til å virke.</p>
-
-<p>For å laste ned et NRK-innslag med undertekster, og få den norske
-underteksten pakket inn i videofilen, så kan følgende kommando
-brukes:</p>
-
-<p><pre>
-youtube-dl --write-sub --sub-format ttml \
-  --convert-subtitles srt --embed-subs \
-  https://tv.nrk.no/serie/ramm-ferdig-gaa/MUHU11000316/27-04-2018
-</pre></p>
-
-<p>URL-eksemplet er dagens toppsak på tv.nrk.no.  Resultatet er en
-MP4-fil med filmen og undertekster som kan spilles av med VLC.  Merk
-at VLC ikke viser frem undertekster før du aktiverer dem.  For å gjøre
-det, høyreklikk med musa i fremviservinduet, velg menyvalget for
-undertekst og så norsk språk.  Jeg testet også '--write-auto-sub',
-men det kommandolinjeargumentet ser ikke ut til å fungere, så jeg
-endte opp med settet med argumentlisten over, som jeg fant i en
-feilrapport i youtube-dl-prosjektets samling over feilrapporter.</p>
-
-<p>Denne støtten i youtube-dl gjør det svært enkelt å lagre
-NRK-innslag, det være seg nyheter, filmer, serier eller dokumentater,
-for å ha dem tilgjengelig for fremtidig referanse og bruk, uavhengig
-av hvor lenge innslagene ligger tilgjengelig hos NRK.  Så får det ikke
-hjelpe at NRKs jurister mener at det er
-<a href="http://people.skolelinux.org/pere/blog/Best___ikke_fortelle_noen_at_streaming_er_nedlasting___.html">vesensforskjellig
-å legge tilgjengelig for nedlasting og for streaming</a>, når det rent
-teknisk er samme sak.</p>
-
-<p>Programmet youtube-dl støtter også en rekke andre nettsteder, se
-prosjektoversikten for
-<a href="http://rg3.github.io/youtube-dl/supportedsites.html">en
-komplett liste</a>.</p>
-</div>
-      <div class="tags">
-        
-        
-        Tags: <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>. 
+        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>. 
         
         
       </div>
@@ -864,7 +821,11 @@ komplett liste</a>.</p>
 
 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
 
-<li><a href="http://people.skolelinux.org/pere/blog/archive/2018/08/">August (2)</a></li>
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
+
+<li><a href="http://people.skolelinux.org/pere/blog/archive/2018/10/">October (1)</a></li>
 
 </ul></li>
 
@@ -1151,7 +1112,7 @@ komplett liste</a>.</p>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (9)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (10)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
 
@@ -1159,7 +1120,7 @@ komplett liste</a>.</p>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (161)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (163)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (158)</a></li>
 
@@ -1173,7 +1134,7 @@ komplett liste</a>.</p>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (381)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (386)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
 
@@ -1193,6 +1154,8 @@ komplett liste</a>.</p>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (20)</a></li>
 
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/kodi">kodi (3)</a></li>
+
  <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/lego">lego (4)</a></li>
@@ -1217,7 +1180,7 @@ komplett liste</a>.</p>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (71)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (72)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (107)</a></li>
 
@@ -1257,9 +1220,9 @@ komplett liste</a>.</p>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (11)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (12)</a></li>
 
- <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (66)</a></li>
+ <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (68)</a></li>
 
  <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>