- really!

git: delete remote tags

git push origin :refs/tags/current_server

list tags and binaries of E@H Apps
lynx -dump | sed -n 's%.*/%%;s/.*\(einstein_[^ ]*\).*/\1/p' > download_files
for i in `git tag | fgrep einstein_S5GC1_`; do echo "   | $i | `git log -1 $i | sed -n 's/^commit \(........\).*/\1/p'` |" `fgrep $i download_files` "|" ; done

awk: count identical lines


awk '($0 == l){c++;next};(NR>1){print l,c};{l=$0;c=1};END{print l,c}'


awk '{ a[$0]=a[$0]+1; } END { for (l in a) { print a[l],l; } }'

awk: split log

awk '/^201[0-9]-[01][0-9]-[0-3][0-9] /&&(d!=$1){if(f!=""){close(f);};d=$1;f="log." d};(f!=""){print >> f}'

rename E@H run
cvs up -A
for i in *S6Bucket* ; do mv $i `echo $i | sed "$sed"`; done
f=`cvs diff 2>&1 | sed -n 's/.*cannot find //p'`
cvs rm  $f
cvs add `echo $f | sed "$sed"`
sed -i~sed~ "$sed" *.C *.h *.m Makefile

cancel all workunits that have unsent results

update workunit set error_mask = error_mask | 16, transition_time = 0  where id in (select distinct workunitid from result where server_state = 2);

fix unable to look up public/pickup

touch /var/spool/postfix/public/pickup

git cherry-pick from different_branch HEAD down to commit (exclusively)

for c in `git log different_branch | sed -n '/commit/q;s/^commit //p' | awk '{c=$0" "c};END{print c}'`; do git cherry-pick $c; done

raise replication of remaining WUs for a run / application

update workunit set target_nresults = target_nresults + 2, transition_time = 0 where appid = 11 and canonical_resultid = 0 and error_mask = 0;

Jochen Hayek (IMAP Utils)

Blog Xing

Joel on Software

Add a BOINC forum

insert into forum set category=1, is_dev_blog=1, title="Technical News", description="Technical News from this project", orderID=-1;

Einstein@home / BOINC: Re-validate (e.g. validate error results)

mysql> UPDATE result SET outcome=1, validate_state=0 WHERE outcome=6 AND appid=26;
mysql> UPDATE workunit SET transition_time=0 WHERE canonical_resultid=0 AND appid=26;

Einstein@home Development machines Debian Etch VMWare server (eth1) Mac OS 10.5 Intel Mac OS Intel build machine (to be) Mac OS 10.3 PPC Mac OS PPC build machine (to be) Debian Woody "noupdate" compatibility Linux App build machine (VM) Windows XP SP2 w. VisualStudio .NET 2003 Windows build machine (VM) Mac OS 10.4 Intel Mac OS Intel test machine (small disk: 20 GB)

192.168.0.x from n0: denholm Debian Etch VMWare server (eth0) boincvm Ubuntu 7.04 server BOINC project server (EinTest) (VM, vmnet2)
Her's a sniplet from my .ssh/config:


Binatone DECT: How to Register a Handset to a base station

Unplug power adaptor from rear of base station and reconnect. Make sure that you take out the correct lead as you could remove the line cord. You now have 3 minutes to carry out the following procedure. On the new handset press Menu button and press an arrow button until REGISTER shows in display. Press OK. Display shows “BS 1 2 3 4” Press “1” then the display shows PIN. Enter pin code (default 0000) and press OK. The display shows SEARCH while the handset is searching for a base station. When it finds one, the RFPI number is displayed. Press OK.

configure gcc
vers=`pwd | sed 's%$%/%; s%.*/gcc-*\([0-9.]*\)/.*%\1%'`
../configure \
  --prefix=$pref/gcc-$vers \
  --with-local-prefix=$pref/gcc-$vers \
  --program-suffix=-$vers \
  --enable-languages=c,c++,objc \

distribute data
# generate hashes - way too slow...
while read f ; do echo `echo $f | md5sum | gawk '{print ( strtonum ( "0x" substr($1,1,6) ) % 1342 ) }'` $f ; done < /atlas/data/d03/EatH/S5R1_files.lst > S5R1_files_dist.lst

