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