513

Service Part

Appendix : A Style Guide for Geodetic Software in and C++ – 514

References – 524

Index – 531

© Springer International Publishing Switzerland 2017 A.N.J. Neidhardt, Applied Computer Science for GGOS Observatories, Springer Textbooks in Earth Sciences, Geography and Environment, DOI 10.1007/978-3-319-40139-3 514 Appendix: A Style Guide for Geodetic Software in C and C++

Appendix: A Style Guide for Geodetic Software in C and C++

Main Topics in This Chapter 7 Sect. 2.7.1. Not all the directories suggested are manda- The following chapter contains a reduced selection of tory. If they contain no files, they can be left out and cre- important and helpful rules, mostly taken from the style ated when needed. guide and programming policies which are used at the Geodetic Observatory Wettzell. The following zz Rule 2: File Names and Internal File Structure suggestions do not claim to be complete, but are a collection of hints, tricks, and definitions, which simplify Languages Relevance the common development of software in a team. The C/C++ + chapter is split into sections about: 55 General structures 55 Preprocessor directives 55 Plain coding Code files are collections of function sets with the same pur- 55 Functions and methods pose or characteristics. File names should be descriptive. For 55 Libraries portability, the names are lower case, but can contain «_» as separation between the logical word parts. Files with pure C code have the extension «.c» for the source file and «.h» for the header file. In the same way C++ code uses the extensions A.1 Introduction «.cpp» and «.hpp». A source/header-tuple defines a module or component. There is a strict separation between the declara- The following sections describe the most useful or critical tions (function/method head) as interface to the module in the rules based on experience at the Wettzell observatory, and header file and the definitions (body with functional code) in which are collected in the local design rules definitions (see the source file. A source file with its related header file is a soft- (Dassing et al. 2008)). The following rules make no claim to ware module. There is only one exception to this strict separa- be complete, but are a minimal set of guidelines which help tion: templates. The function body of template functions must to write better code. be located in the header file because of the language syntax. Relations between modules are organized using the related header files in precompiler include directives. External variables A.2 General Structures and functions (defined with the tag extern« ») are not allowed. The internal structure is a sequence of (see also . Fig. A.1): 55 Comment header (version control tags, general info, zz Rule 1: Project Structure interface info, authors, etc.) (see 7 Sect. 2.5.1 and 7 Sect. 2.7.2) Languages Relevance 55 Define or include guard «begin» directive (only in the

header files, see 7 Sect. 2.3.2) C/C++ + 55 Preprocessor directives in a particular order (should be used only in reduced form in header files to keep includes local): Software is developed within a project to do a specific 55All «define» statements set of tasks. For this reason, it helps to create a suitable 55All «include» statements for standard libraries in the directory tree for each project, as this can also be used for standard library path (such as (with a repository in a version control system (see 7 Sect. 2.7.). extension «.h») for C code libraries (Kernighan and It makes sense to organize the directories hierarchically. Ritchie 1990, l.c. page 86) or (without The first level of this hierarchy represents the repository extension) for C++ code libraries) view (Wassermann 2006, l.c. page 47). The next level of the 55All «include» statements for modules in the local tree contains a general view of the project and can be sepa- work path (identified with quotes) (Kernighan and rated into directories and subdirectories, as shown in Ritchie 1990, l.c. page 86) 515 Appendix: A Style Guide for Geodetic Software in C and C++

.. Fig. A.1 The structure of a software module with a header Software module and a source code file CommentComment header header: Comment header: - Version control info - Version control info - Description - Description

“define”/include guard begin Preprocessor directives: - Defines Preprocessor directives: - Includes of standard libraries - Defines - Includes of local modules D - Includes of standard libraries - Includes of local modules Definition of function/method (function body) Declaration of function/method

Declaration of function/method Definition of function/method (function body) Declaration of function/method

......

“define”/include guard end

Comment trailer Comment trailer

Header file (.h/.hpp) Source file (.c/.cpp)

55 Sections with logically combined declarations (in header In general, a class can be related to a specific module. files) or definitions (in source files) of functionalities1 of The class itself contains member elements like attributes the same characteristics (variables) and methods (functions). The class structure 55 Define or include guard «end» directive (only in the is ordered from the highest restricted parts (which are header files) only accessible within the class object and defined with 55 Comment trailer (see 7 Sect. 2.7.2) the keyword «private»), followed by the inheritable parts (which are accessible within the class object, from A very important instrument in header files to avoid multiple all derived class objects, and defined with the keyword includes, and therefore multiple declarations, is the include «protected») and the public interface parts (which are guard (see 7 Sect. 2.3.2). accessible from outside as interface methods to the class Additionally, line length is normally standardized by style functionality, and are defined with the keyword guides, which help to print the code properly onto standard «public­ ») as shown in . Fig. A.2. The use of «friend» paper sizes. Normally, large code projects are no longer printed. methods or classes should be avoided to keep clear access Therefore, this rule is not as important as it was. Nevertheless, structures. Each restriction block should be ordered as it is quite helpful to standardize on a normal print-width (about well. The first section defines constants and enumera- 80 characters), as it makes the code more readable. tions, followed by internal new data types defined by class descriptions such as for exceptions. The next section zz Rule 3: Class Structure and Obligatory Members defines member variables followed by class methods. Each class must have the standard constructor (which is Languages Relevance called each time an object of this class is created without C++ ++ specific definitions), a copy constructor­ (used to create a new object containing the values from an existing one), the destructor (called each time an object is destroyed, for example, at the end of a local ), and the copy 1 Functionalities are called «functions» in C and «methods» in C++, ­assignment operator (operator =, which is used to assign as they describe the behavior of a class. the content of an existing object to another existing 516 Appendix: A Style Guide for Geodetic Software in C and C++

zz Rule 4: Naming Conventions class { Languages Relevance PRIVATE Constants/enumerations C/C++ +++ Member classes/exceptions Member variables Methods/functions Even though naming is quite arbitrary, it is useful to PROTECTED Constants/enumerations define some conventions. Names should directly provide Member classes/exceptions information about the characteristics of a named element. It Member variables Methods/functions should directly be visible whether it is a new defined type, a function, or a variable, and the name should make clear PUBLIC Constants/enumerations which type of variable it is, or even what the return value of a Member classes/exceptions function is. Combinations of variables such as arrays or Member variables higher sophisticated class types should also be derivable from Methods/functions the name. An early definition to support such ideas was given - Constructors - Destructors by the Hungarian Notation of Charles Simonyi (Maguire - Overloaded operators 1993, l.c. page xxv–xxviii). As this notation helps to visually - (Other) methods/functions identify, for example, type mismatches in the code, a similar definition which also includes C++ elements is effective. The following notation is a step-by-step extended heading char- }; acter set in front of a descriptive identifier. It offers more details (as type or structure) and classifies the named identi- .. Fig. A.2 The structure of a class in a software module fier in the following way for variables and functions: object). As these functions are called implicitly, for 4. Notation Prefix: memory class ­example, if the new class objects are used within lists or + 3. Notation Prefix: access maps, they are essential. If one of the functions or opera- + 2. Notation Prefix: combination tions is not allowed in the context of a specific class, the + 1. Notation Prefix: type individual function must be blocked by defining it as + Descriptive identifier name private. and in the following way for new type definitions: Descriptive type name kExample A.1 + Notation Postfix: constitution Obligatory member functions The identifier and type names themselves should be class callisto_dewar descriptive and should avoid acronyms. Variable names and { type names are a combination of nouns (e.g., «MinIndex» private: or «IndexCounter»). Function names should be an // ... imperative combination of nouns and verbs which describe public: the activity done within the function body (e.g., // General class functions « » or « »). The logical // Constructor GetFamilyName SumIntegers callisto_dewar (); patterns in the names are separated by capital letters (e.g., // Copy-constructor «CalculateMeanElevation»). Together with the callisto_dewar (const callisto_ type codings from the notation, the name follows the dewar & CIn); «» style (e.g., «uiArrayIndex»). Only con- // Destructor stants are named in a different way to the pattern highlight- virtual ~callisto_dewar (); // copy assignment operator ing described. As is often the case with classical program callisto_dewar & operator= (const styles, it is advisable that they are completely written in callisto_dewar & CIn); capital letters (as shown in (Kernighan and Ritchie 1990, l.c. // … page 37 f.)), which is the «upper case» style. Constants may }; optionally also carry the extension for a type, and their logi- cal patterns may be separated, using an underscore «_». 517 Appendix: A Style Guide for Geodetic Software in C and C++

New individual variable types should be extended with trailing extensions as postfix. Possibilities are:

Postfix Constitution Example

Type New type definition typedef int * IntPtrType;

Struct Structure definition struct SensorStruct {...}; or typedef struct SensorStruct {...}  SensorStructType;

Union Union definition union ConverterUnion {...}; or typedef struct ConverterUnion {...}  ConverterUnionType;

Enum Named enumeration enum SwitchStatesEnum definition  {uiOFF=0, uiON=1};

Class Class definition class MeteoClass {...};

TClass Template class definition template class StackTClass {...};

TType Template type template  class StackClass {...};

Namespace Namespace definition namespace SerialDeviceNamespace {...};

In front of such a named identifier, the different notation extensions are added as prefixes: 1. Notation Prefix: type A coded description for the different types is added directly in front of the descriptive identifier name. Suggested classification sets for C types, C++ types, and STL types are:

Prefix Type Example

b Boolean boolean bExit;

c Character char cLetter;

uc Unsigned character (Hungarian: unsigned char ucSign; by)

f Float float fCash;

d Double double dPrecision;

s Short integer (Hungarian: n) short sIndex;

us Unsigned short integer unsigned short usCount; (Hungarian: w)

i Integer int iSum;

ui Unsigned integer unsigned int uiSecondsOfDay;

l Long integer long lSeconds;

ul Unsigned long integer unsigned long ulMilliSec; (Hungarian: dw)

v Void void vReadLine (...);

F FILE FILE * pFInputFile;

E Named enumeration enum SwitchStatesEnum eSwitchStates;

S Structure struct SensorStruct SSensor;

U Union union ConverterUnion UConvert;

C Class MeteoClass CMeteorology; 518 Appendix: A Style Guide for Geodetic Software in C and C++

Prefix Type Example

T Template variable StackTClass TCStack;

TC Template class template class {StackTType TStack; ...};

IO I/O Stream stream IOLogFile;

O Output stream ostream OResultFile;

I Input stream istream IResultFile;

FIO Filestream fstream FIOLogFile;

FO Output filestream ofstream FOResultFile;

FI Input filestream ifstream FIResultFile;

str STL string std::string strName;

it STL iterator map::iterator itNamesMap;

bst STL bitset (set of bits) std::bitset<8> bstByte;

2. Notation Prefix: combination (added in front of 1. Notation Prefix) This prefix codes if the named element is a multielement combination like an array or a list.

Prefix Type Example

a Array in the memory stack long alKeys[128];

ac Character array in the memory stack (Hungarian: s) char acPhrase[128];

az Zero-terminated array in the memory stack (Hungarian: sz) char azcName[128];

ma Multidimensional array in the memory stack char macPhrase[128][256];

pp C++ pointer (dynamic heap, which is created with new/delete) long * pplAddress;

p C pointer (dynamic heap with malloc/free) long * plAddress;

lst STL list std::list lstiSizes; map STL map (hash array with unique keys) std::map mapistrHash; mmp STL multimap (hash array without unique keys)) std::multimap mmpistrHash;

vec STL vector std::vector veciX;

set STL set with unique elements std::set setiNumbers;

mst STL multiset without unique elements std::multiset mstiNumbers;

stk STL stack std::stack stkiStates;

que STL queue std::queue queiJobNumbers;

pqu STL prioritized queue std::priority_queue pquiOrders;

dqu STL double-ended queue std::deque dquiLogIDs; 519 Appendix: A Style Guide for Geodetic Software in C and C++

3. Notation Prefix: access (added in front of 2. Notation Prefix) The final notation describes which access possibilities, such as global or private availability in a class, are given.

Prefix Type Example

g_ Globally accessible int g_iPort; int main {...} pri_ Private class member class SensorClass {  private:  int pri_iSensorNumber; }; pro_ Protected class member class SensorClass {  protected:  int pro_iSensorNumber; }; pub_ Public class member (optional, as all not labeled class SensorClass members should be public) {  public:  int pub_iSensorNumber; }; _ If 4. Notation Prefix is needed and no 3. Notation Prefix is used.

