]> pere.pagekite.me Git - homepage.git/blob - blog/index.html
Ny oppføring.
[homepage.git] / blog / index.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html>
4 <head>
5 <title>Petter Reinholdtsen</title>
6 <link rel="stylesheet" type="text/css" media="screen" href="style.css">
7 <link rel="alternate" title="RSS Feed" href="index.rss" type="application/rss+xml">
8
9 </head>
10 <body>
11
12 <div class="title">
13 <h1>
14 <a href="">Petter Reinholdtsen</a>
15
16 </h1>
17
18 </div>
19
20
21
22 <div class="entry">
23 <div class="title"><a href="Lisensvalg_for_NUUG_opptakene_endelig_p___plass.html">Lisensvalg for NUUG-opptakene endelig på plass</a></div>
24 <div class="date">2009-03-06 21:20</div>
25 <div class="body">
26 <p>Etter mange års meditasjon over temaet, har NUUG endelig klart å
27 bestemme seg for hvilken lisens vi skal bruke på videoopptakene som
28 gjøres av NUUGs videogruppe. Ole Kristian har annonsert at lisensen
29 blir <a href="http://creativecommons.org/licenses/by-sa/3.0/no/">Creative
30 Commons Navngivelse-Del på samme vilkår 3.0 Norge</a>. Jeg er veldig
31 glad for at denne saken endelig er landet. Lisensen for opptaket til
32 Stallman-foredraget ble en annen pga. at lisensvalget ikke var avklart
33 på forhånd og IFI og PING ønsket CC-BY-ND, og må ses på som et unntak
34 i denne sammenhengen.</p>
35 </div>
36 <div class="tags">
37
38
39
40 Tags: <a href="tags/norsk">norsk</a>, <a href="tags/nuug">nuug</a>, <a href="tags/video">video</a>.
41
42 </div>
43 </div>
44 <div class="padding"></div>
45
46 <div class="entry">
47 <div class="title"><a href="Teknisk_program_for_Go_Open_2009_er_nesten_ferdig.html">Teknisk program for Go Open 2009 er nesten ferdig</a></div>
48 <div class="date">2009-03-05 22:30</div>
49 <div class="body">
50 <p>Etter lang tids jobbing begynner endelig programmet til det
51 tekniske sporet på konferansen <a href="http://www.goopen.no/">Go Open
52 2009</a> å bli ferdig. Det blir 9 punkter på programmet, og etter alt
53 å dømme blir det disse 9:</p>
54
55 <ul>
56
57 <li>"Open Telephony: A solution greater than the sum of its parts" med
58 Jon "maddog" Hall</li>
59 <li>OpenSolaris-relatert med Ian Murdock fra SUN</li>
60 <li>"The inner workings of the OpenStreetmap project and the
61 technology used" med Andy Allan </li>
62 <li>Coreboot-relatert med Peter Stuge</li>
63 <li>"Gratis værdata fra Meteorologisk institutt" med Trond Michelsen</li>
64 <li>RRDtool/Nagios-relatert med Tobias Oetiker</li>
65 <li>"Developers guide to server-side productivity and fun using open
66 source platforms and frameworks" med en gjeng folk fra
67 JavaBin-miljøet</li>
68 <li>"G(et)it Nå!" med Marcus Ramberg</li>
69 <li>Om kontrolltelling av valgresultater med fri programvare med Mitch
70 Trachtenberg</li>
71
72 </ul>
73
74 <p>De siste bekreftelsene og overskrifter mangler og kommer
75 forhåpentlig på plass før mandag, men jeg håper dette blir et program
76 flere enn meg vil sette pris på. Jeg gleder meg i hvert fall
77 stort.</p>
78 </div>
79 <div class="tags">
80
81
82
83 Tags: <a href="tags/norsk">norsk</a>, <a href="tags/nuug">nuug</a>.
84
85 </div>
86 </div>
87 <div class="padding"></div>
88
89 <div class="entry">
90 <div class="title"><a href="Checking_server_hardware_support_status_for_Dell__HP_and_IBM_servers.html">Checking server hardware support status for Dell, HP and IBM servers</a></div>
91 <div class="date">2009-02-28 23:50</div>
92 <div class="body">
93 <p>At work, we have a few hundred Linux servers, and with that amount
94 of hardware it is important to keep track of when the hardware support
95 contract expire for each server. We have a machine (and service)
96 register, which until recently did not contain much useful besides the
97 machine room location and contact information for the system owner for
98 each machine. To make it easier for us to track support contract
99 status, I've recently spent time on extending the machine register to
100 include information about when the support contract expire, and to tag
101 machines with expired contracts to make it easy to get a list of such
102 machines. I extended a perl script already being used to import
103 information about machines into the register, to also do some screen
104 scraping off the sites of Dell, HP and IBM (our majority of machines
105 are from these vendors), and automatically check the support status
106 for the relevant machines. This make the support status information
107 easily available and I hope it will make it easier for the computer
108 owner to know when to get new hardware or renew the support contract.
109 The result of this work documented that 27% of the machines in the
110 registry is without a support contract, and made it very easy to find
111 them. 27% might seem like a lot, but I see it more as the case of us
112 using machines a bit longer than the 3 years a normal support contract
113 last, to have test machines and a platform for less important
114 services. After all, the machines without a contract are working fine
115 at the moment and the lack of contract is only a problem if any of
116 them break down. When that happen, we can either fix it using spare
117 parts from other machines or move the service to another old
118 machine.</p>
119
120 <p>I believe the code for screen scraping the Dell site was originally
121 written by Trond Hasle Amundsen, and later adjusted by me and Morten
122 Werner Forsbring. The HP scraping was written by me after reading a
123 nice article in ;login: about how to use WWW::Mechanize, and the IBM
124 scraping was written by me based on the Dell code. I know the HTML
125 parsing could be done using nice libraries, but did not want to
126 introduce more dependencies. This is the current incarnation:</p>
127
128 <pre>
129 use LWP::Simple;
130 use POSIX;
131 use WWW::Mechanize;
132 use Date::Parse;
133 [...]
134 sub get_support_info {
135 my ($machine, $model, $serial, $productnumber) = @_;
136 my $str;
137
138 if ( $model =~ m/^Dell / ) {
139 # fetch website from Dell support
140 my $url = "http://support.euro.dell.com/support/topics/topic.aspx/emea/shared/support/my_systems_info/no/details?c=no&amp;cs=nodhs1&amp;l=no&amp;s=dhs&amp;ServiceTag=$serial";
141 my $webpage = get($url);
142 return undef unless ($webpage);
143
144 my $daysleft = -1;
145 my @lines = split(/\n/, $webpage);
146 foreach my $line (@lines) {
147 next unless ($line =~ m/Beskrivelse/);
148 $line =~ s/&lt;[^>]+?>/;/gm;
149 $line =~ s/^.+?;(Beskrivelse;)/$1/;
150
151 my @f = split(/\;/, $line);
152 @f = @f[13 .. $#f];
153 my $lastend = "";
154 while ($f[3] eq "DELL") {
155 my ($type, $startstr, $endstr, $days) = @f[0, 5, 7, 10];
156
157 my $start = POSIX::strftime("%Y-%m-%d",
158 localtime(str2time($startstr)));
159 my $end = POSIX::strftime("%Y-%m-%d",
160 localtime(str2time($endstr)));
161 $str .= "$type $start -> $end ";
162 @f = @f[14 .. $#f];
163 $lastend = $end if ($end gt $lastend);
164 }
165 my $today = POSIX::strftime("%Y-%m-%d", localtime(time));
166 tag_machine_unsupported($machine)
167 if ($lastend lt $today);
168 }
169 } elsif ( $model =~ m/^HP / ) {
170 my $mech = WWW::Mechanize->new();
171 my $url =
172 'http://www1.itrc.hp.com/service/ewarranty/warrantyInput.do';
173 $mech->get($url);
174 my $fields = {
175 'BODServiceID' => 'NA',
176 'RegisteredPurchaseDate' => '',
177 'country' => 'NO',
178 'productNumber' => $productnumber,
179 'serialNumber1' => $serial,
180 };
181 $mech->submit_form( form_number => 2,
182 fields => $fields );
183 # Next step is screen scraping
184 my $content = $mech->content();
185
186 $content =~ s/&lt;[^>]+?>/;/gm;
187 $content =~ s/\s+/ /gm;
188 $content =~ s/;\s*;/;;/gm;
189 $content =~ s/;[\s;]+/;/gm;
190
191 my $today = POSIX::strftime("%Y-%m-%d", localtime(time));
192
193 while ($content =~ m/;Warranty Type;/) {
194 my ($type, $status, $startstr, $stopstr) = $content =~
195 m/;Warranty Type;([^;]+);.+?;Status;(\w+);Start Date;([^;]+);End Date;([^;]+);/;
196 $content =~ s/^.+?;Warranty Type;//;
197 my $start = POSIX::strftime("%Y-%m-%d",
198 localtime(str2time($startstr)));
199 my $end = POSIX::strftime("%Y-%m-%d",
200 localtime(str2time($stopstr)));
201
202 $str .= "$type ($status) $start -> $end ";
203
204 tag_machine_unsupported($machine)
205 if ($end lt $today);
206 }
207 } elsif ( $model =~ m/^IBM / ) {
208 # This code ignore extended support contracts.
209 my ($producttype) = $model =~ m/.*-\[(.{4}).+\]-/;
210 if ($producttype &amp;&amp; $serial) {
211 my $content =
212 get("http://www-947.ibm.com/systems/support/supportsite.wss/warranty?action=warranty&amp;brandind=5000008&amp;Submit=Submit&amp;type=$producttype&amp;serial=$serial");
213 if ($content) {
214 $content =~ s/&lt;[^>]+?>/;/gm;
215 $content =~ s/\s+/ /gm;
216 $content =~ s/;\s*;/;;/gm;
217 $content =~ s/;[\s;]+/;/gm;
218
219 $content =~ s/^.+?;Warranty status;//;
220 my ($status, $end) = $content =~ m/;Warranty status;([^;]+)\s*;Expiration date;(\S+) ;/;
221
222 $str .= "($status) -> $end ";
223
224 my $today = POSIX::strftime("%Y-%m-%d", localtime(time));
225 tag_machine_unsupported($machine)
226 if ($end lt $today);
227 }
228 }
229 }
230 return $str;
231 }
232 </pre>
233
234 <p>Here are some examples on how to use the function, using fake
235 serial numbers. The information passed in as arguments are fetched
236 from dmidecode.</p>
237
238 <pre>
239 print get_support_info("hp.host", "HP ProLiant BL460c G1", "1234567890"
240 "447707-B21");
241 print get_support_info("dell.host", "Dell Inc. PowerEdge 2950", "1234567");
242 print get_support_info("ibm.host", "IBM eserver xSeries 345 -[867061X]-",
243 "1234567");
244 </pre>
245
246 <p>I would recommend this approach for tracking support contracts for
247 everyone with more than a few computers to administer. :)</p>
248
249 <p>Update 2009-03-06: The IBM page do not include extended support
250 contracts, so it is useless in that case. The original Dell code do
251 not handle extended support contracts either, but has been updated to
252 do so.</p>
253 </div>
254 <div class="tags">
255
256
257
258 Tags: <a href="tags/english">english</a>, <a href="tags/nuug">nuug</a>.
259
260 </div>
261 </div>
262 <div class="padding"></div>
263
264 <div class="entry">
265 <div class="title"><a href="Using_bar_codes_at_a_computing_center.html">Using bar codes at a computing center</a></div>
266 <div class="date">2009-02-20 08:50</div>
267 <div class="body">
268 <p>At work with the University of Oslo, we have several hundred computers
269 in our computing center. This give us a challenge in tracking the
270 location and cabling of the computers, when they are added, moved and
271 removed. Some times the location register is not updated when a
272 computer is inserted or moved and we then have to search the room for
273 the "missing" computer.</p>
274
275 <p>In the last issue of Linux Journal, I came across a project
276 <a href="http://www.libdmtx.org/">libdmtx</a> to write and read bar
277 code blocks as defined in the
278 <a href="http://en.wikipedia.org/wiki/Data_Matrix">The Data Matrix
279 Standard</a>. This is bar codes that can be read with a normal
280 digital camera, for example that on a cell phone, and several such bar
281 codes can be read by libdmtx from one picture. The bar code standard
282 allow up to 2 KiB to be written in the tag. There is another project
283 with <a href="http://www.terryburton.co.uk/barcodewriter/">a bar code
284 writer written in postscript</a> capable of creating such bar codes,
285 but this was the first time I found a tool to read these bar
286 codes.</p>
287
288 <p>It occurred to me that this could be used to tag and track the
289 machines in our computing center. If both racks and computers are
290 tagged this way, we can use a picture of the rack and all its
291 computers to detect the rack location of any computer in that rack.
292 If we do this regularly for the entire room, we will find all
293 locations, and can detect movements and removals.</p>
294
295 <p>I decided to test if this would work in practice, and picked a
296 random rack and tagged all the machines with their names. Next, I
297 took pictures with my digital camera, and gave the dmtxread program
298 these JPEG pictures to see how many tags it could read. This worked
299 fairly well. If the pictures was well focused and not taken from the
300 side, all tags in the image could be read. Because of limited space
301 between the racks, I was unable to get a good picture of the entire
302 rack, but could without problem read all tags from a picture covering
303 about half the rack. I had to limit the search time used by dmtxread
304 to 60000 ms to make sure it terminated in a reasonable time frame.</p>
305
306 <p>My conclusion is that this could work, and we should probably look
307 at adjusting our computer tagging procedures to use bar codes for
308 easier automatic tracking of computers.</p>
309 </div>
310 <div class="tags">
311
312
313
314 Tags: <a href="tags/english">english</a>, <a href="tags/nuug">nuug</a>.
315
316 </div>
317 </div>
318 <div class="padding"></div>
319
320 <div class="entry">
321 <div class="title"><a href="Kart_over_overv__kningskamera_i_Norge.html">Kart over overvåkningskamera i Norge</a></div>
322 <div class="date">2009-02-15 22:30</div>
323 <div class="body">
324 <p>I regi av
325 <a href="http://www.personvern.no/">personvernforeningen</a> har jeg
326 startet på
327 <a href="http://personvern.no/wiki/index.php/Kameraovervåkning">et
328 kart over overvåkningskamera i Norge</a>. Bakgrunnen er at det etter
329 min mening bærer galt avsted med den massive overvåkningen som
330 finner sted i Norge i dag, og at flere og flere overvåkningskamera
331 gjør det vanskeligere og vanskeligere å gå igjennom livet uten at
332 små og store brødre trenger inn i ens private sfære. Datatilsynet
333 har et register over kameraovervåkning, men det viser seg å være
334 ubrukelig både til å finne ut hvor det er kamera plassert, og til å
335 sjekke om et kamera en kommer over er registrert. Dette nye kartet
336 fikser en av disse manglene, men det vil fortsatt være umulig å vite
337 om et kamera er registrert etter lovens krav eller ikke. Pr. nå er
338 22 kamera i Oslo registrert, og det trengs flere til å registrere
339 alle. Informasjonen registreres direkte inn i <a
340 href="http://www.openstreetmap.org/">OpenStreetmap</a>, sa hentes det
341 automatisk over i spesialkartet.</p>
342 </div>
343 <div class="tags">
344
345
346
347 Tags: <a href="tags/norsk">norsk</a>, <a href="tags/personvern">personvern</a>.
348
349 </div>
350 </div>
351 <div class="padding"></div>
352
353 <div class="entry">
354 <div class="title"><a href="Endelig_er_Debian_Lenny_gitt_ut.html">Endelig er Debian Lenny gitt ut</a></div>
355 <div class="date">2009-02-15 11:50</div>
356 <div class="body">
357 <p>Endelig er <a href="http://www.debian.org/">Debian</a>
358 <a href="http://www.debian.org/News/2009/20090214">Lenny</a> gitt ut.
359 Et langt steg videre for Debian-prosjektet, og en rekke nye
360 programpakker blir nå tilgjengelig for de av oss som bruker den
361 stabile utgaven av Debian. Neste steg er nå å få
362 <a href="http://www.skolelinux.org/">Skolelinux</a> /
363 <a href="http://wiki.debian.org/DebianEdu/">Debian Edu</a> ferdig
364 oppdatert for den nye utgaven, slik at en oppdatert versjon kan
365 slippes løs på skolene. Takk til alle debian-utviklerne som har
366 gjort dette mulig. Endelig er f.eks. fungerende avhengighetsstyrt
367 bootsekvens tilgjengelig i stabil utgave, vha pakken
368 <tt>insserv</tt>.</p>
369 </div>
370 <div class="tags">
371
372
373
374 Tags: <a href="tags/debian">debian</a>, <a href="tags/debian edu">debian edu</a>, <a href="tags/norsk">norsk</a>.
375
376 </div>
377 </div>
378 <div class="padding"></div>
379
380 <div class="entry">
381 <div class="title"><a href="F__rste_vellykkede_videostr__m_fra_NUUG.html">Første vellykkede videostrøm fra NUUG</a></div>
382 <div class="date">2009-02-11 06:30</div>
383 <div class="body">
384 <p>Jeg ble glad for å se under
385 <a href="http://www.nuug.no/aktiviteter/20090210-compiz/">gårdagens
386 medlemsmøte</a> i NUUG Oslo at utsending av live-video fra møtet
387 fungerte for første gang. Forrige gang ble det ved en teknisk tabbe
388 sendt video uten lyd. Vi kan takke Ole Kristian Lien og resten av
389 videogruppen i NUUG for at nå NUUG-medlemmer over det ganske land
390 kunne se foredraget samtidig med oss i Oslo. Vi opplevde til og med
391 under møtet å motta spørsmål via IRC som ble besvart der og da.
392 Opptaket publiseres så snart det er kopiert over til NUUGs
393 webserver og komprimert.</p>
394 </div>
395 <div class="tags">
396
397
398
399 Tags: <a href="tags/norsk">norsk</a>, <a href="tags/nuug">nuug</a>, <a href="tags/video">video</a>.
400
401 </div>
402 </div>
403 <div class="padding"></div>
404
405 <div class="entry">
406 <div class="title"><a href="Min_reprap_tar_sakte_form.html">Min reprap tar sakte form</a></div>
407 <div class="date">2009-02-03 13:30</div>
408 <div class="body">
409 <p>Min reprap begynner å ta form. Den er nå kommet så langt at den er
410 blitt en kubisk ramme. Z-aksen er montert men ikke kalibrert, og det
411 hele er klart for litt enkel testing. Har møtt på to problemer som
412 blokkerer videre montering, men har oppnått kontakt med Audun Vaaler
413 ved Høgskolen i Østfold som forteller at de er nesten ferdig med et
414 tilsvarende byggesett som det jeg tar utgangspunkt i, og håper de kan
415 forklare hvordan de kom rundt problemene. De to problemene er
416 relatert til Z-aksen og Y-aksen. </p>
417
418 <p>For Z-aksen, er det et stjernehjul som festes på motoraksen ved
419 tannjulet som driver z-aksebåndet og som skal holde båndet på plass.
420 Problemet med det nederste stjernejulet er at det er helt løst, og
421 blir liggende på motoren 5 mm nedenfor tannjulet, i stedet for å ligge
422 inntil tannjulet slik det skal. Mulig løsningen er å borre i
423 stjernehjulet, eller lime det fast.</p>
424
425 <p>For Y-aksen, er det en plastdel som ser ut til å mangle som skulle
426 dekket to skruver som kommer i veien for kraftoverføringsmekanismen
427 fra motoren til selve aksen, slik at mekanismen kan snurre fritt.</p>
428
429 <p>Når det gjelder elektronikken til min reprap, så er min gode venn
430 Anders Rosnes igang med å lodde sammen delene og han forteller at
431 koblingsbordet for Arduino er klart, og en temperatursensor og en
432 optoswitch er også klar. Gleder meg til å teste dem. Må bare finne
433 ut hvordan jeg laster opp firmware i Arduino-en. :)</p>
434
435 <p>Når det gjelder NUUGs reprap-prosjekt, så er det framgang og Ole
436 Kristian, Tollef og Ketil besøke IFI for å få fortgang i produksjon av
437 plastdeler, og Ole Kristian forteller at han har funnet en kilde til
438 de fleste metalldelene. Gleder meg til å se resultaten av det
439 arbeidet.</p>
440 </div>
441 <div class="tags">
442
443
444
445 Tags: <a href="tags/3d-printer">3d-printer</a>, <a href="tags/norsk">norsk</a>, <a href="tags/nuug">nuug</a>, <a href="tags/reprap">reprap</a>.
446
447 </div>
448 </div>
449 <div class="padding"></div>
450
451 <div class="entry">
452 <div class="title"><a href="Norge_trenger_en_personvernforening.html">Norge trenger en personvernforening</a></div>
453 <div class="date">2009-02-01 18:35</div>
454 <div class="body">
455 <p>De siste årene har jeg forsøkt å få liv i
456 <a href="http://www.personvern.no/">foreningen Personvern i Norge</a>. Norge
457 trenger en organisasjon som jobber med å sette personvern på agendaen
458 og som kan være en motvekt til de mange som gjerne raderer bort
459 personvernet av behagelighetshensyn eller ut fra villfarelsen om at en
460 får økt sikkerhet av å redusere personvernet. Foreløbig har det ikke
461 lykkes å få på plass kritisk masse av interesserte på epostlisten, og
462 nå tror jeg det er på tide å endre tilnærming. I stedet for å forsøke
463 å rekruttere folk til epostlisten og håpe at når nok folk er samlet
464 vil noen ta initiativ og sørge for at det begynner å skje ting, så
465 tror jeg det er en ide å ta utgangspunkt i de som er der i dag og
466 sette sammen et interrimstyre. Forslaget er sendt til epostlisten, så
467 nå får vi se om noen er enig.</p>
468 </div>
469 <div class="tags">
470
471
472
473 Tags: <a href="tags/norsk">norsk</a>, <a href="tags/personvern">personvern</a>.
474
475 </div>
476 </div>
477 <div class="padding"></div>
478
479 <div class="entry">
480 <div class="title"><a href="Intellektuelt_privilegium___et_bedre_IP_begrep.html">Intellektuelt privilegium - et bedre IP-begrep</a></div>
481 <div class="date">2009-02-01 15:06</div>
482 <div class="body">
483 <p>Ofte brukes intellektuell eiendom som samlebegrep for opphavsrett,
484 patenter, varemerker og forretningshemmeligheter. Problemet med dette
485 begrepet er at det er svært misvisende. For det første er ingen av de
486 begrensede monopolene det her er snakk om som kan kalles eiendom, og
487 for det andre er egenskapene til de ulike monopolene så forskjellige
488 at det er mer tilslørende enn opplysende å gruppere dem sammen i et
489 sekkebegrep. Blant annet Richard Stallman har
490 <a href="http://www.gnu.org/philosophy/not-ipr.html">skrevet litt om dette</a>.</p>
491
492 <p>I dag kom jeg over
493 <a href="http://blogs.sun.com/webmink/entry/intellectual_privilege">en
494 bloggpost fra Simon Phipps</a> som foreslår å bruke intellektuelt
495 privilegium som begrep i stedet, da det gjør det klarere at det ikke
496 er snakk om eiendom, men et tidsbegrenset monopol. Simon Phipps
497 forteller videre at noen jobber med å skrive
498 <a href="http://www.intellectualprivilege.com/book.html">en bok med
499 tittel Intellectual Privilege</a>, og at boken er anbefalt av Lawrence
500 Lessig. Jeg tror jeg skal begynne å bruke begrepet intellektuelt
501 privilegium når jeg snakker om opphavsrett, patenter, varemerker og
502 forretningshemmeligheter framover.</p>
503 </div>
504 <div class="tags">
505
506
507
508 Tags: <a href="tags/norsk">norsk</a>, <a href="tags/nuug">nuug</a>.
509
510 </div>
511 </div>
512 <div class="padding"></div>
513
514 <p style="text-align: right;"><a href="index.rss"><img src="xml.gif" alt="RSS feed" width="36" height="14"></a></p>
515
516 <div id="sidebar">
517
518
519
520
521
522 <h2>Archive</h2>
523 <ul>
524
525 <li>2009
526 <ul>
527
528 <li><a href="archive/2009/01/">January (8)</a></li>
529
530 <li><a href="archive/2009/02/">February (8)</a></li>
531
532 <li><a href="archive/2009/03/">March (2)</a></li>
533
534 </ul></li>
535
536 <li>2008
537 <ul>
538
539 <li><a href="archive/2008/11/">November (5)</a></li>
540
541 <li><a href="archive/2008/12/">December (7)</a></li>
542
543 </ul></li>
544
545 </ul>
546
547
548
549 <h2>Tags</h2>
550 <ul>
551
552 <li><a href="tags/3d-printer">3d-printer (7)</a></li>
553
554 <li><a href="tags/amiga">amiga (1)</a></li>
555
556 <li><a href="tags/aros">aros (1)</a></li>
557
558 <li><a href="tags/debian">debian (3)</a></li>
559
560 <li><a href="tags/debian edu">debian edu (4)</a></li>
561
562 <li><a href="tags/english">english (6)</a></li>
563
564 <li><a href="tags/fiksgatami">fiksgatami (1)</a></li>
565
566 <li><a href="tags/ltsp">ltsp (1)</a></li>
567
568 <li><a href="tags/multimedia">multimedia (2)</a></li>
569
570 <li><a href="tags/norsk">norsk (24)</a></li>
571
572 <li><a href="tags/nuug">nuug (22)</a></li>
573
574 <li><a href="tags/personvern">personvern (3)</a></li>
575
576 <li><a href="tags/reprap">reprap (7)</a></li>
577
578 <li><a href="tags/rss">rss (1)</a></li>
579
580 <li><a href="tags/stavekontroll">stavekontroll (1)</a></li>
581
582 <li><a href="tags/video">video (4)</a></li>
583
584 <li><a href="tags/web">web (2)</a></li>
585
586 </ul>
587
588 </div>
589
590 <p style="text-align: right">
591 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v3.4</a>
592 </p>
593 </body>
594 </html>