Stuff I do
Stuff I do...
Last updated on 2 June 2012
Note: this page suffers from a lot of link rot!
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.
- The PostgreSQL master site
- GeneralBits is a collection of handy tips and tricks from the PostgreSQL mailing list
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++.
- Here's a good intro into shell scripting using bash
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.