My Skillset

I have covered a wide range of skills in Linux system administration and web development using open source software since 1999. I also have a BTEC HNC in Commercial Data Processing gained in 1990. Here is a list of some of the topics I have covered since 1999.

Web Server Design

I have been designing, building and upgrading my own web servers in my spare time since late 2000. This site used to live on a server I built, administer and maintain. At the time it was running on SuSE Linux - then Fedora Core. I have now moved all of my websites to cloud hosting, which enables me to take my server offline without the live websites going down.

The server I built and run at home is now used for development and testing purposes and is currently running Centos 5.9 .

Linux Administration

I first started to use Linux in October 1998 with SuSE 5.2 cover CD-ROM from PC Plus magazine. SuSE Linux 5.2 review

"UK and European Linux fans have a reason to rejoice this month, with the release on the PC Plus Magazine's October 1998 cover CD-ROM of a complete distribution of SuSE Linux 5.2, complete with GIMP 1.0, KDE 1.0 and much much more on a bootable CD-ROM."

My preferred Linux system at the moment is Centos which is built from the freely available source code for Red Hat Enterprise Linux.

Apache Web Server

Confident with installing Apache from source code. This includes configuring the source code and compiling in required modules. I administer Apache on my development and testing server running Centos 5.9 at home.

MySQL Database Server

This covers quite a wide area, as follows:

OOP - Object Oriented Programming

Unlike procedural programming that uses function calls to seperate reusable code, OOP uses discrete 'objects' that contain the data and the methods to process that data. The data inside each object is only accessed externally via the object's interface.

An object's interface is the collection of methods that can be called from outside the object. It is bad practice to manipulate the object's data directly by bypassing the interface. This is one of the main principles of OOP - code to an objects interface, not the code implemented behind the interface.

That way, if the implementation of the code inside the object is updated, the object still provides a consistent interface to the outside world - so external code that uses the object does not have to be changed.

This is how Polymorphism is implemented. By creating objects with the same interface but with different functionality inside, this allows one to modify running code dynamically by switching the active object for a particular function, such as reading or writing various file formats.

I found this book very helpful in explaining the terms used in Object Oriented Programming: OOP Demystified by James Keogh & Mario Giannini.

Lyx Document Processor

Lyx is a program used to produce nice DVI and PDF documents.

"LyX is a document processor that encourages an approach to writing based on the structure of your documents (WYSIWYM) and not simply their appearance (WYSIWYG). LyX combines the power and flexibility of TeX/LaTeX with the ease of use of a graphical interface."

On screen, LyX looks like any word processor; its printed output - or richly cross-referenced PDF, just as readily produced - looks like nothing else.

LyX Document Processor

Bash Shell Scripting

The shell is a command interpreter. More than just the insulating layer between the operating system kernel and the user, it's also a fairly powerful programming language. A shell program, called a script, is an easy-to-use tool for building applications by "gluing together" system calls, tools, utilities, and compiled binaries. Virtually the entire repertoire of UNIX commands, utilities, and tools is available for invocation by a shell script.

If that were not enough, internal shell commands, such as testing and loop constructs, lend additional power and flexibility to scripts. Shell scripts are especially well suited for administrative system tasks and other routine repetitive tasks not requiring the bells and whistles of a full-blown tightly structured programming language.

Advanced Bash-Scripting Guide - by Mendel Cooper

Bash Guide for Beginners

UML - Unified Modeling Language

UML is a standardized, general-purpose modeling language in the field of software engineering. The UML includes a set of graphic notation techniques to create visual models of object-oriented software-intensive systems.

UML combines techniques from data modeling, business modeling, object modeling, and component modeling. It can be used with all processes throughout the software development life cycle, and across different implementation technologies. UML offers a standard way to visualize a system's architectural blueprints.

Unified Modeling Language

Iconix Process - Agile without being extreme.

