Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Linux/Unix ::  Itimer_real und itimer_virtual     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
fabian@pc
Unregistrierter




Beitrag fabian@pc Unregistrierter 09:01:45 05.01.2012   Titel:   Itimer_real und itimer_virtual            Zitieren

Moin.
Laut unserem Prof läuft itimer_real immer, egal welcher prozess im moment aktiv ist und itimer_virtual nur genau dann, wenn er prozess aktiv ist.
wenn ich nun die pro sekunde berechneten primzahlen ausgeben lasse, müssten ja die von itimer_virtual berechneten mehr sein, da diese sekunde "länger ist", mindestens aber genauso viele wie bei itimer_real?! Schließlich wird der Prozess nicht 100% aktiv sein und bei itimer_real nicht ganz eine sekunde laufzeit schaffen.....

Ich hab ein programm geschrieben, dass 10 sekunden lang(erst itimer_real, dann itimer_virtual) primzahlen berechnet und die anzahl der bearbeiteten zahlen und dann den durchschnitt ausgibt:

    fabian@linux-0zpr:~/Dokumente/uebung10> ./a.out
    Bisher berechnete Primzahlen:141396
    In der letzten Sekunde berechnete Primzahlen:141396
    Bisher bearbeitete zahlen:1890727
    In der letzten Sekunde bearbeitete Zahlen:1890727

    Bisher berechnete Primzahlen:220712
    In der letzten Sekunde berechnete Primzahlen:79316
    Bisher bearbeitete zahlen:3058771
    In der letzten Sekunde bearbeitete Zahlen:1168044

    Bisher berechnete Primzahlen:291119
    In der letzten Sekunde berechnete Primzahlen:70407
    Bisher bearbeitete zahlen:4120849
    In der letzten Sekunde bearbeitete Zahlen:1062078

    Bisher berechnete Primzahlen:354053
    In der letzten Sekunde berechnete Primzahlen:62934
    Bisher bearbeitete zahlen:5085803
    In der letzten Sekunde bearbeitete Zahlen:964954

    Bisher berechnete Primzahlen:411159
    In der letzten Sekunde berechnete Primzahlen:57106
    Bisher bearbeitete zahlen:5973497
    In der letzten Sekunde bearbeitete Zahlen:887694

    Bisher berechnete Primzahlen:465211
    In der letzten Sekunde berechnete Primzahlen:54052
    Bisher bearbeitete zahlen:6820783
    In der letzten Sekunde bearbeitete Zahlen:847286

    Bisher berechnete Primzahlen:513369
    In der letzten Sekunde berechnete Primzahlen:48158
    Bisher bearbeitete zahlen:7581181
    In der letzten Sekunde bearbeitete Zahlen:760398

    Bisher berechnete Primzahlen:562013
    In der letzten Sekunde berechnete Primzahlen:48644
    Bisher bearbeitete zahlen:8353979
    In der letzten Sekunde bearbeitete Zahlen:772798

    Bisher berechnete Primzahlen:608559
    In der letzten Sekunde berechnete Primzahlen:46546
    Bisher bearbeitete zahlen:9098237
    In der letzten Sekunde bearbeitete Zahlen:744258

    Bisher berechnete Primzahlen:650352
    In der letzten Sekunde berechnete Primzahlen:41793
    Bisher bearbeitete zahlen:9769391
    In der letzten Sekunde bearbeitete Zahlen:671154

    Durchschnittlich pro Sekunde bearbeitete Zahlen:976939
    Durchschnittlich pro Sekunde berechnete Primzahlen:65035
    Bisher berechnete Primzahlen:142407
    In der letzten Sekunde berechnete Primzahlen:142407
    Bisher bearbeitete zahlen:1905667
    In der letzten Sekunde bearbeitete Zahlen:1905667

    Bisher berechnete Primzahlen:142568
    In der letzten Sekunde berechnete Primzahlen:161
    Bisher bearbeitete zahlen:1907963
    In der letzten Sekunde bearbeitete Zahlen:2296

    Bisher berechnete Primzahlen:226557
    In der letzten Sekunde berechnete Primzahlen:83989
    Bisher bearbeitete zahlen:3145829
    In der letzten Sekunde bearbeitete Zahlen:1237866

    Bisher berechnete Primzahlen:226680
    In der letzten Sekunde berechnete Primzahlen:123
    Bisher bearbeitete zahlen:3147763
    In der letzten Sekunde bearbeitete Zahlen:1934

    Bisher berechnete Primzahlen:297090
    In der letzten Sekunde berechnete Primzahlen:70410
    Bisher bearbeitete zahlen:4211633
    In der letzten Sekunde bearbeitete Zahlen:1063870

    Bisher berechnete Primzahlen:297201
    In der letzten Sekunde berechnete Primzahlen:111
    Bisher bearbeitete zahlen:4213277
    In der letzten Sekunde bearbeitete Zahlen:1644

    Bisher berechnete Primzahlen:359399
    In der letzten Sekunde berechnete Primzahlen:62198
    Bisher bearbeitete zahlen:5168743
    In der letzten Sekunde bearbeitete Zahlen:955466

    Bisher berechnete Primzahlen:359498
    In der letzten Sekunde berechnete Primzahlen:99
    Bisher bearbeitete zahlen:5170201
    In der letzten Sekunde bearbeitete Zahlen:1458

    Bisher berechnete Primzahlen:412253
    In der letzten Sekunde berechnete Primzahlen:52755
    Bisher bearbeitete zahlen:5990473
    In der letzten Sekunde bearbeitete Zahlen:820272

    Bisher berechnete Primzahlen:412347
    In der letzten Sekunde berechnete Primzahlen:94
    Bisher bearbeitete zahlen:5991907
    In der letzten Sekunde bearbeitete Zahlen:1434

    Durchschnittlich pro Sekunde bearbeitete Zahlen:599190
    Durchschnittlich pro Sekunde berechnete Primzahlen:41234


