"Which language is best for xxx task" I am often asked. And I'll listen to the questioner's description of his application, his background, and the sort of support he'll have at his place of coding before coming up with a suggestion. Never would I suggest he learn all three.
And yet, today, I found myself with a little task to do - it took me no more that a few minutes - and I used all three languages without even thinking about it.
The task. A 900 Mbyte web log file - recording all the traffic from the last year at
our First Great Western Customer Forum and a requirement to get some information out of it about the geographic spread of the visitors.
1. A little bit of PERL (the Practical Extraction and Reporting Language) to pull all the different IP addresses that have visited the site out of the file.
#!/usr/bin/perl -na
$counter{$F[0]}++;
END {
@hl = sort keys %counter;
print $#hl+1," unique hosts\n";
foreach $ak(@hl) {
print "$ak $counter{$ak}\n";
}}
2. A PHP script - as we have the PHP / MaxMind routines easily accessible - to add the country of origin for each visitor to the data (that's right - PHP running from the command line!)
<?php
include("../../include/stdphp.v8");
print "never mind!\n";
foreach (file("uniquehosts") as $line) {
$lns = explode(" ",$line);
$coco = getcountry($lns[0]);
if (ereg("...",$coco[id])) {
print "$coco[id] $line"; } else {
print "XXX $line"; }
}
?>
3. Another piece of Perl to count the number of visiting IP addresses from each country
while (<DATA>) {
($c,$ip,$k) = split;
$byc{$c}++;
$byk{$c}+= $k;
}
foreach $co(sort {$byc{$b} <=> $byc{$a}} keys %byc) {
print "$byc{$co} $co\n";
}
__END__
XXX 116.122.81.28 32
XXX 116.199.208.54 7
XXX 116.214.24.78 34
etc
4. and finally Interactive Python in place of a calculator to do some final statistical arithmetic on the results.
OK - I'll admit it; I got caught miscoding once by the different format of
foreach in Perl and PHP, but otherwise it all worked pretty well. If you want to see the information extracted by this process, look
here. And, no, I'm not really proud of the beauty of my code; written to fulfil a quick one-off hacking job.
If you think I've not given Python a fair run above, you're right. But then I have been using it all day as a notepad as I do my final personal tax calculations, with all the additions keyed in so I can go back and check my sums as I may need to over the next few days. That's code and numbers that I won't be sharing here, of course!
(written 2008-01-20, updated 2009-01-28)
Associated topics are indexed under
G902 - Well House Consultants - Web site techniques, utility and visibility [3589] Promoting a single one of your domains on the search engines - (2012-01-22)
[3563] How big is a web page these days? Does the size of your pages matter? - (2011-12-26)
[3554] Learning more about our web site - and learning how to learn about yours - (2011-12-17)
[3532] Sharing the user experience - designing a form with the customer in mind - (2011-11-29)
[3491] Who is knocking at your web site door? Are you well set up to deal with allcomers? - (2011-10-21)
[3426] Automed web site testing scripted in Ruby using watir-webdriver - (2011-09-09)
[3367] Google +1 - what is it? - (2011-07-22)
[3197] Finding and diverting image requests from rogue domains - (2011-03-08)
[3149] Looking back at www.wellho.net - (2011-01-28)
[3087] Making the most of critical emails - reading behind the scene - (2010-12-16)
[3022] Retaining web site visitors - reducing the one page wonders - (2010-10-31)
[2981] How to set up short and meaningfull alternative URLs - (2010-10-02)
[2668] Is it worth it? - (2010-03-09)
[2569] How to run a successful online poll / petition / survey / consultation - (2010-01-10)
[2552] Web site traffic - real users, or just noise? - (2009-12-26)
[2532] Analysing Google arrivals by country of origin - (2009-12-10)
[2519] Status Page / breaks of service in early December - (2009-11-30)
[2410] Removal of technical resources from this site - (2009-09-19)
[2389] Writing with our customers words - (2009-09-01)
[2341] Koulutus, Open Source tietokone kielillä - (2009-08-09)
[2340] ldning, Open Source dator språk - (2009-08-09)
[2339] Opplæring, Open Source datamaskinen språk - (2009-08-09)
[2338] Uddannelse, Open Source computer sprog - (2009-08-09)
[2337] Opleiding, Open Source computertalen - (2009-08-09)
[2336] Formação, Open Source computador línguas - (2009-08-09)
[2335] Ausbildung, die Open-Source-Sprachen - (2009-08-09)
[2334] Formazione, Open Source computer lingue - (2009-08-09)
[2333] Formación, de los lenguajes de código abierto - (2009-08-09)
[2332] Formation, des langages Open Source - (2009-08-09)
[2225] How important is a front page ranking on a search engine? - (2009-06-09)
[2065] Static mirroring through HTTrack, wget and others - (2009-03-03)
[2056] Web Site Loading - experiences and some solutions shared - (2009-02-26)
[1982] Cooking bodies and URLs - (2009-01-08)
[1970] Plagarism - who is copying my pages? - (2009-01-02)
[1961] Making our things easier to find - (2008-12-26)
[1955] How to avoid duplicating web page maintainance - (2008-12-20)
[1888] Find the link - (2008-11-16)
[1856] A few of my favourite things - (2008-10-26)
[1833] Web Bloopers - good form design - avoiding pitfalls - (2008-10-11)
[1797] I have been working hard but I do not expect you noticed - (2008-09-14)
[1793] Which country does a search engine think you are located in? - (2008-09-11)
[1756] Ever had One of THOSE mornings? - (2008-08-16)
[1747] Who is watching you? - (2008-08-10)
[1711] Rapid growth leads to server move - (2008-07-17)
[1653] How do Google Ads work? - (2008-05-25)
[1634] Kiss and Book - (2008-05-07)
[1630] To provide external links, or not? - (2008-05-04)
[1610] PHP course dot co, dot uk - (2008-04-13)
[1554] Online hotel reservations - Melksham, Wiltshire (near Bath) - (2008-02-24)
[1541] Colour, Composition or Content - (2008-02-16)
[1534] Where in the world / country is my visitor from? - (2008-02-07)
[1506] Ongoing Image Copyright Issues, PHP and MySQL solutions - (2008-01-14)
[1505] Script to present commonly used images - PHP - (2008-01-13)
[1494] A time to update pictures - (2008-01-03)
[1437] Above the fold with First Great Western - (2007-11-19)
[1297] Stuffing content into a web page - easy maintainance - (2007-08-09)
[1237] What proportion of our web traffic is robots? - (2007-06-19)
[1212] What brought YOU to our web site? - (2007-06-01)
[1207] Simple but effective use of mod_rewrite (Apache httpd) - (2007-05-27)
[1198] From Web to Web 2 - (2007-05-21)
[1186] Two new pages / sites - (2007-05-14)
[1184] Finding resources - some pointers - (2007-05-13)
[1177] Sorting out for a site map - (2007-05-05)
[1104] Drawing dynamic graphs in PHP - (2007-03-09)
[1055] Above the fold - (2007-01-28)
[1029] Our search engine placement is dropping. - (2007-01-11)
[1015] Search engine placement - long term strategy and success - (2006-12-30)
[994] Training on Cascading Style Sheets - (2006-12-17)
[976] Santa at the station - (2006-12-09)
[916] Driving customers away - (2006-11-07)
[893] Visibility - (2006-10-14)
[800] Effective web campaign? - (2006-07-12)
[767] Finding the language preference of a web site visitor - (2006-06-18)
[757] Horse and Python training - (2006-06-12)
[732] Where is a web site visitor browsing from - (2006-05-24)
[718] Protecting images from theft - (2006-05-12)
[681] Mirroring a dynamic site - (2006-04-12)
[658] Keeping the visitors happy and browsing - (2006-03-26)
[649] Denial of Service ''attack'' - (2006-03-17)
[533] Bigger Box Campaign - (2005-12-18)
[528] Getting favicon to work - avoiding common pitfalls - (2005-12-14)
[510] Dynamic Web presence - next generation web site - (2005-11-29)
[492] New Navigation Aid - Launch of My Wellho - (2005-11-11)
[414] Form Madness - (2005-08-14)
[376] What brings people to my web site? - (2005-07-13)
[369] CMS - the minefield of Choices - (2005-07-05)
[348] Graveyard pages - (2005-06-15)
[347] Frightening and from-friend viruses and spams - (2005-06-14)
[322] More maps - (2005-05-23)
[320] Ordnance Survey - using a 'Get a map' - (2005-05-22)
[314] What language is this written in? - (2005-05-17)
[311] Growth pains - (2005-05-14)
[288] Colour blindness for web developers - (2005-04-22)
[284] The Iconish language - (2005-04-19)
[278] Cover all the options - (2005-04-13)
[276] An apology to Mr Boneparte - (2005-04-11)
[274] Our most popular resources - (2005-04-10)
[268] Information request forms, cleaning up spam - (2005-04-05)
[261] Putting a form online - (2005-03-29)
[259] Responding to spam - (2005-03-27)
[222] Who are all these visitors? - (2005-02-20)
[202] Searching for numbers - (2005-02-04)
[197] Allow for peak traffic on your web site - (2005-02-01)
[182] Your personal Google ranking - (2005-01-19)
[179] The hunt for unique words - (2005-01-16)
[173] Data Mining - (2005-01-09)
[165] Implementing an effective site search engine - (2005-01-01)
[142] Colour for access - (2004-12-06)
[117] A case of case - (2004-11-14)
[109] URLs - a service and not a hurdle - (2004-11-04)
[98] No more 'Error 404' pages. Something better. - (2004-10-24)
[32] Web design platoon - (2004-08-29)
[23] Skills and responsibilities - (2004-08-22)
Q777 - Object Orientation and General technical topics - Technology Overviews [2971] Should the public sector compete with businesses? and other deep questions - (2010-09-26)
[2607] Answers on Ruby on Rails - (2010-01-30)
[1976] Where is this IP address, IPv4 and IPv6 - (2009-01-04)
Q904 - Object Orientation and General technical topics - Analysing a Programming Task [3461] From flowchart to program - code design for the newcomer - (2011-09-29)
[3366] Specification, Design, Implementation, Testing and Documentation - stages of a (Java) programming project - (2011-07-21)
[3329] Perl from basics - (2011-06-20)
[2834] Teaching examples in Perl - third and final part - (2010-06-27)
[2715] Uploading an image, document or pdf via a browser (php) - (2010-04-10)
[2327] Planning! - (2009-08-08)
[1853] Well structured coding in Perl - (2008-10-24)
[1850] Daisy the Cow and a Pint of Ginger Beer - (2008-10-21)
[1607] Learning to program in Perl - (2008-04-11)
[1345] Perl and Shell coding standards / costs of an IT project - (2007-09-11)
[747] The Fag Packet Design Methodology - (2006-06-06)
Some other Articles
Python - formatting objectsPictures you can use - for free - from our libraryKeeping staff up to date on hotel room statusAutovivification - the magic appearance of variables in PerlPerl, PHP or Python? No - Perl AND PHP AND Python!Summer Ball at Bowood - Saturday 12th July 2008Buses from Well House Manor, Melksham, to BathHandling Binary data (.gif file example) in PerlExtracting information from a file of recordsHow not to write Perl?