The ICONIX Process is a minimalist, streamlined approach that focuses on the area that lies in between use cases and code. It's emphasis is on what needs to happen at the point in the life cycle where you're starting out: you have a start on some use cases - and now you need to do good analysis and design.


About the ICONIX Process

PHING - PHP project build system

"PHing Is Not GNU make; it's a PHP project build system or build tool based on Apache Ant. You can do anything with it that you could do with a traditional build system like GNU make, and its use of simple XML build files and extensible PHP "task" classes make it an easy-to-use and highly flexible build framework."

PHING is designed for the automated builds of medium to large scale PHP software projects. For example a team developers might be working on their assigned PHP source code modules for a project, and then checking in their modifications regularly to a Version Control System. PHING could be set to run automatically every hour and do a complete project build of the whole system.

I use PHING as the build tool for my PHP5 modular website framework. You can see some PHING scripts here: Example PHING XML scripts

You can read more about the PHING build system here: PHING homepage

phpDocumentor 2 - Documentation Generator for PHP

phpDocumentor 2 is a tool to generate documentation from your PHP source code, and works with either procedural or OOP code. With this documentation you can provide more information regarding the functionality embedded within your PHP source code - and not only what is usable to them from your user interface. Documentation generated by phpDocumentor 2 does not aim to be a replacement for conventional user-guide documentation, but is rather supplemental reference documentation.

phpDocumentor 2 homepage

PHP 5 server-side scripting

PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. What distinguishes PHP from something like client-side JavaScript is that the code is executed on the server, generating HTML which is then sent to the client. The client would receive the results of running that script, but would not know what the underlying code was. You can even configure your web server to process all your HTML files with PHP, and then there's really no way that users can tell what you have up your sleeve.

PHP is mainly focused on server-side scripting, and can be embeded into web pages using the Apache PHP module, (or Fast CGI on closed-source web servers). You can do anything any other CGI program can do, such as collect form data, generate dynamic page content, or send and receive cookies. But PHP can do alot more than that too.

PHP scripts can also be run from the command line using the stand-alone PHP executable. With PHP there is not much that you cannot do on the server - if the OS supports it then PHP should be able to do that as well. I like to use PHP command-line scripts that call the bash command interpreter. That way I have all the ease and flexibility of programming scripts in PHP, plus the ability to use any OS command that can be run from the bash command-line shell. Please see my PHP backup scripts I posted on the Fedora forums for an example: Generic PHP CL backup script

What PHP can do

PHP currently runs on more than 200 MILLION web sites.

SQLite embedded database engine

"SQLite implements a self-contained, serverless, zero-configuration, transactional embedded SQL database engine. The code for SQLite is in the public domain and is thus free for use for any purpose, commercial or private. SQLite is currently found in more applications than we can count, including several high-profile projects."

Unlike most other SQL databases, SQLite does not have a separate server process. SQLite reads and writes directly to ordinary disk files. A complete SQL database with multiple tables, indices, triggers, and views, is contained in a single disk file. The database file format is cross-platform - you can freely copy a database between 32-bit and 64-bit systems or between big-endian and little-endian architectures. SQLite table columns are typeless - ie you can store multiple data types in each column.

Features Of SQLite.

HTML - Hypertext Markup Language

This is the basic language that web pages are built from.

More about HTML.

XHTML - Extensible HTML

XHTML is HTML reformulated as XML.

More about XHTML.

CSS - Cascading Style Sheets

CSS rules allow a website designer to set the visual style of page elements (the way an element 'looks'), and it's position on screen, for all elements of all pages in a website.

For each part of a web page, values such as background color, background image, border size, border style, border color, font style, font size, margin dimensions, padding size, positioning, tables and their elements, and text color, can all be set by using CSS rules in one style sheet. This makes altering the visual style or position of page elements really easy.

Any changes to a style sheet rule will be reflected for all elements that use that rule, across all pages of the website.

More about CSS.

Javascript client scripting

Javascript is a scripting language built into most modern web browsers. With Javascript you can check the data a user inputs into a form, and display a popup window to alert the user of any invalid input, before the form is submitted to the server.

