Curriculum Vitae Dipl. Informatiker Wolfgang Häfelinger ======================================================= Wolfgang Häfelinger v1.2, January 2010 SEEKING ------- Looking for interesting and challenging work in the design and development of software projects within Europe; preferring countries like Germany, Switzerland, Austria and the Benelux countries. ABOUT ME -------- [width="100%",frame="",grid="cols",cols="20%,80%"] |======================================================================= | Name | Häfelinger | First-name | Wolfgang | Address | Slangenburg 42, 1082JW Amsterdam, NL | Nationality | German | Year of birth | 1964 | Born in | Freiburg im Breisgau, Germany | | | Phone | +31 648 27 61 59 | Email | wh@haefelinger.it | Internet | http://www.haefelinger.it | Weblog | http://workbench.haefelinger.it |======================================================================= image:images/L1010027.jpg[width=170] image:images/L1010037.jpg[width=170] image:images/L1010042.jpg[width=170] image:images/L1010044.jpg[width=170] COMPETENCIES ------------ [width="100%",frame="",grid="cols",cols="20%,80%"] |======================================================================= | Themes | Configuration management, infrastructure solutions for software development, web applications, IT security, compiler construction, telecommunication. | Work | Independent work; trying to provide, design and implement a solution which is simple while still effective, consistent as well as manageable. Also used to work in teams and sharing information to the best of all parties. |======================================================================= PORTFOLIO --------- [width="100%",frame="",grid="cols",cols="20%,80%"] |======================================================================= | 2009 | häfelinger IT | 2005-2009 | European Patent Office | 2001-2005 | Borland | 2000-2001 | Dresdner Bank | 2000 | Karis AG | 1999 | IBM | 1998 | Robert Bosch GmbH | 1994-2000 | Computec GmbH Software |======================================================================= CASE-STUDY 1/3 -------------- European Patent Office, The Hague, The Netherlands; *Freelance footnote:[This and other case-studies regarding my experiences as professional are available at http://en.haefelinger.it/casestudies] and consultant position as professional Java Developer, Security Expert and Software Architect*; 2005-2009 The European Patent Office (EPO) maintains a large software department. In fact, the EPO plays a major and leading role for software products and infrastructure related to patents. A large group of internal and external teams develop reusable or final components. Eventually a installable product for the end user is being assembled by sticking together a set of components in their “correct” version. A problem too often encountered was the usage of “incorrect” versions which led to all kind of run-time problems during “deployment” time. The goal of my assignment was to analyze the situation as well as to design and provide a solution. A major reason for using “incorrect” versions was a lack of communication: Assume that a component A depends on component B and A and B are made by different teams. In an initial point in time, A and B are both in version 1.o and A and B can be happily deployed together. At some later point, B has been developed further to become version 1.1. A needs to run all available tests against B 1.1 for a happy coexisting. Executing this tests did often not happen simply because Team A was not aware that component B got updated. A system was designed to overcome this problem in automatic and user interaction free way. A continuous integration server was deployed to build snapshot and release builds. While a snapshot was build against the latest snapshot version of a dependency was a release build against the “latest and greatest” version. The latest and greatest version of each component got recorded in a so called Baseline and the component’s build script has been overridden to take the Baseline’s version into account. In addition, each dependency component was also rebuild against the updated component. Only if all builds passed was the overall build successful, otherwise the update was rejected. In case of a pass, the new version of the component was considered the “latest and greatest” and thus led to an appropriate and automatic (!) update of the Baseline. Eventually assembling of a final product was nothing more than taking a set of components and the versions implied by a particular Baseline revision. Consequently, this process has also been automated by using the provided build server and eventually simplified, so that just assigning a tag (containing the components version number and Baseline revision) enabled everyone to create a new product release in a fully automatic way without any user interaction! Due to the extraordinary success of this system, the build server got internally branded as “Darwin” and became the de facto standard for building software within the EPO. Technologies used:Ant, Maven, Java, Python, Bash, Wrapper, XHTML, XML, Cruisecontrol, Windows, Linux, Eclipse, graphviz, tanuki wrapper, Konfabulator, Javascript, JSP 2.0, Java Unified Expression Language, Tomcat, Artifactory, POM, CVS, LXML, Winstone, Emacs. == CASE-STUDY 2/3 pyANTLR, Amsterdam, The Netherlands; *Non-commercial contribution footnote:[This contribution to an Open-Source project as well as other projects and contributions created by me are available on my workbench http://workbench.haefelinger.it] to Open Source and Free Software*; 2004 - 2005 ANTLR footnote:[Please find further details on ANTLR at http://www.antlr.org] is a framework for writing language recognizers, translators and compilers with an excellent support for syntax tree construction, manipulation and tree walking. While ANTLR has been implemented in Java, it allows to plug-in code generators for other target languages as well. Before I joined the project, ANTLR supported Java, C++ and C as target languages. I extended this language set by writing a code generator for Python named pyANTLR from scratch, including a rich set of examples and a core library used by the generated code. pyANTLR is an integral part of ANTLR since version 2.7.5. CASE-STUDY 3/3 -------------- Computec GmbH Software, Karlsruhe, Germany; *Full-time employment as Software developer and Project-manager*; 1994 - 2000 The ASN2XXX product family contained an ASN.1 compiler and supporting frameworks for C++ and later Java. Both, compiler and framework have been designed by me and implemented in a small team led by me. ASN2CXX has been sold world wide, mainly to customers in the telecommunication area. Well known customers have been Ericsson, Bell Atlantic, Marconi, Telefonica Spain, Storck Netherlands and Bosch Telecom Germany. The initial version of ASN2CXX has been Computec’s contribution to ACCENT, ASN.1 Coprocessor Cell for European Networking Technologies, a research project partially founded by the European Community as part of the ESPRIT program (EP9169). ACCENT has been a collaborative work of several European companies. I represented Computec GmbH Software in this consortium from the beginning to the end of the project. Other companies and organizations involved have been B3i (France), Pijnenburg (Netherlands), Digital Equipment (Germany), Joanneum Research (Austria), University of Patras (Greece) and XandMail (France). The objective of ACCENT was to devise a coding system acting as hardware cell. This hardware cell had the ability to encode and decode X.209 binary data, the canonical binary representation of ASN.1 at that time. Besides participating in the design of the overall concept, my task was to provide a ASN.1 compiler generating pass:[C++], an API for the representation of ASN.1 data structures in pass:[C++] and a software implementation for encoding and decoding ASN.1 data structures. The provision of this three components allowed to measure the performance improvement that could be gained by using hardware instead of software. It turned out my encoding engine was extremely fast and questioned the idea of implementing a (rather complex) hardware cell. The hardware cell was never realized. TECHNOLOGIES ------------ [width="100%",frame="",grid="cols",cols="20%,80%"] |======================================================================= | Language | AWK, Bash, Unix Shells, C#, C/C++, Lisp/Scheme, Guile, Java, JavaScript, M4, PHP, Pascal, Perl, Prolog, Python, Ruby, Tcl/TK | Markup | XML, HTML, ASN.1, TeX, LaTeX | Mini Languages | SQL, Regular Expressions, XSLT, CSS | Operating Systems | Cygwin, Unix (Digital, HP-UX, AIX, SGI, SunOS, Solaris), MKS, Windows (98, 2ooo, NT, XP), MS-DOS, MSYS, MacOS X, Novell Netware, GNU/Linux (RedHat, Suse, Ubuntu, Mandrake, Montavista) | Security | Kerberos, PKI, SSL/TLS | Databases | IBM DB2, Informix, JDBC, MS Access, MySQL, ODBC,  ObjectStore, Oracle | Communication | ASN.1, BER, CER, CIFS, CORBA, CUPS, DER, DNS, GIOP, HTTP, HTTPS, ICMP, IIOP, IMAP, JAAC, JCA, JNDI, Kerberos, LDAP, NAT, NFS, NIS, NTP, OSI, PEM, PER, POP3, RMI, RPC, S/MIME, SMTP, TCP/IP, UDP, X.509, X.68x, X.69x.,GDMO, XDR | Web development | CGI, J2EE, REST, Ajax, jQuery | J2EE | Servlets, JSP, EJB, RMI, JINI, JNDI, JMS, Web Services | Methods | Extreme Programming, OOP |======================================================================= TOOLS ----- [width="100%",frame="",grid="cols",cols="20%,80%"] |======================================================================= | IDEs | Eclipse, Visual Studio, JBuilder, Sniff, Sun Workshop, Symantec, Visual Age | Editors | Emacs, vi | Versionman | CVS, Subversion, git, mercury, RCS, Perforce, GNU arch | Compiler Tools | Antlr, lex, flex, yacc, bison, JavaCC | Webserver | Apache, Tomcat, lighttpd, winstone | Appl. Server | Borland Application Server | Build-tools | make, nmake, Ant, Maven, autoconf | Build-server | CruiseControl, Hudson, Anthill | License Systems | FlexLM | CORBA | Visibroker, mod_iiop, Mico, OmniORB, Orbix, TAO | ASN.1 | ASN2CXX, ISODE, snacc, OSS | Debugging | purify, gdb, dbx, nm, wireshark | Performance | silkperformer | Test | expect, junit | Security | Kerberos,OpenSSL, mod_ssl | Connectivity | Samba, NFS, automounter, Humingbird Exceed, ssh | UML | Paradigm Plus | Graphics | Photoshop, GIMP, Inkscape, SVG | Email | Qmail, Sendmail | Installbuilder | InstallAnywhere, InstallShield, MSI Installer | Integration | Swig | CMS | Wordpress, Mediawiki | Typesetting | Tex/LaTeX, MS Word, OpenOffice |======================================================================= EDUCATION --------- [width="100%",frame="",grid="cols",cols="20%,80%"] |======================================================================= | 1987 -- 1994 | University Karlsruhe ; Graduate in Computer Science | 1984 -- 1987 | Grammar School (Technisches Gymnasium) Müllheim; Allgemeine Hochschulreife | 1981 -- 1984 | Bahnbetriebswerk Haltingen; Education as Metalworker | 1976 -- 1981 | Secondary School (Realschule) Kandern; Mittlere Reife |======================================================================= LANGUAGES --------- [width="100%",frame="",grid="cols",cols="20%,80%"] |======================================================================= | German | native language | *English* | *fluent* | Dutch | intermediate |======================================================================= COLOPHON -------- Source document written in ASCIIDOC markup, transformed into a DocBook XML representation and finally rendered into this and other representations using XSLT/XPath stylesheets and additional typesetting tools.