]> 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="https://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="https://people.skolelinux.org/pere/blog/vim.css" />
9 <link rel="alternate" title="RSS Feed" href="https://people.skolelinux.org/pere/blog/index.rss" type="application/rss+xml" />
10 </head>
11 <body>
12 <div class="title">
13 <h1>
14 <a href="https://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="https://people.skolelinux.org/pere/blog/OpenSnitch_in_Debian_ready_for_prime_time.html">OpenSnitch in Debian ready for prime time</a></div>
24 <div class="date">13th May 2023</div>
25 <div class="body"><p>A bit delayed,
26 <a href="https://tracker.debian.org/pkg/opensnitch">the interactive
27 application firewall OpenSnitch</a> package in Debian now got the
28 latest fixes ready for Debian Bookworm. Because it depend on a
29 package missing on some architectures, the autopkgtest check of the
30 testing migration script did not understand that the tests were
31 actually working, so the migration was delayed. A bug in the package
32 dependencies is also fixed, so those installing the firewall package
33 (opensnitch) now also get the GUI admin tool (python3-opensnitch-ui)
34 installed by default. I am very grateful to Gustavo IƱiguez Goya for
35 his work on getting the package ready for Debian Bookworm.</p>
36
37 <p>Armed with this package I have discovered some surprising
38 connections from programs I believed were able to work completly
39 offline, and it has already proven its worth, at least to me. If you
40 too want to get more familiar with the kind of programs using
41 Internett connections on your machine, I recommend testing <tt>apt
42 install opensnitch</tt> in Bookworm and see what you think.</p>
43
44 <p>The package is still not able to build its eBPF module within
45 Debian. Not sure how much work it would be to get it working, but
46 suspect some kernel related packages need to be extended with more
47 header files to get it working.</p>
48
49 <p>As usual, if you use Bitcoin and want to show your support of my
50 activities, please send Bitcoin donations to my address
51 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
52 </div>
53 <div class="tags">
54
55
56 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/opensnitch">opensnitch</a>.
57
58
59 </div>
60 </div>
61 <div class="padding"></div>
62
63 <div class="entry">
64 <div class="title"><a href="https://people.skolelinux.org/pere/blog/Speech_to_text__she_APTly_whispered__how_hard_can_it_be_.html">Speech to text, she APTly whispered, how hard can it be?</a></div>
65 <div class="date">23rd April 2023</div>
66 <div class="body"><p>While visiting a convention during Easter, it occurred to me that
67 it would be great if I could have a digital Dictaphone with
68 transcribing capabilities, providing me with texts to cut-n-paste into
69 stuff I need to write. The background is that long drives often bring
70 up the urge to write on texts I am working on, which of course is out
71 of the question while driving. With the release of
72 <a href="https://github.com/openai/whisper/">OpenAI Whisper</a>, this
73 seem to be within reach with Free Software, so I decided to give it a
74 go. OpenAI Whisper is a Linux based neural network system to read in
75 audio files and provide text representation of the speech in that
76 audio recording. It handle multiple languages and according to its
77 creators even can translate into a different language than the spoken
78 one. I have not tested the latter feature. It can either use the CPU
79 or a GPU with CUDA support. As far as I can tell, CUDA in practice
80 limit that feature to NVidia graphics cards. I have few of those, as
81 they do not work great with free software drivers, and have not tested
82 the GPU option. While looking into the matter, I did discover some
83 work to provide CUDA support on non-NVidia GPUs, and some work with
84 the library used by Whisper to port it to other GPUs, but have not
85 spent much time looking into GPU support yet. I've so far used an old
86 X220 laptop as my test machine, and only transcribed using its
87 CPU.</p>
88
89 <p>As it from a privacy standpoint is unthinkable to use computers
90 under control of someone else (aka a "cloud" service) to transcribe
91 ones thoughts and personal notes, I want to run the transcribing
92 system locally on my own computers. The only sensible approach to me
93 is to make the effort I put into this available for any Linux user and
94 to upload the needed packages into Debian. Looking at Debian Bookworm, I
95 discovered that only three packages were missing,
96 <a href="https://bugs.debian.org/1034307">tiktoken</a>,
97 <a href="https://bugs.debian.org/1034144">triton</a>, and
98 <a href="https://bugs.debian.org/1034091">openai-whisper</a>. For a while
99 I also believed
100 <a href="https://bugs.debian.org/1034286">ffmpeg-python</a> was
101 needed, but as its
102 <a href="https://github.com/kkroening/ffmpeg-python/issues/760">upstream
103 seem to have vanished</a> I found it safer
104 <a href="https://github.com/openai/whisper/pull/1242">to rewrite
105 whisper</a> to stop depending on in than to introduce ffmpeg-python
106 into Debian. I decided to place these packages under the umbrella of
107 <a href="https://salsa.debian.org/deeplearning-team">the Debian Deep
108 Learning Team</a>, which seem like the best team to look after such
109 packages. Discussing the topic within the group also made me aware
110 that the triton package was already a future dependency of newer
111 versions of the torch package being planned, and would be needed after
112 Bookworm is released.</p>
113
114 <p>All required code packages have been now waiting in
115 <a href="https://ftp-master.debian.org/new.html">the Debian NEW
116 queue</a> since Wednesday, heading for Debian Experimental until
117 Bookworm is released. An unsolved issue is how to handle the neural
118 network models used by Whisper. The default behaviour of Whisper is
119 to require Internet connectivity and download the model requested to
120 <tt>~/.cache/whisper/</tt> on first invocation. This obviously would
121 fail <a href="https://people.debian.org/~bap/dfsg-faq.html">the
122 deserted island test of free software</a> as the Debian packages would
123 be unusable for someone stranded with only the Debian archive and solar
124 powered computer on a deserted island.</p>
125
126 <p>Because of this, I would love to include the models in the Debian
127 mirror system. This is problematic, as the models are very large
128 files, which would put a heavy strain on the Debian mirror
129 infrastructure around the globe. The strain would be even higher if
130 the models change often, which luckily as far as I can tell they do
131 not. The small model, which according to its creator is most useful
132 for English and in my experience is not doing a great job there
133 either, is 462 MiB (deb is 414 MiB). The medium model, which to me
134 seem to handle English speech fairly well is 1.5 GiB (deb is 1.3 GiB)
135 and the large model is 2.9 GiB (deb is 2.6 GiB). I would assume
136 everyone with enough resources would prefer to use the large model for
137 highest quality. I believe the models themselves would have to go
138 into the non-free part of the Debian archive, as they are not really
139 including any useful source code for updating the models. The
140 "source", aka the model training set, according to the creators
141 consist of "680,000 hours of multilingual and multitask supervised
142 data collected from the web", which to me reads material with both
143 unknown copyright terms, unavailable to the general public. In other
144 words, the source is not available according to the Debian Free
145 Software Guidelines and the model should be considered non-free.</p>
146
147 <p>I asked the Debian FTP masters for advice regarding uploading a
148 model package on their IRC channel, and based on the feedback there it
149 is still unclear to me if such package would be accepted into the
150 archive. In any case I wrote build rules for a
151 <a href="https://salsa.debian.org/deeplearning-team/openai-whisper-model">OpenAI
152 Whisper model package</a> and
153 <a href="https://github.com/openai/whisper/pull/1257">modified the
154 Whisper code base</a> to prefer shared files under <tt>/usr/</tt> and
155 <tt>/var/</tt> over user specific files in <tt>~/.cache/whisper/</tt>
156 to be able to use these model packages, to prepare for such
157 possibility. One solution might be to include only one of the models
158 (small or medium, I guess) in the Debian archive, and ask people to
159 download the others from the Internet. Not quite sure what to do
160 here, and advice is most welcome (use the debian-ai mailing list).</p>
161
162 <p>To make it easier to test the new packages while I wait for them to
163 clear the NEW queue, I created an APT source targeting bookworm. I
164 selected Bookworm instead of Bullseye, even though I know the latter
165 would reach more users, is that some of the required dependencies are
166 missing from Bullseye and I during this phase of testing did not want
167 to backport a lot of packages just to get up and running.</p>
168
169 <p>Here is a recipe to run as user root if you want to test OpenAI
170 Whisper using Debian packages on your Debian Bookworm installation,
171 first adding the APT repository GPG key to the list of trusted keys,
172 then setting up the APT repository and finally installing the packages
173 and one of the models:</p>
174
175 <p><pre>
176 curl https://geekbay.nuug.no/~pere/openai-whisper/D78F5C4796F353D211B119E28200D9B589641240.asc \
177 -o /etc/apt/trusted.gpg.d/pere-whisper.asc
178 mkdir -p /etc/apt/sources.list.d
179 cat > /etc/apt/sources.list.d/pere-whisper.list &lt;&lt;EOF
180 deb https://geekbay.nuug.no/~pere/openai-whisper/ bookworm main
181 deb-src https://geekbay.nuug.no/~pere/openai-whisper/ bookworm main
182 EOF
183 apt update
184 apt install openai-whisper
185 </pre></p>
186
187 <p>The package work for me, but have not yet been tested on any other
188 computer than my own. With it, I have been able to (badly) transcribe
189 a 2 minute 40 second Norwegian audio clip to test using the small
190 model. This took 11 minutes and around 2.2 GiB of RAM. Transcribing
191 the same file with the medium model gave a accurate text in 77 minutes
192 using around 5.2 GiB of RAM. My test machine had too little memory to
193 test the large model, which I believe require 11 GiB of RAM. In
194 short, this now work for me using Debian packages, and I hope it will
195 for you and everyone else once the packages enter Debian.</p>
196
197 <p>Now I can start on the audio recording part of this project.</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="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="https://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="https://people.skolelinux.org/pere/blog/rtlsdr_scanner__software_defined_radio_frequency_scanner_for_Linux____nice_free_software.html">rtlsdr-scanner, software defined radio frequency scanner for Linux - nice free software</a></div>
215 <div class="date"> 7th April 2023</div>
216 <div class="body"><p>Today I finally found time to track down a useful radio frequency
217 scanner for my software defined radio. Just for fun I tried to locate
218 the radios used in the areas, and a good start would be to scan all
219 the frequencies to see what is in use. I've tried to find a useful
220 program earlier, but ran out of time before I managed to find a useful
221 tool. This time I was more successful, and after a few false leads I
222 found a description of
223 <a href="https://www.kali.org/tools/rtlsdr-scanner/">rtlsdr-scanner
224 over at the Kali site</a>, and was able to track down
225 <a href="https://gitlab.com/kalilinux/packages/rtlsdr-scanner.git">the
226 Kali package git repository</a> to build a deb package for the
227 scanner. Sadly the package is missing from the Debian project itself,
228 at least in Debian Bullseye. Two runtime dependencies,
229 <a href="https://gitlab.com/kalilinux/packages/python-visvis.git">python-visvis</a>
230 and
231 <a href="https://gitlab.com/kalilinux/packages/python-rtlsdr.git">python-rtlsdr</a>
232 had to be built and installed separately. Luckily '<tt>gbp
233 buildpackage</tt>' handled them just fine and no further packages had
234 to be manually built. The end result worked out of the box after
235 installation.</p>
236
237 <p>My initial scans for FM channels worked just fine, so I knew the
238 scanner was functioning. But when I tried to scan every frequency
239 from 100 to 1000 MHz, the program stopped unexpectedly near the
240 completion. After some debugging I discovered USB software radio I
241 used rejected frequencies above 948 MHz, triggering a unreported
242 exception breaking the scan. Changing the scan to end at 957 worked
243 better. I similarly found the lower limit to be around 15, and ended
244 up with the following full scan:</p>
245
246 <p><a href="https://people.skolelinux.org/pere/blog/images/2023-04-07-radio-freq-scanning.png"><img src="https://people.skolelinux.org/pere/blog/images/2023-04-07-radio-freq-scanning.png" width="100%"></a></p>
247
248 <p>Saving the scan did not work, but exporting it as a CSV file worked
249 just fine. I ended up with around 477k CVS lines with dB level for
250 the given frequency.</p>
251
252 <p>The save failure seem to be a missing UTF-8 encoding issue in the
253 python code. Will see if I can find time to send a patch
254 <a href="https://github.com/CdeMills/RTLSDR-Scanner/">upstream</a>
255 later to fix this exception:</p>
256
257 <pre>
258 Traceback (most recent call last):
259 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/main_window.py", line 485, in __on_save
260 save_plot(fullName, self.scanInfo, self.spectrum, self.locations)
261 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/file.py", line 408, in save_plot
262 handle.write(json.dumps(data, indent=4))
263 TypeError: a bytes-like object is required, not 'str'
264 Traceback (most recent call last):
265 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/main_window.py", line 485, in __on_save
266 save_plot(fullName, self.scanInfo, self.spectrum, self.locations)
267 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/file.py", line 408, in save_plot
268 handle.write(json.dumps(data, indent=4))
269 TypeError: a bytes-like object is required, not 'str'
270 </pre>
271
272 <p>As usual, if you use Bitcoin and want to show your support of my
273 activities, please send Bitcoin donations to my address
274 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
275 </div>
276 <div class="tags">
277
278
279 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
280
281
282 </div>
283 </div>
284 <div class="padding"></div>
285
286 <div class="entry">
287 <div class="title"><a href="https://people.skolelinux.org/pere/blog/OpenSnitch_available_in_Debian_Sid_and_Bookworm.html">OpenSnitch available in Debian Sid and Bookworm</a></div>
288 <div class="date">25th February 2023</div>
289 <div class="body"><p>Thanks to the efforts of the OpenSnitch lead developer Gustavo
290 IƱiguez Goya allowing me to sponsor the upload,
291 <a href="https://tracker.debian.org/pkg/opensnitch">the interactive
292 application firewall OpenSnitch</a> is now available in Debian
293 Testing, soon to become the next stable release of Debian.</p>
294
295 <p>This is a package which set up a network firewall on one or more
296 machines, which is controlled by a graphical user interface that will
297 ask the user if a program should be allowed to connect to the local
298 network or the Internet. If some background daemon is trying to dial
299 home, it can be blocked from doing so with a simple mouse click, or by
300 default simply by not doing anything when the GUI question dialog pop
301 up. A list of all programs discovered using the network is provided
302 in the GUI, giving the user an overview of how the machine(s) programs
303 use the network.</p>
304
305 <p>OpenSnitch was uploaded for NEW processing about a month ago, and I
306 had little hope of it getting accepted and shaping up in time for the
307 package freeze, but the Debian ftpmasters proved to be amazingly quick
308 at checking out the package and it was accepted into the archive about
309 week after the first upload. It is now team maintained under the Go
310 language team umbrella. A few fixes to the default setup is only in
311 Sid, and should migrate to Testing/Bookworm in a week.</p>
312
313 <p>During testing I ran into an
314 <a href="https://github.com/evilsocket/opensnitch/issues/813">issue
315 with Minecraft server broadcasts disappearing</a>, which was quickly
316 resolved by the developer with a patch and a proposed configuration
317 change. I've been told this was caused by the Debian packages default
318 use if /proc/ information to track down kernel status, instead of the
319 newer eBPF module that can be used. The reason is simply that
320 upstream and I have failed to find a way to build the eBPF modules for
321 OpenSnitch without a complete configured Linux kernel source tree,
322 which as far as we can tell is unavailable as a build dependency in
323 Debian. We tried unsuccessfully so far to use the kernel-headers
324 package. It would be great if someone could provide some clues how to
325 build eBPF modules on build daemons in Debian, possibly without the full
326 kernel source.</p>
327
328 <p>As usual, if you use Bitcoin and want to show your support of my
329 activities, please send Bitcoin donations to my address
330 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
331 </div>
332 <div class="tags">
333
334
335 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/opensnitch">opensnitch</a>.
336
337
338 </div>
339 </div>
340 <div class="padding"></div>
341
342 <div class="entry">
343 <div class="title"><a href="https://people.skolelinux.org/pere/blog/Is_the_desktop_recommending_your_program_for_opening_its_files_.html">Is the desktop recommending your program for opening its files?</a></div>
344 <div class="date">29th January 2023</div>
345 <div class="body"><p>Linux desktop systems
346 <a href="https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html">have
347 standardized</a> how programs present themselves to the desktop
348 system. If a package include a .desktop file in
349 /usr/share/applications/, Gnome, KDE, LXDE, Xfce and the other desktop
350 environments will pick up the file and use its content to generate the
351 menu of available programs in the system. A lesser known fact is that
352 a package can also explain to the desktop system how to recognize the
353 files created by the program in question, and use it to open these
354 files on request, for example via a GUI file browser.</p>
355
356 <p>A while back I ran into a package that did not tell the desktop
357 system how to recognize its files and was not used to open its files
358 in the file browser and fixed it. In the process I wrote a simple
359 debian/tests/ script to ensure the setup keep working. It might be
360 useful for other packages too, to ensure any future version of the
361 package keep handling its own files.</p>
362
363 <p>For this to work the file format need a useful MIME type that can
364 be used to identify the format. If the file format do not yet have a
365 MIME type, it should define one and preferably also
366 <a href="https://www.iana.org/assignments/media-types/media-types.xhtml">register
367 it with IANA</a> to ensure the MIME type string is reserved.</p>
368
369 <p>The script uses the <tt>xdg-mime</tt> program from xdg-utils to
370 query the database of standardized package information and ensure it
371 return sensible values. It also need the location of an example file
372 for xdg-mime to guess the format of.</p>
373
374 <pre>
375 #!/bin/sh
376 #
377 # Author: Petter Reinholdtsen
378 # License: GPL v2 or later at your choice.
379 #
380 # Validate the MIME setup, making sure motor types have
381 # application/vnd.openmotor+yaml associated with them and is connected
382 # to the openmotor desktop file.
383
384 retval=0
385
386 mimetype="application/vnd.openmotor+yaml"
387 testfile="test/data/real/o3100/motor.ric"
388 mydesktopfile="openmotor.desktop"
389
390 filemime="$(xdg-mime query filetype "$testfile")"
391
392 if [ "$mimetype" != "$filemime" ] ; then
393 retval=1
394 echo "error: xdg-mime claim motor file MIME type is $filemine, not $mimetype"
395 else
396 echo "success: xdg-mime report correct mime type $mimetype for motor file"
397 fi
398
399 desktop=$(xdg-mime query default "$mimetype")
400
401 if [ "$mydesktopfile" != "$desktop" ]; then
402 retval=1
403 echo "error: xdg-mime claim motor file should be handled by $desktop, not $mydesktopfile"
404 else
405 echo "success: xdg-mime agree motor file should be handled by $mydesktopfile"
406 fi
407
408 exit $retval
409 </pre>
410
411 <p>It is a simple way to ensure your users are not very surprised when
412 they try to open one of your file formats in their file browser.</p>
413
414 <p>As usual, if you use Bitcoin and want to show your support of my
415 activities, please send Bitcoin donations to my address
416 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
417 </div>
418 <div class="tags">
419
420
421 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>.
422
423
424 </div>
425 </div>
426 <div class="padding"></div>
427
428 <div class="entry">
429 <div class="title"><a href="https://people.skolelinux.org/pere/blog/Opensnitch__the_application_level_interactive_firewall__heading_into_the_Debian_archive.html">Opensnitch, the application level interactive firewall, heading into the Debian archive</a></div>
430 <div class="date">22nd January 2023</div>
431 <div class="body"><p>While reading a
432 <a href="https://sneak.berlin/20230115/macos-scans-your-local-files-now/">blog
433 post claiming MacOS X recently started scanning local files and
434 reporting information about them to Apple</a>, even on a machine where
435 all such callback features had been disabled, I came across a
436 description of the Little Snitch application for MacOS X. It seemed
437 like a very nice tool to have in the tool box, and I decided to see if
438 something similar was available for Linux.</p>
439
440 <p>It did not take long to find
441 <a href="https://github.com/evilsocket/opensnitch">the OpenSnitch
442 package</a>, which has been in development since 2017, and now is in
443 version 1.5.0. It has had a
444 <a href="https://bugs.debian.org/909567">request for Debian
445 packaging</a> since 2018, but no-one completed the job so far. Just
446 for fun, I decided to see if I could help, and I was very happy to
447 discover that
448 <a href="https://github.com/evilsocket/opensnitch/issues/304">upstream
449 want a Debian package too</a>.</p>
450
451 <p>After struggling a bit with getting the program to run, figuring
452 out building Go programs (and a little failed detour to look at eBPF
453 builds too - help needed), I am very happy to report that I am
454 sponsoring upstream to maintain the package in Debian, and it has
455 since this morning been waiting in NEW for the ftpmasters to have a
456 look. Perhaps it can get into the archive in time for the Bookworm
457 release?</p>
458
459 <p>As usual, if you use Bitcoin and want to show your support of my
460 activities, please send Bitcoin donations to my address
461 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
462 </div>
463 <div class="tags">
464
465
466 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/opensnitch">opensnitch</a>.
467
468
469 </div>
470 </div>
471 <div class="padding"></div>
472
473 <div class="entry">
474 <div class="title"><a href="https://people.skolelinux.org/pere/blog/LinuxCNC_MQTT_publisher_component.html">LinuxCNC MQTT publisher component</a></div>
475 <div class="date"> 8th January 2023</div>
476 <div class="body"><p>I watched <a href="https://yewtu.be/watch?v=jmKUV3aNLjk">a 2015
477 video from Andreas Schiffler</a> the other day, where he set up
478 <a href="https://linuxcnc.org/">LinuxCNC</a> to send status
479 information to the MQTT broker IBM Bluemix. As I also use MQTT for
480 graphing, it occured to me that a generic MQTT LinuxCNC component
481 would be useful and I set out to implement it. Today I got the first
482 draft limping along and submitted as
483 <a href="https://github.com/LinuxCNC/linuxcnc/pull/2253">a patch to the
484 LinuxCNC project</a>.</p>
485
486 <p>The simple part was setting up the MQTT publishing code in Python.
487 I already have set up other parts submitting data to my Mosquito MQTT
488 broker, so I could reuse that code. Writing a LinuxCNC component in
489 Python as new to me, but using existing examples in the code
490 repository and the extensive documentation, this was fairly straight
491 forward. The hardest part was creating a automated test for the
492 component to ensure it was working. Testing it in a simulated
493 LinuxCNC machine proved very useful, as I discovered features I needed
494 that I had not thought of yet, and adjusted the code quite a bit to
495 make it easier to test without a operational MQTT broker
496 available.</p>
497
498 <p>The draft is ready and working, but I am unsure which LinuxCNC HAL
499 pins I should collect and publish by default (in other words, the
500 default set of information pieces published), and how to get the
501 machine name from the LinuxCNC INI file. The latter is a minor
502 detail, but I expect it would be useful in a setup with several
503 machines available. I am hoping for feedback from the experienced
504 LinuxCNC developers and users, to make the component even better
505 before it can go into the mainland LinuxCNC code base.</p>
506
507 <p>Since I started on the MQTT component, I came across
508 <a href="https://yewtu.be/watch?v=Bqa2grG0XtA">another video from Kent
509 VanderVelden</a> where he combine LinuxCNC with a set of screen glasses
510 controlled by a Raspberry Pi, and it occured to me that it would
511 be useful for such use cases if LinuxCNC also provided a REST API for
512 querying its status. I hope to start on such component once the MQTT
513 component is working well.</p>
514
515 <p>As usual, if you use Bitcoin and want to show your support of my
516 activities, please send Bitcoin donations to my address
517 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
518 </div>
519 <div class="tags">
520
521
522 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc</a>, <a href="https://people.skolelinux.org/pere/blog/tags/robot">robot</a>.
523
524
525 </div>
526 </div>
527 <div class="padding"></div>
528
529 <div class="entry">
530 <div class="title"><a href="https://people.skolelinux.org/pere/blog/ONVIF_IP_camera_management_tool_finally_in_Debian.html">ONVIF IP camera management tool finally in Debian</a></div>
531 <div class="date">24th December 2022</div>
532 <div class="body"><p>Merry Christmas to you all. Here is a small gift to all those with
533 IP cameras following the <a href="https://www.onvif.org/">ONVIF
534 specification</a>. There is finally a nice command line and GUI tool
535 in Debian to manage ONVIF IP cameras. After working with upstream for
536 a few months and sponsoring the upload, I am very happy to report that
537 the <a href="https://tracker.debian.org/libonvif">libonvif package</a>
538 entered Debian Sid last night.</p>
539
540 <p>The package provide a C library to communicate with such cameras, a
541 command line tool to locate and update settings of (like password) the
542 cameras and a GUI tool to configure and control the units as well as
543 preview the video from the camera. Libonvif is available on Both
544 Linux and Windows and the GUI tool uses the Qt library. The main
545 competitors are non-free software, while libonvif is GNU GPL licensed.
546 I am very glad Debian users in the future can control their cameras
547 using a free software system provided by Debian. But the ONVIF world
548 is full of slightly broken firmware, where the cameras pretend to
549 follow the ONVIF specification but fail to set some configuration
550 values or refuse to provide video to more than one recipient at the
551 time, and the onvif project is quite young and might take a while
552 before it completely work with your camera. Upstream seem eager to
553 improve the library, so handling any broken camera might be just <a
554 href="https://github.com/sr99622/libonvif/">a bug report away</a>.</p>
555
556 <p>The package just cleared NEW, and need a new source only upload
557 before it can enter testing. This will happen in the next few
558 days.</p>
559
560 <p>As usual, if you use Bitcoin and want to show your support of my
561 activities, please send Bitcoin donations to my address
562 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
563 </div>
564 <div class="tags">
565
566
567 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="https://people.skolelinux.org/pere/blog/tags/standard">standard</a>, <a href="https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
568
569
570 </div>
571 </div>
572 <div class="padding"></div>
573
574 <div class="entry">
575 <div class="title"><a href="https://people.skolelinux.org/pere/blog/Managing_and_using_ONVIF_IP_cameras_with_Linux.html">Managing and using ONVIF IP cameras with Linux</a></div>
576 <div class="date">19th October 2022</div>
577 <div class="body"><p>Recently I have been looking at how to control and collect data
578 from a handful IP cameras using Linux. I both wanted to change their
579 settings and to make their imagery available via a free software
580 service under my control. Here is a summary of the tools I found.</p>
581
582 <p>First I had to identify the cameras and their protocols. As far as
583 I could tell, they were using some SOAP looking protocol and their
584 internal web server seem to only work with Microsoft Internet Explorer
585 with some proprietary binary plugin, which in these days of course is
586 a security disaster and also made it impossible for me to use the
587 camera web interface. Luckily I discovered that the SOAP looking
588 protocol is actually following <a href="https://www.onvif.org/">the
589 ONVIF specification</a>, which seem to be supported by a lot of IP
590 cameras these days.</p>
591
592 <p>Once the protocol was identified, I was able to find what appear to
593 be the most popular way to configure ONVIF cameras, the free software
594 Windows tool named
595 <a href="https://sourceforge.net/projects/onvifdm/">ONVIF Device
596 Manager</a>. Lacking any other options at the time, I tried
597 unsuccessfully to get it running using Wine, but was missing a dotnet
598 40 library and I found no way around it to run it on Linux.</p>
599
600 <p>The next tool I found to configure the cameras were a non-free Linux Qt
601 client <a href="https://www.lingodigit.com/onvif_nvcdemo.html">ONVIF
602 Device Tool</a>. I did not like its terms of use, so did not spend
603 much time on it.</p>
604
605 <p>To collect the video and make it available in a web interface, I
606 found the Zoneminder tool in Debian. A recent version was able to
607 automatically detect and configure ONVIF devices, so I could use it to
608 set up motion detection in and collection of the camera output. I had
609 initial problems getting the ONVIF autodetection to work, as both
610 Firefox and Chromium <a href="https://bugs.debian.org/1001188">refused
611 the inter-tab communication</a> being used by the Zoneminder web
612 pages, but managed to get konqueror to work. Apparently the "Enhanced
613 Tracking Protection" in Firefox cause the problem. I ended up
614 upgrading to the Bookworm edition of Zoneminder in the process to try
615 to fix the issue, and believe the problem might be solved now.</p>
616
617 <p>In the process I came across the nice Linux GUI tool
618 <a href="https://gitlab.com/caspermeijn/onvifviewer/">ONVIF Viewer</a>
619 allowing me to preview the camera output and validate the login
620 passwords required. Sadly its author has grown tired of maintaining
621 the software, so it might not see any future updates. Which is sad,
622 as the viewer is sightly unstable and the picture tend to lock up.
623 Note, this lockup might be due to limitations in the cameras and not
624 the viewer implementation. I suspect the camera is only able to
625 provide pictures to one client at the time, and the Zoneminder feed
626 might interfere with the GUI viewer. I have
627 <a href="https://bugs.debian.org/1000820">asked for the tool to be
628 included in Debian</a>.</p>
629
630 <p>Finally, I found what appear to be very nice Linux free software
631 replacement for the Windows tool, named
632 <a href="https://github.com/sr99622/libonvif/">libonvif</a>. It
633 provide a C library to talk to ONVIF devices as well as a command line
634 and GUI tool using the library. Using the GUI tool I was able to change
635 the admin passwords and update other settings of the cameras. I have
636 <a href="https://bugs.debian.org/1021980">asked for the package to be
637 included in Debian</a>.</p>
638
639 <p>As usual, if you use Bitcoin and want to show your support of my
640 activities, please send Bitcoin donations to my address
641 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
642
643 <p><strong>Update 2022-10-20</strong>: Since my initial publication of
644 this text, I got several suggestions for more free software Linux
645 tools. There is <a href="https://github.com/quatanium/python-onvif">a
646 ONVIF python library</a> (already
647 <a href="https://bugs.debian.org/824240">requested into Debian</a>) and
648 <a href="https://github.com/FalkTannhaeuser/python-onvif-zeep">a python 3
649 fork</a> using a different SOAP dependency. There is also
650 <a href="https://www.home-assistant.io/integrations/onvif/">support for
651 ONVIF in Home Assistant</a>, and there is an alternative to Zoneminder
652 called <a href="https://www.shinobi.video/">Shinobi</a>. The latter
653 two are not included in Debian either. I have not tested any of these
654 so far.</p>
655 </div>
656 <div class="tags">
657
658
659 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="https://people.skolelinux.org/pere/blog/tags/standard">standard</a>, <a href="https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance</a>.
660
661
662 </div>
663 </div>
664 <div class="padding"></div>
665
666 <div class="entry">
667 <div class="title"><a href="https://people.skolelinux.org/pere/blog/Time_to_translate_the_Bullseye_edition_of_the_Debian_Administrator_s_Handbook.html">Time to translate the Bullseye edition of the Debian Administrator's Handbook</a></div>
668 <div class="date">12th September 2022</div>
669 <div class="body"><p align="center"><img align="center" src="http://people.skolelinux.org/pere/blog/images/2020-10-20-debian-handbook-nb-testprint.jpeg" width="60%"/></p>
670
671 <p>(The picture is of the previous edition.)</p>
672
673 <p>Almost two years after the previous Norwegian BokmƄl translation of
674 the "<a href="https://debian-handbook.info/">The Debian Administrator's
675 Handbook</a>" was published, a new edition is finally being prepared. The
676 english text is updated, and it is time to start working on the
677 translations. Around 37 percent of the strings have been updated, one
678 way or another, and the translations starting from a complete Debian Buster
679 edition now need to bring their translation up from 63% to 100%. The
680 complete book is licensed using a Creative Commons license, and has
681 been published in several languages over the years. The translations
682 are done by volunteers to bring Linux in their native tongue. The
683 last time I checked, it complete text was available in English,
684 Norwegian BokmƄl, German, Indonesian, Brazil Portuguese and Spanish.
685 In addition, work has been started for Arabic (Morocco), Catalan,
686 Chinese (Simplified), Chinese (Traditional), Croatian, Czech, Danish,
687 Dutch, French, Greek, Italian, Japanese, Korean, Persian, Polish,
688 Romanian, Russian, Swedish, Turkish and Vietnamese.</p>
689
690 <p>The translation is conducted on
691 <a href="https://hosted.weblate.org/projects/debian-handbook/">the
692 hosted weblate project page</a>. Prospective translators are
693 recommeded to subscribe to
694 <a href="http://lists.alioth.debian.org/mailman/listinfo/debian-handbook-translators">the
695 translators mailing list</a> and should also check out
696 <a href="https://debian-handbook.info/contribute/">the instructions for
697 contributors</a>.</p>
698
699 <p>I am one of the Norwegian BokmƄl translators of this book, and we
700 have just started. Your contribution is most welcome.</p>
701
702 <p>As usual, if you use Bitcoin and want to show your support of my
703 activities, please send Bitcoin donations to my address
704 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
705 </div>
706 <div class="tags">
707
708
709 Tags: <a href="https://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="https://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook</a>, <a href="https://people.skolelinux.org/pere/blog/tags/english">english</a>.
710
711
712 </div>
713 </div>
714 <div class="padding"></div>
715
716 <p style="text-align: right;"><a href="index.rss"><img src="https://people.skolelinux.org/pere/blog/xml.gif" alt="RSS feed" width="36" height="14" /></a></p>
717 <div id="sidebar">
718
719
720
721 <h2>Archive</h2>
722 <ul>
723
724 <li>2023
725 <ul>
726
727 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/01/">January (3)</a></li>
728
729 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/02/">February (1)</a></li>
730
731 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/04/">April (2)</a></li>
732
733 <li><a href="https://people.skolelinux.org/pere/blog/archive/2023/05/">May (1)</a></li>
734
735 </ul></li>
736
737 <li>2022
738 <ul>
739
740 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/02/">February (1)</a></li>
741
742 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/03/">March (3)</a></li>
743
744 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/04/">April (2)</a></li>
745
746 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/06/">June (2)</a></li>
747
748 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/07/">July (1)</a></li>
749
750 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/09/">September (1)</a></li>
751
752 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/10/">October (1)</a></li>
753
754 <li><a href="https://people.skolelinux.org/pere/blog/archive/2022/12/">December (1)</a></li>
755
756 </ul></li>
757
758 <li>2021
759 <ul>
760
761 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/01/">January (2)</a></li>
762
763 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/02/">February (1)</a></li>
764
765 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/05/">May (1)</a></li>
766
767 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/06/">June (1)</a></li>
768
769 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/07/">July (3)</a></li>
770
771 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/08/">August (1)</a></li>
772
773 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/09/">September (1)</a></li>
774
775 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/10/">October (1)</a></li>
776
777 <li><a href="https://people.skolelinux.org/pere/blog/archive/2021/12/">December (1)</a></li>
778
779 </ul></li>
780
781 <li>2020
782 <ul>
783
784 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/02/">February (2)</a></li>
785
786 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/03/">March (2)</a></li>
787
788 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/04/">April (2)</a></li>
789
790 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/05/">May (3)</a></li>
791
792 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/06/">June (2)</a></li>
793
794 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/07/">July (1)</a></li>
795
796 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/09/">September (1)</a></li>
797
798 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/10/">October (1)</a></li>
799
800 <li><a href="https://people.skolelinux.org/pere/blog/archive/2020/11/">November (1)</a></li>
801
802 </ul></li>
803
804 <li>2019
805 <ul>
806
807 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/01/">January (4)</a></li>
808
809 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/02/">February (3)</a></li>
810
811 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/03/">March (3)</a></li>
812
813 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/05/">May (2)</a></li>
814
815 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/06/">June (5)</a></li>
816
817 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/07/">July (2)</a></li>
818
819 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/08/">August (1)</a></li>
820
821 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/09/">September (1)</a></li>
822
823 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/11/">November (1)</a></li>
824
825 <li><a href="https://people.skolelinux.org/pere/blog/archive/2019/12/">December (4)</a></li>
826
827 </ul></li>
828
829 <li>2018
830 <ul>
831
832 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
833
834 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
835
836 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
837
838 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
839
840 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
841
842 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/07/">July (5)</a></li>
843
844 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/08/">August (3)</a></li>
845
846 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/09/">September (3)</a></li>
847
848 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/10/">October (5)</a></li>
849
850 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/11/">November (2)</a></li>
851
852 <li><a href="https://people.skolelinux.org/pere/blog/archive/2018/12/">December (4)</a></li>
853
854 </ul></li>
855
856 <li>2017
857 <ul>
858
859 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
860
861 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
862
863 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
864
865 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
866
867 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
868
869 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
870
871 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
872
873 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
874
875 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
876
877 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
878
879 <li><a href="https://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
880
881 </ul></li>
882
883 <li>2016
884 <ul>
885
886 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
887
888 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
889
890 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
891
892 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
893
894 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
895
896 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
897
898 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
899
900 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
901
902 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
903
904 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
905
906 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
907
908 <li><a href="https://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
909
910 </ul></li>
911
912 <li>2015
913 <ul>
914
915 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
916
917 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
918
919 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
920
921 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
922
923 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
924
925 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
926
927 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
928
929 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
930
931 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
932
933 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
934
935 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
936
937 <li><a href="https://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
938
939 </ul></li>
940
941 <li>2014
942 <ul>
943
944 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
945
946 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
947
948 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
949
950 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
951
952 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
953
954 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
955
956 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
957
958 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
959
960 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
961
962 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
963
964 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
965
966 <li><a href="https://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
967
968 </ul></li>
969
970 <li>2013
971 <ul>
972
973 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
974
975 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
976
977 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
978
979 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
980
981 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
982
983 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
984
985 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
986
987 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
988
989 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
990
991 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
992
993 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
994
995 <li><a href="https://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
996
997 </ul></li>
998
999 <li>2012
1000 <ul>
1001
1002 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
1003
1004 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
1005
1006 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
1007
1008 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
1009
1010 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
1011
1012 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
1013
1014 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
1015
1016 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
1017
1018 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
1019
1020 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
1021
1022 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
1023
1024 <li><a href="https://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
1025
1026 </ul></li>
1027
1028 <li>2011
1029 <ul>
1030
1031 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
1032
1033 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
1034
1035 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
1036
1037 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
1038
1039 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
1040
1041 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
1042
1043 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
1044
1045 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
1046
1047 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
1048
1049 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
1050
1051 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
1052
1053 <li><a href="https://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
1054
1055 </ul></li>
1056
1057 <li>2010
1058 <ul>
1059
1060 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
1061
1062 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
1063
1064 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
1065
1066 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
1067
1068 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
1069
1070 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
1071
1072 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
1073
1074 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
1075
1076 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
1077
1078 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
1079
1080 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
1081
1082 <li><a href="https://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
1083
1084 </ul></li>
1085
1086 <li>2009
1087 <ul>
1088
1089 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
1090
1091 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
1092
1093 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
1094
1095 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
1096
1097 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
1098
1099 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
1100
1101 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
1102
1103 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
1104
1105 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
1106
1107 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
1108
1109 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
1110
1111 <li><a href="https://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
1112
1113 </ul></li>
1114
1115 <li>2008
1116 <ul>
1117
1118 <li><a href="https://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
1119
1120 <li><a href="https://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
1121
1122 </ul></li>
1123
1124 </ul>
1125
1126
1127
1128 <h2>Tags</h2>
1129 <ul>
1130
1131 <li><a href="https://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (19)</a></li>
1132
1133 <li><a href="https://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
1134
1135 <li><a href="https://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
1136
1137 <li><a href="https://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
1138
1139 <li><a href="https://people.skolelinux.org/pere/blog/tags/betalkontant">betalkontant (9)</a></li>
1140
1141 <li><a href="https://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (12)</a></li>
1142
1143 <li><a href="https://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
1144
1145 <li><a href="https://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
1146
1147 <li><a href="https://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
1148
1149 <li><a href="https://people.skolelinux.org/pere/blog/tags/debian">debian (191)</a></li>
1150
1151 <li><a href="https://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (159)</a></li>
1152
1153 <li><a href="https://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
1154
1155 <li><a href="https://people.skolelinux.org/pere/blog/tags/digistan">digistan (11)</a></li>
1156
1157 <li><a href="https://people.skolelinux.org/pere/blog/tags/dld">dld (18)</a></li>
1158
1159 <li><a href="https://people.skolelinux.org/pere/blog/tags/docbook">docbook (30)</a></li>
1160
1161 <li><a href="https://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
1162
1163 <li><a href="https://people.skolelinux.org/pere/blog/tags/english">english (447)</a></li>
1164
1165 <li><a href="https://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
1166
1167 <li><a href="https://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (14)</a></li>
1168
1169 <li><a href="https://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (34)</a></li>
1170
1171 <li><a href="https://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
1172
1173 <li><a href="https://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (20)</a></li>
1174
1175 <li><a href="https://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
1176
1177 <li><a href="https://people.skolelinux.org/pere/blog/tags/intervju">intervju (43)</a></li>
1178
1179 <li><a href="https://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
1180
1181 <li><a href="https://people.skolelinux.org/pere/blog/tags/kart">kart (23)</a></li>
1182
1183 <li><a href="https://people.skolelinux.org/pere/blog/tags/kodi">kodi (4)</a></li>
1184
1185 <li><a href="https://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
1186
1187 <li><a href="https://people.skolelinux.org/pere/blog/tags/lego">lego (5)</a></li>
1188
1189 <li><a href="https://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
1190
1191 <li><a href="https://people.skolelinux.org/pere/blog/tags/linuxcnc">linuxcnc (4)</a></li>
1192
1193 <li><a href="https://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
1194
1195 <li><a href="https://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
1196
1197 <li><a href="https://people.skolelinux.org/pere/blog/tags/madewithcc">madewithcc (3)</a></li>
1198
1199 <li><a href="https://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
1200
1201 <li><a href="https://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (45)</a></li>
1202
1203 <li><a href="https://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (14)</a></li>
1204
1205 <li><a href="https://people.skolelinux.org/pere/blog/tags/noark5">noark5 (23)</a></li>
1206
1207 <li><a href="https://people.skolelinux.org/pere/blog/tags/norsk">norsk (320)</a></li>
1208
1209 <li><a href="https://people.skolelinux.org/pere/blog/tags/nuug">nuug (198)</a></li>
1210
1211 <li><a href="https://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (40)</a></li>
1212
1213 <li><a href="https://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
1214
1215 <li><a href="https://people.skolelinux.org/pere/blog/tags/opensnitch">opensnitch (3)</a></li>
1216
1217 <li><a href="https://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (75)</a></li>
1218
1219 <li><a href="https://people.skolelinux.org/pere/blog/tags/personvern">personvern (114)</a></li>
1220
1221 <li><a href="https://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
1222
1223 <li><a href="https://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
1224
1225 <li><a href="https://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
1226
1227 <li><a href="https://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
1228
1229 <li><a href="https://people.skolelinux.org/pere/blog/tags/robot">robot (17)</a></li>
1230
1231 <li><a href="https://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
1232
1233 <li><a href="https://people.skolelinux.org/pere/blog/tags/ruter">ruter (7)</a></li>
1234
1235 <li><a href="https://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
1236
1237 <li><a href="https://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (59)</a></li>
1238
1239 <li><a href="https://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
1240
1241 <li><a href="https://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
1242
1243 <li><a href="https://people.skolelinux.org/pere/blog/tags/standard">standard (74)</a></li>
1244
1245 <li><a href="https://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
1246
1247 <li><a href="https://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (14)</a></li>
1248
1249 <li><a href="https://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (64)</a></li>
1250
1251 <li><a href="https://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (5)</a></li>
1252
1253 <li><a href="https://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
1254
1255 <li><a href="https://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
1256
1257 <li><a href="https://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (20)</a></li>
1258
1259 <li><a href="https://people.skolelinux.org/pere/blog/tags/video">video (78)</a></li>
1260
1261 <li><a href="https://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
1262
1263 <li><a href="https://people.skolelinux.org/pere/blog/tags/web">web (42)</a></li>
1264
1265 </ul>
1266
1267
1268 </div>
1269 <p style="text-align: right">
1270 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
1271 </p>
1272
1273 </body>
1274 </html>