Interview With Peter Naudus
What is your programming background?
When I worked for Advanced Switching Communications and Vinci Systems I automated the regression, manufacturing, functioning, and stress testing systems. To accomplish this I used TCL/TK with Expect to interact with the product line, configure test equipment, and store information. I also used PHP to produce a web-based interface where the system could be remotely monitored and controlled.
My courses in college mostly focused on C and C++. However, I also learned and used Java for a robotics / AI course and tutored students in Python. I have also programmed in assembly and created compilers in Lex/Yacc.
After I graduated from college I spent two years as a volunteer, training underprivileged teachers in China. During this time I started freelancing. My most recent job was porting a large website from Drupal to SilverStripe. I created an import/export tool in Python to migrate the Drupal database to SilverStripe. Then I wrote various plugins in PHP to meet the client’s needs.
I have also used various other programming and scripting languages such as Bash and FORTRAN to lesser degrees.
What was the most challenging project you’ve worked on and why was it challenging?
The most challenging project I worked on was automating the regression, manufacturing, functioning, and stress testing systems at Vinci Systems. I was brought in as the first hire in the testing department and it was my responsibility to quickly create a fast, thorough and efficient testing system. Since our product line was extremely complicated and the builds changed daily, it was was very difficult to keep up with the changes and make sure my testing systems had 100% coverage. In addition, with several hundred testing scenarios, it was very challenging to keep a large system documented and organized.
As Vinci Systems began manufacturing these systems I was additionally tasked with this testing. I had to devise a way to verify if there were any manufacturing defects in a product before it was shipped out to customers. I verified the phone, data, and video capabilities, stored the results in a database, and finally printed out ID labels. Since this was a small start up, I had a very small budget and had very little resources to work with. Additionally, since the manufacturing plant was several hours away I had to create a way to remotely manage, monitor, debug and update multiple testing stations.
How long do you spend working on a problem before asking for help from another person?
I view people as a valuable resource, a resource that I try not to abuse. When working on a problem I attempt to solve it on my own, utilizing my resources until I feel that I have hit a point where further research is counter productive. I then make note of this and attempt to work on a different problem. This allows me to ask multiple questions when I seek assistance and minimize the number of interruptions.
What resources do you use to solve problems you run in to?
Other than people, I utilize a wide range of resources. There are many helpful Internet sites that I go to when I get stuck including the PHP documentation (the comments are also often helpful) and Stack Overflow. I also try to use documentation within the company produced by other developers.
How would you approach a task if you only knew 50% of the requirements?
Firstly, I would try to acquire the remainder of requirements, impressing the importance of the missing 50%. If this was not possible, I would cautiously proceeded. I would try to design a very open and flexible system anticipating additional requirements.
What experience have you had with automated testing or unit testing?
I have very solid experience creating test cases, unit testing and creating automated testing. At Vinci Systems I was brought in as the first hire in the testing department and it was my responsibility to quickly create an fast, thorough and efficient testing system. I created several hundred test cases and created software to automate the majority of those tests.
What types of PHP and Python frameworks do you have experience with? Do you have any favorites and least favorites? Why?
I have experience with CodeIgniter, Sapphire, and Django with limited experience with CakePHP. However, as my freelancing work demonstrates, I am able to quickly learn other frameworks. For small projects that need to get quickly off the ground, I would use CodeIgniter as it is very easy to use and very lightweight. For an enterprise level solution I would use Sapphire or Django as they are very well thought out, stable, object-oriented, and has good logging and error handling capabilities.
What development tools do you commonly use?
For development, I often just use VIM with syntax highlighting. However, I have used a wide range of IDEs. If working on a complicated system with multiple people I will use subversion or another version control system. I also like to use debugging tools. If I am using C/C++ I use GDB, if I am using PHP or Python I try to utilize the debugging and logging capabilities available to me.
Do you commonly use or require third party library/frameworks, or do you start development ‘from scratch’?
My use of third party libraries/frameworks largely depends on what I am developing and who I am developing for. If I am doing something difficult and tedious like image processing, I find it helpful to use libraries. However, sometimes it is easier to start from scratch than to attempt to use a complicated and poorly documented library. Likewise, if I am writing a small script, using a framework would be overkill. However, when working with multiple people, frameworks are very helpful as they provide standard ways to interact and build modules,
Do you have experience branding applications for clients by separating templates from an application’s code?
Whenever I program, I always strive to separate business logic from display logic. Often I use the MVC (model-view-controller) architecture when designing systems. This results in code that is both cleaner and easier to maintain.
What are your views on CSS and the different versions? What cross-platform problems have you found or had to overcome?
I have used CSS2 extensively but have little experience with CSS3. Since CSS3 has had a very slow adoption I feel it is best to keep using CSS2 as it is the most widely used version of CSS. In my experience Firefox, Opera, and Safari render fairly closely. However, the various versions of IE often render things (sometime vastly) differently. However with conditional CSS, making patches for IE is fairly trivial, although still annoying.
What distributions of Linux do you have experience with? What environment have you utilized each (example server or desktop)?
I have used the following distributions (listed in no particular order)
- Ubuntu/Kubungu/Xubuntu ( desktop / server )
- Red Hat/ Fedora (desktop / server)
- SUSE/Open SUSE (desktop)
- Debian (desktop)
- Mandriva (desktop)
- Linux Mint (desktop)
- PCLinuxOX (desktop)
- Gentoo (desktop)
- CentOS (desktop / server)
- FreeBSD (desktop)
- PC-BSD (desktop)
- Arch Linux (desktop / server)
- Puppy Linux (desktop)
- MEPIS (desktop)
- Zenwalk (desktop)
- VectorLinux (desktop)
- Knoppix (desktop)
- Dream Linux (desktop)
- Slax (desktop)
- Frugalware Linux (desktop)
- SAM Linux (desktop)
Have you worked in team environments? If so, what were your roles?
My professional experience has almost always been in team environments. When I started at Vinci Systems I was responsible for setting up the testing department. As the company matured, a senior engineer was brought on, who I worked under and an additional tester was hired who I trained and was in charge of.
During my time in China as an English teacher, I was responsible for training the new incoming American teachers and personally performed a large amount of this training. In addition to teaching my own class, I was also a dedicated resource and assisted the American teachers in developing lessons, grading, and student management. I worked with both the American teachers and the Chinese staff on a daily basis. I was able to learn and adapt to their work habits and customs. I was able to effectively communicate with them and we worked together to ensure smooth operations.
Do you have any experience using subversion? What are your experiences with “code promotion” (separate development/staging/testing/live environments)?
I have used multiple version control systems including CVS, subversion, and Bazaar. I have used, installed, and configured subversion.
Recently I migrated a large website from one CMS to another. I had three different environments to ensure stability, flexibility and quick delivery. My laptop stored the unstable/development code. As portions of the site became stable they were migrated on my web server for the client to review. Finally, once the site was completed and the client was satisfied, it was launched on their live server.
Have you ever had to work with a project that somebody else started? If so, what did you do with the code?
When I was working at DISA I was given some antiquated FORTRAN code to update and maintain. As my boss wanted to keep the tool in FORTRAN I first refactored the code to be easier to configure and maintain and then added the new functionality. I also created documentation to help those updating the tool in the future.
What kind of experiences do you have with relational databases? Have you used, installed, upgraded, and/or administered a database?
Although I am most comfortable with the MySQL database, I have also used Access, Oracle and MSSQL. When I worked at the Defense Information Systems Agency (DISA) I installed, upgraded, administered, and secured LAMP (Linux Apache Mysql PHP) systems.