# generate "node" files (paths for each node node) from hash files
cat ../hash_files/hash_files_* | awk '{ n = "0000" ( $1 + 1 ); f = "n" substr(n,length(n)-3) ; print $2 >> f }'

# distribute files in 1340 / 30 groups
awk 'BEGIN { for(i=2;i<=1342;i++) { printf "n%0.4d\n",i } }' > nodes
split -l 30 nodes nodes_30_
for f in nodes_30_* ; do 
  ( for n in `cat $f` ; do 
      echo `date`: 
 ; rsh 
 sh -c '"xargs cp -a -t /local/EatH_results/S5R1/results < /atlas/data/d03/EatH/S5R1_distributed/nodes/$HOSTNAME"'
    done ) & 
done 2>&1 | tee nodes.log

# distribute to peers
dsh -aF40 'mkdir -p /local/EatH_results/S5R1/results/second'
dsh -aF40 'screen -d -m cp -a `hostname | awk '\''{ printf "/atlas/node/n%0.4d/EatH_results/S5R1/results/*\n", ( ( substr($1,length($1)-3) + 670 ) % 1342 ) + 1 }'\''` /local/EatH_results/S5R1/results/second'
dsh -aMF20 'screen -m -d mv /local/distributed/spray/data/EatH/S5R1/second/* /local/distributed/spray/data/EatH/S5R1'

# make directory (and second)
dsh -aMF10 'mkdir -p /local/distributed/spray/data/EatH/S5R3/second'
# initial copy
nohup dsh -MF30 -f ~/nodes 'rsync -a --no-relative --files-from=/atlas/data/d03/EatH/S5R3_dist/nodes/$HOSTNAME d04::EatH/S5R3 /local/distributed/spray/data/EatH/S5R3' &
# fetch from partners
dsh -aMF20 'rsync -Pvare rsh `hostname | awk '\''{ printf "n%0.4d\n", ( ( substr($1,length($1)-3) + 670 ) % 1342 ) + 1 }'\''`:/local/distributed /local'
# distribute rest
sed -n 's/^\(n....\):.*/\1/p' nohup.out | awk '{ printf "n%0.4d\n", ( ( substr($1,length($1)-3) + 670 ) % 1342 ) + 1 }' > nodes.bad
dsh -MF10 -f nodes.bad 'rsync -a --no-relative --files-from=/atlas/data/d03/EatH/S5R3_dist/nodes/`hostname | awk '\''{ printf "n%0.4d", ( ( substr($1,length($1)-3) + 670 ) % 1342 ) + 1 }'\''` d04::EatH/S5R3 /local/distributed/spray/data/EatH/S5R3/second' 
dsh -aMF20 'screen -m -d mv /local/distributed/spray/data/EatH/S5R3/second/* /local/distributed/spray/data/EatH/S5R3'

# make fallbacks
bema@d04:/data/distributed/fallback/EatH/S5R3$ time ( for i in `ls ~/S5R3_nodes/` ; do ( echo $i && mkdir -p $i && cd $i && sed s%^%/data/EatH/S5R3/% ~/S5R3_nodes/$i | xargs -l1 ln ) ; done )

dsh -aMF40 'f=/tmp/countfiles ; ls /local/distributed/spray/data/EatH/S5R1 > $f ; ls /atlas/data/d03/distributed/fallback/EatH/S5R1/$HOSTNAME | fgrep -vf $f ; rm -f $f' 2>&1 | tee missing.log

# redistribute S5R1 files based on 'files_per_cache_node-dist'
for c in `grep $HOSTNAME /atlas/data/d03/EatH/S5R1_dist/files_per_cache_node-dist | sed 's%.* %%'`; do l=`~/bin/cache_length /local/distributed/clone/spray/EatH/S5R1/$c`; i=0 ; while [ $i -lt $l ] ; do rsync -a `~/bin/get_file -d -c $c -i $i` /local/distributed/clone/spray/EatH/S5R1n ; i=`expr $i + 1`; done ; done

# generate new S5R1 caches
for i in * ; do ns=`sed -n "s/ $i\$//p" ../files_per_cache_node-dist` ; n1=`echo $ns | awk '{print $1}'` ; n2=`echo $ns | awk '{print $2}'` ; echo $i 
2 ;  awk -F\; '{printf "%s;/atlas/nodes/'"
2"'/distributed/spray/EatH/S5R1n;/atlas/data/d03/distributed/fallback/EatH/S5R1/%s\n",$1,$2}' $i > ../caches_new/$i ; done

# add overlapping for S5R1
for c in cache_* ; do echo $c ; f=`echo $c | sed 's/.*_//'`; while read l ; do ~/write_S5R1_search_params `echo "$l" | sed 's/;.*//'` | nawk '($1 == "Freq:") { f = $2 } ; ($1 == "FreqBand:") { if (f + $2 >= ('"$f"' + 0.5) * 0.999823179414003) {print "'"$l"'"} }' ; done < $c > ../caches_tmp/$c ; done
for i in 6 7 8 9; do ( for c in cache_14$i* ; do echo $c ; f=`echo $c | sed 's/.*_//'`; while read l ; do ~/write_S5R1_search_params `echo "$l" | sed 's/;.*//'` | nawk '($1 == "Freq:") { f = $2 } ; ($1 == "FreqBand:") { if (f + $2 >= ('"$f"' + 0.5) * 0.999823179414003) {print "'"$l"'"} }' ; done < $c > ../caches_tmp/$c ; done ) & done

  120  wc -l * > ../files_per_cache
  121  wc -l * > /local/bema/files_per_cache
  123  wc -l * > /local/bema/files_per_cache
  124  sort -n /local/bema/files_per_cache
  126  grep -v total /local/bema/files_per_cache | sort -n
  127  grep -v total /local/bema/files_per_cache | sort -n > /local/bema/files_per_cache_up
  128  grep -v total /local/bema/files_per_cache | sort -nr > /local/bema/files_per_cache_down
  528  history | grep files_per_cache

# generating cache files for S5R3
# sort_caches writes out the file followed by three node numbers (primary, secondary, fallback)
for i in cache_* ; do echo $i ; ~/atlas/S5R1_distribution/sort_caches < $i > ../caches_tmp/$i; done
cd ../caches_tmp
mkdir caches
for i in cache_*; do c=`echo $i | sed s/cache_// | awk '{printf "cache_%.2f",$1}'`; echo $c ; awk -F\; '{print $1 ";/atlas/node/" $2 "/distributed/spray/data/EatH/S5R3n;/atlas/node/" $3 "/distributed/spray/data/EatH/S5R3n;/atlas/data/d04/distributed/fallback/EatH/S5R3/" $4}' $i > caches/$c ; done
mkdir nodes
for i in cache_* ; do echo $i ; n=`awk -F\; '{print $2;exit}' $i`; awk -F\; '{print "/atlas/data/d04/distributed/fallback/EatH/S5R3/" $4 "/" $1;exit}' $i >> nodes/
; done
cd nodes
for i in * ; do cp $i `echo $i | awk '{ printf "n%0.4d\n", ( ( substr($1,length($1)-3) + 670 ) % 1342 ) + 1 }'` ; done
nohup dsh -aMF20 'date ; mkdir -p /local/distributed/spray/data/EatH/S5R3n ; cat /atlas/data/d03/EatH/S5R3_dist/caches_tmp/nodes/$HOSTNAME | xargs cp -a -t /local/distributed/spray/data/EatH/S5R3n ; date' & sleep 1 ; tail -f nohup.out