nun haben wir bei itimer_real jedoch knapp 1mill pro sekunde bearbeitete Zahlen, bei itimer_virtual nur 600.000..

hab ich einen denkfehler?
lg
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 2103
Beitrag Wutz Mitglied 12:14:25 05.01.2012   Titel:   Re: Itimer_real und itimer_virtual            Zitieren

fabian@pc schrieb:

Laut unserem Prof läuft itimer_real immer, ...

Ja ja, die Professoren. Reden viel Unsinn, wenn der Tag lang ist, dieser auch:

http://www.fbi.h-da.de/~a.schuette/Vorlesungen/ProgrammierenII/Skript/19_C-Spezialitaeten/C-Spezialitaeten.pdf

Ich kann bei mir keinen Itimer* Prozess finden und somit auch deine gänzlich nebulöse Frage nicht beantworten.
Du solltest vielleicht ein paar Details nennen, damit du hier ein paar Antworten bekommst.
Idealerweise sogar etwas Quellcode, wir sind hier in einem Programmiersprachen-Forum.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
fabian@pc
Unregistrierter




Beitrag fabian@pc Unregistrierter 18:36:07 06.01.2012   Titel:              Zitieren

Den Quelltext habe ich grade nicht da-.-
kurz gesagt habe ich mit
struct itimerval itimer
settimer(ITIMER_REAL, &itimer, NULL)
einen timer gestartet, der jede sekunde ein Signal sendet, dessen Signalbehandlungsfunkion die Anzahl der bisher berechneten Primzahlen/bearbeiteten Zahlen ausgibt.
Danach das selbe mit
settimer(ITIMER_VIRTUAL, %itimer, NULL).

also das unser Prof unsinn redet, würde ich erstmal nicht annehmen.
laut ihm ist der unterschied zwischen real und virtual, dass bsp. wenn der timer auf 10 sek eingestellt ist, bei real nach 10 sekunden vergangener Zeit auf der Uhr das signal kommt und bei virtual nach 10 sekunden "prozesszeit", also wenn der prozess bsp nur zu 50% aktiv ist (z.b. wegen starker prozessorauslastung) demzufolge erst nach 20 sek echtzeit.

