commit c0da37619900d3b57bb48c105c7eed3d77fead14 Author: Tilman Date: Wed Oct 26 10:11:42 2011 +0200 Inital commit diff --git a/www/Metainformationen/Einstellungen - Fotos.txt b/www/Metainformationen/Einstellungen - Fotos.txt new file mode 100644 index 0000000..8a108aa --- /dev/null +++ b/www/Metainformationen/Einstellungen - Fotos.txt @@ -0,0 +1,12 @@ +Fotos: + Dateinamen = Zeitpunkt der Aufnahme + Lange Seite 750px + Metadaten entfernt + Qualität 85 + + Beispiel: Japanabend - 2005-08-13 22-05-27.jpg + Original, 2272x1704, mit Exif-Daten: 813.49 kB + Verkleinert, mit Metadaten, Qualität 100: 337.64 kB + Verkleinert, ohne Metadaten, Qualität 100: 303.57 kB + Verkleinert, ohne Metadaten, Qualität 85: 71.57 kB + \ No newline at end of file diff --git a/www/Metainformationen/FIPS181/RandPasswd.pm b/www/Metainformationen/FIPS181/RandPasswd.pm new file mode 100644 index 0000000..bcd5114 --- /dev/null +++ b/www/Metainformationen/FIPS181/RandPasswd.pm @@ -0,0 +1,2526 @@ +# http://search.cpan.org/~jdporter/Crypt-RandPasswd-0.02/lib/Crypt/RandPasswd.pm +{ + +package Crypt::RandPasswd; + +use strict; + +use vars qw($VERSION); + +$VERSION = '0.02'; + + +=head1 NAME + +Crypt::RandPasswd - random password generator based on FIPS-181 + +=head1 SYNOPSIS + + use Crypt::RandPasswd; + ( $word, $hyphenated ) = Crypt::RandPasswd->word( $minlen, $maxlen ); + $word = Crypt::RandPasswd->word( $minlen, $maxlen ); + $word = Crypt::RandPasswd->letters( $minlen, $maxlen ); + $word = Crypt::RandPasswd->chars( $minlen, $maxlen ); + + # override the defaults for these functions: + *Crypt::RandPasswd::rng = \&my_random_number_generator; + *Crypt::RandPasswd::restrict = \&my_restriction_filter; + +=head2 Run as Script + + perl Crypt/RandPasswd.pm -help + +=head1 SEE ALSO + +FIPS 181 - (APG), Automated Password Generator: +http://www.itl.nist.gov/fipspubs/fip181.htm + +=head1 DESCRIPTION + +This code is a Perl language implementation of the Automated +Password Generator standard, like the program described in +"A Random Word Generator For Pronounceable Passwords" (not available on-line). +This code is a re-engineering of the program contained in Appendix A +of FIPS Publication 181, "Standard for Automated Password Generator". +In accordance with the standard, the results obtained from this +program are logically equivalent to those produced by the standard. + +=head1 CAVEATS + +=head2 Bugs + +The function to generate a password can sometimes take an extremely long time. + +=head2 Deviations From Standard + +This implementation deviates in one critical way from the standard +upon which it is based: the random number generator in this +implementation does not use DES. Instead, it uses perl's built-in +C function, which in turn is (usually) built on the +pseudo-random number generator functions of the underlying C library. + +However, the random function can be replaced by the user if desired. +(See L.) + +=head1 Functions + +=cut + + +sub word($$); +sub letters($$); +sub chars($$); + +sub random_chars_in_range($$$$); +sub rand_int_in_range($$); +sub random_element($); + +sub rng($); +sub restrict($); +sub init(); + + +sub _random_word($); +sub _random_unit($); +sub _improper_word(@); +sub _have_initial_y(@); +sub _have_final_split(@); +sub _illegal_placement(@); + + +# +# Global Variables: +# + +$Crypt::RandPasswd::seed = undef; # by default; causes srand() to use its own, which can be pretty good. +$Crypt::RandPasswd::initialized = 0; + + + +my @grams = qw( a b c d e f g h i j k l m n o p r s t u v w x y z ch gh ph rh sh th wh qu ck ); +my %grams; @grams{@grams} = (); # and a set of same. + +my @vowel_grams = qw( a e i o u y ); +my %vowel_grams; @vowel_grams{@vowel_grams} = (); # and a set of same. + + + +# +# Bit flags +# + +use constant MAX_UNACCEPTABLE => 20 ; + +# gram rules: +use constant NOT_BEGIN_SYLLABLE => 010 ; +use constant NO_FINAL_SPLIT => 004 ; +use constant VOWEL => 002 ; +use constant ALTERNATE_VOWEL => 001 ; +use constant NO_SPECIAL_RULE => 000 ; + +# digram rules: +use constant FRONT => 0200 ; +use constant NOT_FRONT => 0100 ; +use constant BREAK => 0040 ; +use constant PREFIX => 0020 ; +use constant ILLEGAL_PAIR => 0010 ; +use constant SUFFIX => 0004 ; +use constant BACK => 0002 ; +use constant NOT_BACK => 0001 ; +use constant ANY_COMBINATION => 0000 ; + +## it used to be that info about units was contained in the C-arrays 'rules' and 'digram'. +## both were indexed numerically. 'rules' was essentially a mapping from a unique +## integer ID (the index) to a gram. 'digram' used the same mapping, but in a +## two-dimensional array. I.e. to represent the digram "ab" ("a","b"), one would +## need to know the numeric ID of "a" and "b", which turn out to be 0 and 1, respectively; +## then use those indices in digram: digram[0][1]. +## The information at the "end" of a lookup in digram[][] was a simple integer +## representing the flag bits for that digram. (The %digram in the current +## implementation is the same.) The rules[] C-array, however, needed to store +## both the bitmask and the string representation of the gram, so it was an array +## of a struct { string, bitmask }. Since %rules is an associative array, indexed +## directly by the gram, it only needs the bitmask at its "end", the same as %digram. +## +## both 'rules' and 'digram' contained bitflags for grams and digrams, respectively. +## additionally, 'rules' contained the string representation of the unit. +## because 'rules' contained both a string and flags for each unit, its contents +## were actually structs of { string, flags }. +## +## 'digram', on the other hand, was simply the bitflags (integers). + +# struct unit { +# char unit_code[5]; # string, usually 1, but up to 4 characters. +# byte flags; +# } rules[34]; + +## the 'rules' C-array used to be indexed by gram index; now %rules is indexed by the gram itself. + +my %rules; + +@rules{ @grams } = ( NO_SPECIAL_RULE ) x @grams; +@rules{ @vowel_grams } = ( VOWEL ) x @vowel_grams; + +$rules{'e'} |= NO_FINAL_SPLIT; +$rules{'y'} |= ALTERNATE_VOWEL; + +$rules{'x'} = +$rules{'ck'} = NOT_BEGIN_SYLLABLE; + + + +# +# the 'digram' C-array, digram[34][34], was indexed by the unit indexes of the two grams; +# now %digram is indexed directly by the two grams. +# +my %digram; + + ############################################################################################## + # BEGIN DIGRAM { + ############################################################################################## + + $digram{'a'}{'a'} = ILLEGAL_PAIR; + $digram{'a'}{'b'} = ANY_COMBINATION; + $digram{'a'}{'c'} = ANY_COMBINATION; + $digram{'a'}{'d'} = ANY_COMBINATION; + $digram{'a'}{'e'} = ILLEGAL_PAIR; + $digram{'a'}{'f'} = ANY_COMBINATION; + $digram{'a'}{'g'} = ANY_COMBINATION; + $digram{'a'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'a'}{'i'} = ANY_COMBINATION; + $digram{'a'}{'j'} = ANY_COMBINATION; + $digram{'a'}{'k'} = ANY_COMBINATION; + $digram{'a'}{'l'} = ANY_COMBINATION; + $digram{'a'}{'m'} = ANY_COMBINATION; + $digram{'a'}{'n'} = ANY_COMBINATION; + $digram{'a'}{'o'} = ILLEGAL_PAIR; + $digram{'a'}{'p'} = ANY_COMBINATION; + $digram{'a'}{'r'} = ANY_COMBINATION; + $digram{'a'}{'s'} = ANY_COMBINATION; + $digram{'a'}{'t'} = ANY_COMBINATION; + $digram{'a'}{'u'} = ANY_COMBINATION; + $digram{'a'}{'v'} = ANY_COMBINATION; + $digram{'a'}{'w'} = ANY_COMBINATION; + $digram{'a'}{'x'} = ANY_COMBINATION; + $digram{'a'}{'y'} = ANY_COMBINATION; + $digram{'a'}{'z'} = ANY_COMBINATION; + $digram{'a'}{'ch'} = ANY_COMBINATION; + $digram{'a'}{'gh'} = ILLEGAL_PAIR; + $digram{'a'}{'ph'} = ANY_COMBINATION; + $digram{'a'}{'rh'} = ILLEGAL_PAIR; + $digram{'a'}{'sh'} = ANY_COMBINATION; + $digram{'a'}{'th'} = ANY_COMBINATION; + $digram{'a'}{'wh'} = ILLEGAL_PAIR; + $digram{'a'}{'qu'} = BREAK | NOT_BACK; + $digram{'a'}{'ck'} = ANY_COMBINATION; + + $digram{'b'}{'a'} = ANY_COMBINATION; + $digram{'b'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'e'} = ANY_COMBINATION; + $digram{'b'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'i'} = ANY_COMBINATION; + $digram{'b'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'l'} = FRONT | SUFFIX | NOT_BACK; + $digram{'b'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'o'} = ANY_COMBINATION; + $digram{'b'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'r'} = FRONT | BACK; + $digram{'b'}{'s'} = NOT_FRONT; + $digram{'b'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'u'} = ANY_COMBINATION; + $digram{'b'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'x'} = ILLEGAL_PAIR; + $digram{'b'}{'y'} = ANY_COMBINATION; + $digram{'b'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'gh'} = ILLEGAL_PAIR; + $digram{'b'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'rh'} = ILLEGAL_PAIR; + $digram{'b'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'wh'} = ILLEGAL_PAIR; + $digram{'b'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'b'}{'ck'} = ILLEGAL_PAIR; + + $digram{'c'}{'a'} = ANY_COMBINATION; + $digram{'c'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'e'} = ANY_COMBINATION; + $digram{'c'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'i'} = ANY_COMBINATION; + $digram{'c'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'l'} = SUFFIX | NOT_BACK; + $digram{'c'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'o'} = ANY_COMBINATION; + $digram{'c'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'r'} = NOT_BACK; + $digram{'c'}{'s'} = NOT_FRONT | BACK; + $digram{'c'}{'t'} = NOT_FRONT | PREFIX; + $digram{'c'}{'u'} = ANY_COMBINATION; + $digram{'c'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'x'} = ILLEGAL_PAIR; + $digram{'c'}{'y'} = ANY_COMBINATION; + $digram{'c'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'ch'} = ILLEGAL_PAIR; + $digram{'c'}{'gh'} = ILLEGAL_PAIR; + $digram{'c'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'rh'} = ILLEGAL_PAIR; + $digram{'c'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'c'}{'wh'} = ILLEGAL_PAIR; + $digram{'c'}{'qu'} = NOT_FRONT | SUFFIX | NOT_BACK; + $digram{'c'}{'ck'} = ILLEGAL_PAIR; + + $digram{'d'}{'a'} = ANY_COMBINATION; + $digram{'d'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'d'} = NOT_FRONT; + $digram{'d'}{'e'} = ANY_COMBINATION; + $digram{'d'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'i'} = ANY_COMBINATION; + $digram{'d'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'o'} = ANY_COMBINATION; + $digram{'d'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'r'} = FRONT | NOT_BACK; + $digram{'d'}{'s'} = NOT_FRONT | BACK; + $digram{'d'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'u'} = ANY_COMBINATION; + $digram{'d'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'x'} = ILLEGAL_PAIR; + $digram{'d'}{'y'} = ANY_COMBINATION; + $digram{'d'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'rh'} = ILLEGAL_PAIR; + $digram{'d'}{'sh'} = NOT_FRONT | NOT_BACK; + $digram{'d'}{'th'} = NOT_FRONT | PREFIX; + $digram{'d'}{'wh'} = ILLEGAL_PAIR; + $digram{'d'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'d'}{'ck'} = ILLEGAL_PAIR; + + $digram{'e'}{'a'} = ANY_COMBINATION; + $digram{'e'}{'b'} = ANY_COMBINATION; + $digram{'e'}{'c'} = ANY_COMBINATION; + $digram{'e'}{'d'} = ANY_COMBINATION; + $digram{'e'}{'e'} = ANY_COMBINATION; + $digram{'e'}{'f'} = ANY_COMBINATION; + $digram{'e'}{'g'} = ANY_COMBINATION; + $digram{'e'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'e'}{'i'} = NOT_BACK; + $digram{'e'}{'j'} = ANY_COMBINATION; + $digram{'e'}{'k'} = ANY_COMBINATION; + $digram{'e'}{'l'} = ANY_COMBINATION; + $digram{'e'}{'m'} = ANY_COMBINATION; + $digram{'e'}{'n'} = ANY_COMBINATION; + $digram{'e'}{'o'} = BREAK; + $digram{'e'}{'p'} = ANY_COMBINATION; + $digram{'e'}{'r'} = ANY_COMBINATION; + $digram{'e'}{'s'} = ANY_COMBINATION; + $digram{'e'}{'t'} = ANY_COMBINATION; + $digram{'e'}{'u'} = ANY_COMBINATION; + $digram{'e'}{'v'} = ANY_COMBINATION; + $digram{'e'}{'w'} = ANY_COMBINATION; + $digram{'e'}{'x'} = ANY_COMBINATION; + $digram{'e'}{'y'} = ANY_COMBINATION; + $digram{'e'}{'z'} = ANY_COMBINATION; + $digram{'e'}{'ch'} = ANY_COMBINATION; + $digram{'e'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'e'}{'ph'} = ANY_COMBINATION; + $digram{'e'}{'rh'} = ILLEGAL_PAIR; + $digram{'e'}{'sh'} = ANY_COMBINATION; + $digram{'e'}{'th'} = ANY_COMBINATION; + $digram{'e'}{'wh'} = ILLEGAL_PAIR; + $digram{'e'}{'qu'} = BREAK | NOT_BACK; + $digram{'e'}{'ck'} = ANY_COMBINATION; + + $digram{'f'}{'a'} = ANY_COMBINATION; + $digram{'f'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'e'} = ANY_COMBINATION; + $digram{'f'}{'f'} = NOT_FRONT; + $digram{'f'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'i'} = ANY_COMBINATION; + $digram{'f'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'l'} = FRONT | SUFFIX | NOT_BACK; + $digram{'f'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'o'} = ANY_COMBINATION; + $digram{'f'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'r'} = FRONT | NOT_BACK; + $digram{'f'}{'s'} = NOT_FRONT; + $digram{'f'}{'t'} = NOT_FRONT; + $digram{'f'}{'u'} = ANY_COMBINATION; + $digram{'f'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'x'} = ILLEGAL_PAIR; + $digram{'f'}{'y'} = NOT_FRONT; + $digram{'f'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'rh'} = ILLEGAL_PAIR; + $digram{'f'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'wh'} = ILLEGAL_PAIR; + $digram{'f'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'f'}{'ck'} = ILLEGAL_PAIR; + + $digram{'g'}{'a'} = ANY_COMBINATION; + $digram{'g'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'e'} = ANY_COMBINATION; + $digram{'g'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'g'} = NOT_FRONT; + $digram{'g'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'i'} = ANY_COMBINATION; + $digram{'g'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'k'} = ILLEGAL_PAIR; + $digram{'g'}{'l'} = FRONT | SUFFIX | NOT_BACK; + $digram{'g'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'o'} = ANY_COMBINATION; + $digram{'g'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'r'} = FRONT | NOT_BACK; + $digram{'g'}{'s'} = NOT_FRONT | BACK; + $digram{'g'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'u'} = ANY_COMBINATION; + $digram{'g'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'x'} = ILLEGAL_PAIR; + $digram{'g'}{'y'} = NOT_FRONT; + $digram{'g'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'gh'} = ILLEGAL_PAIR; + $digram{'g'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'rh'} = ILLEGAL_PAIR; + $digram{'g'}{'sh'} = NOT_FRONT; + $digram{'g'}{'th'} = NOT_FRONT; + $digram{'g'}{'wh'} = ILLEGAL_PAIR; + $digram{'g'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'g'}{'ck'} = ILLEGAL_PAIR; + + $digram{'h'}{'a'} = ANY_COMBINATION; + $digram{'h'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'e'} = ANY_COMBINATION; + $digram{'h'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'h'} = ILLEGAL_PAIR; + $digram{'h'}{'i'} = ANY_COMBINATION; + $digram{'h'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'o'} = ANY_COMBINATION; + $digram{'h'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'r'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'s'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'u'} = ANY_COMBINATION; + $digram{'h'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'x'} = ILLEGAL_PAIR; + $digram{'h'}{'y'} = ANY_COMBINATION; + $digram{'h'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'rh'} = ILLEGAL_PAIR; + $digram{'h'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'wh'} = ILLEGAL_PAIR; + $digram{'h'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'h'}{'ck'} = ILLEGAL_PAIR; + + $digram{'i'}{'a'} = ANY_COMBINATION; + $digram{'i'}{'b'} = ANY_COMBINATION; + $digram{'i'}{'c'} = ANY_COMBINATION; + $digram{'i'}{'d'} = ANY_COMBINATION; + $digram{'i'}{'e'} = NOT_FRONT; + $digram{'i'}{'f'} = ANY_COMBINATION; + $digram{'i'}{'g'} = ANY_COMBINATION; + $digram{'i'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'i'}{'i'} = ILLEGAL_PAIR; + $digram{'i'}{'j'} = ANY_COMBINATION; + $digram{'i'}{'k'} = ANY_COMBINATION; + $digram{'i'}{'l'} = ANY_COMBINATION; + $digram{'i'}{'m'} = ANY_COMBINATION; + $digram{'i'}{'n'} = ANY_COMBINATION; + $digram{'i'}{'o'} = BREAK; + $digram{'i'}{'p'} = ANY_COMBINATION; + $digram{'i'}{'r'} = ANY_COMBINATION; + $digram{'i'}{'s'} = ANY_COMBINATION; + $digram{'i'}{'t'} = ANY_COMBINATION; + $digram{'i'}{'u'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'i'}{'v'} = ANY_COMBINATION; + $digram{'i'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'i'}{'x'} = ANY_COMBINATION; + $digram{'i'}{'y'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'i'}{'z'} = ANY_COMBINATION; + $digram{'i'}{'ch'} = ANY_COMBINATION; + $digram{'i'}{'gh'} = NOT_FRONT; + $digram{'i'}{'ph'} = ANY_COMBINATION; + $digram{'i'}{'rh'} = ILLEGAL_PAIR; + $digram{'i'}{'sh'} = ANY_COMBINATION; + $digram{'i'}{'th'} = ANY_COMBINATION; + $digram{'i'}{'wh'} = ILLEGAL_PAIR; + $digram{'i'}{'qu'} = BREAK | NOT_BACK; + $digram{'i'}{'ck'} = ANY_COMBINATION; + + $digram{'j'}{'a'} = ANY_COMBINATION; + $digram{'j'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'e'} = ANY_COMBINATION; + $digram{'j'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'g'} = ILLEGAL_PAIR; + $digram{'j'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'i'} = ANY_COMBINATION; + $digram{'j'}{'j'} = ILLEGAL_PAIR; + $digram{'j'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'o'} = ANY_COMBINATION; + $digram{'j'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'r'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'s'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'u'} = ANY_COMBINATION; + $digram{'j'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'x'} = ILLEGAL_PAIR; + $digram{'j'}{'y'} = NOT_FRONT; + $digram{'j'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'rh'} = ILLEGAL_PAIR; + $digram{'j'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'wh'} = ILLEGAL_PAIR; + $digram{'j'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'j'}{'ck'} = ILLEGAL_PAIR; + + $digram{'k'}{'a'} = ANY_COMBINATION; + $digram{'k'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'e'} = ANY_COMBINATION; + $digram{'k'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'i'} = ANY_COMBINATION; + $digram{'k'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'l'} = SUFFIX | NOT_BACK; + $digram{'k'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'n'} = FRONT | SUFFIX | NOT_BACK; + $digram{'k'}{'o'} = ANY_COMBINATION; + $digram{'k'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'r'} = SUFFIX | NOT_BACK; + $digram{'k'}{'s'} = NOT_FRONT | BACK; + $digram{'k'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'u'} = ANY_COMBINATION; + $digram{'k'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'x'} = ILLEGAL_PAIR; + $digram{'k'}{'y'} = NOT_FRONT; + $digram{'k'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'ph'} = NOT_FRONT | PREFIX; + $digram{'k'}{'rh'} = ILLEGAL_PAIR; + $digram{'k'}{'sh'} = NOT_FRONT; + $digram{'k'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'wh'} = ILLEGAL_PAIR; + $digram{'k'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'k'}{'ck'} = ILLEGAL_PAIR; + + $digram{'l'}{'a'} = ANY_COMBINATION; + $digram{'l'}{'b'} = NOT_FRONT | PREFIX; + $digram{'l'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'l'}{'d'} = NOT_FRONT | PREFIX; + $digram{'l'}{'e'} = ANY_COMBINATION; + $digram{'l'}{'f'} = NOT_FRONT | PREFIX; + $digram{'l'}{'g'} = NOT_FRONT | PREFIX; + $digram{'l'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'l'}{'i'} = ANY_COMBINATION; + $digram{'l'}{'j'} = NOT_FRONT | PREFIX; + $digram{'l'}{'k'} = NOT_FRONT | PREFIX; + $digram{'l'}{'l'} = NOT_FRONT | PREFIX; + $digram{'l'}{'m'} = NOT_FRONT | PREFIX; + $digram{'l'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'l'}{'o'} = ANY_COMBINATION; + $digram{'l'}{'p'} = NOT_FRONT | PREFIX; + $digram{'l'}{'r'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'l'}{'s'} = NOT_FRONT; + $digram{'l'}{'t'} = NOT_FRONT | PREFIX; + $digram{'l'}{'u'} = ANY_COMBINATION; + $digram{'l'}{'v'} = NOT_FRONT | PREFIX; + $digram{'l'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'l'}{'x'} = ILLEGAL_PAIR; + $digram{'l'}{'y'} = ANY_COMBINATION; + $digram{'l'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'l'}{'ch'} = NOT_FRONT | PREFIX; + $digram{'l'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'l'}{'ph'} = NOT_FRONT | PREFIX; + $digram{'l'}{'rh'} = ILLEGAL_PAIR; + $digram{'l'}{'sh'} = NOT_FRONT | PREFIX; + $digram{'l'}{'th'} = NOT_FRONT | PREFIX; + $digram{'l'}{'wh'} = ILLEGAL_PAIR; + $digram{'l'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'l'}{'ck'} = ILLEGAL_PAIR; + + $digram{'m'}{'a'} = ANY_COMBINATION; + $digram{'m'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'e'} = ANY_COMBINATION; + $digram{'m'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'i'} = ANY_COMBINATION; + $digram{'m'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'m'} = NOT_FRONT; + $digram{'m'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'o'} = ANY_COMBINATION; + $digram{'m'}{'p'} = NOT_FRONT; + $digram{'m'}{'r'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'s'} = NOT_FRONT; + $digram{'m'}{'t'} = NOT_FRONT; + $digram{'m'}{'u'} = ANY_COMBINATION; + $digram{'m'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'x'} = ILLEGAL_PAIR; + $digram{'m'}{'y'} = ANY_COMBINATION; + $digram{'m'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'ch'} = NOT_FRONT | PREFIX; + $digram{'m'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'ph'} = NOT_FRONT; + $digram{'m'}{'rh'} = ILLEGAL_PAIR; + $digram{'m'}{'sh'} = NOT_FRONT; + $digram{'m'}{'th'} = NOT_FRONT; + $digram{'m'}{'wh'} = ILLEGAL_PAIR; + $digram{'m'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'m'}{'ck'} = ILLEGAL_PAIR; + + $digram{'n'}{'a'} = ANY_COMBINATION; + $digram{'n'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'d'} = NOT_FRONT; + $digram{'n'}{'e'} = ANY_COMBINATION; + $digram{'n'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'g'} = NOT_FRONT | PREFIX; + $digram{'n'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'i'} = ANY_COMBINATION; + $digram{'n'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'k'} = NOT_FRONT | PREFIX; + $digram{'n'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'n'} = NOT_FRONT; + $digram{'n'}{'o'} = ANY_COMBINATION; + $digram{'n'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'r'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'s'} = NOT_FRONT; + $digram{'n'}{'t'} = NOT_FRONT; + $digram{'n'}{'u'} = ANY_COMBINATION; + $digram{'n'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'x'} = ILLEGAL_PAIR; + $digram{'n'}{'y'} = NOT_FRONT; + $digram{'n'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'ch'} = NOT_FRONT | PREFIX; + $digram{'n'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'ph'} = NOT_FRONT | PREFIX; + $digram{'n'}{'rh'} = ILLEGAL_PAIR; + $digram{'n'}{'sh'} = NOT_FRONT; + $digram{'n'}{'th'} = NOT_FRONT; + $digram{'n'}{'wh'} = ILLEGAL_PAIR; + $digram{'n'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'n'}{'ck'} = NOT_FRONT | PREFIX; + + $digram{'o'}{'a'} = ANY_COMBINATION; + $digram{'o'}{'b'} = ANY_COMBINATION; + $digram{'o'}{'c'} = ANY_COMBINATION; + $digram{'o'}{'d'} = ANY_COMBINATION; + $digram{'o'}{'e'} = ILLEGAL_PAIR; + $digram{'o'}{'f'} = ANY_COMBINATION; + $digram{'o'}{'g'} = ANY_COMBINATION; + $digram{'o'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'o'}{'i'} = ANY_COMBINATION; + $digram{'o'}{'j'} = ANY_COMBINATION; + $digram{'o'}{'k'} = ANY_COMBINATION; + $digram{'o'}{'l'} = ANY_COMBINATION; + $digram{'o'}{'m'} = ANY_COMBINATION; + $digram{'o'}{'n'} = ANY_COMBINATION; + $digram{'o'}{'o'} = ANY_COMBINATION; + $digram{'o'}{'p'} = ANY_COMBINATION; + $digram{'o'}{'r'} = ANY_COMBINATION; + $digram{'o'}{'s'} = ANY_COMBINATION; + $digram{'o'}{'t'} = ANY_COMBINATION; + $digram{'o'}{'u'} = ANY_COMBINATION; + $digram{'o'}{'v'} = ANY_COMBINATION; + $digram{'o'}{'w'} = ANY_COMBINATION; + $digram{'o'}{'x'} = ANY_COMBINATION; + $digram{'o'}{'y'} = ANY_COMBINATION; + $digram{'o'}{'z'} = ANY_COMBINATION; + $digram{'o'}{'ch'} = ANY_COMBINATION; + $digram{'o'}{'gh'} = NOT_FRONT; + $digram{'o'}{'ph'} = ANY_COMBINATION; + $digram{'o'}{'rh'} = ILLEGAL_PAIR; + $digram{'o'}{'sh'} = ANY_COMBINATION; + $digram{'o'}{'th'} = ANY_COMBINATION; + $digram{'o'}{'wh'} = ILLEGAL_PAIR; + $digram{'o'}{'qu'} = BREAK | NOT_BACK; + $digram{'o'}{'ck'} = ANY_COMBINATION; + + $digram{'p'}{'a'} = ANY_COMBINATION; + $digram{'p'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'e'} = ANY_COMBINATION; + $digram{'p'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'i'} = ANY_COMBINATION; + $digram{'p'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'l'} = SUFFIX | NOT_BACK; + $digram{'p'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'o'} = ANY_COMBINATION; + $digram{'p'}{'p'} = NOT_FRONT | PREFIX; + $digram{'p'}{'r'} = NOT_BACK; + $digram{'p'}{'s'} = NOT_FRONT | BACK; + $digram{'p'}{'t'} = NOT_FRONT | BACK; + $digram{'p'}{'u'} = NOT_FRONT | BACK; + $digram{'p'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'x'} = ILLEGAL_PAIR; + $digram{'p'}{'y'} = ANY_COMBINATION; + $digram{'p'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'rh'} = ILLEGAL_PAIR; + $digram{'p'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'wh'} = ILLEGAL_PAIR; + $digram{'p'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'p'}{'ck'} = ILLEGAL_PAIR; + + $digram{'r'}{'a'} = ANY_COMBINATION; + $digram{'r'}{'b'} = NOT_FRONT | PREFIX; + $digram{'r'}{'c'} = NOT_FRONT | PREFIX; + $digram{'r'}{'d'} = NOT_FRONT | PREFIX; + $digram{'r'}{'e'} = ANY_COMBINATION; + $digram{'r'}{'f'} = NOT_FRONT | PREFIX; + $digram{'r'}{'g'} = NOT_FRONT | PREFIX; + $digram{'r'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'r'}{'i'} = ANY_COMBINATION; + $digram{'r'}{'j'} = NOT_FRONT | PREFIX; + $digram{'r'}{'k'} = NOT_FRONT | PREFIX; + $digram{'r'}{'l'} = NOT_FRONT | PREFIX; + $digram{'r'}{'m'} = NOT_FRONT | PREFIX; + $digram{'r'}{'n'} = NOT_FRONT | PREFIX; + $digram{'r'}{'o'} = ANY_COMBINATION; + $digram{'r'}{'p'} = NOT_FRONT | PREFIX; + $digram{'r'}{'r'} = NOT_FRONT | PREFIX; + $digram{'r'}{'s'} = NOT_FRONT | PREFIX; + $digram{'r'}{'t'} = NOT_FRONT | PREFIX; + $digram{'r'}{'u'} = ANY_COMBINATION; + $digram{'r'}{'v'} = NOT_FRONT | PREFIX; + $digram{'r'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'r'}{'x'} = ILLEGAL_PAIR; + $digram{'r'}{'y'} = ANY_COMBINATION; + $digram{'r'}{'z'} = NOT_FRONT | PREFIX; + $digram{'r'}{'ch'} = NOT_FRONT | PREFIX; + $digram{'r'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'r'}{'ph'} = NOT_FRONT | PREFIX; + $digram{'r'}{'rh'} = ILLEGAL_PAIR; + $digram{'r'}{'sh'} = NOT_FRONT | PREFIX; + $digram{'r'}{'th'} = NOT_FRONT | PREFIX; + $digram{'r'}{'wh'} = ILLEGAL_PAIR; + $digram{'r'}{'qu'} = NOT_FRONT | PREFIX | NOT_BACK; + $digram{'r'}{'ck'} = NOT_FRONT | PREFIX; + + $digram{'s'}{'a'} = ANY_COMBINATION; + $digram{'s'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'c'} = NOT_BACK; + $digram{'s'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'e'} = ANY_COMBINATION; + $digram{'s'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'i'} = ANY_COMBINATION; + $digram{'s'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'k'} = ANY_COMBINATION; + $digram{'s'}{'l'} = FRONT | SUFFIX | NOT_BACK; + $digram{'s'}{'m'} = SUFFIX | NOT_BACK; + $digram{'s'}{'n'} = PREFIX | SUFFIX | NOT_BACK; + $digram{'s'}{'o'} = ANY_COMBINATION; + $digram{'s'}{'p'} = ANY_COMBINATION; + $digram{'s'}{'r'} = NOT_FRONT | NOT_BACK; + $digram{'s'}{'s'} = NOT_FRONT | PREFIX; + $digram{'s'}{'t'} = ANY_COMBINATION; + $digram{'s'}{'u'} = ANY_COMBINATION; + $digram{'s'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'w'} = FRONT | SUFFIX | NOT_BACK; + $digram{'s'}{'x'} = ILLEGAL_PAIR; + $digram{'s'}{'y'} = ANY_COMBINATION; + $digram{'s'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'ch'} = FRONT | SUFFIX | NOT_BACK; + $digram{'s'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'rh'} = ILLEGAL_PAIR; + $digram{'s'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'s'}{'wh'} = ILLEGAL_PAIR; + $digram{'s'}{'qu'} = SUFFIX | NOT_BACK; + $digram{'s'}{'ck'} = NOT_FRONT; + + $digram{'t'}{'a'} = ANY_COMBINATION; + $digram{'t'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'e'} = ANY_COMBINATION; + $digram{'t'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'i'} = ANY_COMBINATION; + $digram{'t'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'o'} = ANY_COMBINATION; + $digram{'t'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'r'} = NOT_BACK; + $digram{'t'}{'s'} = NOT_FRONT | BACK; + $digram{'t'}{'t'} = NOT_FRONT | PREFIX; + $digram{'t'}{'u'} = ANY_COMBINATION; + $digram{'t'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'w'} = FRONT | SUFFIX | NOT_BACK; + $digram{'t'}{'x'} = ILLEGAL_PAIR; + $digram{'t'}{'y'} = ANY_COMBINATION; + $digram{'t'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'ch'} = NOT_FRONT; + $digram{'t'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'ph'} = NOT_FRONT | BACK; + $digram{'t'}{'rh'} = ILLEGAL_PAIR; + $digram{'t'}{'sh'} = NOT_FRONT | BACK; + $digram{'t'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'wh'} = ILLEGAL_PAIR; + $digram{'t'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'t'}{'ck'} = ILLEGAL_PAIR; + + $digram{'u'}{'a'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'u'}{'b'} = ANY_COMBINATION; + $digram{'u'}{'c'} = ANY_COMBINATION; + $digram{'u'}{'d'} = ANY_COMBINATION; + $digram{'u'}{'e'} = NOT_FRONT; + $digram{'u'}{'f'} = ANY_COMBINATION; + $digram{'u'}{'g'} = ANY_COMBINATION; + $digram{'u'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'u'}{'i'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'u'}{'j'} = ANY_COMBINATION; + $digram{'u'}{'k'} = ANY_COMBINATION; + $digram{'u'}{'l'} = ANY_COMBINATION; + $digram{'u'}{'m'} = ANY_COMBINATION; + $digram{'u'}{'n'} = ANY_COMBINATION; + $digram{'u'}{'o'} = NOT_FRONT | BREAK; + $digram{'u'}{'p'} = ANY_COMBINATION; + $digram{'u'}{'r'} = ANY_COMBINATION; + $digram{'u'}{'s'} = ANY_COMBINATION; + $digram{'u'}{'t'} = ANY_COMBINATION; + $digram{'u'}{'u'} = ILLEGAL_PAIR; + $digram{'u'}{'v'} = ANY_COMBINATION; + $digram{'u'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'u'}{'x'} = ANY_COMBINATION; + $digram{'u'}{'y'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'u'}{'z'} = ANY_COMBINATION; + $digram{'u'}{'ch'} = ANY_COMBINATION; + $digram{'u'}{'gh'} = NOT_FRONT | PREFIX; + $digram{'u'}{'ph'} = ANY_COMBINATION; + $digram{'u'}{'rh'} = ILLEGAL_PAIR; + $digram{'u'}{'sh'} = ANY_COMBINATION; + $digram{'u'}{'th'} = ANY_COMBINATION; + $digram{'u'}{'wh'} = ILLEGAL_PAIR; + $digram{'u'}{'qu'} = BREAK | NOT_BACK; + $digram{'u'}{'ck'} = ANY_COMBINATION; + + $digram{'v'}{'a'} = ANY_COMBINATION; + $digram{'v'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'e'} = ANY_COMBINATION; + $digram{'v'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'i'} = ANY_COMBINATION; + $digram{'v'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'o'} = ANY_COMBINATION; + $digram{'v'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'r'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'s'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'u'} = ANY_COMBINATION; + $digram{'v'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'x'} = ILLEGAL_PAIR; + $digram{'v'}{'y'} = NOT_FRONT; + $digram{'v'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'rh'} = ILLEGAL_PAIR; + $digram{'v'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'wh'} = ILLEGAL_PAIR; + $digram{'v'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'v'}{'ck'} = ILLEGAL_PAIR; + + $digram{'w'}{'a'} = ANY_COMBINATION; + $digram{'w'}{'b'} = NOT_FRONT | PREFIX; + $digram{'w'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'w'}{'d'} = NOT_FRONT | PREFIX | BACK; + $digram{'w'}{'e'} = ANY_COMBINATION; + $digram{'w'}{'f'} = NOT_FRONT | PREFIX; + $digram{'w'}{'g'} = NOT_FRONT | PREFIX | BACK; + $digram{'w'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'w'}{'i'} = ANY_COMBINATION; + $digram{'w'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'w'}{'k'} = NOT_FRONT | PREFIX; + $digram{'w'}{'l'} = NOT_FRONT | PREFIX | SUFFIX; + $digram{'w'}{'m'} = NOT_FRONT | PREFIX; + $digram{'w'}{'n'} = NOT_FRONT | PREFIX; + $digram{'w'}{'o'} = ANY_COMBINATION; + $digram{'w'}{'p'} = NOT_FRONT | PREFIX; + $digram{'w'}{'r'} = FRONT | SUFFIX | NOT_BACK; + $digram{'w'}{'s'} = NOT_FRONT | PREFIX; + $digram{'w'}{'t'} = NOT_FRONT | PREFIX; + $digram{'w'}{'u'} = ANY_COMBINATION; + $digram{'w'}{'v'} = NOT_FRONT | PREFIX; + $digram{'w'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'w'}{'x'} = NOT_FRONT | PREFIX; + $digram{'w'}{'y'} = ANY_COMBINATION; + $digram{'w'}{'z'} = NOT_FRONT | PREFIX; + $digram{'w'}{'ch'} = NOT_FRONT; + $digram{'w'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'w'}{'ph'} = NOT_FRONT; + $digram{'w'}{'rh'} = ILLEGAL_PAIR; + $digram{'w'}{'sh'} = NOT_FRONT; + $digram{'w'}{'th'} = NOT_FRONT; + $digram{'w'}{'wh'} = ILLEGAL_PAIR; + $digram{'w'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'w'}{'ck'} = NOT_FRONT; + + $digram{'x'}{'a'} = NOT_FRONT; + $digram{'x'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'e'} = NOT_FRONT; + $digram{'x'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'i'} = NOT_FRONT; + $digram{'x'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'o'} = NOT_FRONT; + $digram{'x'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'r'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'s'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'u'} = NOT_FRONT; + $digram{'x'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'x'} = ILLEGAL_PAIR; + $digram{'x'}{'y'} = NOT_FRONT; + $digram{'x'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'rh'} = ILLEGAL_PAIR; + $digram{'x'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'wh'} = ILLEGAL_PAIR; + $digram{'x'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'x'}{'ck'} = ILLEGAL_PAIR; + + $digram{'y'}{'a'} = ANY_COMBINATION; + $digram{'y'}{'b'} = NOT_FRONT; + $digram{'y'}{'c'} = NOT_FRONT | NOT_BACK; + $digram{'y'}{'d'} = NOT_FRONT; + $digram{'y'}{'e'} = ANY_COMBINATION; + $digram{'y'}{'f'} = NOT_FRONT | NOT_BACK; + $digram{'y'}{'g'} = NOT_FRONT; + $digram{'y'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'y'}{'i'} = FRONT | NOT_BACK; + $digram{'y'}{'j'} = NOT_FRONT | NOT_BACK; + $digram{'y'}{'k'} = NOT_FRONT; + $digram{'y'}{'l'} = NOT_FRONT | NOT_BACK; + $digram{'y'}{'m'} = NOT_FRONT; + $digram{'y'}{'n'} = NOT_FRONT; + $digram{'y'}{'o'} = ANY_COMBINATION; + $digram{'y'}{'p'} = NOT_FRONT; + $digram{'y'}{'r'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'y'}{'s'} = NOT_FRONT; + $digram{'y'}{'t'} = NOT_FRONT; + $digram{'y'}{'u'} = ANY_COMBINATION; + $digram{'y'}{'v'} = NOT_FRONT | NOT_BACK; + $digram{'y'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'y'}{'x'} = NOT_FRONT; + $digram{'y'}{'y'} = ILLEGAL_PAIR; + $digram{'y'}{'z'} = NOT_FRONT; + $digram{'y'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'y'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'y'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'y'}{'rh'} = ILLEGAL_PAIR; + $digram{'y'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'y'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'y'}{'wh'} = ILLEGAL_PAIR; + $digram{'y'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'y'}{'ck'} = ILLEGAL_PAIR; + + $digram{'z'}{'a'} = ANY_COMBINATION; + $digram{'z'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'e'} = ANY_COMBINATION; + $digram{'z'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'i'} = ANY_COMBINATION; + $digram{'z'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'o'} = ANY_COMBINATION; + $digram{'z'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'r'} = NOT_FRONT | NOT_BACK; + $digram{'z'}{'s'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'t'} = NOT_FRONT; + $digram{'z'}{'u'} = ANY_COMBINATION; + $digram{'z'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'w'} = SUFFIX | NOT_BACK; + $digram{'z'}{'x'} = ILLEGAL_PAIR; + $digram{'z'}{'y'} = ANY_COMBINATION; + $digram{'z'}{'z'} = NOT_FRONT; + $digram{'z'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'rh'} = ILLEGAL_PAIR; + $digram{'z'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'wh'} = ILLEGAL_PAIR; + $digram{'z'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'z'}{'ck'} = ILLEGAL_PAIR; + + $digram{'ch'}{'a'} = ANY_COMBINATION; + $digram{'ch'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'e'} = ANY_COMBINATION; + $digram{'ch'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'i'} = ANY_COMBINATION; + $digram{'ch'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'o'} = ANY_COMBINATION; + $digram{'ch'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'r'} = NOT_BACK; + $digram{'ch'}{'s'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'u'} = ANY_COMBINATION; + $digram{'ch'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'w'} = NOT_FRONT | NOT_BACK; + $digram{'ch'}{'x'} = ILLEGAL_PAIR; + $digram{'ch'}{'y'} = ANY_COMBINATION; + $digram{'ch'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'ch'} = ILLEGAL_PAIR; + $digram{'ch'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'rh'} = ILLEGAL_PAIR; + $digram{'ch'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'wh'} = ILLEGAL_PAIR; + $digram{'ch'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ch'}{'ck'} = ILLEGAL_PAIR; + + $digram{'gh'}{'a'} = ANY_COMBINATION; + $digram{'gh'}{'b'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'c'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'d'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'e'} = ANY_COMBINATION; + $digram{'gh'}{'f'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'g'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'h'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'i'} = FRONT | NOT_BACK; + $digram{'gh'}{'j'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'k'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'l'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'m'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'n'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'o'} = FRONT | NOT_BACK; + $digram{'gh'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'gh'}{'r'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'s'} = NOT_FRONT | PREFIX; + $digram{'gh'}{'t'} = NOT_FRONT | PREFIX; + $digram{'gh'}{'u'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'v'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'w'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'x'} = ILLEGAL_PAIR; + $digram{'gh'}{'y'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'z'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'ch'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'gh'} = ILLEGAL_PAIR; + $digram{'gh'}{'ph'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'rh'} = ILLEGAL_PAIR; + $digram{'gh'}{'sh'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'th'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'wh'} = ILLEGAL_PAIR; + $digram{'gh'}{'qu'} = NOT_FRONT | BREAK | PREFIX | NOT_BACK; + $digram{'gh'}{'ck'} = ILLEGAL_PAIR; + + $digram{'ph'}{'a'} = ANY_COMBINATION; + $digram{'ph'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'e'} = ANY_COMBINATION; + $digram{'ph'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'i'} = ANY_COMBINATION; + $digram{'ph'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'l'} = FRONT | SUFFIX | NOT_BACK; + $digram{'ph'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'o'} = ANY_COMBINATION; + $digram{'ph'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'r'} = NOT_BACK; + $digram{'ph'}{'s'} = NOT_FRONT; + $digram{'ph'}{'t'} = NOT_FRONT; + $digram{'ph'}{'u'} = ANY_COMBINATION; + $digram{'ph'}{'v'} = NOT_FRONT | NOT_BACK; + $digram{'ph'}{'w'} = NOT_FRONT | NOT_BACK; + $digram{'ph'}{'x'} = ILLEGAL_PAIR; + $digram{'ph'}{'y'} = NOT_FRONT; + $digram{'ph'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'ph'} = ILLEGAL_PAIR; + $digram{'ph'}{'rh'} = ILLEGAL_PAIR; + $digram{'ph'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'wh'} = ILLEGAL_PAIR; + $digram{'ph'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ph'}{'ck'} = ILLEGAL_PAIR; + + $digram{'rh'}{'a'} = FRONT | NOT_BACK; + $digram{'rh'}{'b'} = ILLEGAL_PAIR; + $digram{'rh'}{'c'} = ILLEGAL_PAIR; + $digram{'rh'}{'d'} = ILLEGAL_PAIR; + $digram{'rh'}{'e'} = FRONT | NOT_BACK; + $digram{'rh'}{'f'} = ILLEGAL_PAIR; + $digram{'rh'}{'g'} = ILLEGAL_PAIR; + $digram{'rh'}{'h'} = ILLEGAL_PAIR; + $digram{'rh'}{'i'} = FRONT | NOT_BACK; + $digram{'rh'}{'j'} = ILLEGAL_PAIR; + $digram{'rh'}{'k'} = ILLEGAL_PAIR; + $digram{'rh'}{'l'} = ILLEGAL_PAIR; + $digram{'rh'}{'m'} = ILLEGAL_PAIR; + $digram{'rh'}{'n'} = ILLEGAL_PAIR; + $digram{'rh'}{'o'} = FRONT | NOT_BACK; + $digram{'rh'}{'p'} = ILLEGAL_PAIR; + $digram{'rh'}{'r'} = ILLEGAL_PAIR; + $digram{'rh'}{'s'} = ILLEGAL_PAIR; + $digram{'rh'}{'t'} = ILLEGAL_PAIR; + $digram{'rh'}{'u'} = FRONT | NOT_BACK; + $digram{'rh'}{'v'} = ILLEGAL_PAIR; + $digram{'rh'}{'w'} = ILLEGAL_PAIR; + $digram{'rh'}{'x'} = ILLEGAL_PAIR; + $digram{'rh'}{'y'} = FRONT | NOT_BACK; + $digram{'rh'}{'z'} = ILLEGAL_PAIR; + $digram{'rh'}{'ch'} = ILLEGAL_PAIR; + $digram{'rh'}{'gh'} = ILLEGAL_PAIR; + $digram{'rh'}{'ph'} = ILLEGAL_PAIR; + $digram{'rh'}{'rh'} = ILLEGAL_PAIR; + $digram{'rh'}{'sh'} = ILLEGAL_PAIR; + $digram{'rh'}{'th'} = ILLEGAL_PAIR; + $digram{'rh'}{'wh'} = ILLEGAL_PAIR; + $digram{'rh'}{'qu'} = ILLEGAL_PAIR; + $digram{'rh'}{'ck'} = ILLEGAL_PAIR; + + $digram{'sh'}{'a'} = ANY_COMBINATION; + $digram{'sh'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'e'} = ANY_COMBINATION; + $digram{'sh'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'h'} = ILLEGAL_PAIR; + $digram{'sh'}{'i'} = ANY_COMBINATION; + $digram{'sh'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'k'} = NOT_FRONT; + $digram{'sh'}{'l'} = FRONT | SUFFIX | NOT_BACK; + $digram{'sh'}{'m'} = FRONT | SUFFIX | NOT_BACK; + $digram{'sh'}{'n'} = FRONT | SUFFIX | NOT_BACK; + $digram{'sh'}{'o'} = ANY_COMBINATION; + $digram{'sh'}{'p'} = NOT_FRONT; + $digram{'sh'}{'r'} = FRONT | SUFFIX | NOT_BACK; + $digram{'sh'}{'s'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'t'} = SUFFIX; + $digram{'sh'}{'u'} = ANY_COMBINATION; + $digram{'sh'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'w'} = SUFFIX | NOT_BACK; + $digram{'sh'}{'x'} = ILLEGAL_PAIR; + $digram{'sh'}{'y'} = ANY_COMBINATION; + $digram{'sh'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'rh'} = ILLEGAL_PAIR; + $digram{'sh'}{'sh'} = ILLEGAL_PAIR; + $digram{'sh'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'wh'} = ILLEGAL_PAIR; + $digram{'sh'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'sh'}{'ck'} = ILLEGAL_PAIR; + + $digram{'th'}{'a'} = ANY_COMBINATION; + $digram{'th'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'e'} = ANY_COMBINATION; + $digram{'th'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'i'} = ANY_COMBINATION; + $digram{'th'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'o'} = ANY_COMBINATION; + $digram{'th'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'r'} = NOT_BACK; + $digram{'th'}{'s'} = NOT_FRONT | BACK; + $digram{'th'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'u'} = ANY_COMBINATION; + $digram{'th'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'w'} = SUFFIX | NOT_BACK; + $digram{'th'}{'x'} = ILLEGAL_PAIR; + $digram{'th'}{'y'} = ANY_COMBINATION; + $digram{'th'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'rh'} = ILLEGAL_PAIR; + $digram{'th'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'th'} = ILLEGAL_PAIR; + $digram{'th'}{'wh'} = ILLEGAL_PAIR; + $digram{'th'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'th'}{'ck'} = ILLEGAL_PAIR; + + $digram{'wh'}{'a'} = FRONT | NOT_BACK; + $digram{'wh'}{'b'} = ILLEGAL_PAIR; + $digram{'wh'}{'c'} = ILLEGAL_PAIR; + $digram{'wh'}{'d'} = ILLEGAL_PAIR; + $digram{'wh'}{'e'} = FRONT | NOT_BACK; + $digram{'wh'}{'f'} = ILLEGAL_PAIR; + $digram{'wh'}{'g'} = ILLEGAL_PAIR; + $digram{'wh'}{'h'} = ILLEGAL_PAIR; + $digram{'wh'}{'i'} = FRONT | NOT_BACK; + $digram{'wh'}{'j'} = ILLEGAL_PAIR; + $digram{'wh'}{'k'} = ILLEGAL_PAIR; + $digram{'wh'}{'l'} = ILLEGAL_PAIR; + $digram{'wh'}{'m'} = ILLEGAL_PAIR; + $digram{'wh'}{'n'} = ILLEGAL_PAIR; + $digram{'wh'}{'o'} = FRONT | NOT_BACK; + $digram{'wh'}{'p'} = ILLEGAL_PAIR; + $digram{'wh'}{'r'} = ILLEGAL_PAIR; + $digram{'wh'}{'s'} = ILLEGAL_PAIR; + $digram{'wh'}{'t'} = ILLEGAL_PAIR; + $digram{'wh'}{'u'} = ILLEGAL_PAIR; + $digram{'wh'}{'v'} = ILLEGAL_PAIR; + $digram{'wh'}{'w'} = ILLEGAL_PAIR; + $digram{'wh'}{'x'} = ILLEGAL_PAIR; + $digram{'wh'}{'y'} = FRONT | NOT_BACK; + $digram{'wh'}{'z'} = ILLEGAL_PAIR; + $digram{'wh'}{'ch'} = ILLEGAL_PAIR; + $digram{'wh'}{'gh'} = ILLEGAL_PAIR; + $digram{'wh'}{'ph'} = ILLEGAL_PAIR; + $digram{'wh'}{'rh'} = ILLEGAL_PAIR; + $digram{'wh'}{'sh'} = ILLEGAL_PAIR; + $digram{'wh'}{'th'} = ILLEGAL_PAIR; + $digram{'wh'}{'wh'} = ILLEGAL_PAIR; + $digram{'wh'}{'qu'} = ILLEGAL_PAIR; + $digram{'wh'}{'ck'} = ILLEGAL_PAIR; + + $digram{'qu'}{'a'} = ANY_COMBINATION; + $digram{'qu'}{'b'} = ILLEGAL_PAIR; + $digram{'qu'}{'c'} = ILLEGAL_PAIR; + $digram{'qu'}{'d'} = ILLEGAL_PAIR; + $digram{'qu'}{'e'} = ANY_COMBINATION; + $digram{'qu'}{'f'} = ILLEGAL_PAIR; + $digram{'qu'}{'g'} = ILLEGAL_PAIR; + $digram{'qu'}{'h'} = ILLEGAL_PAIR; + $digram{'qu'}{'i'} = ANY_COMBINATION; + $digram{'qu'}{'j'} = ILLEGAL_PAIR; + $digram{'qu'}{'k'} = ILLEGAL_PAIR; + $digram{'qu'}{'l'} = ILLEGAL_PAIR; + $digram{'qu'}{'m'} = ILLEGAL_PAIR; + $digram{'qu'}{'n'} = ILLEGAL_PAIR; + $digram{'qu'}{'o'} = ANY_COMBINATION; + $digram{'qu'}{'p'} = ILLEGAL_PAIR; + $digram{'qu'}{'r'} = ILLEGAL_PAIR; + $digram{'qu'}{'s'} = ILLEGAL_PAIR; + $digram{'qu'}{'t'} = ILLEGAL_PAIR; + $digram{'qu'}{'u'} = ILLEGAL_PAIR; + $digram{'qu'}{'v'} = ILLEGAL_PAIR; + $digram{'qu'}{'w'} = ILLEGAL_PAIR; + $digram{'qu'}{'x'} = ILLEGAL_PAIR; + $digram{'qu'}{'y'} = ILLEGAL_PAIR; + $digram{'qu'}{'z'} = ILLEGAL_PAIR; + $digram{'qu'}{'ch'} = ILLEGAL_PAIR; + $digram{'qu'}{'gh'} = ILLEGAL_PAIR; + $digram{'qu'}{'ph'} = ILLEGAL_PAIR; + $digram{'qu'}{'rh'} = ILLEGAL_PAIR; + $digram{'qu'}{'sh'} = ILLEGAL_PAIR; + $digram{'qu'}{'th'} = ILLEGAL_PAIR; + $digram{'qu'}{'wh'} = ILLEGAL_PAIR; + $digram{'qu'}{'qu'} = ILLEGAL_PAIR; + $digram{'qu'}{'ck'} = ILLEGAL_PAIR; + + $digram{'ck'}{'a'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'b'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'c'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'d'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'e'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'f'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'g'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'h'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'i'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'j'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'k'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'l'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'m'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'n'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'o'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'p'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'r'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'s'} = NOT_FRONT; + $digram{'ck'}{'t'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'u'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'v'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'w'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'x'} = ILLEGAL_PAIR; + $digram{'ck'}{'y'} = NOT_FRONT; + $digram{'ck'}{'z'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'ch'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'gh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'ph'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'rh'} = ILLEGAL_PAIR; + $digram{'ck'}{'sh'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'th'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'wh'} = ILLEGAL_PAIR; + $digram{'ck'}{'qu'} = NOT_FRONT | BREAK | NOT_BACK; + $digram{'ck'}{'ck'} = ILLEGAL_PAIR; + + ############################################################################################## + # } END DIGRAM + ############################################################################################## + + + +sub report(@) { + $main::DEBUG and print @_; +} + + + + +=head2 word + + word = word( minlen, maxlen ); + ( word, hyphenated_form ) = word( minlen, maxlen ); + +Generates a random word, as well as its hyphenated form. +The length of the returned word will be between minlen and maxlen. + +=cut + +sub word($$) { + @_ > 2 and shift; + my( $minlen, $maxlen ) = @_; + + $minlen <= $maxlen or die "minlen $minlen is greater than maxlen $maxlen"; + + init(); + + # + # Check for zero length words. This is technically not an error, + # so we take the short cut and return empty words. + # + $maxlen or return wantarray ? ('','') : ''; + + my( $word, $hyphenated_word ); + + for ( my $try = 1 ; $try <= MAX_UNACCEPTABLE and not defined $word; $try++ ) { + ( $word, $hyphenated_word ) = _random_word( rand_int_in_range( $minlen, $maxlen ) ); + $word = restrict( $word ); + } + + $word or die "failed to generate an acceptable random password.\n"; + + return wantarray ? ( $word, $hyphenated_word ) : $word; +} + + +=head2 letters + + word = letters( minlen, maxlen ); + +Generates a string of random letters. +The length of the returned word is between minlen and maxlen. +Calls C 'z' )>. + +=cut + +sub letters($$) { + @_ > 2 and shift; + my( $minlen, $maxlen ) = @_; + random_chars_in_range( $minlen, $maxlen, 'a' => 'z' ); # range of lowercase letters in ASCII +} + + +=head2 chars + + word = chars( minlen, maxlen ); + +Generates a string of random printable characters. +The length of the returned word is between minlen and maxlen. +Calls C '~' )>. + +=cut + +sub chars($$) { + @_ > 2 and shift; + my( $minlen, $maxlen ) = @_; + random_chars_in_range( $minlen, $maxlen, '!' => '~' ); # range of printable chars in ASCII +} + + + +=head2 random_chars_in_range + + word = random_chars_in_range( minlen, maxlen, lo_char => hi_char ); + +Generates a string of printable characters. +The length of the returned string is between minlen and maxlen. +Each character is selected from the range of ASCII characters +delimited by (lo_char,hi_char). + +=cut + +sub random_chars_in_range($$$$) { + my( $minlen, $maxlen, $lo_char, $hi_char ) = @_; + + $minlen <= $maxlen or die "minlen $minlen is greater than maxlen $maxlen"; + + init(); + + my $string_size = rand_int_in_range( $minlen, $maxlen ); + + my $string; + for ( my $try = 1 ; $try <= MAX_UNACCEPTABLE and not defined $string; $try++ ) { + my $s = ''; + while ( length($s) < $string_size ) { + $s .= chr( rand_int_in_range( ord($lo_char), ord($hi_char) ) ); + } + next if length($s) > $string_size; + $string = restrict( $s ); + } + + $string +} + + + +=head2 rand_int_in_range + + n = rand_int_in_range( min, max ); + +Returns an integer between min and max, inclusive. +Calls C like so: + + n = min + int( rng( max - min + 1 ) ) + +=cut + +sub rand_int_in_range($$) { + my( $min, $max ) = @_; + $min + int( rng( $max - $min + 1 ) ) +} + + +=head2 random_element + + e = random_element( \@elts ) + +Selects a random element from an array, which is passed by ref. + +=cut + +sub random_element($) { + my $ar = shift; + $ar->[ rand_int_in_range( 0, $#{$ar} ) ] +} + + + +=head2 rng + + r = rng( n ); + +C is designed to have the same interface as the built-in C function. +The default implementation here is a simple wrapper around C, +which is typically a wrapper for some pseudo-random number function in the +underlying C library. + +The reason for having this simple wrapper is so the user can +easily substitute a different random number generator if desired. +Since many rng's have the same interface as C, replacing C +is as simple as + + { + local $^W; # squelch sub redef warning. + *Crypt::RandPasswd::rng = \&my_rng; + } + +See L. + +=cut + +sub rng($) { + my $x = shift; + rand($x) +} + + + +=head2 restrict + + word = restrict( word ); + +A filter. Returns the arg unchanged if it is allowable; returns undef if not. + +The default version of C allows everything. +You may install a different form to implement other restrictions, +by doing something like this: + + { + local $^W; # squelch sub redef warning. + *Crypt::RandPasswd::restrict = \&my_filter; + } + +=cut + +sub restrict($) { $_[0] } # MUST return a real scalar; returning @_ causes scalar(@_) !!! + + +=head2 init + +This initializes the environment, which by default simply seeds the random number generator. + +=cut + +# can be called multiple times without harm, since it remembers whether +# it has already been called. + +sub init() { + unless ( $Crypt::RandPasswd::initialized ) { + # only do stuff if I haven't already been called before. + + $Crypt::RandPasswd::initialized = 1; + if ( defined $Crypt::RandPasswd::seed ) { + srand( $Crypt::RandPasswd::seed ); + } + else { + srand; # use default, which can be pretty good. + } + } +} + + + + +=head2 _random_word + +This is the routine that returns a random word. +It collects random syllables until a predetermined word length is found. +If a retry threshold is reached, another word is tried. + +returns ( word, hyphenated_word ). + +=cut + +sub _random_word($) { + my( $pwlen ) = @_; + + my $word = ''; + my @word_syllables; + + my $max_retries = ( 4 * $pwlen ) + scalar( @grams ); + + my $tries = 0; # count of retries. + + + # @word_units used to be an array of indices into the 'rules' C-array. + # now it's an array of actual units (grams). + my @word_units; + + # + # Find syllables until the entire word is constructed. + # + while ( length($word) < $pwlen ) { + # + # Get the syllable and find its length. + # + report "About to call get_syllable( $pwlen - length($word) )\n"; + my( $new_syllable, @syllable_units ) = get_syllable( $pwlen - length($word) ); + report "get_syllable returned ( $new_syllable; @syllable_units )\n"; + + # + # If the word has been improperly formed, throw out + # the syllable. The checks performed here are those + # that must be formed on a word basis. The other + # tests are performed entirely within the syllable. + # Otherwise, append the syllable to the word. + # + unless ( + _improper_word( @word_units, @syllable_units ) # join the arrays + || + ( + $word eq '' + and + _have_initial_y( @syllable_units ) + ) + || + ( + length( $word . $new_syllable ) == $pwlen + and + _have_final_split( @syllable_units ) + ) + ) { + $word .= $new_syllable; + push @word_syllables, $new_syllable; + } + + # + # Keep track of the times we have tried to get syllables. + # If we have exceeded the threshold, start from scratch. + # + $tries++; + if ( $tries > $max_retries ) { + $tries = 0; + $word = ''; + @word_syllables = (); + @word_units = (); + } + } + + return( $word, join('-',@word_syllables) ); +} + + + +=head2 _random_unit + +Selects a gram (aka "unit"). +This is the standard random unit generating routine for get_syllable(). + +This routine attempts to return grams (units) with a distribution +approaching that of the distribution of the units in English. + +The distribution of the units may be altered in this procedure without +affecting the digram table or any other programs using the random_word subroutine, +as long as the set of grams (units) is kept consistent throughout this library. + +I + +=cut + +my %occurrence_frequencies = ( + 'a' => 10, 'b' => 8, 'c' => 12, 'd' => 12, + 'e' => 12, 'f' => 8, 'g' => 8, 'h' => 6, + 'i' => 10, 'j' => 8, 'k' => 8, 'l' => 6, + 'm' => 6, 'n' => 10, 'o' => 10, 'p' => 6, + 'r' => 10, 's' => 8, 't' => 10, 'u' => 6, + 'v' => 8, 'w' => 8, 'x' => 1, 'y' => 8, + 'z' => 1, 'ch' => 1, 'gh' => 1, 'ph' => 1, + 'rh' => 1, 'sh' => 2, 'th' => 1, 'wh' => 1, + 'qu' => 1, 'ck' => 1, +); + +my @numbers = map { + ( ($_) x $occurrence_frequencies{$_} ) +} @grams; + +my @vowel_numbers = map { + ( ($_) x $occurrence_frequencies{$_} ) +} @vowel_grams; + + + +sub _random_unit($) { + my $type = shift; # byte + + random_element( $type & VOWEL + ? \@vowel_numbers # Sometimes, we are asked to explicitly get a vowel (i.e., if + # a digram pair expects one following it). This is a shortcut + # to do that and avoid looping with rejected consonants. + + : \@numbers # Get any letter according to the English distribution. + ) +} + + + + +=head2 _improper_word + +Check that the word does not contain illegal combinations +that may span syllables. Specifically, these are: + + 1. An illegal pair of units between syllables. + 2. Three consecutive vowel units. + 3. Three consecutive consonant units. + +The checks are made against units (1 or 2 letters), not against +the individual letters, so three consecutive units can have +the length of 6 at most. + +returns boolean + +=cut + +sub _improper_word(@) { + my @units = @_; + + my $failure; # bool, init False. + + for my $unit_count ( 0 .. $#units ) { + # + # Check for ILLEGAL_PAIR. + # This should have been caught for units within a syllable, + # but in some cases it would have gone unnoticed for units between syllables + # (e.g., when saved units in get_syllable() were not used). + # + $unit_count > 0 + and $digram{$units[$unit_count-1]}{$units[$unit_count]} & ILLEGAL_PAIR + and return(1); # Failure! + + next if $unit_count < 2; + # + # Check for consecutive vowels or consonants. + # Because the initial y of a syllable is treated as a consonant rather + # than as a vowel, we exclude y from the first vowel in the vowel test. + # The only problem comes when y ends a syllable and two other vowels start the next, like fly-oint. + # Since such words are still pronounceable, we accept this. + # + # + # Vowel check. + # + ( + ($rules{$units[$unit_count - 2]} & VOWEL) + && + !($rules{$units[$unit_count - 2]} & ALTERNATE_VOWEL) + && + ($rules{$units[$unit_count - 1]} & VOWEL) + && + ($rules{$units[$unit_count ]} & VOWEL) + ) + || + # + # Consonant check. + # + ( + !($rules{$units[$unit_count - 2]} & VOWEL) + && + !($rules{$units[$unit_count - 1]} & VOWEL) + && + !($rules{$units[$unit_count ]} & VOWEL) + ) + and return(1); # Failure! + } + + 0 # success +} + + +=head2 _have_initial_y + +Treating y as a vowel is sometimes a problem. Some words get formed that look irregular. +One special group is when y starts a word and is the only vowel in the first syllable. +The word ycl is one example. We discard words like these. + +return boolean + +=cut + +sub _have_initial_y(@) { + my @units = @_; + + my $vowel_count = 0; + my $normal_vowel_count = 0; + + for my $unit_count ( 0 .. $#units ) { + # + # Count vowels. + # + if ( $rules{$units[$unit_count]} & VOWEL ) { + $vowel_count++; + + # + # Count the vowels that are not: + # 1. 'y' + # 2. at the start of the word. + # + if ( !($rules{$units[$unit_count]} & ALTERNATE_VOWEL) || ($unit_count > 0) ) { + $normal_vowel_count++; + } + } + } + + ($vowel_count <= 1) && ($normal_vowel_count == 0) +} + + +=head2 _have_final_split + +Besides the problem with the letter y, there is one with +a silent e at the end of words, like face or nice. +We allow this silent e, but we do not allow it as the only +vowel at the end of the word or syllables like ble will +be generated. + +returns boolean + +=cut + +sub _have_final_split(@) { + my @units = @_; + + my $vowel_count = 0; + + # + # Count all the vowels in the word. + # + for my $unit_count ( 0 .. $#units ) { + if ( $rules{$units[$unit_count]} & VOWEL ) { + $vowel_count++; + } + } + + # + # Return TRUE iff the only vowel was e, found at the end if the word. + # + ($vowel_count == 1) && ( $rules{$units[$#units]} & NO_FINAL_SPLIT ) +} + + +=head2 get_syllable + +Generate next unit to password, making sure that it follows these rules: + +1. Each syllable must contain exactly 1 or 2 consecutive vowels, where y is considered a vowel. + +2. Syllable end is determined as follows: + + a. Vowel is generated and previous unit is a consonant and syllable already has a vowel. + In this case, new syllable is started and already contains a vowel. + b. A pair determined to be a "break" pair is encountered. + In this case new syllable is started with second unit of this pair. + c. End of password is encountered. + d. "begin" pair is encountered legally. New syllable is started with this pair. + e. "end" pair is legally encountered. New syllable has nothing yet. + +3. Try generating another unit if: + + a. third consecutive vowel and not y. + b. "break" pair generated but no vowel yet in current or previous 2 units are "not_end". + c. "begin" pair generated but no vowel in syllable preceding begin pair, + or both previous 2 pairs are designated "not_end". + d. "end" pair generated but no vowel in current syllable or in "end" pair. + e. "not_begin" pair generated but new syllable must begin (because previous syllable ended as defined in 2 above). + f. vowel is generated and 2a is satisfied, but no syllable break is possible in previous 3 pairs. + g. Second and third units of syllable must begin, and first unit is "alternate_vowel". + + +=cut + +# global (like a C static) +use vars qw( @saved_pair ); +@saved_pair = (); # 0..2 elements, which are units (grams). + +sub get_syllable($) { + my $pwlen = shift; + + # these used to be "out" params: + my $syllable; # string, returned + my @units_in_syllable = (); # array of units, returned + + + # grams: + my $unit; + my $current_unit; + my $last_unit; + + # numbers: + my $vowel_count; + my $tries; + my $length_left; + + # flags: + my $rule_broken; + my $want_vowel; + my $want_another_unit; + + + # + # This is needed if the saved_pair is tried and the syllable then + # discarded because of the retry limit. Since the saved_pair is OK and + # fits in nicely with the preceding syllable, we will always use it. + # + my @hold_saved_pair = @saved_pair; + + my $max_retries = ( 4 * $pwlen ) + scalar( @grams ); + # note that this used to be a macro, which means it could have changed + # dynamically based on the value of $pwlen... + + # + # Loop until valid syllable is found. + # + do { + # + # Try for a new syllable. Initialize all pertinent + # syllable variables. + # + $tries = 0; + @saved_pair = @hold_saved_pair; + $syllable = ""; + $vowel_count = 0; + $current_unit = 0; + $length_left = $pwlen; + $want_another_unit = 1; # true + + # + # This loop finds all the units for the syllable. + # + do { + $want_vowel = 0; # false + + # + # This loop continues until a valid unit is found for the + # current position within the syllable. + # + do { + # + # If there are saved units from the previous syllable, use them up first. + # + + # + # If there were two saved units, the first is guaranteed + # (by checks performed in the previous syllable) to be valid. + # We ignore the checks and place it in this syllable manually. + # + if ( @saved_pair == 2 ) { + $syllable = + $units_in_syllable[0] = pop @saved_pair; + $vowel_count++ if $rules{$syllable} & VOWEL; + $current_unit++; + $length_left -= length $syllable; + } + + if ( @saved_pair ) { + # + # The unit becomes the last unit checked in the previous syllable. + # + $unit = pop @saved_pair; + + # + # The saved units have been used. + # Do not try to reuse them in this syllable + # (unless this particular syllable is rejected + # at which point we start to rebuild it with these same saved units). + # + } + else { + # + # If we don't have to consider the saved units, we generate a random one. + # + $unit = _random_unit( $want_vowel ? VOWEL : NO_SPECIAL_RULE ); + } + + $length_left -= length $unit; + + # + # Prevent having a word longer than expected. + # + $rule_broken = ( $length_left < 0 ); # boolean + + # + # First unit of syllable. + # This is special because the digram tests require 2 units and we don't have that yet. + # Nevertheless, we can perform some checks. + # + if ( $current_unit == 0 ) { + # + # If the shouldn't begin a syllable, don't use it. + # + if ( $rules{$unit} & NOT_BEGIN_SYLLABLE ) { + $rule_broken = 1; # true + # + # If this is the last unit of a word, we have a one unit syllable. + # Since each syllable must have a vowel, we make sure the unit is a vowel. + # Otherwise, we discard it. + # + } + elsif ( $length_left == 0 ) { + if ( $rules{$unit} & VOWEL ) { + $want_another_unit = 0; # false + } + else { + $rule_broken = 1; # true + } + } + } + else { +# +# this ALLOWED thing is only used in this code block. +# note that $unit and $current_unit are (used to be) numeric indices; should now be actual grams. +# +local *ALLOWED = sub { + my $flag = shift; + $digram{$units_in_syllable[$current_unit-1]}{$unit} & $flag +}; + + # + # There are some digram tests that are universally true. We test them out. + # + + if ( + # + # Reject ILLEGAL_PAIRS of units. + # + (ALLOWED(ILLEGAL_PAIR)) + || + + # + # Reject units that will be split between syllables + # when the syllable has no vowels in it. + # + (ALLOWED(BREAK) && ($vowel_count == 0)) + || + + # + # Reject a unit that will end a syllable when no + # previous unit was a vowel and neither is this one. + # + ( + ALLOWED(BACK) + && + ($vowel_count == 0) + && + !($rules{$unit} & VOWEL) + ) + ) { + $rule_broken = 1; # true + } + + if ($current_unit == 1) { + # + # Reject the unit if we are at te starting digram of + # a syllable and it does not fit. + # + if (ALLOWED(NOT_FRONT)) { + $rule_broken = 1; # true + } + } + else { + # + # We are not at the start of a syllable. + # Save the previous unit for later tests. + # + $last_unit = $units_in_syllable[$current_unit - 1]; + + # + # Do not allow syllables where the first letter is y + # and the next pair can begin a syllable. This may + # lead to splits where y is left alone in a syllable. + # Also, the combination does not sound to good even + # if not split. + # + if ( + ( + ($current_unit == 2) + && + ALLOWED(FRONT) + && + ($rules{$units_in_syllable[0]} & ALTERNATE_VOWEL) + ) + || + + # + # If this is the last unit of a word, we should + # reject any digram that cannot end a syllable. + # + ( + ALLOWED(NOT_BACK) + && + ($length_left == 0) + ) + || + + # + # Reject the unit if the digram it forms wants + # to break the syllable, but the resulting + # digram that would end the syllable is not + # allowed to end a syllable. + # + ( + ALLOWED(BREAK) + || + ($digram{ $units_in_syllable[$current_unit-2] }{$last_unit} & NOT_BACK) + ) + || + + # + # Reject the unit if the digram it forms expects a vowel preceding it and there is none. + # + ( + ALLOWED(PREFIX) + && + !($rules{ $units_in_syllable[$current_unit-2] } & VOWEL) + ) + ) { + $rule_broken = 1; # true + } + + # + # The following checks occur when the current unit is a vowel + # and we are not looking at a word ending with an e. + # + if ( + !$rule_broken + && + ($rules{$unit} & VOWEL) + && + ( + ($length_left > 0) + || + !($rules{$last_unit} & NO_FINAL_SPLIT) + ) + ) { + # + # Don't allow 3 consecutive vowels in a syllable. + # Although some words formed like this are OK, like "beau", most are not. + # + if ( ($vowel_count > 1) && ($rules{$last_unit} & VOWEL) ) { + $rule_broken = 1; # true + } + # + # Check for the case of vowels-consonants-vowel, + # which is only legal if the last vowel is an e and we are the end of the word + # (which is not happening here due to a previous check). + # + elsif ( ($vowel_count != 0) && !($rules{$last_unit} & VOWEL) ) { + # + # Try to save the vowel for the next syllable, + # but if the syllable left here is not proper + # (i.e., the resulting last digram cannot legally end it), + # just discard it and try for another. + # + if ( $digram{ $units_in_syllable[ $current_unit - 2] }{$last_unit} & NOT_BACK ) { + $rule_broken = 1; # true + } + else { + @saved_pair = ( $unit ); + $want_another_unit = 0; # false + } + } + } + } + + # + # The unit picked and the digram formed are legal. + # We now determine if we can end the syllable. It may, + # in some cases, mean the last unit(s) may be deferred to + # the next syllable. We also check here to see if the + # digram formed expects a vowel to follow. + # + if ( !$rule_broken and $want_another_unit ) { + # + # This word ends in a silent e. + # + if ( + ( + ($vowel_count != 0) + && + ($rules{$unit} & NO_FINAL_SPLIT) + && + ($length_left == 0) + && + !($rules{$last_unit} & VOWEL) + ) + or + + # + # This syllable ends either because the digram + # is a BACK pair or we would otherwise exceed + # the length of the word. + # + ( ALLOWED(BACK) || ($length_left == 0) ) + ) { + $want_another_unit = 0; # false + } + + # + # Since we have a vowel in the syllable + # already, if the digram calls for the end of the + # syllable, we can legally split it off. We also + # make sure that we are not at the end of the + # dangerous because that syllable may not have + # vowels, or it may not be a legal syllable end, + # and the retrying mechanism will loop infinitely + # with the same digram. + # + elsif ( $vowel_count != 0 and $length_left > 0 ) { + # + # If we must begin a syllable, we do so if + # the only vowel in THIS syllable is not part + # of the digram we are pushing to the next + # syllable. + # + if ( + ALLOWED(FRONT) + && + ($current_unit > 1) + && + !( + ($vowel_count == 1) + && + ($rules{$last_unit} & VOWEL) + ) + ) { + @saved_pair = ( $unit, $last_unit ); + $want_another_unit = 0; # false + } + elsif (ALLOWED (BREAK)) { + @saved_pair = ( $unit ); + $want_another_unit = 0; # false + } + } + elsif (ALLOWED (SUFFIX)) { + $want_vowel = 1; # true + } + } + } + + $tries++; + + # + # If this unit was illegal, redetermine the amount of + # letters left to go in the word. + # + if ( $rule_broken ) { + $length_left += length $unit; + } + } + while ( $rule_broken and $tries <= $max_retries ); + + # + # The unit fit OK. + # + if ( $tries <= $max_retries ) { + # + # If the unit were a vowel, count it in. + # However, if the unit were a y and appear at the start of the syllable, + # treat it like a constant (so that words like "year" can appear and + # not conflict with the 3 consecutive vowel rule). + # + if ( + ($rules{$unit} & VOWEL) + && + ( ($current_unit > 0) || !($rules{$unit} & ALTERNATE_VOWEL) ) + ) { + $vowel_count++; + } + + # + # If a unit or units were to be saved, we must adjust the syllable formed. + # Otherwise, we append the current unit to the syllable. + # + if ( @saved_pair == 2 ) { + # strcpy( &syllable[ strlen( syllable ) - strlen( last_unit ) ], "" ); + my $n = length $last_unit; + $syllable =~ s/.{$n}$//; # DOES THIS WORK? + $length_left += length $last_unit; + $current_unit -= 2; + } + elsif ( @saved_pair == 1 ) { + $current_unit--; + } + else { + $units_in_syllable[ $current_unit ] = $unit; + $syllable .= $unit; + } + } + else { + # + # Whoops! Too many tries. + # We set rule_broken so we can loop in the outer loop and try another syllable. + # + $rule_broken = 1; # true + } + + $current_unit++; + } + while ( $tries <= $max_retries and $want_another_unit ); + } + while ( $rule_broken or _illegal_placement( @units_in_syllable ) ); + + return( $syllable, @units_in_syllable ); +} # sub get_syllable + + + +=head2 alt_get_syllable + +Takes an integer, the maximum number of chars to generate. (or is it minimum?) + +returns a list of ( string, units-in-syllable ) + +I, which +can be useful for unit testing the other functions.> + +=cut + +sub alt_get_syllable($) { # alternative version, has no smarts. + my $pwlen = shift; # max or min? + for ( 0 .. $#grams ) { + my $syl = ''; + my @syl_units = (); + while ( @syl_units < 3 ) { + my $unit = _random_unit( NO_SPECIAL_RULE ); + $syl .= $unit; + push @syl_units, $unit; + length($syl) >= $pwlen and return( $syl, @syl_units ); + } + @syl_units and return( $syl, @syl_units ); + } + return(); # failed +} + + +=head2 _illegal_placement + +goes through an individual syllable and checks for illegal +combinations of letters that go beyond looking at digrams. + +We look at things like 3 consecutive vowels or consonants, +or syllables with consonants between vowels +(unless one of them is the final silent e). + +returns boolean. + +=cut + +sub _illegal_placement(@) { + my @units = @_; + + my $vowel_count = 0; + my $failure = 0; # false + + for my $unit_count ( 0 .. $#units ) { + last if $failure; + + if ( $unit_count >= 1 ) { + # + # Don't allow vowels to be split with consonants in a single syllable. + # If we find such a combination (except for the silent e) we have to discard the syllable. + # + if ( + ( + !( $rules{$units[$unit_count-1]} & VOWEL) + && + ( $rules{$units[$unit_count ]} & VOWEL) + && + !(($rules{$units[$unit_count ]} & NO_FINAL_SPLIT) && ($unit_count == $#units)) + && + $vowel_count + ) + || + + # + # Perform these checks when we have at least 3 units. + # + ( + ($unit_count >= 2) + && + ( + # + # Disallow 3 consecutive consonants. + # + ( + !($rules{$units[$unit_count-2]} & VOWEL) + && + !($rules{$units[$unit_count-1]} & VOWEL) + && + !($rules{$units[$unit_count ]} & VOWEL) + ) + || + + # + # Disallow 3 consecutive vowels, where the first is not a y. + # + ( + ( $rules{$units[$unit_count-2]} & VOWEL) + && + !(($rules{$units[0 ]} & ALTERNATE_VOWEL) && ($unit_count == 2)) + && + ( $rules{$units[$unit_count-1]} & VOWEL) + && + ( $rules{$units[$unit_count ]} & VOWEL) + ) + ) + ) + ) { + $failure = 1; # true + } + } + + # + # Count the vowels in the syllable. + # As mentioned somewhere above, exclude the initial y of a syllable. + # Instead, treat it as a consonant. + # + if ( + ($rules{$units[$unit_count]} & VOWEL) + && + !( + ($rules{$units[0]} & ALTERNATE_VOWEL) + && + ($unit_count == 0) + && + (@units > 1) + ) + ) { + $vowel_count++; + } + } + + $failure; +} + +} + +=head1 AUTHOR + +JDPORTER@cpan.org (John Porter) + +=head1 COPYRIGHT + +This perl module is free software; it may be redistributed and/or modified +under the same terms as Perl itself. + +=cut + +unless ( defined caller ) { + +# this can be used for unit testing or to make the module a stand-alone program. +package main; +use Getopt::Long; + +$^W = 1; + +my $algorithm = 'word'; # default: word +my $maxlen = 8; +my $minlen = 6; +my $num_words = 1; +$main::DEBUG = 0; + +GetOptions( + 'seed=s' => \$Crypt::RandPasswd::seed, + 'algorithm=s' => \$algorithm, # select word, letters, chars + 'max=s' => \$maxlen, + 'min=s' => \$minlen, + 'count=s' => \$num_words, + 'debug!' => \$main::DEBUG, +) + or die "Usage: $0 --count N --min N --max N --algorithm [word|letters|chars] --seed N --[no]debug \n"; + +$minlen <= $maxlen or die "minimum word length ($minlen) must be <= maximum ($maxlen)\n"; + +UNIVERSAL::can( "Crypt::RandPasswd", $algorithm ) or die "Invalid algorithm '$algorithm'\n"; + +print STDERR "$num_words '$algorithm' words of $minlen-$maxlen chars \n" + if $main::DEBUG ; + +for ( 1 .. $num_words ) { + my( $unhyphenated_word, $hyphenated_word ) = Crypt::RandPasswd->$algorithm( $minlen, $maxlen ); + + print + $algorithm eq 'word' + ? "$unhyphenated_word ($hyphenated_word)\n" + : "$unhyphenated_word\n"; +} + +} # end of 'main' code. + +1; + diff --git a/www/Metainformationen/FIPS181/fips181.txt b/www/Metainformationen/FIPS181/fips181.txt new file mode 100644 index 0000000..59e7852 --- /dev/null +++ b/www/Metainformationen/FIPS181/fips181.txt @@ -0,0 +1,3745 @@ +Federal Information +Processing Standards Publication 181 + +1993 October 5 + +Announcing the Standard for + +Automated Password Generator + + + +Federal Information Processing Standards Publications (FIPS PUBS) +are issued by the National Institute of Standards and Technology +(NIST) after approval by the Secretary of Commerce pursuant to +Section 111(d) of the Federal Property and Administrative Services +Act of 1949 as amended by the Computer Security Act of 1987, Public +Law 100-235. + + +1. Name of Standard. Automated Password Generator. + +2. Category of Standard. Computer Security. + +3. Explanation. A password is a protected character string used +to authenticate the identity of a computer system user or to +authorize access to system resources. When users are allowed to +select their own passwords they often select passwords that are +easily compromised. An automated password generator creates random +passwords that have no association with a particular user. + +This Automated Password Generator Standard specifies an algorithm +to generate passwords for the protection of computer resources. +This standard is for use in conjunction with FIPS PUB 112, Password +Usage Standard, which provides basic security criteria for the +design, implementation, and use of passwords. The algorithm uses +random numbers to select the characters that form the random +pronounceable passwords. The random numbers are generated by a +random number subroutine based on the Electronic Codebook mode of +the Data Encryption Standard (DES) (FIPS PUB 46-1). The random +number subroutine uses a pseudorandom DES key generated in +accordance with the procedure described in Appendix C of ANSI +X9.17. + +Similar to DES, the FIPS for Automated Password Generator is an +interoperability standard. Interoperability standards specify +functions and formats so that data transmitted can be properly +acted upon when received by another computer. This type of +standard is independent of physical implementation. Implementors +are required to use the algorithm defined in the FIPS, however, +they are not constrained in how they package it. For discussion +purposes a NIST implementation of the Automated Password Generator +is provided. It is expected that commercial implementations will +be based on the latest technologies and differ from NIST's, however +the results should be logically equivalent to that of this FIPS. + +4. Approving Authority. Secretary of Commerce. 5. Maintenance Agency. U.S. Department of Commerce, National +Institute of Standards and Technology (NIST), Computer Systems +Laboratory (CSL). + +6. Cross Index. + + a. American National Standards Institute (ANSI) X9.28, Financial +Institution Multiple Center Key Management (Wholesale) Draft. + b. Department of Defense CSC-STD-002-85, Password Management +Guideline. + c. Federal Information Processing Standards Publication (FIPS PUB) +48, Guidelines on Evaluation of Techniques for Automated Personal +Identification. + d. Federal Information Processing Standards Publication (FIPS PUB) +46-1, Data Encryption Standard. + e. Federal Information Processing Standards Publication (FIPS PUB) +81, DES Modes of Operation. + f. Federal Information Processing Standards Publication (FIPS PUB) +83, Guideline on User Authentication Techniques for Computer +Network Access Control. + g. Federal Information Processing Standards Publication (FIPS PUB) +112, Password Usage. + h. Federal Information Processing Standards Publication (FIPS PUB) +171, Key Management Using ANSI X9.17. + i. National Technical Information Service (NTIS) AD A 017676, A +Random Word Generator for Pronounceable Passwords. + +7. Objectives. The objectives of this standard are to: + + a. improve the administration of password systems that are used + for authenticating the identity of individuals accessing + computer resources or files; + + b. provide a standard automated method for producing + pronounceable passwords that have no association with a + particular user; + + c. produce passwords that are easily remembered, stored, and + entered into computer systems, yet not readily susceptible to + automated techniques that have been developed to search for + and disclose passwords. + +8. Applicability. This standard is applicable to the development +of procurement or design specifications for implementing an +automatic password generation algorithm within a computer system. +It shall be used by all Federal departments and agencies when there +is a requirement for computer generated pronounceable passwords for +authenticating users of computer systems, or for authorizing access +to resources in those systems. + +This standard does not require the use of passwords in a computer +system, but establishes an automatic password generation algorithm +for use in systems where an agency's computer security policy +requires computer generated pronounceable passwords. It should be +used in conjunction with FIPS PUB 112, Password Usage Standard, +which specifies basic security criteria for the design, +implementation, and use of passwords. + +9. Export Control. The Bureau of Export Administration, U.S. +Department of Commerce, is responsible for administering export +controls on cryptographic products used for authentication and +access control, which categories would include implementations of +the Automated Password Generator. Vendors should contact the +following for a product classification: + + Bureau of Export Administration + U.S. Department of Commerce + P.O. Box 273 + Washington, DC 20044 + Telephone: (202) 482-0708 + +Following this determination, the vendor will be informed whether +an export license is required and will be provided further +information as appropriate. + +10. Specifications. Federal Information Processing Standard (FIPS) +181, Automated Password Generator (affixed); + +11. Qualifications. The Automated Password Generator uses the +Electronic Codebook (ECB) mode of the Data Encryption Standard +(DES), Federal Information Processing Standard 46-1 (FIPS PUB 46- +1), as the random number generator. This mode of operation is +specified in FIPS 81, DES Modes of Operation. + +The protection provided by the DES algorithm against potential +threats has been reviewed every 5 years since its adoption in 1977 +and has been reaffirmed during each of those reviews. The DES, and +the possible threats reducing the security provided by the use of +DES, will undergo continual review by NIST and other cognizant +Federal organizations. The new technology available at review time +will be evaluated to determine its impact on the DES. In addition, +the awareness of any breakthrough in technology or any mathematical +weakness of the algorithm will cause NIST to reevaluate the DES and +provide necessary revisions. + +12. Implementation Schedule. This Standard becomes effective +March 25, 1994. + +13. Waivers. Under certain exceptional circumstances, the heads of +Federal departments and agencies may approve waivers to Federal +Information Processing Standards (FIPS). The head of such agency +may redelegate such authority only to a senior official designated +pursuant to section 3506(b) of Title 44, U.S. Code. Waivers shall +be granted only when compliance with a standard would: + + a. adversely affect the accomplishment of the mission of an + operator of a Federal computer system, or + + b. cause a major adverse financial impact on the operator + which is not offset by Government-wide savings. + +Agency heads may act upon a written waiver request containing the +information detailed above. Agency heads may also act without a +written waiver request when they determine that conditions for +meeting the standard cannot be met. Agency heads may approve +waivers only by a written decision which explains the basis on +which the agency head made the required finding(s). A copy of each +such decision, with procurement sensitive or classified portions +clearly identified, shall be sent to: National Institute of +Standards and Technology; ATTN: FIPS Waiver Decisions; Technology +Building, Room B-154; Gaithersburg, MD 20899. + +In addition, notice of each waiver granted and each delegation of +authority to approve waivers shall be sent promptly to the +Committee on Government Operations of the House of Representatives +and the Committee on Government Affairs of the Senate and shall be +published promptly in the Federal Register. + +When the determination on a waiver applies to the procurement of +equipment and/or services, a notice of the waiver determination +must be published in the Commerce Business Daily as a part of the +notice of solicitation for offers of an acquisition or, if the +waiver determination is made after that notice is published, by +amendment to such notice. + +A copy of the waiver, any supporting documents, the document +approving the waiver, and any supporting and accompanying +documents, with such deletions as the agency is authorized and +decides to make under 5 U.S.C Sec. 552(b), shall be part of the +procurement documentation and retained by the agency. + +14. Where to Obtain Copies. Copies of this publication are +available for sale by the National Technical Information Service, +U.S. Department of Commerce, Springfield, VA 22161. When ordering, +refer to Federal Information Processing Standards Publication 181 +(FIPSPUB181), and identify the title. When microfiche is desired, +this should be specified. Payment may be made by check, money +order, credit card, or deposit account. Federal Information +Processing Standards Publication 181 + +1993 October 5 + +Announcing the Standard for + +Automated Password Generator + + + + Contents + + +1.0 INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 + + +2.0 TECHNICAL EXPLANATION . . . . . . . . . . . . . . . . . . . . . . . . 6 + 2.1 Unit Table . . . . . . . . . . . . . . . . . . . . . . . . . 6 + 2.2 Digram Table . . . . . . . . . . . . . . . . . . . . . . . . 7 + 2.3 Random Number Generator Subroutine . . . . . . . . . . . . . 7 + 2.4 Random Word Algorithm. . . . . . . . . . . . . . . . . . . . 8 + 2.5 NIST Implementation. . . . . . . . . . . . . . . . . . . . . 9 + +Appendix A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 + 1.0 INTRODUCTION + +The Automated Password Generator standard is derived from a C-code +version of the program described in "A Random Word Generator For +Pronounceable Passwords," National Technical Information Service +(NTIS) AD A 017676. The original program used Unix system +functions to produce the random numbers needed by the password +generator. These functions were replaced with a DES-based random +number subroutine that uses DES in the Electronic Code Book (ECB) +mode. As input, DES uses the old password or user supplied +character string, and a pseudorandom key created in accordance with +the procedure described in Appendix C of ANSI X9.17. Any change to +either the key or input data string causes DES to generate an +entirely different random number. Every time this occurs the +password generator creates a new random password. + + +2.0 TECHNICAL EXPLANATION + +The Automated Password Generator standard is organized as a main +procedure that references three major components: (1) the "unit +table"; (2) the "digram table"; and (3) the "random number +subroutine." The random password generator works by forming +pronounceable syllables and concatenating them to form a word. +Rules of pronounceability are stored in a table for every unit and +every pair of units (digram). The rules are used to determine +whether a given unit is legal or illegal, based on its position +within the syllable and adjacent units. Most rules and checks are +syllable oriented and do not depend on anything outside the current +syllable. The main procedure (algorithm) defines the internal +rules used to generate random words. The three components and the +algorithm are described below. + +Appendix A is the code for the NIST implementation of the Automated +Password Generator standard. This code consists of the C-code +version of the program described in "A Random Word Generator For +Pronounceable Passwords," the code that comprises the DES random +number subroutine, the actual DES subroutine, and the code for +generating the pseudorandom key. Implementations in other +programming languages are acceptable, however, the results obtained +must be logically equivalent to those produced by this standard. + +In the NIST implementation of the password generator, the values +selected for the two DES keys and the seed for the random number +generator are readable in the code (Appendix A). In an actual +vendor or user developed implementation the values of the keys and +the seed would be secret, randomly generated values set by the +application. + + +2.1 Unit Table + +The unit table defines the units (alphabetic characters) and +specifies rules pertaining to the individual units used in a +randomly generated word. For example, the location of vowels in +the words generated is determined by these rules. The unit table +used in the Automated Password Generator standard is identical to +that furnished in the report "A Random Word Generator For +Pronounceable Passwords" (item i in Cross Index). + + +2.2 Digram Table + +The digram table specifies rules about all possible pairs of units +and the juxtaposition of units. The table contains one entry for +every pair of units (digram), whether that pair is allowed or not. +The random word generator ensures that the rules specified in the +digram table are satisfied for every two consecutive units in the +word being formed. The digram table is also from the original +report. + + +2.3 Random Number Generator Subroutine + +The random number generator uses a DES subroutine to produce double +precision floating point values between 0 and (excluding) 1. These +numbers are multiplied by a program variable n which is an integer +value. This operation yields a random integer between 0 and (n-1) +inclusive. The random numbers created by the DES routine serve as +input to the random word generator. The subroutine to generate +these numbers is called by the word generator each time a character +(unit) is needed. + +Not all characters generated will be acceptable to the word +generator in every position of the word. Each character is checked +for appropriateness using the rules defined by the unit and digram +tables. Therefore the random number generator subroutine will be +repeatedly called until an acceptable character is returned. An +upper limit of 100 calls is placed on generating any particular +character. If that number is reached the whole word is discarded +and the program starts over. + +The actual distribution of legal units is different for every +position in a particular word which, for any unit, depends on the +units that precede it as well as the units and digram tables. The +random number subroutine itself makes no tests for legal units. + +As its input DES accepts two 64 bit data blocks. One consists of +the old password or a data string; the other is a 64 bit (56 bits ++ 8 parity bits) pseudorandom key derived using the procedure +described in Appendix C of ANSI X9.17. The old password is entered +manually from the keyboard. An input array is created from the +first eight bytes of the password or input string. The program +will accept a null string (carriage return). All characters past +the eighth are disregarded. If the input block is less than eight +characters long the extra elements in the input array are filled +with ASCII 0. The Electronic Codebook (ECB) mode of DES described +in FIPS 81 ("DES Modes of Operation," December 2, 1980) is then +used to encrypt the input data. The output is a 64-bit random +number which is the encrypted form of the input. + The first function in the DES structure is setkey(), which converts +the pseudorandom key to a format used by DES for the encryption. +The command-line options sent to setkey are (0, 0, key). The first +0 is set so that setkey() does not generate parity; the second 0 +tells setkey() that encryption (rather than decryption) is +required. Key is a pointer to the beginning of the key array. +After setkey(), the des() function is called. For input it uses +the addresses of the input and output arrays. Both input and +output are defined as unsigned character arrays of length 8 bytes. + + +The output array, out, is sent to a function, answer(), which +returns the final required number. The function answer() takes in +the address of the output array as an unsigned char pointer and the +integer n for which a value of 0 to (n-1) is needed by the random +word program. This function creates a variable sum, defined as an +unsigned integer. To obtain a numerical value from the output +character array, it adds the ASCII values of the first three +elements in the out array and stores the sum in the variable sum. +Thus, sum = out[0] + out[1] + out[2], which is an integer. To +obtain a number with the required range of 0 to n-1 from sum, the +function takes the modulus of sum and n, (sum%n). This value is +then returned to the calling function within the random word +program. + + +2.4 Random Word Algorithm + +The algorithm used to generate random words is fixed and cannot be +modified without changing the logic of the program. The function +of the algorithm is to determine whether a given unit, generated by +the random unit subroutine, can be appended to the end of the +partial word formed so far. Rules of pronounceability are stored +in the unit and digram tables discussed above. The rules are used +to check if a given unit is legal or illegal. If illegal, the unit +is discarded and the random unit subroutine is called again. Once +a unit is accepted, various state variables are updated and a unit +for the next position in the word is tried. Most rules and checks +are syllable oriented and do not depend on anything outside the +current syllables. When the end of the word is reached, additional +checks are made before the algorithm terminates. + +Passwords created by this automated password generator are composed +of the 26 characters of the English alphabet. Although numbers and +special characters are not permitted, the password space, which is +a function of the number of characters in the password, is very +large. Approximately 18 million 6-character, 5.7 billion 8- +character, and 1.6 trillion 10-character passwords can be created +by the program. Users should select a password space commensurate +with the level of security required for the information being +protected. + +The password algorithm does not preclude the generation of words +found in a standard English dictionary. If required, a +computerized dictionary could be used to check for English words, +and the implementation could include software tests to prevent them +from being offered to users as passwords. + 2.5 NIST Implementation + +Figure 1 is a block diagram of the NIST implementation of the +automated password generation algorithm. Appendix A contains the +C-code for the DES, random key generation, and random word +generation routines that were used in the implementation (see +shaded boxes in Fig. 1). The personal computer used by NIST to +demonstrate the standard is implementation dependent. NIST +replaced the Unix random number routine in the original version of +the program with the "DES Randomizer" and "Generate Random Key" +function. The DES randomizer accepts an old password and a +pseudorandom key created in accordance with Appendix C of ANSI +X9.17 ( FIPSPUB 171) and generates a random number. This number is +used by the Random Word Generator to develop a password. As the +password is being generated each group of letters is subjected to +tests of grammar and semantics to determine if an acceptable word +has been created. If all tests are passed, the new password is +output to the PC. + +In the NIST implementation, the values for minlen and maxlen, which +define the minimun and maximum size of the password, were set at 5 +and 8 respectively. A user needing a fixed length password word +could set these variables to a specific value. + + + + + Appendix A + +The following is a listing of the source code referenced in the +Automated Password Generator Standard. + + +/* + * randomword (word, hyphenated_word, minlen, maxlen, restrict, +seed) + */ + + + + +#include +#include +#include + +#define RAN_DEBUG +#define B1 + +#define TRUE 1 +#define FALSE 0 + +#define RULE_SIZE (sizeof(rules)/sizeof(struct unit)) +#define ALLOWED(flag) (digram[units_in_syllable[current_unit - +1]][unit] & (flag)) + +#define MAX_UNACCEPTABLE 20 +#define MAX_RETRIES (4 * (int) pwlen + RULE_SIZE) + +#define NOT_BEGIN_SYLLABLE 010 +#define NO_FINAL_SPLIT 04 +#define VOWEL 02 +#define ALTERNATE_VOWEL 01 +#define NO_SPECIAL_RULE 0 + +#define BEGIN 0200 +#define NOT_BEGIN 0100 +#define BREAK 040 +#define PREFIX 020 +#define ILLEGAL_PAIR 010 +#define SUFFIX 04 +#define END 02 +#define NOT_END 01 +#define ANY_COMBINATION 0 + +typedef unsigned int uint; +typedef int boolean; + +static int get_word(); +static boolean have_initial_y(); +static boolean illegal_placement(); +static boolean improper_word(); +static boolean have_final_split(); +static char *get_syllable(); +static unsigned short int random_unit(); +static unsigned int randint(); +static unsigned short int get_random(); +static void set_seed(); + +extern char *calloc (); +extern char *malloc (); +extern char *strcpy (); +extern char *strcat (); +extern long time (); +extern long atol (); +extern double drand48(); +extern int fscanf(); +extern int fprintf(); + + +struct unit +{ + char unit_code[5]; + unsigned short int flags; +}; + +static struct unit rules[] = +{ + "a", VOWEL, + "b", NO_SPECIAL_RULE, + "c", NO_SPECIAL_RULE, + "d", NO_SPECIAL_RULE, + "e", NO_FINAL_SPLIT | VOWEL, + "f", NO_SPECIAL_RULE, + "g", NO_SPECIAL_RULE, + "h", NO_SPECIAL_RULE, + "i", VOWEL, + "j", NO_SPECIAL_RULE, + "k", NO_SPECIAL_RULE, + "l", NO_SPECIAL_RULE, + "m", NO_SPECIAL_RULE, + "n", NO_SPECIAL_RULE, + "o", VOWEL, + "p", NO_SPECIAL_RULE, + "r", NO_SPECIAL_RULE, + "s", NO_SPECIAL_RULE, + "t", NO_SPECIAL_RULE, + "u", VOWEL, + "v", NO_SPECIAL_RULE, + "w", NO_SPECIAL_RULE, + "x", NOT_BEGIN_SYLLABLE, + "y", ALTERNATE_VOWEL | VOWEL, + "z", NO_SPECIAL_RULE, + "ch", NO_SPECIAL_RULE, + "gh", NO_SPECIAL_RULE, + "ph", NO_SPECIAL_RULE, + "rh", NO_SPECIAL_RULE, + "sh", NO_SPECIAL_RULE, + "th", NO_SPECIAL_RULE, + "wh", NO_SPECIAL_RULE, + "qu", NO_SPECIAL_RULE, + "ck", NOT_BEGIN_SYLLABLE +}; + +static int digram[][RULE_SIZE] = +{ + /* aa */ ILLEGAL_PAIR, + /* ab */ ANY_COMBINATION, + /* ac */ ANY_COMBINATION, + /* ad */ ANY_COMBINATION, + /* ae */ ILLEGAL_PAIR, + /* af */ ANY_COMBINATION, + /* ag */ ANY_COMBINATION, + /* ah */ NOT_BEGIN | BREAK | NOT_END, + /* ai */ ANY_COMBINATION, + /* aj */ ANY_COMBINATION, + /* ak */ ANY_COMBINATION, + /* al */ ANY_COMBINATION, + /* am */ ANY_COMBINATION, + /* an */ ANY_COMBINATION, + /* ao */ ILLEGAL_PAIR, + /* ap */ ANY_COMBINATION, + /* ar */ ANY_COMBINATION, + /* as */ ANY_COMBINATION, + /* at */ ANY_COMBINATION, + /* au */ ANY_COMBINATION, + /* av */ ANY_COMBINATION, + /* aw */ ANY_COMBINATION, + /* ax */ ANY_COMBINATION, + /* ay */ ANY_COMBINATION, + /* az */ ANY_COMBINATION, + /* ach */ ANY_COMBINATION, + /* agh */ ILLEGAL_PAIR, + /* aph */ ANY_COMBINATION, + /* arh */ ILLEGAL_PAIR, + /* ash */ ANY_COMBINATION, + /* ath */ ANY_COMBINATION, + /* awh */ ILLEGAL_PAIR, + /* aqu */ BREAK | NOT_END, + /* ack */ ANY_COMBINATION, + /* ba */ ANY_COMBINATION, + /* bb */ NOT_BEGIN | BREAK | NOT_END, + /* bc */ NOT_BEGIN | BREAK | NOT_END, + /* bd */ NOT_BEGIN | BREAK | NOT_END, + /* be */ ANY_COMBINATION, + /* bf */ NOT_BEGIN | BREAK | NOT_END, + /* bg */ NOT_BEGIN | BREAK | NOT_END, + /* bh */ NOT_BEGIN | BREAK | NOT_END, + /* bi */ ANY_COMBINATION, + /* bj */ NOT_BEGIN | BREAK | NOT_END, + /* bk */ NOT_BEGIN | BREAK | NOT_END, + /* bl */ BEGIN | SUFFIX | NOT_END, + /* bm */ NOT_BEGIN | BREAK | NOT_END, + /* bn */ NOT_BEGIN | BREAK | NOT_END, + /* bo */ ANY_COMBINATION, + /* bp */ NOT_BEGIN | BREAK | NOT_END, + /* br */ BEGIN | END, + /* bs */ NOT_BEGIN, + /* bt */ NOT_BEGIN | BREAK | NOT_END, + /* bu */ ANY_COMBINATION, + /* bv */ NOT_BEGIN | BREAK | NOT_END, + /* bw */ NOT_BEGIN | BREAK | NOT_END, + /* bx */ ILLEGAL_PAIR, + /* by */ ANY_COMBINATION, + /* bz */ NOT_BEGIN | BREAK | NOT_END, + /* bch */ NOT_BEGIN | BREAK | NOT_END, + /* bgh */ ILLEGAL_PAIR, + /* bph */ NOT_BEGIN | BREAK | NOT_END, + /* brh */ ILLEGAL_PAIR, + /* bsh */ NOT_BEGIN | BREAK | NOT_END, + /* bth */ NOT_BEGIN | BREAK | NOT_END, + /* bwh */ ILLEGAL_PAIR, + /* bqu */ NOT_BEGIN | BREAK | NOT_END, + /* bck */ ILLEGAL_PAIR, + /* ca */ ANY_COMBINATION, + /* cb */ NOT_BEGIN | BREAK | NOT_END, + /* cc */ NOT_BEGIN | BREAK | NOT_END, + /* cd */ NOT_BEGIN | BREAK | NOT_END, + /* ce */ ANY_COMBINATION, + /* cf */ NOT_BEGIN | BREAK | NOT_END, + /* cg */ NOT_BEGIN | BREAK | NOT_END, + /* ch */ NOT_BEGIN | BREAK | NOT_END, + /* ci */ ANY_COMBINATION, + /* cj */ NOT_BEGIN | BREAK | NOT_END, + /* ck */ NOT_BEGIN | BREAK | NOT_END, + /* cl */ SUFFIX | NOT_END, + /* cm */ NOT_BEGIN | BREAK | NOT_END, + /* cn */ NOT_BEGIN | BREAK | NOT_END, + /* co */ ANY_COMBINATION, + /* cp */ NOT_BEGIN | BREAK | NOT_END, + /* cr */ NOT_END, + /* cs */ NOT_BEGIN | END, + /* ct */ NOT_BEGIN | PREFIX, + /* cu */ ANY_COMBINATION, + /* cv */ NOT_BEGIN | BREAK | NOT_END, + /* cw */ NOT_BEGIN | BREAK | NOT_END, + /* cx */ ILLEGAL_PAIR, + /* cy */ ANY_COMBINATION, + /* cz */ NOT_BEGIN | BREAK | NOT_END, + /* cch */ ILLEGAL_PAIR, + /* cgh */ ILLEGAL_PAIR, + /* cph */ NOT_BEGIN | BREAK | NOT_END, + /* crh */ ILLEGAL_PAIR, + /* csh */ NOT_BEGIN | BREAK | NOT_END, + /* cth */ NOT_BEGIN | BREAK | NOT_END, + /* cwh */ ILLEGAL_PAIR, + /* cqu */ NOT_BEGIN | SUFFIX | NOT_END, + /* cck */ ILLEGAL_PAIR, + /* da */ ANY_COMBINATION, + /* db */ NOT_BEGIN | BREAK | NOT_END, + /* dc */ NOT_BEGIN | BREAK | NOT_END, + /* dd */ NOT_BEGIN, + /* de */ ANY_COMBINATION, + /* df */ NOT_BEGIN | BREAK | NOT_END, + /* dg */ NOT_BEGIN | BREAK | NOT_END, + /* dh */ NOT_BEGIN | BREAK | NOT_END, + /* di */ ANY_COMBINATION, + /* dj */ NOT_BEGIN | BREAK | NOT_END, + /* dk */ NOT_BEGIN | BREAK | NOT_END, + /* dl */ NOT_BEGIN | BREAK | NOT_END, + /* dm */ NOT_BEGIN | BREAK | NOT_END, + /* dn */ NOT_BEGIN | BREAK | NOT_END, + /* do */ ANY_COMBINATION, + /* dp */ NOT_BEGIN | BREAK | NOT_END, + /* dr */ BEGIN | NOT_END, + /* ds */ NOT_BEGIN | END, + /* dt */ NOT_BEGIN | BREAK | NOT_END, + /* du */ ANY_COMBINATION, + /* dv */ NOT_BEGIN | BREAK | NOT_END, + /* dw */ NOT_BEGIN | BREAK | NOT_END, + /* dx */ ILLEGAL_PAIR, + /* dy */ ANY_COMBINATION, + /* dz */ NOT_BEGIN | BREAK | NOT_END, + /* dch */ NOT_BEGIN | BREAK | NOT_END, + /* dgh */ NOT_BEGIN | BREAK | NOT_END, + /* dph */ NOT_BEGIN | BREAK | NOT_END, + /* drh */ ILLEGAL_PAIR, + /* dsh */ NOT_BEGIN | NOT_END, + /* dth */ NOT_BEGIN | PREFIX, + /* dwh */ ILLEGAL_PAIR, + /* dqu */ NOT_BEGIN | BREAK | NOT_END, + /* dck */ ILLEGAL_PAIR, + /* ea */ ANY_COMBINATION, + /* eb */ ANY_COMBINATION, + /* ec */ ANY_COMBINATION, + /* ed */ ANY_COMBINATION, + /* ee */ ANY_COMBINATION, + /* ef */ ANY_COMBINATION, + /* eg */ ANY_COMBINATION, + /* eh */ NOT_BEGIN | BREAK | NOT_END, + /* ei */ NOT_END, + /* ej */ ANY_COMBINATION, + /* ek */ ANY_COMBINATION, + /* el */ ANY_COMBINATION, + /* em */ ANY_COMBINATION, + /* en */ ANY_COMBINATION, + /* eo */ BREAK, + /* ep */ ANY_COMBINATION, + /* er */ ANY_COMBINATION, + /* es */ ANY_COMBINATION, + /* et */ ANY_COMBINATION, + /* eu */ ANY_COMBINATION, + /* ev */ ANY_COMBINATION, + /* ew */ ANY_COMBINATION, + /* ex */ ANY_COMBINATION, + /* ey */ ANY_COMBINATION, + /* ez */ ANY_COMBINATION, + /* ech */ ANY_COMBINATION, + /* egh */ NOT_BEGIN | BREAK | NOT_END, + /* eph */ ANY_COMBINATION, + /* erh */ ILLEGAL_PAIR, + /* esh */ ANY_COMBINATION, + /* eth */ ANY_COMBINATION, + /* ewh */ ILLEGAL_PAIR, + /* equ */ BREAK | NOT_END, + /* eck */ ANY_COMBINATION, + /* fa */ ANY_COMBINATION, + /* fb */ NOT_BEGIN | BREAK | NOT_END, + /* fc */ NOT_BEGIN | BREAK | NOT_END, + /* fd */ NOT_BEGIN | BREAK | NOT_END, + /* fe */ ANY_COMBINATION, + /* ff */ NOT_BEGIN, + /* fg */ NOT_BEGIN | BREAK | NOT_END, + /* fh */ NOT_BEGIN | BREAK | NOT_END, + /* fi */ ANY_COMBINATION, + /* fj */ NOT_BEGIN | BREAK | NOT_END, + /* fk */ NOT_BEGIN | BREAK | NOT_END, + /* fl */ BEGIN | SUFFIX | NOT_END, + /* fm */ NOT_BEGIN | BREAK | NOT_END, + /* fn */ NOT_BEGIN | BREAK | NOT_END, + /* fo */ ANY_COMBINATION, + /* fp */ NOT_BEGIN | BREAK | NOT_END, + /* fr */ BEGIN | NOT_END, + /* fs */ NOT_BEGIN, + /* ft */ NOT_BEGIN, + /* fu */ ANY_COMBINATION, + /* fv */ NOT_BEGIN | BREAK | NOT_END, + /* fw */ NOT_BEGIN | BREAK | NOT_END, + /* fx */ ILLEGAL_PAIR, + /* fy */ NOT_BEGIN, + /* fz */ NOT_BEGIN | BREAK | NOT_END, + /* fch */ NOT_BEGIN | BREAK | NOT_END, + /* fgh */ NOT_BEGIN | BREAK | NOT_END, + /* fph */ NOT_BEGIN | BREAK | NOT_END, + /* frh */ ILLEGAL_PAIR, + /* fsh */ NOT_BEGIN | BREAK | NOT_END, + /* fth */ NOT_BEGIN | BREAK | NOT_END, + /* fwh */ ILLEGAL_PAIR, + /* fqu */ NOT_BEGIN | BREAK | NOT_END, + /* fck */ ILLEGAL_PAIR, + /* ga */ ANY_COMBINATION, + /* gb */ NOT_BEGIN | BREAK | NOT_END, + /* gc */ NOT_BEGIN | BREAK | NOT_END, + /* gd */ NOT_BEGIN | BREAK | NOT_END, + /* ge */ ANY_COMBINATION, + /* gf */ NOT_BEGIN | BREAK | NOT_END, + /* gg */ NOT_BEGIN, + /* gh */ NOT_BEGIN | BREAK | NOT_END, + /* gi */ ANY_COMBINATION, + /* gj */ NOT_BEGIN | BREAK | NOT_END, + /* gk */ ILLEGAL_PAIR, + /* gl */ BEGIN | SUFFIX | NOT_END, + /* gm */ NOT_BEGIN | BREAK | NOT_END, + /* gn */ NOT_BEGIN | BREAK | NOT_END, + /* go */ ANY_COMBINATION, + /* gp */ NOT_BEGIN | BREAK | NOT_END, + /* gr */ BEGIN | NOT_END, + /* gs */ NOT_BEGIN | END, + /* gt */ NOT_BEGIN | BREAK | NOT_END, + /* gu */ ANY_COMBINATION, + /* gv */ NOT_BEGIN | BREAK | NOT_END, + /* gw */ NOT_BEGIN | BREAK | NOT_END, + /* gx */ ILLEGAL_PAIR, + /* gy */ NOT_BEGIN, + /* gz */ NOT_BEGIN | BREAK | NOT_END, + /* gch */ NOT_BEGIN | BREAK | NOT_END, + /* ggh */ ILLEGAL_PAIR, + /* gph */ NOT_BEGIN | BREAK | NOT_END, + /* grh */ ILLEGAL_PAIR, + /* gsh */ NOT_BEGIN, + /* gth */ NOT_BEGIN, + /* gwh */ ILLEGAL_PAIR, + /* gqu */ NOT_BEGIN | BREAK | NOT_END, + /* gck */ ILLEGAL_PAIR, + /* ha */ ANY_COMBINATION, + /* hb */ NOT_BEGIN | BREAK | NOT_END, + /* hc */ NOT_BEGIN | BREAK | NOT_END, + /* hd */ NOT_BEGIN | BREAK | NOT_END, + /* he */ ANY_COMBINATION, + /* hf */ NOT_BEGIN | BREAK | NOT_END, + /* hg */ NOT_BEGIN | BREAK | NOT_END, + /* hh */ ILLEGAL_PAIR, + /* hi */ ANY_COMBINATION, + /* hj */ NOT_BEGIN | BREAK | NOT_END, + /* hk */ NOT_BEGIN | BREAK | NOT_END, + /* hl */ NOT_BEGIN | BREAK | NOT_END, + /* hm */ NOT_BEGIN | BREAK | NOT_END, + /* hn */ NOT_BEGIN | BREAK | NOT_END, + /* ho */ ANY_COMBINATION, + /* hp */ NOT_BEGIN | BREAK | NOT_END, + /* hr */ NOT_BEGIN | BREAK | NOT_END, + /* hs */ NOT_BEGIN | BREAK | NOT_END, + /* ht */ NOT_BEGIN | BREAK | NOT_END, + /* hu */ ANY_COMBINATION, + /* hv */ NOT_BEGIN | BREAK | NOT_END, + /* hw */ NOT_BEGIN | BREAK | NOT_END, + /* hx */ ILLEGAL_PAIR, + /* hy */ ANY_COMBINATION, + /* hz */ NOT_BEGIN | BREAK | NOT_END, + /* hch */ NOT_BEGIN | BREAK | NOT_END, + /* hgh */ NOT_BEGIN | BREAK | NOT_END, + /* hph */ NOT_BEGIN | BREAK | NOT_END, + /* hrh */ ILLEGAL_PAIR, + /* hsh */ NOT_BEGIN | BREAK | NOT_END, + /* hth */ NOT_BEGIN | BREAK | NOT_END, + /* hwh */ ILLEGAL_PAIR, + /* hqu */ NOT_BEGIN | BREAK | NOT_END, + /* hck */ ILLEGAL_PAIR, + /* ia */ ANY_COMBINATION, + /* ib */ ANY_COMBINATION, + /* ic */ ANY_COMBINATION, + /* id */ ANY_COMBINATION, + /* ie */ NOT_BEGIN, + /* if */ ANY_COMBINATION, + /* ig */ ANY_COMBINATION, + /* ih */ NOT_BEGIN | BREAK | NOT_END, + /* ii */ ILLEGAL_PAIR, + /* ij */ ANY_COMBINATION, + /* ik */ ANY_COMBINATION, + /* il */ ANY_COMBINATION, + /* im */ ANY_COMBINATION, + /* in */ ANY_COMBINATION, + /* io */ BREAK, + /* ip */ ANY_COMBINATION, + /* ir */ ANY_COMBINATION, + /* is */ ANY_COMBINATION, + /* it */ ANY_COMBINATION, + /* iu */ NOT_BEGIN | BREAK | NOT_END, + /* iv */ ANY_COMBINATION, + /* iw */ NOT_BEGIN | BREAK | NOT_END, + /* ix */ ANY_COMBINATION, + /* iy */ NOT_BEGIN | BREAK | NOT_END, + /* iz */ ANY_COMBINATION, + /* ich */ ANY_COMBINATION, + /* igh */ NOT_BEGIN, + /* iph */ ANY_COMBINATION, + /* irh */ ILLEGAL_PAIR, + /* ish */ ANY_COMBINATION, + /* ith */ ANY_COMBINATION, + /* iwh */ ILLEGAL_PAIR, + /* iqu */ BREAK | NOT_END, + /* ick */ ANY_COMBINATION, + /* ja */ ANY_COMBINATION, + /* jb */ NOT_BEGIN | BREAK | NOT_END, + /* jc */ NOT_BEGIN | BREAK | NOT_END, + /* jd */ NOT_BEGIN | BREAK | NOT_END, + /* je */ ANY_COMBINATION, + /* jf */ NOT_BEGIN | BREAK | NOT_END, + /* jg */ ILLEGAL_PAIR, + /* jh */ NOT_BEGIN | BREAK | NOT_END, + /* ji */ ANY_COMBINATION, + /* jj */ ILLEGAL_PAIR, + /* jk */ NOT_BEGIN | BREAK | NOT_END, + /* jl */ NOT_BEGIN | BREAK | NOT_END, + /* jm */ NOT_BEGIN | BREAK | NOT_END, + /* jn */ NOT_BEGIN | BREAK | NOT_END, + /* jo */ ANY_COMBINATION, + /* jp */ NOT_BEGIN | BREAK | NOT_END, + /* jr */ NOT_BEGIN | BREAK | NOT_END, + /* js */ NOT_BEGIN | BREAK | NOT_END, + /* jt */ NOT_BEGIN | BREAK | NOT_END, + /* ju */ ANY_COMBINATION, + /* jv */ NOT_BEGIN | BREAK | NOT_END, + /* jw */ NOT_BEGIN | BREAK | NOT_END, + /* jx */ ILLEGAL_PAIR, + /* jy */ NOT_BEGIN, + /* jz */ NOT_BEGIN | BREAK | NOT_END, + /* jch */ NOT_BEGIN | BREAK | NOT_END, + /* jgh */ NOT_BEGIN | BREAK | NOT_END, + /* jph */ NOT_BEGIN | BREAK | NOT_END, + /* jrh */ ILLEGAL_PAIR, + /* jsh */ NOT_BEGIN | BREAK | NOT_END, + /* jth */ NOT_BEGIN | BREAK | NOT_END, + /* jwh */ ILLEGAL_PAIR, + /* jqu */ NOT_BEGIN | BREAK | NOT_END, + /* jck */ ILLEGAL_PAIR, + /* ka */ ANY_COMBINATION, + /* kb */ NOT_BEGIN | BREAK | NOT_END, + /* kc */ NOT_BEGIN | BREAK | NOT_END, + /* kd */ NOT_BEGIN | BREAK | NOT_END, + /* ke */ ANY_COMBINATION, + /* kf */ NOT_BEGIN | BREAK | NOT_END, + /* kg */ NOT_BEGIN | BREAK | NOT_END, + /* kh */ NOT_BEGIN | BREAK | NOT_END, + /* ki */ ANY_COMBINATION, + /* kj */ NOT_BEGIN | BREAK | NOT_END, + /* kk */ NOT_BEGIN | BREAK | NOT_END, + /* kl */ SUFFIX | NOT_END, + /* km */ NOT_BEGIN | BREAK | NOT_END, + /* kn */ BEGIN | SUFFIX | NOT_END, + /* ko */ ANY_COMBINATION, + /* kp */ NOT_BEGIN | BREAK | NOT_END, + /* kr */ SUFFIX | NOT_END, + /* ks */ NOT_BEGIN | END, + /* kt */ NOT_BEGIN | BREAK | NOT_END, + /* ku */ ANY_COMBINATION, + /* kv */ NOT_BEGIN | BREAK | NOT_END, + /* kw */ NOT_BEGIN | BREAK | NOT_END, + /* kx */ ILLEGAL_PAIR, + /* ky */ NOT_BEGIN, + /* kz */ NOT_BEGIN | BREAK | NOT_END, + /* kch */ NOT_BEGIN | BREAK | NOT_END, + /* kgh */ NOT_BEGIN | BREAK | NOT_END, + /* kph */ NOT_BEGIN | PREFIX, + /* krh */ ILLEGAL_PAIR, + /* ksh */ NOT_BEGIN, + /* kth */ NOT_BEGIN | BREAK | NOT_END, + /* kwh */ ILLEGAL_PAIR, + /* kqu */ NOT_BEGIN | BREAK | NOT_END, + /* kck */ ILLEGAL_PAIR, + /* la */ ANY_COMBINATION, + /* lb */ NOT_BEGIN | PREFIX, + /* lc */ NOT_BEGIN | BREAK | NOT_END, + /* ld */ NOT_BEGIN | PREFIX, + /* le */ ANY_COMBINATION, + /* lf */ NOT_BEGIN | PREFIX, + /* lg */ NOT_BEGIN | PREFIX, + /* lh */ NOT_BEGIN | BREAK | NOT_END, + /* li */ ANY_COMBINATION, + /* lj */ NOT_BEGIN | PREFIX, + /* lk */ NOT_BEGIN | PREFIX, + /* ll */ NOT_BEGIN | PREFIX, + /* lm */ NOT_BEGIN | PREFIX, + /* ln */ NOT_BEGIN | BREAK | NOT_END, + /* lo */ ANY_COMBINATION, + /* lp */ NOT_BEGIN | PREFIX, + /* lr */ NOT_BEGIN | BREAK | NOT_END, + /* ls */ NOT_BEGIN, + /* lt */ NOT_BEGIN | PREFIX, + /* lu */ ANY_COMBINATION, + /* lv */ NOT_BEGIN | PREFIX, + /* lw */ NOT_BEGIN | BREAK | NOT_END, + /* lx */ ILLEGAL_PAIR, + /* ly */ ANY_COMBINATION, + /* lz */ NOT_BEGIN | BREAK | NOT_END, + /* lch */ NOT_BEGIN | PREFIX, + /* lgh */ NOT_BEGIN | BREAK | NOT_END, + /* lph */ NOT_BEGIN | PREFIX, + /* lrh */ ILLEGAL_PAIR, + /* lsh */ NOT_BEGIN | PREFIX, + /* lth */ NOT_BEGIN | PREFIX, + /* lwh */ ILLEGAL_PAIR, + /* lqu */ NOT_BEGIN | BREAK | NOT_END, + /* lck */ ILLEGAL_PAIR, + /* ma */ ANY_COMBINATION, + /* mb */ NOT_BEGIN | BREAK | NOT_END, + /* mc */ NOT_BEGIN | BREAK | NOT_END, + /* md */ NOT_BEGIN | BREAK | NOT_END, + /* me */ ANY_COMBINATION, + /* mf */ NOT_BEGIN | BREAK | NOT_END, + /* mg */ NOT_BEGIN | BREAK | NOT_END, + /* mh */ NOT_BEGIN | BREAK | NOT_END, + /* mi */ ANY_COMBINATION, + /* mj */ NOT_BEGIN | BREAK | NOT_END, + /* mk */ NOT_BEGIN | BREAK | NOT_END, + /* ml */ NOT_BEGIN | BREAK | NOT_END, + /* mm */ NOT_BEGIN, + /* mn */ NOT_BEGIN | BREAK | NOT_END, + /* mo */ ANY_COMBINATION, + /* mp */ NOT_BEGIN, + /* mr */ NOT_BEGIN | BREAK | NOT_END, + /* ms */ NOT_BEGIN, + /* mt */ NOT_BEGIN, + /* mu */ ANY_COMBINATION, + /* mv */ NOT_BEGIN | BREAK | NOT_END, + /* mw */ NOT_BEGIN | BREAK | NOT_END, + /* mx */ ILLEGAL_PAIR, + /* my */ ANY_COMBINATION, + /* mz */ NOT_BEGIN | BREAK | NOT_END, + /* mch */ NOT_BEGIN | PREFIX, + /* mgh */ NOT_BEGIN | BREAK | NOT_END, + /* mph */ NOT_BEGIN, + /* mrh */ ILLEGAL_PAIR, + /* msh */ NOT_BEGIN, + /* mth */ NOT_BEGIN, + /* mwh */ ILLEGAL_PAIR, + /* mqu */ NOT_BEGIN | BREAK | NOT_END, + /* mck */ ILLEGAL_PAIR, + /* na */ ANY_COMBINATION, + /* nb */ NOT_BEGIN | BREAK | NOT_END, + /* nc */ NOT_BEGIN | BREAK | NOT_END, + /* nd */ NOT_BEGIN, + /* ne */ ANY_COMBINATION, + /* nf */ NOT_BEGIN | BREAK | NOT_END, + /* ng */ NOT_BEGIN | PREFIX, + /* nh */ NOT_BEGIN | BREAK | NOT_END, + /* ni */ ANY_COMBINATION, + /* nj */ NOT_BEGIN | BREAK | NOT_END, + /* nk */ NOT_BEGIN | PREFIX, + /* nl */ NOT_BEGIN | BREAK | NOT_END, + /* nm */ NOT_BEGIN | BREAK | NOT_END, + /* nn */ NOT_BEGIN, + /* no */ ANY_COMBINATION, + /* np */ NOT_BEGIN | BREAK | NOT_END, + /* nr */ NOT_BEGIN | BREAK | NOT_END, + /* ns */ NOT_BEGIN, + /* nt */ NOT_BEGIN, + /* nu */ ANY_COMBINATION, + /* nv */ NOT_BEGIN | BREAK | NOT_END, + /* nw */ NOT_BEGIN | BREAK | NOT_END, + /* nx */ ILLEGAL_PAIR, + /* ny */ NOT_BEGIN, + /* nz */ NOT_BEGIN | BREAK | NOT_END, + /* nch */ NOT_BEGIN | PREFIX, + /* ngh */ NOT_BEGIN | BREAK | NOT_END, + /* nph */ NOT_BEGIN | PREFIX, + /* nrh */ ILLEGAL_PAIR, + /* nsh */ NOT_BEGIN, + /* nth */ NOT_BEGIN, + /* nwh */ ILLEGAL_PAIR, + /* nqu */ NOT_BEGIN | BREAK | NOT_END, + /* nck */ NOT_BEGIN | PREFIX, + /* oa */ ANY_COMBINATION, + /* ob */ ANY_COMBINATION, + /* oc */ ANY_COMBINATION, + /* od */ ANY_COMBINATION, + /* oe */ ILLEGAL_PAIR, + /* of */ ANY_COMBINATION, + /* og */ ANY_COMBINATION, + /* oh */ NOT_BEGIN | BREAK | NOT_END, + /* oi */ ANY_COMBINATION, + /* oj */ ANY_COMBINATION, + /* ok */ ANY_COMBINATION, + /* ol */ ANY_COMBINATION, + /* om */ ANY_COMBINATION, + /* on */ ANY_COMBINATION, + /* oo */ ANY_COMBINATION, + /* op */ ANY_COMBINATION, + /* or */ ANY_COMBINATION, + /* os */ ANY_COMBINATION, + /* ot */ ANY_COMBINATION, + /* ou */ ANY_COMBINATION, + /* ov */ ANY_COMBINATION, + /* ow */ ANY_COMBINATION, + /* ox */ ANY_COMBINATION, + /* oy */ ANY_COMBINATION, + /* oz */ ANY_COMBINATION, + /* och */ ANY_COMBINATION, + /* ogh */ NOT_BEGIN, + /* oph */ ANY_COMBINATION, + /* orh */ ILLEGAL_PAIR, + /* osh */ ANY_COMBINATION, + /* oth */ ANY_COMBINATION, + /* owh */ ILLEGAL_PAIR, + /* oqu */ BREAK | NOT_END, + /* ock */ ANY_COMBINATION, + /* pa */ ANY_COMBINATION, + /* pb */ NOT_BEGIN | BREAK | NOT_END, + /* pc */ NOT_BEGIN | BREAK | NOT_END, + /* pd */ NOT_BEGIN | BREAK | NOT_END, + /* pe */ ANY_COMBINATION, + /* pf */ NOT_BEGIN | BREAK | NOT_END, + /* pg */ NOT_BEGIN | BREAK | NOT_END, + /* ph */ NOT_BEGIN | BREAK | NOT_END, + /* pi */ ANY_COMBINATION, + /* pj */ NOT_BEGIN | BREAK | NOT_END, + /* pk */ NOT_BEGIN | BREAK | NOT_END, + /* pl */ SUFFIX | NOT_END, + /* pm */ NOT_BEGIN | BREAK | NOT_END, + /* pn */ NOT_BEGIN | BREAK | NOT_END, + /* po */ ANY_COMBINATION, + /* pp */ NOT_BEGIN | PREFIX, + /* pr */ NOT_END, + /* ps */ NOT_BEGIN | END, + /* pt */ NOT_BEGIN | END, + /* pu */ NOT_BEGIN | END, + /* pv */ NOT_BEGIN | BREAK | NOT_END, + /* pw */ NOT_BEGIN | BREAK | NOT_END, + /* px */ ILLEGAL_PAIR, + /* py */ ANY_COMBINATION, + /* pz */ NOT_BEGIN | BREAK | NOT_END, + /* pch */ NOT_BEGIN | BREAK | NOT_END, + /* pgh */ NOT_BEGIN | BREAK | NOT_END, + /* pph */ NOT_BEGIN | BREAK | NOT_END, + /* prh */ ILLEGAL_PAIR, + /* psh */ NOT_BEGIN | BREAK | NOT_END, + /* pth */ NOT_BEGIN | BREAK | NOT_END, + /* pwh */ ILLEGAL_PAIR, + /* pqu */ NOT_BEGIN | BREAK | NOT_END, + /* pck */ ILLEGAL_PAIR, + /* ra */ ANY_COMBINATION, + /* rb */ NOT_BEGIN | PREFIX, + /* rc */ NOT_BEGIN | PREFIX, + /* rd */ NOT_BEGIN | PREFIX, + /* re */ ANY_COMBINATION, + /* rf */ NOT_BEGIN | PREFIX, + /* rg */ NOT_BEGIN | PREFIX, + /* rh */ NOT_BEGIN | BREAK | NOT_END, + /* ri */ ANY_COMBINATION, + /* rj */ NOT_BEGIN | PREFIX, + /* rk */ NOT_BEGIN | PREFIX, + /* rl */ NOT_BEGIN | PREFIX, + /* rm */ NOT_BEGIN | PREFIX, + /* rn */ NOT_BEGIN | PREFIX, + /* ro */ ANY_COMBINATION, + /* rp */ NOT_BEGIN | PREFIX, + /* rr */ NOT_BEGIN | PREFIX, + /* rs */ NOT_BEGIN | PREFIX, + /* rt */ NOT_BEGIN | PREFIX, + /* ru */ ANY_COMBINATION, + /* rv */ NOT_BEGIN | PREFIX, + /* rw */ NOT_BEGIN | BREAK | NOT_END, + /* rx */ ILLEGAL_PAIR, + /* ry */ ANY_COMBINATION, + /* rz */ NOT_BEGIN | PREFIX, + /* rch */ NOT_BEGIN | PREFIX, + /* rgh */ NOT_BEGIN | BREAK | NOT_END, + /* rph */ NOT_BEGIN | PREFIX, + /* rrh */ ILLEGAL_PAIR, + /* rsh */ NOT_BEGIN | PREFIX, + /* rth */ NOT_BEGIN | PREFIX, + /* rwh */ ILLEGAL_PAIR, + /* rqu */ NOT_BEGIN | PREFIX | NOT_END, + /* rck */ NOT_BEGIN | PREFIX, + /* sa */ ANY_COMBINATION, + /* sb */ NOT_BEGIN | BREAK | NOT_END, + /* sc */ NOT_END, + /* sd */ NOT_BEGIN | BREAK | NOT_END, + /* se */ ANY_COMBINATION, + /* sf */ NOT_BEGIN | BREAK | NOT_END, + /* sg */ NOT_BEGIN | BREAK | NOT_END, + /* sh */ NOT_BEGIN | BREAK | NOT_END, + /* si */ ANY_COMBINATION, + /* sj */ NOT_BEGIN | BREAK | NOT_END, + /* sk */ ANY_COMBINATION, + /* sl */ BEGIN | SUFFIX | NOT_END, + /* sm */ SUFFIX | NOT_END, + /* sn */ PREFIX | SUFFIX | NOT_END, + /* so */ ANY_COMBINATION, + /* sp */ ANY_COMBINATION, + /* sr */ NOT_BEGIN | NOT_END, + /* ss */ NOT_BEGIN | PREFIX, + /* st */ ANY_COMBINATION, + /* su */ ANY_COMBINATION, + /* sv */ NOT_BEGIN | BREAK | NOT_END, + /* sw */ BEGIN | SUFFIX | NOT_END, + /* sx */ ILLEGAL_PAIR, + /* sy */ ANY_COMBINATION, + /* sz */ NOT_BEGIN | BREAK | NOT_END, + /* sch */ BEGIN | SUFFIX | NOT_END, + /* sgh */ NOT_BEGIN | BREAK | NOT_END, + /* sph */ NOT_BEGIN | BREAK | NOT_END, + /* srh */ ILLEGAL_PAIR, + /* ssh */ NOT_BEGIN | BREAK | NOT_END, + /* sth */ NOT_BEGIN | BREAK | NOT_END, + /* swh */ ILLEGAL_PAIR, + /* squ */ SUFFIX | NOT_END, + /* sck */ NOT_BEGIN, + /* ta */ ANY_COMBINATION, + /* tb */ NOT_BEGIN | BREAK | NOT_END, + /* tc */ NOT_BEGIN | BREAK | NOT_END, + /* td */ NOT_BEGIN | BREAK | NOT_END, + /* te */ ANY_COMBINATION, + /* tf */ NOT_BEGIN | BREAK | NOT_END, + /* tg */ NOT_BEGIN | BREAK | NOT_END, + /* th */ NOT_BEGIN | BREAK | NOT_END, + /* ti */ ANY_COMBINATION, + /* tj */ NOT_BEGIN | BREAK | NOT_END, + /* tk */ NOT_BEGIN | BREAK | NOT_END, + /* tl */ NOT_BEGIN | BREAK | NOT_END, + /* tm */ NOT_BEGIN | BREAK | NOT_END, + /* tn */ NOT_BEGIN | BREAK | NOT_END, + /* to */ ANY_COMBINATION, + /* tp */ NOT_BEGIN | BREAK | NOT_END, + /* tr */ NOT_END, + /* ts */ NOT_BEGIN | END, + /* tt */ NOT_BEGIN | PREFIX, + /* tu */ ANY_COMBINATION, + /* tv */ NOT_BEGIN | BREAK | NOT_END, + /* tw */ BEGIN | SUFFIX | NOT_END, + /* tx */ ILLEGAL_PAIR, + /* ty */ ANY_COMBINATION, + /* tz */ NOT_BEGIN | BREAK | NOT_END, + /* tch */ NOT_BEGIN, + /* tgh */ NOT_BEGIN | BREAK | NOT_END, + /* tph */ NOT_BEGIN | END, + /* trh */ ILLEGAL_PAIR, + /* tsh */ NOT_BEGIN | END, + /* tth */ NOT_BEGIN | BREAK | NOT_END, + /* twh */ ILLEGAL_PAIR, + /* tqu */ NOT_BEGIN | BREAK | NOT_END, + /* tck */ ILLEGAL_PAIR, + /* ua */ NOT_BEGIN | BREAK | NOT_END, + /* ub */ ANY_COMBINATION, + /* uc */ ANY_COMBINATION, + /* ud */ ANY_COMBINATION, + /* ue */ NOT_BEGIN, + /* uf */ ANY_COMBINATION, + /* ug */ ANY_COMBINATION, + /* uh */ NOT_BEGIN | BREAK | NOT_END, + /* ui */ NOT_BEGIN | BREAK | NOT_END, + /* uj */ ANY_COMBINATION, + /* uk */ ANY_COMBINATION, + /* ul */ ANY_COMBINATION, + /* um */ ANY_COMBINATION, + /* un */ ANY_COMBINATION, + /* uo */ NOT_BEGIN | BREAK, + /* up */ ANY_COMBINATION, + /* ur */ ANY_COMBINATION, + /* us */ ANY_COMBINATION, + /* ut */ ANY_COMBINATION, + /* uu */ ILLEGAL_PAIR, + /* uv */ ANY_COMBINATION, + /* uw */ NOT_BEGIN | BREAK | NOT_END, + /* ux */ ANY_COMBINATION, + /* uy */ NOT_BEGIN | BREAK | NOT_END, + /* uz */ ANY_COMBINATION, + /* uch */ ANY_COMBINATION, + /* ugh */ NOT_BEGIN | PREFIX, + /* uph */ ANY_COMBINATION, + /* urh */ ILLEGAL_PAIR, + /* ush */ ANY_COMBINATION, + /* uth */ ANY_COMBINATION, + /* uwh */ ILLEGAL_PAIR, + /* uqu */ BREAK | NOT_END, + /* uck */ ANY_COMBINATION, + /* va */ ANY_COMBINATION, + /* vb */ NOT_BEGIN | BREAK | NOT_END, + /* vc */ NOT_BEGIN | BREAK | NOT_END, + /* vd */ NOT_BEGIN | BREAK | NOT_END, + /* ve */ ANY_COMBINATION, + /* vf */ NOT_BEGIN | BREAK | NOT_END, + /* vg */ NOT_BEGIN | BREAK | NOT_END, + /* vh */ NOT_BEGIN | BREAK | NOT_END, + /* vi */ ANY_COMBINATION, + /* vj */ NOT_BEGIN | BREAK | NOT_END, + /* vk */ NOT_BEGIN | BREAK | NOT_END, + /* vl */ NOT_BEGIN | BREAK | NOT_END, + /* vm */ NOT_BEGIN | BREAK | NOT_END, + /* vn */ NOT_BEGIN | BREAK | NOT_END, + /* vo */ ANY_COMBINATION, + /* vp */ NOT_BEGIN | BREAK | NOT_END, + /* vr */ NOT_BEGIN | BREAK | NOT_END, + /* vs */ NOT_BEGIN | BREAK | NOT_END, + /* vt */ NOT_BEGIN | BREAK | NOT_END, + /* vu */ ANY_COMBINATION, + /* vv */ NOT_BEGIN | BREAK | NOT_END, + /* vw */ NOT_BEGIN | BREAK | NOT_END, + /* vx */ ILLEGAL_PAIR, + /* vy */ NOT_BEGIN, + /* vz */ NOT_BEGIN | BREAK | NOT_END, + /* vch */ NOT_BEGIN | BREAK | NOT_END, + /* vgh */ NOT_BEGIN | BREAK | NOT_END, + /* vph */ NOT_BEGIN | BREAK | NOT_END, + /* vrh */ ILLEGAL_PAIR, + /* vsh */ NOT_BEGIN | BREAK | NOT_END, + /* vth */ NOT_BEGIN | BREAK | NOT_END, + /* vwh */ ILLEGAL_PAIR, + /* vqu */ NOT_BEGIN | BREAK | NOT_END, + /* vck */ ILLEGAL_PAIR, + /* wa */ ANY_COMBINATION, + /* wb */ NOT_BEGIN | PREFIX, + /* wc */ NOT_BEGIN | BREAK | NOT_END, + /* wd */ NOT_BEGIN | PREFIX | END, + /* we */ ANY_COMBINATION, + /* wf */ NOT_BEGIN | PREFIX, + /* wg */ NOT_BEGIN | PREFIX | END, + /* wh */ NOT_BEGIN | BREAK | NOT_END, + /* wi */ ANY_COMBINATION, + /* wj */ NOT_BEGIN | BREAK | NOT_END, + /* wk */ NOT_BEGIN | PREFIX, + /* wl */ NOT_BEGIN | PREFIX | SUFFIX, + /* wm */ NOT_BEGIN | PREFIX, + /* wn */ NOT_BEGIN | PREFIX, + /* wo */ ANY_COMBINATION, + /* wp */ NOT_BEGIN | PREFIX, + /* wr */ BEGIN | SUFFIX | NOT_END, + /* ws */ NOT_BEGIN | PREFIX, + /* wt */ NOT_BEGIN | PREFIX, + /* wu */ ANY_COMBINATION, + /* wv */ NOT_BEGIN | PREFIX, + /* ww */ NOT_BEGIN | BREAK | NOT_END, + /* wx */ NOT_BEGIN | PREFIX, + /* wy */ ANY_COMBINATION, + /* wz */ NOT_BEGIN | PREFIX, + /* wch */ NOT_BEGIN, + /* wgh */ NOT_BEGIN | BREAK | NOT_END, + /* wph */ NOT_BEGIN, + /* wrh */ ILLEGAL_PAIR, + /* wsh */ NOT_BEGIN, + /* wth */ NOT_BEGIN, + /* wwh */ ILLEGAL_PAIR, + /* wqu */ NOT_BEGIN | BREAK | NOT_END, + /* wck */ NOT_BEGIN, + /* xa */ NOT_BEGIN, + /* xb */ NOT_BEGIN | BREAK | NOT_END, + /* xc */ NOT_BEGIN | BREAK | NOT_END, + /* xd */ NOT_BEGIN | BREAK | NOT_END, + /* xe */ NOT_BEGIN, + /* xf */ NOT_BEGIN | BREAK | NOT_END, + /* xg */ NOT_BEGIN | BREAK | NOT_END, + /* xh */ NOT_BEGIN | BREAK | NOT_END, + /* xi */ NOT_BEGIN, + /* xj */ NOT_BEGIN | BREAK | NOT_END, + /* xk */ NOT_BEGIN | BREAK | NOT_END, + /* xl */ NOT_BEGIN | BREAK | NOT_END, + /* xm */ NOT_BEGIN | BREAK | NOT_END, + /* xn */ NOT_BEGIN | BREAK | NOT_END, + /* xo */ NOT_BEGIN, + /* xp */ NOT_BEGIN | BREAK | NOT_END, + /* xr */ NOT_BEGIN | BREAK | NOT_END, + /* xs */ NOT_BEGIN | BREAK | NOT_END, + /* xt */ NOT_BEGIN | BREAK | NOT_END, + /* xu */ NOT_BEGIN, + /* xv */ NOT_BEGIN | BREAK | NOT_END, + /* xw */ NOT_BEGIN | BREAK | NOT_END, + /* xx */ ILLEGAL_PAIR, + /* xy */ NOT_BEGIN, + /* xz */ NOT_BEGIN | BREAK | NOT_END, + /* xch */ NOT_BEGIN | BREAK | NOT_END, + /* xgh */ NOT_BEGIN | BREAK | NOT_END, + /* xph */ NOT_BEGIN | BREAK | NOT_END, + /* xrh */ ILLEGAL_PAIR, + /* xsh */ NOT_BEGIN | BREAK | NOT_END, + /* xth */ NOT_BEGIN | BREAK | NOT_END, + /* xwh */ ILLEGAL_PAIR, + /* xqu */ NOT_BEGIN | BREAK | NOT_END, + /* xck */ ILLEGAL_PAIR, + /* ya */ ANY_COMBINATION, + /* yb */ NOT_BEGIN, + /* yc */ NOT_BEGIN | NOT_END, + /* yd */ NOT_BEGIN, + /* ye */ ANY_COMBINATION, + /* yf */ NOT_BEGIN | NOT_END, + /* yg */ NOT_BEGIN, + /* yh */ NOT_BEGIN | BREAK | NOT_END, + /* yi */ BEGIN | NOT_END, + /* yj */ NOT_BEGIN | NOT_END, + /* yk */ NOT_BEGIN, + /* yl */ NOT_BEGIN | NOT_END, + /* ym */ NOT_BEGIN, + /* yn */ NOT_BEGIN, + /* yo */ ANY_COMBINATION, + /* yp */ NOT_BEGIN, + /* yr */ NOT_BEGIN | BREAK | NOT_END, + /* ys */ NOT_BEGIN, + /* yt */ NOT_BEGIN, + /* yu */ ANY_COMBINATION, + /* yv */ NOT_BEGIN | NOT_END, + /* yw */ NOT_BEGIN | BREAK | NOT_END, + /* yx */ NOT_BEGIN, + /* yy */ ILLEGAL_PAIR, + /* yz */ NOT_BEGIN, + /* ych */ NOT_BEGIN | BREAK | NOT_END, + /* ygh */ NOT_BEGIN | BREAK | NOT_END, + /* yph */ NOT_BEGIN | BREAK | NOT_END, + /* yrh */ ILLEGAL_PAIR, + /* ysh */ NOT_BEGIN | BREAK | NOT_END, + /* yth */ NOT_BEGIN | BREAK | NOT_END, + /* ywh */ ILLEGAL_PAIR, + /* yqu */ NOT_BEGIN | BREAK | NOT_END, + /* yck */ ILLEGAL_PAIR, + /* za */ ANY_COMBINATION, + /* zb */ NOT_BEGIN | BREAK | NOT_END, + /* zc */ NOT_BEGIN | BREAK | NOT_END, + /* zd */ NOT_BEGIN | BREAK | NOT_END, + /* ze */ ANY_COMBINATION, + /* zf */ NOT_BEGIN | BREAK | NOT_END, + /* zg */ NOT_BEGIN | BREAK | NOT_END, + /* zh */ NOT_BEGIN | BREAK | NOT_END, + /* zi */ ANY_COMBINATION, + /* zj */ NOT_BEGIN | BREAK | NOT_END, + /* zk */ NOT_BEGIN | BREAK | NOT_END, + /* zl */ NOT_BEGIN | BREAK | NOT_END, + /* zm */ NOT_BEGIN | BREAK | NOT_END, + /* zn */ NOT_BEGIN | BREAK | NOT_END, + /* zo */ ANY_COMBINATION, + /* zp */ NOT_BEGIN | BREAK | NOT_END, + /* zr */ NOT_BEGIN | NOT_END, + /* zs */ NOT_BEGIN | BREAK | NOT_END, + /* zt */ NOT_BEGIN, + /* zu */ ANY_COMBINATION, + /* zv */ NOT_BEGIN | BREAK | NOT_END, + /* zw */ SUFFIX | NOT_END, + /* zx */ ILLEGAL_PAIR, + /* zy */ ANY_COMBINATION, + /* zz */ NOT_BEGIN, + /* zch */ NOT_BEGIN | BREAK | NOT_END, + /* zgh */ NOT_BEGIN | BREAK | NOT_END, + /* zph */ NOT_BEGIN | BREAK | NOT_END, + /* zrh */ ILLEGAL_PAIR, + /* zsh */ NOT_BEGIN | BREAK | NOT_END, + /* zth */ NOT_BEGIN | BREAK | NOT_END, + /* zwh */ ILLEGAL_PAIR, + /* zqu */ NOT_BEGIN | BREAK | NOT_END, + /* zck */ ILLEGAL_PAIR, + /* cha */ ANY_COMBINATION, + /* chb */ NOT_BEGIN | BREAK | NOT_END, + /* chc */ NOT_BEGIN | BREAK | NOT_END, + /* chd */ NOT_BEGIN | BREAK | NOT_END, + /* che */ ANY_COMBINATION, + /* chf */ NOT_BEGIN | BREAK | NOT_END, + /* chg */ NOT_BEGIN | BREAK | NOT_END, + /* chh */ NOT_BEGIN | BREAK | NOT_END, + /* chi */ ANY_COMBINATION, + /* chj */ NOT_BEGIN | BREAK | NOT_END, + /* chk */ NOT_BEGIN | BREAK | NOT_END, + /* chl */ NOT_BEGIN | BREAK | NOT_END, + /* chm */ NOT_BEGIN | BREAK | NOT_END, + /* chn */ NOT_BEGIN | BREAK | NOT_END, + /* cho */ ANY_COMBINATION, + /* chp */ NOT_BEGIN | BREAK | NOT_END, + /* chr */ NOT_END, + /* chs */ NOT_BEGIN | BREAK | NOT_END, + /* cht */ NOT_BEGIN | BREAK | NOT_END, + /* chu */ ANY_COMBINATION, + /* chv */ NOT_BEGIN | BREAK | NOT_END, + /* chw */ NOT_BEGIN | NOT_END, + /* chx */ ILLEGAL_PAIR, + /* chy */ ANY_COMBINATION, + /* chz */ NOT_BEGIN | BREAK | NOT_END, + /* chch */ ILLEGAL_PAIR, + /* chgh */ NOT_BEGIN | BREAK | NOT_END, + /* chph */ NOT_BEGIN | BREAK | NOT_END, + /* chrh */ ILLEGAL_PAIR, + /* chsh */ NOT_BEGIN | BREAK | NOT_END, + /* chth */ NOT_BEGIN | BREAK | NOT_END, + /* chwh */ ILLEGAL_PAIR, + /* chqu */ NOT_BEGIN | BREAK | NOT_END, + /* chck */ ILLEGAL_PAIR, + /* gha */ ANY_COMBINATION, + /* ghb */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghc */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghd */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghe */ ANY_COMBINATION, + /* ghf */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghg */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghh */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghi */ BEGIN | NOT_END, + /* ghj */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghk */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghl */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghm */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghn */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* gho */ BEGIN | NOT_END, + /* ghp */ NOT_BEGIN | BREAK | NOT_END, + /* ghr */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghs */ NOT_BEGIN | PREFIX, + /* ght */ NOT_BEGIN | PREFIX, + /* ghu */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghv */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghw */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghx */ ILLEGAL_PAIR, + /* ghy */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghz */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghch */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghgh */ ILLEGAL_PAIR, + /* ghph */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghrh */ ILLEGAL_PAIR, + /* ghsh */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghth */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghwh */ ILLEGAL_PAIR, + /* ghqu */ NOT_BEGIN | BREAK | PREFIX | NOT_END, + /* ghck */ ILLEGAL_PAIR, + /* pha */ ANY_COMBINATION, + /* phb */ NOT_BEGIN | BREAK | NOT_END, + /* phc */ NOT_BEGIN | BREAK | NOT_END, + /* phd */ NOT_BEGIN | BREAK | NOT_END, + /* phe */ ANY_COMBINATION, + /* phf */ NOT_BEGIN | BREAK | NOT_END, + /* phg */ NOT_BEGIN | BREAK | NOT_END, + /* phh */ NOT_BEGIN | BREAK | NOT_END, + /* phi */ ANY_COMBINATION, + /* phj */ NOT_BEGIN | BREAK | NOT_END, + /* phk */ NOT_BEGIN | BREAK | NOT_END, + /* phl */ BEGIN | SUFFIX | NOT_END, + /* phm */ NOT_BEGIN | BREAK | NOT_END, + /* phn */ NOT_BEGIN | BREAK | NOT_END, + /* pho */ ANY_COMBINATION, + /* php */ NOT_BEGIN | BREAK | NOT_END, + /* phr */ NOT_END, + /* phs */ NOT_BEGIN, + /* pht */ NOT_BEGIN, + /* phu */ ANY_COMBINATION, + /* phv */ NOT_BEGIN | NOT_END, + /* phw */ NOT_BEGIN | NOT_END, + /* phx */ ILLEGAL_PAIR, + /* phy */ NOT_BEGIN, + /* phz */ NOT_BEGIN | BREAK | NOT_END, + /* phch */ NOT_BEGIN | BREAK | NOT_END, + /* phgh */ NOT_BEGIN | BREAK | NOT_END, + /* phph */ ILLEGAL_PAIR, + /* phrh */ ILLEGAL_PAIR, + /* phsh */ NOT_BEGIN | BREAK | NOT_END, + /* phth */ NOT_BEGIN | BREAK | NOT_END, + /* phwh */ ILLEGAL_PAIR, + /* phqu */ NOT_BEGIN | BREAK | NOT_END, + /* phck */ ILLEGAL_PAIR, + /* rha */ BEGIN | NOT_END, + /* rhb */ ILLEGAL_PAIR, + /* rhc */ ILLEGAL_PAIR, + /* rhd */ ILLEGAL_PAIR, + /* rhe */ BEGIN | NOT_END, + /* rhf */ ILLEGAL_PAIR, + /* rhg */ ILLEGAL_PAIR, + /* rhh */ ILLEGAL_PAIR, + /* rhi */ BEGIN | NOT_END, + /* rhj */ ILLEGAL_PAIR, + /* rhk */ ILLEGAL_PAIR, + /* rhl */ ILLEGAL_PAIR, + /* rhm */ ILLEGAL_PAIR, + /* rhn */ ILLEGAL_PAIR, + /* rho */ BEGIN | NOT_END, + /* rhp */ ILLEGAL_PAIR, + /* rhr */ ILLEGAL_PAIR, + /* rhs */ ILLEGAL_PAIR, + /* rht */ ILLEGAL_PAIR, + /* rhu */ BEGIN | NOT_END, + /* rhv */ ILLEGAL_PAIR, + /* rhw */ ILLEGAL_PAIR, + /* rhx */ ILLEGAL_PAIR, + /* rhy */ BEGIN | NOT_END, + /* rhz */ ILLEGAL_PAIR, + /* rhch */ ILLEGAL_PAIR, + /* rhgh */ ILLEGAL_PAIR, + /* rhph */ ILLEGAL_PAIR, + /* rhrh */ ILLEGAL_PAIR, + /* rhsh */ ILLEGAL_PAIR, + /* rhth */ ILLEGAL_PAIR, + /* rhwh */ ILLEGAL_PAIR, + /* rhqu */ ILLEGAL_PAIR, + /* rhck */ ILLEGAL_PAIR, + /* sha */ ANY_COMBINATION, + /* shb */ NOT_BEGIN | BREAK | NOT_END, + /* shc */ NOT_BEGIN | BREAK | NOT_END, + /* shd */ NOT_BEGIN | BREAK | NOT_END, + /* she */ ANY_COMBINATION, + /* shf */ NOT_BEGIN | BREAK | NOT_END, + /* shg */ NOT_BEGIN | BREAK | NOT_END, + /* shh */ ILLEGAL_PAIR, + /* shi */ ANY_COMBINATION, + /* shj */ NOT_BEGIN | BREAK | NOT_END, + /* shk */ NOT_BEGIN, + /* shl */ BEGIN | SUFFIX | NOT_END, + /* shm */ BEGIN | SUFFIX | NOT_END, + /* shn */ BEGIN | SUFFIX | NOT_END, + /* sho */ ANY_COMBINATION, + /* shp */ NOT_BEGIN, + /* shr */ BEGIN | SUFFIX | NOT_END, + /* shs */ NOT_BEGIN | BREAK | NOT_END, + /* sht */ SUFFIX, + /* shu */ ANY_COMBINATION, + /* shv */ NOT_BEGIN | BREAK | NOT_END, + /* shw */ SUFFIX | NOT_END, + /* shx */ ILLEGAL_PAIR, + /* shy */ ANY_COMBINATION, + /* shz */ NOT_BEGIN | BREAK | NOT_END, + /* shch */ NOT_BEGIN | BREAK | NOT_END, + /* shgh */ NOT_BEGIN | BREAK | NOT_END, + /* shph */ NOT_BEGIN | BREAK | NOT_END, + /* shrh */ ILLEGAL_PAIR, + /* shsh */ ILLEGAL_PAIR, + /* shth */ NOT_BEGIN | BREAK | NOT_END, + /* shwh */ ILLEGAL_PAIR, + /* shqu */ NOT_BEGIN | BREAK | NOT_END, + /* shck */ ILLEGAL_PAIR, + /* tha */ ANY_COMBINATION, + /* thb */ NOT_BEGIN | BREAK | NOT_END, + /* thc */ NOT_BEGIN | BREAK | NOT_END, + /* thd */ NOT_BEGIN | BREAK | NOT_END, + /* the */ ANY_COMBINATION, + /* thf */ NOT_BEGIN | BREAK | NOT_END, + /* thg */ NOT_BEGIN | BREAK | NOT_END, + /* thh */ NOT_BEGIN | BREAK | NOT_END, + /* thi */ ANY_COMBINATION, + /* thj */ NOT_BEGIN | BREAK | NOT_END, + /* thk */ NOT_BEGIN | BREAK | NOT_END, + /* thl */ NOT_BEGIN | BREAK | NOT_END, + /* thm */ NOT_BEGIN | BREAK | NOT_END, + /* thn */ NOT_BEGIN | BREAK | NOT_END, + /* tho */ ANY_COMBINATION, + /* thp */ NOT_BEGIN | BREAK | NOT_END, + /* thr */ NOT_END, + /* ths */ NOT_BEGIN | END, + /* tht */ NOT_BEGIN | BREAK | NOT_END, + /* thu */ ANY_COMBINATION, + /* thv */ NOT_BEGIN | BREAK | NOT_END, + /* thw */ SUFFIX | NOT_END, + /* thx */ ILLEGAL_PAIR, + /* thy */ ANY_COMBINATION, + /* thz */ NOT_BEGIN | BREAK | NOT_END, + /* thch */ NOT_BEGIN | BREAK | NOT_END, + /* thgh */ NOT_BEGIN | BREAK | NOT_END, + /* thph */ NOT_BEGIN | BREAK | NOT_END, + /* thrh */ ILLEGAL_PAIR, + /* thsh */ NOT_BEGIN | BREAK | NOT_END, + /* thth */ ILLEGAL_PAIR, + /* thwh */ ILLEGAL_PAIR, + /* thqu */ NOT_BEGIN | BREAK | NOT_END, + /* thck */ ILLEGAL_PAIR, + /* wha */ BEGIN | NOT_END, + /* whb */ ILLEGAL_PAIR, + /* whc */ ILLEGAL_PAIR, + /* whd */ ILLEGAL_PAIR, + /* whe */ BEGIN | NOT_END, + /* whf */ ILLEGAL_PAIR, + /* whg */ ILLEGAL_PAIR, + /* whh */ ILLEGAL_PAIR, + /* whi */ BEGIN | NOT_END, + /* whj */ ILLEGAL_PAIR, + /* whk */ ILLEGAL_PAIR, + /* whl */ ILLEGAL_PAIR, + /* whm */ ILLEGAL_PAIR, + /* whn */ ILLEGAL_PAIR, + /* who */ BEGIN | NOT_END, + /* whp */ ILLEGAL_PAIR, + /* whr */ ILLEGAL_PAIR, + /* whs */ ILLEGAL_PAIR, + /* wht */ ILLEGAL_PAIR, + /* whu */ ILLEGAL_PAIR, + /* whv */ ILLEGAL_PAIR, + /* whw */ ILLEGAL_PAIR, + /* whx */ ILLEGAL_PAIR, + /* why */ BEGIN | NOT_END, + /* whz */ ILLEGAL_PAIR, + /* whch */ ILLEGAL_PAIR, + /* whgh */ ILLEGAL_PAIR, + /* whph */ ILLEGAL_PAIR, + /* whrh */ ILLEGAL_PAIR, + /* whsh */ ILLEGAL_PAIR, + /* whth */ ILLEGAL_PAIR, + /* whwh */ ILLEGAL_PAIR, + /* whqu */ ILLEGAL_PAIR, + /* whck */ ILLEGAL_PAIR, + /* qua */ ANY_COMBINATION, + /* qub */ ILLEGAL_PAIR, + /* quc */ ILLEGAL_PAIR, + /* qud */ ILLEGAL_PAIR, + /* que */ ANY_COMBINATION, + /* quf */ ILLEGAL_PAIR, + /* qug */ ILLEGAL_PAIR, + /* quh */ ILLEGAL_PAIR, + /* qui */ ANY_COMBINATION, + /* quj */ ILLEGAL_PAIR, + /* quk */ ILLEGAL_PAIR, + /* qul */ ILLEGAL_PAIR, + /* qum */ ILLEGAL_PAIR, + /* qun */ ILLEGAL_PAIR, + /* quo */ ANY_COMBINATION, + /* qup */ ILLEGAL_PAIR, + /* qur */ ILLEGAL_PAIR, + /* qus */ ILLEGAL_PAIR, + /* qut */ ILLEGAL_PAIR, + /* quu */ ILLEGAL_PAIR, + /* quv */ ILLEGAL_PAIR, + /* quw */ ILLEGAL_PAIR, + /* qux */ ILLEGAL_PAIR, + /* quy */ ILLEGAL_PAIR, + /* quz */ ILLEGAL_PAIR, + /* quch */ ILLEGAL_PAIR, + /* qugh */ ILLEGAL_PAIR, + /* quph */ ILLEGAL_PAIR, + /* qurh */ ILLEGAL_PAIR, + /* qush */ ILLEGAL_PAIR, + /* quth */ ILLEGAL_PAIR, + /* quwh */ ILLEGAL_PAIR, + /* ququ */ ILLEGAL_PAIR, + /* quck */ ILLEGAL_PAIR, + /* cka */ NOT_BEGIN | BREAK | NOT_END, + /* ckb */ NOT_BEGIN | BREAK | NOT_END, + /* ckc */ NOT_BEGIN | BREAK | NOT_END, + /* ckd */ NOT_BEGIN | BREAK | NOT_END, + /* cke */ NOT_BEGIN | BREAK | NOT_END, + /* ckf */ NOT_BEGIN | BREAK | NOT_END, + /* ckg */ NOT_BEGIN | BREAK | NOT_END, + /* ckh */ NOT_BEGIN | BREAK | NOT_END, + /* cki */ NOT_BEGIN | BREAK | NOT_END, + /* ckj */ NOT_BEGIN | BREAK | NOT_END, + /* ckk */ NOT_BEGIN | BREAK | NOT_END, + /* ckl */ NOT_BEGIN | BREAK | NOT_END, + /* ckm */ NOT_BEGIN | BREAK | NOT_END, + /* ckn */ NOT_BEGIN | BREAK | NOT_END, + /* cko */ NOT_BEGIN | BREAK | NOT_END, + /* ckp */ NOT_BEGIN | BREAK | NOT_END, + /* ckr */ NOT_BEGIN | BREAK | NOT_END, + /* cks */ NOT_BEGIN, + /* ckt */ NOT_BEGIN | BREAK | NOT_END, + /* cku */ NOT_BEGIN | BREAK | NOT_END, + /* ckv */ NOT_BEGIN | BREAK | NOT_END, + /* ckw */ NOT_BEGIN | BREAK | NOT_END, + /* ckx */ ILLEGAL_PAIR, + /* cky */ NOT_BEGIN, + /* ckz */ NOT_BEGIN | BREAK | NOT_END, + /* ckch */ NOT_BEGIN | BREAK | NOT_END, + /* ckgh */ NOT_BEGIN | BREAK | NOT_END, + /* ckph */ NOT_BEGIN | BREAK | NOT_END, + /* ckrh */ ILLEGAL_PAIR, + /* cksh */ NOT_BEGIN | BREAK | NOT_END, + /* ckth */ NOT_BEGIN | BREAK | NOT_END, + /* ckwh */ ILLEGAL_PAIR, + /* ckqu */ NOT_BEGIN | BREAK | NOT_END, + /* ckck */ ILLEGAL_PAIR +}; + + + + +#ifdef RAN_DEBUG +main (argc, argv) +int argc; +char *argv[]; +{ + register int argno; + register long seed; + register unsigned short int pwlen; + register unsigned short int minimum; + int number_of_words; + boolean no_legal_words; + register char *unhyphenated_word; + register char *hyphenated_word; + time_t ltime; + +#ifdef B1 + int algorithm = 0; +#endif + + number_of_words = 1; + no_legal_words = FALSE; + seed = 0L; + pwlen = 8; + minimum = 6; + + for (argno = 0; argno < argc; argno++) + { + if (argv[argno][0] == '-') + switch (argv[argno][1]) + { +#ifdef B1 + case 'a': + algorithm = atoi (&argv[argno][2]); + break; +#endif + case 's': + seed = atol (&argv[argno][2]); + if (seed == 0L) + seed = 1L; + set_seed(seed); + break; + case 'l': + pwlen = abs (atoi (&argv[argno][2])); + if (pwlen < 1) + pwlen = 8; + break; + case 'm': + minimum = abs (atoi (&argv[argno][2])); + if (minimum < 1) + minimum = 1; + break; + case 'n': + no_legal_words = TRUE; + break; + } + else + number_of_words = atoi (argv[argno]); + if (number_of_words < 1) + number_of_words = 1; + } + + /* + * During debugging (RAN_DEBUG is set), we generate the seed +from here + * rather than the first entry to randomword() . + */ + if (seed == 0L){ + time(<ime); + set_seed((long) ltime); + } + + if (minimum > pwlen) + { + (void) fflush(stdout); + (void) fprintf (stderr, "minimum (%u) new password length +cannot exceed maximum (%u)\n", (uint) minimum, (uint) pwlen); + (void) fflush(stderr); + exit (1); + } + (void) fflush(stderr); + (void) fprintf (stdout, "(New password will be between %u and +%u characters long)\n", (uint) minimum, (uint) pwlen); + (void) fflush (stdout); + for (argno = 1; argno <= number_of_words; argno++) + { + unhyphenated_word = calloc (sizeof (char), pwlen + 1); + hyphenated_word = calloc (sizeof (char), 2 * pwlen); +#ifdef B1 + switch (algorithm) { + default: + case 0: + (void) randomword (unhyphenated_word, hyphenated_word, +minimum, pwlen, no_legal_words, 0L); + (void) fflush(stderr); + (void) fprintf (stdout, "%s (%s)\n", unhyphenated_word, +hyphenated_word); + break; + case 1: + (void) randomchars (unhyphenated_word, minimum, pwlen, +no_legal_words, 0L); + (void) fflush(stderr); + (void) fprintf (stdout, "%s\n", unhyphenated_word); + break; + case 2: + (void) randomletters (unhyphenated_word, minimum, pwlen, +no_legal_words, 0L); + (void) fflush(stderr); + (void) fprintf (stdout, "%s\n", unhyphenated_word); + break; + } +#else + (void) randomword (unhyphenated_word, hyphenated_word, +minimum, pwlen, no_legal_words, 0L); + (void) fflush(stderr); + (void) fprintf (stdout, "%s (%s)\n", unhyphenated_word, +hyphenated_word); +#endif + (void) fflush (stdout); + free (unhyphenated_word); + free (hyphenated_word); + } +} +#endif + + +#ifdef B1 +/* + * Randomchars will generate a random string and place it in the + * buffer word. The word must be pre-allocated. The words +generated + * will have sizes between minlen and maxlen. If restrict is TRUE, + * words will not be generated that appear as login names or as +entries + * in the on-line dictionary. The seed is used on first use of the +routine. + * The length of the word is returned, or -1 if there were an error + * (length settings are wrong or dictionary checking could not be +done). + * The seed is used on first use of the routine. + */ +int +randomchars(string, minlen, maxlen, restrict, seed) + register char *string; + register unsigned short int minlen; + register unsigned short int maxlen; + register boolean restrict; + long seed; +{ + register int loop_count; + register unsigned short int string_size; + register unsigned short int build; + static been_here_before = FALSE; + + /* + * Execute this upon startup. This initializes the + * environment, including seed'ing the random number + * generator and loading the on-line dictionary. + */ + if (!been_here_before) + { + been_here_before = TRUE; + +#ifndef RAN_DEBUG + set_seed(seed); +#endif + } + /* + * Check for minlen > maxlen. This is an error. + */ + if (minlen > maxlen) + return (-1); + + + loop_count = 0; + string_size = get_random(minlen, maxlen); + + do { + for (build = 0; build < string_size; build++) { + string[build] = (char) get_random((unsigned short +int) '!', + (unsigned short int) '~'); + } + + + + + restrict = 0; + + loop_count ++; + } + while (restrict && (loop_count <= MAX_UNACCEPTABLE)); + + string[string_size] = '\0'; + + return string_size; +} + + +/* + * Randomletters will generate a random string of letters and place +it in the + * buffer word. The word must be pre-allocated. The words +generated + * will have sizes between minlen and maxlen. If restrict is TRUE, + * words will not be generated that appear as login names or as +entries + * in the on-line dictionary. The seed is used on first use of the +routine. + * The length of the word is returned, or -1 if there were an error + * (length settings are wrong or dictionary checking could not be +done). + * The seed is used on first use of the routine. + */ +int +randomletters(string, minlen, maxlen, restrict, seed) + register char *string; + register unsigned short int minlen; + register unsigned short int maxlen; + register boolean restrict; + long seed; +{ + register int loop_count; + register unsigned short int string_size; + register unsigned short int build; + static been_here_before = FALSE; + + /* + * Execute this upon startup. This initializes the + * environment, including seed'ing the random number + * generator and loading the on-line dictionary. + */ + if (!been_here_before) + { + been_here_before = TRUE; + +#ifndef RAN_DEBUG + set_seed(seed); +#endif + } + /* + * Check for minlen > maxlen. This is an error. + */ + if (minlen > maxlen) + return (-1); + + + loop_count = 0; + string_size = get_random(minlen, maxlen); + + do { + for (build = 0; build < string_size; build++) { + string[build] = (char) get_random((unsigned short +int) 'a', (unsigned short int) 'z'); + } + + + + + restrict = 0; + + loop_count ++; + } + while (restrict && (loop_count <= MAX_UNACCEPTABLE)); + + string[string_size] = '\0'; + + return string_size; +} +#endif + + +/* + * Randomword will generate a random word and place it in the + * buffer word. Also, the hyphenated word will be placed into + * the buffer hyphenated_word. Both word and hyphenated_word must + * be pre-allocated. The words generated will have sizes between + * minlen and maxlen. If restrict is TRUE, words will not be +generated that + * appear as login names or as entries in the on-line dictionary. + * This algorithm was initially worded out by Morrie Gasser in +1975. + * Any changes here are minimal so that as many word combinations + * can be produced as possible (and thus keep the words random). + * The seed is used on first use of the routine. + * The length of the unhyphenated word is returned, or -1 if there + * were an error (length settings are wrong or dictionary checking + * could not be done. + */ +int +randomword (word, hyphenated_word, minlen, maxlen, restrict, seed) +register char *word; +register char *hyphenated_word; +register unsigned short int minlen; +register unsigned short int maxlen; +register boolean restrict; +long seed; +{ + register int pwlen; + register int loop_count; + static been_here_before = FALSE; + + /* + * Execute this upon startup. This initializes the + * environment, including seed'ing the random number + * generator and loading the on-line dictionary. + */ + if (!been_here_before) + { + been_here_before = TRUE; + + +#ifndef RAN_DEBUG + set_seed(seed); +#endif + } + + /* + * Check for minlen>maxlen. This is an error. + * and a length of 0. + */ + if (minlen > maxlen) + return (-1); + + /* + * Check for zero length words. This is technically not an error, + * so we take the short cut and return a null word and a length of +0. + */ + if (maxlen == 0) + { + word[0] = '\0'; + hyphenated_word[0] = '\0'; + return (0); + } + + /* + * Continue finding words until the criteria are satisfied. + * The criteria are, if restrict is set, that if the word appears + * as either a login name or as part of the on-line dictionary, + * throw out the word and look for another. + */ + loop_count = 0; + + do + { + /* + * Get a random word. Its length is a random quantity + * from with the limits specified in the call to + * randomword(). + */ + pwlen = get_word (word, hyphenated_word, get_random (minlen, +maxlen)); + + + + + + restrict = 0; + + loop_count++; + } + while (restrict && (loop_count <= MAX_UNACCEPTABLE)); + + if (restrict) { + (void) fflush(stdout); + (void) fprintf(stderr, "could not find acceptable random +password\n"); + (void) fflush(stderr); + exit(1); + } + + return (pwlen); +} + + +/* + * This is the routine that returns a random word -- as + * yet unchecked against the passwd file or the dictionary. + * It collects random syllables until a predetermined + * word length is found. If a retry threshold is reached, + * another word is tried. Given that the random number + * generator is uniformly distributed, eventually a word + * will be found if the retry limit is adequately large enough. + */ +static int +get_word (word, hyphenated_word, pwlen) +char *word; +char *hyphenated_word; +unsigned short int pwlen; +{ + register unsigned short int word_length; + register unsigned short int syllable_length; + register char *new_syllable; + register unsigned short int *syllable_units; + register unsigned short int word_size; + register unsigned short int word_place; + int unsigned short *word_units; + int unsigned short syllable_size; + int unsigned tries; + + /* + * Keep count of retries. + */ + tries = 0; + + /* + * The length of the word in characters. + */ + word_length = 0; + + /* + * The length of the word in character units (each of which is +one or + * two characters long. + */ + word_size = 0; + + /* + * Initialize the array storing the word units. Since we know +the + * length of the word, we only need one of that length. This +method is + * preferable to a static array, since it allows us flexibility +in + * choosing arbitrarily long word lengths. Since a word can +contain one + * syllable, we should make syllable_units, the array holding +the + * analogous units for an individual syllable, the same length. +No + * explicit rule limits the length of syllables, but digram +rules and + * heuristics do so indirectly. + */ + word_units = + (unsigned short int *) + calloc (sizeof (unsigned short int), pwlen); + syllable_units = + (unsigned short int *) + calloc (sizeof (unsigned short int), pwlen); + new_syllable = + calloc (sizeof (unsigned short int), pwlen); + + /* + * Find syllables until the entire word is constructed. + */ + while (word_length < pwlen) + { + /* + * Get the syllable and find its length. + */ + (void) get_syllable (new_syllable, pwlen - word_length, +syllable_units, &syllable_size); + syllable_length = strlen (new_syllable); + + /* + * Append the syllable units to the word units. + */ + for (word_place = 0; word_place <= syllable_size; +word_place++) + word_units[word_size + word_place] = +syllable_units[word_place]; + word_size += syllable_size + 1; + + /* + * If the word has been improperly formed, throw out + * the syllable. The checks performed here are those + * that must be formed on a word basis. The other + * tests are performed entirely within the syllable. + * Otherwise, append the syllable to the word and + * append the syllable to the hyphenated version of + * the word. + */ + if (improper_word (word_units, word_size) || + ((word_length == 0) && + have_initial_y (syllable_units, syllable_size)) || + ((word_length + syllable_length == pwlen) && + have_final_split (syllable_units, syllable_size))) + word_size -= syllable_size + 1; + else + { + if (word_length == 0) + { + (void) strcpy (word, new_syllable); + (void) strcpy (hyphenated_word, new_syllable); + } + else + { + (void) strcat (word, new_syllable); + (void) strcat (hyphenated_word, "-"); + (void) strcat (hyphenated_word, new_syllable); + } + word_length += syllable_length; + } + + /* + * Keep track of the times we have tried to get + * syllables. If we have exceeded the threshold, + * reinitialize the pwlen and word_size variables, clear + * out the word arrays, and start from scratch. + */ + tries++; + if (tries > MAX_RETRIES) + { + word_length = 0; + word_size = 0; + tries = 0; + (void) strcpy (word, ""); + (void) strcpy (hyphenated_word, ""); + } + } + + /* + * The units arrays and syllable storage are internal to this + * routine. Since the caller has no need for them, we + * release the space. + */ + free ((char *) new_syllable); + free ((char *) syllable_units); + free ((char *) word_units); + + return ((int) word_length); +} + + + +/* + * Check that the word does not contain illegal combinations + * that may span syllables. Specifically, these are: + * 1. An illegal pair of units between syllables. + * 2. Three consecutive vowel units. + * 3. Three consecutive consonant units. + * The checks are made against units (1 or 2 letters), not against + * the individual letters, so three consecutive units can have + * the length of 6 at most. + */ +static boolean +improper_word (units, word_size) +register unsigned short int *units; +register unsigned short int word_size; +{ + register unsigned short int unit_count; + register boolean failure; + + failure = FALSE; + + for (unit_count = 0; !failure && (unit_count < word_size); + unit_count++) + { + /* + * Check for ILLEGAL_PAIR. This should have been caught + * for units within a syllable, but in some cases it + * would have gone unnoticed for units between syllables + * (e.g., when saved_unit's in get_syllable() were not + * used). + */ + if ((unit_count != 0) && + (digram[units[unit_count - 1]][units[unit_count]] & + ILLEGAL_PAIR)) + failure = TRUE; + + /* + * Check for consecutive vowels or consonants. Because + * the initial y of a syllable is treated as a consonant + * rather than as a vowel, we exclude y from the first + * vowel in the vowel test. The only problem comes when + * y ends a syllable and two other vowels start the next, + * like fly-oint. Since such words are still + * pronounceable, we accept this. + */ + if (!failure && (unit_count >= 2)) + { + /* + * Vowel check. + */ + if ((((rules[units[unit_count - 2]].flags & VOWEL) && + !(rules[units[unit_count - 2]].flags & + ALTERNATE_VOWEL)) && + (rules[units[unit_count - 1]].flags & VOWEL) && + (rules[units[unit_count]].flags & VOWEL)) || + /* + * Consonant check. + */ + (!(rules[units[unit_count - 2]].flags & VOWEL) && + !(rules[units[unit_count - 1]].flags & VOWEL) && + !(rules[units[unit_count]].flags & VOWEL))) + failure = TRUE; + } + } + + return (failure); +} + + +/* + * Treating y as a vowel is sometimes a problem. Some words + * get formed that look irregular. One special group is when + * y starts a word and is the only vowel in the first syllable. + * The word ycl is one example. We discard words like these. + */ +static boolean +have_initial_y (units, unit_size) +register unsigned short int *units; +register unsigned short int unit_size; +{ + register unsigned short int unit_count; + register unsigned short int vowel_count; + register unsigned short int normal_vowel_count; + + vowel_count = 0; + normal_vowel_count = 0; + + for (unit_count = 0; unit_count <= unit_size; unit_count++) + /* + * Count vowels. + */ + if (rules[units[unit_count]].flags & VOWEL) + { + vowel_count++; + + /* + * Count the vowels that are not: 1. y, 2. at the start of + * the word. + */ + if (!(rules[units[unit_count]].flags & ALTERNATE_VOWEL) +|| + (unit_count != 0)) + normal_vowel_count++; + } + + return ((vowel_count <= 1) && (normal_vowel_count == 0)); +} + + +/* + * Besides the problem with the letter y, there is one with + * a silent e at the end of words, like face or nice. We + * allow this silent e, but we do not allow it as the only + * vowel at the end of the word or syllables like ble will + * be generated. + */ +static boolean +have_final_split (units, unit_size) +register unsigned short int *units; +register unsigned short int unit_size; +{ + register unsigned short int unit_count; + register unsigned short int vowel_count; + + vowel_count = 0; + + /* + * Count all the vowels in the word. + */ + for (unit_count = 0; unit_count <= unit_size; unit_count++) + if (rules[units[unit_count]].flags & VOWEL) + vowel_count++; + + /* + * Return TRUE iff the only vowel was e, found at the end if +the + * word. + */ + return ((vowel_count == 1) && + (rules[units[unit_size]].flags & NO_FINAL_SPLIT)); +} + + +/* + * Generate next unit to password, making sure that it follows + * these rules: + * 1. Each syllable must contain exactly 1 or 2 consecutive + * vowels, where y is considered a vowel. + * 2. Syllable end is determined as follows: + * a. Vowel is generated and previous unit is a + * consonant and syllable already has a vowel. In + * this case, new syllable is started and already + * contains a vowel. + * b. A pair determined to be a "break" pair is encountered. + * In this case new syllable is started with second unit + * of this pair. + * c. End of password is encountered. + * d. "begin" pair is encountered legally. New syllable is + * started with this pair. + * e. "end" pair is legally encountered. New syllable has + * nothing yet. + * 3. Try generating another unit if: + * a. third consecutive vowel and not y. + * b. "break" pair generated but no vowel yet in current + * or previous 2 units are "not_end". + * c. "begin" pair generated but no vowel in syllable + * preceding begin pair, or both previous 2 pairs are + * designated "not_end". + * d. "end" pair generated but no vowel in current syllable + * or in "end" pair. + * e. "not_begin" pair generated but new syllable must + * begin (because previous syllable ended as defined in + * 2 above). + * f. vowel is generated and 2a is satisfied, but no +syllable + * break is possible in previous 3 pairs. + * g. Second and third units of syllable must begin, and + * first unit is "alternate_vowel". + */ +static char * +get_syllable (syllable, pwlen, units_in_syllable, syllable_length) +char *syllable; +unsigned short int pwlen; +unsigned short int *units_in_syllable; +unsigned short int *syllable_length; +{ + register unsigned short int unit; + register short int current_unit; + register unsigned short int vowel_count; + register boolean rule_broken; + register boolean want_vowel; + register boolean want_another_unit; + int unsigned tries; + int unsigned short last_unit; + int short length_left; + unsigned short int hold_saved_unit; + static unsigned short int saved_unit; + static unsigned short int saved_pair[2]; + + /* + * This is needed if the saved_unit is tries and the syllable +then + * discarded because of the retry limit. Since the saved_unit +is OK and + * fits in nicely with the preceding syllable, we will always +use it. + */ + hold_saved_unit = saved_unit; + + /* + * Loop until valid syllable is found. + */ + do + { + /* + * Try for a new syllable. Initialize all pertinent + * syllable variables. + */ + tries = 0; + saved_unit = hold_saved_unit; + (void) strcpy (syllable, ""); + vowel_count = 0; + current_unit = 0; + length_left = (short int) pwlen; + want_another_unit = TRUE; + + /* + * This loop finds all the units for the syllable. + */ + do + { + want_vowel = FALSE; + + /* + * This loop continues until a valid unit is found for the + * current position within the syllable. + */ + do + { + /* + * If there are saved_unit's from the previous + * syllable, use them up first. + */ + if (saved_unit != 0) + { + /* + * If there were two saved units, the first is + * guaranteed (by checks performed in the previous + * syllable) to be valid. We ignore the checks + * and place it in this syllable manually. + */ + if (saved_unit == 2) + { + units_in_syllable[0] = saved_pair[1]; + if (rules[saved_pair[1]].flags & VOWEL) + vowel_count++; + current_unit++; + (void) strcpy (syllable, +rules[saved_pair[1]].unit_code); + length_left -= strlen (syllable); + } + + /* + * The unit becomes the last unit checked in the + * previous syllable. + */ + unit = saved_pair[0]; + + /* + * The saved units have been used. Do not try to + * reuse them in this syllable (unless this +particular + * syllable is rejected at which point we start to +rebuild + * it with these same saved units. + */ + saved_unit = 0; + } + else + /* + * If we don't have to scoff the saved units, + * we generate a random one. If we know it has + * to be a vowel, we get one rather than looping + * through until one shows up. + */ + if (want_vowel) + unit = random_unit (VOWEL); + else + unit = random_unit (NO_SPECIAL_RULE); + + length_left -= (short int) strlen +(rules[unit].unit_code); + + /* + * Prevent having a word longer than expected. + */ + if (length_left < 0) + rule_broken = TRUE; + else + rule_broken = FALSE; + + /* + * First unit of syllable. This is special because the + * digram tests require 2 units and we don't have that +yet. + * Nevertheless, we can perform some checks. + */ + if (current_unit == 0) + { + /* + * If the shouldn't begin a syllable, don't + * use it. + */ + if (rules[unit].flags & NOT_BEGIN_SYLLABLE) + rule_broken = TRUE; + else + /* + * If this is the last unit of a word, + * we have a one unit syllable. Since each + * syllable must have a vowel, we make sure + * the unit is a vowel. Otherwise, we + * discard it. + */ + if (length_left == 0) + if (rules[unit].flags & VOWEL) + want_another_unit = FALSE; + else + rule_broken = TRUE; + } + else + { + /* + * There are some digram tests that are + * universally true. We test them out. + */ + + /* + * Reject ILLEGAL_PAIRS of units. + */ + if ((ALLOWED (ILLEGAL_PAIR)) || + + /* + * Reject units that will be split between syllables + * when the syllable has no vowels in it. + */ + (ALLOWED (BREAK) && (vowel_count == 0)) || + + /* + * Reject a unit that will end a syllable when no + * previous unit was a vowel and neither is this one. + */ + (ALLOWED (END) && (vowel_count == 0) && + !(rules[unit].flags & VOWEL))) + rule_broken = TRUE; + + if (current_unit == 1) + { + /* + * Reject the unit if we are at te starting digram +of + * a syllable and it does not fit. + */ + if (ALLOWED (NOT_BEGIN)) + rule_broken = TRUE; + } + else + { + /* + * We are not at the start of a syllable. + * Save the previous unit for later tests. + */ + last_unit = units_in_syllable[current_unit - 1]; + + /* + * Do not allow syllables where the first letter is +y + * and the next pair can begin a syllable. This may + * lead to splits where y is left alone in a +syllable. + * Also, the combination does not sound to good even + * if not split. + */ + if (((current_unit == 2) && + (ALLOWED (BEGIN)) && + (rules[units_in_syllable[0]].flags & + ALTERNATE_VOWEL)) || + + /* + * If this is the last unit of a word, we +should + * reject any digram that cannot end a +syllable. + */ + (ALLOWED (NOT_END) && + (length_left == 0)) || + + /* + * Reject the unit if the digram it forms wants + * to break the syllable, but the resulting + * digram that would end the syllable is not + * allowed to end a syllable. + */ + (ALLOWED (BREAK) && + (digram[units_in_syllable + [current_unit - 2]] + [last_unit] & + NOT_END)) || + + /* + * Reject the unit if the digram it forms + * expects a vowel preceding it and there is + * none. + */ + (ALLOWED (PREFIX) && + !(rules[units_in_syllable + [current_unit - 2]].flags & + VOWEL))) + rule_broken = TRUE; + + /* + * The following checks occur when the current unit + * is a vowel and we are not looking at a word +ending + * with an e. + */ + if (!rule_broken && + (rules[unit].flags & VOWEL) && + ((length_left > 0) || + !(rules[last_unit].flags & + NO_FINAL_SPLIT))) + + /* + * Don't allow 3 consecutive vowels in a + * syllable. Although some words formed like +this + * are OK, like beau, most are not. + */ + if ((vowel_count > 1) && + (rules[last_unit].flags & VOWEL)) + rule_broken = TRUE; + else + /* + * Check for the case of + * vowels-consonants-vowel, which is only + * legal if the last vowel is an e and we are + * the end of the word (wich is not + * happening here due to a previous check. + */ + if ((vowel_count != 0) && + !(rules[last_unit].flags & VOWEL)) + { + /* + * Try to save the vowel for the next + * syllable, but if the syllable left here + * is not proper (i.e., the resulting last + * digram cannot legally end it), just + * discard it and try for another. + */ + if (digram[units_in_syllable + [current_unit - 2]] + [last_unit] & + NOT_END) + rule_broken = TRUE; + else + { + saved_unit = 1; + saved_pair[0] = unit; + want_another_unit = FALSE; + } + } + } + + /* + * The unit picked and the digram formed are legal. + * We now determine if we can end the syllable. It +may, + * in some cases, mean the last unit(s) may be +deferred to + * the next syllable. We also check here to see if +the + * digram formed expects a vowel to follow. + */ + if (!rule_broken && want_another_unit) + { + /* + * This word ends in a silent e. + */ + if (((vowel_count != 0) && + (rules[unit].flags & NO_FINAL_SPLIT) && + (length_left == 0) && + !(rules[last_unit].flags & + VOWEL)) || + + /* + * This syllable ends either because the digram + * is an END pair or we would otherwise exceed + * the length of the word. + */ + (ALLOWED (END) || (length_left == 0))) + want_another_unit = FALSE; + else + /* + * Since we have a vowel in the syllable + * already, if the digram calls for the end of +the + * syllable, we can legally split it off. We +also + * make sure that we are not at the end of the + * dangerous because that syllable may not have + * vowels, or it may not be a legal syllable +end, + * and the retrying mechanism will loop +infinitely + * with the same digram. + */ + if ((vowel_count != 0) && (length_left > 0)) + { + /* + * If we must begin a syllable, we do so if + * the only vowel in THIS syllable is not part + * of the digram we are pushing to the next + * syllable. + */ + if (ALLOWED (BEGIN) && + (current_unit > 1) && + !((vowel_count == 1) && + (rules[last_unit].flags & + VOWEL))) + { + saved_unit = 2; + saved_pair[0] = unit; + saved_pair[1] = last_unit; + want_another_unit = FALSE; + } + else + if (ALLOWED (BREAK)) + { + saved_unit = 1; + saved_pair[0] = unit; + want_another_unit = FALSE; + } + } + else + if (ALLOWED (SUFFIX)) + want_vowel = TRUE; + } + } + + tries++; + + /* + * If this unit was illegal, redetermine the amount of + * letters left to go in the word. + */ + if (rule_broken) + length_left += (short int) strlen +(rules[unit].unit_code); + } + while (rule_broken && (tries <= MAX_RETRIES)); + + /* + * The unit fit OK. + */ + if (tries <= MAX_RETRIES) + { + /* + * If the unit were a vowel, count it in. + * However, if the unit were a y and appear + * at the start of the syllable, treat it + * like a constant (so that words like year can + * appear and not conflict with the 3 consecutive + * vowel rule. + */ + if ((rules[unit].flags & VOWEL) && + ((current_unit > 0) || + !(rules[unit].flags & ALTERNATE_VOWEL))) + vowel_count++; + + /* + * If a unit or units were to be saved, we must + * adjust the syllable formed. Otherwise, we + * append the current unit to the syllable. + */ + switch (saved_unit) + { + case 0: + units_in_syllable[current_unit] = unit; + (void) strcat (syllable, rules[unit].unit_code); + break; + case 1: + current_unit--; + break; + case 2: + (void) strcpy (&syllable[strlen (syllable) - + strlen (rules[last_unit]. + unit_code)], + ""); + length_left += (short int) strlen +(rules[last_unit].unit_code); + current_unit -= 2; + break; + } + } + else + /* + * Whoops! Too many tries. We set rule_broken so we can + * loop in the outer loop and try another syllable. + */ + rule_broken = TRUE; + + /* + * ...and the syllable length grows. + */ + *syllable_length = current_unit; + + current_unit++; + } + while ((tries <= MAX_RETRIES) && want_another_unit); + } + while (rule_broken || + illegal_placement (units_in_syllable, *syllable_length)); + + return (syllable); +} + + +/* + * This routine goes through an individual syllable and checks + * for illegal combinations of letters that go beyond looking + * at digrams. We look at things like 3 consecutive vowels or + * consonants, or syllables with consonants between vowels (unless + * one of them is the final silent e). + */ +static boolean +illegal_placement (units, pwlen) +register unsigned short int *units; +register unsigned short int pwlen; +{ + register unsigned short int vowel_count; + register unsigned short int unit_count; + register boolean failure; + + vowel_count = 0; + failure = FALSE; + + for (unit_count = 0; !failure && (unit_count <= pwlen); + unit_count++) + { + if (unit_count >= 1) + { + /* + * Don't allow vowels to be split with consonants in + * a single syllable. If we find such a combination + * (except for the silent e) we have to discard the + * syllable). + */ + if ((!(rules[units[unit_count - 1]].flags & VOWEL) && + (rules[units[unit_count]].flags & VOWEL) && + !((rules[units[unit_count]].flags & + NO_FINAL_SPLIT) && + (unit_count == pwlen)) && + (vowel_count != 0)) || + + /* + * Perform these checks when we have at least 3 units. + */ + ((unit_count >= 2) && + + /* + * Disallow 3 consecutive consonants. + */ + ((!(rules[units[unit_count - 2]].flags & VOWEL) && + !(rules[units[unit_count - 1]].flags & + VOWEL) && + !(rules[units[unit_count]].flags & + VOWEL)) || + + /* + * Disallow 3 consecutive vowels, where the +first is + * not a y. + */ + (((rules[units[unit_count - 2]].flags & + VOWEL) && + !((rules[units[0]].flags & + ALTERNATE_VOWEL) && + (unit_count == 2))) && + (rules[units[unit_count - 1]].flags & + VOWEL) && + (rules[units[unit_count]].flags & + VOWEL))))) + failure = TRUE; + } + + /* + * Count the vowels in the syllable. As mentioned somewhere + * above, exclude the initial y of a syllable. Instead, + * treat it as a consonant. + */ + if ((rules[units[unit_count]].flags & VOWEL) && + !((rules[units[0]].flags & ALTERNATE_VOWEL) && + (unit_count == 0) && (pwlen != 0))) + vowel_count++; + } + + return (failure); +} + + + +/* + * This is the standard random unit generating routine for + * get_syllable(). It does not reference the digrams, but + * assumes that it contains 34 units in a particular order. + * This routine attempts to return unit indexes with a distribution + * approaching that of the distribution of the 34 units in + * English. In order to do this, a random number (supposedly + * uniformly distributed) is used to do a table lookup into an + * array containing unit indices. There are 211 entries in + * the array for the random_unit entry point. The probability + * of a particular unit being generated is equal to the + * fraction of those 211 entries that contain that unit index. + * For example, the letter `a' is unit number 1. Since unit + * index 1 appears 10 times in the array, the probability of + * selecting an `a' is 10/211. + * + * Changes may be made to the digram table without affect to this + * procedure providing the letter-to-number correspondence of + * the units does not change. Likewise, the distribution of the + * 34 units may be altered (and the array size may be changed) + * in this procedure without affecting the digram table or any +other + * programs using the random_word subroutine. + */ +static unsigned short int numbers[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, + 7, 7, 7, 7, 7, 7, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 9, 9, 9, 9, 9, 9, 9, 9, + 10, 10, 10, 10, 10, 10, 10, 10, + 11, 11, 11, 11, 11, 11, + 12, 12, 12, 12, 12, 12, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 15, 15, 15, 15, 15, 15, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 17, 17, 17, 17, 17, 17, 17, 17, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 19, 19, 19, 19, 19, 19, + 20, 20, 20, 20, 20, 20, 20, 20, + 21, 21, 21, 21, 21, 21, 21, 21, + 22, + 23, 23, 23, 23, 23, 23, 23, 23, + 24, + 25, + 26, + 27, + 28, + 29, 29, + 30, + 31, + 32, + 33 +}; + + +/* + * This structure has a typical English frequency of vowels. + * The value of an entry is the vowel position (a=0, e=4, i=8, + * o=14, u=19, y=23) in the rules array. The number of times + * the value appears is the frequency. Thus, the letter "a" + * is assumed to appear 2/12 = 1/6 of the time. This array + * may be altered if better data is obtained. The routines that + * use vowel_numbers will adjust to the size difference +automatically. + */ +static unsigned short int vowel_numbers[] = +{ + 0, 0, 4, 4, 4, 8, 8, 14, 14, 19, 19, 23 +}; + + +/* + * Select a unit (a letter or a consonant group). If a vowel is + * expected, use the vowel_numbers array rather than looping +through + * the numbers array until a vowel is found. + */ +static unsigned short int +random_unit (type) +register unsigned short int type; +{ + register unsigned short int number; + + /* + * Sometimes, we are asked to explicitly get a vowel (i.e., if + * a digram pair expects one following it). This is a shortcut + * to do that and avoid looping with rejected consonants. + */ + if (type & VOWEL) + number = vowel_numbers[get_random (0, sizeof (vowel_numbers) +/ sizeof (unsigned short int))]; + else + /* + * Get any letter according to the English distribution. + */ + number = numbers[get_random (0, sizeof (numbers) / sizeof +(unsigned short int))]; + return (number); +} + + +/* + * This routine should return a uniformly distributed random number +between + * minlen and maxlen inclusive. The Electronic Code Book form of +DES is + * used to produce the random number. The inputs to DES are the +old pass- + * word and a pseudorandom key generated according to the procedure +out- + * lined in Appendix C of ANSI X9.17. +*/ + +static unsigned short int +get_random (minlen, maxlen) +register unsigned short int minlen; +register unsigned short int maxlen; +{ + return minlen + (unsigned short int) randint ((int) (maxlen - +minlen + 1)); +} + + +/* + * Produces a random number from 0 to n-1 . + */ +static unsigned int +randint(n) + int n; +{ + return ((unsigned int) (randfunc(n))); +} + + +/ * Set the seed. This routine will only set the seed once, even +if + * called from multiple sources. + */ +static void +set_seed(seed) + long seed; +{ + int been_here_before = 0; + + if (!been_here_before) { + been_here_before = 1; + srand(seed); + } +} + +/* takes in old password and calls program to generate random +number by + calling the DES function. This function is called many times. +It + asks for the old password the first time and then sends that +password + to the DES function on every successive call afterwards. */ + +static int randfunc(n) +int n; +{ + int i, len; + static char passwd[9]; + static boolean newpass=0; + if(!newpass) + { + printf("Please enter old password or input string: "); + gets(passwd); + printf("string entered: %s\n", passwd); + len = strlen(passwd); + for (i=len; i<8; i++) + passwd[i] = '0'; + printf("string padded: %s\n", passwd); + newpass=1; + } + return(descall(passwd, n)); +} + + +/* descall calls the pseudorandom key generator, random, described +in Appendix C of +ANSI 9.17 and puts the resulting value into the array key. The +arguments of random +indicate that odd parity should be generated and that the input +string is eight bytes +in length. The des routine, which uses key and the old password as +arguments, is then +called. The output from des, out, is then sent to the routine, +answer, for processing */ + + +descall(in, n) +unsigned char *in; +int n; +{ +unsigned char key[8]; +unsigned char out[8]; +int i; + +random(key, 1,); +setkey(0, 0, key); +des(in, out); +return (answer(out,n)); +} + +/* answer takes the array out and creates variable sum by adding + certain values within the array together. To get a number from +0 to + n-1, it returns sum mod n (sum%n) */ + +int answer(out,n) +unsigned char *out; +int n; +{ +unsigned int sum; +/* every time this function is called, it adds the first three +positions of + out to get sum.*/ + + sum = out[0] + out[1] +out[2]; + return (sum%n); +} + + +/**************************************************************** +************** + * DES.C +VERSION 4.00 * + +*---------------------------------------------------------------- +---------------------------------------* + * D A T A E N C R Y P T I O N S T A N D A R D + * + * FEDERAL INFORMATION PROCESSING STANDARDS PUBLICATION (FIPS PUB) +46-1 + +*---------------------------------------------------------------- +---------------------------------------* + * This software was produced at the National Institute of +Standards and Techology * + * (NIST) as a part of research efforts and for demonstration +purposes only. Our * + * primary goals in its design did not include widespread use +outside of * + * our own laboratories. Acceptance of this software implies that +you * + * agree to accept it as nonproprietary and unlicensed, not +supported by * + * NIST, and not carrying any warranty, either expressed or +implied, as to * + * its performance or fitness for any particular purpose. + * + +*---------------------------------------------------------------- +---------------------------------------* + * Cryptographic devices and technical data regarding them are +subject to * + * Federal Government export controls as specified in Title 22, +Code of * + * Federal Regulations, Parts 121 through 128. Cryptographic +devices * + * implementing the Data Encryption Standard (DES) and technical +data * + * regarding them must comply with these Federal regulations. + * + +*---------------------------------------------------------------- +---------------------------------------* + +***************************************************************** +*************/ + +#define BYTE unsigned char +#define INT unsigned int + +/**************************************************************** +************** + * SETKEY() Generate key schedule for given key and type of +cryption * + +***************************************************************** +*************/ + +/* PERMUTED CHOICE 1 (PC1) */ +INT PC1[] = { + 57,49,41,33,25,17, 9, + 1,58,50,42,34,26,18, + 10, 2,59,51,43,35,27, + 19,11, 3,60,52,44,36, + 63,55,47,39,31,23,15, + 7,62,54,46,38,30,22, + 14, 6,61,53,45,37,29, + 21,13, 5,28,20,12, 4, +}; + +/* Schedule of left shifts for C and D blocks */ +unsigned short shifts[] = { 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 }; + +/* PERMUTED CHOICE 2 (PC2) */ +INT PC2[] = { + 14,17,11,24, 1, 5, + 3,28,15, 6,21,10, + 23,19,12, 4,26, 8, + 16, 7,27,20,13, 2, + 41,52,31,37,47,55, + 30,40,51,45,33,48, + 44,49,39,56,34,53, + 46,42,50,36,29,32, +}; + +/* Key schedule of 16 48-bit subkeys generated from 64-bit key */ +BYTE KS[16][48]; + +setkey(sw1,sw2,pkey) +INT sw1; /* parity: 0=ignore,1=check */ +INT sw2; /* type cryption: 0=encrypt,1=decrypt */ +BYTE *pkey; /* 64-bit key packed into 8 bytes */ +{ + register INT i, j, k, t1, t2; + static BYTE key[64]; + static BYTE CD[56]; + + /* Double-check 'parity' parameter */ + if (sw1 != 0 && sw1 != 1) { + printf("\007*** setkey: bad parity parameter (%d) +***\n", sw1); + return(0); + } + + /* Double-check 'type of cryption' parameter */ + if (sw2 != 0 && sw2 != 1) { + printf("\007*** setkey: bad cryption parameter (%d) +***\n",sw2); + return(0); + } + + /* Unpack KEY from 8 bits/byte into 1 bit/byte */ + unpack8(pkey,key); + + /* Check for ODD key parity */ + if (sw1 == 1) { + for (i=0; i<64; i++) { + k = 1; + for (j=0; j<7; j++,i++) k = (k + key[i]) % 2; + if (key[i] != k) return(0); + } + } + + /* Permute unpacked key with PC1 to generate C and D */ + for (i=0; i<56; i++) CD[i] = key[PC1[i]-1]; + + /* Rotate and permute C and D to generate 16 subkeys */ + for (i=0; i<16; i++) { + /* Rotate C and D */ + for (j=0; j>3) & 1; + f[k+1] = (t>>2) & 1; + f[k+2] = (t>>1) & 1; + f[k+3] = t & 1; + } + for (j=0; j<32; j++) { + /* Copy R */ + t = LR[j+32]; + /* Permute f w/ P and XOR w/ L to generate new +R */ + LR[j+32] = LR[j] ^ f[P[j]-1]; + /* Copy original R to new L */ + LR[j] = t; + } + } + + /* Permute L and R with reverse IP-1 to generate output +block */ + for (j=0; j<64; j++) block[j] = LR[RFP[j]-1]; + + /* Pack data into 8 bits per byte */ + pack8(out,block); +} + + +/**************************************************************** +************** + * PACK8() Pack 64 bytes at 1 bit/byte into 8 bytes at 8 +bits/byte * + +***************************************************************** +*************/ + +pack8(packed,binary) +BYTE *packed; /* packed block ( 8 bytes at 8 bits/byte) */ +BYTE *binary; /* the unpacked block (64 bytes at 1 bit/byte) +*/ +{ + register INT i, j, k; + + for (i=0; i<8; i++) { + k = 0; + for (j=0; j<8; j++) k = (k<<1) + *binary++; + *packed++ = k; + } +} + +/**************************************************************** +************** + * UNPACK8() Unpack 8 bytes at 8 bits/byte into 64 bytes at 1 +bit/byte * + +***************************************************************** +*************/ + +unpack8(packed,binary) +BYTE *packed; /* packed block (8 bytes at 8 bits/byte) */ +BYTE *binary; /* unpacked block (64 bytes at 1 bit/byte) */ +{ + register INT i, j, k; + + for (i=0; i<8; i++) { + k = *packed++; + for (j=0; j<8; j++) *binary++ = (k>>(7-j)) & 01; + } +} + +#include + +#define BYTE unsigned char +#define INT unsigned int + +#define DECRYPT 1 +#define ENCRYPT 0 + +#define FALSE 0 +#define TRUE 1 + +#define SINGLE 1 +#define PAIR 2 + +#define IGNORE 0 +#define PKEYLEN 8 + +int krypt(int, int, int, BYTE *, int, BYTE *, BYTE *); +void random(BYTE *, int); +void set_parity(BYTE *, int); +void daytime(char *); +BYTE *bytncpy(BYTE *, BYTE *, int); +BYTE *bytnxor(BYTE *, BYTE *, BYTE *, int); + +/**************************************************************** +************** + * KRYPT() Encrypt/decrypt key or key pair + * + +***************************************************************** +*************/ + +int krypt(sw1,sw2,sw3,kek,sw4,ikey,okey) +int sw1; /* ODD parity: 0=ignore, 1=check & report */ +int sw2; /* type of cryption: 0=encrypt, 1=decrypt */ +int sw3; /* length of kek: 1=single, 2=pair */ +BYTE *kek; /* packed key-encrypting key */ +int sw4; /* length of key: 1=single, 2=pair */ +BYTE *ikey; /* packed input key */ +BYTE *okey; /* packed output key */ +{ + char tkey[PKEYLEN]; + + /* DOUBLE-CHECK PARAMETERS */ + if (sw3!=SINGLE && sw3!=PAIR) { + printf("krypt: bad kek length (%d)",sw3); + exit(1); + } + if (sw4!=SINGLE && sw4!=PAIR) { + printf("krypt: bad key length (%d)",sw4); + exit(1); + } + if (sw3==SINGLE && sw4==PAIR) + exit(1); + + if (!setkey(sw1,sw2,kek)) return(FALSE); + des(ikey,okey); + if (sw3==SINGLE && sw4==SINGLE) return(TRUE); /* single by +single */ + + if (!setkey(sw1,sw2^01,kek+PKEYLEN)) return(FALSE); + des(okey,tkey); + (void) setkey(sw1,sw2,kek); + des(tkey,okey); + if (sw4==SINGLE) return(TRUE); /* single by double */ + + (void) +krypt(sw1,sw2,PAIR,kek,SINGLE,ikey+PKEYLEN,okey+PKEYLEN); + return(TRUE); /* double by double */ +} + + +/**************************************************************** +************** + * RANDOM() Pseudorandom KEY and IV Generator. + * + +***************************************************************** +*************/ + +/* Random Key */ +static BYTE rndkey[PAIR*PKEYLEN] = +{0xE0,0x9A,0xA8,0x0F,0xAB,0x72,0x1C,0x3D, + +0x8F,0x7D,0xC9,0x9E,0x8F,0x02,0xB6,0x2A}; + +/* Seed */ +static BYTE seed[PKEYLEN] = +{0xCF,0x65,0xAE,0x7F,0xB1,0x79,0xBB,0xE3}; + +void random(dest,odd) +BYTE *dest; /* destination for random KEY or IV */ +int odd; /* generate ODD parity? 0=no, 1=yes */ +{ + BYTE dt[PKEYLEN]; /* date/time vector */ + BYTE i[PKEYLEN]; + BYTE j[PKEYLEN]; + BYTE r[PKEYLEN]; + + /* DOUBLE-CHECK PARAMETERS */ + if (odd!=FALSE && odd!=TRUE) { + printf("random: bad generate parity option (%d)", odd); + exit(1); + } + + /* GET DATE/TIME VECTOR */ + daytime(dt); + + /* I = eRNDKEY(DT) */ + (void) krypt(IGNORE,ENCRYPT,PAIR,rndkey,SINGLE,dt,i); + + /* R = eRNDKEY(I + V) */ + (void) bytnxor(j,i,seed,PKEYLEN); + (void) krypt(IGNORE,ENCRYPT,PAIR,rndkey,SINGLE,j,r); + + /* new seed = eRNDKEY(R + I) */ + (void) bytnxor(j,i,r,PKEYLEN); + (void) krypt(IGNORE,ENCRYPT,PAIR,rndkey,SINGLE,j,seed); + + /* GENERATE ODD PARITY, IF NEEDED */ + if (odd) set_parity(r,SINGLE); + + (void) bytncpy(dest,r,PKEYLEN); +} + +/**************************************************************** +************** + * SET_PARITY() Set ODD parity + * + +***************************************************************** +*************/ + +void set_parity(key,len) +BYTE *key; /* packed 64 or 128-bit key */ +int len; /* key length: 1=SINGLE, 2=PAIR */ +{ + int i, j, parity, mask; + + /* DOUBLE-CHECK PARAMETER */ + if (len!=SINGLE && len!=PAIR) { + printf("set_parity: bad len parameter (%d)", len); + exit(1); + } + + for (i=0; i<(len*PKEYLEN); i++) { + parity = 1; + mask = 2; + for (j=0; j<7; j++) { + parity = (parity + ((key[i] & mask) >> (j+1))) % 2; + mask = 2 * mask; + } + if (parity==0) key[i] = key[i] & 0xfe;/* clear */ + if (parity==1) key[i] = key[i] | 0x01;/* set */ + } +} + + +void daytime(dt) +char *dt; /* dt[8] = 64-bit block based on date & time */ +{ + register i; + int tt[8]; + /* struct regval { int ax, bx, cx, dx, si, di, ds, es; }; + struct regval call_regs, ret_regs; */ + union REGS call_regs; + union REGS ret_regs; + + call_regs.x.ax = 0x2a00; /* GET DATE */ + intdos(&call_regs, &ret_regs); + tt[0] = ret_regs.x.cx - 1900; /* cx = year */ + tt[1] = (ret_regs.x.dx & 0xff00) >> 8; /* dh = month */ + tt[2] = ret_regs.x.dx & 0x00ff; /* dl = day */ + + call_regs.x.ax = 0x2c00; /* GET TIME */ + intdos(&call_regs, &ret_regs); + tt[3] = (ret_regs.x.cx & 0xff00) >> 8; /* ch = hours */ + tt[4] = ret_regs.x.cx & 0x00ff; /* cl = minutes */ + tt[5] = (ret_regs.x.dx & 0xff00) >> 8; /* dh = seconds */ + tt[6] = 0; + tt[7] = 0; + + for (i=0;i<8;i++) + dt[i] = (char) tt[i]; +} + +/**************************************************************** +************** + * BYTNCPY() Copy block of packed BYTEs + * + +***************************************************************** +*************/ + +BYTE *bytncpy(dest,src,len) /* return pointer to destination +block */ +BYTE *dest; /* destination block */ +BYTE *src; /* source block */ +int len; /* number of bytes */ +{ + while (len-- > 0) *dest++ = *src++; + return(dest); +} + +/**************************************************************** +************** + * BYTNXOR() XOR blocks of packed BYTEs + * + +***************************************************************** +*************/ + +BYTE *bytnxor(dest,src1,src2,len) /* return ptr to destination +block */ +BYTE *dest; /* destination block */ +BYTE *src1; /* source block 1 */ +BYTE *src2; /* source block 2 */ +int len; /* number of BYTEs */ +{ + while (len-- > 0) *dest++ = *src1++ ^ *src2++; + return(dest); +} + \ No newline at end of file diff --git a/www/Metainformationen/Ideen.txt b/www/Metainformationen/Ideen.txt new file mode 100644 index 0000000..4e7a75f --- /dev/null +++ b/www/Metainformationen/Ideen.txt @@ -0,0 +1,4 @@ +- RSS Feed für Seitenupdates + + +output_add_rewrite_var('var', 'value'); \ No newline at end of file diff --git a/www/Metainformationen/Kram/alte_uni_index.php b/www/Metainformationen/Kram/alte_uni_index.php new file mode 100644 index 0000000..1fb8a12 --- /dev/null +++ b/www/Metainformationen/Kram/alte_uni_index.php @@ -0,0 +1,50 @@ + + + + + + tilman.de - Uni allgemein + + + + + + + + + + + +
+
+ tilman.de + +
+
+
+ +
+

+ Ich studiere seit dem Wintersemester 2001/02 an der Freien Universität Berlin Informatik auf Diplom mit Nebenfach Publizistik und Kommunikationswissenschaft. +

+ +

Arbeiten, Paper, Infos:

+

+ Wikipedia: Erfassung von komplexen und kontroversen Sachverhalten in kollaborativen Hypertextumgebungen (Ausarbeitung im Rahmen des Seminars "Online-Dienste") +

+

+ Architektur und Konzepte von Eclipse 3 (Ausarbeitung im Rahmen des Seminars "Komponentenbasierte Softwareentwicklung") +

+

+ Pair Programming (Ausarbeitung im Rahmen des Seminars "Agile Softwareprozesse") +

+ +

+ Ansonsten liegt manchmal auch was in meinem Home-Verzeichnis auf dem Uni-Server. +

+
+ +
+ + + diff --git a/www/Metainformationen/Kram/entwurf.html b/www/Metainformationen/Kram/entwurf.html new file mode 100644 index 0000000..d9e43e2 --- /dev/null +++ b/www/Metainformationen/Kram/entwurf.html @@ -0,0 +1,88 @@ + + + + + + tilman.de + + + + + + + + + +
+ Valid XHTML 1.0! +
+ +
+

tilman.de

+
+
+ +
+ +
+

Tilman is the name

+

Auch im Netz

+
+ Hast du ein Schlagwort von mir bekommen? + Hiermit geht's direkt auf die entsprechende Seite: +
+ +
+ + + + + +
+ gesichert +

Fotos & Persönliches

+

+ Pottenstein
+ Musical
+ Israel
+ Sonstiges +

+
+ +
+ gesichert +

Bookmarks

+ gesichert +

Data Safe

+
+ + + +
+ +
 
+
+ + + + \ No newline at end of file diff --git a/www/Metainformationen/Kram/htaccess b/www/Metainformationen/Kram/htaccess new file mode 100644 index 0000000..a85e053 --- /dev/null +++ b/www/Metainformationen/Kram/htaccess @@ -0,0 +1,6 @@ +DirectoryIndex index.html index.php +#AddType application/x-httpd-php5 .html +#Alias /siarp /home/strato/www/ti/www.tilman.de/htdocs/info/ + +# aus .htaccess_verschiebung +#RedirectMatch 302 ^/~(.*) http://page.inf.fu-berlin.de/~$1 diff --git a/www/Metainformationen/Kram/imageviewer.php b/www/Metainformationen/Kram/imageviewer.php new file mode 100644 index 0000000..e1ff254 --- /dev/null +++ b/www/Metainformationen/Kram/imageviewer.php @@ -0,0 +1,33 @@ +'; +?> diff --git a/www/Metainformationen/Kram/index.php b/www/Metainformationen/Kram/index.php new file mode 100644 index 0000000..4754bcb --- /dev/null +++ b/www/Metainformationen/Kram/index.php @@ -0,0 +1,508 @@ + + + + + + + + + + + + + Öffentliches Recht + + + + + + +zurück zur Liste

\n"; + + // massive Login-Versuche abblocken + sleep(1); + + // Passwort checken + if ($_POST['passwort'] == $passwort) { + + $already_exists = file_exists($_FILES['datei']['name']); + + if (($already_exists) and (!$overwrite == "on")) { + echo "

Fehler: Datei mit Namen " . htmlspecialchars($_FILES['datei']['name']) . " ist bereits vorhanden. (Überschreiben abgeschaltet.)

\n"; + } + else { + + $filename = convertFilename($_FILES['datei']['name']); + + if (move_uploaded_file($_FILES['datei']['tmp_name'], $filename)) { + + echo "

Die Datei " . htmlspecialchars($_FILES['datei']['name']) . " wurde übertragen.

\n"; + + $liste = readFileList(); + + if ($liste !== false) { + + if ($liste !== NULL) { + foreach($liste as $v) $s[] = $v[0]; + $idx = array_search($filename, $s); + } + +// FUNKY! + if (gettype($idx) == 'integer') { // Dateiname bereits in Liste enthalten + + $lines = file('index.php'); + + if ($lines) { + + $fp = fopen("index.php","w+"); // Index-Datei zum Schreiben öffnen + $i = 0; + + while (!strstr(substr($lines[$i],0,14), "* Filelist:")) { + fputs($fp, $lines[$i]); + $i++; + } + + while (!strstr(substr($lines[$i], 0, strpos($lines[$i], '//')), $filename)) { + fputs($fp, $lines[$i]); + $i++; + } + + $i++; + fputs($fp, $filename."//".$_POST['beschreibung']."\n"); + + while ($i < count($lines)) { + fputs($fp, $lines[$i]); + $i++; + } + + fclose($fp); + + echo "

Tabelleneintrag wurde aktualisiert.

\n"; + } + else { + echo "

Fehler: index.php wurde nicht gefunden!

\n"; + } + } + else { // Dateiname noch nicht in Liste enthalten + + $lines = file('index.php'); + + if ($lines) { + + $fp = fopen("index.php","w+"); // Index-Datei zum Schreiben öffnen + $i = 0; + + while (!strstr(substr($lines[$i],0,14), "* Filelist:")) { + fputs($fp, $lines[$i]); + $i++; + } + + while (!strstr($lines[$i], "*/")) { + fputs($fp, $lines[$i]); + $i++; + } + + fputs($fp, $filename."//".$_POST['beschreibung']."\n"); + + while ($i < count($lines)) { + fputs($fp, $lines[$i]); + $i++; + } + + fclose($fp); + echo "

Tabelleneintrag wurde erzeugt.

\n"; + } + else { + echo "

Fehler: index.php wurde nicht gefunden!

\n"; + } + } + } + else { + echo "

Fehler: Liste mit Dateien konnte nicht gefunden werden.

\n"; + } + + } + else { + echo "

Fehler: Datei konnte nicht übertragen werden!

\n"; + echo "

\n"; + print_r($_FILES); + echo "\n

\n"; + } + } + } + else { // Passwort falsch + echo "

Fehler: Falsches Passwort!

\n"; + } + } + + //-- Passwortabfrage vor Löschen ------------------------------------------------------------------- + + else if ($_GET['action'] == 'deleteCheck') { + + echo "

zurück zur Liste

\n"; + + if (isset($_REQUEST['delButton'])) { + + echo "
\n"; + echo " Auswahl löschen:
\n"; + echo "
\n"; + echo " \n"; + + reset($_REQUEST['delButton']); + foreach ($_REQUEST['delButton'] as $idx => $filename) { + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + } + + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo "
".$filename."
\n"; + echo "

\n"; + echo "   Passwort:\n"; + echo "
\n"; + echo "
\n"; + echo " 1) { + echo "Dateien löschen\" />\n"; + } + else { + echo "Datei löschen\" />\n"; + } + echo "
\n"; + echo "
\n"; + echo "
\n"; + + } else { + echo "

Fehler: Keine Datei ausgewählt.

\n"; + } + + } + + //-- Löschen --------------------------------------------------------------------------------------- + + else if ($_GET['action'] == 'delete') { + + echo "

zurück zur Liste

\n"; + + // massive Login-Versuche abblocken + sleep(1); + + // Passwort checken + if ($_POST['passwort'] == $passwort) { + + if (isset($_REQUEST['delButton'])) { + + reset($_REQUEST['delButton']); + + foreach ($_REQUEST['delButton'] as $idx => $filename) { + + echo "

Lösche $filename...

\n"; + unlink($filename); + + $lines = file('index.php'); + + if ($lines) { + + $fp = fopen("index.php","w+"); // Index-Datei zum Schreiben öffnen + $i = 0; + + while (!strstr(substr($lines[$i],0,14), "* Filelist:")) { + fputs($fp, $lines[$i]); + $i++; + } + + while (!strstr(substr($lines[$i], 0, strpos($lines[$i], '//')), $filename)) { + fputs($fp, $lines[$i]); + $i++; + } + + $i++; + + while ($i < count($lines)) { + fputs($fp, $lines[$i]); + $i++; + } + + fclose($fp); + echo "

Tabelleneintrag wurde entfernt.

\n"; + } + else { + echo "

Fehler: index.php wurde nicht gefunden!

\n"; + } + } + } + else { + echo "

Fehler: Keine Dateien ausgewählt.

\n"; + } + } + else { // Passwort falsch + echo "

Fehler: Falsches Passwort!

\n"; + } + } + + //-- Anzeigen -------------------------------------------------------------------------------------- + + else { +?> + + + +
+
+ + + + + + + + +\n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + echo " \n"; + } + } + + } + else { + echo "

Fehler: Liste mit Dateien konnte nicht gefunden werden.

\n"; + } + +?> + + + + + + +
">Datei">Beschreibung">GrößeAuswahl
". $eintrag[0] ."".$eintrag[1]."".getSizeAsString($eintrag[2])."
+ Dateien,
+ Lister v2.9j +
+ +
+
+ +
+ + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + +
+ Valid HTML 4.0! +
+ + diff --git a/www/Metainformationen/Kram/lock.gif b/www/Metainformationen/Kram/lock.gif new file mode 100644 index 0000000..32735ae Binary files /dev/null and b/www/Metainformationen/Kram/lock.gif differ diff --git a/www/Metainformationen/Kram/neue todo.txt b/www/Metainformationen/Kram/neue todo.txt new file mode 100644 index 0000000..f9c0538 --- /dev/null +++ b/www/Metainformationen/Kram/neue todo.txt @@ -0,0 +1,6 @@ +- Charles überarbeiten +- ALP-Wiki von Puxus +- Musical + +---------- +alte ToDo (vom Server) importieren! \ No newline at end of file diff --git a/www/Metainformationen/Kram/scripts.php b/www/Metainformationen/Kram/scripts.php new file mode 100644 index 0000000..27493f3 --- /dev/null +++ b/www/Metainformationen/Kram/scripts.php @@ -0,0 +1,41 @@ + »  0) { + for ($j = 0; $j < ($len - ($i+1)); $j++) { + $breadcrumbs = $breadcrumbs.UP_DIR; + } + } + else { + $breadcrumbs = $breadcrumbs."./"; + } + + $breadcrumbs = $breadcrumbs."\">".ucfirst($nodes[$i]).""; + } + + if (!$pagetitle == "") { + /*$breadcrumbs = $breadcrumbs." » ".$pagetitle."";*/ + $breadcrumbs = $breadcrumbs." » ".$pagetitle.""; + } + + return $breadcrumbs; + } +?> diff --git a/www/Metainformationen/Kram/stylesheet.css b/www/Metainformationen/Kram/stylesheet.css new file mode 100644 index 0000000..d502009 --- /dev/null +++ b/www/Metainformationen/Kram/stylesheet.css @@ -0,0 +1,21 @@ + +body { background-color:#FFFFFF; color:#000000; font-family: Georgia, Arial, sans-serif; } + +h2 { font-size: 115% } +h3 { font-size: 100% } + +a:link { color:#000000; text-decoration: none; } /* noch nicht besuchte Ziele */ +a:visited { color:#000000; text-decoration: none; } /* besuchte Ziele */ +a:hover { text-decoration: underline; } /* Verweise bei "MouseOver" */ +/* a:active { CSS-Eigenschaft:Wert; ... } /* Angeklickte Verweise */ +/* a:focus { CSS-Eigenschaft:Wert; ... } /* Verweise, die Fokus erhalten */ + +.topicbox { float:left; background-color:#CCCCCC; margin: 1%; padding: 1ex; height: 18ex; width: 32ex; } +/* .topicbox:hover { background-color:#A6A6A6; } */ +.topicbox h2 { font-size: 115%; font-weight: normal; margin: 0px; margin-bottom: 1ex; } +.topicbox p { font-size: 85%; font-weight: normal; margin: 0px; margin-bottom: 1ex; margin-left: 2ex; } + +.search { font-size: 75%; } + +#pagetitle { color:#AA0000; } +#pagetitle h1 { margin-bottom: 0ex; } diff --git a/www/Metainformationen/Kram/testpage.php b/www/Metainformationen/Kram/testpage.php new file mode 100644 index 0000000..73e3e85 --- /dev/null +++ b/www/Metainformationen/Kram/testpage.php @@ -0,0 +1,81 @@ + + + + + + + + + + + +Testpage + + + + + + +

Impressum gemäß §6 TDG und §10 MDStV:

+ +

Tilman Walther
+ Lechtaler Weg 10
+ 12209 Berlin

+ +

tilman@tilman.de

+ +

+ + + + +

+ + + diff --git a/www/Metainformationen/ToDo.txt b/www/Metainformationen/ToDo.txt new file mode 100644 index 0000000..860825e --- /dev/null +++ b/www/Metainformationen/ToDo.txt @@ -0,0 +1,26 @@ +RECENT: +- Sessions: Timeout programmieren oder doch PHP-Sessions benutzen +- Fotos: Fahrradtour verlinken +- Logout: Anmelden -> Abmelden +- login soll (optional) zum referer weiterleiten +- Sessions: Optional auch über Cookies (Achtung: login und imageviewer hängen session_id direkt an) +- Keywords und Metatags einfügen +- Paper mit Links und so einstellen +- Israel-Fotos in alte Israel-Webseite einfügen +- Sicherheit checken + +INTEGRIEREN: +- Lister.php +- Alp-Wiki (Refactor: # -> .) +- BackupDB +- EXIF +- Charles + +DATEIOPERATIONEN +- Downloadfunktionen: http://www.php-faq.de/q/q-datei-download.html +- Upload-Platz, streng gesichert + + +BÜCHER: + Hanser S. 231 + Moehrke S. 449 (9.6.2) \ No newline at end of file diff --git a/www/Metainformationen/Veraltet/adressen.php b/www/Metainformationen/Veraltet/adressen.php new file mode 100644 index 0000000..2679b73 --- /dev/null +++ b/www/Metainformationen/Veraltet/adressen.php @@ -0,0 +1,150 @@ + + +Insert failed: '.mysql_error().'

'; + } + } + + if (isset($_GET['delete'])) { + $delete = mysql_query('DELETE FROM adressen WHERE id='.$_GET['delete']); + if (!$delete) { + echo '

Could not delete '.$_GET['delete'].': '.mysql_error().'

'; + } + } + + $orderby = 'id'; + if (isset($_GET['orderby'])) { + $orderby = urldecode($_GET['orderby']); + } + + $result = mysql_query('SELECT * FROM adressen ORDER BY "'.$orderby.'" ASC'); + if (!$result) { + die('Database error: Unable to get table (order by: '.$orderby.')'); + } + + function getSortingLink($row, $title) { + return ''.$title.''; + } +?> + +
+ + + + + + + + + + + + + + + + + + + +"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t"; + } +?> +
\t\t\t\t".$row['id']."\t\t\t\t\t\t\t".$row['Vorname']."\t\t\t\t\t\t\t".$row['Nachname']."\t\t\t\t\t\t\t".$row['Anschrift']."\t\t\t\t\t\t\t".$row['PLZ']."\t\t\t\t\t\t\t".$row['Ort']."\t\t\t\t\t\t\t".$row['Telefon']."\t\t\t\t\t\t\t".$row['Tel_alt']."\t\t\t\t\t\t\t".$row['Tel_Mobil']."\t\t\t\t\t\t\t".$row['eMail']."\t\t\t\t\t\t\t".$row['eMail_alt']."\t\t\t\t\t\t\t".$row['Geburtstag']."\t\t\t\t\t\t\t".$row['Gruppe']."\t\t\t\t\t\t\t".$row['Bemerkung']."\t\t\t\t\t\t\tedit\t\t\t\t\t\t\tdel\t\t\t
+ +
+
+ + + + + + + + + + + + + + + +
VornameNachnameAnschriftPLZOrt
+ + + + + + + + + + + + + + + +
Tel. privatTel. geschäftlichTel. mobilE-Mail privatE-Mail geschäftlich
+ + + + + + + + + + + +
GeburtstagGruppeBemerkung
+ +
+ +
+
+
+ + diff --git a/www/Metainformationen/Veraltet/getresource.php b/www/Metainformationen/Veraltet/getresource.php new file mode 100644 index 0000000..c3f038b --- /dev/null +++ b/www/Metainformationen/Veraltet/getresource.php @@ -0,0 +1,50 @@ + diff --git a/www/Metainformationen/Veraltet/secure2.php b/www/Metainformationen/Veraltet/secure2.php new file mode 100644 index 0000000..7b9f290 --- /dev/null +++ b/www/Metainformationen/Veraltet/secure2.php @@ -0,0 +1,45 @@ +"; + echo "You entered $PHP_AUTH_PW as your password.

"; +} +?> + + + +

+
+ + diff --git a/www/Metainformationen/Veraltet/vorlage_secure.php b/www/Metainformationen/Veraltet/vorlage_secure.php new file mode 100644 index 0000000..b3785b5 --- /dev/null +++ b/www/Metainformationen/Veraltet/vorlage_secure.php @@ -0,0 +1,26 @@ + + +
+ Geschütztes Bild: +
+ + diff --git a/www/Metainformationen/Vorlagen/.htaccess b/www/Metainformationen/Vorlagen/.htaccess new file mode 100644 index 0000000..03688ee --- /dev/null +++ b/www/Metainformationen/Vorlagen/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/www/Metainformationen/Vorlagen/siegel.gif b/www/Metainformationen/Vorlagen/siegel.gif new file mode 100644 index 0000000..2d7ad2d Binary files /dev/null and b/www/Metainformationen/Vorlagen/siegel.gif differ diff --git a/www/Metainformationen/Vorlagen/vorlage.php b/www/Metainformationen/Vorlagen/vorlage.php new file mode 100644 index 0000000..25a81bf --- /dev/null +++ b/www/Metainformationen/Vorlagen/vorlage.php @@ -0,0 +1,17 @@ + + +
+
+ + diff --git a/www/Metainformationen/Vorlagen/vorlage_slideshow.php b/www/Metainformationen/Vorlagen/vorlage_slideshow.php new file mode 100644 index 0000000..fa0ae53 --- /dev/null +++ b/www/Metainformationen/Vorlagen/vorlage_slideshow.php @@ -0,0 +1,22 @@ + + +
+ +
+ + diff --git a/www/Metainformationen/local_xampp_httpd.conf b/www/Metainformationen/local_xampp_httpd.conf new file mode 100644 index 0000000..fb61e95 --- /dev/null +++ b/www/Metainformationen/local_xampp_httpd.conf @@ -0,0 +1,569 @@ +# httpd.conf von XAMPP unter Windows (Bolide02) +# editierte Stellen sind markiert mit "tilman" + +# +# This is the main Apache HTTP server configuration file. It contains the +# configuration directives that give the server its instructions. +# See for detailed information. +# In particular, see +# +# for a discussion of each configuration directive. +# +# Do NOT simply read the instructions in here without understanding +# what they do. They're here only as hints or reminders. If you are unsure +# consult the online docs. You have been warned. +# +# Configuration and logfile names: If the filenames you specify for many +# of the server's control files begin with "/" (or "drive:/" for Win32), the +# server will use that explicit path. If the filenames do *not* begin +# with "/", the value of ServerRoot is prepended -- so "logs/foo.log" +# with ServerRoot set to "C:/Programme/xampp/apache" will be interpreted by the +# server as "C:/Programme/xampp/apache/logs/foo.log". +# +# NOTE: Where filenames are specified, you must use forward slashes +# instead of backslashes (e.g., "c:/apache" instead of "c:\apache"). +# If a drive letter is omitted, the drive on which Apache.exe is located +# will be used by default. It is recommended that you always supply +# an explicit drive letter in absolute paths, however, to avoid +# confusion. +# + +# ThreadsPerChild: constant number of worker threads in the server process +# MaxRequestsPerChild: maximum number of requests a server process serves +ThreadsPerChild 250 +MaxRequestsPerChild 0 + +# +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# Do not add a slash at the end of the directory path. If you point +# ServerRoot at a non-local disk, be sure to point the LockFile directive +# at a local disk. If you wish to share the same ServerRoot for multiple +# httpd daemons, you will need to change at least LockFile and PidFile. +# +ServerRoot "C:/Programme/xampp/apache" + +# +# Listen: Allows you to bind Apache to specific IP addresses and/or +# ports, instead of the default. See also the +# directive. +# +# Change this to Listen on specific IP addresses as shown below to +# prevent Apache from glomming onto all bound IP addresses (0.0.0.0) +# +#Listen 12.34.56.78:80 +Listen 80 + +# +# Dynamic Shared Object (DSO) Support +# +# To be able to use the functionality of a module which was built as a DSO you +# have to place corresponding `LoadModule' lines at this location so the +# directives contained in it are actually available _before_ they are used. +# Statically compiled modules (those listed by `httpd -l') do not need +# to be loaded here. +# +# Example: +# LoadModule foo_module modules/mod_foo.so +# +LoadModule actions_module modules/mod_actions.so +LoadModule alias_module modules/mod_alias.so +LoadModule asis_module modules/mod_asis.so +LoadModule auth_basic_module modules/mod_auth_basic.so +#LoadModule auth_digest_module modules/mod_auth_digest.so +#LoadModule authn_anon_module modules/mod_authn_anon.so +#LoadModule authn_dbm_module modules/mod_authn_dbm.so +LoadModule authn_default_module modules/mod_authn_default.so +LoadModule authn_file_module modules/mod_authn_file.so +#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so +#LoadModule authz_dbm_module modules/mod_authz_dbm.so +LoadModule authz_default_module modules/mod_authz_default.so +LoadModule authz_groupfile_module modules/mod_authz_groupfile.so +LoadModule authz_host_module modules/mod_authz_host.so +LoadModule authz_user_module modules/mod_authz_user.so +#LoadModule autoindex_module modules/mod_autoindex.so # don't load because of mod_autoindex_color.so +#LoadModule bucketeer_module modules/mod_bucketeer.so +#LoadModule cache_module modules/mod_cache.so +#LoadModule disk_cache_module modules/mod_disk_cache.so +#LoadModule file_cache_module modules/mod_file_cache.so +#LoadModule mem_cache_module modules/mod_mem_cache.so +#LoadModule cern_meta_module modules/mod_cern_meta.so +#LoadModule charset_lite_module modules/mod_charset_lite.so +LoadModule cgi_module modules/mod_cgi.so +LoadModule dav_module modules/mod_dav.so +LoadModule dav_fs_module modules/mod_dav_fs.so +#LoadModule deflate_module modules/mod_deflate.so +LoadModule dir_module modules/mod_dir.so +#LoadModule dumpio_module modules/mod_dumpio.so +LoadModule env_module modules/mod_env.so +#LoadModule expires_module modules/mod_expires.so +#LoadModule ext_filter_module modules/mod_ext_filter.so +#LoadModule headers_module modules/mod_headers.so +#LoadModule ident_module modules/mod_ident.so +#LoadModule imagemap_module modules/mod_imagemap.so +LoadModule include_module modules/mod_include.so +LoadModule info_module modules/mod_info.so +LoadModule isapi_module modules/mod_isapi.so +LoadModule ldap_module modules/mod_ldap.so +#LoadModule logio_module modules/mod_logio.so +LoadModule log_config_module modules/mod_log_config.so +#LoadModule log_forensic_module modules/mod_log_forensic.so +LoadModule mime_module modules/mod_mime.so +#LoadModule mime_magic_module modules/mod_mime_magic.so +LoadModule negotiation_module modules/mod_negotiation.so +#LoadModule proxy_module modules/mod_proxy.so +#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so +#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so +#LoadModule proxy_connect_module modules/mod_proxy_connect.so +#LoadModule proxy_http_module modules/mod_proxy_http.so +#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so +#LoadModule rewrite_module modules/mod_rewrite.so +LoadModule setenvif_module modules/mod_setenvif.so +#LoadModule speling_module modules/mod_speling.so +LoadModule status_module modules/mod_status.so +#LoadModule unique_id_module modules/mod_unique_id.so +#LoadModule userdir_module modules/mod_userdir.so +#LoadModule usertrack_module modules/mod_usertrack.so +#LoadModule version_module modules/mod_version.so +#LoadModule vhost_alias_module modules/mod_vhost_alias.so +LoadModule ssl_module modules/mod_ssl.so + +LoadModule autoindex_color_module modules/mod_autoindex_color.so +#LoadModule mysql_auth_module modules/mod_auth_mysql.so +#LoadModule auth_remote_module modules/mod_auth_remote.so +#LoadModule sspi_auth_module modules/mod_auth_sspi.so +#LoadModule log_sql_module modules/mod_log_sql.so +#LoadModule log_sql_mysql_module modules/mod_log_sql_mysql.so +# +# LoadModule log_sql_ssl_module modules/mod_log_sql_ssl.so +# +#LoadModule proxy_html_module modules/mod_proxy_html.so +#LoadModule xmlns_module modules/mod_xmlns.so +#LoadModule proxy_xml_module modules/mod_proxy_xml.so +#LoadModule bw_module modules/mod_bw.so + +# 'Main' server configuration +# +# The directives in this section set up the values used by the 'main' +# server, which responds to any requests that aren't handled by a +# definition. These values also provide defaults for +# any containers you may define later in the file. +# +# All of these directives may appear inside containers, +# in which case these default settings will be overridden for the +# virtual host being defined. +# + +# +# ServerAdmin: Your address, where problems with the server should be +# e-mailed. This address appears on some server-generated pages, such +# as error documents. e.g. admin@your-domain.com +# +ServerAdmin admin@localhost + +# +# ServerName gives the name and port that the server uses to identify itself. +# This can often be determined automatically, but we recommend you specify +# it explicitly to prevent problems during startup. +# +# If your host doesn't have a registered DNS name, enter its IP address here. +# +ServerName localhost:80 + +# +# DocumentRoot: The directory out of which you will serve your +# documents. By default, all requests are taken from this directory, but +# symbolic links and aliases may be used to point to other locations. +# +#DocumentRoot "C:/Programme/xampp/htdocs" +#tilman +DocumentRoot "D:/Eigene Dateien/eclipse workspace/Homepage" + +# +# Each directory to which Apache has access can be configured with respect +# to which services and features are allowed and/or disabled in that +# directory (and its subdirectories). +# +# First, we configure the "default" to be a very restrictive set of +# features. +# + + Options FollowSymLinks + AllowOverride None + Order deny,allow + Deny from all + + +# +# Note that from this point forward you must specifically allow +# particular features to be enabled - so if something's not working as +# you might expect, make sure that you have specifically enabled it +# below. +# + +# +# This should be changed to whatever you set DocumentRoot to. +# +# +#tilman + + # + # Possible values for the Options directive are "None", "All", + # or any combination of: + # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews + # + # Note that "MultiViews" must be named *explicitly* --- "Options All" + # doesn't give it to you. + # + # The Options directive is both complicated and important. Please see + # http://httpd.apache.org/docs/2.2/mod/core.html#options + # for more information. + # + Options Indexes FollowSymLinks Includes ExecCGI + + # + # AllowOverride controls what directives may be placed in .htaccess files. + # It can be "All", "None", or any combination of the keywords: + # Options FileInfo AuthConfig Limit + # + AllowOverride None + + # + # Controls who can get stuff from this server. + # + Order allow,deny + Allow from all + + + +#tilman +# +# DirectoryIndex index.php +# Options All +# AllowOverride All +# Order allow,deny +# Allow from all +# + + +# +# DirectoryIndex: sets the file that Apache will serve if a directory +# is requested. +# + + DirectoryIndex index.php index.php4 index.php3 index.cgi index.pl index.html index.htm index.shtml index.phtml + + +# +# The following lines prevent .htaccess and .htpasswd files from being +# viewed by Web clients. +# + + Order allow,deny + Deny from all + + +# +# ErrorLog: The location of the error log file. +# If you do not specify an ErrorLog directive within a +# container, error messages relating to that virtual host will be +# logged here. If you *do* define an error logfile for a +# container, that host's errors will be logged there and not here. +# +ErrorLog logs/error.log + +# +# LogLevel: Control the number of messages logged to the error_log. +# Possible values include: debug, info, notice, warn, error, crit, +# alert, emerg. +# +LogLevel warn + + + # + # The following directives define some format nicknames for use with + # a CustomLog directive (see below). + # + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined + LogFormat "%h %l %u %t \"%r\" %>s %b" common + + + # You need to enable mod_logio.c to use %I and %O + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio + + + # + # The location and format of the access logfile (Common Logfile Format). + # If you do not define any access logfiles within a + # container, they will be logged here. Contrariwise, if you *do* + # define per- access logfiles, transactions will be + # logged therein and *not* in this file. + # + CustomLog logs/access.log common + + # + # If you prefer a logfile with access, agent, and referer information + # (Combined Logfile Format) you can use the following directive. + # + #CustomLog logs/access.log combined + + + + # + # Redirect: Allows you to tell clients about documents that used to + # exist in your server's namespace, but do not anymore. The client + # will make a new request for the document at its new location. + # Example: + # Redirect permanent /foo http://www.example.com/bar + + # + # Alias: Maps web paths into filesystem paths and is used to + # access content that does not live under the DocumentRoot. + # Example: + # Alias /webpath /full/filesystem/path + # + # If you include a trailing / on /webpath then the server will + # require it to be present in the URL. You will also likely + # need to provide a section to allow access to + # the filesystem path. + + # + # ScriptAlias: This controls which directories contain server scripts. + # ScriptAliases are essentially the same as Aliases, except that + # documents in the target directory are treated as applications and + # run by the server when requested rather than as documents sent to the + # client. The same rules about trailing "/" apply to ScriptAlias + # directives as to Alias. + # + ScriptAlias /cgi-bin/ "C:/Programme/xampp/cgi-bin/" + + + +# +# "C:/Programme/xampp/cgi-bin" should be changed to whatever your ScriptAliased +# CGI directory exists, if you have that configured. +# + + AllowOverride None + Options None + Order allow,deny + Allow from all + + +# +# Apache parses all CGI scripts for the shebang line by default. +# This comment line, the first line of the script, consists of the symbols +# pound (#) and exclamation (!) followed by the path of the program that +# can execute this specific script. For a perl script, with perl.exe in +# the C:\Program Files\Perl directory, the shebang line should be: + + #!c:/program files/perl/perl + +# Note you _must_not_ indent the actual shebang line, and it must be the +# first line of the file. Of course, CGI processing must be enabled by +# the appropriate ScriptAlias or Options ExecCGI directives for the files +# or directory in question. +# +# However, Apache on Windows allows either the Unix behavior above, or can +# use the Registry to match files by extention. The command to execute +# a file of this type is retrieved from the registry by the same method as +# the Windows Explorer would use to handle double-clicking on a file. +# These script actions can be configured from the Windows Explorer View menu, +# 'Folder Options', and reviewing the 'File Types' tab. Clicking the Edit +# button allows you to modify the Actions, of which Apache 1.3 attempts to +# perform the 'Open' Action, and failing that it will try the shebang line. +# This behavior is subject to change in Apache release 2.0. +# +# Each mechanism has it's own specific security weaknesses, from the means +# to run a program you didn't intend the website owner to invoke, and the +# best method is a matter of great debate. +# +# To enable the this Windows specific behavior (and therefore -disable- the +# equivilant Unix behavior), uncomment the following directive: +# +#ScriptInterpreterSource registry +# +# The directive above can be placed in individual blocks or the +# .htaccess file, with either the 'registry' (Windows behavior) or 'script' +# (Unix behavior) option, and will override this server default option. +# + +# +# DefaultType: the default MIME type the server will use for a document +# if it cannot otherwise determine one, such as from filename extensions. +# If your server contains mostly text or HTML documents, "text/plain" is +# a good value. If most of your content is binary, such as applications +# or images, you may want to use "application/octet-stream" instead to +# keep browsers from trying to display binary files as though they are +# text. +# +DefaultType text/plain + + + # + # TypesConfig points to the file containing the list of mappings from + # filename extension to MIME-type. + # + TypesConfig conf/mime.types + + # + # AddType allows you to add to or override the MIME configuration + # file specified in TypesConfig for specific file types. + # + #AddType application/x-gzip .tgz + # + # AddEncoding allows you to have certain browsers uncompress + # information on the fly. Note: Not all browsers support this. + # + #AddEncoding x-compress .Z + #AddEncoding x-gzip .gz .tgz + # + # If the AddEncoding directives above are commented-out, then you + # probably should define those extensions to indicate media types: + # + AddType application/x-compress .Z + AddType application/x-gzip .gz .tgz + + # + # AddHandler allows you to map certain file extensions to "handlers": + # actions unrelated to filetype. These can be either built into the server + # or added with the Action directive (see below) + # + # To use CGI scripts outside of ScriptAliased directories: + # (You will also need to add "ExecCGI" to the "Options" directive.) + # + AddHandler cgi-script .cgi + + # For files that include their own HTTP headers: + #AddHandler send-as-is asis + + # For server-parsed imagemap files: + #AddHandler imap-file map + + # For type maps (negotiated resources): + #AddHandler type-map var + + # + # Filters allow you to process content before it is sent to the client. + # + # To parse .shtml files for server-side includes (SSI): + # (You will also need to add "Includes" to the "Options" directive.) + # + #AddType text/html .shtml + #AddOutputFilter INCLUDES .shtml + + +# +# The mod_mime_magic module allows the server to use various hints from the +# contents of the file itself to determine its type. The MIMEMagicFile +# directive tells the module where the hint definitions are located. +# +#MIMEMagicFile conf/magic + +# +# Customizable error responses come in three flavors: +# 1) plain text 2) local redirects 3) external redirects +# +# Some examples: +#ErrorDocument 500 "The server made a boo boo." +#ErrorDocument 404 /missing.html +#ErrorDocument 404 "/cgi-bin/missing_handler.pl" +#ErrorDocument 402 http://www.example.com/subscription_info.html +# + +# +# EnableMMAP and EnableSendfile: On systems that support it, +# memory-mapping or the sendfile syscall is used to deliver +# files. This usually improves server performance, but must +# be turned off when serving from networked-mounted +# filesystems or if support for these functions is otherwise +# broken on your system. +# +#EnableMMAP off +#EnableSendfile off + +# Supplemental configuration +# +# The configuration files in the conf/extra/ directory can be +# included to add extra features or to modify the default configuration of +# the server, or you may simply copy their contents here and change as +# necessary. + +# XAMPP specific settings +Include conf/extra/httpd-xampp.conf + +# Server-pool management (MPM specific) +# Include conf/extra/httpd-mpm.conf + +# Multi-language error messages +Include conf/extra/httpd-multilang-errordoc.conf + +# Fancy directory listings +Include conf/extra/httpd-autoindex.conf + +# Language settings +Include conf/extra/httpd-languages.conf + +# User home directories +Include conf/extra/httpd-userdir.conf + +# Real-time info on requests and configuration +Include conf/extra/httpd-info.conf + +# Virtual hosts +Include conf/extra/httpd-vhosts.conf + +# Local access to the Apache HTTP Server Manual +Include conf/extra/httpd-manual.conf + +# Distributed authoring and versioning (WebDAV) +Include conf/extra/httpd-dav.conf + +# Various default settings +Include conf/extra/httpd-default.conf + +# Secure (SSL/TLS) connections +Include conf/extra/httpd-ssl.conf +# +# Note: The following must must be present to support +# starting without SSL on platforms with no /dev/random equivalent +# but a statically compiled-in mod_ssl. +# + +SSLRandomSeed startup builtin +SSLRandomSeed connect builtin + + +# -- tilman ------------------------------------------------------------------ +#Alias /homepage "D:/Eigene Dateien/eclipse workspace/Homepage" +# +# Order allow,deny +# Allow from all +# + +Alias /tykes "D:/Eigene Dateien/eclipse workspace/TykesHome" + + Order allow,deny + Allow from all + + +Alias /bizit "D:/Eigene Dateien/eclipse workspace/bizIT" + + Order allow,deny + Allow from all + + +Alias /scivis "D:/Eigene Dateien/eclipse workspace/SciVis" + + Order allow,deny + Allow from all + + +Alias /xampp "C:/Programme/xampp/htdocs/xampp" + + Order allow,deny + Allow from all + +# ---------------------------------------------------------------------------- + diff --git a/www/Metainformationen/media/bilder/siegel.gif b/www/Metainformationen/media/bilder/siegel.gif new file mode 100644 index 0000000..2d7ad2d Binary files /dev/null and b/www/Metainformationen/media/bilder/siegel.gif differ diff --git a/www/Metainformationen/media/index.php b/www/Metainformationen/media/index.php new file mode 100644 index 0000000..f94f252 --- /dev/null +++ b/www/Metainformationen/media/index.php @@ -0,0 +1,31 @@ + + +
+
+ Seite ohne Sessionmanagement"; ?>
+ page2"; ?>
+ Diese Seite"; ?>
+ Diese Seite direkt +
+ +
+ + +
+ + + diff --git a/www/Metainformationen/media/page2.php b/www/Metainformationen/media/page2.php new file mode 100644 index 0000000..0cdb62b --- /dev/null +++ b/www/Metainformationen/media/page2.php @@ -0,0 +1,29 @@ + + +
+ Abmelden'; ?> +
+ +
+
+ index"; ?>
+ Diese Seite"; ?> +
+ +
+ +
+ + diff --git a/www/Metainformationen/session/ende.php b/www/Metainformationen/session/ende.php new file mode 100644 index 0000000..0694c74 --- /dev/null +++ b/www/Metainformationen/session/ende.php @@ -0,0 +1,21 @@ + + + + + + +

+ +

+

+Seite1
+Ende +

+ + \ No newline at end of file diff --git a/www/Metainformationen/session/seite1.php b/www/Metainformationen/session/seite1.php new file mode 100644 index 0000000..94f9d8c --- /dev/null +++ b/www/Metainformationen/session/seite1.php @@ -0,0 +1,22 @@ + + + + + + +

+ +

+

+Seite1
+Ende +

+ + \ No newline at end of file diff --git a/www/Metainformationen/session/sesslogin.php b/www/Metainformationen/session/sesslogin.php new file mode 100644 index 0000000..facf9d9 --- /dev/null +++ b/www/Metainformationen/session/sesslogin.php @@ -0,0 +1,9 @@ + +

+eingeloggt.
+sesstest.php
+sesstest2.php
+

\ No newline at end of file diff --git a/www/Metainformationen/session/sesstest.php b/www/Metainformationen/session/sesstest.php new file mode 100644 index 0000000..0ee73c0 --- /dev/null +++ b/www/Metainformationen/session/sesstest.php @@ -0,0 +1,24 @@ + +

+Wir machen weiter: Weiter +

+ +

+Kennen wir uns? Weiter +

+ diff --git a/www/Metainformationen/session/sesstest2.php b/www/Metainformationen/session/sesstest2.php new file mode 100644 index 0000000..880a4e6 --- /dev/null +++ b/www/Metainformationen/session/sesstest2.php @@ -0,0 +1,9 @@ + diff --git a/www/Metainformationen/sql.txt b/www/Metainformationen/sql.txt new file mode 100644 index 0000000..f720132 --- /dev/null +++ b/www/Metainformationen/sql.txt @@ -0,0 +1,61 @@ +Setup: http://wp040.webpack.hosteurope.de/phpMyAdmin/ +dbu1022769 +fuB0gar7 +db1022769-php +kRam8l +Salt $1$fAr71ooc$ +$1$fAr71ooc$Zdt20iK7t7yZxPEYooqgL0 +'siarp','clique','uni','familie','beethoven','pottenstein','musical','israel','service' +1 Tilman Walther tilman $1$fAr71ooc$Zdt20iK7t7yZxPEYooqgL0 siarp + + +CREATE TABLE `users` ( +`id` INT UNSIGNED NOT NULL AUTO_INCREMENT , +`name` VARCHAR( 35 ) NOT NULL , +`login` VARCHAR( 35 ) NOT NULL , +`c_passwort` VARCHAR( 35 ) NOT NULL , +`gruppen` SET( 'admin', 'clique', 'uni', 'familie', 'beethoven', 'pottenstein', 'musical', 'israel', 'service' ) NOT NULL , +PRIMARY KEY ( `id` ) , +UNIQUE ( +`name` , +`login` +) +) TYPE = MYISAM ; + +CREATE TABLE `securepages` ( +`id` INT NOT NULL AUTO_INCREMENT , +`pfad` VARCHAR( 255 ) NOT NULL , +`gruppen` SET( 'admin', 'clique', 'uni', 'familie', 'beethoven', 'pottenstein', 'musical', 'israel', 'service' ) NOT NULL , +PRIMARY KEY ( `id` ) , +UNIQUE ( +`pfad` +) +) TYPE = MYISAM ; + +--------------------------------- + + +INSERT INTO users (name, login, c_passwort) VALUES ('Tilman Walther', 'tilman', '$1$fAr71ooc$Zdt20iK7t7yZxPEYooqgL0') + + + + +----------------------------- +Adressen: +CREATE TABLE `adressen` ( + `id` int(10) unsigned NOT NULL auto_increment, + `Vorname` varchar(40) collate latin1_bin default NULL, + `Nachname` varchar(40) collate latin1_bin default NULL, + `Anschrift` varchar(40) collate latin1_bin default NULL, + `PLZ` int(11) default '0', + `Ort` varchar(40) collate latin1_bin default NULL, + `Tel. privat` varchar(40) collate latin1_bin default NULL, + `Tel. geschäftlich` varchar(40) collate latin1_bin default NULL, + `Tel. mobil` varchar(40) collate latin1_bin default NULL, + `E-Mail privat` varchar(40) collate latin1_bin default NULL, + `E-Mail geschäftlich` varchar(40) collate latin1_bin default NULL, + `Geburtstag` date default '0000-00-00', + `Gruppe` enum('Familie','Uni','Bettinas Familie','Ärzte','Bettinas Bekannte','Bekannte','Beethoven') collate latin1_bin default NULL, + `Bemerkung` varchar(255) collate latin1_bin default NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin AUTO_INCREMENT=1 ; diff --git a/www/Metainformationen/tests.php b/www/Metainformationen/tests.php new file mode 100644 index 0000000..488c3de --- /dev/null +++ b/www/Metainformationen/tests.php @@ -0,0 +1,61 @@ +

\n"; + + echo $author; + echo "\n
"; + echo $mailaddress; + echo "\n
"; + print_r($firstmailadress); + echo "\n

"; + */ + + phpinfo(); + +// echo CRYPT_MD5."
"; +// echo '['.crypt('defekt', 'mx').']
'; +// echo strtolower('Tilman
'); +// echo (!$testvar); +// +// echo '
'.substr('12345',0,1); + + + // ---------------------------------------------------------------------- +/* mysql_connect('localhost', 'dbu1022769', 'fuB0gar7') or die ('Database error: Unable to connect to database.'); + mysql_select_db('db1022769-php') or die ('Database error: Unable to select database.'); + $login = 'flob'; + $c_passwort = crypt('alessi', '$1$fAr71ooc$'); + $result = mysql_query("SELECT * FROM users WHERE login='$login' and c_passwort='$c_passwort'"); + if (!$result) { + die('SQL error: '.mysql_error()); + } + else { + if (mysql_num_rows($result) == 1) { + // TODO: Zugriffsrechte in Session-Array ablegen + $result = mysql_query('SELECT gruppen FROM users WHERE login="flob"'); + if (!$result) { + echo 'Gruppenabfrage fehlgeschlagen
'; + die('SQL error: '.mysql_error()); + } + else { + $gruppenliste = explode(',',mysql_result($result,0)); + } + exit; + } + else { + die('falsches passwort'); + } + }*/ + +?> diff --git a/www/daten/errorpages/403.php b/www/daten/errorpages/403.php new file mode 100644 index 0000000..1b4f301 --- /dev/null +++ b/www/daten/errorpages/403.php @@ -0,0 +1,30 @@ +Zugriff verweigert!'; +// $keywords = ''; +// $description = ''; + include_once($_SERVER['DOCUMENT_ROOT'].'/daten/php/pageheader.php'); +?> + +
+

Zugriff verweigert

+

+ Der Zugriff auf das angeforderte Objekt ist nicht möglich. + Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt. +

+

+ Sofern Sie dies für eine Fehlfunktion des Servers halten, + informieren Sie bitte den Webmaster hierüber. +

+ +

Error 401

+

+ +

+
+ + diff --git a/www/daten/lock.gif b/www/daten/lock.gif new file mode 100644 index 0000000..32735ae Binary files /dev/null and b/www/daten/lock.gif differ diff --git a/www/daten/php/.htaccess b/www/daten/php/.htaccess new file mode 100644 index 0000000..03688ee --- /dev/null +++ b/www/daten/php/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/www/daten/php/functions.php b/www/daten/php/functions.php new file mode 100644 index 0000000..28cce0d --- /dev/null +++ b/www/daten/php/functions.php @@ -0,0 +1,58 @@ + diff --git a/www/daten/php/imageprovider.php b/www/daten/php/imageprovider.php new file mode 100644 index 0000000..710842d --- /dev/null +++ b/www/daten/php/imageprovider.php @@ -0,0 +1,31 @@ + diff --git a/www/daten/php/imageviewer.php b/www/daten/php/imageviewer.php new file mode 100644 index 0000000..c963606 --- /dev/null +++ b/www/daten/php/imageviewer.php @@ -0,0 +1,57 @@ + count($bilderliste))) $bildnr = 1; + if (sessionRunning()) $sessionid = 'id='.session_id().'&'; +?> + +
+start'; +?> +
+ +
+ 1) { +// echo 'zurück'; + } +?> +
+ +
+
+ 1) { + echo 'start'; + } + else { + echo 'start'; + } +?> +
+ 1) { + echo '«'; + } + else { + echo '«'; + } + + if ($bildnr < count($bilderliste)) { + echo '      »
'; + } + else { + echo '      »
'; + } +?> +
+ +
+
+ +
+
+
diff --git a/www/daten/php/pagefooter.php b/www/daten/php/pagefooter.php new file mode 100644 index 0000000..c78771c --- /dev/null +++ b/www/daten/php/pagefooter.php @@ -0,0 +1,15 @@ +
+ + + +
+ + Kein Startsound! + +
+ + diff --git a/www/daten/php/pageheader.php b/www/daten/php/pageheader.php new file mode 100644 index 0000000..28bd72d --- /dev/null +++ b/www/daten/php/pageheader.php @@ -0,0 +1,83 @@ + » ".ucfirst($nodes[$i]).""; + } + } + + // Dokumententitel ans Ende der Breadcrumbs stellen + if (($pagetitle != null) && ($pagetitle != '')) { + /*$breadcrumbs = $breadcrumbs.' » '.$pagetitle.'';*/ + $breadcrumbs = $breadcrumbs.' » '.$pagetitle.''; + } + + return $breadcrumbs; + } + +?> + + + +$pagetitle - tilman.de\n"; + else + print "\t\ttilman.de\n"; +?> + + +\n"; + if ($description != null) print "\t\t\n"; + print "\n\t\t\n"; +?> + + + + +
+ '; + echo 'abmelden'; + } + else { + echo 'anmelden'; + } + ?> +
+ +
+
+ tilman.de + +
+
+
+ \ No newline at end of file diff --git a/www/daten/php/security.php b/www/daten/php/security.php new file mode 100644 index 0000000..89180c8 --- /dev/null +++ b/www/daten/php/security.php @@ -0,0 +1,49 @@ + 0) { + $erlaubte_gruppen = explode(',',mysql_result($result,0)); + foreach ($_SESSION['gruppen'] as $gruppe) { + if (in_array($gruppe, $erlaubte_gruppen)) return true; + } + } + } + return false; + } + + /* + * Generiert einen gesicherten Link. Das Aussehen verändert sich, je nachdem, ob der + * Nutzer die Erlaubnis hat, die Seite hinter dem Link aufzurufen, oder nicht. + */ + function secLink($item, $text) { + // relative Links in Startverzeichnis-relative umwandeln + if (getHomePath(dirname($_SERVER['SCRIPT_FILENAME'])) != dirname($item)) { + $item = getHomePath(dirname($_SERVER['SCRIPT_FILENAME'])).SEPARATOR.$item; + } + + if (!itemAccessible($item)) { +// return ''.$text.' passwortgeschützt'; + return ''.$text.' gesichert'; + } + return ''.$text.''; + } +?> diff --git a/www/daten/php/startup.php b/www/daten/php/startup.php new file mode 100644 index 0000000..6a9ee92 --- /dev/null +++ b/www/daten/php/startup.php @@ -0,0 +1,57 @@ + diff --git a/www/favicon.ico b/www/favicon.ico new file mode 100644 index 0000000..febd106 Binary files /dev/null and b/www/favicon.ico differ diff --git a/www/favicon_transparent_edges.ico b/www/favicon_transparent_edges.ico new file mode 100644 index 0000000..3a98791 Binary files /dev/null and b/www/favicon_transparent_edges.ico differ diff --git a/www/fotos/2000/israel/abi.htm b/www/fotos/2000/israel/abi.htm new file mode 100644 index 0000000..b4b6b10 --- /dev/null +++ b/www/fotos/2000/israel/abi.htm @@ -0,0 +1,58 @@ + + + + +
+ + + + + + + + + + + + + +
+ +
    + + Die beiden Domains www.beethoven2000.de und www.tilman.de nutzen aus technischen Gründen zur Zeit denselben Webspace, weshalb man nur indirekt auf die AbiSite kommt.
+ Hier geht's weiter:

+ + + + + + + + + +
+ + AbiCD

+ +

+ + Wer Probleme mit den Videos hat, lädt sich bitte den Ligos MPEG-Player (5-Tage-Demoversion) aus dem Netz.
+ Online sind die Videos nicht einsehbar (wer hat schon 'ne Standleitung...?) und im Moment fehlen auch noch ein paar andere Inhalte, aber bis zum 13. Oktober sollte das erledigt sein. +
+
+ + Mail an die Redaktion + + + + Bei Fragen betreffend der AbiCD, des AbiBuchs, etc. schreibt uns einfach... + +
+

   
+ +
+
+
+ + \ No newline at end of file diff --git a/www/fotos/2000/israel/abisite.jpg b/www/fotos/2000/israel/abisite.jpg new file mode 100644 index 0000000..008be87 Binary files /dev/null and b/www/fotos/2000/israel/abisite.jpg differ diff --git a/www/fotos/2000/israel/adresse.htm b/www/fotos/2000/israel/adresse.htm new file mode 100644 index 0000000..91b3256 --- /dev/null +++ b/www/fotos/2000/israel/adresse.htm @@ -0,0 +1,57 @@ + + + + +
+ + + + + + + + + + + + + +
+ +
    + + + + + + + + + +
+ + Postadresse: + + + Tilman Walther (Volunteer)
+ Agricultural Secondary School
+   - Benjamin Rothschild -
+ 37 000 Pardes Hanna
+ ISRAEL +
+ + Telefon: + + + 00972-5-1673326
+ (Das ist unser Zivi-Handy. Es sollte auf jeden Fall jemand rangehen, der Deutsch spricht. + 01051 soll als Netzvorwahl von Deutschland aus mit am günstigsten sein.
+ Ihr müßt übrigens nicht auf die Mailbox sprechen - wir können sie sowieso nicht abhören.) +
+
   
+ +
+
+
+ + \ No newline at end of file diff --git a/www/fotos/2000/israel/b360lnk.jpg b/www/fotos/2000/israel/b360lnk.jpg new file mode 100644 index 0000000..6b81652 Binary files /dev/null and b/www/fotos/2000/israel/b360lnk.jpg differ diff --git a/www/fotos/2000/israel/bbplatz.mov b/www/fotos/2000/israel/bbplatz.mov new file mode 100644 index 0000000..940f801 Binary files /dev/null and b/www/fotos/2000/israel/bbplatz.mov differ diff --git a/www/fotos/2000/israel/bck.jpg b/www/fotos/2000/israel/bck.jpg new file mode 100644 index 0000000..87b24e9 Binary files /dev/null and b/www/fotos/2000/israel/bck.jpg differ diff --git a/www/fotos/2000/israel/fotos.htm b/www/fotos/2000/israel/fotos.htm new file mode 100644 index 0000000..be411b0 --- /dev/null +++ b/www/fotos/2000/israel/fotos.htm @@ -0,0 +1,38 @@ + + + + +
+ + + + + + + + + + + + + +
+ +
    +
+ + + + +

+ Die Fotos wurden aus der alten Website entfernt. + +
+
+
   
+ +
+
+
+ + \ No newline at end of file diff --git a/www/fotos/2000/israel/getqt.gif b/www/fotos/2000/israel/getqt.gif new file mode 100644 index 0000000..269801c Binary files /dev/null and b/www/fotos/2000/israel/getqt.gif differ diff --git a/www/fotos/2000/israel/index.htm b/www/fotos/2000/israel/index.htm new file mode 100644 index 0000000..ee1b17b --- /dev/null +++ b/www/fotos/2000/israel/index.htm @@ -0,0 +1,60 @@ + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + Willkommen auf tilman.de. Ich befinde mich zur Zeit in + Israel, in der Agricultural Secondary School in Pardes + Hanna und nutze diese Domain zur Zeit vor allen Dingen, um Kontakt zur Heimat zu halten.
+ Wer an Tilmans im allgemeinen interessiert ist, sei an die Tilman-Liste + von Tilman Hausherr verwiesen.

+ + Kontakt zu mir gibts über Post, Telefon und natürlich + eMail.

+ + Für alle, die sich ein etwas genaueres Bild machen möchten, habe ich ein paar + Fotos bereitgestellt (neu: 360°-Aufnahmen), außerdem gibt's noch ein paar + allgemeine Informationen und meine Berichte + (in unregelmäßigen Abständen).

+ + Wer sich immer noch wundert, warum er nicht auf der Beethoven-AbiSite ist, klickt bitte + links und läßt es sich erklären. + +

+
+
+ +
+ +
+
+
+ + \ No newline at end of file diff --git a/www/fotos/2000/israel/info.htm b/www/fotos/2000/israel/info.htm new file mode 100644 index 0000000..f6ab82f --- /dev/null +++ b/www/fotos/2000/israel/info.htm @@ -0,0 +1,52 @@ + + + + +
+ + + + + + + + + + + + + +
+ +
    + + + + + + + + + +
+ + eMail: + + + tilman[ät]tilman.de +
+ + vorauss. Dauer
+ des Israel-Aufenthalts:
+
+ + Bis Ende September 2001
+ (Weihnachten bin ich wahrscheinlich zu Hause) +
+
   
+ +
+
+
+ + \ No newline at end of file diff --git a/www/fotos/2000/israel/lio.jpg b/www/fotos/2000/israel/lio.jpg new file mode 100644 index 0000000..5b85f81 Binary files /dev/null and b/www/fotos/2000/israel/lio.jpg differ diff --git a/www/fotos/2000/israel/log.htm b/www/fotos/2000/israel/log.htm new file mode 100644 index 0000000..490f830 --- /dev/null +++ b/www/fotos/2000/israel/log.htm @@ -0,0 +1,79 @@ + + + + +
+ + + + + + + + + + + + + + + + + + +
+ +
    +
+ + Wer neue Berichte gesendet bekommen möchte, gibt hier seine eMail-Adresse ein.
+
+
+   + +
+
+
+


+

   
    + + +--- Rundbrief 5         10. Oktober 2000
+
+Wir haben Ferien (bzw. die Schüler, nicht wir) und die Schule ist ziemlich leer. Nur für die Amis wurden die Ferien abgesagt - um die macht man sich hier (der Eltern wegen) nämlich immer etwas mehr Sorgen. Unter uns Zivis ist im Moment eine gewisse Demotivation zu spüren. Wegen Krieg sind wir zwar nicht mehr so sehr besorgt (Wir hatten heute ein Gespräch mit einer Mutter, die auch hier an der Schule Lehrerin ist und sehr plausibel erklären konnte, weshalb es wahrscheinlich keinen Krieg und auch keine zweite Intifada geben wird), aber da wir immer noch keinen ernsthaften Sprachunterricht bekommen, nun schon eine ganze Weile zu neunt auf 50 Quadratmetern zusammen wohnen und auch das (gewünschte) Verhältnis zu den SchülerInnen - zumindest mir - immer noch Probleme macht, leidet der Elan doch arg. Teilweise wird über Rückreise nachgedacht... +


+ +--- Rundbrief 4         2. Oktober 2000
+
+Back again. Hier hat sich in der Zwischenzeit nicht so sehr viel getan; die Beethoven-Gruppe ist wieder abgefahren (schöne Grüße an Euch da draußen), ich bin jetzt dauerhaft im Computerlab (auch ohne Großprojekte) und wir versuchen immer noch umzuziehen.
+Hier sind, wie Ihr wahrscheinlich mitbekommen habt, im Moment wieder starke Unruhen ausgebrochen. Die Israelis sprechen von ca. 14 Toten, die Palästinenser von über 30. Ein Krisenherd liegt gerade mal 10 Kilometer von hier entfernt, aber fast alles, was ich weiß, habe ich aus der Tagesschau. Israel eben.
+(12 Minuten später)
+Ich korrigiere: Man bekommt doch was mit! Gerade ist hier ein Düsenjäger über uns geflogen und dann haben die Scheiben irgendwie gewackelt... Ich glaube, ich suche mir mal einen Fernseher oder so was... +


+ +--- Rundbrief 3         22. September 2000
+
+Da bin ich also wieder. Hier in Israel ist vor einer Woche die deutsche Austauschgruppe mit Herrn Riegel und Frau Tomczak angekommen. Sechzehn Schüler insgesamt, zwölf Mädchen, vier Jungen, alles Elftklässler. Ich habe schon zwei Ausflüge mitgemacht, einen ein-Tages-Trip nach Akko (Kreuzfahrerstadt) und einen drei-Tages-Trip, von dem ich gestern Abend zurückgekommen bin. Wir sind zuerst nach Jerusalem gefahren: Grabeskirche, Klagemauer, Bazar, usw. Danach in ein Hotel (endlich mal wieder ein richtiges Bett) und am nächsten Morgen Sonnenaufgang auf Mazzada, einer über 2000 Jahre alten Festung am äußersten Rand der Wüste. Zurück ins Hotel, frühstücken, rüber zum toten Meer (superheiß, ganz lustig, Schwimmzeug liegengelassen) und dann ins Beduinencamp in der Negev-Wüste. Das Camp war ziemlich Touri-style, aber sanitäre Anlagen haben doch was für sich...
+Beduinenessen ist richtig gut und als die 60 Motorola-Leute (gruppendynamische Spielchen in der Wüste lassen sich die Firmen ganz schön was kosten...) weg waren, war's wirklich nett. Leider war ich zu diesem Zeitpunkt schon nicht mehr ganz gesund und die Nacht hat mir dann ein bißchen den Rest gegeben. (Geburtstag feiern, Volkslieder lernen, Hügel erklimmen...) Auf jeden Fall habe ich Dromedarreiten am nächsten Morgen lieber sein gelassen und als wir in Ein Gedi noch eine Wüstentour machen wollten, bin ich lieber am Parkplatz geblieben. Leider stellte sich heraus, daß der noch eine ziemliche Baustelle war und ich blieb zweienhalb Stunden mit erhöhter Temperatur bei 34° im Schatten auf einem Betonpfeiler - Thank God for Aspirine. War aber trotzdem die bessere Alternative, glaube ich, denn auf der Tour, die ich ausgelassen habe, sind zwei oder drei Leute umgekippt. Später dann nochmal ans tote Meer und dann zurück zur Schule.
+Heute hatten wir FaceTime mit Reena (gth&d), am Sonntag startet unser Sprachkurs - allerdings nur mit drei Stunden in der Woche; nicht gerade viel. Später haben wir uns noch ein Haus weiter unten auf dem Campus angesehen, in das wir vielleicht umziehen können. Das wäre dann sehr WG-mäßig, deshalb haben wir abends erst mal eine "Vollversammlung" abgehalten und besprochen, wie sich die einzelnen das Ganze so vorstellen würden (Badreinigen, Lautstärke, Gäste, etc.). Alles in allem sind aber (fast) alle von der Idee begeistert, jetzt müssen wir sehen ob's klappt.
+Am Sonntag fange ich im Computer-Lab an - eine Woche auf Probe. Reena meinte, das dort auch Schüler arbeiten würden, die dafür Credits bekämen, was bedeutet, das ich nicht deren Arbeit machen kann. Allerdings kann ich mir kaum vorstellen, daß da *überhaupt jemand* arbeitet. Von den 40-50 Computern funktioniert höchstens ein Drittel *halbwegs*. Ab Sonntag werde ich jedenfalls erst mal powern, wenn's geht irgendwelche Großprojekte anzetteln...
+Wenigstens haben wir jetzt jeden Mittwoch einen Computerraum zwei Stunden lang für uns. +


+ +--- Rundbrief 2         8. September 2000
+
+Hallo Ihr alle!
+Ich hoffe, mein Rundbrief eins hat Euch erreicht; über das Wesentliche müßtet Ihr schon Bescheid wissen. Heute hatten wir Meeting mit Boaz, dem Schulleiter und Reena, einer Lehrerin aus den USA. Das hat mir sehr geholfen, weil das Ganze hier langsam eine Struktur bekommt, uns zusätzliche Angebote wie Ausflüge mit den Schülern oder AGen angeboten wurden und ich evtl. im Computerlaboratorium arbeiten kann. Wenn ich sehr viel Glück habe, wird mir vielleicht was auf meine Arbeitszeit angerechnet, mal sehen. Küche muß jedenfalls auf Dauer nicht unbedingt sein. Da ist man zwar aus der Sonne und im Winter aus dem Regen (3 Monate à 12 Regentage...), aber dafür fühlt man sich durch das ganze Putzzeug danach wie in Chemie gebadet (Umweltschutz? Ja, gibt es! Irgendwo...) und außerdem fühle ich mich zwischen lauter Hebro-only-Küchenkräften ziemlich allein... Jedenfalls steht seit heute fest: Arbeit 5 Tage die Woche, i.d.R. von 7.30 Uhr bis irgendwas zwischen 14.30 und 15.00 Uhr.
+Nachher gehe ich auf meine erste Kibbuzparty, Bericht folgt.
+
+p.s.: Die Schule hier hat bescheuertste, nervigste Pausenklingel, die jemals von Menschen (?) entwickelt worden ist. Ich versuch' mal 'ne Aufnahme klarzumachen.
+
+p.p.s.: Ab Montag oder Dienstag gibt's alle Tilman-relevanten Aktualisierungen, Fotos, etc. unter www.tilman.de +
+

   
+ +
+
+
+ + \ No newline at end of file diff --git a/www/fotos/2000/israel/mio2.jpg b/www/fotos/2000/israel/mio2.jpg new file mode 100644 index 0000000..549e00b Binary files /dev/null and b/www/fotos/2000/israel/mio2.jpg differ diff --git a/www/fotos/2000/israel/miu.jpg b/www/fotos/2000/israel/miu.jpg new file mode 100644 index 0000000..a580850 Binary files /dev/null and b/www/fotos/2000/israel/miu.jpg differ diff --git a/www/fotos/2000/israel/news.jpg b/www/fotos/2000/israel/news.jpg new file mode 100644 index 0000000..e227fe4 Binary files /dev/null and b/www/fotos/2000/israel/news.jpg differ diff --git a/www/fotos/2000/israel/opt.jpg b/www/fotos/2000/israel/opt.jpg new file mode 100644 index 0000000..92ac694 Binary files /dev/null and b/www/fotos/2000/israel/opt.jpg differ diff --git a/www/fotos/2000/israel/pan_o.jpg b/www/fotos/2000/israel/pan_o.jpg new file mode 100644 index 0000000..fb3c349 Binary files /dev/null and b/www/fotos/2000/israel/pan_o.jpg differ diff --git a/www/fotos/2000/israel/rahmen.htm b/www/fotos/2000/israel/rahmen.htm new file mode 100644 index 0000000..c765f51 --- /dev/null +++ b/www/fotos/2000/israel/rahmen.htm @@ -0,0 +1,28 @@ + + + + +
+ + + + + + + + + + + + + +
+ +
    +    
+ +
+
+
+ + \ No newline at end of file diff --git a/www/fotos/2000/israel/rbck.jpg b/www/fotos/2000/israel/rbck.jpg new file mode 100644 index 0000000..8160fc2 Binary files /dev/null and b/www/fotos/2000/israel/rbck.jpg differ diff --git a/www/fotos/2000/israel/ro.jpg b/www/fotos/2000/israel/ro.jpg new file mode 100644 index 0000000..3074c98 Binary files /dev/null and b/www/fotos/2000/israel/ro.jpg differ diff --git a/www/fotos/2000/israel/rs.jpg b/www/fotos/2000/israel/rs.jpg new file mode 100644 index 0000000..c42f07a Binary files /dev/null and b/www/fotos/2000/israel/rs.jpg differ diff --git a/www/fotos/2000/israel/ru.jpg b/www/fotos/2000/israel/ru.jpg new file mode 100644 index 0000000..540e428 Binary files /dev/null and b/www/fotos/2000/israel/ru.jpg differ diff --git a/www/fotos/2000/israel/rundum.htm b/www/fotos/2000/israel/rundum.htm new file mode 100644 index 0000000..7d0c551 --- /dev/null +++ b/www/fotos/2000/israel/rundum.htm @@ -0,0 +1,36 @@ + + + + +
+ + + + + + + + + + + + + +
+ +
    + + Zur Ansicht der 360°-Bilder wird Apples Quicktime benötigt.
+ Tip: Nach dem Laden als erstes so weit wie möglich aus dem Bild herauszoomen. (Mit der Strg-Taste.)

+

+
+ Die Wiese bildet das Zentrum des Campus.

+
+ Der Basketballplatz, das Hauptgebäde von hinten und die Laboratorien. +

   
+ +
+
+
+ + \ No newline at end of file diff --git a/www/fotos/2000/israel/v_bbpltz.jpg b/www/fotos/2000/israel/v_bbpltz.jpg new file mode 100644 index 0000000..d1170c2 Binary files /dev/null and b/www/fotos/2000/israel/v_bbpltz.jpg differ diff --git a/www/fotos/2000/israel/v_wiese.jpg b/www/fotos/2000/israel/v_wiese.jpg new file mode 100644 index 0000000..221010e Binary files /dev/null and b/www/fotos/2000/israel/v_wiese.jpg differ diff --git a/www/fotos/2000/israel/wiese.mov b/www/fotos/2000/israel/wiese.mov new file mode 100644 index 0000000..72eaa9f Binary files /dev/null and b/www/fotos/2000/israel/wiese.mov differ diff --git a/www/fotos/2002/carolinensiel/bilder/.htaccess b/www/fotos/2002/carolinensiel/bilder/.htaccess new file mode 100644 index 0000000..03688ee --- /dev/null +++ b/www/fotos/2002/carolinensiel/bilder/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-05 22-04-18.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-05 22-04-18.jpg new file mode 100644 index 0000000..ffe2df3 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-05 22-04-18.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-06 11-27-41.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-06 11-27-41.jpg new file mode 100644 index 0000000..10b3245 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-06 11-27-41.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-06 11-30-32.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-06 11-30-32.jpg new file mode 100644 index 0000000..1c341de Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-06 11-30-32.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-06 11-31-17.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-06 11-31-17.jpg new file mode 100644 index 0000000..12cd7be Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-06 11-31-17.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-06 12-09-45.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-06 12-09-45.jpg new file mode 100644 index 0000000..ab0473d Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-06 12-09-45.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-06 12-10-59.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-06 12-10-59.jpg new file mode 100644 index 0000000..db20923 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-06 12-10-59.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-06 17-07-56.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-06 17-07-56.jpg new file mode 100644 index 0000000..3a14a01 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-06 17-07-56.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-06 17-08-19.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-06 17-08-19.jpg new file mode 100644 index 0000000..7983427 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-06 17-08-19.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-06 17-09-23.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-06 17-09-23.jpg new file mode 100644 index 0000000..fcaef49 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-06 17-09-23.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-07 11-16-01.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-07 11-16-01.jpg new file mode 100644 index 0000000..3d04f7c Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-07 11-16-01.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-07 11-16-11.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-07 11-16-11.jpg new file mode 100644 index 0000000..3b5b143 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-07 11-16-11.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-07 11-16-27.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-07 11-16-27.jpg new file mode 100644 index 0000000..e102d32 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-07 11-16-27.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-07 12-02-12.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-07 12-02-12.jpg new file mode 100644 index 0000000..c849f25 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-07 12-02-12.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-07 15-51-13.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-07 15-51-13.jpg new file mode 100644 index 0000000..ff4ee57 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-07 15-51-13.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-07 18-59-36.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-07 18-59-36.jpg new file mode 100644 index 0000000..939c141 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-07 18-59-36.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 11-49-00.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 11-49-00.jpg new file mode 100644 index 0000000..b54299c Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 11-49-00.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 11-49-16.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 11-49-16.jpg new file mode 100644 index 0000000..436b6b5 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 11-49-16.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 11-50-14.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 11-50-14.jpg new file mode 100644 index 0000000..ad6e5c7 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 11-50-14.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 12-21-59.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 12-21-59.jpg new file mode 100644 index 0000000..7bd0a6e Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 12-21-59.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 12-27-23.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 12-27-23.jpg new file mode 100644 index 0000000..576c6e0 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 12-27-23.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 12-27-32.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 12-27-32.jpg new file mode 100644 index 0000000..7cf2252 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 12-27-32.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 15-29-37.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 15-29-37.jpg new file mode 100644 index 0000000..dc0dcf1 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 15-29-37.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 15-31-08.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 15-31-08.jpg new file mode 100644 index 0000000..d6e7205 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 15-31-08.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 15-41-49.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 15-41-49.jpg new file mode 100644 index 0000000..d3b55cf Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 15-41-49.jpg differ diff --git a/www/fotos/2002/carolinensiel/bilder/2002-09-08 16-02-37.jpg b/www/fotos/2002/carolinensiel/bilder/2002-09-08 16-02-37.jpg new file mode 100644 index 0000000..2ecd946 Binary files /dev/null and b/www/fotos/2002/carolinensiel/bilder/2002-09-08 16-02-37.jpg differ diff --git a/www/fotos/2002/carolinensiel/index.php b/www/fotos/2002/carolinensiel/index.php new file mode 100644 index 0000000..8d960a6 --- /dev/null +++ b/www/fotos/2002/carolinensiel/index.php @@ -0,0 +1,23 @@ + + +
+ +
+ + diff --git a/www/fotos/2002/finale/bilder/.htaccess b/www/fotos/2002/finale/bilder/.htaccess new file mode 100644 index 0000000..03688ee --- /dev/null +++ b/www/fotos/2002/finale/bilder/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-05-35.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-05-35.jpg new file mode 100644 index 0000000..e0e7aa7 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-05-35.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-05-45.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-05-45.jpg new file mode 100644 index 0000000..7726684 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-05-45.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-05-58.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-05-58.jpg new file mode 100644 index 0000000..97d3e47 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-05-58.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-06-14.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-06-14.jpg new file mode 100644 index 0000000..13432fd Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-06-14.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-06-27.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-06-27.jpg new file mode 100644 index 0000000..e2f91ce Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-06-27.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-13-08.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-13-08.jpg new file mode 100644 index 0000000..776b5cd Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-13-08.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-13-28.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-13-28.jpg new file mode 100644 index 0000000..d422d71 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-13-28.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-14-00.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-14-00.jpg new file mode 100644 index 0000000..2ec9829 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-14-00.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-14-46.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-14-46.jpg new file mode 100644 index 0000000..dd1fef3 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-14-46.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 13-14-55.jpg b/www/fotos/2002/finale/bilder/2002-06-30 13-14-55.jpg new file mode 100644 index 0000000..a31f775 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 13-14-55.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 14-16-50.jpg b/www/fotos/2002/finale/bilder/2002-06-30 14-16-50.jpg new file mode 100644 index 0000000..32e162e Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 14-16-50.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-05-40.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-05-40.jpg new file mode 100644 index 0000000..fa42a50 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-05-40.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-06-14.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-06-14.jpg new file mode 100644 index 0000000..975088d Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-06-14.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-06-55.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-06-55.jpg new file mode 100644 index 0000000..98ab7e9 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-06-55.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-07-18.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-07-18.jpg new file mode 100644 index 0000000..6f6c77f Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-07-18.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-08-57.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-08-57.jpg new file mode 100644 index 0000000..4df019b Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-08-57.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-15-30.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-15-30.jpg new file mode 100644 index 0000000..7a0fe96 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-15-30.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-16-04.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-16-04.jpg new file mode 100644 index 0000000..5064ad6 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-16-04.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-16-12.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-16-12.jpg new file mode 100644 index 0000000..0dcf011 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-16-12.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-16-21.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-16-21.jpg new file mode 100644 index 0000000..39d49d6 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-16-21.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-16-30.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-16-30.jpg new file mode 100644 index 0000000..e43bef0 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-16-30.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-17-24.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-17-24.jpg new file mode 100644 index 0000000..f4dbd27 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-17-24.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-19-18.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-19-18.jpg new file mode 100644 index 0000000..1341e1f Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-19-18.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-20-30.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-20-30.jpg new file mode 100644 index 0000000..de4e46d Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-20-30.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-21-29.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-21-29.jpg new file mode 100644 index 0000000..4e87ae5 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-21-29.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-23-07.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-23-07.jpg new file mode 100644 index 0000000..507dba5 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-23-07.jpg differ diff --git a/www/fotos/2002/finale/bilder/2002-06-30 15-24-21.jpg b/www/fotos/2002/finale/bilder/2002-06-30 15-24-21.jpg new file mode 100644 index 0000000..c9da914 Binary files /dev/null and b/www/fotos/2002/finale/bilder/2002-06-30 15-24-21.jpg differ diff --git a/www/fotos/2002/finale/index.php b/www/fotos/2002/finale/index.php new file mode 100644 index 0000000..ca8c0d4 --- /dev/null +++ b/www/fotos/2002/finale/index.php @@ -0,0 +1,23 @@ + + +
+ +
+ + diff --git a/www/fotos/2002/ostsee/bilder/.htaccess b/www/fotos/2002/ostsee/bilder/.htaccess new file mode 100644 index 0000000..03688ee --- /dev/null +++ b/www/fotos/2002/ostsee/bilder/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/www/fotos/2002/ostsee/bilder/2002-06-07 18-01-44.jpg b/www/fotos/2002/ostsee/bilder/2002-06-07 18-01-44.jpg new file mode 100644 index 0000000..009b26f Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-07 18-01-44.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 10-29-18.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 10-29-18.jpg new file mode 100644 index 0000000..0f2c68f Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 10-29-18.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 12-58-53.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 12-58-53.jpg new file mode 100644 index 0000000..848f5bb Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 12-58-53.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 13-40-23.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 13-40-23.jpg new file mode 100644 index 0000000..30c305e Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 13-40-23.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 13-40-32.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 13-40-32.jpg new file mode 100644 index 0000000..f75fdcc Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 13-40-32.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 13-40-53.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 13-40-53.jpg new file mode 100644 index 0000000..38cca73 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 13-40-53.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 14-43-35.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 14-43-35.jpg new file mode 100644 index 0000000..608d834 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 14-43-35.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 14-45-42.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 14-45-42.jpg new file mode 100644 index 0000000..96ea549 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 14-45-42.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 14-57-52.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 14-57-52.jpg new file mode 100644 index 0000000..b1e8261 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 14-57-52.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 15-09-07.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 15-09-07.jpg new file mode 100644 index 0000000..13652e3 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 15-09-07.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 15-43-23.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 15-43-23.jpg new file mode 100644 index 0000000..df55df0 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 15-43-23.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 15-43-51.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 15-43-51.jpg new file mode 100644 index 0000000..441b51e Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 15-43-51.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 16-44-56.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 16-44-56.jpg new file mode 100644 index 0000000..2e05466 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 16-44-56.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 16-45-44.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 16-45-44.jpg new file mode 100644 index 0000000..044470b Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 16-45-44.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 16-46-08.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 16-46-08.jpg new file mode 100644 index 0000000..a415b8e Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 16-46-08.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 16-48-19.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 16-48-19.jpg new file mode 100644 index 0000000..22e8cba Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 16-48-19.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 16-49-38.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 16-49-38.jpg new file mode 100644 index 0000000..aa26343 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 16-49-38.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 16-50-58.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 16-50-58.jpg new file mode 100644 index 0000000..74b49ac Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 16-50-58.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 16-54-20.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 16-54-20.jpg new file mode 100644 index 0000000..542633d Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 16-54-20.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 17-10-55.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 17-10-55.jpg new file mode 100644 index 0000000..3a4ef24 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 17-10-55.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 17-11-35.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 17-11-35.jpg new file mode 100644 index 0000000..39b157f Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 17-11-35.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 17-12-02.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 17-12-02.jpg new file mode 100644 index 0000000..50fbca7 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 17-12-02.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 17-13-00.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 17-13-00.jpg new file mode 100644 index 0000000..ce4938a Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 17-13-00.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 17-13-27.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 17-13-27.jpg new file mode 100644 index 0000000..9132792 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 17-13-27.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 17-15-31.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 17-15-31.jpg new file mode 100644 index 0000000..3d2306c Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 17-15-31.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 17-25-09.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 17-25-09.jpg new file mode 100644 index 0000000..0ecb601 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 17-25-09.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 17-55-11.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 17-55-11.jpg new file mode 100644 index 0000000..178605b Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 17-55-11.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-08 17-55-35.jpg b/www/fotos/2002/ostsee/bilder/2002-06-08 17-55-35.jpg new file mode 100644 index 0000000..b361fe7 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-08 17-55-35.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 08-13-36.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 08-13-36.jpg new file mode 100644 index 0000000..05e887a Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 08-13-36.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 08-14-07.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 08-14-07.jpg new file mode 100644 index 0000000..959bb93 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 08-14-07.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 08-20-30.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 08-20-30.jpg new file mode 100644 index 0000000..eea2a87 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 08-20-30.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 08-27-36.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 08-27-36.jpg new file mode 100644 index 0000000..1aaa5ba Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 08-27-36.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 08-28-13.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 08-28-13.jpg new file mode 100644 index 0000000..38e017d Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 08-28-13.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 08-31-16.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 08-31-16.jpg new file mode 100644 index 0000000..2552f60 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 08-31-16.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 08-41-54.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 08-41-54.jpg new file mode 100644 index 0000000..5c0c576 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 08-41-54.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 08-45-32.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 08-45-32.jpg new file mode 100644 index 0000000..6d95bad Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 08-45-32.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 09-09-48.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 09-09-48.jpg new file mode 100644 index 0000000..44cb8eb Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 09-09-48.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 10-13-09.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 10-13-09.jpg new file mode 100644 index 0000000..4655b22 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 10-13-09.jpg differ diff --git a/www/fotos/2002/ostsee/bilder/2002-06-09 10-16-09.jpg b/www/fotos/2002/ostsee/bilder/2002-06-09 10-16-09.jpg new file mode 100644 index 0000000..5644e87 Binary files /dev/null and b/www/fotos/2002/ostsee/bilder/2002-06-09 10-16-09.jpg differ diff --git a/www/fotos/2002/ostsee/index.php b/www/fotos/2002/ostsee/index.php new file mode 100644 index 0000000..d34d311 --- /dev/null +++ b/www/fotos/2002/ostsee/index.php @@ -0,0 +1,23 @@ + + +
+ +
+ + diff --git a/www/fotos/2005/japan/2005-07-20-Osaka.html b/www/fotos/2005/japan/2005-07-20-Osaka.html new file mode 100644 index 0000000..9c66b57 --- /dev/null +++ b/www/fotos/2005/japan/2005-07-20-Osaka.html @@ -0,0 +1,68 @@ + + + + Japan, erster Tag + + + + + + + + + +
+
+ +

+
+

+
+
+
+ +
+

Osaka

+

+ Als ich am Kansai Airport aus dem Lufthansa-Airbus stieg, dachte ich für einen Moment, ich würde unter der Abluft einer großen Klimaanlage stehen - aber hier ist es einfach so heiß. +

+

+ Nach ein paar unbedeutenden Formalitäten konnte ich dann japanischen Boden betreten. Mehr durch Zufall fand mich dann auch kurz darauf Bettina, gerade als mir auffiel, dass wir nicht nur unseren Treffpunkt, sondern auch die Wartedauer hätten vereinbaren sollen. Am Bahnhof in Osaka haben wir dann noch fast das gesamte Robocup-Team getroffen, das sich gerade zerstreute. +

+

+ Nachdem wir mein Gepäck in der Jugendherberge losgeworden waren, sind wir ins Aquarium gegangen. Das ist hier natürlich nicht so ein langweiliges staatliches Institut zur Fischverwahrung, sondern ein privatwirtschaftlicher Erlebnispark. Man schraubt sich über Treppen von oben nach unten an einem riesigen Becken entlang, für dessen Bau mehr als die weltweite Jahresproduktion eines speziellen Plexiglases verbraucht wurde und in dem sich ein Tigerhai, Riesenrochen und ein paar kleinere Haie befanden. Dazu kommen noch Aquarien für Robben, Pinguine und Riesenkrabben. Und damit das alles auch wirklich interessant ist und man die blöden Viecher nicht mit der Lupe suchen muss, haben sie auch sonst ordentlich was ins Becken gepackt. Manchmal hatten wir allerdings das Gefühl, vor einem Schleppnetz zu stehen. Die Robben und Delfine schienen jedenfalls eher in einer Art marinem Kinderzimmer geparkt zu sein. Interessant war die Anlage aber auf jeden Fall. Erstaunlich, was für komische Fische im Kubikmeterformat es gibt, von denen man noch nie gehört hat. +

+

+ Fotos haben wir nicht gemacht, aber einen Eindruck von der Anlage bekommt man auf der Webseite des Kaiyukan Aquariums. +

+

+ Nach dem Aquarium-Besuch reichte es dann langsam für heute. Die dreizehn Stunden Flug waren dann doch nicht so erholsam. Das Youth Hostel ist übrigens klasse. Wir sind im neunten Stock, alles ist supermodern. +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-21-Osaka.html b/www/fotos/2005/japan/2005-07-21-Osaka.html new file mode 100644 index 0000000..01aa9a6 --- /dev/null +++ b/www/fotos/2005/japan/2005-07-21-Osaka.html @@ -0,0 +1,81 @@ + + + + Japan, zweiter Tag + + + + + + + + + +
+
+ Mineralwasser? +

Randnotiz

+

+ Hier sind auf allem und jedem Comic-, Manga oder Bilderbuchfiguren. Egal, ob zum Vermitteln von Inhalten ("Wer heilige Rehe ärgert ist doof"), oder einfach weil's so fröhlich aussieht. Hello Kitty wohin man schaut und eine Supermarktkette, die die meisten ihrer Produkte mit Heidi (aus der Trickserie) schmückt. Wenn man genug Aktionspunkte zusammen hat, bekommt man einen Heidi Sammelteller. +

+
+
+
+ +
+ Killer-Reh greift Bettina an +

Nara

+

+ Heute waren wir in Nara. In Nara gibt es einen großen Park mit buddhistischen Tempeln und zahmen Rehen. (Es sei denn, man hat Rehkekse in der Hand oder, so wie Bettina, in den Haaren - dann sind sie nicht ganz so zahm.) +

+

+ Eigentlich wollten wir den Park einmal komplett umrunden, aber in den veranschlagten drei Stunden haben wir nur etwa ein Viertel der Strecke geschafft - man überschätzt die eigene Leistungsfähigkeit bei 35°C und 66% Luftfeuchtigkeit doch ziemlich. +

+
+ +
+ Killer-Reh greift Bettina an +

+
+ In den Bäumen sitzen hier überall riesengroße Flatterviecher, die vor kurzem geschlüpft sind und zirpen den ganzen Tag vor sich hin. Nun, zirpen trifft es nicht ganz - die machen einen Mordskrach. Wenn man unter so einem Baum steht versteht man kein gesprochenes Wort mehr. Nur sehen tut man sie nicht. +

+
+ +
+ Mein wunderbarer Waschsalon +

+
+ Abends wollten wir ins Vergnügungsviertel Namba, aber stattdessen haben wir lieber den Luxus der örtlichen Waschsalons genossen. Das holen wir dann morgen nach. +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-22-Osaka.html b/www/fotos/2005/japan/2005-07-22-Osaka.html new file mode 100644 index 0000000..aa5c11e --- /dev/null +++ b/www/fotos/2005/japan/2005-07-22-Osaka.html @@ -0,0 +1,90 @@ + + + + Japan, dritter Tag + + + + + + + + + +
+
+ Mineralwasser? +

Randnotiz

+

+ Das Toilettenpapier hier ist grundsätzlich einlagig. Dafür gibt es im Sanitärbereich technische Errungenschaften, von denen man im rückständigen Westen nur träumen kann. +

+
+
+
+ +
+ Tor vor dem Heian-jingu +

Kyoto und Namba

+

+ Heute ging es nach Kyoto, dem historischen Zentrum Japans. Alles voller Shinto-Schreine, buddhistischer Tempel und Touristen. Japanischen, wohlgemerkt. +

+

+ Da Kyoto erst nach dem Krieg zur Großstadt wurde, spielt im Gegensatz zu Osaka oder Tokio die U-Bahn eine untergeordnete Rolle. Zumindest die Sehenswürdigkeiten erreicht man mit Bussen, in denen man gemäß dem alten japanischen Sprichwort "Wo einer reinpasst, passen auch zehn rein." transportiert wird. +

+

+ Kaum waren wir am Hian-Schrein, einem Nachbau des Kaiserpalastes von 794 (der im Verhältnis zum bescheidenen Eingangstor allerdings etwas verblasst), gerieten wir in die Vorbereitungen zu einem Konzert, das im Schrein stattfinden sollte. Wir haben uns daraufhin erkundigt, ob es üblich sei, dass Populärmusik-Konzerte in Shinto-Schreinen stattfinden, erhielten aber keine befriedigende Antwort. +

+

+ Dabei fällt mir ein: Mir soll bitte niemand mehr erzählen, dass das mit dem Englisch früher ja schwierig gewesen sei, die jüngeren Japaner "in der Regel" aber schon Englisch könnten. KEIN WORT WAHR. Wir haben auf offener Straße noch niemanden gefunden, der zu Verständigung oberhalb der Fuchtelebene fähig war. Und selbst das nur mit Mühe. Aber bemüht sind sie alle.
+ (Abends habe ich gelesen, dass man englische Wörter Silbenweise aussprechen muss, weil das den Schriftzeichen entspricht, mit denen Englisch in der Schule vermittelt wird. Wahrscheinlich wissen die einfach nie wo ein Wort aufhört und das nächste anfängt. Mal sehen, vielleicht klappt's damit.) +

+
+ +
+ unspannender Tempel +

+ Nach dem Schrein waren wir im Kyoto City Zoo. Davon gibt's aber keine Bilder, weil der ziemlich deprimierend war. Eisbären auf 10qm bei 34°C und so weiter. Also wieder raus aus dem Zoo und in die umliegenden Berge, um noch ein paar Tempel zu finden. Die waren aber alle zu oder versteckt oder einfach uninteressant, deshalb sind wir mit schmerzenden Füßen zurück zur Kyoto Station. Inzwischen hatten wir auch den ÖPNV halbwegs verstanden und haben den Busfahrer nicht beim Fahrtantritt genervt - hier bezahlt man beim Aussteigen. +

+

+ Von Kyoto ging es dann wieder mit dem Shinkansen-Schnellzug zurück nach Shin-Osaka. +

+
+ +
+ Der Kyoto Tower +

+
+ Inzwischen war es etwa 21.00 Uhr, aber wir hatten von gestern ja noch etwas nachzuholen. Außerdem war nach all den Schreinen und Tempeln wieder das moderne Japan dran. Also sind wir noch nach Namba ins Vergnügungsviertel gefahren, wo wir vor lauter Begeisterung für das ganze Geblinke nicht ans Fotografieren gedacht haben. (Dafür gibt es links noch ein schönes Bild vom Kyoto Tower.) +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-23-Osaka.html b/www/fotos/2005/japan/2005-07-23-Osaka.html new file mode 100644 index 0000000..19635d8 --- /dev/null +++ b/www/fotos/2005/japan/2005-07-23-Osaka.html @@ -0,0 +1,81 @@ + + + + Japan, vierter Tag + + + + + + + + + +
+
+ teuer, aber nötig +

Randnotiz

+

+ Ein großer Teil der Menschen hier hat extrem schlechte Zähne. Ob das an den Behandlungskosten liegt oder an mangelndem Interesse, weiß ich nicht. Spielt wohl beides eine Rolle. Unter den jüngeren Japanern gibt es dagegen eine ganze Reihe, deren Zähne sehr gut gemacht sind. Das Bild ist ist von einem Laden in der Subway Mall, in dem man sich die Zähne anscheinend kurzfristig verschönern lassen kann. +

+
+
+
+ +
+ Umeda +

Umeda

+

+ Eigentlich wollten wir heute bereits nach Nagoya fahren und dort übernachten, damit wir morgen den ganzen Tag auf der Expo sein können. Da aber, wer hätte es gedacht, rund um die Expo kein Hotelzimmer zum Wochenende mehr zu bekommen war, mussten wir eben den Tag in Osaka rumbringen, was uns nach den ganzen Tempeln eigentlich ganz recht war. Schnell zurück zum Hotel, aus dem wir gerade ausgecheckt hatten und freundlich darum gebeten, dass sie uns unser Zimmer wieder geben. +

+

+ Also sind wir nach Umeda gefahren, wo man sehr gut einkaufen kann. Zwar gab es eigentlich nichts, das wir kaufen wollten (zumal unsere Koffer eigentlich schon voll genug sind), aber lustig war's trotzdem. Außerdem stellte sich schnell heraus, dass Umeda dem Vergnügungsviertel Namba kaum nachsteht - zumindest, wenn man kein Problem damit hat, ein Vergnügungsviertel einigermaßen nüchtern wieder zu verlassen. Und auch ohne Nacktbars auskommt. +

+
+ +
+ Taiko Dojo Spielautomat +

+
+ Also hinein in die Automatencasinos. Vorbei an den blöden Glücksspielen (die Japaner sind extrem interessiert an allem, was mit Glücksspiel oder Wetten zu tun hat) und ran an die Videospiele. Unser Favorit war dann auch schnell gefunden: Taiko-Dojo, oder auch Trommeln nach Zahlen. Vielleicht knacken wir noch die Million, bevor wir zurückfliegen. +

+
+ +
+ Maskottechen +

+
+ Und zum Abschluss gab es dann sogar noch ein Erinnerungsfoto mit dem lustigen Casinomaskottchen. (Leider sieht man seinen Kumpel mit der Regenbogen-Perücke nicht. Der hat das Foto gemacht.) +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-24-Osaka.html b/www/fotos/2005/japan/2005-07-24-Osaka.html new file mode 100644 index 0000000..c56c87b --- /dev/null +++ b/www/fotos/2005/japan/2005-07-24-Osaka.html @@ -0,0 +1,84 @@ + + + + Japan, fünfter Tag + + + + + + + + + +
+
+ definitiv ungenießbar +

Randnotiz

+

+ Sämtliche Restaurants, Cafés, etc. haben ihr Angebot als extrem realistische Plastik-Nachbildung im Schaufenster. Für uns Touristen ist das natürlich sehr praktisch, weil wir nur auf das gewünschte Essen zeigen müssen. McDonald's zieht selbstverständlich auch mit. +

+
+
+
+ +
+ World Expo in Aichi +

World Expo in Aichi

+

+ Heute war also die Expo dran. Da wir ja kein Zimmer in der Gegend bekommen hatten, sind wir erst mal zweieinhalb Stunden Zug gefahren. Allerdings nahm den größten Anteil daran der Shuttle-Zug, den wir sowieso hätten nehmen müssen, so dass die weitere Nacht in Osaka gar kein Nachteil war. +

+
+ +
+ kanadische Mounties +

+
+ Zuerst dachten wir, dass es vielleicht keine gute Idee war, am Sonntag auf die Expo zu gehen, weil es ziemlich voll war. Der nette Junge vom kanadischen Pavillon belehrte uns dann aber, dass wir großes Glück hätten, weil unter der Woche massenhaft Schulgruppen und Touristen auf der Expo unterwegs sind - heute waren es nur japanische Familien. "Ziemlich leer", meinte er. Außerdem war es bewölkt und unter 33°C, perfektes Wetter also. +

+

+ Dass "ziemlich leer" ziemlich relativ ist, zeigte sich dann aber doch recht deutlich; besonders vor den Länder-Pavillons, die uns der Kanadier empfohlen hatte. Die 20 Minuten für Koreas 3D-Film waren noch kein Problem, die USA waren uns die halbe Stunde nicht wert. (Stattdessen gab's Eis.) Als wir dann aber versuchten, die Beiträge Japan und Deutschland zu sehen, wurde es dann aber recht schnell ernüchternd: Etwa zwei Stunden Wartezeit. Jeweils. Extrem faszinierend dabei war, dass die Japaner sich dadurch anscheinend nicht im mindesten gestört fühlten. Die Profis hatten kleine Klapphocker zum Warten dabei, aber bei den meisten ging es auch ohne. +

+

+ Auf Deutschland konnten wir guten Gewissens verzichten, da uns jemand von der Belegschaft auf Nachfrage abgeraten hatte: "Na ja, wir haben halt 'ne Achterbahn. Aber ich würde mich nicht anstellen." +

+
+ +
+ kanadische Mounties +

+
+ Bevor es nach Hause ging, wollten wir gerne noch etwas essen, aber auch im "Food of the World Center" sah es hauptsächlich nach Anstehen aus. Allerdings nur auf den ersten Blick. Da das japanische Interesse am Ausland zumindest hier auf der Expo vor dem Essen halt machte, entschieden wir uns gegen Warten auf asiatisches Essen und für Spaghetti Bolognese. Die sechs Beschäftigten am Italien-Stand waren mit unserer einsamen Bestellung jedenfalls sichtlich unterfordert. +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-25-Tokio.html b/www/fotos/2005/japan/2005-07-25-Tokio.html new file mode 100644 index 0000000..d789f2a --- /dev/null +++ b/www/fotos/2005/japan/2005-07-25-Tokio.html @@ -0,0 +1,66 @@ + + + + Japan, sechster Tag + + + + + + + + + +
+ +


+
+
+ +
+ Ein moderner Ryokan +

Tokio

+

+ Es gibt heute nicht viel zu berichten. Wir sind drei Stunden mit dem Shinkansen Superexpress nach Tokio gefahren und haben jetzt ein Zimmer in einem modernen Ryokan. Das Hotel ist sogar noch besser als die Webseite vermuten ließ, nur haben wir davon nicht so viel, weil nur noch heute ein Zimmer frei war. Also müssen wir morgen wieder mit den Koffern quer durch Tokio. +

+

+ Abends hat es fürchterlich zu regnen angefangen und der Wetterbericht lässt für unsere Tage in Tokio nichts Gutes hoffen. Wir waren ein bißchen frustriert und haben zum Trost den örtlichen SevenEleven halb leer gekauft. Hoffentlich werden meine Schuhe bis morgen trocken. +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-26-Tokio.html b/www/fotos/2005/japan/2005-07-26-Tokio.html new file mode 100644 index 0000000..09137a3 --- /dev/null +++ b/www/fotos/2005/japan/2005-07-26-Tokio.html @@ -0,0 +1,80 @@ + + + + Japan, siebter Tag + + + + + + + + + +
+
+

Randnotiz

+

+ Heute gibt es mal eine Sammlung deutscher Dinge im japanischen Alltag. In Form von Fotos natürlich. +

+
+
+
+ +
+ Blick aus dem IBIS-Hotel +

Tokio

+

+ Wir sind in Rippongi untergekommen, einem der Vergnügungsviertel von Tokio. Wir haben ein Zimmer im 12. Stock des IBIS-Hotels. (Eigentlich ist es der 11. Stock, die zählen hier ab dem Erdgeschoss.) +

+

+ Als erstes wollten wir ins Drachenmuseum, das wir nach viel Suchen und mit der Unterstützung durch die Polizei auch fanden. Leider war der Eingang des Museums im fünften Stock durch eine Falltür verbarrikadiert, so dass man nicht einmal aus dem Fahrstuhl kam. Obwohl wir eigentlich auf die Öffnungszeiten geachtet hatten. +

+

+ Also sind wir zurück nach Roppongi, haben gegessen und im Automatencasino neben dem Hotel endlich eine Million Punkte am Taiko-Dojo-Automaten gemacht. (Wir sind auf dem sechsten Platz in der Highscore!) Außerdem haben wir einen von diesen beängstigenden Foto-Automaten ausprobiert. Das Ergebnis war sehr lustig, weil die Menüführung komplett in Japanisch war. +

+
+ +
+ Tokio-Rippongi mit dem Tokio Tower +

+ Den Rest des Abends haben wir Roppongi erkundet. Wir waren Sushi essen. (Na ja, Bettina hat gegessen und ich saß daneben.) Außerdem sind wir durch die gähnend leeren Touristenkneipen gezogen. Beim Herausgehen wurden wir immer ermahnt, dass wir auf uns acht geben sollen, weil ein Tsunami kommt. Dabei hatte es endlich mal aufgehört zu regnen. +

+

+ Zum Abschluss haben wir noch probiert, welche Süßigkeiten mit nach Deutschland müssen. Die haben hier echt widerliches Zeug, das wir natürlich möglichst vielen Leuten mitbringen möchten. +

+

+ Morgen wollen wir nochmal versuchen, wenigstens in ein Museum zu kommen. Hoffentlich sind die nicht alle verbarrikadiert. +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-26-deutsch.html b/www/fotos/2005/japan/2005-07-26-deutsch.html new file mode 100644 index 0000000..5b6f95f --- /dev/null +++ b/www/fotos/2005/japan/2005-07-26-deutsch.html @@ -0,0 +1,77 @@ + + + + Deutsches in Japan + + + + + + + + + +
+


+
+
+ +
+ Ein Dönertier, das jag' ich mir +

+
+ Sollen die doch ihr Sushi selber essen. Die Grundversorgung ist jedenfalls gesichert - Original mit deutschen Untertiteln. +

+
+ +
+ Und nur ein bißchen teurer als bei uns +

+
+ Haben wir in Deutschland Katjes "Gemüse"? +

+
+ +
+ Die kleine Raupe Nimmersatt und Momo +

+
+ Dass es Michael Ende bis hierher geschafft hat, war klar. Aber die Kleinen füttern sie sonst eher mit Mangas. +

+
+ +
+ Olliiiie! +

+
+ Sicherlich nicht alltäglich, aber fehlen dürfen die natürlich nicht. Leider erst am Tag unserer Abreise in Tokio. +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-27-Tokio.html b/www/fotos/2005/japan/2005-07-27-Tokio.html new file mode 100644 index 0000000..c64e9e7 --- /dev/null +++ b/www/fotos/2005/japan/2005-07-27-Tokio.html @@ -0,0 +1,92 @@ + + + + Japan, achter Tag + + + + + + + + + +
+
+ wie denn nun? +

Randnotiz

+

+ Ganz offensichtlich gilt in Japan die Devise: Zwei Hinweisschilder sind besser als eines. Zum einen wird man vor allem möglichen gewarnt, zum anderen gibt es hier eine lebendige Kultur der Belehrung der Öffentlichkeit. Ein ordentlicher Japaner springt nicht in Züge, wenn sich die Türen schließen, geleitet Blinde durch die Straßen, stellt sein Mobiltelefon neben den Behindertensitzen aus (macht niemand!), weiß, dass man sich an öffnenden Fahrstuhltüren die Finger klemmen kann, beschmiert keine Wände, usw, usf.
+ Außerdem darf man sein Handy nicht mehr auf Rolltreppen benutzen, wenn man der Frau vor sich fünfzig mal am Hintern herumgrabbelt. (Zumindest war das die Bedeutung, die sich aus der Illustration ergab.) +

+
+
+
+ +
+ Sollte man in Deutschland auch so machen +

Tokio

+

+ Der Tag fing heute etwas komisch an. Um elf Uhr klingelte das Telefon auf unserem Hotelzimmer und die Rezeption fragte etwas umständlich nach, wie das denn nun sei, mit uns und der Reinigung. Wir hatten nämlich, weil wir spät ins Bett gekommen waren, das "Please do not disturb"-Schild nach draußen gehängt, damit nicht um zehn Uhr die Putzkolonne anrückt. Also habe ich höflich nachgefragt, ob man das denn nicht auf morgen verschieben könnte. (Wir hatten keine Lust, unseren ganzen Kram wieder zusammenzuräumen, nur damit die die Handtücher wechseln. In dem großzügig geschnittenen Hotelzimmer kann man sich nämlich gerade noch auf der Stelle drehen, wenn unsere Koffer nicht gestapelt sind.) +

+

+ Na gut, meinte der nette Herr, wenn wir den Room Service heute nicht bräuchten... +

+
+ +
+ Where's Waldo? +

+ Drei Minuten später wurde ein Zettel unter unserer Tür hindurchgeschoben, auf dem unsere Ablehnung des Service offiziell quittiert wurde und man uns mitteilte, dass wir bis 16:30 Uhr die Möglichkeit hätten, unsere Meinung zu ändern ("But, however, if your plans has been change..."). Sollte das nicht der Fall sein ("If no advise to us by 5 pm..."), würde man sich auf das Nötigste beschränken ("replenish the amenities"). Das wunderte uns zwar ein wenig, schließlich hatten wir eigentlich deutlich zum Ausdruck gebracht, dass wir tatsächlich zwei Nächte mit derselben Bettwäsche auskommen, aber aufgeräumt haben wir trotzdem. Sie haben schließlich freundlich darum gebeten. ("Thank you for your co-operations.") +

+

+ Nach diesem vergnüglichen Start in den Tag machten wir uns auf, endlich ein paar Museen zu besichtigen. Allerdings waren wir auch heute nur mäßig erfolgreich. Eines war langweilig, das andere ein wenig kriegsverherrlichend. Das war's dann mit uns und den japanischen Museen. +

+

+ Inzwischen war es zwar schon halb sechs, aber wir wollten unseren letzten Tag in Tokio auch zum Shopping nutzen und sind deshalb quer durch die Stadt nach Asakusa gefahren, weil es dort Dinge geben sollte, die sich als Mitbringsel eignen. Genau das gab es dann auch: Jede Menge Plastikmüll für Touristen. +

+
+ +
+ Der/die/das Kaminarimon +

+ Weil wir nicht so richtig was zum Mitbringen gefunden haben, sind wir stattdessen zu einem Süßwarenstand, an dem mit einer Maschine kleine Teigkuchen gefüllt und warm verkauft wurden. Und weil wir zusehen konnten, wie dieser Teig mit köstlicher Schokolade gefüllt wurde mussten wir (Bettina!) natürlich eine große Schachtel kaufen. +

+

+ ZACK! Schon hatten sie uns. Bis jetzt hatten wir es immer rechtzeitig gemerkt, aber diesmal waren wir nicht aufmerksam genug. Selbstverständlich waren diese wunderbaren warmen Kuchen nicht mit Schokolade, sondern mit Bohnenbrei gefüllt. Der kommt hier nämlich in viele Süßwaren. Ganz so fürchterlich schmeckte es zwar nicht, aber die große Packung hätte es jetzt auch nicht sein müssen. +

+

+ Zurück in Roppongi haben wir noch den Foto-Automaten dazu bekommen, uns Aufkleber auszuspucken. Mal sehen, ob die Fotos es noch bis auf eine Postkarte schaffen. +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-28-Osaka.html b/www/fotos/2005/japan/2005-07-28-Osaka.html new file mode 100644 index 0000000..a5dd9f1 --- /dev/null +++ b/www/fotos/2005/japan/2005-07-28-Osaka.html @@ -0,0 +1,76 @@ + + + + Japan, neunter Tag + + + + + + + + + +
+
+ Hinweis an der Zimmertür im Hotel +

Randnotiz

+

+ Mit dem Englischen nehmen sie es hier nicht ganz so genau. Ok, sicher ist es schwieriger eine Sprache zu lernen, die mit der eigenen nicht verwandt ist. Aber auch Offizielles und ansonsten professionell gehaltene Produktverpackungen sind voll mit den abstrusesten Konstruktionen. Auf der Packung meines Frühstücks steht: "We want you to try to eat this sandwich." Mal sehen, ob ich das schaffe.
+ Das andere ist die Rechtschreibung. Die meisten Jugendlichen tragen T-Shirts mit englischen Aufdrucken. Und jeder zweite ist so falsch, dass es auch Menschen mit minimalen Englisch-Kenntnissen auffallen müsste. Besonders das Endungs-E hält man für überflüssig ("befor", "my favorit"). Am schönsten war aber ein T-Shirt, das man bei shel'tter kaufen konnte. Aufdruck vorne: "VIRGIN". Aufdruck hinten: "This was an old t-shits". Es war herabgesetzt. +

+
+
+
+ +
+ HEP Einkaufszentrum +

Zurück in Osaka

+

+ Heute ging es mit dem Shinkansen zurück nach Osaka. Im Zug konnte man zum Glück gut schlafen, wir hatten nämlich bis um halb drei Postkarten geschrieben. Dann hatten wir keine mehr und sind auf der Suche nach Nachschub durch Roppongi gezogen. Leider gab es nur Blankokarten mit aufgedruckter Briefmarke für Versand innerhalb Japans. Dafür haben wir eine Schere bekommen, mit der wir unsere Fotosticker zurechtschneiden können. +

+

+ Nach Osaka zurück zu fahren war so, als würde man nach Hause kommen. Im Vergleich zu Tokio ist hier alles so übersichtlich. Wir sind dann gleich noch einmal nach Umeda gefahren um die ersten Mitbringsel zu kaufen. (Also, Nivea gibt es hier wirklich nicht überall.) +

+

+ Bettina hatte kein Glück mit der Suche nach einem coolen japanischen Oberteil und ich hatte kein Glück damit, die Suche wenigstens etwas abzukürzen. Dafür habe ich im Virgin Megastore die Nadel im Heuhaufen gefunden. Hier dudelt nämlich überall ein bestimmtes Lied, das wir natürlich unbedingt haben mussten. In den Charts war es nicht und Vorsingen war uns ausnahmsweise zu peinlich, aber bei den Probehör-Stationen war eine CD, die genauso kitschig aussah, wie das Lied klingt, et voilà - das war sie! +

+
+ +
+ U-Bahn in Osaka +

+ Beeindruckend waren auch die Character Merchandise Stores. Ein Laden mit Disney-Artikeln, ein Laden mit Snoopy-Artikeln, ein Laden mit den Figuren aus der Semsamstraße. Da gibt es alles von der Snoopy-Namenskrawatte bis zur Schneewittchen-Brotbox. Und alles wird gekauft. Wir machen diesen gesteuerten Konsumwahn natürlich nicht mit. Wir haben das Einkaufszentrum direkt verlassen und sind ins benachbarte Warenhaus gegangen. Schließlich haben nur die eine spezielle "Hello Kitty"-Abteilung, in der es diese süßen Sachen gibt, die wir unbedingt nach Deutschland mitbringen müssen. +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/2005-07-29-Osaka.html b/www/fotos/2005/japan/2005-07-29-Osaka.html new file mode 100644 index 0000000..55d2d4f --- /dev/null +++ b/www/fotos/2005/japan/2005-07-29-Osaka.html @@ -0,0 +1,84 @@ + + + + Japan, zehnter Tag + + + + + + + + + +
+
+ Information im Kaufhaus Takashimaya +

Randnotiz

+

+ Hier gibt es unheimlich viel Personal für alles Mögliche und Unmögliche. Einmal sind da massenhaft Reinigungskräfte, die die Bahnhöfe auf der dauernden Suche nach fallengelassenem Papier durchstreifen. Und dann gibt es die Kaufhäuser. Die müssen nämlich durch überproportional viel Personal nachweisen, dass das Wohl ihrer Kunden über allem anderen steht. In einem besseren Kaufhaus steht stets eine adrett gekleidete Dame an der Rolltreppe hinter dem Eingang und nickt jedem, wirklich jedem Kunden zur Begrüßung zu. Ab und zu wischt sie auch das Geländer der Rolltreppe. +

+
+
+
+ +
+ linker Wächter + rechter Wächter +

Letzter Tag in Osaka

+

+ Da heute unser letzter Tag war, wollten wir nochmal das volle Programm haben. Deshalb sind wir zuerst einmal zum Shitennoji-Tempel gefahren und haben - TADA - doch tatsächlich noch ein Museum besucht. Das war zwar nicht sehr groß, aber ziemlich interessant. Neben riesengroßen zeremoniellen Gongs gab es sechshundert Jahre alte Biographie-Comics. +

+

+ Innerhalb der Tempelanlage befindet sich auch ein großer Friedhof, was hier etwas Besonderes ist, weil man nicht sehr viel Platz hat, auch für Friedhöfe nicht. Zum Glück nehmen buddhistische Gräber traditionellerweise nicht so viel Platz ein. Außerdem gab es noch einen Teich in der Tempelanlage, der voll mit Schildkröten war. +

+
+ +
+ Irgendwo zwischen Den-Den-Town und Namba +

+ Nachdem wir mit der Tempelanlage fertig waren, sind wir nach Den-Den-Town gefahren. Das ist der Stadtteil von Osaka, in dem man alles kaufen kann, was mit Technik zu tun hat. Wir hatten eigentlich eine Reihe von Media-Markt-Verwandten erwartet, fanden aber nur reihenweise Einzelhändler, die sich gegenseitig durch möglichst laute Außenwerbung zu übertreffen versuchten. +

+

+ Außerdem gab es mindestens soviele Mangaläden wie Technikgeschäfte. Das sind hier ziemlich große, mehrstöckige Geschäfte mit meterlangen Regalgängen. Da gibt es billige Massenware, eingeschweißte Sammlerstücke (wie beim Comic Book +Guy bei den Simpsons) und natürlich Manga-Figuren. Und immer eine große Erwachsenenabteilung. Die Erotik-, nein, Porno-Mangas kann man hier überall kaufen - eine beliebte Lektüre für die U-Bahn. +

+
+ +
+ Irgendwo zwischen Den-Den-Town und Namba +

+ Als die Geschäfte anfingen, alle gleich auszusehen, sind wir umgekehrt und bis nach Namba gelaufen, wo wir noch ein letztes mal am Taiko-Dojo-Automaten getrommelt und ein Eis gegessen haben. Außerdem konnten wir noch ein paar Mitbringsel ergattern. Gegen sechs Uhr sind wir dann zurück nach Shin-Osaka gefahren und haben, wie bereits lange geplant, die Süßwaren- und Trockenfisch-Abteilungen unserer beiden Lieblingssupermärkte halb leer gekauft. Glücklicherweise haben wir beide noch ziemlich viel Platz in unseren Koffern. Die Gepäckkontrolle morgen verspricht jedenfalls lustig zu werden. Ist die Ausfuhr von Tintenfisch und Schokopilzen irgendwie beschränkt? Eigenbedarf können wir wohl kaum geltend machen... +

+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japan/IMG_3096.jpg b/www/fotos/2005/japan/IMG_3096.jpg new file mode 100644 index 0000000..a8a3933 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3096.jpg differ diff --git a/www/fotos/2005/japan/IMG_3112.jpg b/www/fotos/2005/japan/IMG_3112.jpg new file mode 100644 index 0000000..e1e67cc Binary files /dev/null and b/www/fotos/2005/japan/IMG_3112.jpg differ diff --git a/www/fotos/2005/japan/IMG_3127.jpg b/www/fotos/2005/japan/IMG_3127.jpg new file mode 100644 index 0000000..1ea0a5a Binary files /dev/null and b/www/fotos/2005/japan/IMG_3127.jpg differ diff --git a/www/fotos/2005/japan/IMG_3138.jpg b/www/fotos/2005/japan/IMG_3138.jpg new file mode 100644 index 0000000..aafb32d Binary files /dev/null and b/www/fotos/2005/japan/IMG_3138.jpg differ diff --git a/www/fotos/2005/japan/IMG_3166.jpg b/www/fotos/2005/japan/IMG_3166.jpg new file mode 100644 index 0000000..e2a9d77 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3166.jpg differ diff --git a/www/fotos/2005/japan/IMG_3170.jpg b/www/fotos/2005/japan/IMG_3170.jpg new file mode 100644 index 0000000..d85dc86 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3170.jpg differ diff --git a/www/fotos/2005/japan/IMG_3176.jpg b/www/fotos/2005/japan/IMG_3176.jpg new file mode 100644 index 0000000..a4852d2 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3176.jpg differ diff --git a/www/fotos/2005/japan/IMG_3186.jpg b/www/fotos/2005/japan/IMG_3186.jpg new file mode 100644 index 0000000..66b52b4 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3186.jpg differ diff --git a/www/fotos/2005/japan/IMG_3207.jpg b/www/fotos/2005/japan/IMG_3207.jpg new file mode 100644 index 0000000..e90de7e Binary files /dev/null and b/www/fotos/2005/japan/IMG_3207.jpg differ diff --git a/www/fotos/2005/japan/IMG_3215.jpg b/www/fotos/2005/japan/IMG_3215.jpg new file mode 100644 index 0000000..52ca6bd Binary files /dev/null and b/www/fotos/2005/japan/IMG_3215.jpg differ diff --git a/www/fotos/2005/japan/IMG_3219.jpg b/www/fotos/2005/japan/IMG_3219.jpg new file mode 100644 index 0000000..1b7d2d8 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3219.jpg differ diff --git a/www/fotos/2005/japan/IMG_3221.jpg b/www/fotos/2005/japan/IMG_3221.jpg new file mode 100644 index 0000000..500d88d Binary files /dev/null and b/www/fotos/2005/japan/IMG_3221.jpg differ diff --git a/www/fotos/2005/japan/IMG_3226.jpg b/www/fotos/2005/japan/IMG_3226.jpg new file mode 100644 index 0000000..553e0b3 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3226.jpg differ diff --git a/www/fotos/2005/japan/IMG_3235.jpg b/www/fotos/2005/japan/IMG_3235.jpg new file mode 100644 index 0000000..99aacf8 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3235.jpg differ diff --git a/www/fotos/2005/japan/IMG_3245.jpg b/www/fotos/2005/japan/IMG_3245.jpg new file mode 100644 index 0000000..840fa82 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3245.jpg differ diff --git a/www/fotos/2005/japan/IMG_3252.jpg b/www/fotos/2005/japan/IMG_3252.jpg new file mode 100644 index 0000000..eada2e9 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3252.jpg differ diff --git a/www/fotos/2005/japan/IMG_3253.jpg b/www/fotos/2005/japan/IMG_3253.jpg new file mode 100644 index 0000000..69fbaf7 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3253.jpg differ diff --git a/www/fotos/2005/japan/IMG_3264.jpg b/www/fotos/2005/japan/IMG_3264.jpg new file mode 100644 index 0000000..7229ab3 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3264.jpg differ diff --git a/www/fotos/2005/japan/IMG_3266.jpg b/www/fotos/2005/japan/IMG_3266.jpg new file mode 100644 index 0000000..f7883c6 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3266.jpg differ diff --git a/www/fotos/2005/japan/IMG_3276.jpg b/www/fotos/2005/japan/IMG_3276.jpg new file mode 100644 index 0000000..a99c027 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3276.jpg differ diff --git a/www/fotos/2005/japan/IMG_3309.jpg b/www/fotos/2005/japan/IMG_3309.jpg new file mode 100644 index 0000000..0b650c0 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3309.jpg differ diff --git a/www/fotos/2005/japan/IMG_3310.jpg b/www/fotos/2005/japan/IMG_3310.jpg new file mode 100644 index 0000000..862c141 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3310.jpg differ diff --git a/www/fotos/2005/japan/IMG_3344.jpg b/www/fotos/2005/japan/IMG_3344.jpg new file mode 100644 index 0000000..0929ca2 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3344.jpg differ diff --git a/www/fotos/2005/japan/IMG_3358.jpg b/www/fotos/2005/japan/IMG_3358.jpg new file mode 100644 index 0000000..acdb8b6 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3358.jpg differ diff --git a/www/fotos/2005/japan/IMG_3361.jpg b/www/fotos/2005/japan/IMG_3361.jpg new file mode 100644 index 0000000..b6b3395 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3361.jpg differ diff --git a/www/fotos/2005/japan/IMG_3370.jpg b/www/fotos/2005/japan/IMG_3370.jpg new file mode 100644 index 0000000..5748c53 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3370.jpg differ diff --git a/www/fotos/2005/japan/IMG_3382.jpg b/www/fotos/2005/japan/IMG_3382.jpg new file mode 100644 index 0000000..7a6de67 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3382.jpg differ diff --git a/www/fotos/2005/japan/IMG_3400.jpg b/www/fotos/2005/japan/IMG_3400.jpg new file mode 100644 index 0000000..9a19800 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3400.jpg differ diff --git a/www/fotos/2005/japan/IMG_3403.jpg b/www/fotos/2005/japan/IMG_3403.jpg new file mode 100644 index 0000000..e4ab8e1 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3403.jpg differ diff --git a/www/fotos/2005/japan/IMG_3542.jpg b/www/fotos/2005/japan/IMG_3542.jpg new file mode 100644 index 0000000..178e334 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3542.jpg differ diff --git a/www/fotos/2005/japan/IMG_3571.jpg b/www/fotos/2005/japan/IMG_3571.jpg new file mode 100644 index 0000000..248d383 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3571.jpg differ diff --git a/www/fotos/2005/japan/IMG_3578.jpg b/www/fotos/2005/japan/IMG_3578.jpg new file mode 100644 index 0000000..8ea2446 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3578.jpg differ diff --git a/www/fotos/2005/japan/IMG_3591.jpg b/www/fotos/2005/japan/IMG_3591.jpg new file mode 100644 index 0000000..387ba02 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3591.jpg differ diff --git a/www/fotos/2005/japan/IMG_3593.jpg b/www/fotos/2005/japan/IMG_3593.jpg new file mode 100644 index 0000000..bb9c481 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3593.jpg differ diff --git a/www/fotos/2005/japan/IMG_3595.jpg b/www/fotos/2005/japan/IMG_3595.jpg new file mode 100644 index 0000000..7fa6857 Binary files /dev/null and b/www/fotos/2005/japan/IMG_3595.jpg differ diff --git a/www/fotos/2005/japan/IMG_3606.jpg b/www/fotos/2005/japan/IMG_3606.jpg new file mode 100644 index 0000000..035f49b Binary files /dev/null and b/www/fotos/2005/japan/IMG_3606.jpg differ diff --git a/www/fotos/2005/japan/IMG_3612.jpg b/www/fotos/2005/japan/IMG_3612.jpg new file mode 100644 index 0000000..49791fc Binary files /dev/null and b/www/fotos/2005/japan/IMG_3612.jpg differ diff --git a/www/fotos/2005/japan/index.html b/www/fotos/2005/japan/index.html new file mode 100644 index 0000000..7f3b93f --- /dev/null +++ b/www/fotos/2005/japan/index.html @@ -0,0 +1,70 @@ + + + + Japanreise 2005 + + + + + + + + + + + +
+
+ +

+
+

+
+
+
+ +
+ Kyoto, aus dem Zug heraus aufgenommen +

Japanreise 2005

+
    +
  1. 20. Juli
  2. +
  3. 21. Juli
  4. +
  5. 22. Juli
  6. +
  7. 23. Juli
  8. +
  9. 24. Juli
  10. +
  11. 25. Juli
  12. +
  13. 26. Juli
  14. +
  15. 27. Juli
  16. +
  17. 28. Juli
  18. +
  19. 29. Juli
  20. +
+
+ + + +
 
+
+ + + + diff --git a/www/fotos/2005/japanabend/bilder/.htaccess b/www/fotos/2005/japanabend/bilder/.htaccess new file mode 100644 index 0000000..03688ee --- /dev/null +++ b/www/fotos/2005/japanabend/bilder/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-05-27.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-05-27.jpg new file mode 100644 index 0000000..087615a Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-05-27.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-05-35.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-05-35.jpg new file mode 100644 index 0000000..92f484f Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-05-35.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-06-27.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-06-27.jpg new file mode 100644 index 0000000..2ca9287 Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-06-27.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-00.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-00.jpg new file mode 100644 index 0000000..16fb9b2 Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-00.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-30.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-30.jpg new file mode 100644 index 0000000..b15ae05 Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-30.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-44.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-44.jpg new file mode 100644 index 0000000..d629cd5 Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-44.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-59.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-59.jpg new file mode 100644 index 0000000..805c0a6 Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-07-59.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-08-55.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-08-55.jpg new file mode 100644 index 0000000..52257dd Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-08-55.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-10-22.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-10-22.jpg new file mode 100644 index 0000000..1e150cd Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-10-22.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-11-29.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-11-29.jpg new file mode 100644 index 0000000..c5479bd Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-11-29.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-11-57.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-11-57.jpg new file mode 100644 index 0000000..8d4ae22 Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-11-57.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-12-36.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-12-36.jpg new file mode 100644 index 0000000..d87bc41 Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-12-36.jpg differ diff --git a/www/fotos/2005/japanabend/bilder/2005-08-13 22-13-12.jpg b/www/fotos/2005/japanabend/bilder/2005-08-13 22-13-12.jpg new file mode 100644 index 0000000..88aad3c Binary files /dev/null and b/www/fotos/2005/japanabend/bilder/2005-08-13 22-13-12.jpg differ diff --git a/www/fotos/2005/japanabend/index.php b/www/fotos/2005/japanabend/index.php new file mode 100644 index 0000000..20d1577 --- /dev/null +++ b/www/fotos/2005/japanabend/index.php @@ -0,0 +1,23 @@ + + +
+ +
+ + diff --git a/www/fotos/2006/fahrradtour/bilder/.htaccess b/www/fotos/2006/fahrradtour/bilder/.htaccess new file mode 100644 index 0000000..03688ee --- /dev/null +++ b/www/fotos/2006/fahrradtour/bilder/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 08-43-23.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 08-43-23.jpg new file mode 100644 index 0000000..de69d20 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 08-43-23.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 11-15-13.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 11-15-13.jpg new file mode 100644 index 0000000..8999601 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 11-15-13.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 11-16-39.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 11-16-39.jpg new file mode 100644 index 0000000..0f13b42 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 11-16-39.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 13-11-28.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 13-11-28.jpg new file mode 100644 index 0000000..9b255e5 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 13-11-28.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 13-12-36.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 13-12-36.jpg new file mode 100644 index 0000000..530c794 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 13-12-36.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 13-13-36.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 13-13-36.jpg new file mode 100644 index 0000000..f45f889 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 13-13-36.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 14-57-37.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 14-57-37.jpg new file mode 100644 index 0000000..1fd7b20 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 14-57-37.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 14-57-58.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 14-57-58.jpg new file mode 100644 index 0000000..ae843d1 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 14-57-58.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-10-10.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-10-10.jpg new file mode 100644 index 0000000..24fc5fb Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-10-10.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-10-18.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-10-18.jpg new file mode 100644 index 0000000..24377d4 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-10-18.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-12-27.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-12-27.jpg new file mode 100644 index 0000000..93a3617 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-12-27.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-13-28.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-13-28.jpg new file mode 100644 index 0000000..2421d27 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-13-28.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-13-47.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-13-47.jpg new file mode 100644 index 0000000..cf7e66e Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-13-47.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-14-07.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-14-07.jpg new file mode 100644 index 0000000..44ed38f Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 15-14-07.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-13 16-21-29.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-13 16-21-29.jpg new file mode 100644 index 0000000..092eabd Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-13 16-21-29.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-14 10-20-10.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-14 10-20-10.jpg new file mode 100644 index 0000000..93b67ef Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-14 10-20-10.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-14 10-20-18.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-14 10-20-18.jpg new file mode 100644 index 0000000..310cb96 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-14 10-20-18.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-14 10-21-51.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-14 10-21-51.jpg new file mode 100644 index 0000000..c6644c5 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-14 10-21-51.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-14 11-49-56.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-14 11-49-56.jpg new file mode 100644 index 0000000..c4b0d75 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-14 11-49-56.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-14 11-59-16.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-14 11-59-16.jpg new file mode 100644 index 0000000..17c05c2 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-14 11-59-16.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-14 12-02-15.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-14 12-02-15.jpg new file mode 100644 index 0000000..f818622 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-14 12-02-15.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 11-26-58.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 11-26-58.jpg new file mode 100644 index 0000000..685034c Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 11-26-58.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 11-27-57.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 11-27-57.jpg new file mode 100644 index 0000000..125a68f Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 11-27-57.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 11-29-23.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 11-29-23.jpg new file mode 100644 index 0000000..96f5c83 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 11-29-23.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 13-54-08.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 13-54-08.jpg new file mode 100644 index 0000000..b5dd4bf Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 13-54-08.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 14-55-16.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 14-55-16.jpg new file mode 100644 index 0000000..53b36e8 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 14-55-16.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 15-46-09.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 15-46-09.jpg new file mode 100644 index 0000000..c6b1dc6 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 15-46-09.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 15-46-41.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 15-46-41.jpg new file mode 100644 index 0000000..6d8091b Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 15-46-41.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 18-50-41.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 18-50-41.jpg new file mode 100644 index 0000000..284dfc5 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 18-50-41.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 18-59-46.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 18-59-46.jpg new file mode 100644 index 0000000..013fbf9 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 18-59-46.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 19-06-19.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 19-06-19.jpg new file mode 100644 index 0000000..89e3767 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 19-06-19.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 19-07-08.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 19-07-08.jpg new file mode 100644 index 0000000..a775e23 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 19-07-08.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-11-45.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-11-45.jpg new file mode 100644 index 0000000..5cda11c Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-11-45.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-12-00.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-12-00.jpg new file mode 100644 index 0000000..84957d3 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-12-00.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-13-45.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-13-45.jpg new file mode 100644 index 0000000..e745cae Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-13-45.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-14-33.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-14-33.jpg new file mode 100644 index 0000000..d136e47 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-14-33.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-15-46.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-15-46.jpg new file mode 100644 index 0000000..0acb7eb Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-15 23-15-46.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-16 13-15-01.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-16 13-15-01.jpg new file mode 100644 index 0000000..91636d1 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-16 13-15-01.jpg differ diff --git a/www/fotos/2006/fahrradtour/bilder/2006-04-16 13-15-19.jpg b/www/fotos/2006/fahrradtour/bilder/2006-04-16 13-15-19.jpg new file mode 100644 index 0000000..29c31f9 Binary files /dev/null and b/www/fotos/2006/fahrradtour/bilder/2006-04-16 13-15-19.jpg differ diff --git a/www/fotos/2006/fahrradtour/index.php b/www/fotos/2006/fahrradtour/index.php new file mode 100644 index 0000000..beb1473 --- /dev/null +++ b/www/fotos/2006/fahrradtour/index.php @@ -0,0 +1,23 @@ + + +
+ +
+ + diff --git a/www/fotos/index.php b/www/fotos/index.php new file mode 100644 index 0000000..c8318d5 --- /dev/null +++ b/www/fotos/index.php @@ -0,0 +1,67 @@ + + +
+ +

Fotos & Multimedia

+ + + +

Israel 2000

+

+ Den ersten Teil meines Zivildienstes habe ich in Pardess Hanna in der Agricultural Secondary School geleistet. + Hier kann man meine damalige Webseite sehen. +

+ + + + + +

Japan 2005

+

+ Im Juli 2005 ist Bettina mit den FU-Fighters + zur Roboterfußball-Weltmeisterschaft in Osaka gefahren, wo sie + sehr erfolgreich waren. + Ich konnte leider erst nach der WM kommen, die anschließende Reise war aber sicher nicht weniger interessant. +

+ +

Private Fotosammlung

+
+ +

+

+

+

+

+ + + +
+ +
+ + diff --git a/www/google9b122a3046a014bc.html b/www/google9b122a3046a014bc.html new file mode 100644 index 0000000..e69de29 diff --git a/www/index.php b/www/index.php new file mode 100644 index 0000000..7ea7130 --- /dev/null +++ b/www/index.php @@ -0,0 +1,86 @@ + + +
+ +
+

Tilman is the name

+
+
+ Hast du ein Stichwort von mir bekommen?
+ Hiermit geht es direkt zur entsprechenden Seite: +
+
+ +
+
+ + + + + +
+

Persönliches

+

+
+
+ +

+
+ +
+

Info

+

+ Über diese Seite
+ Kontakt
+ Impressum +

+ +
+ +
+ +
 
+ + diff --git a/www/info/impressum.jpg b/www/info/impressum.jpg new file mode 100644 index 0000000..966b79f Binary files /dev/null and b/www/info/impressum.jpg differ diff --git a/www/info/impressum.php b/www/info/impressum.php new file mode 100644 index 0000000..eace405 --- /dev/null +++ b/www/info/impressum.php @@ -0,0 +1,17 @@ + + +
+ impressum +
+ + diff --git a/www/info/index.php b/www/info/index.php new file mode 100644 index 0000000..bdbc8df --- /dev/null +++ b/www/info/index.php @@ -0,0 +1,25 @@ + + +
+

+ Wie dem einen oder anderen vielleicht auffällt, befindet sich die Seite nach wie vor schwer im Entstehen.
+ Damit es überhaupt erst mal losgeht beginne ich mit Inhalten die bereits fertig sind und ruhig mal ins Netz dürfen - also Uni-Kram. Weiter geht es dann mit den dynamischen Inhalten und auch die Tilman-Page soll natürlich möglichst bald wieder online sein.
+ Eine Box nach der anderen - 's wird. +

+ +

+ Valid XHTML 1.0! +

+
+ + diff --git a/www/info/kontakt.php b/www/info/kontakt.php new file mode 100644 index 0000000..4a7bfbe --- /dev/null +++ b/www/info/kontakt.php @@ -0,0 +1,86 @@ + + +")) { + @mail("feedback@tilman.de", "Sendebestätigung: Feedback von tilman.de", "Gerade wurde eine Mail von ".$author." <$mailaddresses[0]> versendet.", "From: \"Tilman Walther\" "); +?> + +
+

+ Die Nachricht wurde erfolgreich versendet, vielen Dank. +

+
+ + + +
+

+ Ein Fehler ist aufgetreten, die Nachricht konnte nicht versendet werden.
+ Bitte versuchen Sie es später noch einmal. +

+
+ + + +
+
+

+ Absender
+ +

+

+ eMail-Adresse
+ +

+

+ Nachricht
+ +

+

+   +

+
+
+ + + + diff --git a/www/login.php b/www/login.php new file mode 100644 index 0000000..8ace8fd --- /dev/null +++ b/www/login.php @@ -0,0 +1,96 @@ + + +
+ +\n"; + echo "\tDie Seite ".$_GET['restricted']." ist nicht für Deinen Zugang freigeschaltet.\n"; + echo "\tFalls Du das für falsch hältst, schreib mir eine Nachricht\n"; + echo "

"; + } + else { + echo "

\n"; + echo "\tUm die Seite ".$_GET['restricted']." aufzurufen wird ein Nutzerzugang mit entsprechenden Rechten benötigt.\n"; + echo "

"; + } + } +?> + +
+ + + + + + + + + + + +
Name
Passwort
+
+
+ + diff --git a/www/logout.php b/www/logout.php new file mode 100644 index 0000000..5191aff --- /dev/null +++ b/www/logout.php @@ -0,0 +1,32 @@ + + +
+

+ Sie haben sich abgemeldet. +

+

+ zurück zur Startseite +

+
+ + diff --git a/www/privat/adressen.php b/www/privat/adressen.php new file mode 100644 index 0000000..8bff772 --- /dev/null +++ b/www/privat/adressen.php @@ -0,0 +1,150 @@ + + +Insert failed: '.mysql_error().'

'; + } + } + + if (isset($_GET['delete'])) { + $delete = mysql_query('DELETE FROM adressen WHERE id='.$_GET['delete']); + if (!$delete) { + echo '

Could not delete '.$_GET['delete'].': '.mysql_error().'

'; + } + } + + $orderby = 'id'; + if (isset($_GET['orderby'])) { + $orderby = urldecode($_GET['orderby']); + } + + $result = mysql_query('SELECT * FROM adressen ORDER BY "'.$orderby.'" ASC'); + if (!$result) { + die('Database error: Unable to get table (order by: '.$orderby.')'); + } + + function getSortingLink($row, $title) { + return ''.$title.''; + } +?> + +
+ + + + + + + + + + + + + + + + + + + +"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t\t"; + echo "\t\t"; + } +?> +
\t\t\t\t".$row['id']."\t\t\t\t\t\t\t".$row['Vorname']."\t\t\t\t\t\t\t".$row['Nachname']."\t\t\t\t\t\t\t".$row['Anschrift']."\t\t\t\t\t\t\t".$row['PLZ']."\t\t\t\t\t\t\t".$row['Ort']."\t\t\t\t\t\t\t".$row['Telefon']."\t\t\t\t\t\t\t".$row['Tel_alt']."\t\t\t\t\t\t\t".$row['Tel_Mobil']."\t\t\t\t\t\t\t".$row['eMail']."\t\t\t\t\t\t\t".$row['eMail_alt']."\t\t\t\t\t\t\t".$row['Geburtstag']."\t\t\t\t\t\t\t".$row['Gruppe']."\t\t\t\t\t\t\t".$row['Bemerkung']."\t\t\t\t\t\t\tedit\t\t\t\t\t\t\tdel\t\t\t
+ +
+
+ + + + + + + + + + + + + + + +
VornameNachnameAnschriftPLZOrt
+ + + + + + + + + + + + + + + +
Tel. privatTel. geschäftlichTel. mobilE-Mail privatE-Mail geschäftlich
+ + + + + + + + + + + +
GeburtstagGruppeBemerkung
+ +
+ +
+
+
+ + diff --git a/www/privat/kalender.php b/www/privat/kalender.php new file mode 100644 index 0000000..8d3498a --- /dev/null +++ b/www/privat/kalender.php @@ -0,0 +1,16 @@ + + +
+ Kalender +
+ + diff --git a/www/privat/lesezeichen.php b/www/privat/lesezeichen.php new file mode 100644 index 0000000..5614bcf --- /dev/null +++ b/www/privat/lesezeichen.php @@ -0,0 +1,16 @@ + + +
+ Lesezeichen +
+ + diff --git a/www/programme/doppeltemehrheit/doppelteMehrheit/Starter.class b/www/programme/doppeltemehrheit/doppelteMehrheit/Starter.class new file mode 100644 index 0000000..f86bce4 Binary files /dev/null and b/www/programme/doppeltemehrheit/doppelteMehrheit/Starter.class differ diff --git a/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui$1.class b/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui$1.class new file mode 100644 index 0000000..75076e8 Binary files /dev/null and b/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui$1.class differ diff --git a/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui$2.class b/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui$2.class new file mode 100644 index 0000000..95a6694 Binary files /dev/null and b/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui$2.class differ diff --git a/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui$3.class b/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui$3.class new file mode 100644 index 0000000..d14d912 Binary files /dev/null and b/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui$3.class differ diff --git a/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui.class b/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui.class new file mode 100644 index 0000000..4b1c944 Binary files /dev/null and b/www/programme/doppeltemehrheit/doppelteMehrheit/SwingGui.class differ diff --git a/www/programme/doppeltemehrheit/index.html b/www/programme/doppeltemehrheit/index.html new file mode 100644 index 0000000..d60744b --- /dev/null +++ b/www/programme/doppeltemehrheit/index.html @@ -0,0 +1,13 @@ + + + Mehrheiten Applet + + +

+ Aktuelle Version: 0.68
+

+

+ +

+ + \ No newline at end of file diff --git a/www/programme/index.php b/www/programme/index.php new file mode 100644 index 0000000..e02a2ab --- /dev/null +++ b/www/programme/index.php @@ -0,0 +1,67 @@ + + +
+

Programme

+

+ Zu Programmieren angefangen habe ich mit Turbo Pascal 6.0 (QBasic zählt nicht). Auf den Nachfolger Delphi/Object Pascal bin ich nie + so richtig eingestiegen, stattdessen habe ich mich mit C++ auseinandergesetzt.
+ Auf der Uni durfte ich dann funktional mit Miranda und Haskell programmieren, was aber nie so ganz mein Ding war. + Später ging es dann mit Java weiter, der Sprache, mit der ich + inzwischen am meisten arbeite.
+ Privat habe ich ein etwas mit Perl experimentiert, nutze PHP und etwas ActionScript für Webseiten und konnte + mich bei Gelegenheit auch mit Lingo beschäftigen. +

+ +

SyncTool

+

+ Java-Applikation +

+

+ Das Programm synchronisiert die Dateien in zwei Verzeichnissen rekursiv anhand des Änderungsdatums, der Größe und (optional) des Inhalts bei geringem Speicherverbrauch. +

+ +

MathParser

+

+ Java-Applikation +

+

+ MathParser entstand auf Initiative von und in Zusammenarbeit mit Martin Wilke. Das Programm wandelt MathML in LaTeX-Code um. + Besonderer Schwerpunkt liegt auf der Umwandlung von exportierten Mathcad-Daten nach LaTeX, um das Abtippen beispielsweise + für Projektberichte zu ersparen. +

+ +

Lister

+

+ PHP-Skript +

+

+ Ein Skript, das Datei-Uploads in ein Server-Verzeichnis ermöglicht. +

+ +

Doppelte Mehrheit

+

+ Java-Applet (JApplet) +

+

+ Als eine Freundin von mir im Bundestag ein Praktikum machte, stand gerade die Entscheidung über die Änderung der + Verfahrensmodalitäten zur + Doppelten Mehrheit + im Zuge der EU-Erweiterung an. Damit sie abschätzen konnte, wie sich bei bestimmten Änderungen die Mehrheitsverhältnisse + verschieben, habe ich dieses Programm für sie geschrieben. (Echtes RAD!)
+ Besonders interessant war, die Swing-Tabelle zur Zusammenarbeit mit JComboBoxen zu überreden. Den Quelltext + schaue ich immer mal wieder an, wenn ich länger nicht mit Swing gearbeitet habe und Komponenten verschachteln + oder einfach einen Statusbalken threaden muss. +

+
+ + diff --git a/www/programme/lister/index.en.php b/www/programme/lister/index.en.php new file mode 100644 index 0000000..cc43845 --- /dev/null +++ b/www/programme/lister/index.en.php @@ -0,0 +1,106 @@ + + +
+ +
+ Deutsch +
+ +Lister screenshot + +

Lister

+

+Lister is a PHP script that allows file uploads and downloads in a directory. Uploaded files are shown in a table. +

+ +

Features

+
    +
  • File upload, download an deletion
  • +
  • Uploads and downloads can be secured with a password (optional)
  • +
  • By default all file names are URL encoded on upload, preventing problems with special characters.
  • +
  • Secured with Apache directives in a .htaccess file
  • +
  • Interface in German and English, depending on browser settings.
  • +
  • valid XHTML 1.0
  • +
+ +

Installation

+
    +
  1. + Make a directory on your web server and set the permissions to 757 + (chmod 757 directory) +
  2. +
  3. + Copy lister.php and .htaccess into the directory. +
  4. +
  5. + If you want to set a password for upload and deletion, write it into a file named password.txt + and also copy it into the directory. +
  6. +
  7. + Security check: Open Lister and upload a file. Try to access it directly via URL on the server + (e.g. http://www.myserver.com/lister/uploaded-file.txt). If an error message appears + ("Access Denied"), your installation should be secure. +
  8. +
+ +

+ Setting Options: If needed, various options can be set in the setup area at the beginning of lister.php. +

+ +
+
+ + + + + +
+ + + + + + + +
Scripts.comScripts.comRate this script:
+
+
+
+ +

Download

+
+
+Creative Commons License +
+

+ Lister is provided under the Creative Commons Attribution-ShareAlike 2.0 Germany License.
+ The software is made available free of charge; thus, no express or implied warranties are made. +

+

+ Download Lister v1.89 +

+
+ +
+ + diff --git a/www/programme/lister/index.php b/www/programme/lister/index.php new file mode 100644 index 0000000..180b7b2 --- /dev/null +++ b/www/programme/lister/index.php @@ -0,0 +1,91 @@ + + +
+ +
+ English +
+ +
+ Scripts.com +
+ +Lister Screenshot + +

Lister

+

+Lister ist ein PHP-Skript, das Uploads und Downloads in einem Verzeichnis ermöglicht. Man kopiert das Skript einfach in das Verzeichnis. +Hochgeladene Dateien werden in einer Tabelle angezeigt. +

+ +

Features

+
    +
  • Dateien hochladen, herunterladen und löschen
  • +
  • Hochladen und Löschen Passwort-geschützt (optional)
  • +
  • In der Standardeinstellung werden alle Dateinamen beim Hochladen URL-kodiert. Dadurch gibt es keine Probleme mit Sonderzeichen.
  • +
  • Absicherung über Apache-Direktiven in einer .htaccess-Datei
  • +
  • Oberfläche in Deutsch und Englisch. Anzeige je nach Browser-Einstellung.
  • +
  • valid XHTML 1.0
  • +
+ +

Installation

+
    +
  1. + Verzeichnis auf dem Server anlegen und Rechte auf 757 setzen. + (chmod 757 verzeichnis) +
  2. +
  3. + Die Dateien lister.php und .htaccess in das Verzeichnis kopieren. +
  4. +
  5. + Falls ein Passwort für das Hochladen und Löschen von Dateien gesetzt werden soll, das Passwort in eine + Datei mit Namen password.txt schreiben und diese ebenfalls in das Verzeichnis legen. +
  6. +
  7. + Sicherheits-Check: Lister auf dem Server öffnen und eine Datei hochladen. Danach versuchen, die hochgeladene + Datei direkt über die URL zu öffnen (z.B. http://www.meinserver.com/lister/hochgeladene-datei.txt). + Wenn eine Fehlermeldung angezeigt wird („Zugriff verweigert“), sollte die Installation abgesichert sein. +
  8. +
+ +

+ Optionen setzen: Falls benötigt, können verschiedene Optionen im Bereich „Setup“ am Anfang der Datei lister.php verändert werden. +

+ +

Download

+
+
+Creative Commons License +
+

+ Lister wird unter der Creative Commons Attribution-ShareAlike 2.0 Germany License zur Verfügung gestellt.
+ Unabhängig davon gilt: Die Benutzung erfolgt stets auf eigene Gefahr. Der Autor übernimmt keine Haftung für direkte oder indirekte Schäden die durch die Nutzung des Programms hervorgerufen werden. +

+

+ Download Lister v1.89 +

+
+ +
+ + diff --git a/www/programme/lister/lister.zip b/www/programme/lister/lister.zip new file mode 100644 index 0000000..89dd814 Binary files /dev/null and b/www/programme/lister/lister.zip differ diff --git a/www/programme/lister/lister_screenshot.en.gif b/www/programme/lister/lister_screenshot.en.gif new file mode 100644 index 0000000..31f3587 Binary files /dev/null and b/www/programme/lister/lister_screenshot.en.gif differ diff --git a/www/programme/lister/lister_screenshot.gif b/www/programme/lister/lister_screenshot.gif new file mode 100644 index 0000000..56672b9 Binary files /dev/null and b/www/programme/lister/lister_screenshot.gif differ diff --git a/www/programme/mathparser/MathParser056-src.zip b/www/programme/mathparser/MathParser056-src.zip new file mode 100644 index 0000000..00d1d18 Binary files /dev/null and b/www/programme/mathparser/MathParser056-src.zip differ diff --git a/www/programme/mathparser/MathParser056.jar b/www/programme/mathparser/MathParser056.jar new file mode 100644 index 0000000..2c38c65 Binary files /dev/null and b/www/programme/mathparser/MathParser056.jar differ diff --git a/www/programme/mathparser/anleitung.html b/www/programme/mathparser/anleitung.html new file mode 100644 index 0000000..beaa6db --- /dev/null +++ b/www/programme/mathparser/anleitung.html @@ -0,0 +1,151 @@ + + + + MathParser - parses MathML to LaTeX + + + + + + + + + + + + + + +
+ MathParser - parses MathML to LaTeX +
+ +
+ english version +
+ + + +
+ +

Index

+ + +

MathParser starten

+ Wenn Sie die MathParser Programmdatei heruntergeladen haben, können Sie das Programm normalerweise mit einem Doppelklick auf die Datei starten.
+ Falls dabei Probleme auftreten, obwohl Java auf Ihrem Computer installiert ist (z.B. startet statt MathParser ein Packprogramm, das auf Ihrem Computer installiert ist), müssen Sie das Programm direkt über eine Verknüpfung starten (Windows):
+
    +
  1. + Klicken Sie mit der rechten Maustaste auf die Programmdatei und dann auf "Verknüpfung erstellen" +

    +
  2. +
  3. + Klicken Sie dann mit der rechten Maustaste auf die neue Verknüpfung und dann auf "Eigenschaften" +

    +
  4. +
  5. + In dem neuen Fenster ändern Sie auf der Registerkarte "Allgemein" den Namen der Verknüpfung von "Verknüpfung mit MathParser..." in "MathParser" und auf der Registerkarte "Verknüpfung" das Ziel in "java -jar MathParser052.jar". Bestätigen Sie mit Klick auf "OK". +
      
    +
  6. +
+ +

Mit MathParser arbeiten

+

+ Um eine MathML-Datei in LaTeX zu konvertieren, befolgen Sie diese Schritte:
+
    +
  1. + Geben Sie im "Eingabe"-Kasten die Datei an, die Sie in LaTeX umwandeln möchten. Um die Datei auszuwählen können Sie auch die "Durchsuchen..."-Schaltfläche benutzen. +
    +
  2. +
  3. + Geben Sie das Format der Eingabe-Datei an. Wenn die Datei aus reinem MathML-Code besteht (in der Regel Dateien mit der Endung '.mml'), wählen Sie MathML.
    + Wenn der MathML-Code in HTML integriert ist (i.d.R. Dateien mit der Endung '.html'), wählen Sie HTML/MathML.
    + Falls Sie die Datei aus dem Programm Mathcad heraus als "HTML/MathML File for IBM Techexplorer" abgespeichert haben, wählen Sie Mathcad MathML/HTML.
    + Neu in Mathcad 11: Wählen Sie in Mathcad im Menü Datei "Als Webseite speichern..." und im Optionenmenü, das sie angezeigt bekommen, wenn Sie "Speichern" anklicken, "MathML" und "Anzeigen mit: IBM Techexplorer". +
    +
  4. +
  5. + Klicken Sie im "Ausgabe"-Kasten "Datei" oder "Textfeld" an, je nachdem, ob Sie das Ergebnis der Konvertierung speichern oder nur anzeigen lassen möchten.
    + Wenn Sie "Datei" wählen, müssen Sie im Eingabefeld daneben den Speicherort angeben. +
    +
  6. +
  7. + Wählen Sie im "Optionen"-Menü, mit welchen Einstellungen die MathML-Datei übersetzt werden soll:
    +

    +
      +
    • + Wählen Sie "LaTeX Header schreiben" aus, wenn Sie ein fertiges LaTeX-Dokument erzeugen möchten. In diesem Fall wird der Standard-Header von MathParser verwendet. (Siehe auch: "Für Fortgeschrittene: Ändern der Ersetzungstabelle und des Standard-Headers von MathParser") +
      +
    • +
    • + Wählen Sie "Unbekannte Entities überspringen", wenn unbekannte MathML-Befehle nicht mit der Bemerkung 'NOT_FOUND' in der Ausgabe auftauchen sollen. +
      +
    • +
    • + Für "Formeln" können Sie angeben, in welcher Weise sie in die Ausgabe eingefügt werden: Eingebettet (im Fließtext), abgesetzt (jede Formel als extra Absatz) oder nummeriert (jede Formel als extra Absatz mit fortlaufender Nummerierung). +
      +
    • +
    +
    +
  8. +
  9. + Sobald Sie alle Optionen festgelegt haben, starten Sie den Umwandlungsvorgang mit einem Klick auf "Konvertieren".
    + Wenn der Vorgang durchgeführt wurde, meldet das Programm die erfolgreiche Konvertierung bzw. zeigt den LaTeX-Code in einem neuen Fenster an, in dem Sie die Ausgabe bearbeiten und kopieren können. +
  10. +
+ + +

Für Fortgeschrittene: Ändern der Ersetzungstabelle und des Standard-Headers von MathParser

+ MathParser nutzt zwei Textdateien für die Konvertierung: 'substitutions.txt' legt fest, welcher MathML-Ausdruck mit welchem LaTeX-Befehl ersetzt wird, 'header.txt' beinhaltet den LaTeX-Header der an den Anfang der übersetzten Datei gestellt wird, wenn dies in den Optionen festgelegt wurde.
+ Beide Dateien können mit einem einfachen Texteditor an eigene Bedürfnisse angepasst werden.
+ Sie können die Dateien 'substitutions.txt' und 'header.txt' von der MathParser-Homepage herunterladen, oder mit einem ZIP-kompatiblen Packprogramm aus der Programm-Datei extrahieren. +

Editieren der Dateien

+ Nun können Sie die Dateien mit einem Texteditor bearbeiten. In 'header.txt' schreiben Sie den LaTeX-Header, den ihre konvertierten Dateien haben sollen.
+ In 'substitutions.txt' können Sie in jede Zeile eine Ersetzungsanweisung von MathML nach LaTeX eintragen.
+ Es gibt zwei Arten von MathML-Elementen die übersetzt werden: Entities und Tags. Entities sind einfache Anweisungen für Sonderzeichen und Symbole, die direkt übersetzt werden. Tags definieren den logisch-mathematischen Zusammenhang zwischen einzelnen Bereichen in Form von Blöcken.
+
+ Eine Entity-Ersetzung trägt man in die Datei 'substitutions.txt' nach folgendem Muster ein: +
[Entity] [Tabulatorschritt(e)] [LaTeX-Übersetzung]
+
+ Beispiel: +
ε			\epsilon
+ (Ersetzung des MathML-Entities für den Buchstaben Epsilon)
+
+
+ Tags haben in der Regel einen oder mehrere Inhalts-Blöcke in der Form <Tag>Block(s)</Tag>. Da sich die Reihenfolge der Blöcke im MathML-Code von dem im LaTeX-Code unterscheidet, muss MathParser die korrekte Reihenfolge für die Blöcke mitgeteilt werden. Hierfür wird das Schlüsselwort %BLOCK[Blocknummer]% verwendet.
+
+ Beispiel: +
<mroot>			\sqrt[%BLOCK2%]{%BLOCK1%}
+ Das Beispiel zeigt die Ersetzungsanweisung für das MathML-Element zur Darstellung von Wurzeln. Da in MathML erst der Radikant und dann der Wurzelexponent angegeben wird (logische Reihenfolge), während es in LaTeX genau umgekehrt ist (Reihenfolge nach Leserichtung), folgt in der Ersetzungsanweisung BLOCK1 nach BLOCK2. +

Die geänderten Dateien mit MathParser einsetzen

+ Um die von Ihnen geänderten Dateien mit MathParser zu verwenden, müssen Sie die editierte 'substitutions.txt' und/oder 'header.txt' nur in dasselbe Verzeichnis wie MathParser legen und das Programm starten. Findet MathParser im aktuellen Verzeichnis die Textdateien, so werden Sie für die Konvertierung verwendet, ansonsten werden die internen Konfigurationen genutzt. + +
+ + diff --git a/www/programme/mathparser/anleitung_en.html b/www/programme/mathparser/anleitung_en.html new file mode 100644 index 0000000..a292c97 --- /dev/null +++ b/www/programme/mathparser/anleitung_en.html @@ -0,0 +1,152 @@ + + + + MathParser - parses MathML to LaTeX + + + + + + + + + + + + + + +
+ MathParser - parses MathML to LaTeX +
+ +
+ deutsche version +
+ + + +
+ +

Index

+ + +

Starting MathParser

+ After downloading the program file, MathParser can usually be started with an double click on the file.
+ If problems occur with that even though Java is installed on your computer, try a shortcut:
+
    +
  1. + Click right on the program file and choose "Create Shortcut" +

    +
  2. +
  3. + Click right on the new shortcut and choose "Properties" +

    +
  4. +
  5. + In the new window change on the "General" tab the name of the shortcut from "Shortcut to MathParser..." in "MathParser" and on the "Shortcut" tab the target in "java -jar MathParser052.jar". Then click "OK". +
      
    +
  6. +
+ +

Using MathParser

+

+
    +
  1. + Enter the input file. You can also use the "Browse..." button to choose the input file.
    +
  2. +
  3. + Set the format of the input file. If the input is pure MathML (usually files ending with '.mml'), choose MathML.
    + If the MathML code is embedded in HTML (usually files ending with '.html'), choose HTML/MathML.
    +
    + If you want to convert a Mathcad file, export it as "HTML/MathML file for IBM techexplorer". In older versions (Mathcad 2001) you will find this file format if you choose "Save as.." from the "File" menu.
    + In Mathcad 11 you have to choose "Save as Web Page...". When you save the file, an options screen will appear. Select "Save equation as: MathML" and "Display using: IBM Techexplorer".
    + Select Mathcad MathML/HTML as file format in MathParser then. +
    +
  4. +
  5. + If you want the result of the conversion to be saved directly, choose "File" from the "Output" box and enter the name of the target file.
    + If you want to get the conversion result on screen, choose "Window". +
    +
  6. +
  7. + Choose from the "Options" menu:
    +

    +
      +
    • + Mark "Write LaTeX header" if you want a complete LaTeX document to be generated. In this case MathParser uses its standard header. (See also: "Advanced Users: Editing MathParser's substitution table and standard header") +
      +
    • +
    • + Mark "Skip unknown entities" if you do not want unknown MathML keywords to be inserted in the output with the comment 'NOT_FOUND'. +
      +
    • +
    • + You can choose in what way "Formulae" are inserted in the output: Embedded (into the text), set off (every formula in a new paragraph) or enumerated (every formula in a new paragraph with enumeration). +
      +
    • +
    +
    +
  8. +
  9. + Once you have defined all options start the conversion by clicking the "Convert" button.
    + When finished the convertion a message will appear or, if you chose "Window" for output, the LaTeX code will be shown in a new window where you can edit and copy the resulting code. +
  10. +
+ + +

Advanced Users: Editing MathParser's substitution table and standard header

+ MathParser needs two text files for MathML conversion: 'substitutions.txt' defines, which LaTeX keyword replaces which MathML keyword, 'header.txt' contains the LaTeX header that is inserted at the beginning of the output if you chose "Write LaTeX header" from the options menu.
+ Both files can be edited with a simple text editor.
+ You can download 'substitutions.txt' and 'header.txt' from the MathParser Homepage or extract it from the program file with a ZIP compatible compression utility. +

Editing the files

+ In 'header.txt' simply write down the LaTeX header for the converted files.
+
+ In 'substitutions.txt' you can enter a LaTeX substitution for a MathML element in every line.
+ There are two kinds of MathML elements to be substituted: Entities end tags. Entities are place holders for special characters and symbols which can be substituted directly. Tags define a logical correlation between blocks.
+
+ Enter a substitution for an entity in this way: +
[entity] [tab(s)] [LaTeX substitution]
+
+ Example: +
ε			\epsilon
+ (Substitution for the MathML entity that represents the greek character epsilon)
+
+
+ Tags enclose one or more blocks of data like this: <tag>block(s)</tag>. Since the order of the inner blocks in MathML can differ from the order in LaTeX notation, the substitution has to disclose MathParser the correct sequence of blocks. For this purpose the keyword %BLOCK[block no.]% is used.
+
+ Example: +
<mroot>			\sqrt[%BLOCK2%]{%BLOCK1%}
+ This is the substitution for the MathML element for roots. In MathML the root's exponent follows the radicand while in LaTeX the notation is the other way around. Thus we need to tell MathParser to alter the block order by exchanging BLOCK2 and BLOCK1. +

Applying the edited files to MathParser

+ To use your edited files with MathParser, just put it into the same directory with the program file. On startup, MathParser seeks for 'substitutions.txt' and 'header.txt' in the program directory. If they are not found the built-in configuration files are used. + +
+ + diff --git a/www/programme/mathparser/de_en.gif b/www/programme/mathparser/de_en.gif new file mode 100644 index 0000000..add88fd Binary files /dev/null and b/www/programme/mathparser/de_en.gif differ diff --git a/www/programme/mathparser/download.html b/www/programme/mathparser/download.html new file mode 100644 index 0000000..d0b3537 --- /dev/null +++ b/www/programme/mathparser/download.html @@ -0,0 +1,98 @@ + + + + MathParser - parses MathML to LaTeX + + + + + + + + + + + + + + +
+ MathParser - parses MathML to LaTeX +
+ +
+ english version +
+ + + +
+ + Wer bereits Java™ installiert hat, kann MathParser einfach als JAR-Datei herunterladen und direkt ausführen.
+
+ Wer Java noch nicht hat, kann sich das kostenlose Java Runtime Environment bei Sun herunterladen.
+
+
+
+ Achtung: Die Software wird von den Autoren kostenlos und ohne jegliche Gewährleistung und Garantie überlassen. Insbesondere wird weder Fehlerfreiheit, noch die Verwendbarkeit für einen bestimmten Zweck garantiert. Sie dürfen Kopien der Software in unveränderter Form frei verbreiten. Nicht gestattet sind die Disassemblierung, Dekompilierung oder anderweitige Zerlegung der Software oder ihrer Bestandteile.
+
+
+
+ + + + + + + + + + + + + + + + +
MathParser herunterladen:
+ MathParser056.jar (68 kB)
+ JAR Datei, auf Computern mit installiertem Java™ direkt ausführbar
+ Copyright © 2004 Tilman Walther und Martin Wilke, Berlin
+
+ substitutions.txt (10 kB)
+ Ersetzungstabelle für MathParser (nur für eigene Anpassungen nötig) +
+ header.txt (1 kB)
+ LaTeX Header für MathParser (nur für eigene Anpassungen nötig) +
+ MathParser056-src.zip (184 kB)
+ Die Quellcodes +
+
+
+ + +
+ + diff --git a/www/programme/mathparser/download_en.html b/www/programme/mathparser/download_en.html new file mode 100644 index 0000000..b3d736a --- /dev/null +++ b/www/programme/mathparser/download_en.html @@ -0,0 +1,97 @@ + + + + MathParser - parses MathML to LaTeX + + + + + + + + + + + + + + +
+ MathParser - parses MathML to LaTeX +
+ +
+ deutsche version +
+ + + +
+ + If Java™ is already installed on your computer, just download the MathParser JAR file below.
+ If you do not have Java on your computer, you need to download it from Sun's Java website at http://www.java.com/.
+
+
+
+ Important: The software is made available free of charge; thus, no express or implied warranties are made. +
+
+
+
+ + + + + + + + + + + + + + + + +
Download MathParser:
+ MathParser056.jar (68 kB)
+ JAR file, executable on every computer with a Java™ Runtime Environment 1.4 or higher.
+ Copyright © 2004 Tilman Walther & Martin Wilke, Berlin
+
+ substitutions.txt (10 kB)
+ Substitution table for MathParser (not needed for regular use) +
+ header.txt (1 kB)
+ LaTeX header for MathParser (not needed for regular use) +
+ MathParser056-src.zip (184 kB)
+ The program's source codes +
+
+
+ +
+ + diff --git a/www/programme/mathparser/en_de.gif b/www/programme/mathparser/en_de.gif new file mode 100644 index 0000000..93d6ea4 Binary files /dev/null and b/www/programme/mathparser/en_de.gif differ diff --git a/www/programme/mathparser/get_java_red_button.gif b/www/programme/mathparser/get_java_red_button.gif new file mode 100644 index 0000000..a3f6487 Binary files /dev/null and b/www/programme/mathparser/get_java_red_button.gif differ diff --git a/www/programme/mathparser/gui01_de.gif b/www/programme/mathparser/gui01_de.gif new file mode 100644 index 0000000..e358c40 Binary files /dev/null and b/www/programme/mathparser/gui01_de.gif differ diff --git a/www/programme/mathparser/gui01_en.gif b/www/programme/mathparser/gui01_en.gif new file mode 100644 index 0000000..dd52baf Binary files /dev/null and b/www/programme/mathparser/gui01_en.gif differ diff --git a/www/programme/mathparser/gui02_de.gif b/www/programme/mathparser/gui02_de.gif new file mode 100644 index 0000000..096cd2d Binary files /dev/null and b/www/programme/mathparser/gui02_de.gif differ diff --git a/www/programme/mathparser/gui02_en.gif b/www/programme/mathparser/gui02_en.gif new file mode 100644 index 0000000..98349a3 Binary files /dev/null and b/www/programme/mathparser/gui02_en.gif differ diff --git a/www/programme/mathparser/header.txt b/www/programme/mathparser/header.txt new file mode 100644 index 0000000..e9e9722 --- /dev/null +++ b/www/programme/mathparser/header.txt @@ -0,0 +1,10 @@ +\documentclass[12pt, a4paper]{article} +\usepackage[latin1]{inputenc} +\usepackage{ngerman} +\usepackage{graphicx} +\usepackage{dsfont} +\usepackage{lscape} +\pagestyle{headings} + +\begin{document} + diff --git a/www/programme/mathparser/index.html b/www/programme/mathparser/index.html new file mode 100644 index 0000000..06dfccd --- /dev/null +++ b/www/programme/mathparser/index.html @@ -0,0 +1,80 @@ + + + + MathParser - parses MathML to LaTeX + + + + + + + + + + + + + + +
+ MathParser - parses MathML to LaTeX +
+ +
+ english version +
+ + + +
+ + MathParser ist ein Programm zum Konvertieren von MathML nach LaTeX. Es verarbeitet reinen MathML Code genauso wie HTML mit eingebettetem MathML, außerdem beinhaltet es einen speziellen Parser zur Konvertierung von Mathcad HTML/MathML Dateien.
+
+ Die Konvertierung erspart das lästige Abtippen von Berechnungen z.B. für Abschlussberichte, wenn man alles bereits eingegeben hat.
+ MathParser ist kostenlos, leicht zu bedienen und kann bei Bedarf einfach an eigene Anforderungen angepasst werden.
+
+ Das Programm ist in Java™ geschrieben und läuft unter allen Betriebssystemen mit installiertem Java Runtime Environment 1.4. + Das Java Runtime Environment kann für verschiedene Betriebsysteme kostenlos unter http://www.java.com/de/ heruntergeladen werden. +
+ +
+ Anmerkung: MathParser verarbeitet bisher nur MathML in 'presentation markup' Notation.
+
+ 01.12.2005
+ Mit der neuen Version 12 von Mathcad hat sich das Dateiformat geändert. Außerdem ist es nicht mehr möglich, die Dateien ins Techexplorer-Format + zu exportieren. Die nächste Version von MathParser soll auch Mathcad 12 Dateien verarbeiten, bis dahin können wir als Workaround nur empfehlen, + ins Mathcad-11-Format zu speichern und danach mit einer Installation von Mathcad 11 wie gewohnt zu konvertieren. +
+
+ 06.02.2010
+ Derzeit wird MathParser leider nicht mehr weiterentwickelt. Da das Programm aber immer noch verwendet wird, haben wir uns entschlossen, die Quellen freizugeben, damit es an eigene Anforderungen angepasst werden kann. Vielleicht möchte ja auch jemand den Faden aufnehmen und die nächste Version entwickeln. +
+ Java and the Java Coffee Cup Logo are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
+
+ + + +
+ + diff --git a/www/programme/mathparser/index_en.html b/www/programme/mathparser/index_en.html new file mode 100644 index 0000000..c7404c6 --- /dev/null +++ b/www/programme/mathparser/index_en.html @@ -0,0 +1,79 @@ + + + + MathParser - parses MathML to LaTeX - Homepage + + + + + + + + + + + + + + +
+ MathParser - parses MathML to LaTeX +
+ +
+ deutsche version +
+ + + +
+ + MathParser is a freeware tool that converts MathML into LaTeX. It processes pure MathML code as well as HTML with embedded MathML. It also offers a special built-in parser for Mathcad HTML/MathML files. You do not have to retype all equations for publishing anymore.
+
+ MathParser is freeware, simple to use and can easily be customized if needed.
+
+ MathParser is written in Java™ and runs on every computer with a Java Runtime Environment (version 1.4 and higher). You can download a Java Runtime Environment for your computer at http://www.java.com
+
+ Note: Currently MathParser only processes MathML in 'presentation markup' notation.
+ +
+ 2005-12-01 Update:
+ With the new version 12, Mathcad has changed its file format. Moreover, it is not possible to export into the Techexplorer format anymore. + The next version of MathParser will parse Mathcad 12 files. Until then, the only workaround to get your Mathcad 12 data parsed into LaTeX is + to save as Mathcad 11 file, open in Mathcad 11 and export as usual. +
+ +
+ 2010-02-06
+ Unfortunately, the development of MathParser is not comtinued at this time. Since there are people out there who are still using MathParser, we decided to publish the sources. This way you can adapt the program to your own needs. Maybe there is someone who wants to develop the next version. +
+ + Java and the Java Coffee Cup Logo are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
+
+ + + +
+ + diff --git a/www/programme/mathparser/java_registered.gif b/www/programme/mathparser/java_registered.gif new file mode 100644 index 0000000..6edcf0e Binary files /dev/null and b/www/programme/mathparser/java_registered.gif differ diff --git a/www/programme/mathparser/kontakt.php b/www/programme/mathparser/kontakt.php new file mode 100644 index 0000000..12370d7 --- /dev/null +++ b/www/programme/mathparser/kontakt.php @@ -0,0 +1,138 @@ + + + + MathParser - parses MathML to LaTeX + + + + + + + + + + + + + + +
+ MathParser - parses MathML to LaTeX +
+ +
+ english version +
+ + + +
+ +")) { + @mail("feedback@tilman.de", "Sendebestätigung: Mathparser Feedback", "Gerade wurde eine Mail von ".$author." <$mailaddresses[0]> versendet.", "From: \"Tilman Walther\" "); +?> + +
+

+ Ihre Nachricht wurde versendet, vielen Dank. +

+
+ + + +
+

+ Ein Fehler ist aufgetreten, die Nachricht konnte nicht versendet werden.
+ Bitte versuchen Sie es später noch einmal. +

+
+ + + + Anregungen, Kritik oder Kommentare kann man mit diesem Formular an uns schicken.
+ +
+ Absender
+ +

eMail-Adresse
+ +

Nachricht
+ +

+   +
+ +
+ +
+ + + + + + + + + + + + + +
Verantwortlich für diese Website:Tilman Walther
Lechtaler Weg 10
12209 Berlin
Deutschland
Copyright für die Website:Copyright © 2004
Tilman Walther
Copyright für das Programm:Copyright © 2004
Tilman Walther und Martin Wilke, Berlin
+
+ + +
+ + diff --git a/www/programme/mathparser/kontakt_en.php b/www/programme/mathparser/kontakt_en.php new file mode 100644 index 0000000..ac21904 --- /dev/null +++ b/www/programme/mathparser/kontakt_en.php @@ -0,0 +1,134 @@ + + + + MathParser - parses MathML to LaTeX + + + + + + + + + + + + + + +
+ MathParser - parses MathML to LaTeX +
+ +
+ deutsche version +
+ + + +
+ +")) { + @mail("feedback@tilman.de", "Sendebestätigung: Mathparser Feedback", "Gerade wurde eine Mail von ".$author." <$mailaddresses[0]> versendet.", "From: \"Tilman Walther\" "); +?> + +
+

+ Your message has been sent. Thank you. +

+
+ + + +
+

+ An error occured the message could not be sent. Please try again later. +

+
+ + + + Please send us your feedback, comments and questions:
+ +
+ Name
+ +

eMail
+ +

Message
+ +

+   +
+ +
+ +
+ + + + + + + + + +
Copyright for this website:Copyright © 2004
Tilman Walther
Copyright for MathParser:Copyright © 2004
Tilman Walther & Martin Wilke, Berlin
+
+ + + +
+ + diff --git a/www/programme/mathparser/print.css b/www/programme/mathparser/print.css new file mode 100644 index 0000000..1027392 --- /dev/null +++ b/www/programme/mathparser/print.css @@ -0,0 +1,21 @@ +body { background-color:#FFFFFF; font-family: "Trebuchet MS", Georgia, serif; } + +#title { display: none } + +#language { display: none } + +#menu { display: none } + +#content { margin: 2ex; background-color: #FFFFFF; text-align: justify; } + +#content a { color:#0000FF; text-decoration: underline; } +#content h1 { font-size: 130%; font-weight: bold; } +#content h2 { font-size: 110%; font-weight: bold; } +#content h3 { font-size: 100%; font-weight: bold; } +#content h4 { font-size: 90%; font-weight: bold; } +#content h5 { font-size: 80%; font-weight: bold; } +#content h6 { font-size: 80%; font-weight: bold; } +#content td { text-align: left; vertical-align: top; padding: 10px; border-width: 1px; border-style: solid; border-color:#A4C2DA; margin: 0px;} + +#content .imgBox { text-align: center; margin: 25px; margin-left: 0px; } +#content .imgDesc { text-align: justify; margin-top: 10px; font-size: 80%; line-height: 140%;} diff --git a/www/programme/mathparser/short01_de.gif b/www/programme/mathparser/short01_de.gif new file mode 100644 index 0000000..4daf491 Binary files /dev/null and b/www/programme/mathparser/short01_de.gif differ diff --git a/www/programme/mathparser/short01_en.gif b/www/programme/mathparser/short01_en.gif new file mode 100644 index 0000000..c802777 Binary files /dev/null and b/www/programme/mathparser/short01_en.gif differ diff --git a/www/programme/mathparser/short02_de.gif b/www/programme/mathparser/short02_de.gif new file mode 100644 index 0000000..81bb1bf Binary files /dev/null and b/www/programme/mathparser/short02_de.gif differ diff --git a/www/programme/mathparser/short02_en.gif b/www/programme/mathparser/short02_en.gif new file mode 100644 index 0000000..d602e06 Binary files /dev/null and b/www/programme/mathparser/short02_en.gif differ diff --git a/www/programme/mathparser/short03_de.gif b/www/programme/mathparser/short03_de.gif new file mode 100644 index 0000000..a661ece Binary files /dev/null and b/www/programme/mathparser/short03_de.gif differ diff --git a/www/programme/mathparser/short03_en.gif b/www/programme/mathparser/short03_en.gif new file mode 100644 index 0000000..e1cc04a Binary files /dev/null and b/www/programme/mathparser/short03_en.gif differ diff --git a/www/programme/mathparser/short04_de.gif b/www/programme/mathparser/short04_de.gif new file mode 100644 index 0000000..70ae83c Binary files /dev/null and b/www/programme/mathparser/short04_de.gif differ diff --git a/www/programme/mathparser/short04_en.gif b/www/programme/mathparser/short04_en.gif new file mode 100644 index 0000000..0a91054 Binary files /dev/null and b/www/programme/mathparser/short04_en.gif differ diff --git a/www/programme/mathparser/stylesheet.css b/www/programme/mathparser/stylesheet.css new file mode 100644 index 0000000..64f2c1c --- /dev/null +++ b/www/programme/mathparser/stylesheet.css @@ -0,0 +1,32 @@ +body { margin: 0px; padding: 20px; background-color:#A4C2DA; font-family: "Trebuchet MS", Georgia, serif; } + +#title { position: absolute; top: 10px; left: 10px; margin: 0px; padding: 0px; } + +#language { position: absolute; top: 20px; right: 20px; margin: 0px; padding: 0px; } + +#menu { position: absolute; top: 110px; left: 2px; text-align: right; width: 105px; color:#000000; + overflow: hidden; } +#menu a { text-decoration: none; } +#menu a:hover { text-decoration: underline overline; } +#menu p { margin-top: 10px; } +#menu .h1 { color:#2E517F; font-size: 100%; font-weight: bold; } +#menu .h2 { color:#2E517F; font-size: 90%; margin-right: 1.6ex; } + +/*.name { font-family: Georgia, "Trebuchet MS", serif; font-weight: bold; }*/ + +#content { margin-left: 110px; margin-top: 110px; padding: 20px; background-color: #FFFFFF; text-align: justify; font-size: 100%; } + +#content a { color:#0000DD; text-decoration: underline; } +#content h1 { font-size: 130%; font-weight: bold; } +#content h2 { font-size: 110%; font-weight: bold; } +#content h3 { font-size: 100%; font-weight: bold; } +#content h4 { font-size: 90%; font-weight: bold; } +#content h5 { font-size: 80%; font-weight: bold; } +#content h6 { font-size: 80%; font-weight: bold; } +#content th { text-align: left; vertical-align: top; padding: 10px; padding-bottom: 0px; border-width: 0px; border-style: solid; border-color:#A4C2DA; margin: 0px;} +#content td { text-align: left; vertical-align: top; padding: 10px; padding-left: 40px; border-width: 0px; border-style: solid; border-color:#A4C2DA; margin: 0px;} + +#content .imgBox { text-align: center; margin: 25px; margin-left: 0px; } +#content .imgDesc { text-align: justify; margin-top: 10px; font-size: 80%; line-height: 140%;} + +#mini { font-size: 70%; font-weight: bold; } \ No newline at end of file diff --git a/www/programme/mathparser/substitutions.txt b/www/programme/mathparser/substitutions.txt new file mode 100644 index 0000000..8b01669 --- /dev/null +++ b/www/programme/mathparser/substitutions.txt @@ -0,0 +1,320 @@ +** +** Erklärung: +** Links stehen zu findende Ausdrücke, rechts (getrennt durch einen oder mehrere +** Tabs) die entsprechende Ersetzung. +** +** Zeilen, die mit '**' beginnen (wie diese Erklärung) werden ignoriert, Zeilen +** ohne Tabulator oder mit Tabulatoren an verschiedenen Stellen im String ebenfalls. +** +** Da sich die Reihenfolge der Blöcke im MathML-Code von dem im LaTeX-Code +** unterscheidet, muss MathParser die korrekte Reihenfolge für die Blöcke mitgeteilt +** werden. Hierfür wird das Schlüsselwort %BLOCK[Blocknummer]% verwendet. +** Sollen sämtliche Blöcke (unabhängig von Reihenfolge und Anzahl) übernommen +** werden, wird das Schlüsselwort %BLOCKS% verwendet +** +** Wird %BLOCK in einem Ersetzungsbefehl gefunden, wird der Parser rekursiv auf dem +** folgenden Block aufgerufen und das Ergebnis an Stelle des Platzhalters in die +** Ausgabe geschrieben. +** + + +** Tags: + \frac{%BLOCK1%}{%BLOCK2%} + %BLOCK1%^{%BLOCK2%} + %BLOCK1%_{%BLOCK2%} + \sqrt{%BLOCK1%} + \sqrt[%BLOCK2%]{%BLOCK1%} + \left(%BLOCK1%\right) + %BLOCK1%_{%BLOCK2%}^{%BLOCK3%} + %BLOCK1%_{%BLOCK2%}^{%BLOCK3%} + %BLOCK1%_{%BLOCK2%} + \matrix{%BLOCKS%} + %BLOCKS%\cr + %BLOCK1%& + + +** Entities +˙ \cdot +⋅ \cdot +· \cdot +× \times += \Relbar +∀ \forall +∃ \exists +&%x220d; \ni +∗ * +− - +⁄ / +∶ : +< < +> > +≅ \cong +⁢ + + +** Pfeile +↔ \leftrightarrow +← \leftarrow +→ \rightarrow +⇔ \Leftrightarrow +⇐ \Leftarrow +⇒ \Rightarrow + + +** dynamische Zeichen +∑ \sum +∏ \prod +∫ \int +ⅆ d + + +** griechisches Alphabet +α \alpha +β \beta +γ \gamma +δ \delta +ε \epsilon +η \eta +ι \iota +κ \kappa +λ \lambda +μ \mu +&mgr; \mu +ν \nu +ο o +π \pi +θ \theta +ρ \rho +&rgr; \rho +σ \sigma +τ \tau +υ \upsilon +ϕ \phi +φ \varphi +χ \chi +ϖ \varpi +&pgr; \pi +&ohgr; \omega +ω \omega +ξ \xi +ψ \psi +ζ \zeta +Δ \Delta +Φ \Phi +Γ \Gamma +Λ \Lambda +Π \Pi +&tgr; \tau +Θ \Theta +Σ \Sigma +Υ \Upsilon +ς \varsigma +Ω \Omega +Ξ \Xi +Ψ \Psi +ϵ \epsilon +&phgr; \phi +&ggr; \gamma +&eegr; \eta +&igr; \iota +&phgr; \phi +&kgr; \kappa +&lgr; \lambda +&ngr; \nu +&ogr; o +&thgr; \theta +&sgr; \sigma +&ugr; \upsilon +&zgr; \zeta +&Agr; A +&Bgr; B +&KHgr; X +&Egr; E +&PHgr; \Phi +&Ggr; \Gamma +&EEgr; H +&Igr; I +&THgr; \Theta +&Kgr; K +&Lgr; \Lambda +&Mgr; M +&Ngr; N +&Ogr; O +&Pgr; \Pi +&Rgr; P +&Sgr; \Sigma +&Tgr; T +&Ugr; \Upsilon +&OHgr; \Omega +&Zgr; Z + + +** Pfeile und andere Operatoren +⊥ \bot +∼ ~ +′ \prime +≤ \le +≥ \ge +∞ \infty +♣ \clubsuit +♦ \diamondsuit +♥ \heartsuit +♠ \spadesuit +± \pm +″ \prime\prime +∝ \propto +∂ \partial +• \bullet +≠ \neq +≡ \equiv +≈ \approx +… ... +∣ \mid +↵ \P +ℵ \aleph +ℑ \Im +ℜ \Re +℘ \wp +⊗ \otimes +⊕ \oplus +∅ \emtyset +∩ \cap +∪ \cup +⊃ \supset +⊇ \seupseteq +⊄ \not\subset +⊂ \subset +⊆ \subseteq +∈ \in +∉ \notin +∠ \angle +∇ \nabla +√ \surd +∧ \wedge +∨ \vee +∧ \wedge +∠ \angle +∠ \angle +≈ \approx +≈ \approx +⨁ \oplus +⨂ \otimes +⊥ \bot +⊥ \bot +∩ \cap +⊕ \oplus +⊗ \otimes +≅ \cong +≡ \equiv +∪ \cup +↓ \downarrow +⇓ \Downarrow +∇ \nabla +⇓ \Downarrow +⇐ \Leftarrow +⇔ \Leftrightarrow +⇒ \Rightarrow +⇑ \Uparrow +↓ \downarrow +⇓ \Downarrow +↓ \Downarrow +∈ \in +∅ \oslash +≡ \equiv +∃ \exists +&Exist; \exists +∀ \forall +∀ \forall +≥ \geq +≥ \geq +≥ \geq +↔ \leftrightarrow +⇔ \Leftrightarrow +⇔ \Leftrightarrow +⇒ \Rightarrow +∈ \in +∞ \infty +∫ \int +∫ \int +∈ \in +∈ \in +⋄ \diamond +⋄ \diamond +⟨ \left\langle +⟨ \left\langle +← \leftarrow +⇐ \Leftarrow +≤ \leq +⟨ \left\langle +⇐ \Leftarrow +← \leftarrow +↔ \leftrightarrow +⇔ \Leftrightarrow +↔ \leftrightarrow +≤ \leq +∗ \ast +− - +∇ \nabla +≠ \neq +∉ \notin +≠ \notin +∉ \notin +⊕ \oplus +∨ \vee +⊗ \otimes +∂ \partial +&partialD; \partial +⊥ \bot +∏ \Pi +∏ \Pi +⟩ \right\rangle +⟩ \right\rangle +→ \rightarrow +⇒ \Rightarrow +⟩ \right\rangle +→ \rightarrow +⇒ \Rightarrow +→ \rightarrow +⋅ \cdot +∼ \sim +∝ \propto +∝ \propto +∝ \propto +⊂ \subset +⊆ \subseteq +⫅ \subseteq +⊂ \subset +⊆ \subseteq +⫅ \subseteq +⊆ \subseteq +∑ \Sigma +∑ \Sigma +⊃ \supset +⊇ \supseteq +⫆ \supseteq +⊃ \supset +⊇ \supseteq +⊃ \supset +⊇ \supseteq +⫆ \supseteq +∼ \sim +≅ \cong +≈ \approx +↑ \uparrow +⇑ \Uparrow +↑ \uparrow +⇑ \Uparrow +↑ \uparrow +⊥ \bot +∅ \oslash +∝ \propto +∨ \vee +∝ \propto +∧ \wedge +⨁ \oplus +⨂ \otimes +&Space; +: : +⁡ +□ + diff --git a/www/programme/mathparser/title.gif b/www/programme/mathparser/title.gif new file mode 100644 index 0000000..7e9fcb3 Binary files /dev/null and b/www/programme/mathparser/title.gif differ diff --git a/www/programme/synctool/index.en.php b/www/programme/synctool/index.en.php new file mode 100644 index 0000000..de95d2d --- /dev/null +++ b/www/programme/synctool/index.en.php @@ -0,0 +1,143 @@ + + +
+ +
+ Deutsch +
+ +

SyncTool

+

+This program sychronizes two directories. Files are compared by their size and date, hashing of the file content is optional. This qualifies the software for synchronization of large remote file systems. For a more detailed description of the motivation behind the project and a comparison to other tools available please read the corresponding blog article. +

+ +

Features

+
    +
  • compares files by size and date, hashing is optional
  • +
  • log output can be forwarded via Jabber
  • +
  • compares large directories in reasonable time even if one of the directories lies in a remote file system
  • +
+ +

Attention, please!

+

+The software is intended to work in batch mode and thus performs bidirectional synchronization only without conflict resolution of any kind. If a file was modified on both sides, the older one being dismissed and overwritten by the newer one. (It should be no problem, however, to add a feature like a --dont-overwrite-conflicting-files with a few lines of additional code.) That being said, the second thing you have to think about is that you need a Java JRE. The Open JDK 6 JRE works pretty well with the program on my server, just apt-get install default-jre. +

+

+Remember to backup your files, this software comes with ABSOLUTELY NO WARRANTY. +

+ +

Usage

+

+For available options see the help page: +

+
+Usage: java -jar synctool-1.0.8.jar <source path> <destination path> [(-f|--dbfile) <database file>] [(-l|--logfile) <logfile>] [(-j|--jabber) <jabber address>] [(-r|--server) <jabber server>] [(-u|--user) <jabber user>] [(-p|--password) <jabber password>] [-d|--dry-run] [-h|--hashing] [-i|--ignore-directory-attributes] [-s|--silent] [--debug] [-?|--help]
+
+  <source path>
+        the source path
+
+  <destination path>
+        the destination path
+
+  [(-f|--dbfile) <database file>]
+        the path to the database file to use (default: synctool)
+
+  [(-l|--logfile) <logfile>]
+        the path for a logfile to write
+
+  [(-j|--jabber) <jabber address>]
+        send logging output as jabber message to the given address
+
+  [(-r|--server) <jabber server>]
+        the jabber server to connect to
+
+  [(-u|--user) <jabber user>]
+        the jabber user name used for logging in to the server
+
+  [(-p|--password) <jabber password>]
+        the jabber password used for logging in to the server
+
+  [-d|--dry-run]
+        perform a trial run with no changes made
+
+  [-h|--hashing]
+        generate MD5 file hashes for exact comparison
+
+  [-i|--ignore-directory-attributes]
+        do not copy attributes for directories
+
+  [-s|--silent]
+        do not print "Entering directory" and "No operation" messages
+
+  [--debug]
+        print debug messages
+
+  [-?|--help]
+        print help and exit
+
+

+Example: +

+
+java -jar synctool.jar -i -s -l sychronization.log /media/hidrive /media/usb/localdrive
+
+ +

Download

+

+ SyncTool is provided under the Apache License 2.0: +

+
+

+ Copyright 2011 Tilman Walther +

+

+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at +

+

+ http://www.apache.org/licenses/LICENSE-2.0 +

+ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +

+
+

+ Remember to backup your files! +

+
+

+ Binary release: SyncTool 1.0.8 +

+

+ Sources: Eclipse project archive +

+
+ +

Libraries used

+

+This software was made possible by the following components: +

+ +

+Eclipse, Maven and M2Eclipse were used for development. +

+ + +
+ + diff --git a/www/programme/synctool/index.php b/www/programme/synctool/index.php new file mode 100644 index 0000000..6c983a7 --- /dev/null +++ b/www/programme/synctool/index.php @@ -0,0 +1,153 @@ + + +
+ +
+ English +
+ +

SyncTool

+

+Dieses Programm synchronisiert zwei Verzeichnisse. Dabei werden die Dateien anhand ihrer Größe und des Änderungsdatums verglichen, optional kann eine Hashsumme des Inhalts mit einbezogen werden. +Die Zielsetzung während der Entwicklung war eine Optimierung für große Verzeichnisbäume in Remote-Dateisystemen. +Eine ausführliche Beschreibung der Beweggründe zur Entwicklung des Programms inklusive eines Vergleichs mit anderen Tools findet sich im (englischen) Blog-Artikel. +

+ +

Features

+
    +
  • rekursiver Vergleich von Dateien anhand von Größe und Änderungsdatum
  • +
  • optional können die Dateien anhand ihrer MD5-Hashes verglichen werden
  • +
  • sämtliche Dateien werden bidirektional synchronisiert
  • +
  • die Ausgabe kann zu Überwachungszwecken an einen Jabber-Account geschickt werden
  • +
+ +

Vorsicht, bitte!

+

+Die Software wurde für unbeaufsichtigte Stapelverarbeitung entwickelt, deshalb gibt es keine spezielle Behandlung von kollidierenden Dateiänderungen. +Falls eine Datei seit der letzten Synchronisierung auf beiden Seiten geändert wurde, überschreibt das Programm die ältere mit der neueren. +(Grundsätzlich könnte das Programm aber problemlos um eine entsprechende Funktion erweitert werden. +

+

+Erstellen Sie Sicherungskopien Ihrer Dateien vor dem Einsatz des Programms! Die Software wird kostenlos und ohne jegliche Gewährleistung und Garantie überlassen. Insbesondere wird weder Fehlerfreiheit, noch die Verwendbarkeit für einen bestimmten Zweck garantiert. +

+ +

Systemvoraussetzungen

+

+Das Programm benötigt ein installiertes Java Runtime Environment. Erfolgreich getestet unter Mac OS X (Intel) und Debian Lenny (ARM, Open JDK 6). +

+ +

Benutzung

+

+Verfügbare Parameter: +

+
+Usage: java -jar synctool-1.0.8.jar <source path> <destination path> [(-f|--dbfile) <database file>] [(-l|--logfile) <logfile>] [(-j|--jabber) <jabber address>] [(-r|--server) <jabber server>] [(-u|--user) <jabber user>] [(-p|--password) <jabber password>] [-d|--dry-run] [-h|--hashing] [-i|--ignore-directory-attributes] [-s|--silent] [--debug] [-?|--help]
+
+  <source path>
+        das Quellverzeichnis
+
+  <destination path>
+        das Zielverzeichnis
+
+  [(-f|--dbfile) <database file>]
+        Pfad zur Datenbank. (Wird neu angelegt, sofern nicht vorhanden.) (default: synctool)
+
+  [(-l|--logfile) <logfile>]
+        Logdatei, in die sämtliche Programmausgaben geschrieben werden
+
+  [(-j|--jabber) <jabber address>]
+        sendet sämtliche Ausgaben an den angegebenen Jabber-Benutzer
+
+  [(-r|--server) <jabber server>]
+        Jabber Server
+
+  [(-u|--user) <jabber user>]
+        Jabber Benutzername
+
+  [(-p|--password) <jabber password>]
+        Jabber Passwort
+
+  [-d|--dry-run]
+        führt einen Testlauf ohne Änderungen am Dateisystem durch
+
+  [-h|--hashing]
+        zusätzlich MD5-Hashsummen der Dateien berechnen und vergleichen
+
+  [-i|--ignore-directory-attributes]
+        Attribute von Verzeichnissen, die auf beiden Seiten existieren werden nicht angeglichen
+
+  [-s|--silent]
+        verzichtet auf Ausgabe der Meldugen "Entering directory" and "No operation for file"
+
+  [--debug]
+        Debugging-Informationen ausgeben
+
+  [-?|--help]
+        Hilfe ausgeben und das Programm beenden 
+
+

+Beispiel: +

+
+java -jar synctool.jar -i -s -l sychronization.log /media/hidrive /media/usb/localdrive
+
+ +

Download

+

+ SyncTool wird unter der Apache License 2.0 zur Verfügung gestellt: +

+
+

+ Copyright 2011 Tilman Walther +

+

+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at +

+

+ http://www.apache.org/licenses/LICENSE-2.0 +

+ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. +

+
+

+ Denken Sie unbedingt daran, Sicherungskopien Ihrer Dateien zu erstellen! +

+
+

+ ausführbares Jarfile: SyncTool 1.0.8 +

+

+ Programmquellen: Eclipse-Projekt +

+
+ +

Verwendete Programmbibliotheken

+

+Die Software setzt die folgenden Komponenten ein: +

+
    +
  • die Datenbank H2
  • +
  • log4j
  • +
  • die Apache Commons Bibliothek
  • +
  • JSAP zum Parsen der Parameter
  • +
  • Smack XMPP-Bibliothek zum Versenden der Jabber-Nachrichten
  • +
+

+Die Entwicklung erfolgte mit Hilfe von Eclipse, Maven und M2Eclipse. +

+ + +
+ + diff --git a/www/programme/synctool/synctool-project.zip b/www/programme/synctool/synctool-project.zip new file mode 100644 index 0000000..d122b8d Binary files /dev/null and b/www/programme/synctool/synctool-project.zip differ diff --git a/www/programme/synctool/synctool.jar b/www/programme/synctool/synctool.jar new file mode 100644 index 0000000..7f87cd5 Binary files /dev/null and b/www/programme/synctool/synctool.jar differ diff --git a/www/programme/tools.php b/www/programme/tools.php new file mode 100644 index 0000000..6d259be --- /dev/null +++ b/www/programme/tools.php @@ -0,0 +1,104 @@ + + +
+

Online-Tools

+ +

Nutzerinformationen

+
    +
  • aktuelle IP-Adresse ist
  • +
  • zugehöriger Host ist
  • +
  • Client ist
  • +
  • Referer:
  • +
+ +

Update-Check passwortgeschützt

+

+ Prüft eine Webseite in regelmäßigen Abständen und benachrichtigt bei Veränderungen. +

+
+
+ +

Crypt

+ '; + echo ' Crypt: '.crypt($_POST['crypt'], $_POST['cryptSalt']); + echo '

'; + } + else { + ?> +

+ ...ist immer nicht da, wenn man es gerade braucht. +

+
+ +
+ + + FIPS 181 random word
+                    + + + + --> +
+ + diff --git a/www/projekte/index.php b/www/projekte/index.php new file mode 100644 index 0000000..63d5613 --- /dev/null +++ b/www/projekte/index.php @@ -0,0 +1,42 @@ + + +
+

Projekte

+ +

Java-Uni

+

+ Derzeit beteilige ich mich als Lektor und Tutor am Aufbau von java-uni.de, + einer Plattform zu allem, was es rund um die Programmiersprache Java zu entdecken gibt. +

+ +

Pottenstein

+

+ Die Pottenstein-CD enstand Mitte 2002 im Anschluss an eine Konzertfahrt + der Beethoven-Oberschule, die + Martin Stadler und ich als Fahrtbegleiter gemacht haben. Nach + nicht mal drei Monaten vor dem Computer hatten wir dann eine Multimedia-CD mit Fotos, Videos, einer + virtuellen Jugendherberge und vor allen Dingen viel gelernt. Die CD wurde mit Macromedia Director erstellt + und ging in einer Auflage von gut 150 Exemplaren an die Schüler. +

+ +

Projekt Abibuch

+

+ Dieser Artikel entstand 2000 im Anschluss an + das Abibuch-Projekt meines Jahrgangs. Er fasst die gemachten Erfahrungen zusammen und enthält Tipps für + eigene Projekte. Im Jahr 2007 haben Martin Stadler und ich + den Artikel gemeinsam überarbeitet und auf den neuesten Stand gebracht, so dass auch die technischen + Entwicklungen der letzten Jahre berücksichtigt werden. +

+
+ + diff --git a/www/projekte/pottenstein/arbeitsplatz.jpg b/www/projekte/pottenstein/arbeitsplatz.jpg new file mode 100644 index 0000000..26c07ef Binary files /dev/null and b/www/projekte/pottenstein/arbeitsplatz.jpg differ diff --git a/www/projekte/pottenstein/audiocd.html b/www/projekte/pottenstein/audiocd.html new file mode 100644 index 0000000..bfaa6fb --- /dev/null +++ b/www/projekte/pottenstein/audiocd.html @@ -0,0 +1,236 @@ + + + + + Pottenstein 2002 - Beethoven Gymnasium Berlin + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [START] -  + [MULTIMEDIA-CD] -  + KONZERT-CD -  + [DOWNLOAD] -  + [KONTAKT] +
+ + + + + +

Weltliches Konzert

+

Bürgerhaus Pottenstein, 22.2.2002

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
1.IntradaG. Gastoldi1:07Blechbläser-Ensemble
2.Das HochzeitsfestE. Grieg3:05Orchester
3.MorgenstimmungE. Grieg4:43
4.Solveigs LiedE. Grieg4:50
5.In der Halle des BergkönigsE. Grieg3:51
6.ZigeunerlebenR. Schumann3:55Oberstufenchor
7.Take the "A" TrainD. Ellington2:13 
8.Walk in Jerusalemtrad.1:46Mittelstufenchor
9.When the love comes trickalin’trad.1:59 
10.Streets of LondonR. McTell3:09 
11.Ophelia lettertrad.1:33 
12.The sound of silenceP. Simon3:07 
13.Down by the riversidetrad.2:12 
14.Let it beLennon/McCartney2:46Superchor
15.When I’m sixty-four 2:35 
16.Hymn of peaceJ. Brahms/M. Gardner4:00 
+ +

Geistliches Konzert

+

Basilika Gößweinstein, 24.2.2002

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
17.Nocturne aus "Sommernachtstraum"F. Mendelssohn7:14Orchester
18.Magnificat und Nunc DimittisG. Dyson5:01Superchor*
19.Non nobis, DomineW. Byrd1:01Oberstufenchor
20.Exaudivit DominusO. di Lasso1:15 
21.Ave verum corpusW. A. Mozart2:32Oberstufenchor und Streicher
22.Laudate Dominum 4:50Superchor und Orchester**
23.Te DeumJ. Haydn10:24Superchor und Orchester
+ +
+ +unter der Leitung und Mitwirkung von:
+Christian Bährens, Veronika Ferus, Wolfgang Metschl, Gisela Schröder-Fink und Angelika Tiedemann +

+* Orgel: Leonie Czycykowski    ** Sopran: Gloria Rehm

+Aufnahme: Wolfgang Metschl    Mastering: Martin Stadler +
+ + + + + + diff --git a/www/projekte/pottenstein/cd.html b/www/projekte/pottenstein/cd.html new file mode 100644 index 0000000..05dd609 --- /dev/null +++ b/www/projekte/pottenstein/cd.html @@ -0,0 +1,87 @@ + + + + + Pottenstein 2002 - Beethoven Gymnasium Berlin + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [START] -  + MULTIMEDIA-CD -  + [KONZERT-CD] -  + [DOWNLOAD] -  + [KONTAKT] +
+ + + + +Pottenstein 2002 - CD + +

+ Will­kommen zurück in Pot­ten­stein! Die Multi­media-CD gibt die Mög­lich­keit, die Höhe­punkte der Fahrt noch ein­mal zu er­leben. Eine be­geh­bare Jugend­her­berge, zusam­men­gesetzt aus über 600 Einzel­fotos mit elf voll dreh­baren Rundum-An­sichten erwar­tet Dich... +

+ +Highlights: +
    +
  • Fotos und Aus­schnitte von beiden Kon­zerten
  • +
  • beide Kamin­abende mit Tonbei­trägen
  • +
  • alle 16 Bei­träge zur Zimmer­olympiade
  • +
  • Ausflüge nach Nürn­berg und zur Teufels­höhle
  • +
  • sämtliche Beethoven-Gäste­buch­ein­träge seit 1989
  • +
  • insgesamt über 400 Fotos
  • +
  • 35 Videoclips mit insge­samt 50 Minu­ten Spielzeit
  • +
  • drei Stunden(!) Ton und Musik
  • +
+ +

+ Probleme mit der CD? -> hier gibt es eine Liste mit häufigen Fragen +

+ +Systemanforderungen: +
    +
  • Windows 95 oder höher
  • +
  • oder MacOS ab 8.1
  • +
+
    +
  • 64 MB RAM (128 MB empfohlen)
  • +
  • CD-ROM
  • +
  • Quicktime 5 (auf CD enthalten)
  • +
+
    +
  • 266 MHz oder höher
    (für Videos ab 350 MHz empfohlen)
  • +
+ + + + diff --git a/www/projekte/pottenstein/cdlabel.jpg b/www/projekte/pottenstein/cdlabel.jpg new file mode 100644 index 0000000..a745d8a Binary files /dev/null and b/www/projekte/pottenstein/cdlabel.jpg differ diff --git a/www/projekte/pottenstein/download.html b/www/projekte/pottenstein/download.html new file mode 100644 index 0000000..f3887af --- /dev/null +++ b/www/projekte/pottenstein/download.html @@ -0,0 +1,68 @@ + + + + Pottenstein 2002 - Beethoven Gymnasium Berlin + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [START] -  + [MULTIMEDIA-CD] -  + [KONZERT-CD] -  + DOWNLOAD -  + [KONTAKT] +
+ + + + +Burg Pottenstein + +

+ Der komplette Begehungsplan, damit man nichts verpasst: +

+ + + +

+ - Zum herunterladen einer Datei mit rechter Maustaste anklicken und 'speichern unter' wählen - +

+ + + + + + diff --git a/www/projekte/pottenstein/faq.html b/www/projekte/pottenstein/faq.html new file mode 100644 index 0000000..b4f2d7e --- /dev/null +++ b/www/projekte/pottenstein/faq.html @@ -0,0 +1,67 @@ + + + + + Pottenstein 2002 - Beethoven Gymnasium Berlin + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [START] -  + [MULTIMEDIA-CD] -  + [KONZERT-CD] -  + [DOWNLOAD] -  + [KONTAKT] +
+ + + + + +

Fragen & Antworten zur Pottenstein-CD

+ +
    +
  • +

    Wenn ich mir die Anleitung angesehen bzw. 'Direkt nach Pottenstein' angeklickt habe, meldet der Computer einen 'Script error'

    +

    Du hast vermutlich Quicktime 5, das zum Abspielen der Videos benötigt wird, nicht installiert. (s.a. -> Anleitung zur Qucktime-Installation). Wenn du Quicktime nicht installieren möchtest oder dein Computer ohnehin zu langsam zum Abspielen der Videos ist, kannst du in der Anleitung 'Videos automatisch überspringen' aktivieren.

    +
  • +
  • +

    Wenn ich Videos ansehe, fängt der Ton an zu 'flattern'.

    +

    Das Flattern deutet darauf hin, dass dein Computer mit der CD etwas überfordert ist - falls er sich hart an der Grenze seiner Leistungsfähigkeit bewegt, ist es besser in den Videos nicht zu spulen oder zu springen. Wenn du allerdings einen Computer nutzt, der die CD auf jeden Fall problemlos meistern sollte (so ab 400 MHz, 128 MB RAM) überprüfe noch einmal, ob alles richtig eingestellt und Quicktime installiert ist.

    +
  • +
+ + + + + + diff --git a/www/projekte/pottenstein/index.html b/www/projekte/pottenstein/index.html new file mode 100644 index 0000000..fff985f --- /dev/null +++ b/www/projekte/pottenstein/index.html @@ -0,0 +1,74 @@ + + + + + Pottenstein 2002 - Beethoven Gymnasium Berlin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ START -  + [MULTIMEDIA-CD] -  + [KONZERT-CD] -  + [DOWNLOAD] -  + [KONTAKT] +
+ + + + +Pottenstein 2002 + +

+ Hallo Pottensteinfahrer und willkommen auf der Internetseite zu den Pottenstein-CDs 2002! +

+

+ Wir haben unsere fünfte Pottenstein-Fahrt und viel Freizeit dazu genutzt, eine interaktive Multimedia-CD von der ganzen Reise und eine Audio-CD von den Konzerten zu erstellen. Die CDs sind längst verteilt, aber wer noch eine haben will, kann ja mal nachfragen... +

+

+ Auf die­ser Sei­te findet ihr Tipps und Zu­sätze zur Multi­media-CD und Hil­fe bei tech­nischen Pro­blemen. Sol­lte das ein­mal nicht rei­chen, kann man im­mer noch Kon­takt über eMail zu uns auf­neh­men. +

+

+ An­sonsten bleibt uns nur euch al­len viel Spass zu wün­schen, wir hof­fen der Auf­wand hat sich ge­lohnt. +

+ +Tilman und Martin + + + + + + + + diff --git a/www/projekte/pottenstein/intro.mp3 b/www/projekte/pottenstein/intro.mp3 new file mode 100644 index 0000000..f78a002 Binary files /dev/null and b/www/projekte/pottenstein/intro.mp3 differ diff --git a/www/projekte/pottenstein/kontakt.php b/www/projekte/pottenstein/kontakt.php new file mode 100644 index 0000000..cb9e315 --- /dev/null +++ b/www/projekte/pottenstein/kontakt.php @@ -0,0 +1,127 @@ + + + + + Pottenstein 2002 - Beethoven Gymnasium Berlin + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [START] -  + [MULTIMEDIA-CD] -  + [KONZERT-CD] -  + [DOWNLOAD] -  + KONTAKT +
+ + + +")) { + @mail("feedback@tilman.de", "Sendebestätigung: Feedback zu Pottenstein", "Gerade wurde eine Mail von ".$author." <$mailaddresses[0]> versendet.", "From: \"Tilman Walther\" "); +?> + +
+

+ Die Nachricht wurde erfolgreich versendet, vielen Dank. +

+
+ + + +
+

+ Ein Fehler ist aufgetreten, die Nachricht konnte nicht versendet werden.
+ Bitte versuchen Sie es später noch einmal. +

+
+ + + + +
+
+ + + +
Schreibt uns - Kommentare, Fragen zu Inhalt und Technik, etc.
+ + + + +
+
+ Absender
+ +

eMail-Adresse
+ +

Nachricht
+ +

+ +
+
+
+ Pottenstein 2002 +
+
+ + + + + + diff --git a/www/projekte/pottenstein/locations.jpg b/www/projekte/pottenstein/locations.jpg new file mode 100644 index 0000000..60baf54 Binary files /dev/null and b/www/projekte/pottenstein/locations.jpg differ diff --git a/www/projekte/pottenstein/locations.pdf b/www/projekte/pottenstein/locations.pdf new file mode 100644 index 0000000..95e5a1a Binary files /dev/null and b/www/projekte/pottenstein/locations.pdf differ diff --git a/www/projekte/pottenstein/locations.png b/www/projekte/pottenstein/locations.png new file mode 100644 index 0000000..e4b141c Binary files /dev/null and b/www/projekte/pottenstein/locations.png differ diff --git a/www/projekte/pottenstein/logo.jpg b/www/projekte/pottenstein/logo.jpg new file mode 100644 index 0000000..852abb5 Binary files /dev/null and b/www/projekte/pottenstein/logo.jpg differ diff --git a/www/projekte/pottenstein/pfeil.jpg b/www/projekte/pottenstein/pfeil.jpg new file mode 100644 index 0000000..239fcaa Binary files /dev/null and b/www/projekte/pottenstein/pfeil.jpg differ diff --git a/www/projekte/pottenstein/plan.jpg b/www/projekte/pottenstein/plan.jpg new file mode 100644 index 0000000..038fe61 Binary files /dev/null and b/www/projekte/pottenstein/plan.jpg differ diff --git a/www/projekte/pottenstein/pottenstein.jpg b/www/projekte/pottenstein/pottenstein.jpg new file mode 100644 index 0000000..c9a2927 Binary files /dev/null and b/www/projekte/pottenstein/pottenstein.jpg differ diff --git a/www/projekte/pottenstein/print.css b/www/projekte/pottenstein/print.css new file mode 100644 index 0000000..1cc724b --- /dev/null +++ b/www/projekte/pottenstein/print.css @@ -0,0 +1,10 @@ +body { background-color:#FFFFFF; } + +A:LINK { color: #0000DD; text-decoration: none; } +A:VISITED { color: #0000DD; text-decoration: none; } +A:ACTIVE { color: #0000DD; text-decoration: none; } + +h1 { font-size:180%; font-family:Tahoma,Helvetica,sans-serif; color:black; } +h2 { font-size:130%; font-family:Tahoma,Helvetica,sans-serif; color:black; } +h3 { font-size:120%; font-family:Tahoma,Helvetica,sans-serif; color:black; } +h4 { font-size:100%; font-family:Tahoma,Helvetica,sans-serif; color:black; } \ No newline at end of file diff --git a/www/projekte/pottenstein/qt-installer.jpg b/www/projekte/pottenstein/qt-installer.jpg new file mode 100644 index 0000000..49233d0 Binary files /dev/null and b/www/projekte/pottenstein/qt-installer.jpg differ diff --git a/www/projekte/pottenstein/qt-typ.jpg b/www/projekte/pottenstein/qt-typ.jpg new file mode 100644 index 0000000..70ee259 Binary files /dev/null and b/www/projekte/pottenstein/qt-typ.jpg differ diff --git a/www/projekte/pottenstein/quicktime.html b/www/projekte/pottenstein/quicktime.html new file mode 100644 index 0000000..bfb6c59 --- /dev/null +++ b/www/projekte/pottenstein/quicktime.html @@ -0,0 +1,70 @@ + + + + + Pottenstein 2002 - Beethoven Gymnasium Berlin + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [START] -  + [MULTIMEDIA-CD] -  + [KONZERT-CD] -  + [DOWNLOAD] -  + [KONTAKT] +
+ + + + + +

Installation von Quicktime 5 von der Pottenstein-CD

+

Installation unter Windows

+
    +
  • Lege die Pottenstein-CD ins CD-ROM-Laufwerk ein
  • +
  • Falls die CD automatisch startet, schließe das Start-Fenster
  • +
  • Öffne den Arbeitsplatz, klicke mit der rechten Maustaste auf die Pottenstein-CD und dann auf 'Öffnen' (Bild 1)

    + Arbeitsplatz
  • +
  • Öffne nun nacheinander den Ordner 'Quicktime 5'
  • +
  • Starte die Installation mit einem Doppelklick auf 'QuickTimeInstaller' (Bild 2)

    + QT-Installer
  • +
  • Jetzt mußt du zweimal auf 'Weiter', auf 'Akzeptieren' und dann noch einmal auf 'Weiter' klicken
  • +
  • Wenn nach dem Installationstyp gefragt wird, wählst du am besten 'Minimale Installation' (Bild 3),
    + danach noch einmal auf 'Weiter' klicken

    + QT-Typ

  • +
  • Ab hier nur noch brav auf 'Weiter' und 'Fertig' klicken und schon ist Quicktime installiert
  • +
+ + + + + diff --git a/www/projekte/pottenstein/quicktimeinst.jpg b/www/projekte/pottenstein/quicktimeinst.jpg new file mode 100644 index 0000000..2eb9dc7 Binary files /dev/null and b/www/projekte/pottenstein/quicktimeinst.jpg differ diff --git a/www/projekte/pottenstein/textonly.css b/www/projekte/pottenstein/textonly.css new file mode 100644 index 0000000..0bad55b --- /dev/null +++ b/www/projekte/pottenstein/textonly.css @@ -0,0 +1,10 @@ +body { background-color:#FFFFFF; } + +h1 { font-size:180%; font-family:Tahoma,Helvetica,sans-serif; color:black; } +h2 { font-size:130%; font-family:Tahoma,Helvetica,sans-serif; color:black; } +h3 { font-size:120%; font-family:Tahoma,Helvetica,sans-serif; color:black; } +h4 { font-size:100%; font-family:Tahoma,Helvetica,sans-serif; color:black; } +#normal { font-size:90%; font-family:Tahoma,Helvetica,sans-serif; color:#000000; font-weight:bold; text-align:justify; } +#menu { font-size:80%; font-family:Tahoma,Helvetica,sans-serif; color:#0000AA; font-weight:bold; text-decoration:none; } + +#box { padding:0.4cm; text-align:justify; } diff --git a/www/projekte/pottenstein/website.css b/www/projekte/pottenstein/website.css new file mode 100644 index 0000000..15d5111 --- /dev/null +++ b/www/projekte/pottenstein/website.css @@ -0,0 +1,30 @@ +body { + background-color:#3399FF; + margin:20px; +} + +body, td, th, p { + font-family: Tahoma, Helvetica, sans-serif; + font-size: small; + color:white; + font-weight:bold; + text-align:justify; +} + +img { border: 0px; } + +img.illu { + margin: 15px; +} + +A:LINK { color: #BBDDFF; text-decoration: underline; } +A:VISITED { color: #BBDDFF; text-decoration: underline; } +A:ACTIVE { color: #BBDDFF; text-decoration: underline; } +A:HOVER { color: #BBDDFF; text-decoration: underline; } + +h1 { font-size:200%; } +h2 { font-size:150%; } +h3 { font-size:135%; } +h4 { font-size:120%; } + +.small { font-size:80%; } \ No newline at end of file diff --git a/www/robots.txt b/www/robots.txt new file mode 100644 index 0000000..e69de29 diff --git a/www/sonstiges/index.php b/www/sonstiges/index.php new file mode 100644 index 0000000..f94f068 --- /dev/null +++ b/www/sonstiges/index.php @@ -0,0 +1,21 @@ + + + + + diff --git a/www/sonstiges/toshiba/dongle1.jpg b/www/sonstiges/toshiba/dongle1.jpg new file mode 100644 index 0000000..c69bd2a Binary files /dev/null and b/www/sonstiges/toshiba/dongle1.jpg differ diff --git a/www/sonstiges/toshiba/dongle2.jpg b/www/sonstiges/toshiba/dongle2.jpg new file mode 100644 index 0000000..d6c55ed Binary files /dev/null and b/www/sonstiges/toshiba/dongle2.jpg differ diff --git a/www/sonstiges/toshiba/index.php b/www/sonstiges/toshiba/index.php new file mode 100644 index 0000000..9cde367 --- /dev/null +++ b/www/sonstiges/toshiba/index.php @@ -0,0 +1,121 @@ + + +
+
+ Erstellt 2002-11-20, zuletzt aktualisiert 2007-11-02 +
+ +

CMOS-Passwort bei Toshiba-Laptops entfernen

+

+ Wer, so wie ich, sein BIOS-Passwort vergisst, bekommt schnell Probleme mit seinem Toshiba. + Meinen Portégé 7010CT z.B. konnte ich ohne Zugang zum BIOS-Setup nicht mehr dazu bringen, + den Lüfter herunterzuregeln. Das war für den Prozessor zwar bestimmt von Vorteil, nur hatte man + beim Arbeiten mit dem Gerät das Gefühl neben einer Turbine zu sitzen.
+ Also musste das Passwort weg. Nur: +

+
    +
  • + Der alte Trick „CMOS-Batterie entfernen und warten, bis das Passwort mangels Strom gelöscht ist“ + funktionierte bei meinem Laptop leider nicht, da sich das Gehäuse nicht ohne Spezialwerkzeug + öffnen lässt +
  • +
  • + Passwort-Cracker (wie z.B. CMOSPWD) und + andere Programme wie + KeyDisk halfen auch nicht weiter +
  • +
+ +

+ Aber zum Glück gibt es bei vielen Toshibas noch einen anderen Weg - nämlich den, den auch der + Toshiba-Händler einschlägt, wenn man ihm den Laptop zum Entfernen des Passworts vorbeibringt. + Nur, dass der halt Geld dafür will.
+ Wer noch ein Druckerkabel herumzuliegen hat, kann das Ganze auch billiger haben. Die Toshibas prüfen + nämlich beim Start die Druckerschnittstelle. Sind bestimmte Leitungen kurzgeschlossen, wird das + Passwort entfernt. Bei einigen Modellen muss während des Starts zusätzlich noch die ESC-Taste gedrückt werden.
+ + (Anmerkung: Anstatt Druckerkabel zu zerschneiden und zu löten müsste es auch reichen, die + entsprechenden Öffnungen an der Druckerschnittstelle mit Drähten (Blumendraht, Büroklammern, + was auch immer) zu verbinden. Ausprobiert habe ich das jedoch nicht. Außerdem macht Löten ja + auch Spaß.) + +

+ +

+ Laut verschiedener Dongle-Verkäufer funktioniert diese Anleitung mit folgenden Toshiba-Modellen: +

+
    +
  • Portégé 200er, 300er, 400er, 600er, 700er, 3410, 3440, 3490, 7000, 7010, 7020, 7200, 7220 u.a.
  • +
  • Libretto 50, 70, 100, 110
  • +
  • Satellite 100er, 200er, 300er , 400er, 1800er, 1900er, 2000er, 2100er, 2200er, 2500er, 2600er, 2700er, 2800er, 4000er u.a.
  • +
  • Satellite Pro 400er und 4000er
  • +
  • Tecra 500er, 700er, 8000er, 9000er u.a.
  • +
  • T1900 bis T3600
  • +
+ + + +

Bastelanleitung:

+
    +
  • + Man schneidet sich einen Stecker vom Druckerkabel ab, und öffnet das Gehäuse des Steckers. +
  • +
  • + Jetzt verbindet man +
      +
    • Pin 1 mit 5 und 10 (am besten also von 1 nach 5 und von 5 nach 10)
    • +
    • Pin 2 mit 11
    • +
    • Pin 3 mit 17
    • +
    • Pin 4 mit 12
    • +
    • Pin 6 mit 16
    • +
    • Pin 7 mit 13
    • +
    • Pin 8 mit 14
    • +
    • Pin 9 mit 15
    • +
    • Pin 18 mit 25
    • +
    +

    + Die Pins 19 bis 24 bleiben unbelegt. Am besten nimmt man zum Verbinden Drahtstücke aus dem + zerschnittenen Druckerkabel.
    + Am besten geht das Ganze, indem man mit den Drähten aus dem Druckerkabel die Pins verlötet + (s. Bild 2) - da hat man was fürs Leben.
    + Jede andere Bastelei, die den Strom leitet müsste aber auch funktionieren. +

    + Pins
    + Toshiba-Dongle von oben
    +
  • +
  • + Danach kann man das Gehäuse vom Drucker-Stecker wieder aufsetzen - fertig.
    + Toshiba-Dongle mit Gehäuse +
  • +
+
+ + diff --git a/www/sonstiges/toshiba/pins.jpg b/www/sonstiges/toshiba/pins.jpg new file mode 100644 index 0000000..9bfc629 Binary files /dev/null and b/www/sonstiges/toshiba/pins.jpg differ diff --git a/www/stylesheet.css b/www/stylesheet.css new file mode 100644 index 0000000..93d20fe --- /dev/null +++ b/www/stylesheet.css @@ -0,0 +1,42 @@ + +body { background-color:#FFFFFF; color:#000000; font-family: Georgia, Arial, sans-serif; } + +h1 { font-size: 180%; margin-bottom: 1ex; } +h2 { font-size: 115%; margin-bottom: 0.5em; } +h3 { font-size: 100%; margin-bottom: 0.5em; } + +p { margin: 0ex; margin-bottom: 1em; } + +a:link { color:#0000EE; text-decoration: underline; } /* noch nicht besuchte Ziele */ +a:visited { color:#333388; text-decoration: underline; } /* besuchte Ziele */ +a:hover { color:#0000EE; text-decoration: underline; } /* Verweise bei "MouseOver" */ +/* a:active { CSS-Eigenschaft:Wert; ... } /* Angeklickte Verweise */ +/* a:focus { CSS-Eigenschaft:Wert; ... } /* Verweise, die Fokus erhalten */ +#login a { color:#555555; } + +.search { font-size: 75%; } + +.content { margin: 1em; margin-left: 4em; margin-right: 4em; } + +.smalltext { font-size: 75%; } + +#pagetitle { color:#AA0000; margin-top: 2em; margin-bottom: 8px; font-weight: normal; } +#pagetitle .headline { margin: 0px; margin-left: 8px; text-decoration: none; font-size: 200%; } +#pagetitle .headline a { color:#AA0000; text-decoration: none; } +#pagetitle .breadcrumbs { color:#000000; margin: 0px; margin-left: 10px; font-size: x-small; } +#pagetitle .breadcrumbs a { color:#000000; } +#pagetitle .breadcrumbs .bcTitle { font-weight: bold; } +#pagetitle .breadcrumbs .bcSeparator { color:#AA0000; } + +#bottomline { clear: both; margin: 8px; border-top: 1px solid #AA0000; text-align: right; color:#888888; font-size: xx-small; } + +/* Styles für index.php */ +.topicbox { float:left; background-color:#D0D5D8; margin: 1%; padding: 1ex; height: 20ex; width: 32ex; } +/* .topicbox:hover { background-color:#A6A6A6; } */ +.topicbox h2 { font-size: 115%; font-weight: normal; margin: 0px; margin-bottom: 0.5ex; } +.topicbox p { font-size: 85%; font-weight: normal; margin: 0px; margin-bottom: 1ex; margin-left: 2ex; line-height: 150%; } +#topics a:link { color:#000000; text-decoration: none; } /* noch nicht besuchte Ziele */ +#topics a:visited { color:#000000; text-decoration: none; } /* besuchte Ziele */ +#topics a:hover { color:#000000; text-decoration: underline; } /* Verweise bei "MouseOver" */ +/* #topics a:active { CSS-Eigenschaft:Wert; ... } /* Angeklickte Verweise */ +/* #topics a:focus { CSS-Eigenschaft:Wert; ... } /* Verweise, die Fokus erhalten */ diff --git a/www/suche.php b/www/suche.php new file mode 100644 index 0000000..74a068c --- /dev/null +++ b/www/suche.php @@ -0,0 +1,35 @@ + + +
+

+ Dieses Stichwort muss von jemand anderem sein... +

+
+ + + + diff --git a/www/tilman.php b/www/tilman.php new file mode 100644 index 0000000..6014cec --- /dev/null +++ b/www/tilman.php @@ -0,0 +1,31 @@ + + +
+

Herkunft und Bedeutung

+

+ Der Name 'Tilman' stammt aus Norddeutschland, genauer gesagt aus dem Friesischen. + Während einige Quellen den Namen vom altdeutschen 'Dietrich' herleiten, was soviel wie 'Herrscher des Volkes' bedeutet, + sehen andere diesen Zusammenhang nur für den Vornamen 'Till' (als Abkürzung für Dietrich) + und führen 'Tilman' auf die Bedeutung 'der taugliche Mann' zurück, wobei die Tauglichkeit für den Kriegsdienst gemeint ist. +

+

+ Namenstag ist übrigens der 16. Januar, zusammen mit Marcellus, (Marcel), (Thilo), (Till), Priscilla, Tasso und Dietwald. +

+

Tilmans in der Welt

+

+ Tilman Hausherr hat eine Liste mit Tilmans aus der ganzen Welt erstellt, auf der einige Tilmans auftauchen, die nicht in dieser Liste stehen. + Sogar eine Elefantenpolo-Spielerin ist darunter. +

+
+ + diff --git a/www/uni/Eclipse3.pdf b/www/uni/Eclipse3.pdf new file mode 100644 index 0000000..a848267 Binary files /dev/null and b/www/uni/Eclipse3.pdf differ diff --git a/www/uni/PairProgramming.pdf b/www/uni/PairProgramming.pdf new file mode 100644 index 0000000..34f4a91 Binary files /dev/null and b/www/uni/PairProgramming.pdf differ diff --git a/www/uni/Wikipedia.pdf b/www/uni/Wikipedia.pdf new file mode 100644 index 0000000..144edb0 Binary files /dev/null and b/www/uni/Wikipedia.pdf differ diff --git a/www/uni/diplomarbeit/index.php b/www/uni/diplomarbeit/index.php new file mode 100644 index 0000000..efcbef0 --- /dev/null +++ b/www/uni/diplomarbeit/index.php @@ -0,0 +1,23 @@ + + +
+ Diplomarbeit +

„Konzeptionierung und
Implementierung eines Blogsystems
auf Basis von Wissensnetzen“

+

+ soon to come... +

+ +
+ + diff --git a/www/uni/index.php b/www/uni/index.php new file mode 100644 index 0000000..31254bb --- /dev/null +++ b/www/uni/index.php @@ -0,0 +1,97 @@ + + +
+

+ Studiert habe ich an der + Freien Universität Berlin Informatik + auf Diplom mit Nebenfach + Publizistik und Kommunikationswissenschaft. +

+ +

Arbeiten, Paper, Infos:

+

+ Wikipedia: Erfassung von komplexen und kontroversen Sachverhalten in kollaborativen Hypertextumgebungen + (Ausarbeitung im Rahmen des Seminars „Online-Dienste“) +

+

+ Architektur und Konzepte von Eclipse 3 + (Ausarbeitung im Rahmen des Seminars „Komponentenbasierte Softwareentwicklung“) +

+

+ Pair Programming + (Ausarbeitung im Rahmen des Seminars „Agile Softwareprozesse“) +

+ +

+ Ansonsten liegt manchmal auch was in meinem Home-Verzeichnis auf dem Uni-Server. +

+ +
+ +

Sammlung

+

+ Dinge, die irgendwie das Aufheben wert sind, chronologisch geordnet: +

+ +

Wintersemester 2005/06

+ +

Wavelet-Kompression

+

+ Oder genauer: „Bildkompression mittels Wavelet-Transformation“. Projekt zur Vorlesung Scientific Visialization. + Ziel war die Implementierung eines Kompressions-Applets mit ausführlicher Dokumentation. +

+

Wintersemester 2004/05

+ +

Netzprogrammierung mit Java

+

+ Im Rahmen der Vorlesung Netzprogrammierung sind ein paar kleine Programme entstanden, die einige + typische Anwendungsfälle ganz gut illustrieren: +

+
    +
  • + ProxyServer.java - Ein einfacher Proxy, + der z.B. zur Trafficanalyse benutzt werden kann +
  • +
  • + NetComparator.java - Vergleicht zwei + Ressourcen miteinander (erst per Header-, dann per Inhaltsanalyse) +
  • +
  • + SiteSize.java - Ermittelt die Größe einer + HTML-Seite inklusive aller eingebetteten Objekte. Framesets werden berücksichtigt +
  • +
  • + AuthCheck.java - Verbindet zu einer + Seite die durch das Basic Authentication Scheme geschützt ist +
  • +
+ +

Wintersemester 2003/04

+ +

Algorithmen und Programmierung

+

+ Während der gemeinsamen Vorbereitung auf die Vordiplom-Prüfung entstanden diese Seiten. +

+ +

Wintersemester 2002/03

+ +

Webworking für die Publizistik

+

+ Technische Umsetzung des Layouts für die Internetpräsenz des + Instituts für Publizistik und Kommunikationswissenschaft + im Rahmen des Umstiegs auf das Content Management System Typo 3. Besonderes Augenmerk lag dabei auf der + Barrierefreiheit und Wartbarkeit, wodurch das Ergebnis angenehm leichtgewichtig ist. +

+
+ + diff --git a/www/uni/ss05/projektleitung/Fallbeispiel.pdf b/www/uni/ss05/projektleitung/Fallbeispiel.pdf new file mode 100644 index 0000000..daaf218 Binary files /dev/null and b/www/uni/ss05/projektleitung/Fallbeispiel.pdf differ diff --git a/www/uni/ss05/stundenplan.html b/www/uni/ss05/stundenplan.html new file mode 100644 index 0000000..1f8523b --- /dev/null +++ b/www/uni/ss05/stundenplan.html @@ -0,0 +1,122 @@ + + + + Stundenplan SoSe 2005 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MontagDienstagMittwochDonnerstagFreitag
8.30 - 10.00 +
KI
Inf SR006
Rojas
+
10.15 - 11.45
Ü DBS
Inf SR051
Schroeder
Ü KI
Inf SR006
Block
12.15 - 13.45
Journalismus
Lankwitz G 202
Göpfert
+
Geometrie
Pi SR025
Schulze
+
+
Kommunikations-
theorie
Lankwitz G 202
Posner-Landsch
+
XML
Inf SR005
Schild
+
Ü MafI II
Inf SR006
Krüger
+
+
Geometrie
Pi SR025
Schulze
Ü Geometrie
Pi SR025
14.15 - 15.45
16.15 - 17.45
Ü XML
Inf SR005
Schild
18.15 - 19.75
1800 - 2000 Jonglieren
2030 - 2130 Aerobic
2000 - 2200 Floorball
+ + + + + \ No newline at end of file diff --git a/www/uni/ss06/stundenplan.html b/www/uni/ss06/stundenplan.html new file mode 100644 index 0000000..004554e --- /dev/null +++ b/www/uni/ss06/stundenplan.html @@ -0,0 +1,165 @@ + + + + Stundenplan Sommersemester 2006 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
MontagDienstagMittwochDonnerstagFreitag
10.15 - 11.45 + +
+ +
12.15 - 13.45
Ü Empirische Bewertung
Inf SR049
Salinger
Ü MafI 2
Inf SR006
Kroushkov
14.15 - 15.45
Ü Bildverarbeitung
Inf SR006
Hundelshausen
16.15 - 17.45
Effiziente Algorithmen 1600-1900
Inf SR055
Rote
1700-1800
Singen
18.15 - 19.45
Robocup
Inf SR006
Rojas
1745-1830
Aquafitness
+

+     Bettina +

+

+     Tilman +

+
2130-2245
Bauchtanz
2000-2200
Floorball
+ + + +
+ +
+ + + \ No newline at end of file diff --git a/www/uni/ws02/puk/approved_508.gif b/www/uni/ws02/puk/approved_508.gif new file mode 100644 index 0000000..ae25896 Binary files /dev/null and b/www/uni/ws02/puk/approved_508.gif differ diff --git a/www/uni/ws02/puk/approved_aa.gif b/www/uni/ws02/puk/approved_aa.gif new file mode 100644 index 0000000..fdbace0 Binary files /dev/null and b/www/uni/ws02/puk/approved_aa.gif differ diff --git a/www/uni/ws02/puk/beispiel.html b/www/uni/ws02/puk/beispiel.html new file mode 100644 index 0000000..f6c35ef --- /dev/null +++ b/www/uni/ws02/puk/beispiel.html @@ -0,0 +1,101 @@ + + + + Freie Universität Berlin - Institut für Publizistik und Kommunikationswissenschaft + + + + + + + + +
+
+ + Institut für Publizistik- und Kommunikationswissenschaft + +
+
+  KONTAKT  |  +  ENGLISH  |  +  FU-BERLIN  |  +
+ + +
+
+ + + +
+ Start > + Studium > + Layout +
+ +
+ + + + +

Überschrift 1

+Normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+ +

Überschrift 2

+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+normaler Text normaler Text
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+ +

Überschrift 3

+Normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+normaler Text normaler Text
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+ +
    +
  • Aufzählung
  • +
  • Aufzählung
  • +
  • Aufzählung
  • +
  • Aufzählung
  • +
+ + + +
+
+

+ Erstellt von Tilman Walther
+ Letzte Änderung: 2002-12-30 +

+
+
+ + + + + diff --git a/www/uni/ws02/puk/bericht/download/ag_layout_dokumentation.zip b/www/uni/ws02/puk/bericht/download/ag_layout_dokumentation.zip new file mode 100644 index 0000000..07c484a Binary files /dev/null and b/www/uni/ws02/puk/bericht/download/ag_layout_dokumentation.zip differ diff --git a/www/uni/ws02/puk/bericht/download/ag_layout_ergebnis.zip b/www/uni/ws02/puk/bericht/download/ag_layout_ergebnis.zip new file mode 100644 index 0000000..abb3fd1 Binary files /dev/null and b/www/uni/ws02/puk/bericht/download/ag_layout_ergebnis.zip differ diff --git a/www/uni/ws02/puk/bericht/images/blue-bar.jpg b/www/uni/ws02/puk/bericht/images/blue-bar.jpg new file mode 100644 index 0000000..d23797d Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/blue-bar.jpg differ diff --git a/www/uni/ws02/puk/bericht/images/blue-bar.png b/www/uni/ws02/puk/bericht/images/blue-bar.png new file mode 100644 index 0000000..ff78ee9 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/blue-bar.png differ diff --git a/www/uni/ws02/puk/bericht/images/bullet.jpg b/www/uni/ws02/puk/bericht/images/bullet.jpg new file mode 100644 index 0000000..b357bad Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/bullet.jpg differ diff --git a/www/uni/ws02/puk/bericht/images/bullet.png b/www/uni/ws02/puk/bericht/images/bullet.png new file mode 100644 index 0000000..c478af7 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/bullet.png differ diff --git a/www/uni/ws02/puk/bericht/images/favicon.ico b/www/uni/ws02/puk/bericht/images/favicon.ico new file mode 100644 index 0000000..036a153 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/favicon.ico differ diff --git a/www/uni/ws02/puk/bericht/images/favicon.jpg b/www/uni/ws02/puk/bericht/images/favicon.jpg new file mode 100644 index 0000000..283955b Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/favicon.jpg differ diff --git a/www/uni/ws02/puk/bericht/images/favicon16.png b/www/uni/ws02/puk/bericht/images/favicon16.png new file mode 100644 index 0000000..b6cc7c0 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/favicon16.png differ diff --git a/www/uni/ws02/puk/bericht/images/favicon2.ico b/www/uni/ws02/puk/bericht/images/favicon2.ico new file mode 100644 index 0000000..bf617f2 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/favicon2.ico differ diff --git a/www/uni/ws02/puk/bericht/images/favicon32.png b/www/uni/ws02/puk/bericht/images/favicon32.png new file mode 100644 index 0000000..0593993 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/favicon32.png differ diff --git a/www/uni/ws02/puk/bericht/images/logo-plain.png b/www/uni/ws02/puk/bericht/images/logo-plain.png new file mode 100644 index 0000000..a35f5dd Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/logo-plain.png differ diff --git a/www/uni/ws02/puk/bericht/images/logo.jpg b/www/uni/ws02/puk/bericht/images/logo.jpg new file mode 100644 index 0000000..4436f1f Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/logo.jpg differ diff --git a/www/uni/ws02/puk/bericht/images/logo.png b/www/uni/ws02/puk/bericht/images/logo.png new file mode 100644 index 0000000..e7f047e Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/logo.png differ diff --git a/www/uni/ws02/puk/bericht/images/top-bar-background.jpg b/www/uni/ws02/puk/bericht/images/top-bar-background.jpg new file mode 100644 index 0000000..914c951 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/top-bar-background.jpg differ diff --git a/www/uni/ws02/puk/bericht/images/top-bar-background.png b/www/uni/ws02/puk/bericht/images/top-bar-background.png new file mode 100644 index 0000000..a78b237 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/top-bar-background.png differ diff --git a/www/uni/ws02/puk/bericht/images/top-bar-left.jpg b/www/uni/ws02/puk/bericht/images/top-bar-left.jpg new file mode 100644 index 0000000..2110254 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/top-bar-left.jpg differ diff --git a/www/uni/ws02/puk/bericht/images/top-bar-left.png b/www/uni/ws02/puk/bericht/images/top-bar-left.png new file mode 100644 index 0000000..1e7360d Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/top-bar-left.png differ diff --git a/www/uni/ws02/puk/bericht/images/top-bar-right.jpg b/www/uni/ws02/puk/bericht/images/top-bar-right.jpg new file mode 100644 index 0000000..7cef397 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/top-bar-right.jpg differ diff --git a/www/uni/ws02/puk/bericht/images/top-bar-right.png b/www/uni/ws02/puk/bericht/images/top-bar-right.png new file mode 100644 index 0000000..f509749 Binary files /dev/null and b/www/uni/ws02/puk/bericht/images/top-bar-right.png differ diff --git a/www/uni/ws02/puk/bericht/index.html b/www/uni/ws02/puk/bericht/index.html new file mode 100644 index 0000000..c2d2c05 --- /dev/null +++ b/www/uni/ws02/puk/bericht/index.html @@ -0,0 +1,598 @@ + + + + Seminar "Einführung eines Content Management Systems" + + + + + + + + + + +

Seminar "Einführung eines Content Management Systems" - WS 2002/03

+

Bettina Selig, Tilman Walther

+

AG Layout-Überarbeitung

+

Abschlussbericht

+ +
+ +
+ + +

1 Ausgangssituation

+Die AG baute auf den Ergebnissen der AG Layout vom Seminar Internet-Redaktion im WS 2001/02 auf. Es lag ein fertiger Entwurf vor, der verschiedenen Anforderungen entsprechend angepasst werden musste. + + + + +

2 Vorgaben

+Der Entwurf musste nach der Überarbeitung folgenden Vorgaben genügen: +
    +
  1. Das Layout muss in der HTML/CSS-Struktur den derzeit gültigen Standards entsprechen, um eine möglichst hohe Kompatibilität mit den verschiedenen Web-Browsern zu gewährleisten. Neuere Standards sollen so in das Layout eingebunden werden, dass der Zugang zu den Inhalten auch mit veralteten Webbrowsern möglich ist.
  2. +
  3. Das Layout sollte klein sein, um die durch die dynamische Seitengenerierung entstehende Serverlast so gering wie möglich zu halten.
  4. +
  5. Um den Zugang zu den Inhalten jedem zu ermöglichen, muss der Internetauftritt des Instituts weitesgehend barrierefrei sein und den Vorgaben durch das Bundesgleichstellungsgesetz und die WAI entsprechen.
  6. +
  7. Ausdrucke sollen ohne die Bedienelemente der Webseite erfolgen.
  8. +
+ +

3 Ablauf

+Das ursprünglich mit blinden Tabellen implementierte Layout wurde zunächst mit HTML/CSS neu erstellt. Bei den anschließenden Kompatibilitätstests mit verschiedenen Browsern zeigte sich, dass es wohl nicht möglich sein würde, den Entwurf so umzusetzen, dass er sowohl mit den fehlerbehafteten Netscape 4.x-Versionen, als auch mit den restlichen Browsern funktionieren würde, weshalb auf eine duale Lösung umgestellt wurde: Eine voll valide CSS-basierte Version als Standard, für Netscape 4.x-Nutzer eine speziell angepasste Version.
+Die Standard-Version musste auf Kompatibilität mit den verschiedenen Web-Browsern getestet und mehrfach angepasst werden, da nicht alle verabschiedeten Standards auch von den Browsern interpretiert werden, so dass z.B. nicht sämtliche Elemente der CSS2-Spezifikation genutzt werden konnten, was zum Teil deutliche Einschränkungen bei der Umsetzung des angestrebten Layouts mit sich brachte.
+ +

4 Ergebnisse

+ +

4.1 Aufteilung des Layouts

+ + + +Das Layout besteht aus drei Teilen: +
    +
  1. Dem HTML-Framework, in das das Content Management System die Inhalte einfügt,
  2. +
  3. dem Style-Sheet, das das Layout implementiert und dem Style-Sheet für den Druck
  4. +
  5. und den Bilddateien der verschiedenen Layout-Elemente
  6. +
+Das HTML-Framework ist logisch gegliedert, was den Zugriff mit nicht CSS-fähigen Browsern erleichtert. Durch die strenge Trennung von Inhalt und Layout ist eine Nutzung der Webseiten selbst mit Browsern der ersten Generation und rein textorientierten Browsern wie Lynx noch problemlos möglich. Es wurde der Befehlssatz von HTML 4.01 verwendet, auf XHTML wurde mangels breiter Unterstützung durch die existenten Browser verzichtet. Das Framework ist validiert nach den Regeln des World Wide Web Consortiums und auf die gültigen Richtlinien zur Barrierefreiheit hin überprüft. Es entspricht den "Section 508 Guidelines" der US-Regierung, die für US-amerikanische Behörden verbindliche Richtlinie zur Barrierefreiheit ihrer Webseiten.
+Die beiden Style Sheets sind ebenfalls nach den Regeln des World Wide Web Consortiums validiert. Ausgaben auf Drucker werden, sofern der Browser CSS interpretiert, mit einem angepassten Style Sheet formatiert, was unter anderem bewirkt, dass die Navigationselemente und Schmuckleisten im Druck weggelassen werden.
+Die Bilddateien konnten gegenüber dem ursprünglichen Entwurf hinsichtlich Größe (ursprünglich insgesamt 44,2 Kilobyte) und Qualität deutlich optimiert werden. So beträgt die Gesamtgröße aller im Framework verankerten Bilder ca. 13 Kilobyte, die Größe des gesamten Layouts mit allen Dateien etwa 22 Kilobyte. + +

Besonderheiten im Netscape 4x Layout

+Da der Netscape Navigator in der Version 4 bei der Interpretation von CSS gravierende Fehler macht, dieser Browser jedoch nach wie vor verbreitet ist, wurde eine gesonderte Version erstellt, auf die Typo3 sämtliche Netscape-4x-Browser verweist. Anstatt der CSS-basierten Unterteilung in logische Abschnitte durch <div>-Tags wurde die Netscape-eigene Layer-Technik verwendet, mit der sich eine annährend identische Ausgabe erreichen lässt.

+ + + + + +
+ +

4.2 Kommentierte Quelltexte

+ +

4.2.1 Beispiel.html

+Das HTML-Framework, in das Typo3 die Inhalte einfügt. +
+
Dokumententyp-Angabe +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html> + <head> + <title>Freie Universität Berlin - Institut für Publizistik und Kommunikationswissenschaft</title> +
Angabe des Zeichensatzes - so können deutsche Umlaute direkt ohne HTML-Codierung im Quelltext verwendet werden + <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+
Verweis auf die Style Sheets für verschiedene Ausgabemedien + <link rel="stylesheet" type="text/css" media="screen" href="styles.css"> + <link rel="stylesheet" type="text/css" media="print" href="print.css"> + <link rel="stylesheet" type="text/css" media="braille, embossed, tty, handheld" href="none">
</head> + + <body> +
Dieser Link wird nur angezeigt, wenn CSS ignoriert wird und dient zum Überspringen der Navigation. Wichtig z.B. für Screen Reader. + <div id="menu-skip"><a href="#content">Menü überspringen</a><br></div>
+
Die Schmuckleiste mit dem Instituts-Schriftzug wir hier eingebunden. Da sämtliche Bilder als Hintergrund im Style Sheet verankert sind, wird die +Leiste nicht angezeigt, wenn CSS ignoriert wird. Das Logo (oben links) ist direkt im HTML eingebunden, da es auch in der Textversion angezeigt werden soll. + <div id="top-bar"></div> + <div id="top-bar-right"></div> + <a href="http://www.kommwiss.fu-berlin.de"><img class="logo" src="logo.jpg" border="0" alt="Freie Universität Berlin"></a> + <a href="http://www.kommwiss.fu-berlin.de"><img class="top-bar-left" src="top-bar-left.jpg" border="0" alt="Institut für Publizistik- und Kommunikationswissenschaft"></a>
+
Das Service-Menü mit dem Suchformular. Das Formular in diesem Entwurf ist ein Dummy, der später +durch Typo3 ersetzt wird - je nachdem, ob die Typo3-Suchengine oder eine externe Lösung verwendet wird. + <div id="service"> + <form action=post method=post> + <img class="bullet" src="bullet.jpg" alt=""> <a href="">KONTAKT</a>  |  + <img class="bullet" src="bullet.jpg" alt=""> <a href="">ENGLISH</a>  |  + <img class="bullet" src="bullet.jpg" alt=""> <a href="http://www.fu-berlin.de">FU-BERLIN</a>  |  + <div id="search-label"><label for="search">Suchen:</label></div> + <input type="text" size="12" name="search" id="search" class="search"> + <input type="submit" value="Suchen" name="submitSearch" class="search"> + </form> + </div>
+
Das Hauptmenü. Die Einträge werden später durch Typo3 dynamisch generiert. + <div id="menu"> + <p> + <a class="h1" href="akt">Aktuelles</a> <img class="bullet" src="bullet.jpg" alt=""> + </p> + + <p> + <a class="h1" href="akt">Einrichtungen</a> <img class="bullet" src="bullet.jpg" alt=""> + </p> + + <p> + <a class="h1" href="akt">Studium</a> <img class="bullet" src="bullet.jpg" alt=""><br> + <a class="h2" href="akt">KVV</a><br> + <a class="h2" href="akt">Sprechstunden</a><br> + <a class="h2" href="akt">Fachschaftsinitiative</a><br> <!-- auch letzter Unterpunkt muss einen Break haben! (IE) --> + </p> + + <p> + <a class="h1" href="akt">Forschung</a> <img class="bullet" src="bullet.jpg" alt=""> + </p> + + <p> + <a class="h1" href="akt">Lehre</a> <img class="bullet" src="bullet.jpg" alt=""> + </p> + </div> + + <div id="path"> + <a href="">Start</a> > + <a href="">Studium</a> > + <a href="">Layout</a> + </div> + + <div id="content"> + <a name="content"></a>
+
Ab hier beginnt der Inhalt der jeweiligen Seite, der von Typo3 eingefügt wird. +<!-- INHALT __________________________________________________________________________ --> + +<h1>Überschrift 1</h1> +Normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br> +normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br> + +<h2>Überschrift 2</h2> +normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br> +normaler Text normaler Text<br> +normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br> + +<h3>Überschrift 3</h3> +Normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br> +normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br> +normaler Text normaler Text<br> +normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br> + +<ul> + <li>Aufzählung</li> + <li>Aufzählung</li> + <li>Aufzählung</li> + <li>Aufzählung</li> +</ul> + +
Die Fußzeile mit dem Datum der letzten Änderung und einem Mail-Link zum Autor wir ebenfalls dynamisch in das Framework eingefügt. +<!-- Letzte Änderung, Name und eMail des Autors _________________ --> + <div id="signature"> + <hr> + <p> + Erstellt von <a href="mailto:twalther@gmx.net">Tilman Walther</a><br> + Letzte Änderung: 2002-12-30 + </p> + </div> + </div>
+<!-- ENDE INHALT _____________________________________________________________________ --> +
+ </body> +</html> +
+ + + + + +
+ +

4.2.2 styles.css

+Mit diesem Style-Sheet werden die Ausgaben auf einen Standard-Browser formatiert. +
+body                 { margin: 0px; padding: 0px; background-color:#FFFFFF; font-family: Helvetica, Arial, sans-serif;
+                       background-image:url(blue-bar.jpg); background-repeat: repeat-y;  }
+
+#top-bar             { position: absolute; top: 42px; background-image:url(top-bar-background.jpg); width: 100%; height: 49px; }
+.logo                { position: absolute; top: 0px; left: 0px; border: 0px; }
+.top-bar-left        { position: absolute; top: 42px; left:136px; }
+#top-bar-right       { position: absolute; top: 42px; right:0px; height: 49px; width: 293px; 
+                       background-image:url(top-bar-right.jpg); background-repeat: no-repeat; }
+
+#service             { position: absolute; top: 0px; right: 0px; width: 100%; padding: 10px; color:#000099; text-align: right; }
+#service a           { text-decoration: none; color:#000099; background-color:#FFFFFF; }
+#service a:hover     { text-decoration: underline; }
+#service .bullet     { height: 1.6ex; width: 0.6ex; margin-bottom: -0.1ex; }
+
+.search              { font-size: 75%; }
+
+#path                { position: absolute; top: 92px; left: 140px; padding: 4px; font-size: 78%; color:#000099; }
+#path a              { color:#0000FF; text-decoration: underline; }
+
+#menu                { position: absolute; top: 120px; left: 2px; text-align: right; width: 134px; color:#FFFFFF;
+                       white-space: nowrap; overflow: hidden; }
+#menu a              { text-decoration: none; }
+#menu a:hover        { text-decoration: underline; }
+#menu p              { margin-top: 10px; }     /* engere Version:  margin-bottom: 0px; */
+#menu .h1            { color:#FFFFFF; font-size: 80%; font-weight: bold; }
+#menu .h2            { color:#FFFFFF; font-size: 70%; margin-right: 1.6ex; }
+#menu .bullet        { height: 1.8ex; width: 0.6ex; margin-bottom: -0.2ex; }
+
+#content             { position: absolute; top: 120px; left: 136px; padding: 2ex; color:#000000; line-height: 120%; }
+#content a           { color:#0000FF; text-decoration: underline; }
+#content h1          { font-size: 160%; line-height: 100%;  }
+#content h2          { font-size: 130%; line-height: 80%; }
+#content h3          { font-size: 110%; line-height: 80%; }
+#content h4          { font-size: 100%; line-height: 80%; }
+#content h5          { font-size: 80%; line-height: 80%; }
+#content h6          { font-size: 60%; line-height: 80%; }
+#content img         { margin: 5px; border: 0px; }
+
+#signature           { font-size: 75%; margin-top: 10px; }
+#signature a         { color:#0000FF; text-decoration: underline; }
+
+/* Barrierefreiheit */
+#menu-skip           { display: none; }
+#search-label        { display: none; }
+
+ + + + + +
+ +

4.2.3 print.css

+Mit diesem Style Sheet werden Ausgaben auf Drucker formatiert. Das Style Sheet wird sowohl in der Standard- als auch in der Netscape-4x-Version verwendet. + +
+body                 { background-color:#FFFFFF; font-family: Helvetica, Arial, sans-serif; }
+
+#top-bar             { display: none; }
+.logo                { display: none; }
+.top-bar-left        { display: none; }
+#top-bar-right       { display: none; }
+
+#service             { display: none; }
+
+#path                { display: none; }
+
+#menu                { display: none; }
+
+#content             { color:#000000; line-height: 120%; }
+#content a           { color:#0000FF; text-decoration: underline; }
+#content h1          { font-size: 160%; line-height: 100%;  }
+#content h2          { font-size: 130%; line-height: 80%; }
+#content h3          { font-size: 110%; line-height: 80%; }
+#content h4          { font-size: 100%; line-height: 80%; }
+#content h5          { font-size: 80%; line-height: 80%; }
+#content h6          { font-size: 60%; line-height: 80%; }
+#content img         { margin: 5px; border: 0px; }
+
+#signature           { font-size: 75%; margin-top: 10px; }
+#signature a         { color:#0000FF; text-decoration: underline; }
+
+/* Barrierefreiheit */
+#menu-skip           { display: none; }
+#search-label        { display: none; }
+
+/* Netscape 4.x */
+#ns4print            { display: none }
+
+ + + +
+ +

4.2.4 netscape.html

+Das HTML-Framework für Netscape 4x mit Layer-Technik. + +
+<html>
+  <head>
+    <title>Freie Universität Berlin - Institut für Publizistik und Kommunikationswissenschaft</title>
+    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+    <meta name="DC.Language" content="de">
+    <link rel="stylesheet" type="text/css" media="screen" href="netscape.css">
+    <link rel="stylesheet" type="text/css" media="print" href="print.css">
+  </head>
+
+  <body>
+
+
+    <!-- Logo -->
+    <layer left=0px top=0px z-index=1 class="logo">
+      <a href="http://www.fu-berlin.de"><img src="logo.jpg" border=0px></a>
+    </layer>
+
+
+    <!-- Menü links unter Logo -->
+    <layer left=0px top=112px width=136px>  
+      <div id="menu">
+        <a href="">Aktuelles</a> <span id="green"> </span>
+      </div> 
+      <div id="menu">
+        <a href="">Einrichtungen</a> <span id="green"> </span>
+      </div> 
+      <div id="menu">
+        <a href="">Studium</a> <span id="green"> </span>
+        <div id="sub-menu">
+          <a href="">KVV</a><br>
+          <a href="">Sprechstunden</a><br>
+          <a href="">Fachschaftsinitiative</a><br>
+        </div>
+      </div> 
+      <div id="menu">
+        <a href="">Forschung</a> <span id="green"> </span>
+      </div> 
+      <div id="menu">
+        <a href="">Lehre</a> <span id="green"> </span>
+      </div> 
+    </layer>
+    
+
+    <!-- Service-Menü -->
+    <layer id="service" left=0px top=0px height=42px width=100%>
+      <form action=post method=post>
+        <img src="bullet.jpg" height="10" width="4"> <a href="">KONTAKT</a>  |  
+        <img src="bullet.jpg" height="10" width="4"> <a href="">ENGLISH</a>  |  
+        <img src="bullet.jpg" height="10" width="4"> <a href="">FU-BERLIN</a>  |  
+        <input type=text size=6 name=search class="search">
+        <input type=submit value=Suchen name=submitSearch class="search">
+      </form>
+    </layer>
+    
+
+    <!-- Streifen -->
+    <layer id="ns4print" left=0px top=42px height=49px width=100% z-index=0>
+     <layer background="top-bar-background.jpg">
+       <a href="http://www.kommwiss.fu-berlin.de"><img src="top-bar-left.jpg" alt="" align=left height=49px hspace=136px border=0px></a>
+       <img src="top-bar-right.jpg" alt="" align=right height=49px hspace=0px>
+     </layer>
+    </layer>
+    
+    
+    <!-- Path -->
+    <layer id="path" left=136px top=90px>
+      <a href="">Start</a> > 
+      <a href="">Studium</a> > 
+      <a href="">Layout</a>
+    </layer>
+    
+    
+    <layer id="content" left=136px; top=112;>
+    
+<!-- INHALT __________________________________________________________________________ -->
+
+<h1>Überschrift 1</h1>
+Normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br>
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br>
+  
+<h2>Überschrift 2</h2>
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br>
+normaler Text normaler Text<br>
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br>
+
+<h3>Überschrift 3</h3>
+Normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br>
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br>
+normaler Text normaler Text<br>
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text<br>
+
+<ul>
+ <li>Aufzählung</li>
+ <li>Aufzählung</li>
+ <li>Aufzählung</li>
+ <li>Aufzählung</li>
+</ul> 
+
+
+<!-- Letzte Änderung, Name und eMail des Autors _________________ -->
+
+   <layer id="signature">
+     <hr>
+     <p>
+      Erstellt von <a href="mailto:kes@gmx.net">Bettina Selig</a><br>
+      Letzte Änderung: 2003-02-11
+     </p>
+    </layer>
+
+<!-- ENDE INHALT _____________________________________________________________________ -->
+
+    </layer>
+    
+  </body>
+</html>
+
+
+ + + +
+ +

4.2.5 netscape.css

+Das Style Sheet für Netscape 4x. + +
+body           { margin: 0px; padding: 0px; font-family:Helvetica,Arial,sans-serif; 
+                 background-color: #FFFFFF; background-image: url(blue-bar.jpg); background-repeat: repeat-y; }
+
+#menu          { margin-top: 1.2em; text-align: right; font-size: 80%; font-weight: bold; color: #FFFFFF; }
+#menu a        { text-decoration: none; color: #FFFFFF;}
+#sub-menu      { margin-right: 0.6em; font-size: 75%; font-weight: normal; } 
+#green         { background-color: #99CC00 }
+
+#service       { margin: 10px; margin-right: 20px; text-align: right; font-size: 85%; color: #000099; }
+#service a     { text-decoration: none; color: #000099; background-color:#FFFFFF; }
+
+.search        { font-size: 75%; }
+
+#path          { margin: 0.3em; font-size: 70%; font-weight: normal; color: #000099; }
+#path a        { text-decoration: underline; color: #0000FF; }
+
+#content       { margin: 0.5em; padding: 0.5em; } 
+#content a     { color: #0000FF; text-decoration: underline; }
+#content h1    { font-size: 160%; line-height: 100%;  }
+#content h2    { font-size: 130%; line-height: 80%; }
+#content h3    { font-size: 110%; line-height: 80%; }
+#content h4    { font-size: 100%; line-height: 80%; }
+#content h5    { font-size: 80%; line-height: 80%; }
+#content h6    { font-size: 60%; line-height: 80%; }
+#content img   { margin: 5px; border: 0px; }
+#content ul    { margin-top: 1em; }
+#content ol    { margin-top: 1em; }
+
+#signature     { margin-top: 10px; font-size: 70%; }
+#signature a   { text-decoration: underline; color: #0000FF; }
+
+ + + + +
+ +

4.3 Bilddateien

+Die JPEG-Dateien sind die im Layout verwendeten. Die verlustfrei komprimierten PNG-Dateien können zur weiteren Bearbeitung benutzt werden.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

 Logo oben links
JPEG-Format (4,33 KB)
PNG-Format (15,5 KB)

 Menü-Hintergrund
JPEG-Format (1,07 KB)
PNG-Format (0,14 KB)

 Bullet für Menüpunkte (wird skaliert)
JPEG-Format (0,28 KB)
PNG-Format (0,02 KB)

 Hintergrund für Schmuckleiste oben
JPEG-Format (0,31 KB)
PNG-Format (0,11 KB)

 Instituts-Schriftzug für die Schmuckleiste
JPEG-Format (5,45 KB)
PNG-Format (4,60 KB)

 rechter Abschluß für die Schmuckleiste
JPEG-Format (2,44 KB)
PNG-Format (14,20 KB)

 Icon für die Favoriten
ICO-Format mit weißem Hintergrund (1,05 KB)
ICO-Format mit transparentem Hintergrund (1,05 KB)
16x16 Pixel, weißer Hintergrund, PNG-Format (0,27 KB)
32x32 Pixel, weißer Hintergrund, PNG-Format (0,48 KB)
+
+ + + \ No newline at end of file diff --git a/www/uni/ws02/puk/bericht/screens/entwurf.jpg b/www/uni/ws02/puk/bericht/screens/entwurf.jpg new file mode 100644 index 0000000..31ea130 Binary files /dev/null and b/www/uni/ws02/puk/bericht/screens/entwurf.jpg differ diff --git a/www/uni/ws02/puk/bericht/screens/entwurf.png b/www/uni/ws02/puk/bericht/screens/entwurf.png new file mode 100644 index 0000000..7d325dc Binary files /dev/null and b/www/uni/ws02/puk/bericht/screens/entwurf.png differ diff --git a/www/uni/ws02/puk/bericht/screens/ergebnis.jpg b/www/uni/ws02/puk/bericht/screens/ergebnis.jpg new file mode 100644 index 0000000..191414f Binary files /dev/null and b/www/uni/ws02/puk/bericht/screens/ergebnis.jpg differ diff --git a/www/uni/ws02/puk/bericht/screens/ergebnis.png b/www/uni/ws02/puk/bericht/screens/ergebnis.png new file mode 100644 index 0000000..c0ef396 Binary files /dev/null and b/www/uni/ws02/puk/bericht/screens/ergebnis.png differ diff --git a/www/uni/ws02/puk/blue-bar.jpg b/www/uni/ws02/puk/blue-bar.jpg new file mode 100644 index 0000000..d23797d Binary files /dev/null and b/www/uni/ws02/puk/blue-bar.jpg differ diff --git a/www/uni/ws02/puk/bullet.jpg b/www/uni/ws02/puk/bullet.jpg new file mode 100644 index 0000000..b357bad Binary files /dev/null and b/www/uni/ws02/puk/bullet.jpg differ diff --git a/www/uni/ws02/puk/entwurf.html b/www/uni/ws02/puk/entwurf.html new file mode 100644 index 0000000..96029e0 --- /dev/null +++ b/www/uni/ws02/puk/entwurf.html @@ -0,0 +1,10 @@ + + +Umleitung + + + +Die Seite hat eine neue Adresse:
+http://www.tilman.de/container/puk/index.html + + \ No newline at end of file diff --git a/www/uni/ws02/puk/favicon.ico b/www/uni/ws02/puk/favicon.ico new file mode 100644 index 0000000..036a153 Binary files /dev/null and b/www/uni/ws02/puk/favicon.ico differ diff --git a/www/uni/ws02/puk/index.html b/www/uni/ws02/puk/index.html new file mode 100644 index 0000000..9cc79d1 --- /dev/null +++ b/www/uni/ws02/puk/index.html @@ -0,0 +1,120 @@ + + + + Freie Universität Berlin - Institut für Publizistik und Kommunikationswissenschaft + + + + + + + + +
+
+ + Institut für Publizistik- und Kommunikationswissenschaft + +
+
+  KONTAKT  |  +  ENGLISH  |  +  FU-BERLIN  |  +
+ + +
+
+ + + +
+ Start > + Studium > + Layout +
+ +
+ + + +

Version: 1.5 vom 12. Februar 2003

+ +Hallo da draußen!
+ +

Das PuK-Layout ist fertig

+Nachdem die Preview schon in der AG diskutiert wurde, nun das Layout in der neuen Version.
+Inzwischen ist alles erprobt und validiert (sowohl HTML als auch CSS), außerdem kann auf eine zusätzliche Textversion verzichtet werden (s. Lynxview).
+Das ganze ist bereits getestet unter Netscape 6 & 7, Internet Explorer 6, Opera 6 & 7 und Lynx.
+Für Netscape 4x gibt es eine Extra-Version.
+
+Zum herunterladen: + + +

Mängel und Abweichungen in der Standard-Version

+
    +
  • Der Internet Explorer bricht das Menü bei sehr großer Schrift etwas unschön um
  • +
  • Opera legt das Service-Menü ein bißchen tiefer und will das Suchfeld nicht verkleinern
  • +
  • Netscape und Opera beginnen mit dem Inhalt etwas tiefer, wenn mit einer Überschrift begonnen wird
  • +
+ +

Sonstiges

+Auf einen grafischen "Suchen"-Button haben wir mangels Skalierbarkeit und zugunsten der Nutzer-Wiedererkennung verzichtet. + +

Version History

+1.2 - Druck-CSS eingefügt, kleine Änderungen am CSS
+1.3 - Die Bilder wurden überarbeitet und optimiert
+1.4 - Break nach Menu-Skip, Label für Formular, kleine Änderungen am CSS
+1.5 - Menüeinträge verkleinert, Menü-Hintergrund jetzt mit 'interlace striping'
+ +

+ + + + + +

+ + +
+
+

+ Erstellt von Tilman Walther
+ Letzte Änderung: 2003-2-12 +

+
+
+ + + + + diff --git a/www/uni/ws02/puk/logo.jpg b/www/uni/ws02/puk/logo.jpg new file mode 100644 index 0000000..4436f1f Binary files /dev/null and b/www/uni/ws02/puk/logo.jpg differ diff --git a/www/uni/ws02/puk/mosaic.jpg b/www/uni/ws02/puk/mosaic.jpg new file mode 100644 index 0000000..f320a97 Binary files /dev/null and b/www/uni/ws02/puk/mosaic.jpg differ diff --git a/www/uni/ws02/puk/netscape.css b/www/uni/ws02/puk/netscape.css new file mode 100644 index 0000000..fe89b54 --- /dev/null +++ b/www/uni/ws02/puk/netscape.css @@ -0,0 +1,30 @@ +body { margin: 0px; padding: 0px; font-family:Helvetica,Arial,sans-serif; + background-color: #FFFFFF; background-image: url(blue-bar.jpg); background-repeat: repeat-y; } + +#menu { margin-top: 1.2em; text-align: right; font-size: 80%; font-weight: bold; color: #FFFFFF; } +#menu a { text-decoration: none; color: #FFFFFF;} +#sub-menu { margin-right: 0.6em; font-size: 75%; font-weight: normal; } +#green { background-color: #99CC00 } + +#service { margin: 10px; margin-right: 20px; text-align: right; font-size: 85%; color: #000099; } +#service a { text-decoration: none; color: #000099; background-color:#FFFFFF; } + +.search { font-size: 75%; } + +#path { margin: 0.3em; font-size: 70%; font-weight: normal; color: #000099; } +#path a { text-decoration: underline; color: #0000FF; } + +#content { margin: 0.5em; padding: 0.5em; } +#content a { color: #0000FF; text-decoration: underline; } +#content h1 { font-size: 160%; line-height: 100%; } +#content h2 { font-size: 130%; line-height: 80%; } +#content h3 { font-size: 110%; line-height: 80%; } +#content h4 { font-size: 100%; line-height: 80%; } +#content h5 { font-size: 80%; line-height: 80%; } +#content h6 { font-size: 60%; line-height: 80%; } +#content img { margin: 5px; border: 0px; } +#content ul { margin-top: 1em; } +#content ol { margin-top: 1em; } + +#signature { margin-top: 10px; font-size: 70%; } +#signature a { text-decoration: underline; color: #0000FF; } diff --git a/www/uni/ws02/puk/netscape.html b/www/uni/ws02/puk/netscape.html new file mode 100644 index 0000000..4a77dc3 --- /dev/null +++ b/www/uni/ws02/puk/netscape.html @@ -0,0 +1,115 @@ + + + Freie Universität Berlin - Institut für Publizistik und Kommunikationswissenschaft + + + + + + + + + + + + + + + + + + + + + + + + + +
+  KONTAKT  |  +  ENGLISH  |  +  FU-BERLIN  |  + + +
+
+ + + + + + + + + + + + + + Start >  + Studium >  + Layout + + + + + + + +

Überschrift 1

+Normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+ +

Überschrift 2

+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+normaler Text normaler Text
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+ +

Überschrift 3

+Normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+normaler Text normaler Text
+normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text normaler Text
+ +
    +
  • Aufzählung
  • +
  • Aufzählung
  • +
  • Aufzählung
  • +
  • Aufzählung
  • +
+ + + + + +
+

+ Erstellt von Bettina Selig
+ Letzte Änderung: 2003-02-11 +

+
+ + + +
+ + + diff --git a/www/uni/ws02/puk/none b/www/uni/ws02/puk/none new file mode 100644 index 0000000..8fe872d --- /dev/null +++ b/www/uni/ws02/puk/none @@ -0,0 +1 @@ +/* just a dummy */ \ No newline at end of file diff --git a/www/uni/ws02/puk/presentation/Entwurf-Dateien/foto.jpg b/www/uni/ws02/puk/presentation/Entwurf-Dateien/foto.jpg new file mode 100644 index 0000000..16cdb26 Binary files /dev/null and b/www/uni/ws02/puk/presentation/Entwurf-Dateien/foto.jpg differ diff --git a/www/uni/ws02/puk/presentation/Entwurf-Dateien/institut.jpg b/www/uni/ws02/puk/presentation/Entwurf-Dateien/institut.jpg new file mode 100644 index 0000000..e277f86 Binary files /dev/null and b/www/uni/ws02/puk/presentation/Entwurf-Dateien/institut.jpg differ diff --git a/www/uni/ws02/puk/presentation/Entwurf-Dateien/kaestchen_gruen.jpg b/www/uni/ws02/puk/presentation/Entwurf-Dateien/kaestchen_gruen.jpg new file mode 100644 index 0000000..97e35bb Binary files /dev/null and b/www/uni/ws02/puk/presentation/Entwurf-Dateien/kaestchen_gruen.jpg differ diff --git a/www/uni/ws02/puk/presentation/Entwurf-Dateien/kommwiss.css b/www/uni/ws02/puk/presentation/Entwurf-Dateien/kommwiss.css new file mode 100644 index 0000000..1296317 --- /dev/null +++ b/www/uni/ws02/puk/presentation/Entwurf-Dateien/kommwiss.css @@ -0,0 +1,75 @@ +BODY { + MARGIN: 0px; COLOR: black; FONT-FAMILY: Arial, Helvetica, sans-serif; BACKGROUND-COLOR: white +} +DD { + MARGIN-BOTTOM: 0.5em; MARGIN-LEFT: 1em +} +DL { + FONT-SIZE: 9pt +} +FORM { + MARGIN: 0.5em +} +IMG { + BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px +} +.kaestchenGruen { + HEIGHT: 0.8em; BACKGROUND-COLOR: #99cc00 +} +.spalteRechtsUnten { + VERTICAL-ALIGN: top +} +.zeileTopBarOben { + VERTICAL-ALIGN: bottom; HEIGHT: 42px +} +.zeileTopBarMitte { + HEIGHT: 49px +} +.zeileTopBarUnten { + VERTICAL-ALIGN: top; HEIGHT: 22px +} +.balkenLinksUnten { + BACKGROUND-POSITION: left bottom; BACKGROUND-ATTACHMENT: fixed; BACKGROUND-IMAGE: url(haus_l.jpg); BACKGROUND-REPEAT: no-repeat +} +.zelleContent { + PADDING-RIGHT: 1em; PADDING-LEFT: 1em; PADDING-BOTTOM: 1em; VERTICAL-ALIGN: top; PADDING-TOP: 1em +} +.zelleGruen { + BACKGROUND-COLOR: #99cc00 +} +.zelleServiceLinks { + PADDING-RIGHT: 0.5em; VERTICAL-ALIGN: middle +} +A.serviceLink:link { + COLOR: blue; TEXT-DECORATION: none +} +A.serviceLink:hover { + COLOR: blue; TEXT-DECORATION: underline +} +A.serviceLink:visited { + COLOR: purple; TEXT-DECORATION: none +} +.zelleSteifen { + BACKGROUND-IMAGE: url(streifen.jpg); BACKGROUND-REPEAT: repeat-x +} +.zelleTextHauptnavigation { + PADDING-RIGHT: 0.3em; FONT-WEIGHT: bold; COLOR: white; BACKGROUND-COLOR: #1f4977; TEXT-ALIGN: right +} +A.navLink:link { + COLOR: white; TEXT-DECORATION: none +} +A.navLink:hover { + TEXT-DECORATION: underline +} +A.navLink:visited { + COLOR: silver; TEXT-DECORATION: none +} +.zelleTextSubnavigation { + FONT-SIZE: 12px; COLOR: white; BACKGROUND-COLOR: #1f4977; TEXT-ALIGN: right +} +.zelleTopNav { + PADDING-LEFT: 1em; FONT-SIZE: 9pt; VERTICAL-ALIGN: middle +} +.zelleTextBox { + BACKGROUND-COLOR: #e6e6fa +} diff --git a/www/uni/ws02/puk/presentation/Entwurf-Dateien/logo_mitte.jpg b/www/uni/ws02/puk/presentation/Entwurf-Dateien/logo_mitte.jpg new file mode 100644 index 0000000..b06332b Binary files /dev/null and b/www/uni/ws02/puk/presentation/Entwurf-Dateien/logo_mitte.jpg differ diff --git a/www/uni/ws02/puk/presentation/Entwurf-Dateien/logo_oben.jpg b/www/uni/ws02/puk/presentation/Entwurf-Dateien/logo_oben.jpg new file mode 100644 index 0000000..e18b943 Binary files /dev/null and b/www/uni/ws02/puk/presentation/Entwurf-Dateien/logo_oben.jpg differ diff --git a/www/uni/ws02/puk/presentation/Entwurf-Dateien/logo_unten.jpg b/www/uni/ws02/puk/presentation/Entwurf-Dateien/logo_unten.jpg new file mode 100644 index 0000000..6f13f53 Binary files /dev/null and b/www/uni/ws02/puk/presentation/Entwurf-Dateien/logo_unten.jpg differ diff --git a/www/uni/ws02/puk/presentation/Entwurf-Dateien/streifen.jpg b/www/uni/ws02/puk/presentation/Entwurf-Dateien/streifen.jpg new file mode 100644 index 0000000..593064a Binary files /dev/null and b/www/uni/ws02/puk/presentation/Entwurf-Dateien/streifen.jpg differ diff --git a/www/uni/ws02/puk/presentation/Entwurf-Dateien/zeitungen_rechts.jpg b/www/uni/ws02/puk/presentation/Entwurf-Dateien/zeitungen_rechts.jpg new file mode 100644 index 0000000..01b57e8 Binary files /dev/null and b/www/uni/ws02/puk/presentation/Entwurf-Dateien/zeitungen_rechts.jpg differ diff --git a/www/uni/ws02/puk/presentation/Entwurf.htm b/www/uni/ws02/puk/presentation/Entwurf.htm new file mode 100644 index 0000000..bf9dc2d --- /dev/null +++ b/www/uni/ws02/puk/presentation/Entwurf.htm @@ -0,0 +1,161 @@ + + +Home - Institut für Publizistik- und Kommunikationswissenschaft - FU Berlin + + + + + + + + + + + + + + + + + + + + +
Institut für Publizistik- Und Kommunikationswissenschaft 
Home > Aktuelles > Presse + + + + + + + + + + + + + + + + + + +
  
Suche 
+
 
News 
+
+
1.12.2002 +
KVV für + WS2002/03 online +
20.8.2002 +
Neue + Website online
+

Newsarchiv

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Aktuelles 
  
Einrichtungen 
  
Studium 
KVV, Sprechstunden, + Fachschafts-Initiative +  
  
Forschung 
  
Lehre 
  
  
+

Lorem ipsum

+

dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh + euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi + enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit + lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum + iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel + illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto + odio dignissim qui blandit praesent luptatum zzril delenit augue duis + dolore te feugait nulla facilisi.

+

Lorem ipsum

+

dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh + euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi + enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit + lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum + iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel + illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto + odio dignissim qui blandit praesent luptatum zzril delenit augue duis + dolore te feugait nulla facilisi.Lorem ipsum dolor sit amet, consectetuer + adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore + magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud + exerci tation ullamcorper

 
diff --git a/www/uni/ws02/puk/presentation/index.html b/www/uni/ws02/puk/presentation/index.html new file mode 100644 index 0000000..1c5bd8d --- /dev/null +++ b/www/uni/ws02/puk/presentation/index.html @@ -0,0 +1,33 @@ + + + + ::                :: + + + + +
    +
  1. + Entwurf aus dem WS 2001/02 +
  2. +
  3. + Ergebnis WS 2002/03 + +
  4. +
  5. + Abschlussbericht +
  6. +
+ + \ No newline at end of file diff --git a/www/uni/ws02/puk/print.css b/www/uni/ws02/puk/print.css new file mode 100644 index 0000000..7954f7c --- /dev/null +++ b/www/uni/ws02/puk/print.css @@ -0,0 +1,34 @@ +/* letzte Änderung: 5. Jan. 2003 */ + +body { background-color:#FFFFFF; font-family: Helvetica, Arial, sans-serif; } + +#top-bar { display: none; } +.logo { display: none; } +.top-bar-left { display: none; } +#top-bar-right { display: none; } + +#service { display: none; } + +#path { display: none; } + +#menu { display: none; } + +#content { color:#000000; line-height: 120%; } +#content a { color:#0000FF; text-decoration: underline; } +#content h1 { font-size: 160%; line-height: 100%; } +#content h2 { font-size: 130%; line-height: 80%; } +#content h3 { font-size: 110%; line-height: 80%; } +#content h4 { font-size: 100%; line-height: 80%; } +#content h5 { font-size: 80%; line-height: 80%; } +#content h6 { font-size: 60%; line-height: 80%; } +#content img { margin: 5px; border: 0px; } + +#signature { font-size: 75%; margin-top: 10px; } +#signature a { color:#0000FF; text-decoration: underline; } + +/* Barrierefreiheit */ +#menu-skip { display: none; } +#search-label { display: none; } + +/* Netscape 4.x */ +#ns4print { display: none } \ No newline at end of file diff --git a/www/uni/ws02/puk/styles.css b/www/uni/ws02/puk/styles.css new file mode 100644 index 0000000..63988a8 --- /dev/null +++ b/www/uni/ws02/puk/styles.css @@ -0,0 +1,46 @@ +/* letzte Änderung: 5. Jan. 2003 */ + +body { margin: 0px; padding: 0px; background-color:#FFFFFF; font-family: Helvetica, Arial, sans-serif; + background-image:url(blue-bar.jpg); background-repeat: repeat-y; } + +#top-bar { position: absolute; top: 42px; background-image:url(top-bar-background.jpg); width: 100%; height: 49px; } +.logo { position: absolute; top: 0px; left: 0px; border: 0px; } +.top-bar-left { position: absolute; top: 42px; left:136px; } +#top-bar-right { position: absolute; top: 42px; right:0px; height: 49px; width: 293px; + background-image:url(top-bar-right.jpg); background-repeat: no-repeat; } + +#service { position: absolute; top: 0px; right: 0px; width: 100%; padding: 10px; color:#000099; text-align: right; } +#service a { text-decoration: none; color:#000099; background-color:#FFFFFF; } +#service a:hover { text-decoration: underline; } +#service .bullet { height: 1.6ex; width: 0.6ex; margin-bottom: -0.1ex; } + +.search { font-size: 75%; } + +#path { position: absolute; top: 92px; left: 140px; padding: 4px; font-size: 78%; color:#000099; } +#path a { color:#0000FF; text-decoration: underline; } + +#menu { position: absolute; top: 120px; left: 2px; text-align: right; width: 134px; color:#FFFFFF; + white-space: nowrap; overflow: hidden; } +#menu a { text-decoration: none; } +#menu a:hover { text-decoration: underline; } +#menu p { margin-top: 10px; } /* engere Version: margin-bottom: 0px; */ +#menu .h1 { color:#FFFFFF; font-size: 80%; font-weight: bold; } +#menu .h2 { color:#FFFFFF; font-size: 70%; margin-right: 1.6ex; } +#menu .bullet { height: 1.8ex; width: 0.6ex; margin-bottom: -0.2ex; } + +#content { position: absolute; top: 120px; left: 136px; padding: 2ex; color:#000000; line-height: 120%; } +#content a { color:#0000FF; text-decoration: underline; } +#content h1 { font-size: 160%; line-height: 100%; } +#content h2 { font-size: 130%; line-height: 80%; } +#content h3 { font-size: 110%; line-height: 80%; } +#content h4 { font-size: 100%; line-height: 80%; } +#content h5 { font-size: 80%; line-height: 80%; } +#content h6 { font-size: 60%; line-height: 80%; } +#content img { margin: 5px; border: 0px; } + +#signature { font-size: 75%; margin-top: 10px; } +#signature a { color:#0000FF; text-decoration: underline; } + +/* Barrierefreiheit */ +#menu-skip { display: none; } +#search-label { display: none; } diff --git a/www/uni/ws02/puk/top-bar-background.jpg b/www/uni/ws02/puk/top-bar-background.jpg new file mode 100644 index 0000000..914c951 Binary files /dev/null and b/www/uni/ws02/puk/top-bar-background.jpg differ diff --git a/www/uni/ws02/puk/top-bar-left.jpg b/www/uni/ws02/puk/top-bar-left.jpg new file mode 100644 index 0000000..2110254 Binary files /dev/null and b/www/uni/ws02/puk/top-bar-left.jpg differ diff --git a/www/uni/ws02/puk/top-bar-right.jpg b/www/uni/ws02/puk/top-bar-right.jpg new file mode 100644 index 0000000..7cef397 Binary files /dev/null and b/www/uni/ws02/puk/top-bar-right.jpg differ diff --git a/www/uni/ws02/puk/valid-html401 b/www/uni/ws02/puk/valid-html401 new file mode 100644 index 0000000..3855210 Binary files /dev/null and b/www/uni/ws02/puk/valid-html401 differ diff --git a/www/uni/ws02/puk/vcss b/www/uni/ws02/puk/vcss new file mode 100644 index 0000000..020c75a Binary files /dev/null and b/www/uni/ws02/puk/vcss differ diff --git a/www/uni/ws03/alp/2-4baum.gif b/www/uni/ws03/alp/2-4baum.gif new file mode 100644 index 0000000..6a38eb0 Binary files /dev/null and b/www/uni/ws03/alp/2-4baum.gif differ diff --git a/www/uni/ws03/alp/ArrayQueue.java b/www/uni/ws03/alp/ArrayQueue.java new file mode 100644 index 0000000..6179b5d --- /dev/null +++ b/www/uni/ws03/alp/ArrayQueue.java @@ -0,0 +1,97 @@ + +interface Queue { + + public void enqueue(Object o) throws Exception; + + public Object dequeue(); + + public boolean isFull(); + +} + + +// Implementiert eine Schlange mit einem Array, der +// eine Art Kreis simuliert +class ArrayQueue implements Queue { + + Object[] ar; + int start = 0; + int elements = 0; + + public ArrayQueue(int capacity) { + + ar = new Object[capacity]; + + } + + public void enqueue(Object o) throws Exception { + + if (!isFull()) { + + ar[(start + elements) % ar.length] = o; + elements++; + + } + else throw new Exception("Queue is full."); + + } + + public Object dequeue() { + + if (elements > 0) { + + elements--; + + int i = start; + start = (start+1) % ar.length; + + return ar[i]; + + } + + // alternativ könnte man auch eine Exception werfen + return null; + + } + + // pre: elements <= ar.length + public boolean isFull() { + return (elements == ar.length); + } + + public static void main(String[] args) { + + Queue st = new ArrayQueue(3); + + try { + st.enqueue(new Integer(1)); + st.enqueue(new Integer(2)); + st.enqueue(new Integer(3)); + + // der wirft 'ne Exception + st.enqueue(new Integer(4)); + } + catch (Exception e) { + e.printStackTrace(); + } + + // dann nehmen wir den ersten wieder raus + System.out.println((Integer) st.dequeue()); + + try { + // jetzt passe die 4 auch noch rein + st.enqueue(new Integer(4)); + } + catch (Exception e) { + // won't happen + } + + System.out.println((Integer) st.dequeue()); + System.out.println((Integer) st.dequeue()); + System.out.println((Integer) st.dequeue()); + + // jetzt ist der Stack leer + System.out.println((Integer) st.dequeue()); + + } +} diff --git a/www/uni/ws03/alp/ArrayStack.java b/www/uni/ws03/alp/ArrayStack.java new file mode 100644 index 0000000..d9d237d --- /dev/null +++ b/www/uni/ws03/alp/ArrayStack.java @@ -0,0 +1,97 @@ + +interface Stack { + + public void push(Object o) throws Exception; + + public Object pop(); + + public Object peek(); + + public boolean isFull(); + +} + + +class ArrayStack implements Stack { + + Object[] ar; + int index = 0; + + public ArrayStack(int capacity) { + + ar = new Object[capacity]; + + } + + public void push(Object o) throws Exception { + + if (!isFull()) { + + ar[index] = o; + index++; + + } + else throw new Exception("Stack is full."); + + } + + public Object pop() { + + if (index > 0) { + + index--; + return ar[index]; + + } + + // alternativ könnte man auch eine Exception werfen + return null; + + } + + public Object peek() { + + if (index > 0) { + + return ar[index-1]; + + } + + // alternativ könnte man auch eine Exception werfen + return null; + + } + + // pre: index <= ar.length + public boolean isFull() { + return (index == ar.length); + } + + public static void main(String[] args) { + + Stack st = new ArrayStack(3); + + try { + st.push(new Integer(1)); + st.push(new Integer(2)); + st.push(new Integer(3)); + + // der wirft 'ne Exception + st.push(new Integer(4)); + } + catch (Exception e) { + e.printStackTrace(); + } + + System.out.println((Integer) st.pop()); + System.out.println((Integer) st.pop()); + + // die 1 kommt doppelt + System.out.println((Integer) st.peek()); + System.out.println((Integer) st.pop()); + + // jetzt ist der Stack leer + System.out.println((Integer) st.pop()); + + } +} diff --git a/www/uni/ws03/alp/BinTree.java b/www/uni/ws03/alp/BinTree.java new file mode 100644 index 0000000..32a4b50 --- /dev/null +++ b/www/uni/ws03/alp/BinTree.java @@ -0,0 +1,230 @@ +/* + * Eine Knoten-Klasse für die Implementierung von Bäumen. + * Hab's mal ganz edel mit Comparables statt einfach mit + * int-Werten gemacht. + */ +class Node { + + /* + * Wir definieren alle unsere Bäume in derselben Package, + * deswegen sind die Variablen durch das protected-Attribut + * vor Zugriff von außen (aus anderen Packages) geschützt. + * Man könnte auch "ordentlich" kapseln und Getter- & Setter- + * Methoden verwenden, was den Code aber extrem aufblähen + * würde. + */ + protected Comparable value; // Wert + protected Node left; // linker Kind-Knoten + protected Node right; // rechter Kind-Knoten + + + public Node(Comparable value, Node left, Node right) { + this.value = value; + this.left = left; + this.right = right; + } + +} + + +/* + * Dieses Interface dient dazu, Baumimplementierungen vor + * "unqualifizierten" Zugriffen von außen zu schützen. (Damit + * z.B. nicht irgendwelche Knoten direkt in die Datenstruktur + * eingefügt werden, ohne die Sortierung zu beachten, etc. + */ +interface BinaryTree { + + public void insert(Comparable value); + + public void remove(Comparable value); + +} + + +/* + * Eine Implementierung des BinaryTree-Interface + */ +public class BinTree implements BinaryTree { + + Node root; + + public BinTree(Node root) { + this.root = root; + } + + + /* + * Fügt ein Element in den Binärbaum ein. + * (Mehrfaches einfügen ist erlaubt.) + */ + public void insert(Comparable value) { + + Node temp = root; + Node parent = null; + + while (temp != null) { + + parent = temp; + + if (value.compareTo(temp.value) < 0) { + temp = temp.left; + } + else { + temp = temp.right; + } + } + + if (parent != null) { + if (value.compareTo(parent.value) > 0) { + parent.right = new Node(value, null, null); + } + else { + parent.left = new Node(value, null, null); + } + } + + } + + + /* + * Ersetzt das zu löschende Element mit dem + * größten Element aus dem linken Unterbaum + */ + public void remove(Comparable value) { + + Node temp = root; + Node parent = null; + + // Knoten suchen + while ((temp != null) && (temp.value.compareTo(value) != 0)) { + + parent = temp; + + if (value.compareTo(temp.value) < 0) { + temp = temp.left; + } + else { + temp = temp.right; + } + } + + // wenn gefunden, Knoten löschen + if (temp != null) { + + // wenn linker Unterbaum existiert, mit größtem Element daraus ersetzen + if (temp.left != null) { + + Node temp2 = temp.left; // der Knoten, der nach oben versetzt wird + Node parent2 = temp; // der Elternknoten von dem, der nach oben versetzt wird + + while (temp2.right != null) { + parent = temp2; + temp2 = temp2.right; + } + + if (temp2 != temp.left) temp2.left = temp.left; + temp2.right = temp.right; + parent2.right = temp2.left; + + if (parent.left == temp) { + parent.left = temp2; + } + else { + parent.right = temp2; + } + + } + else { // sonst einfach mit rechtem Unterbaum ersetzen + + if (parent.left == temp) { + parent.left = temp.right; + } + else { + parent.right = temp.right; + } + } + } + } + + + /* + * Gibt den Baum als AVL-Baum zurück + */ + public static BinTree getAvlTree(BinTree b) { + // TODO + return null; + } + + + /* + * Wir überschreiben die toString-Methode von + * Object, damit sich der Baum leicht ausgeben lässt + * (s. main-Methode). + * + * ACHTUNG: Die Methode is HÖLLE langsam, weil massen- + * haft Strings konkateniert werden. Schnell implementiert, + * aber extrem unperformant. + */ + public String toString() { + + return getTreeAsString(root); + } + + private String getTreeAsString(Node n) { + + if (n != null) { + //System.out.println(n.value); + return "(" + getTreeAsString(n.left) + ") " + n.value + " (" + getTreeAsString(n.right) + ")"; + } + + return "*"; + } + + + public static void main(String[] args) { + + /* + * Also - Bau'n wir'n Baum: + * + * 10 + * .----------'---------. + * 7 12 + * .----'----. .----'----. + * 5 9 11 15 + * .-' .-' + * 2 8 + * + * ...und dann löschen wir die 7: + * + * 10 + * .----------'---------. + * 5 12 + * .----'----. .----'----. + * 2 9 11 15 + * .--' + * 8 + * + */ + + + BinTree tree = new BinTree( new Node(new Integer(10), null, null) ); + + tree.insert(new Integer(7)); + tree.insert(new Integer(12)); + tree.insert(new Integer(5)); + tree.insert(new Integer(9)); + tree.insert(new Integer(11)); + tree.insert(new Integer(15)); + tree.insert(new Integer(2)); + tree.insert(new Integer(8)); + + System.out.println(tree); + + tree.remove(new Integer(7)); + + System.out.println(tree); + + } + +} \ No newline at end of file diff --git a/www/uni/ws03/alp/Spezifikationen.php b/www/uni/ws03/alp/Spezifikationen.php new file mode 100644 index 0000000..36c5800 --- /dev/null +++ b/www/uni/ws03/alp/Spezifikationen.php @@ -0,0 +1,48 @@ + + + + + + Spezifikation + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Spezifikation

+ +

Algebraische Spezifikation

+Abstrakte Datentypen werden festgelegt durch:

+1. Syntax: Typen (types), Signaturen der Operationen (operations)
+2. Semantik: Definierende Gleichungen (axioms), die Beziehungen zwischen den Operationen festlegen (und evtl. preconditions)

+Die praktische Relevanz der Algebraischen Spezifikation ist eher gering, da es oft schwierig ist, Axiome zu +finden bzw. die Vollständigkeit oder Redundanz der Axiome zu überprüfen.

+einige algebraische Spezifikationen: Beispiele
+und noch mehr Beispiele +

+ +

Modellierende Spezifikation

+ +Abstrakte Datentypen werden festgelegt durch:

+1. Typen: Wertemengen
+2. Methoden: Kopf oder Signaturen inkl. pre- und postconditions (ggf. return/result)
+3. Modell: mathematische Mengen, Folgen, (funktionale) Programmiersprache
+4. Invariante: Modell muss bestimmte Invariante erfüllen
+Die Spezifikation kann über Mittel der Prädikatenlogik, (Pseudo)-Code oder nat¨urliche Sprache erfolgen.

+einige modellierende Spezifikationen: Beispiele

+ +

Anmerkungen

+ +

Links

+ Merkblatt zu abstrakte Datentypen und Spezifikation von Augustin + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/abstraktdata.php b/www/uni/ws03/alp/abstraktdata.php new file mode 100644 index 0000000..18647fd --- /dev/null +++ b/www/uni/ws03/alp/abstraktdata.php @@ -0,0 +1,56 @@ + + + + + + Abstrakte Datentypen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Abstrakter Datentyp (ADT)

+ +

Anmerkungen

+Eng verknüpft mit dem Begriff der Schnittstelle ist das Konzept des abstrakten Datentyps (ADT). Ein ADT besteht aus

+ + * einer Menge von Objekten, und
+ * einem Satz von Operationen auf dieser Menge, sowie
+ * einer genauen Beschreibung der Semantik der Operationen.

+ +Das Konzept des ADT ist unabhängig von einer Programmiersprache, die Beschreibung kann in natürlicher Sprache abgefasst werden.

+ +Der ADT beschreibt was die Operationen tun, aber nicht wie sie das tun. Getreu dem Prinzip der versteckten Information ist die Realisierung nicht Teil des ADT.

+ +Vom Standpunkt des Abstraktionsgedankens aus ist der ADT ein mächtigeres Konzept als die Funktion.

+ +Man unterscheidet
+ +* konkrete Datentypen: als Datentypen, die im allgemeinen aus Basisdatentypen konstruiert werden.
+* abstrakte Datentypen: als Beschreibung von Schnittstellen zu Datenstrukturen mit ihren Operationen, die unabhängig von ihrer Implementation (in einer konkreten Programmiersprache) vorgenommen wird.

+ +Ein abstrakter Datentyp stellt in der Regel eine Zusammenfassung dar, z.B. als Programmmodul. Dabei werden folgende allgemeine Prinzipien berücksichtigt:

+* Kapselung: Die Operationen des Datentyps werden über eine wohldefinierte Schnittstelle benutzt.
+* Geheimnisprinzip (Information Hiding): Die interne Realisierung bleibt dem Anwender verborgen.

+ +Anderes ausgedrückt:
+Ein abstrakter Datentyp (ADT) ist ein Schema, zur Bildung geschützter Variablen.

+ +Ein ADT besteht aus:

+ +* dem Namen des Typs, dessen innere Struktur nicht sichtbar ist.
+* der Menge der zulässigen Operationen auf Objekten dieses Typs

+ +

Fragen

+

Links

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/abstraktionsprinzip.php b/www/uni/ws03/alp/abstraktionsprinzip.php new file mode 100644 index 0000000..e1abbaf --- /dev/null +++ b/www/uni/ws03/alp/abstraktionsprinzip.php @@ -0,0 +1,32 @@ + + + + + + Abstraktionsprinzip + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Abstraktionsprinzip

+ +

Fragen

+ +

Anmerkungen

+ Abstraktionsfunktion: legt explizit fest, welchem abstrakten Wert ein konkreter, erlaubter Wert der gewählten Repräsentation entspricht. +
+ Repräsentationsinvariante: macht alle Annahmen, die der Implementierung der Operationen des ADT zugrund liegen explizit und definiert die erlaubten Werte. + +

Links

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/adjazenz.php b/www/uni/ws03/alp/adjazenz.php new file mode 100644 index 0000000..6a8db64 --- /dev/null +++ b/www/uni/ws03/alp/adjazenz.php @@ -0,0 +1,62 @@ + + + + + + Adjazenzmatrix und Adjazenzliste + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Darstellungen von Graphen

+ +
Grafiken entnommen aus Saake, Sattler: "Algorithmen & Datenstrukturen"
+ +

Adjazenzmatrix

+Insbesondere bei sehr vielen Kanten ist eine Speicherung der Verbindung als nxn-Matrix sinnvoll, wobei n = Knotenanzahl |V|. Eine derartige Matrix wird als Adjazenzmatrix bezeichnet.
+Gibt es eine Kante von Knoten a zu Knoten b, wird in der Matrix in der a-ten Zeile an der b-ten Stelle ein True bzw. eine 1 eingetragen.

+ +Beispiel eines gerichteten Graphen
+ + + + + +
+ +

+Beispiel eines ungerichteten Graphen
+ + + + + +
+ +
+Bei ungerichteten Graphen muss eigentlich nur die Hälfte gespeichert werden, da sich die andere Hälfte durch Spiegelung ergibt. +

+ +

Adjazenzliste

+Die Möglichkeit einen Graphen in einer dynamischen Datenstrucktur zu realisieren ist zum Beispiel die Adjazenzliste.
+Ein Graph wird dabei durch |V| + 1 verkette Listen dargestellt. Die Basisstruktur bildet die Liste aller Knoten. Für jeden Knoten wird eine Liste der Nachfolger entlnag gerichteter Kanten abgespeichert.

+ +Beispiel eines gerichteten Graphen
+ + + + + +
+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/adjazenzaufgabe.gif b/www/uni/ws03/alp/adjazenzaufgabe.gif new file mode 100644 index 0000000..c8ce47c Binary files /dev/null and b/www/uni/ws03/alp/adjazenzaufgabe.gif differ diff --git a/www/uni/ws03/alp/adjazenzliste.gif b/www/uni/ws03/alp/adjazenzliste.gif new file mode 100644 index 0000000..8b81f29 Binary files /dev/null and b/www/uni/ws03/alp/adjazenzliste.gif differ diff --git a/www/uni/ws03/alp/algebraischeSpez.txt b/www/uni/ws03/alp/algebraischeSpez.txt new file mode 100644 index 0000000..2ebbe0f --- /dev/null +++ b/www/uni/ws03/alp/algebraischeSpez.txt @@ -0,0 +1,121 @@ +Algebraische Spezifikation + +Stack + +- types +Stack, t, Bool + +- operators +createStack :: Stack +push :: t -> Stack -> Stack +pop :: Stack -> Stack +top :: Stack -> t +isEmpty :: Stack -> Bool + +- axioms +s of type Stack, x of type t + +isEmpty(createStack) = True +isEmpty(push x s) = False + +top(push x s) = x +pop(push x s) = s + +- preconditions +top: isEmpty s == False +pop: isEmpty s == False + +Queue + +- types +Queue, t, Bool + +- operators +createQueue :: Queue +enqueue :: t -> Queue -> Queue +dequeue :: Queue -> Queue +first :: Queue -> t +isEmpty :: Queue -> Bool + +- axioms +q of type Queue, x of type t + +isEmpty(createQueue) = True +isEmpty(enqueue x q) = False + +first(enqueue x createQueue) = x +first(enqueue x q) = first q + +dequeue (enqueue x q) = enqueue x (dequeue q) + +- preconditions +first : isEmpty q == False +dequeue: isEmpty q == False + + +Menge + +- types +Set, t, Bool + +- operators +createSet :: Set +insert :: t -> Set -> Set +delete :: t -> Set -> Set +isElement :: t -> Set -> Bool +isEmpty :: Set -> Bool + +- axioms +s of type Set, x,y of type t + +isEmpty(createSet) = True +isEmpty(insert x s) = False + +delete(createSet) = createSet +delete x (insert y s) + | (x == y) = s + | otherwise = insert y (delete x s) + +isElement x (createSet) = False +isElement x (insert y s) + | (x == y) = True + | otherwise = isElement x s + +- preconditions + +Priority Queue + +- types +PQueue, t, Bool + +- operators +createPQueue :: PQueue +enqueue :: t -> PQueue -> PQueue +dequeue :: PQueue -> PQueue +min :: PQueue -> t +isEmpty :: PQueue -> Bool + +- axioms +q of type PQueue, x of type t + +isEmpty(createQueue) = True +isEmpty(enqueue x q) = False + +min(enqueue x createPQueue) = x + +dequeue(enqueue x createPQueue) = createPQueue + +if (x < min q) then min(enqueue x q) = x +else min(enqueue x q) = min q + +min(enqueue x q) + | (x < min q) = x + | otherwise = min q + +dequeue(enqueue x q) + | (x < min q) = q + | otherwise = enqueue(x (dequeue q)) + +- preconditions +min : isEmpty q == False +dequeue: isEmpty q == False \ No newline at end of file diff --git a/www/uni/ws03/alp/algebraischeSpez2.txt b/www/uni/ws03/alp/algebraischeSpez2.txt new file mode 100644 index 0000000..eaf72a3 --- /dev/null +++ b/www/uni/ws03/alp/algebraischeSpez2.txt @@ -0,0 +1,162 @@ +1a. alg. Menge (Haskell data) +2a. alg. Queue (Haskell data) +3a. alg. Stack (Haskell data) +4a. alg. Baum (Haskell data) + + + +1a. Algebraische Spezifikation einer Menge (types,operators,axioms) +--------------------------------------------------------------------------------------------------- + +types : Menge m,m,Bool //Menge,element,Bool + +data Menge m = E | (In m (Menge m)) //Empty | Menge mit e + +operators : createM :: Menge m + isEmpty :: Menge m -> Bool + insert :: m -> Menge m -> Menge m + delete :: m -> Menge m -> Menge m + isIn :: m -> Menge m -> Bool + +Alle x <- m , s <- Menge m + +axioms : createM () = E + + isEmpty (E) = True + isEmpty (insert x s) = False + + insert (x,E) = (In x E) //x:E + insert (x,s) + | isIn (x,s) = s + | otherwise = (In x s) //x:M + + delete (x,E) = E + delete (y,(In x m)) + |y == x = m + |otherwise = Insert x (delete (y,m)) + + isIn (x,E) = False + isIn (y,(In x m)) + |y == x = True + |otherwise = isIn (y,m) + + +2a. Algebraische Spezifikation einer Schlange (types,operators,axioms) +--------------------------------------------------------------------------------------------------- + +types : Queue q,q,Bool //Schlange,element,Bool + +data Queue q = E | NeQ q (Queue q) //Empty | Queue mit elem + +operators : createQ :: Queue q + isEmpty :: Queue q -> Bool + enqueue :: q -> Queue q -> Queue q + dequeue :: Queue q -> Queue q + first :: Queue q -> q + +Alle x <- q, s <- Queue q + +axioms : createQ () = E + + isEmpty (E) = True + isEmpty (s) = False + + enqueue (x,s) = (NeQ x s) + + dequeue (NeQ x s) = s + + first (NeQ x s) = x + + + +3a. Algebraische Spezifikation eines Stacks (types,operators,axioms) +--------------------------------------------------------------------------------------------------- + +types Stack,e,Bool,int + +data Stack s = E | NeS e (Stack s) + +operators : createS :: Stack s + isEmpty :: Stack s -> Bool + push :: e -> Stack s -> Stack s + pop :: Stack s -> Stack s + top :: Stack s -> e + size :: Stack s -> int + +axioms : create () = E + + isEmpty (E) = True + isEmpty (NeS x s) = False + + push (x,s) = (NeS x s) + + pop (E) = error "Stack ist leer!" + pop (NeS x s) = s + + top (E) = error "Stack ist leer!" + top (NeS x s) = x + + size (E) = 0 + size (NeS x s) = 1 + size(s) + + + +4a. Algebraische Spezifikation eines Baumes (types,operators,axioms) +--------------------------------------------------------------------------------------------------- + +types BTree,n,Bool,int + +data BTree t = E | N (BTree t) t (BTree t) + +operators : insert :: n -> BTree t -> BTree t + delete :: n -> BTree t -> BTree t + hoehe :: BTree t -> int + isIn :: t -> BTree t -> Bool + isEmpty :: BTree t -> Bool + leftTree :: BTree t -> BTree t + rightTree :: BTree t -> BTree t + +axioms : insert x E = (N E x E) + insert x (N l v r) + | x == v = (N l x r) + | x < v = (N (insert x l) v r) + | x > v = (N l v (insert x r)) + + delete :: (Ord t) => t -> BTree t -> BTree t + delete x E = error "ist bereits leer" + delete y (N E x E) + | y == x = E + | otherwise = (N E x E) + delete y (N l x r) + | y < x = (N (delete y l) x r) + | y > x = (N l x (delete y r)) + | (l==E)&&(x==y)= r + | (r==E)&&(x==y)= l + | y == x = (N (delete (maxi l) l)(maxi l) r) + + where max :: BTree t -> t + max (N E x E) = x + max (N l v r) = max l + + hoehe E = 0 + hoehe (N E x E) = 1 + hoehe (N l v r) = 1 + max (hoehe l)(hoehe r) + + where max :: int -> int + max x y + | x <= y = y + |otherwise = x + + isIn x E = False + isIn x (N l v r) + | x == v = True + | otherwise = (isIn x l) || (isIn x r) + + isEmpty E = True + isEmpty t = False + + leftTree E = error "alles Leer -> links auch" + leftTree (N l v r) = l + + rightTree E = error "alles Leer -> rechts auch" + rightTree (N l v r) = r \ No newline at end of file diff --git a/www/uni/ws03/alp/allg.php b/www/uni/ws03/alp/allg.php new file mode 100644 index 0000000..aeb3e32 --- /dev/null +++ b/www/uni/ws03/alp/allg.php @@ -0,0 +1,33 @@ + + + + + + Allgemeines + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Allgemeines

+ +

Fragen

+ +

Anmerkungen

+ +

Links

+ ALP I
+ ALP II
+ ALP III
+ study auf zwergmaster.de
+ Algorithmen ohne Ende
+ + \ No newline at end of file diff --git a/www/uni/ws03/alp/ananas.gif b/www/uni/ws03/alp/ananas.gif new file mode 100644 index 0000000..5220413 Binary files /dev/null and b/www/uni/ws03/alp/ananas.gif differ diff --git a/www/uni/ws03/alp/aufgaben.php b/www/uni/ws03/alp/aufgaben.php new file mode 100644 index 0000000..b467b64 --- /dev/null +++ b/www/uni/ws03/alp/aufgaben.php @@ -0,0 +1,151 @@ + + + + + + Aufgaben + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Allgemeine Aufgaben in Haskell

+ +

Sortieren

+
    +
  1. Quicksort
  2. +
  3. Mergesort
  4. +
  5. Insertionsort
  6. +
  7. Selectionsort
  8. +
+ +

Suchen

+
    +
  1. lineares Suchen
  2. +
  3. binäre Suche
  4. +
+ +

diverses in Haskell

+
    +
  1. reverse
  2. +
  3. Fibonacci
  4. +
  5. Fakultät
  6. +
  7. Summe einer Liste
  8. +
  9. map Funktion selbst schreiben
  10. +
  11. Binärer Suchbaum mit insert, delete, contains, sum, gib Baum als sortierte List aus...
  12. +
  13. Ein Stack in Haskell
  14. +
  15. Eine Queue in Haskell
  16. +
  17. Eine Menge in Haskell
  18. +
+ +Lösungen + +

Allgemeine Aufgaben in Java

+
    +
  1. + Binärbaum - ein ziemlicher Klopper, aber man sollte das mal gemacht haben. +
  2. +
  3. + "1. Spezifizieren Sie ein Interface für einen Stack und implementieren Sie den Stack in Java mit einem Array" - Lösung +
  4. +
  5. + "1. Spezifizieren Sie ein Interface für eine Schlange und implementieren Sie die Schlange in Java mit einem Array" - Lösung +
  6. +
+ +

Allgemeine Aufgaben

+ +Lösungen der folgenden Aufgaben +

Vollständige Induktion

+ Um die Behauptungen zu beweisen, kann man die vorherigen Aussagen und die bewiesenen Behauptungen mitbenutzen. +
    +
  1. Um das Prinzip zu verstehen: 1 + 3 + 5 + ... + (2n-1) = n², wobei n > 0.
  2. +
  3. x ++ [] = x, wobei (a) [] ++ v = v und (b) (a:v) ++ w = a:(v ++ w)
  4. +
  5. rev (a ++ b)= (rev b) ++ (rev a), wobei (a) rev [] = [] und (b) rev (a:v) = (rev v) ++ [a]
  6. +
  7. rev (rev xs) = xs, wobei (a) rev [] = [] und (b) rev (a:v) = (rev v) ++ [a] und (c) rev [x] = [x] und (d) [x] = x:[]
  8. +
+ +

Primitiv rekursive Funktion

+
    +
  1. Vorgängerfunktion pred
  2. +
  3. Gleichheit mit Null eq0, wobei True 1 und False 0 entspricht
  4. +
  5. Subtraktion sub von zwei Zahlen, wobei bei Rojas x-y = sub(y, x)
  6. +
  7. and, not, größer-gleich
  8. +
  9. if (x, y, z), wobei if x then y else z
  10. +
+ +

O-Notation

+
    +
  1. Sortieren Sie die folgenden Laufzeiten aufsteigend.
    +(a) n3 (b) log2 n (c) 1,8n (d) n (e) 3n (f) √n (g) n(log2 n)2 (h) n2
  2. +
  3. Finden Sie möglichst einfache Ausdrücke der Form Θ(·) für folgende Funktionen:
    +(a) 3n2 − 4n + 32 + 27 n · ⌈log2 n⌉ / 2
    +(b) max{n⌈log2 n⌉, (⌈log2 n⌉)4}
    +(c) 22n + ⌈log2 n⌉
  4. +
+ +

Algorithmen

+
    +
  1. Dijkstra
    + a ist der Startknoten.
    + +
  2. +
  3. Kleinster aufspannender Baum
    + Prim und Kruskal am obigen Graphen. +
  4. +
  5. Huffman
    + Für das Wort ABRACADABRASIMSALABIM die Wahrscheinlichkeiten der einzelnen Buchstaben bestimmen und dann einen Binärcode nach dem Huffman-Algorithmus erstellen. +
  6. +
  7. Verschiebefunktion
    + Aufstellen der Verschiebefunktion des Musters babcabb und überprüfen ob es im Text abbababcababcabbbca entghalten ist. +
  8. +
+ +

Graphen und Bäume

+
    +
  1. AVL-Baum
    + Erstelle einen neuen AVL-Baum und füge folgende Werte nacheinander ein: 3, 2, 1, 4, 5, 6, 7, 16, 15
    + Nun lösche die Werte 4 und 2. +
  2. +
  3. B-Baum
    + Erstelle einen neuen (2,3)-Baum und füge folgende Werte nacheinander ein: 1, 5, 2, 6, 7, 4, 8, 3
    + Ich denke, dass man Löschen nicht können muss. Das ist ziemlich kompliziert! +
  4. +
  5. Rot-Schwarz-Baum
    + Wandle den folgenden Rot-Schwarz-Baum in einen einen (2,4)-Baum um.
    + +
    Die Grafik ist ein Screenshot von Arsen Gogeshvilis Binärbaum-Applet
    +
  6. +
  7. Suffixbaum
    + Erstelle einen Suffixbaum des Wortes ananas$. +
  8. +
  9. Adjazenzliste und -matrix
    + Gebe für folgenden Graphen eine Adjazenzliste und eine Adjazenzmatrix an und überlege welche Darstellung hier sinnvoller ist.
    + +
    Grafik entnommen aus Saake, Sattler: "Algorithmen & Datenstrukturen"
    +
  10. +
  11. Konvexe Hülle
    + Folgende Punkte im Koordinatenkreuz bilden einen Graphen: A(1/9), B(3/7), C(4/8), D(5/1), E(7/5), F(7/7), G(9/3), H(10/8)
    + Nenne die Punkte, die in der komplexen Hülle enthalten sind. +
  12. +
  13. Infix, Prefix und Postfix
    + Folgende Terme in Pre- und Postoder darstellen.
    + (a) 2 + 3 * 6 - 4 / 1
    + (b) 5 * (6 + 2) - 7 / 4 + 2 * 5
    + Am Einfachsten geht das mit Hilfe eines Termbaums.
    + (c) Pre-, In- und Postorder von folgendem Termbaum
    + +
  14. +
+ + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/avlbaumloesung.gif b/www/uni/ws03/alp/avlbaumloesung.gif new file mode 100644 index 0000000..394315a Binary files /dev/null and b/www/uni/ws03/alp/avlbaumloesung.gif differ diff --git a/www/uni/ws03/alp/avlbaumloesung1.gif b/www/uni/ws03/alp/avlbaumloesung1.gif new file mode 100644 index 0000000..fc213fb Binary files /dev/null and b/www/uni/ws03/alp/avlbaumloesung1.gif differ diff --git a/www/uni/ws03/alp/avlbaumloesung2.gif b/www/uni/ws03/alp/avlbaumloesung2.gif new file mode 100644 index 0000000..10800e9 Binary files /dev/null and b/www/uni/ws03/alp/avlbaumloesung2.gif differ diff --git a/www/uni/ws03/alp/avlbaumloesung3.gif b/www/uni/ws03/alp/avlbaumloesung3.gif new file mode 100644 index 0000000..16a0917 Binary files /dev/null and b/www/uni/ws03/alp/avlbaumloesung3.gif differ diff --git a/www/uni/ws03/alp/baeume.php b/www/uni/ws03/alp/baeume.php new file mode 100644 index 0000000..aea4479 --- /dev/null +++ b/www/uni/ws03/alp/baeume.php @@ -0,0 +1,272 @@ + + + + + + Bäume + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Bäume

+ +

AVL-Bäume

+AVL-Bäume (Adelson-Velskii und Landis) sind eine Form von binären Suchbäumen, die das Entarten vermeiden und dabei den Aufwand beim Ausgleichen begrenzt halten.

+ + + + + +
AVL-Kriterium:Ein AVL-Baum ist ein ausgeglichener/balancierter Binärbaum, d.h. für jeden Knoten unterscheidet sich die Höhe (= Weg von der Wurzel bis zum Knoten) seiner beiden Nachfolger um höchstens 1.
+
+Durch diese Bedingung eignen sich AVL-Bäume besonders zur Suche, da im worst case eine Laufzeit von O(log n) entsteht.
+Bei jeder Einfüge- oder Löschoperation muss die AVL-Bedingung über eine oder zwei Rotationen wieder hergestellt werden.

+ +

Einfügen in einen AVL-Baum

+Das grundsätzliche Vorgehen beim Einfügen eines Elements entspricht dem Algorithmus vom binären Suchbaum. Als Folge dieser Operation kann jedoch die AVL-Eigenschaft verletzt sein, was man durch Vertauschen von Knoten (Rotation bzw. Doppelrotation) wieder behebt.

+ +Rotation
+ + + + + +
+Wenn es nach dem Einfügen eines neuen Wertes einen Knoten k0 gibt, dessen linker Teilbaum a des linken Kindes k1 und k1 (bzw. dessen rechter Teilbaum des rechten Kindes und das rechte Kind) eine um zwei größere Höhe hat als der rechte Teilbaum c (bzw. der linke Teilbaum), dann wird k0 mit k1 vertauscht.

+ +Doppelrotation
+ + + + + + +
+Wenn es nach dem Einfügen eines neuen Wertes einen Knoten k0 gibt, dessen rechter Teilbaum b des linken Kindes k1 und k1 (bzw. dessen linker Teilbaum des rechten Kindes und das rechte Kind) eine um zwei größere Höhe hat als der rechte Teilbaum d (bzw. der linke Teilbaum), dann wird zunächst k1 mit seinem rechten Kind k2 (bzw. linken Kind) vertauscht und dann k2 nach oben rotiert, so dass dieser Knoten nun die neue Wurzel dieses Teilbaums ist.

+ +

Löschen in einen AVL-Baum

+Ein gelöschter Knoten wird durch den linkesten Knoten seines rechten Teilbaums ersetzt. Hat der Knoten keinen rechten Teilbaum, wird er durch sein linkes Kind ersetzt. Der Baum wird danach durch Rotation und Doppelrotation wieder ausgeglichen falls nötig. + +

+

B-Bäume

+B-Bäume sind keine Binärbaume, sondern ausgeglichene Mehrwegbäume. D.h. sie sind Bäume, die in einem Knoten mehrere Elemente speichern können.
+Ein B-Baum der Ordnung m kann m-1 Elemente in einem Knoten speichern und hat folgende Eigenschaften: +
    +
  1. Jeder Knoten hat höchstens m Kinder.
  2. +
  3. Jeder Knoten mit Ausnahme der Wurzel und der Blattknoten hat mindestens m/2 Kinder.
  4. +
  5. Die Wurzel hat mindestens 2 Kinder (oder ist ein Blattknoten).
  6. +
  7. Alle Blattknoten sind auf der gleichen Ebene, und tragen keine weiteren Informationen
  8. +
  9. Ein innerer Knoten mit k Kindern besitzt k-1 Schlüssel.
  10. +
+ + + + + + + +
Beispiel:
Grafik entnommen aus Saake, Sattler: "Algorithmen & Datenstrukturen"
+ +2-3-Bäume bzw. 2-4-Bäume sind B-Bäume der Ordnung 3 bzw. 4. Die 2 gibt die minimale Anzahl der Kinder pro Knoten an. +

+ +

Suchen in einen B-Baum

+Nehmen wir an, dass wir einen (2,3)-Baum haben und einen Eintrag mit dem Wert w suchen.
+Ein Knoten mit drei Elementen enthält die Werte a, b und c, wobei a ≤ b ≤ c, und vier Verweise, wobei v1 auf alle Elemente e verweist, die kleiner a sind, v2 auf alle a ≤ e < b, v3 auf alle b ≤ e < c und v4 auf alle c ≤ e.
+Man fängt also wie gewohnt in der Wurzel an, überprüft, ob es dort einen Wert gibt, der gleich w ist. Wenn nicht nimmt man den jeweiligen Veweis zum nächsten Knoten und fährt rekursiv fort. Wenn man in einem Blatt angekommen ist und der Wert bis jetzt nicht gefunden wurde, ist er nicht im Baum gespeichert. +

+ +

Einfügen in einen B-Baum

+Zunächst wird das Blatt gesucht, in das das Element eingetragen werden soll und wird (der Sortierung entsprechend) eingefügt. + + + + + +
Dann gibt es zwei Fälle: +
    +
  1. Die Anzahl der Einträge des Knotens ist immernoch < m
  2. +
  3. Die Anzahl der Einträge ist ≥ m
  4. +
+
+Im ersten Fall freut man sich, dann ist man nämlich mit dem Einfügen fertig.
+Im zweiten Fall nimmt man das mittlere Element ei in den Elternknoten, teilt den Knoten in zwei und verweist jeweils recht und links von ei auf die neuen Knoten. Wenn nun der Elternknoten mehr als m-1 Elemente speichert, fährt man rekursiv fort. Dies kann sich bis zur Wurzel hochziehen. Hat die Wurzel nun mehr als m-1 Elemente wird ei nicht in den Elternknoten (gibt ja keinen), sondern wird in einen neuen Knoten geschrieben, der jetzt die Wurzel ist. Der B-Baum wächst also nach oben.

+ +

Löschen in einen B-Baum

+Zunächst wird der Knoten gesucht, in das das Element gespeichert ist und der Eintrag gelöscht. + + + + + +
Dann gibt es drei Fälle: +
    +
  1. Die Anzahl der Einträge des Knotens aus dem gelöscht wurde ist immernoch ≥ m/2
  2. +
  3. Die Anzahl der Einträge des Knotens ist < m/2
  4. +
  5. Die Anzahl der Einträge des Blattes ist < m/2
  6. +
+
+Im ersten Fall freut man sich, dann ist man nämlich mit dem Löschen fertig.
+Im zweiten Fall wird das Element durch den nächstkleineren aus einem Blatt ersetzt. Wenn sich für das Blatt nun ein Unterlauf ergibt, wird wie im dritten Fall fortgefahren.
+ + + + + +
Im dritten Fall gibt es wiederum zwei Möglichkeiten: +
    +
  1. Ein Nachbarknoten hat mehr als m/2 Elemente
  2. +
  3. Die Nachbarknoten haben nur m/2 Einträge
  4. +
+
+Im ersten Fall werden der Knoten, der Nachbarknoten und ei aus dem Elternknoten, von dem aus rechts und links die beiden Verweise zu den Knoten ausgehen, kurzzeitig zu einem Knoten zusammengefasst, wieder halbiert und ein neues ei, was in den Elternknoten geschrieben wird, festgelegt.
+Im zweiten Fall wird der Knoten, der Nachbarknoten und ei aus dem Elternknoten zusammengelegt. Einer der Verweise vom Elternknoten fällt weg (ist ja nur noch ein Knoten). Der neue Knoten hat m Einträge: (m/2)-1 vom ursprünglichen Knoten + m/2 vom Nachbarknoten + 1 der Knoten aus dem Elternknoten ei.
+Möglicherweise gibt es nun im Elternknoten einen Unterlauf. Dieser wird rekursiv behandelt.
+Darf ein Knoten nicht nur m-1 Einträge speichern? +

+ +

Rot-Schwarz-Bäume

+ + + + + +
Eigenschaften: +
    +
  1. Knoten sind rot oder schwarz.
  2. +
  3. Die Wurzel ist schwarz.
  4. +
  5. Externe Knoten sind schwarz.
  6. +
  7. Die Kinder von roten Knoten sind schwarz. (Rotbedingung)
  8. +
  9. + Jeder Pfad von einem Knoten x zu einem externen Knoten besitzt die gleiche Anzahl schwarzer Knoten.
    + Diese Anzahl (x nicht mitgezählt gezählt) heißt schwarze Höhe bh(x) eines Knotens. +
  10. +
+
+
+ + + + + + + + + + + + + + + + + + + +
Rot-Schwarz-Baum
Die Grafik ist ein Screenshot von Arsen Gogeshvilis Binärbaum-Applet

(2,3)-Baum
Grafik entnommen aus Saake, Sattler: "Algorithmen & Datenstrukturen"

+
+Jeder Rot-Schwarz-Baum lässt sich durch einen (2,3)-Baum darstellen und umgekehrt.
+Ein 1-Knoten lässt sich durch einen schwarzen Knoten ersetzen, ein 2-Knoten durch einen schwarzen Knoten mit einem roten Kind und ein 3-Knoten durch einen schwarzen Knoten mit zwei roten Kindern.
+Suchen, einfügen und löschen funktionieren also nach dem gleichen Prinzip wie im (2,3)-Baum. +

+ +

Digitalbäume

+
Die Grafiken zu Digitalbäumen wurden den Folien zur Vorlesung entnommen.
+Es gibt verschiedene Möglichkeiten einen Digitalbaum darzustellen.

+ + + + + + + + + + +
+ Digitalbaum
+
+ Binärer Digitalbaum
+
+
+ +

Patricia-Bäume

+Patricia-Bäume (Practical Algorithm To Retrieve Information Coded In Alphanumeric) sind binäre Digitalbäume.
+Das Prinzip ist sehr einfach:
+
+Alle Schlüssel werden in den Blättern gespeichert. In den Knoten steht die Anzahl der Zeichen (Bits), die auf den Wegen zu den Blättern überspringen werden können.

+ +Ein richtiger Patricia-Baum sieht so aus:
+
+Der Schlüssel HEINZ ist z.B. folgendemaßen abgespeichert: 10010001000101100100110011101011010
+ + + + + + +
Wegfindung: +100100010
+0
+0
+1
+011001
+0
+011001110
+1
+01
+1
+010 +
+9 Bits überspringen
+links
+links
+rechts
+6 Bits überspringen
+links
+9 Bits überspringen
+rechts
+2 Bits überspringen
+rechts ⇒ bei HEINZ angekommen +
+ +

Suffix-Bäume

+In einem Suffuixbaum sind alle Suffixe eines Wortes gespeichert.

+Beispiel: Mississippi
+
+ +

Anmerkungen

+ +Digitalbaum allgemein: zeichenweiser Schlüsselvergleich entscheidet über Pfad im Baum.
+Digitalbaum speziell (Radix tree): Schlüssel in inneren Knoten und Blättern, zeichenweiser Schlüsselvergleich, keine Schlüsselordnung.
+Trie: Schlüssel nur in Blättern, geordnet nach Schlüsseln.
+Patricia Trie (Compressed Trie), (manchmal Patricia Tree): Redundanz eliminiert: jeder innere Knoten hat mindestens zwei Nachfolger.
+Suffix Trie: Trie, der alle Suffixe einer Zeichenkette enthält (eher unwichtig, kommt selten vor).
+Suffixbaum (Suffix Tree): Patricia Trie, der alle Suffixe einer Zeichenkette enthält, also: jeder innere Knoten mit zwei Nachfolgern. (wichtig)
+Suffix-Feld (Suffix Array): Felddarstellung eines Suffixbaums (nicht behandelt).
+ + +

Links

+ Das Applet zu AVL- und Rot-Schwarz-Bäumen +
+ AVL-Applet mit einzelnen Umsortierungsschritten (zum Mitverfolgen) +
+ Merkblatt zu Binäre Suchbäume & AVL-Bäume von Augustin +
+ Merkblatt zu Rot-Schwarz-Bäume von Augustin +
+ Merkblatt zu 2-3-Bäume von Augustin +
+ Merkblatt zu Digitalbäume von Augustin + Patricia-Bäume + + \ No newline at end of file diff --git a/www/uni/ws03/alp/bbaum.gif b/www/uni/ws03/alp/bbaum.gif new file mode 100644 index 0000000..1b20a5d Binary files /dev/null and b/www/uni/ws03/alp/bbaum.gif differ diff --git a/www/uni/ws03/alp/bbaum1.gif b/www/uni/ws03/alp/bbaum1.gif new file mode 100644 index 0000000..764b3f8 Binary files /dev/null and b/www/uni/ws03/alp/bbaum1.gif differ diff --git a/www/uni/ws03/alp/bbaum2.gif b/www/uni/ws03/alp/bbaum2.gif new file mode 100644 index 0000000..19c0356 Binary files /dev/null and b/www/uni/ws03/alp/bbaum2.gif differ diff --git a/www/uni/ws03/alp/bbaum3.gif b/www/uni/ws03/alp/bbaum3.gif new file mode 100644 index 0000000..0717c51 Binary files /dev/null and b/www/uni/ws03/alp/bbaum3.gif differ diff --git a/www/uni/ws03/alp/bbaumloesung.gif b/www/uni/ws03/alp/bbaumloesung.gif new file mode 100644 index 0000000..6a8e4ba Binary files /dev/null and b/www/uni/ws03/alp/bbaumloesung.gif differ diff --git a/www/uni/ws03/alp/bedingung.gif b/www/uni/ws03/alp/bedingung.gif new file mode 100644 index 0000000..17cd7d9 Binary files /dev/null and b/www/uni/ws03/alp/bedingung.gif differ diff --git a/www/uni/ws03/alp/begriffeInHaskell.php b/www/uni/ws03/alp/begriffeInHaskell.php new file mode 100644 index 0000000..c2b8281 --- /dev/null +++ b/www/uni/ws03/alp/begriffeInHaskell.php @@ -0,0 +1,102 @@ + + + + + + Prozedurale Programmierung: Begriffe + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Begriffe in Haskell

+ +

Erklärungen

+Lazy Evaluation: In "Haskell" werden Ausdrücke grundsätzlich nicht strikt ausgewertet. Ein (Teil-)Ausdruck wird erst durch seinen Wert ersetzt, wenn dieser zum Beispiel für einen arithmetischen Vergleich benötigt wird. Demzufolge wird auch ein als aktueller Parameter einer Funktion übergebener Ausdruck erst ausgewertet, wenn sein Wert innerhalb des Funktionsrumpfes verwendet wird. Wurde der Wert einmal berechnet, werden alle namentlichen Vorkommen des Ausdrucks durch seinen Wert ersetzt. Ein einfaches Beispiel verdeutlicht diese Strategie.

+const1 a = 1 +

+Definiert ist eine konstante Funktion "const1" mit einem beliebigen Parameter "a" und dem Rückgabewert 1. Der Rückgabewert folgender beispielhafter Funktionsaufrufe ist also immer 1.

+ +(Pseudocode)
+const1 10 => 1
+const1 (1+4) => 1
+const1 'A' => 1
+const1 (1/0) => 1
+


+Für das Ergebnis der Funktion ist der Wert des aktuellen Parameters irrelevant. Er wird von einem Interpreter deshalb nie ausgewertet. Aus diesem Grund führt der letzte Aufruf mit der Division durch Null als Parameter nicht zu einem Fehler. +
+Solange also der Wert eines Ausdrucks (einer Funktion) nicht benötigt wird, behandelt "Haskell" diesen als eine Definition. Als solche werden auch entsprechende Teilausdrücke behandelt.

+ +Pattern Matching: Ein Funktion kann mehrere Definitionen haben. Es wird per Pattern Matching anhand der aufrufenden Parameter entschieden, welche Definition angewendet wird.
+ +Beispiel: Rekursive Funktion zum Berechnen von x Exponent y

+ +xHochY :: Int -> Int -> Int
+xHochY x 0 = 1
+xHochY x _ = x * xHochY x (y-1)
+

+Wenn y = 0 ist, wird die erste Definition verwendet. In allen anderen Fällen (_ ist Wildcard) wird die untere Definition verwendet. Die Funktion ist rekursiv und bricht nach y = 0 ab. Es wird jedoch nicht geprüft, ob kein y < 0 Parameter ist.

+ +Currying: eine Funktion in gecurrieter Form erhält alle ihre Argumente auf einmal, also z. B. wenn wir x und y multiplizieren wollen, übergeben wir gleichzeitig x und y.

+ +mult :: Int -> Int -> Int
+mult x y = x * y +
+

+Die ungecurrierte Form sähe so aus:

+ +mult :: (Int, Int) -> Int
+mult (x, y) = x * y +
+

+ +Formale Parameter (FP): Namen für Parameter in der Funktionsdefinition, also die abstrakten.

+ +Aktuelle Parameter (AP): Ausdrücke im Aufruf, deren Werte oder Stellen übergeben werden, also die konkreten, die beim Funktionsaufruf übergeben werden.

+ +Call-by-Name: Bei der Parameterübergabe nach dem Mechanismus des call-by-name wird der Parameter als Referenz übergeben. In der aufgerufenen Methode kann man sich an jeder Stelle, wo der Parameter als lokale Variable verwendet wird, den Namen der beim Aufruf übergebenen Variable ersetzt denken. Kommt in der aufgerufenen Methode ein lokaler Name mit demselben Namen vor, so kann dies leicht zu ungewollten Effekten führen.
+Beispiel:

+ +int x = 3;
+Function abc (int a)
+{
+ int x = 5;
+ a = a + 5;
+}
+abc(x);
+print(x);

+
+Bei diesem Beispiel wird am Schluss nicht, wie man vielleicht vermutet, 8 ausgegeben, sondern 10, da in der Methode abc jedes Vorkommen von a durch x ersetzt werden kann und somit x = x + 5 = 5 + 5 berechnet wird.

+ + +Call-by-Value: Bei der Parameterübergabe nach dem Mechanismus des call-by-value wird eine Kopie der Variable übergeben. Wenn in der Methode der übergebene Parameter geändert wird, hat dies keine Auswirkung auf den Originalparameter.

+ +Call-by-result: Bei der Parameterübergabe nach dem Mechanismus des call-by-value/result (auch call-by-copy/restore genannt) wird zunächst wie beim call-by-value verfahren, d.h. es wird nur eine Kopie der Variable übergeben. Wenn in der Methode der übergebene Parameter geändert wird, hat dies zunächst keine Auswirkung auf den Originalparameter. Am Ende der Methode wird allerdings der Wert der übergebenen Variable aus der aufrufenden Methode mit dem aktuellen Wert des Parameters überschrieben

+ +Call-by-reference: Bei der Parameterübergabe nach dem Mechanismus des call-by-reference wird der Parameter als Referenz übergeben. Wird in der Methode der Wert des Parameters geändert, so wirkt sich dies auch auf den Wert der übergebenen Variable in der aufrufenden Methode aus. Die beiden Objekte zeigen auf dieselbe Speicheradresse, statt einer Kopie des Wertes wird die Speicheradresse übergeben.Dieser Übergabemechanismus wird beispielsweise in der Programmiersprache Java verwendet.

+ +Higher-Order-Function: Eine Funktion, die als Parameter eine Funktion verarbeiten kann und auch eine Funktion zurück geben kann.
+Beispiel:

+squareList list = map (^2) list

+Die Funktion squareList bekommt ^2 als Parameter übergeben.

+ + +

Links

+lazy evaluation bei Wikipedia (engl.)
+weiterführendes zum Thema "lazy evaluation"
+Folie zu Currying
+higer order function bei Wikipedia (engl.)

+ +

Dokumente

+als doc zum Drucken + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/binaererdigitalbaum.gif b/www/uni/ws03/alp/binaererdigitalbaum.gif new file mode 100644 index 0000000..8c54e3a Binary files /dev/null and b/www/uni/ws03/alp/binaererdigitalbaum.gif differ diff --git a/www/uni/ws03/alp/binaererdigitalbaum2.gif b/www/uni/ws03/alp/binaererdigitalbaum2.gif new file mode 100644 index 0000000..0496529 Binary files /dev/null and b/www/uni/ws03/alp/binaererdigitalbaum2.gif differ diff --git a/www/uni/ws03/alp/bipartitergraph.gif b/www/uni/ws03/alp/bipartitergraph.gif new file mode 100644 index 0000000..620bb1b Binary files /dev/null and b/www/uni/ws03/alp/bipartitergraph.gif differ diff --git a/www/uni/ws03/alp/breitensuche.gif b/www/uni/ws03/alp/breitensuche.gif new file mode 100644 index 0000000..08fd951 Binary files /dev/null and b/www/uni/ws03/alp/breitensuche.gif differ diff --git a/www/uni/ws03/alp/cons.gif b/www/uni/ws03/alp/cons.gif new file mode 100644 index 0000000..11bfee3 Binary files /dev/null and b/www/uni/ws03/alp/cons.gif differ diff --git a/www/uni/ws03/alp/deprecated.php b/www/uni/ws03/alp/deprecated.php new file mode 100644 index 0000000..1c7b877 --- /dev/null +++ b/www/uni/ws03/alp/deprecated.php @@ -0,0 +1,25 @@ + + + + + + Ausgeschlossene Themen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Deprecated

+ Kombinatorentheorie
+ Turingmaschinen + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/digitalbaum.gif b/www/uni/ws03/alp/digitalbaum.gif new file mode 100644 index 0000000..61e48f1 Binary files /dev/null and b/www/uni/ws03/alp/digitalbaum.gif differ diff --git a/www/uni/ws03/alp/digitalbaum2.gif b/www/uni/ws03/alp/digitalbaum2.gif new file mode 100644 index 0000000..261e866 Binary files /dev/null and b/www/uni/ws03/alp/digitalbaum2.gif differ diff --git a/www/uni/ws03/alp/dijkstra-aufgabe.gif b/www/uni/ws03/alp/dijkstra-aufgabe.gif new file mode 100644 index 0000000..5dcf1b1 Binary files /dev/null and b/www/uni/ws03/alp/dijkstra-aufgabe.gif differ diff --git a/www/uni/ws03/alp/dijkstra.gif b/www/uni/ws03/alp/dijkstra.gif new file mode 100644 index 0000000..953f48c Binary files /dev/null and b/www/uni/ws03/alp/dijkstra.gif differ diff --git a/www/uni/ws03/alp/doppelrotation1.gif b/www/uni/ws03/alp/doppelrotation1.gif new file mode 100644 index 0000000..2a167f5 Binary files /dev/null and b/www/uni/ws03/alp/doppelrotation1.gif differ diff --git a/www/uni/ws03/alp/doppelrotation2.gif b/www/uni/ws03/alp/doppelrotation2.gif new file mode 100644 index 0000000..d20c380 Binary files /dev/null and b/www/uni/ws03/alp/doppelrotation2.gif differ diff --git a/www/uni/ws03/alp/doppelrotation3.gif b/www/uni/ws03/alp/doppelrotation3.gif new file mode 100644 index 0000000..b51ecae Binary files /dev/null and b/www/uni/ws03/alp/doppelrotation3.gif differ diff --git a/www/uni/ws03/alp/edit.php b/www/uni/ws03/alp/edit.php new file mode 100644 index 0000000..8069df8 --- /dev/null +++ b/www/uni/ws03/alp/edit.php @@ -0,0 +1,17 @@ + + + + + + Edit + + + + zurück zur Liste + +

+ Das ALP-Vordiplom-Projekt wurde erfolgreich abgeschlossen, die Seiten können nicht mehr verändert werden. +

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/eigenschaftenVonAlgorithmen.php b/www/uni/ws03/alp/eigenschaftenVonAlgorithmen.php new file mode 100644 index 0000000..92d4ab9 --- /dev/null +++ b/www/uni/ws03/alp/eigenschaftenVonAlgorithmen.php @@ -0,0 +1,51 @@ + + + + + + Eigenschaften von Algorithmen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Eigenschaften von Algorithmen

+ +

Abstraktion

+Durch einen Algorithmus wird ein Problemlösungsprozess auf einem bestimmten Abstraktionsniveau beschrieben, das durch die elementaren Algorithmen, die elementaren Objekte und den verwendeten Formalismus festgelegt wird.
+Eine der wichtigsten Möglichkeiten der Abstraktion besteht darin, (Teil-) Algorithmen einen Namen zu geben und diesen Namen dann stellvertretend für die detaillierte Realisierung des Algorithmus zu verwenden.

+ +

Diskretheit

+Ein diskreter Algorithmus arbeitet schrittweise das Problem ab, d.h. er ist aus elementaren Operationen zusammengesetzt.

+ +

Finitheit (= Endlichkeit)

+Statische Finitheit: Die Beschreibung eines Algorithmus besitzt nur eine endliche Länge.
Ein Dynamische Finitheit: Ein Algorithmus nimmt während seiner Ausführung nur endlich viel Platz zur Speicherung von Zwischenresultaten in Anspruch.

+ +

Terminierung

+Einen Algorithmus nennt man terminierend, wenn er bei jeder Anwendung nach endlich vielen Verarbeitungsschritten anhält und ein Resultat liefert.

+ +

Finitheit vs. Terminierung

+Das Terminieren einen Algorithmus darf nicht mit seiner Finitheit verwechslet werden. Es ist durchaus möglich, durch eine endliche Beschreibung (finit) einen Prozeß (z.B. mit Endlosschleife) zu definieren, der nicht nach endlicher Zeit beendet wird, also nicht terminiert.
+Es gibt sogar Algorithmen mit praktischem Nutzen, die (potentiell) "endlos laufen", z.B. Algorithmen zur Steuerung "nichtabbrechender" Vorgänge (z.B. in chemischen Produktionsstätten) oder das zentrale Steuerungsprogramm (Betriebssystem) einen Computers, der Tag und Nacht in Verwendung steht.

+ +

Determinismus

+Einen Algorithmus nennt man deterministisch, wenn zu jedem Zeitpunkt seiner Ausführung höchstens eine Möglichkeit der Fortsetzung besteht, also der Folgeschritt eindeutig bestimmt ist. Besteht keine Möglichkeit zur Fortsetzung der Ausführung, so vereinbart man, daß der Algorithmus terminiert.
+Hat ein Algorithmus an mindestens einer Stelle zwei oder mehr Möglichkeiten der Fortsetzung, von denen eine nach belieben ausgewählt werden kann, so heißt er nicht-deterministisch.
+Enthält ein Algorithmus also elementare Anweisungen, deren Ergebnis durch einen Zufallsmechanismus beeinflußt wird, so heißt dieser Algorithmus nicht-deterministisch. Liefert er bei der gleichen Eingabe immer die gleiche Ausgabe, so heißt er deterministisch.

+ +

Determiniertheit

+Ein Algorithmus heißt determiniert, wenn er mit den gleichen Parametern und Startbedingungen stets das gleiche Ergebnis liefert.

+ +

Determinismus vs. Determiniertheit

+Determinismus und Determiniertheit sind auseinanderzuhalten: Determinismus kennzeichnet einen Algorithmus, bei dem der gesamte Ablauf eindeutig bestimmt ist. Determiniertheit bezieht sich nur auf die eindeutige Bestimmtheit des Resultats. Deterministische Algorithmen haben durch ihren eindeutigen Ablauf auch ein eindeutiges Resultat, sie sind daher stets determiniert. Die Umkehrung gilt jedoch nicht. Es gibt nicht-deterministische Algorithmen, die über verschiedene Wege stets zum gleichen Ziel kommen, also determiniert sind.

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/fibo5.gif b/www/uni/ws03/alp/fibo5.gif new file mode 100644 index 0000000..c8c802c Binary files /dev/null and b/www/uni/ws03/alp/fibo5.gif differ diff --git a/www/uni/ws03/alp/gerichtetergraph.gif b/www/uni/ws03/alp/gerichtetergraph.gif new file mode 100644 index 0000000..8162321 Binary files /dev/null and b/www/uni/ws03/alp/gerichtetergraph.gif differ diff --git a/www/uni/ws03/alp/gewichtetergraph.gif b/www/uni/ws03/alp/gewichtetergraph.gif new file mode 100644 index 0000000..7dcf819 Binary files /dev/null and b/www/uni/ws03/alp/gewichtetergraph.gif differ diff --git a/www/uni/ws03/alp/gg.gif b/www/uni/ws03/alp/gg.gif new file mode 100644 index 0000000..9be73ad Binary files /dev/null and b/www/uni/ws03/alp/gg.gif differ diff --git a/www/uni/ws03/alp/graphenUndBaeume.php b/www/uni/ws03/alp/graphenUndBaeume.php new file mode 100644 index 0000000..36ad527 --- /dev/null +++ b/www/uni/ws03/alp/graphenUndBaeume.php @@ -0,0 +1,63 @@ + + + + + + Graphen und Bäume + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Graphen und Bäume

+
Grafiken entnommen aus Saake, Sattler: "Algorithmen & Datenstrukturen"
+ +

Graphen

+ +

Gerichteter Graph

+
+Als gerichteten Graph bezeichnet man einen Graph, der gerichtete Kanten enthält.

+ +

Ungerichteter Graph

+
+Als ungerichteten Graph bezeichnet man einen Graph, der nur ungerichtete Kanten enthält. Dies schließt in der Regel auch Schleifen aus. Normalerweise gibt man den Zusatz ungerichtet nicht mit an, da man in der Regel meist nur ungerichteten Graphen meint, wenn man von Graphen spricht.

+ +

Gewichteter Graph

+
+Als gewichteter Graph bezeichntet man einen Graph, der Knoten- oder Kantengewichte hat. +

+ +

Planarer Graph

+Ein planarer Graph (auch plättbarer Graph) ist ein Graph, der auf einer Ebene mit Punkten für die Knoten und Linien für die Kanten dargestellt werden kann, so dass sich die Kanten nur in den Knoten schneiden. + + + + + + + + + +
Planarer GraphKein planarer Graph

+ +

Bipartiter Graph

+
+Ein Graph heißt bipartit (auch paar), falls seine Knoten sich in zwei Teilmengen aufteilen lassen (Bipartition), so dass es zwischen den Knoten innerhalb einer Teilmenge keine Kanten gibt. Damit sind die Teilmengen stabile Mengen und die Bipartition impliziert eine mögliche 2-Färbung des Graphen. Umgekehrt sind alle 2-färbbaren Graphen bipartit.

+ + + +

Bäume

+... weiter zu Bäume + +

Links

+ Merkblatt zu Graphen von Augustin (u.a. Adjazenzliste, Adjazenzmatrix, Dijkstra, Prim, Krustal, ...) + + \ No newline at end of file diff --git a/www/uni/ws03/alp/greedy.php b/www/uni/ws03/alp/greedy.php new file mode 100644 index 0000000..61dbb8a --- /dev/null +++ b/www/uni/ws03/alp/greedy.php @@ -0,0 +1,108 @@ + + + + + + Greedy-Algorithmen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Greedy-Algortihmen

+ + Das Prinzip eines Greedy-Algorithmus (gieriger Algorithmus) ist es, in jedem Teilschritt so viel wie möglich zu erreichen.

+ Eine Anwendung des Greedy-Algorithmus im täglichen Leben ist die z.B. die Herausgabe von Wechselgeld.
+ Greedy: Nimm jeweils immer die größte Münze unter dem Zielwert und ziehe sie von diesem ab. Verfahre derart bis Zielwert gleich null.
+ + + + + + + + + +
Beispiel:Rückgabe von 79 Cent
79 = 50 + 20 + 5 + 2 + 2
+
+ Bei diesem Beispiel berechnet der Greedy-Algorithmus immer die optimale Geldrückgabe. Die muss allerdings nicht immer gelten. Greedy-Algorithmen berechnen jeweils ein lokales Optimum in jedem Schritt und können daher eventuell ein globales Optimum verpassen.
+ + + + + + + + + + + + + + +
Beispiel:Zielwert ist 15. Es stehen Münzen mit den Werten 1, 5 und 11 zu Verfügung.
15 = 5 + 5 + 5 ist globales Optimum
15 = 11 + 1 + 1 + 1 + 1 mit Greedy kein globales Optimum
+
+ +

Dijkstras Algorithmus - Zum Finden kürzester Wege

+ Der Dijkstra-Algorithmus kann als eine auf dem Greedy-Prinzip basierende Weiterentwicklung der Breitensuchen für gewichtete Kanten aufgefasst werden. Allerdings funktioniert diese Weiterentwicklung nur für nichtnegative Gewichte.

+Verfahren
+Pro Knoten wird der Distanzwert D zum Startknoten in einer Prioritätswarteschlange Q gespeichert. Zu Beginn ist für den Startknoten 0 und für alle anderen Knoten unendlich ∞ eingetragen.

+Schleifendurchlauf
+Der erste Knoten k1 wird aus Q genommen. Der entgültige Distanzwert von k1 ist das aktuelle D.
+Nun wird Q verändert. Bei allen Knoten ki, die direkte Nachbarn von k1 sind, wird nun überprüft, ob das aktuelle D größer ist als D(k1) + das Gewicht der Kante k1ki. Also wenn D(ki) > (D(k1) + k1ki), dann D(ki) = D(k1) + k1ki.

+ +Beispiel
+ + + + + + + +
+
    +
  1. Q = 〈(s:0), (u:∞), (v:∞), (x:∞), (y:∞)〉
  2. +
  3. Q = 〈(x:5), (u:10), (v:∞), (y:∞)〉
  4. +
  5. Q = 〈(y:7), (u:8), (v:∞)〉
  6. +
  7. Q = 〈(u:8), (v:13)〉
  8. +
  9. Q = 〈(v:9)〉
  10. +
  11. Q = 〈〉
  12. +
+
+
+ D(s) = 0
+ D(x) = 5
+ D(y) = 7
+ D(u) = 8
+ D(v) = 9
+
+
Beispiel entnommen aus Saake, Sattler: "Algorithmen & Datenstrukturen"
+
+ + +

Algorithmus von Prim - Zum Finden des kleinsten aufspannenden Baums

+Verfahren
+Wähle einen beliebigen Knoten als Startgraph T.
+Solange T noch nicht alle Knoten enthält, suche eine Kante minimalen Gewichts, die einen Knoten, der nicht in T ist, mit T verbindet und füge diese Kante und den damit verbundenen Knoten zu T hinzu.

+Animation für Prim + + +

Algorithmus von Kruskal - Zum Finden des kleinsten aufspannenden Baums

+Die Grundidee ist, die Kanten in der Reihenfolge aufsteigender Kantengewichte zu durchlaufen und jede Kante zu wählen, die mit allen zuvor gewählten Kanten keinen Kreis schließt.

+Verfahren
+Die Menge der Kanten werden sortiert in einer Liste L gespeichert.
+Wähle die erste Kante in L als Startgraph T und lösche sie aus der Liste.
+Solange T noch nicht alle Knoten enthält, gehe L der Reihe nach durch. Füge die erste Kante in T ein, die keinen Kreis mit den den Kanten, die bereits in T liegen, bilden. Die gewählte Kante und die Kanten, die einen Kreis bilden, können aus L gelöscht werden.

+Animation für Kruskal + + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/gu.gif b/www/uni/ws03/alp/gu.gif new file mode 100644 index 0000000..f9536c6 Binary files /dev/null and b/www/uni/ws03/alp/gu.gif differ diff --git a/www/uni/ws03/alp/hashing.php b/www/uni/ws03/alp/hashing.php new file mode 100644 index 0000000..8295717 --- /dev/null +++ b/www/uni/ws03/alp/hashing.php @@ -0,0 +1,30 @@ + + + + + + Hashing + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Hashing

+ +

Fragen

+ +

Anmerkungen

+ +

Links

+ Merkblatt zu Hash-Verfahren von Augustin + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/haskellSyntax.php b/www/uni/ws03/alp/haskellSyntax.php new file mode 100644 index 0000000..3a7979d --- /dev/null +++ b/www/uni/ws03/alp/haskellSyntax.php @@ -0,0 +1,32 @@ + + + + + + Haskell - Syntax + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Haskell Syntax

+ +

Fragen

+ +

Anmerkungen

+ +

Links

+ Tour of the Haskell Syntax +
+ Haskell Funktions Referenz (eine Art API) + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/haskellbegriffe.doc b/www/uni/ws03/alp/haskellbegriffe.doc new file mode 100644 index 0000000..fb12898 Binary files /dev/null and b/www/uni/ws03/alp/haskellbegriffe.doc differ diff --git a/www/uni/ws03/alp/heaps.php b/www/uni/ws03/alp/heaps.php new file mode 100644 index 0000000..296b745 --- /dev/null +++ b/www/uni/ws03/alp/heaps.php @@ -0,0 +1,30 @@ + + + + + + Heaps + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Heaps

+ +

Fragen

+ +

Anmerkungen

+ +

Links

+ Merkblatt zu Heaps von Augustin + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/huffman.gif b/www/uni/ws03/alp/huffman.gif new file mode 100644 index 0000000..0fc9530 Binary files /dev/null and b/www/uni/ws03/alp/huffman.gif differ diff --git a/www/uni/ws03/alp/imperativVsDeklarativ.php b/www/uni/ws03/alp/imperativVsDeklarativ.php new file mode 100644 index 0000000..6f64382 --- /dev/null +++ b/www/uni/ws03/alp/imperativVsDeklarativ.php @@ -0,0 +1,62 @@ + + + + + + Imperative und deklarative Programmiersprachen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Imperative und deklarative Programmiersprachen

+ +

Imperative Programmiersprachen

+ In imperativen (befehlsorientierten) Programmiersprachen wie Java, C, Pascal, etc. wird der Zustand des Systems explizit verändert. Es gibt Variablen, die zur Laufzeit verändert werden können. Imperative Sprachen sind Hochsprachen, was fortgeschrittene Methoden und Konstrukte wie Objektorientierung oder Schleifen erlaubt, was den Code leichter verständlich macht. Allerdings wird der Code oft wesentlich länger im Vergleich zu funktionalen Programmiersprachen. + +

Deklarative Programmiersprachen

+ + In deklarativen Programmiersprachen ist eine Änderung von Werten per Zuweisung nicht möglich, was auch bedeutet, dass z.B. Rückgabewerte von Funktionen im Normalfall nirgendwo gespeichert sondern nur ausgegeben werden. Der Code wird durch die Deklaration über Funktionen kurz gehalten, was ihn aber oft auch schwer verständlich macht. Funktionale Sprachen eignen sich gut zur Spezifikation, da mit ihnen Fehler leicht entdeckt werden können. + +

Klassifizierungen

+ + + + + + + + + + + + + + + + + + + +
Javaimperativ & objektorientiert
Pascalimperativ, prozedural
DMLimperativ, nicht-prozedural
Haskelldeklarativ, funktional
Prologdeklarativ, relational/logisch
C++hybrid aus imperativem C und objektorientierten Erweiterungen
+ + +

Anmerkungen

+ Imperative Sprachen werden oft mit prozeduralen Sprachen gleichgesetzt, was jedoch nicht richtig ist. Während in imperativen Sprachen geschriebene Programme durch die Variablenmanipulation einen internen Zustand haben (wie ein Automat), ist prozedurales Programmieren auch ohne dies möglich. Ein Beispiel für eine prozedurale, nicht imperative Sprache ist die Lehrsprache LOGO. (In LOGO werden oft sog. Turtle-Grafiken erstellt: Es wird eine "Schildkröte" programmiert, die über eine Fläche läuft und dabei eine Linie zieht. Die "Schildkröte" selbst akzeptiert nur relative Befehle wie LINKS, RECHTS oder STOPP, hat aber keine Information über ihre Position o.ä. Die Programme haben keinen aktuellen Zustand sondern werden nur sequenziell abgearbeitet.) + + +

Links

+ DSE: Deklarative Programmierung
+ FOLDOC: imperative languages
+ FOLDOC: declarative languages + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/index.php b/www/uni/ws03/alp/index.php new file mode 100644 index 0000000..176edf7 --- /dev/null +++ b/www/uni/ws03/alp/index.php @@ -0,0 +1,221 @@ + + + + + + Wiki: Algorithmen und Programmierung + + + + +
+ Diese Seiten entstanden im März 2004 während unserer Vorbereitung auf die Vordiplomprüfung in Algorithmen & Programmierung.
+ Autoren: Bettina Selig, Vera Kern und Tilman Walther +
+ + +

+ Bei Bedarf zu den einzelnen Punkten eine Unterseite anlegen und von dieser Seite verlinken. +

+ +
+

+   +
+   +
+   +

+
+

+ +

+
+
+ +

+ +

+
+
+ +
+ Änderungen:
+ 01.03.2004 17:30 - Erste Bestandsaufnahme
+ 05.03.2004 15:40 - Zeitplan hinzugefügt
+ 08.03.2004 22:34 - Aufgaben mit Lösungen online gestellt
+ 23.03.2004 20:05 - Zeitplan überarbeitet
+ 23.03.2004 20:33 - Stylesheets für Druckfunktion angepasst +
+ +

+ Allgemeines - Links zu allgemeinen Seiten
+ Allgemeine Aufgaben
+ Schweppe's most wanted
+

+ +

+ Fragen aus Schweppe-Protokollen und die Antworten darauf
+

+ +

+ Themenaufteilung
+ Kleinigkeiten
+ Doch nicht so wichtig +

+ +
    +
  1. + Haskell + +
  2. +
  3. + Lamda-Kalkül +
  4. +
  5. + Beweise: Induktion +
  6. +
  7. + Primitiv-Rekursive Funktionen +
      +
    • + µ-rekursive Funktionen +
    • +
    +
  8. +
  9. + Java + +
  10. +
  11. + Imperatives Programmieren vs. deklaratives Programmieren +
  12. +
  13. + Verifikation und Validation +
  14. +
  15. + Spezifikation + +
  16. +
  17. + Laufzeitbestimmung, O-Notation +
  18. +
  19. + Rekursionen und Entrekursivierung +
  20. +
  21. + Abstrakte Datentypen +
      +
    • + Verkettete Listen, Heaps, Hashes, (Prioritäts-)Schlange +
    • +
    +
  22. +
  23. + Algorithmen: + +
  24. +
  25. + Relationen, Ordnungsrelationen +
  26. +
  27. + Graphen und Bäume + +
  28. +
+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/induktion.php b/www/uni/ws03/alp/induktion.php new file mode 100644 index 0000000..9a27a66 --- /dev/null +++ b/www/uni/ws03/alp/induktion.php @@ -0,0 +1,64 @@ + + + + + + Vollständige Induktion + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Vollständige Induktion

+ + Das Beweisen der Aussage A(n) durch vollständige Induktion wird in folgende Schritte eingeteilt:

+ Induktionsanfang A(0)
+ Wenn der Induktionsanfang abgesichert ist, dann weiß man, daß die Aussage für ein bestimmtes n (meistens nimmt man 0 oder 1) stimmt. +

+ Induktionsvoraussetzung A(n)
+ ist die eigentliche Aussage, bei der wir für die folgenden Schritte annehmen, dass sie stimmt. +

+ Induktionsbehauptung A(n+1)
+ müssen wir im nächsten Schritt beweisen, damit wir wissen, dass die Aussage wahr ist. +

+ Induktionsschritt Beweis von A(n+1) durch A(n)
+ Hier formen wir die Formel A(n+1) so um, dass wir A(n) einsetzen können und eine wahre Aussage entsteht. +


+ Verdeutlichung an einem simplen Beispiel:
+ Eine natürliche Zahl n heißt geraden wenn n = 2x und ungerade, wenn n = 2x + 1, wobei x ∈ N. Wir beweisen, dass eine natürliche Zahl n entweder gerade oder ungerade sein muss.

+ + + + + + + + + + + + + + + + +
InduktionsanfangA(0): 0 ist gerade ∨ 0 ist ungerade, da 2⋅0 = 2 → 0 ist gerade
InduktionsvoraussetzungA(n): n ist gerade ∨ n ist ungerade
InduktionsbehauptungA(n+1): n+1 ist gerade ∨ n+1 ist ungerade
Induktionsschritt + 1. Fall: n ist gerade
+ Es gibt ein x ∈ N, so dass n = 2x. Dann ist n+1 = 2x + 1 → n+1 ist ungerade.
+ 2. Fall: n ist ungerade
+ Es gibt ein x ∈ N, so dass n = 2x + 1. Dann ist n+1 = (2x + 1) + 1 = 2x + 2 = 2⋅(x+1) → n+1 ist gerade.
+
+ +

Links

+ Beweis von rev (rev xs) = xs + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/infixpostfix.php b/www/uni/ws03/alp/infixpostfix.php new file mode 100644 index 0000000..98b3986 --- /dev/null +++ b/www/uni/ws03/alp/infixpostfix.php @@ -0,0 +1,65 @@ + + + + + + Infix-, Postfix- und Präfix-Darstellung + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Infix, Postfix und Präfix

+ +Infix ist die Darstellung wie wir sie normalerweise benutzen. Die Operatoren stehen zwischen den Operanden.
+Bei Postfix werden die Operatoren hinter die Operanden geschrieben. Die Operanden werden von vorne nach hinten und die Operatoren von hinten nach vorne durchgearbeitet.
+Bei Postfix ist es genau andersherum als bei Postfix. Die Operatoren stehen vor den Operanden.

+ + + + + + + + + + + + + + + + + + + + +
InfixPostfixPräfixErgebnis
5 + 3 * 5 / 105 3 5 10 / * ++ 5 * 3 / 5 106,5
((2 + 3) * 5 + 1) / 22 3 + 5 * 1 + 2 // + * + 2 3 5 1 213
+

+ + +

Termbäume

+Terme kann man auch als Bäume darstellen.
+Die Termbäume für die obigen Beispiele sind folgende:
+ + + + + +
+ +Durchläuft man einen solchen Termbaum in Preorder (mitte - links - rechts), erhält man einen Präfix-Term. Wenn man ihn in Postorder (links - rechts - mitte) durchlauft, bekommt man einen Postfix-Term und bei Inorder (links - mitte - rechts) einen Infix-Term.

+ +

Links

+Mündliche Abiprüfung zu Prä- und Postfix + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/java.php b/www/uni/ws03/alp/java.php new file mode 100644 index 0000000..6da0b5c --- /dev/null +++ b/www/uni/ws03/alp/java.php @@ -0,0 +1,235 @@ + + + + + + Java + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Java - Programmierparadigmen, Architekturprinzipien, Datenstrukturen & Algorithmen

+ Anm.: +
    +
  1. Dass der geneigte Leser die Sprache Java auf ALP2-Niveau beherrscht, wird vorausgesetzt. Insofern lag die Schwierigkeit beim Schreiben haupsächlich in der Reduktion auf das Wesentliche, da man die Balance zwischen Verständlichkeit und Wiederholung von bekanntem finden musste. Also im Zweifel noch mal nachrecherchieren (s.a. Links) bzw. überspringen. +
  2. +
  3. + Da es in Java keine Funktionen, sondern nur Methoden (die auf Objekten arbeiten) gibt, werden die beiden Begriffe hier synonym verwendet. +
  4. +
+
+ +

Objektorientierung

+ +

Attribute & Sichtbarkeit

+

+

+ Ein Bezeichner (eine Variable) x heißt sichtbar an einer Programmstelle, wenn er in einem der die Programmstelle umgebenden Blöcke vereinbart wurde. Man unterscheidet innerhalb von Klassen zwischen globalen und lokalen Variablen. Während globale Variablen innerhalb der ganzen Klasse gültig sind, haben lokale Variablen nur einen begrenzten Geltungsbereich (innerhalb ein Methode, Schleife oder eines Blocks). +

+

+ Lokale Variablen verdecken globale, wenn sie denselben Bezeichner haben. D.h.: Existiert eine globale Variable a und definiert eine Methode erneut eine Variable a, so wird innerhalb der Methode durch den Bezeichner 'a' immer die lokale Variable angesprochen. Auf die globale Variable kann mithilfe des Schlüsselworts this explizit zugegriffen werden. +

+

+ Die Sichtbarkeit von Variablen kann durch die Attribute public, private und protected beeinflusst werden: +

+ + + + + + + + + + + + + + + + +
SichtbarkeitInnerhalb der PackageAbgeleitete KlassenAußerhalb der Package
privateunsichtbarunsichtbarunsichtbar
defaultsichtbarunsichtbarunsichtbar
protectedsichtbarsichtbarunsichtbar
publicsichtbarsichtbarsichtbar
+

+ Java-Klassen können entweder mit dem Attribut public versehen werden (dann sind sie von überall erreichbar) oder Attributfrei sein. In diesem Fall haben sie default-Sichtbarkeit und können nur von Klassen aus derselben Package erreicht werden. +

+

+

+ Beispiel:
+

+package fahrzeuge;
+
+public class Auto {
+
+  private int a = 1;   /* a ist globale Variable in Auto und durch das Attribut
+                        * private außerhalb der Klasse unsichtbar. Zuweisungen
+                        * der Art myAuto.a = 5; sind nicht möglich. Die Variable
+                        * wird nicht mitvererbt.
+                        */
+  
+  public int b = 2;    /* b ist globale Variable in Auto und durch das Attribut
+                        * public von überall zu erreichen. Instanzen der Klasse
+                        * akzeptieren Zuweisungen der Art myAuto.b = 8;
+                        */
+  
+  protected int c = 3; /* c ist globale Variable in Auto. Durch das Attribut
+                        * protected wird die Sichtbarkeit auf derselben package
+                        * beschränkt. Die Variable wird an Ableitungen von Auto
+                        * vererbt.
+                        */
+  
+  
+  public int getNumber(int x) {
+    
+    int a = 4;         /* a ist lokale Variable in getNumber() und verdeckt
+                        * innerhalb von getNumber() die globale Variable a
+                        */
+    
+    if (x < 10) return a; // Gibt 4 zurück
+    
+    if (x > 20) return b; // Gibt 2 zurück. (Die globale Variable ist
+                          // überall in Auto gültig 
+    
+    return this.a;        // Gibt 1 aus. (durch das Schlüsselwort
+                          // this wird die globale Variable a
+                          // angesprochen
+  }
+  
+  private String getPolicy() {
+    return ("Diese Methode kann nur innerhalb von Auto verwendet werden. " +
+            "Sie wird nicht mitvererbt.");
+  }
+  
+  protected String getLiberalPolicy() {
+    return ("Diese Methode kann innerhalb von Auto und von allen Klassen aus " +
+            "der Package fahrzeuge verwendet werden. " +
+            "Sie wird an abgeleitete Klassen vererbt.");
+  }
+  
+}
+    
+

+

+ Weitere Atribute in Java sind static, final und die (eher speziellen und daher hier nicht näher beschriebenen) Attribute transient und volatile.
+

+ static
+ Das Schlüsselwort static ist auf Variablen und Methoden anwendbar. Ist eine Variable oder Methode mit dem Attribut static belegt, so existiert sie für sämtliche Instanzen der Klasse zuammen nur einmal. Statische Variablen sind sogenannte Klassenvariablen. Ändert eine Klasse eine statische Variable, so ist sie auch für alle anderen Instanzen geändert.
+ Da statische Variablen und Methoden keiner bestimmten Instanz angehören, können sie auch direkt über den Klassennamen erreicht werden, ohne dass erst eine Instanz der Klasse erstellt werden müsste.
+

+

+ final
+ Das Schlüsselwort final ist auf Variablen, Methoden und Klassen anwendbar. +

    +
  • + Finale Variablen müssen initialisiert werden und können zur Laufzeit nicht mehr verändert werden. (Sie ersetzen damit die in anderen Sprachen üblichen Konstanten.) +
  • +
  • + Finale Methoden können von abgeleiteten Klassen nicht überschrieben werden. +
  • +
  • + Finale Klassen können nicht abgeleitet werden, sie beenden die Vererbungskette und können nicht mehr erweitert werden. +
  • +
+ Da Elemente, die mit dem Attribut final nicht änderbar sind, kann die Virtual Machine zur Laufzeit auf erneutes Laden von Variablen bzw. auf dynamische Methodensuche verzichten, weshalb finale Elemente oft deutlich performanter bearbeitet werden können. +

+

+ +

Geheimnisprinzip

+

+ ([principle of] information hiding) bezeichnet nach [Parnas '72] ein Entwurfsprinzip für Module. Module sollen ihre konkrete Implementierung verbergen. ("Jedes Modul hat ein Geheimnis!")
Komponenten eines Softwaresystems werden als Black Boxes betrachtet, die nur relevante Informationen nach außen zeigen. In Java wird das Geheimnisprinzip insbesondere über Interfaces sowie die Attribute private und protected realisiert.
+ Vorteile liegen in der konsequenten Modularisierung: Austauschbarkeit der Implementierung einer Klasse (bei Beibehaltung des Interfaces).
+ Das Geheimnisprinzip ist auch für → Abstrakte Datentypen von Bedeutung. +

+ +

Polymorphie

+

+ Polymorphie (lat. für Vielgestaltigkeit) bezeichnet Eigenschaft einer Variablen, für Objekte verschiedener Klassen stehen zu können. Es gibt verschiedene Arten von Polymorphie:
+

    +
  • + Universelle Polymorphie
    + Universell polymorphe Funktionen bearbeiten Objekte mit ähnlichen Eigenschaften auf dieselbe Weise. Man unterschiedet zwischen Inklusionspolymorphie und parametrischer Polymorphie: +
      +
    • + Inklusionspolymorphie (Vererbung) - eine Instanzvariable kann auch Objekte von Unterklassen aufnehmen. So kann eine Variable vom Typ Motorrad außer Motorrad-Objekten, auch solche vom Typ Suzuki oder HarleyDavidson aufnehmen. +
    • +
    • + Parametrische Polymorphie (Typvariablen) - eine Methode akzeptiert Parameter allgemeinen Typs (Generizität). In Java wird dies durch Methoden, die als Parameter den Typ Object akzeptieren realisiert. (Was ja eigentlich Inklusionspolymorphie ist - mal sehen was mit Java 1.5 kommt...) In Haskell gibt es den allgemeinen Parameter a. +
    • +
    +
  • +
  • + Ad hoc Polymorphie (Überladen)
    + Bei der Ad-hoc-Polymorphie, liegt den verschiedenen Parametern keine gemeinsame Struktur zugrunde. Die verschiedenen Typen werden unterschiedlich behandelt. Man erreicht dies durch Überladen von Methoden: Eine Methode kann mehrfach für verschiedene Parameter existieren. +
  • +
+

+ +

Assertions

+

+ Assertions (Zusicherungen) dienen zur Überprüfung von Invarianten, um Programme robuster zu machen. Dazu wird das Programm mit dem Schlüsslwort assert (ab Java 1.4) angewiesen, eine Bedingung auf Wahrheit zu überprüfen. Trifft diese (i.d.R. wider Erwarten) nicht zu, wird eine Exception ausgelöst. Der Compiler kann über Parameter angewiesen werden, die Zusicherungen an- oder abzustellen, so dass diese z.B. nur während der Entwicklung genutzt werden und für die endgültige Fassung eines Programms zur Laufzeitoptimierung wegfallen. +

+ +

Parameterübergabe: Call by value vs. Call by reference

+

Call by value

+

+ Der Parameter einer Methode entspricht eriner lokalen Variable, die bei Aufruf mit dem übergebenen Wert initialisiert wird (Parameter-Kopie). Ändert eine Methode den Parameter, so betrifft dies nur ihre lokale Kopie, nicht die übergebene Variable. In Java werden alle primitiven Datentypen per Call by value übergeben. +

+

Call by reference

+

+ Paramter werden als Verweis auf eine Variable übergeben. Ändert eine Methode den Parameter, so ist auch die übergebene Variable geändert. In Java werden Objekte als Zeiger übergeben, so dass Änderungen immer global gelten. +

+

Call by result

+

+ (Teilw. auch call-by-value-return, u.a. auch bei Schweppe.) Hier wird zunächst das Ergebnis berechnet, und dann in Parameter-Variablen zurückgegeben. +

+

+ Beispiel (kein Java!): +

+void solve(in float p, in float q, out float x1, out float x2)
+{
+  float root = sqrt(p*p/4 - q);
+  x1 = -p/2 + root;
+  x2 = -p/2 - root;
+}
+    
+

+ +

Call by name

+

+ Entspricht lazy evaluation wie z.B. in Haskell. Vom Ergebnis so wie Call by reference, allerdings mit anderer Semantik: Der übergebene Bezeichner ersetzt beim Aufruf den Parameter der Methodendeklaration, also so ähnlich wie Makros in C. So eine Art automatisches Copy'n'Paste. Die Sprache ALGOL verwendet dieses System, das bei modernen Sprachen kaum noch Anwendung findet. (s.a. FOLDOC: call-by-name) +

+ +

Entwurfsmuster

+

+ Entwurfsmuster (engl. Design Patterns) sind - in der Softwaretechnik - Lösungen für häufig auftretende Problemtypen im Programmdesign. Durch die Verwendung von Entwurfsmustern soll der Code robuster, eleganter und schneller werden, da man das Rad nicht immer neu erfindet, sondern stattdessen erprobte Lösungen verwendet. (Das Problem liegt also eher darin, die passende Lösung aus den bekannten herauszusuchen.)
+

+

Häufig verwendete Entwurfsmuster

+
    +
  • Singleton - Eine Klasse, von der nur eine Instanz erzeugt werden kann
  • +
  • Immutable - Eine Klasse, die nach der Initialisierung nicht mehr veränderbar ist
  • +
  • Interface - Trennt Eigenschaften von der Implementierung
  • +
  • Iterator - Durchläuft alle Elemente eine Collection
  • +
  • Factory - Übernimmt die Initialisierung und Instanziierung von verschiedenen Klassen mit gemeinsamen Eigenschaften
  • +
+ + +

Datenstrukturen & Implementierungen

+

+

+ + +

Links

+

+ Java ist auch eine Insel
+ Bemerkungen zu den (derzeitigen) Defiziten, z.B. Generics +

+ + \ No newline at end of file diff --git a/www/uni/ws03/alp/kleinigkeiten.php b/www/uni/ws03/alp/kleinigkeiten.php new file mode 100644 index 0000000..f736771 --- /dev/null +++ b/www/uni/ws03/alp/kleinigkeiten.php @@ -0,0 +1,33 @@ + + + + + + Kleinigkeiten + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Kleinigkeiten / Anderes

+
Hier ist Platz für Dinge, die kein eigenes Alp-Thema darstellen, die man aber vielleicht trotzdem wissen sollte/möchte
Also immer schön ergänzen und Fragen stellen
+ +

Compiler vs. Interpreter

+ [kommt bald] + +

Fragen

+ +

Anmerkungen

+ +

Links

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/konvexehuelle.gif b/www/uni/ws03/alp/konvexehuelle.gif new file mode 100644 index 0000000..53e51a9 Binary files /dev/null and b/www/uni/ws03/alp/konvexehuelle.gif differ diff --git a/www/uni/ws03/alp/lambda-kalkuel.php b/www/uni/ws03/alp/lambda-kalkuel.php new file mode 100644 index 0000000..e40a106 --- /dev/null +++ b/www/uni/ws03/alp/lambda-kalkuel.php @@ -0,0 +1,65 @@ + + + + + + Das Lambda-Kalkül + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Das λ-Kalkül - die kleinste Programmiersprache

+

+ Idee: 1900 stellt Hilbert die Frage nach der Existenz einem automatischen Verfahren, mit dem man alle Sätze der Mathematik beweisen kann.
+ Turing und Church beweisen 1930, dass es ein solches Verfahren nicht gibt.
+ Das λ-Kalkül bildet die mathematische Grundlage für funktionale Programmiersprachen. +

+

+ <name>        := a | b | c | a1 | b2...
+ <expression>  := <name> | <function> | <application>

+ <function>    := λ<name>.<expression>
+ <application> := <expression><expression> +

+

Reduzieren von Ausdrücken:

+

+ λx.x y → y
+ (λx.xy)z → zy
+ (λx.(λy.xy))ab → (λy.ay)b → ab +

+

Zahlen

+

+ 0 ≡ λs(λz.z)
+ 1 ≡ λs(λz.s(z))
+ 2 ≡ λs(λz.s(s(z)))
+ usw. +

+

Funktionen

+

+ Nachfolgefunktion:
+  S ≡ λwyz.y(wyz)
+  5S4 ≡ S(S(S(S(S(4))))) ≡ 9 +

+ True:  T ≡ λxy.x
+ False: F ≡ λxy.y
+
+ And: ∧ ≡ λxy.xyF
+ Or:  &or ≡ λxy.xTy
+ Not: ¬ ≡ λx.xFT +

+

Links

+

+ Das gefürchtete Lambda-Kalkül - Ist leider nicht mehr online! Wer eine Kopie findet, bitte eintragen.
+ Kurze Wikipedia-Erläuterung zur Lambda-Notation +

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/loesungen.hs b/www/uni/ws03/alp/loesungen.hs new file mode 100644 index 0000000..cbaaf95 --- /dev/null +++ b/www/uni/ws03/alp/loesungen.hs @@ -0,0 +1,258 @@ +-- Aufgabe 1: Quicksort + +qsort :: Ord (a) => [a] -> [a] +qsort [] = [] +qsort (x:xs) = qsort[y | y <- xs, y < x] ++ [x] ++ qsort[y | y <- xs, y >= x] + + +-- Aufgabe 2: Mergesort +msort :: Ord (a) => [a] -> [a] +msort [] = [] +msort [x] = [x] +msort xs = merge (msort (take half xs)) (msort (drop half xs)) + where half = (length xs) `div` 2 + merge [] ys = ys + merge xs [] = xs + merge (x:xs) (y:ys) + | (x < y) = x:(merge xs (y:ys)) + | otherwise = y:(merge (x:xs) ys) + +-- Aufgabe 3: Insertionsort + +insertionsort :: Ord (a) => [a] -> [a] +insertionsort [] = [] +insertionsort (x:xs) = insert x (insertionsort xs) + +insert :: Ord (a) => a -> [a] -> [a] +insert a [] = [a] +insert a (x:xs) + |a <= x = (a:x:xs) + |otherwise = x : (insert a xs) + +-- Aufgabe 4: Selectionsort + +selectionSort :: Ord (a) => [a] -> [a] +selectionSort xs + | xs == [] = [] + | otherwise = minimum xs : selectionSort (delete (minimum xs) xs) + +-- die Funktion delete ist im module "List" vorhanden, habe aber keine Ahnung, wie man die importiert +delete :: Eq (a) => a -> [a] -> [a] +delete x [] = [] +delete x (y:ys) + |x == y = ys + |otherwise = y : (delete x ys) + +-- Aufgabe 5: lineare Suche + +linSearch :: Eq(a) => a -> [a] -> Bool +linSearch x [] = False +linSearch x (y:ys) + |x == y = True + |otherwise = linSearch x ys + +-- Aufgabe 6: Binäre Suche +-- hat Fehler, Hilfe!!! + +binSearch :: Ord a => a -> [a] -> Bool +binSearch x [] = False +binSearch x xs + | (mid == x) = True + | (mid > x) = binSearch x (take half xs) + | (mid < x) = binSearch x (drop half xs) + where mid = head (drop half xs) + half = (length xs) `div` 2 + + +-- Aufgabe 7: reverse + +-- naive Implementierung (ja, es gibt eine bessere ; )) + +rev :: [a] -> [a] +rev [] = [] +rev (x:xs) = rev xs ++ [x] + + -- hier die bessere Variante + +rev2 :: [a] -> [a] +rev2 xs = rev' [] xs + where rev' acc [] = acc + rev' acc (x:xs) = rev' (x:acc) xs + +-- Aufgabe 8: Fibonacci + +fibo :: Int -> Int +fibo 0 = 0 +fibo 1 = 1 +fibo n = fibo (n-1) + fibo(n-2) + + -- mit Akkumulator + +fibo2 :: Int -> Int +fibo2 n = fibo' 0 1 n + where fibo' a1 a2 0 = a1 + fibo' a1 a2 n = fibo' (a1+a2) a1 (n-1) + +-- Aufgabe 9: Fakultät + +fak :: Int -> Int +fak 1 = 1 +fak n = n * fak(n-1) + + -- mit Akkumulator + +fak2 :: Int -> Int +fak2 n = fak' 1 n + where fak' acc 1 = acc + fak' acc n = fak' (n*acc) (n-1) + +-- Aufgabe 10: Summer einer Liste + +sumList :: [Int] -> Int +sumList [] = 0 +sumList (x:xs) = x + sumList xs + + -- mit Akkumulator + +sumList2 xs = sumList' 0 xs + where sumList' acc [] = acc + sumList' acc (x:xs) = sumList'(x+acc) xs + +-- Aufgabe 11: map Funktion + +map' :: (a -> b) -> [a] -> [b] +map' f [] = [] +map' f (x:xs) = (f x) : map' f xs + +-- Aufgabe 12: Binärer Suchbaum + +data BinSTree = E | N BinSTree Int BinSTree + +sumTree :: BinSTree -> Int +sumTree E = 0 +sumTree (N l v r) = v + sumTree l + sumTree r + +contains :: Int -> BinSTree -> Bool +contains a E = False +contains a (N l v r) + |a == v = True + |a < v = contains a l + |otherwise = contains a r + +insertToTree :: Int -> BinSTree -> BinSTree +insertToTree a E = N E a E +insertToTree a (N l v r) + |a == v = (N l v r) + |a < v = N (insertToTree a l) v r + |otherwise = N l v (insertToTree a r) + +deleteFromTree :: Int -> BinSTree -> BinSTree +deleteFromTree a E = E +deleteFromTree a (N l v r) + |a == v = insertLeftTree r l + |a < v = N l (deleteFromTree a r) + |otherwise = N (deleteFromTree a l) v r + +insertLeftTree E t = t +insertLeftTree (N l v r) t = N (insertLeftTree l t) v r + +treeToList :: BinSTree -> [Int] +treeToList E = [] +treeToList (N l v r) = treeToList l ++ [v] ++ treeToList r + +-- Aufgabe 13: Ein Stack + +data Stack t = E | NES t (Stack t) + deriving(Show) + +createStack :: Stack t +createStack = E + +push :: t -> Stack t -> Stack t +push x s = NES x s + +pop :: Stack t -> Stack t +pop E = error "Stack ist leer" +pop (NES x s) = s + +top :: Stack t -> t +top E = error "Stack ist leer, kein top" +top (NES x s) = x + +size :: Stack t -> Int +size E = 0 +size (NES x s) = 1 + size s + +isEmpty :: Stack t -> Bool +isEmpty E = True +isEmpty (NES x s) = False + +-- showStack :: Stack t -> String +showStack E = "*" +showStack (NES x s) = [x] ++ showStack s + +-- Aufgabe 14: Eine Queue + +data Queue t = E | NEQ t (Queue t) + +createQueue :: Queue t +createQueue = E + +enqueue :: t -> Queue t -> Queue t +enqueue x E = NEQ x E +enqueue x (NEQ y q) = NEQ y (enqueue x q) + +dequeue :: Queue t -> Queue t +dequeue E = error "Queue leer" +dequeue (NEQ x q) = q + +first :: Queue t -> t +first E = error "Queue leer" +first (NEQ x q) = x + +size :: Queue t -> Int +size E = 0 +size (NEQ x q) = 1 + size q + +isEmpty :: Queue t -> Bool +isEmtpy E = True +isEmpty (NEQ x q) = False + +-- Aufgabe 15: Eine Menge + +data Set t = E | NES t (Set t) + +createSet :: Eq t => Set t +createSet = E + +isIn :: Eq t => t -> Set t -> Bool +isIn x E = False +isIn x (NES y s) + |y == x = True + |otherwise = isIn x s + +insert :: Eq t => t -> Set t -> Set t +insert x E = NES x E +insert x s + |isIn x s = s + |otherwise = NES x s + +delete :: Eq t => t -> Set t -> Set t +delete x E = E +delete x (NES y s) + |x == y = s + |otherwise = insert y (delete x s) + +size :: Eq t => Set t -> Int +size E = 0 +size (NES x s) = 1 + size s + +isEmpty :: Eq t => Set t -> Bool +isEmpty s = (size s == 0) + +isSubSet :: Eq t => Set t -> Set t -> Bool +isSubSet E s2 = True +isSubSet (NES x s1) s2 = (isIn x s2) && isSubSet s1 s2 + +isEqualSet :: Eq t => Set t -> Set t -> Bool +isEqualSet s1 s2 = (isSubSet s1 s2) && (isSubSet s2 s1) diff --git a/www/uni/ws03/alp/loesungenvonbettina.php b/www/uni/ws03/alp/loesungenvonbettina.php new file mode 100644 index 0000000..7df8141 --- /dev/null +++ b/www/uni/ws03/alp/loesungenvonbettina.php @@ -0,0 +1,517 @@ + + + + + + Lösungen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Lösungen

+ +

Vollständige Induktion

+ + + + + + + + + + + + + + + + + + + + + +
1. InduktionsanfangA(1): 1 = 12
InduktionsvoraussetzungA(n): 1 + 3 + 5 + ... + (2n - 1) = n2
InduktionsbehauptungA(n+1): 1 + 3 + 5 + ... + (2n - 1) + (2(n+1) - 1) = (n+1)2
Induktionsschrittn → n+1
+ 1 + 3 + 5 + ... + (2n - 1) + (2(n+1) - 1) = (n+1)2
+ n2 + (2n + 1) = n2 + 2n + 1 mit IV +
+ + + + + + + + + + + + + + + + + + + + + + +
2. Induktionsanfang[] ++ [] = []
Induktionsvoraussetzungx ++ [] = x
Induktionsbehauptunga:x ++ [] = a:x
Induktionsschrittl → l+1, also x → a:x
+ a:x ++ [] = a:x
+ a:(x ++ []) = a:x mit (a)
+ a:x = a:x mit IV
+
+ + + + + + + + + + + + + + + + + + + + + + +
3. Induktionsanfangrev ([] ++ b) = (rev b) ++ (rev [])
+ rev b = (rev b) ++ [] mit (2a), (2)
+ rev b = rev b mit (2a)
Induktionsvoraussetzungrev (a ++ b) = (rev b) ++ (rev a)
Induktionsbehauptungrev ((x:a) ++ b) = (rev b) ++ (rev x:a)
Induktionsschrittl → l+1, also a → x:a
+ rev ((x:a) ++ b) = (rev b) ++ (rev x:a)
+ rev (x:(a ++ b)) = (rev b) ++ (rev a) ++ [x] mit (2b), (b)
+ rev (a ++ b) ++ [x] = (rev b) ++ (rev a) ++ [x] mit (b)
+ rev (a ++ b) ++ [x] = rev (a ++ b) ++ [x] mit IV
+
+ + + + + + + + + + + + + + + + + + + + + + +
4. Induktionsanfangrev (rev []) = []
+ rev [] = [] mit (a)
+ [] = [] mit (a) +
Induktionsvoraussetzungrev (rev xs) = xs
Induktionsbehauptungrev (rev x:xs) = x:xs
Induktionsschrittl → l+1, also xs → x:xs
+ rev (rev x:xs) = x:xs
+ rev ((rev xs) ++ [x]) = x:xs mit (b)
+ (rev [x]) ++ (rev (rev xs)) = x:xs mit (3)
+ (rev [x]) ++ xs = x:xs mit IV
+ [x] ++ xs = x:xs mit (c)
+ x:[] ++ xs = x:xs mit (d)
+ x:([] ++ xs) = x:xs mit (2b)
+ x:xs = x:xs mit (2a) +
+ +

Primitiv rekursive Funktionen

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Aufstellen der Gleichungen → + + Einfache Lösungen → + + Gleichungen mit ψ und χ +
+ pred (0)
+ pred (n+1) +
+ = 0
+ = n +
+ = clr ()
+ = p2 (pred (n), n) +
+ eq0 (0)
+ eq0 (n+1) +
+ = 1
+ = 0 +
+ = suc clr ()
+ = clr (eq0 (n), n) +
+ sub (0, m)
+ sub (n+1, m) +
+ = m
+ = pred (n, m) +
+ = p1 (m)
+ = pred p1 (sub (n, m), n, m) +
+ and (0, m)
+ and (n+1, m) +
+ = 0
+ = m +
+ = clr (m)
+ = p3 (and (n, m), n, m) +
+ not (0)
+ not (n+1) +
+ = 1
+ = 0 +
+ = suc clr ()
+ = clr (not (n), n) +
+ ge (0, m)
+ ge (n+1, m) +
+ = eq0 (m)
+ = eq0 (sub (n+1, m)) +
+ = eq0 (m)
+ = eq0 (sub (suc p2, p3)) (ge (n, m), n, m) +
+ if (0, m1, m2)
+ if (n+1, m1, m2) +
+ = m2
+ = m1 +
+ = p2 (m1, m2)
+ = p3 (pred (n, m1, m2), n, m1, m2) +
+ +

O-Notation

+
    +
  1. log2 n < √n < n < n(log2 n)2 < n2 < n3 < 1,8n < 3n
  2. +
  3. (a) Θ(n2)
    + (b) Θ(n log2 n)
    + (c) Θ(n · 4n)
  4. +
+ +

Algorithmen

+
    +
  1. Dijkstra: D(a)=0, D(b)=2, D(c)=6, D(d)=8, D(e)=9, D(f)=9, D(g)=8, D(h)=12, D(i)=9
  2. +
  3. Folgende Kanten sind im kleinsten aufspannenden Baum enthalten: (a,b), (b,c), (c,d), (d,e), (d,i), (e,f), (e,h), (i,g)
  4. +
  5. Ein Huffman-Code: A = 00, B = 110, C = 0100, D = 0101, I = 101, L = 0110, M = 0111, R = 111, S = 100
  6. +
  7. Verschiebefunktion:
  8. +
+ + + + + +
+ Wort
+ Stelle
+ Verschiebefunktion f +
+ abacabb
+ 1234567
+ 0112112 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
abbababcababcabbbca
b
X
a
b
c
a
b
b
f(1) = 0
b
-
a
X
b
c
a
b
b
f(2) = 1
b
-
a
-
b
-
c
X
a
b
b
f(4) = 2
ba
-
b
-
c
-
a
-
b
-
b
X

f(7) = 2
ba
-
b
-
c
-
a
-
b
-
b
-

Wort gefunden
+ +

Graphen und Bäume

+
    +
  1. AVL-Baum
    +
    + + + +
  2. +
  3. B-Baum
    + +
  4. +
  5. Rot-Schwarz-Baum in eine (2,4)-Baum umgewandelt:
    + +
  6. +
  7. Suffixbaum von ananas$
    + +
  8. +
  9. Adjazenzliste
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    uv → x
    vy
    wy → z
    xv
    yx
    zz
    + + Adjazenzmatrix
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    nachuvwxyz
    u010100
    v000010
    vonw000011
    x010000
    y000100
    z000001
    + Eine Adjazenzliste ist hier sinnvoller, da bei der Adjazenzmatrix sehr viel Speicherplatz unnötig besetzt ist. +
  10. +
  11. Konvexe Hülle
    besteht aus den Punkten A, D, G und H.
  12. +
  13. Pre- und Postorder
    + (a)

    + Preorder : - + 2 * 3 6 / 4 1
    + Postorder: 2 3 6 * + 4 1 / -
    + (b)

    + Preorder : + - * 5 + 6 2 / 7 4 * 2 5
    + Postorder: 5 6 2 + * 7 4 / - 2 5 * +
    + (c)
    + Preorder : * 2 + 7 / 5 5
    + Inorder : 2 * (7 + 5 / 5)
    + Postorder: 2 7 5 5 / + * +
  14. +
+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/mdl_Abitur-1.pdf b/www/uni/ws03/alp/mdl_Abitur-1.pdf new file mode 100644 index 0000000..4495a10 Binary files /dev/null and b/www/uni/ws03/alp/mdl_Abitur-1.pdf differ diff --git a/www/uni/ws03/alp/mississippi.gif b/www/uni/ws03/alp/mississippi.gif new file mode 100644 index 0000000..c32cd65 Binary files /dev/null and b/www/uni/ws03/alp/mississippi.gif differ diff --git a/www/uni/ws03/alp/modelSpez.txt b/www/uni/ws03/alp/modelSpez.txt new file mode 100644 index 0000000..3f34e79 --- /dev/null +++ b/www/uni/ws03/alp/modelSpez.txt @@ -0,0 +1,197 @@ +1b. mod. Menge (Haskell Listen) +2b. mod. Queue (Haskell Listen) +3b. mod. Stack (Haskell Listen) +4b. mod. Baum (Haskell Listen) // erstmal weggelassen + +1c. mod. Menge (Folgen) +2c. mod. Queue (Folgen) +3c. mod. Stack (Folgen) +4c. mod. Baum (Folgen) + + +1b. Modellierende Spezifikation einer Menge (Model,Spezifikation,Invariante) +--------------------------------------------------------------------------------------------------- + +Model : Haskell Listen + +Invariante : In einer Menge dürfen keine Duplikate vorkommen + +Spezifikation: createM :: [a] + create = [] + + isEmpty :: [a] -> Bool + isEmpty [] = True + isEmpty (x:xs) = False + + insert :: a -> [a] -> [a] + insert x [] = [x] + insert y (x:xs) + | y == x = (x:xs) + | otherwise = x:(insert y xs) + + delete :: a -> [a] -> [a] + delete x [] = [] + delete y (x:xs) + | y == x = xs + | otherwise = x:(delete y xs) + + isIn :: a -> [a] -> Bool + isIn x [] = False + isIn y (x:xs) + | y == x = True + | otherwise = x:(isIn y xs) + + + +2b. Modellierende Spezifikation einer Schlange (Model,Spezifikation,Invariante) +--------------------------------------------------------------------------------------------------- + +Modell: Liste in Haskell [t] + +Invariante : length [t] <= MAX + +Spezifikation: createQ :: [t] + createQ = [] + + enqueue :: t -> [t] -> [t] + enqueue x [] = [x] + enqueue y (x:xs) = (x:xs) ++ [y] + + dequeue :: [t] -> [t] + dequeue [] = error "Queue leer, Du OpfA" + dequeue (x:xs) = xs + + first :: [t] -> t + first [] = error "Queue leer, Du OpfA" + first (x:xs) = x + + +3b. Modellierende Spezifikation eines Stacks (Model,Spezifikation,Invariante) +--------------------------------------------------------------------------------------------------- + +Modell: Liste in Haskell [t] + +Invariante : length [t] <= MAX + +Spezifikation: createS :: Stack s + createS = [] + + isEmpty :: Stack s -> Bool + isEmpty [] = True + isEmpty xs = False + + push :: e -> Stack s -> Stack s + push x [] = [x] + push y (x:xs) = y : (x:xs) + + pop :: Stack s -> Stack s + pop [] = error "Stack ist leer" + pop (x:xs) = xs + + top :: Stack s -> e + top [] = error "Stack ist leer" + top (x:xs) = x + + size :: Stack s -> int + size [] = 0 + size (x:xs) = 1 + size (xs) + + + +4b. Algebraische Spezifikation eines Baumes (Model,Spezifikation,Invariante) +-------------------------------------------------------------------------------------------------- + + folgt + + + +1c. Modellierende Spezifikation einer Menge (Model,Spezifikation,Invariante) +--------------------------------------------------------------------------------------------------- + +Model : Menge = e | (xi)i=1..n , type xi = T , n <- N + +Invariante : n < N && Alle (xi)i=1..n Exisitiert kein (xj)j=1..n mit xj = xi + +Spezifikation : createM = e + //post return e + + isEmpty Menge + //post if Menge == e return True else return False + + //pre createM && isIn T Menge = False (s. Invariante) && k < N + insert T Menge + //post insert T (xi)i=1..k => (xi)i=1..k+1 && xk+1 = T + + //pre createM + delete T (xi)i=1..k + //post (xi)i=1..k-1 && isIn T Menge = False + + //pre createM + isIn T Menge + //post return ( Existiert ein (xi)i=1..k | xi == T ) + + + + +2c. Modellierende Spezifikation einer Schlange (Model,Spezifikation,Invariante) +--------------------------------------------------------------------------------------------------- + +Model : Queue = e | (xi)i=1..n , type xi = T , n <- N + +Invariante : n < N + +Spezifikation : createQ = e + //post returns e + + isEmpty (xi)i=1..k + //post if Queue == e return True else return False + + //pre createQ && k < N + enqueue T Queue + //post enqueue T (xi)i=1..k => (xi)i=1..k+1 && xk+1 = T + + //pre !isEmpty + dequeue Queue + //post dequeue (xi)i=1..k => (xi)i=2..k (size = size-1) + + //pre !isEmpty + first Queue + //post first (xi)i=1..k => return x1 + + + + +3c. Modellierende Spezifikation eines Stacks (Model,Spezifikation,Invariante) +--------------------------------------------------------------------------------------------------- + +Model : Stack = e | (xi)i=1..n , type xi = T , n <- N + +Invariante : n < N + +Spezifikation : createS = e + + //pre createS + isEmpty Stack + //post Stack == e True else return False + + //pre createS && k < N + push T (xi)i=1..k-1 + //post push T (xi)i=1..k-1 =>(xi)i=1..k && xk = T + + //pre !isEmpty + pop (xi)i=1..n + //pre (xi)i=1..n-1 + + //pre !isEmpty + top (xi)i=1..n + //post returns xn + + //pre createS + size (xi)i=1..n-1 + //post returns n-1 + + +4c. Algebraische Spezifikation eines Baumes (Model,Spezifikation,Invariante) +-------------------------------------------------------------------------------------------------- + + folgt \ No newline at end of file diff --git a/www/uni/ws03/alp/newpage.php b/www/uni/ws03/alp/newpage.php new file mode 100644 index 0000000..1d92653 --- /dev/null +++ b/www/uni/ws03/alp/newpage.php @@ -0,0 +1,17 @@ + + + + + + Neue Seite + + + + zurück zur Liste + +

+ Das ALP-Vordiplom-Projekt wurde erfolgreich abgeschlossen, die Seiten können nicht mehr verändert werden. +

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/nichtplanarergraph.gif b/www/uni/ws03/alp/nichtplanarergraph.gif new file mode 100644 index 0000000..7cd2cf6 Binary files /dev/null and b/www/uni/ws03/alp/nichtplanarergraph.gif differ diff --git a/www/uni/ws03/alp/o-notation.php b/www/uni/ws03/alp/o-notation.php new file mode 100644 index 0000000..c776968 --- /dev/null +++ b/www/uni/ws03/alp/o-notation.php @@ -0,0 +1,160 @@ + + + + + + Laufzeit und O-Notation + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

O-Notation, Laufzeiten

+ +

Laufzeit

+Man kann den Zeitaufwand von Algorithmen nicht eindeutig bestimmen. Viel zu viele Faktoren (Hardware, parallel laufende Programme, Eingabereihenfolge, ...) spielen eine Rolle, so dass man mit normalen Mitteln niemals eine genaue und allgemeine Aussgae über die benötigte Zeit machen kann.
+Es werden nun nicht mehr die benötigten Zeiten, sondern die benötigten "greifbaren" Schritte bei einer bestimmten Eingabelänge n beschrieben.
+Somit können Programme in Klassen (konstant, logarithmisch, lineas, polynomial, exponentiell, u.a.) eingeteilt werden.

+ +

O-Notation

+Möchten wir nun wissen, ob eine Laufzeit in eine Klasse gehört, so müssen wir ihr asymptotisches Wachstum beobachten.
+Es gibt ein n0 ≠ ∞, ab dem das Wachstumsverhalten vergleichbar ist mit der repräsentierenden Funktion der Klasse.

+Wir können nun die Laufzeit folgendermaßen einteilen: + + + + + + + + + + + + + + + + +
Worst Case + f(n) = Ο(g(n))
+ ∃n0 ∈ N ∧ c > 0, ∀n ≥ n0: |f(n)| ≤ c * g(n) +
limn→∞ f(n)/g(n) = 0 oder c
Best Case + f(n) = Ω(g(n)) Omega
+ ∃n0 ∈ N ∧ c > 0, ∀n ≥ n0: |f(n)| ≥ c * g(n) +
limn→∞ f(n)/g(n) → ∞ oder c
Best Case und Worst Case + f(n) = Θ(g(n)) Theta
+ ∃n0 ∈ N ∧ c > 0, ∀n ≥ n0: f(n) = O(g(n)) ∧ f(n) = Ω(g(n)) +
limn→∞ f(n)/g(n) = c
+
+ +Die O-Notation ist eine Abschätzung der Laufzeit bei unendlich großen Eingaben. Da jedoch keine Eingabe unendlich ist, sollte man bei der Wahl von Algorithmen, die realistische Eingabelänge einbeziehen.
+ + + + + + + + + + + +
Beispiel: f(n) = 1020n= O(n)
g(n) = 10-20n2= O(n2)
+Obwohl O(n) < O(n2), ist f(n) > g(n) bei kleinen n.

+ +

Anwendung

+Es gibt folgenden Regeln zur Bestimmung der Klasse: + + + + + + + + + + + + + + + + + + + + + + + + + +
Additionf(n) = n + 3⇒ f(n) = Θ(n)Konstante Summanden werden vernachlässigt
f(n) = n2 + 3n⇒ f(n) = Θ(n2)Es zählt der Summand mit dem stärkeren Wachstum
Multipikationf(n) = 3n⇒ f(n) = Θ(n)Konstante Faktoren werden vernachlässigt
f(n) = n2 * 3n⇒ f(n) = Θ(n3)Es zählt die Summe der Exponenten
+
+ +Wachstum im Vergleich: 1 < log n < √n < n < n(log n)2 < n2 < na < an +

+ +Umformen der Basen von Logerithmen: logcb = logab / logac + +

+
+ O - Notation

+ + Definition: f(n) und g(n) seien Funktionen von den natürlichen zu den reellen Zahlen.
+ + f(n) = Ο(g(n)) ⇔ ∃n0 ∈ N ∧ c > 0, ∀n ≥ n0: |f(n)| ≤ c * g(n)
+ f(n) = Ω(g(n)) ⇔ ∃n0 ∈ N ∧ c > 0, ∀n ≥ n0: |f(n)| ≥ c * g(n)
+ f(n) = Θ(g(n)) ⇔ ∃n0 ∈ N ∧ c > 0, ∀n ≥ n0: f(n) = O(g(n)) ∧ f(n) = Ω(f(n)) +
+
+
+ + Wichtige Laufzeiten
+
    +
      Tiefensuche O(V+E)
    +
      Breitensuche O(V+E)
    +
      Dijktra O(V+E)
    +
+ + + + + + + + + + + + + + + + + + + + + + +
best case middle case worst case
Prim O(E) - - - O(V2)
Quicksort O(n logn) O(n logn) O(n2)
Bubblesort, Insertsort O(n2) O(n2) O(n2)
Mergesort O(n logn) O(n logn) O(n logn)
+ + +

Links

+ Merkblatt der O-Notation von Augustin
+ O-Notation: Definition auf der Sortieralgorithmen-Seite
+Laufzeit Fibonacci
+Laufzeit reverse + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/patricia1.gif b/www/uni/ws03/alp/patricia1.gif new file mode 100644 index 0000000..248dc1a Binary files /dev/null and b/www/uni/ws03/alp/patricia1.gif differ diff --git a/www/uni/ws03/alp/patricia2.gif b/www/uni/ws03/alp/patricia2.gif new file mode 100644 index 0000000..05eb733 Binary files /dev/null and b/www/uni/ws03/alp/patricia2.gif differ diff --git a/www/uni/ws03/alp/planarergraph.gif b/www/uni/ws03/alp/planarergraph.gif new file mode 100644 index 0000000..ad3e2c5 Binary files /dev/null and b/www/uni/ws03/alp/planarergraph.gif differ diff --git a/www/uni/ws03/alp/prepost1.gif b/www/uni/ws03/alp/prepost1.gif new file mode 100644 index 0000000..10d6a14 Binary files /dev/null and b/www/uni/ws03/alp/prepost1.gif differ diff --git a/www/uni/ws03/alp/prepost2.gif b/www/uni/ws03/alp/prepost2.gif new file mode 100644 index 0000000..cf64a15 Binary files /dev/null and b/www/uni/ws03/alp/prepost2.gif differ diff --git a/www/uni/ws03/alp/prepost3.gif b/www/uni/ws03/alp/prepost3.gif new file mode 100644 index 0000000..525318c Binary files /dev/null and b/www/uni/ws03/alp/prepost3.gif differ diff --git a/www/uni/ws03/alp/prf.php b/www/uni/ws03/alp/prf.php new file mode 100644 index 0000000..02c295f --- /dev/null +++ b/www/uni/ws03/alp/prf.php @@ -0,0 +1,89 @@ + + + + + + Primitiv-rekursive Funktionen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Primitv rekursive Funktion

+ + Jede berechenbare Funktion kann durch eine primitiv rekursive Funtkion mit Hilfe von einfachen Grundfunktionen dargestellt werden.

+ + + + + +
Basisfunktionen + clr () = 0
+ suc (n) = n+1
+ p (1, x1, x2, ... , xn) = x1
+ p (i, x1, x2, ... , xn) = p (i-1, x2, x3, ... , xn) +
+
+ Zu einer k-stelligen Funktion ψ und einer (k+2)-stelligen Funktion χ ist eine (k+1)-stellige Funktion φ definiert.
+ φ phi, ψ psi, χ chi ∈ PRF

+ + φ (0, x1, x2, ... , xn) = ψ (x1, x2, ... , xn)
+ φ (y+1, x1, x2, ... , xn) = χ (φ (y, x1, x2, ... , xn), y, x1, x2, ... , xn) + +

+ + Verdeutlichung am Beispiel: Addieren und multiplizieren von zwei Zahlen
+ + + + + + + + + + + + + + + + +
+ Aufstellen der Gleichungen → + + Einfache Lösungen → + + Gleichungen mit ψ und χ +
+ add (0, m)
+ add (n+1, m) +
+ = m
+ = suc (add (n, m)) +
+ = p1 (m)
+ = suc (p1) (add (n, m), n, m)) +
+ mul (0, m)
+ mul (n+1, m) +
+ = 0
+ = m + mul (n, m) +
+ = clr (m)
+ = add (p1, p3) (mult (n, m), n, m) +
+ + + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/rekursion.php b/www/uni/ws03/alp/rekursion.php new file mode 100644 index 0000000..d59fbb9 --- /dev/null +++ b/www/uni/ws03/alp/rekursion.php @@ -0,0 +1,85 @@ + + + + + + Rekursion + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Rekursion

+

+ (Unter-)Programme sind rekursiv, wenn sie sich selbst direkt oder indirekt aufrufen. Eine Rekursion läuft, bis sie durch einen Rekursionsanker, eine Abbruchbedingung für eine Rekursion endet. Man unterscheidet zwischen linearen und nicht linearen Rekursionen. +

+ +

Lineare Rekursion

+

+ Eine Funktion ist linear rekursiv, wenn nur ein rekursiver Aufruf erfolgt. Für die Fakultätsfunktion könnte das so aussehen:
+

+      fakul 0 = 1
+      fakul n = n(fakul n-1)
+    
+ Der Computer würde bei Aufruf fakul 3 im ersten Schritt alle Aufrufe auf den Stack legen: +
+      1. fakul 3 = 3 *
+      2.              ( 2 *
+      4.                   ( 1 *
+      5.                        ( 1 ) ) )
+    
+ und nach erreichen des Rekursionsankers fakul 0 = 1 alle auf dem Stack abgelegten Zahlen aufmultiplizieren: +
+      5.                        ( 1 ) ) )
+      6.                   ( 1 * 
+      7.              ( 2 *
+      8.           3 *
+      9.       6 =
+    
+ Die Rekursion wird also einmal hin und zurück durchlaufen.
+
+ Lineare Rekursionen, die nicht noch einmal "zurücklaufen", nennt man endrekursiv (tail recursion). Man unterscheidet also zwischen endrekursiven und nicht-endrekursiven linearen Rekursionen. Die Fakultätsfunktion lässt sich auch endrekursiv implementieren: +
+      fakul 0 a = a
+      fakul n a = fakul (n-1) (a*n)
+    
+ Die Variable a läuft bei der Rekursion mit und summiert das Endergebnis auf, so dass beim erreichen des Rekursionsankers das Endergebnis bereits feststeht (Akkumulatortechnik). Diese Variante braucht kaum Speicher, das der Stack nicht mit den rekursiven Aufrufen gefüllt wird. +

+ +

Nicht-lineare Rekursion

+

+ Eine rekursive Funktion ist nicht-linear rekursiv, wenn die Ausführung zu mehr als einem rekursiven Aufruf führt. + +

+ Ein Beispiel für eine nicht-lineare Rekursion ist die Fibonaccifunktion in dieser Form: +

+        fibo 0 = 0
+        fibo 1 = 1
+        fibo n = fibo (n-1) + fibo (n-2)
+      
+ Bei der Ausführung spaltet sich die Auswertung der rekursiven Aufrufe logisch in einen Baum: +

+ +

+

+

+ +

Entrekursivierung

+

+ Endrekursive Algorithmen können entrekursiviert werden. Dazu überführt man den Algorithmus in eine Schleife.
+ Lineare Algorithmen müssen erst mittels Akkumulatortechnik in eine endrekursive Form überführt werden, um sie entrekursivieren zu können. Nicht-lineare Rekursionen können nicht einfach durch Anwendung eines Schemas entrekursivieren. +

+ +

Links

+ Merkblatt zu Rekursion von Augustin + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/rotation1.gif b/www/uni/ws03/alp/rotation1.gif new file mode 100644 index 0000000..6837bd1 Binary files /dev/null and b/www/uni/ws03/alp/rotation1.gif differ diff --git a/www/uni/ws03/alp/rotation2.gif b/www/uni/ws03/alp/rotation2.gif new file mode 100644 index 0000000..c39f641 Binary files /dev/null and b/www/uni/ws03/alp/rotation2.gif differ diff --git a/www/uni/ws03/alp/rotschwarz-aufgabe.gif b/www/uni/ws03/alp/rotschwarz-aufgabe.gif new file mode 100644 index 0000000..e27ca85 Binary files /dev/null and b/www/uni/ws03/alp/rotschwarz-aufgabe.gif differ diff --git a/www/uni/ws03/alp/rotschwarz1.gif b/www/uni/ws03/alp/rotschwarz1.gif new file mode 100644 index 0000000..4c3062e Binary files /dev/null and b/www/uni/ws03/alp/rotschwarz1.gif differ diff --git a/www/uni/ws03/alp/rotschwarz2.gif b/www/uni/ws03/alp/rotschwarz2.gif new file mode 100644 index 0000000..038402c Binary files /dev/null and b/www/uni/ws03/alp/rotschwarz2.gif differ diff --git a/www/uni/ws03/alp/rotschwarz3.gif b/www/uni/ws03/alp/rotschwarz3.gif new file mode 100644 index 0000000..ed97b21 Binary files /dev/null and b/www/uni/ws03/alp/rotschwarz3.gif differ diff --git a/www/uni/ws03/alp/savefile.php b/www/uni/ws03/alp/savefile.php new file mode 100644 index 0000000..6c7af8a --- /dev/null +++ b/www/uni/ws03/alp/savefile.php @@ -0,0 +1,17 @@ +'; + echo ""; + echo ""; + echo ''; + echo ''; + echo 'Datei speichern'; + echo ""; + echo ""; + echo 'zurück zur Liste'; + echo "

Datei gespeichert.

"; + echo ""; + echo ""; +?> \ No newline at end of file diff --git a/www/uni/ws03/alp/schweppeProtokollFragen.php b/www/uni/ws03/alp/schweppeProtokollFragen.php new file mode 100644 index 0000000..be89c0a --- /dev/null +++ b/www/uni/ws03/alp/schweppeProtokollFragen.php @@ -0,0 +1,438 @@ + + + + + + Prüfer-Profil: Fragen und Antworten + + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Schweppe-Profil: Fragen und Antworten

+

Bäume und Graphen

+

+

    +
  1. +

    Was für Arten von Bäumen kennen Sie?

    +

    + Binärbäume, n-äre Bäume, AVL-Bäume, Rot-Schwarz-Bäume, B-Bäume (Mehrwegbäume) +

    +
  2. +
  3. +

    Wie löscht man aus binären Bäumen?

    +

    + Idee: Man ersetzt mit dem größten (rechtesten) Element aus dem linken Teilbaum (oder umgekehrt).
    + Lässt sich die Idee nicht sauber implementieren, kann es besser sein, den rechten Teilbaum einfach an das größte Element aus dem linken anzuhängen und dann den Baum wieder auszugleichen. +

    +
  4. +
  5. +

    Implementieren Sie einen binären Baum in Haskell

    +

    +

    + data BinTree = E | N BinTree Int BinTree deriving Eq
    +
    + insertVal :: BinTree -> Int -> BinTree
    + insertVal E i = N E i E
    + insertVal (N l v r) i
    +   | v == i = N l v r
    +   | v < i = N l v (insertVal r i)
    +   | otherwise = N (insertVal l i) v r
    +
    + delete :: BinTree -> Int -> BinTree (saubere Implementierung)
    + delete E i = E
    + delete (N l v r) i
    +   | v < i = N l v (delete r i)
    +   | v > i = N (delete l i) v r
    +   | l == E = r
    +   | r == E = l
    +   | otherwise = N (delete l (greatestElement l)) (greatestElement l) r
    +  where greatestElement :: BinTree -> Int
    +        greatestElement (N l v r)
    +         | r == E = v
    +         | otherwise = greatestElement r
    +
    + delete :: BinTree -> Int -> BinTree (naive Implementierung)
    + delete E i = E
    + delete (N l v r) i
    +   | v == i = insertLeftTree r l
    +   | v < i = N l v (delete r i)
    +   | otherwise = N (delete l i) v r
    +  where insertLeftTree :: BinTree -> BinTree -> BinTree
    +        insertLeftTree E t = t
    +        insertLeftTree (N l v r) t = N (insertLeftTree l t) v r
    +
    + contains :: BinTree -> Int -> Bool
    + contains E i = False
    + contains (N l v r) i
    +   | v == i = True
    +   | v < i = contains r i
    +   | otherwise = contains l i
    +
    + showT :: BinTree -> String
    + showT E = "*"
    + showT (N l v r) = "[" ++ showT l ++ "]" ++ " " ++ show v ++" " ++ "[" ++ showT r ++ "]"
    +
    + listTree :: BinTree -> [Int]
    + listTree E = []
    + listTree (N l v r) = v:(listTree l ++ listTree r)
    +
    +

    +
  6. +

    Welche durchschnittliche Höhe hat ein Binärbaum?

    +

    + Höhe ist logarithmisch, aber warum? → s. gprot18 + Die mittlere Weglänge im Baum ist die Summe der Weglängen zu den Knoten durch die Anzahl der Knoten.
    + Die Höhe eines vollständigen binären Baumes wächst nur logarithmisch mit der Knotenzahl. +

    +
  7. +
  8. +

    Implementieren Sie einen Binärbaum in Java (ADT)

    +

    +

    + class Node {
    +
    +   protected Comparable value;
    +   protected Node left;
    +   protected Node right;
    +
    +   public Node(Comparable value, Node left, Node right) {
    +     this.value = value;
    +     this.left = left;
    +     this.right = right;
    +   }
    + }
    +
    + public class BinTree implements BinaryTree {
    +
    +   private Node root;
    +
    +   public BinTree(Node root) {
    +     this.root = root;
    +   }
    +
    +   public void insert(Comparable value) {
    +
    +     Node temp = root;
    +     Node parent = null;
    +
    +     while (temp != null) {
    +       parent = temp;
    +       if (value.compareTo(temp.value) < 0) {
    +         temp = temp.left;
    +       }
    +       else {
    +         temp = temp.right;
    +       }
    +     }
    +
    +     if (parent != null) {
    +       if (value.compareTo(parent.value) > 0) {
    +         parent.right = new Node(value, null, null);
    +       }
    +       else {
    +         parent.left = new Node(value, null, null);
    +       }
    +     }
    +   }
    + } +
    +

    +
  9. +
  10. +

    Wann ist ein Binärbaum entartet?

    +

    +

    +
  11. +
  12. +

    Was ist ein AVL-Baum, welche Vor-und Nachteile hat er gegenüber einem Binärbaum?

    +

    +

    +
  13. +
  14. +

    Was ist ein B-Baum?

    +

    + B-Bäume sind Mehrweg-Suchbäume. Alle Blätter eines B-Baums haben die gleiche Tiefe. (Baum ist vollständig.)
    + 2-3-Bäume bzw. 2-4-Bäume sind B-Bäume der Ordnung 3 bzw. 4. Die 2 gibt die minimale Anzahl der Kinder pro Knoten an. +

    +
  15. +
  16. +

    Sind B-Bäume binär?

    +

    + Nein, es handelt sich ja um Mehrwegbäume. Ein B-Baum kann aber den Aufbau eines Binärbaums haben → jeder Knoten hat höchstens zwei Kinder. +

    +
  17. +
  18. +

    Warum ist ein B-Baum ausgeglichen?

    +

    +

    +
  19. +
  20. +

    Was ist ein Rot-Schwarz-Baum?

    +

    +

    +
  21. +
  22. +

    Was sind die zwei wichtigsten Möglichkeiten, um Graphen zu speichern?

    +

    + Adjazenzliste (Knotenliste), Adjazenzmatrix +

    +
  23. +
+

+ + +

Abstrakte Datentypen & Programmierung

+

+

    +
  1. +

    Was sind abstrakte Datentypen, worin liegen ihre Vorteile

    +

    + Abstrakte Datentypen beschreiben Wertemengen ausschließlich durch die darauf zulässigen Operationen.
    + Datenabstraktion ist die Anwendung des Geheimnisprinzips auf Datenstrukturen. Bestimmte Programmteile sind für den Benutzer nicht sichtbar, bzw. der Zugriff nicht gestattet. Man abstrahiert von der Implementierung und charakterisiert die Datenstruktur über die Operationen auf ihr. (Der Zugriff erfolgt dann nur noch über eine Schittstelle.) +

    +
  2. +
  3. +

    Was ist Polymorphie?

    +

    + Man unterscheidet Universelle Polymorphie (mit Inklusions- und Parametrischer Polymorpie) und Ad-hoc-Polymorphie (→ gleiche Funktionsnamen mit verschiedenen formalen Parametern). +

    +
  4. +
  5. +

    Stellen Klassen in Java ADTs dar?

    +

    + Können, müssen aber nicht. (→ s. 1.) +

    +
  6. +
  7. +

    Was ist Hashing?

    +

    +

    +
  8. +
  9. +

    Implementieren Sie eine Menge mit Hashes und offener Adressierung

    +

    +

    +
  10. +
  11. +

    Was für Parameterübergabe-Mechanismen gibt es?

    +

    + Call-by-value, Call-by-reference, Call-by-result (=Call-by-value-return), Call-by-name. (+Erklärung) +

    +
  12. +
  13. +

    Welchen Parameterübergabe-Mechanismus nutzt Java?

    +

    + Call-by-value für primitive Datentypen, Call-by-reference für Objekte. +

    +
  14. +
  15. +

    Was ist lazy evaluation?

    +

    + Bei der verzögerten Auswertung wird ein Ausdruck erst dann durch seinen Wert ersetzt, wenn er gebraucht wird. Dadurch lassen sich z.B. in Haskell unendlich große Datenstrukturen definieren (liste = 'a':liste). → s. gprot40 +

    +
  16. +
  17. +

    Was ist late binding?

    +

    + Dynamische Typzuordnung zur Laufzeit (→ Polymorphie) +

    +
  18. +
  19. +

    Was ist das Factory Pattern?

    +

    + Ein design pattern zur Entkoppelung von der Implementierung - nur die Funktionalität ist wichtig. +

    +
  20. +
  21. +

    Implemetieren Sie die Fakultätsfunktion in Haskell

    +

    +

    + fak 0 = 1
    + fak x = x * fak(x-1)
    +
    +

    +
  22. +
  23. +

    Wie kann man die Fakultätsfunktion noch einfacher implementieren? (→ Endrekursion)

    +

    +

    + fak2 x = faka x 1
    +  where faka 0 a = a
    +        faka x a = faka (x-1) (a*x) +
    +

    +
  24. +
  25. +

    Wie kann man diese Funktion entrekursieren?

    +

    +

    + int fak(int x) {
    +   int akk = 1;
    +   while (x > 1) {
    +     akk = akk * x;
    +     x--;
    +   }
    + } +
    +

    +
  26. +
+

+ + +

Laufzeit

+

+

    +
  1. +

    Was ist Laufzeit?

    +

    +

    +
  2. +
  3. +

    Definition der Laufzeit?

    +

    +

    +
  4. +
  5. +

    Warum ist die Laufzeit von Quicksort im schlechtesten Fall O(n²)?

    +

    +

    +
  6. +
  7. +

    Was besagt die Church'sche These?

    +

    +

    +
  8. +
+

+ + +

Algorithmen

+

+

    +
  1. +

    Was ist ein Greedy-Algorithmus?

    +

    + Das Prinzip des Greedy-Algorithmus ist es, in jedem Teilschritt so viel wie möglich zu erreichen (lokales Optimum). Unter Umständen wird dadurch jedoch das globale Optimum nicht erreicht.(Bsp.: Wechselgeld) +

    +
  2. +
  3. +

    Was ist der Dijkstra-Algorithmus?

    +

    + Algorithmus zum finden kürzester Wege in Graphen. (+Erklärung) +

    +
  4. +
  5. +

    Was ist der Kruskal-Algorithmus?

    +

    + Algorithmus zum finden des kleinsten aufspannenden Baums. (+Erklärung) +

    +
  6. +
  7. +

    Was ist der Algorithmus von Prim?

    +

    + Auch ein Algorithmus zum finden des kleinsten aufspannenden Baums. (+Erklärung) +

    +
  8. +
  9. +

    Was ist der Huffman-Algorithmus?

    +

    + Ein Algorithmus zum finden einer optimalen Binärcodierung von Zeichen. Erzeugt wird ein sog. kommafreier Präfixcode. (+Erklärung) +

    +
  10. +
+

+ + +

Rekursion

+

+

    +
  1. +

    Welche Arten von Rekursion gibt es?

    +

    + Linare Rekursion und nicht lineare Rekursion. Bei der linearen Rekursion unterscheidet man noch endrekursive und nicht endrekursive Funktionen. +

    +
  2. +
+

+ + +

Spezifikation

+

+

    +
  1. +

    Was ist eine Spezifikation und wie kann man Spezifizieren?

    +

    + Modellierende / algebraische Spezifikation +

    +
  2. +
  3. +

    Was ist der Nachteil der modellierenden gegenüber der axiomatischen Spezifikation?

    +

    + Man legt sich bereits auf eine Implementierung fest. +

    +
  4. +
  5. +

    Spezifizieren Sie einen Stack (algebraisch & modellierend)

    +

    +

    +
  6. +
  7. +

    Spezifizieren Sie eine Schlange algebraisch

    +

    +

    +
  8. +
  9. +

    Wie kann man die Korrektheit eines imperativen Programms (Java) beweisen?

    +

    + Verifikation mit Hoare Kalkül → Vorbedingung {P} wird in Nachbedingung {Q} überführt.
    + {P} S {Q} mit Zuweisungsaxiom {P}x = e{P[e/x]} → alles was vorher für e galt, gilt jetzt für x +

    +
  10. +
  11. +

    Ist der Algorithmus dann korrekt?

    +

    + ...partielle Korrektheit nachgewiesen, totale Korrektheit mit Terminierungsfunktion... +

    +
  12. +
  13. +

    Was kann man nicht automatisch beweisen?

    +

    + Die Invariante +

    +
  14. +
+

+ + +

Sonstiges

+

+

    +
  1. +

    +

    +

    +
  2. +
+

+ + + + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/schweppeProtokollFragen_ALT.php b/www/uni/ws03/alp/schweppeProtokollFragen_ALT.php new file mode 100644 index 0000000..94d799c --- /dev/null +++ b/www/uni/ws03/alp/schweppeProtokollFragen_ALT.php @@ -0,0 +1,436 @@ + + + + + + Prüfer-Profil: Fragen und Antworten + + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Schweppe-Profil: Fragen und Antworten

+

Bäume und Graphen

+

+

    +
  1. +

    Was für Arten von Bäumen kennen Sie?

    +

    + Binärbäume, n-äre Bäume, AVL-Bäume, Rot-Schwarz-Bäume, B-Bäume (Mehrwegbäume) +

    +
  2. +
  3. +

    Wie löscht man aus binären Bäumen?

    +

    + Idee: Man ersetzt mit dem größten (rechtesten) Element aus dem linken Teilbaum (oder umgekehrt).
    + Lässt sich die Idee nicht sauber implementieren, kann es besser sein, den rechten Teilbaum einfach an das größte Element aus dem linken anzuhängen und dann den Baum wieder auszugleichen. +

    +
  4. +
  5. +

    Implementieren Sie einen binären Baum in Haskell

    +

    +

    + data BinTree = E | N BinTree Int BinTree deriving Eq
    +
    + insertVal :: BinTree -> Int -> BinTree
    + insertVal E i = N E i E
    + insertVal (N l v r) i
    +   | v == i = N l v r
    +   | v < i = N l v (insertVal r i)
    +   | otherwise = N (insertVal l i) v r
    +
    + delete :: BinTree -> Int -> BinTree (saubere Implementierung)
    + delete E i = E
    + delete (N l v r) i
    +   | v < i = N l v (delete r i)
    +   | v > i = N (delete l i) v r
    +   | l == E = r
    +   | r == E = l
    +   | otherwise = N (delete l (greatestElement l)) (greatestElement l) r
    +  where greatestElement :: BinTree -> Int
    +        greatestElement (N l v r)
    +         | r == E = v
    +         | otherwise = greatestElement r
    +
    + delete :: BinTree -> Int -> BinTree (naive Implementierung)
    + delete E i = E
    + delete (N l v r) i
    +   | v == i = insertLeftTree r l
    +   | v < i = N l v (delete r i)
    +   | otherwise = N (delete l i) v r
    +  where insertLeftTree :: BinTree -> BinTree -> BinTree
    +        insertLeftTree E t = t
    +        insertLeftTree (N l v r) t = N (insertLeftTree l t) v r
    +
    + contains :: BinTree -> Int -> Bool
    + contains E i = False
    + contains (N l v r) i
    +   | v == i = True
    +   | v < i = contains r i
    +   | otherwise = contains l i
    +
    + showT :: BinTree -> String
    + showT E = "*"
    + showT (N l v r) = "[" ++ showT l ++ "]" ++ " " ++ show v ++" " ++ "[" ++ showT r ++ "]"
    +
    + listTree :: BinTree -> [Int]
    + listTree E = []
    + listTree (N l v r) = v:(listTree l ++ listTree r)
    +
    +

    +
  6. +

    Welche durchschnittliche Höhe hat ein Binärbaum?

    +

    + Höhe ist logarithmisch, aber warum? → s. gprot18 +

    +
  7. +
  8. +

    Implementieren Sie einen Binärbaum in Java (ADT)

    +

    +

    + class Node {
    +
    +   protected Comparable value;
    +   protected Node left;
    +   protected Node right;
    +
    +   public Node(Comparable value, Node left, Node right) {
    +     this.value = value;
    +     this.left = left;
    +     this.right = right;
    +   }
    + }
    +
    + public class BinTree implements BinaryTree {
    +
    +   private Node root;
    +
    +   public BinTree(Node root) {
    +     this.root = root;
    +   }
    +
    +   public void insert(Comparable value) {
    +
    +     Node temp = root;
    +     Node parent = null;
    +
    +     while (temp != null) {
    +       parent = temp;
    +       if (value.compareTo(temp.value) < 0) {
    +         temp = temp.left;
    +       }
    +       else {
    +         temp = temp.right;
    +       }
    +     }
    +
    +     if (parent != null) {
    +       if (value.compareTo(parent.value) > 0) {
    +         parent.right = new Node(value, null, null);
    +       }
    +       else {
    +         parent.left = new Node(value, null, null);
    +       }
    +     }
    +   }
    + } +
    +

    +
  9. +
  10. +

    Wann ist ein Binärbaum entartet?

    +

    +

    +
  11. +
  12. +

    Was ist ein AVL-Baum, welche Vor-und Nachteile hat er gegenüber einem Binärbaum?

    +

    +

    +
  13. +
  14. +

    Was ist ein B-Baum?

    +

    + B-Bäume sind Mehrweg-Suchbäume. Alle Blätter eines B-Baums haben die gleiche Tiefe. (Baum ist vollständig.)
    + 2-3-Bäume bzw. 2-4-Bäume sind B-Bäume der Ordnung 3 bzw. 4. Die 2 gibt die minimale Anzahl der Kinder pro Knoten an. +

    +
  15. +
  16. +

    Sind B-Bäume binär?

    +

    + Nein, es handelt sich ja um Mehrwegbäume. Ein B-Baum kann aber den Aufbau eines Binärbaums haben → jeder Knoten hat höchstens zwei Kinder. +

    +
  17. +
  18. +

    Warum ist ein B-Baum ausgeglichen?

    +

    +

    +
  19. +
  20. +

    Was ist ein Rot-Schwarz-Baum?

    +

    +

    +
  21. +
  22. +

    Was sind die zwei wichtigsten Möglichkeiten, um Graphen zu speichern?

    +

    + Adjazenzliste (Knotenliste), Adjazenzmatrix +

    +
  23. +
+

+ + +

Abstrakte Datentypen & Programmierung

+

+

    +
  1. +

    Was sind abstrakte Datentypen, worin liegen ihre Vorteile

    +

    + Abstrakte Datentypen beschreiben Wertemengen ausschließlich durch die darauf zulässigen Operationen.
    + Datenabstraktion ist die Anwendung des Geheimnisprinzips auf Datenstrukturen. Bestimmte Programmteile sind für den Benutzer nicht sichtbar, bzw. der Zugriff nicht gestattet. Man abstrahiert von der Implementierung und charakterisiert die Datenstruktur über die Operationen auf ihr. (Der Zugriff erfolgt dann nur noch über eine Schittstelle.) +

    +
  2. +
  3. +

    Was ist Polymorphie?

    +

    + Man unterscheidet Universelle Polymorphie (mit Inklusions- und Parametrischer Polymorpie) und Ad-hoc-Polymorphie (→ gleiche Funktionsnamen mit verschiedenen formalen Parametern). +

    +
  4. +
  5. +

    Stellen Klassen in Java ADTs dar?

    +

    + Können, müssen aber nicht. (→ s. 1.) +

    +
  6. +
  7. +

    Was ist Hashing?

    +

    +

    +
  8. +
  9. +

    Implementieren Sie eine Menge mit Hashes und offener Adressierung

    +

    +

    +
  10. +
  11. +

    Was für Parameterübergabe-Mechanismen gibt es?

    +

    + Call-by-value, Call-by-reference, Call-by-result (=Call-by-value-return), Call-by-name. (+Erklärung) +

    +
  12. +
  13. +

    Welchen Parameterübergabe-Mechanismus nutzt Java?

    +

    + Call-by-value für primitive Datentypen, Call-by-reference für Objekte. +

    +
  14. +
  15. +

    Was ist lazy evaluation?

    +

    + Bei der verzögerten Auswertung wird ein Ausdruck erst dann durch seinen Wert ersetzt, wenn er gebraucht wird. Dadurch lassen sich z.B. in Haskell unendlich große Datenstrukturen definieren (liste = 'a':liste). → s. gprot40 +

    +
  16. +
  17. +

    Was ist late binding?

    +

    + Dynamische Typzuordnung zur Laufzeit (→ Polymorphie) +

    +
  18. +
  19. +

    Was ist das Factory Pattern?

    +

    + Ein design pattern zur Entkoppelung von der Implementierung - nur die Funktionalität ist wichtig. +

    +
  20. +
  21. +

    Implemetieren Sie die Fakultätsfunktion in Haskell

    +

    +

    + fak 0 = 1
    + fak x = x * fak(x-1)
    +
    +

    +
  22. +
  23. +

    Wie kann man die Fakultätsfunktion noch einfacher implementieren? (→ Endrekursion)

    +

    +

    + fak2 x = faka x 1
    +  where faka 0 a = a
    +        faka x a = faka (x-1) (a*x) +
    +

    +
  24. +
  25. +

    Wie kann man diese Funktion entrekursieren?

    +

    +

    + int fak(int x) {
    +   int akk = 1;
    +   while (x > 1) {
    +     akk = akk * x;
    +     x--;
    +   }
    + } +
    +

    +
  26. +
+

+ + +

Laufzeit

+

+

    +
  1. +

    Was ist Laufzeit?

    +

    +

    +
  2. +
  3. +

    Definition der Laufzeit?

    +

    +

    +
  4. +
  5. +

    Warum ist die Laufzeit von Quicksort im schlechtesten Fall O(n²)?

    +

    +

    +
  6. +
  7. +

    Was besagt die Church'sche These?

    +

    +

    +
  8. +
+

+ + +

Algorithmen

+

+

    +
  1. +

    Was ist ein Greedy-Algorithmus?

    +

    + Das Prinzip des Greedy-Algorithmus ist es, in jedem Teilschritt so viel wie möglich zu erreichen (lokales Optimum). Unter Umständen wird dadurch jedoch das globale Optimum nicht erreicht.(Bsp.: Wechselgeld) +

    +
  2. +
  3. +

    Was ist der Dijkstra-Algorithmus?

    +

    + Algorithmus zum finden kürzester Wege in Graphen. (+Erklärung) +

    +
  4. +
  5. +

    Was ist der Kruskal-Algorithmus?

    +

    + Algorithmus zum finden des kleinsten aufspannenden Baums. (+Erklärung) +

    +
  6. +
  7. +

    Was ist der Algorithmus von Prim?

    +

    + Auch ein Algorithmus zum finden des kleinsten aufspannenden Baums. (+Erklärung) +

    +
  8. +
  9. +

    Was ist der Huffman-Algorithmus?

    +

    + Ein Algorithmus zum finden einer optimalen Binärcodierung von Zeichen. Erzeugt wird ein sog. kommafreier Präfixcode. (+Erklärung) +

    +
  10. +
+

+ + +

Rekursion

+

+

    +
  1. +

    Welche Arten von Rekursion gibt es?

    +

    + Linare Rekursion und nicht lineare Rekursion. Bei der linearen Rekursion unterscheidet man noch endrekursive und nicht endrekursive Funktionen. +

    +
  2. +
+

+ + +

Spezifikation

+

+

    +
  1. +

    Was ist eine Spezifikation und wie kann man Spezifizieren?

    +

    + Modellierende / algebraische Spezifikation +

    +
  2. +
  3. +

    Was ist der Nachteil der modellierenden gegenüber der axiomatischen Spezifikation?

    +

    + Man legt sich bereits auf eine Implementierung fest. +

    +
  4. +
  5. +

    Spezifizieren Sie einen Stack (algebraisch & modellierend)

    +

    +

    +
  6. +
  7. +

    Spezifizieren Sie eine Schlange algebraisch

    +

    +

    +
  8. +
  9. +

    Wie kann man die Korrektheit eines imperativen Programms (Java) beweisen?

    +

    + Verifikation mit Hoare Kalkül → Vorbedingung {P} wird in Nachbedingung {Q} überführt.
    + {P} S {Q} mit Zuweisungsaxiom {P}x = e{P[e/x]} → alles was vorher für e galt, gilt jetzt für x +

    +
  10. +
  11. +

    Ist der Algorithmus dann korrekt?

    +

    + ...partielle Korrektheit nachgewiesen, totale Korrektheit mit Terminierungsfunktion... +

    +
  12. +
  13. +

    Was kann man nicht automatisch beweisen?

    +

    + Die Invariante +

    +
  14. +
+

+ + +

Sonstiges

+

+

    +
  1. +

    +

    +

    +
  2. +
+

+ + + + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/schweppesMostWanted.php b/www/uni/ws03/alp/schweppesMostWanted.php new file mode 100644 index 0000000..4237a0a --- /dev/null +++ b/www/uni/ws03/alp/schweppesMostWanted.php @@ -0,0 +1,49 @@ + + + + + + Prüfer-Profil + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Schweppe's most wanted

+ + Da wir alle beim selben Prüfer landen, ist es vielleicht nicht schlecht, wenn wir sein Prüfungsverhalten etwas profilieren.
Wem also was in den Prüfungsprotokollen auffällt - hier aufzeichnen! + +
    +
  • In allen (!) Protokollen die ich mir angesehen habe, hat Schweppe direkt oder indirekt nach der Definition von ADTs gefragt!
  • +
  • O-Notation kommt auch superoft vor
  • +
  • Rekursion
  • +
  • Polymorphie
  • +
  • "Warum ist Suchen (die Höhe) von Binärbäumen logarithmisch?"
  • +
  • Binäre Suche
  • +
  • delete für Binärbäume
  • +
+ + Anscheinend ist es in den Schweppe-Prüfungen so, dass er eine ganze Menge redet und man ihm dann ins Wort fällt, bzw. seine Sätze beendet, um sein Wissen zu zeigen. + +

Anmerkungen

+

+ Schweppe scheint zu erwarten, dass zu einem Stichwort immer gleich ein ganzer Schwall an Information kommt. Ansonsten stellt er Massen von Zwischenfragen. (s. gprot50 - Mattias Hilliges)
+ Also lieber drauflosreden, aufhalten kann er einen immer noch. Schließlich soll man ja etwas "vortanzen"; außerdem kann man die Gesamtrichtung ein bißchen beeinflussen. +

+

+ Zitat T.: Naja auf jeden Fall fand ich es hässlich, dass ich weder zu SORTS in Java gefragt wurde noch binäre Suche (macht er doch sonst so gern) oder QUEUEs oder STACKS implementieren durfte. Auch sein beliebtestes Thema (Rekursion) kam nicht dran .... +

+

+ Zitat C.: Manchmal hat er allerdings etwas unverständliche Nachfragen gestellt, bei denen als Antwort oft eine Wiederholung oder eine leichte Umformulierung ausreichend war. +

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/sequenz.gif b/www/uni/ws03/alp/sequenz.gif new file mode 100644 index 0000000..c2d5960 Binary files /dev/null and b/www/uni/ws03/alp/sequenz.gif differ diff --git a/www/uni/ws03/alp/sortieralgorithmen.php b/www/uni/ws03/alp/sortieralgorithmen.php new file mode 100644 index 0000000..1500a0c --- /dev/null +++ b/www/uni/ws03/alp/sortieralgorithmen.php @@ -0,0 +1,59 @@ + + + + + + Sortieralgortihmen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Sortieralgorithmen

+ +

Quicksort

+ Der Quicksort-Algortithmus ist eines der schnellsten und zugleich einfachsten Sortierverfahren. Es arbeitet nach dem Divide-and-Conquer-Prinzip.
+ Es wird zunächst ein Pivotelement ausgewählt und die Liste in zwei geteilt. Die Elemente, die kleiner als das Pivotelement sind, kommen in die erste Liste und die anderen in die zweite. Mit den entstehenden Listen wird genauso fortgefahren, bis es nur noch Teillisten der Länge 1 gibt. Diese Listen werden nun der Reihe nach wieder zusammengefügt.

+ +

Mergesort

+ Ähnlich wie bei Quicksort beruht das Verfahren auf der Divide-and-Conquer-Strategie. Die zu sortierende Folge wird in zwei gleichgroße Hälften geteilt. Die entstehenden Listen werden weiter und weiter geteilt, bis es wieder nur noch Teillisten der Länge 1 gibt. Zusammengefügt wird, indem die ersten beiden Elemente zweier Teillisten verglichen werden, das kleinere gelöscht und in eine neue Liste eingetragen wird. Die neuen ersten beiden Elemente verglichen, das kleinere gelöscht und in die neue Liste eingetragen wird...

+ +

Bubblesort

+ Bubblesort ist einer der simpelsten Sortieralgorithmen.
+ Im ersten Durchlauf wird nach dem kleinsten Element gesucht, im zweiten Durchlauf nach dem zweitkleinsten usw.
+ Man geht den Array immer von hinten nach vorne durch. Zunächst vergleicht man das letzte mit dem vorletzten Element. Ist das hintere kleiner, werden die beiden Elemente vertauscht. Dann wird mit dem vorletzten und dem vorvorletzten weitergemacht. Dadurch bleiben die größeren liegen und die kleineren Elemente werden nach vorne durchgereicht.

+ +

Insertionsort

+ Man hat eine zu sortierende Folge a0, a1, ... , an-1, wobei der erste Teil a0, a1, ... , ak-1 bereits aufsteigend sortiert ist und der zweite Teil ak, ak+1, ... , an-1 noch unsortiert ist. Zu Anfang besteht der sortierte Teil nur aus a0, zum Schluss aus allen Elementen a0, a1, ... , an-1.
+ Das Element ak wird als nächstes in die bereits sortierte Liste eingefügt, indem es der Reihe nach mit ak-1, ak-2 usw. verglichen wird. Sobald ein Element aj mit aj≤ak gefunden wird, wird es hinter dieses eingefügt. Wird kein solches Element gefunden, wird ak an den Anfang der Folge gesetzt.
+ Damit ist der sortierte Teil um ein Element länger geworden. Im nächsten Schritt wird ak+1 in den sortierten Teil eingefügt... +

+ +

Vergleich Mergesort und Quicksort

+ von http://www.gm.fh-koeln.de/~ehses/ap/folien/folien9.pdf +
    +
  • Mergesort ist garantiert O(n log n), Quicksort im Mittel
  • +
  • Die Anzahl der Vergleich und der Datenbewegungen ist bei Mergesort n log2(n)
  • +
  • Quicksort hat im Mittel O(1.4 n log2 n) Vergleiche
  • +
  • Quicksort hat im Mittel O(0.7 n log2 n) Datenbewegungen
  • +
  • Quicksort ist schneller, wenn die Vergleiche schneller sind als die Datenbewegungen (einfache Datentypen)
  • +
  • Mergesort ist schneller, wenn die Vergleiche die Zeit dominieren (Objekte)
  • +
  • Es gibt Varianten von Mergesort für Felder und Listen (nicht rekursiv)
  • +
+ +

Links

+ zu Laufzeiten s.a.: O-Notation
+ www.sortieralgorithmen.de - mit klasse Applet +
+ Merkblatt zu topologisches Sortieren von Augustin + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/stylesheet.css b/www/uni/ws03/alp/stylesheet.css new file mode 100644 index 0000000..cebb3d9 --- /dev/null +++ b/www/uni/ws03/alp/stylesheet.css @@ -0,0 +1,31 @@ +@media screen +{ + body { font-size: 10pt; font-family: "Trebuchet MS", Georgia, serif; background-color: #FFFFFF } + h1 { font-size: 150%; text-align: center; color: #004080; } + h2 { font-size: 125%; text-align: left; color: #004080; } + h3 { font-size: 110%; text-align: left; color: #004080; } + h4 { font-size: 100%; text-align: left; color: #004080; } + td { font-size: 10pt; vertical-align: top; padding-right: 10px; } + a { color: #FF8000; text-decoration:none; } + a:hover { color: #C04040; text-decoration:none; font-weight: bold; } + #updates { font-size: 80%; font-family: "Courier New", monospace; color: #C0C0C0; } + #menu { font-size: 70%; } + #buttons { position: absolute; right: 20px; top: 20px; text-align: right; } + #syntax { font-family: monospace; } + .quelle { font-size: 75%; color: #888888; font-style: italic; } +} +@media print +{ + body { font-size: 10pt; font-family: "Trebuchet MS", Georgia, serif; background-color: #FFFFFF } + h1 { font-size: 150%; text-align: center; color: #000000; } + h2 { font-size: 125%; text-align: left; color: #000000; } + h3 { font-size: 110%; text-align: left; color: #000000; } + h4 { font-size: 100%; text-align: left; color: #000000; } + td { font-size: 10pt; vertical-align: top; padding-right: 10px; } + a { color: #000000; text-decoration: underline; } + #menu { display: none; } + #buttons { display: none; } + #syntax { font-family: monospace; } + .quelle { font-size: 75%; color: #888888; font-style: italic; } +} + diff --git a/www/uni/ws03/alp/template.txt b/www/uni/ws03/alp/template.txt new file mode 100644 index 0000000..a6fc235 --- /dev/null +++ b/www/uni/ws03/alp/template.txt @@ -0,0 +1,27 @@ + + + + + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Titel

+ +

Fragen

+ +

Anmerkungen

+ +

Links

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/termbaum1.gif b/www/uni/ws03/alp/termbaum1.gif new file mode 100644 index 0000000..ee20df4 Binary files /dev/null and b/www/uni/ws03/alp/termbaum1.gif differ diff --git a/www/uni/ws03/alp/termbaum2.gif b/www/uni/ws03/alp/termbaum2.gif new file mode 100644 index 0000000..55d32db Binary files /dev/null and b/www/uni/ws03/alp/termbaum2.gif differ diff --git a/www/uni/ws03/alp/themenBearbeitung.php b/www/uni/ws03/alp/themenBearbeitung.php new file mode 100644 index 0000000..4756edf --- /dev/null +++ b/www/uni/ws03/alp/themenBearbeitung.php @@ -0,0 +1,35 @@ + + + + + + Aufteilung der Themen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Bearbeitung der Themen

+ +

Vera

+ Haskell, Spezifikation, Abstrakte Datentypen + +

Bettina

+ Primitiv-rekursive Funktionen, Algorithmen, Graphen & Bäume, Induktion, Laufzeitbestimmung, O-Notation + +

Tilman

+ Java, UML, λ-Kalkül, Vergleich Programmiersprachen, Rekursion und Endrekursivierung, Perfect Shuffle + +

Es fehlen noch...

+ Verifikation und Validation, Relationen + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/tiefen-breitensuche.php b/www/uni/ws03/alp/tiefen-breitensuche.php new file mode 100644 index 0000000..b6dbc28 --- /dev/null +++ b/www/uni/ws03/alp/tiefen-breitensuche.php @@ -0,0 +1,48 @@ + + + + + + Tiefensuche und Breitensuche + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Tiefen- und Breitensuche

+ +Tiefen- und Breitensuche sind Verfahren zum Traversieren von Graphen. Als Ergebnis eines zusammenhängenden Graphen erhält man einen aufspannenden Baum.

+ +

Breitensuche

+Die Breitensuche (BFS - breadth-first-search) ist ein Algorithmenmuster, das die Knoten eines Graphen nach der Entfernung von einem Startknoten geordnet durchläuft.
+Zuerst werden alle von diesem Startknoten direkt durch eine Kante erreichbaren Knoten bearbeitet, danach die mit zwei Kanten Entfernung, dann die mit drei usw.

+ +

Tiefensuche

+Mit der Tiefensuche (DFS - depth-first-search) geht man so weit wie möglich einen gewählten Pfad entlang. Wenn man am Ende eines Zweiges angekommen ist, geht man schrittweise zurück, bis man in einen bislang unbesuchten Teilbaum absteigen kann. Ist man wieder am Startknoten angelangt und es gibt keine unbesuchten Knoten, die mit dem Startknoten durch eine Kante verbunden sind, dann ist man fertig.
+Dieseas Verfahren nennt man Backtracking: Man geht solange man kann, wenn man nicht mehr weiter kommt, geht man zurück bis man einen anderen Weg findet.


+ + +Beispiel:
+ + + + + + + + + + + +
BeispielgraphBreitensucheTiefensuche
+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/tiefensuche.gif b/www/uni/ws03/alp/tiefensuche.gif new file mode 100644 index 0000000..b57af09 Binary files /dev/null and b/www/uni/ws03/alp/tiefensuche.gif differ diff --git a/www/uni/ws03/alp/tubsuche.gif b/www/uni/ws03/alp/tubsuche.gif new file mode 100644 index 0000000..f49df1b Binary files /dev/null and b/www/uni/ws03/alp/tubsuche.gif differ diff --git a/www/uni/ws03/alp/uml.php b/www/uni/ws03/alp/uml.php new file mode 100644 index 0000000..09b7c9b --- /dev/null +++ b/www/uni/ws03/alp/uml.php @@ -0,0 +1,40 @@ + + + + + + UML + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

UML - Klassendiagramme

+ + + +

+ +

+

+ +

Links

+ UML Tutorial + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/umlBeispiel.gif b/www/uni/ws03/alp/umlBeispiel.gif new file mode 100644 index 0000000..93d2158 Binary files /dev/null and b/www/uni/ws03/alp/umlBeispiel.gif differ diff --git a/www/uni/ws03/alp/ungerichtetergraph.gif b/www/uni/ws03/alp/ungerichtetergraph.gif new file mode 100644 index 0000000..e77940b Binary files /dev/null and b/www/uni/ws03/alp/ungerichtetergraph.gif differ diff --git a/www/uni/ws03/alp/verifikation.php b/www/uni/ws03/alp/verifikation.php new file mode 100644 index 0000000..8ecf064 --- /dev/null +++ b/www/uni/ws03/alp/verifikation.php @@ -0,0 +1,67 @@ + + + + + + Verifikation und Validation + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Verifikation und Validation

+ + Verifikation: es wird bewiesen, dass die Spezifikation korrekt ist. Daraus folt die partielle Korrektheit eines Programm(abschnitt)s. Wird noch das Terminieren des Programm(abschnitt)s für jede Eingabe bewiesen, ist dieses/r total korrekt.

+ + Um ein Programm zu verifizieren, zerlegt man es in seine Einzelschritte und beweist für jeden einzeln die partielle Korrektheit. Dafür gibt es einige Formeln (Hoare Kalkül):

+ {P} Vorbedingung
+ {Q} Nachbedingung
+ S Sequenz (der Teil des Programms, den man beweisen will.

+ Zuweisungsaxiom: {P}x = e{P[e/x]}
+ Alles was vorher für e galt, gilt nachher für x. Beispiel: x = 5 (alles was für die 5 "gilt", gilt jetzt auch für x, z.B. dass man sie zu einer anderen Zahl addieren kann oder dass sie ungerade ist.)

+ + + + + + + + + + + + + + + + + + + + + +
Zuweisungsaxiom:
Sequenzregel:Wenn man von P mittels S1 zu R kommt, und von R mittels S2 zu Q, so kommt man von P über die Ausführung von S1 und s2 zu Q.
Bedingte Anweisung:Wenn P und die Bedinung B erfüllt sind und man über S1 zu Q gelangt, und wenn P erfüllt ist und B nicht und man über S2 zu Q gelangt, so gilt {P} if (B) then S1 else S2 {Q}. +
Schleife:Es wird eine geeignete Schleifeninvariante benötigt. Gilt diese und B ist erfüllt und ist die Invariante nach Durchlauf der Schleife unverändert und ist B nicht mehr erfüllt, ist die Schleife partiell korrekt. Für die totale Korrektheit muss noch die Termnierung bewiesen werden (siehe ALP II Skript)
+ + + + + + +

Validation: es wird überprüft, ob der Algorithmus das bestehende Problem löst, also ob er tut, was er soll. Es gibt dafür keine formale Schreibweise. +

Fragen

+ +

Anmerkungen

+ +

Links

+ + + \ No newline at end of file diff --git a/www/uni/ws03/alp/weitereAlgorithmen.php b/www/uni/ws03/alp/weitereAlgorithmen.php new file mode 100644 index 0000000..afbb408 --- /dev/null +++ b/www/uni/ws03/alp/weitereAlgorithmen.php @@ -0,0 +1,216 @@ + + + + + + Algorithmen + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Algorithmen

+ +

Huffman-Code

+ Der Huffman-Code wird zur verlustfreien Datenkompression eingesetzt und erzeugt einen Binärcode.

+Verfahren
+Gegeben sind die Wahrscheinlichkeiten der Quellsymbole (z.B. Wörter in einem Text).
+Der Huffman-Algorithmus baut einen binären Codebaum rekursiv auf, indem er jeweils die zwei Symbole mit den kleinsten Wahrscheinlichkeiten zu einem Teilbaum zusammenfasst. Dieser Teilbaum geht dann als ein neues Symbol mit der Summe der Wahrscheinlichkeiten der zusammengefassten Symbole in den weiteren Verlauf des Algorithmus ein.

+Beispiel
+Wir erzeugen einen optimalen Kode mit dem Huffman Algorithmus für die Verteilung (p1, ... , p6) = ( 8/25, 2/25, 1/25, 5/25, 5/25, 4/25).

+ + + + + +
+p1 = 01
+p2 = 0001
+p3 = 0000
+p4 = 10
+p5 = 11
+p6 = 001 +
+ +

RSA - Rivest, Shamir und Adleman

+Zum verschlüsselten Versenden von Daten werden ein Private Key und ein Public Key erzeugt.

+Verfahren
+
    +
  1. Finde zwei Primzahlen p und q
  2. +
  3. n = p*q
  4. +
  5. Φ(n) = (p-1)*(q-1)
  6. +
  7. Finde Primzahl e, die mit Φ(n) keine gemainsamen Teiler hat.
  8. +
  9. Finde d mit (d*e) mod Φ(n) = 1
  10. +
  11. Private Key (d, n), Public Key (e, n)
  12. +
+
+ +Beispiel
+
    +
  1. p = 5, q = 7
  2. +
  3. n = 35
  4. +
  5. Φ(n)= 24
  6. +
  7. e = 11
  8. +
  9. d = 11, da 11*11 = 121 und 121 mod 24 = 1
  10. +
  11. Private Key (11, 35), Public Key (11, 35) ⇒ zufällig gleich
  12. +
+ +
+

Knuth-Morris-Pratt - Verschiebefunktion

+Um ein Wort in einem Text in O(n+m) zu finden wird der KMP-Algorithmus verwendet.

+ +Verfahren
+ + + + + + +
Beispiel: + Wort:
+ Text: +
+ abcaab
+ abcabababcaabab +
+
+ +1. Verschiebefunktion aufstellen
+ + + + + +
+ abcaab
+ a bcaab
+ ab caab
+ abc aab
+ abca ab
+ abcaa b
+
+ ⇒ 0
+ ⇒ 1
+ ⇒ 1
+ ⇒ 1
+ ⇒ 2
+ ⇒ 2
+
+
+Es werden alle Prefixe p des Wortes durchgegangen. Die Verschiebefunktion ist die Länge des längsten Prefixes von p, was gleichzeitig auch Suffix von p ist, + 1. Nur die Verschiebefunktion des ersten Prefixes ε ist 0.

+ + + + + + +
+ Wort
+ Stelle
+ Verschiebefunktion f +
+ abcaab
+ 123456
+ 011122 +
+
+ +2. Wort im Text suchen
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
abcabababcaabab
a
-
b
-
c
-
a
-
a
X
b
f(5) = 2
ab
-
c
X
aab
f(3) = 1
a
-
b
-
c
X
aab
f(3) = 1
a
-
b
-
c
-
a
-
a
-
b
-

Wort gefunden
+ +Wort stimmt an n-ter Stelle von Wort mit m-ter Stelle von Text nicht mehr überein.
+→ Weiter an (m+1)-ter Stelle in Text mit f(n)-ter Stelle in Wort. + +

Ackermann Funktion

+ Sie wiederlegt Hilberts Vermutung, dass jede berechnenbare Funktion, primitiv rekursiv ist.

+ +ack 0 x = x + 1
+ack x 0 = ack (x-1) x
+ack x y = ack(x-1) (ack x (y-1))
+
+

Links

+ Implementierung vom KMP-Algorithmus von Augustin + + \ No newline at end of file diff --git a/www/uni/ws03/alp/while.gif b/www/uni/ws03/alp/while.gif new file mode 100644 index 0000000..874eef2 Binary files /dev/null and b/www/uni/ws03/alp/while.gif differ diff --git a/www/uni/ws03/alp/wichtigeBegriffeDerGraphentheorie.php b/www/uni/ws03/alp/wichtigeBegriffeDerGraphentheorie.php new file mode 100644 index 0000000..a8e53f6 --- /dev/null +++ b/www/uni/ws03/alp/wichtigeBegriffeDerGraphentheorie.php @@ -0,0 +1,53 @@ + + + + + + Graphentheorie: Begriffe + + + zurück zur Liste + +
+
+ +

+ +

+
+
+ +

Wichtige Begriffe der Graphentheorie

+ +

Aufspannende Bäume

+Ein spannender bzw. aufspannender Baum ist ein Teilgraph eines ungerichteten Graphen, der ein Baum ist und alle seine Knoten enthält. Spannende Bäume existieren somit nur in zusammenhängenden Graphen.
+In kantengewichteten Graphen lässt sich als Gewicht eines spannenden Graphen die Summe seiner Kantengewichte definieren. Minimal spannende Bäume lassen sich mit Kruskal oder Prim bestimmen. + +

Kürzeste Wege

+In einem kantengewichteten Graphen lässt sich der kürzeste Weg durch den Algorithmus von Dijkstra bestimmen. + +

Wälder

+Ein Wald ist ein Graph, der aus einer Menge von Bäumen besteht, d.h. er ist nicht zusammenhängend und es gibt keine Kreise. + +

Mehrwegebäume

+Ein Mehrwegebaum hat mehrere Elemente in einem Knoten gespeichert. B-Bäume sind Mehrwegebäume. + +

Konvexe Hülle

+Gegeben ist eine Menge von Punkten in R2. Die konvexe Hülle ist der Graph, der sich bildet, wenn man ein Gummiband um alle Punkte legen und straff ziehn würde.
+Man teilt in untere und obere konvexe Hülle auf.

+ +Berechnung der unteren konvexen Hülle:
+Zunächst werden alle Punkte aufsteigend nach ihrem x-Wert geordnet. Haben mehrere Punkte den gleichen x-Wert, so nimmt man für die untere konvexe Hülle den untersten Punkt, also dem mit dem kleinsten y-Wert, und den obersten Punkt für die obere konvexe Hülle.
+Nun verbindet man die geordneten Punkte Q1, Q2, ... , Qn nacheinander. Bildet sich eine Einbuchtung nach innen, werden die inneren Punkte aus der konvexen Hülle entfernt.

+ +
+Wir nehmen einen Stack zur Hilfe.
+Q1 und Q2 werden in den Stack geschoben. Mit Q3 bildet sich eine Ecke nach unten. Q3 kommt also in den Stack. Q2, Q3 und Q4 bilden auch eine Ecke nach unten. Also kommt Q4 auch in den Stack. Bei Q5, Q6 und Q7 genauso.
+Jetzt sind Q1, Q2, ... , Q7 im Stack. Nun kommt Q8. Q6, Q7 und Q8 bilden eine Ecke mit der Spitze nach oben. Deshalb wird Q7 aus dem Stack gelöscht. Dasselbe gilt für Q6 und Q5. Q3, Q4 und Q8 bilden wieder eine Ecke nach unten also kann Q8 jetzt auf den Stack gelegt werden.
+Im Stack stehen die Punkte, die bis jetzt in der unteren konvexen Hülle enthalten sind: Q1, Q2, Q3, Q4 und Q8.

+ +Berechnung der oberen konvexen Hülle:
+Die obere konvexe Hülle wird im Prinzip genauso gestimmt. Man geht allerdings von rechts nach links und nimmt die Punkte deren Kanten in der konvexe Hülle nur Ecken mit der Spitze nach oben bilden. + + + \ No newline at end of file diff --git a/www/uni/ws03/alp/zuweisung.gif b/www/uni/ws03/alp/zuweisung.gif new file mode 100644 index 0000000..64afa86 Binary files /dev/null and b/www/uni/ws03/alp/zuweisung.gif differ diff --git a/www/uni/ws04/netzprogrammierung/AuthCheck.java b/www/uni/ws04/netzprogrammierung/AuthCheck.java new file mode 100644 index 0000000..10d7e5c --- /dev/null +++ b/www/uni/ws04/netzprogrammierung/AuthCheck.java @@ -0,0 +1,74 @@ +/* + * Created on 02.02.2005 + */ +package uebung05.aufgabe02; + +import java.io.IOException; +import java.net.*; + +import sun.misc.BASE64Encoder; + +/** + * Verbindet zu einer gegebenen URL und versucht, via "Basic Authentication Scheme" + * Zugriff auf die Ressource zu bekommen. Hierfür werden sämtliche Permutation + * vorgegebener Namen/Passworte durchgegangen + * + * @author Tilman Walther + */ +public class AuthCheck { + + // die URL, auf die zugegriffen wird + String resource = "http://www.inf.fu-berlin.de/inst/ag-nbi/lehre/0405/V_NP/geheim5/geheim.txt"; + + // Namen / Passworte für die Login-Versuche + final String[] nameDict = {"Alle", "Keiner", "Jeder"}; + final String[] passDict = {"gelb", "blau", "rot"}; + + // Ein BASE64-Encoder zur Übermittlung des Logins + BASE64Encoder encoder = new BASE64Encoder(); + + public AuthCheck() throws IOException { + + // Verbindung herstellen + System.out.println("Verbinde zu "+resource); + URL page = new URL(resource); + HttpURLConnection conn = (HttpURLConnection) page.openConnection(); + conn.connect(); + + // prüfen, ob Authentifizierung verlangt wird + if (conn.getResponseCode() == 401) { + System.out.println("Realm: "+conn.getHeaderField("WWW-Authenticate")+"\n"); + + // sämtliche Name-Passwort-Kombinationen durchprobieren + for (int i = 0;i < nameDict.length; i++) { + for (int j = 0; j < passDict.length; j++) { + System.out.print("Login mit "+nameDict[i]+":"+passDict[j]+"... "); + + // Login-Daten für die Übermittlung codieren + String login = encoder.encode((nameDict[i] + ":" + passDict[j]).getBytes()); + + // Authentifizierung per "Basic Authentication Scheme" + conn = (HttpURLConnection) page.openConnection(); + conn.setRequestProperty("Authorization", "Basic "+login); + conn.connect(); + + // Login erfolgreich? + if (conn.getResponseCode() == 200) { + System.out.println("erfolgreich!"); + } + else { + System.out.println("fehlgeschlagen"); + } + } + } + } + else { + System.out.println("The resource is not available via 'Basic Authentication Scheme' ("+conn.getResponseCode()+")."); + } + } + + public static void main(String[] args) throws IOException { + new AuthCheck(); + } + +} diff --git a/www/uni/ws04/netzprogrammierung/NetComparator.java b/www/uni/ws04/netzprogrammierung/NetComparator.java new file mode 100644 index 0000000..9206977 --- /dev/null +++ b/www/uni/ws04/netzprogrammierung/NetComparator.java @@ -0,0 +1,162 @@ +//Gruppe 01 (Übung 2) +//Aufgabe 2-1 + +package uebung02.aufgabe01; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.*; + +/** +* Vergleicht zwei Ressourcen im Netz auf Übereinstimmung. +* Zunächst werden die Inhalts-Header, danach die Ressourcen +* selbst verglichen. +* +* @author Tilman Walther +*/ +public class NetComparator { + + // Header, die auf Unterschiede im Inhalt schließen lassen + private static String[] header = new String[] { + "Content-Type", + "Content-Length", + "Content-Encoding", + "Content-Language", + "Last-Modified", + "Expires" }; + + /** + * Compares two resources given as URLs. + * + * @param s1 The URL for the first resource + * @param s2 The URL for the second resource + * @return true, if the resources are equal, false otherwise + * @throws IOException if an I/O Error occurs + */ + public static boolean compare(String s1, String s2) throws IOException { + + // Verbindungen für die Ressourcen erstellen + + URL url1 = new URL(s1); + URLConnection connection1 = url1.openConnection(); + + URL url2 = new URL(s2); + URLConnection connection2 = url2.openConnection(); + + + // Header vergleichen + + String val1; // Header-Value Resource 1 + String val2; // Header-Value Resource 2 + + long differences = 0; // Anz. festegestellter Unterschiede + + // relevante Header durchgehen + for (int i = 0; i < header.length; i++) { + val1 = connection1.getHeaderField(header[i]); + val2 = connection2.getHeaderField(header[i]); + + if ((val1 != null) && (val2 != null)) { + + if (!val1.equals(val2)) { + System.out.println("Header verschieden: "+header[i]+" "+val1+" / "+val2); + differences++; + } + } + } + + + // Inhalt vergleichen + + BufferedInputStream input1 = new BufferedInputStream(connection1.getInputStream()); + BufferedInputStream input2 = new BufferedInputStream(connection2.getInputStream()); + + long lengthRead = 0; + long bytesDifferent = 0; + long areasDifferent = 0; + + int length1 = 0; + int length2 = 0; + byte[] buffer1 = new byte[1024]; + byte[] buffer2 = new byte[1024]; + + boolean differentArea = false; + long marker = 0; + + // Inhalt vergleichen + do { + + length1 = input1.read(buffer1); + length2 = input2.read(buffer2); + + int in1 = Math.min(length1, length2); + + // Unterschiedliche Bereiche suchen + for (int i = 0; i < in1; i++) { + + if ((buffer1[i] != buffer2[i])) { + if (!differentArea) { + differentArea = true; + marker = lengthRead+i; + } + } + else if (differentArea) { + differentArea = false; + bytesDifferent += (lengthRead + i - marker); + + System.out.println("Bereich von "+marker+" bis "+(lengthRead + i-1)+" unterschiedlich"); + areasDifferent++; + differences++; + } + + } + + lengthRead += length1; + + } while ((length1 > 0) && (length1 == length2)); + + + // Überprüfen, ob aus beiden Streams gleich viel gelesen wurde, bzw. + // ob ein Stream noch nicht am Ende angelangt ist + long diffLength = Math.abs(input1.available()+length1-input2.available()-length2); + + if (diffLength > 0) { + System.out.println("Länge unterschiedlich ("+diffLength+" Byte)"); + differences++; + } + + + // Endergebnis ausgeben + if (differences > 0) { + System.out.println("Test beendet, "+differences+" Unterschiede festgestellt.\nDer Inhalt unterscheidet sich in "+bytesDifferent+" Bytes in "+areasDifferent+" Bereichen."); + return false; + } + + System.out.println("Test beendet, Ressourcen stimmen überein."); + return true; + } + + public static void main(String[] args) throws IOException { + + if (args.length == 2) { + NetComparator.compare(args[0], args[1]); + } + else if (args.length == 0) { + + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); + + System.out.print("Please insert first URL: "); + String s1 = in.readLine(); + + System.out.print("Please insert second URL: "); + String s2 = in.readLine(); + + NetComparator.compare(s1, s2); + } + else { + System.out.println("Aufruf: NetCompare [url1 url2]"); + } + } +} diff --git a/www/uni/ws04/netzprogrammierung/ProxyServer.java b/www/uni/ws04/netzprogrammierung/ProxyServer.java new file mode 100644 index 0000000..2e4a300 --- /dev/null +++ b/www/uni/ws04/netzprogrammierung/ProxyServer.java @@ -0,0 +1,304 @@ +// Netzprogrammierung +// Gruppe 01 (Übung 1) +// Aufgabe 1-4 + +/* + ProxyServer.java + + Anmerkungen: + - Dem Proxyserver können auf der Kommandozeile optional Port und Debug Level als int-Werte + übergeben werden (Silent Mode, nur Header, etc.). Als default werden Port 10000 und Debug + Level 3 genutzt. + + Konzepte: + - Die Eingabeströme von Client und v.a. Server werden über binäre Inputstreams abgewickelt, + um Bilder und andere Binärdaten zu erhalten + - Aus dem Client-Request werden Server und Port geparst, so kann bspw. auch http über Port + 8080 abgefragt werden + - Der vom Client entgegengenommene Header wird teilweise bereinigt, da er sich an einen + Proxy richtet (Zeile 148 ff.) + - Die Antwort vom Server wird über die private Methode readLine() (Z. 242 ff.) abgewickelt, so + kann der InputStream komfortabel gehandhabt werden + - Die empfangenen Headerzeilen werden aufsummiert und durch die angeforderten Ressourcen + geteilt. Das Ergebnis wird über den Header an den Client gesendet (Z. 190 ff.) + - Die meisten Exceptions werden nur abgefangen, der Proxyserver läuft danach wieder an, da + die meisten Fehler durch Abbruch der Verbindung durch den Client u.ä. entstehen, bemerkt + man dies im Betrieb i.d.R. nicht + - Die einzige gesondert behandelte Exception ist die Connection Exception (Z. 214): Tritt sie + auf, wird HTTP-Fehlercode 500 an den Client übermittelt +*/ + +package uebung01.aufgabe04; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.net.ConnectException; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketException; +import java.net.SocketTimeoutException; +import java.util.Iterator; +import java.util.LinkedList; + + +/** + * Ein einfacher Proxy-Server, der die durchschnittliche Anzahl empfangener Headerzeilen ermittelt. + * + * @author Tilman Walther + */ +public class ProxyServer { + + // da unser einfacher Proxy die content-length nicht beruecksichtigt (die + // auch nicht von jedem Server gesendet wird), muessen Verbindungen oft + // per Timeout beendet werden. + final int SERVER_TIMEOUT = 2500; + + // da Java den Linefeed dem System anpasst, nutzen wir einen + // String, der sich nach dem HTTP-Protokoll richtet + final String LF = new String(""+((char) 13)+((char) 10)); + + long headerLineCount = 0; + long itemCount = 0; + + StringBuffer lineBuffer = new StringBuffer(600); + + public ProxyServer(int port, int message) throws IOException { + + System.out.println("PROXY: Starting ProxyServer on port "+port); + + ServerSocket proxySocket = new ServerSocket(port); + + Socket client; + BufferedInputStream clientIn; + PrintStream clientOut; + + Socket server; + BufferedInputStream serverIn; + PrintStream serverOut; + + String request; + String domain; + int serverport; + LinkedList requestStrings = new LinkedList(); + + String s; + byte[] buffer = new byte[1024]; + int in1; + long headerLineAverage; + + while (true) { + + if (message > 1) System.out.println("PROXY: Listening... (press Ctrl+C to end)"); + client = proxySocket.accept(); + + clientIn = new BufferedInputStream(client.getInputStream()); + clientOut = new PrintStream(client.getOutputStream(), true); + + try { + + // Anfrage vom Browser holen + s = readLine(clientIn); + + // Ressource extrahieren + request = s.substring(0, s.indexOf(" ")+1) + s.substring(s.indexOf("/", s.indexOf("//")+2)); + + // Domain und Port extrahieren + domain = s.substring(s.indexOf("//")+2); + domain = domain.substring(0, domain.indexOf("/")); + + if ((in1 = domain.indexOf((int) ':')) > -1 ) { + serverport = Integer.parseInt(domain.substring(in1+1)); + domain = domain.substring(0, in1); + } + else { + serverport = 80; + } + + if (message > 1) System.out.print("PROXY: Request from client: "+s); + + // Restlichen Anfrage-Header holen + requestStrings.clear(); + do { + s = readLine(clientIn); + requestStrings.add(s); + if (message > 4) System.out.print(" "+s); + } while (!s.equals(LF)); + + long time = System.currentTimeMillis(); + + try { + if (message > 1) System.out.println("PROXY: Connecting server "+domain+":"+serverport); + + server = new Socket(domain, serverport); + server.setSoTimeout(SERVER_TIMEOUT); + serverIn = new BufferedInputStream(server.getInputStream()); + serverOut = new PrintStream(server.getOutputStream(), true); + + if (message > 1) System.out.print("PROXY: Sending request to server: "+request); + serverOut.print(request); + + // Angepassten Header an Server schicken + Iterator iter = requestStrings.iterator(); + while (iter.hasNext()) { + + s = (String) iter.next(); + + if (s.startsWith("Proxy-Connection")) { + serverOut.print("Connection: close"+LF); + if (message > 2) System.out.print(" Connection: close"+LF); + } + else if (s.startsWith("Transfer-Encoding")) { + serverOut.print("Transfer-Encoding: identity"+LF); + if (message > 2) System.out.print(" Transfer-Encoding: identity"+LF); + } + else if (s.startsWith("Accept-Encoding")) { + + s = s.substring(0,(s.length()-2)).concat(",identity"+LF); + //s = "Accept-Encoding: identity"+LF; + + serverOut.print(s); + if (message > 2) System.out.print(" "+s); + } + else { + serverOut.print(s); + if (message > 2) System.out.print(" "+s); + } + } + + // Antwort vom Server entgegennehmen + try { + + // Header empfangen + s = readLine(serverIn); + + // --> Hier koennen HTTP response codes abgefangen werden + if (message > 1) System.out.print("PROXY: Receiving data from server: "+s); + + itemCount++; + + while (!s.equals(LF)) { + + headerLineCount++; + + if (message > 2) System.out.print(" "+s); + clientOut.print(s); + s = readLine(serverIn); + } + + // durchschnittliche Anzahl der Headerzeilen berechnen + headerLineAverage = headerLineCount / itemCount; + + if (message > 2) System.out.print(" X-mean-headercount: "+ headerLineAverage + LF + LF); + clientOut.print("X-mean-headercount: "+ headerLineAverage + LF + LF); + + // Daten empfangen + while ((in1 = serverIn.read(buffer)) > 0) { + if (message > 3) System.out.write(buffer, 0, in1); + clientOut.write(buffer, 0, in1); + } + } + catch (SocketTimeoutException ste) { + if (message > 1) System.err.println("PROXY: Connection timed out"); + } + + if (message > 1) System.out.println("PROXY: Time "+(System.currentTimeMillis()-time)+" ms"); + if (message > 1) System.out.println("PROXY: Unconnect...\n"); + + serverIn.close(); + serverOut.close(); + server.close(); + + } + catch (ConnectException ce) { + + if (message > 0) System.err.println("ConnectException, sending code 500 to client"); + buffer = ("HTTP/1.0 500\nContent Type: text/plain\n\nError while connecting server: "+domain+"\n").getBytes(); + clientOut.write(buffer, 0, ("HTTP/1.0 500\nContent Type: text/plain\n\nError while connecting server: "+domain+"\n").length()); + + } + + clientIn.close(); + clientOut.close(); + client.close(); + } + catch (SocketException se) { + if (message > 4) System.err.println("SocketException"); + } + catch (Exception e) { + // nothing, just try again + if (message > 4) e.printStackTrace(); + } + } + + //proxySocket.close(); + } + + + /** + * Liest eine Zeile vom binären Eingabestrom. + * (Auf diese Weise bleiben binäre Daten korrekt erhalten.) + */ + private String readLine(InputStream in) throws IOException + { + int i; + lineBuffer.setLength(0); + + while (((i = in.read()) > 0) && (i != 13)){ + lineBuffer.append((char) i); + } + + + // nach HTTP 1.1 müssten die Zeilenenden mit #13#10 markiert sein + // (durch die Aufteilung schlucken wir auch Unix/Macintosh) + if (i == 13) { + + lineBuffer.append((char) 13); + in.mark(1); + + if (in.read() != 10) + in.reset(); + else + lineBuffer.append((char) 10); + } + + return lineBuffer.toString(); + } + + + public static void main(String[] args) throws IOException { + + int port = 10000; // default port + int message = 3; // default output level + + if (args.length > 2) { + System.out.println("usage: MultServer [port number] [output level]"); + } + else { + + if (args.length > 0) { + try { + port = Integer.parseInt(args[0]); + } + catch (NumberFormatException nfe) { + System.out.println(args[0]+" is not a valid port number.\nusage: MultServer [port number] [output level]"); + System.exit(1); + } + } + + if (args.length > 1) { + try { + port = Integer.parseInt(args[1]); + } + catch (NumberFormatException nfe) { + System.out.println(args[0]+" is not a valid port number.\nusage: MultServer [port number] [output level]"); + System.exit(1); + } + } + + } + + new ProxyServer(port, message); + } +} diff --git a/www/uni/ws04/netzprogrammierung/SiteSize.java b/www/uni/ws04/netzprogrammierung/SiteSize.java new file mode 100644 index 0000000..66598da --- /dev/null +++ b/www/uni/ws04/netzprogrammierung/SiteSize.java @@ -0,0 +1,264 @@ +//Gruppe 01 (Übung 4) +//Aufgabe 4-3 + +package uebung04.aufgabe03; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.HashSet; +import javax.swing.text.MutableAttributeSet; +import javax.swing.text.html.HTML; +import javax.swing.text.html.HTML.Tag; +import javax.swing.text.html.HTMLEditorKit.ParserCallback; +import javax.swing.text.html.parser.ParserDelegator; + +/** +* Sucht in einer HTML-Ressource nach eingebetten Objekten und summiert die Dateigrößen auf, +* wobei mehrfach verlinkte Objekte nur einmal gezählt werden. +* Bei Framesets werden sämtliche Frames ausgewertet, in mehreren Frames dargestellte Seiten +* werden nur einfach gezählt. +* +* @author Tilman Walther +* @version 2.1 +*/ +public class SiteSize extends ParserCallback { + + private URL url; // die URL der HTML-Ressource + private URLConnection connection; // Verbindung zur HTML-Ressource + private HashSet objects = null; // speichert URLs der bereits gezählten Objekten + private long size = 0; // die Größe aller gezählten Objekte + + private ParserDelegator parser = new ParserDelegator(); // parst die Ressource und ruft handleSimpleTag() auf + + /** + * Parses the resource behind the given URL and measures the size. + * If the URL points to a non-HTML resource the size will be zero. + * @param url the URL for the resource to parse + * @return the size of the website including all embedded objects + * @throws IOException if an I/O error occurs + */ + public long getSize(URL url) throws IOException { + + /* Für Testzwecke: Durchleitungsproxy einstellen / + + java.util.Properties props = System.getProperties(); + props.put("proxySet", "true"); + props.put("proxyHost", "127.0.0.1"); + props.put("proxyPort", "10000"); + + /* --------------------------------------------- */ + + System.out.println("\nparsing "+url); + + this.url = url; + connection = url.openConnection(); + + // Daten vom Server im "identity"-Format anfordern + connection.addRequestProperty("Accept-Encoding", "identity"); + + // TODO für Testzwecke: + //connection.addRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/125.5.6 (KHTML, like Gecko) Safari/125.12"); + + connection.connect(); + + //System.out.println("Transfer-Encoding: "+connection.getHeaderField("transfer-encoding")+"\n"); + + // falls objects nicht bereits durch den privaten Konstruktor + // inititalisiert wurde, neues HashSet erzeugen + if (objects == null) objects = new HashSet(); + + // auf HTML-Inhalt prüfen + if (connection.getContentType().startsWith("text/html")) { + // Größe der Seite zur Gesamtgröße addieren + addSize(url); + + // eingebettete Objekte mit Parser finden/addieren + BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); + parser.parse(br, this, true); + } + + // Gesamtgröße zurückgeben + return size; + } + + /** + * This private method is used for recursive processing of framesets. + * In order not to count linked objects twice, the HashSet 'objects' is passed. + * @param url the URL for the actual frame + * @param objects the HashSet containing all objects that have already been counted + * @return the size if the subframe + * @throws IOException if an I/O error occurs + */ + private long getSize(URL url, HashSet objects) throws IOException { + this.objects = objects; + return getSize(url); + } + + /** + * Overrides javax.swing.text.html.HTMLEditorKit.ParserCallback.handleSimpleTag() which is called by the ParserDelegator + * @see javax.swing.text.html.HTMLEditorKit.ParserCallback#handleSimpleTag(javax.swing.text.html.HTML.Tag, javax.swing.text.MutableAttributeSet, int) + */ + public void handleSimpleTag(HTML.Tag t, MutableAttributeSet a, int pos) { + + String objLink = null; + + try { + if (t == HTML.Tag.FRAME) { + // leider trifft man öfter auf dummy-frames (Dreamweaver!), deswegen + // fehlt ab und zu die Quelle + if (a.getAttribute(HTML.Attribute.SRC) != null) { + // absuluten Pfad zur Ressource nachvollziehen, um mehrfache Zählung zu vermeiden + URL frameUrl = generateURL(a.getAttribute(HTML.Attribute.SRC).toString()); + + // Frame von neuem SiteSize-Objekt parsen lassen + SiteSize frameSize = new SiteSize(); + size += frameSize.getSize(frameUrl, objects); + } + } else { + if (t == HTML.Tag.APPLET) { + // Applets können direkt via CODE-Attribut oder als Archiv verlinkt sein + if (a.getAttribute(HTML.Attribute.ARCHIVE) != null) { + objLink = a.getAttribute(HTML.Attribute.ARCHIVE).toString(); + } else { + objLink = a.getAttribute(HTML.Attribute.CODE).toString(); + } + } else if (t == HTML.Tag.IMG) { + objLink = a.getAttribute(HTML.Attribute.SRC).toString(); + } else if (t == HTML.Tag.OBJECT) { + objLink = a.getAttribute(HTML.Attribute.DATA).toString(); + } else if (t == HTML.Tag.LINK) { + objLink = a.getAttribute(HTML.Attribute.HREF).toString(); + } + + if (objLink != null) { + try { + // absuluten Pfad zur Ressource nachvollziehen, um mehrfache Zählung zu vermeiden + addSize(generateURL(objLink)); + } catch (MalformedURLException mue) { + System.out.println("MalformedURLException on position " + pos + ": '" + objLink + "'"); + } + } + } + } catch (IOException ioe) { + System.out.println("IOException (" + pos + "): Could not connect to linked object. ("+objLink+")"); + } + } + + /** + * Overrides javax.swing.text.html.HTMLEditorKit.ParserCallback.handleStartTag() which is called by the ParserDelegator. + * @see javax.swing.text.html.HTMLEditorKit.ParserCallback#handleStartTag(javax.swing.text.html.HTML.Tag, javax.swing.text.MutableAttributeSet, int) + */ + public void handleStartTag(Tag t, MutableAttributeSet a, int pos) { + // Da APPLET- und OBJECT-Tags auch als StartTags vorkommen können, wird das der Aufruf + // in diesem Fall an handleSimpleTag() weitergegeben + if ((t == HTML.Tag.APPLET) || (t == HTML.Tag.OBJECT)) handleSimpleTag(t, a, pos); + } + + /** + * Adds the size of the resource that the given URLConnection points to if it has not already been counted + * @param connection an URLConnection to a resource + * @throws IOException if an I/O error occurs + */ + private void addSize(URL url) throws IOException { + + URLConnection resConn = url.openConnection(); + + // TODO für Testzwecke: + //resConn.addRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; de-DE; rv:1.7) Gecko/20040803 Firefox/0.9.3"); + + resConn.connect(); + + String resUrlStr = url.toString(); + + if (!objects.contains(resUrlStr)) { + objects.add(resUrlStr); + int resLength = resConn.getContentLength(); + + if (resLength >= 0) { + size += resLength; + } + else { + // da der Content-Length Header nicht übermittelt wurde, muss zur + // Messung die Ressource übertragen werden + + int bytesRead; + byte[] buffer = new byte[1024]; + BufferedInputStream input = new BufferedInputStream(resConn.getInputStream()); + + resLength = 0; + + while ((bytesRead = input.read(buffer)) >= 0) { + resLength += bytesRead; + } + + size += resLength; + } + + System.out.println("added '" + resUrlStr + "' (" + resLength + " bytes)"); + } + } + + /** + * Generates the URL for a (relative) link extracted from a tag attribute + * @param link a resource link from a tag attribute + * @return the URL to the resource + * @throws MalformedURLException + */ + // TODO wahrscheinlich lässt sich diese Methode (zumindest teilw.) durch URI.relativize() ersetzen + private URL generateURL(String link) throws MalformedURLException { + + if (link.startsWith("//")) link = "http:" + link; + + String resUrlStr = null; + + if (link.indexOf("://") > 0) { + resUrlStr = new String(link); + } else if (link.startsWith("/")) { + resUrlStr = new String(url.getProtocol() + "://" + url.getAuthority() + link); + } else { + String path = url.getPath(); + if (path.length() > 0) path = path.substring(0, path.lastIndexOf("/")); + resUrlStr= new String(url.getProtocol() + "://" + url.getAuthority() + path + "/" + link); + } + + int i, j; + while ( ((i = resUrlStr.indexOf("../")) > -1) && ((j = resUrlStr.indexOf("/", i+3)) > -1) ){ + resUrlStr = resUrlStr.substring(0,i) + resUrlStr.substring(j+1); + } + + //new URL(URLEncoder.encode(resUrlStr, "UTF-8")); + + return new URL(resUrlStr); + } + + public static void main(String[] args) { + try { + String urlString; + if (args.length == 0) { + // URL von der Kommandozeile lesen + BufferedReader din = new BufferedReader(new InputStreamReader(System.in)); + System.out.print("URL: "); + urlString = din.readLine(); + } else { + urlString = args[0]; + } + + // URL erzeugen + URL url = new URL(urlString); + + // SiteSize-Objekt erzeugen + SiteSize siteSize = new SiteSize(); + + // Brutto-Größe messen und ausgeben + System.out.println("\nSize of content: " + siteSize.getSize(url) + " bytes"); + + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/www/uni/ws05/scivis/2d-transformation.html b/www/uni/ws05/scivis/2d-transformation.html new file mode 100644 index 0000000..532d8cb --- /dev/null +++ b/www/uni/ws05/scivis/2d-transformation.html @@ -0,0 +1,202 @@ + + + + 2D-Transformation - Bildkompression mittels Wavelet-Transformation + + + + + + + + + + + + + + +

2D-Wavelet-Transformation mittels Haar-Wavelet

+ +

Transformation

+

+ Die zu transformierenden Daten werden in jedem Schritt in nebeneinander stehende 2-Tupel aufgeteilt und anschließend Mittelwert und Abweichung berechnet. Bei der Standard-Dekomposition werden erst alle Zeilen und danach alle Spalten transformiert, was die Implementierung stark vereinfacht. Dagegen wird bei der Nonstandard-Dekomposition die Transformation von Zeilen und Spalten abwechselnd vorgenommen, was bedingt, dass das Bild gleich viele Spalten und Zeilen haben muss. Allerdings ist dieses Verfahren effizienter, da es weniger Zuweisungen braucht. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Original-Matrix   + + + + + +
101475
16121319
141215
8233
+
+
Standard-Dekomposition  Nonstandard-Dekomposition
1. Schritt + + + + + +
126-21
14162-3
1331-2
5330
+
+ + + + + +
126-21
14162-3
1331-2
5330
+
+ Der erste Schritt bei Standard- und Nonstandard-Dekomposition ist gleich: Es werden zunächst die Zeilen transformiert.
+ Beispiel: Die erste Zeile [10 14 7 5] wird in 2-Tupel aufgeteilt von denen jeweils Mittelwert und Abweichung berechnet werden. Das Tupel [10 14] ergibt als Mittelwert (10+14)/2=12, das Tupel [7 5] den Mittelwert 6. Als Abweichung ergibt sich für [10 14] (10-14)/2=-2 und für [7 5] (7-5)/2=1. +
2. Schritt + + + + + +
93-21
15-12-3
851-2
4130
+
+ + + + + +
13110-1
932-1
-1-5-22
40-1-1
+
+ Bei der Standard-Dekomposition werden im Weiteren nur noch die Mittelwerte der Zeilen transformiert, während bei der Nonstandard-Dekomposition die ganze Spalte transformiert wird.
+ Beispiel: Bei der Standard-Dekomposition wird nur noch das Tupel der Mittelwerte [12 6] aus der ersten Zeile zu Mittelwert (12+6)/2=9 und Abweichung (12-6)/2=3 umgeformt. Bei der Nonstandard-Dekomposition wird die erste Spalte [12 14 13 5] zu [13 9 -1 4] transformiert. +
3. Schritt + + + + + +
1210-1
632-1
-32-22
22-1-1
+
+ + + + + +
1210-1
632-1
-32-22
22-1-1
+
+ Nachdem bei der Standard-Dekomposition alle Zeilen umgeformt worden sind, werden nun sämtliche Spalten transformiert. Bei der Nonstandard-Dekomposition wird nun der zweite Schritt der Zeilentransformation durchgeführt, d.h. es wird nur noch die vordere Hälfte jeder Zeile verwendet.
+ Beispiel: Aus der ersten Spalte [9 15 8 4] werden in der Standard-Dekomposition die Werte [12 6 -3 2]. Die Nonstandard-Dekomposition ergibt für die vordere Hälfte erste Zeile [13 11] die Werte [12 1]. +
4. Schritt + + + + + +
921-1
3-1-10
-32-22
22-1-1
+
+ + + + + +
921-1
3-1-10
-32-22
22-1-1
+
+ Die letzte Umformung ist für beide Verfahren gleich: Die ersten beiden Werte jeder Spalte werden transformiert. Daraus ergibt sich der absolute Mittelwert 9 der Matrix. Alle anderen Werte sind die berechneten Abweichungen von diesem absoluten Mittelwert.
+ Man kann erkennen, dass die Beträge der Werte durch die Transformation deutlich abgenommen haben. Während der ursprüngliche Mittelwert 9 war, liegt er bei der umgeformten Matrix etwas über 2. +
+

+ Bei der Transformation entsteht eine Matrix, die genau die gleiche Dimension hat, wie das ursprüngliche Bild (allerdings normalerweise mit Fließkommawerten). Die umgeformte Matrix hat die Eigenschaft, dass nicht mehr jedes Pixel für sich allein beschrieben ist, sondern die Farbe eines Pixels sich aus sehr vielen Werten der Matrix zusammensetzt. Kleinere Werte verändern das Motiv nicht so stark wie große Werte. Deshalb kann man sie wegfallen lassen um die Anzahl der zu speichernden Elemente zu verringern, ohne dass die Information des Bildes stark verfälscht wird. +

+ +

Basisfunktionen und Rekonstruktion

+

+ Bilddaten, die durch eine n×m-Matrix definiert sind, liegen in einem n×m-dimensionalen Raum. Dieser Raum lässt sich durch ebenso viele linear unabhängige Basisfunktionen aufspannen. Die Bilddaten kann man durch Linearkombinationen dieser Basisfunktionen ausdrücken.
+ Bei der hier vorgestellten Methode werden zweidimensionale Haar-Wavelets als Basisfunktionen benutzt. Das Standard- und das Nonstandard-Dekompositions-Verfahren haben verständlicherweise unterschiedliche Basisfunktionen, da die Rekonstruktion die Umkehrfunktion der Transformation ist. +

+ +
+ Zweidimensionale Basisfunktionen für ein 4×4-Bild
+ Zweidimensionale Basisfunktionen für ein 4×4-Bild bei Standard- (links) und Nonstandard-Rekonstruktion (rechts) +
+ +
+ Bei der Rekonstruktion werden die Elemente der transformierten Daten mit den Basisfunktionen mutlipliziert und anschließend addiert. Im obigen Beispiel würde bei der Standard-Rekonstruktion wie bei der Nonstandard-Rekonstruktion wieder die ursprüngliche Matrix + + + + + +
101475
16121319
141215
8233
+ entstehen, da keine Kompression angewendet wurde. +
+ +

Normalisierung und Orthogonalisierung

+

+ Um die Größe der Daten zu reduzieren, müssen Informationen beim Speichern weggelassen werden. Um unwichtigere Elemente entfernen zu können, müssen die Werte der transformierten Matrix nach ihrem Informationsgehalt sortiert werden.
+ Eine Normierung der Koeffizienten ermöglicht eine Vergleichbarkeit zwischen den Werten bezogen auf ihre Energie. Das bedeutet, dass, wenn die Elemente der transformierten Matrix normiert wurden, die Koeffizienten mit größerem Einfluss auf das Signal auch einen größeren Betrag haben als Koeffizienten, die nur wenig Einfluss haben.
+ Aus der Gleichung +

+
+ Signalzerlegung +
+

+ ergibt sich, dass mit einer orthonormalen Basis ein zu komprimierendes Signal in seine Komponenten zerlegt werden und anschließend wieder eindeutig rekonstruiert werden kann.
+ Um diese Eigenschaften nutzen zu können, muss die verwendete Basis normiert werden und orthogonal sein, wie es bei den benutzten Haar-Wavelets der Fall ist. [3] +

+ + + + + + + + + + + diff --git a/www/uni/ws05/scivis/WaveletCompressionApplet.jar b/www/uni/ws05/scivis/WaveletCompressionApplet.jar new file mode 100644 index 0000000..19ffefc Binary files /dev/null and b/www/uni/ws05/scivis/WaveletCompressionApplet.jar differ diff --git a/www/uni/ws05/scivis/bedienungsanleitung.html b/www/uni/ws05/scivis/bedienungsanleitung.html new file mode 100644 index 0000000..9b48afc --- /dev/null +++ b/www/uni/ws05/scivis/bedienungsanleitung.html @@ -0,0 +1,68 @@ + + + + Einleitung - Bildkompression mittels Wavelet-Transformation + + + + + + + + + + + + + + +

Verwendung des Programms

+

Start

+

+ Das Programm kann sowohl als Applet in Webseiten eingebettet als auch als Applikation gestartet werden. Die Bilddateien, die das Programm zur Verfügung stellen soll, werden dabei über die Kommandozeile bzw. über den Applet-Parameter images angegeben. Bilder können in den Formaten GIF, JPEG oder PNG übergeben werden. +

+

+ <applet code=""waveletCompression.WaveletCompression.class width="720" height="600">
+   <param name="images" value="chess.jpg klee.jpg">
+ </applet> +

+ +
+ Das Wavelet Compression Applet (Screenshot)
+ Das Wavelet Compression Applet +
+ +

Sprache

+

+ Die GUI stellt beim Start die Sprache der Systemumgebung fest und versucht, eine entsprechende Sprachdatei zu laden. Falls keine passende Datei vorhanden ist, werden die Komponenten in Englisch beschriftet. +

+ +

Bedienung

+

Bilder laden

+

+ Über die ComboBox am oberen Rand der Anwendung kann eines der angegebenen Bilder in das Programm geladen werden. Das Bild wird daraufhin in der Vorher/Nachher-Ansicht angezeigt, wobei zunächst auf beiden Seiten das unkomprimierte Bild dargestellt wird. Das Programm stellt einige Testbilder zur Verfügung, die die Eigenschaften der Wavelet-Kompression in den verschiedenen Farbräumen besonders gut illustrieren. +

+

Kompression nach Fehler

+

+ Bei dieser Option kann der Kompressionsgrad für jede Komponente des gewählten Farbraum separat von ein bis hundert Prozent eingestellt bzw. der zulässige L²-Fehler angegeben werden. Dadurch lassen sich bestimmte Effekte beobachten. So können etwa die Information für die chromatischen Komponenten im Farbraum YcbCr stark reduziert werden, ohne dass ein sichtbarer Verlust auftritt - ein Effekt, der in der Fernsehübertragung Anwendung findet. Auch lassen sich einige Motive in bestimmten Farbräumen besonders gut komprimieren. Das im Bild gezeigte Kleeblatt-Motiv kann beispielsweise im RGB-Farbraum in den Koomponenten Rot und Blau besonders stark komprimiert werden, da es über alle Bildelemente einen hohen Grünanteil aufweist. Das Programm stellt die Farbräume RGB, CMYK, YcbCr und HSB zur Verfügung. +

+

Kompression nach Größe

+

+ Die zweite Möglichkeit ist die Kompression nach Größe. Dabei wird das Bild im RGB-Farbraum belassen und im Anschluss an die Wavelet-Transformation so viel Information entfernt, bis die gewünschte Größe erreicht ist. Die einzelnen Komponenten werden dabei immer gleich stark komprimiert.
+ Zwar kann der Algorithmus prinzipiell jede gewünschte Größe erreichen, Effekte die die Eigenschaften des Verfahrens gut illustrieren spielen sich allerdings sämtlich im Bereich des einstellbaren Größenverhältnisses von 1:2 bis 1:200 ab. +

+

Kompression und Ausgabe

+

+ Im Anschluss an die Bearbeitung wird das komprimierte Bild wieder dekodiert, in den RGB-Farbraum rückkonvertiert und rechts in der Anwendung angezeigt. Vor der Dekodierung werden die null gesetzten Koeffizienten gezählt, so dass die "physische Größe" des Bildes berechnet und das Kompressionsverhältnis angezeigt werden kann. +

+ + + + + + + + + + + diff --git a/www/uni/ws05/scivis/doc/allclasses-frame.html b/www/uni/ws05/scivis/doc/allclasses-frame.html new file mode 100644 index 0000000..1f0b1c1 --- /dev/null +++ b/www/uni/ws05/scivis/doc/allclasses-frame.html @@ -0,0 +1,54 @@ + + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
ColorSpace +
+ColorSpaceCMYK +
+ColorSpaceHSB +
+ColorSpaceRGB +
+ColorSpaceYCbCr +
+Compressor +
+ImageUtil +
+MainPanel +
+MainPanelListener +
+TextResource +
+TextResources +
+TextResources_de +
+WaveletCompression +
+
+ + + diff --git a/www/uni/ws05/scivis/doc/allclasses-noframe.html b/www/uni/ws05/scivis/doc/allclasses-noframe.html new file mode 100644 index 0000000..84210d7 --- /dev/null +++ b/www/uni/ws05/scivis/doc/allclasses-noframe.html @@ -0,0 +1,54 @@ + + + + + + +All Classes + + + + + + + + + + +All Classes +
+ + + + + +
ColorSpace +
+ColorSpaceCMYK +
+ColorSpaceHSB +
+ColorSpaceRGB +
+ColorSpaceYCbCr +
+Compressor +
+ImageUtil +
+MainPanel +
+MainPanelListener +
+TextResource +
+TextResources +
+TextResources_de +
+WaveletCompression +
+
+ + + diff --git a/www/uni/ws05/scivis/doc/constant-values.html b/www/uni/ws05/scivis/doc/constant-values.html new file mode 100644 index 0000000..f385f54 --- /dev/null +++ b/www/uni/ws05/scivis/doc/constant-values.html @@ -0,0 +1,206 @@ + + + + + + +Constant Field Values + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Constant Field Values

+
+
+Contents + + + + + + +
+waveletCompression.*
+ +

+ + + + + + + + + + + + + + + + + + + + + + +
waveletCompression.Compressor
+public final intDISTANCE_COMPRESSION1
+public final intL2_ERROR_COMPRESSION0
+public final intSIZE_COMPRESSION2
+ +

+ +

+ + + + + + + + + + + + + + + + + +
waveletCompression.WaveletCompression
+public static final intIMAGE_INITIAL_LOADING_EXCEPTION0
+public static final intIMAGE_LOADING_EXCEPTION1
+ +

+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/deprecated-list.html b/www/uni/ws05/scivis/doc/deprecated-list.html new file mode 100644 index 0000000..1d4c21a --- /dev/null +++ b/www/uni/ws05/scivis/doc/deprecated-list.html @@ -0,0 +1,142 @@ + + + + + + +Deprecated List + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Deprecated API

+
+
+Contents
    +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/help-doc.html b/www/uni/ws05/scivis/doc/help-doc.html new file mode 100644 index 0000000..28ba735 --- /dev/null +++ b/www/uni/ws05/scivis/doc/help-doc.html @@ -0,0 +1,219 @@ + + + + + + +API Help + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+How This API Document Is Organized

+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

+Overview

+
+ +

+The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

+

+Package

+
+ +

+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    +
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
+
+

+Class/Interface

+
+ +

+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description +

    +

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary +

    +

  • Field Detail
  • Constructor Detail
  • Method Detail
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+ +

+Annotation Type

+
+ +

+Each annotation type has its own separate page with the following sections:

    +
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
+
+ +

+Enum

+
+ +

+Each enum has its own separate page with the following sections:

    +
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
+
+

+Use

+
+Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
+

+Tree (Class Hierarchy)

+
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    +
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+

+Deprecated API

+
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+

+Index

+
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+

+Prev/Next

+These links take you to the next or previous class, interface, package, or related page.

+Frames/No Frames

+These links show and hide the HTML frames. All pages are available with or without frames. +

+

+Serialized Form

+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

+

+Constant Field Values

+The Constant Field Values page lists the static final fields and their values. +

+ + +This help file applies to API documentation generated using the standard doclet. + +
+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-1.html b/www/uni/ws05/scivis/doc/index-files/index-1.html new file mode 100644 index 0000000..6a938de --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-1.html @@ -0,0 +1,141 @@ + + + + + + +A-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+A

+
+
actionPerformed(ActionEvent) - +Method in class waveletCompression.MainPanelListener +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-10.html b/www/uni/ws05/scivis/doc/index-files/index-10.html new file mode 100644 index 0000000..62ee85a --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-10.html @@ -0,0 +1,150 @@ + + + + + + +M-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+M

+
+
main(String[]) - +Static method in class waveletCompression.WaveletCompression +
  +
MainPanel - Class in waveletCompression
Das Panel mit sämtlichen GUI-Elementen.
MainPanel(String[]) - +Constructor for class waveletCompression.MainPanel +
  +
MainPanel(URL[]) - +Constructor for class waveletCompression.MainPanel +
  +
MainPanelListener - Class in waveletCompression
Der MainPanelListener übernimmt die Ereignisbehandlung der GUI.
MainPanelListener(MainPanel) - +Constructor for class waveletCompression.MainPanelListener +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-11.html b/www/uni/ws05/scivis/doc/index-files/index-11.html new file mode 100644 index 0000000..1589916 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-11.html @@ -0,0 +1,141 @@ + + + + + + +R-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+R

+
+
reconstruct(double[][], boolean) - +Method in class waveletCompression.Compressor +
Rekonstruiert ein komprimiertes Bild +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-12.html b/www/uni/ws05/scivis/doc/index-files/index-12.html new file mode 100644 index 0000000..922a22e --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-12.html @@ -0,0 +1,144 @@ + + + + + + +S-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+S

+
+
SIZE_COMPRESSION - +Variable in class waveletCompression.Compressor +
  +
stateChanged(ChangeEvent) - +Method in class waveletCompression.MainPanelListener +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-13.html b/www/uni/ws05/scivis/doc/index-files/index-13.html new file mode 100644 index 0000000..2b5a4c5 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-13.html @@ -0,0 +1,162 @@ + + + + + + +T-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+T

+
+
TextResource - Class in waveletCompression.i18n
 
TextResource() - +Constructor for class waveletCompression.i18n.TextResource +
  +
TextResources - Class in waveletCompression.i18n
Enthält die englischen Textressourcen.
TextResources() - +Constructor for class waveletCompression.i18n.TextResources +
  +
TextResources_de - Class in waveletCompression.i18n
Enthält die deutschen Textressourcen.
TextResources_de() - +Constructor for class waveletCompression.i18n.TextResources_de +
  +
toRGB(double[][][]) - +Method in interface waveletCompression.colorSpace.ColorSpace +
Wandelt ein Bild aus dem Farbraum nach RGB. +
toRGB(double[][][]) - +Method in class waveletCompression.colorSpace.ColorSpaceCMYK +
  +
toRGB(double[][][]) - +Method in class waveletCompression.colorSpace.ColorSpaceHSB +
  +
toRGB(double[][][]) - +Method in class waveletCompression.colorSpace.ColorSpaceRGB +
  +
toRGB(double[][][]) - +Method in class waveletCompression.colorSpace.ColorSpaceYCbCr +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-14.html b/www/uni/ws05/scivis/doc/index-files/index-14.html new file mode 100644 index 0000000..d539a03 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-14.html @@ -0,0 +1,141 @@ + + + + + + +U-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+U

+
+
updateSizes(int, int) - +Method in class waveletCompression.MainPanel +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-15.html b/www/uni/ws05/scivis/doc/index-files/index-15.html new file mode 100644 index 0000000..8ef06a0 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-15.html @@ -0,0 +1,141 @@ + + + + + + +W-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+W

+
+
waveletCompression - package waveletCompression
 
WaveletCompression - Class in waveletCompression
Die Klasse WaveletCompression initialisiert und startet das Programm.
WaveletCompression() - +Constructor for class waveletCompression.WaveletCompression +
  +
waveletCompression.colorSpace - package waveletCompression.colorSpace
 
waveletCompression.i18n - package waveletCompression.i18n
 
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-2.html b/www/uni/ws05/scivis/doc/index-files/index-2.html new file mode 100644 index 0000000..dbcd512 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-2.html @@ -0,0 +1,160 @@ + + + + + + +C-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+C

+
+
ColorSpace - Interface in waveletCompression.colorSpace
Das ColorSpace-Interface bietet Zugriff auf verschiedene Farbraum-Implementierungen.
ColorSpaceCMYK - Class in waveletCompression.colorSpace
Der CMYK-Farbraum.
ColorSpaceCMYK() - +Constructor for class waveletCompression.colorSpace.ColorSpaceCMYK +
  +
ColorSpaceHSB - Class in waveletCompression.colorSpace
Der HSB-Farbraum.
ColorSpaceHSB() - +Constructor for class waveletCompression.colorSpace.ColorSpaceHSB +
  +
ColorSpaceRGB - Class in waveletCompression.colorSpace
Der RGB-Farbraum.
ColorSpaceRGB() - +Constructor for class waveletCompression.colorSpace.ColorSpaceRGB +
  +
ColorSpaceYCbCr - Class in waveletCompression.colorSpace
Der YCbCr-Farbraum.
ColorSpaceYCbCr() - +Constructor for class waveletCompression.colorSpace.ColorSpaceYCbCr +
  +
compress(double[][], boolean, int, int) - +Method in class waveletCompression.Compressor +
Komprimiert die Bilddaten nach L²-Fehler, Distanzfehler oder mit Standard- oder Nonstandard-Dekomposition +
Compressor - Class in waveletCompression
Die Compressor-Klasse beinhaltet die Methoden für Waveletkompression und Rekonstruktion von + komprimierten Bildern.
Compressor() - +Constructor for class waveletCompression.Compressor +
  +
createImagePanel(Object) - +Method in class waveletCompression.MainPanel +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-3.html b/www/uni/ws05/scivis/doc/index-files/index-3.html new file mode 100644 index 0000000..5c6a834 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-3.html @@ -0,0 +1,144 @@ + + + + + + +D-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+D

+
+
data - +Variable in class waveletCompression.i18n.TextResource +
  +
DISTANCE_COMPRESSION - +Variable in class waveletCompression.Compressor +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-4.html b/www/uni/ws05/scivis/doc/index-files/index-4.html new file mode 100644 index 0000000..3b4fdac --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-4.html @@ -0,0 +1,159 @@ + + + + + + +F-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+F

+
+
focusGained(FocusEvent) - +Method in class waveletCompression.MainPanelListener +
  +
focusLost(FocusEvent) - +Method in class waveletCompression.MainPanelListener +
  +
fromRGB(int[][][]) - +Method in interface waveletCompression.colorSpace.ColorSpace +
Wandelt ein RGB-Bild in den Farbraum. +
fromRGB(int[][][]) - +Method in class waveletCompression.colorSpace.ColorSpaceCMYK +
  +
fromRGB(int[][][]) - +Method in class waveletCompression.colorSpace.ColorSpaceHSB +
  +
fromRGB(int[][][]) - +Method in class waveletCompression.colorSpace.ColorSpaceRGB +
  +
fromRGB(int[][][]) - +Method in class waveletCompression.colorSpace.ColorSpaceYCbCr +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-5.html b/www/uni/ws05/scivis/doc/index-files/index-5.html new file mode 100644 index 0000000..e9c24e9 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-5.html @@ -0,0 +1,200 @@ + + + + + + +G-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+G

+
+
getArray(ImageIcon) - +Method in class waveletCompression.ImageUtil +
Wandelt ein ImageIcon in ein int-Array um, mit dem die Kompression durchgeführt werden kann. +
getCompressedFileSize(double[][][]) - +Method in class waveletCompression.ImageUtil +
Bestimmt Größe des komprimierten Bildes, d.h. zählt sämtliche Bildelemente + mit Wert ungleich Null. +
getImage(int[][][]) - +Method in class waveletCompression.ImageUtil +
Wandelt ein int-Array mit Bildelementen in ein ImageIcon-Objekt um, das zur Anzeige + des Bildes verwendet werden kann. +
getKeys() - +Method in class waveletCompression.i18n.TextResource +
  +
getName() - +Method in interface waveletCompression.colorSpace.ColorSpace +
  +
getName() - +Method in class waveletCompression.colorSpace.ColorSpaceCMYK +
  +
getName() - +Method in class waveletCompression.colorSpace.ColorSpaceHSB +
  +
getName() - +Method in class waveletCompression.colorSpace.ColorSpaceRGB +
  +
getName() - +Method in class waveletCompression.colorSpace.ColorSpaceYCbCr +
  +
getNameOfComponent(int) - +Method in interface waveletCompression.colorSpace.ColorSpace +
  +
getNameOfComponent(int) - +Method in class waveletCompression.colorSpace.ColorSpaceCMYK +
  +
getNameOfComponent(int) - +Method in class waveletCompression.colorSpace.ColorSpaceHSB +
  +
getNameOfComponent(int) - +Method in class waveletCompression.colorSpace.ColorSpaceRGB +
  +
getNameOfComponent(int) - +Method in class waveletCompression.colorSpace.ColorSpaceYCbCr +
  +
getNumberOfComponents() - +Method in interface waveletCompression.colorSpace.ColorSpace +
Gibt die Anzahl der Komponenten im Farbraum zurück. +
getNumberOfComponents() - +Method in class waveletCompression.colorSpace.ColorSpaceCMYK +
  +
getNumberOfComponents() - +Method in class waveletCompression.colorSpace.ColorSpaceHSB +
  +
getNumberOfComponents() - +Method in class waveletCompression.colorSpace.ColorSpaceRGB +
  +
getNumberOfComponents() - +Method in class waveletCompression.colorSpace.ColorSpaceYCbCr +
  +
getParent() - +Method in class waveletCompression.i18n.TextResource +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-6.html b/www/uni/ws05/scivis/doc/index-files/index-6.html new file mode 100644 index 0000000..3d97108 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-6.html @@ -0,0 +1,141 @@ + + + + + + +H-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+H

+
+
handleGetObject(String) - +Method in class waveletCompression.i18n.TextResource +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-7.html b/www/uni/ws05/scivis/doc/index-files/index-7.html new file mode 100644 index 0000000..e362062 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-7.html @@ -0,0 +1,153 @@ + + + + + + +I-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+I

+
+
IMAGE_INITIAL_LOADING_EXCEPTION - +Static variable in class waveletCompression.WaveletCompression +
  +
IMAGE_LOADING_EXCEPTION - +Static variable in class waveletCompression.WaveletCompression +
  +
ImageUtil - Class in waveletCompression
Initialisierungs- und Hilfsfunktionen für das Arbeiten mit Bildern.
ImageUtil() - +Constructor for class waveletCompression.ImageUtil +
  +
init() - +Method in class waveletCompression.WaveletCompression +
  +
itemStateChanged(ItemEvent) - +Method in class waveletCompression.MainPanelListener +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-8.html b/www/uni/ws05/scivis/doc/index-files/index-8.html new file mode 100644 index 0000000..fb64cf5 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-8.html @@ -0,0 +1,141 @@ + + + + + + +K-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+K

+
+
keyPressed(KeyEvent) - +Method in class waveletCompression.MainPanelListener +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index-files/index-9.html b/www/uni/ws05/scivis/doc/index-files/index-9.html new file mode 100644 index 0000000..10c6f94 --- /dev/null +++ b/www/uni/ws05/scivis/doc/index-files/index-9.html @@ -0,0 +1,141 @@ + + + + + + +L-Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+

+L

+
+
L2_ERROR_COMPRESSION - +Variable in class waveletCompression.Compressor +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A C D F G H I K L M R S T U W
+ + + diff --git a/www/uni/ws05/scivis/doc/index.html b/www/uni/ws05/scivis/doc/index.html new file mode 100644 index 0000000..6238caf --- /dev/null +++ b/www/uni/ws05/scivis/doc/index.html @@ -0,0 +1,37 @@ + + + + + + +Generated Documentation (Untitled) + + + + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="overview-summary.html">Non-frame version.</A> + + + diff --git a/www/uni/ws05/scivis/doc/overview-frame.html b/www/uni/ws05/scivis/doc/overview-frame.html new file mode 100644 index 0000000..c025869 --- /dev/null +++ b/www/uni/ws05/scivis/doc/overview-frame.html @@ -0,0 +1,46 @@ + + + + + + +Overview + + + + + + + + + + + + + + + +
+
+ + + + + +
All Classes +

+ +Packages +
+waveletCompression +
+waveletCompression.colorSpace +
+waveletCompression.i18n +
+

+ +

+  + + diff --git a/www/uni/ws05/scivis/doc/overview-summary.html b/www/uni/ws05/scivis/doc/overview-summary.html new file mode 100644 index 0000000..c7b64c0 --- /dev/null +++ b/www/uni/ws05/scivis/doc/overview-summary.html @@ -0,0 +1,161 @@ + + + + + + +Overview + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +


+
+

+Wavelet Compression Applet +

+
+ + + + + + + + + + + + + + + + + +
+Packages
waveletCompression 
waveletCompression.colorSpace 
waveletCompression.i18n 
+ +


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/overview-tree.html b/www/uni/ws05/scivis/doc/overview-tree.html new file mode 100644 index 0000000..d32ca12 --- /dev/null +++ b/www/uni/ws05/scivis/doc/overview-tree.html @@ -0,0 +1,184 @@ + + + + + + +Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For All Packages

+
+
+
Package Hierarchies:
waveletCompression, waveletCompression.colorSpace, waveletCompression.i18n
+
+

+Class Hierarchy +

+
    +
  • java.lang.Object
      +
    • waveletCompression.colorSpace.ColorSpaceCMYK (implements waveletCompression.colorSpace.ColorSpace) +
    • waveletCompression.colorSpace.ColorSpaceHSB (implements waveletCompression.colorSpace.ColorSpace) +
    • waveletCompression.colorSpace.ColorSpaceRGB (implements waveletCompression.colorSpace.ColorSpace) +
    • waveletCompression.colorSpace.ColorSpaceYCbCr (implements waveletCompression.colorSpace.ColorSpace) +
    • java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable) +
        +
      • java.awt.Container
          +
        • javax.swing.JComponent (implements java.io.Serializable) +
            +
          • javax.swing.JPanel (implements javax.accessibility.Accessible) + +
          +
        • java.awt.Panel (implements javax.accessibility.Accessible) +
            +
          • java.applet.Applet
              +
            • javax.swing.JApplet (implements javax.accessibility.Accessible, javax.swing.RootPaneContainer) + +
            +
          +
        +
      +
    • waveletCompression.Compressor
    • waveletCompression.ImageUtil
    • java.awt.event.KeyAdapter (implements java.awt.event.KeyListener) +
        +
      • waveletCompression.MainPanelListener (implements java.awt.event.ActionListener, javax.swing.event.ChangeListener, java.awt.event.FocusListener, java.awt.event.ItemListener) +
      +
    • java.util.ResourceBundle +
    +
+

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/package-list b/www/uni/ws05/scivis/doc/package-list new file mode 100644 index 0000000..65e65d4 --- /dev/null +++ b/www/uni/ws05/scivis/doc/package-list @@ -0,0 +1,3 @@ +waveletCompression +waveletCompression.colorSpace +waveletCompression.i18n diff --git a/www/uni/ws05/scivis/doc/resources/inherit.gif b/www/uni/ws05/scivis/doc/resources/inherit.gif new file mode 100644 index 0000000..c814867 Binary files /dev/null and b/www/uni/ws05/scivis/doc/resources/inherit.gif differ diff --git a/www/uni/ws05/scivis/doc/serialized-form.html b/www/uni/ws05/scivis/doc/serialized-form.html new file mode 100644 index 0000000..0208c40 --- /dev/null +++ b/www/uni/ws05/scivis/doc/serialized-form.html @@ -0,0 +1,465 @@ + + + + + + +Serialized Form + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Serialized Form

+
+
+ + + + + +
+Package waveletCompression
+ +

+ + + + + +
+Class waveletCompression.MainPanel extends javax.swing.JPanel implements Serializable
+ +

+ + + + + +
+Serialized Fields
+ +

+COLOR_SPACES

+
+ColorSpace[] COLOR_SPACES
+
+
+
+
+
+

+SLIDER_MIN_INDEX

+
+int SLIDER_MIN_INDEX
+
+
+
+
+
+

+SLIDER_MAX_INDEX

+
+int SLIDER_MAX_INDEX
+
+
+
+
+
+

+SLIDER_INIT_INDEX

+
+int SLIDER_INIT_INDEX
+
+
+
+
+
+

+SIZE_SLIDER_LEFT_RELATION

+
+int SIZE_SLIDER_LEFT_RELATION
+
+
+
+
+
+

+SIZE_SLIDER_RIGHT_RELATION

+
+int SIZE_SLIDER_RIGHT_RELATION
+
+
+
+
+
+

+images

+
+java.lang.Object[] images
+
+
+
+
+
+

+listener

+
+MainPanelListener listener
+
+
+
+
+
+

+textbundle

+
+java.util.ResourceBundle textbundle
+
+
+
+
+
+

+gridBagLayout

+
+java.awt.GridBagLayout gridBagLayout
+
+
+
+
+
+

+gbc

+
+java.awt.GridBagConstraints gbc
+
+
+
+
+
+

+imageFileLabel

+
+javax.swing.JLabel imageFileLabel
+
+
+
+
+
+

+imageComboBox

+
+javax.swing.JComboBox imageComboBox
+
+
+
+
+
+

+originalImageLabel

+
+javax.swing.JLabel originalImageLabel
+
+
+
+
+
+

+compressedImageLabel

+
+javax.swing.JLabel compressedImageLabel
+
+
+
+
+
+

+originalImageText

+
+javax.swing.JLabel originalImageText
+
+
+
+
+
+

+compressedImageText

+
+javax.swing.JLabel compressedImageText
+
+
+
+
+
+

+methodLabel

+
+javax.swing.JLabel methodLabel
+
+
+
+
+
+

+methodComboBox

+
+javax.swing.JComboBox methodComboBox
+
+
+
+
+
+

+componentRadioButton

+
+javax.swing.JRadioButton componentRadioButton
+
+
+
+
+
+

+sizeRadioButton

+
+javax.swing.JRadioButton sizeRadioButton
+
+
+
+
+
+

+compressionLabel

+
+javax.swing.JLabel compressionLabel
+
+
+
+
+
+

+compressionComboBox

+
+javax.swing.JComboBox compressionComboBox
+
+
+
+
+
+

+colorSpaceLabel

+
+javax.swing.JLabel colorSpaceLabel
+
+
+
+
+
+

+colorSpaceComboBox

+
+javax.swing.JComboBox colorSpaceComboBox
+
+
+
+
+
+

+componentLabel

+
+javax.swing.JLabel[] componentLabel
+
+
+
+
+
+

+componentSlider

+
+javax.swing.JSlider[] componentSlider
+
+
+
+
+
+

+componentTextField

+
+javax.swing.JTextField[] componentTextField
+
+
+
+
+
+

+percentLabel

+
+javax.swing.JLabel[] percentLabel
+
+
+
+
+
+

+sizeLabel

+
+javax.swing.JLabel sizeLabel
+
+
+
+
+
+

+sizeSlider

+
+javax.swing.JSlider sizeSlider
+
+
+
+
+
+

+compressButton

+
+javax.swing.JButton compressButton
+
+
+
+
+ +

+ + + + + +
+Class waveletCompression.WaveletCompression extends javax.swing.JApplet implements Serializable
+ +

+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/stylesheet.css b/www/uni/ws05/scivis/doc/stylesheet.css new file mode 100644 index 0000000..14c3737 --- /dev/null +++ b/www/uni/ws05/scivis/doc/stylesheet.css @@ -0,0 +1,29 @@ +/* Javadoc style sheet */ + +/* Define colors, fonts and other style attributes here to override the defaults */ + +/* Page background color */ +body { background-color: #FFFFFF } + +/* Headings */ +h1 { font-size: 145% } + +/* Table colors */ +.TableHeadingColor { background: #CCCCFF } /* Dark mauve */ +.TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ +.TableRowColor { background: #FFFFFF } /* White */ + +/* Font used in left-hand frame lists */ +.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif } +.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } +.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif } + +/* Navigation bar fonts and colors */ +.NavBarCell1 { background-color:#EEEEFF;} /* Light mauve */ +.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */ +.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} +.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} + +.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} +.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/Compressor.html b/www/uni/ws05/scivis/doc/waveletCompression/Compressor.html new file mode 100644 index 0000000..b9c8175 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/Compressor.html @@ -0,0 +1,363 @@ + + + + + + +Compressor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression +
+Class Compressor

+
+java.lang.Object
+  extended by waveletCompression.Compressor
+
+
+
+
public class Compressor
extends java.lang.Object
+ + +

+Die Compressor-Klasse beinhaltet die Methoden für Waveletkompression und Rekonstruktion von + komprimierten Bildern. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+ intDISTANCE_COMPRESSION + +
+           
+ intL2_ERROR_COMPRESSION + +
+           
+ intSIZE_COMPRESSION + +
+           
+  + + + + + + + + + + +
+Constructor Summary
Compressor() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ double[][]compress(double[][] value, + boolean standardDecomposition, + int compressionType, + int compressionValue) + +
+          Komprimiert die Bilddaten nach L²-Fehler, Distanzfehler oder mit Standard- oder Nonstandard-Dekomposition
+ double[][]reconstruct(double[][] value, + boolean standardDecomposition) + +
+          Rekonstruiert ein komprimiertes Bild
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+L2_ERROR_COMPRESSION

+
+public final int L2_ERROR_COMPRESSION
+
+
+
See Also:
Constant Field Values
+
+
+ +

+DISTANCE_COMPRESSION

+
+public final int DISTANCE_COMPRESSION
+
+
+
See Also:
Constant Field Values
+
+
+ +

+SIZE_COMPRESSION

+
+public final int SIZE_COMPRESSION
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+Compressor

+
+public Compressor()
+
+
+ + + + + + + + +
+Method Detail
+ +

+compress

+
+public double[][] compress(double[][] value,
+                           boolean standardDecomposition,
+                           int compressionType,
+                           int compressionValue)
+
+
Komprimiert die Bilddaten nach L²-Fehler, Distanzfehler oder mit Standard- oder Nonstandard-Dekomposition +

+

+
Parameters:
value - value Grauwerte der Bilddaten im 2-dim Array, wobei value.length die Anzahl der Reihen und value[0].length die Anzahl der Spalten ist.
standardDecomposition - Verfahren der Tranformation
compressionType - Kompressionsverfahren (L2_ERROR_COMPRESSION, DISTANCE_COMPRESSION oder SIZE_COMPRESSION)
compressionValue - Kompressionsgrad in L²-Fehler, wenn compressionType == L2_ERROR_COMPRESSION, in Prozent, wenn compressionType == DISTANCE_COMPRESSION oder resultierender Dateiendgroesse, wenn compressionType == SIZE_COMPRESSION. +
Returns:
komprimierte Bilddaten.
+
+
+
+ +

+reconstruct

+
+public double[][] reconstruct(double[][] value,
+                              boolean standardDecomposition)
+
+
Rekonstruiert ein komprimiertes Bild +

+

+
Parameters:
value - Bilddaten
standardDecomposition - Verfahren der Transformation +
Returns:
rekonstruierte Bilddaten
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/ImageUtil.html b/www/uni/ws05/scivis/doc/waveletCompression/ImageUtil.html new file mode 100644 index 0000000..fbad4f9 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/ImageUtil.html @@ -0,0 +1,308 @@ + + + + + + +ImageUtil + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression +
+Class ImageUtil

+
+java.lang.Object
+  extended by waveletCompression.ImageUtil
+
+
+
+
public class ImageUtil
extends java.lang.Object
+ + +

+Initialisierungs- und Hilfsfunktionen für das Arbeiten mit Bildern. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ImageUtil() + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ int[][][]getArray(javax.swing.ImageIcon imageIcon) + +
+          Wandelt ein ImageIcon in ein int-Array um, mit dem die Kompression durchgeführt werden kann.
+ intgetCompressedFileSize(double[][][] compressedData) + +
+          Bestimmt Größe des komprimierten Bildes, d.h. zählt sämtliche Bildelemente + mit Wert ungleich Null.
+ javax.swing.ImageIcongetImage(int[][][] imageArray) + +
+          Wandelt ein int-Array mit Bildelementen in ein ImageIcon-Objekt um, das zur Anzeige + des Bildes verwendet werden kann.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ImageUtil

+
+public ImageUtil()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getArray

+
+public int[][][] getArray(javax.swing.ImageIcon imageIcon)
+
+
Wandelt ein ImageIcon in ein int-Array um, mit dem die Kompression durchgeführt werden kann. +

+

+
Parameters:
imageIcon - ein ImageIcon +
Returns:
ein dreidimensionales int-Array mit dem Schema [Farbkanal][Row][Column]
+
+
+
+ +

+getImage

+
+public javax.swing.ImageIcon getImage(int[][][] imageArray)
+
+
Wandelt ein int-Array mit Bildelementen in ein ImageIcon-Objekt um, das zur Anzeige + des Bildes verwendet werden kann. +

+

+
Parameters:
imageArray - ein Bild in Form eines int-Arrays +
Returns:
das Bild als ImageIcon
+
+
+
+ +

+getCompressedFileSize

+
+public int getCompressedFileSize(double[][][] compressedData)
+
+
Bestimmt Größe des komprimierten Bildes, d.h. zählt sämtliche Bildelemente + mit Wert ungleich Null. +

+

+
Parameters:
compressedData - das komprimierte Bild +
Returns:
die Größe des komprimierten Bildes
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/MainPanel.html b/www/uni/ws05/scivis/doc/waveletCompression/MainPanel.html new file mode 100644 index 0000000..4661f9f --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/MainPanel.html @@ -0,0 +1,420 @@ + + + + + + +MainPanel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression +
+Class MainPanel

+
+java.lang.Object
+  extended by java.awt.Component
+      extended by java.awt.Container
+          extended by javax.swing.JComponent
+              extended by javax.swing.JPanel
+                  extended by waveletCompression.MainPanel
+
+
+
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible
+
+
+
+
public class MainPanel
extends javax.swing.JPanel
+ + +

+Das Panel mit sämtlichen GUI-Elementen. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
+  + + + + + + + + +
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
+  + + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
+ + + + + + + +
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
+ + + + + + + +
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
+  + + + + + + + + + + + + + +
+Constructor Summary
MainPanel(java.lang.String[] images) + +
+           
MainPanel(java.net.URL[] imageURLs) + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+protected  javax.swing.JPanelcreateImagePanel(java.lang.Object originalImageLocation) + +
+           
+protected  voidupdateSizes(int originalImageSize, + int compressedImageSize) + +
+           
+ + + + + + + +
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
+ + + + + + + +
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
+ + + + + + + +
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
+ + + + + + + +
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+MainPanel

+
+public MainPanel(java.lang.String[] images)
+
+
+
+ +

+MainPanel

+
+public MainPanel(java.net.URL[] imageURLs)
+
+
+ + + + + + + + +
+Method Detail
+ +

+createImagePanel

+
+protected javax.swing.JPanel createImagePanel(java.lang.Object originalImageLocation)
+
+
+
+
+
+
+ +

+updateSizes

+
+protected void updateSizes(int originalImageSize,
+                           int compressedImageSize)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/MainPanelListener.html b/www/uni/ws05/scivis/doc/waveletCompression/MainPanelListener.html new file mode 100644 index 0000000..50e51e8 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/MainPanelListener.html @@ -0,0 +1,383 @@ + + + + + + +MainPanelListener + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression +
+Class MainPanelListener

+
+java.lang.Object
+  extended by java.awt.event.KeyAdapter
+      extended by waveletCompression.MainPanelListener
+
+
+
All Implemented Interfaces:
java.awt.event.ActionListener, java.awt.event.FocusListener, java.awt.event.ItemListener, java.awt.event.KeyListener, java.util.EventListener, javax.swing.event.ChangeListener
+
+
+
+
public class MainPanelListener
extends java.awt.event.KeyAdapter
implements java.awt.event.ActionListener, java.awt.event.FocusListener, java.awt.event.ItemListener, javax.swing.event.ChangeListener
+ + +

+Der MainPanelListener übernimmt die Ereignisbehandlung der GUI. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
MainPanelListener(MainPanel panel) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidactionPerformed(java.awt.event.ActionEvent e) + +
+           
+ voidfocusGained(java.awt.event.FocusEvent e) + +
+           
+ voidfocusLost(java.awt.event.FocusEvent e) + +
+           
+ voiditemStateChanged(java.awt.event.ItemEvent e) + +
+           
+ voidkeyPressed(java.awt.event.KeyEvent e) + +
+           
+ voidstateChanged(javax.swing.event.ChangeEvent e) + +
+           
+ + + + + + + +
Methods inherited from class java.awt.event.KeyAdapter
keyReleased, keyTyped
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+MainPanelListener

+
+public MainPanelListener(MainPanel panel)
+
+
+ + + + + + + + +
+Method Detail
+ +

+actionPerformed

+
+public void actionPerformed(java.awt.event.ActionEvent e)
+
+
+
Specified by:
actionPerformed in interface java.awt.event.ActionListener
+
+
+
+
+
+
+ +

+itemStateChanged

+
+public void itemStateChanged(java.awt.event.ItemEvent e)
+
+
+
Specified by:
itemStateChanged in interface java.awt.event.ItemListener
+
+
+
+
+
+
+ +

+focusGained

+
+public void focusGained(java.awt.event.FocusEvent e)
+
+
+
Specified by:
focusGained in interface java.awt.event.FocusListener
+
+
+
+
+
+
+ +

+focusLost

+
+public void focusLost(java.awt.event.FocusEvent e)
+
+
+
Specified by:
focusLost in interface java.awt.event.FocusListener
+
+
+
+
+
+
+ +

+keyPressed

+
+public void keyPressed(java.awt.event.KeyEvent e)
+
+
+
Specified by:
keyPressed in interface java.awt.event.KeyListener
Overrides:
keyPressed in class java.awt.event.KeyAdapter
+
+
+
+
+
+
+ +

+stateChanged

+
+public void stateChanged(javax.swing.event.ChangeEvent e)
+
+
+
Specified by:
stateChanged in interface javax.swing.event.ChangeListener
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/WaveletCompression.html b/www/uni/ws05/scivis/doc/waveletCompression/WaveletCompression.html new file mode 100644 index 0000000..a06f6c0 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/WaveletCompression.html @@ -0,0 +1,485 @@ + + + + + + +WaveletCompression + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression +
+Class WaveletCompression

+
+java.lang.Object
+  extended by java.awt.Component
+      extended by java.awt.Container
+          extended by java.awt.Panel
+              extended by java.applet.Applet
+                  extended by javax.swing.JApplet
+                      extended by waveletCompression.WaveletCompression
+
+
+
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer
+
+
+
+
public class WaveletCompression
extends javax.swing.JApplet
+ + +

+Die Klasse WaveletCompression initialisiert und startet das Programm. + Das Programm kann sowohl als Applet in Webseiten eingebettet als auch als Applikation + gestartet werden. Die Bilddateien, die das Programm zur Verfügung stellen soll, werden + dabei über die Kommandozeile bzw. über den Applet-Parameter

images
angegeben: +
+   <applet code=""waveletCompression.WaveletCompression.class width="640" height="510">
+     <param name="images" value="chess.png klee.png">
+   </applet>
+ 
+ Beim Starten als Applet müssen sich die Dateien im selben Verzeichnis wie das HTML-Dokument + befinden. Bilder können in den Formaten GIF, JPEG oder PNG übergeben werden. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
See Also:
Serialized Form
+
+ +

+ + + + + + + +
+Nested Class Summary
+ + + + + + + +
Nested classes/interfaces inherited from class javax.swing.JApplet
javax.swing.JApplet.AccessibleJApplet
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.applet.Applet
java.applet.Applet.AccessibleApplet
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Panel
java.awt.Panel.AccessibleAWTPanel
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
+  + + + + + + + + +
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
+  + + + + + + + + + + + + + + + +
+Field Summary
+static intIMAGE_INITIAL_LOADING_EXCEPTION + +
+           
+static intIMAGE_LOADING_EXCEPTION + +
+           
+ + + + + + + +
Fields inherited from class javax.swing.JApplet
accessibleContext, rootPane, rootPaneCheckingEnabled
+ + + + + + + +
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
+ + + + + + + +
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
+  + + + + + + + + + + +
+Constructor Summary
WaveletCompression() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ voidinit() + +
+           
+static voidmain(java.lang.String[] args) + +
+           
+ + + + + + + +
Methods inherited from class javax.swing.JApplet
addImpl, createRootPane, getAccessibleContext, getContentPane, getGlassPane, getJMenuBar, getLayeredPane, getRootPane, isRootPaneCheckingEnabled, paramString, remove, setContentPane, setGlassPane, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, update
+ + + + + + + +
Methods inherited from class java.applet.Applet
destroy, getAppletContext, getAppletInfo, getAudioClip, getAudioClip, getCodeBase, getDocumentBase, getImage, getImage, getLocale, getParameter, getParameterInfo, isActive, newAudioClip, play, play, resize, resize, setStub, showStatus, start, stop
+ + + + + + + +
Methods inherited from class java.awt.Panel
addNotify
+ + + + + + + +
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getInsets, getLayout, getListeners, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, processEvent, remove, removeAll, removeContainerListener, removeNotify, setComponentZOrder, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusBackward, transferFocusDownCycle, validate, validateTree
+ + + + + + + +
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusUpCycle
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+IMAGE_INITIAL_LOADING_EXCEPTION

+
+public static final int IMAGE_INITIAL_LOADING_EXCEPTION
+
+
+
See Also:
Constant Field Values
+
+
+ +

+IMAGE_LOADING_EXCEPTION

+
+public static final int IMAGE_LOADING_EXCEPTION
+
+
+
See Also:
Constant Field Values
+
+ + + + + + + + +
+Constructor Detail
+ +

+WaveletCompression

+
+public WaveletCompression()
+
+
+ + + + + + + + +
+Method Detail
+ +

+main

+
+public static void main(java.lang.String[] args)
+                 throws java.net.MalformedURLException
+
+
+ +
Throws: +
java.net.MalformedURLException
+
+
+
+ +

+init

+
+public void init()
+
+
+
Overrides:
init in class java.applet.Applet
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/class-use/Compressor.html b/www/uni/ws05/scivis/doc/waveletCompression/class-use/Compressor.html new file mode 100644 index 0000000..9491a8a --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/class-use/Compressor.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.Compressor + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.Compressor

+
+No usage of waveletCompression.Compressor +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/class-use/ImageUtil.html b/www/uni/ws05/scivis/doc/waveletCompression/class-use/ImageUtil.html new file mode 100644 index 0000000..919ba0f --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/class-use/ImageUtil.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.ImageUtil + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.ImageUtil

+
+No usage of waveletCompression.ImageUtil +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/class-use/MainPanel.html b/www/uni/ws05/scivis/doc/waveletCompression/class-use/MainPanel.html new file mode 100644 index 0000000..2b10307 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/class-use/MainPanel.html @@ -0,0 +1,174 @@ + + + + + + +Uses of Class waveletCompression.MainPanel + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.MainPanel

+
+ + + + + + + + + +
+Packages that use MainPanel
waveletCompression  
+  +

+ + + + + +
+Uses of MainPanel in waveletCompression
+  +

+ + + + + + + + +
Constructors in waveletCompression with parameters of type MainPanel
MainPanelListener(MainPanel panel) + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/class-use/MainPanelListener.html b/www/uni/ws05/scivis/doc/waveletCompression/class-use/MainPanelListener.html new file mode 100644 index 0000000..09156d7 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/class-use/MainPanelListener.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.MainPanelListener + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.MainPanelListener

+
+No usage of waveletCompression.MainPanelListener +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/class-use/WaveletCompression.html b/www/uni/ws05/scivis/doc/waveletCompression/class-use/WaveletCompression.html new file mode 100644 index 0000000..5d7fda3 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/class-use/WaveletCompression.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.WaveletCompression + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.WaveletCompression

+
+No usage of waveletCompression.WaveletCompression +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpace.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpace.html new file mode 100644 index 0000000..06f4071 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpace.html @@ -0,0 +1,302 @@ + + + + + + +ColorSpace + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression.colorSpace +
+Interface ColorSpace

+
+
All Known Implementing Classes:
ColorSpaceCMYK, ColorSpaceHSB, ColorSpaceRGB, ColorSpaceYCbCr
+
+
+
+
public interface ColorSpace
+ + +

+Das ColorSpace-Interface bietet Zugriff auf verschiedene Farbraum-Implementierungen. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ double[][][]fromRGB(int[][][] image) + +
+          Wandelt ein RGB-Bild in den Farbraum.
+ java.lang.StringgetName() + +
+           
+ java.lang.StringgetNameOfComponent(int i) + +
+           
+ intgetNumberOfComponents() + +
+          Gibt die Anzahl der Komponenten im Farbraum zurück.
+ int[][][]toRGB(double[][][] image) + +
+          Wandelt ein Bild aus dem Farbraum nach RGB.
+  +

+ + + + + + + + +
+Method Detail
+ +

+getName

+
+java.lang.String getName()
+
+
+ +
Returns:
der Name des Farbraums
+
+
+
+ +

+getNumberOfComponents

+
+int getNumberOfComponents()
+
+
Gibt die Anzahl der Komponenten im Farbraum zurück. Also z.B. 3 für RGB und + 4 für CMYK. +

+

+ +
Returns:
die Anzahl der Komponenten im Farbraum
+
+
+
+ +

+getNameOfComponent

+
+java.lang.String getNameOfComponent(int i)
+
+
+
Parameters:
i - Nr. der Farbkomponente +
Returns:
den Namen der Komponente Nr. i
+
+
+
+ +

+fromRGB

+
+double[][][] fromRGB(int[][][] image)
+
+
Wandelt ein RGB-Bild in den Farbraum. +

+

+
Parameters:
image - ein Bild mit RGB-Werten +
Returns:
das Bild im Farbraum
+
+
+
+ +

+toRGB

+
+int[][][] toRGB(double[][][] image)
+
+
Wandelt ein Bild aus dem Farbraum nach RGB. +

+

+
Parameters:
image - ein Bild im Farbraum +
Returns:
das Bild als RGB-Repräsentation
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceCMYK.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceCMYK.html new file mode 100644 index 0000000..e0c6f3c --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceCMYK.html @@ -0,0 +1,366 @@ + + + + + + +ColorSpaceCMYK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression.colorSpace +
+Class ColorSpaceCMYK

+
+java.lang.Object
+  extended by waveletCompression.colorSpace.ColorSpaceCMYK
+
+
+
All Implemented Interfaces:
ColorSpace
+
+
+
+
public class ColorSpaceCMYK
extends java.lang.Object
implements ColorSpace
+ + +

+Der CMYK-Farbraum. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ColorSpaceCMYK() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ double[][][]fromRGB(int[][][] image) + +
+          Wandelt ein RGB-Bild in den Farbraum.
+ java.lang.StringgetName() + +
+           
+ java.lang.StringgetNameOfComponent(int i) + +
+           
+ intgetNumberOfComponents() + +
+          Gibt die Anzahl der Komponenten im Farbraum zurück.
+ int[][][]toRGB(double[][][] image) + +
+          Wandelt ein Bild aus dem Farbraum nach RGB.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ColorSpaceCMYK

+
+public ColorSpaceCMYK()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getName

+
+public java.lang.String getName()
+
+
+
Specified by:
getName in interface ColorSpace
+
+
+ +
Returns:
der Name des Farbraums
+
+
+
+ +

+getNumberOfComponents

+
+public int getNumberOfComponents()
+
+
Description copied from interface: ColorSpace
+
Gibt die Anzahl der Komponenten im Farbraum zurück. Also z.B. 3 für RGB und + 4 für CMYK. +

+

+
Specified by:
getNumberOfComponents in interface ColorSpace
+
+
+ +
Returns:
die Anzahl der Komponenten im Farbraum
+
+
+
+ +

+getNameOfComponent

+
+public java.lang.String getNameOfComponent(int i)
+
+
+
Specified by:
getNameOfComponent in interface ColorSpace
+
+
+
Parameters:
i - Nr. der Farbkomponente +
Returns:
den Namen der Komponente Nr. i
+
+
+
+ +

+fromRGB

+
+public double[][][] fromRGB(int[][][] image)
+
+
Description copied from interface: ColorSpace
+
Wandelt ein RGB-Bild in den Farbraum. +

+

+
Specified by:
fromRGB in interface ColorSpace
+
+
+
Parameters:
image - ein Bild mit RGB-Werten +
Returns:
das Bild im Farbraum
+
+
+
+ +

+toRGB

+
+public int[][][] toRGB(double[][][] image)
+
+
Description copied from interface: ColorSpace
+
Wandelt ein Bild aus dem Farbraum nach RGB. +

+

+
Specified by:
toRGB in interface ColorSpace
+
+
+
Parameters:
image - ein Bild im Farbraum +
Returns:
das Bild als RGB-Repräsentation
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceHSB.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceHSB.html new file mode 100644 index 0000000..7d6e8a8 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceHSB.html @@ -0,0 +1,366 @@ + + + + + + +ColorSpaceHSB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression.colorSpace +
+Class ColorSpaceHSB

+
+java.lang.Object
+  extended by waveletCompression.colorSpace.ColorSpaceHSB
+
+
+
All Implemented Interfaces:
ColorSpace
+
+
+
+
public class ColorSpaceHSB
extends java.lang.Object
implements ColorSpace
+ + +

+Der HSB-Farbraum. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ColorSpaceHSB() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ double[][][]fromRGB(int[][][] image) + +
+          Wandelt ein RGB-Bild in den Farbraum.
+ java.lang.StringgetName() + +
+           
+ java.lang.StringgetNameOfComponent(int i) + +
+           
+ intgetNumberOfComponents() + +
+          Gibt die Anzahl der Komponenten im Farbraum zurück.
+ int[][][]toRGB(double[][][] image) + +
+          Wandelt ein Bild aus dem Farbraum nach RGB.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ColorSpaceHSB

+
+public ColorSpaceHSB()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getName

+
+public java.lang.String getName()
+
+
+
Specified by:
getName in interface ColorSpace
+
+
+ +
Returns:
der Name des Farbraums
+
+
+
+ +

+getNumberOfComponents

+
+public int getNumberOfComponents()
+
+
Description copied from interface: ColorSpace
+
Gibt die Anzahl der Komponenten im Farbraum zurück. Also z.B. 3 für RGB und + 4 für CMYK. +

+

+
Specified by:
getNumberOfComponents in interface ColorSpace
+
+
+ +
Returns:
die Anzahl der Komponenten im Farbraum
+
+
+
+ +

+getNameOfComponent

+
+public java.lang.String getNameOfComponent(int i)
+
+
+
Specified by:
getNameOfComponent in interface ColorSpace
+
+
+
Parameters:
i - Nr. der Farbkomponente +
Returns:
den Namen der Komponente Nr. i
+
+
+
+ +

+fromRGB

+
+public double[][][] fromRGB(int[][][] image)
+
+
Description copied from interface: ColorSpace
+
Wandelt ein RGB-Bild in den Farbraum. +

+

+
Specified by:
fromRGB in interface ColorSpace
+
+
+
Parameters:
image - ein Bild mit RGB-Werten +
Returns:
das Bild im Farbraum
+
+
+
+ +

+toRGB

+
+public int[][][] toRGB(double[][][] image)
+
+
Description copied from interface: ColorSpace
+
Wandelt ein Bild aus dem Farbraum nach RGB. +

+

+
Specified by:
toRGB in interface ColorSpace
+
+
+
Parameters:
image - ein Bild im Farbraum +
Returns:
das Bild als RGB-Repräsentation
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceRGB.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceRGB.html new file mode 100644 index 0000000..98d9e59 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceRGB.html @@ -0,0 +1,366 @@ + + + + + + +ColorSpaceRGB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression.colorSpace +
+Class ColorSpaceRGB

+
+java.lang.Object
+  extended by waveletCompression.colorSpace.ColorSpaceRGB
+
+
+
All Implemented Interfaces:
ColorSpace
+
+
+
+
public class ColorSpaceRGB
extends java.lang.Object
implements ColorSpace
+ + +

+Der RGB-Farbraum. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ColorSpaceRGB() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ double[][][]fromRGB(int[][][] image) + +
+          Wandelt ein RGB-Bild in den Farbraum.
+ java.lang.StringgetName() + +
+           
+ java.lang.StringgetNameOfComponent(int i) + +
+           
+ intgetNumberOfComponents() + +
+          Gibt die Anzahl der Komponenten im Farbraum zurück.
+ int[][][]toRGB(double[][][] image) + +
+          Wandelt ein Bild aus dem Farbraum nach RGB.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ColorSpaceRGB

+
+public ColorSpaceRGB()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getName

+
+public java.lang.String getName()
+
+
+
Specified by:
getName in interface ColorSpace
+
+
+ +
Returns:
der Name des Farbraums
+
+
+
+ +

+getNumberOfComponents

+
+public int getNumberOfComponents()
+
+
Description copied from interface: ColorSpace
+
Gibt die Anzahl der Komponenten im Farbraum zurück. Also z.B. 3 für RGB und + 4 für CMYK. +

+

+
Specified by:
getNumberOfComponents in interface ColorSpace
+
+
+ +
Returns:
die Anzahl der Komponenten im Farbraum
+
+
+
+ +

+getNameOfComponent

+
+public java.lang.String getNameOfComponent(int i)
+
+
+
Specified by:
getNameOfComponent in interface ColorSpace
+
+
+
Parameters:
i - Nr. der Farbkomponente +
Returns:
den Namen der Komponente Nr. i
+
+
+
+ +

+fromRGB

+
+public double[][][] fromRGB(int[][][] image)
+
+
Description copied from interface: ColorSpace
+
Wandelt ein RGB-Bild in den Farbraum. +

+

+
Specified by:
fromRGB in interface ColorSpace
+
+
+
Parameters:
image - ein Bild mit RGB-Werten +
Returns:
das Bild im Farbraum
+
+
+
+ +

+toRGB

+
+public int[][][] toRGB(double[][][] image)
+
+
Description copied from interface: ColorSpace
+
Wandelt ein Bild aus dem Farbraum nach RGB. +

+

+
Specified by:
toRGB in interface ColorSpace
+
+
+
Parameters:
image - ein Bild im Farbraum +
Returns:
das Bild als RGB-Repräsentation
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceYCbCr.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceYCbCr.html new file mode 100644 index 0000000..331571b --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/ColorSpaceYCbCr.html @@ -0,0 +1,366 @@ + + + + + + +ColorSpaceYCbCr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression.colorSpace +
+Class ColorSpaceYCbCr

+
+java.lang.Object
+  extended by waveletCompression.colorSpace.ColorSpaceYCbCr
+
+
+
All Implemented Interfaces:
ColorSpace
+
+
+
+
public class ColorSpaceYCbCr
extends java.lang.Object
implements ColorSpace
+ + +

+Der YCbCr-Farbraum. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
ColorSpaceYCbCr() + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ double[][][]fromRGB(int[][][] image) + +
+          Wandelt ein RGB-Bild in den Farbraum.
+ java.lang.StringgetName() + +
+           
+ java.lang.StringgetNameOfComponent(int i) + +
+           
+ intgetNumberOfComponents() + +
+          Gibt die Anzahl der Komponenten im Farbraum zurück.
+ int[][][]toRGB(double[][][] image) + +
+          Wandelt ein Bild aus dem Farbraum nach RGB.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+ColorSpaceYCbCr

+
+public ColorSpaceYCbCr()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getName

+
+public java.lang.String getName()
+
+
+
Specified by:
getName in interface ColorSpace
+
+
+ +
Returns:
der Name des Farbraums
+
+
+
+ +

+getNumberOfComponents

+
+public int getNumberOfComponents()
+
+
Description copied from interface: ColorSpace
+
Gibt die Anzahl der Komponenten im Farbraum zurück. Also z.B. 3 für RGB und + 4 für CMYK. +

+

+
Specified by:
getNumberOfComponents in interface ColorSpace
+
+
+ +
Returns:
die Anzahl der Komponenten im Farbraum
+
+
+
+ +

+getNameOfComponent

+
+public java.lang.String getNameOfComponent(int i)
+
+
+
Specified by:
getNameOfComponent in interface ColorSpace
+
+
+
Parameters:
i - Nr. der Farbkomponente +
Returns:
den Namen der Komponente Nr. i
+
+
+
+ +

+fromRGB

+
+public double[][][] fromRGB(int[][][] image)
+
+
Description copied from interface: ColorSpace
+
Wandelt ein RGB-Bild in den Farbraum. +

+

+
Specified by:
fromRGB in interface ColorSpace
+
+
+
Parameters:
image - ein Bild mit RGB-Werten +
Returns:
das Bild im Farbraum
+
+
+
+ +

+toRGB

+
+public int[][][] toRGB(double[][][] image)
+
+
Description copied from interface: ColorSpace
+
Wandelt ein Bild aus dem Farbraum nach RGB. +

+

+
Specified by:
toRGB in interface ColorSpace
+
+
+
Parameters:
image - ein Bild im Farbraum +
Returns:
das Bild als RGB-Repräsentation
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpace.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpace.html new file mode 100644 index 0000000..d19454a --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpace.html @@ -0,0 +1,200 @@ + + + + + + +Uses of Interface waveletCompression.colorSpace.ColorSpace + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Interface
waveletCompression.colorSpace.ColorSpace

+
+ + + + + + + + + +
+Packages that use ColorSpace
waveletCompression.colorSpace  
+  +

+ + + + + +
+Uses of ColorSpace in waveletCompression.colorSpace
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Classes in waveletCompression.colorSpace that implement ColorSpace
+ classColorSpaceCMYK + +
+          Der CMYK-Farbraum.
+ classColorSpaceHSB + +
+          Der HSB-Farbraum.
+ classColorSpaceRGB + +
+          Der RGB-Farbraum.
+ classColorSpaceYCbCr + +
+          Der YCbCr-Farbraum.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceCMYK.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceCMYK.html new file mode 100644 index 0000000..3290b9e --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceCMYK.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.colorSpace.ColorSpaceCMYK + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.colorSpace.ColorSpaceCMYK

+
+No usage of waveletCompression.colorSpace.ColorSpaceCMYK +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceHSB.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceHSB.html new file mode 100644 index 0000000..e4d14f9 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceHSB.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.colorSpace.ColorSpaceHSB + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.colorSpace.ColorSpaceHSB

+
+No usage of waveletCompression.colorSpace.ColorSpaceHSB +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceRGB.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceRGB.html new file mode 100644 index 0000000..0459d03 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceRGB.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.colorSpace.ColorSpaceRGB + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.colorSpace.ColorSpaceRGB

+
+No usage of waveletCompression.colorSpace.ColorSpaceRGB +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceYCbCr.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceYCbCr.html new file mode 100644 index 0000000..4b014eb --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/class-use/ColorSpaceYCbCr.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.colorSpace.ColorSpaceYCbCr + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.colorSpace.ColorSpaceYCbCr

+
+No usage of waveletCompression.colorSpace.ColorSpaceYCbCr +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-frame.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-frame.html new file mode 100644 index 0000000..bfb2fde --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-frame.html @@ -0,0 +1,49 @@ + + + + + + +waveletCompression.colorSpace + + + + + + + + + + + +waveletCompression.colorSpace + + + + +
+Interfaces  + +
+ColorSpace
+ + + + + + +
+Classes  + +
+ColorSpaceCMYK +
+ColorSpaceHSB +
+ColorSpaceRGB +
+ColorSpaceYCbCr
+ + + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-summary.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-summary.html new file mode 100644 index 0000000..6461761 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-summary.html @@ -0,0 +1,180 @@ + + + + + + +waveletCompression.colorSpace + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package waveletCompression.colorSpace +

+ + + + + + + + + +
+Interface Summary
ColorSpaceDas ColorSpace-Interface bietet Zugriff auf verschiedene Farbraum-Implementierungen.
+  + +

+ + + + + + + + + + + + + + + + + + + + + +
+Class Summary
ColorSpaceCMYKDer CMYK-Farbraum.
ColorSpaceHSBDer HSB-Farbraum.
ColorSpaceRGBDer RGB-Farbraum.
ColorSpaceYCbCrDer YCbCr-Farbraum.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-tree.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-tree.html new file mode 100644 index 0000000..b492d8d --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-tree.html @@ -0,0 +1,158 @@ + + + + + + +waveletCompression.colorSpace Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package waveletCompression.colorSpace +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +

+Interface Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-use.html b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-use.html new file mode 100644 index 0000000..91e37a1 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/colorSpace/package-use.html @@ -0,0 +1,166 @@ + + + + + + +Uses of Package waveletCompression.colorSpace + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
waveletCompression.colorSpace

+
+ + + + + + + + + +
+Packages that use waveletCompression.colorSpace
waveletCompression.colorSpace  
+  +

+ + + + + + + + +
+Classes in waveletCompression.colorSpace used by waveletCompression.colorSpace
ColorSpace + +
+          Das ColorSpace-Interface bietet Zugriff auf verschiedene Farbraum-Implementierungen.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/TextResource.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/TextResource.html new file mode 100644 index 0000000..fdd2a73 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/TextResource.html @@ -0,0 +1,355 @@ + + + + + + +TextResource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression.i18n +
+Class TextResource

+
+java.lang.Object
+  extended by java.util.ResourceBundle
+      extended by waveletCompression.i18n.TextResource
+
+
+
Direct Known Subclasses:
TextResources, TextResources_de
+
+
+
+
public class TextResource
extends java.util.ResourceBundle
+ + +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + + + + + +
+Field Summary
+protected  java.util.Hashtabledata + +
+           
+ + + + + + + +
Fields inherited from class java.util.ResourceBundle
parent
+  + + + + + + + + + + +
+Constructor Summary
TextResource() + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ java.util.EnumerationgetKeys() + +
+           
+ java.util.ResourceBundlegetParent() + +
+           
+ java.lang.ObjecthandleGetObject(java.lang.String key) + +
+           
+ + + + + + + +
Methods inherited from class java.util.ResourceBundle
getBundle, getBundle, getBundle, getLocale, getObject, getString, getStringArray, setParent
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+data

+
+protected java.util.Hashtable data
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+TextResource

+
+public TextResource()
+
+
+ + + + + + + + +
+Method Detail
+ +

+getKeys

+
+public java.util.Enumeration getKeys()
+
+
+
Specified by:
getKeys in class java.util.ResourceBundle
+
+
+
+
+
+
+ +

+handleGetObject

+
+public java.lang.Object handleGetObject(java.lang.String key)
+
+
+
Specified by:
handleGetObject in class java.util.ResourceBundle
+
+
+
+
+
+
+ +

+getParent

+
+public java.util.ResourceBundle getParent()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/TextResources.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/TextResources.html new file mode 100644 index 0000000..968e877 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/TextResources.html @@ -0,0 +1,276 @@ + + + + + + +TextResources + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression.i18n +
+Class TextResources

+
+java.lang.Object
+  extended by java.util.ResourceBundle
+      extended by waveletCompression.i18n.TextResource
+          extended by waveletCompression.i18n.TextResources
+
+
+
+
public class TextResources
extends TextResource
+ + +

+Enthält die englischen Textressourcen. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class waveletCompression.i18n.TextResource
data
+ + + + + + + +
Fields inherited from class java.util.ResourceBundle
parent
+  + + + + + + + + + + +
+Constructor Summary
TextResources() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class waveletCompression.i18n.TextResource
getKeys, getParent, handleGetObject
+ + + + + + + +
Methods inherited from class java.util.ResourceBundle
getBundle, getBundle, getBundle, getLocale, getObject, getString, getStringArray, setParent
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+TextResources

+
+public TextResources()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/TextResources_de.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/TextResources_de.html new file mode 100644 index 0000000..3d49e10 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/TextResources_de.html @@ -0,0 +1,276 @@ + + + + + + +TextResources_de + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +waveletCompression.i18n +
+Class TextResources_de

+
+java.lang.Object
+  extended by java.util.ResourceBundle
+      extended by waveletCompression.i18n.TextResource
+          extended by waveletCompression.i18n.TextResources_de
+
+
+
+
public class TextResources_de
extends TextResource
+ + +

+Enthält die deutschen Textressourcen. +

+ +

+

+
Author:
+
Bettina Selig, Tilman Walther
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class waveletCompression.i18n.TextResource
data
+ + + + + + + +
Fields inherited from class java.util.ResourceBundle
parent
+  + + + + + + + + + + +
+Constructor Summary
TextResources_de() + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class waveletCompression.i18n.TextResource
getKeys, getParent, handleGetObject
+ + + + + + + +
Methods inherited from class java.util.ResourceBundle
getBundle, getBundle, getBundle, getLocale, getObject, getString, getStringArray, setParent
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+TextResources_de

+
+public TextResources_de()
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/class-use/TextResource.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/class-use/TextResource.html new file mode 100644 index 0000000..ab8ecaf --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/class-use/TextResource.html @@ -0,0 +1,184 @@ + + + + + + +Uses of Class waveletCompression.i18n.TextResource + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.i18n.TextResource

+
+ + + + + + + + + +
+Packages that use TextResource
waveletCompression.i18n  
+  +

+ + + + + +
+Uses of TextResource in waveletCompression.i18n
+  +

+ + + + + + + + + + + + + +
Subclasses of TextResource in waveletCompression.i18n
+ classTextResources + +
+          Enthält die englischen Textressourcen.
+ classTextResources_de + +
+          Enthält die deutschen Textressourcen.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/class-use/TextResources.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/class-use/TextResources.html new file mode 100644 index 0000000..b71a285 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/class-use/TextResources.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.i18n.TextResources + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.i18n.TextResources

+
+No usage of waveletCompression.i18n.TextResources +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/class-use/TextResources_de.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/class-use/TextResources_de.html new file mode 100644 index 0000000..67082a1 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/class-use/TextResources_de.html @@ -0,0 +1,140 @@ + + + + + + +Uses of Class waveletCompression.i18n.TextResources_de + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
waveletCompression.i18n.TextResources_de

+
+No usage of waveletCompression.i18n.TextResources_de +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-frame.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-frame.html new file mode 100644 index 0000000..5e5e570 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-frame.html @@ -0,0 +1,36 @@ + + + + + + +waveletCompression.i18n + + + + + + + + + + + +waveletCompression.i18n + + + + +
+Classes  + +
+TextResource +
+TextResources +
+TextResources_de
+ + + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-summary.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-summary.html new file mode 100644 index 0000000..9c86f4a --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-summary.html @@ -0,0 +1,162 @@ + + + + + + +waveletCompression.i18n + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package waveletCompression.i18n +

+ + + + + + + + + + + + + + + + + +
+Class Summary
TextResource 
TextResourcesEnthält die englischen Textressourcen.
TextResources_deEnthält die deutschen Textressourcen.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-tree.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-tree.html new file mode 100644 index 0000000..9d6f0ea --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-tree.html @@ -0,0 +1,153 @@ + + + + + + +waveletCompression.i18n Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package waveletCompression.i18n +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-use.html b/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-use.html new file mode 100644 index 0000000..2606063 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/i18n/package-use.html @@ -0,0 +1,166 @@ + + + + + + +Uses of Package waveletCompression.i18n + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
waveletCompression.i18n

+
+ + + + + + + + + +
+Packages that use waveletCompression.i18n
waveletCompression.i18n  
+  +

+ + + + + + + + +
+Classes in waveletCompression.i18n used by waveletCompression.i18n
TextResource + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/package-frame.html b/www/uni/ws05/scivis/doc/waveletCompression/package-frame.html new file mode 100644 index 0000000..5fcbc9e --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/package-frame.html @@ -0,0 +1,40 @@ + + + + + + +waveletCompression + + + + + + + + + + + +waveletCompression + + + + +
+Classes  + +
+Compressor +
+ImageUtil +
+MainPanel +
+MainPanelListener +
+WaveletCompression
+ + + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/package-summary.html b/www/uni/ws05/scivis/doc/waveletCompression/package-summary.html new file mode 100644 index 0000000..f1868b5 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/package-summary.html @@ -0,0 +1,171 @@ + + + + + + +waveletCompression + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package waveletCompression +

+ + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
CompressorDie Compressor-Klasse beinhaltet die Methoden für Waveletkompression und Rekonstruktion von + komprimierten Bildern.
ImageUtilInitialisierungs- und Hilfsfunktionen für das Arbeiten mit Bildern.
MainPanelDas Panel mit sämtlichen GUI-Elementen.
MainPanelListenerDer MainPanelListener übernimmt die Ereignisbehandlung der GUI.
WaveletCompressionDie Klasse WaveletCompression initialisiert und startet das Programm.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/package-tree.html b/www/uni/ws05/scivis/doc/waveletCompression/package-tree.html new file mode 100644 index 0000000..8e15c84 --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/package-tree.html @@ -0,0 +1,172 @@ + + + + + + +waveletCompression Class Hierarchy + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package waveletCompression +

+
+
+
Package Hierarchies:
All Packages
+
+

+Class Hierarchy +

+
    +
  • java.lang.Object
      +
    • java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable) +
        +
      • java.awt.Container
          +
        • javax.swing.JComponent (implements java.io.Serializable) +
            +
          • javax.swing.JPanel (implements javax.accessibility.Accessible) + +
          +
        • java.awt.Panel (implements javax.accessibility.Accessible) +
            +
          • java.applet.Applet
              +
            • javax.swing.JApplet (implements javax.accessibility.Accessible, javax.swing.RootPaneContainer) + +
            +
          +
        +
      +
    • waveletCompression.Compressor
    • waveletCompression.ImageUtil
    • java.awt.event.KeyAdapter (implements java.awt.event.KeyListener) +
        +
      • waveletCompression.MainPanelListener (implements java.awt.event.ActionListener, javax.swing.event.ChangeListener, java.awt.event.FocusListener, java.awt.event.ItemListener) +
      +
    +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/doc/waveletCompression/package-use.html b/www/uni/ws05/scivis/doc/waveletCompression/package-use.html new file mode 100644 index 0000000..515825b --- /dev/null +++ b/www/uni/ws05/scivis/doc/waveletCompression/package-use.html @@ -0,0 +1,166 @@ + + + + + + +Uses of Package waveletCompression + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
waveletCompression

+
+ + + + + + + + + +
+Packages that use waveletCompression
waveletCompression  
+  +

+ + + + + + + + +
+Classes in waveletCompression used by waveletCompression
MainPanel + +
+          Das Panel mit sämtlichen GUI-Elementen.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/www/uni/ws05/scivis/einleitung.html b/www/uni/ws05/scivis/einleitung.html new file mode 100644 index 0000000..640de1e --- /dev/null +++ b/www/uni/ws05/scivis/einleitung.html @@ -0,0 +1,35 @@ + + + + Einleitung - Bildkompression mittels Wavelet-Transformation + + + + + + + + + + + + + + +

Einleitung

+

+ Bei der verlustbehafteten Kompression von Bildern wird versucht, die wesentlichen Informationen zu extrahieren, um weniger wichtige Daten entfernen zu können. Auf diese Weise kann die zu speichernde Datenmenge stark reduziert werden, während das Motiv nur relativ wenig verfremdet wird.
+ Bilddaten können mit Hilfe der Wavelet-Transformation komprimiert werden. Bei diesem Verfahren kommen Wavelets, eine Klasse von nicht-periodischen Funktionen, zur Anwendung. Die einfachste und am längsten bekannte dieser Funktionen ist das Haar-Wavelet, das bereits 1909 von Alfréd Haar beschrieben wurde. Praktische Anwendungen fanden sich aber erst später, zunächst im Umfeld der Geologie (Grossmann/Morlet). Seit Ende der 1980er Jahre werden sie hauptsächlich im Bereich der (Bild-) Datenkompression eingesetzt, hierbei spielen insbesondere die von Ingrid Daubechies entdeckten Wavelets und die durch Mallat und Meyer entwickelte Multiskalenanalyse eine Rolle. [4][5, S.2 ff]
+ Das hier vorgestellte Programm beschränkt sich in der Implementierung auf das Haar-Wavelet, da es das anschaulichste ist. In der Praxis werden für die Kompression von Bilddaten im Allgemeinen komplexere Wavelets eingesetzt. [2] +

+ + + + + + + + + + + diff --git a/www/uni/ws05/scivis/farbraeume.html b/www/uni/ws05/scivis/farbraeume.html new file mode 100644 index 0000000..3399002 --- /dev/null +++ b/www/uni/ws05/scivis/farbraeume.html @@ -0,0 +1,73 @@ + + + + Kompression in verschiedenen Farbräumen - Bildkompression mittels Wavelet-Transformation + + + + + + + + + + + + + + +

Kompression in verschiedenen Farbräumen

+ +

RGB

+

+ Der RGB-Farbraum ist dem menschlichen Auge nachempfunden, das Zapfen für die Wahrnehmung von rotem, grünem und blauem Licht besitzt. Der RGB-Farbraum wird in der Regel als Würfel dargestellt, wobei die x-, y- und z-Achse die Intensitäten der Farben Rot, Grün und Blau darstellen. +

+
+ Der RGB-Einheitswürfel +
+

+ In der Bildverarbeitung bewegt sich die Intensität einer Farbe meist zwischen den Werten 0 und 255. Somit kann jede Farbe als 3-Tupel von Bytes dargestellt werden. Die Ecken des Würfels sind Schwarz (0, 0, 0) und Weiß (255, 255, 255), die drei Grundfarben Rot (255, 0, 0), Grün (0, 255, 0) und Blau (0, 0, 255) und die Sekundärfarben Cyan (0, 255, 255), Magenta (255, 0, 255) und Gelb (255, 255, 0).
+ Da die Komponenten des RGB-Farbraumes gleich gewichtet werden, lässt sich keine im Verhältnis zu den anderen stark komprimieren, ohne dass es zu wahrnehmbaren Verlusten kommt. Wenn allerdings das zu komprimierende Bild über alle Elemente nur einen geringen Anteil einer der Grundfarben enthält, kann die entsprechende Komponente besonders stark komprimiert werden, ohne dass dies vom Betrachte wahrgenommen wird. Im RGB-Farbraum zeigen sich besondere Kompressionseigenschaften also normalerweise in Bezug auf das gewählte Motiv. +

+ +

HSB

+

+ Der HSB-Farbraum ist im Vergleich zum RGB-Raum stärker der Empfindung von Farben angepasst. Es wird zuerst ein Farbton gewählt, der dann durch Sättigung und Helligkeitswert angepasst wird. Insofern entspricht dieses Modell am ehesten dem System, wie ein Mensch eine gesuchte Farbe findet. +

+
+ Hue-Kreis und SB-Diagramm bei 0°
+ Hue-Kreis und SB-Diagramm bei 0° +
+

+ Der Farbton (Hue) wird als Winkel zwischen 0° und 360°, Sättigung (Saturation) und Helligkeit (Brightness) jeweils in Prozent angegeben.
+ Blau liegt beispielswise bei 120°, das über die Sättigung zwischen Weiß (0%), Blassblau und einem kräftigen Blau bis zu reinem Blau (100%) variiert werden kann. Die Helligkeit bewegt den Wert zwischen Schwarz (0%) und der gewählten Farbe (100%). Man kann sich das so vorstellen, als wenn man Licht auf die Farbe wirft und dann beobachtet wie sich die Farbe verändert.
+ Werden die beiden Komponenten Farbton und Sättigung vollkommen wegkomprimiert, erhält man eine Schwarz-Weiß-Version des Ursprungsbildes, da nur die Intensitäten der Helligkeit übrig bleiben. Wird ausschließlich der Farbton komprimiert, wird effektiv der Farbraum verkleinert, d.h. die Anzahl der Farben im Bild herabgesetzt. +

+ +

YCbCr

+

+ Das menschliche Auge nimmt nicht nur die Grundfarben sondern auch die Helligkeit einzeln und vor allen Dingen mit größerer Genauigkeit wahr. Deswegen wurden für die Speicherung und Übertragung von Bildern Farbmodelle entwickelt, die diesem Umstand Rechnung tragen und für die Helligkeitsinformation (Luminanz) einen größeren Bandbreitenanteil nutzen.
+ Ein solches ist das YCbCr-Modell, das insbesondere in der digitalen Bildverarbeitung Anwendung findet. Es setzt sich aus den Komponenten Y für Luminanz und Cb und Cr für die Chrominanzinformation zusammen. Das Element Cb beschreibt die Abweichung von Grau (=0,5) in Richtung Blau (=1) bzw. Gelb (=0). Entsprechend stellt Cr die Differenz zwischen Rot (=1) und Türkis (=0) von Grau (=0,5) dar.
+ Komprimiert man die Chrominanzinformationen weg, erhält man wie im HSB-Farbraum wieder ein Schwarz-Weiß-Bild. Wird hingegen die Luminanz weggenommen entsteht ein kontrastloser Farbbrei. Kompression der Komponenten Cb oder Cr verfälscht lediglich die Farbe des Bildes, lässt das Motiv aber noch gut erkennen. +

+ +

CMYK

+

+ Im Gegensatz zum RGB-Farbmodell, bei dem die Farben additiv aus den drei Komponenten erstellt werden, arbeitet das CMY-Modell subtraktiv. Einzelne Farbtöne werden durch die von Weiß abgezogenen Anteile der Grundfarben Rot, Grün und Blau beschrieben. + Dies ergibt einen Farbwürfel mit den Achsen Cyan (255 - Rotanteil), Magenta (255 - Grünanteil) und Gelb (Yellow, 255 - Blauanteil). + Werden diese drei Farben mit voller Intensität zusammengefügt, entsteht Schwarz.
+ Das CMY-Modell findet dort Anwendung, wo Farbe durch Absorption anstatt durch das Aussenden von Licht entsteht. Dies ist zum Beispiel beim Drucken der Fall, da farbiges Papier Anteile des weißen Lichts absorbiert, wodurch die vom menschlichen Auge wahrgenommenen Farben entstehen.
+ Da sich echtes Schwarz aus den in der Praxis verfügbaren Tinten jedoch nicht gut mischen lässt, wird der CMY-Farbraum häufig um ein zusätzliches Element für Schwarz ergänzt. Der resultierende Farbraum heißt entsprechend CMYK. Die zusätzliche Komponente K (Key) ist das Minimum der Cyan-, Magenta- und Gelbanteile, von denen dieser Wert abgezogen wird.
+ Obwohl sich die Werte des CMYK-Farbmodells ganz anders berechnen, weisen sie sehr ähnliche Eigenschaften wie die des YCbCr-Farbraums auf. Auch hier werden die Daten über die Helligkeit der einzelnen Bildpunkte in einer eigenen Komponente, nämlich Key, abgespeichert und die Farbinformationen auf die anderen Elemente aufgeteilt. Aufgrund dieser Tatsache verhält sich dieser Farbraum während der Kompression sehr ähnlich wie YCbCr. +

+ + + + + + + + + + + diff --git a/www/uni/ws05/scivis/fehler.html b/www/uni/ws05/scivis/fehler.html new file mode 100644 index 0000000..daeeee2 --- /dev/null +++ b/www/uni/ws05/scivis/fehler.html @@ -0,0 +1,53 @@ + + + + Fehlermaß - Bildkompression mittels Wavelet-Transformation + + + + + + + + + + + + + + +

Fehlermaß und Kompressionsgrad

+

Der L²-Fehler

+

+ Das gängige Fehlermaß bei Bildkompression mittels Wavelet-Transformation wird mit dem Quadrat des L²-Fehlers beschrieben: +

+
+ square(L²-Fehler) +
+

+ f(x) sind die hierbei Originaldaten, f '(x) das komprimierte Signal. c sind die berechneten Koeffizienten, mit denen sich das Signal wiederherstellen lässt, ci mit i > m' sind die Elemente, die bei der Kompression entfert wurden, b sind die entsprechenden Basisfunktionen.
+ Der L²-Fehler berechnet sich also aus dem Quadrat der Norm der Differenz der Originaldaten und der komprimierten Daten. Aufgrund der Orthonormalität der Basis ist dies das Gleiche wie die Summe der Quadrate der weggelassenen Koeffizienten. [1, S.19] +

+ +

Der Distanzfehler

+

+ Da der L²-Fehler keine absolute Obergrenze hat, haben wir ein neues Fehlermaß eingeführt, den Distanzfehler.
+ Ein Bild mit n×m Pixeln definiert einen Punkt in einem n×m-Raum. Der maximale Informationsverlust entspräche dem Punkt im n×m-Raum mit der größten Distanz zum Ausgangspunkt. Konkret wird die größt mögliche Abweichung für jedes einzelne Bildelement berechnet. Diese ergibt sich aus max(255-wert, wert) für ein Bild mit Farbwerten zwischen 0 und 255. Der absolute Fehler eines Bildes berechnet sich als Summe dieser Maxima.
+ Der Distanzfehler ist also eine normierte Version des L²-Fehlers. +

+ +

Kompression nach Größe

+

+ Aus technischer Sicht ist häufig weniger der Informationsverlust des Bildsignals als die Größe der zu speichernden Daten vor Interesse. Um die gewünschte Größe zu erreichen, werden entsprechend viele der kleinsten Koeffizienten entfernt. Der Kompressionsgrad bestimmt sich als Verhältnis der ursprünglichen Größe (Anzahl der zu speichernden Bytes) zur Größe der komprimierten Daten. +

+ + + + + + + + + + + diff --git a/www/uni/ws05/scivis/grafiken/2d-basisfunktionen.gif b/www/uni/ws05/scivis/grafiken/2d-basisfunktionen.gif new file mode 100644 index 0000000..0199fc3 Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/2d-basisfunktionen.gif differ diff --git a/www/uni/ws05/scivis/grafiken/babywavelets.gif b/www/uni/ws05/scivis/grafiken/babywavelets.gif new file mode 100644 index 0000000..9d31fcb Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/babywavelets.gif differ diff --git a/www/uni/ws05/scivis/grafiken/gui.jpg b/www/uni/ws05/scivis/grafiken/gui.jpg new file mode 100644 index 0000000..85df981 Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/gui.jpg differ diff --git a/www/uni/ws05/scivis/grafiken/hsb-farbraum.jpg b/www/uni/ws05/scivis/grafiken/hsb-farbraum.jpg new file mode 100644 index 0000000..f4df14c Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/hsb-farbraum.jpg differ diff --git a/www/uni/ws05/scivis/grafiken/klassenstruktur.gif b/www/uni/ws05/scivis/grafiken/klassenstruktur.gif new file mode 100644 index 0000000..2e00c1f Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/klassenstruktur.gif differ diff --git a/www/uni/ws05/scivis/grafiken/l2-fehler.gif b/www/uni/ws05/scivis/grafiken/l2-fehler.gif new file mode 100644 index 0000000..4b4a339 Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/l2-fehler.gif differ diff --git a/www/uni/ws05/scivis/grafiken/mutterwavelet.gif b/www/uni/ws05/scivis/grafiken/mutterwavelet.gif new file mode 100644 index 0000000..63ece3b Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/mutterwavelet.gif differ diff --git a/www/uni/ws05/scivis/grafiken/rgb-einheitswuerfel.jpg b/www/uni/ws05/scivis/grafiken/rgb-einheitswuerfel.jpg new file mode 100644 index 0000000..87ee798 Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/rgb-einheitswuerfel.jpg differ diff --git a/www/uni/ws05/scivis/grafiken/signalzerlegung.gif b/www/uni/ws05/scivis/grafiken/signalzerlegung.gif new file mode 100644 index 0000000..77e8dc9 Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/signalzerlegung.gif differ diff --git a/www/uni/ws05/scivis/grafiken/vaterwavelet.gif b/www/uni/ws05/scivis/grafiken/vaterwavelet.gif new file mode 100644 index 0000000..a6d3d0a Binary files /dev/null and b/www/uni/ws05/scivis/grafiken/vaterwavelet.gif differ diff --git a/www/uni/ws05/scivis/index.html b/www/uni/ws05/scivis/index.html new file mode 100644 index 0000000..71378ab --- /dev/null +++ b/www/uni/ws05/scivis/index.html @@ -0,0 +1,72 @@ + + + + Bildkompression mittels Wavelet-Transformation + + + + + + +

+ + Valid XHTML 1.0 Strict + +

+ +

Bildkompression mittels Wavelet-Transformation

+
+

+ Ausarbeitung im Rahmen der Vorlesung
+ Scientific Visualization
+ Prof. Dr. Konrad Polthier, Klaus Hildebrandt
+ Freie Universität Berlin
+ Wintersemester 2005/06 +

+

+ von
+ Bettina Selig und Tilman Walther +

+

+ Im Rahmen der Vorlesung wurde ein Programm zur Kompression von Bildern mittels Wavelet-Transformation erstellt. Es soll insbesondere deutlich machen, welche unterschiedlichen Eigenschaften einzelne Farbräume während der Kompression aufweisen.
+ Diese Arbeit erklärt zunächst die theoretischen Grundlagen der Wavelet-Transformation und geht im Folgenden auf den Programmaufbau und die Umsetzung ein. +

+
+ + + + + diff --git a/www/uni/ws05/scivis/quellen.html b/www/uni/ws05/scivis/quellen.html new file mode 100644 index 0000000..e474e2a --- /dev/null +++ b/www/uni/ws05/scivis/quellen.html @@ -0,0 +1,54 @@ + + + + Wavelet Compression Applet - Bildkompression mittels Wavelet-Transformation + + + + + + + + + + + + + + +

Quellen und Verweise

+ +
+ [1] STOLLNITZ, Eric; SALESIN, David H.; DEROSE, Anthony D.: Wavelets for Computer Graphics: Theory and Applications. Morgan Kaufmann Publishers, 1996. - ISBN 1-5586-0375-1 +
+ +
+ [2] STRUTZ, Thilo: Bilddatenkompression. Vieweg Verlag, 2000. - ISBN 3-528-039221 +
+ +
+ [3] SCHÜTZE, Peter: Wavelet-Basierte Ähnlichkeitssuche mit Indexunterstützung. Diplomarbeit, Otto-von-Guericke-Universität Magdeburg, 2002 +
+ +
+ [4] Wikipedia: Wavelet. http://de.wikipedia.org/w/index.php?title=Wavelet&oldid=14108665. - Online-Ressource, Abruf: 5.4.2006 +
+ +
+ [5] DAUBECHIES, Ingrid: Where do wavelets come from? - A personal point of view. In: The Proceedings of the IEEE Special Issue on Wavelets 84 (no. 4), pp. 510-513, April 1996. Online verfügbar unter http://www.princeton.edu/~icd/publications/74.ps. +
+ +
+ [6] BUNKS, Carey: Grokking the GIMP. New Riders Publishing, 2000. - ISBN 0-7357-0924-6 +
+ + + + + + + + + + + diff --git a/www/uni/ws05/scivis/struktur.html b/www/uni/ws05/scivis/struktur.html new file mode 100644 index 0000000..fa5f5bc --- /dev/null +++ b/www/uni/ws05/scivis/struktur.html @@ -0,0 +1,51 @@ + + + + Kompression in verschiedenen Farbräumen - Bildkompression mittels Wavelet-Transformation + + + + + + + + + + + + + + +

Klassenstruktur

+ +
+ Klassenstruktur
+ Die Klassenstruktur des Applets +
+ +

+ Die Starter-Klasse WaveletCompression kann als Applet oder Applikation gestartet werden. Per Parameter werden ihr die URLs bzw. Dateinamen der Bilder übergeben. +

+ +

+ GUI: Das MainPanel enthält die GUI-Komponenten und legt Exemplare der verfügbaren ColorSpaces an. Der MainPanelListener stößt die einzelnen Schritte des Kompressionsvorgangs an: Farbraum wandeln, Transformieren, Komprimieren, Rekonstruieren, Farbraum zurückwandeln, Anzeigen. +

+ +

+ Core: Über das ColorSpace-Interface kann auf einzelne Farbraum-Implementierungen zugegriffen werden. In der Klasse Compressor ist die Wavelet-Kompression und -Dekompression implementiert. ImageUtil dient zum Umwandeln von Bildern in Arrays und zurück, außerdem kann über getCompressedFileSize() die Größe eines Bildes nach der Kompression bestimmt werden. +

+ +

+ Nicht in dieser Übersicht: Die Klasse MainPanel greift auf Objekte vom Typ TextResource zu, um lokalisierte Strings zur Beschriftung zu erhalten. Es liegen Implementierungen für Deutsch und Englisch vor. +

+ + + + + + + + + + + diff --git a/www/uni/ws05/scivis/stylesheet.css b/www/uni/ws05/scivis/stylesheet.css new file mode 100644 index 0000000..25e05c3 --- /dev/null +++ b/www/uni/ws05/scivis/stylesheet.css @@ -0,0 +1,31 @@ +body { background-color:#FFFFFF; font-family: 'Bookman Old Style', Georgia, serif; padding-top: 2em; } +a:link { color:#0000FF; text-decoration: underline; } +a:visited { color:#333388; text-decoration: underline; } +a:hover { color:#0000EE; text-decoration: underline; } +.matrixcontent { font-family: monospace; font-size: 110%; } + +#titel { text-align: justify; margin-left: 4em;; margin-right: 35%; } +#abstract {} +#inhalt { margin-top: 2em; margin-left: 2em; } +#inhalt h2 { font-size: 120%; } +#inhalt h3 { font-size: 100%; margin-left: 2em; } + +table.nav { width: 100%; font-size: x-small; border: none; margin: 0.5ex; /*background-color:#FFFFCC;*/ } +table.nav td { width: 33%; } + +.figure { text-align: center; margin: 1em; font-size: small; } +.formel { text-align: center; margin-top: 0.5em; margin-bottom: 0.5em; } +.quelle { margin-bottom: 2ex; } +.quellennr { font-family: 'Courier New', monospace; } +.quellentitel { font-style: italic; } +.verweis { font-style: italic; } +.mono { font-family: 'Courier New', monospace; } + +.matrixcell { padding-left: 1em; } +.matrixtable { background-color:#EEEEEE; font-size: 120%; font-family: monospace; text-align: right; border-collapse: collapse; } +.matrixtable td { padding-left: 0.5ex; width: 3.5ex; } +.active { background-color:#CCCCCC; } +.highlighted { color:#CC0000; font-style: italic; /* padding-right: 0.3ex; */ } +.matrixcaption { vertical-align: top; font-size: 80%; font-family: Georgia, serif; font-weight: bold; } +.matrixtext { padding-bottom: 2em; font-size: 90%; } + diff --git a/www/uni/ws05/scivis/testbilder/cut_rainbow.png b/www/uni/ws05/scivis/testbilder/cut_rainbow.png new file mode 100644 index 0000000..a6c4e79 Binary files /dev/null and b/www/uni/ws05/scivis/testbilder/cut_rainbow.png differ diff --git a/www/uni/ws05/scivis/testbilder/farbverlauf-gw.jpg b/www/uni/ws05/scivis/testbilder/farbverlauf-gw.jpg new file mode 100644 index 0000000..db2933e Binary files /dev/null and b/www/uni/ws05/scivis/testbilder/farbverlauf-gw.jpg differ diff --git a/www/uni/ws05/scivis/testbilder/farbverlauf-sw.jpg b/www/uni/ws05/scivis/testbilder/farbverlauf-sw.jpg new file mode 100644 index 0000000..4fc6474 Binary files /dev/null and b/www/uni/ws05/scivis/testbilder/farbverlauf-sw.jpg differ diff --git a/www/uni/ws05/scivis/testbilder/hsb.png b/www/uni/ws05/scivis/testbilder/hsb.png new file mode 100644 index 0000000..8969756 Binary files /dev/null and b/www/uni/ws05/scivis/testbilder/hsb.png differ diff --git a/www/uni/ws05/scivis/testbilder/klee.jpg b/www/uni/ws05/scivis/testbilder/klee.jpg new file mode 100644 index 0000000..81b5321 Binary files /dev/null and b/www/uni/ws05/scivis/testbilder/klee.jpg differ diff --git a/www/uni/ws05/scivis/testbilder/reh.jpg b/www/uni/ws05/scivis/testbilder/reh.jpg new file mode 100644 index 0000000..a5c98b2 Binary files /dev/null and b/www/uni/ws05/scivis/testbilder/reh.jpg differ diff --git a/www/uni/ws05/scivis/testbilder/schachbrett-gw.jpg b/www/uni/ws05/scivis/testbilder/schachbrett-gw.jpg new file mode 100644 index 0000000..804a65d Binary files /dev/null and b/www/uni/ws05/scivis/testbilder/schachbrett-gw.jpg differ diff --git a/www/uni/ws05/scivis/testbilder/schachbrett-sw.jpg b/www/uni/ws05/scivis/testbilder/schachbrett-sw.jpg new file mode 100644 index 0000000..142277e Binary files /dev/null and b/www/uni/ws05/scivis/testbilder/schachbrett-sw.jpg differ diff --git a/www/uni/ws05/scivis/wavelet-compression-applet.html b/www/uni/ws05/scivis/wavelet-compression-applet.html new file mode 100644 index 0000000..1be57fc --- /dev/null +++ b/www/uni/ws05/scivis/wavelet-compression-applet.html @@ -0,0 +1,43 @@ + + + + Wavelet Compression Applet - Bildkompression mittels Wavelet-Transformation + + + + + + + + + + + + + + +
+

Wavelet Compression Applet

+ + + + +
+ +

Download

+

+ Wavelet Compression Applet (jarfile with Java sources) +

+ + + + + + + + + + + diff --git a/www/uni/ws05/scivis/wavelet-transformation.html b/www/uni/ws05/scivis/wavelet-transformation.html new file mode 100644 index 0000000..4256728 --- /dev/null +++ b/www/uni/ws05/scivis/wavelet-transformation.html @@ -0,0 +1,65 @@ + + + + Wavelet-Transformation - Bildkompression mittels Wavelet-Transformation + + + + + + + + + + + + + + +

Wavelet-Transformation

+

+ Mittels Wavelet-Transformation werden die Bilddaten in einen anderen Raum abgebildet. Die dabei entstehende Repräsentation des Bildes ist eine äquivalente Darstellung der Information: Das Bild lässt sich verlustfrei durch Rücktransformation rekonstruieren.
+ Allerdings hat die transformierte Darstellung bestimmte Eigenschaften, die besonders nützlich für die Bildkompression sind. Bei der Transformation ergeben sich viele Zahlen nahe Null, die man wegfallen lassen kann, ohne dass deutliche Veränderungen am Motiv entstehen.
+

+ +

+ Bei der Wavelet-Transformation werden Koeffizienten für die so genannten Basisfunktionen erzeugt. Für die Transformation werden sie aus drei Typen zusammengestellt. Das Vater- und Mutter-Wavelet und die Baby-Wavelets. +

+ +
+ Vater-Wavelet
+ Vater-Wavelet +
+

+ Das Vater-Wavelet, auch Skalierungsfunktion genannt, ist eine über dem ganzen Intervall konstante Funktion. +

+ +
+ Mutter-Wavelet
+ Mutter-Wavelet +
+

+ Das Mutter-Wavelet ist die charakteristische Funktion und sieht für jede Art von Wavelet-Transformation verschieden aus. Bei der Implementierung wird die Transformation nach Haar benutzt, bei der das Mutter-Wavelet eine Rechteckfunktion ist. +

+ +
+ Baby-Wavelets
+ Baby-Wavelets +
+

+ Die Baby-Wavelets entstehen durch Stauchung und Verschiebung des Mutter-Wavelets. +

+

+ Durch Multiplikation der berechneten Koeffizienten und der Basisfunktionen und anschließender Addition der resultierenden Matrizen entsteht bei der Rücktransformation wieder das ursprüngliche Bild. +

+ + + + + + + + + + + diff --git a/www/uni/ws05/scivis/waveletCompression/CompressionFormatter.class b/www/uni/ws05/scivis/waveletCompression/CompressionFormatter.class new file mode 100644 index 0000000..d8bfd87 Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/CompressionFormatter.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/Compressor.class b/www/uni/ws05/scivis/waveletCompression/Compressor.class new file mode 100644 index 0000000..6d1c420 Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/Compressor.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/ImageUtil.class b/www/uni/ws05/scivis/waveletCompression/ImageUtil.class new file mode 100644 index 0000000..cb696b4 Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/ImageUtil.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/MainPanel.class b/www/uni/ws05/scivis/waveletCompression/MainPanel.class new file mode 100644 index 0000000..5a36e4d Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/MainPanel.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/MainPanelListener.class b/www/uni/ws05/scivis/waveletCompression/MainPanelListener.class new file mode 100644 index 0000000..742b7d2 Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/MainPanelListener.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/WaveletCompression.class b/www/uni/ws05/scivis/waveletCompression/WaveletCompression.class new file mode 100644 index 0000000..3a0535d Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/WaveletCompression.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpace.class b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpace.class new file mode 100644 index 0000000..736d63b Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpace.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceCMYK.class b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceCMYK.class new file mode 100644 index 0000000..edc2762 Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceCMYK.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceHSB.class b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceHSB.class new file mode 100644 index 0000000..920806a Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceHSB.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceRGB.class b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceRGB.class new file mode 100644 index 0000000..e6457af Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceRGB.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceYCbCr.class b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceYCbCr.class new file mode 100644 index 0000000..351b153 Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/colorSpace/ColorSpaceYCbCr.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/i18n/TextResource.class b/www/uni/ws05/scivis/waveletCompression/i18n/TextResource.class new file mode 100644 index 0000000..6e33302 Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/i18n/TextResource.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/i18n/TextResources.class b/www/uni/ws05/scivis/waveletCompression/i18n/TextResources.class new file mode 100644 index 0000000..96ca5f5 Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/i18n/TextResources.class differ diff --git a/www/uni/ws05/scivis/waveletCompression/i18n/TextResources_de.class b/www/uni/ws05/scivis/waveletCompression/i18n/TextResources_de.class new file mode 100644 index 0000000..db98ef0 Binary files /dev/null and b/www/uni/ws05/scivis/waveletCompression/i18n/TextResources_de.class differ diff --git a/www/uni/ws05/stundenplan.html b/www/uni/ws05/stundenplan.html new file mode 100644 index 0000000..9b2ebea --- /dev/null +++ b/www/uni/ws05/stundenplan.html @@ -0,0 +1,155 @@ + + + + Stundenplan Wintersemester 2005/06 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + +
+
+
MontagDienstagMittwochDonnerstagFreitag
8.30 - 10.00
10.15 - 11.45
EAA
Inf HS
Rote
1100-1200
Aqua-Fitness
12.15 - 13.45 +
EAA
Inf HS
Rote
+
+ +
14.15 - 15.45
Ü EAA
Mathe HS
Werner
16.15 - 17.45 + + +
18.15 - 19.75
Schwedisch
HU 3086
Arrhenius
+

+     Bettina +

+

+     Tilman +

+
2130-2245
Bauchtanz
+
1930-2100
Streetdance
+
+
2000-2200
Floorball
+
+ + + + + \ No newline at end of file diff --git a/www/uppsala/.htaccess b/www/uppsala/.htaccess new file mode 100644 index 0000000..1a75fa6 --- /dev/null +++ b/www/uppsala/.htaccess @@ -0,0 +1,4 @@ +Order deny,allow +DefaultType text/html +DirectoryIndex default.htm index.html + diff --git a/www/uppsala/@q=node_2F63 b/www/uppsala/@q=node_2F63 new file mode 100644 index 0000000..94df055 --- /dev/null +++ b/www/uppsala/@q=node_2F63 @@ -0,0 +1,72 @@ + + + + Healthy Fast Food | Uppsala + + + + + + + + + + + + + + + +
+

Healthy Fast Food

+ +
+
+

Letzte Woche waren wir bei Max Burger. Das ist eine schwedische Fast-Food-Kette, die bessere Burger als McDonald's und Burger King macht. Das alleine wäre vielleicht noch nicht so etwas Besonderes, aber sie treiben es noch etwas weiter. Fleisch, Tomate, Käse - alles da!Fleisch, Tomate, Käse - alles da!Da die Schweden im Allgemeinen etwas mehr auf Ernährung achten, hat die schwedische Burgerkette auch einen etwas anderen Fokus als die ausländische Konkurrenz. Schließlich bietet man "Hamburgare på svenska" - weniger Fett, Fleisch von glücklichen schwedischen Kühen und alles wird erst nach der Bestellung zubereitet. Und vergisst auch niemals zu erwähnen, dass man viel älter ist (fünf Jahre), als diese amerikanischen Emporkömmlinge.
+Wachsen die so?Wachsen die so?Aber darum geht es hier nur am Rande. Worum es eigentlich geht ist der Low Carb burger. Denn während das einfache Volk noch versucht, Fett aus dem Speiseplan zu streichen (Joghurt hat hier allerhöchstens zwei Prozent), wissen die wirklichen Fitnessanhänger längst, was wirklich schadet: Kohlenhydrate. Und deswegen gibt es jetzt den Hamburger ohne Brot. Ob der gut angenommen wird, wissen wir auch nicht, allerdings mussten wir extra raus zu IKEA, weil der Max Burger Downtown diese Errungenschaft (noch?) nicht verkauft.
+Draußen vor der Stadt konnte ich dann aber zuschlagen. Einmal Boulette im Salatblatt. Schmeckt gut, genaugenommen nicht anders als mit Brot, wir hatten den direken Vergleich. Der Soße sei Dank. Ist allerdings noch schwerer zu essen als ein überladener Döner beim Bus hinterher rennen. Aber fangt gar nicht erst mit nörgeln an - es wird hier nur "vorher"-Fotos zu sehen geben.
+

+ +
+ + +
+ + diff --git a/www/uppsala/@q=node_2F70 b/www/uppsala/@q=node_2F70 new file mode 100644 index 0000000..6b84326 --- /dev/null +++ b/www/uppsala/@q=node_2F70 @@ -0,0 +1,97 @@ + + + + Lördagsgodis och Kanelbullar | Uppsala + + + + + + + + + + + + + + + +
+

Lördagsgodis och Kanelbullar

+ +
+
+

Typisch schwedische HandgriffeTypisch schwedische HandgriffeSchweden ist ein Land für mich. Meterlange Regale voller Marabou-Schokolade, kistenweise Smågodis, Schokoladenkuchen, bei dem tatsächlich endlich mal der Kuchen die Nebensache ist, und Kanelbullar. Da liegt nahe, dass Schweden Probleme mit übergewichtigen Kindern haben. Deswegen startete das staatliche Institut für Volksgesundheit schon vor vierzig Jahren die Kampange Lördagsgodis (dt.: Samstagssüßigkeiten). Danach sollten Kinder nur einmal in der Woche Süßes bekommen. Auf einigen Süßigkeitenverpackungen steht sogar sowas wie "Endlich wieder Samstag!". Aber ich passe mich hier auch gerne wieder an, denn die Schweden halten sich nicht an solche Ratschläge. +Das Volk der Naschkatzen hat sogar einen Nationalfeiertag. Während wir Deutschen am 3. Oktober die Wiedervereinigung unseres Landes feiern, huldigen die Schweden einen Tag später dem Kanelbullen. Das sind Zimtschnecken, die es hier wirklich zu jeder Fika (Kaffeepause) gibt. Bettina beim Kanelbullar machenBettina beim Kanelbullar machenDa diese nicht nur sehr verbreitet, sondern auch sehr lecker sind, musste ich mich dazu entschließen meine Zimtallergie aufzugeben. Soweit funktioniert das auch ganz gut, nur am 4. Oktober hatte ich ordnungshalber nochmal ordentliche Kopfschmerzen. +Das beste Rezept für Kanelbullar habe ich aber nicht von einer Schwedin, wie es sich gehört, sondern von Katrin aus einem deutschen schwedischen Backbuch. Und da letztes Wochenende zwei Geburtstage und ein Projektgruppen-Meeting war, habe ich es auch gleich mal ausprobiert.

+ +

Bitte zuhause nachbacken. Die Füllung ist aber ein bisschen knapp berechnet. Also mehr Zucker, Butter und Zimt bereithalten!

+ +

Ungebackene KanelbullarUngebackene KanelbullarFür etwa 45 Kanelbullar: +900g Weizenmehl +250g Zucker +1 TL Kardamonpulver +250g Butter +2 Päckchen Hefe +½l Milch +2 EL gemahlener Zimt +1 Ei +Hagelzucker

+ +

Alles meins!Alles meins!Mehl, 150g Zucker, Salz und Kardamonpulver in große Schüssel. 150g Butter zerteilen und seitlich hinzu geben. In der Mitte des Mehls eine Mulde bilden und die Hefe hineinbröckeln. Milch erwärmen und lauwarm in Schüssel geben. Kneten.

+ +

Teig zugedeckt 30 min gehen lassen, Volumenverdopplung. Erneut kneten, in zwei gleiche Teile teilen und zu Rechtecken (25cm x 50cm) ausrollen.

+ +

Füllung: Restzucker, Zimt und Restbutter verkneten.
+Füllung auf beide Hälften verstreichen. Von der langen Seite aus zusammenrollen, nicht zu fest.

+ +

Teigrollen in 2 cm breite Kringel schneiden. Mit Tuch bedeckt, 30 min gehen lassen.

+ +

Backofen auf 250°C. Schnecken mit Ei bestreichen und Hagelzucker drüber. Auf mittlerer Schiene ca. 8 min backen.

+ +

Auf einem Gitter abkühlen lassen.

+ +
+ + +
+ + diff --git a/www/uppsala/@q=node_2F84 b/www/uppsala/@q=node_2F84 new file mode 100644 index 0000000..4833466 --- /dev/null +++ b/www/uppsala/@q=node_2F84 @@ -0,0 +1,106 @@ + + + + Drupal und Image: Zugriff auf Bilder (und Artikel) beschränken | Uppsala + + + + + + + + + + + + + + + +
+

Drupal und Image: Zugriff auf Bilder (und Artikel) beschränken

+ +
+
+

Hinweis: Wer nur am Uppsala-Blog und weniger an Content-Management-Software interessiert ist, kann hier aufhören zu lesen.

+ +

Ich hatte schon länger vor, den Zugriff auf die (mit Image hochgeladenen) Bilder in diesem Blog derart zu beschränken, dass nur angemeldete Benutzer die Bilder in voller Auflösung betrachten können. Zunächst hatte ich nach einem Modul gesucht, das den Zugriff nach dem Typ des Nodes beschränkt um die Bilder nicht einzeln schützen zu müssen, war aber nicht fündig geworden. Also habe ich zunächst einmal Simple Access installiert, mit dem man den Zugriff auf einzelne Nodes für bestimmte Nutzergruppen freigeben kann, zumal ich inzwischen eventuell auch einzelne Artikel schützen wollte.

+ +

1. Bilder mit Simple Access schützen
+Hinweis: Wer nur den Zugriff auf Bilder beschränken will, braucht Simple Access nicht und kann mit 2. fortfahren.
+Nach der Installation hatte ich wenig Lust, sämtliche Bilder von Hand zu schützen und habe deswegen meine SQL-Kenntnisse etwas aufgefrischt:
+Mit SELECT DISTINCT * FROM `node_access` a INNER JOIN `files` f ON a.nid = f.nid ORDER BY a.nid ASC habe ich zunächst alle Bilder anzeigen lassen um sicher zu sein, dass ich keine Artikel bearbeite. Den Simple-Access-Schutz aktiviert man für alle Bilder dann mit UPDATE `node_access` As a INNER JOIN `files` AS f ON a.nid = f.nid SET `gid` = 1 (SQL in phpMyAdmin-Notation.)

+ +

2. Direktzugriff auf Dateien unterbinden
+Nun werden zwar alle Image-Nodes durch Simple Access geschützt, nur merkte ich, dass der direkte Zugriff auf die Bilddateien problemlos möglich war, obwohl in den Drupal-Dateisystem-Einstellungen als Download-Methode "privat" eingestellt war. Zunächst dachte ich an ein Problem mit den Verzeichnisrechten und spielte mit htaccess-Befehlen rum, bis ich merkte, dass der Pfad, über den man die Bilder erreicht, ein virtueller ist:
+Während der eigentliche Pfad http://www.tilman.de/uppsala/files/images/chor01.preview.jpg sehr wohl geschützt war, war das Bild in der Artikeln als http://www.tilman.de/uppsala/system/files/images/chor01.preview.jpg verlinkt. (Ich kenne die Architektur von Drupal nicht und habe keine Ahnung, welchem Zweck dieses "system"-Verzeichnis dient.) Auch der Zugriff über GET-Parameter http://www.tilman.de/uppsala/?q=system/files/images/chor01.preview.jpg war möglich.
+Des Rätsels Lösung: Das Image-Modul, welches ich für das Einbinden der Bilder verwende, schert sich nicht um Benutzerrechte und gibt die Bilder an jeden, der danach fragt. (Autsch.)
+Der entscheidende Hinweis war dann im Drupal-Forum: http://drupal.org/node/26601#comment-54855
+Den geposteten Code habe ich dann etwas angepasst und damit die Funktion image_file_download in image.module ersetzt:
+

+// edit
+// see http://drupal.org/node/26601#comment-54855 and http://www.tilman.de/uppsala/?q=node/84
+function image_file_download($file) {
+  // get image from database
+  $result = db_fetch_object(db_query("SELECT f.*, n.type FROM {files} f LEFT JOIN {node} n ON f.nid=n.nid WHERE f.filepath='%s'", $file));
+
+  if ($result->type == 'image') {
+    // only allow download if its our node, and the user has privilege or it is only a thumbnail
+    if (user_access('view original images') || strpos($file, '.thumbnail.')) {
+      $headers = array('Content-Type: ' . $result->filemime);
+      return $headers;
+    }
+  }
+
+  // otherwise, its some other modules responsibility
+  return -1;
+}
+

+Ergebnis: Bilder werden nur noch an registrierte Benutzer herausgegeben, oder wenn ".thumbnail." im Dateinamen vorkommt. (Drupal fügt zum eigentlichen Datei noch die Bildgröße als Suffix hinzu.)

+ +

Anmerkung: Der Zugriff über den physischen Pfad auf die Bilder war bei mir immer noch möglich, was aber wohl eher mit einer Fehlkonfiguration oder meinen Spielereien zu tun hat. Dieses Problem ließ sich dann wirklich mit einer htaccess-Datei im Verzeichnis files/images mit dem Inhalt

Deny from all
+
lösen.

+ +
+ + +
+ + diff --git a/www/uppsala/@q=system_2Ffiles_2Fimages_2Fchor01.preview.jpg b/www/uppsala/@q=system_2Ffiles_2Fimages_2Fchor01.preview.jpg new file mode 100644 index 0000000..3ee9b71 --- /dev/null +++ b/www/uppsala/@q=system_2Ffiles_2Fimages_2Fchor01.preview.jpg @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/Descr.WD3 b/www/uppsala/Descr.WD3 new file mode 100644 index 0000000..2ece365 Binary files /dev/null and b/www/uppsala/Descr.WD3 differ diff --git a/www/uppsala/default.htm b/www/uppsala/default.htm new file mode 100644 index 0000000..9f86bba --- /dev/null +++ b/www/uppsala/default.htm @@ -0,0 +1,135 @@ + + + + Uppsala | approx. 59°48'17'' N 17°38'40'' E + + + + + + + + + + + + + + + + + +
+ + +
+

Weihnachten

+
+

Schwedischer WeihnachtsbaumSchwedischer WeihnachtsbaumWir hatten uns, anders als ein Großteil der Austauschstudenten, entschlossen, über Weihnachten in Uppsala zu bleiben. Bis zuletzt hofften wir auf Schnee, der sich aber nicht so wirklich einstellen wollte. Weihnachten wird hier, wie in Deutschland, am 24. gefeiert und wir wollten an diesem Tag in Upplands Nation gehen, deren öffentliche Weihnachtsfeier irgendwo in den Studieninformationen empfohlen worden war. Also sind wir gegen Mittag in die Stadt gefahren, um uns mal umzuschauen. Die Feier war auch tatsächlich schon am Laufen, wirkte allerdings mehr wie eine Seniorenverköstigung. Es war schwer jemanden zu finden, der mit etwas anderem als sich und seinem Essen beschäftigt war und da wir niemandem den Weihnachtsbraten streitig machen wollten, gingen wir weiter. Etwas zu Essen wäre uns so langsam aber doch recht gewesen, so dass wir uns Richtung Innenstadt bewegten und dabei nach einem geöffneten Café Ausschau hielten - nichts.

+ +
+
+

Letzer Besuch

+
+

Thomas kommtThomas kommtZwei Tage mussten wir dann alleine zur Uni, bevor uns am Mittwoch, dem 13. Dezember Thomas erreichte. Die Abschlusspräsentation lag zwar hinter uns, aber dafür musste am Freitag der Abschlussbericht abgegeben werden, so dass auch Thomas erst mal Uni mitmachen durfte. (Diese Fehlplanung lag darin begründet, dass wir dachten das Projekt würde - wie im Vorlesungsverzeichnis angegeben - bis Mitte Januar laufen, als die Besuchsflüge gebucht wurden. Tatsächlich wird aber alles vor Weihnachten beendet, weil im Januar für die Abschlussklausuren gelernt wird.)

+ +
+
+

Mehr Besuch!

+
+

Nicole kommtNicole kommtDamit ich dieses Jahr nicht nur ein Stück Kohle in meinem Weihnachtsstrumpf finde, habe ich beschlossen schnell noch Ordnung zu machen und endlich über die letzten beiden Wochen zu schreiben, schließlich war ja auch einiges los. +Zuerst einmal kam am Nikolaustag Nicole zu Besuch und beglückte uns mit selbstgebackenen Keksen, einigen wichtigen Mitbringseln aus Berlin (Schuhe! Fahrradschlüssel!) und natürlich nicht zuletzt ihrer Anwesenheit. Leider war zwei Tage später die Abschlusspräsentation für unser Projekt fällig, so dass Nicole selbst erst einmal einiges an Zeit mit unseren schwedischen und amerikanischen Kommilitonen verbringen durfte.

+ +
+
+

Drupal und Image: Zugriff auf Bilder (und Artikel) beschränken

+
+

Hinweis: Wer nur am Uppsala-Blog und weniger an Content-Management-Software interessiert ist, kann hier aufhören zu lesen.

+ +

Ich hatte schon länger vor, den Zugriff auf die (mit Image hochgeladenen) Bilder in diesem Blog derart zu beschränken, dass nur angemeldete Benutzer die Bilder in voller Auflösung betrachten können. Zunächst hatte ich nach einem Modul gesucht, das den Zugriff nach dem Typ des Nodes beschränkt um die Bilder nicht einzeln schützen zu müssen, war aber nicht fündig geworden. Also habe ich zunächst einmal Simple Access installiert, mit dem man den Zugriff auf einzelne Nodes für bestimmte Nutzergruppen freigeben kann, zumal ich inzwischen eventuell auch einzelne Artikel schützen wollte.
+

+ +
+
+

Besuch!

+
+

BesucherhausschuheBesucherhausschuheLetzte Woche am Mittwoch, pünktlich um 11.55 Uhr, ist Martin in Arlanda gelandet. Leider fehlte uns noch Erfahrung mit Germanwings-Passagieren, so dass wir genau am anderen Ende des Flughafens geparkt hatten. Über das ganze Hin- und Her-Gelatsche hab ich dann auch das offizielle Ankunfts-Foto vergessen. Als wir Martin plus Tasche dann im Auto hatten sind wir erst mal nach Uppsala gefahren, um einen Studenten-Ausweis zu besorgen.

+ +
+
+

Innebandy

+
+

InnebandyInnebandyLetzte Woche bin ich endlich zum Floorball Spielen gekommen. Zuerst im Stallet, einem der beiden Fitness-Studios für die Studenten hier. Es gibt Spielzeiten zu denen man ohne Anmeldung erscheinen kann. Der Nachteil ist, dass man vorher nicht unbedingt sagen kann, wieviele Spieler kommen werden. So waren Achim und ich beim ersten Anlauf dann auch alleine in der Halle, was aber wohl mit dem Schneechaos zu tun hatte. Beim zweiten Versuch konnten wir dann immerhin drei gegen drei spielen. Die Spieler waren durch die Bank besser, allerdings hielt sich der Abstand in Grenzen; man konnte noch ordentlich mitspielen. +

+ +
+
+

Chorwochenende

+
+

ÄlvåsaÄlvåsaLetztes Wochenende bin ich, wie angekündigt, mit meinem Chor auf Probenfahrt nach Älvåsa gefahren, einer Art Ferienheim 70km nordwestlich von Uppsala. +Bei der Ankunft stellte ich erstmal fest, dass ich natürlich das Wichtigste vergessen hatte: Hausschuhe.

+ +
+
+

Schnee!!!

+
+

Alles weiß!Alles weiß!Wir dachten wir sehen nicht richtig, als wir an Halloween in der Schlange zur Party von Snerikes, einer der Nationen, standen. Da rieselte leise der Schnee auf uns herab. "I have never seen snow before!" staunte ein Mädchen hinter uns. Die Begeisterung wurde am nächsten Morgen aber dann im Schnee erstickt - Schneesturm und kein Ende abzusehen! Wie passend, dass hier in Schweden ab dem 1. November Winterreifen Pflicht sind, aber das hatten wohl nicht so viele ernst genommen. +

+ +
+
+

Lördagsgodis och Kanelbullar

+
+

Typisch schwedische HandgriffeTypisch schwedische HandgriffeSchweden ist ein Land für mich. Meterlange Regale voller Marabou-Schokolade, kistenweise Smågodis, Schokoladenkuchen, bei dem tatsächlich endlich mal der Kuchen die Nebensache ist, und Kanelbullar. Da liegt nahe, dass Schweden Probleme mit übergewichtigen Kindern haben. Deswegen startete das staatliche Institut für Volksgesundheit schon vor vierzig Jahren die Kampange Lördagsgodis (dt.: Samstagssüßigkeiten). Danach sollten Kinder nur einmal in der Woche Süßes bekommen. Auf einigen Süßigkeitenverpackungen steht sogar sowas wie "Endlich wieder Samstag!". Aber ich passe mich hier auch gerne wieder an, denn die Schweden halten sich nicht an solche Ratschläge. +

+ +
+
+

Tilman scores

+
+

Ruhe bitte!Ruhe bitte!Seit vier Wochen sind wir Chormitglieder. Allerdings in verschiedenen Chören. Bettina singt im Chor von Kalmars Nation, während es mich zu Östgöta verschlagen hat. In Schweden gehört das gemeinsame Singen immer noch zur Volkskultur - und wenn es nur die Trinklieder sind, die auf keiner Gasque fehlen dürfen. Deshalb hat auch fast jede Nation einen eigenen Chor. +Der Chor von Östgöta bewegt sich auf einem hohem Niveau, die Stücke werden in einem ziemlich hohen Tempo geprobt. Erschwerend hinzu kommt, dass es im ganzen Chor außer mir nur ein einziges Mitglied gibt, das nicht Schwedisch spricht. Und natürlich werden auch schwedische Lieder gesungen. Inzwischen komme ich aber einigermaßen zurecht und freue mich immer, wenn die Dirigentin Dinge tut, die ich verstehe.

+ +
+ + +
+ + diff --git a/www/uppsala/flogsta.mp3 b/www/uppsala/flogsta.mp3 new file mode 100644 index 0000000..e4c83ff Binary files /dev/null and b/www/uppsala/flogsta.mp3 differ diff --git a/www/uppsala/impressum.jpg b/www/uppsala/impressum.jpg new file mode 100644 index 0000000..966b79f Binary files /dev/null and b/www/uppsala/impressum.jpg differ diff --git a/www/uppsala/misc/Descr.WD3 b/www/uppsala/misc/Descr.WD3 new file mode 100644 index 0000000..deeba81 Binary files /dev/null and b/www/uppsala/misc/Descr.WD3 differ diff --git a/www/uppsala/misc/drupal.css b/www/uppsala/misc/drupal.css new file mode 100644 index 0000000..61d11c4 --- /dev/null +++ b/www/uppsala/misc/drupal.css @@ -0,0 +1,691 @@ +/* $Id: drupal.css,v 1.147.2.8 2006/12/14 20:20:21 killes Exp $ */ + +/* +** HTML elements +*/ +fieldset { + margin-bottom: 1em; + padding: .5em; +} +form { + margin: 0; + padding: 0; +} +hr { + height: 1px; + border: 1px solid gray; +} +img { + border: 0; +} +table { + border-collapse: collapse; +} +th { + text-align: left; + padding-right: 1em; + border-bottom: 3px solid #ccc; +} +th.active img { + display: inline; +} +tr.even, tr.odd { + background-color: #eee; + border-bottom: 1px solid #ccc; +} +tr.even, tr.odd { + padding: 0.1em 0.6em; +} +td.active { + background-color: #ddd; +} + +/* +** Menu styles +*/ +ul.menu { + list-style: none; + border: none; + text-align:left; +} +ul.menu li { + margin: 0 0 0 0.5em; +} +li.expanded { + list-style-type: circle; + list-style-image: url(menu-expanded.png); + padding: 0.2em 0.5em 0 0; + margin: 0; +} +li.collapsed { + list-style-type: disc; + list-style-image: url(menu-collapsed.png); + padding: 0.2em 0.5em 0 0; + margin: 0; +} +li.leaf { + list-style-type: square; + list-style-image: url(menu-leaf.png); + padding: 0.2em 0.5em 0 0; + margin: 0; +} +li a.active { + color: #000; +} +td.menu-disabled { + background: #ccc; +} + +/* +** Other common styles +*/ +.breadcrumb { + padding-bottom: .5em +} +.block-region { + background-color: #ffff66; + margin-top: 4px; + margin-bottom: 4px; + padding: 3px; +} +.block ul { + margin: 0; + padding: 0 0 0.25em 1em; +} +br.clear { + clear: both; + height: 0; +} +.container-inline div { + display: inline; +} +.error { + color: red; +} +.item-list .icon { + color: #555; + float: right; + padding-left: 0.25em; + clear: right; +} +.item-list .icon a { + color: #000; + text-decoration: none; +} +.item-list .icon a:hover { + color: #000; + text-decoration: none; +} +.item-list .title { + font-weight: bold; +} +.item-list ul { + margin: 0 0 0.75em 0; + padding: 0; +} +.item-list ul li { + margin: 0 0 0.25em 1.5em; + padding: 0; + list-style: disc; +} +.form-item { + margin-top: 1em; + margin-bottom: 1em; +} +tr.odd .form-item, tr.even .form-item { + margin-top: 0; + margin-bottom: 0; + white-space: nowrap; +} +.form-item input.error, .form-item textarea.error, .form-item select.error { + border: 2px solid red; +} +.form-item .description { + font-size: 0.85em; +} +.form-item label { + display: block; + font-weight: bold; +} +.form-item label.option { + display: inline; + font-weight: normal; +} +.marker, .form-required { + color: #f00; +} +.more-link { + text-align: right; +} +.node-form .form-text { + display: block; + width: 95%; +} +.node-form .standard { + clear: both; +} +.node-form textarea { + display: block; + width: 95%; +} +.node-form .attachments fieldset { + float: none; + display: block; +} +.nowrap { + white-space: nowrap; +} +.ok { + color: #080; +} +#pager { + clear: both; + text-align: center; +} +#pager a, #pager strong.pager-current { + padding: 0.5em; +} +.path { + padding-bottom: 0.7em; + font-size: 1.1em; +} + +/* +** Module specific styles +*/ +#aggregator .feed-source .feed-title { + margin-top: 0; +} +#aggregator .feed-source .feed-image img { + margin-bottom: 0.75em; +} +#aggregator .feed-source .feed-icon { + float: right; + display: block; +} +#aggregator .feed-item { + margin-bottom: 1.5em; +} +#aggregator .feed-item-title { + margin-bottom: 0; + font-size: 1.3em; +} +#aggregator .feed-item-meta, #aggregator .feed-item-body { + margin-bottom: 0.5em; +} +#aggregator .feed-item-categories { + font-size: 0.9em; +} +#aggregator td { + vertical-align: bottom; +} +#aggregator td.categorize-item { + white-space: nowrap; +} +#aggregator .categorize-item .news-item .body { + margin-top: 0; +} +#aggregator .categorize-item h3 { + margin-bottom: 1em; + margin-top: 0; +} +.book-navigation .menu { + border-top: 1px solid #888; + padding: 1em 0 0 3em; +} +.book-navigation .page-links { + border-top: 1px solid #888; + border-bottom: 1px solid #888; + text-align: center; + padding: 0.5em; + width:98%; +} +.book-navigation .page-previous { + text-align: right; + width: 42%; + display: block; + float: left; +} +.book-navigation .page-up { + margin: 0 5%; + width: 4%; + display: block; + float: left; +} +.book-navigation .page-next { + text-align: left; + width: 42%; + display: block; + float: left; +} +.node-unpublished, .comment-unpublished { + background-color: #fff4f4; +} +.preview .node, .preview .comment { + background-color: #ffffea; +} +.archive { + margin: 1em 0 1em 0; +} +.calendar .row-week td a { + display: block; +} +.calendar .row-week td a:hover { + background-color: #888; color: #fff; +} +.calendar a { + text-decoration: none; +} +.calendar a:hover { + text-decoration: none; +} +.calendar table { + border-collapse: collapse; + width: 100%; + border: 1px solid #000; +} +.calendar td, .calendar th { + text-align: center; + border: 1px solid #000; + padding: 1px; + margin: 0; + font-size: 0.8em; +} +.calendar td.day-blank { + border: 0; +} +.tips { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; + font-size: 0.9em; +} +#forum .description { + font-size: 0.9em; + margin: 0.5em; +} +#forum td.created, #forum td.posts, #forum td.topics, #forum td.last-reply, #forum td.replies, #forum td.pager { + white-space: nowrap; +} +#forum td.posts, #forum td.topics, #forum td.replies, #forum td.pager { + text-align: center; +} +.forum-topic-navigation { + padding: 1em 0 0 3em; + border-top: 1px solid #888; + border-bottom: 1px solid #888; + text-align: center; + padding: 0.5em; + width: 98%; +} +.forum-topic-navigation .topic-previous { + text-align: right; + float: left; + width: 46%; +} +.forum-topic-navigation .topic-next { + text-align: left; + float: right; + width: 46%; +} +.locale-untranslated { + font-style: normal; + text-decoration: line-through; +} +#node-admin-filter ul { + list-style-type: none; + padding: 0; + margin: 0; + width: 100%; +} +#node-admin-buttons { + float: left; + margin-left: 0.5em; + clear: right; +} +td.revision-current { + background: #ffc; +} +dl.multiselect dd.b, dl.multiselect dd.b .form-item, dl.multiselect dd.b select { + font-family: inherit; + font-size: inherit; + width: 14em; +} +dl.multiselect dd.a, dl.multiselect dd.a .form-item { + width: 8em; +} +dl.multiselect dt, dl.multiselect dd { + float: left; + line-height: 1.75em; + padding: 0; + margin: 0 1em 0 0; +} +dl.multiselect .form-item { + height: 1.75em; + margin: 0; +} +#permissions td.module, #blocks td.region { + font-weight: bold; +} +#permissions td.permission, #blocks td.block, #taxonomy td.term, #taxonomy td.message { + padding-left: 1.5em; +} + +#access-rules .access-type, #access-rules .rule-type { + margin-right: 1em; + float: left; +} +#access-rules .access-type .form-item, #access-rules .rule-type .form-item { + margin-top: 0; +} +#access-rules .mask { + clear: both; +} +.poll .bar { + height: 1em; + margin: 1px 0; + background-color: #ddd; +} +.poll .bar .foreground { + background-color: #000; + height: 1em; + clear: left; + float: left; +} +.poll .links { + text-align: center; +} +.poll .percent { + text-align: right; +} +.poll .total { + text-align: center; +} +.poll .vote-form { + text-align: center; +} +.poll .vote-form .choices { + text-align: left; + margin: 0 auto; + display: table; +} +.profile { + clear: both; + margin: 1em 0 1em 0; +} +.profile .picture { + float: right; + margin: 0 1em 1em 0; +} +.profile dt { + margin: 1em 0 0.2em 0; + font-weight: bold; +} +.profile dd { + margin:0; +} +.node-form .poll-form fieldset { + display: block; +} +img.screenshot { + border: 1px solid #808080; + display: block; + margin: 2px; +} +.search-form { + margin-bottom: 1em; +} +.search-form p { + margin-top: 0; + margin-bottom: 0.2em; + padding-top: 0; + padding-bottom: 0; +} +.search-form input { + margin-top: 0; + margin-bottom: 0; +} +.search-results p { + margin-top: 0; +} +.search-results dt { + font-size: 1.1em; +} +.search-results dd { + margin-bottom: 1em; +} +.search-results .search-info { + font-size: 0.85em; +} +.search-advanced .criterion { + float: left; + margin-right: 2em; +} +.search-advanced .action { + float: left; + clear: left; +} +#tracker td.replies { + text-align: center; +} +#tracker table { + width: 100%; +} +.theme-settings-left { + float: left; + width: 49%; +} +.theme-settings-right { + float: right; + width: 49%; +} +.theme-settings-bottom { + clear: both; +} +#user-login-form { + text-align: center; +} +.more-help-link { + font-size: 0.85em; + text-align: right; +} +table.watchdog-event th { + border-bottom: 1px solid #ccc; +} +tr.watchdog-user { + background: #ffd; +} +tr.watchdog-user .active { + background: #eed; +} +tr.watchdog-content { + background: #ddf; +} +tr.watchdog-content .active { + background: #cce; +} +tr.watchdog-page-not-found, tr.watchdog-access-denied { + background: #dfd; +} +tr.watchdog-page-not-found .active, tr.watchdog-access-denied .active { + background: #cec; +} +tr.watchdog-error { + background: #ffc9c9; +} +tr.watchdog-error .active { + background: #eeb9b9; +} + +/* Tab navigation */ +ul.primary { + border-collapse: collapse; + padding: 0 0 0 1em; + white-space: nowrap; + list-style: none; + margin: 5px; + height: auto; + line-height: normal; + border-bottom: 1px solid #bbb; +} +ul.primary li { + display: inline; +} +ul.primary li a { + background-color: #ddd; + border-color: #bbb; + border-width: 1px; + border-style: solid solid none solid; + height: auto; + margin-right: 0.5em; + padding: 0 1em; + text-decoration: none; +} +ul.primary li.active a { + background-color: #fff; + border: 1px solid #bbb; + border-bottom: #fff 1px solid; +} +ul.primary li a:hover { + background-color: #eee; + border-color: #ccc; + border-bottom-color: #eee; +} +ul.secondary { + border-bottom: 1px solid #bbb; + padding: 0.5em 1em 0.5em 1em; + margin: 5px; +} +ul.secondary li { + display: inline; + padding: 0 1em; + border-right: 1px solid #ccc; +} +ul.secondary a { + padding: 0; + text-decoration: none; +} +ul.secondary a.active { + border-bottom: 4px solid #999; +} + +/* +** Help module +*/ +.help-items { + float: left; + width: 22%; + padding-right: 3%; +} +.help-items-last { + padding-right: 0; +} + +/* +** Autocomplete styles +*/ +/* Suggestion list */ +#autocomplete { + position: absolute; + border: 1px solid; + overflow: hidden; + z-index: 100; +} +#autocomplete ul { + margin: 0; + padding: 0; + list-style: none; +} +#autocomplete li { + background: #fff; + color: #000; + white-space: pre; + cursor: default; +} +#autocomplete li.selected { + background: #0072b9; + color: #fff; +} +/* Animated throbber */ +html.js input.form-autocomplete { + background-image: url(throbber.gif); + background-repeat: no-repeat; + background-position: 100% 2px; +} +html.js input.throbbing { + background-position: 100% -18px; +} + +/* +** Progressbar styles +*/ +.progress { + font-weight: bold; +} +.progress .bar { + background: #fff url(progress.gif); + border: 1px solid #00375a; + height: 1.5em; + margin-top: 0.2em; +} +.progress .filled { + background: #0072b9; + height: 1em; + border-bottom: 0.5em solid #004a73; + width: 0%; +} +.progress .percentage { + float: right; +} + +/* +** Collapsing fieldsets +*/ +html.js fieldset.collapsed { + border-bottom-width: 0; + border-left-width: 0; + border-right-width: 0; + margin-bottom: 0; +} +html.js fieldset.collapsed * { + display: none; +} +html.js fieldset.collapsed table *, +html.js fieldset.collapsed legend, +html.js fieldset.collapsed legend * { + display: inline; +} +html.js fieldset.collapsible legend a { + padding-left: 15px; + background: url(menu-expanded.png) 5px 50% no-repeat; +} +html.js fieldset.collapsed legend a { + background-image: url(menu-collapsed.png); +} +/* Note: IE-only fix due to '* html' (breaks Konqueror otherwise). */ +* html.js fieldset.collapsible legend a { + display: block; +} + +/* +** Resizable text areas +*/ +.resizable-textarea { + width: 95%; +} +.resizable-textarea .grippie { + height: 14px; + background: #eee url(grippie.png) no-repeat 100% 100%; + border: 1px solid #ddd; + border-top-width: 0; + cursor: s-resize; +} + +/* +** Formatting for welcome page +*/ +#first-time strong { + display: block; + padding: 1.5em 0 .5em; +} diff --git a/www/uppsala/misc/drupal.js b/www/uppsala/misc/drupal.js new file mode 100644 index 0000000..598e597 --- /dev/null +++ b/www/uppsala/misc/drupal.js @@ -0,0 +1,364 @@ +// $Id: drupal.js,v 1.22.2.4 2006/12/01 14:57:29 killes Exp $ + +/** + * Only enable Javascript functionality if all required features are supported. + */ +function isJsEnabled() { + if (typeof document.jsEnabled == 'undefined') { + // Note: ! casts to boolean implicitly. + document.jsEnabled = !( + !document.getElementsByTagName || + !document.createElement || + !document.createTextNode || + !document.documentElement || + !document.getElementById); + } + return document.jsEnabled; +} + +// Global Killswitch on the element +if (isJsEnabled()) { + document.documentElement.className = 'js'; +} + +/** + * Make IE's XMLHTTP object accessible through XMLHttpRequest() + */ +if (typeof XMLHttpRequest == 'undefined') { + XMLHttpRequest = function () { + var msxmls = ['MSXML3', 'MSXML2', 'Microsoft'] + for (var i=0; i < msxmls.length; i++) { + try { + return new ActiveXObject(msxmls[i]+'.XMLHTTP') + } + catch (e) { } + } + throw new Error("No XML component installed!"); + } +} + +/** + * Creates an HTTP GET request and sends the response to the callback function. + * + * Note that dynamic arguments in the URI should be escaped with encodeURIComponent(). + */ +function HTTPGet(uri, callbackFunction, callbackParameter) { + var xmlHttp = new XMLHttpRequest(); + var bAsync = true; + if (!callbackFunction) { + bAsync = false; + } + + xmlHttp.open('GET', uri, bAsync); + xmlHttp.send(null); + + if (bAsync) { + xmlHttp.onreadystatechange = function() { + if (xmlHttp.readyState == 4) { + callbackFunction(xmlHttp.responseText, xmlHttp, callbackParameter); + } + } + return xmlHttp; + } + else { + return xmlHttp.responseText; + } +} + +/** + * Creates an HTTP POST request and sends the response to the callback function + * + * Note: passing null or undefined for 'object' makes the request fail in Opera 8. + * Pass an empty string instead. + */ +function HTTPPost(uri, callbackFunction, callbackParameter, object) { + var xmlHttp = new XMLHttpRequest(); + var bAsync = true; + if (!callbackFunction) { + bAsync = false; + } + xmlHttp.open('POST', uri, bAsync); + + var toSend = ''; + if (typeof object == 'object') { + xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + for (var i in object) { + toSend += (toSend ? '&' : '') + i + '=' + encodeURIComponent(object[i]); + } + } + else { + toSend = object; + } + xmlHttp.send(toSend); + + if (bAsync) { + xmlHttp.onreadystatechange = function() { + if (xmlHttp.readyState == 4) { + callbackFunction(xmlHttp.responseText, xmlHttp, callbackParameter); + } + } + return xmlHttp; + } + else { + return xmlHttp.responseText; + } +} + +/** + * Redirects a button's form submission to a hidden iframe and displays the result + * in a given wrapper. The iframe should contain a call to + * window.parent.iframeHandler() after submission. + */ +function redirectFormButton(uri, button, handler) { + // (Re)create an iframe to target. + createIframe(); + + // Trap the button + button.onmouseover = button.onfocus = function() { + button.onclick = function() { + // Prepare variables for use in anonymous function. + var button = this; + var action = button.form.action; + var target = button.form.target; + + // Redirect form submission + this.form.action = uri; + this.form.target = 'redirect-target'; + + handler.onsubmit(); + + // Set iframe handler for later + window.iframeHandler = function () { + var iframe = $('redirect-target'); + // Restore form submission + button.form.action = action; + button.form.target = target; + + // Get response from iframe body + try { + response = (iframe.contentWindow || iframe.contentDocument || iframe).document.body.innerHTML; + // Firefox 1.0.x hack: Remove (corrupted) control characters + response = response.replace(/[\f\n\r\t]/g, ' '); + if (window.opera) { + // Opera-hack: it returns innerHTML sanitized. + response = response.replace(/"/g, '"'); + } + } + catch (e) { + response = null; + } + + $('redirect-target').onload = null; + $('redirect-target').src = 'about:blank'; + + response = parseJson(response); + // Check response code + if (response.status == 0) { + handler.onerror(response.data); + return; + } + handler.oncomplete(response.data); + } + + return true; + } + } + button.onmouseout = button.onblur = function() { + button.onclick = null; + } +} + +/** + * Adds a function to the window onload event + */ +function addLoadEvent(func) { + var oldOnload = window.onload; + if (typeof window.onload != 'function') { + window.onload = func; + } + else { + window.onload = function() { + oldOnload(); + func(); + } + } +} + +/** + * Adds a function to a given form's submit event + */ +function addSubmitEvent(form, func) { + var oldSubmit = form.onsubmit; + if (typeof oldSubmit != 'function') { + form.onsubmit = func; + } + else { + form.onsubmit = function() { + return oldSubmit() && func(); + } + } +} + +/** + * Retrieves the absolute position of an element on the screen + */ +function absolutePosition(el) { + var sLeft = 0, sTop = 0; + var isDiv = /^div$/i.test(el.tagName); + if (isDiv && el.scrollLeft) { + sLeft = el.scrollLeft; + } + if (isDiv && el.scrollTop) { + sTop = el.scrollTop; + } + var r = { x: el.offsetLeft - sLeft, y: el.offsetTop - sTop }; + if (el.offsetParent) { + var tmp = absolutePosition(el.offsetParent); + r.x += tmp.x; + r.y += tmp.y; + } + return r; +}; + +function dimensions(el) { + return { width: el.offsetWidth, height: el.offsetHeight }; +} + +/** + * Returns true if an element has a specified class name + */ +function hasClass(node, className) { + if (node.className == className) { + return true; + } + var reg = new RegExp('(^| )'+ className +'($| )') + if (reg.test(node.className)) { + return true; + } + return false; +} + +/** + * Adds a class name to an element + */ +function addClass(node, className) { + if (hasClass(node, className)) { + return false; + } + node.className += ' '+ className; + return true; +} + +/** + * Removes a class name from an element + */ +function removeClass(node, className) { + if (!hasClass(node, className)) { + return false; + } + // Replaces words surrounded with whitespace or at a string border with a space. Prevents multiple class names from being glued together. + node.className = eregReplace('(^|\\s+)'+ className +'($|\\s+)', ' ', node.className); + return true; +} + +/** + * Toggles a class name on or off for an element + */ +function toggleClass(node, className) { + if (!removeClass(node, className) && !addClass(node, className)) { + return false; + } + return true; +} + +/** + * Emulate PHP's ereg_replace function in javascript + */ +function eregReplace(search, replace, subject) { + return subject.replace(new RegExp(search,'g'), replace); +} + +/** + * Removes an element from the page + */ +function removeNode(node) { + if (typeof node == 'string') { + node = $(node); + } + if (node && node.parentNode) { + return node.parentNode.removeChild(node); + } + else { + return false; + } +} + +/** + * Prevents an event from propagating. + */ +function stopEvent(event) { + if (event.preventDefault) { + event.preventDefault(); + event.stopPropagation(); + } + else { + event.returnValue = false; + event.cancelBubble = true; + } +} + +/** + * Parse a JSON response. + * + * The result is either the JSON object, or an object with 'status' 0 and 'data' an error message. + */ +function parseJson(data) { + if (data.substring(0,1) != '{') { + return { status: 0, data: data.length ? data : 'Unspecified error' }; + } + return eval('(' + data + ');'); +} + +/** + * Create an invisible iframe for form submissions. + */ +function createIframe() { + // Delete any previous iframe + deleteIframe(); + // Note: some browsers require the literal name/id attributes on the tag, + // some want them set through JS. We do both. + window.iframeHandler = function () {}; + var div = document.createElement('div'); + div.id = 'redirect-holder'; + div.innerHTML = ''; + var iframe = div.firstChild; + with (iframe) { + name = 'redirect-target'; + setAttribute('name', 'redirect-target'); + id = 'redirect-target'; + } + with (iframe.style) { + position = 'absolute'; + height = '1px'; + width = '1px'; + visibility = 'hidden'; + } + document.body.appendChild(div); +} + +/** + * Delete the invisible iframe for form submissions. + */ +function deleteIframe() { + var holder = $('redirect-holder'); + if (holder != null) { + removeNode(holder); + } +} + +/** + * Wrapper around document.getElementById(). + */ +function $(id) { + return document.getElementById(id); +} diff --git a/www/uppsala/misc/favicon.ico b/www/uppsala/misc/favicon.ico new file mode 100644 index 0000000..18e2d52 Binary files /dev/null and b/www/uppsala/misc/favicon.ico differ diff --git a/www/uppsala/misc/feed.png b/www/uppsala/misc/feed.png new file mode 100644 index 0000000..1679ab0 Binary files /dev/null and b/www/uppsala/misc/feed.png differ diff --git a/www/uppsala/misc/grippie.png b/www/uppsala/misc/grippie.png new file mode 100644 index 0000000..d863dc7 Binary files /dev/null and b/www/uppsala/misc/grippie.png differ diff --git a/www/uppsala/misc/menu-collapsed.png b/www/uppsala/misc/menu-collapsed.png new file mode 100644 index 0000000..95a214a Binary files /dev/null and b/www/uppsala/misc/menu-collapsed.png differ diff --git a/www/uppsala/misc/menu-expanded.png b/www/uppsala/misc/menu-expanded.png new file mode 100644 index 0000000..46f39ec Binary files /dev/null and b/www/uppsala/misc/menu-expanded.png differ diff --git a/www/uppsala/misc/menu-leaf.png b/www/uppsala/misc/menu-leaf.png new file mode 100644 index 0000000..827ba08 Binary files /dev/null and b/www/uppsala/misc/menu-leaf.png differ diff --git a/www/uppsala/misc/progress.gif b/www/uppsala/misc/progress.gif new file mode 100644 index 0000000..6d8652e Binary files /dev/null and b/www/uppsala/misc/progress.gif differ diff --git a/www/uppsala/misc/throbber.gif b/www/uppsala/misc/throbber.gif new file mode 100644 index 0000000..4352e64 Binary files /dev/null and b/www/uppsala/misc/throbber.gif differ diff --git a/www/uppsala/modules/img_assist/Descr.WD3 b/www/uppsala/modules/img_assist/Descr.WD3 new file mode 100644 index 0000000..397e171 Binary files /dev/null and b/www/uppsala/modules/img_assist/Descr.WD3 differ diff --git a/www/uppsala/modules/img_assist/img_assist.css b/www/uppsala/modules/img_assist/img_assist.css new file mode 100644 index 0000000..d88b727 --- /dev/null +++ b/www/uppsala/modules/img_assist/img_assist.css @@ -0,0 +1,129 @@ +/** + * IMG ASSIST WINDOW + */ +body.img_assist { + margin: 0px; + padding: 5px; + color: #000000; + font-family: Arial, Helvetica, sans-serif; + font-size: .8em; + background-color: #efefef; +} +/* Thin line between the header frame and the main frame */ +body#img_assist_thumbs, body#img_assist_upload, body#img_assist_properties { + border-top: 1px solid #000; +} +/* Darker background color in the header frame */ +body#img_assist_header { + background-color:#ccc; +} +/* Thin border around images */ +.img_assist img { + border: 1px solid #000; +} +.img_assist .form-button { + font-weight: bold; +} +.img_assist img { + display: inline; /* pushbutton theme changes the display to block */ +} +.img_assist .messages { + border: 1px solid #000; + background-color: #ccc; + padding: 2px; + margin: 3px 0px 6px 0px; +} + +/* Upload Window */ +.img_assist .node-form { + width: 95%; +} + +/* Properties Window */ +.img_assist #preview { + padding: 5px 10px 5px 5px; +} +.img_assist .form-item { /* the first form field on the properties frame should be at the top of the page */ + margin-top: 0px; + margin-bottom: 1em; +} +.img_assist #caption { + display: block; +} +.img_assist #browse div.form-item { + display: inline; +} +.img_assist #link-group div.form-item{ + display: inline; +} +.img_assist #size div.form-item{ + display: inline; +} +.img_assist #size-other div.form-item{ + display: inline; +} +.img_assist #alignment { + text-align: left; +} +.img_assist #edit-title, .img_assist #edit-desc { + width: 99%; +} +.img_assist #edit-link { + width: 155px; +} +.img_assist #edit-url { + width: 150px; +} +.img_assist #edit-align { + width: 100px; +} +#finalhtmlcode { + display: none; + visibility: hidden; +} + +/* Header Frame */ +#header-uploading, #header-properties, #header-browse { + float: left; + width: 80%; +} +#header-startover, #header-cancel { + float: right; + width: 15%; + text-align: right; +} + +/** + * POPUP IMAGES WINDOW + */ +body#img_assist_display { + margin: 0; + padding: 0; +} +img { + margin: 0; + padding: 0; +} + +/** + * FINAL PAGE (node) + * You may want to copy these styles to your theme's CSS file and then set img_assist.css + * not to load on every page. This can be set on the img_assist settings page. + */ +span.left { + float: left; + margin: 5px 5px 5px 0px; +} +span.right { + float: right; + margin: 5px 0px 5px 5px; +} +span.caption { + display: block; /* put the caption under the image (not next to it) */ +} +.inline img{ + border: 1px solid #000; /* put a thin border around inline images */ +} +br.clear-both { + clear: both; /* clear floats so the next node will display normally */ +} diff --git a/www/uppsala/modules/img_assist/img_assist.js b/www/uppsala/modules/img_assist/img_assist.js new file mode 100644 index 0000000..acf4872 --- /dev/null +++ b/www/uppsala/modules/img_assist/img_assist.js @@ -0,0 +1,149 @@ +var currentMode; + +function onChangeBrowseBy() { + var formObj = frames['img_assist_header'].document.forms[0]; + browse = formObj['edit[browse]'].value; + frames['img_assist_main'].window.location.href = BASE_URL + 'index.php?q=img_assist/thumbs/' + browse; +} + +function onClickUpload() { + frames['img_assist_main'].window.location.href = BASE_URL + 'index.php?q=img_assist/upload'; +} + +function onClickStartOver() { + frames['img_assist_main'].window.location.href = BASE_URL + 'index.php?q=img_assist/thumbs/myimages'; +} + +function updateCaption() { + var caption = frames['img_assist_main'].document.getElementById("caption"); + var title = frames['img_assist_main'].document.img_assist['edit[title]'].value; + var desc = frames['img_assist_main'].document.img_assist['edit[desc]'].value; + if (desc != '') { + title = title + ': '; + } + caption.innerHTML = '' + title + '' + desc; +} + +function onChangeHeight() { + var formObj = frames['img_assist_main'].document.forms[0]; + var aspect = formObj['edit[aspect]'].value; + var height = formObj['edit[height]'].value; + formObj['edit[width]'].value = Math.round(height * aspect); +} + +function onChangeWidth() { + var formObj = frames['img_assist_main'].document.forms[0]; + var aspect = formObj['edit[aspect]'].value; + var width = formObj['edit[width]'].value; + formObj['edit[height]'].value = Math.round(width / aspect); +} + +function onChangeLink() { + var formObj = frames['img_assist_main'].document.forms[0]; + if (formObj['edit[link_options_visible]'].value == 1) { + if (formObj['edit[link]'].value == 'url') { + showElement('edit-url', 'inline'); + } else { + hideElement('edit-url'); + } + } +} + +function onChangeSizeLabel() { + var formObj = frames['img_assist_main'].document.forms[0]; + if (formObj['edit[size_label]'].value == 'other') { + showElement('size-other', 'inline'); + } else { + hideElement('size-other'); + //showElement('size-other', 'inline'); // uncomment for testing + // get the new width and height + var size = formObj['edit[size_label]'].value.split('x'); + // this array is probably a bounding box size, not an actual image + // size, so now we use the known aspect ratio to find the actual size + var aspect = formObj['edit[aspect]'].value; + var width = size[0]; + var height = size[1]; + if (Math.round(width / aspect) <= height) { // width is controlling factor + height = Math.round(width / aspect); + } else { // height is controlling factor + width = Math.round(height * aspect); + } + // fill the hidden width and height textboxes with these values + formObj['edit[width]'].value = width; + formObj['edit[height]'].value = height; + } +} + +function setHeader(mode) { + if (currentMode != mode) { + frames['img_assist_header'].window.location.href = BASE_URL + 'index.php?q=img_assist/header/' + mode; + } + currentMode = mode; +} + +function showElement(id, format) { + var docObj = frames['img_assist_main'].document; + format = (format) ? format : 'block'; + if (docObj.layers) { + docObj.layers[id].display = format; + } else if (docObj.all) { + docObj.all[id].style.display = format; + } else if (docObj.getElementById) { + docObj.getElementById(id).style.display = format; + } +} + +function hideElement(id) { + var docObj = frames['img_assist_main'].document; + if (docObj.layers) { + docObj.layers[id].display = 'none'; + } else if (docObj.all) { + docObj.all[id].style.display = 'none'; + } else if (docObj.getElementById) { + docObj.getElementById(id).style.display = 'none'; + } +} + +function launch_popup(nid, mw, mh) { + var ox = mw; + var oy = mh; + if((ox>=screen.width) || (oy>=screen.height)){ + var ox = screen.width-150; + var oy = screen.height-150; + var winx = (screen.width / 2)-(ox / 2); + var winy = (screen.height / 2)-(oy / 2); + var use_scrollbars = 1; + } + else{ + var winx = (screen.width / 2)-(ox / 2); + var winy = (screen.height / 2)-(oy / 2); + var use_scrollbars = 0; + } + var win = window.open(BASE_URL + 'index.php?q=img_assist/popup/' + nid, 'imagev', 'height='+oy+'-10,width='+ox+',top='+winy+',left='+winx+',scrollbars='+use_scrollbars+',resizable'); +} + +function insertImage() { + if (window.opener) { + // Get variables from the fields on the properties frame + var formObj = frames['img_assist_main'].document.forms[0]; + // Get mode (see img_assist.module for detailed comments) + if (formObj['edit[insertmode]'].value == 'html') { // return so the page can submit normally and generate the HTML code + return true; + } else if (formObj['edit[insertmode]'].value == 'html2') { // HTML step 2 (processed code, ready to be inserted) + var content = getHTML(formObj); + } else { + var content = getFilterTag(formObj); + } + insertToEditor(content); + return false; + + } else { + alert('The image cannot be inserted because the parent window cannot be found.'); + return false; + } +} + +function getHTML(formObj) { + var html = frames['img_assist_main'].document.getElementById("finalhtmlcode").innerHTML; + return html; +} \ No newline at end of file diff --git a/www/uppsala/node/100 b/www/uppsala/node/100 new file mode 100644 index 0000000..f709ab8 --- /dev/null +++ b/www/uppsala/node/100 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/103 b/www/uppsala/node/103 new file mode 100644 index 0000000..2e80060 --- /dev/null +++ b/www/uppsala/node/103 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/107 b/www/uppsala/node/107 new file mode 100644 index 0000000..ffaede3 --- /dev/null +++ b/www/uppsala/node/107 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/108 b/www/uppsala/node/108 new file mode 100644 index 0000000..1f3bfd6 --- /dev/null +++ b/www/uppsala/node/108 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/109 b/www/uppsala/node/109 new file mode 100644 index 0000000..d5d3382 --- /dev/null +++ b/www/uppsala/node/109 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/110 b/www/uppsala/node/110 new file mode 100644 index 0000000..9b66806 --- /dev/null +++ b/www/uppsala/node/110 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/111 b/www/uppsala/node/111 new file mode 100644 index 0000000..7d5f6f6 --- /dev/null +++ b/www/uppsala/node/111 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/112 b/www/uppsala/node/112 new file mode 100644 index 0000000..d4570cb --- /dev/null +++ b/www/uppsala/node/112 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/114 b/www/uppsala/node/114 new file mode 100644 index 0000000..3a56519 --- /dev/null +++ b/www/uppsala/node/114 @@ -0,0 +1,74 @@ + + + + Letzer Besuch | Uppsala + + + + + + + + + + + + + + + +
+

Letzer Besuch

+ +
+
+

Thomas kommtThomas kommtZwei Tage mussten wir dann alleine zur Uni, bevor uns am Mittwoch, dem 13. Dezember Thomas erreichte. Die Abschlusspräsentation lag zwar hinter uns, aber dafür musste am Freitag der Abschlussbericht abgegeben werden, so dass auch Thomas erst mal Uni mitmachen durfte. (Diese Fehlplanung lag darin begründet, dass wir dachten das Projekt würde - wie im Vorlesungsverzeichnis angegeben - bis Mitte Januar laufen, als die Besuchsflüge gebucht wurden. Tatsächlich wird aber alles vor Weihnachten beendet, weil im Januar für die Abschlussklausuren gelernt wird.)LuciafestLuciafest +Aber immerhin konnten wir abends gleich zur Lucia-Feier in V-Dala Nation und Lussekatter essen - am 13.12. ist nämlich wirklich Lucia. +Der Donnerstag wurde auch noch einmal sehr universitär, dafür gab es ordentlich Schweden-KontaktSightseeingSightseeing und die Instituts-Weihnachtsfeier als runden Abschluss. Nach der Uni reichte es dann nur noch für etwas schwedische Esskultur (Max Burger) - wir hatten uns für den Abend zwar einiges vorgenommen, wollten uns aber noch kurz ausruhen und als BettinaOrdentlich EssenOrdentlich Essen gegen halb zwölf durch Thomas' , äh, kraftvolles Atmen geweckt wurde, war es dann schon etwas spät. +Dafür gab es am Freitag aber erstmal das Uppsala-Programm inklusive Shopping-Tour. Abends gab es dann nochmal schwedische Esskultur, diesmal etwas höherwertig und in mehreren Gängen in Värmlands Nation. Nur der Digestif lief wohl nicht unter höherwertig, zumindest Thomas' Gesicht und Beschreibung zufolge. ("Mann, das war das wirklich widerlichste Zeug, das ich je getrunken habe!") Nach dem Essen kam ich dann hinterherPartyParty (der Bericht...) und die Party konnte beginnen. +Samstag ging es dann nach Stockholm, wo sämtliche Plätze inzwischen von Weihnachtsmärkten übernommen worden waren. Auch hier haben wir es noch einmal mit Shopping versucht, aber so richtig wollte das nicht klappen.Party!Party! (Sorry, Thomas, vermutlich ist Schweden dafür einfach das falsche Land - aber du fliegst ja bald nach Madrid) Zurück in Uppsala teilten wir uns auf (Thomas und Bettina zu Västgöta, ich zu Göteborgs Nation), um mit der Party des Abends auch ganz sicher zu gehen. Diese Taktik zahlte sich aus, denn während ich es mit meiner Nation ganz gut getroffen hatte, landeten die beiden anderen unversehens auf einer Party, die wohl hauptsächlich für gleichgeschlechtliche Paare ausgerichtet war, so dass sie sich relativ schnell fehl am Platze fühlten und mir folgten. Göteborgs war für den Abend tatsächlich eine gute Wahl so dass es auch relativ spät wurde. Deswegen gab es am Sonntagmorgen auch nur noch einen kurzen Ausflug in Uppsalas Norden, bevor Thomas wieder Richtung Berlin entschwebte.StockholmStockholmZurück nach UppsalaZurück nach Uppsala +Göteborgs SläppGöteborgs Släpp

+ +
+ + +
+ + diff --git a/www/uppsala/node/115 b/www/uppsala/node/115 new file mode 100644 index 0000000..29bbd85 --- /dev/null +++ b/www/uppsala/node/115 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/116 b/www/uppsala/node/116 new file mode 100644 index 0000000..5f0d0b0 --- /dev/null +++ b/www/uppsala/node/116 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/117 b/www/uppsala/node/117 new file mode 100644 index 0000000..ad83b28 --- /dev/null +++ b/www/uppsala/node/117 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/118 b/www/uppsala/node/118 new file mode 100644 index 0000000..b367f3c --- /dev/null +++ b/www/uppsala/node/118 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/119 b/www/uppsala/node/119 new file mode 100644 index 0000000..4059b6a --- /dev/null +++ b/www/uppsala/node/119 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/120 b/www/uppsala/node/120 new file mode 100644 index 0000000..181e53d --- /dev/null +++ b/www/uppsala/node/120 @@ -0,0 +1,74 @@ + + + + Weihnachten | Uppsala + + + + + + + + + + + + + + + +
+

Weihnachten

+ +
+
+

Schwedischer WeihnachtsbaumSchwedischer WeihnachtsbaumWir hatten uns, anders als ein Großteil der Austauschstudenten, entschlossen, über Weihnachten in Uppsala zu bleiben. Bis zuletzt hofften wir auf Schnee, der sich aber nicht so wirklich einstellen wollte. Weihnachten wird hier, wie in Deutschland, am 24. gefeiert und wir wollten an diesem Tag in Upplands Nation gehen, deren öffentliche Weihnachtsfeier irgendwo in den Studieninformationen empfohlen worden war. Also sind wir gegen Mittag in die Stadt gefahren, um uns mal umzuschauen. Die Feier war auch tatsächlich schon am Laufen, wirkte allerdings mehr wie eine Seniorenverköstigung. Es war schwer jemanden zu finden, der mit etwas anderem als sich und seinem Essen beschäftigt war und da wir niemandem den Weihnachtsbraten streitig machen wollten, gingen wir weiter. Etwas zu Essen wäre uns so langsam aber doch recht gewesen, so dass wir uns Richtung Innenstadt bewegten und dabei nach einem geöffneten Café Ausschau hielten - nichts.Weiße Weihnacht?Weiße Weihnacht? Alle Geschäfte, Cafés und Restaurants waren geschlossen. Nur der Innenstadt-Supermarkt hatte offen. Und Max Burger am Stora Torget, so dass es wohl nicht an restriktiven Ladenöffnungszeiten liegen konnte. Weihnachten im Max Burger war uns dann aber doch etwas zu traurig, so dass wir nach einem ausgedehnten Spaziergang (wirklich nichts geöffnet) auf Selbstversorgung umstiegen und im Supermarkt für unser Weihnachtsessen einkauften. +Allgemein war Uppsala extrem leer und so langsam verstanden wir, was es bedeutet, wenn von 130.000 Einwohnern 40.000 Studenten sind, die über Weihnachten heim zu Mami fahren. (In der Tat kann man schon an den Wochenenden feststellen, dass es deutlich ruhiger ist. Vermutlich gibt es hier auch eine große Anzahl an Pendlern.) +DomkircheDomkircheNachdem wir in Lilla Sunnersta also den Nachmittag in sehr privatem Rahmen verbracht hatten (die Siedlung war schon seit einigen Tagen frei von Leben), ging es Abends zu Weihnachtsfeier nach Flogsta, der großen Studentensiedlung in Uppsalas Westen. Dort schlossen wir uns für den Abend einer deutsch-französisch-argentinisch-russisch-tschechischen Gruppe an, von der wir bis dahin bis auf eine Ausnahme niemanden kannten. Nett war es trotzdem. Jeder hatte etwas zu Essen mitgebracht,Domkirche 2Domkirche 2 allerdings endeten unsere Aufnahmekapazitäten bereits nach etwa einem Drittel der vorhandenen Speisen. (Wahrscheinlich gab es auf dem Korridor danach ein paar sehr gut versorgte Tage.) +Wir nutzten die Gelegenheit, um am 10-Uhr-Schrei teilzunehmen, der aber ziemlich unbeantwortet blieb - auch Flogsta war ganz schön verlassen. (Beim zweiten Anlauf haben wir, wie auf der Aufnahme zu hören, dann doch noch eine Antwort bekommen. Auf die Frage, ob er alleine sei antwortet der Rufer, dass seine Mutter gleich um die Ecke wohnt - sonst wäre wohl auch er nicht mehr in Flogsta gewesen.) +Zu elf Uhr fuhren wir dann gemeinsam in die Domkirche, die bis auf den letzten Platz gefüllt und komplett durch Kerzen beleuchtet war. Sehr eindrucksvoll.KirchenchorKirchenchor Die prunkvolle Ausstattung und teilweise auch die Liturgie erinnerten eher an die römisch-katholische Kirche, die Predigt hielt allerdings eine Frau. Außerdem kannten wir sämtliche gesungenen Weihnachtslieder und da die schwedischen Texte verteilt worden waren, konnten wir ungehindert die Stimmführung für die Apsis übernehmen. +Nach dem Gottesdienst fuhren wir zurück nach Flogsta, versuchten uns mit wenig Erfolg an den Nachspeisen und unterhielten uns noch bis gegen drei Uhr mit den neuen Bekannten.

+ +
+ + +
+ + diff --git a/www/uppsala/node/13 b/www/uppsala/node/13 new file mode 100644 index 0000000..0b6c1cb --- /dev/null +++ b/www/uppsala/node/13 @@ -0,0 +1,77 @@ + + + + Angekommen | Uppsala + + + + + + + + + + + + + + + +
+

Angekommen

+ +
+
+

Auf der FähreAuf der Fähre Die Hinfahrt hat Spaß gemacht. Das erste Zwischenziel war Rostock, wo wir übrigens zwei Stunden zu früh ankamen, weil diverse Mütter Angst hatten, dass wir unsere Fähre verpassen. Als wir dann endlich auf dem Schiff waren, haben wir uns schon halb wie in Schweden gefühlt, außer den deutschen Truckern haben alle nur noch Schwedisch geredet. +Von dem Schiff waren wir begeistert: Einarmige Banditen, an denen ein schwedisches Pärchen die ganze Nacht gespielt hat und tatsächlich ziemlich oft gewonnen hat. +Kabine auf der FähreKabine auf der Fähre In unserer Außenkabine hatten wir sogar eine Dusche, womit wir nicht gerechnet hatten. Deshalb haben wir sofort im Duty-Free-Shop 2in1-Duschgel-Shampoo gekauft und außerdem Schokolade aus Österreich. +Zum Glück wurden wir um fünf Uhr per Durchsage geweckt, so dass wir noch unseren ersten Sonnernaufgang in Schweden genießen konnten, bevor wir acht Stunden bis Uppsala gefahren sind. Hier sind auf der Autobahn nur 110 km/h erlaubt, woran sich auch der Großteil hält. Somit empfindet man sich mit 120 km/h als Raser, was ein ziemlich komisches Gefühl ist. +In Schweden gibt es übrigens einen Überholseitenstreifen. Das heißt auch wenn die Straße nur zweispurig ist, kann überholt werden, indem der der überholen will kurz aufleuchtet und der andere daraufhin auf dem Seitenstreifen weiterfährt. Wenn Gegenverkehr während des Überholvorgangs kommt, weicht dieser ebenfalls auf seinen Seitenstreifen aus. +Eine der wichtigsten AutobahnenEine der wichtigsten Autobahnen Während unserer Autofahrt haben wir übrigens wahnsinnig viele deutsche LKWs gesehen. Importieren die Schweden alles aus Deutschland? +Endlich in Uppsala angekommen, haben wir unseren Wohnungsschlüssel abgeholt und sind auf die Suche nach unserer Koordinatorin Ulrika gegangen. Das war auch eine kleine Odysse, weil wir nicht genau wussten, wo unser Campus war und keine Ahnung hatten, ob Ulrika dort überhaupt ihr Büro hat. Nachdem man uns zweimal durch die ganze Stadt geschickt hatte, kamen wir endlich in einem Büro an, wo man sie kannte und uns mit ihr zusammen brachte. +Ulrika ist wirklich sehr nett. Sie hat dafür gesorgt, dass wir Internet bekommen und hat uns unsere Welcome Package gegeben, indem sogar eine Prepaid-Karte für unsere Mobiltelefone war. Sehr cool! Jetzt haben wir also schon schwedische Handynummern. +Nur das NötigsteNur das Nötigste Im Anschluss ging es dann endlich in die neue Wohnung. Die ist geräumig und sehr gut ausgestattet - so gut, dass wir vielleicht das Eine oder Andere hätten zu Hause lassen können. Überhaupt haben wir wahrscheinlich einen Gepäckrekord aufgestellt. Was machen eigentlich Studenten, die mit dem Flugzeug kommen?

+ +
+ + +
+ + diff --git a/www/uppsala/node/14 b/www/uppsala/node/14 new file mode 100644 index 0000000..c67c4f3 --- /dev/null +++ b/www/uppsala/node/14 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/15 b/www/uppsala/node/15 new file mode 100644 index 0000000..8cecd2e --- /dev/null +++ b/www/uppsala/node/15 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/16 b/www/uppsala/node/16 new file mode 100644 index 0000000..479d851 --- /dev/null +++ b/www/uppsala/node/16 @@ -0,0 +1,75 @@ + + + + Välkommen till Lilla Sunnersta | Uppsala + + + + + + + + + + + + + + + +
+

Välkommen till Lilla Sunnersta

+ +
+
+

Lageplan Lilla SunnerstaLageplan Lilla Sunnersta +Wir wohnen in Lilla Sunnersta, einem Wohnheim ganz im Süden der Stadt. Eigentlich ist es schon eher ein Studentendorf. Es ist erst seit einem Jahr fertiggestellt, supermodern und hat alles, was man sich wünschen kann. Wir haben zwei Zimmer, eine große Wohnküche und ein eigenes Bad. Alles ist komplett ausgestattet: Esstisch, zwei Schreibtische, Stühle, Couch, Bilder an den Wänden und Schränke ohne Ende. Fernseher, ein großer Kühlschrank mit drei Gefrierschubladen, Geschirr und Töpfe - alles da. Die meisten Studentenwohnungen sind sicherlich schlechter ausgestattet. +Die Gesamte Anlage ist supermodern und wirkt sehr schwedisch/ergonomisch/durchdacht. Alles in Niedrigenergiebauweise mit viel Holz und sehr schick. +Die Müllcontainer stehen in einem eigenen Haus mit Dauerbelüftung (hier wird der Müll siebenfach getrennt) und heute haben wir auch zum ersten mal die Waschmaschinen benutzt. Die stehen im Gemeinschaftshaus, das etwas abseits ist, damit man niemanden stört, wenn man es für eine Party gebucht hat. Zum Waschen reserviert man einen Waschraum für drei Stunden. Das reicht dann locker für vier Maschinen Wäsche (weil zwei Waschmaschinen in jedem Raum sind) und weil man in den Wohnungen so schlecht Wäsche aufhängen kann gibt es natürlich auch Trockner und Trockenschrank (für die empfindlichen Sachen). +Kurzum: Die Wohnsituation ist so, dass man kaum wieder weg möchte. (Vor allen Dingen wenn man weiß, dass es natürlich auch hier Wohnheime aus den Siebzigern mit Gemeinschaftsküchen und gemeinsamem Badezimmer gibt.) Einziger Nachteil: Die Anlage liegt, im Gegensatz zu den anderen, außerhalb der Stadt. Da sich unser MIC-Campus aber auf halbem Weg Richtung Stadt befindet, ist auch das - zumindest für uns - nicht wirklich schlimm. +Eher problematisch für uns ist, dass wirklich jeder Parkplatz hier von Privatunternehmen bewirtschaftet wird - auch der vor unserer Haustür. Aber das erzählen wir ein anderes Mal. +Lilla Sunnersta PanoramaLilla Sunnersta Panorama

+ +
+ + +
+ + diff --git a/www/uppsala/node/17 b/www/uppsala/node/17 new file mode 100644 index 0000000..3411bcc --- /dev/null +++ b/www/uppsala/node/17 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/18 b/www/uppsala/node/18 new file mode 100644 index 0000000..80b8e42 --- /dev/null +++ b/www/uppsala/node/18 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/19 b/www/uppsala/node/19 new file mode 100644 index 0000000..49a4ae9 --- /dev/null +++ b/www/uppsala/node/19 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/22 b/www/uppsala/node/22 new file mode 100644 index 0000000..0f0135d --- /dev/null +++ b/www/uppsala/node/22 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/23 b/www/uppsala/node/23 new file mode 100644 index 0000000..3f29af1 --- /dev/null +++ b/www/uppsala/node/23 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/24 b/www/uppsala/node/24 new file mode 100644 index 0000000..c5a1ccc --- /dev/null +++ b/www/uppsala/node/24 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/25 b/www/uppsala/node/25 new file mode 100644 index 0000000..50df6e5 --- /dev/null +++ b/www/uppsala/node/25 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/26 b/www/uppsala/node/26 new file mode 100644 index 0000000..c959dec --- /dev/null +++ b/www/uppsala/node/26 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/27 b/www/uppsala/node/27 new file mode 100644 index 0000000..1135257 --- /dev/null +++ b/www/uppsala/node/27 @@ -0,0 +1,91 @@ + + + + Der Dreck muss weg | Uppsala + + + + + + + + + + + + + + + +
+

Der Dreck muss weg

+ +
+
+

Aufgrund der Anregung zweier einzelner Herren gibt es nun einen extra Müll-Artikel:
+Mülleimer 5-7Mülleimer 5-7Mülleimer 1-4Mülleimer 1-4 Hier in Schweden werden tatsächlich mehr Abfälle voneinander getrennt, als wir es aus Deutschland gewöhnt sind. Es gibt hier nicht so etwas wie den Gelben Sack, in den alle wiederverwertbaren Abfälle reinkommen. Hier machen die Arbeit also keine Maschinen, sondern die Schweden selber.
+Da nicht nur Tilman, sondern auch ich einen Heidenspaß am Mülltrennen habe und wir es mit gutem Gewissen und viel Enthusiasmus betreiben, habe ich zunächst sieben Behälter zu Mülleimern ernannt und sie liebevoll beschriftet.
+Es gibt folgende Kategorien
+

  1. Pappers Förpackningar
    +Papierverpackungen, z.B. Müslikartons und Tetrapacks, aber nicht Umzugskartons
  2. +
  3. Hårdplast Förpackningar
    +Hartplastikverpackungen, z.B. Shampooflaschen und Kremdöschen, aber kein Plastikspielzeug
  4. +
  5. Metall Förpackningar
    +Metallverpackungen, z.B. Konserven
  6. +
  7. Pappers/Tidningar
    +Papier, Zeitungen und Zeitschriften, aber keine Briefumschläge
  8. +
  9. Ofärgat och färgat glas
    +weißes und farbiges Glas sind eigentlich zwei unterschiedliche Kategorien, sammeln wir aber zusammen in einem Behälter
  10. +
  11. Komposterbart
    +alles was kompostierbar ist
  12. +
  13. Brännbart
    +... und der ganze Rest
  14. +

+MülltonnenMülltonnen Ob ihr das System nun verstanden habt, zeigt sich dann, wenn ihr wisst, in welche Kategorie Plastikfolie fällt.
+Um das gesamte Ausmaß des Mülltrennens zu verdeutlichen, muss ich hinzufügen, dass es noch weitere Kategorien gibt (Wellpappe, Elektrogeräte, Batterien, Glühbirnen, Stromsparleuchten und Neonröhren). Da wir aber der Meinung sind, dass wir diese Arten von Müll nicht regelmäßig produzieren, haben wir uns dazu entschlossen nur sieben Mülleimer in unserer Wohnung zu beherbergen.
+Eine andere Sache ist, wie hier in Lilla Sunnersta mit dem Müll umgegangen wird. Es gibt ein extra Haus, in dem die ganzen Mülltonnen stehen. Alle Haustüren dieser Wohnanlage öffnet man nicht mit einem Schlüssel, sondern mit einem Zahlencode. Die Codes für alle Wohnhäuser, die Waschhäuser und das Partyhaus sind gleich. Nur die Tür des Hauses in dem die Mülltonnen stehen wird mit einem anderen Code geöffnet.
+

+ +
+ + +
+ + diff --git a/www/uppsala/node/28 b/www/uppsala/node/28 new file mode 100644 index 0000000..8791435 --- /dev/null +++ b/www/uppsala/node/28 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/29 b/www/uppsala/node/29 new file mode 100644 index 0000000..3728792 --- /dev/null +++ b/www/uppsala/node/29 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/30 b/www/uppsala/node/30 new file mode 100644 index 0000000..0bf372c --- /dev/null +++ b/www/uppsala/node/30 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/31 b/www/uppsala/node/31 new file mode 100644 index 0000000..78eea26 --- /dev/null +++ b/www/uppsala/node/31 @@ -0,0 +1,73 @@ + + + + Gamla Uppsala | Uppsala + + + + + + + + + + + + + + + +
+

Gamla Uppsala

+ +
+
+

Grabhügel von Gamla UppsalaGrabhügel von Gamla Uppsala Gestern haben wir mal einen Fahrradausflug mit Kulturbeilage gemacht. Wir haben also Touris gespielt und sind mit einer Gruppe anderer deutscher Austauschstudenten nach Gamla Uppsala gefahren. Das sind Grabhügel, in denen die vorviktorianischen Könige (zwischen dem 6. und 12. Jahrhundert) samt einiger Kostbarkeiten für ihre letzte Reise begraben wurden. Außerdem befindet sich in unmittelbarer Nähe die älteste Domkirche von Uppsala, die Mitte des 11. Jahrhunderts gebaut wurde. Als wir ankamen wurde in ihr aber gerade eine Hochzeit gefeiert, so dass wir ein bisschen warten mussten bis wir sie anschauen konnten. Eigentlich war das eine sehr niedliche kleine Kirche, aber ein bisschen makaber fanden wir, dass die Kuppel mit Totenköpfen und Sanduhren dekoriert war. +KirchhofKirchhof Anschließend haben wir erstmal eine kleine Kaffeepause gemacht. Das ist übrigens sehr schwedisch und heißt Fika. In einem kleinen Café haben wir also Kakao getrunken und kremig-schokoladigen Schokoladenkuchen gegessen, die Schweden wissen echt wie man den macht. Endlich hat mal jemand erkannt, dass mehr Schokolade als Mehl in einen richtigen Schokoladenkuchen gehört. +Danach waren wir noch in dem zu Gamla Uppsala gehörenden Freilichtmuseum. Alledings waren die größere Attraktion die Schafe auf dem anliegenden Grundstück, die wir mit geklauten Äpfeln gefüttert haben. Es ist echt faszinierend, wie so ein Schaf an einem Apfel im Mund so lange herumkauen kann bis es den Gripsch sauber abgenagt hat. +Deutsche AustauschstudentenDeutsche Austauschstudenten In dem Freilichtmuseum entstand übrigens auch das formschöne Gruppenbild. Vordere Reihe: Kerstin, Bettina und Tilman (falls ihr uns nicht erkannt habt), Achim. Hintere Reihe: Antje, Katrin, Philipp, Timo, Vera. +Achim und Katrin sind übrigens das andere deutsche Paar, das auch in Lilla Sunnersta wohnt und an diesem Tag das gleiche Schicksal teilen musste, stolze 25 km zurückzulegen. Sie kommen aus Bonn und studieren Biologie (Katrin) und Physik (Achim). Die beiden sind übrigens sehr cool und wir haben daher echt Glück, dass sie nur zwei Häuser weiter wohnen. Außerdem kennen sie alle Zitate aus Mystery Science Theater 3000!

+ +
+ + +
+ + diff --git a/www/uppsala/node/33 b/www/uppsala/node/33 new file mode 100644 index 0000000..b708132 --- /dev/null +++ b/www/uppsala/node/33 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/34 b/www/uppsala/node/34 new file mode 100644 index 0000000..5f320bb --- /dev/null +++ b/www/uppsala/node/34 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/35 b/www/uppsala/node/35 new file mode 100644 index 0000000..828fca8 --- /dev/null +++ b/www/uppsala/node/35 @@ -0,0 +1,75 @@ + + + + Klotz am Bein und keine Münzen | Uppsala + + + + + + + + + + + + + + + +
+

Klotz am Bein und keine Münzen

+ +
+
+

Where's Waldo?Where's Waldo? Wir sind mit dem Auto gekommen. Prinzipiell eine gute Sache, ansonsten wäre ja auch unser Gepäckrekord nicht möglich gewesen. Hier in Uppsala ist ein Auto allerdings, wie sich schnell gezeigt hat, nicht unbedingt von Vorteil. Zunächst ist da die Verkehrsführung: Die Innenstadt hat im wesentlichen drei Arten von Straßen: Solche, durch die nur Taxis und Fahrräder in beiden Richtungen fahren dürfen, solche, durch die überhaupt nur Taxis und Fahrräder fahren dürfen und Sackgassen, an deren Ende ein Durchgang für Fahrräder ist. +Das zweite Problem ist der Parkraum. Erstens gibt es kaum Parkplätze und zweitens werden alle, wirklich alle Parkplätze die es gibt von privaten Firmen bewirtschaftet. Sogar der vor unserem Wohnheim, obwohl wir wirklich komplett ab vom Schuss sind. Fütter' mich!Fütter' mich! Ein Parkticket bekommt man an Automaten, spezielle Langzeit- oder Dauertickets gibt es nicht. Wenn man an einem Platz einen ganzen Monat lang parken möchte, füttert man den Automaten einfach so lange, bis das Ticket einen Monat lang gilt. Das ist dann natürlich billiger. Zahlen kann man mit Münzen oder mit Guthabenkarten verschiedener Tankstellenketten. Da Letzteres für uns nicht in Frage kommt (wo habe ich nur meine Preem-Karte?), brauchten wir also Münzen in ausreichender Menge. Womit wir schon beim nächsten Problem sind: Die Schweden hassen Münzen. Im Supermarkt gibt es an den Kassen spezielle Automaten (Aufschrift: "Ja, wir nehmen gerne [sogar] ihre Münzen"), in die man diese nervigen kleinen Dinger reinschmeißt, der Betrag wird dann automatisch verrechnet - nicht einmal ein Kassierer muss sich mit Zählen herumplagen. +Die Geldscheine beginnen bei umgerechnet zwei Euro und man bekommt immer möglichst viele Scheine zurück (Service!). Wie also an Münzen kommen? Gut, ein paar Kronen hatten wir schon, aber ein Tag parken hier draußen kostet 20 Kronen - ein Monat 80 Kronen. Da möchte man schon gern ein Monatsticket haben. Also haben wir angefangen, Münzen zu sammeln. Und natürlich versucht, Scheine zu wechseln. Antwort: "So viele Münzen habe ich nicht!" - klar, wir wollten ja auch ganze acht Euro von der Frau an der Buchladen-Kasse. Erfolgreich waren wir dann bei der Post. Gute Idee; wenigstens die können nicht alles in Scheinen zurückgeben, wenn man zwei Briefmarken kauft. +Erhöhtes Beförderungsentgelt?Erhöhtes Beförderungsentgelt? Zu diesem Zeitpunkt war es in gewisser Weise allerdings schon zu spät: Wir hatten das Auto mangels Münzen zwei Tage lang unbezahlt in Lilla Sunnersta stehen lassen und haben einen Strafzettel bekommen - 350 Kronen. Für wieviele Monate das gereicht hätte, darf sich jeder selber ausrechnen. +Und die Moral von der Geschicht': Hier fährt man Fahrrad. Das zieht erstaunliche gesellschaftliche und ökonomische Effekte nach sich (Fahrradpreise!), von denen wir noch berichten werden. +Übrigens: Eine Krone sind eigentlich 100 Öre. Als Münzen gibt es aber nur zehn Kronen, fünf Kronen, eine Krone und fünfzig Öre. Kleinere Münzen wurden abgeschafft. Wenn beim Einkaufen ein Betrag entsteht, für den es keine Entsprechung in Münzen gibt, wird zu den nächsten 50 Öre gerundet. Die Schweden mögen eben keine Münzen. +

+ +
+ + +
+ + diff --git a/www/uppsala/node/39 b/www/uppsala/node/39 new file mode 100644 index 0000000..b39c8cb --- /dev/null +++ b/www/uppsala/node/39 @@ -0,0 +1,75 @@ + + + + Bettina goes Hollywood | Uppsala + + + + + + + + + + + + + + + +
+

Bettina goes Hollywood

+ +
+
+

Kyrkan i BälingeKyrkan i BälingeHier in Uppsala kümmert man sich sehr um die Austauschstudenten. Für die Naturwissenschafter gibt es ein Programm, welches den neuen Studenten einen schwedischen Buddy zuordnet, der dafür sorgen soll, dass der Neuankömmling sich in der neuen Umgebung und mit der neuen Sprache nicht vollkommen verloren fühlt. Es geht darum einen Ansprechpartner zu haben, der sich in Uppsala bzw. Schweden auskennt, wenn irgendwelche Probleme auftreten. Mein Buddy heißt Anna und bis dahin kannte ich sie nur aus Emails. +Auf ihren Wunsch hin verabredeten wir uns an einem Samstag morgen kurz vor 7 Uhr in der Innenstadt. Was für mich bedeutete, dass ich um 5 Uhr aufstehen musste, da, wie man sich vorstellen kann, die Busse samstagsmorgens noch nicht so regelmäßig fahren. Im Zentrum angekommen musste ich dann mit großem Bedauern feststellen, dass es nicht nur nicht üblich für Bäcker ist samstags früh aufzumachen, sondern dass Bäcker hier allgemein nicht so üblich sind. Ich habe zumindest nach 30-minütiger Suche keinen in der ganzen Stadt gefunden. (Mittlerweile hat man mir glücklicherweise verraten wo sich die beiden Bäckereien in Uppsala befinden. Die beiden.) +Niklas, der KameramannNiklas, der KameramannAnna und ich fuhren mit einigen ihrer Freunde eine dreiviertel Stunde Bus und stiegen schließlich an einer Haltestelle namens "Bälinge Centrum" aus. Als Zentrum können sowas aber auch nur die Schweden deklarieren: Feld, Wald, drei Mehrfamilienhäuser und eine Kirche. +Nachdem wir uns umgezogen hatten und von den Makeup-Artists ein bisschen beschönigt wurden, ging es also los - der Dreh für den Kurzfilm "Bröllop" (dt. Hochzeit). Ende Oktober findet hier in Uppsala nämlich ein Kortfilmfestival statt. +Die Handlung: Auf dem Weg zum Altar sind sich Braut und Bräutigam nicht mehr sicher, ob sie überhaupt heiraten wollen. Unter den Hochzeitsgästen entdecken sie Menschen, die sie mehr und mehr verunsichern. Da sind zum Beispiel die Kumpels des Bräutigams, die früher mit ihm um die Häuser gezogen sind, oder eine Frau, die nach einem One-Night-Stand mit ihm schwanger wurde. Auf anderen Seite stehen die Verflossenen und Affairen der Braut. Am Ende des Films fährt das Paar winkend in einem Auto weg. Offen bleibt aber, ob sie nun geheiratet haben oder nicht. +Anna und ichAnna und ichIch war Statist und spielte somit die wichtige Rolle eines ahnungslosen Hochzeitsgastes. Da wir insgesamt nur etwa zehn Statisten waren, die immer wieder neu um die "wichtigen" Hochzeitsgäste drapiert wurden, und ich mit meiner rosafarbenen Bluse (die anderen waren eher farblos) beim Regisseur sehr beliebt war, wurde ich immer ganz vorne hingestellt und bin somit fast in jeder zweiten Einstellung zu sehen. Ich werde Filmstar!!! +Es war richtig interessant. Der einzige Nachteil war, dass die Hochzeit im Sommer gespielt hat, es in Schweden an dem Tag aber leider nur frische 13° hatte. Aber es hat trotzdem Spaß gemacht und ich habe so viele nette Leute kennengelernt. Außerdem glaube ich, dass ich den coolsten schwedischen Buddy auf der ganzen Welt habe!

+ +
+ + +
+ + diff --git a/www/uppsala/node/40 b/www/uppsala/node/40 new file mode 100644 index 0000000..27efd90 --- /dev/null +++ b/www/uppsala/node/40 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/41 b/www/uppsala/node/41 new file mode 100644 index 0000000..7fd7f10 --- /dev/null +++ b/www/uppsala/node/41 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/42 b/www/uppsala/node/42 new file mode 100644 index 0000000..ab9d69b --- /dev/null +++ b/www/uppsala/node/42 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/46 b/www/uppsala/node/46 new file mode 100644 index 0000000..95f7a5b --- /dev/null +++ b/www/uppsala/node/46 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/47 b/www/uppsala/node/47 new file mode 100644 index 0000000..cd10e5c --- /dev/null +++ b/www/uppsala/node/47 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/48 b/www/uppsala/node/48 new file mode 100644 index 0000000..5eea19d --- /dev/null +++ b/www/uppsala/node/48 @@ -0,0 +1,75 @@ + + + + Studieren in Schweden | Uppsala + + + + + + + + + + + + + + + +
+

Studieren in Schweden

+ +
+
+

Nach längerer Pause werde ich mal etwas über den wichtigsten Grund für die lange Artikelpause schreiben: Die Uni.
+Matematiskt- Informationsteknologiskt CentrumMatematiskt- Informationsteknologiskt CentrumDas Studieren ist hier etwas anders organisiert als in Deutschland. Der wichtigste Unterschied ist das Fehlen eines fixen Stundenplans - die Vorlesungen finden jede Woche zu unterschiedlichen Zeiten und oft auch in unterschiedlichen Räumen statt. Am Anfang hat man uns erklärt, dass die Idee dabei ist, dass die Studenten jede Vorlesung wählen können sollen. Der Vorteil der ständig wechselnden Termine ist, dass zwei Vorlesungen nicht komplett an parallelen Terminen laufen. Der Nachteil ist, dass es früher oder später immer die eine oder andere Kollision gibt. (Außerdem gibt es auch gerne mal kurzfristige Änderungen, z.B. was Raumbelegungen angeht, zumindest bei mir. Also schaue ich morgens besser noch mal auf meinen dynamisch generierten, aktuellen Stundenplan im Internet. Wie das hier funktioniert hat, als noch nicht jeder Student eine 10Mbit-Internet-Standleitung hatte, ist mir schleierhaft.)
+Das Ganze ist nur möglich, weil man normalerweise sowieso nur zwei Vorlesungen hört. Eine Vorlesung läuft in der Regel das halbe Semester (eine Period), so dass man zusammen auf vier Vorlesungen pro Semester kommt. Wir allerdings nicht, weil wir zusammen an einem Projekt teilnehmen, das über das ganze Semester läuft. (Dazu später sicherlich mal mehr.)
+Auf jeden Fall macht das ganze Studieren deutlich mehr Arbeit als gedacht. Diese Woche waren es bei mir zwei Labs, eine Hausaufgabe und eine Reflection allein für die Vorlesung "Datakom I" (Netzwerke), weshalb mir ein paar Nächte fehlen. Aber das Schlimmste für diese Period sollte damit überstanden sein - mal sehen, was die nächste bringt.
+Auch um das tägliche Studieren herum ist einiges anders organisiert als in Deutschland. Zum Beispiel war ich nach den Erfahrungen an der Schule in Strömstad (Schulaustausch '98) davon ausgegangen, dass die hervorragend ausgestatteten schwedischen Unis über luxuriöse Mensen verfügen, aber nix da! Es scheint damit zusammen zu hängen, dass es in Schweden allgemein nicht so üblich ist, sich mittags komplett vollzufuttern, auf jeden Fall gibt es auf unserem Campus nur ein Restaurang, das zum Lunch (sprich: Lunsch) hauptsächlich von Uni-Mitarbeitern aufgesucht wird und preislich nicht unbedingt zum täglichen Besuch einlädt. Außerdem hatten wir anfangs Schwierigkeiten damit, das Tagesmenü zu verstehen, was dazu führte, dass statt der erwarteten Spaghetti Bolognese auf einmal Rigatoni mit Meeresfrüchten vor mir standen. Buärks.
+LunchLunchWenn Studenten in der Uni Essen möchten, dann bringen sie etwas mit. Und das kommt dann in die Mikrowelle. Die Mikrowelle? In jedem Haus befinden sich zwei Räume, an deren Wand so viele Mikrowellen hängen, wie ein normales Hausnetz vermutlich gerade so verträgt. In der Mittagspause sind diese Räume dann voll von Studenten, die ihre Mikrowellenessen brav in einer Reihe auf den Tisch legen und warten. Wessen Essen vorne in der Reihe ist, bekommt die nächste Mikrowelle. Merke: Lasagne ist asozial. Während unsere köttbullar med ris (sehr verbreitet) gerade mal zwei Minuten brauchen, dauert die Zubereitung dieser Ausgeburten des Convenience Food beinahe eine Viertelstunde.
+

+ +
+ + +
+ + diff --git a/www/uppsala/node/61 b/www/uppsala/node/61 new file mode 100644 index 0000000..0c5fc32 --- /dev/null +++ b/www/uppsala/node/61 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/62 b/www/uppsala/node/62 new file mode 100644 index 0000000..dfd5a06 --- /dev/null +++ b/www/uppsala/node/62 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/63 b/www/uppsala/node/63 new file mode 100644 index 0000000..b16a5da --- /dev/null +++ b/www/uppsala/node/63 @@ -0,0 +1,72 @@ + + + + Healthy Fast Food | Uppsala + + + + + + + + + + + + + + + +
+

Healthy Fast Food

+ +
+
+

Letzte Woche waren wir bei Max Burger. Das ist eine schwedische Fast-Food-Kette, die bessere Burger als McDonald's und Burger King macht. Das alleine wäre vielleicht noch nicht so etwas Besonderes, aber sie treiben es noch etwas weiter. Fleisch, Tomate, Käse - alles da!Fleisch, Tomate, Käse - alles da!Da die Schweden im Allgemeinen etwas mehr auf Ernährung achten, hat die schwedische Burgerkette auch einen etwas anderen Fokus als die ausländische Konkurrenz. Schließlich bietet man "Hamburgare på svenska" - weniger Fett, Fleisch von glücklichen schwedischen Kühen und alles wird erst nach der Bestellung zubereitet. Und vergisst auch niemals zu erwähnen, dass man viel älter ist (fünf Jahre), als diese amerikanischen Emporkömmlinge.
+Wachsen die so?Wachsen die so?Aber darum geht es hier nur am Rande. Worum es eigentlich geht ist der Low Carb burger. Denn während das einfache Volk noch versucht, Fett aus dem Speiseplan zu streichen (Joghurt hat hier allerhöchstens zwei Prozent), wissen die wirklichen Fitnessanhänger längst, was wirklich schadet: Kohlenhydrate. Und deswegen gibt es jetzt den Hamburger ohne Brot. Ob der gut angenommen wird, wissen wir auch nicht, allerdings mussten wir extra raus zu IKEA, weil der Max Burger Downtown diese Errungenschaft (noch?) nicht verkauft.
+Draußen vor der Stadt konnte ich dann aber zuschlagen. Einmal Boulette im Salatblatt. Schmeckt gut, genaugenommen nicht anders als mit Brot, wir hatten den direken Vergleich. Der Soße sei Dank. Ist allerdings noch schwerer zu essen als ein überladener Döner beim Bus hinterher rennen. Aber fangt gar nicht erst mit nörgeln an - es wird hier nur "vorher"-Fotos zu sehen geben.
+

+ +
+ + +
+ + diff --git a/www/uppsala/node/64 b/www/uppsala/node/64 new file mode 100644 index 0000000..8e57f07 --- /dev/null +++ b/www/uppsala/node/64 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/65 b/www/uppsala/node/65 new file mode 100644 index 0000000..633cbc4 --- /dev/null +++ b/www/uppsala/node/65 @@ -0,0 +1,72 @@ + + + + Tilman scores | Uppsala + + + + + + + + + + + + + + + +
+

Tilman scores

+ +
+
+

Ruhe bitte!Ruhe bitte!Seit vier Wochen sind wir Chormitglieder. Allerdings in verschiedenen Chören. Bettina singt im Chor von Kalmars Nation, während es mich zu Östgöta verschlagen hat. In Schweden gehört das gemeinsame Singen immer noch zur Volkskultur - und wenn es nur die Trinklieder sind, die auf keiner Gasque fehlen dürfen. Deshalb hat auch fast jede Nation einen eigenen Chor. +Der Chor von Östgöta bewegt sich auf einem hohem Niveau, die Stücke werden in einem ziemlich hohen Tempo geprobt. Erschwerend hinzu kommt, dass es im ganzen Chor außer mir nur ein einziges Mitglied gibt, das nicht Schwedisch spricht. Und natürlich werden auch schwedische Lieder gesungen. Inzwischen komme ich aber einigermaßen zurecht und freue mich immer, wenn die Dirigentin Dinge tut, die ich verstehe. Eine Passage mit übertriebenem Crescendo wiederholen zum Beispiel. Die Frage, die dann bleibt, ist allerdings: Hatten wir jetzt zuviel davon, oder will sie mehr? +Am vergangenen Sonntag gab es dann einen ersten Höhepunkt: Wir haben die Filmmusik (Score) für den Kurzfilm aufgenommen, bei dem Bettina eine Statistenrolle übernommen hatte. Das bedeutete allerdings auch besonders viele Texte auf Schwedisch. Glücklicherweise singe ich ersten Bass, was meinen Text für zwei der acht Stücke auf "ohh" bzw. "oä" beschränkte. Ein drittes Stück hatte englischen Text. Beim Rest habe ich immer die beiden Probeläufe genutzt, um die Ausprache ins Ohr zu bekommen - hoffentlich hört man mich nicht raus. Wäre grundsätzlich auch interessant zu wissen, was ich da so gesungen habe... +Leider bot es sich nicht unbedingt an, während der Aufnahme Fotos zu machen. Aber in zwei Wochen kann ich hoffentlich etwas nachliefern, denn da geht es zum Probenwochenende nach Älvåsa.

+ +
+ + +
+ + diff --git a/www/uppsala/node/65@q=node_2F39 b/www/uppsala/node/65@q=node_2F39 new file mode 100644 index 0000000..b39c8cb --- /dev/null +++ b/www/uppsala/node/65@q=node_2F39 @@ -0,0 +1,75 @@ + + + + Bettina goes Hollywood | Uppsala + + + + + + + + + + + + + + + +
+

Bettina goes Hollywood

+ +
+
+

Kyrkan i BälingeKyrkan i BälingeHier in Uppsala kümmert man sich sehr um die Austauschstudenten. Für die Naturwissenschafter gibt es ein Programm, welches den neuen Studenten einen schwedischen Buddy zuordnet, der dafür sorgen soll, dass der Neuankömmling sich in der neuen Umgebung und mit der neuen Sprache nicht vollkommen verloren fühlt. Es geht darum einen Ansprechpartner zu haben, der sich in Uppsala bzw. Schweden auskennt, wenn irgendwelche Probleme auftreten. Mein Buddy heißt Anna und bis dahin kannte ich sie nur aus Emails. +Auf ihren Wunsch hin verabredeten wir uns an einem Samstag morgen kurz vor 7 Uhr in der Innenstadt. Was für mich bedeutete, dass ich um 5 Uhr aufstehen musste, da, wie man sich vorstellen kann, die Busse samstagsmorgens noch nicht so regelmäßig fahren. Im Zentrum angekommen musste ich dann mit großem Bedauern feststellen, dass es nicht nur nicht üblich für Bäcker ist samstags früh aufzumachen, sondern dass Bäcker hier allgemein nicht so üblich sind. Ich habe zumindest nach 30-minütiger Suche keinen in der ganzen Stadt gefunden. (Mittlerweile hat man mir glücklicherweise verraten wo sich die beiden Bäckereien in Uppsala befinden. Die beiden.) +Niklas, der KameramannNiklas, der KameramannAnna und ich fuhren mit einigen ihrer Freunde eine dreiviertel Stunde Bus und stiegen schließlich an einer Haltestelle namens "Bälinge Centrum" aus. Als Zentrum können sowas aber auch nur die Schweden deklarieren: Feld, Wald, drei Mehrfamilienhäuser und eine Kirche. +Nachdem wir uns umgezogen hatten und von den Makeup-Artists ein bisschen beschönigt wurden, ging es also los - der Dreh für den Kurzfilm "Bröllop" (dt. Hochzeit). Ende Oktober findet hier in Uppsala nämlich ein Kortfilmfestival statt. +Die Handlung: Auf dem Weg zum Altar sind sich Braut und Bräutigam nicht mehr sicher, ob sie überhaupt heiraten wollen. Unter den Hochzeitsgästen entdecken sie Menschen, die sie mehr und mehr verunsichern. Da sind zum Beispiel die Kumpels des Bräutigams, die früher mit ihm um die Häuser gezogen sind, oder eine Frau, die nach einem One-Night-Stand mit ihm schwanger wurde. Auf anderen Seite stehen die Verflossenen und Affairen der Braut. Am Ende des Films fährt das Paar winkend in einem Auto weg. Offen bleibt aber, ob sie nun geheiratet haben oder nicht. +Anna und ichAnna und ichIch war Statist und spielte somit die wichtige Rolle eines ahnungslosen Hochzeitsgastes. Da wir insgesamt nur etwa zehn Statisten waren, die immer wieder neu um die "wichtigen" Hochzeitsgäste drapiert wurden, und ich mit meiner rosafarbenen Bluse (die anderen waren eher farblos) beim Regisseur sehr beliebt war, wurde ich immer ganz vorne hingestellt und bin somit fast in jeder zweiten Einstellung zu sehen. Ich werde Filmstar!!! +Es war richtig interessant. Der einzige Nachteil war, dass die Hochzeit im Sommer gespielt hat, es in Schweden an dem Tag aber leider nur frische 13° hatte. Aber es hat trotzdem Spaß gemacht und ich habe so viele nette Leute kennengelernt. Außerdem glaube ich, dass ich den coolsten schwedischen Buddy auf der ganzen Welt habe!

+ +
+ + +
+ + diff --git a/www/uppsala/node/66 b/www/uppsala/node/66 new file mode 100644 index 0000000..b0707e6 --- /dev/null +++ b/www/uppsala/node/66 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/67 b/www/uppsala/node/67 new file mode 100644 index 0000000..91e06be --- /dev/null +++ b/www/uppsala/node/67 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/68 b/www/uppsala/node/68 new file mode 100644 index 0000000..9e927ee --- /dev/null +++ b/www/uppsala/node/68 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/69 b/www/uppsala/node/69 new file mode 100644 index 0000000..c6c9410 --- /dev/null +++ b/www/uppsala/node/69 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/70 b/www/uppsala/node/70 new file mode 100644 index 0000000..44cb296 --- /dev/null +++ b/www/uppsala/node/70 @@ -0,0 +1,97 @@ + + + + Lördagsgodis och Kanelbullar | Uppsala + + + + + + + + + + + + + + + +
+

Lördagsgodis och Kanelbullar

+ +
+
+

Typisch schwedische HandgriffeTypisch schwedische HandgriffeSchweden ist ein Land für mich. Meterlange Regale voller Marabou-Schokolade, kistenweise Smågodis, Schokoladenkuchen, bei dem tatsächlich endlich mal der Kuchen die Nebensache ist, und Kanelbullar. Da liegt nahe, dass Schweden Probleme mit übergewichtigen Kindern haben. Deswegen startete das staatliche Institut für Volksgesundheit schon vor vierzig Jahren die Kampange Lördagsgodis (dt.: Samstagssüßigkeiten). Danach sollten Kinder nur einmal in der Woche Süßes bekommen. Auf einigen Süßigkeitenverpackungen steht sogar sowas wie "Endlich wieder Samstag!". Aber ich passe mich hier auch gerne wieder an, denn die Schweden halten sich nicht an solche Ratschläge. +Das Volk der Naschkatzen hat sogar einen Nationalfeiertag. Während wir Deutschen am 3. Oktober die Wiedervereinigung unseres Landes feiern, huldigen die Schweden einen Tag später dem Kanelbullen. Das sind Zimtschnecken, die es hier wirklich zu jeder Fika (Kaffeepause) gibt. Bettina beim Kanelbullar machenBettina beim Kanelbullar machenDa diese nicht nur sehr verbreitet, sondern auch sehr lecker sind, musste ich mich dazu entschließen meine Zimtallergie aufzugeben. Soweit funktioniert das auch ganz gut, nur am 4. Oktober hatte ich ordnungshalber nochmal ordentliche Kopfschmerzen. +Das beste Rezept für Kanelbullar habe ich aber nicht von einer Schwedin, wie es sich gehört, sondern von Katrin aus einem deutschen schwedischen Backbuch. Und da letztes Wochenende zwei Geburtstage und ein Projektgruppen-Meeting war, habe ich es auch gleich mal ausprobiert.

+ +

Bitte zuhause nachbacken. Die Füllung ist aber ein bisschen knapp berechnet. Also mehr Zucker, Butter und Zimt bereithalten!

+ +

Ungebackene KanelbullarUngebackene KanelbullarFür etwa 45 Kanelbullar: +900g Weizenmehl +250g Zucker +1 TL Kardamonpulver +250g Butter +2 Päckchen Hefe +½l Milch +2 EL gemahlener Zimt +1 Ei +Hagelzucker

+ +

Alles meins!Alles meins!Mehl, 150g Zucker, Salz und Kardamonpulver in große Schüssel. 150g Butter zerteilen und seitlich hinzu geben. In der Mitte des Mehls eine Mulde bilden und die Hefe hineinbröckeln. Milch erwärmen und lauwarm in Schüssel geben. Kneten.

+ +

Teig zugedeckt 30 min gehen lassen, Volumenverdopplung. Erneut kneten, in zwei gleiche Teile teilen und zu Rechtecken (25cm x 50cm) ausrollen.

+ +

Füllung: Restzucker, Zimt und Restbutter verkneten.
+Füllung auf beide Hälften verstreichen. Von der langen Seite aus zusammenrollen, nicht zu fest.

+ +

Teigrollen in 2 cm breite Kringel schneiden. Mit Tuch bedeckt, 30 min gehen lassen.

+ +

Backofen auf 250°C. Schnecken mit Ei bestreichen und Hagelzucker drüber. Auf mittlerer Schiene ca. 8 min backen.

+ +

Auf einem Gitter abkühlen lassen.

+ +
+ + +
+ + diff --git a/www/uppsala/node/71 b/www/uppsala/node/71 new file mode 100644 index 0000000..141fba0 --- /dev/null +++ b/www/uppsala/node/71 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/72 b/www/uppsala/node/72 new file mode 100644 index 0000000..ac156ea --- /dev/null +++ b/www/uppsala/node/72 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/72.primary b/www/uppsala/node/72.primary new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/node/73 b/www/uppsala/node/73 new file mode 100644 index 0000000..d0cf733 --- /dev/null +++ b/www/uppsala/node/73 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/74 b/www/uppsala/node/74 new file mode 100644 index 0000000..7961c7d --- /dev/null +++ b/www/uppsala/node/74 @@ -0,0 +1,73 @@ + + + + Schnee!!! | Uppsala + + + + + + + + + + + + + + + +
+

Schnee!!!

+ +
+
+

Alles weiß!Alles weiß!Wir dachten wir sehen nicht richtig, als wir an Halloween in der Schlange zur Party von Snerikes, einer der Nationen, standen. Da rieselte leise der Schnee auf uns herab. "I have never seen snow before!" staunte ein Mädchen hinter uns. Die Begeisterung wurde am nächsten Morgen aber dann im Schnee erstickt - Schneesturm und kein Ende abzusehen! Wie passend, dass hier in Schweden ab dem 1. November Winterreifen Pflicht sind, aber das hatten wohl nicht so viele ernst genommen. +Ein Mädchen aus unserem Wohnkomplex hat uns erzählt, Polacksbacken im SchneePolacksbacken im Schnee dass innerhalb der 10 min als sie auf den Bus gewartet hat sechs Autos an dem Hügel an unsere Straße gescheitert und rückwärts wieder runtergeruscht sind. +Auch meine Eltern, die an dem Tag in Stockholm landeten, hatten Spaß mit dem Verkehrschaos, das der Schnee produziert hatte. Anstatt vom Flughafen zu ihrem Hotel eine Stunde zu brauchen, saßen sie sieben Stunden im Bus, der sich einfach weigerte weiterzufahren. +Für uns hatte sich nun also auch endlich gelohnt die Winterreifen schon Anfang August aufziehen zu lassen. (Danke, schlauer Papi!) Im Restaurant "Hambergs Fisk"Im Restaurant "Hambergs Fisk"Denn Uppsala hat seinen Standpunkt wieder klar verdeutlicht. Nach drei Tagen Schneechaos wurden die Fahrradwege, aber nur leidlich die Straßen, von den Schneemassen befreit. Warum auch? Fährt sich ja von selbst durch... +Meine Eltern hatten übrigens dann doch noch einen schönen Aufenthalt hier und einmal das kleine Töchterchen zu sehen entschädigt auch dafür die halbe Nacht im Bus zu verbingen und danach nur in der Rumpelkammer des Hotels unterzukommen.

+ +
+ + +
+ + diff --git a/www/uppsala/node/75 b/www/uppsala/node/75 new file mode 100644 index 0000000..f331ebf --- /dev/null +++ b/www/uppsala/node/75 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/76 b/www/uppsala/node/76 new file mode 100644 index 0000000..f0064f4 --- /dev/null +++ b/www/uppsala/node/76 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/77 b/www/uppsala/node/77 new file mode 100644 index 0000000..d25f4fd --- /dev/null +++ b/www/uppsala/node/77 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/78 b/www/uppsala/node/78 new file mode 100644 index 0000000..750a9a3 --- /dev/null +++ b/www/uppsala/node/78 @@ -0,0 +1,77 @@ + + + + Chorwochenende | Uppsala + + + + + + + + + + + + + + + +
+

Chorwochenende

+ +
+
+

ÄlvåsaÄlvåsaLetztes Wochenende bin ich, wie angekündigt, mit meinem Chor auf Probenfahrt nach Älvåsa gefahren, einer Art Ferienheim 70km nordwestlich von Uppsala. +Bei der Ankunft stellte ich erstmal fest, dass ich natürlich das Wichtigste vergessen hatte: Hausschuhe. Die Schweden ziehen doch immer direkt hinter der Haustür die Schuhe aus und zweieinhalb Tage auf Socken inkl. Küchendienst gestalteten sich dann ein wenig nasskalt. Ging aber. Die Duschen und Toiletten waren in einem eigenen Gebäude, so dass man zumindest dorthin mit Schuhen gehen konnte. +Am Freitagabend wurde gleich noch geprobt, danach ging es dann ziemlich direkt ins Bett. (Zumindest für mich. Es waren nämlich nicht genug Betten da, aber als Austauschstudent hat man natürlich leider keinen Schlafsack zur Verfügung...) +Frühstück war für acht Uhr angesetzt so dass ich, überfüllte Duschen einplanend, meinen Wecker auf sieben gestellt hatte. Als der klingelte regte sich in dem Raum mit 24 Betten allerdings gar nichts, also blieb ich erst mal liegen. Zwanzig Minuten später bin ich dann doch aufgestanden und zum Duschen geschlichen. Das mit dem Frühstück war wohl "ab acht" und auch dann eher eine Richtlinie, jedenfalls war ich irgendwie immer der erste. +BässeBässe +Sprachlich gestaltete sich das Ganze nach wie vor schwierig, weil Piotr aus Polen und ich die einzigen der fünfzigköpfigen Gruppe waren, die kein Schwedisch können. Im Nachhinein habe ich mich geärgert, nicht wenigstens den Kauderwelsch-Sprachführer mitgenommen zu haben, die Gelegenheit kommt so schnell nicht wieder. Aber zumindest die Zahlen und Chorvokabeln kann ich jetzt: "Sista sidan, andra system, takt sjuttioåtta." Und mit Sprachen im allgemeinen ging es auch schwer bergauf: Ich singe jetzt auf Deutsch, Russisch, Isländisch, Lateinisch und natürlich Schwedisch. Und vor allen Dingen sehr viel: Geprobt wurde am Samstag sechseinhalb Stunden, danach wurde die Party vorbereitet, auf der dann bis so um zwölf weitergesungen wurde. Danach durfte dann die Stereoanlage übernehmen. +Russland-PartyRussland-PartyDie Party war natürlich das zentrale Ereignis. Noch bevor irgendetwas anderes für die Fahrt organisiert war wurde schon bekanntgegeben, dass man sich um passende Kleidung für das Thema "Russland" kümmern sollte. Aus organisatorischen Gründen hatte ich mich gegen die folkloristisch-pelzige und für die synthetisch-aktuelle Richtung entschieden und mir bei Myrorna Second Hand eine fiese Joggingjacke besorgt. Die anderen Kostüme waren zum Teil deutlich aufwändiger geraten: Sowjet-Offiziere, jede Menge Babuschkas, Elite-Athleten und zwei Gorbatschows. Ich war beim Fotografieren leider nicht so erfolgreich, bemühe mich aber um die Bilder der Anderen. Wird nachgereicht. +Am Sonntag wurde dann noch einmal zwei Stunden lang geprobt und trotz etwas benommener Stimmung war die Dirigentin zufrieden: "Inte dåligt på morgon efter party." Danach wurde das Haus gesäubert und es ging zurück nach Hause. +Nächste Woche kann ich das gelernte dann anwenden - unser erster Auftritt steht bevor.

+ +
+ + +
+ + diff --git a/www/uppsala/node/79 b/www/uppsala/node/79 new file mode 100644 index 0000000..945c1ce --- /dev/null +++ b/www/uppsala/node/79 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/80 b/www/uppsala/node/80 new file mode 100644 index 0000000..d6b1715 --- /dev/null +++ b/www/uppsala/node/80 @@ -0,0 +1,75 @@ + + + + Innebandy | Uppsala + + + + + + + + + + + + + + + +
+

Innebandy

+ +
+
+

InnebandyInnebandyLetzte Woche bin ich endlich zum Floorball Spielen gekommen. Zuerst im Stallet, einem der beiden Fitness-Studios für die Studenten hier. Es gibt Spielzeiten zu denen man ohne Anmeldung erscheinen kann. Der Nachteil ist, dass man vorher nicht unbedingt sagen kann, wieviele Spieler kommen werden. So waren Achim und ich beim ersten Anlauf dann auch alleine in der Halle, was aber wohl mit dem Schneechaos zu tun hatte. Beim zweiten Versuch konnten wir dann immerhin drei gegen drei spielen. Die Spieler waren durch die Bank besser, allerdings hielt sich der Abstand in Grenzen; man konnte noch ordentlich mitspielen. +Am vergangenen Donnerstag konnte ich dann noch eine zweite Gelegenheit wahrnehmen: Ein paar Studenten aus unserem Projekt hatten erwähnt, dass sie einmal in der Woche in einer Schulturnhalle spielen und ich wollte mir die Gelegenheit natürlich nicht entgehen lassen. Das Ganze ging erst abends um zehn los und die Turnhalle war relativ abgelegen. Damit es sich auch wirklich lohnt, war ich davor noch mit Bettina beim Fitness-Boxing gewesen. +Als erstes fiel mir auf, dass sämtliche Spieler mindestens einen Kopf größer waren als ich (abgesehen vom kleinsten vielleicht, aber der sah dafür aus wie Fabien Barthez und spielte auch so). Na ja, muss bei dem Sport ja kein Nachteil sein, der Ball ist ja zum Glück am Boden. +Leider waren sämtliche Spieler so etwa zwei bis drei Klassen besser als ich (nicht nur eine, so wie im Stallet) und ich habe absolut kein Land gesehen. Die beste Aktion, die mir in den gut eineinhalb Stunden gelungen ist, war ein (in Worten: ein) sauberer Pass vors Tor, damit hatte es sich auch. So ab dem dritten Spiel merkte ich dann auch langsam, dass die gegnerische Mannschaft auf meiner Seite nicht mehr ganz so durchgängig die Deckung aufrecht hielt... +Auf der Bank bemerkte ich dann gegenüber dem Auswechselspieler, dass das Spielniveau ja schon ganz ordentlich sei, worauf der erwiderte: "Ja? Komisch, kaum einer von denen hier spielt im Verein." Autsch. +Na ja, ich schaue auf jeden Fall mal, ob sie mich diese Woche noch mitspielen lassen, ansonsten bleibt mir ja immer noch das Fitness-Studio. +

+ +
+ + +
+ + diff --git a/www/uppsala/node/81 b/www/uppsala/node/81 new file mode 100644 index 0000000..a9931c8 --- /dev/null +++ b/www/uppsala/node/81 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/82 b/www/uppsala/node/82 new file mode 100644 index 0000000..51cd11e --- /dev/null +++ b/www/uppsala/node/82 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/83 b/www/uppsala/node/83 new file mode 100644 index 0000000..f9e3297 --- /dev/null +++ b/www/uppsala/node/83 @@ -0,0 +1,73 @@ + + + + Besuch! | Uppsala + + + + + + + + + + + + + + + +
+

Besuch!

+ +
+
+

BesucherhausschuheBesucherhausschuheLetzte Woche am Mittwoch, pünktlich um 11.55 Uhr, ist Martin in Arlanda gelandet. Leider fehlte uns noch Erfahrung mit Germanwings-Passagieren, so dass wir genau am anderen Ende des Flughafens geparkt hatten. Über das ganze Hin- und Her-Gelatsche hab ich dann auch das offizielle Ankunfts-Foto vergessen. Als wir Martin plus Tasche dann im Auto hatten sind wir erst mal nach Uppsala gefahren, um einen Studenten-Ausweis zu besorgen. Das Büro hatte leider zu, dafür haben wir noch schnell die wichtigsten Uppsala-Sehenswürdigkeiten zumindest von außen abgehandelt (...schau mal, Universitetshuset, da Dom...). Danach ging es erst mal in die Uni - bloß kein Meeting verpassen. Zu Hause in Lilla Sunnersta bekam Martin dann erstmal die offiziellen Besucherhausschuhe zugeteilt (danke nochmal) und durfte sich kurz mit ein paar Kanelbullar erholen, bevor es zurück in die Stadt ging - Schwedisch lernen. Danach bekamen wir im zweiten Anlauf dann auch den Studentenausweis und gingen direkt damit in Kalmars Pub. +Kalmars PubKalmars PubDer nächste Tag war denn erstmal etwas unspektakulär: Einkaufen, noch ein Meeting und Max Burger ausprobieren. (Hoffentlich gewinnen wir die Wii.) Weiter ging es dann mit dem Gustavianum und der Carolina. Auch der Abend gestaltete sich dann noch recht unterhaltsam, weil Bettina, nun, ein wenig unwohl war. So unwohl, dass ab dem dritten Erbrechen Überlegungen aufkamen, der Notaufnahme einen Besuch abzustatten. Na ja, irgendwann nach dem fünften Mal war's dann unter Kontrolle, aber lustig ist was anderes. +Am Freitag hielten wir uns mit Aktivitäten dann erst mal ein wenig zurück, außerdem hatten Martin und ich noch ein wenig Projektkram offen, so dass auch zu Hause nie Langeweile aufkam. Am Nachmittag ging es dann noch mal raus nach Gamla Uppsala - etwas grauer und kälter als beim letzten Besuch aber dafür hatten wir die Grabhügel fast für uns allein. Der Abend war dann für die Värmlands-Party reserviert. (Bettina hat diesmal verzichtet.) +Samstags wurde erstmal ausgegeschlafen und das Frühstück durch Smörgastårta und Kladdkaka bei Gästrike-Hälsinge ersetzt. Den Rest des Tages wurde gearbeitet und Pizza gegessen. Dafür gab es am Sonntag dann nochmal ordentlich Programm: Wir haben zu zweit Stockholm vom Bahnhof aus in jede Himmelsrichtung zu Fuß erschlossen, so weit, bis man das Gefühl hatte, dass nur noch "Vorort" kommt. Dann wieder zurück ins Zentrum und in die nächste Richtung. (Die vielen Brücken verhindern einen richtigen Rundgang.) Irgendwann zwischendurch haben wir dann auch noch das Vasa-Musem untergebracht, sogar ohne eine Ebene auszulassen. Ausgeruht haben wir uns abends bei Katrin, Achim, ihren Gästen und "Ohne Furcht und Adel". +Alles in allem viel Spaß gehabt und nebenbei ein ordentliches Programm geschafft. Vielen Dank für den Besuch und von Bettina fürs auf-den-Rücken-Klopfen.

+ +
+ + +
+ + diff --git a/www/uppsala/node/84 b/www/uppsala/node/84 new file mode 100644 index 0000000..099fcea --- /dev/null +++ b/www/uppsala/node/84 @@ -0,0 +1,106 @@ + + + + Drupal und Image: Zugriff auf Bilder (und Artikel) beschränken | Uppsala + + + + + + + + + + + + + + + +
+

Drupal und Image: Zugriff auf Bilder (und Artikel) beschränken

+ +
+
+

Hinweis: Wer nur am Uppsala-Blog und weniger an Content-Management-Software interessiert ist, kann hier aufhören zu lesen.

+ +

Ich hatte schon länger vor, den Zugriff auf die (mit Image hochgeladenen) Bilder in diesem Blog derart zu beschränken, dass nur angemeldete Benutzer die Bilder in voller Auflösung betrachten können. Zunächst hatte ich nach einem Modul gesucht, das den Zugriff nach dem Typ des Nodes beschränkt um die Bilder nicht einzeln schützen zu müssen, war aber nicht fündig geworden. Also habe ich zunächst einmal Simple Access installiert, mit dem man den Zugriff auf einzelne Nodes für bestimmte Nutzergruppen freigeben kann, zumal ich inzwischen eventuell auch einzelne Artikel schützen wollte.

+ +

1. Bilder mit Simple Access schützen
+Hinweis: Wer nur den Zugriff auf Bilder beschränken will, braucht Simple Access nicht und kann mit 2. fortfahren.
+Nach der Installation hatte ich wenig Lust, sämtliche Bilder von Hand zu schützen und habe deswegen meine SQL-Kenntnisse etwas aufgefrischt:
+Mit SELECT DISTINCT * FROM `node_access` a INNER JOIN `files` f ON a.nid = f.nid ORDER BY a.nid ASC habe ich zunächst alle Bilder anzeigen lassen um sicher zu sein, dass ich keine Artikel bearbeite. Den Simple-Access-Schutz aktiviert man für alle Bilder dann mit UPDATE `node_access` As a INNER JOIN `files` AS f ON a.nid = f.nid SET `gid` = 1 (SQL in phpMyAdmin-Notation.)

+ +

2. Direktzugriff auf Dateien unterbinden
+Nun werden zwar alle Image-Nodes durch Simple Access geschützt, nur merkte ich, dass der direkte Zugriff auf die Bilddateien problemlos möglich war, obwohl in den Drupal-Dateisystem-Einstellungen als Download-Methode "privat" eingestellt war. Zunächst dachte ich an ein Problem mit den Verzeichnisrechten und spielte mit htaccess-Befehlen rum, bis ich merkte, dass der Pfad, über den man die Bilder erreicht, ein virtueller ist:
+Während der eigentliche Pfad http://www.tilman.de/uppsala/files/images/chor01.preview.jpg sehr wohl geschützt war, war das Bild in der Artikeln als http://www.tilman.de/uppsala/system/files/images/chor01.preview.jpg verlinkt. (Ich kenne die Architektur von Drupal nicht und habe keine Ahnung, welchem Zweck dieses "system"-Verzeichnis dient.) Auch der Zugriff über GET-Parameter http://www.tilman.de/uppsala/?q=system/files/images/chor01.preview.jpg war möglich.
+Des Rätsels Lösung: Das Image-Modul, welches ich für das Einbinden der Bilder verwende, schert sich nicht um Benutzerrechte und gibt die Bilder an jeden, der danach fragt. (Autsch.)
+Der entscheidende Hinweis war dann im Drupal-Forum: http://drupal.org/node/26601#comment-54855
+Den geposteten Code habe ich dann etwas angepasst und damit die Funktion image_file_download in image.module ersetzt:
+

+// edit
+// see http://drupal.org/node/26601#comment-54855 and http://www.tilman.de/uppsala/?q=node/84
+function image_file_download($file) {
+  // get image from database
+  $result = db_fetch_object(db_query("SELECT f.*, n.type FROM {files} f LEFT JOIN {node} n ON f.nid=n.nid WHERE f.filepath='%s'", $file));
+
+  if ($result->type == 'image') {
+    // only allow download if its our node, and the user has privilege or it is only a thumbnail
+    if (user_access('view original images') || strpos($file, '.thumbnail.')) {
+      $headers = array('Content-Type: ' . $result->filemime);
+      return $headers;
+    }
+  }
+
+  // otherwise, its some other modules responsibility
+  return -1;
+}
+

+Ergebnis: Bilder werden nur noch an registrierte Benutzer herausgegeben, oder wenn ".thumbnail." im Dateinamen vorkommt. (Drupal fügt zum eigentlichen Datei noch die Bildgröße als Suffix hinzu.)

+ +

Anmerkung: Der Zugriff über den physischen Pfad auf die Bilder war bei mir immer noch möglich, was aber wohl eher mit einer Fehlkonfiguration oder meinen Spielereien zu tun hat. Dieses Problem ließ sich dann wirklich mit einer htaccess-Datei im Verzeichnis files/images mit dem Inhalt

Deny from all
+
lösen.

+ +
+ + +
+ + diff --git a/www/uppsala/node/85 b/www/uppsala/node/85 new file mode 100644 index 0000000..bb87743 --- /dev/null +++ b/www/uppsala/node/85 @@ -0,0 +1,87 @@ + + + + Kontakt | Uppsala + + + + + + + + + + + + + + + +
+

Kontakt

+ +
+
+

+ Unsere Postadresse in Schweden ist: +

+

+ Salixvägen 7B
+ 75642 Uppsala
+ - Sweden - +

+

+ Telefonisch erreichbar sind wir auf unseren Mobiltelefonen: +

+

+ +46 76 2338878 (Bettina)
+ +46 76 2338132 (Tilman) +

+

+ +

+
+ +
+ + +
+ + diff --git a/www/uppsala/node/86 b/www/uppsala/node/86 new file mode 100644 index 0000000..a9e3642 --- /dev/null +++ b/www/uppsala/node/86 @@ -0,0 +1,71 @@ + + + + Über dieses Blog | Uppsala + + + + + + + + + + + + + + + +
+

Über dieses Blog

+ +
+
+

In diesem Blog dokumentieren wir in loser Folge unser Auslandssemester in Uppsala/Schweden, wo wir am Department of Information Technology der Uppsala Universitet studieren.

+ +

Die Artikel sind öffentlich, Fotos, Fotoalbum und Kommentarfunktion nur für angemeldete Besucher zugänglich. Außerdem kann man sich als registrierter Leser per E-Mail benachrichtigen lassen, wenn ein neuer Artikel erscheint.

+ +
+ + +
+ + diff --git a/www/uppsala/node/87 b/www/uppsala/node/87 new file mode 100644 index 0000000..a7e8165 --- /dev/null +++ b/www/uppsala/node/87 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/88 b/www/uppsala/node/88 new file mode 100644 index 0000000..01cb174 --- /dev/null +++ b/www/uppsala/node/88 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/89 b/www/uppsala/node/89 new file mode 100644 index 0000000..6613156 --- /dev/null +++ b/www/uppsala/node/89 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/91 b/www/uppsala/node/91 new file mode 100644 index 0000000..8d622ca --- /dev/null +++ b/www/uppsala/node/91 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/92 b/www/uppsala/node/92 new file mode 100644 index 0000000..49c9732 --- /dev/null +++ b/www/uppsala/node/92 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/94 b/www/uppsala/node/94 new file mode 100644 index 0000000..592c884 --- /dev/null +++ b/www/uppsala/node/94 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/95 b/www/uppsala/node/95 new file mode 100644 index 0000000..cc35252 --- /dev/null +++ b/www/uppsala/node/95 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/96 b/www/uppsala/node/96 new file mode 100644 index 0000000..6ccbd12 --- /dev/null +++ b/www/uppsala/node/96 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/97 b/www/uppsala/node/97 new file mode 100644 index 0000000..b0bc63b --- /dev/null +++ b/www/uppsala/node/97 @@ -0,0 +1,74 @@ + + + + Mehr Besuch! | Uppsala + + + + + + + + + + + + + + + +
+

Mehr Besuch!

+ +
+
+

Nicole kommtNicole kommtDamit ich dieses Jahr nicht nur ein Stück Kohle in meinem Weihnachtsstrumpf finde, habe ich beschlossen schnell noch Ordnung zu machen und endlich über die letzten beiden Wochen zu schreiben, schließlich war ja auch einiges los. +Zuerst einmal kam am Nikolaustag Nicole zu Besuch und beglückte uns mit selbstgebackenen Keksen, einigen wichtigen Mitbringseln aus Berlin (Schuhe! Fahrradschlüssel!) und natürlich nicht zuletzt ihrer Anwesenheit. Leider war zwei Tage später die Abschlusspräsentation für unser Projekt fällig, so dass Nicole selbst erst einmal einiges an Zeit mit unseren schwedischen und amerikanischen Kommilitonen verbringen durfte. Erst die Arbeit...Erst die Arbeit...Außerdem hatten wir durch die zusätzliche Uni-Arbeit viel liegen lassen das aufgearbeitet werden musste, so dass auch unser Waschtag und mein Friseurbesuch noch zum Programm gehörten. Sie trug es jedenfalls mit Fassung. Und Pyjamaabende zwischen unserer (inzwischen gewaschenen) Wäsche waren für den Anfang auch ganz nett. Die Mädels sind am Donnerstagabend mit den neuen Bekannten aus der Uni dann gleich noch zur Nation-Party gegangen....dann etwas ausruhen......dann etwas ausruhen... Ich habe lieber verzichtet. Dafür bin ich am Freitagmorgen bei der Präsentation auch nicht eingeschlafen, sondern war voll bei der Sache. Danach sind wir noch mit ein paar Amis durch die Gegend gezogen, bevor wir nach Hause sind um uns auf die Värmlands-Party vorzubereiten. Im Treppenhaus fand ich dann auch noch pünktlich das Geburtstagspaket. (Nach welchem Prinzip die Pakte abgegeben oder zurück zur Post gebracht werden, ist nicht so ganz nachzuvollziehen.)...und danach zur Party...und danach zur Party Bei Värmlands wurde dann mit lauter netten Exildeutschen, Amerikanern und Schweden in den Geburtstag gefeiert. +Am Samstag sind wir erst einmal nach Stockholm gefahren, wo ich mir schnell noch mein Luciakleid für den Abend gekauft habe. Außerdem ließ sich Bettina von der Apothekerin erklären, warum sie das Sprechen lieber lassen sollte - zweimal Nation-Party hintereinander war wohl etwas viel für ihre Stimme.GeburtstagGeburtstag Etwas Stockholm-Sightseeing war sogar auch noch mit drin. +Zurück in Uppsala musste dann alles sehr schnell gehen, weil wir den Zug verpasst hatten: Bus hinterher rennen, nach Hause fahren, Umziehen (richtige Schuhe, endlich!) und ordentlich schick zur Lucia-Gasque in Östgöta Nation.Fertig für die GasqueFertig für die Gasque Das Bankett musste zumindest ich mir allerdings erst einmal verdienen und ein paar Lucia-Lieder mit Kerze, Hut und Kleid vortragen. Aber ich war ja in guter Gesellschaft. (Ich vermute, dass wir die einzige Lucia mit Vollbart hatten.)Lucia-ChorLucia-Chor Ansonsten gab es, wie bei Gasques üblich, viele gut angezogene Menschen, Essen, das nach mehr aussieht als es ist und zwischendurch viel zu singen. Und zu trinken. Für mich Alkoholfreies Bier, weil ich beim Kauf der Eintrittskarte auf Alkohol verzichtet hatte. Dass jemand kein Bier möchte scheint schwer vorstellbar. +Auf jeden Fall ein würdiger Abschluss für Nicoles Besuch, die am Sonntag früh dann wieder zurück nach Berlin flog - natürlich nicht, ohne uns Rezepte für die ganzen gesunden Dinge zu da zu lassen,Feiernde SchwedenFeiernde Schweden die wir zusammen gekauft (und dann doch nicht gegessen) hatten. +

+ +
+ + +
+ + diff --git a/www/uppsala/node/98 b/www/uppsala/node/98 new file mode 100644 index 0000000..71230f1 --- /dev/null +++ b/www/uppsala/node/98 @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/node/Descr.WD3 b/www/uppsala/node/Descr.WD3 new file mode 100644 index 0000000..db683b6 Binary files /dev/null and b/www/uppsala/node/Descr.WD3 differ diff --git a/www/uppsala/node/default.htm b/www/uppsala/node/default.htm new file mode 100644 index 0000000..3f81c38 --- /dev/null +++ b/www/uppsala/node/default.htm @@ -0,0 +1,135 @@ + + + + Uppsala | approx. 59°48'17'' N 17°38'40'' E + + + + + + + + + + + + + + + + + +
+ + +
+

Weihnachten

+
+

Schwedischer WeihnachtsbaumSchwedischer WeihnachtsbaumWir hatten uns, anders als ein Großteil der Austauschstudenten, entschlossen, über Weihnachten in Uppsala zu bleiben. Bis zuletzt hofften wir auf Schnee, der sich aber nicht so wirklich einstellen wollte. Weihnachten wird hier, wie in Deutschland, am 24. gefeiert und wir wollten an diesem Tag in Upplands Nation gehen, deren öffentliche Weihnachtsfeier irgendwo in den Studieninformationen empfohlen worden war. Also sind wir gegen Mittag in die Stadt gefahren, um uns mal umzuschauen. Die Feier war auch tatsächlich schon am Laufen, wirkte allerdings mehr wie eine Seniorenverköstigung. Es war schwer jemanden zu finden, der mit etwas anderem als sich und seinem Essen beschäftigt war und da wir niemandem den Weihnachtsbraten streitig machen wollten, gingen wir weiter. Etwas zu Essen wäre uns so langsam aber doch recht gewesen, so dass wir uns Richtung Innenstadt bewegten und dabei nach einem geöffneten Café Ausschau hielten - nichts.

+ +
+
+

Letzer Besuch

+
+

Thomas kommtThomas kommtZwei Tage mussten wir dann alleine zur Uni, bevor uns am Mittwoch, dem 13. Dezember Thomas erreichte. Die Abschlusspräsentation lag zwar hinter uns, aber dafür musste am Freitag der Abschlussbericht abgegeben werden, so dass auch Thomas erst mal Uni mitmachen durfte. (Diese Fehlplanung lag darin begründet, dass wir dachten das Projekt würde - wie im Vorlesungsverzeichnis angegeben - bis Mitte Januar laufen, als die Besuchsflüge gebucht wurden. Tatsächlich wird aber alles vor Weihnachten beendet, weil im Januar für die Abschlussklausuren gelernt wird.)

+ +
+
+

Mehr Besuch!

+
+

Nicole kommtNicole kommtDamit ich dieses Jahr nicht nur ein Stück Kohle in meinem Weihnachtsstrumpf finde, habe ich beschlossen schnell noch Ordnung zu machen und endlich über die letzten beiden Wochen zu schreiben, schließlich war ja auch einiges los. +Zuerst einmal kam am Nikolaustag Nicole zu Besuch und beglückte uns mit selbstgebackenen Keksen, einigen wichtigen Mitbringseln aus Berlin (Schuhe! Fahrradschlüssel!) und natürlich nicht zuletzt ihrer Anwesenheit. Leider war zwei Tage später die Abschlusspräsentation für unser Projekt fällig, so dass Nicole selbst erst einmal einiges an Zeit mit unseren schwedischen und amerikanischen Kommilitonen verbringen durfte.

+ +
+
+

Drupal und Image: Zugriff auf Bilder (und Artikel) beschränken

+
+

Hinweis: Wer nur am Uppsala-Blog und weniger an Content-Management-Software interessiert ist, kann hier aufhören zu lesen.

+ +

Ich hatte schon länger vor, den Zugriff auf die (mit Image hochgeladenen) Bilder in diesem Blog derart zu beschränken, dass nur angemeldete Benutzer die Bilder in voller Auflösung betrachten können. Zunächst hatte ich nach einem Modul gesucht, das den Zugriff nach dem Typ des Nodes beschränkt um die Bilder nicht einzeln schützen zu müssen, war aber nicht fündig geworden. Also habe ich zunächst einmal Simple Access installiert, mit dem man den Zugriff auf einzelne Nodes für bestimmte Nutzergruppen freigeben kann, zumal ich inzwischen eventuell auch einzelne Artikel schützen wollte.
+

+ +
+
+

Besuch!

+
+

BesucherhausschuheBesucherhausschuheLetzte Woche am Mittwoch, pünktlich um 11.55 Uhr, ist Martin in Arlanda gelandet. Leider fehlte uns noch Erfahrung mit Germanwings-Passagieren, so dass wir genau am anderen Ende des Flughafens geparkt hatten. Über das ganze Hin- und Her-Gelatsche hab ich dann auch das offizielle Ankunfts-Foto vergessen. Als wir Martin plus Tasche dann im Auto hatten sind wir erst mal nach Uppsala gefahren, um einen Studenten-Ausweis zu besorgen.

+ +
+
+

Innebandy

+
+

InnebandyInnebandyLetzte Woche bin ich endlich zum Floorball Spielen gekommen. Zuerst im Stallet, einem der beiden Fitness-Studios für die Studenten hier. Es gibt Spielzeiten zu denen man ohne Anmeldung erscheinen kann. Der Nachteil ist, dass man vorher nicht unbedingt sagen kann, wieviele Spieler kommen werden. So waren Achim und ich beim ersten Anlauf dann auch alleine in der Halle, was aber wohl mit dem Schneechaos zu tun hatte. Beim zweiten Versuch konnten wir dann immerhin drei gegen drei spielen. Die Spieler waren durch die Bank besser, allerdings hielt sich der Abstand in Grenzen; man konnte noch ordentlich mitspielen. +

+ +
+
+

Chorwochenende

+
+

ÄlvåsaÄlvåsaLetztes Wochenende bin ich, wie angekündigt, mit meinem Chor auf Probenfahrt nach Älvåsa gefahren, einer Art Ferienheim 70km nordwestlich von Uppsala. +Bei der Ankunft stellte ich erstmal fest, dass ich natürlich das Wichtigste vergessen hatte: Hausschuhe.

+ +
+
+

Schnee!!!

+
+

Alles weiß!Alles weiß!Wir dachten wir sehen nicht richtig, als wir an Halloween in der Schlange zur Party von Snerikes, einer der Nationen, standen. Da rieselte leise der Schnee auf uns herab. "I have never seen snow before!" staunte ein Mädchen hinter uns. Die Begeisterung wurde am nächsten Morgen aber dann im Schnee erstickt - Schneesturm und kein Ende abzusehen! Wie passend, dass hier in Schweden ab dem 1. November Winterreifen Pflicht sind, aber das hatten wohl nicht so viele ernst genommen. +

+ +
+
+

Lördagsgodis och Kanelbullar

+
+

Typisch schwedische HandgriffeTypisch schwedische HandgriffeSchweden ist ein Land für mich. Meterlange Regale voller Marabou-Schokolade, kistenweise Smågodis, Schokoladenkuchen, bei dem tatsächlich endlich mal der Kuchen die Nebensache ist, und Kanelbullar. Da liegt nahe, dass Schweden Probleme mit übergewichtigen Kindern haben. Deswegen startete das staatliche Institut für Volksgesundheit schon vor vierzig Jahren die Kampange Lördagsgodis (dt.: Samstagssüßigkeiten). Danach sollten Kinder nur einmal in der Woche Süßes bekommen. Auf einigen Süßigkeitenverpackungen steht sogar sowas wie "Endlich wieder Samstag!". Aber ich passe mich hier auch gerne wieder an, denn die Schweden halten sich nicht an solche Ratschläge. +

+ +
+
+

Tilman scores

+
+

Ruhe bitte!Ruhe bitte!Seit vier Wochen sind wir Chormitglieder. Allerdings in verschiedenen Chören. Bettina singt im Chor von Kalmars Nation, während es mich zu Östgöta verschlagen hat. In Schweden gehört das gemeinsame Singen immer noch zur Volkskultur - und wenn es nur die Trinklieder sind, die auf keiner Gasque fehlen dürfen. Deshalb hat auch fast jede Nation einen eigenen Chor. +Der Chor von Östgöta bewegt sich auf einem hohem Niveau, die Stücke werden in einem ziemlich hohen Tempo geprobt. Erschwerend hinzu kommt, dass es im ganzen Chor außer mir nur ein einziges Mitglied gibt, das nicht Schwedisch spricht. Und natürlich werden auch schwedische Lieder gesungen. Inzwischen komme ich aber einigermaßen zurecht und freue mich immer, wenn die Dirigentin Dinge tut, die ich verstehe.

+ +
+ + +
+ + diff --git a/www/uppsala/node@page=1 b/www/uppsala/node@page=1 new file mode 100644 index 0000000..439e252 --- /dev/null +++ b/www/uppsala/node@page=1 @@ -0,0 +1,122 @@ + + + + Uppsala | approx. 59°48'17'' N 17°38'40'' E + + + + + + + + + + + + + + + + + +
+ + +
+

Healthy Fast Food

+
+

Letzte Woche waren wir bei Max Burger. Das ist eine schwedische Fast-Food-Kette, die bessere Burger als McDonald's und Burger King macht. Das alleine wäre vielleicht noch nicht so etwas Besonderes, aber sie treiben es noch etwas weiter.

+ +
+
+

Studieren in Schweden

+
+

Nach längerer Pause werde ich mal etwas über den wichtigsten Grund für die lange Artikelpause schreiben: Die Uni.
+Matematiskt- Informationsteknologiskt CentrumMatematiskt- Informationsteknologiskt CentrumDas Studieren ist hier etwas anders organisiert als in Deutschland. Der wichtigste Unterschied ist das Fehlen eines fixen Stundenplans - die Vorlesungen finden jede Woche zu unterschiedlichen Zeiten und oft auch in unterschiedlichen Räumen statt. Am Anfang hat man uns erklärt, dass die Idee dabei ist, dass die Studenten jede Vorlesung wählen können sollen. Der Vorteil der ständig wechselnden Termine ist, dass zwei Vorlesungen nicht komplett an parallelen Terminen laufen. Der Nachteil ist, dass es früher oder später immer die eine oder andere Kollision gibt.

+ +
+
+

Bettina goes Hollywood

+
+

Kyrkan i BälingeKyrkan i BälingeHier in Uppsala kümmert man sich sehr um die Austauschstudenten. Für die Naturwissenschafter gibt es ein Programm, welches den neuen Studenten einen schwedischen Buddy zuordnet, der dafür sorgen soll, dass der Neuankömmling sich in der neuen Umgebung und mit der neuen Sprache nicht vollkommen verloren fühlt. Es geht darum einen Ansprechpartner zu haben, der sich in Uppsala bzw. Schweden auskennt, wenn irgendwelche Probleme auftreten. Mein Buddy heißt Anna und bis dahin kannte ich sie nur aus Emails. +

+ +
+
+

Klotz am Bein und keine Münzen

+
+

Where's Waldo?Where's Waldo? Wir sind mit dem Auto gekommen. Prinzipiell eine gute Sache, ansonsten wäre ja auch unser Gepäckrekord nicht möglich gewesen. Hier in Uppsala ist ein Auto allerdings, wie sich schnell gezeigt hat, nicht unbedingt von Vorteil. Zunächst ist da die Verkehrsführung: Die Innenstadt hat im wesentlichen drei Arten von Straßen: Solche, durch die nur Taxis und Fahrräder in beiden Richtungen fahren dürfen, solche, durch die überhaupt nur Taxis und Fahrräder fahren dürfen und Sackgassen, an deren Ende ein Durchgang für Fahrräder ist. +

+ +
+
+

Gamla Uppsala

+
+

Grabhügel von Gamla UppsalaGrabhügel von Gamla Uppsala Gestern haben wir mal einen Fahrradausflug mit Kulturbeilage gemacht. Wir haben also Touris gespielt und sind mit einer Gruppe anderer deutscher Austauschstudenten nach Gamla Uppsala gefahren. Das sind Grabhügel, in denen die vorviktorianischen Könige (zwischen dem 6. und 12. Jahrhundert) samt einiger Kostbarkeiten für ihre letzte Reise begraben wurden. Außerdem befindet sich in unmittelbarer Nähe die älteste Domkirche von Uppsala, die Mitte des 11. Jahrhunderts gebaut wurde.

+ +
+
+

Der Dreck muss weg

+
+

Aufgrund der Anregung zweier einzelner Herren gibt es nun einen extra Müll-Artikel:
+Mülleimer 5-7Mülleimer 5-7Mülleimer 1-4Mülleimer 1-4 Hier in Schweden werden tatsächlich mehr Abfälle voneinander getrennt, als wir es aus Deutschland gewöhnt sind. Es gibt hier nicht so etwas wie den Gelben Sack, in den alle wiederverwertbaren Abfälle reinkommen. Hier machen die Arbeit also keine Maschinen, sondern die Schweden selber.
+

+ +
+
+

Välkommen till Lilla Sunnersta

+
+

Lageplan Lilla SunnerstaLageplan Lilla Sunnersta +Wir wohnen in Lilla Sunnersta, einem Wohnheim ganz im Süden der Stadt. Eigentlich ist es schon eher ein Studentendorf. Es ist erst seit einem Jahr fertiggestellt, supermodern und hat alles, was man sich wünschen kann. Wir haben zwei Zimmer, eine große Wohnküche und ein eigenes Bad. Alles ist komplett ausgestattet: Esstisch, zwei Schreibtische, Stühle, Couch, Bilder an den Wänden und Schränke ohne Ende. Fernseher, ein großer Kühlschrank mit drei Gefrierschubladen, Geschirr und Töpfe - alles da. Die meisten Studentenwohnungen sind sicherlich schlechter ausgestattet. +

+ +
+
+

Angekommen

+
+

Auf der FähreAuf der Fähre Die Hinfahrt hat Spaß gemacht. Das erste Zwischenziel war Rostock, wo wir übrigens zwei Stunden zu früh ankamen, weil diverse Mütter Angst hatten, dass wir unsere Fähre verpassen. Als wir dann endlich auf dem Schiff waren, haben wir uns schon halb wie in Schweden gefühlt, außer den deutschen Truckern haben alle nur noch Schwedisch geredet. +

+ +
+ + +
+ + diff --git a/www/uppsala/rss.xml b/www/uppsala/rss.xml new file mode 100644 index 0000000..6f1aeb4 --- /dev/null +++ b/www/uppsala/rss.xml @@ -0,0 +1,119 @@ + + + + Uppsala - approx. 59°48'17'' N 17°38'40'' E + http://www.tilman.de/uppsala + + de + + Weihnachten + http://www.tilman.de/uppsala/node/120 + <p><span class="inline right"><a href="/uppsala/node/115"><img src="http://www.tilman.de/uppsala/system/files/images/Baum03_k.artikel.jpg" alt="Schwedischer Weihnachtsbaum" title="Schwedischer Weihnachtsbaum" class="image artikel" width="114" height="188" /></a><span class="caption" style="width: 112px;"><strong>Schwedischer Weihnachtsbaum</strong></span></span>Wir hatten uns, anders als ein Großteil der Austauschstudenten, entschlossen, über Weihnachten in Uppsala zu bleiben. Bis zuletzt hofften wir auf Schnee, der sich aber nicht so wirklich einstellen wollte. Weihnachten wird hier, wie in Deutschland, am 24. gefeiert und wir wollten an diesem Tag in Upplands Nation gehen, deren öffentliche Weihnachtsfeier irgendwo in den Studieninformationen empfohlen worden war. Also sind wir gegen Mittag in die Stadt gefahren, um uns mal umzuschauen. Die Feier war auch tatsächlich schon am Laufen, wirkte allerdings mehr wie eine Seniorenverköstigung. Es war schwer jemanden zu finden, der mit etwas anderem als sich und seinem Essen beschäftigt war und da wir niemandem den Weihnachtsbraten streitig machen wollten, gingen wir weiter. Etwas zu Essen wäre uns so langsam aber doch recht gewesen, so dass wir uns Richtung Innenstadt bewegten und dabei nach einem geöffneten Café Ausschau hielten - nichts.<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/120">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/120#comment + Leben in Schweden + Thu, 28 Dec 2006 23:34:40 +0100 + Tilman + 120 at http://www.tilman.de/uppsala + + + Letzer Besuch + http://www.tilman.de/uppsala/node/114 + <p><span class="inline left"><a href="/uppsala/node/98"><img src="http://www.tilman.de/uppsala/system/files/images/2006-12-13_13-12-36.artikel.jpg" alt="Thomas kommt" title="Thomas kommt" class="image artikel" width="141" height="188" /></a><span class="caption" style="width: 139px;"><strong>Thomas kommt</strong></span></span>Zwei Tage mussten wir dann alleine zur Uni, bevor uns am Mittwoch, dem 13. Dezember Thomas erreichte. Die Abschlusspräsentation lag zwar hinter uns, aber dafür musste am Freitag der Abschluss<span style="font-style:italic">bericht</span> abgegeben werden, so dass auch Thomas erst mal Uni mitmachen durfte. (Diese Fehlplanung lag darin begründet, dass wir dachten das Projekt würde - wie im Vorlesungsverzeichnis angegeben - bis Mitte Januar laufen, als die Besuchsflüge gebucht wurden. Tatsächlich wird aber alles vor Weihnachten beendet, weil im Januar für die Abschlussklausuren gelernt wird.)<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/114">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/114#comment + Besuch + Wed, 27 Dec 2006 02:21:29 +0100 + Tilman + 114 at http://www.tilman.de/uppsala + + + Mehr Besuch! + http://www.tilman.de/uppsala/node/97 + <p><span class="inline right"><a href="/uppsala/node/87"><img src="http://www.tilman.de/uppsala/system/files/images/12-06_Nicole-Ankunft.artikel.jpg" alt="Nicole kommt" title="Nicole kommt" class="image artikel" width="141" height="188" /></a><span class="caption" style="width: 139px;"><strong>Nicole kommt</strong></span></span>Damit ich dieses Jahr nicht nur ein Stück Kohle in meinem Weihnachtsstrumpf finde, habe ich beschlossen schnell noch Ordnung zu machen und endlich über die letzten beiden Wochen zu schreiben, schließlich war ja auch einiges los. +Zuerst einmal kam am Nikolaustag Nicole zu Besuch und beglückte uns mit selbstgebackenen Keksen, einigen wichtigen Mitbringseln aus Berlin (Schuhe! Fahrradschlüssel!) und natürlich nicht zuletzt ihrer Anwesenheit. Leider war zwei Tage später die Abschlusspräsentation für unser Projekt fällig, so dass Nicole selbst erst einmal einiges an Zeit mit unseren schwedischen und amerikanischen Kommilitonen verbringen durfte. <br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/97">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/97#comment + Besuch + Sun, 24 Dec 2006 19:35:12 +0100 + Tilman + 97 at http://www.tilman.de/uppsala + + + Drupal und Image: Zugriff auf Bilder (und Artikel) beschränken + http://www.tilman.de/uppsala/node/84 + <p><span style="font-style:italic">Hinweis: Wer nur am Uppsala-Blog und weniger an Content-Management-Software interessiert ist, kann hier aufhören zu lesen.</span></p> + +<p>Ich hatte schon länger vor, den Zugriff auf die (mit <a href="http://drupal.org/project/image" class="bb-url">Image</a> hochgeladenen) Bilder in diesem Blog derart zu beschränken, dass nur angemeldete Benutzer die Bilder in voller Auflösung betrachten können. Zunächst hatte ich nach einem Modul gesucht, das den Zugriff nach dem Typ des Nodes beschränkt um die Bilder nicht einzeln schützen zu müssen, war aber nicht fündig geworden. Also habe ich zunächst einmal <a href="http://drupal.org/project/simple_access" class="bb-url">Simple Access</a> installiert, mit dem man den Zugriff auf einzelne Nodes für bestimmte Nutzergruppen freigeben kann, zumal ich inzwischen eventuell auch einzelne Artikel schützen wollte.<br /> +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/84">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/84#comment + Technik + Thu, 07 Dec 2006 02:20:29 +0100 + Tilman + 84 at http://www.tilman.de/uppsala + + + Besuch! + http://www.tilman.de/uppsala/node/83 + <p><span class="inline right"><a href="/uppsala/node/81"><img src="http://www.tilman.de/uppsala/system/files/images/Besucherhausschuhe.artikel.jpg" alt="Besucherhausschuhe" title="Besucherhausschuhe" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Besucherhausschuhe</strong></span></span>Letzte Woche am Mittwoch, pünktlich um 11.55 Uhr, ist Martin in Arlanda gelandet. Leider fehlte uns noch Erfahrung mit Germanwings-Passagieren, so dass wir genau am anderen Ende des Flughafens geparkt hatten. Über das ganze Hin- und Her-Gelatsche hab ich dann auch das offizielle Ankunfts-Foto vergessen. Als wir Martin plus Tasche dann im Auto hatten sind wir erst mal nach Uppsala gefahren, um einen Studenten-Ausweis zu besorgen. <br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/83">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/83#comment + Besuch + Thu, 07 Dec 2006 01:33:01 +0100 + Tilman + 83 at http://www.tilman.de/uppsala + + + Innebandy + http://www.tilman.de/uppsala/node/80 + <p><span class="inline left"><a href="/uppsala/node/79"><img src="http://www.tilman.de/uppsala/system/files/images/Bild007.artikel.jpg" alt="Innebandy" title="Innebandy" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Innebandy</strong></span></span>Letzte Woche bin ich endlich zum Floorball Spielen gekommen. Zuerst im Stallet, einem der beiden Fitness-Studios für die Studenten hier. Es gibt Spielzeiten zu denen man ohne Anmeldung erscheinen kann. Der Nachteil ist, dass man vorher nicht unbedingt sagen kann, wieviele Spieler kommen werden. So waren Achim und ich beim ersten Anlauf dann auch alleine in der Halle, was aber wohl mit dem Schneechaos zu tun hatte. Beim zweiten Versuch konnten wir dann immerhin drei gegen drei spielen. Die Spieler waren durch die Bank besser, allerdings hielt sich der Abstand in Grenzen; man konnte noch ordentlich mitspielen. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/80">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/80#comment + Tue, 14 Nov 2006 15:41:36 +0100 + Tilman + 80 at http://www.tilman.de/uppsala + + + Chorwochenende + http://www.tilman.de/uppsala/node/78 + <p><span class="inline right"><a href="/uppsala/node/75"><img src="http://www.tilman.de/uppsala/system/files/images/2006-10-29_10-52-59.artikel.jpg" alt="Älvåsa" title="Älvåsa" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Älvåsa</strong></span></span>Letztes Wochenende bin ich, wie angekündigt, mit meinem <a href="http://www.ostgotanation.se/website/foreningar/sanggripen.php" class="bb-url">Chor</a> auf Probenfahrt nach <a href="http://www.alvasa.se/?id=201" class="bb-url">Älvåsa</a> gefahren, einer Art Ferienheim 70km nordwestlich von Uppsala. +Bei der Ankunft stellte ich erstmal fest, dass ich natürlich das Wichtigste vergessen hatte: Hausschuhe.<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/78">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/78#comment + Älvåsa + Ausflug + Sun, 05 Nov 2006 15:23:41 +0100 + Tilman + 78 at http://www.tilman.de/uppsala + + + Schnee!!! + http://www.tilman.de/uppsala/node/74 + <p><span class="inline right"><a href="/uppsala/node/71"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0788_0.artikel.jpg" alt="Alles weiß!" title="Alles weiß!" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Alles weiß!</strong></span></span>Wir dachten wir sehen nicht richtig, als wir an Halloween in der Schlange zur Party von Snerikes, einer der Nationen, standen. Da rieselte leise der Schnee auf uns herab. "I have never seen snow before!" staunte ein Mädchen hinter uns. Die Begeisterung wurde am nächsten Morgen aber dann im Schnee erstickt - Schneesturm und kein Ende abzusehen! Wie passend, dass hier in Schweden ab dem 1. November Winterreifen Pflicht sind, aber das hatten wohl nicht so viele ernst genommen. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/74">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/74#comment + Besuch + Leben in Schweden + Sat, 04 Nov 2006 15:04:28 +0100 + Bettina + 74 at http://www.tilman.de/uppsala + + + Lördagsgodis och Kanelbullar + http://www.tilman.de/uppsala/node/70 + <p><span class="inline left"><a href="/uppsala/node/66"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0546_1.artikel.jpg" alt="Typisch schwedische Handgriffe" title="Typisch schwedische Handgriffe" class="image artikel" width="181" height="188" /></a><span class="caption" style="width: 179px;"><strong>Typisch schwedische Handgriffe</strong></span></span>Schweden ist ein Land für mich. Meterlange Regale voller Marabou-Schokolade, kistenweise Smågodis, Schokoladenkuchen, bei dem tatsächlich endlich mal der Kuchen die Nebensache ist, und Kanelbullar. Da liegt nahe, dass Schweden Probleme mit übergewichtigen Kindern haben. Deswegen startete das staatliche Institut für Volksgesundheit schon vor vierzig Jahren die Kampange Lördagsgodis (dt.: Samstagssüßigkeiten). Danach sollten Kinder nur einmal in der Woche Süßes bekommen. Auf einigen Süßigkeitenverpackungen steht sogar sowas wie "Endlich wieder Samstag!". Aber ich passe mich hier auch gerne wieder an, denn die Schweden halten sich nicht an solche Ratschläge. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/70">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/70#comment + Kurioses + Leben in Schweden + Mon, 23 Oct 2006 17:54:15 +0200 + Bettina + 70 at http://www.tilman.de/uppsala + + + Tilman scores + http://www.tilman.de/uppsala/node/65 + <p><span class="inline left"><a href="/uppsala/node/64"><img src="http://www.tilman.de/uppsala/system/files/images/chor01.artikel.jpg" alt="Ruhe bitte!" title="Ruhe bitte!" class="image artikel" width="141" height="188" /></a><span class="caption" style="width: 139px;"><strong>Ruhe bitte!</strong></span></span>Seit vier Wochen sind wir Chormitglieder. Allerdings in verschiedenen Chören. Bettina singt im Chor von <a href="http://www.kalmarnation.com/" class="bb-url">Kalmars Nation</a>, während es mich zu <a href="http://www.ostgotanation.se/" class="bb-url">Östgöta</a> verschlagen hat. In Schweden gehört das gemeinsame Singen immer noch zur Volkskultur - und wenn es nur die Trinklieder sind, die auf keiner Gasque fehlen dürfen. Deshalb hat auch fast jede Nation einen eigenen Chor. +Der Chor von Östgöta bewegt sich auf einem hohem Niveau, die Stücke werden in einem ziemlich hohen Tempo geprobt. Erschwerend hinzu kommt, dass es im ganzen Chor außer mir nur ein einziges Mitglied gibt, das <span style="font-style:italic">nicht</span> Schwedisch spricht. Und natürlich werden auch schwedische Lieder gesungen. Inzwischen komme ich aber einigermaßen zurecht und freue mich immer, wenn die Dirigentin Dinge tut, die ich verstehe.<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/65">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/65#comment + Wed, 18 Oct 2006 21:55:39 +0200 + Tilman + 65 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/system/files/images/12-06_Nicole-Ankunft.artikel.jpg b/www/uppsala/system/files/images/12-06_Nicole-Ankunft.artikel.jpg new file mode 100644 index 0000000..f1c30f4 Binary files /dev/null and b/www/uppsala/system/files/images/12-06_Nicole-Ankunft.artikel.jpg differ diff --git a/www/uppsala/system/files/images/12-07_16-16_Gruppe.artikel.jpg b/www/uppsala/system/files/images/12-07_16-16_Gruppe.artikel.jpg new file mode 100644 index 0000000..981a5ec Binary files /dev/null and b/www/uppsala/system/files/images/12-07_16-16_Gruppe.artikel.jpg differ diff --git a/www/uppsala/system/files/images/12-07_23-41_Stockholms.artikel.jpg b/www/uppsala/system/files/images/12-07_23-41_Stockholms.artikel.jpg new file mode 100644 index 0000000..4e12d3a Binary files /dev/null and b/www/uppsala/system/files/images/12-07_23-41_Stockholms.artikel.jpg differ diff --git a/www/uppsala/system/files/images/12-08_17-46_Pyjamaparty_2.artikel.jpg b/www/uppsala/system/files/images/12-08_17-46_Pyjamaparty_2.artikel.jpg new file mode 100644 index 0000000..aa8fefc Binary files /dev/null and b/www/uppsala/system/files/images/12-08_17-46_Pyjamaparty_2.artikel.jpg differ diff --git a/www/uppsala/system/files/images/12-08_24-02_Vaermlands_3.artikel.jpg b/www/uppsala/system/files/images/12-08_24-02_Vaermlands_3.artikel.jpg new file mode 100644 index 0000000..f0f7b84 Binary files /dev/null and b/www/uppsala/system/files/images/12-08_24-02_Vaermlands_3.artikel.jpg differ diff --git a/www/uppsala/system/files/images/12-09_23-29_Gasque_4.artikel.jpg b/www/uppsala/system/files/images/12-09_23-29_Gasque_4.artikel.jpg new file mode 100644 index 0000000..01628f8 Binary files /dev/null and b/www/uppsala/system/files/images/12-09_23-29_Gasque_4.artikel.jpg differ diff --git a/www/uppsala/system/files/images/12-09_24-40_Gasque_5.artikel.jpg b/www/uppsala/system/files/images/12-09_24-40_Gasque_5.artikel.jpg new file mode 100644 index 0000000..c67e177 Binary files /dev/null and b/www/uppsala/system/files/images/12-09_24-40_Gasque_5.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-10-27_22-52-18.artikel.jpg b/www/uppsala/system/files/images/2006-10-27_22-52-18.artikel.jpg new file mode 100644 index 0000000..26a84bb Binary files /dev/null and b/www/uppsala/system/files/images/2006-10-27_22-52-18.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-10-28_21-33-36.artikel.jpg b/www/uppsala/system/files/images/2006-10-28_21-33-36.artikel.jpg new file mode 100644 index 0000000..505c38f Binary files /dev/null and b/www/uppsala/system/files/images/2006-10-28_21-33-36.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-10-29_10-52-59.artikel.jpg b/www/uppsala/system/files/images/2006-10-29_10-52-59.artikel.jpg new file mode 100644 index 0000000..3495f67 Binary files /dev/null and b/www/uppsala/system/files/images/2006-10-29_10-52-59.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-09_21-21-05.artikel.jpg b/www/uppsala/system/files/images/2006-12-09_21-21-05.artikel.jpg new file mode 100644 index 0000000..b177ca8 Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-09_21-21-05.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-13_13-12-36.artikel.jpg b/www/uppsala/system/files/images/2006-12-13_13-12-36.artikel.jpg new file mode 100644 index 0000000..8284c7e Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-13_13-12-36.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-13_20-54-26.artikel.jpg b/www/uppsala/system/files/images/2006-12-13_20-54-26.artikel.jpg new file mode 100644 index 0000000..e39c893 Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-13_20-54-26.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-15_13-36-59.artikel.jpg b/www/uppsala/system/files/images/2006-12-15_13-36-59.artikel.jpg new file mode 100644 index 0000000..401886c Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-15_13-36-59.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-15_19-39-14.artikel.jpg b/www/uppsala/system/files/images/2006-12-15_19-39-14.artikel.jpg new file mode 100644 index 0000000..f13e3df Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-15_19-39-14.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-15_23-30-34.artikel.jpg b/www/uppsala/system/files/images/2006-12-15_23-30-34.artikel.jpg new file mode 100644 index 0000000..e0d6b71 Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-15_23-30-34.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-16_00-44-52.artikel.jpg b/www/uppsala/system/files/images/2006-12-16_00-44-52.artikel.jpg new file mode 100644 index 0000000..ca0e621 Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-16_00-44-52.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-16_16-16-14.artikel.jpg b/www/uppsala/system/files/images/2006-12-16_16-16-14.artikel.jpg new file mode 100644 index 0000000..38dfa3e Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-16_16-16-14.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-16_19-01-46.artikel.jpg b/www/uppsala/system/files/images/2006-12-16_19-01-46.artikel.jpg new file mode 100644 index 0000000..2178d92 Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-16_19-01-46.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-24_15-11-53.artikel.JPG b/www/uppsala/system/files/images/2006-12-24_15-11-53.artikel.JPG new file mode 100644 index 0000000..b72cb63 Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-24_15-11-53.artikel.JPG differ diff --git a/www/uppsala/system/files/images/2006-12-24_23-00-14.artikel.jpg b/www/uppsala/system/files/images/2006-12-24_23-00-14.artikel.jpg new file mode 100644 index 0000000..871e758 Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-24_23-00-14.artikel.jpg differ diff --git a/www/uppsala/system/files/images/2006-12-25_00-17-28.artikel.jpg b/www/uppsala/system/files/images/2006-12-25_00-17-28.artikel.jpg new file mode 100644 index 0000000..86b691c Binary files /dev/null and b/www/uppsala/system/files/images/2006-12-25_00-17-28.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Baum03_k.artikel.jpg b/www/uppsala/system/files/images/Baum03_k.artikel.jpg new file mode 100644 index 0000000..fb92940 Binary files /dev/null and b/www/uppsala/system/files/images/Baum03_k.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Besucherhausschuhe.artikel.jpg b/www/uppsala/system/files/images/Besucherhausschuhe.artikel.jpg new file mode 100644 index 0000000..cab41ca Binary files /dev/null and b/www/uppsala/system/files/images/Besucherhausschuhe.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Bild007.artikel.jpg b/www/uppsala/system/files/images/Bild007.artikel.jpg new file mode 100644 index 0000000..7f490b2 Binary files /dev/null and b/www/uppsala/system/files/images/Bild007.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Bild022_1024.artikel.jpg b/www/uppsala/system/files/images/Bild022_1024.artikel.jpg new file mode 100644 index 0000000..eec4d80 Binary files /dev/null and b/www/uppsala/system/files/images/Bild022_1024.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Bild041.artikel.jpg b/www/uppsala/system/files/images/Bild041.artikel.jpg new file mode 100644 index 0000000..a32dc34 Binary files /dev/null and b/www/uppsala/system/files/images/Bild041.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Bild046_0.artikel.jpg b/www/uppsala/system/files/images/Bild046_0.artikel.jpg new file mode 100644 index 0000000..2ca4a28 Binary files /dev/null and b/www/uppsala/system/files/images/Bild046_0.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Bild052.artikel.jpg b/www/uppsala/system/files/images/Bild052.artikel.jpg new file mode 100644 index 0000000..764bb72 Binary files /dev/null and b/www/uppsala/system/files/images/Bild052.artikel.jpg differ diff --git a/www/uppsala/system/files/images/DSCN0115.artikel.JPG b/www/uppsala/system/files/images/DSCN0115.artikel.JPG new file mode 100644 index 0000000..5684689 Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0115.artikel.JPG differ diff --git a/www/uppsala/system/files/images/DSCN0156.artikel.JPG b/www/uppsala/system/files/images/DSCN0156.artikel.JPG new file mode 100644 index 0000000..a10706a Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0156.artikel.JPG differ diff --git a/www/uppsala/system/files/images/DSCN0161_cut_0.artikel_large.jpg b/www/uppsala/system/files/images/DSCN0161_cut_0.artikel_large.jpg new file mode 100644 index 0000000..36357fe Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0161_cut_0.artikel_large.jpg differ diff --git a/www/uppsala/system/files/images/DSCN0238.artikel.JPG b/www/uppsala/system/files/images/DSCN0238.artikel.JPG new file mode 100644 index 0000000..0b87368 Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0238.artikel.JPG differ diff --git a/www/uppsala/system/files/images/DSCN0240.artikel.JPG b/www/uppsala/system/files/images/DSCN0240.artikel.JPG new file mode 100644 index 0000000..85bc863 Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0240.artikel.JPG differ diff --git a/www/uppsala/system/files/images/DSCN0248.artikel.JPG b/www/uppsala/system/files/images/DSCN0248.artikel.JPG new file mode 100644 index 0000000..5b4825b Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0248.artikel.JPG differ diff --git a/www/uppsala/system/files/images/DSCN0546_1.artikel.jpg b/www/uppsala/system/files/images/DSCN0546_1.artikel.jpg new file mode 100644 index 0000000..19fb9b3 Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0546_1.artikel.jpg differ diff --git a/www/uppsala/system/files/images/DSCN0553_2.artikel.jpg b/www/uppsala/system/files/images/DSCN0553_2.artikel.jpg new file mode 100644 index 0000000..f2072db Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0553_2.artikel.jpg differ diff --git a/www/uppsala/system/files/images/DSCN0556_3.artikel.jpg b/www/uppsala/system/files/images/DSCN0556_3.artikel.jpg new file mode 100644 index 0000000..5cb3557 Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0556_3.artikel.jpg differ diff --git a/www/uppsala/system/files/images/DSCN0568_4.artikel.jpg b/www/uppsala/system/files/images/DSCN0568_4.artikel.jpg new file mode 100644 index 0000000..ec8986c Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0568_4.artikel.jpg differ diff --git a/www/uppsala/system/files/images/DSCN0788_0.artikel.jpg b/www/uppsala/system/files/images/DSCN0788_0.artikel.jpg new file mode 100644 index 0000000..3113e6f Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0788_0.artikel.jpg differ diff --git a/www/uppsala/system/files/images/DSCN0808.artikel.jpg b/www/uppsala/system/files/images/DSCN0808.artikel.jpg new file mode 100644 index 0000000..dc7ea66 Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0808.artikel.jpg differ diff --git a/www/uppsala/system/files/images/DSCN0812.artikel.jpg b/www/uppsala/system/files/images/DSCN0812.artikel.jpg new file mode 100644 index 0000000..b7240d7 Binary files /dev/null and b/www/uppsala/system/files/images/DSCN0812.artikel.jpg differ diff --git a/www/uppsala/system/files/images/DSCN4175.artikel.JPG b/www/uppsala/system/files/images/DSCN4175.artikel.JPG new file mode 100644 index 0000000..65a0189 Binary files /dev/null and b/www/uppsala/system/files/images/DSCN4175.artikel.JPG differ diff --git a/www/uppsala/system/files/images/Descr.WD3 b/www/uppsala/system/files/images/Descr.WD3 new file mode 100644 index 0000000..3dc6f98 Binary files /dev/null and b/www/uppsala/system/files/images/Descr.WD3 differ diff --git a/www/uppsala/system/files/images/Hamburgare_92_0.artikel.jpg b/www/uppsala/system/files/images/Hamburgare_92_0.artikel.jpg new file mode 100644 index 0000000..e5e801d Binary files /dev/null and b/www/uppsala/system/files/images/Hamburgare_92_0.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Kisten.artikel.jpg b/www/uppsala/system/files/images/Kisten.artikel.jpg new file mode 100644 index 0000000..76e289c Binary files /dev/null and b/www/uppsala/system/files/images/Kisten.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Lilla+Sunnersta+1+-+geschnitten.img_assist_custom.jpg b/www/uppsala/system/files/images/Lilla+Sunnersta+1+-+geschnitten.img_assist_custom.jpg new file mode 100644 index 0000000..9bdfe5a Binary files /dev/null and b/www/uppsala/system/files/images/Lilla+Sunnersta+1+-+geschnitten.img_assist_custom.jpg differ diff --git a/www/uppsala/system/files/images/Mikrowellen02.artikel.jpg b/www/uppsala/system/files/images/Mikrowellen02.artikel.jpg new file mode 100644 index 0000000..19ad60e Binary files /dev/null and b/www/uppsala/system/files/images/Mikrowellen02.artikel.jpg differ diff --git a/www/uppsala/system/files/images/PC248707_k.artikel.jpg b/www/uppsala/system/files/images/PC248707_k.artikel.jpg new file mode 100644 index 0000000..6fbc791 Binary files /dev/null and b/www/uppsala/system/files/images/PC248707_k.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Schild_cutin.artikel.jpg b/www/uppsala/system/files/images/Schild_cutin.artikel.jpg new file mode 100644 index 0000000..06003b2 Binary files /dev/null and b/www/uppsala/system/files/images/Schild_cutin.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Strafzettel.artikel.jpg b/www/uppsala/system/files/images/Strafzettel.artikel.jpg new file mode 100644 index 0000000..ec2210f Binary files /dev/null and b/www/uppsala/system/files/images/Strafzettel.artikel.jpg differ diff --git a/www/uppsala/system/files/images/Waldo.artikel.jpg b/www/uppsala/system/files/images/Waldo.artikel.jpg new file mode 100644 index 0000000..829f866 Binary files /dev/null and b/www/uppsala/system/files/images/Waldo.artikel.jpg differ diff --git a/www/uppsala/system/files/images/automat.artikel.jpg b/www/uppsala/system/files/images/automat.artikel.jpg new file mode 100644 index 0000000..9d0b233 Binary files /dev/null and b/www/uppsala/system/files/images/automat.artikel.jpg differ diff --git a/www/uppsala/system/files/images/chor01.artikel.jpg b/www/uppsala/system/files/images/chor01.artikel.jpg new file mode 100644 index 0000000..ed141a5 Binary files /dev/null and b/www/uppsala/system/files/images/chor01.artikel.jpg differ diff --git a/www/uppsala/system/files/images/chor01.preview.jpg b/www/uppsala/system/files/images/chor01.preview.jpg new file mode 100644 index 0000000..4903978 --- /dev/null +++ b/www/uppsala/system/files/images/chor01.preview.jpg @@ -0,0 +1,64 @@ + + + + Zugriff verweigert | Uppsala + + + + + + + + + + + + + + + +
+

Zugriff verweigert

+ +Sie haben keine Zugriffsberechtigung für diese Seite. + +
+ + diff --git a/www/uppsala/system/files/images/lowcarb02.artikel.jpg b/www/uppsala/system/files/images/lowcarb02.artikel.jpg new file mode 100644 index 0000000..16e16e1 Binary files /dev/null and b/www/uppsala/system/files/images/lowcarb02.artikel.jpg differ diff --git a/www/uppsala/system/files/images/lowcarb03.artikel.jpg b/www/uppsala/system/files/images/lowcarb03.artikel.jpg new file mode 100644 index 0000000..510e680 Binary files /dev/null and b/www/uppsala/system/files/images/lowcarb03.artikel.jpg differ diff --git a/www/uppsala/system/files/images/muelleimer.artikel.jpg b/www/uppsala/system/files/images/muelleimer.artikel.jpg new file mode 100644 index 0000000..106b0da Binary files /dev/null and b/www/uppsala/system/files/images/muelleimer.artikel.jpg differ diff --git a/www/uppsala/system/files/images/muelleimer2.artikel.jpg b/www/uppsala/system/files/images/muelleimer2.artikel.jpg new file mode 100644 index 0000000..e5e8742 Binary files /dev/null and b/www/uppsala/system/files/images/muelleimer2.artikel.jpg differ diff --git a/www/uppsala/system/files/images/tonnen.artikel.jpg b/www/uppsala/system/files/images/tonnen.artikel.jpg new file mode 100644 index 0000000..28fe228 Binary files /dev/null and b/www/uppsala/system/files/images/tonnen.artikel.jpg differ diff --git a/www/uppsala/taxonomy/term/12/0/Descr.WD3 b/www/uppsala/taxonomy/term/12/0/Descr.WD3 new file mode 100644 index 0000000..e469109 Binary files /dev/null and b/www/uppsala/taxonomy/term/12/0/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/12/0/feed b/www/uppsala/taxonomy/term/12/0/feed new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/12/Descr.WD3 b/www/uppsala/taxonomy/term/12/Descr.WD3 new file mode 100644 index 0000000..d53e28d Binary files /dev/null and b/www/uppsala/taxonomy/term/12/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/12/default.htm b/www/uppsala/taxonomy/term/12/default.htm new file mode 100644 index 0000000..a604b25 --- /dev/null +++ b/www/uppsala/taxonomy/term/12/default.htm @@ -0,0 +1,55 @@ + + + + Uppsala - Ausflug + http://www.tilman.de/uppsala/taxonomy/term/12/0 + + de + + Chorwochenende + http://www.tilman.de/uppsala/node/78 + <p><span class="inline right"><a href="/uppsala/node/75"><img src="http://www.tilman.de/uppsala/system/files/images/2006-10-29_10-52-59.artikel.jpg" alt="Älvåsa" title="Älvåsa" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Älvåsa</strong></span></span>Letztes Wochenende bin ich, wie angekündigt, mit meinem <a href="http://www.ostgotanation.se/website/foreningar/sanggripen.php" class="bb-url">Chor</a> auf Probenfahrt nach <a href="http://www.alvasa.se/?id=201" class="bb-url">Älvåsa</a> gefahren, einer Art Ferienheim 70km nordwestlich von Uppsala. +Bei der Ankunft stellte ich erstmal fest, dass ich natürlich das Wichtigste vergessen hatte: Hausschuhe.<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/78">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/78#comment + Älvåsa + Ausflug + Sun, 05 Nov 2006 15:23:41 +0100 + Tilman + 78 at http://www.tilman.de/uppsala + + + Healthy Fast Food + http://www.tilman.de/uppsala/node/63 + <p>Letzte Woche waren wir bei <span style="font-style:italic"><a href="http://www.max.se/en/" class="bb-url">Max Burger</a></span>. Das ist eine schwedische Fast-Food-Kette, die bessere Burger als McDonald's und Burger King macht. Das alleine wäre vielleicht noch nicht so etwas Besonderes, aber sie treiben es noch etwas weiter.<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/63">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/63#comment + Ausflug + Leben in Schweden + Tue, 17 Oct 2006 21:40:16 +0200 + Tilman + 63 at http://www.tilman.de/uppsala + + + Bettina goes Hollywood + http://www.tilman.de/uppsala/node/39 + <p><span class="inline right"><a href="/uppsala/node/40"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0240.artikel.JPG" alt="Kyrkan i Bälinge" title="Kyrkan i Bälinge" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Kyrkan i Bälinge</strong></span></span>Hier in Uppsala kümmert man sich sehr um die Austauschstudenten. Für die Naturwissenschafter gibt es ein Programm, welches den neuen Studenten einen schwedischen Buddy zuordnet, der dafür sorgen soll, dass der Neuankömmling sich in der neuen Umgebung und mit der neuen Sprache nicht vollkommen verloren fühlt. Es geht darum einen Ansprechpartner zu haben, der sich in Uppsala bzw. Schweden auskennt, wenn irgendwelche Probleme auftreten. Mein Buddy heißt Anna und bis dahin kannte ich sie nur aus Emails. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/39">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/39#comment + Ausflug + Kurioses + Mon, 25 Sep 2006 23:39:30 +0200 + Bettina + 39 at http://www.tilman.de/uppsala + + + Gamla Uppsala + http://www.tilman.de/uppsala/node/31 + <p><span class="inline left"><a href="/uppsala/node/28"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0161_cut_0.artikel_large.jpg" alt="Grabhügel von Gamla Uppsala" title="Grabhügel von Gamla Uppsala" class="image artikel_large" width="280" height="127" /></a><span class="caption" style="width: 278px;"><strong>Grabhügel von Gamla Uppsala</strong></span></span> Gestern haben wir mal einen Fahrradausflug mit Kulturbeilage gemacht. Wir haben also Touris gespielt und sind mit einer Gruppe anderer deutscher Austauschstudenten nach Gamla Uppsala gefahren. Das sind Grabhügel, in denen die vorviktorianischen Könige (zwischen dem 6. und 12. Jahrhundert) samt einiger Kostbarkeiten für ihre letzte Reise begraben wurden. Außerdem befindet sich in unmittelbarer Nähe die älteste Domkirche von Uppsala, die Mitte des 11. Jahrhunderts gebaut wurde. <br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/31">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/31#comment + Ausflug + Kultur + Sun, 03 Sep 2006 17:35:37 +0200 + Bettina + 31 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/taxonomy/term/13/0/Descr.WD3 b/www/uppsala/taxonomy/term/13/0/Descr.WD3 new file mode 100644 index 0000000..38d4aa3 Binary files /dev/null and b/www/uppsala/taxonomy/term/13/0/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/13/0/feed b/www/uppsala/taxonomy/term/13/0/feed new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/13/Descr.WD3 b/www/uppsala/taxonomy/term/13/Descr.WD3 new file mode 100644 index 0000000..9a5aeeb Binary files /dev/null and b/www/uppsala/taxonomy/term/13/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/13/default.htm b/www/uppsala/taxonomy/term/13/default.htm new file mode 100644 index 0000000..6bc2ee9 --- /dev/null +++ b/www/uppsala/taxonomy/term/13/default.htm @@ -0,0 +1,20 @@ + + + + Uppsala - Kultur + http://www.tilman.de/uppsala/taxonomy/term/13/0 + + de + + Gamla Uppsala + http://www.tilman.de/uppsala/node/31 + <p><span class="inline left"><a href="/uppsala/node/28"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0161_cut_0.artikel_large.jpg" alt="Grabhügel von Gamla Uppsala" title="Grabhügel von Gamla Uppsala" class="image artikel_large" width="280" height="127" /></a><span class="caption" style="width: 278px;"><strong>Grabhügel von Gamla Uppsala</strong></span></span> Gestern haben wir mal einen Fahrradausflug mit Kulturbeilage gemacht. Wir haben also Touris gespielt und sind mit einer Gruppe anderer deutscher Austauschstudenten nach Gamla Uppsala gefahren. Das sind Grabhügel, in denen die vorviktorianischen Könige (zwischen dem 6. und 12. Jahrhundert) samt einiger Kostbarkeiten für ihre letzte Reise begraben wurden. Außerdem befindet sich in unmittelbarer Nähe die älteste Domkirche von Uppsala, die Mitte des 11. Jahrhunderts gebaut wurde. <br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/31">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/31#comment + Ausflug + Kultur + Sun, 03 Sep 2006 17:35:37 +0200 + Bettina + 31 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/taxonomy/term/21/0/Descr.WD3 b/www/uppsala/taxonomy/term/21/0/Descr.WD3 new file mode 100644 index 0000000..e469109 Binary files /dev/null and b/www/uppsala/taxonomy/term/21/0/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/21/0/feed b/www/uppsala/taxonomy/term/21/0/feed new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/21/Descr.WD3 b/www/uppsala/taxonomy/term/21/Descr.WD3 new file mode 100644 index 0000000..089f7da Binary files /dev/null and b/www/uppsala/taxonomy/term/21/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/21/default.htm b/www/uppsala/taxonomy/term/21/default.htm new file mode 100644 index 0000000..ab0a35e --- /dev/null +++ b/www/uppsala/taxonomy/term/21/default.htm @@ -0,0 +1,21 @@ + + + + Uppsala - Älvåsa + http://www.tilman.de/uppsala/taxonomy/term/21/0 + + de + + Chorwochenende + http://www.tilman.de/uppsala/node/78 + <p><span class="inline right"><a href="/uppsala/node/75"><img src="http://www.tilman.de/uppsala/system/files/images/2006-10-29_10-52-59.artikel.jpg" alt="Älvåsa" title="Älvåsa" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Älvåsa</strong></span></span>Letztes Wochenende bin ich, wie angekündigt, mit meinem <a href="http://www.ostgotanation.se/website/foreningar/sanggripen.php" class="bb-url">Chor</a> auf Probenfahrt nach <a href="http://www.alvasa.se/?id=201" class="bb-url">Älvåsa</a> gefahren, einer Art Ferienheim 70km nordwestlich von Uppsala. +Bei der Ankunft stellte ich erstmal fest, dass ich natürlich das Wichtigste vergessen hatte: Hausschuhe.<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/78">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/78#comment + Älvåsa + Ausflug + Sun, 05 Nov 2006 15:23:41 +0100 + Tilman + 78 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/taxonomy/term/23/0/Descr.WD3 b/www/uppsala/taxonomy/term/23/0/Descr.WD3 new file mode 100644 index 0000000..e469109 Binary files /dev/null and b/www/uppsala/taxonomy/term/23/0/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/23/0/feed b/www/uppsala/taxonomy/term/23/0/feed new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/23/Descr.WD3 b/www/uppsala/taxonomy/term/23/Descr.WD3 new file mode 100644 index 0000000..c2c391f Binary files /dev/null and b/www/uppsala/taxonomy/term/23/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/23/default.htm b/www/uppsala/taxonomy/term/23/default.htm new file mode 100644 index 0000000..3f1b1cb --- /dev/null +++ b/www/uppsala/taxonomy/term/23/default.htm @@ -0,0 +1,52 @@ + + + + Uppsala - Besuch + http://www.tilman.de/uppsala/taxonomy/term/23/0 + + de + + Letzer Besuch + http://www.tilman.de/uppsala/node/114 + <p><span class="inline left"><a href="/uppsala/node/98"><img src="http://www.tilman.de/uppsala/system/files/images/2006-12-13_13-12-36.artikel.jpg" alt="Thomas kommt" title="Thomas kommt" class="image artikel" width="141" height="188" /></a><span class="caption" style="width: 139px;"><strong>Thomas kommt</strong></span></span>Zwei Tage mussten wir dann alleine zur Uni, bevor uns am Mittwoch, dem 13. Dezember Thomas erreichte. Die Abschlusspräsentation lag zwar hinter uns, aber dafür musste am Freitag der Abschluss<span style="font-style:italic">bericht</span> abgegeben werden, so dass auch Thomas erst mal Uni mitmachen durfte. (Diese Fehlplanung lag darin begründet, dass wir dachten das Projekt würde - wie im Vorlesungsverzeichnis angegeben - bis Mitte Januar laufen, als die Besuchsflüge gebucht wurden. Tatsächlich wird aber alles vor Weihnachten beendet, weil im Januar für die Abschlussklausuren gelernt wird.)<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/114">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/114#comment + Besuch + Wed, 27 Dec 2006 02:21:29 +0100 + Tilman + 114 at http://www.tilman.de/uppsala + + + Mehr Besuch! + http://www.tilman.de/uppsala/node/97 + <p><span class="inline right"><a href="/uppsala/node/87"><img src="http://www.tilman.de/uppsala/system/files/images/12-06_Nicole-Ankunft.artikel.jpg" alt="Nicole kommt" title="Nicole kommt" class="image artikel" width="141" height="188" /></a><span class="caption" style="width: 139px;"><strong>Nicole kommt</strong></span></span>Damit ich dieses Jahr nicht nur ein Stück Kohle in meinem Weihnachtsstrumpf finde, habe ich beschlossen schnell noch Ordnung zu machen und endlich über die letzten beiden Wochen zu schreiben, schließlich war ja auch einiges los. +Zuerst einmal kam am Nikolaustag Nicole zu Besuch und beglückte uns mit selbstgebackenen Keksen, einigen wichtigen Mitbringseln aus Berlin (Schuhe! Fahrradschlüssel!) und natürlich nicht zuletzt ihrer Anwesenheit. Leider war zwei Tage später die Abschlusspräsentation für unser Projekt fällig, so dass Nicole selbst erst einmal einiges an Zeit mit unseren schwedischen und amerikanischen Kommilitonen verbringen durfte. <br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/97">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/97#comment + Besuch + Sun, 24 Dec 2006 19:35:12 +0100 + Tilman + 97 at http://www.tilman.de/uppsala + + + Besuch! + http://www.tilman.de/uppsala/node/83 + <p><span class="inline right"><a href="/uppsala/node/81"><img src="http://www.tilman.de/uppsala/system/files/images/Besucherhausschuhe.artikel.jpg" alt="Besucherhausschuhe" title="Besucherhausschuhe" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Besucherhausschuhe</strong></span></span>Letzte Woche am Mittwoch, pünktlich um 11.55 Uhr, ist Martin in Arlanda gelandet. Leider fehlte uns noch Erfahrung mit Germanwings-Passagieren, so dass wir genau am anderen Ende des Flughafens geparkt hatten. Über das ganze Hin- und Her-Gelatsche hab ich dann auch das offizielle Ankunfts-Foto vergessen. Als wir Martin plus Tasche dann im Auto hatten sind wir erst mal nach Uppsala gefahren, um einen Studenten-Ausweis zu besorgen. <br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/83">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/83#comment + Besuch + Thu, 07 Dec 2006 01:33:01 +0100 + Tilman + 83 at http://www.tilman.de/uppsala + + + Schnee!!! + http://www.tilman.de/uppsala/node/74 + <p><span class="inline right"><a href="/uppsala/node/71"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0788_0.artikel.jpg" alt="Alles weiß!" title="Alles weiß!" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Alles weiß!</strong></span></span>Wir dachten wir sehen nicht richtig, als wir an Halloween in der Schlange zur Party von Snerikes, einer der Nationen, standen. Da rieselte leise der Schnee auf uns herab. "I have never seen snow before!" staunte ein Mädchen hinter uns. Die Begeisterung wurde am nächsten Morgen aber dann im Schnee erstickt - Schneesturm und kein Ende abzusehen! Wie passend, dass hier in Schweden ab dem 1. November Winterreifen Pflicht sind, aber das hatten wohl nicht so viele ernst genommen. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/74">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/74#comment + Besuch + Leben in Schweden + Sat, 04 Nov 2006 15:04:28 +0100 + Bettina + 74 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/taxonomy/term/4/0/Descr.WD3 b/www/uppsala/taxonomy/term/4/0/Descr.WD3 new file mode 100644 index 0000000..38d4aa3 Binary files /dev/null and b/www/uppsala/taxonomy/term/4/0/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/4/0/feed b/www/uppsala/taxonomy/term/4/0/feed new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/4/Descr.WD3 b/www/uppsala/taxonomy/term/4/Descr.WD3 new file mode 100644 index 0000000..d1fde3e Binary files /dev/null and b/www/uppsala/taxonomy/term/4/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/4/default.htm b/www/uppsala/taxonomy/term/4/default.htm new file mode 100644 index 0000000..9291580 --- /dev/null +++ b/www/uppsala/taxonomy/term/4/default.htm @@ -0,0 +1,20 @@ + + + + Uppsala - Reise + http://www.tilman.de/uppsala/taxonomy/term/4/0 + + de + + Angekommen + http://www.tilman.de/uppsala/node/13 + <p><span class="inline right"><a href="/uppsala/node/19"><img src="http://www.tilman.de/uppsala/system/files/images/Bild041.artikel.jpg" alt="Auf der Fähre" title="Auf der Fähre" class="image artikel" width="188" height="150" /></a><span class="caption" style="width: 186px;"><strong>Auf der Fähre</strong></span></span> Die Hinfahrt hat Spaß gemacht. Das erste Zwischenziel war Rostock, wo wir übrigens zwei Stunden zu früh ankamen, weil diverse Mütter Angst hatten, dass wir unsere Fähre verpassen. Als wir dann endlich auf dem Schiff waren, haben wir uns schon halb wie in Schweden gefühlt, außer den deutschen Truckern haben alle nur noch Schwedisch geredet. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/13">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/13#comment + Reise + Sun, 27 Aug 2006 23:41:59 +0200 + Bettina + 13 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/taxonomy/term/5/0/Descr.WD3 b/www/uppsala/taxonomy/term/5/0/Descr.WD3 new file mode 100644 index 0000000..e469109 Binary files /dev/null and b/www/uppsala/taxonomy/term/5/0/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/5/0/feed b/www/uppsala/taxonomy/term/5/0/feed new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/5/Descr.WD3 b/www/uppsala/taxonomy/term/5/Descr.WD3 new file mode 100644 index 0000000..7788ff5 Binary files /dev/null and b/www/uppsala/taxonomy/term/5/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/5/default.htm b/www/uppsala/taxonomy/term/5/default.htm new file mode 100644 index 0000000..204e5e2 --- /dev/null +++ b/www/uppsala/taxonomy/term/5/default.htm @@ -0,0 +1,22 @@ + + + + Uppsala - Technik + http://www.tilman.de/uppsala/taxonomy/term/5/0 + + de + + Drupal und Image: Zugriff auf Bilder (und Artikel) beschränken + http://www.tilman.de/uppsala/node/84 + <p><span style="font-style:italic">Hinweis: Wer nur am Uppsala-Blog und weniger an Content-Management-Software interessiert ist, kann hier aufhören zu lesen.</span></p> + +<p>Ich hatte schon länger vor, den Zugriff auf die (mit <a href="http://drupal.org/project/image" class="bb-url">Image</a> hochgeladenen) Bilder in diesem Blog derart zu beschränken, dass nur angemeldete Benutzer die Bilder in voller Auflösung betrachten können. Zunächst hatte ich nach einem Modul gesucht, das den Zugriff nach dem Typ des Nodes beschränkt um die Bilder nicht einzeln schützen zu müssen, war aber nicht fündig geworden. Also habe ich zunächst einmal <a href="http://drupal.org/project/simple_access" class="bb-url">Simple Access</a> installiert, mit dem man den Zugriff auf einzelne Nodes für bestimmte Nutzergruppen freigeben kann, zumal ich inzwischen eventuell auch einzelne Artikel schützen wollte.<br /> +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/84">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/84#comment + Technik + Thu, 07 Dec 2006 02:20:29 +0100 + Tilman + 84 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/taxonomy/term/5/default.htm.primary b/www/uppsala/taxonomy/term/5/default.htm.primary new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/6/0/Descr.WD3 b/www/uppsala/taxonomy/term/6/0/Descr.WD3 new file mode 100644 index 0000000..38d4aa3 Binary files /dev/null and b/www/uppsala/taxonomy/term/6/0/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/6/0/feed b/www/uppsala/taxonomy/term/6/0/feed new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/6/Descr.WD3 b/www/uppsala/taxonomy/term/6/Descr.WD3 new file mode 100644 index 0000000..26a3aba Binary files /dev/null and b/www/uppsala/taxonomy/term/6/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/6/default.htm b/www/uppsala/taxonomy/term/6/default.htm new file mode 100644 index 0000000..7d75b5e --- /dev/null +++ b/www/uppsala/taxonomy/term/6/default.htm @@ -0,0 +1,20 @@ + + + + Uppsala - Uni + http://www.tilman.de/uppsala/taxonomy/term/6/0 + + de + + Studieren in Schweden + http://www.tilman.de/uppsala/node/48 + <p>Nach längerer Pause werde ich mal etwas über den wichtigsten Grund für die lange Artikelpause schreiben: Die Uni.<br /> +<span class="inline left"><a href="/uppsala/node/47"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN4175.artikel.JPG" alt="Matematiskt- Informationsteknologiskt Centrum" title="Matematiskt- Informationsteknologiskt Centrum" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Matematiskt- Informationsteknologiskt Centrum</strong></span></span>Das Studieren ist hier etwas anders organisiert als in Deutschland. Der wichtigste Unterschied ist das Fehlen eines fixen Stundenplans - die Vorlesungen finden jede Woche zu unterschiedlichen Zeiten und oft auch in unterschiedlichen Räumen statt. Am Anfang hat man uns erklärt, dass die Idee dabei ist, dass die Studenten jede Vorlesung wählen können sollen. Der Vorteil der ständig wechselnden Termine ist, dass zwei Vorlesungen nicht komplett an parallelen Terminen laufen. Der Nachteil ist, dass es früher oder später immer die eine oder andere Kollision gibt. <br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/48">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/48#comment + Uni + Sun, 01 Oct 2006 09:41:36 +0200 + Tilman + 48 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/taxonomy/term/7/0/Descr.WD3 b/www/uppsala/taxonomy/term/7/0/Descr.WD3 new file mode 100644 index 0000000..e469109 Binary files /dev/null and b/www/uppsala/taxonomy/term/7/0/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/7/0/feed b/www/uppsala/taxonomy/term/7/0/feed new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/7/Descr.WD3 b/www/uppsala/taxonomy/term/7/Descr.WD3 new file mode 100644 index 0000000..9fc7655 Binary files /dev/null and b/www/uppsala/taxonomy/term/7/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/7/default.htm b/www/uppsala/taxonomy/term/7/default.htm new file mode 100644 index 0000000..99d5b88 --- /dev/null +++ b/www/uppsala/taxonomy/term/7/default.htm @@ -0,0 +1,45 @@ + + + + Uppsala - Kurioses + http://www.tilman.de/uppsala/taxonomy/term/7/0 + + de + + Lördagsgodis och Kanelbullar + http://www.tilman.de/uppsala/node/70 + <p><span class="inline left"><a href="/uppsala/node/66"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0546_1.artikel.jpg" alt="Typisch schwedische Handgriffe" title="Typisch schwedische Handgriffe" class="image artikel" width="181" height="188" /></a><span class="caption" style="width: 179px;"><strong>Typisch schwedische Handgriffe</strong></span></span>Schweden ist ein Land für mich. Meterlange Regale voller Marabou-Schokolade, kistenweise Smågodis, Schokoladenkuchen, bei dem tatsächlich endlich mal der Kuchen die Nebensache ist, und Kanelbullar. Da liegt nahe, dass Schweden Probleme mit übergewichtigen Kindern haben. Deswegen startete das staatliche Institut für Volksgesundheit schon vor vierzig Jahren die Kampange Lördagsgodis (dt.: Samstagssüßigkeiten). Danach sollten Kinder nur einmal in der Woche Süßes bekommen. Auf einigen Süßigkeitenverpackungen steht sogar sowas wie "Endlich wieder Samstag!". Aber ich passe mich hier auch gerne wieder an, denn die Schweden halten sich nicht an solche Ratschläge. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/70">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/70#comment + Kurioses + Leben in Schweden + Mon, 23 Oct 2006 17:54:15 +0200 + Bettina + 70 at http://www.tilman.de/uppsala + + + Bettina goes Hollywood + http://www.tilman.de/uppsala/node/39 + <p><span class="inline right"><a href="/uppsala/node/40"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0240.artikel.JPG" alt="Kyrkan i Bälinge" title="Kyrkan i Bälinge" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Kyrkan i Bälinge</strong></span></span>Hier in Uppsala kümmert man sich sehr um die Austauschstudenten. Für die Naturwissenschafter gibt es ein Programm, welches den neuen Studenten einen schwedischen Buddy zuordnet, der dafür sorgen soll, dass der Neuankömmling sich in der neuen Umgebung und mit der neuen Sprache nicht vollkommen verloren fühlt. Es geht darum einen Ansprechpartner zu haben, der sich in Uppsala bzw. Schweden auskennt, wenn irgendwelche Probleme auftreten. Mein Buddy heißt Anna und bis dahin kannte ich sie nur aus Emails. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/39">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/39#comment + Ausflug + Kurioses + Mon, 25 Sep 2006 23:39:30 +0200 + Bettina + 39 at http://www.tilman.de/uppsala + + + Klotz am Bein und keine Münzen + http://www.tilman.de/uppsala/node/35 + <p><span class="inline left"><a href="/uppsala/node/23"><img src="http://www.tilman.de/uppsala/system/files/images/Waldo.artikel.jpg" alt="Where&#039;s Waldo?" title="Where&#039;s Waldo?" class="image artikel" width="188" height="99" /></a><span class="caption" style="width: 186px;"><strong>Where's Waldo?</strong></span></span> Wir sind mit dem Auto gekommen. Prinzipiell eine gute Sache, ansonsten wäre ja auch unser Gepäckrekord nicht möglich gewesen. Hier in Uppsala ist ein Auto allerdings, wie sich schnell gezeigt hat, nicht unbedingt von Vorteil. Zunächst ist da die Verkehrsführung: Die Innenstadt hat im wesentlichen drei Arten von Straßen: Solche, durch die nur Taxis und Fahrräder in beiden Richtungen fahren dürfen, solche, durch die überhaupt nur Taxis und Fahrräder fahren dürfen und Sackgassen, an deren Ende ein Durchgang für Fahrräder ist. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/35">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/35#comment + Kurioses + Leben in Schweden + Mon, 04 Sep 2006 23:17:05 +0200 + Tilman + 35 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/taxonomy/term/8/0/Descr.WD3 b/www/uppsala/taxonomy/term/8/0/Descr.WD3 new file mode 100644 index 0000000..e469109 Binary files /dev/null and b/www/uppsala/taxonomy/term/8/0/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/8/0/feed b/www/uppsala/taxonomy/term/8/0/feed new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/taxonomy/term/8/Descr.WD3 b/www/uppsala/taxonomy/term/8/Descr.WD3 new file mode 100644 index 0000000..8c0dc29 Binary files /dev/null and b/www/uppsala/taxonomy/term/8/Descr.WD3 differ diff --git a/www/uppsala/taxonomy/term/8/default.htm b/www/uppsala/taxonomy/term/8/default.htm new file mode 100644 index 0000000..94b5aa1 --- /dev/null +++ b/www/uppsala/taxonomy/term/8/default.htm @@ -0,0 +1,78 @@ + + + + Uppsala - Leben in Schweden + http://www.tilman.de/uppsala/taxonomy/term/8/0 + + de + + Weihnachten + http://www.tilman.de/uppsala/node/120 + <p><span class="inline right"><a href="/uppsala/node/115"><img src="http://www.tilman.de/uppsala/system/files/images/Baum03_k.artikel.jpg" alt="Schwedischer Weihnachtsbaum" title="Schwedischer Weihnachtsbaum" class="image artikel" width="114" height="188" /></a><span class="caption" style="width: 112px;"><strong>Schwedischer Weihnachtsbaum</strong></span></span>Wir hatten uns, anders als ein Großteil der Austauschstudenten, entschlossen, über Weihnachten in Uppsala zu bleiben. Bis zuletzt hofften wir auf Schnee, der sich aber nicht so wirklich einstellen wollte. Weihnachten wird hier, wie in Deutschland, am 24. gefeiert und wir wollten an diesem Tag in Upplands Nation gehen, deren öffentliche Weihnachtsfeier irgendwo in den Studieninformationen empfohlen worden war. Also sind wir gegen Mittag in die Stadt gefahren, um uns mal umzuschauen. Die Feier war auch tatsächlich schon am Laufen, wirkte allerdings mehr wie eine Seniorenverköstigung. Es war schwer jemanden zu finden, der mit etwas anderem als sich und seinem Essen beschäftigt war und da wir niemandem den Weihnachtsbraten streitig machen wollten, gingen wir weiter. Etwas zu Essen wäre uns so langsam aber doch recht gewesen, so dass wir uns Richtung Innenstadt bewegten und dabei nach einem geöffneten Café Ausschau hielten - nichts.<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/120">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/120#comment + Leben in Schweden + Thu, 28 Dec 2006 23:34:40 +0100 + Tilman + 120 at http://www.tilman.de/uppsala + + + Schnee!!! + http://www.tilman.de/uppsala/node/74 + <p><span class="inline right"><a href="/uppsala/node/71"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0788_0.artikel.jpg" alt="Alles weiß!" title="Alles weiß!" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Alles weiß!</strong></span></span>Wir dachten wir sehen nicht richtig, als wir an Halloween in der Schlange zur Party von Snerikes, einer der Nationen, standen. Da rieselte leise der Schnee auf uns herab. "I have never seen snow before!" staunte ein Mädchen hinter uns. Die Begeisterung wurde am nächsten Morgen aber dann im Schnee erstickt - Schneesturm und kein Ende abzusehen! Wie passend, dass hier in Schweden ab dem 1. November Winterreifen Pflicht sind, aber das hatten wohl nicht so viele ernst genommen. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/74">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/74#comment + Besuch + Leben in Schweden + Sat, 04 Nov 2006 15:04:28 +0100 + Bettina + 74 at http://www.tilman.de/uppsala + + + Lördagsgodis och Kanelbullar + http://www.tilman.de/uppsala/node/70 + <p><span class="inline left"><a href="/uppsala/node/66"><img src="http://www.tilman.de/uppsala/system/files/images/DSCN0546_1.artikel.jpg" alt="Typisch schwedische Handgriffe" title="Typisch schwedische Handgriffe" class="image artikel" width="181" height="188" /></a><span class="caption" style="width: 179px;"><strong>Typisch schwedische Handgriffe</strong></span></span>Schweden ist ein Land für mich. Meterlange Regale voller Marabou-Schokolade, kistenweise Smågodis, Schokoladenkuchen, bei dem tatsächlich endlich mal der Kuchen die Nebensache ist, und Kanelbullar. Da liegt nahe, dass Schweden Probleme mit übergewichtigen Kindern haben. Deswegen startete das staatliche Institut für Volksgesundheit schon vor vierzig Jahren die Kampange Lördagsgodis (dt.: Samstagssüßigkeiten). Danach sollten Kinder nur einmal in der Woche Süßes bekommen. Auf einigen Süßigkeitenverpackungen steht sogar sowas wie "Endlich wieder Samstag!". Aber ich passe mich hier auch gerne wieder an, denn die Schweden halten sich nicht an solche Ratschläge. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/70">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/70#comment + Kurioses + Leben in Schweden + Mon, 23 Oct 2006 17:54:15 +0200 + Bettina + 70 at http://www.tilman.de/uppsala + + + Healthy Fast Food + http://www.tilman.de/uppsala/node/63 + <p>Letzte Woche waren wir bei <span style="font-style:italic"><a href="http://www.max.se/en/" class="bb-url">Max Burger</a></span>. Das ist eine schwedische Fast-Food-Kette, die bessere Burger als McDonald's und Burger King macht. Das alleine wäre vielleicht noch nicht so etwas Besonderes, aber sie treiben es noch etwas weiter.<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/63">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/63#comment + Ausflug + Leben in Schweden + Tue, 17 Oct 2006 21:40:16 +0200 + Tilman + 63 at http://www.tilman.de/uppsala + + + Klotz am Bein und keine Münzen + http://www.tilman.de/uppsala/node/35 + <p><span class="inline left"><a href="/uppsala/node/23"><img src="http://www.tilman.de/uppsala/system/files/images/Waldo.artikel.jpg" alt="Where&#039;s Waldo?" title="Where&#039;s Waldo?" class="image artikel" width="188" height="99" /></a><span class="caption" style="width: 186px;"><strong>Where's Waldo?</strong></span></span> Wir sind mit dem Auto gekommen. Prinzipiell eine gute Sache, ansonsten wäre ja auch unser Gepäckrekord nicht möglich gewesen. Hier in Uppsala ist ein Auto allerdings, wie sich schnell gezeigt hat, nicht unbedingt von Vorteil. Zunächst ist da die Verkehrsführung: Die Innenstadt hat im wesentlichen drei Arten von Straßen: Solche, durch die nur Taxis und Fahrräder in beiden Richtungen fahren dürfen, solche, durch die überhaupt nur Taxis und Fahrräder fahren dürfen und Sackgassen, an deren Ende ein Durchgang für Fahrräder ist. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/35">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/35#comment + Kurioses + Leben in Schweden + Mon, 04 Sep 2006 23:17:05 +0200 + Tilman + 35 at http://www.tilman.de/uppsala + + + Välkommen till Lilla Sunnersta + http://www.tilman.de/uppsala/node/16 + <p><span class="inline left"><a href="/uppsala/node/17"><img src="http://www.tilman.de/uppsala/system/files/images/Schild_cutin.artikel.jpg" alt="Lageplan Lilla Sunnersta" title="Lageplan Lilla Sunnersta" class="image artikel" width="188" height="141" /></a><span class="caption" style="width: 186px;"><strong>Lageplan Lilla Sunnersta</strong></span></span> +Wir wohnen in Lilla Sunnersta, einem Wohnheim ganz im Süden der Stadt. Eigentlich ist es schon eher ein Studentendorf. Es ist erst seit einem Jahr fertiggestellt, supermodern und hat alles, was man sich wünschen kann. Wir haben zwei Zimmer, eine große Wohnküche und ein eigenes Bad. Alles ist komplett ausgestattet: Esstisch, zwei Schreibtische, Stühle, Couch, Bilder an den Wänden und Schränke ohne Ende. Fernseher, ein großer Kühlschrank mit drei Gefrierschubladen, Geschirr und Töpfe - alles da. Die meisten Studentenwohnungen sind sicherlich schlechter ausgestattet. +<br class="clear" /></p><p><a href="http://www.tilman.de/uppsala/node/16">Weiterlesen</a></p> + http://www.tilman.de/uppsala/node/16#comment + Leben in Schweden + Tue, 29 Aug 2006 00:33:53 +0200 + Tilman + 16 at http://www.tilman.de/uppsala + + + diff --git a/www/uppsala/taxonomy/term/Descr.WD3 b/www/uppsala/taxonomy/term/Descr.WD3 new file mode 100644 index 0000000..d656f17 Binary files /dev/null and b/www/uppsala/taxonomy/term/Descr.WD3 differ diff --git a/www/uppsala/themes/chameleon/Descr.WD3 b/www/uppsala/themes/chameleon/Descr.WD3 new file mode 100644 index 0000000..924d393 Binary files /dev/null and b/www/uppsala/themes/chameleon/Descr.WD3 differ diff --git a/www/uppsala/themes/chameleon/common.css b/www/uppsala/themes/chameleon/common.css new file mode 100644 index 0000000..839ac64 --- /dev/null +++ b/www/uppsala/themes/chameleon/common.css @@ -0,0 +1,151 @@ +/* $Id: common.css,v 1.9 2006/01/20 09:09:18 dries Exp $ */ + +/* +** HTML elements +*/ +a, a:link, a:active { + font-weight: bold; + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +body { + margin: 0; + padding: 3em; + font-size: .9em; + line-height: 1.3em; +} +blockquote { + font-style: italic; +} +table { + margin: 0; + padding: .5em; + border-collapse: collapse; +} +code, pre { + font-size: 1em; +} +pre { + font-size: 0.8em; + padding: 1em; + background: #eee; +} +li { + padding-bottom: .3em; +} +h1, h2, h3, h4, h5, h6 { + margin-bottom: .25em; +} +h1 { + font-size: 1.3em; +} +h2 { + font-size: 1.2em; +} +h3 { + font-size: 1.1em; +} +h4, h5, h6 { + font-size: 1em; +} +p { + margin: 0 0 .5em 0; +} +br { + line-height: 0.6em; +} + +/* +** Page layout blocks / IDs +*/ +#header { + margin-bottom: 2em; +} +#help { + font-size: 0.8em; +} +#content { + clear: both; +} +#sidebar-left, #sidebar-right { + vertical-align: top; + padding: 10px; +} +#main { + padding-left: 1em; + padding-right: 1em; + vertical-align: top; +} +#footer { + font-size: 0.8em; + padding-top: 2em; + text-align: center; +} + +/* +** Common declarations for child classes of node, comment, block, box etc +*/ +.title { + margin: 0 0 .25em 0; +} +.content { + margin: 0 0 .5em 0; +} +.links { + font-size: 0.8em; + line-height: 1.25em; +} +.block { + width: 180px; +} +.messages { + padding: 0.3em; + margin: 0.5em 0em 0.5em 0em; +} +.status { + border: 1px solid #3a3; + color: #3a3; +} +.error, form-item input.error { + border: 1px solid red; + color: red; +} + +/* +** Common navigation links added on the admin/themes/settings page +*/ +.navlinks { + padding: 0em 0.5em 1.5em 0em; + clear: both; +} +.primary a { + font-size: 1.0em; + padding: 0em 0.5em 0em 0em; +} +.secondary a { + font-size: 0.9em; + padding: 0em 0.5em 0em 0em; +} + +/* +** Logo Image Positioning +*/ +#header img { + float: left; + padding: 0em 2em .5em 0em; +} +#header { + clear: both; +} +/* +** Module specific styles +*/ +.form-item textarea { + font-size: 1em; +} +#aggregator .feed-source { + border: 1px solid gray; + padding: 1em; +} diff --git a/www/uppsala/themes/chameleon/marvin/Descr.WD3 b/www/uppsala/themes/chameleon/marvin/Descr.WD3 new file mode 100644 index 0000000..394167a Binary files /dev/null and b/www/uppsala/themes/chameleon/marvin/Descr.WD3 differ diff --git a/www/uppsala/themes/chameleon/marvin/bullet.png b/www/uppsala/themes/chameleon/marvin/bullet.png new file mode 100644 index 0000000..937c8ed Binary files /dev/null and b/www/uppsala/themes/chameleon/marvin/bullet.png differ diff --git a/www/uppsala/themes/chameleon/marvin/druplicon-watermark.png b/www/uppsala/themes/chameleon/marvin/druplicon-watermark.png new file mode 100644 index 0000000..4f91cd3 Binary files /dev/null and b/www/uppsala/themes/chameleon/marvin/druplicon-watermark.png differ diff --git a/www/uppsala/themes/chameleon/marvin/logo.png b/www/uppsala/themes/chameleon/marvin/logo.png new file mode 100644 index 0000000..320fa96 Binary files /dev/null and b/www/uppsala/themes/chameleon/marvin/logo.png differ diff --git a/www/uppsala/themes/chameleon/marvin/style.css b/www/uppsala/themes/chameleon/marvin/style.css new file mode 100644 index 0000000..911bb4c --- /dev/null +++ b/www/uppsala/themes/chameleon/marvin/style.css @@ -0,0 +1,118 @@ +/* $Id: style.css,v 1.2 2004/08/20 09:34:53 dries Exp $ */ + +/* +** HTML elements +*/ +body { + background: #fff url(druplicon-watermark.png) no-repeat top right; + font-family: arial, helvetica, sans-serif; +} +a:link { + color: #656 +} +a:visited { + color: #656 +} +a:active { + color: #ccc +} +h2 { + background-color: #eaeaea; + border: solid 1px #777; + font-size: 1.1em; + margin: 0.5em 0em 0.5em 0em; + padding: 0.5em; +} +h2.title { + background-color: #fff; + border: solid 1px #888; + margin-top: 1em; +} +p { + margin: 0 1em 1em 0; + padding: 0; +} +table { + font-size: 1em; +} + +/* +** Page layout blocks / IDs +*/ +#main { + width: 80%; +} +#header .title { + padding-top: .75em; +} + +/* +** Common declarations for child classes of node, comment, block, box etc +*/ +.node .submitted { + color: #7c7c7c; + font-size: 0.9em; + float: left; + padding: 0.5em 0em 0.5em 1em; +} +.node .taxonomy { + color: #7c7c7c; + font-size: 0.9em; + float: right; +} +.node .content { + clear: both; + padding-left: 1em; +} +.node .links { + padding: 1em; +} +.comment { + border: solid 1px #777; + margin: 0.5em 0 0.5em 0; + padding: 0.5em; +} +.block { + margin-bottom: 10px; + font-size: 0.9em; +} +.block .content { + border: solid 1px #888; + border-top: none; + margin: 0; + padding: 5px; +} +.block h2.title { + margin: 0; +} + +/* +** Module specific styles +*/ +.item-list ul li { + list-style-image: url(bullet.png); +} +.calendar .day-today { + background-color: #ccc; +} +.calendar .day-selected { + background-color: #bbb; +} +.calendar .header-month { + background-color: #ddd; +} +.calendar .header-week { + background-color: #ccc; +} +.calendar .day-blank { + background-color: #ddd; +} +.calendar .day-link a { + color: #000; +} +.calendar .row-week { + color: #aaa; +} +.path, .path a, .path a:visited { + color: #888; +} \ No newline at end of file diff --git a/www/uppsala/user/Descr.WD3 b/www/uppsala/user/Descr.WD3 new file mode 100644 index 0000000..d5da4f5 Binary files /dev/null and b/www/uppsala/user/Descr.WD3 differ diff --git a/www/uppsala/user/default.htm b/www/uppsala/user/default.htm new file mode 100644 index 0000000..5c8d604 --- /dev/null +++ b/www/uppsala/user/default.htm @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F114_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F114_252523comment_form new file mode 100644 index 0000000..bd5a72b --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F114_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F120_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F120_252523comment_form new file mode 100644 index 0000000..a9658f2 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F120_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F13_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F13_252523comment_form new file mode 100644 index 0000000..dc75c29 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F13_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F16_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F16_252523comment_form new file mode 100644 index 0000000..4832572 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F16_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F27_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F27_252523comment_form new file mode 100644 index 0000000..ad8a5c2 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F27_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F31_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F31_252523comment_form new file mode 100644 index 0000000..9831b8b --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F31_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F35_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F35_252523comment_form new file mode 100644 index 0000000..a8b7133 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F35_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F39_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F39_252523comment_form new file mode 100644 index 0000000..9c9986c --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F39_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F48_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F48_252523comment_form new file mode 100644 index 0000000..2915a98 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F48_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F63_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F63_252523comment_form new file mode 100644 index 0000000..a36b904 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F63_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F65_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F65_252523comment_form new file mode 100644 index 0000000..b628b10 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F65_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F70_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F70_252523comment_form new file mode 100644 index 0000000..46a0279 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F70_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F74_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F74_252523comment_form new file mode 100644 index 0000000..af07979 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F74_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F78_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F78_252523comment_form new file mode 100644 index 0000000..7814e50 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F78_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F80_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F80_252523comment_form new file mode 100644 index 0000000..63dbe90 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F80_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F83_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F83_252523comment_form new file mode 100644 index 0000000..d40aa32 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F83_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F83_252523comment_form.primary b/www/uppsala/user/login@destination=comment_2Freply_2F83_252523comment_form.primary new file mode 100644 index 0000000..e69de29 diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F84_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F84_252523comment_form new file mode 100644 index 0000000..9789e61 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F84_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F85_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F85_252523comment_form new file mode 100644 index 0000000..5ecd1cf --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F85_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F86_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F86_252523comment_form new file mode 100644 index 0000000..5119ca1 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F86_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/login@destination=comment_2Freply_2F97_252523comment_form b/www/uppsala/user/login@destination=comment_2Freply_2F97_252523comment_form new file mode 100644 index 0000000..42feb47 --- /dev/null +++ b/www/uppsala/user/login@destination=comment_2Freply_2F97_252523comment_form @@ -0,0 +1,66 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+
+ + +
Bitte geben Sie Ihren Uppsala-Benutzernamen an.
+
+
+ + +
Geben Sie hier das zugehörige Passwort an.
+
+ + + +
+ + +
+ + diff --git a/www/uppsala/user/password b/www/uppsala/user/password new file mode 100644 index 0000000..cf4ba0e --- /dev/null +++ b/www/uppsala/user/password @@ -0,0 +1,64 @@ + + + + Benutzerkonto | Uppsala + + + + + + + + + + + + + + + +
+

Benutzerkonto

+ + +
+

Bitte geben Sie Ihren Benutzernamen oder Ihre E-Mail-Adresse an.

+ + +
+
+ + +
+ + + +
+ + +
+ +