66,99 €
This first introductory book designed to train novice programmers is based on a student course taught by the author, and has been optimized for biology students without previous experience in programming. By interspersing theory chapters with numerous small and large programming exercises, the author quickly shows readers how to do their own programming, and throughout uses anecdotes and real-life examples from the biosciences to 'spice up' the text. This practical book thus teaches essential programming skills for life scientists who want -- or need -- to write their own bioinformatics software tools.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 654
Veröffentlichungsjahr: 2011
Contents
Chapter 1. Preface
1.1 An axe in the house is worth a carpenter: why computers matter in the life sciences
1.2 What this book is (not) about
1.3 A few practical hints
1.4 From the heart
1.5 Structure of the book
1.6 Sources
1.7 Author and acknowledgements
1.8 Somebody special...
Part 1. EARTH
Chapter 2. A Classification of Programming Languages
2.1 Assembler: the language of the machine
2.2 Interpreter vs compiler
2.3 Human, all too human...
2.4 Imperative languages
2.5 Procedural languages
2.6 Stack languages
2.7 Functional languages: the λ calculus
2.8 Intermission: tó még sýmbolon
2.9 Array languages
2.10 Object-oriented languages
2.11 Reflective languages
2.12 Declarative = logic languages: the π calculus
2.13 Concurrency-oriented languages
2.14 Scripting languages
2.15 Markup languages
2.16 Overdose kids
2.17 Strong vs weak typing
2.18 Choose wisely. . .
2.19 Why PYTHON?
Chapter 3. ◊ Propedeutics
Chapter 4. Getting the Materials
4.1 Getting the PYTHON interpreter
4.2 The editor
4.3 sys.argv, redirection, and pipelines: don’t fear the command line
Chapter 5. Variables, Data Types, and Assignments
5.1 Relevance and purpose
5.2 Simple or “scalar” data types
5.3 Intermission: 0x07 – the hexcode never dies
5.4 Homogeneous groupings
5.5 Intermission: a note on assignment
5.6 Heterogeneous groupings
5.7 Strings
5.8 Assignments and unary operators
5.9 Overview
5.10 Digression: orthogonality
Chapter 6. Flow Control
6.1 Comments
6.2 Docstrings
6.3 Blocks
6.4 The IF... THEN... ELSE... construct
6.5 Modifiers
6.6 Multiple branching: SWITCH vs ELIF
6.7 Applying code to piles of data: FOR, MAP, FILTER and friends
6.8 The REDUCE function
6.9 What about the locals?
6.10 Gimme annather try: WHILE... loops
6.11 Take the short cut – to be continued
6.12 Endless pain
6.13 Timer-driven loops
6.14 One Loop To Rule Them All...
6.15 “Go to” statements
6.16 Pattern matching
6.17 Choosing a functional variable
6.18 Thou Mayst Pass
Chapter 7. ◊ Application: Full Impact
7.1 The problem
7.2 Approach
7.3 Rough and ready
7.4 Refinements
Chapter 8. Functions and Procedures
8.1 Subroutines – the foundation of all higher programming
8.2 The importance of not getting trapped between two mirrors: recursive programming
8.3 Iterative programming
8.4 Digression: the joy of stacks
8.5 Digression: a trick of the tail
8.6 The Travelling Salesman problem
8.7 ◊ Application: cytometry (I)
Chapter 9. Application: Your Most Expensive Pocket Calculator
Chapter 10. The Object-oriented World
10.1 What happened so far
10.2 Class and instance
10.3 Constructors and destructors
10.4 Self vs non-self
10.5 The serpent and the crystal: PYTHONvs RUBY
10.6 Primitive types vs objects
10.7 Modules and statics
10.8 Inheritance
10.9 Ram It Down!
10.10 Inheritance, abstractness, and privacy
10.11 A different point of view: a look at SMALLTALK
10.12 The coffee machine: a visual example
10.13 Tracking and banking
10.14 Generatio spontanea
10.15 The octopus and the coffee mug: C++vs JAVA
10.16 Strings as objects
10.17 None and object in PYTHON
10.18 Paster of Muppets
10.19 Meyer’s Principles: a look at EIFFEL
10.20 Application: cytometry (II)
10.21 And then. . .
Chapter 11. ◊ Exercise: Prime Numbers
Chapter 12. The Cathedral and the Bazaar: Rivalling Strategies
12.1 The TOP-DOWN strategy
12.2 The BOTTOM-UP strategy
12.3 A few notes on style
12.4 Splitting a large project
Chapter 13. Ordo Ab Chao: Sorting and Searching
13.1 When is a group of data ordered?
13.2 Bubblesort
13.3 Insertsort
13.4 Quicksort
13.5 Comparison
13.6 Others
Chapter 14. Welcome to the Library
Part 2. WATER
Chapter 15. ♣ A Very Short Project: Trithemizing a File
15.1 A brief history of coding
15.2 Johannes von Trittheim (Trithemius) and his method of steganography
15.3 Tools of the trade
15.4 Your task
15.5 Professional cryptography now – random remarks
Chapter 16. Some Thoughts on Compression and Checksums
16.1 Introduction
16.2 A simple lossless compression algorithm
16.3 The LZW compression algorithm
16.4 Digression: prototyping and extending
16.5 Preventing unnoticed tainting of data
Chapter 17. Dealing with Errors
17.1 What are errors good for?
17.2 When the walls come tumbling down: errors leading to program termination
17.3 Error signalling by return value
17.4 Error signalling by exceptions
17.5 Assertions
17.6 Crash & Burn
Chapter 18. ♣ A Real-life Project: Generating a Restriction Map and Making Simple Predictions
18.1 Meet Micro-Willy
18.2 What is a restriction map?
18.3 Extracting data from a file
18.4 Finding palindromes
18.5 Naming the sites
18.6 Generating the protein translations
18.7 Making the map
18.8 An artificial digest
18.9 Predicting problems with star activity
18.10 Profit motives – motive profit
18.11 A glance at transmembrane regions
18.12 Addressing a project
Chapter 19. Advanced Techniques in Python
19.1 Escape processing and prettyprinting
19.2 Regular expressions
19.3 File handling
19.4 More file handling: persistent dictionaries
19.5 String handling
19.6 Raising exceptions
19.7 “Curses”: the functions for advanced text output
19.8 Module “os”: the interface to all operating systems
19.9 Utile et iucundum
Chapter 20. ♣ The Third Project: Python goes PCR
20.1 Monkey business
20.2 Polymerase chain reaction: the boiling hell of Dr. Mullis
20.3 Determining the melting point of DNA
20.4 . . . and still my PCR doesn’t work yet!
20.5 Is there a hairpin structure?
20.6 Addressing a project
Chapter 21. The Wizards’ Sabbath: A Gathering of Languages
21.1 Considerable considerations
21.2 FORTRAN
21.3 OBERON
21.4 LISP
21.5 ERLANG
21.6 RUBY
21.7 LUA
21.8 C++
21.9 JAVA
Chapter 22. Facing up to Python-3000
22.1 Functional “print”
22.2 Standardized unicode support
22.3 Goodbye λ, it was nice to know you
22.4 Number representations, arithmetics, &c.
22.5 Function annotations
22.6 String formatting and I/O
22.7 Classes – as you’ve never seen them before
22.8 Class and function decorators
22.9 Miscellaneous
Chapter 23. Anna will Return
Glossary
Index
Related Titles
Hu, X., Pan, Y. (eds.)
Knowledge Discovery in Bioinformatics
approx 364 pages
2007
Hardcover
ISBN: 978-0-471-77796-0
Holmes, R.M.
A Cell Biologist’s Guide to Modeling and Bioinformatics
256 pages
2007
Hardcover
ISBN: 978-0-471-16420-3
Lengauer, T.
Bioinformatics – From Genomes to Therapies
2007
1814 pages, 355 figures, 56 tables
Hardcover
ISBN: 978-3-527-31278-8
Baxevanis, A.D., Ouellette, B.F.F. (eds.)
Bioinformatics
A Practical Guide to the Analysis of Genes and Proteins
560 pages
2004
Hardcover
ISBN: 978-0-471-47878-2
The Author
Dr. Dr. Ruediger-Marcus FlaigRingstr. 2282223 EichenauGermany
Cover illustration
designed byIrén Judit Lange–Flaig
All books published byWiley-VCH are carefully produced. Nevertheless, authors, editors, and publisher do not warrant the information contained in these books, including this book, to be free of errors. Readers are advised to keep in mind that statements, data, illustrations, procedural details or other items may inadvertently be inaccurate.
Library of Congress Card No.:applied for
British Library Cataloguing-in-Publication Data:A catalogue record for this book is available from the British Library.
Bibliographic information published by the Deutsche NationalibliothekDie Deutsche Nationalbibliothek lists this publication in the Deutsche Nationalbibliografie; detailed bibliographic data are available in the Internet at <http://dnb.d-nb.de>
© 2008 WILEY-VCH Verlag GmbH & Co KGaA, Weinheim
All rights reserved (including those of translation into other languages). No part of this book may be reproduced in any form – by photoprinting, microfilm, or any other means – nor transmitted or translated into a machine language without written permission from the publishers. Registered names, trademarks, etc. used in this book, even when not specifically marked as such, are not to be considered unprotected by law.
ISBN: 978-3-527-32094-3
CHAPTER 1
Preface
The science of bioinformatics or computational biology is increasingly being used to improve the quality of life as we know it.
Bioinformatics has developed out of the need to understand the code of life, DNA. Massive DNA sequencing projects have evolved and added to the growth of the science of bioinformatics. DNA the basic molecule of life directly controls the fundamental biology of life. It codes for genes which code for proteins which determine the biological makeup of humans or any other living organism. It is variations and errors in the genomic DNA which ultimately define the likelihood of developing diseases or resistance to these same disorders.
The ultimate goal of bioinformatics is to uncover the wealth of biological information hidden in the mass of sequence data and to obtain a clearer insight into the fundamental biology of organisms and then to use this information to enhance the standard of life for mankind. It is being used now and in the foreseeable future in the areas of molecular medicine to help produce better and more customised medicines to prevent or cure diseases, it has environmental benefits in identifying waste cleanup bacteria and in agriculture where it can be used for producing high-yield low-maintenance crops. These are just a few of the many benefits bioinformatics will help to develop.
— taken from the EBI home page at http://www.ebi.ac.uk/2can
1.1 An axe in the house is worth a carpenter: why computers matter in the life sciences
Goethe once wrote: “May the Lord save us from the curse of a talent which we fail to develop to masterhood! For in the end we will achieve nothing and regret the waste of time and energy.” I fail to agree, for my own notion, justified by everything that has occurred to me in my professional life, is that all things are intricately connected, and even a little bit of knowledge in one field may greatly help in another. Our schools make it all too easy to develop a certain gimlet mentality, encouraging people to know as many facts as possible about as few things as possible, right to the point where they are stalled for good because further progress would require input from a different field.
Computers are extremely powerful tools, or rather, can be used as such, if one only knows how to get them to do the job. Lots of tedious and costly experimental work might be avoided if people were capable of doing a few computer-based estimations beforehand. We all know the “20–80 rule”: 20% of input accounts for 80% of output. That is to say, even superficial knowledge of computer science may be useful in solving real world problems. At least it will enable a life scientist to talk to a computer scientist and thus get the work done.
Let me tell you something from my own practical experience.
Not so long ago, I had to do a PCR. I selected suitable primers, used the dan program from the EMBOSS molecular biology suite to calculate melting temperatures (60°C), ordered the primers and did the experiment. It failed – no product was visible. My guess was that the annealing temperature, which I had set to 59°C (slightly lower than the theoretical value, according to a rule of thumb), was too high, and I reduced the annealing temperature to 57°C. Still it failed. 55°C, 53°C, 51°C, even 48°C – nothing. I began to fiddle around with Mg++ concentrations, various enzymes – nothing. Finally one possibility occured to me: I suspected that the primers might be able to anneal to each other. I fed them into dan and supermatcher – still nothing. At that point I hacked a program that did a somewhat refined comparison, based on the assumption that there might be “hotspots” of complementarity which might cause the primers to stick together, though they might escape a common matching program. And behold! there was indeed one such hotspot, comprising just a handful of nucleotides but amounting to a melting temperature of 62°C. After I had finished banging my head against the wall, I set the PCR machine to an annealing temperature of exactly 62° C... and this time I got so much product that the agarose gel was overloaded!
This made me wonder what I might have done if I had not, by chance, been quite skilled in programming. Probably fooled around with the PCR for several weeks more, wasted costly enzyme on reactions which I would never have known just could not work. In the end maybe, by sheer luck, might have found the correct parameters and done the cloning without ever knowing what was up. Is that smart?
Anybody should be given the possibility of learning how to solve such problems. Tackling this one will be the subject of a later book. (Please begin at the beginning, though!)
However, the main problem is that most people who know about computers do not know about researchers’ needs and indulge in abstract theory where none is needed, as in the following brillant definition of an array: “A function whose domains are isomorphic to contiguous subsets of integers”. Intellectually certainly excellent – but who would guess from that what an array is, and what it may be used for? Now here’s my own explanation: “An ordered sequence of values, each of which has a number (‘index’) so that the values in an array x of n elements may be referred to by its index, as x1, x2, ..., xn–1, xn. It can be thought of as a street with a single name but separate houses for different pieces of data, which can be addressed by their number. For example, when measuring gene expression on the single-cell level in a cytometer (p. 177), wedetermine the fluorescence of 10 000 cells one by one and store the values in fl1 ... fll0 000.”
Theory is hard to put into practice, and practice is theoretically unnecessary. Both are only inadequate substitutes for understanding.
I am only too well aware that in some academic circles a certain singlemindedness is très chic these days. Quite a number of scientists believe in the “pure teachings” of their own all-important field and the inviolable sanctity of the test tube. Computing, by contrast, has the image of being “nerdy” and a matter for asexual fifteen-year-olds. The truth, however, is that computers are just as important to scientists as pipettes and test tubes, since they offer a unique possibility to simulate things that are too big, too small, too fast, too slow, too dangerous or too complex for conventional experimental study; “too complex” here meaning that they involve amounts of data that would overwhelm any human “experimental genius”.
1.2 What this book is (not) about
This book is about programming in bioinformatics .
My goal is not to demonstrate the intellectual beauty of information theory, nor to discuss the most advanced techniques in software development, but to teach students with little or no computing experience how to use computers to become more efficient in their scientific work, by demonstrating the way towards solving everyday problems, such as the PCR business which I just mentioned. If you are looking for an introduction to Bayesian statistics, or to neural networking, or to X-ray diffraction analysis, this book is definitely not for you; nor is this going to be about EMBOSS, Husar or other molecular biology software packages. It is also not going to be about basics such as producing smart diagrams with a spreadsheet program, writing emails or backing up the contents of your hard disk. It is about programming in bioinformatics. You will acquire general proficiency in algorithmic thinking, not skill in mechanically applying tools which other people have designed.
Contrary to a widespread sentiment that details are more important than overviews, I encourage you to as wide a perspective as possible. You ought to get an idea of what is generally possible, of how many different concepts of information processing there are and of how it “feels” to develop a program. Do not waste your time with learning library functions by heart; rather toy around with the different languages touched on here. In perfect accordance with Whorf’s theorem that language shapes minds, people who have learned only one programming language are in danger of having this language’s structures forced upon their way of thinking – a thing which will seriously hamper their creativity. Of course, this taking things for granted is a general problem: being trained according to one line of thought only leads to mental inbreeding. Maybe you will find this book rather revitalizing in this respect.
Necessarily I had to focus on one language – a choice which was far from easy. After some consideration, I selected PYTHON as the “official language” for this book because it is easy to learn, powerful and freely available1, but my emphasis is not on PYTHON as such but on the elementary concepts of programming languages in general and the way to use them; therefore you will find quite a number of comparisons between different languages here but little about the bells and whistles inside PYTHON . Ideally, after completing this book it will take you little effort to learn any programming language.
The aim of this book is not to serve as a reference guide for PYTHON ; it is highly recommended to have the official PYTHON documentation and tutorial at hand when working on the exercises (download them from http://www.python.org). This way you can also make sure that your documentation is always up date, PYTHON being a swiftly evolving language. By the way, did I happen to tell you that this book is not about PYTHON but about programming in bioinformatics?
Furthermore, it is designed not for going-to-be computer scientists but for future life scientists (who are also expected to have a basic understanding of molecular biology and fundamental things like transcription, translation, the gentic code and the double helix). The contents of this are purely non scholae sed vitae – you will not be asked for this in any exam you are ever going to take, but it may help you as soon as you assume work on your first thesis. Therefore, please take the time to read carefully, and pay attention to the sign. Be aware that not all these questions are really to be answered – some are just intended to make you think; whet your own judgement by this. Feedback is always welcome.
Finally, my apologies if some parts of this book are found to be redundant. In the interest of accessibility I have repeated things where necessary and tried to present them in the respective context, rather than just using cross references to excess. On the other hand, I love to occasionally throw in things which have not been discussed yet but which may be deduced from the context, and ask you to think about that. Maybe I have exaggerated the Socratic method here and there, but it is the proper method for this task. You will also come across several chapters named “Application” describing the way to write a specific program; they are intended both to illustrate what has been described so far and to introduce what is to come next. Now and then, I could not restrain from giving you some really personal advice, which is then marked with a sign. Of course, you may always feel free to disagree.
“Computer science is no more about computers than astronomy is about telescopes”, Dijkstra (one of the really great gurus of the field) once said. To be more specific: “Computer programming is not about writing programs; it’s about understanding a problem thoroughly and devising a strategy to its solution.” That given, writing the actual program is a minor task. Someone who is capable of that kind of analytical thinking will benefit in other sciences as well. Another famous quotation by Dijkstra reads: A programming language which does not change the way you think is not worth learning.
1.3 A few practical hints
Now and then you will find boxes comprising summaries, labelled with a capital sigma. Moreover, important “paradigms” will be noted in the margin. A large in the margin is to direct your attention to particular keywords and to the importance of the section, in particular with regard to bioinformatics. As in every field, for the beginner it is not always obvious why the path should wind through some particular thicket!
In addition, there are a few sections marked with special signs. Those with a comprise exercises which are not “mainstream”, but which I advise you strongly to do, since they may help you to understand (or maybe ask the correct questions). Feel free to discuss them with your friends. Those marked with a on the contrary, are the projects which you should do at all costs – and for yourself. Exemplary solutions will be found at the end of the second volume.
1.4 From the heart
Perhaps the most famous Japanese ever was 17th century Shinmen Miyamoto Musashi, surnamed ken-sei, “Enlightened Sword-Master” – a title he certainly deserved. Wandering about without home or aim for the major part of his life, he did not miss any occasion for quarreling and emerged victorious from more than 60 duels, many of them fought against renowned warriors; the ni t (Two Swords) way of fencing he devised is regarded as the highest accomplishment of swordsmanship. When he finally retired, he surprised everyone by immediately becoming a notable painter and sculptor, some of his works are still considered as classics today. Upon the request of his friend and liege he also wrote a book on the subject of sword fighting, named “The Book of the Five Rings” (Go Rin no Sho). In this book, he gave some very interesting bits of advice:
By following no particular School I defeated followers of all Schools: A hint which pertains especially to going-to-be professionals. You will constantly have to face situations you are not prepared for, and coping with this is essential. This, however, can only be done when you study different approaches instead of yielding to the temptation to considering a single one as The Way.The best technique is no technique, the best stance is no stance: This was not meant as a justification for bungling or amateurishness but to express the fact that when you become really proficient in any art or ability, at a certain point formal structures will lose their helpfulness and in fact become an impediment. To Musashi, fencing was, and ought to be, as natural as walking or talking. You do not form your words according to a conscious pattern, nor do you care about the rules of grammar or phonetics when talking in your mother language – you just talk, free from formal structures. When learning a new language, you will nevertheless first have to learn the rules, before you grow beyond them. But you do not begin to learn a language with the intention to remain glued to the grammar reference for good.Masterhood in one field will entail masterhood in all: A corollary of the former. Attaining true proficiency and mental flexibility by learning will facilitate further learning. Speaking for myself, it took me about two hours two learn Python, and about a week to get into my current field of research.The Book of the Five Rings became very popular in the West, most recently in the 1990s among managers, who grotesquely abused the “no technique” idea as an excuse for any act of sloppiness or manifestation of incompetence2. This is as far from Musashi’s intentions as can be. He is reported to have given the following answer to a lazy student who wanted to know how much practice he still needed. “Just as much practice as will enable you to do this, mind you”, Musashi replied. Then he had a grain of rice placed on the top of the student’s head and aimed a violent shomen-uchi (a vertically descending blow) at him. Down fell the two halves of the grain, cut asunder cleanly without as much as scratching the student’s skin.
Do yourself a favour and think about this man’s advice.
1.5 Structure of the book
It should be noted that there is no “entry level” qualification required. You can start without knowing anything about programming before. However, basic skills in handling a computer are expected, as it would be tedious to begin with these fundamentals (which are taught in more elementary books anyway). For example, you should know the the meaning of terms such as “processor”, “memory”, “persistent storage” and “file system”. If some terms should seem unfamiliar to you, the glossary at the end of this book (p. 401) may be helpful.
This book is designed in two parts; according to the natural structure but also in reverence to Musashi (place smile here), it has been divided into five sections (two for the first, three for the second part):
(1) Earth – a classification of programming languages; data types; control structures; functions; objects; software project organization; iteration vs recursion; tips for getting started with PYTHON.
(2) Water – the three projects for the first term (cryptography, sequence analysis, oligonucleotide design); advanced techniques in PYTHON; a comparison of languages.
(3) Fire – a gentle introduction to geometry and simulations; the BIOPYTHON package; tools for professional development; understanding data processing by building an interpreter for the programming language LISP; two intermediate projects.
(4) Air – Graphical user interfaces; multithreading; three-dimensional graphics; bottom-up simulations; a complete virtual machine with assembler and BASIC compiler included; the two highest projects.
(5) Void – Networking basics; real-life applications; algorithms in bioinformatics; summary (exemplary solutions, glossary and index).
Much care was spent on arranging “presentation” and “practice” chapters in an alternating fashion in order to enable students to switch to learning by doing as soon as possible – without getting too focused on a single language, however.
For those who are interesting in delving deeper into algorithms applied in molecular biology, the book “Genomic PERL” by Rex A. Dwyer (Cambridge University Press, 2003) is highly recommended, as it describes the approaches with exceptional clarity and furnishes examplary solutions. However, these examples are implemented in PERL, a language which is not suitable for teaching purposes, so this book requires a solid background in the basics of programming.
1.6 Sources
There is no bibliography at the end of this book. The knowledge compressed into these approximately four hundred pages was collected over the course of more than twenty years from all kinds of sources – books, journal articles, internet postings, personal discussions and, above all, the dearly-bought experience gained by lots of personal work on real-life problems which had to be solved somehow. A few selected titles can be found at the end of the second volume.
“By all accepted standards, Musashi was not a great sword technician. Schools, styles, theories, traditions – none of these meant anything to him.. His way of fighting was completely pragmatic. What he knew was only what he had learned, from experience, living as an ascetic in the mountains, exposing himself to the dangers presented by nature as often as to those presented by man. He was not putting theory into practice; he fought first and theorized later.”
– EIJI YOSHIKAWA.
1.7 Author and acknowledgements
Rdiger Marcus Flaig (a.k.a. Don Rodrigo) was born in 1971 in Mannheim, Baden. In 1994, he received his Master’s degree in biology from the University of Heidelberg and subsequently obtained the degrees of Dr. sci. hum. (medicine) in 1997 and of Dr. rer. nat. (pharmaceutics, with summa cum laude ) in 2001. In the course of his adventurous life, he has worked in almost all fields of the life sciences (and also in law, languages,. .. → ∞). From 2003 to 2005, while in Heidelberg as a postdoctoral researcher in immunology, he taught “Programming in Bioformatics” in cooperation with Roland Eils of the “Intelligent Bioinformatics Systems” (IBIOS) division of the German Cancer Research Centre. For his scientific and humanitarian endeavours he has received a number of decorations, including the Imperial Order of the Ethiopian Lion and the title of a Knight of the Collar of St. Agatha of Paternò.
The author gratefully acknowledges the help of many of his past and present colleagues as well as the students in his course, whose critical feedback greatly improved the quality and made him realize the unmet need for a comprehensive textbook. But above all, he would like to recognize the support he has received from his family, in particular his beloved wife, M.A. Irén Judit Lange-Flaig, without whose invaluable contributions all this would not have been possible.
1.8 Somebody special...
Meet our mascot:
1 Please refer to “Why PYTHON?” on p. 57 for a more detailed explanation of this choice, and to “The Wizards’ Sabbath” (p. 359) for a comparison of languages.
2 As happens frequently to Eastern ways when brought to Euro-America: O mani padme hum; o mani padme hum; wow, now I’m enlightened!
Part 1
EARTH
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!