Nikolaos Achilleos Bozinis (Ph.D.)
Centre for Process Systems Engineering
Chemical Engineering Department
Imperial College, London SW7 2BY, UK
e-mail: N.Bozinis@ic.ac.uk
Formal qualifications
You will notice that I have not received any computing degree. I am self-taught in the subject, both as a hobby (since 1985) and as my main employment (since 1991).
- Ph.D in Process Engineering, Imperial College.
During a 4-year period, I have investigated application of optimization and statistical techniques to model complicated sets of experimental data.
- Diploma in Chemical Engineering.
5 year undergraduate course at the Aristotle University of Thessaloniki, Greece.
Software development interests
Although I've been trained as a Chemical Engineer, software development has always been my main interest. I have programmed nearly every kind of machine, from hand-held Casio calculators up to VAX mainframes, with what could be characterized as a great zeal and undiminished interest over the years.
32-bit Operating systems
My greater experience and knowledge is around Microsoft Windows. I have a good understanding of the low level processes that make the OS tick, and I am familiar with a significant portion of the underlying Application Programming Interface (API) and also system services available through COM interfaces.
More specifically, I have successfully worked with:
- Low-level kernel objects, including files, threads, processes, events, mutexes, semaphores, file mapping, etc.
- Multi-threaded applications, with proper inter-thread communication and sunchronization for accessing shared resources.
- Inter-process communication, including data transfer via the clipboard, drag-drop, shared memory files, etc.
- Shell namespace management. File types and associations, file sharing and security, plus general low-level file management.
- COM architecture. I have both used available COM objects and developed my own, with MFC and ATL. I am familiar with a large number of fundamental COM interfaces.
User interface elements
Although generally simpler to develop, the user interface is what decides whether an application will be successful or not. There's no point having a fast car if the seat is uncomfortable — nobody would ever use it. I always pay extreme attention ensuring a clean and functional user interface. For this target, a good grasp of the underlying window architecture is required.
- Windows and dialogs. I am familiar with "low" level details as window styles, children and parents, plus basic operations like moving/resizing, notifications etc.
- Window procedures. I understand the message exchange mechanism between the system and individual windows, and the role of a window procedure. I have worked with a large percentage of the available WM_xxx messages.
- Standard and common controls. I have worked with nearly every type of predefined control and I am aware of the capabilities and limitations of each one of them. I observe closely new features added to the common control library with every new release of Internet Explorer.
- Window subclassing. I understand how to override the default behaviour of system control windows, coercing it to fit into my own specifications, through either permanent or temporary subclassing.
Programming languages
I regard myself proficient in the following computer languages:
- C++ (and C) — my "native" language
- Microsoft Foundation Classes (MFC)
- Visual Basic, including VBA for Office, Developer Studio, etc.
I am familiar with other languages, but with a relatively lower level of working experience:
- Advanced Template Library (ATL)
- HTML and JavaScript for web development
- FORTRAN
- Assembly language
Finally, note that I have a limited experience with UNIX/LINUX, too
Other information
Computers are both my work and main hobby, so they absorb a significant amount of my energy. When I am not programming I will be either reading some computer book/article or scanning newsgroups for even more knowledge.
Still I manage to fit in a few other activities, so as to maintain some sort of fleeting balance. In receding order:
- Swimming. As my Greek ancestors wisely would assert "Sound mind in a sound body"
- Music. I enjoy a broad range of material, from jazz to heavy metal. There is a time and place for everything. Mostly serving as a background atmoshpere when I'm developing or reading.
- Motorcycling. I've lost the urge for speed after all those years, but it still is the best way to travel around London and for short excursions in the country side.
- More reading. When I'm not reading about computers and programming, I enjoy books on discovery, science and history. No fiction whatsoever!
- Cooking. There is an element of creativity required for preparing a great dish. Unfortunately, this is too dependent on the raw materials and other incontrollable factors like the human perception of "taste". So despite my initial fascination on the subject, it is steadily loosing its appeal.
At some point in the future, I would like to pursue a number of issues that were left half-finished in my Ph.D, like genetic optimization algorithms, fuzzy logic, neural networks, etc. Ideally it would be a joint project involving such cutting edge theories with numerical algorithms and computing.