# trying to make randist work
for i in 20 200 800 1500; do
  rm -rf .randist ; dsh -MF20 -m "`head -$i /etc/dsh/machines.list | tr \\\\012 , | sed 's/,$//'`" screen -d -m /home/bema/
  while [ `ls .randist/waiting/ | wc -l` -gt 0]; do
    sleep 10

configure subversion client on PPC linux (YDL 4)
tar -xjvf subversion-1.4.6.tar.bz2
tar -xjvf subversion-deps-1.4.6.tar.bz2
cd subversion-1.4.6
./configure \
  --disable-multi \
  --disable-multilibs \
  --without-berkeley-db \
  --without-apache \
  --without-apxs \
  --without-swig \
  --with-ssl \
  --disable-shared \


fixed assimilator transcripts
for tr in *_transcript; do sed '/transcr/Q' $tr > $tr.head ; done
for tr in *_transcript; do awk '/transcr/{p=1;next};(p==1){p=2; print};(p==2){print}' $tr > $tr.tail ; done
for tr in *_transcript; do
    rm -f $tr.fixes $tr.broken $tr.double
    grep transcr $tr |
      while read l; do
         if [ "$l" = "$o" ]; then
            echo "$l" >>$tr.double;
            wu=`echo $l | sed 's/ [^ ]*$//'`
            pattern=`echo $l | sed 's%^\([^ ]*\) \[WU#[0-9]*\] \([^ ]*/\)validate_error_results_transcript%\2\1_*_0%'`
            files=`ls $pattern`
            test -n "$files" && for file in $files; do
                echo "$wu $file" >>$tr.fixes;
            echo "$l" >>$tr.broken;
    done 2>$tr.fixes.err;

