]> pere.pagekite.me Git - homepage.git/blob - blog/tags/nice free software/index.html
cc210b44313a4e82c517e62235b080d0abc352c8
[homepage.git] / blog / tags / nice free software / 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: Entries Tagged nice free software</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="http://www.hungry.com/~pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://www.hungry.com/~pere/blog/vim.css" />
9 <link rel="alternate" title="RSS Feed" href="nice free software.rss" type="application/rss+xml" />
10 </head>
11 <body>
12 <div class="title">
13 <h1>
14 <a href="http://www.hungry.com/~pere/blog/">Petter Reinholdtsen</a>
15
16 </h1>
17
18 </div>
19
20
21 <h3>Entries tagged "nice free software".</h3>
22
23 <div class="entry">
24 <div class="title">
25 <a href="http://www.hungry.com/~pere/blog/wmbusmeters__parse_data_from_your_utility_meter___nice_free_software.html">wmbusmeters, parse data from your utility meter - nice free software</a>
26 </div>
27 <div class="date">
28 19th May 2023
29 </div>
30 <div class="body">
31 <p>There is a European standard for reading utility meters like water,
32 gas, electricity or heat distribution meters. The
33 <a href="https://en.wikipedia.org/wiki/Meter-Bus">Meter-Bus standard
34 (EN 13757-2, EN 13757-3 and EN 137574)</a> provide a cross vendor way
35 to talk to and collect meter data. I ran into this standard when I
36 wanted to monitor some heat distribution meters, and managed to find
37 free software that could do the job. The meters in question broadcast
38 encrypted messages with meter information via radio, and the hardest
39 part was to track down the encryption keys from the vendor. With this
40 in place I could set up a MQTT gateway to submit the meter data for
41 graphing.</p>
42
43 <p>The free software systems in question,
44 <a href="https://tracker.debian.org/pkg/rtl-wmbus">rtl-wmbus</a> to
45 read the messages from a software defined radio, and
46 <a href="https://tracker.debian.org/pkg/wmbusmeters">wmbusmeters</a> to
47 decrypt and decode the content of the messages, is working very well
48 and allowe me to get frequent updates from my meters. I got in touch
49 with upstream last year to see if there was any interest in publishing
50 the packages via Debian. I was very happy to learn that Fredrik
51 Öhrström volunteered to maintain the packages, and I have since
52 assisted him in getting Debian package build rules in place as well as
53 sponsoring the packages into the Debian archive. Sadly we completed
54 it too late for them to become part of the next stable Debian release
55 (Bookworm). The wmbusmeters package just cleared the NEW queue. It
56 will need some work to fix a built problem, but I expect Fredrik will
57 find a solution soon.</p>
58
59 <p>If you got a infrastructure meter supporting the Meter Bus
60 standard, I strongly recommend having a look at these nice
61 packages.</p>
62
63 <p>As usual, if you use Bitcoin and want to show your support of my
64 activities, please send Bitcoin donations to my address
65 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
66
67 </div>
68 <div class="tags">
69
70
71 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
72
73
74 </div>
75 </div>
76 <div class="padding"></div>
77
78 <div class="entry">
79 <div class="title">
80 <a href="http://www.hungry.com/~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>
81 </div>
82 <div class="date">
83 7th April 2023
84 </div>
85 <div class="body">
86 <p>Today I finally found time to track down a useful radio frequency
87 scanner for my software defined radio. Just for fun I tried to locate
88 the radios used in the areas, and a good start would be to scan all
89 the frequencies to see what is in use. I've tried to find a useful
90 program earlier, but ran out of time before I managed to find a useful
91 tool. This time I was more successful, and after a few false leads I
92 found a description of
93 <a href="https://www.kali.org/tools/rtlsdr-scanner/">rtlsdr-scanner
94 over at the Kali site</a>, and was able to track down
95 <a href="https://gitlab.com/kalilinux/packages/rtlsdr-scanner.git">the
96 Kali package git repository</a> to build a deb package for the
97 scanner. Sadly the package is missing from the Debian project itself,
98 at least in Debian Bullseye. Two runtime dependencies,
99 <a href="https://gitlab.com/kalilinux/packages/python-visvis.git">python-visvis</a>
100 and
101 <a href="https://gitlab.com/kalilinux/packages/python-rtlsdr.git">python-rtlsdr</a>
102 had to be built and installed separately. Luckily '<tt>gbp
103 buildpackage</tt>' handled them just fine and no further packages had
104 to be manually built. The end result worked out of the box after
105 installation.</p>
106
107 <p>My initial scans for FM channels worked just fine, so I knew the
108 scanner was functioning. But when I tried to scan every frequency
109 from 100 to 1000 MHz, the program stopped unexpectedly near the
110 completion. After some debugging I discovered USB software radio I
111 used rejected frequencies above 948 MHz, triggering a unreported
112 exception breaking the scan. Changing the scan to end at 957 worked
113 better. I similarly found the lower limit to be around 15, and ended
114 up with the following full scan:</p>
115
116 <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>
117
118 <p>Saving the scan did not work, but exporting it as a CSV file worked
119 just fine. I ended up with around 477k CVS lines with dB level for
120 the given frequency.</p>
121
122 <p>The save failure seem to be a missing UTF-8 encoding issue in the
123 python code. Will see if I can find time to send a patch
124 <a href="https://github.com/CdeMills/RTLSDR-Scanner/">upstream</a>
125 later to fix this exception:</p>
126
127 <pre>
128 Traceback (most recent call last):
129 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/main_window.py", line 485, in __on_save
130 save_plot(fullName, self.scanInfo, self.spectrum, self.locations)
131 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/file.py", line 408, in save_plot
132 handle.write(json.dumps(data, indent=4))
133 TypeError: a bytes-like object is required, not 'str'
134 Traceback (most recent call last):
135 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/main_window.py", line 485, in __on_save
136 save_plot(fullName, self.scanInfo, self.spectrum, self.locations)
137 File "/usr/lib/python3/dist-packages/rtlsdr_scanner/file.py", line 408, in save_plot
138 handle.write(json.dumps(data, indent=4))
139 TypeError: a bytes-like object is required, not 'str'
140 </pre>
141
142 <p>As usual, if you use Bitcoin and want to show your support of my
143 activities, please send Bitcoin donations to my address
144 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
145
146 </div>
147 <div class="tags">
148
149
150 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
151
152
153 </div>
154 </div>
155 <div class="padding"></div>
156
157 <div class="entry">
158 <div class="title">
159 <a href="http://www.hungry.com/~pere/blog/GnuCOBOL__a_free_platform_to_learn_and_use_COBOL___nice_free_software.html">GnuCOBOL, a free platform to learn and use COBOL - nice free software</a>
160 </div>
161 <div class="date">
162 29th April 2020
163 </div>
164 <div class="body">
165 <p>The curiosity got the better of me when
166 <a href="https://developers.slashdot.org/story/20/04/06/1424246/new-jersey-desperately-needs-cobol-programmers">Slashdot
167 reported</a> that New Jersey was desperately looking for
168 <a href="https://en.wikipedia.org/wiki/COBOL">COBOL</a> programmers,
169 and a few days later it was reported that
170 <a href="https://onezero.medium.com/ibm-rallies-cobol-engineers-to-save-overloaded-unemployment-systems-eeadf13eddce">IBM
171 tried to locate COBOL programmers</a>.</p>
172
173 <p>I thus decided to have a look at free software alternatives to
174 learn COBOL, and had the pleasure to find
175 <a href="https://sourceforge.net/projects/open-cobol/">GnuCOBOL</a> was
176 already <a href="https://tracker.debian.org/pkg/gnucobol">in
177 Debian</a>. It used to be called Open Cobol, and is a "compiler"
178 transforming COBOL code to C or C++ before giving it to GCC or Visual
179 Studio to build binaries.</p>
180
181 <p>I managed to get in touch with upstream, and was impressed with the
182 quick response, and also was happy to see a new Debian maintainer
183 taking over when the original one recently asked to be replaced. A
184 new Debian upload was done as recently as yesterday.</p>
185
186 <p>Using the Debian package, I was able to follow a simple COBOL
187 introduction and make and run simple COBOL programs. It was fun to
188 learn a new programming language. If you want to test for yourself,
189 <a href="https://en.wikipedia.org/wiki/GnuCOBOL">the GnuCOBOL Wikipedia
190 page</a> have a few simple examples to get you startet.</p>
191
192 <p>As I do not have much experience with COBOL, I do not know how
193 standard compliant it is, but it claim to pass most tests from COBOL
194 test suite, which sound good to me. It is nice to know it is possible
195 to learn COBOL using software without any usage restrictions, and I am
196 very happy such nice free software project as this is available. If
197 you as me is curious about COBOL, check it out.</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
203 </div>
204 <div class="tags">
205
206
207 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
208
209
210 </div>
211 </div>
212 <div class="padding"></div>
213
214 <div class="entry">
215 <div class="title">
216 <a href="http://www.hungry.com/~pere/blog/PlantUML_for_text_based_UML_diagram_modelling___nice_free_software.html">PlantUML for text based UML diagram modelling - nice free software</a>
217 </div>
218 <div class="date">
219 25th March 2019
220 </div>
221 <div class="body">
222 <p>As part of my involvement with the
223 <a href="https://gitlab.com/OsloMet-ABI/nikita-noark5-core/">Nikita
224 Noark 5 core project</a>, I have been proposing improvements to the
225 API specification created by <a href="https://www.arkivverket.no/">The
226 National Archives of Norway</a> and helped migrating the text from a
227 version control system unfriendly binary format (docx) to Markdown in
228 git. Combined with the migration to a public git repository (on
229 github), this has made it possible for anyone to suggest improvement
230 to the text.</p>
231
232 <p>The specification is filled with UML diagrams. I believe the
233 original diagrams were modelled using Sparx Systems Enterprise
234 Architect, and exported as EMF files for import into docx. This
235 approach make it very hard to track changes using a version control
236 system. To improve the situation I have been looking for a good text
237 based UML format with associated command line free software tools on
238 Linux and Windows, to allow anyone to send in corrections to the UML
239 diagrams in the specification. The tool must be text based to work
240 with git, and command line to be able to run it automatically to
241 generate the diagram images. Finally, it must be free software to
242 allow anyone, even those that can not accept a non-free software
243 license, to contribute.</p>
244
245 <p>I did not know much about free software UML modelling tools when I
246 started. I have used dia and inkscape for simple modelling in the
247 past, but neither are available on Windows, as far as I could tell. I
248 came across a nice
249 <a href="https://modeling-languages.com/text-uml-tools-complete-list/">list
250 of text mode uml tools</a>, and tested out a few of the tools listed
251 there. <a href="http://plantuml.com/">The PlantUML tool</a> seemed
252 most promising. After verifying that the packages
253 <a href="https://tracker.debian.org/pkg/plantuml">is available in
254 Debian</a> and found <a href="https://github.com/plantuml/plantuml">its
255 Java source</a> under a GPL license on github, I set out to test if it
256 could represent the diagrams we needed, ie the ones currently in
257 <a href="https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/">the
258 Noark 5 Tjenestegrensesnitt specification</a>. I am happy to report
259 that it could represent them, even thought it have a few warts here
260 and there.</p>
261
262 <p>After a few days of modelling I completed the task this weekend. A
263 temporary link to the complete set of diagrams (original and from
264 PlantUML) is available in
265 <a href="https://github.com/arkivverket/noark5-tjenestegrensesnitt-standard/issues/76">the
266 github issue discussing the need for a text based UML format</a>, but
267 please note I lack a sensible tool to convert EMF files to PNGs, so
268 the "original" rendering is not as good as the original was in the
269 publised PDF.</p>
270
271 <p>Here is an example UML diagram, showing the core classes for
272 keeping metadata about archived documents:</p>
273
274 <pre>
275 @startuml
276 skinparam classAttributeIconSize 0
277
278 !include media/uml-class-arkivskaper.iuml
279 !include media/uml-class-arkiv.iuml
280 !include media/uml-class-klassifikasjonssystem.iuml
281 !include media/uml-class-klasse.iuml
282 !include media/uml-class-arkivdel.iuml
283 !include media/uml-class-mappe.iuml
284 !include media/uml-class-merknad.iuml
285 !include media/uml-class-registrering.iuml
286 !include media/uml-class-basisregistrering.iuml
287 !include media/uml-class-dokumentbeskrivelse.iuml
288 !include media/uml-class-dokumentobjekt.iuml
289 !include media/uml-class-konvertering.iuml
290 !include media/uml-datatype-elektronisksignatur.iuml
291
292 Arkivstruktur.Arkivskaper "+arkivskaper 1..*" <-o "+arkiv 0..*" Arkivstruktur.Arkiv
293 Arkivstruktur.Arkiv o--> "+underarkiv 0..*" Arkivstruktur.Arkiv
294 Arkivstruktur.Arkiv "+arkiv 1" o--> "+arkivdel 0..*" Arkivstruktur.Arkivdel
295 Arkivstruktur.Klassifikasjonssystem "+klassifikasjonssystem [0..1]" <--o "+arkivdel 1..*" Arkivstruktur.Arkivdel
296 Arkivstruktur.Klassifikasjonssystem "+klassifikasjonssystem [0..1]" o--> "+klasse 0..*" Arkivstruktur.Klasse
297 Arkivstruktur.Arkivdel "+arkivdel 0..1" o--> "+mappe 0..*" Arkivstruktur.Mappe
298 Arkivstruktur.Arkivdel "+arkivdel 0..1" o--> "+registrering 0..*" Arkivstruktur.Registrering
299 Arkivstruktur.Klasse "+klasse 0..1" o--> "+mappe 0..*" Arkivstruktur.Mappe
300 Arkivstruktur.Klasse "+klasse 0..1" o--> "+registrering 0..*" Arkivstruktur.Registrering
301 Arkivstruktur.Mappe --> "+undermappe 0..*" Arkivstruktur.Mappe
302 Arkivstruktur.Mappe "+mappe 0..1" o--> "+registrering 0..*" Arkivstruktur.Registrering
303 Arkivstruktur.Merknad "+merknad 0..*" <--* Arkivstruktur.Mappe
304 Arkivstruktur.Merknad "+merknad 0..*" <--* Arkivstruktur.Dokumentbeskrivelse
305 Arkivstruktur.Basisregistrering -|> Arkivstruktur.Registrering
306 Arkivstruktur.Merknad "+merknad 0..*" <--* Arkivstruktur.Basisregistrering
307 Arkivstruktur.Registrering "+registrering 1..*" o--> "+dokumentbeskrivelse 0..*" Arkivstruktur.Dokumentbeskrivelse
308 Arkivstruktur.Dokumentbeskrivelse "+dokumentbeskrivelse 1" o-> "+dokumentobjekt 0..*" Arkivstruktur.Dokumentobjekt
309 Arkivstruktur.Dokumentobjekt *-> "+konvertering 0..*" Arkivstruktur.Konvertering
310 Arkivstruktur.ElektroniskSignatur -[hidden]-> Arkivstruktur.Dokumentobjekt
311 @enduml
312 </pre>
313
314 <p><a href="http://plantuml.com/class-diagram">The format</a> is quite
315 compact, with little redundant information. The text expresses
316 entities and relations, and there is little layout related fluff. One
317 can reuse content by using include files, allowing for consistent
318 naming across several diagrams. The include files can be standalone
319 PlantUML too. Here is the content of
320 <tt>media/uml-class-arkivskaper.iuml</tt>:</p>
321
322 <pre>
323 @startuml
324 class Arkivstruktur.Arkivskaper <Arkivenhet> {
325 +arkivskaperID : string
326 +arkivskaperNavn : string
327 +beskrivelse : string [0..1]
328 }
329 @enduml
330 </pre>
331
332 <p>This is what the complete diagram for the PlantUML notation above
333 look like:</p>
334
335 <p><img width="80%" src="https://people.skolelinux.org/pere/blog/images/2019-03-25-noark5-plantuml-diagrameksempel.png"></p>
336
337 <p>A cool feature of PlantUML is that the generated PNG files include
338 the entire original source diagram as text. The source (with include
339 statements expanded) can be extracted using for example
340 <tt>exiftool</tt>. Another cool feature is that parts of the entities
341 can be hidden after inclusion. This allow to use include files with
342 all attributes listed, even for UML diagrams that should not list any
343 attributes.</p>
344
345 <p>The diagram also show some of the warts. Some times the layout
346 engine place text labels on top of each other, and some times it place
347 the class boxes too close to each other, not leaving room for the
348 labels on the relationship arrows. The former can be worked around by
349 placing extra newlines in the labes (ie "\n"). I did not do it here
350 to be able to demonstrate the issue. I have not found a good way
351 around the latter, so I normally try to reduce the problem by changing
352 from vertical to horizontal links to improve the layout.</p>
353
354 <p>All in all, I am quite happy with PlantUML, and very impressed with
355 how quickly its lead developer responds to questions. So far I got an
356 answer to my questions in a few hours when I send an email. I
357 definitely recommend looking at PlantUML if you need to make UML
358 diagrams. Note, PlantUML can draw a lot more than class relations.
359 Check out the documention for a complete list. :)</p>
360
361 <p>As usual, if you use Bitcoin and want to show your support of my
362 activities, please send Bitcoin donations to my address
363 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
364
365 </div>
366 <div class="tags">
367
368
369 Tags: <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>, <a href="http://www.hungry.com/~pere/blog/tags/noark5">noark5</a>, <a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug</a>, <a href="http://www.hungry.com/~pere/blog/tags/standard">standard</a>.
370
371
372 </div>
373 </div>
374 <div class="padding"></div>
375
376 <div class="entry">
377 <div class="title">
378 <a href="http://www.hungry.com/~pere/blog/Measuring_the_speaker_frequency_response_using_the_AUDMES_free_software_GUI___nice_free_software.html">Measuring the speaker frequency response using the AUDMES free software GUI - nice free software</a>
379 </div>
380 <div class="date">
381 22nd October 2018
382 </div>
383 <div class="body">
384 <p><img src="https://people.skolelinux.org/pere/blog/images/2018-10-22-audmes-measure-speakers.png" align="right" width="40%"/></p>
385
386 <p>My current home stereo is a patchwork of various pieces I got on
387 flee markeds over the years. It is amazing what kind of equipment
388 show up there. I've been wondering for a while if it was possible to
389 measure how well this equipment is working together, and decided to
390 see how far I could get using free software. After trawling the web I
391 came across an article from DIY Audio and Video on
392 <a href="https://www.diyaudioandvideo.com/Tutorial/SpeakerResponseTesting/">Speaker
393 Testing and Analysis</a> describing how to test speakers, and it listing
394 several software options, among them
395 <a href="https://sourceforge.net/projects/audmes/">AUDio MEasurement
396 System (AUDMES)</a>. It is the only free software system I could find
397 focusing on measuring speakers and audio frequency response. In the
398 process I also found an interesting article from NOVO on
399 <a href="http://novo.press/understanding-speaker-specifications-and-frequency-response/">Understanding
400 Speaker Specifications and Frequency Response</a> and an article from
401 ecoustics on
402 <a href="https://www.ecoustics.com/articles/understanding-speaker-frequency-response/">Understanding
403 Speaker Frequency Response</a>, with a lot of information on what to
404 look for and how to interpret the graphs. Armed with this knowledge,
405 I set out to measure the state of my speakers.</p>
406
407 <p>The first hurdle was that AUDMES hadn't seen a commit for 10 years
408 and did not build with current compilers and libraries. I got in
409 touch with its author, who no longer was spending time on the program
410 but gave me write access to the subversion repository on Sourceforge.
411 The end result is that now the code build on Linux and is capable of
412 saving and loading the collected frequency response data in CSV
413 format. The application is quite nice and flexible, and I was able to
414 select the input and output audio interfaces independently. This made
415 it possible to use a USB mixer as the input source, while sending
416 output via my laptop headphone connection. I lacked the hardware and
417 cabling to figure out a different way to get independent cabling to
418 speakers and microphone.</p>
419
420 <p>Using this setup I could see how a large range of high frequencies
421 apparently were not making it out of my speakers. The picture show
422 the frequency response measurement of one of the speakers. Note the
423 frequency lines seem to be slightly misaligned, compared to the CSV
424 output from the program. I can not hear several of these are high
425 frequencies, according to measurement from
426 <a href="http://freehearingtestsoftware.com">Free Hearing Test
427 Software</a>, an freeware system to measure your hearing (still
428 looking for a free software alternative), so I do not know if they are
429 coming out out the speakers. I thus do not quite know how to figure
430 out if the missing frequencies is a problem with the microphone, the
431 amplifier or the speakers, but I managed to rule out the audio card in my
432 PC by measuring my Bose noise canceling headset using its own
433 microphone. This setup was able to see the high frequency tones, so
434 the problem with my stereo had to be in the amplifier or speakers.</p>
435
436 <p>Anyway, to try to role out one factor I ended up picking up a new
437 set of speakers at a flee marked, and these work a lot better than the
438 old speakers, so I guess the microphone and amplifier is OK. If you
439 need to measure your own speakers, check out AUDMES. If more people
440 get involved, perhaps the project could become good enough to
441 <a href="https://bugs.debian.org/910876">include in Debian</a>? And if
442 you know of some other free software to measure speakers and amplifier
443 performance, please let me know. I am aware of the freeware option
444 <a href="https://www.roomeqwizard.com/">REW</a>, but I want something
445 that can be developed also when the vendor looses interest.</p>
446
447 <p>As usual, if you use Bitcoin and want to show your support of my
448 activities, please send Bitcoin donations to my address
449 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
450
451 </div>
452 <div class="tags">
453
454
455 Tags: <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
456
457
458 </div>
459 </div>
460 <div class="padding"></div>
461
462 <div class="entry">
463 <div class="title">
464 <a href="http://www.hungry.com/~pere/blog/youtube_dl_for_nedlasting_fra_NRK_med_undertekster___nice_free_software.html">youtube-dl for nedlasting fra NRK med undertekster - nice free software</a>
465 </div>
466 <div class="date">
467 28th April 2018
468 </div>
469 <div class="body">
470 <p>I <a href="https://no.wikipedia.org/wiki/VHS">VHS-kassettenes</a>
471 tid var det rett frem å ta vare på et TV-program en ønsket å kunne se
472 senere, uten å være avhengig av at programmet ble sendt på nytt.
473 Kanskje ønsket en å se programmet på hytten der det ikke var
474 TV-signal, eller av andre grunner ha det tilgjengelig for fremtidig
475 fornøyelse. Dette er blitt vanskeligere med introduksjon av
476 digital-TV og webstreaming, der opptak til harddisk er utenfor de
477 flestes kontroll hvis de bruker ufri programvare og bokser kontrollert
478 av andre. Men for NRK her i Norge, finnes det heldigvis flere fri
479 programvare-alternativer, som jeg har
480 <a href="https://people.skolelinux.org/pere/blog/Hvordan_enkelt_laste_ned_filmer_fra_NRK.html">skrevet</a>
481 <a href="https://people.skolelinux.org/pere/blog/Hvordan_enkelt_laste_ned_filmer_fra_NRK_med_den__nye__l_sningen.html">om</a>
482 <a href="https://people.skolelinux.org/pere/blog/Nedlasting_fra_NRK__som_Matroska_med_undertekster.html">før</a>.
483 Så lenge kilden for nedlastingen er lovlig lagt ut på nett (hvilket
484 jeg antar NRK gjør), så er slik lagring til privat bruk også lovlig i
485 Norge.</p>
486
487 <p>Sist jeg så på saken, i 2016, nevnte jeg at
488 <a href="https://rg3.github.com/youtube-dl/">youtube-dl</a> ikke kunne
489 bake undertekster fra NRK inn i videofilene, og at jeg derfor
490 foretrakk andre alternativer. Nylig oppdaget jeg at dette har endret
491 seg. Fordelen med youtube-dl er at den er tilgjengelig direkte fra
492 Linux-distribusjoner som <a href="https://www.debian.org/">Debian</a>
493 og <a href="https://www.ubuntu.com/">Ubuntu</a>, slik at en slipper å
494 finne ut selv hvordan en skal få dem til å virke.</p>
495
496 <p>For å laste ned et NRK-innslag med undertekster, og få den norske
497 underteksten pakket inn i videofilen, så kan følgende kommando
498 brukes:</p>
499
500 <p><pre>
501 youtube-dl --write-sub --sub-format ttml \
502 --convert-subtitles srt --embed-subs \
503 https://tv.nrk.no/serie/ramm-ferdig-gaa/MUHU11000316/27-04-2018
504 </pre></p>
505
506 <p>URL-eksemplet er dagens toppsak på tv.nrk.no. Resultatet er en
507 MP4-fil med filmen og undertekster som kan spilles av med VLC. Merk
508 at VLC ikke viser frem undertekster før du aktiverer dem. For å gjøre
509 det, høyreklikk med musa i fremviservinduet, velg menyvalget for
510 undertekst og så norsk språk. Jeg testet også '--write-auto-sub',
511 men det kommandolinjeargumentet ser ikke ut til å fungere, så jeg
512 endte opp med settet med argumentlisten over, som jeg fant i en
513 feilrapport i youtube-dl-prosjektets samling over feilrapporter.</p>
514
515 <p>Denne støtten i youtube-dl gjør det svært enkelt å lagre
516 NRK-innslag, det være seg nyheter, filmer, serier eller dokumentater,
517 for å ha dem tilgjengelig for fremtidig referanse og bruk, uavhengig
518 av hvor lenge innslagene ligger tilgjengelig hos NRK. Så får det ikke
519 hjelpe at NRKs jurister mener at det er
520 <a href="https://people.skolelinux.org/pere/blog/Best___ikke_fortelle_noen_at_streaming_er_nedlasting___.html">vesensforskjellig
521 å legge tilgjengelig for nedlasting og for streaming</a>, når det rent
522 teknisk er samme sak.</p>
523
524 <p>Programmet youtube-dl støtter også en rekke andre nettsteder, se
525 prosjektoversikten for
526 <a href="http://rg3.github.io/youtube-dl/supportedsites.html">en
527 komplett liste</a>.</p>
528
529 </div>
530 <div class="tags">
531
532
533 Tags: <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>, <a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>, <a href="http://www.hungry.com/~pere/blog/tags/web">web</a>.
534
535
536 </div>
537 </div>
538 <div class="padding"></div>
539
540 <div class="entry">
541 <div class="title">
542 <a href="http://www.hungry.com/~pere/blog/Oolite__a_life_in_space_as_vagabond_and_mercenary___nice_free_software.html">Oolite, a life in space as vagabond and mercenary - nice free software</a>
543 </div>
544 <div class="date">
545 11th December 2016
546 </div>
547 <div class="body">
548 <p align="center"><img width="70%" src="https://people.skolelinux.org/pere/blog/images/2016-12-11-nice-oolite.png"/></p>
549
550 <p>In my early years, I played
551 <a href="http://wiki.alioth.net/index.php/Classic_Elite">the epic game
552 Elite</a> on my PC. I spent many months trading and fighting in
553 space, and reached the 'elite' fighting status before I moved on. The
554 original Elite game was available on Commodore 64 and the IBM PC
555 edition I played had a 64 KB executable. I am still impressed today
556 that the authors managed to squeeze both a 3D engine and details about
557 more than 2000 planet systems across 7 galaxies into a binary so
558 small.</p>
559
560 <p>I have known about <a href="http://www.oolite.org/">the free
561 software game Oolite inspired by Elite</a> for a while, but did not
562 really have time to test it properly until a few days ago. It was
563 great to discover that my old knowledge about trading routes were
564 still valid. But my fighting and flying abilities were gone, so I had
565 to retrain to be able to dock on a space station. And I am still not
566 able to make much resistance when I am attacked by pirates, so I
567 bougth and mounted the most powerful laser in the rear to be able to
568 put up at least some resistance while fleeing for my life. :)</p>
569
570 <p>When playing Elite in the late eighties, I had to discover
571 everything on my own, and I had long lists of prices seen on different
572 planets to be able to decide where to trade what. This time I had the
573 advantages of the
574 <a href="http://wiki.alioth.net/index.php/Main_Page">Elite wiki</a>,
575 where information about each planet is easily available with common
576 price ranges and suggested trading routes. This improved my ability
577 to earn money and I have been able to earn enough to buy a lot of
578 useful equipent in a few days. I believe I originally played for
579 months before I could get a docking computer, while now I could get it
580 after less then a week.</p>
581
582 <p>If you like science fiction and dreamed of a life as a vagabond in
583 space, you should try out Oolite. It is available for Linux, MacOSX
584 and Windows, and is included in Debian and derivatives since 2011.</p>
585
586 <p>As usual, if you use Bitcoin and want to show your support of my
587 activities, please send Bitcoin donations to my address
588 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
589
590 </div>
591 <div class="tags">
592
593
594 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
595
596
597 </div>
598 </div>
599 <div class="padding"></div>
600
601 <div class="entry">
602 <div class="title">
603 <a href="http://www.hungry.com/~pere/blog/Coz_can_help_you_find_bottlenecks_in_multi_threaded_software___nice_free_software.html">Coz can help you find bottlenecks in multi-threaded software - nice free software</a>
604 </div>
605 <div class="date">
606 11th August 2016
607 </div>
608 <div class="body">
609 <p>This summer, I read a great article
610 "<a href="https://www.usenix.org/publications/login/summer2016/curtsinger">coz:
611 This Is the Profiler You're Looking For</a>" in USENIX ;login: about
612 how to profile multi-threaded programs. It presented a system for
613 profiling software by running experiences in the running program,
614 testing how run time performance is affected by "speeding up" parts of
615 the code to various degrees compared to a normal run. It does this by
616 slowing down parallel threads while the "faster up" code is running
617 and measure how this affect processing time. The processing time is
618 measured using probes inserted into the code, either using progress
619 counters (COZ_PROGRESS) or as latency meters (COZ_BEGIN/COZ_END). It
620 can also measure unmodified code by measuring complete the program
621 runtime and running the program several times instead.</p>
622
623 <p>The project and presentation was so inspiring that I would like to
624 get the system into Debian. I
625 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=830708">created
626 a WNPP request for it</a> and contacted upstream to try to make the
627 system ready for Debian by sending patches. The build process need to
628 be changed a bit to avoid running 'git clone' to get dependencies, and
629 to include the JavaScript web page used to visualize the collected
630 profiling information included in the source package.
631 But I expect that should work out fairly soon.</p>
632
633 <p>The way the system work is fairly simple. To run an coz experiment
634 on a binary with debug symbols available, start the program like this:
635
636 <p><blockquote><pre>
637 coz run --- program-to-run
638 </pre></blockquote></p>
639
640 <p>This will create a text file profile.coz with the instrumentation
641 information. To show what part of the code affect the performance
642 most, use a web browser and either point it to
643 <a href="http://plasma-umass.github.io/coz/">http://plasma-umass.github.io/coz/</a>
644 or use the copy from git (in the gh-pages branch). Check out this web
645 site to have a look at several example profiling runs and get an idea what the end result from the profile runs look like. To make the
646 profiling more useful you include &lt;coz.h&gt; and insert the
647 COZ_PROGRESS or COZ_BEGIN and COZ_END at appropriate places in the
648 code, rebuild and run the profiler. This allow coz to do more
649 targeted experiments.</p>
650
651 <p>A video published by ACM
652 <a href="https://www.youtube.com/watch?v=jE0V-p1odPg">presenting the
653 Coz profiler</a> is available from Youtube. There is also a paper
654 from the 25th Symposium on Operating Systems Principles available
655 titled
656 <a href="https://www.usenix.org/conference/atc16/technical-sessions/presentation/curtsinger">Coz:
657 finding code that counts with causal profiling</a>.</p>
658
659 <p><a href="https://github.com/plasma-umass/coz">The source code</a>
660 for Coz is available from github. It will only build with clang
661 because it uses a
662 <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55606">C++
663 feature missing in GCC</a>, but I've submitted
664 <a href="https://github.com/plasma-umass/coz/pull/67">a patch to solve
665 it</a> and hope it will be included in the upstream source soon.</p>
666
667 <p>Please get in touch if you, like me, would like to see this piece
668 of software in Debian. I would very much like some help with the
669 packaging effort, as I lack the in depth knowledge on how to package
670 C++ libraries.</p>
671
672 </div>
673 <div class="tags">
674
675
676 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
677
678
679 </div>
680 </div>
681 <div class="padding"></div>
682
683 <div class="entry">
684 <div class="title">
685 <a href="http://www.hungry.com/~pere/blog/Creepy__visualise_geotagged_social_media_information___nice_free_software.html">Creepy, visualise geotagged social media information - nice free software</a>
686 </div>
687 <div class="date">
688 24th January 2016
689 </div>
690 <div class="body">
691 <p>Most people seem not to realise that every time they walk around
692 with the computerised radio beacon known as a mobile phone their
693 position is tracked by the phone company and often stored for a long
694 time (like every time a SMS is received or sent). And if their
695 computerised radio beacon is capable of running programs (often called
696 mobile apps) downloaded from the Internet, these programs are often
697 also capable of tracking their location (if the app requested access
698 during installation). And when these programs send out information to
699 central collection points, the location is often included, unless
700 extra care is taken to not send the location. The provided
701 information is used by several entities, for good and bad (what is
702 good and bad, depend on your point of view). What is certain, is that
703 the private sphere and the right to free movement is challenged and
704 perhaps even eradicated for those announcing their location this way,
705 when they share their whereabouts with private and public
706 entities.</p>
707
708 <p align="center"><img width="70%" src="https://people.skolelinux.org/pere/blog/images/2016-01-24-nice-creepy-desktop-window.png"></p>
709
710 <p>The phone company logs provide a register of locations to check out
711 when one want to figure out what the tracked person was doing. It is
712 unavailable for most of us, but provided to selected government
713 officials, company staff, those illegally buying information from
714 unfaithful servants and crackers stealing the information. But the
715 public information can be collected and analysed, and a free software
716 tool to do so is called
717 <a href="http://www.geocreepy.com/">Creepy or Cree.py</a>. I
718 discovered it when I read
719 <a href="http://www.aftenposten.no/kultur/Slik-kan-du-bli-overvaket-pa-Twitter-og-Instagram-uten-a-ane-det-7787884.html">an
720 article about Creepy</a> in the Norwegian newspaper Aftenposten i
721 November 2014, and decided to check if it was available in Debian.
722 The python program was in Debian, but
723 <a href="https://tracker.debian.org/pkg/creepy">the version in
724 Debian</a> was completely broken and practically unmaintained. I
725 uploaded a new version which did not work quite right, but did not
726 have time to fix it then. This Christmas I decided to finally try to
727 get Creepy operational in Debian. Now a fixed version is available in
728 Debian unstable and testing, and almost all Debian specific patches
729 are now included
730 <a href="https://github.com/jkakavas/creepy">upstream</a>.</p>
731
732 <p>The Creepy program visualises geolocation information fetched from
733 Twitter, Instagram, Flickr and Google+, and allow one to get a
734 complete picture of every social media message posted recently in a
735 given area, or track the movement of a given individual across all
736 these services. Earlier it was possible to use the search API of at
737 least some of these services without identifying oneself, but these
738 days it is impossible. This mean that to use Creepy, you need to
739 configure it to log in as yourself on these services, and provide
740 information to them about your search interests. This should be taken
741 into account when using Creepy, as it will also share information
742 about yourself with the services.</p>
743
744 <p>The picture above show the twitter messages sent from (or at least
745 geotagged with a position from) the city centre of Oslo, the capital
746 of Norway. One useful way to use Creepy is to first look at
747 information tagged with an area of interest, and next look at all the
748 information provided by one or more individuals who was in the area.
749 I tested it by checking out which celebrity provide their location in
750 twitter messages by checkout out who sent twitter messages near a
751 Norwegian TV station, and next could track their position over time,
752 making it possible to locate their home and work place, among other
753 things. A similar technique have been
754 <a href="http://www.buzzfeed.com/maxseddon/does-this-soldiers-instagram-account-prove-russia-is-covertl">used
755 to locate Russian soldiers in Ukraine</a>, and it is both a powerful
756 tool to discover lying governments, and a useful tool to help people
757 understand the value of the private information they provide to the
758 public.</p>
759
760 <p>The package is not trivial to backport to Debian Stable/Jessie, as
761 it depend on several python modules currently missing in Jessie (at
762 least python-instagram, python-flickrapi and
763 python-requests-toolbelt).</p>
764
765 <p>(I have uploaded
766 <a href="https://screenshots.debian.net/package/creepy">the image to
767 screenshots.debian.net</a> and licensed it under the same terms as the
768 Creepy program in Debian.)</p>
769
770 </div>
771 <div class="tags">
772
773
774 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
775
776
777 </div>
778 </div>
779 <div class="padding"></div>
780
781 <div class="entry">
782 <div class="title">
783 <a href="http://www.hungry.com/~pere/blog/OpenALPR__find_car_license_plates_in_video_streams___nice_free_software.html">OpenALPR, find car license plates in video streams - nice free software</a>
784 </div>
785 <div class="date">
786 23rd December 2015
787 </div>
788 <div class="body">
789 <p>When I was a kid, we used to collect "car numbers", as we used to
790 call the car license plate numbers in those days. I would write the
791 numbers down in my little book and compare notes with the other kids
792 to see how many region codes we had seen and if we had seen some
793 exotic or special region codes and numbers. It was a fun game to pass
794 time, as we kids have plenty of it.</p>
795
796 <p>A few days I came across
797 <a href="https://github.com/openalpr/openalpr">the OpenALPR
798 project</a>, a free software project to automatically discover and
799 report license plates in images and video streams, and provide the
800 "car numbers" in a machine readable format. I've been looking for
801 such system for a while now, because I believe it is a bad idea that the
802 <a href="https://en.wikipedia.org/wiki/Automatic_number_plate_recognition">automatic
803 number plate recognition</a> tool only is available in the hands of
804 the powerful, and want it to be available also for the powerless to
805 even the score when it comes to surveillance and sousveillance. I
806 discovered the developer
807 <a href="https://bugs.debian.org/747509">wanted to get the tool into
808 Debian</a>, and as I too wanted it to be in Debian, I volunteered to
809 help him get it into shape to get the package uploaded into the Debian
810 archive.</p>
811
812 <p>Today we finally managed to get the package into shape and uploaded
813 it into Debian, where it currently
814 <a href="https://ftp-master.debian.org//new/openalpr_2.2.1-1.html">waits
815 in the NEW queue</a> for review by the Debian ftpmasters.</p>
816
817 <p>I guess you are wondering why on earth such tool would be useful
818 for the common folks, ie those not running a large government
819 surveillance system? Well, I plan to put it in a computer on my bike
820 and in my car, tracking the cars nearby and allowing me to be notified
821 when number plates on my watch list are discovered. Another use case
822 was suggested by a friend of mine, who wanted to set it up at his home
823 to open the car port automatically when it discovered the plate on his
824 car. When I mentioned it perhaps was a bit foolhardy to allow anyone
825 capable of placing his license plate number of a piece of cardboard to
826 open his car port, men replied that it was always unlocked anyway. I
827 guess for such use case it make sense. I am sure there are other use
828 cases too, for those with imagination and a vision.</p>
829
830 <p>If you want to build your own version of the Debian package, check
831 out the upstream git source and symlink ./distros/debian to ./debian/
832 before running "debuild" to build the source. Or wait a bit until the
833 package show up in unstable.</p>
834
835 </div>
836 <div class="tags">
837
838
839 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
840
841
842 </div>
843 </div>
844 <div class="padding"></div>
845
846 <div class="entry">
847 <div class="title">
848 <a href="http://www.hungry.com/~pere/blog/listadmin__the_quick_way_to_moderate_mailman_lists___nice_free_software.html">listadmin, the quick way to moderate mailman lists - nice free software</a>
849 </div>
850 <div class="date">
851 22nd October 2014
852 </div>
853 <div class="body">
854 <p>If you ever had to moderate a mailman list, like the ones on
855 alioth.debian.org, you know the web interface is fairly slow to
856 operate. First you visit one web page, enter the moderation password
857 and get a new page shown with a list of all the messages to moderate
858 and various options for each email address. This take a while for
859 every list you moderate, and you need to do it regularly to do a good
860 job as a list moderator. But there is a quick alternative,
861 <a href="http://heim.ifi.uio.no/kjetilho/hacks/#listadmin">the
862 listadmin program</a>. It allow you to check lists for new messages
863 to moderate in a fraction of a second. Here is a test run on two
864 lists I recently took over:</p>
865
866 <p><blockquote><pre>
867 % time listadmin xiph
868 fetching data for pkg-xiph-commits@lists.alioth.debian.org ... nothing in queue
869 fetching data for pkg-xiph-maint@lists.alioth.debian.org ... nothing in queue
870
871 real 0m1.709s
872 user 0m0.232s
873 sys 0m0.012s
874 %
875 </pre></blockquote></p>
876
877 <p>In 1.7 seconds I had checked two mailing lists and confirmed that
878 there are no message in the moderation queue. Every morning I
879 currently moderate 68 mailman lists, and it normally take around two
880 minutes. When I took over the two pkg-xiph lists above a few days
881 ago, there were 400 emails waiting in the moderator queue. It took me
882 less than 15 minutes to process them all using the listadmin
883 program.</p>
884
885 <p>If you install
886 <a href="https://tracker.debian.org/pkg/listadmin">the listadmin
887 package</a> from Debian and create a file <tt>~/.listadmin.ini</tt>
888 with content like this, the moderation task is a breeze:</p>
889
890 <p><blockquote><pre>
891 username username@example.org
892 spamlevel 23
893 default discard
894 discard_if_reason "Posting restricted to members only. Remove us from your mail list."
895
896 password secret
897 adminurl https://{domain}/mailman/admindb/{list}
898 mailman-list@lists.example.com
899
900 password hidden
901 other-list@otherserver.example.org
902 </pre></blockquote></p>
903
904 <p>There are other options to set as well. Check the manual page to
905 learn the details.</p>
906
907 <p>If you are forced to moderate lists on a mailman installation where
908 the SSL certificate is self signed or not properly signed by a
909 generally accepted signing authority, you can set a environment
910 variable when calling listadmin to disable SSL verification:</p>
911
912 <p><blockquote><pre>
913 PERL_LWP_SSL_VERIFY_HOSTNAME=0 listadmin
914 </pre></blockquote></p>
915
916 <p>If you want to moderate a subset of the lists you take care of, you
917 can provide an argument to the listadmin script like I do in the
918 initial screen dump (the xiph argument). Using an argument, only
919 lists matching the argument string will be processed. This make it
920 quick to accept messages if you notice the moderation request in your
921 email.</p>
922
923 <p>Without the listadmin program, I would never be the moderator of 68
924 mailing lists, as I simply do not have time to spend on that if the
925 process was any slower. The listadmin program have saved me hours of
926 time I could spend elsewhere over the years. It truly is nice free
927 software.</p>
928
929 <p>As usual, if you use Bitcoin and want to show your support of my
930 activities, please send Bitcoin donations to my address
931 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
932
933 <p>Update 2014-10-27: Added missing 'username' statement in
934 configuration example. Also, I've been told that the
935 PERL_LWP_SSL_VERIFY_HOSTNAME=0 setting do not work for everyone. Not
936 sure why.</p>
937
938 </div>
939 <div class="tags">
940
941
942 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
943
944
945 </div>
946 </div>
947 <div class="padding"></div>
948
949 <div class="entry">
950 <div class="title">
951 <a href="http://www.hungry.com/~pere/blog/S3QL__a_locally_mounted_cloud_file_system___nice_free_software.html">S3QL, a locally mounted cloud file system - nice free software</a>
952 </div>
953 <div class="date">
954 9th April 2014
955 </div>
956 <div class="body">
957 <p>For a while now, I have been looking for a sensible offsite backup
958 solution for use at home. My requirements are simple, it must be
959 cheap and locally encrypted (in other words, I keep the encryption
960 keys, the storage provider do not have access to my private files).
961 One idea me and my friends had many years ago, before the cloud
962 storage providers showed up, was to use Google mail as storage,
963 writing a Linux block device storing blocks as emails in the mail
964 service provided by Google, and thus get heaps of free space. On top
965 of this one can add encryption, RAID and volume management to have
966 lots of (fairly slow, I admit that) cheap and encrypted storage. But
967 I never found time to implement such system. But the last few weeks I
968 have looked at a system called
969 <a href="https://bitbucket.org/nikratio/s3ql/">S3QL</a>, a locally
970 mounted network backed file system with the features I need.</p>
971
972 <p>S3QL is a fuse file system with a local cache and cloud storage,
973 handling several different storage providers, any with Amazon S3,
974 Google Drive or OpenStack API. There are heaps of such storage
975 providers. S3QL can also use a local directory as storage, which
976 combined with sshfs allow for file storage on any ssh server. S3QL
977 include support for encryption, compression, de-duplication, snapshots
978 and immutable file systems, allowing me to mount the remote storage as
979 a local mount point, look at and use the files as if they were local,
980 while the content is stored in the cloud as well. This allow me to
981 have a backup that should survive fire. The file system can not be
982 shared between several machines at the same time, as only one can
983 mount it at the time, but any machine with the encryption key and
984 access to the storage service can mount it if it is unmounted.</p>
985
986 <p>It is simple to use. I'm using it on Debian Wheezy, where the
987 package is included already. So to get started, run <tt>apt-get
988 install s3ql</tt>. Next, pick a storage provider. I ended up picking
989 Greenqloud, after reading their nice recipe on
990 <a href="https://greenqloud.zendesk.com/entries/44611757-How-To-Use-S3QL-to-mount-a-StorageQloud-bucket-on-Debian-Wheezy">how
991 to use S3QL with their Amazon S3 service</a>, because I trust the laws
992 in Iceland more than those in USA when it come to keeping my personal
993 data safe and private, and thus would rather spend money on a company
994 in Iceland. Another nice recipe is available from the article
995 <a href="http://www.admin-magazine.com/HPC/Articles/HPC-Cloud-Storage">S3QL
996 Filesystem for HPC Storage</a> by Jeff Layton in the HPC section of
997 Admin magazine. When the provider is picked, figure out how to get
998 the API key needed to connect to the storage API. With Greencloud,
999 the key did not show up until I had added payment details to my
1000 account.</p>
1001
1002 <p>Armed with the API access details, it is time to create the file
1003 system. First, create a new bucket in the cloud. This bucket is the
1004 file system storage area. I picked a bucket name reflecting the
1005 machine that was going to store data there, but any name will do.
1006 I'll refer to it as <tt>bucket-name</tt> below. In addition, one need
1007 the API login and password, and a locally created password. Store it
1008 all in ~root/.s3ql/authinfo2 like this:
1009
1010 <p><blockquote><pre>
1011 [s3c]
1012 storage-url: s3c://s.greenqloud.com:443/bucket-name
1013 backend-login: API-login
1014 backend-password: API-password
1015 fs-passphrase: local-password
1016 </pre></blockquote></p>
1017
1018 <p>I create my local passphrase using <tt>pwget 50</tt> or similar,
1019 but any sensible way to create a fairly random password should do it.
1020 Armed with these details, it is now time to run mkfs, entering the API
1021 details and password to create it:</p>
1022
1023 <p><blockquote><pre>
1024 # mkdir -m 700 /var/lib/s3ql-cache
1025 # mkfs.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
1026 --ssl s3c://s.greenqloud.com:443/bucket-name
1027 Enter backend login:
1028 Enter backend password:
1029 Before using S3QL, make sure to read the user's guide, especially
1030 the 'Important Rules to Avoid Loosing Data' section.
1031 Enter encryption password:
1032 Confirm encryption password:
1033 Generating random encryption key...
1034 Creating metadata tables...
1035 Dumping metadata...
1036 ..objects..
1037 ..blocks..
1038 ..inodes..
1039 ..inode_blocks..
1040 ..symlink_targets..
1041 ..names..
1042 ..contents..
1043 ..ext_attributes..
1044 Compressing and uploading metadata...
1045 Wrote 0.00 MB of compressed metadata.
1046 # </pre></blockquote></p>
1047
1048 <p>The next step is mounting the file system to make the storage available.
1049
1050 <p><blockquote><pre>
1051 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
1052 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
1053 Using 4 upload threads.
1054 Downloading and decompressing metadata...
1055 Reading metadata...
1056 ..objects..
1057 ..blocks..
1058 ..inodes..
1059 ..inode_blocks..
1060 ..symlink_targets..
1061 ..names..
1062 ..contents..
1063 ..ext_attributes..
1064 Mounting filesystem...
1065 # df -h /s3ql
1066 Filesystem Size Used Avail Use% Mounted on
1067 s3c://s.greenqloud.com:443/bucket-name 1.0T 0 1.0T 0% /s3ql
1068 #
1069 </pre></blockquote></p>
1070
1071 <p>The file system is now ready for use. I use rsync to store my
1072 backups in it, and as the metadata used by rsync is downloaded at
1073 mount time, no network traffic (and storage cost) is triggered by
1074 running rsync. To unmount, one should not use the normal umount
1075 command, as this will not flush the cache to the cloud storage, but
1076 instead running the umount.s3ql command like this:
1077
1078 <p><blockquote><pre>
1079 # umount.s3ql /s3ql
1080 #
1081 </pre></blockquote></p>
1082
1083 <p>There is a fsck command available to check the file system and
1084 correct any problems detected. This can be used if the local server
1085 crashes while the file system is mounted, to reset the "already
1086 mounted" flag. This is what it look like when processing a working
1087 file system:</p>
1088
1089 <p><blockquote><pre>
1090 # fsck.s3ql --force --ssl s3c://s.greenqloud.com:443/bucket-name
1091 Using cached metadata.
1092 File system seems clean, checking anyway.
1093 Checking DB integrity...
1094 Creating temporary extra indices...
1095 Checking lost+found...
1096 Checking cached objects...
1097 Checking names (refcounts)...
1098 Checking contents (names)...
1099 Checking contents (inodes)...
1100 Checking contents (parent inodes)...
1101 Checking objects (reference counts)...
1102 Checking objects (backend)...
1103 ..processed 5000 objects so far..
1104 ..processed 10000 objects so far..
1105 ..processed 15000 objects so far..
1106 Checking objects (sizes)...
1107 Checking blocks (referenced objects)...
1108 Checking blocks (refcounts)...
1109 Checking inode-block mapping (blocks)...
1110 Checking inode-block mapping (inodes)...
1111 Checking inodes (refcounts)...
1112 Checking inodes (sizes)...
1113 Checking extended attributes (names)...
1114 Checking extended attributes (inodes)...
1115 Checking symlinks (inodes)...
1116 Checking directory reachability...
1117 Checking unix conventions...
1118 Checking referential integrity...
1119 Dropping temporary indices...
1120 Backing up old metadata...
1121 Dumping metadata...
1122 ..objects..
1123 ..blocks..
1124 ..inodes..
1125 ..inode_blocks..
1126 ..symlink_targets..
1127 ..names..
1128 ..contents..
1129 ..ext_attributes..
1130 Compressing and uploading metadata...
1131 Wrote 0.89 MB of compressed metadata.
1132 #
1133 </pre></blockquote></p>
1134
1135 <p>Thanks to the cache, working on files that fit in the cache is very
1136 quick, about the same speed as local file access. Uploading large
1137 amount of data is to me limited by the bandwidth out of and into my
1138 house. Uploading 685 MiB with a 100 MiB cache gave me 305 kiB/s,
1139 which is very close to my upload speed, and downloading the same
1140 Debian installation ISO gave me 610 kiB/s, close to my download speed.
1141 Both were measured using <tt>dd</tt>. So for me, the bottleneck is my
1142 network, not the file system code. I do not know what a good cache
1143 size would be, but suspect that the cache should e larger than your
1144 working set.</p>
1145
1146 <p>I mentioned that only one machine can mount the file system at the
1147 time. If another machine try, it is told that the file system is
1148 busy:</p>
1149
1150 <p><blockquote><pre>
1151 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
1152 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
1153 Using 8 upload threads.
1154 Backend reports that fs is still mounted elsewhere, aborting.
1155 #
1156 </pre></blockquote></p>
1157
1158 <p>The file content is uploaded when the cache is full, while the
1159 metadata is uploaded once every 24 hour by default. To ensure the
1160 file system content is flushed to the cloud, one can either umount the
1161 file system, or ask S3QL to flush the cache and metadata using
1162 s3qlctrl:
1163
1164 <p><blockquote><pre>
1165 # s3qlctrl upload-meta /s3ql
1166 # s3qlctrl flushcache /s3ql
1167 #
1168 </pre></blockquote></p>
1169
1170 <p>If you are curious about how much space your data uses in the
1171 cloud, and how much compression and deduplication cut down on the
1172 storage usage, you can use s3qlstat on the mounted file system to get
1173 a report:</p>
1174
1175 <p><blockquote><pre>
1176 # s3qlstat /s3ql
1177 Directory entries: 9141
1178 Inodes: 9143
1179 Data blocks: 8851
1180 Total data size: 22049.38 MB
1181 After de-duplication: 21955.46 MB (99.57% of total)
1182 After compression: 21877.28 MB (99.22% of total, 99.64% of de-duplicated)
1183 Database size: 2.39 MB (uncompressed)
1184 (some values do not take into account not-yet-uploaded dirty blocks in cache)
1185 #
1186 </pre></blockquote></p>
1187
1188 <p>I mentioned earlier that there are several possible suppliers of
1189 storage. I did not try to locate them all, but am aware of at least
1190 <a href="https://www.greenqloud.com/">Greenqloud</a>,
1191 <a href="http://drive.google.com/">Google Drive</a>,
1192 <a href="http://aws.amazon.com/s3/">Amazon S3 web serivces</a>,
1193 <a href="http://www.rackspace.com/">Rackspace</a> and
1194 <a href="http://crowncloud.net/">Crowncloud</A>. The latter even
1195 accept payment in Bitcoin. Pick one that suit your need. Some of
1196 them provide several GiB of free storage, but the prize models are
1197 quite different and you will have to figure out what suits you
1198 best.</p>
1199
1200 <p>While researching this blog post, I had a look at research papers
1201 and posters discussing the S3QL file system. There are several, which
1202 told me that the file system is getting a critical check by the
1203 science community and increased my confidence in using it. One nice
1204 poster is titled
1205 "<a href="http://www.lanl.gov/orgs/adtsc/publications/science_highlights_2013/docs/pg68_69.pdf">An
1206 Innovative Parallel Cloud Storage System using OpenStack’s SwiftObject
1207 Store and Transformative Parallel I/O Approach</a>" by Hsing-Bung
1208 Chen, Benjamin McClelland, David Sherrill, Alfred Torrez, Parks Fields
1209 and Pamela Smith. Please have a look.</p>
1210
1211 <p>Given my problems with different file systems earlier, I decided to
1212 check out the mounted S3QL file system to see if it would be usable as
1213 a home directory (in other word, that it provided POSIX semantics when
1214 it come to locking and umask handling etc). Running
1215 <a href="https://people.skolelinux.org/pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html">my
1216 test code to check file system semantics</a>, I was happy to discover that
1217 no error was found. So the file system can be used for home
1218 directories, if one chooses to do so.</p>
1219
1220 <p>If you do not want a locally file system, and want something that
1221 work without the Linux fuse file system, I would like to mention the
1222 <a href="http://www.tarsnap.com/">Tarsnap service</a>, which also
1223 provide locally encrypted backup using a command line client. It have
1224 a nicer access control system, where one can split out read and write
1225 access, allowing some systems to write to the backup and others to
1226 only read from it.</p>
1227
1228 <p>As usual, if you use Bitcoin and want to show your support of my
1229 activities, please send Bitcoin donations to my address
1230 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
1231
1232 </div>
1233 <div class="tags">
1234
1235
1236 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian">debian</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>, <a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern</a>, <a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet</a>.
1237
1238
1239 </div>
1240 </div>
1241 <div class="padding"></div>
1242
1243 <div class="entry">
1244 <div class="title">
1245 <a href="http://www.hungry.com/~pere/blog/ReactOS_Windows_clone___nice_free_software.html">ReactOS Windows clone - nice free software</a>
1246 </div>
1247 <div class="date">
1248 1st April 2014
1249 </div>
1250 <div class="body">
1251 <p>Microsoft have announced that Windows XP reaches its end of life
1252 2014-04-08, in 7 days. But there are heaps of machines still running
1253 Windows XP, and depending on Windows XP to run their applications, and
1254 upgrading will be expensive, both when it comes to money and when it
1255 comes to the amount of effort needed to migrate from Windows XP to a
1256 new operating system. Some obvious options (buy new a Windows
1257 machine, buy a MacOSX machine, install Linux on the existing machine)
1258 are already well known and covered elsewhere. Most of them involve
1259 leaving the user applications installed on Windows XP behind and
1260 trying out replacements or updated versions. In this blog post I want
1261 to mention one strange bird that allow people to keep the hardware and
1262 the existing Windows XP applications and run them on a free software
1263 operating system that is Windows XP compatible.</p>
1264
1265 <p><a href="http://www.reactos.org/">ReactOS</a> is a free software
1266 operating system (GNU GPL licensed) working on providing a operating
1267 system that is binary compatible with Windows, able to run windows
1268 programs directly and to use Windows drivers for hardware directly.
1269 The project goal is for Windows user to keep their existing machines,
1270 drivers and software, and gain the advantages from user a operating
1271 system without usage limitations caused by non-free licensing. It is
1272 a Windows clone running directly on the hardware, so quite different
1273 from the approach taken by <a href="http://www.winehq.org/">the Wine
1274 project</a>, which make it possible to run Windows binaries on
1275 Linux.</p>
1276
1277 <p>The ReactOS project share code with the Wine project, so most
1278 shared libraries available on Windows are already implemented already.
1279 There is also a software manager like the one we are used to on Linux,
1280 allowing the user to install free software applications with a simple
1281 click directly from the Internet. Check out the
1282 <a href="http://www.reactos.org/screenshots">screen shots on the
1283 project web site</a> for an idea what it look like (it looks just like
1284 Windows before metro).</p>
1285
1286 <p>I do not use ReactOS myself, preferring Linux and Unix like
1287 operating systems. I've tested it, and it work fine in a virt-manager
1288 virtual machine. The browser, minesweeper, notepad etc is working
1289 fine as far as I can tell. Unfortunately, my main test application
1290 is the software included on a CD with the Lego Mindstorms NXT, which
1291 seem to install just fine from CD but fail to leave any binaries on
1292 the disk after the installation. So no luck with that test software.
1293 No idea why, but hope someone else figure out and fix the problem.
1294 I've tried the ReactOS Live ISO on a physical machine, and it seemed
1295 to work just fine. If you like Windows and want to keep running your
1296 old Windows binaries, check it out by
1297 <a href="http://www.reactos.org/download">downloading</a> the
1298 installation CD, the live CD or the preinstalled virtual machine
1299 image.</p>
1300
1301 </div>
1302 <div class="tags">
1303
1304
1305 Tags: <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>, <a href="http://www.hungry.com/~pere/blog/tags/reactos">reactos</a>.
1306
1307
1308 </div>
1309 </div>
1310 <div class="padding"></div>
1311
1312 <div class="entry">
1313 <div class="title">
1314 <a href="http://www.hungry.com/~pere/blog/Video_DVD_reader_library___python_dvdvideo___nice_free_software.html">Video DVD reader library / python-dvdvideo - nice free software</a>
1315 </div>
1316 <div class="date">
1317 21st March 2014
1318 </div>
1319 <div class="body">
1320 <p>Keeping your DVD collection safe from scratches and curious
1321 children fingers while still having it available when you want to see a
1322 movie is not straight forward. My preferred method at the moment is
1323 to store a full copy of the ISO on a hard drive, and use VLC, Popcorn
1324 Hour or other useful players to view the resulting file. This way the
1325 subtitles and bonus material are still available and using the ISO is
1326 just like inserting the original DVD record in the DVD player.</p>
1327
1328 <p>Earlier I used dd for taking security copies, but it do not handle
1329 DVDs giving read errors (which are quite a few of them). I've also
1330 tried using
1331 <a href="https://people.skolelinux.org/pere/blog/Ripping_problematic_DVDs_using_dvdbackup_and_genisoimage.html">dvdbackup
1332 and genisoimage</a>, but these days I use the marvellous python library
1333 and program
1334 <a href="http://bblank.thinkmo.de/blog/new-software-python-dvdvideo">python-dvdvideo</a>
1335 written by Bastian Blank. It is
1336 <a href="http://packages.qa.debian.org/p/python-dvdvideo.html">in Debian
1337 already</a> and the binary package name is python3-dvdvideo. Instead
1338 of trying to read every block from the DVD, it parses the file
1339 structure and figure out which block on the DVD is actually in used,
1340 and only read those blocks from the DVD. This work surprisingly well,
1341 and I have been able to almost backup my entire DVD collection using
1342 this method.</p>
1343
1344 <p>So far, python-dvdvideo have failed on between 10 and
1345 20 DVDs, which is a small fraction of my collection. The most common
1346 problem is
1347 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=720831">DVDs
1348 using UTF-16 instead of UTF-8 characters</a>, which according to
1349 Bastian is against the DVD specification (and seem to cause some
1350 players to fail too). A rarer problem is what seem to be inconsistent
1351 DVD structures, as the python library
1352 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=723079">claim
1353 there is a overlap between objects</a>. An equally rare problem claim
1354 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=741878">some
1355 value is out of range</a>. No idea what is going on there. I wish I
1356 knew enough about the DVD format to fix these, to ensure my movie
1357 collection will stay with me in the future.</p>
1358
1359 <p>So, if you need to keep your DVDs safe, back them up using
1360 python-dvdvideo. :)</p>
1361
1362 </div>
1363 <div class="tags">
1364
1365
1366 Tags: <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>, <a href="http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett</a>, <a href="http://www.hungry.com/~pere/blog/tags/video">video</a>.
1367
1368
1369 </div>
1370 </div>
1371 <div class="padding"></div>
1372
1373 <div class="entry">
1374 <div class="title">
1375 <a href="http://www.hungry.com/~pere/blog/Free_Timetabling_Software___nice_free_software.html">Free Timetabling Software - nice free software</a>
1376 </div>
1377 <div class="date">
1378 7th July 2012
1379 </div>
1380 <div class="body">
1381 <p>Included in <a href="http://www.skolelinux.org/">Debian Edu /
1382 Skolelinux</a> is a large collection of end user and school specific
1383 software. It is one of the packages not installed by default but
1384 provided in the Debian archive for schools to install if they want to,
1385 is a system to automatically plan the school time table using
1386 information about available teachers, classes and rooms, combined with
1387 the list of required courses and how many hours each topic should
1388 receive. The software is
1389
1390 <a href="http://lalescu.ro/liviu/fet/">named FET</a>, and it provide a
1391 graphical user interface to input the required information, save the
1392 result in a fairly simple XML format, and generate time tables for
1393 both teachers and students. It is available both for
1394 <a href="http://lalescu.ro/liviu/fet/download.html">Linux, MacOSX and
1395 Windows</a>.</p>
1396
1397 <p>This is <a href="http://lalescu.ro/liviu/fet/features.html">the
1398 feature list</a>, liftet from the project web site:</p>
1399
1400 <p><ul>
1401
1402 <li>FET is free software, licensed under the GNU GPL v2 or later.
1403 You can freely use, copy, modify and redistribute it </li>
1404
1405 <li>Localized to en_US (US English, default), ar (Arabic), ca
1406 (Catalan), da (Danish), de (German), el (Greek), es (Spanish), fa
1407 (Persian), fr (French), gl (Galician), he (Hebrew), hu
1408 (Hungarian), id (Indonesian), it (Italian), lt (Lithuanian), mk
1409 (Macedonian), ms (Malay), nl (Dutch), pl (Polish), pt_BR
1410 (Brazilian Portuguese), ro (Romanian), ru (Russian), si (Sinhala),
1411 sk (Slovak), sr (Serbian), tr (Turkish), uk (Ukrainian), uz
1412 (Uzbek) and vi (Vietnamese) (incompletely for some languages)
1413 </li>
1414
1415 <li>Fully automatic generation algorithm, allowing also
1416 semi-automatic or manual allocation</li>
1417
1418 <li>Platform independent implementation, allowing running on
1419 GNU/Linux, Windows, Mac and any system that Qt supports </li>
1420
1421 <li>Flexible modular XML format for the input file, allowing editing
1422 with an XML editor or by hand (besides FET interface)</li>
1423
1424 <li>Import/export from CSV format</li>
1425
1426 <li>The resulted timetables are exported into HTML, XML and CSV
1427 formats </li>
1428
1429 <li>Flexible students structure, organized into sets: years, groups
1430 and subgroups. FET allows overlapping years and groups and
1431 non-overlapping subgroups. You can even define individual students
1432 (as separate sets)</li>
1433
1434 <li>Each constraint has a weight percentage, from 0.0% to 100.0%
1435 (but some special constraints are allowed to have only 100% weight
1436 percentage)</li>
1437
1438 <li>Limits for the algorithm (all these limits can be increased on
1439 demand, as a custom version, because this would require a bit more
1440 memory):
1441 <ul>
1442 <li>Maximum total number of hours (periods) per day: 60</li>
1443 <li>Maximum number of working days per week: 35</li>
1444 <li>Maximum total number of teachers: 6000</li>
1445 <li>Maximum total number of sets of students: 30000</li>
1446 <li>Maximum total number of subjects: 6000</li>
1447 <li>Virtually unlimited number of activity tags</li>
1448 <li>Maximum number of activities: 30000</li>
1449 <li>Maximum number of rooms: 6000</li>
1450 <li>Maximum number of buildings: 6000</li>
1451 <li>Possibility of adding multiple teachers and
1452 students sets for each activity. (it is possible
1453 also to have no teachers or no students sets for an
1454 activity)</li>
1455 <li>Virtually unlimited number of time constraints</li>
1456 <li>Virtually unlimited number of space constraints</li>
1457 </ul></li>
1458
1459 <li>A large and flexible palette of time constraints:
1460 <ul>
1461 <li>Break periods</li>
1462 <li>For teacher(s):
1463 <ul>
1464 <li>Not available periods</li>
1465 <li>Max/min days per week</li>
1466 <li>Max gaps per day/week</li>
1467 <li>Max hours daily/continuously</li>
1468 <li>Min hours daily</li>
1469 <li>Max hours daily/continuously with an activity tag</li>
1470
1471 <li>Respect working in an hourly interval a max number of
1472 days per week</li>
1473 </ul></li>
1474 <li>For students (sets):
1475 <ul>
1476 <li>Not available periods</li>
1477 <li>Begins early (specify max allowed beginnings at second hour)</li>
1478 <li>Max gaps per day/week</li>
1479 <li>Max hours daily/continuously</li>
1480 <li>Min hours daily</li>
1481 <li>Max hours daily/continuously with an activity tag</li>
1482
1483 <li>Respect working in an hourly interval a max number of
1484 days per week</li>
1485 </ul></li>
1486 <li>For an activity or a set of activities/subactivities:
1487 <ul>
1488 <li>A single preferred starting time</li>
1489 <li>A set of preferred starting times</li>
1490 <li>A set of preferred time slots</li>
1491 <li>Min/max days between them</li>
1492 <li>End(s) students day</li>
1493 <li>Same starting time/day/hour</li>
1494 <li>Occupy max time slots from selection (a complex and
1495 flexible constraint, useful in many situations)</li>
1496 <li>Consecutive, ordered, grouped (for 2 or 3 (sub)activities)</li>
1497 <li>Not overlapping</li>
1498 <li>Max simultaneous in selected time slots</li>
1499 <li>Min gaps between a set of (sub)activities</li>
1500 </ul></li>
1501 </ul></li>
1502
1503 <li>A large and flexible palette of space constraints:
1504 <ul>
1505 <li>Room not available periods</li>
1506 <li>For teacher(s):
1507 <ul>
1508 <li>Home room(s)</li>
1509 <li>Max building changes per day/week</li>
1510 <li>Min gaps between building changes</li>
1511 </ul>
1512 </li>
1513
1514 <li>For students (sets):
1515 <ul>
1516 <li>Home room(s)</li>
1517 <li>Max building changes per day/week</li>
1518 <li>Min gaps between building changes</li>
1519 </ul>
1520 </li>
1521 <li>Preferred room(s):
1522 <ul>
1523 <li>For a subject</li>
1524 <li>For an activity tag</li>
1525 <li>For a subject and an activity tag</li>
1526 <li>Individually for a (sub)activity</li>
1527 </ul>
1528 </li>
1529
1530 <li>For a set of activities:
1531 <ul>
1532 <li>Occupy a maximum number of different rooms</li>
1533 </ul>
1534 </li>
1535 </ul>
1536 </li>
1537 </ul></p>
1538
1539 <p>I have not used it myself, as I am not involved in time table
1540 planning at a school, but it seem to work fine when I test it. If you
1541 need to set up your schools time table, and is tired of doing it
1542 manually, check it out.
1543
1544 A quick summary on how to use it can be found in
1545 <a href="http://marvelsoft.co.in/wp/2012/03/generate-timetable-for-state-cbse-icse-igcse-schools-free/">a
1546 blog post from MarvelSoft</a>. If you find FET useful, please provide
1547 a recipe for the Debian Edu project in the
1548 <a href="http://wiki.debian.org/DebianEdu#Howtos">Debian Edu HowTo
1549 section</a>.</p>
1550
1551 </div>
1552 <div class="tags">
1553
1554
1555 Tags: <a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu</a>, <a href="http://www.hungry.com/~pere/blog/tags/english">english</a>, <a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software</a>.
1556
1557
1558 </div>
1559 </div>
1560 <div class="padding"></div>
1561
1562 <p style="text-align: right;"><a href="nice free software.rss"><img src="http://www.hungry.com/~pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
1563 <div id="sidebar">
1564
1565
1566
1567 <h2>Archive</h2>
1568 <ul>
1569
1570 <li>2025
1571 <ul>
1572
1573 <li><a href="http://www.hungry.com/~pere/blog/archive/2025/01/">January (1)</a></li>
1574
1575 </ul></li>
1576
1577 <li>2024
1578 <ul>
1579
1580 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/01/">January (1)</a></li>
1581
1582 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/02/">February (1)</a></li>
1583
1584 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/03/">March (2)</a></li>
1585
1586 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/04/">April (3)</a></li>
1587
1588 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/05/">May (1)</a></li>
1589
1590 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/06/">June (1)</a></li>
1591
1592 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/07/">July (2)</a></li>
1593
1594 <li><a href="http://www.hungry.com/~pere/blog/archive/2024/12/">December (1)</a></li>
1595
1596 </ul></li>
1597
1598 <li>2023
1599 <ul>
1600
1601 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/01/">January (3)</a></li>
1602
1603 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/02/">February (1)</a></li>
1604
1605 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/04/">April (2)</a></li>
1606
1607 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/05/">May (3)</a></li>
1608
1609 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/06/">June (1)</a></li>
1610
1611 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/08/">August (1)</a></li>
1612
1613 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/09/">September (1)</a></li>
1614
1615 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/10/">October (1)</a></li>
1616
1617 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/11/">November (4)</a></li>
1618
1619 <li><a href="http://www.hungry.com/~pere/blog/archive/2023/12/">December (1)</a></li>
1620
1621 </ul></li>
1622
1623 <li>2022
1624 <ul>
1625
1626 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/02/">February (1)</a></li>
1627
1628 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/03/">March (3)</a></li>
1629
1630 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/04/">April (2)</a></li>
1631
1632 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/06/">June (2)</a></li>
1633
1634 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/07/">July (1)</a></li>
1635
1636 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/09/">September (1)</a></li>
1637
1638 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/10/">October (1)</a></li>
1639
1640 <li><a href="http://www.hungry.com/~pere/blog/archive/2022/12/">December (1)</a></li>
1641
1642 </ul></li>
1643
1644 <li>2021
1645 <ul>
1646
1647 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/01/">January (2)</a></li>
1648
1649 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/02/">February (1)</a></li>
1650
1651 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/05/">May (1)</a></li>
1652
1653 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/06/">June (1)</a></li>
1654
1655 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/07/">July (3)</a></li>
1656
1657 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/08/">August (1)</a></li>
1658
1659 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/09/">September (1)</a></li>
1660
1661 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/10/">October (1)</a></li>
1662
1663 <li><a href="http://www.hungry.com/~pere/blog/archive/2021/12/">December (1)</a></li>
1664
1665 </ul></li>
1666
1667 <li>2020
1668 <ul>
1669
1670 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/02/">February (2)</a></li>
1671
1672 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/03/">March (2)</a></li>
1673
1674 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/04/">April (2)</a></li>
1675
1676 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/05/">May (3)</a></li>
1677
1678 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/06/">June (2)</a></li>
1679
1680 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/07/">July (1)</a></li>
1681
1682 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/09/">September (1)</a></li>
1683
1684 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/10/">October (1)</a></li>
1685
1686 <li><a href="http://www.hungry.com/~pere/blog/archive/2020/11/">November (1)</a></li>
1687
1688 </ul></li>
1689
1690 <li>2019
1691 <ul>
1692
1693 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/01/">January (4)</a></li>
1694
1695 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/02/">February (3)</a></li>
1696
1697 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/03/">March (3)</a></li>
1698
1699 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/05/">May (2)</a></li>
1700
1701 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/06/">June (5)</a></li>
1702
1703 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/07/">July (2)</a></li>
1704
1705 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/08/">August (1)</a></li>
1706
1707 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/09/">September (1)</a></li>
1708
1709 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/11/">November (1)</a></li>
1710
1711 <li><a href="http://www.hungry.com/~pere/blog/archive/2019/12/">December (4)</a></li>
1712
1713 </ul></li>
1714
1715 <li>2018
1716 <ul>
1717
1718 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/01/">January (1)</a></li>
1719
1720 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/02/">February (5)</a></li>
1721
1722 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/03/">March (5)</a></li>
1723
1724 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/04/">April (3)</a></li>
1725
1726 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/06/">June (2)</a></li>
1727
1728 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/07/">July (5)</a></li>
1729
1730 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/08/">August (3)</a></li>
1731
1732 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/09/">September (3)</a></li>
1733
1734 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/10/">October (5)</a></li>
1735
1736 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/11/">November (2)</a></li>
1737
1738 <li><a href="http://www.hungry.com/~pere/blog/archive/2018/12/">December (4)</a></li>
1739
1740 </ul></li>
1741
1742 <li>2017
1743 <ul>
1744
1745 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/01/">January (4)</a></li>
1746
1747 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/02/">February (3)</a></li>
1748
1749 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/03/">March (5)</a></li>
1750
1751 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/04/">April (2)</a></li>
1752
1753 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/06/">June (5)</a></li>
1754
1755 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/07/">July (1)</a></li>
1756
1757 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/08/">August (1)</a></li>
1758
1759 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/09/">September (3)</a></li>
1760
1761 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/10/">October (5)</a></li>
1762
1763 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/11/">November (3)</a></li>
1764
1765 <li><a href="http://www.hungry.com/~pere/blog/archive/2017/12/">December (4)</a></li>
1766
1767 </ul></li>
1768
1769 <li>2016
1770 <ul>
1771
1772 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/01/">January (3)</a></li>
1773
1774 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/02/">February (2)</a></li>
1775
1776 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/03/">March (3)</a></li>
1777
1778 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/04/">April (8)</a></li>
1779
1780 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/05/">May (8)</a></li>
1781
1782 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/06/">June (2)</a></li>
1783
1784 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/07/">July (2)</a></li>
1785
1786 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/08/">August (5)</a></li>
1787
1788 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/09/">September (2)</a></li>
1789
1790 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/10/">October (3)</a></li>
1791
1792 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/11/">November (8)</a></li>
1793
1794 <li><a href="http://www.hungry.com/~pere/blog/archive/2016/12/">December (5)</a></li>
1795
1796 </ul></li>
1797
1798 <li>2015
1799 <ul>
1800
1801 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/01/">January (7)</a></li>
1802
1803 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/02/">February (6)</a></li>
1804
1805 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/03/">March (1)</a></li>
1806
1807 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/04/">April (4)</a></li>
1808
1809 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/05/">May (3)</a></li>
1810
1811 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/06/">June (4)</a></li>
1812
1813 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/07/">July (6)</a></li>
1814
1815 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/08/">August (2)</a></li>
1816
1817 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/09/">September (2)</a></li>
1818
1819 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/10/">October (9)</a></li>
1820
1821 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/11/">November (6)</a></li>
1822
1823 <li><a href="http://www.hungry.com/~pere/blog/archive/2015/12/">December (3)</a></li>
1824
1825 </ul></li>
1826
1827 <li>2014
1828 <ul>
1829
1830 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/01/">January (2)</a></li>
1831
1832 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/02/">February (3)</a></li>
1833
1834 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/03/">March (8)</a></li>
1835
1836 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/04/">April (7)</a></li>
1837
1838 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/05/">May (1)</a></li>
1839
1840 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/06/">June (2)</a></li>
1841
1842 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/07/">July (2)</a></li>
1843
1844 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/08/">August (2)</a></li>
1845
1846 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/09/">September (5)</a></li>
1847
1848 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/10/">October (6)</a></li>
1849
1850 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/11/">November (3)</a></li>
1851
1852 <li><a href="http://www.hungry.com/~pere/blog/archive/2014/12/">December (5)</a></li>
1853
1854 </ul></li>
1855
1856 <li>2013
1857 <ul>
1858
1859 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/01/">January (11)</a></li>
1860
1861 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/02/">February (9)</a></li>
1862
1863 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/03/">March (9)</a></li>
1864
1865 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/04/">April (6)</a></li>
1866
1867 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/05/">May (9)</a></li>
1868
1869 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/06/">June (10)</a></li>
1870
1871 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/07/">July (7)</a></li>
1872
1873 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/08/">August (3)</a></li>
1874
1875 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/09/">September (5)</a></li>
1876
1877 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/10/">October (7)</a></li>
1878
1879 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/11/">November (9)</a></li>
1880
1881 <li><a href="http://www.hungry.com/~pere/blog/archive/2013/12/">December (3)</a></li>
1882
1883 </ul></li>
1884
1885 <li>2012
1886 <ul>
1887
1888 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/01/">January (7)</a></li>
1889
1890 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/02/">February (10)</a></li>
1891
1892 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/03/">March (17)</a></li>
1893
1894 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/04/">April (12)</a></li>
1895
1896 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/05/">May (12)</a></li>
1897
1898 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/06/">June (20)</a></li>
1899
1900 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/07/">July (17)</a></li>
1901
1902 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/08/">August (6)</a></li>
1903
1904 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/09/">September (9)</a></li>
1905
1906 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/10/">October (17)</a></li>
1907
1908 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/11/">November (10)</a></li>
1909
1910 <li><a href="http://www.hungry.com/~pere/blog/archive/2012/12/">December (7)</a></li>
1911
1912 </ul></li>
1913
1914 <li>2011
1915 <ul>
1916
1917 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/01/">January (16)</a></li>
1918
1919 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/02/">February (6)</a></li>
1920
1921 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/03/">March (6)</a></li>
1922
1923 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/04/">April (7)</a></li>
1924
1925 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/05/">May (3)</a></li>
1926
1927 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/06/">June (2)</a></li>
1928
1929 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/07/">July (7)</a></li>
1930
1931 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/08/">August (6)</a></li>
1932
1933 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/09/">September (4)</a></li>
1934
1935 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/10/">October (2)</a></li>
1936
1937 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/11/">November (3)</a></li>
1938
1939 <li><a href="http://www.hungry.com/~pere/blog/archive/2011/12/">December (1)</a></li>
1940
1941 </ul></li>
1942
1943 <li>2010
1944 <ul>
1945
1946 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/01/">January (2)</a></li>
1947
1948 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/02/">February (1)</a></li>
1949
1950 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/03/">March (3)</a></li>
1951
1952 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/04/">April (3)</a></li>
1953
1954 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/05/">May (9)</a></li>
1955
1956 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/06/">June (14)</a></li>
1957
1958 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/07/">July (12)</a></li>
1959
1960 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/08/">August (13)</a></li>
1961
1962 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/09/">September (7)</a></li>
1963
1964 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/10/">October (9)</a></li>
1965
1966 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/11/">November (13)</a></li>
1967
1968 <li><a href="http://www.hungry.com/~pere/blog/archive/2010/12/">December (12)</a></li>
1969
1970 </ul></li>
1971
1972 <li>2009
1973 <ul>
1974
1975 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/01/">January (8)</a></li>
1976
1977 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/02/">February (8)</a></li>
1978
1979 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/03/">March (12)</a></li>
1980
1981 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/04/">April (10)</a></li>
1982
1983 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/05/">May (9)</a></li>
1984
1985 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/06/">June (3)</a></li>
1986
1987 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/07/">July (4)</a></li>
1988
1989 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/08/">August (3)</a></li>
1990
1991 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/09/">September (1)</a></li>
1992
1993 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/10/">October (2)</a></li>
1994
1995 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/11/">November (3)</a></li>
1996
1997 <li><a href="http://www.hungry.com/~pere/blog/archive/2009/12/">December (3)</a></li>
1998
1999 </ul></li>
2000
2001 <li>2008
2002 <ul>
2003
2004 <li><a href="http://www.hungry.com/~pere/blog/archive/2008/11/">November (5)</a></li>
2005
2006 <li><a href="http://www.hungry.com/~pere/blog/archive/2008/12/">December (7)</a></li>
2007
2008 </ul></li>
2009
2010 </ul>
2011
2012
2013
2014 <h2>Tags</h2>
2015 <ul>
2016
2017 <li><a href="http://www.hungry.com/~pere/blog/tags/3d-printer">3d-printer (19)</a></li>
2018
2019 <li><a href="http://www.hungry.com/~pere/blog/tags/amiga">amiga (1)</a></li>
2020
2021 <li><a href="http://www.hungry.com/~pere/blog/tags/aros">aros (1)</a></li>
2022
2023 <li><a href="http://www.hungry.com/~pere/blog/tags/bankid">bankid (4)</a></li>
2024
2025 <li><a href="http://www.hungry.com/~pere/blog/tags/betalkontant">betalkontant (9)</a></li>
2026
2027 <li><a href="http://www.hungry.com/~pere/blog/tags/bitcoin">bitcoin (13)</a></li>
2028
2029 <li><a href="http://www.hungry.com/~pere/blog/tags/bootsystem">bootsystem (17)</a></li>
2030
2031 <li><a href="http://www.hungry.com/~pere/blog/tags/bsa">bsa (2)</a></li>
2032
2033 <li><a href="http://www.hungry.com/~pere/blog/tags/chrpath">chrpath (3)</a></li>
2034
2035 <li><a href="http://www.hungry.com/~pere/blog/tags/debian">debian (204)</a></li>
2036
2037 <li><a href="http://www.hungry.com/~pere/blog/tags/debian edu">debian edu (159)</a></li>
2038
2039 <li><a href="http://www.hungry.com/~pere/blog/tags/debian-handbook">debian-handbook (9)</a></li>
2040
2041 <li><a href="http://www.hungry.com/~pere/blog/tags/digistan">digistan (11)</a></li>
2042
2043 <li><a href="http://www.hungry.com/~pere/blog/tags/dld">dld (18)</a></li>
2044
2045 <li><a href="http://www.hungry.com/~pere/blog/tags/docbook">docbook (33)</a></li>
2046
2047 <li><a href="http://www.hungry.com/~pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
2048
2049 <li><a href="http://www.hungry.com/~pere/blog/tags/english">english (466)</a></li>
2050
2051 <li><a href="http://www.hungry.com/~pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
2052
2053 <li><a href="http://www.hungry.com/~pere/blog/tags/fildeling">fildeling (14)</a></li>
2054
2055 <li><a href="http://www.hungry.com/~pere/blog/tags/freeculture">freeculture (34)</a></li>
2056
2057 <li><a href="http://www.hungry.com/~pere/blog/tags/freedombox">freedombox (9)</a></li>
2058
2059 <li><a href="http://www.hungry.com/~pere/blog/tags/frikanalen">frikanalen (20)</a></li>
2060
2061 <li><a href="http://www.hungry.com/~pere/blog/tags/h264">h264 (20)</a></li>
2062
2063 <li><a href="http://www.hungry.com/~pere/blog/tags/intervju">intervju (43)</a></li>
2064
2065 <li><a href="http://www.hungry.com/~pere/blog/tags/isenkram">isenkram (18)</a></li>
2066
2067 <li><a href="http://www.hungry.com/~pere/blog/tags/kart">kart (23)</a></li>
2068
2069 <li><a href="http://www.hungry.com/~pere/blog/tags/kodi">kodi (6)</a></li>
2070
2071 <li><a href="http://www.hungry.com/~pere/blog/tags/ldap">ldap (9)</a></li>
2072
2073 <li><a href="http://www.hungry.com/~pere/blog/tags/lego">lego (5)</a></li>
2074
2075 <li><a href="http://www.hungry.com/~pere/blog/tags/lenker">lenker (8)</a></li>
2076
2077 <li><a href="http://www.hungry.com/~pere/blog/tags/linuxcnc">linuxcnc (8)</a></li>
2078
2079 <li><a href="http://www.hungry.com/~pere/blog/tags/lsdvd">lsdvd (2)</a></li>
2080
2081 <li><a href="http://www.hungry.com/~pere/blog/tags/ltsp">ltsp (1)</a></li>
2082
2083 <li><a href="http://www.hungry.com/~pere/blog/tags/madewithcc">madewithcc (3)</a></li>
2084
2085 <li><a href="http://www.hungry.com/~pere/blog/tags/mesh network">mesh network (8)</a></li>
2086
2087 <li><a href="http://www.hungry.com/~pere/blog/tags/multimedia">multimedia (46)</a></li>
2088
2089 <li><a href="http://www.hungry.com/~pere/blog/tags/nice free software">nice free software (15)</a></li>
2090
2091 <li><a href="http://www.hungry.com/~pere/blog/tags/noark5">noark5 (25)</a></li>
2092
2093 <li><a href="http://www.hungry.com/~pere/blog/tags/norsk">norsk (325)</a></li>
2094
2095 <li><a href="http://www.hungry.com/~pere/blog/tags/nuug">nuug (199)</a></li>
2096
2097 <li><a href="http://www.hungry.com/~pere/blog/tags/offentlig innsyn">offentlig innsyn (41)</a></li>
2098
2099 <li><a href="http://www.hungry.com/~pere/blog/tags/open311">open311 (2)</a></li>
2100
2101 <li><a href="http://www.hungry.com/~pere/blog/tags/opensnitch">opensnitch (4)</a></li>
2102
2103 <li><a href="http://www.hungry.com/~pere/blog/tags/opphavsrett">opphavsrett (76)</a></li>
2104
2105 <li><a href="http://www.hungry.com/~pere/blog/tags/personvern">personvern (114)</a></li>
2106
2107 <li><a href="http://www.hungry.com/~pere/blog/tags/raid">raid (4)</a></li>
2108
2109 <li><a href="http://www.hungry.com/~pere/blog/tags/reactos">reactos (1)</a></li>
2110
2111 <li><a href="http://www.hungry.com/~pere/blog/tags/reprap">reprap (11)</a></li>
2112
2113 <li><a href="http://www.hungry.com/~pere/blog/tags/rfid">rfid (3)</a></li>
2114
2115 <li><a href="http://www.hungry.com/~pere/blog/tags/robot">robot (17)</a></li>
2116
2117 <li><a href="http://www.hungry.com/~pere/blog/tags/rss">rss (1)</a></li>
2118
2119 <li><a href="http://www.hungry.com/~pere/blog/tags/ruter">ruter (7)</a></li>
2120
2121 <li><a href="http://www.hungry.com/~pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
2122
2123 <li><a href="http://www.hungry.com/~pere/blog/tags/sikkerhet">sikkerhet (60)</a></li>
2124
2125 <li><a href="http://www.hungry.com/~pere/blog/tags/sitesummary">sitesummary (4)</a></li>
2126
2127 <li><a href="http://www.hungry.com/~pere/blog/tags/skepsis">skepsis (5)</a></li>
2128
2129 <li><a href="http://www.hungry.com/~pere/blog/tags/standard">standard (76)</a></li>
2130
2131 <li><a href="http://www.hungry.com/~pere/blog/tags/stavekontroll">stavekontroll (7)</a></li>
2132
2133 <li><a href="http://www.hungry.com/~pere/blog/tags/stortinget">stortinget (14)</a></li>
2134
2135 <li><a href="http://www.hungry.com/~pere/blog/tags/surveillance">surveillance (65)</a></li>
2136
2137 <li><a href="http://www.hungry.com/~pere/blog/tags/sysadmin">sysadmin (5)</a></li>
2138
2139 <li><a href="http://www.hungry.com/~pere/blog/tags/usenix">usenix (2)</a></li>
2140
2141 <li><a href="http://www.hungry.com/~pere/blog/tags/valg">valg (9)</a></li>
2142
2143 <li><a href="http://www.hungry.com/~pere/blog/tags/verkidetfri">verkidetfri (22)</a></li>
2144
2145 <li><a href="http://www.hungry.com/~pere/blog/tags/video">video (80)</a></li>
2146
2147 <li><a href="http://www.hungry.com/~pere/blog/tags/vitenskap">vitenskap (4)</a></li>
2148
2149 <li><a href="http://www.hungry.com/~pere/blog/tags/web">web (42)</a></li>
2150
2151 </ul>
2152
2153
2154 </div>
2155 <p style="text-align: right">
2156 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
2157 </p>
2158
2159 </body>
2160 </html>