also real läuft immer, virtual nur wenn der prozess aktiv ist.

Der logik nach müsste nun aber real weniger zahlen schaffen als virtual, da bei z.b. den 50% real nur tatsächlich 5 sek rechnet, während 10 sekunden vergehen.
bei mir ist das nicht so....



ei, ich habs nicht so mit dem verständlichen ausdrücken, aber ich hoffe dass hier irgendjemand in dem Forum mich versteht^^
liebe grüße
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 13604
Beitrag SeppJ Moderator 19:28:59 06.01.2012   Titel:              Zitieren

Prinzipiell hat dein Prof da recht. Sofern dein Programm nicht parallelisiert ist, sollte die CPU Zeit ("virtual") <= Echtzeit sein. Da absolut unklar ist, was und wie du überhaupt gemessen hast, kann ich dir auch nicht mehr sagen, als dass du dann wohl entweder etwas falsch gemacht hast, deine Ergebnisse falsch interpretierst, oder du vergleichst Sachen die nicht vergleichbar sind. Aber das hast du wahrscheinlich schon geahnt, deswegen hast du ja gefragt.
seldon
Unregistrierter




Beitrag seldon Unregistrierter 02:44:35 07.01.2012   Titel:              Zitieren

Im zweiten Teil (den verstehe ich als den mit itimer_virtual verarbeiteten) schwankt die Anzahl der pro "Sekunde" verarbeiteten Zahlen auffällig stark, statt wie im ersten monoton zu fallen. Da wird irgendwo ein Fehler drinstecken.

Auffällig ist, dass abwechselnd viele und wenige Zahlen pro Sekunde verarbeitet werden können, als (jetzt mal wild geraten) liefe der erste Timer noch, feuerte annähernd synchron mit dem ersten und führte auf diese Weise dazu, dass jede Sekunde als zwei Sekunden gewertet würde.
f.-th.
Unregistrierter




Beitrag f.-th. Unregistrierter 11:16:42 07.01.2012   Titel:              Zitieren

Hier eine man page.
http://harmattan-dev.nokia.com/docs/library/html/manpages/man2/getitimer.2.html
Das Ganze ist wohl eine Linux-Spezialität.

Warum muss erst geschändet werden, wenn suchen so einfach ist? Oder war das alles ironisch gemeint?

MfG f.-th.
fabian@pc
Unregistrierter




Beitrag fabian@pc Unregistrierter 16:56:55 08.01.2012   Titel:              Zitieren

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <signal.h>
#include <math.h>
void ende();
int zaehler=0, zahl=0, primzahl=0;
int berechnungen[10];
int main(){
 
  sigset(SIGALRM, ende);
  sigset(SIGVTALRM, ende);
  struct itimerval realatime;
  realatime.it_interval.tv_sec=1;
   realatime.it_value.tv_sec=1;
    realatime.it_interval.tv_usec=0;
   realatime.it_value.tv_usec=0;
  setitimer(ITIMER_REAL, &realatime, NULL);
 
while(zaehler!=10){
  if(isPrime(zahl))
    primzahl++;
  zahl++;
}
realatime.it_interval.tv_sec=0;
   realatime.it_value.tv_sec=0;
   setitimer(ITIMER_REAL, &realatime, NULL);
int sum=0;
int i;
for(i=0;i<=9;i++)
  sum=sum+berechnungen[i];
sum=sum/10;
printf("Durchschnitt Real:%i\n", sum);


zaehler=0;
zahl=0;
primzahl=0;
   struct itimerval virtualtime;
  virtualtime.it_interval.tv_sec=1;
   virtualtime.it_value.tv_sec=1;
    virtualtime.it_interval.tv_usec=0;
   virtualtime.it_value.tv_usec=0;
  setitimer(ITIMER_REAL, &virtualtime, NULL);
while(zaehler!=10){
  if(isPrime(zahl))
    primzahl++;
  zahl++;
 
}
sum=0;
for(i=0;i<=9;i++)
  sum=sum+berechnungen[i];
sum=sum/10;
printf("Durchschnitt virtual:%i\n", sum);



  return 0;
}