Visual Studio Express Editions (VS2005 Deutsch)

How to turn on automatic logon in Windows XP

  1. Click Start, and then click Run.
  2. In the Open box, type control userpasswords2, and then click OK.
  3. Clear the "Users must enter a user name and password to use this computer" check box, and then click Apply.
  4. In the Automatically Log On window, type the password in the Password box, and then retype the password in the Confirm Password box.
  5. Click OK to close the Automatically Log On window, and then click OK to close the User Accounts window.


Mouse in VMWare Linux Guests X.Org 7.1 or Higher
  1. Install the vmmouse driver. Depending on the Linux distribution, the method for installing it varies. If the vmmouse driver package is not included in your distribution of Linux, check your distribution's Web site for a version of the vmmouse driver package you can download (the vmmouse driver package has vmmouse in its name).
  2. Edit the ServerLayout section of the file /etc/X11/xorg.conf so that it includes the following entry: InputDevice "Mouse[0]" "CorePointer"
  3. In the same file, also edit the InputDevice section for the primary mouse as follows:
    Section "InputDevice"
          Identifier "Mouse[0]"
          Driver "vmmouse"
          Option "Device" "/dev/input/mice"
          Option "Name" "VMware Pointing Device"

Start BOINC on testnodes

for i in `cat testnodes` ; do rsh $i '( cd /local/bema/BOINC && screen -d -m /opt/boinc/bin/boinc_client --redirectio --no_gui_rpc )

./tools/make_project  --project_root=$HOME/Projects/EinsteinAtHome --delete_prev_inst --drop_db_first EinsteinAtHome 'Einstein@Home'

PHP include avoiding warning

if (is_readable($file)) { include $file; }

css Zen Garden: The Beauty in CSS Design

get installed debian package list on a machine
  • dpkg --get-selections \* > /tmp/`hostname`.packages
install packages from the list
  • dpkg --set-selections < dpkg.packages
  • apt-get -u dselect-upgrade

hostname in Yellow Dog Linux

edit /etc/sysconfig/network

echo send host-name \"`hostname`\"\; >> /etc/dhclient-eth0.conf

find missing result files in cache files
cat cache_825 |
sed 's/;.*//;s/h1_[0-9]*\.\([0-9][0-9]\)_S5R3__\([0-9]*\)_.*/\1 \2/' | 
sort -n -k1,1 -k 2,2 | 
awk 'BEGIN { f = -1 };
     ( $1 != f ) { if ( $2 != 0 ) { print } ; f = $1 ; j = 0 ; next };
     ( $2 == j + 1 ) { j++ ; next };
     { j++ ; print f, j }'

extend PYTHONPATH within Python

sys.path.insert(0, "C:/Program Files/Apache Group/Apache/cgi-bin")

Install proprietary ATI & NVidia drivers on Debian / Ubuntu


