Stuff I do

Stuff I do...

Last updated on 2 June 2012

Right. So what do I really do? Currently I am heavily involved in GSM gateways in one form or another. I focus on using the SS7 protocol layers to extract information from the GSM network or interact with it directly (like sending and receiving SMS messages). I also work with the call-control layers, such as ISUP and MAP to make and receive calls with non-voice purposes.

Of course, I have to program in something. For that I use C++, more specifically GNU C++ (from the GNU compiler collection called GCC). These applications run as servers on Linux systems but can be cross-compiled on Sun's Solaris. It is unfortunate, but a lot of my code has to interface with straight C API's or use old C-style function calls since the OS does not yet implement wrapped C++ calls for these functions.

Front-end applications usually run on the desktop and has to be Windows applications. Here I use Delphi to write Windows applications. Delphi works well for rapid application development for visual applications. I am a staunch believer in using the right tool for the right job. I am not religiously bound to a particular operating system, although I do tend to favour unix systems for servers and back-ends while Windows does the trick for front-ends and user applications.

In the bigger picture, I also do a lot of integration work. Configuring the systems that I use for servers to designing high reliability LANs to deal with the capacity of multiple systems running many services. This includes configuring routers and switches as well as Layer 4 switching (such as the Alteon web switch).

Okay, so this is a new section. It needs a lot of work, but it is intended to be a handy reference to people who work in the same field as I do. Most of these links are links that I use, or have used in the past, to get my job done.

Programming in C++

Although I have been formally trained in the semantics of Object Orientation and programming in C++, I had to renew my C++ knowledge. I found the book Teach Yourself C++ in 21 days by Jesse Liberty a handy reference. Don't think you're going to sit down two hours a day with this book. You need 21 full days to properly work through the book.

The Complete Reference, C++, by Herb Schildt (published by Osborne) was in its third edition when I first bought it. The fourth is currently on the shelves. This is an invaluable manual and one I frequently reach for to check prototypes, functions of the standard C library and the likes. Recommended.


Bjarne Stroustrup, inventor of C++, has written a number of good books. Notably The C++ Programming Language. The book is in its third edition and provides excellent insight into the intricacies of C++ object orientation.

Here are a few good C++ links:

  • Bjarne Stroustrup's C++ page (the inventor of C++)
  • Excellent C++ tutorial
  • Another good site to learn about C/C++ programming
  • A super C++ reference site, with code examples and tutorials

    Thread programming in C/C++

    Threads in C++ is an invaluable way to utilise multiple processors and also optimise code that results in blocking a program (like socket programming). Here are a few links that explain how to use pthreads (the POSIX thread library). Note that Windows does not support the POSIX threads library.

  • Excellent introduction to pthreads from IBM developer works
  • Posix threads Part 2 from IBM developer works
  • Posix threads Part 3 from IBM developer works
  • A thread tutorial from YoLinux with lots of examples
  • A quick pthreads tutorial
  • Programming with Posix Threads.
  • Socket Programming

    So now that you've read up on threads, you can get started on some socket programming on the Linux platform. Here are some hints:

  • Beej's guide to network programming. Also available as a PDF file. This is an excellent guide, stuffed with tips, tricks and a very well selected FAQ.
  • Rob Tougher's Linux Socket Programming in C++
  • A basic overview of the BSD socket model, also used by Linux
  • Other technical stuff under Linux

  • The mini Port I/O programming HOW-TO
  • Build a simple A/D Converter using Linux
  • Excellent reference on the IBM Printer port. Contains a mountain of technical info.
  • The Little Unix Programmers Group tutorialsi (beginner/intermediate C++, Xlib, sockets, signals)
  • Networking Stuff

    It is no secret that I'm a big fan of Cisco networking equipment. Their IOS and command-line implementation is excellent and generally Cisco equipment is really solid and reliable (except for those products implemented on Windows).

  • Great tutorial for setting up a Linux VPN server to an Amazon Linux instance using OpenVPN
  • Ever have problems with collisions on your network?
  • Configuring dialup on your favorite cisco router
  • Pictures of all the cisco cables you'll ever need
  • How to make a cisco console cable
  • How to recover your PIX password
  • Lots more Cisco documentation like Cisco's IOS Essentials
  • Linux

    Useful Linux links for more advanced users:
  • Anatomy of the Linux boot process
  • Advanced Filesystem implementor's guide
  • Using Gnuplot to graphically display all your data. Be sure to visit the Gnuplot home page for lots more information.
  • The Linux Loadable Kernel Module HOWTO

    Slackware Linux

    My distribution of choice is Slackware. It's a distro that teaches you Linux and does not rely on vendor-specific additions like RedHat, SuSE and Ubuntu. However, I am equally comfortable in the latter distro's as well.
  • How to properly configure your Slackware desktop
  • Thousands of Slackware packages at Linuxpackages.net
  • Databases

    New section I have been working with SQL Servers for a long time. Mostly Microsoft's SQL Server, but recently I have warmed to PostgreSQL, an Open Source initiative. This database (RDBMS) performs exceptionally well in production environments and with the right amount of tweaking can deliver similar performance to that of MS SQL Server.

    bash, awk and perl

    I've been using bash since it first came out and it is my favorite shell. What I cannot do in bash (shell scripting), I do in awk (like a "super grep"). What I cannot do in awk, I do in perl, and that which cannot be done in perl, I do in either C or C++.

    Electronics

    I dabble in electronic circuitry, but I do not venture too deep into river that is electronic circuit design. I can help myself with simple circuits and have built simple interfaces with which I can control external devices from my PC using buffers, transistors and relays. I have also used the ADC and DAC chips to build digital-to-analogue and analogue-to-digital converters. I have used these devices to digitise voice and music.

    Accurate Time Keeping

    Timing (or time synchronisation) plays an important role in what I do. I am talking about keeping your PC synch'd to the correct time. There are those that choose to believe their system is okay with no external time reference, but sooner or later they find out that they cannot do without it. Time synchronisation is very important in distributed systems. Imagine if two database machines are out of synch and are logging data from many different locations. Trying to merge the two data-sets afterward would be virtually impossible.

    Synchronising your PC's and servers to the same time source can spare you from many a headache. From security systems (that log intrusions) to distributed computing nodes - They all need to be synchronised.

    So what am I doing about it? I build and maintain a few time-servers in South Africa. I host the ZA time pages, and I have one server that is available to the general public to use. People should just start using them! Windows 2000, Linux, BSD, Solaris, HP-UX, you name it. They all have the ability to synchronise their time with a central time-server.


    E-mail comments to