]> pere.pagekite.me Git - homepage.git/blob - blog/tags/nice free software/index.html
73fd9f8fc8e504ec0a2e94b1ef6a920df02da3ad
[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://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/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://people.skolelinux.org/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://people.skolelinux.org/pere/blog/youtube_dl_for_nedlasting_fra_NRK_med_undertekster___nice_free_software.html">youtube-dl for nedlasting fra NRK med undertekster - nice free software</a>
26 </div>
27 <div class="date">
28 28th April 2018
29 </div>
30 <div class="body">
31 <p>I <a href="https://no.wikipedia.org/wiki/VHS">VHS-kassettenes</a>
32 tid var det rett frem å ta vare på et TV-program en ønsket å kunne se
33 senere, uten å være avhengig av at programmet ble sendt på nytt.
34 Kanskje ønsket en å se programmet på hytten der det ikke var
35 TV-signal, eller av andre grunner ha det tilgjengelig for fremtidig
36 fornøyelse. Dette er blitt vanskeligere med introduksjon av
37 digital-TV og webstreaming, der opptak til harddisk er utenfor de
38 flestes kontroll hvis de bruker ufri programvare og bokser kontrollert
39 av andre. Men for NRK her i Norge, finnes det heldigvis flere fri
40 programvare-alternativer, som jeg har
41 <a href="http://people.skolelinux.org/pere/blog/Hvordan_enkelt_laste_ned_filmer_fra_NRK.html">skrevet</a>
42 <a href="http://people.skolelinux.org/pere/blog/Hvordan_enkelt_laste_ned_filmer_fra_NRK_med_den__nye__l_sningen.html">om</a>
43 <a href="http://people.skolelinux.org/pere/blog/Nedlasting_fra_NRK__som_Matroska_med_undertekster.html">før</a>.
44 Så lenge kilden for nedlastingen er lovlig lagt ut på nett (hvilket
45 jeg antar NRK gjør), så er slik lagring til privat bruk også lovlig i
46 Norge.</p>
47
48 <p>Sist jeg så på saken, i 2016, nevnte jeg at
49 <a href="https://rg3.github.com/youtube-dl/">youtube-dl</a> ikke kunne
50 bake undertekster fra NRK inn i videofilene, og at jeg derfor
51 foretrakk andre alternativer. Nylig oppdaget jeg at dette har endret
52 seg. Fordelen med youtube-dl er at den er tilgjengelig direkte fra
53 Linux-distribusjoner som <a href="https://www.debian.org/">Debian</a>
54 og <a href="https://www.ubuntu.com/">Ubuntu</a>, slik at en slipper å
55 finne ut selv hvordan en skal få dem til å virke.</p>
56
57 <p>For å laste ned et NRK-innslag med undertekster, og få den norske
58 underteksten pakket inn i videofilen, så kan følgende kommando
59 brukes:</p>
60
61 <p><pre>
62 youtube-dl --write-sub --sub-format ttml \
63 --convert-subtitles srt --embed-subs \
64 https://tv.nrk.no/serie/ramm-ferdig-gaa/MUHU11000316/27-04-2018
65 </pre></p>
66
67 <p>URL-eksemplet er dagens toppsak på tv.nrk.no. Resultatet er en
68 MP4-fil med filmen og undertekster som kan spilles av med VLC. Merk
69 at VLC ikke viser frem undertekster før du aktiverer dem. For å gjøre
70 det, høyreklikk med musa i fremviservinduet, velg menyvalget for
71 undertekst og så norsk språk. Jeg testet også '--write-auto-sub',
72 men det kommandolinjeargumentet ser ikke ut til å fungere, så jeg
73 endte opp med settet med argumentlisten over, som jeg fant i en
74 feilrapport i youtube-dl-prosjektets samling over feilrapporter.</p>
75
76 <p>Denne støtten i youtube-dl gjør det svært enkelt å lagre
77 NRK-innslag, det være seg nyheter, filmer, serier eller dokumentater,
78 for å ha dem tilgjengelig for fremtidig referanse og bruk, uavhengig
79 av hvor lenge innslagene ligger tilgjengelig hos NRK. Så får det ikke
80 hjelpe at NRKs jurister mener at det er
81 <a href="http://people.skolelinux.org/pere/blog/Best___ikke_fortelle_noen_at_streaming_er_nedlasting___.html">vesensforskjellig
82 å legge tilgjengelig for nedlasting og for streaming</a>, når det rent
83 teknisk er samme sak.</p>
84
85 <p>Programmet youtube-dl støtter også en rekke andre nettsteder, se
86 prosjektoversikten for
87 <a href="http://rg3.github.io/youtube-dl/supportedsites.html">en
88 komplett liste</a>.</p>
89
90 </div>
91 <div class="tags">
92
93
94 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>, <a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>, <a href="http://people.skolelinux.org/pere/blog/tags/web">web</a>.
95
96
97 </div>
98 </div>
99 <div class="padding"></div>
100
101 <div class="entry">
102 <div class="title">
103 <a href="http://people.skolelinux.org/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>
104 </div>
105 <div class="date">
106 11th December 2016
107 </div>
108 <div class="body">
109 <p align="center"><img width="70%" src="http://people.skolelinux.org/pere/blog/images/2016-12-11-nice-oolite.png"/></p>
110
111 <p>In my early years, I played
112 <a href="http://wiki.alioth.net/index.php/Classic_Elite">the epic game
113 Elite</a> on my PC. I spent many months trading and fighting in
114 space, and reached the 'elite' fighting status before I moved on. The
115 original Elite game was available on Commodore 64 and the IBM PC
116 edition I played had a 64 KB executable. I am still impressed today
117 that the authors managed to squeeze both a 3D engine and details about
118 more than 2000 planet systems across 7 galaxies into a binary so
119 small.</p>
120
121 <p>I have known about <a href="http://www.oolite.org/">the free
122 software game Oolite inspired by Elite</a> for a while, but did not
123 really have time to test it properly until a few days ago. It was
124 great to discover that my old knowledge about trading routes were
125 still valid. But my fighting and flying abilities were gone, so I had
126 to retrain to be able to dock on a space station. And I am still not
127 able to make much resistance when I am attacked by pirates, so I
128 bougth and mounted the most powerful laser in the rear to be able to
129 put up at least some resistance while fleeing for my life. :)</p>
130
131 <p>When playing Elite in the late eighties, I had to discover
132 everything on my own, and I had long lists of prices seen on different
133 planets to be able to decide where to trade what. This time I had the
134 advantages of the
135 <a href="http://wiki.alioth.net/index.php/Main_Page">Elite wiki</a>,
136 where information about each planet is easily available with common
137 price ranges and suggested trading routes. This improved my ability
138 to earn money and I have been able to earn enough to buy a lot of
139 useful equipent in a few days. I believe I originally played for
140 months before I could get a docking computer, while now I could get it
141 after less then a week.</p>
142
143 <p>If you like science fiction and dreamed of a life as a vagabond in
144 space, you should try out Oolite. It is available for Linux, MacOSX
145 and Windows, and is included in Debian and derivatives since 2011.</p>
146
147 <p>As usual, if you use Bitcoin and want to show your support of my
148 activities, please send Bitcoin donations to my address
149 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
150
151 </div>
152 <div class="tags">
153
154
155 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
156
157
158 </div>
159 </div>
160 <div class="padding"></div>
161
162 <div class="entry">
163 <div class="title">
164 <a href="http://people.skolelinux.org/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>
165 </div>
166 <div class="date">
167 11th August 2016
168 </div>
169 <div class="body">
170 <p>This summer, I read a great article
171 "<a href="https://www.usenix.org/publications/login/summer2016/curtsinger">coz:
172 This Is the Profiler You're Looking For</a>" in USENIX ;login: about
173 how to profile multi-threaded programs. It presented a system for
174 profiling software by running experiences in the running program,
175 testing how run time performance is affected by "speeding up" parts of
176 the code to various degrees compared to a normal run. It does this by
177 slowing down parallel threads while the "faster up" code is running
178 and measure how this affect processing time. The processing time is
179 measured using probes inserted into the code, either using progress
180 counters (COZ_PROGRESS) or as latency meters (COZ_BEGIN/COZ_END). It
181 can also measure unmodified code by measuring complete the program
182 runtime and running the program several times instead.</p>
183
184 <p>The project and presentation was so inspiring that I would like to
185 get the system into Debian. I
186 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=830708">created
187 a WNPP request for it</a> and contacted upstream to try to make the
188 system ready for Debian by sending patches. The build process need to
189 be changed a bit to avoid running 'git clone' to get dependencies, and
190 to include the JavaScript web page used to visualize the collected
191 profiling information included in the source package.
192 But I expect that should work out fairly soon.</p>
193
194 <p>The way the system work is fairly simple. To run an coz experiment
195 on a binary with debug symbols available, start the program like this:
196
197 <p><blockquote><pre>
198 coz run --- program-to-run
199 </pre></blockquote></p>
200
201 <p>This will create a text file profile.coz with the instrumentation
202 information. To show what part of the code affect the performance
203 most, use a web browser and either point it to
204 <a href="http://plasma-umass.github.io/coz/">http://plasma-umass.github.io/coz/</a>
205 or use the copy from git (in the gh-pages branch). Check out this web
206 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
207 profiling more useful you include &lt;coz.h&gt; and insert the
208 COZ_PROGRESS or COZ_BEGIN and COZ_END at appropriate places in the
209 code, rebuild and run the profiler. This allow coz to do more
210 targeted experiments.</p>
211
212 <p>A video published by ACM
213 <a href="https://www.youtube.com/watch?v=jE0V-p1odPg">presenting the
214 Coz profiler</a> is available from Youtube. There is also a paper
215 from the 25th Symposium on Operating Systems Principles available
216 titled
217 <a href="https://www.usenix.org/conference/atc16/technical-sessions/presentation/curtsinger">Coz:
218 finding code that counts with causal profiling</a>.</p>
219
220 <p><a href="https://github.com/plasma-umass/coz">The source code</a>
221 for Coz is available from github. It will only build with clang
222 because it uses a
223 <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55606">C++
224 feature missing in GCC</a>, but I've submitted
225 <a href="https://github.com/plasma-umass/coz/pull/67">a patch to solve
226 it</a> and hope it will be included in the upstream source soon.</p>
227
228 <p>Please get in touch if you, like me, would like to see this piece
229 of software in Debian. I would very much like some help with the
230 packaging effort, as I lack the in depth knowledge on how to package
231 C++ libraries.</p>
232
233 </div>
234 <div class="tags">
235
236
237 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
238
239
240 </div>
241 </div>
242 <div class="padding"></div>
243
244 <div class="entry">
245 <div class="title">
246 <a href="http://people.skolelinux.org/pere/blog/Creepy__visualise_geotagged_social_media_information___nice_free_software.html">Creepy, visualise geotagged social media information - nice free software</a>
247 </div>
248 <div class="date">
249 24th January 2016
250 </div>
251 <div class="body">
252 <p>Most people seem not to realise that every time they walk around
253 with the computerised radio beacon known as a mobile phone their
254 position is tracked by the phone company and often stored for a long
255 time (like every time a SMS is received or sent). And if their
256 computerised radio beacon is capable of running programs (often called
257 mobile apps) downloaded from the Internet, these programs are often
258 also capable of tracking their location (if the app requested access
259 during installation). And when these programs send out information to
260 central collection points, the location is often included, unless
261 extra care is taken to not send the location. The provided
262 information is used by several entities, for good and bad (what is
263 good and bad, depend on your point of view). What is certain, is that
264 the private sphere and the right to free movement is challenged and
265 perhaps even eradicated for those announcing their location this way,
266 when they share their whereabouts with private and public
267 entities.</p>
268
269 <p align="center"><img width="70%" src="http://people.skolelinux.org/pere/blog/images/2016-01-24-nice-creepy-desktop-window.png"></p>
270
271 <p>The phone company logs provide a register of locations to check out
272 when one want to figure out what the tracked person was doing. It is
273 unavailable for most of us, but provided to selected government
274 officials, company staff, those illegally buying information from
275 unfaithful servants and crackers stealing the information. But the
276 public information can be collected and analysed, and a free software
277 tool to do so is called
278 <a href="http://www.geocreepy.com/">Creepy or Cree.py</a>. I
279 discovered it when I read
280 <a href="http://www.aftenposten.no/kultur/Slik-kan-du-bli-overvaket-pa-Twitter-og-Instagram-uten-a-ane-det-7787884.html">an
281 article about Creepy</a> in the Norwegian newspaper Aftenposten i
282 November 2014, and decided to check if it was available in Debian.
283 The python program was in Debian, but
284 <a href="https://tracker.debian.org/pkg/creepy">the version in
285 Debian</a> was completely broken and practically unmaintained. I
286 uploaded a new version which did not work quite right, but did not
287 have time to fix it then. This Christmas I decided to finally try to
288 get Creepy operational in Debian. Now a fixed version is available in
289 Debian unstable and testing, and almost all Debian specific patches
290 are now included
291 <a href="https://github.com/jkakavas/creepy">upstream</a>.</p>
292
293 <p>The Creepy program visualises geolocation information fetched from
294 Twitter, Instagram, Flickr and Google+, and allow one to get a
295 complete picture of every social media message posted recently in a
296 given area, or track the movement of a given individual across all
297 these services. Earlier it was possible to use the search API of at
298 least some of these services without identifying oneself, but these
299 days it is impossible. This mean that to use Creepy, you need to
300 configure it to log in as yourself on these services, and provide
301 information to them about your search interests. This should be taken
302 into account when using Creepy, as it will also share information
303 about yourself with the services.</p>
304
305 <p>The picture above show the twitter messages sent from (or at least
306 geotagged with a position from) the city centre of Oslo, the capital
307 of Norway. One useful way to use Creepy is to first look at
308 information tagged with an area of interest, and next look at all the
309 information provided by one or more individuals who was in the area.
310 I tested it by checking out which celebrity provide their location in
311 twitter messages by checkout out who sent twitter messages near a
312 Norwegian TV station, and next could track their position over time,
313 making it possible to locate their home and work place, among other
314 things. A similar technique have been
315 <a href="http://www.buzzfeed.com/maxseddon/does-this-soldiers-instagram-account-prove-russia-is-covertl">used
316 to locate Russian soldiers in Ukraine</a>, and it is both a powerful
317 tool to discover lying governments, and a useful tool to help people
318 understand the value of the private information they provide to the
319 public.</p>
320
321 <p>The package is not trivial to backport to Debian Stable/Jessie, as
322 it depend on several python modules currently missing in Jessie (at
323 least python-instagram, python-flickrapi and
324 python-requests-toolbelt).</p>
325
326 <p>(I have uploaded
327 <a href="https://screenshots.debian.net/package/creepy">the image to
328 screenshots.debian.net</a> and licensed it under the same terms as the
329 Creepy program in Debian.)</p>
330
331 </div>
332 <div class="tags">
333
334
335 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
336
337
338 </div>
339 </div>
340 <div class="padding"></div>
341
342 <div class="entry">
343 <div class="title">
344 <a href="http://people.skolelinux.org/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>
345 </div>
346 <div class="date">
347 23rd December 2015
348 </div>
349 <div class="body">
350 <p>When I was a kid, we used to collect "car numbers", as we used to
351 call the car license plate numbers in those days. I would write the
352 numbers down in my little book and compare notes with the other kids
353 to see how many region codes we had seen and if we had seen some
354 exotic or special region codes and numbers. It was a fun game to pass
355 time, as we kids have plenty of it.</p>
356
357 <p>A few days I came across
358 <a href="https://github.com/openalpr/openalpr">the OpenALPR
359 project</a>, a free software project to automatically discover and
360 report license plates in images and video streams, and provide the
361 "car numbers" in a machine readable format. I've been looking for
362 such system for a while now, because I believe it is a bad idea that the
363 <a href="https://en.wikipedia.org/wiki/Automatic_number_plate_recognition">automatic
364 number plate recognition</a> tool only is available in the hands of
365 the powerful, and want it to be available also for the powerless to
366 even the score when it comes to surveillance and sousveillance. I
367 discovered the developer
368 <a href="https://bugs.debian.org/747509">wanted to get the tool into
369 Debian</a>, and as I too wanted it to be in Debian, I volunteered to
370 help him get it into shape to get the package uploaded into the Debian
371 archive.</p>
372
373 <p>Today we finally managed to get the package into shape and uploaded
374 it into Debian, where it currently
375 <a href="https://ftp-master.debian.org//new/openalpr_2.2.1-1.html">waits
376 in the NEW queue</a> for review by the Debian ftpmasters.</p>
377
378 <p>I guess you are wondering why on earth such tool would be useful
379 for the common folks, ie those not running a large government
380 surveillance system? Well, I plan to put it in a computer on my bike
381 and in my car, tracking the cars nearby and allowing me to be notified
382 when number plates on my watch list are discovered. Another use case
383 was suggested by a friend of mine, who wanted to set it up at his home
384 to open the car port automatically when it discovered the plate on his
385 car. When I mentioned it perhaps was a bit foolhardy to allow anyone
386 capable of placing his license plate number of a piece of cardboard to
387 open his car port, men replied that it was always unlocked anyway. I
388 guess for such use case it make sense. I am sure there are other use
389 cases too, for those with imagination and a vision.</p>
390
391 <p>If you want to build your own version of the Debian package, check
392 out the upstream git source and symlink ./distros/debian to ./debian/
393 before running "debuild" to build the source. Or wait a bit until the
394 package show up in unstable.</p>
395
396 </div>
397 <div class="tags">
398
399
400 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
401
402
403 </div>
404 </div>
405 <div class="padding"></div>
406
407 <div class="entry">
408 <div class="title">
409 <a href="http://people.skolelinux.org/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>
410 </div>
411 <div class="date">
412 22nd October 2014
413 </div>
414 <div class="body">
415 <p>If you ever had to moderate a mailman list, like the ones on
416 alioth.debian.org, you know the web interface is fairly slow to
417 operate. First you visit one web page, enter the moderation password
418 and get a new page shown with a list of all the messages to moderate
419 and various options for each email address. This take a while for
420 every list you moderate, and you need to do it regularly to do a good
421 job as a list moderator. But there is a quick alternative,
422 <a href="http://heim.ifi.uio.no/kjetilho/hacks/#listadmin">the
423 listadmin program</a>. It allow you to check lists for new messages
424 to moderate in a fraction of a second. Here is a test run on two
425 lists I recently took over:</p>
426
427 <p><blockquote><pre>
428 % time listadmin xiph
429 fetching data for pkg-xiph-commits@lists.alioth.debian.org ... nothing in queue
430 fetching data for pkg-xiph-maint@lists.alioth.debian.org ... nothing in queue
431
432 real 0m1.709s
433 user 0m0.232s
434 sys 0m0.012s
435 %
436 </pre></blockquote></p>
437
438 <p>In 1.7 seconds I had checked two mailing lists and confirmed that
439 there are no message in the moderation queue. Every morning I
440 currently moderate 68 mailman lists, and it normally take around two
441 minutes. When I took over the two pkg-xiph lists above a few days
442 ago, there were 400 emails waiting in the moderator queue. It took me
443 less than 15 minutes to process them all using the listadmin
444 program.</p>
445
446 <p>If you install
447 <a href="https://tracker.debian.org/pkg/listadmin">the listadmin
448 package</a> from Debian and create a file <tt>~/.listadmin.ini</tt>
449 with content like this, the moderation task is a breeze:</p>
450
451 <p><blockquote><pre>
452 username username@example.org
453 spamlevel 23
454 default discard
455 discard_if_reason "Posting restricted to members only. Remove us from your mail list."
456
457 password secret
458 adminurl https://{domain}/mailman/admindb/{list}
459 mailman-list@lists.example.com
460
461 password hidden
462 other-list@otherserver.example.org
463 </pre></blockquote></p>
464
465 <p>There are other options to set as well. Check the manual page to
466 learn the details.</p>
467
468 <p>If you are forced to moderate lists on a mailman installation where
469 the SSL certificate is self signed or not properly signed by a
470 generally accepted signing authority, you can set a environment
471 variable when calling listadmin to disable SSL verification:</p>
472
473 <p><blockquote><pre>
474 PERL_LWP_SSL_VERIFY_HOSTNAME=0 listadmin
475 </pre></blockquote></p>
476
477 <p>If you want to moderate a subset of the lists you take care of, you
478 can provide an argument to the listadmin script like I do in the
479 initial screen dump (the xiph argument). Using an argument, only
480 lists matching the argument string will be processed. This make it
481 quick to accept messages if you notice the moderation request in your
482 email.</p>
483
484 <p>Without the listadmin program, I would never be the moderator of 68
485 mailing lists, as I simply do not have time to spend on that if the
486 process was any slower. The listadmin program have saved me hours of
487 time I could spend elsewhere over the years. It truly is nice free
488 software.</p>
489
490 <p>As usual, if you use Bitcoin and want to show your support of my
491 activities, please send Bitcoin donations to my address
492 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
493
494 <p>Update 2014-10-27: Added missing 'username' statement in
495 configuration example. Also, I've been told that the
496 PERL_LWP_SSL_VERIFY_HOSTNAME=0 setting do not work for everyone. Not
497 sure why.</p>
498
499 </div>
500 <div class="tags">
501
502
503 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
504
505
506 </div>
507 </div>
508 <div class="padding"></div>
509
510 <div class="entry">
511 <div class="title">
512 <a href="http://people.skolelinux.org/pere/blog/S3QL__a_locally_mounted_cloud_file_system___nice_free_software.html">S3QL, a locally mounted cloud file system - nice free software</a>
513 </div>
514 <div class="date">
515 9th April 2014
516 </div>
517 <div class="body">
518 <p>For a while now, I have been looking for a sensible offsite backup
519 solution for use at home. My requirements are simple, it must be
520 cheap and locally encrypted (in other words, I keep the encryption
521 keys, the storage provider do not have access to my private files).
522 One idea me and my friends had many years ago, before the cloud
523 storage providers showed up, was to use Google mail as storage,
524 writing a Linux block device storing blocks as emails in the mail
525 service provided by Google, and thus get heaps of free space. On top
526 of this one can add encryption, RAID and volume management to have
527 lots of (fairly slow, I admit that) cheap and encrypted storage. But
528 I never found time to implement such system. But the last few weeks I
529 have looked at a system called
530 <a href="https://bitbucket.org/nikratio/s3ql/">S3QL</a>, a locally
531 mounted network backed file system with the features I need.</p>
532
533 <p>S3QL is a fuse file system with a local cache and cloud storage,
534 handling several different storage providers, any with Amazon S3,
535 Google Drive or OpenStack API. There are heaps of such storage
536 providers. S3QL can also use a local directory as storage, which
537 combined with sshfs allow for file storage on any ssh server. S3QL
538 include support for encryption, compression, de-duplication, snapshots
539 and immutable file systems, allowing me to mount the remote storage as
540 a local mount point, look at and use the files as if they were local,
541 while the content is stored in the cloud as well. This allow me to
542 have a backup that should survive fire. The file system can not be
543 shared between several machines at the same time, as only one can
544 mount it at the time, but any machine with the encryption key and
545 access to the storage service can mount it if it is unmounted.</p>
546
547 <p>It is simple to use. I'm using it on Debian Wheezy, where the
548 package is included already. So to get started, run <tt>apt-get
549 install s3ql</tt>. Next, pick a storage provider. I ended up picking
550 Greenqloud, after reading their nice recipe on
551 <a href="https://greenqloud.zendesk.com/entries/44611757-How-To-Use-S3QL-to-mount-a-StorageQloud-bucket-on-Debian-Wheezy">how
552 to use S3QL with their Amazon S3 service</a>, because I trust the laws
553 in Iceland more than those in USA when it come to keeping my personal
554 data safe and private, and thus would rather spend money on a company
555 in Iceland. Another nice recipe is available from the article
556 <a href="http://www.admin-magazine.com/HPC/Articles/HPC-Cloud-Storage">S3QL
557 Filesystem for HPC Storage</a> by Jeff Layton in the HPC section of
558 Admin magazine. When the provider is picked, figure out how to get
559 the API key needed to connect to the storage API. With Greencloud,
560 the key did not show up until I had added payment details to my
561 account.</p>
562
563 <p>Armed with the API access details, it is time to create the file
564 system. First, create a new bucket in the cloud. This bucket is the
565 file system storage area. I picked a bucket name reflecting the
566 machine that was going to store data there, but any name will do.
567 I'll refer to it as <tt>bucket-name</tt> below. In addition, one need
568 the API login and password, and a locally created password. Store it
569 all in ~root/.s3ql/authinfo2 like this:
570
571 <p><blockquote><pre>
572 [s3c]
573 storage-url: s3c://s.greenqloud.com:443/bucket-name
574 backend-login: API-login
575 backend-password: API-password
576 fs-passphrase: local-password
577 </pre></blockquote></p>
578
579 <p>I create my local passphrase using <tt>pwget 50</tt> or similar,
580 but any sensible way to create a fairly random password should do it.
581 Armed with these details, it is now time to run mkfs, entering the API
582 details and password to create it:</p>
583
584 <p><blockquote><pre>
585 # mkdir -m 700 /var/lib/s3ql-cache
586 # mkfs.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
587 --ssl s3c://s.greenqloud.com:443/bucket-name
588 Enter backend login:
589 Enter backend password:
590 Before using S3QL, make sure to read the user's guide, especially
591 the 'Important Rules to Avoid Loosing Data' section.
592 Enter encryption password:
593 Confirm encryption password:
594 Generating random encryption key...
595 Creating metadata tables...
596 Dumping metadata...
597 ..objects..
598 ..blocks..
599 ..inodes..
600 ..inode_blocks..
601 ..symlink_targets..
602 ..names..
603 ..contents..
604 ..ext_attributes..
605 Compressing and uploading metadata...
606 Wrote 0.00 MB of compressed metadata.
607 # </pre></blockquote></p>
608
609 <p>The next step is mounting the file system to make the storage available.
610
611 <p><blockquote><pre>
612 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
613 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
614 Using 4 upload threads.
615 Downloading and decompressing metadata...
616 Reading metadata...
617 ..objects..
618 ..blocks..
619 ..inodes..
620 ..inode_blocks..
621 ..symlink_targets..
622 ..names..
623 ..contents..
624 ..ext_attributes..
625 Mounting filesystem...
626 # df -h /s3ql
627 Filesystem Size Used Avail Use% Mounted on
628 s3c://s.greenqloud.com:443/bucket-name 1.0T 0 1.0T 0% /s3ql
629 #
630 </pre></blockquote></p>
631
632 <p>The file system is now ready for use. I use rsync to store my
633 backups in it, and as the metadata used by rsync is downloaded at
634 mount time, no network traffic (and storage cost) is triggered by
635 running rsync. To unmount, one should not use the normal umount
636 command, as this will not flush the cache to the cloud storage, but
637 instead running the umount.s3ql command like this:
638
639 <p><blockquote><pre>
640 # umount.s3ql /s3ql
641 #
642 </pre></blockquote></p>
643
644 <p>There is a fsck command available to check the file system and
645 correct any problems detected. This can be used if the local server
646 crashes while the file system is mounted, to reset the "already
647 mounted" flag. This is what it look like when processing a working
648 file system:</p>
649
650 <p><blockquote><pre>
651 # fsck.s3ql --force --ssl s3c://s.greenqloud.com:443/bucket-name
652 Using cached metadata.
653 File system seems clean, checking anyway.
654 Checking DB integrity...
655 Creating temporary extra indices...
656 Checking lost+found...
657 Checking cached objects...
658 Checking names (refcounts)...
659 Checking contents (names)...
660 Checking contents (inodes)...
661 Checking contents (parent inodes)...
662 Checking objects (reference counts)...
663 Checking objects (backend)...
664 ..processed 5000 objects so far..
665 ..processed 10000 objects so far..
666 ..processed 15000 objects so far..
667 Checking objects (sizes)...
668 Checking blocks (referenced objects)...
669 Checking blocks (refcounts)...
670 Checking inode-block mapping (blocks)...
671 Checking inode-block mapping (inodes)...
672 Checking inodes (refcounts)...
673 Checking inodes (sizes)...
674 Checking extended attributes (names)...
675 Checking extended attributes (inodes)...
676 Checking symlinks (inodes)...
677 Checking directory reachability...
678 Checking unix conventions...
679 Checking referential integrity...
680 Dropping temporary indices...
681 Backing up old metadata...
682 Dumping metadata...
683 ..objects..
684 ..blocks..
685 ..inodes..
686 ..inode_blocks..
687 ..symlink_targets..
688 ..names..
689 ..contents..
690 ..ext_attributes..
691 Compressing and uploading metadata...
692 Wrote 0.89 MB of compressed metadata.
693 #
694 </pre></blockquote></p>
695
696 <p>Thanks to the cache, working on files that fit in the cache is very
697 quick, about the same speed as local file access. Uploading large
698 amount of data is to me limited by the bandwidth out of and into my
699 house. Uploading 685 MiB with a 100 MiB cache gave me 305 kiB/s,
700 which is very close to my upload speed, and downloading the same
701 Debian installation ISO gave me 610 kiB/s, close to my download speed.
702 Both were measured using <tt>dd</tt>. So for me, the bottleneck is my
703 network, not the file system code. I do not know what a good cache
704 size would be, but suspect that the cache should e larger than your
705 working set.</p>
706
707 <p>I mentioned that only one machine can mount the file system at the
708 time. If another machine try, it is told that the file system is
709 busy:</p>
710
711 <p><blockquote><pre>
712 # mount.s3ql --cachedir /var/lib/s3ql-cache --authfile /root/.s3ql/authinfo2 \
713 --ssl --allow-root s3c://s.greenqloud.com:443/bucket-name /s3ql
714 Using 8 upload threads.
715 Backend reports that fs is still mounted elsewhere, aborting.
716 #
717 </pre></blockquote></p>
718
719 <p>The file content is uploaded when the cache is full, while the
720 metadata is uploaded once every 24 hour by default. To ensure the
721 file system content is flushed to the cloud, one can either umount the
722 file system, or ask S3QL to flush the cache and metadata using
723 s3qlctrl:
724
725 <p><blockquote><pre>
726 # s3qlctrl upload-meta /s3ql
727 # s3qlctrl flushcache /s3ql
728 #
729 </pre></blockquote></p>
730
731 <p>If you are curious about how much space your data uses in the
732 cloud, and how much compression and deduplication cut down on the
733 storage usage, you can use s3qlstat on the mounted file system to get
734 a report:</p>
735
736 <p><blockquote><pre>
737 # s3qlstat /s3ql
738 Directory entries: 9141
739 Inodes: 9143
740 Data blocks: 8851
741 Total data size: 22049.38 MB
742 After de-duplication: 21955.46 MB (99.57% of total)
743 After compression: 21877.28 MB (99.22% of total, 99.64% of de-duplicated)
744 Database size: 2.39 MB (uncompressed)
745 (some values do not take into account not-yet-uploaded dirty blocks in cache)
746 #
747 </pre></blockquote></p>
748
749 <p>I mentioned earlier that there are several possible suppliers of
750 storage. I did not try to locate them all, but am aware of at least
751 <a href="https://www.greenqloud.com/">Greenqloud</a>,
752 <a href="http://drive.google.com/">Google Drive</a>,
753 <a href="http://aws.amazon.com/s3/">Amazon S3 web serivces</a>,
754 <a href="http://www.rackspace.com/">Rackspace</a> and
755 <a href="http://crowncloud.net/">Crowncloud</A>. The latter even
756 accept payment in Bitcoin. Pick one that suit your need. Some of
757 them provide several GiB of free storage, but the prize models are
758 quite different and you will have to figure out what suits you
759 best.</p>
760
761 <p>While researching this blog post, I had a look at research papers
762 and posters discussing the S3QL file system. There are several, which
763 told me that the file system is getting a critical check by the
764 science community and increased my confidence in using it. One nice
765 poster is titled
766 "<a href="http://www.lanl.gov/orgs/adtsc/publications/science_highlights_2013/docs/pg68_69.pdf">An
767 Innovative Parallel Cloud Storage System using OpenStack’s SwiftObject
768 Store and Transformative Parallel I/O Approach</a>" by Hsing-Bung
769 Chen, Benjamin McClelland, David Sherrill, Alfred Torrez, Parks Fields
770 and Pamela Smith. Please have a look.</p>
771
772 <p>Given my problems with different file systems earlier, I decided to
773 check out the mounted S3QL file system to see if it would be usable as
774 a home directory (in other word, that it provided POSIX semantics when
775 it come to locking and umask handling etc). Running
776 <a href="http://people.skolelinux.org/pere/blog/Testing_if_a_file_system_can_be_used_for_home_directories___.html">my
777 test code to check file system semantics</a>, I was happy to discover that
778 no error was found. So the file system can be used for home
779 directories, if one chooses to do so.</p>
780
781 <p>If you do not want a locally file system, and want something that
782 work without the Linux fuse file system, I would like to mention the
783 <a href="http://www.tarsnap.com/">Tarsnap service</a>, which also
784 provide locally encrypted backup using a command line client. It have
785 a nicer access control system, where one can split out read and write
786 access, allowing some systems to write to the backup and others to
787 only read from it.</p>
788
789 <p>As usual, if you use Bitcoin and want to show your support of my
790 activities, please send Bitcoin donations to my address
791 <b><a href="bitcoin:15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b">15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b</a></b>.</p>
792
793 </div>
794 <div class="tags">
795
796
797 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>, <a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern</a>, <a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet</a>.
798
799
800 </div>
801 </div>
802 <div class="padding"></div>
803
804 <div class="entry">
805 <div class="title">
806 <a href="http://people.skolelinux.org/pere/blog/ReactOS_Windows_clone___nice_free_software.html">ReactOS Windows clone - nice free software</a>
807 </div>
808 <div class="date">
809 1st April 2014
810 </div>
811 <div class="body">
812 <p>Microsoft have announced that Windows XP reaches its end of life
813 2014-04-08, in 7 days. But there are heaps of machines still running
814 Windows XP, and depending on Windows XP to run their applications, and
815 upgrading will be expensive, both when it comes to money and when it
816 comes to the amount of effort needed to migrate from Windows XP to a
817 new operating system. Some obvious options (buy new a Windows
818 machine, buy a MacOSX machine, install Linux on the existing machine)
819 are already well known and covered elsewhere. Most of them involve
820 leaving the user applications installed on Windows XP behind and
821 trying out replacements or updated versions. In this blog post I want
822 to mention one strange bird that allow people to keep the hardware and
823 the existing Windows XP applications and run them on a free software
824 operating system that is Windows XP compatible.</p>
825
826 <p><a href="http://www.reactos.org/">ReactOS</a> is a free software
827 operating system (GNU GPL licensed) working on providing a operating
828 system that is binary compatible with Windows, able to run windows
829 programs directly and to use Windows drivers for hardware directly.
830 The project goal is for Windows user to keep their existing machines,
831 drivers and software, and gain the advantages from user a operating
832 system without usage limitations caused by non-free licensing. It is
833 a Windows clone running directly on the hardware, so quite different
834 from the approach taken by <a href="http://www.winehq.org/">the Wine
835 project</a>, which make it possible to run Windows binaries on
836 Linux.</p>
837
838 <p>The ReactOS project share code with the Wine project, so most
839 shared libraries available on Windows are already implemented already.
840 There is also a software manager like the one we are used to on Linux,
841 allowing the user to install free software applications with a simple
842 click directly from the Internet. Check out the
843 <a href="http://www.reactos.org/screenshots">screen shots on the
844 project web site</a> for an idea what it look like (it looks just like
845 Windows before metro).</p>
846
847 <p>I do not use ReactOS myself, preferring Linux and Unix like
848 operating systems. I've tested it, and it work fine in a virt-manager
849 virtual machine. The browser, minesweeper, notepad etc is working
850 fine as far as I can tell. Unfortunately, my main test application
851 is the software included on a CD with the Lego Mindstorms NXT, which
852 seem to install just fine from CD but fail to leave any binaries on
853 the disk after the installation. So no luck with that test software.
854 No idea why, but hope someone else figure out and fix the problem.
855 I've tried the ReactOS Live ISO on a physical machine, and it seemed
856 to work just fine. If you like Windows and want to keep running your
857 old Windows binaries, check it out by
858 <a href="http://www.reactos.org/download">downloading</a> the
859 installation CD, the live CD or the preinstalled virtual machine
860 image.</p>
861
862 </div>
863 <div class="tags">
864
865
866 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>, <a href="http://people.skolelinux.org/pere/blog/tags/reactos">reactos</a>.
867
868
869 </div>
870 </div>
871 <div class="padding"></div>
872
873 <div class="entry">
874 <div class="title">
875 <a href="http://people.skolelinux.org/pere/blog/Video_DVD_reader_library___python_dvdvideo___nice_free_software.html">Video DVD reader library / python-dvdvideo - nice free software</a>
876 </div>
877 <div class="date">
878 21st March 2014
879 </div>
880 <div class="body">
881 <p>Keeping your DVD collection safe from scratches and curious
882 children fingers while still having it available when you want to see a
883 movie is not straight forward. My preferred method at the moment is
884 to store a full copy of the ISO on a hard drive, and use VLC, Popcorn
885 Hour or other useful players to view the resulting file. This way the
886 subtitles and bonus material are still available and using the ISO is
887 just like inserting the original DVD record in the DVD player.</p>
888
889 <p>Earlier I used dd for taking security copies, but it do not handle
890 DVDs giving read errors (which are quite a few of them). I've also
891 tried using
892 <a href="http://people.skolelinux.org/pere/blog/Ripping_problematic_DVDs_using_dvdbackup_and_genisoimage.html">dvdbackup
893 and genisoimage</a>, but these days I use the marvellous python library
894 and program
895 <a href="http://bblank.thinkmo.de/blog/new-software-python-dvdvideo">python-dvdvideo</a>
896 written by Bastian Blank. It is
897 <a href="http://packages.qa.debian.org/p/python-dvdvideo.html">in Debian
898 already</a> and the binary package name is python3-dvdvideo. Instead
899 of trying to read every block from the DVD, it parses the file
900 structure and figure out which block on the DVD is actually in used,
901 and only read those blocks from the DVD. This work surprisingly well,
902 and I have been able to almost backup my entire DVD collection using
903 this method.</p>
904
905 <p>So far, python-dvdvideo have failed on between 10 and
906 20 DVDs, which is a small fraction of my collection. The most common
907 problem is
908 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=720831">DVDs
909 using UTF-16 instead of UTF-8 characters</a>, which according to
910 Bastian is against the DVD specification (and seem to cause some
911 players to fail too). A rarer problem is what seem to be inconsistent
912 DVD structures, as the python library
913 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=723079">claim
914 there is a overlap between objects</a>. An equally rare problem claim
915 <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=741878">some
916 value is out of range</a>. No idea what is going on there. I wish I
917 knew enough about the DVD format to fix these, to ensure my movie
918 collection will stay with me in the future.</p>
919
920 <p>So, if you need to keep your DVDs safe, back them up using
921 python-dvdvideo. :)</p>
922
923 </div>
924 <div class="tags">
925
926
927 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>, <a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett</a>, <a href="http://people.skolelinux.org/pere/blog/tags/video">video</a>.
928
929
930 </div>
931 </div>
932 <div class="padding"></div>
933
934 <div class="entry">
935 <div class="title">
936 <a href="http://people.skolelinux.org/pere/blog/Free_Timetabling_Software___nice_free_software.html">Free Timetabling Software - nice free software</a>
937 </div>
938 <div class="date">
939 7th July 2012
940 </div>
941 <div class="body">
942 <p>Included in <a href="http://www.skolelinux.org/">Debian Edu /
943 Skolelinux</a> is a large collection of end user and school specific
944 software. It is one of the packages not installed by default but
945 provided in the Debian archive for schools to install if they want to,
946 is a system to automatically plan the school time table using
947 information about available teachers, classes and rooms, combined with
948 the list of required courses and how many hours each topic should
949 receive. The software is
950
951 <a href="http://lalescu.ro/liviu/fet/">named FET</a>, and it provide a
952 graphical user interface to input the required information, save the
953 result in a fairly simple XML format, and generate time tables for
954 both teachers and students. It is available both for
955 <a href="http://lalescu.ro/liviu/fet/download.html">Linux, MacOSX and
956 Windows</a>.</p>
957
958 <p>This is <a href="http://lalescu.ro/liviu/fet/features.html">the
959 feature list</a>, liftet from the project web site:</p>
960
961 <p><ul>
962
963 <li>FET is free software, licensed under the GNU GPL v2 or later.
964 You can freely use, copy, modify and redistribute it </li>
965
966 <li>Localized to en_US (US English, default), ar (Arabic), ca
967 (Catalan), da (Danish), de (German), el (Greek), es (Spanish), fa
968 (Persian), fr (French), gl (Galician), he (Hebrew), hu
969 (Hungarian), id (Indonesian), it (Italian), lt (Lithuanian), mk
970 (Macedonian), ms (Malay), nl (Dutch), pl (Polish), pt_BR
971 (Brazilian Portuguese), ro (Romanian), ru (Russian), si (Sinhala),
972 sk (Slovak), sr (Serbian), tr (Turkish), uk (Ukrainian), uz
973 (Uzbek) and vi (Vietnamese) (incompletely for some languages)
974 </li>
975
976 <li>Fully automatic generation algorithm, allowing also
977 semi-automatic or manual allocation</li>
978
979 <li>Platform independent implementation, allowing running on
980 GNU/Linux, Windows, Mac and any system that Qt supports </li>
981
982 <li>Flexible modular XML format for the input file, allowing editing
983 with an XML editor or by hand (besides FET interface)</li>
984
985 <li>Import/export from CSV format</li>
986
987 <li>The resulted timetables are exported into HTML, XML and CSV
988 formats </li>
989
990 <li>Flexible students structure, organized into sets: years, groups
991 and subgroups. FET allows overlapping years and groups and
992 non-overlapping subgroups. You can even define individual students
993 (as separate sets)</li>
994
995 <li>Each constraint has a weight percentage, from 0.0% to 100.0%
996 (but some special constraints are allowed to have only 100% weight
997 percentage)</li>
998
999 <li>Limits for the algorithm (all these limits can be increased on
1000 demand, as a custom version, because this would require a bit more
1001 memory):
1002 <ul>
1003 <li>Maximum total number of hours (periods) per day: 60</li>
1004 <li>Maximum number of working days per week: 35</li>
1005 <li>Maximum total number of teachers: 6000</li>
1006 <li>Maximum total number of sets of students: 30000</li>
1007 <li>Maximum total number of subjects: 6000</li>
1008 <li>Virtually unlimited number of activity tags</li>
1009 <li>Maximum number of activities: 30000</li>
1010 <li>Maximum number of rooms: 6000</li>
1011 <li>Maximum number of buildings: 6000</li>
1012 <li>Possibility of adding multiple teachers and
1013 students sets for each activity. (it is possible
1014 also to have no teachers or no students sets for an
1015 activity)</li>
1016 <li>Virtually unlimited number of time constraints</li>
1017 <li>Virtually unlimited number of space constraints</li>
1018 </ul></li>
1019
1020 <li>A large and flexible palette of time constraints:
1021 <ul>
1022 <li>Break periods</li>
1023 <li>For teacher(s):
1024 <ul>
1025 <li>Not available periods</li>
1026 <li>Max/min days per week</li>
1027 <li>Max gaps per day/week</li>
1028 <li>Max hours daily/continuously</li>
1029 <li>Min hours daily</li>
1030 <li>Max hours daily/continuously with an activity tag</li>
1031
1032 <li>Respect working in an hourly interval a max number of
1033 days per week</li>
1034 </ul></li>
1035 <li>For students (sets):
1036 <ul>
1037 <li>Not available periods</li>
1038 <li>Begins early (specify max allowed beginnings at second hour)</li>
1039 <li>Max gaps per day/week</li>
1040 <li>Max hours daily/continuously</li>
1041 <li>Min hours daily</li>
1042 <li>Max hours daily/continuously with an activity tag</li>
1043
1044 <li>Respect working in an hourly interval a max number of
1045 days per week</li>
1046 </ul></li>
1047 <li>For an activity or a set of activities/subactivities:
1048 <ul>
1049 <li>A single preferred starting time</li>
1050 <li>A set of preferred starting times</li>
1051 <li>A set of preferred time slots</li>
1052 <li>Min/max days between them</li>
1053 <li>End(s) students day</li>
1054 <li>Same starting time/day/hour</li>
1055 <li>Occupy max time slots from selection (a complex and
1056 flexible constraint, useful in many situations)</li>
1057 <li>Consecutive, ordered, grouped (for 2 or 3 (sub)activities)</li>
1058 <li>Not overlapping</li>
1059 <li>Max simultaneous in selected time slots</li>
1060 <li>Min gaps between a set of (sub)activities</li>
1061 </ul></li>
1062 </ul></li>
1063
1064 <li>A large and flexible palette of space constraints:
1065 <ul>
1066 <li>Room not available periods</li>
1067 <li>For teacher(s):
1068 <ul>
1069 <li>Home room(s)</li>
1070 <li>Max building changes per day/week</li>
1071 <li>Min gaps between building changes</li>
1072 </ul>
1073 </li>
1074
1075 <li>For students (sets):
1076 <ul>
1077 <li>Home room(s)</li>
1078 <li>Max building changes per day/week</li>
1079 <li>Min gaps between building changes</li>
1080 </ul>
1081 </li>
1082 <li>Preferred room(s):
1083 <ul>
1084 <li>For a subject</li>
1085 <li>For an activity tag</li>
1086 <li>For a subject and an activity tag</li>
1087 <li>Individually for a (sub)activity</li>
1088 </ul>
1089 </li>
1090
1091 <li>For a set of activities:
1092 <ul>
1093 <li>Occupy a maximum number of different rooms</li>
1094 </ul>
1095 </li>
1096 </ul>
1097 </li>
1098 </ul></p>
1099
1100 <p>I have not used it myself, as I am not involved in time table
1101 planning at a school, but it seem to work fine when I test it. If you
1102 need to set up your schools time table, and is tired of doing it
1103 manually, check it out.
1104
1105 A quick summary on how to use it can be found in
1106 <a href="http://marvelsoft.co.in/wp/2012/03/generate-timetable-for-state-cbse-icse-igcse-schools-free/">a
1107 blog post from MarvelSoft</a>. If you find FET useful, please provide
1108 a recipe for the Debian Edu project in the
1109 <a href="http://wiki.debian.org/DebianEdu#Howtos">Debian Edu HowTo
1110 section</a>.</p>
1111
1112 </div>
1113 <div class="tags">
1114
1115
1116 Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software</a>.
1117
1118
1119 </div>
1120 </div>
1121 <div class="padding"></div>
1122
1123 <p style="text-align: right;"><a href="nice free software.rss"><img src="http://people.skolelinux.org/pere/blog/xml.gif" alt="RSS Feed" width="36" height="14" /></a></p>
1124 <div id="sidebar">
1125
1126
1127
1128 <h2>Archive</h2>
1129 <ul>
1130
1131 <li>2018
1132 <ul>
1133
1134 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/01/">January (1)</a></li>
1135
1136 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/02/">February (5)</a></li>
1137
1138 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/03/">March (5)</a></li>
1139
1140 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/04/">April (3)</a></li>
1141
1142 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/06/">June (2)</a></li>
1143
1144 <li><a href="http://people.skolelinux.org/pere/blog/archive/2018/07/">July (3)</a></li>
1145
1146 </ul></li>
1147
1148 <li>2017
1149 <ul>
1150
1151 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/01/">January (4)</a></li>
1152
1153 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/02/">February (3)</a></li>
1154
1155 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/03/">March (5)</a></li>
1156
1157 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/04/">April (2)</a></li>
1158
1159 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/06/">June (5)</a></li>
1160
1161 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/07/">July (1)</a></li>
1162
1163 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/08/">August (1)</a></li>
1164
1165 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/09/">September (3)</a></li>
1166
1167 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/10/">October (5)</a></li>
1168
1169 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/11/">November (3)</a></li>
1170
1171 <li><a href="http://people.skolelinux.org/pere/blog/archive/2017/12/">December (4)</a></li>
1172
1173 </ul></li>
1174
1175 <li>2016
1176 <ul>
1177
1178 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/01/">January (3)</a></li>
1179
1180 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/02/">February (2)</a></li>
1181
1182 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/03/">March (3)</a></li>
1183
1184 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/04/">April (8)</a></li>
1185
1186 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/05/">May (8)</a></li>
1187
1188 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/06/">June (2)</a></li>
1189
1190 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/07/">July (2)</a></li>
1191
1192 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/08/">August (5)</a></li>
1193
1194 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/09/">September (2)</a></li>
1195
1196 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/10/">October (3)</a></li>
1197
1198 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/11/">November (8)</a></li>
1199
1200 <li><a href="http://people.skolelinux.org/pere/blog/archive/2016/12/">December (5)</a></li>
1201
1202 </ul></li>
1203
1204 <li>2015
1205 <ul>
1206
1207 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/01/">January (7)</a></li>
1208
1209 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/02/">February (6)</a></li>
1210
1211 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/03/">March (1)</a></li>
1212
1213 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/04/">April (4)</a></li>
1214
1215 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/05/">May (3)</a></li>
1216
1217 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/06/">June (4)</a></li>
1218
1219 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/07/">July (6)</a></li>
1220
1221 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/08/">August (2)</a></li>
1222
1223 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/09/">September (2)</a></li>
1224
1225 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/10/">October (9)</a></li>
1226
1227 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/11/">November (6)</a></li>
1228
1229 <li><a href="http://people.skolelinux.org/pere/blog/archive/2015/12/">December (3)</a></li>
1230
1231 </ul></li>
1232
1233 <li>2014
1234 <ul>
1235
1236 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/01/">January (2)</a></li>
1237
1238 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/02/">February (3)</a></li>
1239
1240 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/03/">March (8)</a></li>
1241
1242 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/04/">April (7)</a></li>
1243
1244 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/05/">May (1)</a></li>
1245
1246 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/06/">June (2)</a></li>
1247
1248 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/07/">July (2)</a></li>
1249
1250 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/08/">August (2)</a></li>
1251
1252 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/09/">September (5)</a></li>
1253
1254 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/10/">October (6)</a></li>
1255
1256 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/11/">November (3)</a></li>
1257
1258 <li><a href="http://people.skolelinux.org/pere/blog/archive/2014/12/">December (5)</a></li>
1259
1260 </ul></li>
1261
1262 <li>2013
1263 <ul>
1264
1265 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
1266
1267 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
1268
1269 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
1270
1271 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
1272
1273 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
1274
1275 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
1276
1277 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
1278
1279 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
1280
1281 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
1282
1283 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/10/">October (7)</a></li>
1284
1285 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/11/">November (9)</a></li>
1286
1287 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/12/">December (3)</a></li>
1288
1289 </ul></li>
1290
1291 <li>2012
1292 <ul>
1293
1294 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
1295
1296 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
1297
1298 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
1299
1300 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
1301
1302 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
1303
1304 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
1305
1306 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
1307
1308 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
1309
1310 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
1311
1312 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
1313
1314 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
1315
1316 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
1317
1318 </ul></li>
1319
1320 <li>2011
1321 <ul>
1322
1323 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
1324
1325 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
1326
1327 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
1328
1329 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
1330
1331 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
1332
1333 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
1334
1335 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
1336
1337 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
1338
1339 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
1340
1341 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
1342
1343 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
1344
1345 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
1346
1347 </ul></li>
1348
1349 <li>2010
1350 <ul>
1351
1352 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
1353
1354 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
1355
1356 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
1357
1358 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
1359
1360 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
1361
1362 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
1363
1364 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
1365
1366 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
1367
1368 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
1369
1370 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
1371
1372 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
1373
1374 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
1375
1376 </ul></li>
1377
1378 <li>2009
1379 <ul>
1380
1381 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
1382
1383 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
1384
1385 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
1386
1387 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
1388
1389 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
1390
1391 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
1392
1393 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
1394
1395 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
1396
1397 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
1398
1399 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
1400
1401 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
1402
1403 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
1404
1405 </ul></li>
1406
1407 <li>2008
1408 <ul>
1409
1410 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
1411
1412 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
1413
1414 </ul></li>
1415
1416 </ul>
1417
1418
1419
1420 <h2>Tags</h2>
1421 <ul>
1422
1423 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (16)</a></li>
1424
1425 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
1426
1427 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
1428
1429 <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
1430
1431 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (9)</a></li>
1432
1433 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (17)</a></li>
1434
1435 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
1436
1437 <li><a href="http://people.skolelinux.org/pere/blog/tags/chrpath">chrpath (2)</a></li>
1438
1439 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (159)</a></li>
1440
1441 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (158)</a></li>
1442
1443 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian-handbook">debian-handbook (4)</a></li>
1444
1445 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
1446
1447 <li><a href="http://people.skolelinux.org/pere/blog/tags/dld">dld (17)</a></li>
1448
1449 <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (25)</a></li>
1450
1451 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
1452
1453 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (377)</a></li>
1454
1455 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (23)</a></li>
1456
1457 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (13)</a></li>
1458
1459 <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (32)</a></li>
1460
1461 <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (9)</a></li>
1462
1463 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (18)</a></li>
1464
1465 <li><a href="http://people.skolelinux.org/pere/blog/tags/h264">h264 (20)</a></li>
1466
1467 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (42)</a></li>
1468
1469 <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (16)</a></li>
1470
1471 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (20)</a></li>
1472
1473 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (9)</a></li>
1474
1475 <li><a href="http://people.skolelinux.org/pere/blog/tags/lego">lego (4)</a></li>
1476
1477 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (8)</a></li>
1478
1479 <li><a href="http://people.skolelinux.org/pere/blog/tags/lsdvd">lsdvd (2)</a></li>
1480
1481 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
1482
1483 <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (8)</a></li>
1484
1485 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (41)</a></li>
1486
1487 <li><a href="http://people.skolelinux.org/pere/blog/tags/nice free software">nice free software (10)</a></li>
1488
1489 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (299)</a></li>
1490
1491 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (190)</a></li>
1492
1493 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (33)</a></li>
1494
1495 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
1496
1497 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (71)</a></li>
1498
1499 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (107)</a></li>
1500
1501 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (2)</a></li>
1502
1503 <li><a href="http://people.skolelinux.org/pere/blog/tags/reactos">reactos (1)</a></li>
1504
1505 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
1506
1507 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (3)</a></li>
1508
1509 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (10)</a></li>
1510
1511 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
1512
1513 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (6)</a></li>
1514
1515 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
1516
1517 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (54)</a></li>
1518
1519 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
1520
1521 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (5)</a></li>
1522
1523 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (55)</a></li>
1524
1525 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (6)</a></li>
1526
1527 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (12)</a></li>
1528
1529 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (55)</a></li>
1530
1531 <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (4)</a></li>
1532
1533 <li><a href="http://people.skolelinux.org/pere/blog/tags/usenix">usenix (2)</a></li>
1534
1535 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (9)</a></li>
1536
1537 <li><a href="http://people.skolelinux.org/pere/blog/tags/verkidetfri">verkidetfri (11)</a></li>
1538
1539 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (65)</a></li>
1540
1541 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
1542
1543 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (41)</a></li>
1544
1545 </ul>
1546
1547
1548 </div>
1549 <p style="text-align: right">
1550 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
1551 </p>
1552
1553 </body>
1554 </html>