|P is for Practical|
What to do when a module is no longer being maintainedby BlueLines (Hermit)
|on Feb 10, 2001 at 05:00 UTC||Need Help??|
BlueLines has asked for the wisdom of the Perl Monks concerning the following question:
This is going to be long, so i apologize in advance for anyone who's bored by this. If you just want the question, skip to the end.
I work at a company that does 80% of it's coding in perl. I feel blessed because i know a lot of people who would kill for a programming job not involving VB or java. So the point of this is the fact that we're encouraged to do everything in perl if it's feasable. We are also encouraged to use CPAN whenever possible, since time is money, and with the way the economy is right now, no startup can afford to pay people to reinvent the wheel. My copmany makes transparent / explicit proxying software. The technology is super cool. When we do transparent proxying , we usually use a layer 4 switch to route all traffic destined to port 80 to our proxy, which handles everything from there. Our proxy usually listens on a different port than 80 though, so somehow the traffic must be forwared from one port to another. Originally (before I got there), this was done with squid. But squid is slow and big and ugly. So i proposed the use of ipchains instead (all of our machines run linux). I set up a proof of concept box to show that ipchains could handle 10x more connections than squid while using 1/10th of the system resources that squid would have. This is a good thing. Then it fell upon me to automate this process. Originally i wrote a module to grab configuration info from a config file, and construct the appropriate command line stuff for ipchains. Most importantly, I had this rule:
which redirects all traffic destined to port 80 to port 3000 instead. This made transparent proxying work. Unfortunately , the code to do this was pretty dirty. I searched CPAN and found IPChains.pm, which gave OO methods to accomplish the same thing, and used SWIG to directly make the C calls, rather than running a shell. This was definitely cooler, so I started rewriting my module to use this interface instead.