Curriculum Vitae for
Tom Schouten
e-mail: tom [@] zwizwa [.] be
www: http://zwizwa.be
TECHNICAL SKILLS
- Programming languages
- Expert level C, Forth, Microchip PIC assembly and Scheme
programmer. I produced non-trivial code in Haskell, OCaml, Java,
C++, Objective C, Perl, Python, Matlab, Emacs Lisp, Pure Data and
assembler for x86, PIC and TMS320C40. Looked at Common Lisp,
Erlang, Prolog, SQL, Oz, Fortran, Fortress and assembler for Z80,
ARM, MIPS, PPC and TMS320C6x.
- Proficient in Functional Programming techniques. Hands-on
experience with Racket (PLT Scheme), Haskell and a bit of OCaml.
- Good understanding of object-oriented, component-oriented and
aspect-oriented design. Basic knowledge of design patterns.
- Lifelong student of programming language theory and compiler
design. Experience with language implementation in C, Forth,
Scheme, Haskell and OCaml. I take great interest in designing
domain specific abstractions (DSLs and code generation).
- Operating systems and environments.
- GNU/Linux expert, both as an application developer and system
administrator. It is my main OS since 1997. Specialized in low
level Posix system programming, audio/video APIs, and OpenGL.
Basic understanding of the inner workings of the Linux kernel and
the Xenomai real-time extension. Very familiar with the GNU
binutils/GCC/GDB toolchain and its quirks. Worked with Google's
Android.
- Good understanding of multithreading (shared memory, message
passing, dataflow, scheduling, ...) in a real-time programming
context.
- Experience with low-level real-time embedded programming both on
the eCos RTOS and to the metal. Experience with minimalistic
RT-OS design and implementation (Forth).
- Signal processing
- Profound theoretical understanding of basic linear algebra and
continuous/discrete time signal processing, FIR and IIR filters,
fourier analysis, discrete wavelets, noise reduction,
compression. Basic understanding of control theory, linear and
non-linear dynamical systems, optimization theory, statistics,
information theory, communication and digital codes. In general,
I can navigate problems of mathematical nature.
- Expert in Audio/Video DSP: design and implementation of real time
effects processing, sound synthesis and post production
algorithms. Good understanding of computer vision and 2D/3D
computer graphics.
- Electronics
- Good theoretical understanding of both analog and digital
electronics.
- I am really a software person, but I have limited experience with
circuit design and PCB layout (gEDA suite).
COMMUNICATION SKILLS
I am fluent in Dutch and English. I can read and understand French and
German. I have written scientific papers, informal articles, code
documentation and end user manuals. I have frequently played the role of
tutor.
EMPLOYMENT HISTORY
Research Projects (November 2010 - present)
Early design phase of a hybrid analog/digital sound synthesizer. This
is the application that serves as a pull for the following activities:
- Analog electronics: theory rehash and hands-on experiments.
- Staapl maintenance: API simplifications + internal dependency
restructuring (more Scheme, less Forth).
- Design of an embedded Domain Specific Language (eDSL) for audio DSP using Haskell.
Ubidata N.V. (July 2010 - October 2010)
Worked with the eCos RTOS on the Atmel AT91SAM7 ARM7TDMI architecture.
I designed and implemented a reactive programming system for event
handling and robust DataFlash storage abstractions for configuration
and log message storage.
Open Source Projects (April 2010 - Juli 2010)
Development: reactive/dataflow framework for sweb, dataflow compiler
in Haskell. Study: classical mechanics and refreshing of DSP theory.
Sony Techsoft Centre Europe (November 2009 - March 2010)
Design and implementation of a test system for Google's Android
platform. During these months I took a deep dive into the Android
system on all levels: the high level Java API, native C code libraries
using the Java Native Interface (JNI) and C/C++ code on the system
level.
Open Source Projects (March 2009 - October 2009)
Mostly development of Staapl, sweb and libprim and study of
programming language theory and implementation.
Triphase N.V. (October 2008 - March 2009)
Systems programming contract work. Next to assisting in day-to-day
problem solving involving PC hardware, Debian, Linux and Xenomai, I
was responsible for two larger C programming projects:
- Design, implementation and ongoing refactoring of an application
for the configuration and coordination of fieldbus systems (Ethercat
and CANbus) and multiple Xenomai real-time control and measurement
tasks.
- Design and implementation of a low-level EtherCat master driver.
Open Source Projects (April 2003 - October 2008)
Study and development of open source software and some contract work:
- October 2007 - December 2007: Development of KRIkit, a modem for
digital data communication by audible sound signalling using
microphone and speakers, built using the Staapl framework. The
circuit uses a Microchip PIC18F2620 controller for receive/transmit
of sound signals. The firmware implements OOK and PSK
modulation/demodulation of the transmitted/recorded sound. This was
part of an artist-in-residency program at Waag in Amsterdam,
together with Metabiosis/GOTO10.
- October 2005 - October 2007: Finalizing and documenting Packet
Forth, and developing the open hardware project CATkit as a standard
platform for demonstrating the Staapl project. Part of a 2 year
collaboration with GOTO10 and the School of Art, Design and
Architecture at the University of Huddersfield.
- Several hands-on workshops and invited talks about PDP, Packet
Forth and Staapl.
- Several artistic performances using Pure Data & PDP.
Arboretum Systems (October 2001 - March 2003)
DSP Engineering contract work.
- Refactoring of legacy audio processing components (C++) for
integration in the audio/video authoring tool
HyperEngine-AV for Mac OS X.
- Integration of company audio signal conditioning products in third party systems.
- Design and implementation of new audio processing algorithms and
effects, including the HyperEngine-AV audio time stretching engine,
the improved noise reduction engine in Ray Gun Pro, and some
Hyperprism audio effects.
SISTA lab, KULeuven (October 1998 - August 2001)
Research Assistant.
- Analysis, modification and re-synthesis of high quality audio,
using piecewize stationary signal models.
- Research on timbre modulation lead to a modeling framework based
on a pitch-synchronous, piecewize stationary wave table model that
allows separate modeling of instantaneous spectra and parameterization
of its time evolution. The DYNWAV model significantly reduces the
analytical and computational complexity of the stationary part of
signal modeling, allowing the use of simple and efficient techniques
(FFT + polynomial interpolation). This framework was implemented as
an extension to Pure Data and later included in Creb as
the
dynwav~ object.
- Several smaller projects related to signal analysis and
synthesis: refinement of a subspace based frequency estimation
technique (HSVD) using a subband approach for resolving closely
spaced signal poles as they occur in string instruments, evaluation
of trade-offs involved in FFT window design for sinusoidal
synthesis, and the use of discrete state updates to an IIR filter
bank for alias-free synthesis of discontinuous waveforms.
INDEPENDENT R & D
Between consulting work my focus is on study and software development.
Most of these projects are domain-specific design tools for digital
signal processing and resource constrained (embedded) design.
- Experiments with Haskell
and MetaOCaml for code generation (staged programming). Mostly
working towards an embedded DSL implemented in the Haskell programming
language. Its main purpose is to allow the use of a high level
specification to drive analysis and simulation, and eventually to
generate C code to plug into existing systems.
- The Staapl framework, a
metaprogramming tool for time/space constrained embedded systems,
based on a functional concatenative programming language model (a
dialect of the Forth programming language), and implemented as an
extension of PLT Scheme.
- An embedded application core
library libprim. This project
is about layered development of a C-based project by (optionally)
introducing small-footprint scripting languages (Scheme and PF2).
- Packet Forth (PF), a
stand-alone scripting language for video processing using C-based
video DSP plugins.
- Creb, an extension for
the computer music
system Pure
Data. Creb adds building blocks for music DSP that were missing in
Pure Data, or are the result of my research on audio synthesis
techniques.
- Pure Data
Packet (PDP), another extension for Pure Data, which adds building
blocks for image and video processing.
- These and other projects can be found
at http://zwizwa.be/darcs.
In these
periods I also work(ed) on the following background tasks:
- Experiments with web programming and data management in
PLT Scheme.
- GNU/Linux server and network maintenance. This includes my own
computer and network infrastructure (Debian + OpenWRT), and
included a large part of the GOTO10 servers (web, email, vpn,
routing, dns, firewalls, and scripting for integration) during my 3
year affiliation (2005-2007).
- The
LFSR
project, providing DSP algorithm consulting for the absolute position
tracking device based on 2D pseudonoise.
- Formal study to complement the hands-on work. I'm currently
focussing on code analysis and transformation, type systems,
abstract interpretation and staging (code generation).
EDUCATION
Computer programming has been a central part of my life since the age
of 12. I read and experiment a lot. Being mostly self-taught, I also
went through some official training:
October 1998 - August 2001
Several graduate courses and
seminars while being affiliated with the KULeuven. Topics include
optimization theory, statistical learning theory, neural networks,
system theory, identification and control, numerical algorithms and
computer architecture.
September 1993 - June 1998
Undergraduate studies in
Engineering at the KULeuven, Belgium. Graduated as Electronics
Engineer, option Digital Signal Processing (Burgerlijk
Elektrotechnisch Ingenieur). Obtained 3 cum laude degrees
(onderscheiding), 1 suma cum laude degree (grote onderscheiding).
PERSONAL DATA
Born on August 1, 1975 in Neerpelt, Belgium. My interest besides
computing and signals include music, mathematics, physics, psychology,
biology and philosophy.