Resolving murrine_style_draw_box: assertion `height > -1'= (Ubuntu, gnome)

edit /usr/share/themes/Ambiance/gtk-2.0/gtkrc parameter GtkRange::trough-under-steppers change to 1

X Screensaver Construction Kit



enscript --landscape --columns=2 --line-numbers --pretty-print --color --media=A4 file.c

Locality scheduling tag files

Tag files (empty) are called "marker files" in the wokunit generator's code. These files bear the name of the data file (see above) concerned.

Names and purposes:

  • locality_scheduling/need_work
    1. Created (touched) by Scheduler as indicator
    2. Read by (trigger for) Workunit Generator
    3. Removed by Workunit Generator when done
    • File name examples (S5R1):
      • grid_0060_l_T03_S5R1.dat (TODO: what's the purpose of these files???)
      • h1_0215.5_S5R1
  • locality_scheduling/work_available(advertise file names)
    1. Created (touched) by Workunit Generator if work is available for a certain data file
    2. Removed by Workunit Generator
      1. if working_set_removal exists
      2. if not advertising
    3. Read by Scheduler to get random file name
    • File name examples (S5R1):
      • h1_0215.5_S5R1 (TODO: how can work be needed while available???)
  • locality_scheduling/no_work_available
    1. Created by Workunit Generator if it couldn't create more workunits for a requested (needed) data file
    2. Read by Scheduler. If file is found, don't even attempt to request more workunits for listed data files
  • locality_scheduling/working_set_removal (no workunits left in database for a requested (needed) data file)
    1. Read by Workunit Generator. If file is found, don't advertise data file
    2. Created by Scheduler if no workunit exists for a given data file

PSS compilation
cvs -d '' login
cvs -d '' co pss
cd pss
cvs up
autoreconf --install --force
mkdir -p ../../build/pss
cd ../../build/pss
../../source/pss/configure CPPFLAGS="-I$PREFIX/include" LDFLAGS="-L$PREFIX/lib" LIBS=-lm --prefix="$PREFIX" --disable-shared
make uninstall && make clean && make && make install
( cd "$PREFIX/include" && sed -i~ 's%//.*%%' pss_*.h novas.h daspostare.h )

gcc debug information in separate file
  • objcopy --only-keep-debug prog prog.gnu_debuglink.debug
  • objcopy --strip-all prog prog.gnu_debuglink
  • objcopy --add-gnu-debuglink=prog.gnu_debuglink.debug prog.gnu_debuglink

configure automake verbosity (CC,CCLD etc)
  • configure with --disable-silent-rules
  • see silent-rules for details

boot Linux from Windows XP Bootloader

double inclusion protection
for name in pss_math.h pss_snag.h pss_sfc.h ; do
  header=`find . -name "$name"`
  macro=`echo "$header" | sed 's%.*/%_HEADER_%' | tr a-z. A-Z__`
  cp "$header" "$header~" &&
  awk "BEGIN {print \"#ifndef $macro\\n#define $macro\\n\"};
       END   {print \"\\n#endif /* $macro */\"}" "$header~" > "$header"

Enable the login shell for the Gnome terminal

As shipped, the Gnome terminal does not spawn a login shell. To get the login shell for new Gnome terminal window, you need to edit your preferences. Go to Edit > Current Profile > Title and Command and then select the Run command as a login shell option.

Burn Double-Layer Video-DVD with custom layer break

libtoolize not found
  • look for glibtoolize

add authorized public key on remote machine

ssh remote-machine mkdir -p .ssh ';' cat '>>' .ssh/authorized_keys < ~/.ssh/

Windows 7 (and Vista 32 Bit) God Mode
  • create Folder named GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}

git reverse cherry-pick
for c in `git log pass_percentage_by_app_version_id | sed -n '/43562188dd702d2ae96affc478306d94b9b09fc0/q;s/^commit //p' | awk '{c=$0" "c};END{print c}'`; do echo $c; done

app selection add new app to users project specific preferences
project_prefs = REPLACE(REPLACE(project_prefs,
<app_id>","<app_id>") WHERE project_prefs LIKE "%<app_id>%";

gcc print include path
cc1=`$CC -print-prog-name=cc1`
dirs=`$cc1 -v < /dev/null 2>&1 | grep '^ */'`

Make diff Use Full Terminal Width in Side-by-Side Mode
alias diff='diff -W $(tput cols)'

Mac OS X

add username to group

dseditgroup -o edit -u adminname -p -a username -t user group

restart remote management / VNC

Apple Remote Desktop: Configuring remotely via command line (kickstart)

sudo /System/Library/CoreServices/RemoteManagement/
  • -help
  • -restart -agent
  • -deactivate
  • -activate

view git diff with FileMerge
git config --global difftool.prompt false
git config --global diff.tool filemerge
git config --global difftool.filemerge.cmd 'opendiff "$LOCAL" "$REMOTE" -merge "$MERGED"'

VMWare Fusion: re-enable Boot Camp Partition

delete the /Users/${USER}/Library/Application Support/VMware Fusion/Virtual Machines/Boot Camp folder

list files installed by Installer, e.g. fro uninstalling (Qt)

If you installed Qt via mpkg (versus building from source), Look for the Trolltech or Qt4.4 pkg file under /Library/Receipts/. Under Contents, you'll find a file called In the terminal, do: lsbom This will print out the list the full pathnames of all files that were installed.

Eject and other menu bar icons
  • Navigate to /System/Library/CoreServices/Menu Extras
  • Double-click on

fink on SnowLeopard
cvs login
cvs -z3 co -P fink
cd fink ; ./bootstrap /sw64
sudo sed -i~ 's%Trees:.*%& unstable/main unstable/crypto%' /sw64/etc/fink.conf
source /sw64/bin/
fink selfupdate-cvs
fink -y update-all
fink scanpackages

fix group format

Hit me when I tried to add a printer with AddPrinter ("select a user in the _lpadmin group"). Solution: dseditgroup -o edit -p -a admin -t group _lpadmin results in '_lpadmin' upgraded to new group format in order to support GUID membership.

switch MacOS boot volume

sudo bless --mount /Volumes/SnowLeopard sudo bless --mount /Volumes/SnowLeopard --setBoot

Install a package from the command-line

sudo installer -package ~/Downloads/cudadriver_2.3.1a_macos.pkg -target LocalSystem

ldd replacement

otool -L

Ubuntu on MacBook Pro 5.3

Vodafone Dashboard for 10.6 SnowLeopard

VMWare (fusion)
  • vmware-cmd -l | while read vmx ; do echo $vmx `vmware-cmd "$vmx" getstate`; done
  • /Library/Application Support/VMware Fusion/vmrun -T fusion start /Volumes/Daten/Virtual\ Machines.localized/Ubuntu\ 10.04.vmwarevm/Ubuntu\ 10.04.vmx


rxvt console

C:\cygwin\bin\rxvt.exe -geometry 100x40 -bg white -fg black -fn courier -sr -sl 1000 -e /bin/bash --login -i

sshd setup

local copy of

change Unix / MSDOS line break mode

eval "`mount -m | grep -i cygwin | sed 's/-t/-b/'`"

change Unix / MSDOS line break mode permanently (system wide)

Registry: HKEY_LOCAL_MACHINE/Software/Cygnus Solutions/Cygwin/mounts v2 change flags from 8 to A (Hex)

create /etc/passwd & /etc/group on Windows 98
echo `pwd|sed s%.*/%%`:`crypt mypasswd`:500:547:Windows98:$PWD:$SHELL >> /etc/passwd
echo user::547: >> /etc/group
sed -i~ s/:544:/:547:/ /etc/passwd

parse / convert environment
cat *.env | tr a-z A-Z | sort -u > win.env
env | sed 's/=.*/=/;s/^/^/' > not.env
echo ^PATH= >> not.env
echo ^LIB= >> not.env
echo ^INCLUDE= >> not.env
grep -vf not.env win.env | sed 's/\\/\\\\/g;s/\$/\\\$/g;s/"/\\"/;s/^\([^=]*\)=\(.*\)$/\1="\2"; export \1/' >
sed -n 's/;*$/\;/;;s/^INCLUDE=//p' win.env | tr -d \\012 | sed 's/^/INCLUDE="/;s/\\/\\\\/g;s/$/"\; export INCLUDE/' >>
sed -n 's/;*$/\;/;;s/^INCLUDE=//p' win.env | tr \; \\012 | grep -v '^ *$' | cygpath -u -f - | awk 'BEGIN{printf "CPPFLAGS=\"$CPPFLAGS"};{printf " \\\"-I%s\\\"",$0};END{print "\"; export CPPFLAGS"}' >>
sed -n 's/;*$/\;/;;s/^LIB=//p' win.env | tr \; \\012 | grep -v '^ *$' | cygpath -u -f - | awk 'BEGIN{printf "LDFLAGS=\"$LDFLAGS"};{printf " \\\"-L%s\\\"",$0};END{print "\"; export LDFLAGS"}' >>
sed -n 's/;*$/\;/;;s/^PATH=//p' win.env | tr \; \\012 | grep -v '^ *$' | cygpath -u -f - | awk 'BEGIN{printf "PATH=\"$PATH"};{printf ":%s",$0};END{print "\"; export PATH"}' >>
Topic revision: r203 - 08 Jun 2015, BerndMachenschalk
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback