Vorträge und Publikationen

Konferenzvorträge und Vortragsreihen

From Iterators To Ranges — The Upcoming Evolution Of the Standard LibraryArno Schödl

Pairs of iterators are ubiquitous throughout the C++ library. It is generally accepted
that combining such a pair into a single entity usually termed Range delivers more concise
and readable code. Defining the precise semantics of such Range concept proves surprisingly
tricky, however. Theoretical considerations conflict with practical ones. Some design
goals are mutually incompatible altogether.

A Practical Approach to Error HandlingArno Schödl

Every program may encounter errors, some originating from internal bugs in the program, others
coming from the environment the program is operating in. Ignoring all errors will make the
program utterly unreliable, while treating every conceivable one introduces lots of extra
complexity with little benefit. At think-cell, we have been using and refining our own principled
approach to error handling, which we have not seen elsewhere. This lecture teaches our method,
so that you in your next project, too, can write more reliable software with less effort.

Industrial Strength Software HackingSimon McPartlin

Software patching is a powerful but potentially risky method for fixing bugs, adding functionality,
and improving the usability or performance of software. This lecture looks at patching software
where the source code is unavailable, an activity commonly referred to as hacking. We discuss
why and when such activity may be necessary before looking in detail at the design and implementation
of robust patches. We finish off by describing various tools and techniques that can be used
to find suitable patching locations.

std::cout is out — Why iostreams must goSebastian Theophil

We have recently begun to port our software to other platforms. In this process, we discovered the world of
pain that are iostreams and C-style I/O. In this talk we give a short overview over why we have
banished iostreams from our code base and what we have replaced them with.

C++ Memory ModelValentin Ziegler and Fabio Fracassi

The C++ memory model defines how multiple threads interact with memory and shared data, enabling developers
to reason about concurrent code in a platform independent way. The talk explains multi-threaded executions
and data races in C++, how concurrent code is affected by compiler and hardware optimizations, and how
to avoid undefined behavior by using locks and atomic operations. Then it focuses on different memory
orders for atomic operations, their guarantees and performance implications.

C++ vs. JavaValentin Ziegler and Fabio Fracassi

We love C++ and use it daily. In this talk we explain why – despite its reputation for complexity – C++ is conceptually a much better language than Java. Why? Because C++ knows value semantics. Because C++ has undefined behavior. Because C++ does not enforce garbage collection. Because with C++ we can write code that is both abstract and efficient.

Wissenschaftliche Publikationen

This paper presents an efficient algorithm for a new variation of the point feature labeling
problem. The goal is to position the largest number of point labels such that they do not intersect
each other or their points. First we present an algorithm using a greedy algorithm with limited
lookahead. We then present an algorithm that iteratively regroups labels, calling the first
algorithm on each group, thereby identifying a close to optimal labeling order. The presented
algorithm is being used in a commercial product to label charts, and our evaluation shows that
it produces results far superior to those of other labeling algorithms.

This paper presents a smart algorithm for labeling column charts and their derivatives. To
efficiently solve the problem, we separate it into two sub-problems. We first present a geometric
algorithm to solve the problem of finding a good labeling for the labels of a single column, given
that some other columns have already been labeled. We then present a strategy for finding a good
order in which columns should be labeled, which repeatedly uses the first algorithm for some limited
lookahead. The presented algorithm is being used in a commercial product to label charts, and has
shown in practice to produce satisfactory results.

In this paper we introduce a new algorithm for image and video texture synthesis. In our approach, patch
regions from a sample image or video are transformed and copied to the output and then stitched together
along optimal seams to generate a new (and typically larger) output. In contrast to other techniques,
the size of the patch is not chosen a-priori, but instead a graph cut technique is used to determine the
optimal patch region for any given offset between the input and output texture. Unlike dynamic programming,
our graph cut technique for seam optimization is applicable in any dimension. We specifically explore it
in 2D and 3D to perform video texture synthesis in addition to regular image synthesis.

In this paper we present a new approach for generating controlled animations of video sprites. Video sprites
are animations created by rearranging recorded video frames of a moving object. With our technique, the user
can specify animations using a flexible cost function, which is automatically optimized by repeated replacement
of video sprite subsequences.

This paper introduces a new type of medium, called a video texture, which has qualities somewhere between
those of a photograph and a video. A video texture provides a continuous infinitely varying stream of images.
While the individual frames of a video texture may be repeated from time to time, the video sequence as a
whole is never repeated exactly. Video textures can be used in place of digital photos to infuse a static
image with dynamic qualities and explicit action.