You can also change the visual style properties of a web page's component parts in response to a user's interaction with the browser. This is often referred to as Dynamic HTML.

More about Javascript.


When a browser loads a document, the browser builds a representation of the document's structure in memory, called the DOM (Document Object Model). The browser then uses the DOM in computer memory to display the document in the browser window.

The browser can detect any alterations made to the structure of the DOM by Javascript, and immediately update the page in the browser window, with the new values of the DOM. This is how Dynamic HTML works.

More about the HTML DOM.


This not a technology, but a term refering to the use of HTML, CSS and Javascript. This is used to create 'dynamic' web sites, that make web pages appear more interactive to the user.

DHTML allows a website designer to change the content or presentation style of a web page, by using javascript to alter the DOM, in response to a user's interaction with the page. This can make the page appear more responsive and user friendly.

Any part of a page can be altered or removed, or hidden from view and made visible again.

The presentation style of any page element can be modified dynamically. For example, changing the border color of a form element into which a user has entered invalid data.

More about DHTML.

Firewall contruction with IPTables

Packet filtering (aka firewalling) is most commonly used as a first line of defense against attacks from machines outside your LAN. Packet filtering allows you to explicitly restrict or allow packets by machine, port, or machine and port. For instance, you can restrict all packets destined for port 80 (WWW) on all machines on your LAN, except for the machine that is designated as your web server.

Most modern routing devices have built-in filtering capabilities, and packet filtering has become a common method of security for machines connected to the internet. Although packet filtering is very flexible and powerful, by no means does it guarantee the security of your LAN, but it does go a long way toward protecting it.

More about Linux packet filtering using IPtables.

AJAX - Asynchronous JAvascript and Xml

Javascript has a built-in XMLHttpRequest object which can send data to, and request data from, a web server. This allows part of an xhtml page to send a request in the background to the web server that the original page came from.

When the browser receives the data requested from the server, The browser can then use DHTML to update the current page with the new data received from the server. This is usually alot quicker than reloading a complete new page from the server.

More about AJAX.

TMDA - Tagged Message Delivery Agent

TMDA is an open source software application designed to significantly reduce the amount of spam (Internet junk-mail) you receive.

The technical countermeasures used by TMDA to thwart spam include:

This combination was chosen based on the following assumptions about the current state of spam on the Internet:

To maintain economies of scale, bulk-mailing is generally:

More about TMDA.

RPM - Redhat Package Manager

The RPM Package Manager (RPM) is a powerful command line driven package management system capable of installing, uninstalling, verifying, querying, and updating computer software packages. Each software package consists of an archive of files along with information about the package like its version, a description, and the like.

RPM is a core component of many Linux distributions, such as Red Hat Enterprise Linux, the Fedora Project, SUSE Linux Enterprise, openSUSE, CentOS, Meego, Mageia and many others. It is also used on many other operating systems as well, and the RPM format is part of the Linux Standard Base.

I have rebuilt a nice process manager from Fedora 6 SRPM to run on Centos 5.6 . It is called qps and the source code files are here:

Fedora 6 qps-

Fedora public GPG used to sign qps-

My build of qps for Centos 5.6 .

My public GPG key used to sign packages I build.

Before you can rebuild or create your own RPM packages under Centos, you need to set up a dedicated user for this purpose, with their own build environment. This is to ensure the Linux system does not get trashed. This article on the Centos wiki covers this well:

Set Up an RPM Build Environment under CentOS.

Here is a comprehensive guide on using RPM for Linux package management, and how to build and create your own packages using RPM:

Maximum RPM - Taking the Red Hat Package Manager to the Limit

Anti Gravity Searle Effect DISC Inc John R. R. Searl Marcus Device
Computing CentOS/RHEL

powered by Centos Linux powered by apache2 powered by MySQL powered by PHP powered by ZEND
W3C Home Valid XHTML 1.0! Valid CSS 2 Valid Robots.txt