4. Notation Prefix: memory class (optional) (added in front kExample A.2 of 3. Notation Prefix). Additionally, it is recommended Define/include guard that «sta» is added in front of the identifier names for static memory elements (e.g., «stapriv_ #ifndef __FILEIO__ pFInputFile») which are uniquely located at one #define __FILEIO__ specific memory element and generated only once ... // Header code #endif //__FILEIO__ (Kernighan and Ritchie 1990, l.c. page 81). Equivalent «reg» can be added for memory elements which should be optimized to be kept in the fast registers (e.g., zz Rule 6: Include Paths and Include Order «reg_iCounter») (Kernighan and Ritchie 1990, l.c. page 81 f.). Languages Relevance

C/C++ +++ Prefix Type Example

sta Static memory element static int * sta_piPort; Relations between the modules are organized with header file includes. The declarations in the header files are used for reg Register element register int reg_iCounter; type checking. Includes in header files should be avoided to keep the included parts as local as possible. In any case, it is advisable to follow a specific include-order (if there are no other constraints from external legacy code). First all «include» A.3 Preprocessing Directives statements for standard libraries in the standard library path (such as (with extension «.h») for C code libraries zz Rule 5: Define or Include Guard (Kernighan and Ritchie 1990, l.c. page 86) or (without extension) for C++ code libraries) should be written. These Languages Relevance statements are followed by all «include» statements for modules in the local work path (identified with quotes) (Kernighan and C/C++ +++ Ritchie 1990, l.c. page 86). Relative paths are not allowed. The search path to find the header files should be set with compiler parameters (such as the «-I» parameter of the GNU gcc and To avoid multiple includes, and therefore multiple decla- g++ compiler). There is only one exception to this. If the header rations, it is necessary to use include guards. They are pre- files are collected in one specific subdirectory tree, it is possible processing directives which prevent the inclusion of code to use one hierarchical level of the following form: «#include which has already been included. ». 520 Appendix: A Style Guide for Geodetic Software in C and C++ zz Rule 7: Avoid Preprocessing Macros and Conditions zz Rule 10: Parentheses

Languages Relevance Languages Relevance

C/C++ ++ C/C++ ++

As preprocessing macros are simple code replacements In classic programs, the starting curly bracket of a code without any type checks, it is advisable to avoid these macros block was directly behind the instruction, which belonged to completely. Usually macros can easily be replaced by simple this code segment (e.g., the curly bracket for the function body functions or, in the case of constants, with equivalent lan- was directly behind the function head). But this makes it diffi- cult to find the related start and end points of longer code pas- guage elements, like «enum» or «const» declarations. To make the code more understandable, another helpful hint is to sages with several code blocks. Parentheses should be used to reduce the use of preprocessing conditions (such as « », enhance readability and reduce mistakes. Therefore, it is better #ifdef if the start and the end curly brackets are in the same column as «#else» and «#endif»). Normally, they must be used to separate the different system function calls of the different the first instruction (ANSI style, see example). In combination operating systems in a file. But its area of influence should be with generative programming, it is desirable to use parenthesis as clear as possible, and should also be kept as small as possi- all the time, as search patterns for replacements can be defined ble. Unused code («dead instructions») should be deleted, more easily. It is advisable to use parenthesis in the conditional instead of being excluded using preprocessing conditions. states of a «switch/case» condition to enhance the clearness of instructions which belong together. In this context, each zz Rule 8: Constants with «const» or «enum» «case» section which processes its code should have its own «break» as stop condition. The instruction flow should not Languages Relevance automatically continue with the code of the next «case» state- ment, which would happen if no «break» is used. C/C++ +++ kExample A.3 Parenthesis To provide a complete type checking of the values assigned to constants, it is better to use the «const» attribute // Parentheses in combination with loops in combination with variables (e.g., «const double dPI for (iIndex = 0; iIndex < iMaxIndex; = 3.141592») instead of preprocessing defines. For the iIndex++) definition of error codes, return values, or states of finite state { machines, it is also suitable to define specific enumerations ... // loop code } (e.g., «enum SwitchStatesEnum uiOFF=0, uiON=1;»). Return codes of functions are of the type // Parentheses in combination with if «unsigned integer» to code the different error situations and if (uiIndex <= 100) { causes. Here «0» represents a successful run, while all num- ... // if branch bers greater than «0» are error codes. } else { A.4 Plain Coding ... // else branch } zz Rule 9: Indents with White Spaces // Parentheses in combination with // Switch/case switch (uiState) Languages Relevance { C/C++ +++ case 1: { ... // first case break; Different editors replace tabulator stops with a different num- } ber of white spaces. The code becomes more readable if indents case 2: are created with blanks in front of the instructions. Experience { ... // second case shows that four blank signs per indent are ideal to have a good break; visual separation, but also avoid excessively long line lengths. } 521 Appendix: A Style Guide for Geodetic Software in C and C++

... method, there is only one function return, located at the end default: of the function. In general, these jumps are only forward { jumps to the following code lines and not backwards. In ... // default case addition, they are kept quite local within one function. After break; } the jump label of the single return, memory cleanups can be } processed. This technique allows exactly one entry and one exit point in a function. zz Rule 11: Avoid Global and Static Definitions zz Rule 13: Variable Initialization

Languages Relevance Languages Relevance

C/C++ +++ C/C++ +++

Global variables are difficult to handle, because it is not All variables must be initialized with a start value. This always clear where they are defined in large programs. In this reduces errors, such as the use of a pointer pointing to wrong combination, attention should be paid to local scoping. memory addresses or index variables with the wrong start Variables, should be kept as local as possible and should be value. «NULL» is the correct start value for pointers. Call-by-­ encapsulated. C++ namespaces are sometimes useful to pro- reference parameters of functions which return result values tect complete, one’s own module spaces. But it can also make to the calling instance also have to be initialized. A disadvan- programming long-winded. The best way is to avoid global tage is that the warning system of some compilers does not definitions, and also to avoid the combination of statements check the initialized variables anymore if they are used fur- which do not belong together (e.g., do not write additional ther on or not. Another disadvantage is that overwriting the instructions in «for» loop heads besides the start counter value, which can occur shortly after initialization, results in definition, the stop criterion, and the iteration operator). additional runtime. Also static definitions can cause some problems in sys- tems with parallel threads. As static memory exists only once zz Rule 14: Dynamic Memory at a specific address, and all functions with this memory have the same access rights, it is a critical section. Therefore, race Languages Relevance conditions where results are dependent on the access order C/C++ +++ and time can be the consequence if this critical section is not protected, for example, by semaphores which handle the read and write access of the competing threads. Even if variables in the memory stack of the program are much less error-prone (if index overflows are checked and zz Rule 12: Jump Instructions Are Prohibited avoided) and do not consume so much runtime, the reduc- Languages Relevance tion to non-dynamic memory would reduce the possibilities of dynamic adaption of the data to requirements during the C/C++ +++ runtime of the program. To reduce the memory consump- tion in an optimal way to the requirements, the use of heap memory is effective. Therefore, it is necessary to administrate Jump instructions make it quite difficult to understand dynamic memory. This can be done by using «malloc/calloc/ large programs, especially when many of the jump locations realloc/free» in C and «new/delete» in C++. These methods are far apart. As jumps are a construct in unstructured pro- should not be mixed. In C++, it is better to use the operators gramming languages to repeat or process conditional code, «new» and «delete». It is advisable to check memory con- but can be replaced by equivalent instructions such as loops sumption during runtime with appropriate tools to find and conditions in structured programming languages, «goto» memory leaks. To get a proper workflow in low-memory instructions are generally prohibited. Therefore, exceptions areas as well, it is necessary to check the success of a memory should also be avoided, because these OOP constructs are allocation by evaluating if the returned memory address is higher level jumps, which can hardly be understood in the not NULL, and/or if the exception «bad_alloc» is thrown workflow during runtime. under C++. This is often neglected in open-source OOP The exception to this rule is for jumps which make it pos- projects, as it takes more programming time to check all allo- sible to reduce several, individual function exits. In this case, cations. But this can lead to unpredictable situations if sev- well-defined jump labels are used at the end of a function to eral memory-hungry programs share an increasingly which the workflow can jump if an error occurs. Using this shrinking memory. 522 Appendix: A Style Guide for Geodetic Software in C and C++

Multiple deletes of memory can also lead to unpleasant Comment lines are used to make code more comprehen- crashes. Therefore, it is advisable to set the value of a pointer sible. Comments are additional information from the pro- to NULL after a delete. Multiple deletes on a NULL pointer grammer or developer of the source. It is essential to add as have no influence anymore. many comments as possible, but to avoid statements which The OOP world also offers programming patterns which are directly visible from the code (e.g., it is not necessary to help to deal with such requirements automatically. In the case explain that a loop follows without saying what the loop does). of controlling heap memory, the pattern is described as a Comments are placed in front of the instructions which they «smart pointer». Smart pointers are objects which act as stan- explain. Only for variable explanations, they can be added at dard pointers but manage the underlying memory automati- the end of the same line where the variable is located. cally, including things such as garbage collecting (cleaning up In C++, it is useful to use C++ single-line comments unused code) on the basis of ownership logging. Used in the («//...») instead of the start and end comment tags («/* ... */») right way (checking on each touch if exceptions are thrown), in C to mark the comments. Start and end comment tags help smart pointers can make life easier. They look like normal to hide sequences of command instructions for testing (but pointers and the handling does not differ from standard such code should not be committed to the code repository). behavior. But this can lead to a kind of «laissez-faire» attitude, Comments are also used to generate the developer docu- for example, not taking care of exceptions anymore, which mentation automatically. One tool for this is «Doxygen», lead to unpredictable behavior. Sometimes smart pointers can which can produce documentation in different styles, such as also be non-obvious and confusing (see also 7 Sect. 3.1). HTML or LATEX. For more information see also 7 Sect. 2.5.1. zz Rule 15: Types and Type Casting zz Rule 17: 64-bit/32-bit Friendliness

Languages Relevance Languages Relevance

C/C++ +++ C/C++ +++

Casts (conversions) between types should be avoided. The code should be general enough to run on 64-bit and Where a type conversion is necessary, only an explicit cast 32-bit machines. As long as only the standard types are used, should be done to avoid non-obvious, implicit type changes. all types should work properly (special types such as Compiler switches or preprocessor switches which change «size_t» from the operating system should be handled between variable types are not allowed. In C++, the specific cast carefully; therefore, also avoid «memcpy» and «memmove» operators, such as static, dynamic, const, and reinterpret cast if possible). 64-bit variables should also be used in the pre- should be used in addition to the traditional-style cast from processor conditional definition «#ifdef _LP64». The C. The most important cast operators are dynamic and static. definitions in «inttypes.h», and other type header files can be Hereby a dynamic cast («pCMeteoSensor = dymanic_ used for the new types and to output the values correctly in cast pCSensor;») per- C. The C++ streams should automatically be able to print the forms a verification and validation of the cast during runtime, values correctly. To avoid problems with the sizes of the type, while a static cast («lId = static_cast iId;») it is better to calculate the size of the variable instance (e.g., is very similar to the traditional one. It is a non-polymorphic «sizeof(iIndex)») instead of the type. Special care standard conversion without runtime checks. The const cast must be taken on bit shifts, arithmetic operations, and within allows a conversion of constant variables into nonconstant unions in combination with pointers (see also (Karpov and access (therefore, it should be avoided), and the reinterpret cast Ryzhkov n.d.) and 7 Sect. 2.3.2). can also convert between completely incompatible types (which should also be handled carefully) (Schildt 1998, l.c. page 580 ff.). In the context of mathematical calculations, it is useful to A.5 Functions/Methods use double precision types instead of single. For those cases where the valid decimal places are not enough, there are zz Rule 18: Function Parameters and Return Values appropriate multiprecision libraries. For text strings, it is better to use UTF types and libraries Languages Relevance instead of the standard ASCII types, because then all C/C++ +++ language-­specific characters can be represented without additional work (see 7 Sect. 3.3.1). Parameters to C/C++ functions are either input to the zz Rule 16: Comments function, output from the function, or both. Therefore, it Languages Relevance makes the function body more readable if the order of the parameters is from input, input/output, to output. New C/C++ + parameters should be placed in the corresponding position. In general, it is useful in C++ to write all the output arguments as 523 Appendix: A Style Guide for Geodetic Software in C and C++

Rule 21: Thread Safety call-by-­reference, using the «&» sign (e.g., «int & iRe- zz sult»). It ensures that the functions process on the original data without creating a copy of an external variable. In C++ Languages Relevance the call-by-­reference variables can be used as normal local C/C++ ++ variables (there is no need for a dereferencing with an asterisk, as needed in C) with the difference that all changes are visible outside the function. Even input parameters can be defined by using the call-by-reference method to make the processing Threads simplify the programming of deadline-­ much faster, as no copying is needed. But to avoid changes in dependent, parallel tasks, while keeping the possibility of input parameters, it is necessary to define them as constant directly exchanging data in the memory. Therefore, all operating systems also support threads (e.g., POSIX references (e.g., «const int & iSummand»). Returned error codes should not only be Boolean values, threads under Linux) besides the standard processes, which only provide information about whether there has which require a special IPC for the data exchange. But been a failure or not. They should also be enum or at least threads have their ­pitfalls. As two tasks can manipulate unsigned integer values, which code the type of error, for memory elements in parallel, the wrong usage can lead to example, with different «enum» numbers. By using this error critical sections. To avoid them, semaphore or mutex con- coding, it is possible to propagate error states to higher levels, structions are required. keeping the information about which error caused the current Additionally, some libraries are not thread safe. The STL failure return. It is important in this context to create defined has this problem, which means that workarounds are neces- states with correct initialized return variables also in case of sary. Copying strings should always follow the «deep copy» an error. Therefore, all return parameters should be initialized methods (e.g., in the form of «strText1 = strText2.c_ first before any other instruction is processed. Memory which str();»), which really forces a copying and not just a ref- is allocated during the processing should be freed again and erencing with an internal reference counting. The same style reset to NULL after an error to avoid adjacent activities out- can be used for deleting, where an empty string can be cop- side the function which could lead to memory leaks. ied into a string which should be deleted using the «deep copy» method. Special care must be taken if strings are used zz Rule 19: Reduced Use of Inline Code in further container classes, such as lists, vectors, and so on, because they do not process such deep copies. In this case, it Languages Relevance is better to overload the copy functions and redesign them with «deep copy» techniques. For more information see C/C++ + 7 Sect. 2.6.4.

In C++, it is possible to define functions with inline code by writing the function body directly into the class declara- A.6 Libraries tion in the header file. The compiler expands this code Rule 22: Usage of Libraries and Toolboxes directly as inline sequence instead of calling the function zz conventionally. This increases performance as long as the inline code is short enough. Therefore, inline code is only Languages Relevance allowed for very short functions (a few lines of code). For C/C++ ++ standard applications in modern architectures, it is also no problem to abstain from inline code, which makes the sources more readable, as all function bodies can only be In any case it is advisable to reduce the manually written found in the source files and not in the header files. «glue code». This can only be done if existing code libraries zz Rule 20: Const Correctness are used. These libraries can be external repositories. But it is important here that updates and upgrades are possible with- Languages Relevance out problems and that the code should be downward com- patible to older versions. A suitable library is the STL if the C/C++ ++ aspect of thread-safety is considered. An institute’s internal toolboxes, which should follow the aspects described in

7 Sect. 3.1 are much better than external libraries. With The compiler checks if changes are made where they should these toolboxes, decisions about the code are always in the not be made. Therefore, it is advisable to protect from changes hands of the local development team. Experience shows that with «const». In particular, functions which do not make any even a minimal set of modules helps to improve code devel- changes to member attributes should have the «const» qualifier opment. But it is important to ensure that the tools in this (e.g., «int iReturnState () const;»). It helps to detect toolbox are regularly inspected using CI methods (see misuses during the compilation. 7 Sect. 2.8). 524 References

References

Aho, Alfred V; Sethi, Ravi; Ullman, Jeffrey D: Compilerbau. Teil 1, Addison- Clark, Mike: Projekt-Automatisierung. Pragmatisch Programmieren. Carl Wesley (Deutschland) GmbH, 1997. (Original title: Hanser Verlag München Wien 2006. (Original title: Pragmatic Project COMPILERS. Principles, Techniques and Tools. Bell Telephone Automation. How to Build, Deploy, and Monitor Java Applications. Laboratories, Inc., 1986). The Pragmatic Programmers, LLC. 2004). Alexandrescu, Andrei: Modernes C++ Design. Generische Programmierung A. Collioud: IVS Live: All IVS on your desktop. In: Alef, W; Bernhart, S; und Entwurfsmuster angewendet. mitp-Verlag Bonn 2003. (Original Nothnagel, A. (eds.): Proceedings of the 20th Meeting of the European title: Modern C++ Design: Generic Programming and Design VLBI Group for Geodesy and Astronomy (EVGA). Schriftenreihe des Patterns Applied. Pearson Education, Inc., Addison Wesley Instituts für Geodäsie und Geoinformation. Heft 22. pp 14–18, Professional 2001). Universität Bonn 2011. Allan, Peter M; Chipperfield, Alan J; Warren-Smith, R. F; Draper, Peter W: Collioud, A; Neidhardt, A: When «IVS Live» meets «e-RemoteCtrl» real-time­ CNF and F77. Mixed Language Programming – FORTRAN and C. data .... In: Zubko, N; Poutanen, M. (eds.): Proceedings of the 21st Version 4.3, Starlink User Note 209.10, CCLRC/Rutherford Appleton meeting of the European VLBI Group for Geodesy and Astrometry. Laboratory 2008. http://star-www.­rl.­ac.­uk/star/docs/sun209.­ps, pp 17–20. Finnish Geodetic Institute 2013. Download 2011-07-29. Colucci, G: Matera VLBI station report on the operational and performance Arduino team: Arduino. http://www.­arduino.­cc/, Download 2012-09-18. evaluation activities from January to December 1998. telespazio spa ASCII-Table.com: ANSI Escape sequences (ANSI Escape codes). http://ascii-­ 1999. ftp://geodaf.­mt.­asi.­it/GEOD/INFO/matvlbi98.­pdf, Download table.­com/ansi-escape-sequences.­php, Download 2012-09-26. 2013-01-12. Atmel Corporation: Atmel 8-bit Microcontroller with 4/8/16/32KBytes Cousot, Patrick: Abstract Interpretation. In: ACM Computing Surveys, Vol. In-System Programmable Flash. ATmega48A; ATmega48PA; 28, No. 2, June 1996., http://cs.­nyu.­edu/pcousot/publications.­www/ ATmega88A; ATmega88PA; ATmega168A; ATmega168PA; ATmega328; Cousot-ACM-Computing-Surveys-v28-n2-p324-328-1996.­pdf, ATmega328P. Atmel Corporation 2012. http://www.­atmel.­com/ Download 2012-06-07. Images/8271S.­pdf, Download 2012-09-18. Cppcheck: Cppcheck. A tool for static C/C++ code analysis. http:// Barker, Thomas T: Writing Software Documentation. A Task-Oriented cppcheck.­sourceforge.­net/, Download 2012-06-07. Approach. Second Edition, Pearson Education, Inc. 2003. Cppcheck: Cppcheck 1.55. Manual. http://cppcheck.­sourceforge.­net/ Barrett, Daniel; Silverman, Richard; Byrnes, Robert: SSH, The Secure Shell: manual.­pdf, Download 2012-06-07. The Definitive Guide. O’Reilly Media, Inc. 2005. CppUnit: CppUnit. Main Page. Welcome! to CppUnit Wiki. http:// Bauer, Sebastian: Eclipse für C/C++-Programmierer. Handbuch zu den sourceforge.­net/apps/mediawiki/cppunit/index.­php?title=Main_ Eclipse C/C++ Development Tools (CDT). 2. Auflage. dpunkt.verlag Page, Download 2012-06-06. GmbH 2011. Crowther, Mark: Software Test Metrics. Key metrics and measures for use within Beaudoin, Christopher; Whittier, Bruce: Sensitivity evaluation of two the test function. Discussion document. http://www.­cyreath.­co.­uk/papers/ VLBI2010 candidate feeds. https://www.­mpifr-bonn.­mpg.­de/1263470/ Cyreath_Software_Test_Metrics.­pdf, Download 2011-07-30. Beaudoin_VLBI2010FeedDev.­pdf, Download 2016-03-31. CSIRO: open-monica. Engineering tool for real-time data collection, con- Beck, Kent; Beedle, Mike; van Bennekum, Arie; Cockburn, Alistair; trol, archiving and display. https://code.­google.­com/p/open-­ Cunningham, Ward; Fowler, Martin; Grenning, James; Highsmith, monica/, Download 2013-05-13. Jim; Hunt, Andrew; Jeffries, Ron; Kern, Jon; Marick, Brian; Martin, Czarnecki, Krzysztof; Eisenecker, Ulrich W: Generative Programming. Robert C; Mellor, Steve; Schwaber, Ken; Sutherland, Jeff; Thomas, Methods, Tools, and Applications. Addison-Wesley 2000. Dave: Manifesto for Agile Software Development. http://www.­ Damm, Matthias; Winzenried, Oliver: Security in OPC UA. In: WEKA agilemanifesto.­org/ 2001, Download 2011-12-08. FACHMEDIEN GmbH: Computer & AUTOMATTION. Fachmedium der Beebe, Nelson H. F: Using C and C++ with Fortran. Department of Automatisierungstechnik. Issue 12–2013. Mathematics, University of Utah 2001. http://www.­math.­utah.­edu/ DANTE: GE’ANT Bandwidth on Demand. http://www.­dante.­net/DANTE_ software/c-with-fortran.­html, Download 2011-07-30. Network_Projects/GEANT/Pages/Home.­aspx, Download 2013-12-01. Bernese: Bernese GPS Software. http://www.­bernese.­unibe.­ch/, Dassing, Reiner; Lauber, Pierre; Neidhardt, Alexander: Design-Rules für Download 2011-06-18. die strukturierte Programmierung unter C und die objektorientierte Bundesamt für Kartographie und Geodäsie (BKG): Networked Transport Programmierung unter C++. Revision 28.02.2008, Geodtätisches of RTCM via Internet Protocol (Ntrip). Version 1.0. Bundesamt für Observatorium Wettzell, 2008. Kartographie und Geodäsie Frankfurt am Main 2004. http://igs.­bkg.­ Davidson, Tal; Pattee, Jim: Artistic Style 2.02. A Free, Fast and Small bund.­de/root_ftp/NTRIP/documentation/NtripDocumentation.­ Automatic Formatter for C, C++, C#, and Java Source Code. http:// pdf, Download 2013-11-25. astyle.­sourceforge.­net/ and http://astyle.­sourceforge.­net/astyle.­ Bloomer, John: Power Programming with RPC. O’Reilly & Associates, Inc. html, Download 2012-07-16. Sebastopol 1991. Dawes, Beman; Abrahams, David: Boost C++ Libraries. http://www.­ Bundesministerium für Bildung und Forschung. (editor): Zukunftsbild boost.­org/, Download 2011-06-03. «Industrie 4.0». HIGHTECH-STRATEGIE. Bundesministerium für Deutsche Forschungsgemeinschaft Geschäftsstelle (DFG): Proposals for Bildung und Forschung. https://www.­bmbf.­de/pub/Zukunftsbild_ Safeguarding Good Scientific Practice. Recommendations of the Industrie_40.­pdf, Download 2016-03-28. Commission on Professional Self Regulation in Science. Wiley-VCH Bovet, Daniel P; Cesati, Marco: Understanding the LINUX KERNEL. O’Reilly Verlag GmbH Weinheim 1998., http://www.­dfg.­de/download/pdf/ Media, Inc. 2006. dfg_im_profil/reden_stellungnahmen/download/empfehlung_ Brookshear, J. Glenn: Computer Science. An Overview. Pearson Education, wiss_praxis_0198.­pdf, Download 2011-12-08. Inc. 2012. DESCA: DESCA 2020 Model Consortium Agreement. NEW: DESCA 2020 ver- Brown, Martin C: Perl: The Complete Reference. Second Edition. Osborne/ sion 1.2, February 2016. http://www.­desca-2020.­eu/, February 2016, McGraw-Hill Companies Berkeley 2001. Download 2016-03-11. Clang team: clang: a C language family frontend for LLVM. http://clang.­ Diedrich, Olive: Sun RPC-Code steht jetzt unter BSD-Lizenz. heise online llvm.­org/, Download 2013-01-09. 2009., http://www.­heise.­de/newsticker/meldung/Sun-RPC-Code-­ steht-jetzt-unter-BSD-Lizenz-197329.­html, Download 2012-08-19. 525 References

Dominguez, Jorge: The Curious Case of the CHAOS Report 2009. http:// Gerloni, Helmar; Oberhaitzinger, Barbara; Reiser, Helmut; Plate, Jürgen: www.­projectsmart.­co.­uk/the-curious-case-of-the-chaos-report- Praxisbuch Sicherheit für Linux-Server und -Netze. Carl Hanser Verlag 2009.­html, Download 2011-06-09. München 2004. Duvall, Paul M; Matyas, Steve; Glover, Andrew: Continuous Integration. Golem.de: golem.de. IT-News für Profs. Die ferngesteuerte Fabrik. http:// Improving software quality and reducing risk. Sixth printing. Rearson www.­golem.­de/news/steuerungstechnik-die-ferngesteuerte-­ Education, Inc. 2011. fabrik-1207-93515.­html, Download 2013-01-10. Eclipse Foundation, The: Eclipse Open Source Developer Report. http:// Geodätisches Observatorium Wettzell: Lokale Meßverfahren. www.­slideshare.­net/IanSkerrett/eclipse-survey-2012-report-final, Wasserdampfradiometer Wettzell. Hompage of the Geodätisches Download 2012-07-17. Observatorium Wettzell. http://www.­wettzell.­ifag.­de/WATER/ Enste, Udo; Müller, Jochen: Datenkommunikation in der Prozessindustrie. water_start.­html, Download 2012-12-31. Darstellung und anwendungsorientierte Analyse. Oldenbourg Gierhardt, Horst: Informatik in der Oberstufe. Informatik in der 12 mit Java. Industrieverlag GmbH 2007. Acht-Damen-Problem. http://www.­gierhardt.­de/informatik/info12/ ESA: ARIANE 5. Flight 501 Failure. Report by the Inquiry Board. ESA, http:// Damen.­pdf, Download 2011-06-28. esamultimedia.­esa.­int/docs/esa-x-1819eng.­pdf, Download Gigantic Software: logog – logger optimized for games. http://johnwbyrd.­ 2012-01-02. github.­io/logog/, Download 2014-04-01. Ettl, M: Entwicklung einer Methodenbibliothek zur genauen GNU: The GNU Fortran Compiler. http://gcc.­gnu.­org/onlinedocs/gfor- Positionsbestimmung beliebiger Objekte mit echtzeitnaher tran/index.­html#Top, Download 2011-06-18. Bildverarbeitung. Diploma thesis. FH Regensburg 2006. GNU: GNU Operating System. GNU Make. Free Software Foundation, Inc. Ettl, Martin: Hochgenaue numerische Lösung von Bewegungsproblemen http://www.­gnu.­org/software/make/, Download 2012-06-05. mit frei wählbarer Stellengenauigkeit. Dissertation. Fakultät für GNSS Data Center: about NTRIP. Networked Transport of RTCM via Internet Bauingenieur- und Vermessungswesen. Technische Universität Protocol. Bundesamt für Kartographie und Geodäsie Frankfurt am München 2012., http://d-nb.­info/1030100101/34, Download Main. http://igs.­bkg.­bund.­de/ntrip/about, Download 2013-11-25. 2013-05-13. Güting, Ralf Hartmut; Erwig, Martin: Übersetzerbau. Techniken, Favre-Bulle, Bernard: Automatisierung komplexer Industrieprozesse. Werkzeuge, Anwendungen. Springer-Verlag Heidelberg 1999. Systeme, Verfahren und Informationsmanagement. Springer-Verlag/ Gutiérrez-Naranjo, Miguel A; Martínez-del-Amor, Miguel A; Pérez-­ Wien 2004. Hurtado, Ignacio; Pérez-Jiménez, Mario J: Solving the N-Queens Feathers, Michael C: Effektives Arbeiten mit Legacy Code. Refactoring und Puzzle with P Systems. http://www.­gcn.­us.­es/7BWMC/volume/21_ Testen bestehender Software. mitp, Verlagsgruppe Hüthig Jehle queens.­pdf, University of Sevilla, Download 2011-06-28. Rehm GmbH 2011. (Original title: Working Effectively with Legacy Graphviz: Graphviz – Graph Visualization Software. http://www.­graphviz.­ Code. Feathers, M., Pearson Education, Inc., Prentice Hall PTR 2005). org/, Download 2012-01-16. Feister, Uwe: Nubiscope – ein neues Messgerät für die Halsall, Fred: Data Communications, Computer Networks and Open Wolkendokumentation. MOL-RAO Aktuell. Deutscher Wetterdienst, Systems. Fourth Edition. Addison-Wesley Company Inc. 1996. Meteorologisches Observatorium Lindenberg – Richard-Aßmann-­ Hase, Hayo; Behrend, Dirk; Ma, Chopo; Petrachenko, Bill; Schuh, Harald; Observatorium 2/2013. http://www.­dwd.­de/bvbw/generator/ Whitney, Alan: VLBI2010 – An International VLBI Service Project in DWDWWW/Content/Forschung/FELG/Download/aktuell__022013, Support of the Global Geodetic Observing System. REUNION SIRGAS2010, templateId=raw,property=publicationFile.­pdf/aktuell_022013.­pdf, celebrada en el marco de la 42 Reunión del Consejo Directivo del Download 2015-09-17. Instituto Panamericano de Geografía e Historia (IPGH). Instituto Feldman, S. I; Gay, David M; Maimone, Mark W; Schryer, N. L: A Fortran to Geográfico Nacional, Lima, Perú 2010. http://www.­sirgas.­org/­ C Converter. Computing Science Technical Report No. 149, AT&T Bell fileadmin/docs/Boletines/Bol15/17_Hase_VLBI2010.­pdf, Download Laboratories 1995., http://www.­netlib.­org/f2c/f2c.­pdf, Download 2013-11-21. 2011-07-29. HATLab: FiLa 10G Board. Connection and Service. HAT-Lab s.r.l.. http:// Flightradar24 AB: flightradar24. Live Air Traffic. http://www.­flightradar24.­ www.­hat-lab.­com/hatlab/component/content/article/31- com/, Download 2012-09-17. generale/50-fila-10g-board, Download 2013-12-01. Forbrig Peter; Kerner, Immo O: Softwareentwicklung. Lehr- und van Heesch, Dimitri: Doxygen Documentation. Generate documentation Übungsbuch. Fachbuchverlag Leipzig 2004. from source code. http://www.­stack.­nl/dimitri/doxygen/, Download Fowler, Martin; Scott, Kendall: UML konzentriert. Eine strukturierte 2011-12-08. Einführung in die Standard-Objektmodellierungssprache. 2. Auflage. Helmke, Hartmut; Höppner, Frank; Isernhagen, Rolf: Einführung in die Addison-Wesley Verlag, Pearson Education Deutschland GmbH Software-Entwicklung. Vom Programmieren zur erfolgreichen 2000. (Original title: UML Distilled. Second Edition. A brief guide to Software-Projektarbeit. Am Beispiel von Java und C++. Carl Hanser the standard object modelling language. Addison-Wesley). Verlag München 2007. Field System Team: Mark IV Field System. Volume 1. Space Geodesy Hermes, Thorsten: Digitale Bildverarbeitung. Eine praktische Einführung. Program. NASA/Goddard Space Flight Center 1993/1997a. Carl Hanser Verlag München Wien 2005. Field System Team: Mark IV Field System. Volume 2. Space Geodesy Herold, Helmut: Linux/Unix Systemprogrammierung. Addison-Wesley Program. NASA/Goddard Space Flight Center 1993/1997b. Verlag München 2004. Springer Gabler Verlag (Herausgeber): Gabler Wirtschaftslexikon. Hiener, Michael: Entwicklung eines Programmmoduls zur automatischen Keyword: Projekt. Springer Gabler. Springer Fachmedien Wiesbaden Extraktion gültiger Messwerte einer Satelliten-Entfernungsmessanalge GmbH, http://wirtschaftslexikon.­gabler.­de/Archiv/13507/projekt-­ in Anwesenheit von starkem Rauschen. Diplomarbeit der v7.­html, Download 2015-09-11. Forschungseinrichtung Satellitengeodäsie und des Lehrstuhls für GCC team: GCC, the GNU Compiler Collection. Free Software Foundation, Raumfahrttechnik. Technische Universität München 2006. Inc.. http://gcc.­gnu.­org/, Download 2012-06-05. Hofmann, Fridolin: Betriebssysteme: Grundkonzepte und GDB team: GDB: The GNU Project Debugger. Free Software Foundation, Modellvorstellungen. B. G. Teubner Stuttgart 1991. Inc.. http://sources.­redhat.­com/gdb/, Download 2012-06-11. ILRS: Data and Product Formats. http://ilrs.­gsfc.­nasa.­gov/data_and_ GÉANT: GÉANT. The pan-European research and education network that products/formats/index.­html, Download 2012-10-04. interconnects Europe’s National Research and Education Networks Ippolito, Greg: Using C/C++ and Fortran together:. YoLinux.­com Tutorial, (NRENs). http://www.­geant.­net/Services/ConnectivityServices/Pages/ YoLinux.­com: Linux Information Portal 2008 ­http://www.­yolinux.­ Bandwidth_on_Demand.­aspx, Download 2013-12-01. com/TUTORIALS/LinuxTutorialMixingFortranAndC.­html, Download 2011-07-30. 526 References

ITWissen: Information. ITWissen. Das große Online-Lexikon für Linux Foundation, The: API Sanity Checker. LSB Infrastructure Program. Informationstechnologie. http://www.­itwissen.­info/definition/lexikon The Linux Foundation. http://ispras.­linuxbase.­org/index.­php/API_ /Information-information.­html, Download 2011-11-25. Sanity_Checker, Download 2012-11-25. Jamshidi, Mo: Systems of Systems Engineering. Principles and Applications. Lockheed Martin Corporation: JOINT STRIKE FIGHTER AIR VEHICLE C++ CRC Press. Taylor & Francis Group 2009. CODING STANDARDS FOR THE SYSTEM DEVELOPMENT AND JIVE (Eldering, Bob): Jive5ab. Joint Institute for VLBI in Europe. http:// DEMONSTRATION PROGRAM. Document Number 2RDU00001 Rev www.­jive.­nl/jive_cc/sin/sin23/node3.­html, Download 2013-12-01. C. Lockheed Martin Corporation, Dec. 2005., http://www2.­research.­ JMU, Liverpool: The Liverpool Telescope. Liverpool John Moores att.­com/bs/JSF-AV-rules.­pdf, Download 2011-06-28. University, http://telescope.­livjm.­ac.­uk/, Download 2013-01-10. Loeliger, Jon: Versionskontrolle mit Git. O’Reilly Verlag Köln 2010. Jones, Allen; Freeman, Adam: Visual C# 2010 Recipies. A Problem-Solution (Original title: Version Control with Git. O’Reilly Media, Inc. 2009). Approach. apres Springer-Verlag New York, Inc. 2010. Lovell, Jim; et al: AuScope VLBI Operations Wiki. http://auscope.­phys.­ Jet Propulsion Laboratory: JPL Institutional Coding Standard for the C utas.­edu.­au/opswiki/doku.­php, Download 2012-01-20. Programming Language. Jet Propulsion Laboratory. California Lovell, Jim; Neidhardt, A: Field System Remote Operations. Operation of Institute of Technology 2009. http://lars-lab.­jpl.­nasa.­gov/JPL_ the AuScope VLBI Array. Course script of the Seventh IVS Technical Coding_Standard_C.­pdf, Download 2012-11-25. Operations Workshop. Haystack 2013. Kan, Stephen H: Metrics and models in software quality engineering. Luiz, Sylvio; Neto, Mantelli; von Wagenheim, Aldo; Pereira, Enio Bueno; Second Edition. Pearson Education, Inc. 2003. Comunello, Eros: The Use of Euclidean Geometric Distance on RGB Karpov, Andrey; Ryzhkov, Evgeniy: 20 issues of porting C++ code on the Color Space for the Classification of Sky and Cloud Patterns. In: 64-bit platform. http://archive.­gamedev.­net/reference/program- American Meteorological Society: Journal of Atmospheric and ming/features/20issues64bit/, Download 2011-07-07. Oceanic Technology. Volume 27. Issue 9. Boston 2010. http://sonda.­ Kasper, Manuel: m0n0wall. http://m0n0.­ch/wall/, Download ccst.­inpe.­br/publicacoes/periodicos/Euclidean_Geometric_ 2013-05-30. Distance_on_RGB_for_Sky_and_Cloud_Patterns.­pdf, Download Kazakos, Wassilios; Schmidt, Andreas; Tomczyk, Peter: Datenbanken und 2015-09-14. XML. Springer Verlag Berlin Heidelberg 2002. Maguire, Steve: Writing solid code. Microsoft’s Techniques for Developing Linux Kernel Organization, Inc: The Linux Kernel Archives. http://kernel.­ Bug-Free C Programs. Microsoft Press Redmond, Washington (USA) org/, Download 2011-06-18. 1993. Kernighan, Brian W; Ritchie, Dennis M: Programmieren in C. Mit dem Mahnke, Wolfgang; Leitner, Stefan-Helmut; Damm, Matthias: OPC C-Reference Manual in deutscher Sprache. 2. Ausg., ANSI-C, Carl Unified Architecture. Springer-Verlag Berlin Heidelberg 2009. Hanser Verlag München Wien 1990. (Original title: The C Marjamäki: Writing Cppcheck rules. Part 1 – Getting started. http://heanet.­ Programming Language. Second Edition. ANSI-C. Bell Telephone dl.­sourceforge.­net/project/cppcheck/Articles/writing-­rules-­1.­pdf, Laboratories, Inc., Prentice-Hall International Inc. London 1990). Download 2012-06-07. Kilger, Richard: Das 10-m-Radioteleskop. In: Schneider, Manfred (ed.): The MathWorks, Inc: PolySpace for Code Verification. Training Course Satellitengeodäsie. Ergebnisse aus dem gleichnamigen Notebook. The MathWorks, Inc. 2010. Sonderforschungsbereich der Technischen Universität München. McClure, Stuart; Scambray, Joel; Kurtz, George: Das Anti-Hacker-Buch. 5. Sonderforschungsbereich. Deutsche Forschungsgemeinschaft. Auflage. bhv, Redline GmbH Heidelberg 2006. (Original title: VCH Verlagsgesellschaft 1990. Hacking Exposed™. Fifth Edition. Network Security Secrets & Klar, Rainer: Messung und Modellierung paralleler und verteilter Solutions 2005). Rechensysteme. B. G. Teubner Stuttgart 1995. Meek, Brian L; Heath, Patricia L. (eds.): Guide to Good Programming Klar, Michael; Klar, Susanne: Einfach generieren. Generative Practice. Wiley & Sons Inc 1983. In: Chapman, Alan: tree swing pic- Programmierung verständlich und praxisnah. Carl Hanser Verlag tures. the tree swing or tire swing funny diagrams – for training, pre- München 2006. sentations, etc. 2014. http://www.­businessballs.­com/treeswing.­htm, Kofler, Michael: Linux 2010. Debian, Fedora, openSUSE, Ubuntu. 9. Auflage. Download 2014-03-24. Addison-Wesley Verlag 2010. MISRA (The Motor Industry Software Reliability Association): Kopp, Herbert: Bildverarbeitung interaktiv. Eine Einführung mit multime- MISRA-C:2004. Guidlines for the use of the C language in critical sys- dialem Lernsystem auf CD-ROM. B. G. Teubner Stuttgart 1997. tems. MIRA Limited Warwickshire (UK) 2004. Kretschmar, O; Dreyer, R: Mediendatenbank- und Medien-Logistik-­ MISRA (The Motor Industry Software Reliability Association): MISRA Systeme. Anforderungen und praktischer Einsatz. Oldenbourg C++:2008. Guidlines for the use of the C++ language in critical sys- Wissenschaftsverlag GmbH 2004. tems. MIRA Limited Warwickshire (UK) 2008. van Langevelde, Huib Jan [coordinator]: NEXPReS Final Report. Joint Morgan, David: VPNs: Virtual Private Networks. Primitive roots and Diffie-­ Institute of VLBI in Europe Dwingeloo 2013. http://www.­jive.­nl/nex- Hellman key exchange. Computer Science Department. Santa Monica pres/lib/exe/fetch.­php?media=nexpres:nexpres-final-report-­ College 2003. http://homepage.­smc.­edu/morgan_david/vpn/assign- rev_2013-09-04.­pdf, Download 2013-12-01. ments/assgt-primitive-roots.­htm, Download 2015-09-21. Langmann, Reinhard: Taschenbuch der Automatisierung. Carl Hanser Müller, Andrea: Erweiterte Systemüberwachung mit rsyslog». rsyslog über- Verlag Leipzig 2010. wacht unter Linux Anwendungen und Betriebssystem. heise Netze 1999. LangPop.com: Programming Language Popularity. http://langpop.­com/, http://www.­heise.­de/netze/artikel/Erweiterte-­Systemueberwachung-­ Download 2011-06-18. mit-rsyslog-846750.­html, Download 2014-04-01. Leffingwell, Dean; Widrig, Don: Managing Software Requirements: A Use MSDN Microsoft: Design Guidelines for Class Library Developers. .NET Case Approach. Pearson Education, Inc. 2003. Framework 1.1. http://msdn.­microsoft.­com/en-us/library/czefa0ke% Lévénez, Éric: Computer Languages History. http://www.­levenez.­com/ 28vs.­71%29.­aspx, Download 2011-11-18. lang/, Download 2011-06-19. National Academy of Sciences: Precise Geodetic Infrastructure. National Li, Qingyong; Lu, Weitao; Yang, Jun: A Hybrid Thresholding Algorithm for Requirements for a Shared Resource. National Academies Press 2010. Cloud Detection on Ground-Based Color Images. In: American http://www.­nap.­edu/catalog.­php?record_id=12954, Download Meteorological Society: Journal of Atmospheric and Oceanic 2013-12-20. Technology. Volume 28. Issue 10. Boston 2011. http://journals.­ National Aeronautics and Space Administration (NASA), Goddard ametsoc.­org/doi/pdf/10.­1175/JTECH-D-11-00009.­1, Download Space Flight Center: GMSEC. Goddard Mission Service Evolution 2015-09-13. Center. http://gmsec.­gsfc.­nasa.­gov/index.­php, Download 2014- 03-30. 527 References

Ncurses team: Announcing ncurses 5.9 Free Software Foundation, Inc. PostgreSQL Global Development Group: PostgreSQL. Das offizielle http://www.­gnu.­org/software/ncurses/, Download 2012-09-26. Handbuch. mitp-Verlag Bonn 2003. Neidhardt, Alexander: Verbesserung des Datenmanagements in inhomo- Precht, Manfred; Meier, Nikolaus; Kleinlein, Joachim: EDV-Gundwissen. genen Rechnernetzen geodätischer Messeinrichtungen auf der Basis Eine Einführung in Theorie und Praxis der modenen EDV. 2. Auflage. von Middleware und Dateisystemen am Beispiel der Addison-Wesley (Deutschland) GmbH 1994. Fundamentalstation Wettzell. Mitteilungen des Bundesamtes für Press, William H; Teukolsky, Saul A; Vetterling, William T; Flannery, Brian Kartographie und Geodäsie. Band 37. Verlag des Bundesamtes für P: Numerical Recipes in C++. The Art of Scientific Computing. Second Kartographie und Geodäsie Frankfurt am Main 2005. Edition, Cambridge University Press New York 2005. Neidhardt, A; Ettl, M; Lauber, P; Leidig, A; Eckl, J; Riederer, M; Dassing, R; Puder, Arno; Römer, Kay: Middleware für verteilte Systeme. 1. Auflage. Schönberger, M; Plötz, Ch; Schreiber, U; Steele, I: Automation and dpunkt.verlag GmbH Heidelberg 2001. remote control as new challenges on the way to GGOS. In: Proceedings Purdy, Gregor N: LINUX iptables. KURZ & GUT. 1. Auflage. O’Reilly Verlag of the 17th International Workshop on Laser Ranging, Nr. 48, GmbH & Co. KG 2005. (Original title: Inux iptables Pocket Reference. pp 273–278, Verlag des Bundesamtes für Kartographie und O’Reilly Media, Inc. 2004). Geodäsie 2012a. Python Software Foundation: Python v2.7.3 documentation. The Python Neidhardt, A; Ettl, M; Mühlbauer, M; Plötz, C; Hase, H; Sobarzo, S; Herrera, Standard Library. Built-in Functions. http://docs.­python.­org/library/ C; Onate, E; Zaror, P; Pedreros, F; Zapato, O; Lovell, J: Two weeks of functions.­html, Download 2012-09-08. continuous remote attendance during CONT11. Poster at the 7th IVS Rawashdeh, Adnan; Matalkah, Bassem: A New Software Quality Model for General Meeting. Madrid 2012b. Evaluating COTS Components. In: Journal of Computer Science 2 (4), Neumann, Thomas: bcov. http://bcov.­sourceforge.­net/, Download pp 373–381, ISSN 1549–3636, 2006. 2012-06-06. Rembold, Ulrich (ed.); Blume, Christian; Epple, Wolfgang; Hagemann, Niell, Arthur; Whitney, Alan; Petrachenko, Bill; Schlüter, Wolfgang; Manfred; Levi, Paul: Einführung in die Informatik für Vandenberg, Nancy; Hase, Hayo; Koyama, Yasuhiro; Ma, Chopo; Naturwissenschaftler und Ingenieure. Carl Hanser Verlag München Schuh, Harald; Tuccari, Gino: VLBI2010: Current and Future Requirements Wien 1991. for Geodetic VLBI Systems. Report of Working Group 3 to the IVS Ricklefs, R. L: Consolidated Laser Ranging Prediction Format. Version 1.01. Directing Board. GSFC/NASA 2005. http://ivscc.­gsfc.­nasa.­gov/about/ Feb. 2006. http://ilrs.­gsfc.­nasa.­gov/docs/cpf_1.­01.­pdf, Download wg/wg3/IVS_WG3_report_050916.­pdf, Download 2013-01-19. 2012-09-16. Niemann, Heinrich: Pattern Analysis and Understanding. Second Edition. Ricklefs, R. L; Moore, C. J: Consolidated Laser Ranging Data Format (CRD). Springer-Verlag Berlin Heidelberg New York 1990. Version 1.01. Oct. 2009. http://ilrs.­gsfc.­nasa.­gov/docs/crd_v1.­01.­pdf, National Institute of Standards and Technology (NIST): Digital Signature Download 2012-09-16. Standard (DSS). FEDERAL INFORMATION PROCESSING STANDARDS Riedel, Sven: SSH. kurz & gut. 1. Auflage. O’Reilly Verlag GmbH & Co. KG PUBLICATION. FIPS PUB 186–3. http://csrc.­nist.­gov/publications/ Köln 2004. fips/fips186-3/fips_186-3.­pdf, Download 2013-05-19. Ristanovic CASE: Software Metrics. Software Metrics Parameters. http:// National Institute of Standards and Technology (NIST): Expect. http:// www.­ristancase.­com/html/dac/manual/2.­12.­01%20Software%20 www.­nist.­gov/el/msid/expect.­cfm, Download 2012-09-06. Metrics%20Parameters.­html, Download 2012-07-02. Oestereich, Bernd: Analyse und Design mit UML 2. Objektorientierte Rothacher, Markus: Towards a Rigorous Combination of Space Geodetic Softwareentwicklung. 7. Ausgabe, Oldenbourg Wissenschaftsverlag Techniques. In: Richter, Bernd; Schwegmann, Wolfgang; Dick, Wolfgang GmbH München 2005. R: Proceedings of the IERS Workshop on Combination Research and Global Oracle Sun Developer Network (SDN): Standard Library, STL and Thread Geophysical Fluids. International Earth Rotation and Reference Systems Safety. SDN April 2000., http://developers.­sun.­com/solaris/articles/ Service (IERS). IERS Technical Note No. 30. Bavarian Academy of Sciences stl-new.­html, Download 2011-11-24. Munich 2002. http://www.­iers.­org/SharedDocs/Publikationen/EN/IERS/ Oracle: System Administration Guide: Security Services. Oracle and/or its Publications/tn/TechnNote30/tn30.­pdf;jsessionid=9E49A13FF5F13BC affiliates 2011, http://docs.­oracle.­com/cd/E23823_01/html/816- C32A093BFBB613DEB.live1?__blob=publicationFile&v=1, Download ­4557/auth-2.­html and http://docs.­oracle.­com/cd/E23823_01/ 2015-09-06. pdf/816-4557.­pdf, Download 2013-05-14. Rothacher, Markus; Plag, Hans-Peter; Neilan, Ruth: The Global Geodetic Osherove, Roy: The Art of Unit Testing. Deutsche Ausgabe. mitp, Observing System. Geodesy’s contribution to Earth Observation. Verlagsgruppe Hüthig Jehle Rehm GmbH München 2010. (Original GGOS. International Association of Geodesy. http://www.­ggos-­ title: The Art of Unit Testing with Examples in .NET. Manning portal.­org/lang_en/nn_261454/SharedDocs/Publikationen/EN/ Publications Co., Greenwich, Connecticut 2009). GGOS/Introduction__to__GGOS,templateId=raw,property=public Osovlanski, Doron; Nissenbaum, Baruch: baruch.c. baruch.hint. In: Noll, ationFile.­pdf/Introduction_to_GGOS.­pdf, Download 2015-09-27. Landon Curt; Cooper, Simon; Seebach, Peter; Broukhis, Leonid A: RTAI Team: RTAI – the Real-Time Application Interface for Linux from The International Obfuscated C Code Contest. Winning entries. 1990. DIAPM. RTAI – Real-Time Application Interface Official Website. 7th International Obfuscated C Code Contest. 2003., http://www.­de.­ Politecnico di Milano – Dipartimento di Ingegneria Aerospaziale ioccc.­org/years.­html#1990, Download 2011-08-04. 2010. https://www.­rtai.­org/, Download 2012-11-25. Peitgen, Heinz-Otto; Jürgens, Hartmut; Saupe, Dietmar: Bausteine des Rüping, Andreas: Agile Documentation. A Pattern Guide to Producing Chaos. Fraktale. Rowohlt Taschenbuch Verlag GmbH Hamburg Lightweight Documents for Software Projects. John Wiley & Sons Ltd. 1998. (Original title: Fractals for the Classroom. Part 1. Springer The Atrium Chichester UK 2003. Verlag New York 1992). Saake, Gunter; Sattler, Kai-Uwe; Heuer, Andreas: Datenbanken. Konzepte Pfeifer, Tilo; Schmitt, Robert (ed.): Autonome Produktionszellen. Komplexe und Sprachen. 3. Auflage. mitp/Redline GmbH 2008. Produktionsprozesse flexibel automatisieren. Springer-Verlag Berlin Savage, John E: Models of computation: exploring the power of comput- Heidelberg 2006. ing. Addison Wesley Longman, Inc. 1998. Pilato, C. Michael ; Collins-Sussman, Ben; Fitzpatrick, Brian W: Schicker, Edwin: Datenbanken und SQL. B. G. Teubner Stuttgart 1996. Versionskontrolle mit Subversion. Software-Projekte intelligent koordi- Schildt, Herbert: C++: The Complete Reference. Third Edition. Osborne/ nieren. 3. Auflage. O’Reilly Verlag GmbH & Co. KG Köln 2009. (Original McGraw-Hill Companies Berkeley 1998. title: Version Control with Subversion. The Standard in Open Source Schlüter, Wolfgang; Brandl, Nikolaus; Dassing, Reiner; Hase, Hayo; Version Control. Second Edition. O’Reilly Media, Inc. Sebastopol 2008). Klügel, Thomas; Kilger, Richard; Lauber, Piere; Neidhardt, Alexander; Plag, Hans-Peter; Pearlman, Michael: Global Geodetic Observing System. Plötz, Christian; Riepl, Stefan; Schreiber, Ulrich: Fundamentalstation Meeting the Requirements of a Global Society on a Changing Planet in Wettzell – ein geodätisches Observatorium. zfv – Zeitschrift für 2020. Springer-Verlag Berlin Heidelberg 2009. Geodäsie, Geoinformation und Landmanagement. Volume 132. 528 References

Number 3. pp 158–167. Wißner-Verlag 2007. http://www.­iapg.­bgu.­ Steffens, Guillaume: SMART CRITERIA. 50MINUTES.­com 2015. tum.­de/mediadb/143141/143142/Schlueter_et-al_zfv_3_2007.­pdf, Stevens, W. Richard : Programmieren von UNIX-Netzen. Grundlagen, Download 2014-03-25. Programmierung, Anwendung. Carl Hanser Verlag München and Schmid, Dietmar; Kaufmann, Hans; Pflug, Alexander; Strobel, Peter; Prentice-Hall International, Inc. London 1990. (Original title: UNIX Baur, Jürgen: Automatisierungstechnik. Mit Informatik und Network Programming. Prentice-Hall, Inc. 1990). Telekommunikation. Grundlagen, Komponenten, Systeme. Verlag Stroustrup, Bjarne: Die C++-Programmiersprache. 2. Auflage. Addison-­ Europa-Lehrmittel, Nourney, Vollmer GmbH & Co. KG Haan-Gruiten Wesley (Deutschland) GmbH München 1995. (Original title: The 2011. C++ programming language. Second Edition. At&T Bell Telephone Schneider, Manfred: Fundamentalstation Wettzell. Konzept und Rolle von Laboratories, Inc. 1991). Fundamentalstationen. In: Schneider, Manfred (ed.): Sun Microsystems, Inc: RFC: Remote Procedure Call. Protocol Specification. Satellitengeodäsie. Ergebnisse aus dem gleichnamigen Version 2. Network Working Group RFC 1057 June 1988., http:// Sonderforschungsbereich der Technischen Universität München. www.­ietf.­org/rfc/rfc1057.­txt, Download 2012-08-19. Sonderforschungsbereich. Deutsche Forschungsgemeinschaft. Takahashi, Fujinobi; Kondo, Tetsuro; Takahashi, Yukio; Koyama, Yasuhiro: VCH Verlagsgesellschaft 1990. Very Long Baseline Interferometer. IOS Press 2000. Schöning, Uwe: Theoretische INformatik – kurzgefaßt. 3. Auflage. Tanenbaum, Andrew S: Moderne Betriebssysteme. 2. Auflage. Carl Hanser Spektrum, Akad. Verl. Berlin 1997. Verlag München 1995. (Original title: Modern operating systems. Schüler, Torben; Kronschnabl, Gerhard; Plötz, Christian; Neidhardt, Prentice-Hall, Inc. 1992). Alexander; Bertarini, Alessandra; Bernhart, Simone; la Porta, Laura; TIOBE Software: TIOBE Programming Community Index for April 2014. Halsig, Sebastian; Nothnagel, Axel: Initial Results Obtained with the April Headline: Perl hits all-time low (position 13). http://www.­tiobe.­ First TWIN VLBI Radio Telescope at the Geodetic Observatory Wettzell. com/index.­php/content/paperinfo/tpci/index.­html, Download Sensors — Open Access Journal. MDPI AG. ISSN (Online) 1424– 2014-05-04. 8220, 2015. Toal, Ray: Compiler Architecture. Loyola Marymount University, Los Seeber, Günter: Satellitengeodäsie. Walter de Gruyter & Co. 1988. Angeles. http://cs.­lmu.­edu/ray/notes/compilerarchitecture/, Seward, Julian; Valgrind developers: Valgrind Documentation. Release Download 2016-02-29. 3.7.0 2 November 2011. 2011. http://valgrind.­org/docs/manual/val- Unidata: The NetCDF Users’ Guide. The Extended XDR Layer. http://www.­ grind_manual.­pdf, Download 2012-07-11. unidata.­ucar.­edu/software/netcdf/docs/netcdf/XDR-Layer.­html, Shaffer, D. B; Vandenberg, Nancy R: Antenna Performance. Operations Download 2014-06-22. Manual. NASA/Goddard Space Flight Center. Space Geodesy Project Valgrind developers: Valgrind. http://valgrind.­org/, Download 1993. ftp://gemini.­gsfc.­nasa.­gov/pub/fsdocs/antenna.­pdf, Download 2012-07-11. 2013-01-19. Vandenberg, Nancy R: Calibration Data. Operations Manual. NASA/ Singhal, Mukesh; Shivaratri, Niranjan G: Advanced concepts in operating Goddard Space Flight Center. Space Geodesy Project 1993. ftp:// systems. Distributed, , and multiprocessor operating systems. gemini.­gsfc.­nasa.­gov/pub/fsdocs/calibrat.­pdf, Download 2013-01-19. McGraw-Hill, Inc. 1994. Vandenberg, Nancy R: drudg: Experiment Preparation Drudge Work. Smart, Julian; Hock, Kevin; Csomor, Stefan: Cross-Platform GUI NASA/Goddard Space Flight Center. Space Geodesy Project 2000. Programming with wxWidgets. Pearson Education, Inc. 2006. ftp://gemini.­gsfc.­nasa.­gov/pub/fsdocs/drudg.­pdf, Download Smith, Greg; Sidky, Ahmed: Becoming agile in an imperfect world. 2013-02-12. Manning Publications Co. 2009. Vandenberg, Nancy R; Rogers, E. E; Himwich, W. E: Phase Cal System. Sneed, Harry M; Seidl, Richard; Baumgartner, Manfred: Software in Operations Manual. NASA/Goddard Space Flight Center. Space Zahlen. Die Vermessung von Applikationen. Carl Hanser Verlag Geodesy Project 1993. ftp://gemini.­gsfc.­nasa.­gov/pub/fsdocs/ München 2010. phase.­pdf, Download 2013-01-19. Sommerville, Ian: Software Engineering 8. Addison-Wesley Publishers Vandenberg, Nancy R: Standard Schedule File Format. NASA/Goddard Limited and Pearson Education Limited 2007. Space Flight Center. Space Geodesy Project 1997. ftp://gemini.­gsfc.­ Souza-Echer, M. P; Pereira, E. B; Bins, L. S; Andrade, M. A. R: A Simple nasa.­gov/pub/fsdocs/skfile.­pdf, Download 2014-06-27. Method for the Assessment of the Cloud Cover State in High-Latitude Vandevoorde, David; Josuttis, Nicolai M: C++ Templates. The Complete Regions by a Ground-Based Digital Camera. In: American Guide. Pearson Education, Inc. 2003. Meteorological Society: Journal of Atmospheric and Oceanic Vigenschow, Uwe: Objektorientiertes Testen und Testautomatisierung in Technology. Volume 23. Issue 3. Boston 2006. http://journals.­ der Praxis. Konzepte, Techniken und Verfahren. 1. Auflage, dpunkt. ametsoc.­org/doi/pdf/10.­1175/JTECH1833.­1, Download 2015-09-13. verlag GmbH 2005. Spillner, Andreas; Roßner, Thomas; Winter, Mario; Linz, Tilo: Praxiswissen VMware: vmware . VMware Inc. http://www.­vmware.­com/de/, Download Softwaretest. Testmanagement. Aus- und Weiterbildung zum Certified 2012-07-25. Tester – Advanced Level nach ISTQB-Standard. 3. Auflage, dpunkt.ver- Vogel, Oliver; Arnold, Ingo; Chughtai, Arif; Kehrer, Timo: Software lag GmbH 2011. Architecture. A Comprehensive Framework and Guide for Practitioners. Stallman, Richard M; McGrath, Roland; Smith, Paul D: GNU Make. A Springer 2011. Program for Directing Recompilation. GNU make Version 3.82. Free Wagner, Jan: Tsunami UDP Protocol. http://tsunami-udp.­sourceforge.­ Software Foundation, Inc. 2010., http://www.­gnu.­org/software/ net/, Download 2012-08-14. make/manual/make.­pdf, Download 2012-06-05. Wagner, Kai: Selbstdatenschutz durch präventive Verarbeitungskontrolle. Stallman, Richard M; GCC developer team: Using the GNU Compiler Dissertation. Universität Hamburg 2013. Collection. For gcc version 4.7.1. Free Software Foundation, Inc., Warner, Daniel: Advanced SQL. Studienausgabe. SQL für Praxis und http://gcc.­gnu.­org/onlinedocs/gcc-4.­7.­1/gcc.­pdf, Download Studium. Franzis Verlag GmbH Poing 2007. 2012-06-05. Wassermann, Tobias: Versionsmanagement mit Subversion. Installation, The Standish Group: http://www1.­standishgroup.­com/newsroom/ Konfiguration, Administration. mitp, REDLINE GmbH, Heidelberg 2006. chaos_2009.­php, Download 2011-06-09. Weinberger, Benjy; Silverstein, Craig; Eitzmann, Gregory; Mentovai, The Standish Group: CHAOS MANIFESTO 2013. Think Big, Act Small. The Mark; Landray, Tashana: Google C++ Style Guide. http://google-­ Standish Group. http://www.­versionone.­com/assets/img/files/ styleguide.­googlecode.­com/svn/trunk/cppguide.­xml, Revision ChaosManifesto2013.­pdf, Download 2014-05-04. 3.188, Download 2011-06-28. Starlink Joint Astronomy Centre: Starlink. Webpage of The Starlink Wells, Donovan: Extreme Programming: A gentle introduction. September Project, http://starlink.­jach.­hawaii.­edu/starlink, Download 28, 2009. http://www.­extremeprogramming.­org/, Download 2011-07-29. 2012-07-31. 529 References

Werner, Matthias: Algorithmen und Programmierung. Skript zur Vorlesung. Wunderlich, Lars: AOP. Aspektorientierte Programmierung in der Praxis. http://osg.­informatik.­tu-chemnitz.­de/lehre/old/ws1011/aup/AuP- entwickler.press Software & Support Verlag GmbH 2005. script.­pdf, Download 2011-08-05. Xen: Xen . What is Xen ?. Citrix Systems, Inc. http://xen.­org and http:// Weston, Neil: NGS Real-Time Network. Status & Future Prospects. National xen.­org/files/Marketing/WhatisXen.­pdf, Download 2012-07-25. Oceanic and Atmospheric Administration. National Geodetic Yadav, Abhishek: Analog Communication System. University Science Survey. Presentation at the NGS Convocation Silver Spring 2005. Press New Delhi 2008. http://www.­ngs.­noaa.­gov/Convocation2005/Presentations/ Zabbix LLC: ZABBIX. The Enterprise-class Monitoring Solution for Everyone. NGSRealTime_Weston.­ppt, Download 2013-11-25. http://www.­zabbix.­com/, Download 2015-09-19. Whitney, Alan; Lonsdale, Colin; Himwich, Ed; Vandenberg, Nacy; van Zavodnik, Raymond; Kopp, Herbert: Graphische Datenverarbeitung. Langevelde, Huib; Mujunen, Ari; Walker, Craig: VEX File Definition/ Grundzüge und Anwendungen. Carl Hanser Verlag München Wien 1995. Example. http://www.­vlbi.­org/vex/docs/vex%20definition%20 15b1.­pdf, Download 2014-06-27. (Notice: It was necessary to cite web content and web pages to write Wiest, Simon: Continuous Integration mit Hudson. Grundlagen und this book. Even if the links are correctly referenced, they often only Praxiswissen für Einsteiger und Umsteiger. 1. Auflage. dpunkt.verlag represent a snapshot of the web content taken at a specific date. If GmbH 2011. the pages are not available anymore, it is not in the hands of the Wolf, Henning; Bleek, Wolf-Gideon: Agile Softwareentwicklung. Werte, author of this work. In these cases, it might be useful to search the Konzepte und Methoden. 2. Auflage. dpunkt.verlag GmbH 2011. web archives, which are web pages offering archived web content Wooldridge, Michael: An Introduction to MultiAgent Systems. Second taken from time to time as a backup. One of these archives is http:// Edition. John Wiley & Sons Ltd. 2009. archive.­org/web/web.­php.) 531 A–B

Index

–– planning of the iterative construction 123 Autonomous Field System hardware A –– release plan 123 control cells 420 –– requirements of scientific software 117 Autonomous functionalities Abstraction 137 –– SMART criteria for iteration goals 119 –– control abstraction 335 Acceptance tests 83 –– use cases 119 –– control data propagation 334 Access control 432 –– user story cards 119 –– controlling 323, 333, 378 –– in software 435 –– virtual activities of one construction iteration 124 –– controlling tasks 324 Access Control List (ACL) 438, 444 –– virtual phases 121 –– controlling tasks for the mount model 327 Access rights 355 Agile team leader and core team 122, 123 –– detailed planning of actions 308 –– of the GGOS control layers 492 Agile values 120 –– failure management 330, 337, 389 Accuracy 17 Air Defense Identification Zone (ADIZ) 4 –– hardware driving 328, 337, 386 Acknowledgment 12 Alarm levels 377 –– information abstraction 335 Actuators 254–256, 279, 390, 397 Alphabet, syntax, semantics 182 –– intelligent planning systems 322 ACU. See Antenna Control Unit (ACU) Alternative GUI, HTML 293 –– planning 333, 378 Adapting skills of employees 512 American National Standards Institute –– adjustment 322 Adaption from the industry 277 (ANSI) 162, 165, 284, 292 –– analogies to operating systems 318 Additional aspects for remote control 422 American Standard Code for Information –– assignment strategies 318 Additional CI jobs 112 Interchange (ASCII) 162, 165, 173, 243, 292, –– evaluation metrics factors 310 Additional sensor net 388 306, 308, 323, 338, 377, 420, 522 –– priority evaluation 321 ADIZ. See Air Defense Identification Zone (ADIZ) Analog-to-digital converters 254 –– strategies 319 ADS-B. See Automatic Dependent Surveillance Analyzer checks and issues 85 –– roughcut planning of main tasks 308 Broadcast (ADS-B) Analyzer tools 84 –– simulation of failures and functionalities 338 Advanced Encryption Standard (AES) 146, ANSI. See American National Standards Institute –– update constraints for controlling data 334 434, 451 (ANSI) –– user interfacing 336, 378 Advantages of remote control 429 Antenna Control Unit (ACU) 265, 420 –– and main roles 327 Advantages of the iterative process 119 AOP. See Aspect Oriented Programming (AOP) –– to the outer world 327 Agent 397 AOP solutions for tracing and its interpretation 93 Autonomous hardware driving 367 –– autonomy 397 Apache 102, 114, 379 Autonomous planning 364 –– networks 399 Apache AntTM 114 Autonomous production cell 278 –– properties 399 Apache Maven 114 Autonomous user interfacing 367 Agile 8, 47–49, 57, 59, 63–62, 66, 67, 69, 81, 83, APD. See Avalanche Photo Diode (APD) Autonomy and automation 279 107, 116, 120–126, 128–130, 132, 144, 321 API Sanity Checker 82 Availability of the server 166 –– documentation 47, 48, 56, 121, 128 Appendices 10 Avalanche Photo Diode (APD) 250, 324, 335 –– iterative process 121 Application layer 150 Avoidance of documentation redundancies 54 –– meetings 124 Application Programming Interface (API) 284, –– philosophy 150 372, 376, 380 –– principles 120 Applied Computer Science as essential part 5 Agile software development B ARIANE 5 type conversion error 28 –– advantages of the iterative process 119 Background 10, 11 Artistic Style 2.02 (astyle) 66, 115 –– agile iterative process 121 Backus-Naur-Form (BNF) 182 ASCII. See American Standard Code for –– agile meetings 124 Bandwidth on demand 499 Information Interchange (ASCII) –– agile philosophy 120 Basic Input Output System (BIOS) 260 Aspect Oriented Programming (AOP) 92, 93 –– agile principles 120 bcov 80, 81, 115 Aspects 431 –– agile team 123 Benchmark 66 Asterisk 378 –– agile team leader and core team 122 Berkeley Software Distribution (BSD) 170 Asymmetric cipher algorithms 446 –– agile values 120 Better understanding 7 Asymmetric ciphers 446 –– classic models, sequential, V, W or spiral Big picture 18, 49, 50, 54, 60, 119, 121, 124, Asynchronous data traffic for GNSS 495 117–118 127, 279, 282, 327 Atomic 89, 103, 251, 323, 355, 356, 387 –– development process disciplines/ –– of the GGOS instrumentation 486 Audit 29 workfows 118 Binary Large Object (BLOB) 108, 363 AuScope 57, 428, 491, 506 –– development process phases 119 Binary messages 162 Authorization pyramid 451 –– elevator statement 121 Binary protection mask and observation Automated observation of mount model –– example planning 316 corrections 317 –– students project and agile training 126 Binary search 352, 392 Automated unit tests 78 –– svn diff 125 BIOS. See Basic Input Output System (BIOS) Automatic Dependent Surveillance Broadcast –– iteration plan 123 bison 190 (ADS-B) 251 –– iterative analysis and design, agile Bit order 162 Automatic sequence control 260 ­meetings 124 Black box tests 68 Automation 6, 62, 253, 262, 277, 279, 335, 370, –– iterative coding and private testing 125 BLOB. See Binary Large Object (BLOB) 378, 397, 407–409, 422, 504–507, 511, 512 –– iterative committing, continuous integration BNF. See Backus-Naur-Form (BNF) Autonomous control cells 280 and deployment 126 Book about coordination, communication Autonomous controlling 366 –– iterative software development processes 118 and automation 5 Autonomous failure management 368 –– need for agile practices 121 Boolean algebra 256 532 Index

Boost C++ Libraries 23, 141 –– first-come first-served 318 –– layout 26 Bottom-up 197, 490 –– fuzzy logic 315, 321 –– snippets and illustrations 10 Branches 103 –– genetic algorithms 322, 326 codespell 115 Brief information at the margin 12 –– image processing for metric parameters 310 Code toolbox 134 BSD. See Berkeley Software Distribution (BSD) –– image processing tools and libraries 318 –– categorization of toolbox elements 134 Buddy testing and pair programming 83 –– image textures 312 –– cohesion 133 Build and release management software 114 –– laser-ceilometer 311 –– coupling 133 Build output as test feedback 76 –– local thresholding 315 –– elements of a code toolbox 144 Bypass 420 –– logbook as a proprietary solution 330 –– example –– lucky imaging 317 –– component interface 137 –– naming service 328 –– module interface 135 C –– neuronal nets 322, 326 –– template 139 –– nubiscope 311 –– template metaprogramming 142 C 6, 20, 22, 24, 30, 31, 41–44, 46, 50, 116, 138, –– planning evaluation metrics 310 –– generative programming 143 258, 412, 420, 469, 471 –– processing chain 314 –– generative template components 138 C# 23, 26, 50 –– segmentation 311 –– high parametrization 134 C++ 6, 20, 22, 23, 41–43, 46, 50, 116, 138, –– separation of the workflows 308 –– information hiding 134 142, 258, 420, 470 –– shortest job first 319 –– object-oriented components 137 C++ Coding Style Guide 514–523 –– technical realization of the functionalities 302 –– object oriented programming 137 Cable delay 406 –– threshold segmentation 312 –– parametrization 134 Call-by-reference 21, 33, 44, 46, 85, 173 –– topology 300 –– sharing prefabricated off-the-shelf building Call-by-value 21, 33, 46, 85 Centralized code assets 144 blocks 132 Call correctness 174 Centralized continuous integration build 109 –– STL and design patterns 141 Call-graphs 50 Centralized module base 106 –– structural modules 135 Call semantics 173 Centralized software assets 109 –– template metaprogramming 141 Camel case 29 Central Processing Unit (CPU) 95, 258, 260, –– turing completeness 142 Camera selection 313 318, 444 Code version management tools 100 Carrier Sense Multiple Access with Collision CGI. See Common Gateway Interface (CGI) Coding layout 26–30, 35, 98, 129 Detection (CSMA/CD) 458, 499 Changeability 18 –– camel case 29 Categories 47 Chaos report 16 –– disadvantages of coding style guides 30 Categorization of toolbox elements 134 Characteristic factors for scientific –– Hungarian notation 28 C Coding Style Guide 514–523 ­developments 65 –– Pascal case 29 CDDIS. See Crustal Dynamics Data Information Characteristic sensor profiles 386 –– rules for code instructions 27 System (CDDIS) Chomsky hierarchy 162, 184 –– rules for functions and methods 28 Celestial reference frame 148, 487 CI. See Continuous integration (CI) –– rules for names 28 Cell structure 369 Classes 15 –– rules for project and source file 27 Central coordination Classic models, sequential, V, W or spiral 117 –– rules for the indenting 28 –– automated observation of mount model Classification 312 –– rules for whitespaces use 27 corrections 217 –– of user documentation 57 –– self-documenting code 26 –– autonomous functionalities Client 100–103, 105, 106, 113, 127, 148, 154, 155, –– upper case 29 –– controlling 323 163, 166, 169–179, 188, 202, 206–211, Coding policies 26, 30, 31, 33–35, 66, 129 –– controlling tasks 324 216–217, 232–238, 243–244, 269, 282, 300, –– compiling workflow 31 –– controlling tasks for the mount model 327 302–304, 306, 353, 362, 378, 391, 397, 415, –– conditional statements 33 –– detailed planning of actions 308 420, 423–425, 429, 443, 448–451, 455, 457, –– const-correctness 33 –– failure management 320 464, 465, 467–473, 479, 481, 495, 498, 503 –– deep copy 34 –– hardware driving 328 Client application –– early code quality 35 –– intelligent planning systems 322 –– administration methods 210 –– evaluation order of operators 34 –– planning adjustment 322 –– closing and copying 210 –– example –– planning analogies to operating systems 318 –– opening 210 –– code, using styles and policies 36 –– planning assignment strategies 318 –– sample 211 –– define/include guard 31 –– planning evaluation metrics factors 310 Client safety 216 –– self-documenting code 36 –– planning priority evaluation 321 Client selection for the data propagation 306 –– exploitation of compiler abilities 35 –– planning strategies 319 Client-server model 151 –– function arguments 33 –– roughcut planning of main tasks 308 CMS. See Content Management System (CMS) –– include guard 33 –– user interfacing and main roles 327 Codan 116 –– jumps 33 –– user interfacing to the outer world 327 Code 6, 8, 10–12, 18–31, 33–35, 39–46, 48–52, 56, –– policies with STL 34 –– binary protection mask and observation 59, 60, 62–72, 77, 78, 80, 83–86, 92, 93, 95, 98, –– policy dependencies 34 planning 316 100, 101, 105, 109, 110, 112–119, 125–130, –– preprocessor defines vs. compiler checkable –– camera selection 313 132–145, 147, 148, 153, 155, 162, 165, 167, 168, defines 31 –– client selection for the data propagation 306 171, 175–179, 181, 184, 188–190, 197–208, –– program workflow 33 –– coordination functionalities 300 211–213, 216–217, 221–223, 234, 236, 238, –– quality profiling 35 –– developer role 327 242, 244, 246, 257, 263, 269, 277, 302, 305, 310, –– reference counting 34 –– digital image formats, characteristics 322, 323, 333, 338, 340, 349, 362, 377, 388, 391, –– scoping of variables 31 and sources 311 409, 412, 414–415, 420, 424, 425, 429, 437, –– shallow copy 35 –– digital images 311 449–450, 455, 466, 481, 482, 511, 514 –– try/catch exceptions 33 –– example –– beautifier 66 –– type casting 32 –– iteration over all interfaces 305 –– generation 204 –– type compatibility of 32-bit and 64-bit 32 –– VLBI log file 331 –– as integral part of research 6 Coding style and programming language 11 –– VLBI snap file 322 533 C–D Index

Coding style guide 26 399, 400, 409, 411, 414, 420, 425, 426, 429, 431, –– public project status displays 111 –– ARIANE 5 type conversion error 28 433, 443, 445–451, 455, 457, 458, 460, 464–470, –– useful tools 114 –– avoid global and static definitions 521 473, 479–482, 487, 491, 494–503, 506–508, –– version control system 109 –– avoid preprocessing macros and 511–512 –– virtualization 110 conditions 519 –– checksums 217 Continuous self-testing and self-inspecting 110 –– class structure and obligatory members 515 –– control stack 425 Control layers 409 –– coding layout 26, 27 –– interface layers 262 Controlling layers from signal circuits to genetic –– coding policies 26, 30 –– middleware 237 algorithms 275 –– comments 522 –– protocol 101, 127, 145, 149, 161, 168, 170, Control systems (laser ranging) 9 –– constants with const or enum 520 175, 243, 269, 467 Control terminal 470 –– const correctness 523 –– safety 217 –– SSH tunnel management 473 –– define or include guard 519 –– socket 149 Conventions –– dynamic memory 521 –– user credentials 101 –– acknowledgment 12 –– existing style guidelines 26 Comparison to industrial standard, OPC UA –– brief information at the margin 12 –– file names and internal file structure 514 378, 457 –– coding style and programming language 11 –– function parameters and return values 522 Compilation 12, 20, 21, 23, 31, 41, 44, 74–77, 109, –– explanation of theory, technical terms and –– fundamental layout styles and programming 129, 139, 141, 143, 190, 197, 201, 203, 245, 305 acronyms 11 policies 27 Compiler 12, 20, 21, 24, 26, 31–33, 36, 41–46, 52, –– language and citation 11 –– for Geodetic Software 514 54, 62, 64, 76, 85, 94, 95, 109, 110, 128, 129, –– use of source code 11 –– Google C++ style guide 27 139–143, 147, 175, 177, 181, 190–192, 201, Converter classes for external code 40 –– include paths and include order 519 204, 242, 244, 420 Coordination 5, 9, 278, 280–282, 300–302, –– indents with white spaces 520 –– vs. interpreter 20 304–306, 311, 317–319, 323–325, 327, 328, –– JOINT STRIKE FIGHTER AIR VEHICLE C++ –– outputs 84 332–336, 366, 368, 378, 388, 390, 391, 397, 399, CODING STANDARDS 26 –– phases 190 400, 405, 409, 412, 424, 426, 429, 488, 491–494, –– JPL Institutional Coding Standard 27 Compiler checkable 31 502, 503, 507, 511, 512 –– jump instructions are prohibited 521 Compiling workflow 31 Copy-modify-merge solution 101 –– MISRA-C:2004 27 Complete system tests 83 CORBA. See Common Object Request Broker –– MISRA C++:2008 27 Complexity 18 Architecture (CORBA) –– naming conventions 516 Complex system behavior 15 Correctness 17 –– N-queens puzzle 25 Component 133 Costs and benefits in the risk management 101 –– parentheses 520 Compositional and transformational Counts, metric parameters, measures 65 –– project structure 514 refinements 202 Coupling 133 –– psychology behind style guide rules 26 Comprehensability 18 Cover and modify 40 –– queens puzzle 25 Computer 258 CPF. See Consolidated Laser Ranging Prediction –– reduced coding style guide 27 Computer program 14 Format (CPF) –– reduced use of inline code 523 Concept-level access control 455 Cppcheck 78, 84, 115 –– 64-bit/32-bit friendliness 522 Concurrent Version System (CVS), 100 CPS. See Cyber-physical system (CPS) –– thread safety 523 Conditional statements 33 CPU. See Central Processing Unit (CPU) –– types and type casting 522 Configurability 18 CRC. See Cyclic redundancy check (CRC) –– unreadable code 25 Configuration 373 CRD. See Consolidated Laser Ranging Data –– usage of libraries and toolboxes 523 Consequences of forwarding 465 Format (CRD) –– variable initialization 521 Consolidated Laser Ranging Data Format Create rbash user, remote security 440 –– Wettzell’s design-rules 27 (CRD) 250, 340, 366, 497 Creation of network enclaves 458 Cohesion 133 Consolidated Laser Ranging Prediction Format Criteria to select a programming language 19 Co-location of space geodetic techniques 4 (CPF) 147, 251, 340, 347, 354, 359, 364, Critical section 88–90, 128, 166, 204, 216, 222, Combined, globally cross-linked operations 489, 497 223, 269, 292 and coordination 488 Const-correctness 33 Cron job 111, 114, 378 Command line abstraction 243 Content Management System (CMS) 61 Crustal Dynamics Data Information System Command line call 207 Context-free languages 184 (CDDIS) 364, 497 Command line help 242 Context-sensitive languages 185 Cryostat 401 Command line language 237 Continuous deployment 112 Cryptographic checksums 450 Command line parser 242 Continuous documentation 112 CSIRO. See Commonwealth Scientific and Command line scanner 242 Continuous feedback 111 Industrial Research Organisation (CSIRO) Commands 103 Continuous integration (CI) 8, 30, 35, 77, CSMA/CD. See Carrier Sense Multiple Access with Command tunneling 502 109–117, 123, 124, 126, 129–130, 134, 144, Collision Detection (CSMA/CD) Commits 103 146, 148, 203, 438, 523 Culture for the constructive handling of errors 97 Common Gateway Interface (CGI) 293 –– additional CI jobs 112 Current workload splitting 504 Common Object Request Broker Architecture –– build and release management software 114 CVS. See Concurrent Version System (CVS) (CORBA) 237 –– centralized continuous integration build 109 Cyber-physical system (CPS) 511, 512 Commonwealth Scientific and Industrial –– centralized software assets 109 Cyclic redundancy check (CRC) 146, 162, Research Organisation (CSIRO) 372 –– continuous deployment 112 449, 451 Communication 5, 9, 10, 19, 33, 46, 48, 61, 64, 88, –– continuous documentation 112 93, 101, 102, 107, 108, 116, 120, 127–128, 135, –– continuous feedback 111 145, 146, 148–151, 153–156, 161–162, –– continuous self-testing and self-inspecting 110 D 164–171, 173, 174, 177, 180, 184, 188, 201, 202, –– developer practices 115 Daemon 166, 171, 330, 448, 450, 463, 464 205, 206, 209, 216–217, 222, 223, 234–237, –– Eclipse 116 Dangling else 183 243–244, 246, 253, 262–263, 269, 275, 279, –– mechanisms for continuous integration Data and control traffic 494 282–283, 332, 337, 338, 364, 378, 386, 388, 397, builds 111 534 Index

Database 353 Data traffic Denial-of-Service-attacks 443, 449, 450 –– design –– for e-RemoteCtrl 503 DES. See Data Encryption Standard (DES) –– ERM 358 –– for SLR 497 DESCA. See Development of a Simplified –– normalization 356 –– for VLBI 498 Consortium Agreement (DESCA) –– proprietary documentation style 359 Daylight hopping of control responsibilities 493 Design issues 171 –– recipe to avoid redundancies 357 DBBC. See Digital Baseband Converter (DBBC) Design patterns 141 –– metadata tables 376 DBE. See Digital Back End (DBE) Design rules 19 –– principles 354 DBMS. See Database Management System Destination Network Address Translation –– SQL interface 360, 362 (DBMS) (DNAT) 463 –– tables 376, 377 DCE. See Distributed Computing Environment Developer practices 115 Database Management System (DBMS) 353, (DCE) Developer role 327 363, 371 Deadlock 90, 94, 95, 130, 166, 222 Development of a Simplified Consortium –– PostgreSQL 362 Dealing with software errors 62 Agreement (DESCA) 60 Data chopping and steganography 479 Debugger 93 Development process disciplines/workfiows 119 Data Encryption Standard (DES) 175, 235, Debugging 31, 69, 92–95, 116, 125, 141, 145, 330 Development process phases 119 434, 448 Deep copy 34, 91 Development steps 206 Data for laser ranging 250 Definition 169 Device control loop 254 Data management –– agent 397 Device Independent file format (DVI) 54 –– access rights 355 –– agile documentation 48 Dewar 401 –– atomic operations 355 –– autonomous control cells 280 DHCP. See Dynamic Host Configuration Protocol –– autonomous controlling 366 –– autonomous production cell 278 (DHCP) –– autonomous failure management 368 –– classification 312 Differential Global Navigation Satellite Systems –– autonomous hardware driving 367 –– client-server model 151 (DGNSS) 495 –– autonomous planning 364 –– code toolbox 134 Differential Global Positioning System –– autonomous user interfacing 367 –– communication middleware 237 (DGPS) 495, 496 –– binary search 352 –– communication protocol 149, 175 Different mechanisms 149 –– database 353 –– communication socket 149 Different physical communication lines 262 –– database design –– component 133 Digital Back End (DBE) 404 –– ERM 358 –– continuous integration 109 Digital Baseband Converter (DBBC) 404, 408, –– normalization 356 –– critical section 88 429, 500–501 –– proprietary documentation style 359 –– database 353 Digital image formats, characteristics –– recipe to avoid redundancies 357 –– distributed system 180 and sources 311 –– Database Management System, –– documentation landscape 61 Digital images 311 PostgreSQL 362 –– dynamic code analysis 92 Digital Signature Algorithm (DSA) 447, 448 –– database principles 354 –– elementary segmentation 312 Digital-to-analog converters 254 –– direct addressing 339 –– firewall 459 Direct addressing 339 –– example –– fundamental station 4 Directed state graphs 164 –– configuration file format 349 –– Geodesy (the classic definition) 2 Disadvantages 506 –– CPF parsing correctness 341 –– Global Geodetic Observing System –– of coding style guides 30 –– CPF prediction file 340 (GGOS) 486 –– of the usual testing 62 –– CPF regular expressions 341 –– grammar 184 Distributed and centralized control centers 491 –– SQL driver module 362 –– integration tests 83 Distributed Computing Environment (DCE) 170 –– SQL statements 361 –– legacy code 40 Distributed hardware control 274 –– XML passage 347 –– in a makefile 76 Distributed system 180, 466 –– XML passage info 348 –– modularity 133 Distribution platform 237 –– fail-safe 356 –– module 133 DNAT. See Destination Network Address –– file format 339 –– network enclave 458 Translation (DNAT) –– ILRS CPF 340 –– Nyquist-Shannon sampling theorem 334 DNS. See Domain Name Service (DNS) –– proprietary configuration file format 348 –– processes 87 Documentation 8, 26, 47–52, 54–57, 60–63, 65, –– XML 346 –– program 14 95, 98, 107, 109, 112, 113, 116, 117, 119, –– file manipulations 338 –– real-time systems 276 127–130, 367, 409 –– file systems 338 –– refactoring 41 –– avoidance of documentation redundancies 54 –– hash function 339 –– Remote Procedure Call (RPC) 169 –– big picture 49 –– hybrid data management 363 –– safety 216 –– call-graph 50 –– integrity 355 –– security 432 –– categories 47 –– limits of database 363 –– semaphore 89 –– classification of user documentation 57 –– limits of directories and file formats 352 –– software design rules 19 –– deliverables 60 –– memory space vs. access speed 339 –– software project 15 –– detailed, code-related, fast-changing 50 –– redundancy 355 –– software system 19 –– documenting mathematic formulas 54 –– relational database concept 353 –– software tests 68 –– documents for administration and other –– single-level and multi-level data –– static code inspections 84 scientist 60 structures 351 –– testing landscape 96 –– documents for users 56 –– SQL database interface 360, 362 –– test metrics 64 –– Docu-Wiki 61 –– toolbox module for configurations 349 –– threads 87 –– Doxygen –– transactions 356 –– unit tests 69 –– in the development process 56 –– use of files for specific laser ranging data 352 –– version control system 97 –– on Doxygen-commented code 50 –– user roles 356 Delete rbash user, remote security 443 –– function header 52 Data representation, XDR 171 Deliverables 60 –– inline comments 52 535 D–E Index

–– on plain code 50 Domain vs. application engineering 181 –– of other languages 43 –– source file header 51 Doppler Orbitography and Radiopositioning Enclave 10, 458, 459, 464, 466–468, 482, 491, –– example Integrated by Satellite (DORIS) 486 492, 494, 500, 502, 507 –– file header with Doxygen comments 51 Doxygen 50, 115, 117, 148, 522 Encryption with a SSH 446 –– function with Doxygen comments 53 –– in the development process 56 Endianess 162 –– function with non-redundant Doxygen –– on Doxygen-commented code 50 Entity Relationship Model (ERM) 358, 359 comments 56 –– function header 52 EOP. See Earth Orientation Parameters (EOP) –– focus 47 –– inline comments 52 Equivalence to software test systems 415 –– guidance 57 –– on plain code 50 e-RemoteCtrl 58, 426, 428–430, 450–453, 455, –– guides 57 –– source file header 51 479, 503 –– include documenting images and graphics 52 DSA. See Digital Signature Algorithm (DSA) ERM. See Entity Relationship Model (ERM) –– individual documents 49 DSL. See Domain Specification Language (DSL) Error 5, 6, 16, 17, 20, 23, 26–30, 33–35, 40, 41, 57, –– as information carrier 47 DTD. See Document Type Definition (DTD) 62–70, 72, 77, 83–86, 88, 90, 92–97, 110, 111, –– landscape 60 DVI. See Device Independent file format (DVI) 115, 116, 121, 125, 126, 128, 130, 141, 147, –– long-term Dynamic code analysis 92 149, 150, 153, 156, 161, 162, 164–168, 171, –– design describing overview 48 –– AOP solutions for tracing and its 174, 175, 178, 179, 190, 191, 201, 204, 210, –– vs. fast-changing documents 48 interpretation 93 217, 220, 223, 232, 233, 243, 244, 251, 269, –– notification 62 –– Aspect oriented programming (AOP) 92 277, 279–281, 283, 284, 300, 302, 304, 305, –– offering documentation 60 –– debugger 93 310, 317, 323, 325, 330, 337, 338, 369, 373, –– organizing documentation 61 –– debugging tools 93 379, 387–389, 397, 407, 409–412, 414, 422, –– organizing document versions 61 –– deep copy 91 424, 426, 427, 429, 437, 438, 449, 457, 470, –– readership 47 –– dynamic heap elements in parallel systems 90 471, 493, 495, 498, 505, 520, 521, 523 –– references 57 –– false positives 95 Error handling 173, 204 –– requirement of documentation 47 –– multitasking 86 ESA. See European Space Agency (ESA) –– The Right Language 59 –– mutex 90 Escape sequences and ncurses 284 –– scientific project papers 60 –– mutual exclusion 89 e-shell 471 –– scientific result papers 60 –– non-intrusive checks 95 Ethernet 149 –– sequence charts 50 –– operating systems 86 European Data Center (EDC) 364, 497 –– structure and formats 49 –– pitfalls with STL-strings 90 European Space Agency (ESA) 28 –– text-highlighting 51 –– preemptive scheduling 87 European VLBI Network (EVN) 425 –– tutorials 57 –– processes 87 Evaluation order of operators 34 –– user documentation in scientific projects 56 –– profiler 94 Example –– user’s manuals 59 –– profiling tools 94 –– client stub function call 178, 179 –– written documentation 48 –– race condition 94 –– code, using styles and policies 36 Documentation systems, Doxygen 50 –– reference counting 90 –– command line interpreter 238 Documenting mathematic formulas 54 –– round-robin-scheduling 87 –– component interface 137 Document Object Model (DOM) 346 –– scheduling 87 –– configuration file format 348 Documents for administration and other –– semaphore 89 –– for data servers 375 scientist 60 –– shallow copy 90 –– for sensor control points 373 Documents for users 56 –– shared memory 87 –– for sub-cells 374 Document Type Definition (DTD) 346 –– threads 87 –– control of the AuScope network 428 Docu-Wiki 61 –– valgrind 94 –– CPF parsing correctness 341 DOM. See Document Object Model (DOM) Dynamic code optimization 203 –– CPF prediction file 340 Domain Name Service (DNS) 464, 466 Dynamic heap elements in parallel systems 90 –– CPF regular expressions 341 Domain Specificatio Language (DSL) Dynamic Host Configuration Protocol –– deep copy 91 –– alphabet, syntax, semantics 181 (DHCP) 502 –– define/include guard 31 –– Chomsky hierarchy 184 –– dome IDL file 271 –– context-free languages 184 –– extend existing systems 418, 431, 472 –– context-sensitive languages 185 –– file header with doxygen comments 51 –– dangling else 183 E –– function stabilization 81 –– domain vs. application engineering 181 Early code quality 35 –– function with goxygen comments 53 –– DSL for a generator system 181 Earth Orientation Parameters (EOP) 251, 364, –– function with non-redundant doxygen –– example, interface definition file 189 405, 407, 409, 492, 497 comments 56 –– free-format language 187 Eclipse 116, 190 –– hardware driver module 265 –– generator development 181 EDC. See European Data Center (EDC) –– HTML template 294 –– grammar 183 EEPROM. See Electrically Erasable Programmable –– IDL file 238 –– IDL-constants definitions 188 Read-Only Memory (EEPROM) –– idl2rpc.pl application engineering –– IDL-file 188 Effective user ID, local security 433 218, 223, 229 –– IDL-grammar 187 Efficiency 18 –– interface definition file 189 –– IDL-interface definition 188 Electrically Erasable Programmable Read-Only –– iteration over all interfaces 305 –– IDL-type definitions 188 Memory (EEPROM) 258, 260 –– local security 436 –– Interface Definition Language (IDL) 186 Elementary segmentation 312 –– makefile 74 –– recursively enumerable languages 186 Elements of a code toolbox 144 –– makefile dependencies 76 –– regular languages 184 Elevator statement 121 –– MCI functionalities 381 –– syntax tree 182 Encapsulation 24, 41, 43, 44, 46 –– module interface 135 –– textual syntax notation 182 –– of C in C++ 41 –– nested FOR-loop generation 200 Domain Specification Language (DSL) 143, 181, –– of C++ in C 41 –– periodic control loop 269 183, 186, 188, 190, 340 –– of compiler and interpreter code 46 –– process watchdog 167 536 Index

Example (cont.) External Data Representation (XDR) 171, 172, Future techniques VGOS 407 –– remote security 440, 443, 445, 460 217, 308, 351, 450, 457 Fuzzy logic 276, 315, 321 –– scanner 192 Extreme Programming (XP) 120 fwbuilder 464 –– self-documenting code 37–39 –– semantic decisions 202 –– server header skeleton 213 F G –– server source skeleton 214 Factors of success 18 Galvanic isolators 263, 388 –– socket connection timeout 156 Fail-safe 356 GCC. See GNU Compiler Collection (GCC) –– socket select 159 Failure Mode and Effects Analysis (FMEA) 62, 63 GDB. See GNU Project Debugger (GDB) –– SO_LINGER 154 False positives 86, 95 General Purpose Interface Bus (GPIB) 411 –– SQL driver module 362 Fault tolerance 17 General situation 500 –– SQL statements 361 f2c 43 General structure 332 –– SSH tunnel management 473 Feedback control loop 255 Generated modules and components 148, 205 –– students project and agile training 126 Field Programmable Array (FPGA) 256, 404 Generating the protocol modules 177 –– sun RPC specification file 176 Field System Monitor 415 Generative domain model 190 –– SVN commands 104 Field System Monitor Code, Extend existing Generative programming 92, 134, 143, 148, 181, –– svn diff 125 systems 418 236, 243, 244, 302, 305 –– SVN file header/trailer 107 Field System Monitor restrictions 420 Generative template components 138 –– SVN properties 106 File format, example 340 Generator 9, 26, 82, 92, 107, 128, 134, 135, 143, –– template 139 –– ILRS CPF 340 148, 181, 183, 186, 188, 190, 202–207, 209, –– template metaprogramming 142 –– proprietary configuration file format 348 210, 217, 220, 234, 238, 242, 263, 271, 305, –– test case 72 –– XML 346 330, 428, 446, 447, 451 –– test class 79 File manipulations 338 Generator development 181 –– textual RPC instructions 241 File systems 338 –– Chomsky hierarchy 162 –– unreadable code 25 File Transefr Protocol (FTP) 330, 364, 366, 371 –– regular languages 162 –– VLBI log file 331 Filter tables (iptables) 444 Genetic algorithms 276, 322, 326 –– VLBI snap file 324 Finite state machine and regular expressions 164 Geodesy (the classic definition) 2 –– wxWidgets windows 287 Firewall 10, 102, 107, 209, 459, 463–468, 481, Geodetic infrastructure 3 –– XML passage 347 482, 494, 500, 502 Geodetic Observatory Wettzell 4–6, 11, 12, 19, –– XML passage info 348 First-come first-served 318 27, 80, 85, 90, 99, 100, 103, 110, 114, 121, 125, Example environments, laser ranging First revolution, astronomical findings 145, 148, 156, 167, 253, 277, 318, 347, 390, and radio interferometry 248 and geodetic surveys 510 391, 428, 458, 466, 468, 482, 495, 502–504 Existing style guidelines 26 Flawfinder 115 Geodetic VLBI expect 466 Flexbuff 408, 500, 503 –– cable delay 406 Expert system 276 Flexibility 18 –– future techniques, VGOS 407 Explanation of theory, technical terms FMEA. See Failure Mode and Effects Analysis (FMEA) –– meteorology and calibration 407 and acronyms 11 FORTRAN 20–22, 43–46, 50, 409 –– phase calibration 406 Exploitation of compiler abilities 35 –– encapsulation –– principles of VLBI 400 Extended GGOS data flows 489 –– of arrays 46 –– system efficiency and calibration 405 Extend existing systems –– with the converter module f77.h 44 –– system time 406 –– additional aspects for remote control 422 –– with f2c 43 –– technical VLBI aspects –– advantages of remote control 429 –– of function arguments 46 –– down-conversion and sampling 403 –– autonomous field system hardware control –– restrictions 46 –– reception 401 cells 420 –– of standard types 44 –– shipment and correlation 404 –– bypass 420 –– former de-facto standard 21 –– VLBI observation results 405 –– communication control stack 420 Fourth industrial revolution 511 –– VLBI observation workflow 404 –– equivalence to software test systems 415 Fourth revolution, global networking 511 GIF. See Graphics Interchange Format (GIF) –– example control of the AuScope network 428 FPGA. See Field Programmable Array (FPGA) Git 100, 108 –– field system monitor 428 Free-format language 187 Given situation and risks 39 –– restrictions 420 FTP. See File Transefr Protocol (FTP) Global Geodetic Observing System (GGOS) 5, 8, –– functional extensions 424 Functional decomposition 15 10, 11, 400, 428, 429, 484–495, 499, 502, 503, –– globally available real-time data with Functional extensions 424 506–507, 510, 511 e-QuickStatus 429 Functionality 17 –– automation –– graphical user interface 431 Functional security 450 –– current workload splitting 504 –– GUI variants 417 Function arguments 33 –– disadvantages 506 –– hierarchy of control centers 427 Functions 15 –– future workload splitting for 24/7 505 –– importance of parallel remote equipment 422 Fundamental layout styles and programming –– future observation workload for 24/7 506 –– importance of system monitoring 422 policies 27 –– potential of automation 504 –– look-and-feel with new graphic Fundamental station 4 –– workload estimation 504 extensions 423 Further parameterizations 207 –– workload splitting 504 –– operation control strategies 426 Further processing 503 –– big-picture of the GGOS instrumentation 486 –– optimization for C++ 420 Future basic workload splitting for 24/7 505 –– Control Infrastructure 10 –– system health and human safety 420 Future data traffic –– coordination, control and operation Extensible Markup Language (XML) 347, 348, –– for GNSS 497 –– access rights of the GGOS control 464, 467 –– for SLR 498 layers 492 External code libraries 40 –– for VLBI 499 –– daylight hopping of control External connectivity of GGOS observatories 499 Future observation workload for 24/7 506 responsibilities 493 537 F–I Index

–– distributed and centralized control GPS. See Global Positioning System (GPS) centers 491 Grammar 184 I –– job management system 492 Graphical user interface (GUI) 50, 57, 83, 90, 110, IAG. See International Association –– proof of concept 493 116, 127, 217, 280, 283–284, 292–294, 300, of Geodesy (IAG) –– recurring structures 491 325, 327, 334–337, 363, 367, 378, 380, 397, ICRF. See International Celestial Reference –– system of systems 491 398, 423–427, 453, 455, 464, 479 Frame (ICRF) –– use cases 493 Graphics Interchange Format (GIF) 49, 311 Identification in a network 375 –– feedback loop, quality control and Graphviz 50 IDL. See Interface Definition Language (IDL) optimization of its use 489 Gray-box-tests 68 IDL-constants definitions 188 –– history and purpose 484 Group ID 433 IDL-file 188 –– key techniques 487 GTK+ 284 IDL-grammar 187 –– main idea 486 GUI. See Graphical user interface (GUI) IDL-interface definition 188 –– national requirements 487 Guidance 57 idl2rpc.pl application engineering –– networks Guides 57 –– client application –– asynchronous data traffic for GNSS 495 GUI variants 424 –– administration methods 210 –– bandwidth on demand 499 –– closing and copying 210 –– command tunneling 502 –– opening 210 –– data and control traffic 494 H –– sample 211 –– data traffic for e-RemoteCtrl 503 HALCON 318 –– client safety 216 –– data traffic for SLR 497 Hardware control –– command line call 207 –– data traffic for VLBI 498 –– autonomous functionalities –– communication checksums 217 –– data traffic from a SLR site 497 –– control abstraction 335 –– communication safety 217 –– data traffic from a VLBI site 498 –– control data propagation 334 –– development steps 206 –– data traffic to a SLR site 497 –– controlling 333 –– example –– data traffic to a VLBI site 498 –– failure management 337 –– client main 211 –– external connectivity of GGOS –– hardware driving 337 –– server header skeleton 213 observatories 499 –– information abstraction 335 –– server source skeleton 214 –– further processing 503 –– planning 333 –– further parameterizations 207 –– future data traffic for GNSS 497 –– simulation of failures and –– generating the modules 205 –– future data traffic for SLR 498 functionalities 338 –– possible error sources 220 –– future data traffic for VLBI 499 –– update constraints for controlling data 334 –– server application sample 213 –– general situation 500 –– user interfacing 336 –– server application skeleton 212 –– networks for an observatory 502 –– cells 333 –– server safety 220 –– NTRIP 495 –– general structure 332 –– automatic safety device 213 –– physically separated transfer network 500 –– hardware control cells 333 –– demonstration 223 –– real-time data traffic for GNSS 496 –– Nyquist-Shannon sampling theorem 334 –– multi-threading 222 –– round-robin recording 503 –– real-time 333 –– parallel safety device thread 233 –– security in the e-VLBI network 501 –– timing 333 –– persistence and idempotence 232 –– tsunami UDP Protocol 498 Hardware driver module/component 263 –– semaphores 222 –– operational specification for GGOS 486 Hardware layers 369 –– startup control 222 –– overall design and tasks 487 Hardware Virtual Machine (HVM) 111 –– time limitations 222 –– as a revolutionary step 510 Hash function 113, 339, 450 –– watchdog 232 –– as unifying umbrella 484 Hierarchical document tree 103 –– server security –– vision paper 485 Hierarchy of control centers 427 –– authentication 234 Globally available real-time data with High Earth Orbit (HEO) 248, 324, 335 –– authorization 235 e-­QuickStatus 429 High parametrization 134 –– in the LAN and WAN 234 Globalnaja nawigazionnaja sputnikowaja sistema Histogram 312, 335, 336 –– secure RPC 235 (GLONASS) 486, 488, 495 Hot pluggable 422 Idl2rpc.pl phases 204 Global Navigation Satellite Systems (GNSS) 4, Hot standby 422 IDL type definitions 188 310, 486–488, 493, 495–498 HTML. See Hypertext Markup Language (HTML) IDS. See Intrusion Detection System (IDS) Global Positioning System (GPS) 147, 400, 406, HTTP. See Hypertext Transfer Protocol (HTTP) IEC. See International Electrotechnical 486, 488, 495 HTTPS. See Hypertext Transfer Protocol Secure Commission (IEC) GMSEC. See Goddard Mission Services Evolution (HTTPS) IEEE. See Institute of Electrical and Electronics Center (GMSEC) Human skills 108 Engineers (IEEE) GNU. See GNU’s Not Unix (GNU) Hungarian notation 28 IEEE 754 172 GNU Build System 73 HVM. See Hardware Virtual Machine (HVM) IF. See Intermediate Frequency (IF) GNU Compiler Collection (GCC) 12, 20, 21, 94, 95, 110 Hybrid cipher algorithm in the SSH 448 IGS. See International GNSS Service (IGS) GNU Lesser General Public License (LGPL) 12, 284 Hybrid data management 363 ILRS. See International Laser Ranging Service GNU make 74, 114, 115 Hypertext Markup Language (HTML) 49–51, 54, (ILRS) GNU Project Debugger (GDB) 94 57, 59, 61, 77, 78, 80, 129, 293–295, 300, 319, Image processing for metric parameters 310 GNU’s Not Unix (GNU) 12, 44, 74, 95, 114, 115, 519 346, 366, 367, 370, 424, 522 Image processing tools and libraries 318 Goal of observations 253 –– limitations 300 Image textures 312 Goddard Mission Services Evolution Center –– templates 294 Importance of parallel remote equipment 422 (GMSEC) 372 Hypertext Transfer Protocol (HTTP) 102, 151, Importance of software 15 Google C++ Style Guide 27 293, 370, 425, 429, 464, 495, 496 Importance of system monitoring 422 gpg 451 Hypertext Transfer Protocol Secure Include documenting images and graphics 52 GPIB. See General Purpose Interface Bus (GPIB) (HTTPS) 102 Include guard 31 538 Index

Independence of network enclaves 458 International VLBI service for geodesy and Iteration plan 123 Index Sequential Access Method (ISAM) 355 astrometry (IVS) 4, 369, 407, 413, 414, 425, Iterative analysis and design, agile meetings 124 Individual documents 49 429, 430 Iterative coding and private testing 125 Individualization 512 Internet Protocol (IP) 149–151, 153, 155, 162, Iterative committing, continuous integration Industrial remote control 397 171, 178, 179, 210, 237, 262, 330, 364, 375, and deployment 126 Industrial PC 260 378, 460, 463, 464, 466–468, 495, 500, 502, 503 Iterative software development processes 118 Informal reviews 84 –– addresses and port numbers 150 ITRF. See International Terrestrial Reference Information hiding 134 –– forwarding 464 Frame (ITRF) Infrared (IR) 311–314, 390, 429 –– spoofing 466 IVS. See International VLBI service for geodesy Inheritance 137 Internetwork layer 150 and astrometry (IVS) Initialization of variables, type casting 32 Interoperability 18 Initial situation Interpiler 20, 21 –– applied computer science as essential part 5 Interpretation of test results 67 J –– book about coordination, communication Interpreter 20–21, 24, 46, 128, 129, 165, 182, Java 20, 22, 50, 116, 372 and automation 5 238, 241–244, 306, 308, 375 JavaScript 293 –– co-location of space geodetic techniques 4 Interprocess Communication (IPC) 87, 148, 151, Jenkins 114 –– geodetic infrastructure 3 156, 161, 162, 166–168, 174, 180, 181, 183, Jive5ab 502 –– geodetic observatory Wettzell 4 190, 236, 409, 411, 415, 470, 473, 523 Joint Institute for VLBI in Europe (JIVE) 499 –– new systems for SLR and VLBI 5 –– application layer 150 Joint Photographic Experts Group (JPG) 49, 52, –– satellite geodesy 2 –– availability of the server 166 311, 495, 497 –– space geodesy 3 –– binary messages 162 JOINT STRIKE FIGHTER AIR VEHICLE C++ CODING –– terrestrial geodesy 2 –– bit order 162 STANDARDS 26 –– terrestrial infrastructure 4 –– client-server model 151 JPL Institutional Coding Standard 27 –– on the way to a GGOS core site 4 –– communication protocol 149 Jumps 33 InSAR. See Interferometric Synthetic Aperture –– communication sockets 149 Radar (InSAR) –– different mechanisms 149 In-sky and on-ground laser ranging safety with –– directed state graphs 164 additional data 251 –– endianness 162 K In-sky laser ranging safety with radars 251 –– ethernet 149 Karnaugh-Veitch-diagram 256 In-sky safety 389 –– example Keyboard-Video-Mouse (KVM) 455 Institute of Electrical and Electronics Engineers –– process watchdog 167 Key generation 448 (IEEE) 173, 377, 411 –– socket connection timeout 156 Key techniques 487 Institute’s construction kit 145 –– socket select 159 Key technology for a command Integration testing 83 –– SO_LINGER 154 interpretation 243 –– buddy testing and pair programming 83 –– finite state machine and regular KVM. See Keyboard-Video-Mouse (KVM) –– complete system tests 83 expressions 164 –– integration test 83 –– internetwork layer 150 –– pair programming 83 –– IP addresses and port numbers 150 L – –– memory and processing time consumption – reviews 83 LAN. See Local Area Network (LAN) – for text messages 165 – static code inspections 84 Land mines in test results 67 – –– message and dataflow correctness 162 – system tests 83 Language and citation 11 –– module for socket-based IPC 156 Integrity 18, 355 LASER. See Light Amplification by Stimulated –– network interface layer 150 Intelligent control units 254 Emission of Radiation (LASER) –– open system standards 149 Intended readers laser-ceilometer 311 – –– performance improvements with parallel – background 11 Laser ranging – threads 166 – observatory staff 11 –– data for laser ranging 250 – –– proprietary communication language 161 – students 11 –– goal of observations 253 –– proprietary text messages 163 Interaction of the hardware 249 –– in-sky and on-ground laser ranging safety –– text messages 162 Interface Definition Language (IDL) 186–191, with additional data 251 –– three-way-handshake of TCP 153 197, 201, 204–206, 209, 210, 213, 217, 233, –– in-sky laser ranging safety with radars 251 –– transport layer 150 238, 242, 244, 271, 302, 305, 378 –– interaction of the hardware 249 –– use of connectionless sockets 155 Interferometric Synthetic Aperture Radar –– perturbations, calibration and quality –– use of connection-oriented sockets (InSAR) 3 control 253 –– close communication 154 Intermediate code generation 201 –– technical principles 248 –– create socket 151 Intermediate Frequency (IF) 403, 404, 406, 408, 429 –– telescope and reception 249 –– data exchange 153 International Association of Geodesy (IAG) 5, –– workflow of observations –– initiate communication 153 484, 486 –– after the observation 252 –– watchdog process 166 International Celestial Reference Frame –– before the observation 252 Introducing mind maps 10 (ICRF) 405, 484 –– during the observation 252 Intrusion detection 466 International Electrotechnical Commission Laser ranging control Intrusion Detection System (IDS) 502 (IEC) 378 –– actuators 254 IP. See Internet Protocol (IP) International GNSS Service (IGS) 5 –– adaption from the industry 277 Iptables 444, 459, 463, 482, 494 International Laser Ranging Service (ILRS) 5, 148, –– alternative GUI, HTML 293 IR. See Infrared (IR) 253, 340, 366 –– analog-to-digital converters 254 ISAM. See Index Sequential Access Method International Standards Organization (ISO) 149, –– automatic sequence control 260 (ISAM) 150, 360 –– autonomous functionalities 278 ISO. See International Standards Organization International Terrestrial Reference Frame –– autonomous production 278 (ISO) (ITRF) 484 –– autonomy and automation 279 539 J–M Index

–– Boolean algebra 256 Legacy 8, 22, 39, 41, 43, 78, 110, 128, 129, 415, –– communication interface layers 262 420, 430, 481 M –– computer 258 Legacy code 40 Macros 20 –– controlling layers from signal circuits to –– converter classes for external code 40 Main deficits in scientific software 15 genetic algorithms 275 –– cover and modify 40 Maintainability 18 –– device control loop 254 –– encapsulation of C in C++ 41 Makefile 50, 73–77, 99, 110 –– different physical communication lines 262 –– encapsulation of C++ in C 41 Man-in-the-middle attack 448 –– digital-to-analog converters 254 –– encapsulation of compiler and interpreter Manufacturing cells 278 –– distributed hardware control 274 code 46 Masquerading 463 –– escape sequences and ncurses 284 –– encapsulation of other languages 43 MAT. See Microprocessor ASCII Transceiver (MAT) –– example –– external code libraries 40 MathWorks®Matlab® 6 –– dome IDL file 271 –– FORTRAN encapsulation Maturity 17 –– hardware driver module 265–268 –– of arrays 46 Maximum Transmission Unit (MTU) 500, 502 –– HTML template 293 –– with the converter module f77.h 44 MCB. See Monitor and Control Bus (MCB) –– periodic control loop 269 –– with f2c 43 MCI standardization 369 –– wxWidgets windows 287–291 –– of function arguments 46 –– md5sum 451 –– expert system 276 –– restrictions 46 MCP. See Micro-Channel Plate (MCP) –– feedback control loop 255 –– rudimentary rules for 44 MD5. See Message Digest Nr. 5 (MD5) –– fuzzy logic 276 –– of standard types 44 Measuring process and its classification 66 –– galvanic isolators 263 –– given situation and risks 39 Mechanisms for continuous integration –– genetic algorithm 276 –– thread-safe encapsulation 42 builds 111 –– hardware driver module/component 263 –– three steps of use 41 Medium Earth Orbit (MEO) 335 –– HTML limitations 300 –– types 40 Memory and processing time consumption –– HTML templates 293 –– unit tests and refactoring 41 for text messages 165 –– industrial PC 260 LEO. See Low Earth Orbit (LEO) Memory space vs. access speed 339 –– intelligent control units 254 Lexical analysis 190 Merge conflicts 101 –– Karnaugh-Veitch-diagram 256 Lexical error handling 191 Message and data flow correctness 162 –– line driver 263 LGPL. See GNU Lesser General Public License Message Digest Nr. 5 (MD5) 146, 217, 451, 457 –– Linux-GUI system X11 284 (LGPL) Meteorology and calibration 407 –– logic gates 259 LIDAR. See Light detection and ranging (LIDAR) Metrics –– manufacturing cells production 278 Light Amplification by Stimulated Emission of –– categories for scientific developments 64 –– microcontroller 256 Radiation (LASER) 249 –– parameter severities 67 –– multi-layered autonomous production Light detection and ranging (LIDAR) 311, 390 –– planning evaluation metrics 310 cell of a laser ranging system 282 Limits and extreme situations 72 –– software metrics 18, 64 –– multi-layer model of an autonomous Limits of a firewall 466 –– test metrics 64 production cell 281 Limits of database 363 Micro-channel Plate (MCP) 250, 324, 335 –– neuronal network 276 Limits of directories and file formats 352 Microcontroller 256 –– periodic control loop for devices 269 Limits of simple solutions 73 Microprocessor ASCII Transceiver (MAT) 411 –– periodic control loop thread 269 Line driver 263 Middleware –– programmable logic controller 260 Linux 12 –– command line abstraction 243 –– proportional controller 255 Linux-GUI system X11 284 –– command line help 242 –– proportional-derivative controller 255 LLR. See Lunar Laser Ranging (LLR) –– command line language 237 –– proportional-integral controller 255 Local Area Network (LAN) 149, 234, 370, 431, –– command line parser 242 –– RPC device interface 281 467, 502 –– command line scanner 242 –– RPC server as device driver 263 Local (port) forwarding 450 –– communication middleware 237 –– self-similar decomposition 280 Local function calls 168 –– distribution platform 237 –– sensors 254 Local security –– example – –– shell interface 283 – access control in software 435 –– command line interpreter 238 – –– signal processing circuit with logic gates 256 – multi-user system mechanisms 433 –– IDL file 237 – –– situation of employees 279 – password encryption 434 –– textual RPC instructions 241 – –– supporting production cell structures 281 – role based security with standard users 437 –– key technology for a command – –– thin clients and fat servers 292 – security risks interpretation 243 – –– timing 276 – brute-force-attacks 437 –– principles 236 – –– timing layers from real-time to normal time 276 – data based attacks 437 Minimal invasive concept 386 – –– two-layer model of an autonomous – superuser or root 434 MISRA-C:2004 27 – production cell 281 – symmetric block cipher algorithms 434 MISRA C++:2008 27 – –– types of autonomous control cells 280 – user ID and group ID 433 m0n0wall 467 –– types of supporting production cells 282 Local thresholding 315 Mock 78, 130, 415, 482 –– von Neumann architecture 256, 260 Lock-modify-unlock solution 100 Modifiability 18 –– White Rabbit Solution 276 Logbook as a proprietary solution 330 Modularity 18, 133 –– window designing 285 Logical paths 69 Module 15, 18, 20, 21, 23, 24, 28, 31, 39–42, 44–46, –– wxWidgets Logic gates 256 52, 56, 57, 64, 65, 67, 68, 70, 72, 73, 78, 83, 86, –– advanced 291 logog 330 98, 105, 106, 116, 127–128, 133–138, 143–147, –– architecture 284 Long-term vs. fast-changing documents 48 156, 161, 168, 178, 181, 188, 202–205, 207–209, –– event-driven programming 286 Look-and-feel with new graphic extensions 423 212, 213, 216, 222, 236, 237, 243, 244, 263, 269, –– framework 285 Low Earth Orbit (LEO) 248, 250, 276, 324, 335, 486 276, 302, 337, 338, 349, 362, 372, 375, 376, 386, –– program elements and flow 286 Lucky imaging 317 404, 409, 415, 420–422, 469, 482, 498, 500, 507 –– rapid application development 291 Lunar Laser Ranging (LLR) 9, 248 Module for socket-based IPC 156 540 Index

Monitor and Control Bus (MCB) 411 N-queens puzzle 25 –– individualization 512 Motivation NREN. See National Research and Education –– revolutionary steps in industry 511 –– better understanding 7 Network (NREN) –– second revolution, improvements of –– code as integral part of research 6 nsiqcppstyle 115 observing technique 510 –– purpose of this work 6 NTP. See Network Time Protocol (NTP) –– supporting solutions for the challenges 511 –– reviewing techniques for code 6 NTRIP. See Networked Transport of RTCM via –– third revolution, space techniques 510 –– solution examples in programmed form 7 Internet Protocol (NTRIP) Overloading 137 –– tree swing comic is up-to-date 6 Nubiscope 311 MTU. See Maximum Transmission Unit (MTU) Nyquist-Shannon sampling theorem 334 Multi-agent systems P –– agent autonomy 397 Package filter firewall rules 459 –– agent networks 399 O Pair programming 83 –– agent properties 399 Objective-C 23, 26, 50 Pandora FMS 370 –– industrial remote control 397 Object-oriented components 137 Parameter and result passing 173 –– remote control idea 396 Object Oriented Programming (OOP) 15, 22, 23, Parameter interpretation 67 Multi-layered autonomous production cell 33, 41, 69, 73, 90, 133, 134, 137, 138, 141, 145, Parametrization 134 of a laser ranging system 282 180, 181, 204, 216, 258, 284, 285, 303, 354, 521 Parser 146, 197, 199, 201, 242, 244, 340, 346, Multilayer model of an autonomous production –– abstraction 137 349, 373 cell 281 –– inheritance 137 Pascal case 29 Multitasking 86 –– overloading 137 Passage 12, 59, 96, 252, 302, 310, 317–326, 347, Multi-user system mechanisms 433 –– polymorphism 137 352, 363–366, 489, 492, 497 Mutex 90 –– virtualization 137 Passing of firewalls 464 Mutual exclusion 90 Objects 15 Password encryption 434 Oblique transformation 202 PC. See Personal Computer (PC) Observatory staff 11 PDF. See Portable Document Format (PDF) N Observatory Web page 12 PDU. See Protocol Data Unit (PDU) Nagios 370 Offering documentation 60 Performance 18, 174 Naming service 328 ONC. See Open Network Computing (ONC) Performance improvements with parallel NASA Field System 323, 405, 409 On-demand services 488 threads 166 –– programs 411 On-ground safety 390 Periodic control loop for devices 269 –– tasks 410 On the way to a GGOS core site 20 Periodic control loop thread 269 NAT. See Network Address Translation (NAT) OPC United Architecture (OPC UA) 378, 457 Periodic function with semaphore, idl2rpc.pl National Aeronautics and Space Administration Open-MoniCA 372 application engineering 223 (NASA) 147, 302, 323, 330, 372, 405, 409–415, Open Network Computing (ONC) 170, 173 Perl 21, 24, 50, 165, 190, 191 420, 423, 425, 429, 453, 457, 464 Open Software Foundation (OSF) 171 Perl-based IPC generator National Marine Electronics Association Open source firewall, m0n0wall 467 –– code generation 204 (NMEA) 495 Open System Interconnection (OSI) 149, 150 –– compiler phases 190 National requirements 487 Open system standards 149 –– compositional and transformational National Research and Education Network Operability 17 refinements 202 (NREN) 499, 502, 503 Operating system 21, 23, 24, 32, 62, 64, 86, 90, –– dynamic code optimization 203 Need for agile practices 21 97, 101, 109, 110, 130, 146, 147, 154, 162, 166, –– error handling 204 Nested enclaves 468 167, 170, 175, 178, 179, 222, 237, 260, 276, –– example Nested SSH tunnels 468 283, 318, 319, 327, 332, 333, 338, 339, 367, –– Nested FOR-loop generation 200 Network address translation (NAT) 463, 464, 467 391, 413, 425, 433, 434, 437, 449, 457, 464, –– Scanner 192 Network Common Data Format (NetCDF) 351 467, 469, 473, 508 –– Semantic decisions 202 Networked Transport of RTCM via Internet Operational deficits of GGOS –– generative domain model 190 Protocol (NTRIP) 495, 496 –– combined, globally cross-linked operations –– idl2rpc.pl phases 204 Network enclave 458 and coordination 488 –– intermediate code generation 201 Network File System (NFS) 371 –– extended GGOS data flows 489 –– lexical analysis 190 Network Flight Recorder 466 –– feedback loop, quality control and –– lexical error handling 191 Network identification example 375 optimization of its use 489 –– non-recursive, predicative parser 197 Network Information System (NIS) 235 –– on-demand services 488 –– oblique transformation 202 Network interface layer 150 –– operational deficits 488 –– parser 197 Networks for an observatory 502 Operational specification for GGOS 486 –– scanner 190, 191 Network Time Protocol (NTP) 277, 411, 464 Operation control strategies 426 –– semantic analysis 201 Neuronal network 276, 322, 326 Optimization for C++ 420 –– static code optimization 203 New systems for SLR and VLBI 5 Oracle’s Hudson 114 –– symbol table 197 NEXPReS. See Novel EXploration Pushing Organizing documentation 61 –– syntax analysis 197 Robust e-VLBI Services (NEXPReS) Organizing document versions 61 –– syntax graph 197 NFS. See Network File System (NFS) OSF. See Open Software Foundation (OSF) Perl details 24 NIS. See Network Information System (NIS) OSI. See Open System Interconnection (OSI) Personal Computer (PC) 260–263, 276, 332, 370, NMEA. See National Marine Electronics Other fields for a safety system 390 409, 412, 424, 457, 464, 467 Association (NMEA) Outlook Perturbations, calibration and quality Nonintrusive checks 95 –– adapting skills of employees 512 ­control 253 Non-recursive, predicative parser 197 –– first revolution, astronomical findings PFB. See Polyphase Filter Bank (PFB) Normal form 256, 356, 357, 392 and geodetic surveys 510 Phase calibration 406 Normal Points (NP) 250, 252, 326, 366, 497 –– fourth industrial revolution 511 PHP 24, 50 Novel EXploration Pushing Robust e-VLBI –– fourth revolution, global networking 506, 511 Physically separated transfer network 500 Services (NEXPReS) 128, 426, 499 –– GGOS as a revolutionary step 510 Physical separation with dualhomed hosts 459 541 N–R Index

Pipes to monitor program outputs, extend –– C++ 6, 20, 22, 23, 30, 41–43, 46, 50, 116, 138, –– metrics 18 existing systems 471 142, 258, 420, 470 –– profiling 35 Pitfalls with STL-strings 90 –– C++ Coding Style Guide 514 Quasar 400–401, 405, 408, 487 Planning evaluation metrics 310 –– call-by-reference 21 Quasi-Zenith Satellite System (QZSS) 488 Planning of the iterative construction 123 –– call-by-value 21 Queens puzzle 25 PLC. See Programmable Logic Controller (PLC) –– C Coding Style Guide 514 pmap_dump 179 –– coding style guide for Geodetic Software 514 pmap_set 179 –– compiler 20 R PNG. See Portable Network Graphic (PNG) –– criteria to select a programming language 19 Race conditions 88, 94 Pointer 23, 26, 30, 31, 34, 42, 44, 57, 85, 90, 129, –– former de-facto standard 21 RAD. See Rapid Application Development (RAD) 138, 141, 173, 178, 179, 187, 188, 222, 304, –– FORTRAN 20–22, 43–46, 50, 409 Radio Detection and Ranging (RADAR) 252, 311, 338, 358, 420 –– interpiler 20, 21 333, 335, 370, 388, 389 Policy(ies) –– interpreter 20 Radio Frequency Interference (RFI) 260, 262, –– for codes 30 –– Java 20, 22, 50, 116, 372 401, 407 –– dependencies 34 –– JavaScript 239 Radio Technical Commission for Maritime –– with STL 34 –– Macros 20 Services (RTCM) 495 Polymorphism 137 –– MathWorks® Matlab® 6 RAID. See Redundant Array of Independent Polyphase Filter Bank (PFB) 408 –– Objective-C 23, 50 Disks (RAID) PolySpace® 84 –– perl 21, 24, 50, 165, 190, 191 Rapid Application Development (RAD) 291 POP3. See Post Office Protocol Version 3 (POP3) –– PHP 24, 50 Readership and focus 47 Popularity of compiler languages 22 –– popularity of compiler languages 22 Real-time 333 Popularity of interpreter languages 24 –– popularity of interpreter languages 24 Real-Time Application Interface (RTAI) 89 Portability 18 –– programming paradigm 22, 40, 41, 134, Real-time data trafic for GNSS 496 Portable Document Format (PDF) 50, 61 135, 303 Real-time systems 276 Portable Network Graphic (PNG) 49 –– python 21, 24, 50, 243 Recurring structures 491 Portmap 171 –– regular expressions 21 Recursively enumerable languages 193 Portmapper 171, 179, 180, 209, 222, 232, 236, –– structured programming 22 Red, Green and Blue (RGB) 311–312 328, 449, 465, 466 –– VHDL 50 Redirection of input and output streams 471 Possible error sources 220 Programming paradigm 22, 40, 41, 134, 135, 303 Reduce access points (ports) 443 PostgreSQL 146, 330, 362, 371 Program workflow 33 Reduced coding style guide 27 Post Office Protocol Version 3 (POP3) 150 Project 4, 5, 7, 8, 11, 15–16, 26, 27, 31, 40, 43, 44, Reduction of insecure times 479 Potential of automation 504 47–49, 51, 54, 56, 60–70, 74, 77, 78, 80, 83–85, Reduction of noisy traffic 457 PPS. See Pulse Per Second (PPS) 90, 92, 96–98, 100, 101, 103–111, 115–129, Redundancy 355 Praxis interwoven with theory 10 132, 143–148, 190, 317, 318, 425, 481, 498, Redundant Array of Independent Disks Precision Time Protocol (PTP) 276 499, 504 (RAID) 428 Preemptive scheduling 87 Proof of concept 493 Refactoring 41 Preprocessor 20, 23, 29, 31, 420 Properties to define externals 105 References 57 Principles 236 Properties to replace keywords 106 –– counting 34, 35, 90, 95, 141 Principles of VLBI 400 Proportional controller 255 –– frame 3, 147, 400, 485, 486, 488 Prioritization of tests 96 Proportional-derivative controller 255 –– point 4, 401 Process 6, 8, 9, 15, 18, 20, 23, 24, 26, 30, 34, 44, Proportional-integral controller 255 Reflecting the scientific needs 17 46, 48–50, 56, 60, 62, 66, 71–78, 83–92, 95, 99, Proprietary communication language 161 Regular expression 21, 24, 84, 92, 164, 165, 182, 103, 106, 110, 111, 114, 115, 117–128, 130, Proprietary text messages 163 184, 187, 190, 244, 340 132, 141–143, 149, 151, 154, 156, 164, Pros and cons of SVN, 107 Regular languages 162, 184 166–171, 173, 177–179, 181, 184–185, 190, Protocol 63, 83, 93, 101, 102, 111, 149–151, 153, Relational database concept 353 197–207, 210, 212, 217, 220–223, 232–234, 155, 162, 164, 168, 170, 171, 173, 175, 177, Release plan 123 236, 246, 250, 252, 254–263, 269, 275, 179–181, 209, 210, 217, 243, 262, 263, 386, Reliability 17 277–279, 281, 300, 302, 305, 308, 311, 314, 452, 458, 464–465, 499, 500, 502 Remote control 479 317–319, 322–328, 332–334, 336, 352, Protocol Data Unit (PDU) 150, 151, 155, 165, Remote Control (VLBI) 10 356–358, 360–366, 369, 370, 372, 373, 378, 170, 173 Remote control idea 396 388, 390, 393, 400, 404, 407–409, 412–415, Proxy firewall Remote function calls 168 423, 425, 432–438, 444, 446, 448, 452, 454, –– advantages 467 Remote Operations Center (ROC) 397 455, 457, 469–473, 479, 480, 485–487, 489, –– principles 467 Remote Procedure Call Language (RPCL) 491, 494, 499, 504, 506, 511, 512 PScan 115 175, 203 Processing chain 314 Psychology behind style guide rules 26 Remote Procedure Calls (RPCs) 167–181, Processor 16, 76, 87, 94, 258, 276, 318, 319 PTP. See Precision Time Protocol (PTP) 186–188, 190, 200, 202, 204–210, 216–217, Profiler 94 Public project status displays 111 222–223, 232, 234–238, 242, 244, 263, 269, Profiling tools 94 Pulse Per Second (PPS), 276, 401 271, 274–277, 280–282, 293, 300, 302, 306, Program 14 Purpose of metrics 64 308, 323–325, 327, 332, 334, 337, 338, 364, Program directories 98 Purpose of this work 6 367–371, 375–376, 378, 396, 415, 420, 423, Programmable logic controller (PLC) 260, 262, Python 21, 24, 50, 243 425, 429, 430, 434, 450, 466, 471 263, 276, 388, 412, 422 –– application parametrization 175 Programming Community Index 22 –– call correctness 174 Programming languages Q –– call semantics 173 –– boost C++ Libraries 23, 141 Qt 284 –– communication protocol 175 –– C 6, 20, 22, 24, 30, 31, 41–44, 46, 50, 116, 138, Quadridge Feed Horn (QRFH) 407 –– daemon 171 258, 412, 420, 469, 471 Quality 17 –– data representation, with XDR 171 –– C# 23, 50 –– factors 17 –– definition 169 542 Index

Remote Procedure Calls (RPCs) (cont.) Repository project directories 98 Scientific construction kit 145 –– design issues 171 Request for Comments (RFC) 171 Scientific project papers 60 –– device interface 271 Requirement of documentation 47 Scientific result papers 60 –– distributed system 180 Requirements of scientific software 117 Scientific software 8, 14 –– error handling and safety 173 Residual 250, 252, 325, 335, 366, 414 –– accuracy 17 –– example Restrict allowed programs 439 –– changeability 18 –– client stub function call 178, 179 Reusability 18 –– CHAOS report 16–17 –– sun RPC specification file 176 Reviewing techniques for code 6 –– classes 18 –– function with semaphore, idl2rpc.pl Reviews 83, 84 –– complexity 18 application engineering 233–235 Revisions 103 –– complex system behavior 15 –– generating the protocol modules 177 Revolutionary steps in industry 511 –– comprehensibility 18 –– IEEE 754 172 RFC. See Request for Comments (RFC) –– computer program 14 –– local function calls 168 RFI. See Radio Frequency Interference (RFI) –– configurability 18 –– parameter and result passing 173 RGB. See Red, Green and Blue (RGB) –– correctness 17 –– performance 174 RGO. See Royal Greenwich Observatory (RGO) –– design rules 19 –– realizations 170 The Right Language 59 –– effciency 18 –– remote function calls 168 Right method of testing 63 –– factors of success 18 –– round-trip-delay 178 RIPE Message Digest (RIPEMD) 451 –– fault tolerance 17 –– running server and client 186 Risk analysis 63 –– flexibility 18 –– security 174, 466 Robustness 17 –– functional decomposition 15 –– server as device driver 263 ROC. See Remote Operations Center (ROC) –– functionality 17 –– simplify the development of distribute Role based access control 451 –– functions 15 systems 180 Role based security with standard users 437 –– importance of software 15 –– stubs and their use 170 Round-robin recording 503 –– integrity 18 –– sun RPC 170 Round-robin-scheduling 87 –– interoperability 18 –– transport protocols 173 Round-trip-delay 178 –– main deficits in scientific software 15–16 –– writing and compiling the client 178 Royal Greenwich Observatory (RGO) 366 –– maintainability 18 –– writing and compiling the server 178 rpcbind 171 –– maturity 17 Remote security rpcgen 175 –– modifiability 18 –– access control lists 438 RPCL. See Remote Procedure Call Language –– modularity 18 –– asymmetric cipher algorithms 446 (RPCL) –– modules 15 –– authorization pyramid 451 RPCs. See Remote Procedure Call (RPCs) –– objects 15 –– comparison to industrial standard, rsyslog 330 –– operability 17 OPC UA 457 RTAI. See Real-Time Application Interface (RTAI) –– performance 17 –– concept-level access control 455 RTCM. See Radio Technical Commission for –– portability 18 –– cryptographic checksums 450 Maritime Services (RTCM) –– program 14 –– denial-of-Service-attacks 443, 449–450 Rudimentary rules for a FORTRAN –– quality 17 –– encryption with a SSH 446 encapsulation 44 –– factors 17 –– filter tables (iptables) 444 Rules for code instructions 27 –– metrics 18–19 –– functional security 450 Rules for functions and methods 28 –– reflecting the scientific needs 17 –– hash function 450 Rules for names 28 –– reliability 17 –– hybrid cipher algorithm in the SSH 448 Rules for project and source file 27 –– reusability 18 –– key generation 448 Rules for the indenting 28 –– robustness 17 –– local (port) forwarding 450 Rules for whitespaces use 27 –– scalability 18 –– man-in-the-middle attack 448 Running server and client 179 –– security 18 –– reduce access points (ports) 443 –– software design rules 19 –– restrict allowed programs 439 –– software metrics 64 –– role based access control 451 S –– software quality 17 –– Secure Shell (SSH) –– software quality factors 17–18 Safe systems with separate channels 369 –– authentication and key signature 448 –– stability 17 Safety 23 173 –– limitations 449 –– Standish Group, The 16 Safety critical approach with FMEA 62 –– as remote shell 445 –– status 15 Safety tests 72 –– security problem 438 –– supportability 18 SAP. See Service Access Point (SAP) –– security updates 457 –– testability 18 SASL. See Simple Authentication and Security –– Setup script for iptables! 445 –– understandability 18 Layer (SASL) –– Setup script for iptables! 445 –– usability 17 Satellite 2–4, 11, 12, 96, 147, 148, 248–253, –– Setup script for NAT iptables! 461 –– valuation of scientific software 14 276–278, 282, 308, 310, 315–322, 324–327, –– state machine for role change safety 455 Scoping of variables 31 335, 347, 352, 354, 358, 364, 366, 367, 400, –– task based access control 452 Script language tools and vendor tools 148 408, 486, 488–490, 493, 495, 497, 498, –– three-way-handshake of remote access Second revolution, improvements of observing 510, 511 request 453 technique 510 Satellite geodesy 2–4, 11, 12 –– tunneling with SSH 449 Secure Copy (SCP) 430 Satellite Laser Ranging (SLR) 4, 9, 63, 248, 410, –– user based access control 451 Secure File Transfer Protocol (SFTP) 371 428, 457, 458, 486, 488–489, 491–493, 497, –– user identity (authorization) based access Secure Hash Algorithm (SHA) 451 498, 506 control 451 Secure RPC 235 SAX. See Simple API for XML (SAX) –– X forwarding 448 Secure Shell (SSH) 102, 148, 180, 209, 236, 330, Scalability 18 –– X window system 455 415, 430, 434, 438, 445, 448–451, 455, 457, Scanner 190–192, 197, 204, 242, 244, 390 Repository 100 460, 463–473, 479, 481, 497, 502 Scheduling 87 543 R–S Index

–– authentication and key signature 448 Semantic analysis 201 SMTP. See Simple Mail Transfer Protocol (SMTP) –– limitations 449 Semaphore 89 SNAP. See Standard Notation for Astronomical –– Off-Host forwarding 457 Sensor(s) 98, 127, 254–256, 279, 280, 311, Procedures (SNAP) –– and terminal security 469 369–371, 378–380, 386–391, 397, 399, 422, SNMP. See Simple Network Management Protocol –– tunnel management 487, 488, 491, 492, 511 (SNMP) –– control terminal 470 –– control points and data injection 372–373 SNR. See Signal to Noise Ratio (SNR) –– data chopping and steganography –– data categories 388–389 Software creation workflow 77 479–181 –– measures 388 Software design rules 19 –– redirection of input and output Separation of the workflows 308 Software development 6–8, 12, 15, 16, 19, 30, 35, streams 471 Sequence charts 50 37, 49, 56, 62, 77, 81, 84, 97, 103, 109, –– reduction of insecure times 479 Server 77, 97, 100–103, 109, 110, 112, 114, 116, 117–128, 132, 143, 284, 336, 511 –– security problem of a redirection 479 127, 128, 148, 151, 153–156, 159, 163, 166, Software Failure Mode and Effects Analysis –– security vs. safety 471 167, 169–171, 173–180, 188, 202, 204, (SFMEA) 62 –– SSH and terminal security 469 206–210, 212–214, 216, 217, 220–223, Software metrics 18, 64 –– sshbroker and remote control 479 232–236, 238, 243, 244, 263, 269, 271, 274, –– benchmark 66 –– steganography 480 277, 282, 286, 292, 293, 300, 302, 308, 327, –– characteristic factors for scientific –– terminal input and output streams 469 330, 332, 333, 362, 366, 368, 372, 373, 375, developments 65–66 –– terminal read and write access 470 376, 400, 414, 423, 424, 430, 448–456, 464, –– code beautifier 66–67 –– TTY redirection with a pseudo TTY 473 466–468, 479, 496, 498 –– counts, metric parameters, measures 65 Secure Socket Layer (SSL) 102, 438, 449 Server application sample 213 –– interpretation of test results 67 Security 18, 174–175, 432 Server application skeleton 212–213 –– land mines in test results 67–68 –– access control 432–433 Server safety 220 –– measuring process and its classification 66 –– aspects 431 –– automatic safety device 233 –– metric categories for scientific –– definition 432 –– demonstration 223 developments 64 –– for distributed systems –– multi-threading 222 –– metric parameter severities 67 –– consequences of forwarding 465–466 –– parallel safety device thread 233–234 –– purpose of metrics 64–65 –– creation of network enclaves 458 –– persistence and idempotence 232–233 –– test metrics 64 –– firewall management 464 –– semaphores 222 –– three main code metric dimensions 64 –– independence of network enclaves –– startup control 222 Software project 15 458–459 –– time limitations 222–223 Software quality factors 17 –– intrusion detection 466 –– watchdog 232 –– accuracy 17 –– IP (or port) forwarding 464 Server security –– changeability 18 –– IP Spoofing 466 –– authentication 234–235 –– complexity 18 –– security problems 457 –– authorization 235 –– comprehensability 18 –– SSH Off-Host forwarding 465 –– in the LAN and WAN 234 –– configurability 18 –– in the e-VLBI network 501–502 –– Secure RPC 235–236 –– correctness 17 –– factors 432 Service Access Point (SAP) 175 –– efficiency 18 –– interconnectivity 433 Session Initiation Protocol (SIP) 377 –– fault tolerance 17 –– for an observatory SFD. See Source Flux Density (SFD) –– flexibility 18 –– distributed systems 466–467 SFTP. See Secure File Transfer Protocol (SFTP) –– functionality 17 –– limits of a firewall 466 SHA. See Secure Hash Algorithm (SHA) –– integrity 18 –– nested enclaves 468–469 Shallow copy 35, 90 –– maintainability 18 –– nested SSH tunnels 468 Shared memory 87–88 –– maturity 17 –– network address translation Sharing prefabricated off-the-shelf building –– modifiability 18 and masquerading 463 blocks 132–133 –– modularity 18 –– Network Flight Recorder 466 sha1sum 451 –– operability 17 –– open source firewall m0n0wall 467–468 Shell interface 283–284 –– performance 18 –– package filter firewall rules 460 Shortest job first 319 –– portability 18 –– passing of firewalls 464 Signal processing circuit with logic gates 256 –– reliability 17 –– physical separation with dualhomed Signal to Noise Ratio (SNR) 406 –– reusability 18 hosts 459 Simian 115 –– robustness 17 –– proxy firewall advantages 467 Simple API for XML (SAX) 346 –– scalability 18 –– proxy firewall principles 467 Simple Authentication and Security Layer –– security 18 –– reduction of noisy traffic 457–458 (SASL) 101 –– software metrics 18 –– RPC security 466 Simple Mail Transfer Protocol (SMTP) 150 –– stability 17 –– security problems for distributed Simple Network Management Protocol –– supportability 18 systems 457 (SNMP) 375 –– testability 18 –– vs. safety 471 Simplify the development of distribute –– understandability 18 –– updates 457 systems 180–181 –– usability 17 Security problems 438 Single-level and multi-level data structures Software requirements –– for distributed systems 457–458 351–352 –– CCNU GCC 12 –– of a redirection 479 SIP. See Session Initiation Protocol (SIP) –– Linux 12 Security risks Situation of employees 279 –– Observatory Web page 12 –– brute-force-attacks 437 Six incremental pillars 8 –– TUM Web page 13 –– data based attacks 437–438 SKA. See Square Kilometer Array (SKA) Software structure 370 SEFD. See System Equivalent Flux Density (SEFD) SLR. See Satellite Laser Ranging (SLR) Software system 19 Segmentation 311–312 SMART criteria for iteration goals Software tests 68 Self-similar decomposition 280 119–120 Software toolbox 8 544 Index

Software tools 141, 148, 168, 178, 181, 190, 191, 197, 244, 362, Syntax analysis 197 –– Apache AntTM 114 376, 411, 414, 429 Syntax graph 197 –– Apache Maven 114 Source Flux Density (SFD) 406 Syntax tree 183 –– API Sanity Checker 82 Source Network Address Translation (SNAT) 463 Syslog 330 –– Artistic Style 2.02 (astyle) 66, 115 Space debris 308, 493 System efficiency and calibration 405 –– asterisk 378 Space geodesy 3 System Equivalent Flux Density (SEFD) 406, 412 –– bcov 80, 115 Space geodetic techniques 3–6, 9, 10, 19, 277, System health and human safety 420 –– bison 190 369, 399, 481, 486, 488, 491, 507 System health states 388 –– Codan 116 Space techniques 4, 248, 327, 351, 486, 488–490, System monitoring and safety –– codespell 115 493, 504, 506, 510 –– additional sensor net 388 –– Cppcheck 78, 84, 115 SQL. See Structured Query Language (SQL) –– alarm levels 377 –– Doxygen 52, 117, 129, 148, 202, 522 Square Kilometer Array (SKA) 428 –– autonomous functionalities –– Eclipse 116, 190 SSFMEA. See Software Failure Mode and Effects –– controlling 378 –– e-RemoteCtrl 58, 426, 428–430, 450–453, Analysis (SFMEA) –– failure management 389 455, 471, 479 SSH. See Secure Shell (SSH) –– hardware driving 386 –– e-shell 471 sshbroker 479 –– planning 378 –– expect 466 SSL. See Secure Socket Layer (SSL) –– user interfacing 378 –– f2c 43 SSRAM. See Static Random Access Memory –– cell structure 369 –– flawfinder 115 (SRAM) –– characteristic sensor profiles 386 –– fwbuilder 464 Stability 17 –– comparison to industrial standard, OPC –– GCC 94, 95 Standard Notation for Astronomical Procedures UA 378 –– GDB 94 (SNAP) 323, 331, 405, 409, 412–415, 420 –– configuration 373 –– Git 100, 108 Standards 20, 21, 23, 26, 27, 30, 33, 41, 44, 65, 84, –– database tables 376, 377 –– GNU make 74, 115 107, 127, 148–150, 162, 171, 279, 378, 387, –– example –– gpg 451 446, 447, 466, 486 –– configuration file format for data –– Graphviz 50 Standard Template Library (STL) 23, 34, 35, 91, servers 375 –– GTK+ 284 95, 141, 146, 303–305, 517, 523 –– configuration file format for sensor control –– HALCON 318 Standish Group, The 16 points 373 –– Jenkins 114 Starvation 87, 90, 166, 208, 318, 319 –– configuration file format for sub-cells 375 –– Jive5ab 495, 496 State machine for role change safety 455 –– MCI functionalities 381 –– logog 329 Static code analysis 35, 116 –– galvanic isolators 387 –– md5sum 451 Static code inspections –– hardware layers 369 –– m0n0wall 467 –– analyzer checks and issues 85 –– identification in a network 375 –– Nagios 370 –– analyzer tools 86 –– in-sky safety 389 –– NASA Field System 323, 405, 409 –– compiler outputs 84 –– MCI standardization 369 –– nsiqcppstyle 115 –– false positives 86 –– minimal invasive concept 386 –– Open-MoniCA 372 –– informal reviews 83 –– network identification example 375 –– Oracle’s Hudson 114 –– reviews 83 –– on-ground safety 390 –– Pandora FMS 370 –– statistics as metrics parameter 85 –– other fields for a safety system 390 –– pmap_dump 179 –– technical reviews 84 –– safe systems with separate channels 369 –– pmap_set 186 Static code optimization 203 –– sensors 386 –– PolySpacer 84 Static Random Access Memory (SRAM), 258 –– control points and data injection 372 –– portmap 171 Station specific parts 409 –– data categories 388 –– PostgreSQL 146, 330, 358, 360, 362, 371 Statistics as metrics parameter 85 –– measures 388 –– PScan 115 StatSVN 114 –– software structure 370 –– Qt 284 Status 15 –– system health states 388 –– rpcbind 171 Status file, extend existing systems 431 –– Zabbix 379 –– rpcgen 175 Steganography 480 System of systems 491 –– rsyslog 330 STL. See Standard Template Library (STL) System tests 83 –– secure RPC 235 Structural modules 135 –– sha1sum 451 Structured programming 24 –– Simian 115 Structured Query Language (SQL) 99, 146, T –– StatSVN 114 360–362, 367 Tags 103 –– Subclipse 116 Stub 77, 130, 170, 178–179, 234, 390, 409, 415, Targets in a Makefile 76 –– Subversionr 100, 116 420, 450, 482 Task based access control 452 –– syslog 330 Students 11 TCP. See Transmission Control Protocol (TCP) –– Valgrind 94, 115, 116 Style guide. See Coding style guide Technical principles 248 –– VMware 110 Subclipse 116 Technical realization of the functionalities 302 –– Wiki 57 Subversion® 100, 116 Technical reviews 84 –– wxFormBuilder 291 Sun RPC 170 Technical VLBI aspects –– wxWidgets 291, 423 Superuser or root 434 –– down-conversion and sampling 403 –– Xen 110 Supportability 18 –– reception 401 –– yacc 190 Support for automated, complete builds 76 –– shipment and correlation 404 –– Zabbix 370, 379 Supporting environment, Eclipse 116 Telescope and reception 249 Solution examples in programmed Supporting production cell structures 281 TeleTYpe (TTY) 469, 471, 481 form 7–8 Supporting solutions for the challenges 511 Template metaprogramming 141 Source code 6, 9, 11, 15, 17, 20, 21, 27, 31, 44, 50, SVN file header with keywords 107 Terminal input and output streams 469 51, 56, 61, 62, 66, 68, 70, 76, 92, 95, 98, 99, 103, Symbol table 197 Terminal read and write access 470 105, 107, 126, 128, 129, 132, 134, 135, 137, 139, Symmetric block cipher algorithms 434 Terrestrial geodesy 2 545 T–V Index

Terrestrial infrastructure 4 Transportable Integrated Geodetic Observatory Use cases 3, 10, 18, 49, 56, 59, 119, 135, 181, 276, Terrestrial reference frame 3, 4, 407, 486 (TIGO) 427, 428, 494 312, 357, 481, 493 Test(ing) 4, 6, 8, 12, 16, 19, 26, 30, 35, 39, 41, 44, Transport layer 150 Used time 411 46, 62–72, 76–84, 86, 92, 95–97, 103, 109–112, Transport protocols 173 Use example of the wettzell simple unit test 115–120, 125–130, 133, 170, 254, 310, 327, Tree swing comic is up-to-date 6 suite 78 338, 340, 390, 400, 406, 415, 428, 437, 447, Try/catch exceptions 33 Useful tools 114 452, 481, 482, 493, 499, 502–504, 507 Tsunami UDP Protocol 498–499 Use of connectionless sockets 155 –– acceptance tests 83 T TY. See TeleTYpe (TTY) Use of connection-oriented sockets –– black-box-tests 68 TTY redirection with a pseudo TTY 473 –– close communication 154 –– case generators 82 TUM Web page 12 –– create socket 151 –– case structure 72 Tunneling with SSH 449 –– data exchange 153 –– coverage as metrics parameter 80 Turing 142, 186, 187, 201 –– initiate communication 153 –– data 68 Tutorials 57–59 Use of files for specific laser ranging data 352 –– dealing with software errors 62 Two-layer model of an autonomous Use of source code 11 –– debugging 69 production cell 281 User based access control 451 –– disadvantages of the usual testing 62 Types 40 User Datagram Protocol (UDP) 146, 150, 155, –– driven development 70 –– of autonomous control cells 280 170, 173, 174, 178–180, 208–210, 217, 498 –– feedback history 80 –– cast(ing) 31–33 User documentation in scientific projects 56 –– friendliness 70 –– compatibility of 32-bit and 64-bit 32–33 User ID 433 –– gray-box-tests 68 –– of supporting production cells 282 User identity (authorization) based access –– integration tests 83 control 451 –– metrics 63 User roles 356 –– protocol 63 User’s manuals 59 –– reviews 83 U User story cards 119 –– right method of testing 63 Usual test culture 69 UDP-based Data Transfer Protocol (UDT) 502 –– risk analysis 63 UTC. See Universal Time Coordinated (UTC) Understandability 18 –– safety critical approach with FMEA 62 UTF. See Unicode Transformation Format (UTF) Unicode Transformation Format (UTF) 163, 292, –– static code inspections 84 522 –– system tests 83 Unified Modelling Language (UML) 49, 50, 93 –– test protocol 63 Uniform Resource Locator (URL) 54, 102, 103, V –– verification and validation 68 105, 107, 293, 294 Valgrind 94, 115, 116 –– white-box-tests 68 Uninterruptible Power Supply (UPS) 428 Valuation of scientific software 14 Testability 18 Unit test(ing) 35, 41, 44, 46, 66, 69, 70, 77, 78, Verification and validation 68 Testing landscape 96 80–83, 86, 110, 115, 116, 125, 128–130, 134, Version checksums, idl2rpc.pl application –– costs and benefits in the risk management 96 144, 148 engineering 217 –– culture for the constructive handling of –– automated unit tests 78 Version control system 97, 109 errors 97 –– build output as test feedback 76 –– branches 103 –– prioritization of tests 96 –– definitions in a makefile 76 –– centralized module base 106 Text-highlighting 51 –– function stabilization 80 –– code version management tools 100 Text messages 162 –– GNU Build System 74 –– commands 103 Textual syntax notation 182 –– limits and extreme situations 72 –– commits 103 Thin clients and fat servers 292 –– limits of simple solutions 73 –– communication, protocols and user Third revolution, space techniques 510 –– logical paths 69 credentials 101 Thread 16, 22, 23, 31, 34, 35, 87–90, 93, 94, 128, –– makefile 73, 74, 76 –– copy-modify-merge solution 101 166, 206, 208, 216, 220–223, 233, 269, 306, –– mocks for system imitations 78 –– example 308, 332, 334, 373 –– safety tests 72 –– SVN commands 104 Thread-safe encapsulation 42–43 –– software creation workflow 77 –– SVN file header/trailer 107 Three main code metric dimensions 64 –– stubs for external dependencies 77 –– SVN properties 106 Three steps of use 41 –– support for automated, complete builds 76 –– Git and its differences 108 Three-way-handshake of remote access –– targets in a makefile 76 –– hash function 108 request 453–455 –– test case generators 82 –– hierarchical document tree 98 Three-way-handshake of TCP 153 –– test case structure 72 –– human skills 108 Threshold 110, 312–316, 322, 330, 336, 377, 393 –– test class 79 –– lock-modify-unlock solution 101 TIGO. See Transportable Integrated Geodetic –– test coverage as metrics parameter 80 –– merge conflicts 101 Observatory (TIGO) –– test driven development 70 –– program directories 98 Timing 276, 333 –– test feedback history 80 –– properties to define externals 105 Timing layers from real-time to normal –– test friendliness 70 –– properties to replace keywords 106 time 276–277 –– unit tests 60 –– pros and cons of SVN 107 Toolbox 8, 106, 128, 134–135, 137, 141, 144–145, –– usual test culture 69 –– repository 100 148, 156, 235, 236, 263, 302, 349, 466, 511 –– wettzell unit test suite 78 –– repository project directories 98 Toolbox module for configurations 349 Universal Serial Bus (USB) 370 –– revisions 103 Top-down 130, 197, 400, 489 Universal Time Coordinated (UTC) 107, 147, 340, –– SVN file header with keywords 107 Topology 300 401, 407, 411 –– tags 103 Transaction 94, 174, 233, 235, 236, 356, 360, Upper case 29 –– URLs 102 364, 392 UPS. See Uninterruptible Power Supply (UPS) –– version control 97 Transmission Control Protocol (TCP) 146, URL. See Uniform Resource Locator (URL) –– working copies and revisions checkouts 149–153, 156, 170, 173, 174, 178–180, 208–210, Usability 17 102, 103 217, 237, 262, 330, 364, 378, 453, 498 USB. See Universal Serial Bus (USB) Very Long Baseline Array (VLBA) 411, 412 546 Index

Very Long Baseline Interferometry (VLBI), 4–6, 9, von Neumann architecture 256, 260 –– during the observation 252 21, 57, 223, 323–326, 330, 372, 389, 400–409, VPN. See Virtual Private Network (VPN) Working copies and revisions, checkouts 415, 422, 424, 426–428, 452, 468, 481, 488, 102, 103 489, 493, 498, 500, 502–506, 508 Workload estimation 504 –– control system W Workload splitting 504 –– control layers 409 Writing and compiling the client 178 WAN. See Wide Area Network (WAN) –– NASA Field System 409 Writing and compiling the server 178 Watchdog 166, 180, 204, 209, 210, 217, 220, 221, –– NASA Field System programs 411 Written documentation 48 232, 244, 246, 277, 282, 305, 332, 368, 372, –– NASA Field System tasks 410 WVR. See Water Vapor Radiometer (WVR) 373, 450, 457 –– station specific parts 409 wxFormBuilder 291 Watchdog process 166 –– used time 411 wxWidgets 284, 423–425 Water Vapor Radiometer (WVR), 311, 388 –– observation results 405 –– advanced 291 Web-based Distributed Authoring and –– observation workflow 404 –– architecture 284 Versioning (WebDAV), 102 VEX. See VLBI EXperiment format (VEX) –– event-driven programming 286 Well-tested modules and components VGOS. See VLBI Global Observing System (VGOS) –– framework 284 –– centralized code assets and continuous VGOS Monitor and Control Infrastructure –– program elements and flow 286 integration 144 (MCI) 369–372, 375, 378, 380, 388 –– rapid application development 291 –– generated modules and components 148 VHDL 50 –– institute’s construction kit 145 Virtual activities of one construction –– scientific construction kit 145 iteration 124 –– script language tools and vendor tools 148 X Virtualization 110, 137 –– wettzell’s simple code toolbox 145 XDR. See External Data Representation (XDR) Virtual Local Area Network (VLAN) 458, 464, 466 Wettzell’s design-rules 27 Xen 110 Virtual Network Computing (VNC) 429, 455 Wettzell’s simple code toolbox 145 X Forwarding 455 Virtual phases 121 Wettzell unit test suite 78 XML. See Extensible Markup Language (XML) Virtual Private Network (VPN) 466 White-box-tests 68 XP. See Extreme Programming (XP) VLAN. See Virtual Local Area Network (VLAN) White Rabbit Solution 276 X Window System 455 VLBA. See Very Long Baseline Array (VLBA) White space 24, 27, 30, 67, 146, 187, 190, VLBI. See Very Long Baseline Interferometry 192, 340 (VLBI) Wide Area Network (WAN) 149, 234, 431, 467, VLBI EXperiment format (VEX) 413, 498 Y 468, 498–499, 502, 503 VLBI Global Observing System (VGOS), 5, 10, 372, yacc 190 Wiki 22, 57, 61, 128, 367 405, 407, 428, 429, 487, 499, 504 Window designing 285 VLBI Standard Interface (VSI), 404, 499–500 Workflow of observations VMware 110 –– after the observation 252 Z VNC. See Virtual Network Computing (VNC) –– before the observation 252 Zabbix 370, 378 Voice over IP (VoIP), 377