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