Table of Contents
Nuutti Kotivuori
Mariankatu 20 B 21
00170 HELSINKI, Finland
Phone: +358 40 7533633
Email: <naked@iki.fi>
I have been programming in software projects for almost a decade. During that time I written small tools and co-operated in large projects with a large number of programmers. I have produced and maintained code in a variety of languages and worked under numerous coding guidelines. I consider my strength to be in excellent adaptability to new programming environments and being able to do coherent, incremental improvements to existing code bases. I usually pick up new skills and begin to utilize them earlier than others.
I always thrive to do not only working, but also correct, optimal and elegant code. I concentrate on the important bits and pieces that make up the core of the program and make them rigid; the supporting code I consider fluid and changing, where ease of development is paramount. I am better suited to developing the important parts in a software and designing software and architecture than producing large volumes of end user code. I am also of the school of thought that languages are irrelevant and any decent programmer should be able to learn any new language in a couple weeks.
My programming experience includes a wide range of different languages. I program fluently atleast in C, C++, Java, Python, Perl, OCaml, Lisp, sh, Pike, and LPC. My C and C++ knowledge includes detailed knowledge and understanding of the ISO standards, including STL and templates. Python has been my main tool in recent years, but no programming language has been left untouched for too long. My Java experience is mainly in server programming and good expertise of existing facilities provided by the Java class libraries. I have done only minimal programming of user interfaces in Java. I also have good knowledge of integrating Jython with Java. Perl is something that seems to pop up in one form or another in everything I do, and I have yet to hold a position where no Perl coding would have been necessary.
Designing software has always been an important part of programming for me. In every company I have worked at, I have either been a part of the architecture team, or closely involved with its actions. In those duties there has been at least server architecture design, user interface design and network protocol design. I consider documenting external interfaces and protocols well essential to professional software development. On a smaller scale, for non-trivial changes, making an implementation plan for the changes required before starting the work is a natural part of the development process.
I have had the responsibility of administering several flavors of UNIXes as well as a large number of services provided from those platforms. The platforms I can easily administer are Linux and Solaris for the moment; my experience with other platforms like HP/UX, Digital UNIX (or Compaq Tru64), and AIX is quite outdated and partly shallow. I have maintained installations of Oracle, IBM mqSeries, Netscape Directory Server, Apache, PostgreSQL, MySQL, and several others.
I am quite comfortable administering the development servers I personally use, and the facilities used by my group, as well as some services provided for external use, but I am not a system administrator or a technical support person at heart. Programming is what I do, administering systems is what I have to know well to excel in programming.
The last two years I have worked as a part of a small team building a suite of security products. My duties have been a combination of design and implementation.
I was instrumental in building an error-tolerant remote management framework for configuring and monitoring a suite of services, implemented in Python. This work included building a data model suitable for a distributed configuration set, managing robust configuration application with roll-back capabilities, configuring numerous common system services, building a secure communication architecture and writing Web-based user interfaces.
Another major task was building a complete virtualization platform on top of User Mode Linux. The work included making a custom installer for a custom Linux distribution, building a management daemon from scratch to robustly manage User Mode Linux instances, creating a complete set of virtual networking tools and a lot of Linux kernel work in fixing bugs and implementing new features. The work combined Python, C and other languages.
Other projects of note were creating an interoperating L2TP VPN gateway with Open Source tools and making a common build system capable of building complex projects and making custom Linux file-system images. Many of these projects made extensive use of the Twisted framework for Python and I gained a thorough understanding of its internals. I was also subcontracted to debug a Linux kernel crash and to build a large scale payment transaction server in Jython.
For over two years, I mostly spent my time coding C in different forms. Other programming languages used included C++, Perl and a large amount of shell scripting.
My main tasks were centered around a Linux kernel module based IPSEC and MobileIP implementation. I implemented the full MobileIP mobile node and home agent functionality, parts of the clustering code and maintained the IPSEC implementation. In the process I had to get intimately familiar with the related RFC's and other standards and was involved in the standardization of new elements. I also gained a large amount of practical knowledge on how different switches, routers and proxies behave in special circumstances.
Other tasks I performed were varied and numerous. To name a
few, I ported the gateway software for the Itanium processors,
which involved a fair amount of platform and compiler
debugging on the assembly level as well. I gained experience
with writing NDIS drivers on Windows and debugging them with
SoftICE. On Linux, kernel debugging was performed with both
kdb and kgdb.
For almost two years I worked with mobile services, PKI, security and SIM card management. I was involved in producing prototypes, client applications as well as server software, in both design and implementation. The programming languages used have ranged from Perl to C/C++ to Java. During this time I've had the opportunity to work with numerous different architectures and standards, such as: SIM, USIM, GPRS, X.509, PKI, LDAP, databases, message queues, application servers, cryptographic algorithms.
During my civil service I was involved with the CAVE virtual environment at Helsinki University of Technology. I participated in building a server to handle input from different types of sensors in the virtual environment. This work was done in C and Java.
While studying at Päivölä High School of Mathematics I started working for Smart Traffic Products at Nokia Mobile Phones. My tasks included user interface design and prototyping, embedded web browser implementation and SMS service building. C, C++, Perl, and Java were the main languages used during this time.
I spent the last two years of upper secondary school (1996-1998) at Päivölä High School of Mathematics. I was chosen there based on my achievements in the national mathematical contest for upper level comprehensive school. There I studied mathematics and computer science at university level. My courses included linear algebra, discrete mathematics, mathematical analysis, and C++ programming. I have been working full-time ever since, but I am also considering futhering my education.
I get along easily with different types of people and often gain the trust and respect of my fellow workers quite rapidly. I communicate fluently in Finnish and English, and have worked with people from many different nationalities. I am comfortable heading a small team of experts or working as a part of a team. I do not wish for any real management duties or responsibilites.
I spend a large amount of my free-time directly or indirectly on Open Source development projects, such as Subversion or Rockbox. I have contributed to a large number of projects by writing code, sending patches, helping in design and just participating in discussions.
I am an avid budō practitioner, currently training and teaching in the Kashima-Shinryū where I hold the rank of Shōden. Albeit ever so rarely, I still attend to Aikidō practises occasionally. Movies are another thing close to my heart and I go to a movie theatre often several times a week and regularily attend the different movie festivals in the Helsinki region.