void ende(){
  printf("%i\n", primzahl);
 berechnungen[zaehler]=primzahl;
 zahl=0;
 primzahl=0;
zaehler++;
return;
}





int isPrime(int p){
  long s, d;
  s = (int) sqrt(p) + 1;
  if ( p <  2 ) return 0;
  if ( p == 2 ) return 1;
  if ( p % 2 == 0 ) return 0;
  for ( d = 3; d <= s; d+=2 )
    if ( p % d == 0 ) return 0;
  return 1;
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <signal.h>
#include <math.h>
void ende();
int zaehler=0, zahl=0, primzahl=0;
int berechnungen[10];
int main(){

sigset(SIGALRM, ende);
sigset(SIGVTALRM, ende);
struct itimerval realatime;
realatime.it_interval.tv_sec=1;
realatime.it_value.tv_sec=1;
realatime.it_interval.tv_usec=0;
realatime.it_value.tv_usec=0;
setitimer(ITIMER_REAL, &realatime, NULL);

while(zaehler!=10){
if(isPrime(zahl))
primzahl++;
zahl++;
}
realatime.it_interval.tv_sec=0;
realatime.it_value.tv_sec=0;
setitimer(ITIMER_REAL, &realatime, NULL);
int sum=0;
int i;
for(i=0;i<=9;i++)
sum=sum+berechnungen[i];
sum=sum/10;
printf("Durchschnitt Real:%i\n", sum);


zaehler=0;
zahl=0;
primzahl=0;
struct itimerval virtualtime;
virtualtime.it_interval.tv_sec=1;
virtualtime.it_value.tv_sec=1;
virtualtime.it_interval.tv_usec=0;
virtualtime.it_value.tv_usec=0;
setitimer(ITIMER_REAL, &virtualtime, NULL);
while(zaehler!=10){
if(isPrime(zahl))
primzahl++;
zahl++;

}
sum=0;
for(i=0;i<=9;i++)
sum=sum+berechnungen[i];
sum=sum/10;
printf("Durchschnitt virtual:%i\n", sum);



return 0;
}




void ende(){
printf("%i\n", primzahl);
berechnungen[zaehler]=primzahl;
zahl=0;
primzahl=0;
zaehler++;
return;
}





int isPrime(int p){
long s, d;
s = (int) sqrt(p) + 1;
if ( p < 2 ) return 0;
if ( p == 2 ) return 1;
if ( p % 2 == 0 ) return 0;
for ( d = 3; d <= s; d+=2 )
if ( p % d == 0 ) return 0;
return 1;
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <signal.h>
#include <math.h>
void ende();
int zaehler=0, zahl=0, primzahl=0;
int berechnungen[10];
int main(){
 
  sigset(SIGALRM, ende);
  sigset(SIGVTALRM, ende);
  struct itimerval realatime;
  realatime.it_interval.tv_sec=1;
   realatime.it_value.tv_sec=1;
    realatime.it_interval.tv_usec=0;
   realatime.it_value.tv_usec=0;
  setitimer(ITIMER_REAL, &realatime, NULL);
 
while(zaehler!=10){
  if(isPrime(zahl))
    primzahl++;
  zahl++;
}
realatime.it_interval.tv_sec=0;
   realatime.it_value.tv_sec=0;
   setitimer(ITIMER_REAL, &realatime, NULL);
int sum=0;
int i;
for(i=0;i<=9;i++)
  sum=sum+berechnungen[i];
sum=sum/10;
printf("Durchschnitt Real:%i\n", sum);


zaehler=0;
zahl=0;
primzahl=0;
   struct itimerval virtualtime;
  virtualtime.it_interval.tv_sec=1;
   virtualtime.it_value.tv_sec=1;
    virtualtime.it_interval.tv_usec=0;
   virtualtime.it_value.tv_usec=0;
  setitimer(ITIMER_REAL, &virtualtime, NULL);
while(zaehler!=10){
  if(isPrime(zahl))
    primzahl++;
  zahl++;
 
}
sum=0;
for(i=0;i<=9;i++)
  sum=sum+berechnungen[i];
sum=sum/10;
printf("Durchschnitt virtual:%i\n", sum);



  return 0;
}




void ende(){
  printf("%i\n", primzahl);
 berechnungen[zaehler]=primzahl;
 zahl=0;
 primzahl=0;
zaehler++;
return;
}





int isPrime(int p){
  long s, d;
  s = (int) sqrt(p) + 1;
  if ( p <  2 ) return 0;
  if ( p == 2 ) return 1;
  if ( p % 2 == 0 ) return 0;
  for ( d = 3; d <= s; d+=2 )
    if ( p % d == 0 ) return 0;
  return 1;
}




hab den zähler eigentlich gestoppt. oder mach ich das falsch?

lg
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 13604
Beitrag SeppJ Moderator 17:55:17 08.01.2012   Titel:              Zitieren

Du setzt beide Male den ITIMER_REAL. Bloß weil deine Variable 'virtual' im Namen hat, funktioniert das nicht. setitimer kann nicht lesen :) .

Was mir bei mir auffällt, ist, dass ich ständig immer kleiner werdende Ergebnisse bekomme:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
99698
57970
48415
43091
39532
36890
34856
33177
31785
30599
Durchschnitt Real:45601
99845
57922
48402
43085
39526
36891
34857
33173
31781
30600
Durchschnitt virtual:45608
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
99698
57970
48415
43091
39532
36890
34856
33177
31785
30599
Durchschnitt Real:45601
99845
57922
48402
43085
39526
36891
34857
33173
31781
30600
Durchschnitt virtual:45608
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
99698
57970
48415
43091
39532
36890
34856
33177
31785
30599
Durchschnitt Real:45601
99845
57922
48402
43085
39526
36891
34857
33173
31781
30600
Durchschnitt virtual:45608
Das kann nicht richtig sein. Aber ich sehe gerade nicht, wo dran das liegt. Bei so vielen globalen Variablen bekomme ich Kopfschmerzen.

edit: Ahh, habe den Fehler gefunden: Die Variablen für den globalen Zustand sollten wohl besser volatile sein, wenn du sie so wie hier benutzt. Dann passen auch die Ergebnisse:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
85647
78473
86718
82822
85173
84662
79483
82438
83098
81881
Durchschnitt Real:83039
83008
86487
81342
81739
82498
85437
80834
81455
87127
84209
Durchschnitt virtual:83413
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
85647
78473
86718
82822
85173
84662
79483
82438
83098
81881
Durchschnitt Real:83039
83008
86487
81342
81739
82498
85437
80834
81455
87127
84209
Durchschnitt virtual:83413
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
85647
78473
86718
82822
85173
84662
79483
82438
83098
81881
Durchschnitt Real:83039
83008
86487
81342
81739
82498
85437
80834
81455
87127
84209
Durchschnitt virtual:83413
Wobei dadurch natürlich die Peak-Leistung um 15-20% gesenkt wird, aber das ist sogar weniger als ich befürchtet hätte.


Zuletzt bearbeitet von SeppJ am 17:59:41 08.01.2012, insgesamt 1-mal bearbeitet
C++ Forumbot
Forumbot

Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 16160
Beitrag C++ Forumbot Forumbot 17:59:54 08.01.2012   Titel:              Zitieren

Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.

Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?


Dieses Posting wurde automatisch erzeugt.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
Fabian@pc
Unregistrierter




Beitrag Fabian@pc Unregistrierter 01:09:59 09.01.2012   Titel:              Zitieren

ich hab den Wald vor bäumen nicht gesehen:)
klar muss da virtual stehen. schusselfehler:)
danke :)
C/C++ Forum :: Linux/Unix ::  Itimer_real und itimer_virtual   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.