Today's The Hindu—not for the first time—had an extra front page devoted to an advertisement from IIPM, complete with gushing top-half copy masquerading as news reporting. Over the past year or so, Arindam Chaudhuri's snake-oil salesman grin has been a frequent visitor to the back page of The Hindu, and many an innocent exclamation mark has been sacrificed to extol the virtues of IIPM. I can't even begin to imagine the amount of money that must change hands for this kind of coverage.
I'm not sure if it's more depressing that IIPM has accumulated such vast quantities of money by selling snake-oil, or that The Hindu is happy to soak it up and print acres of whatever drivel is sent its way.
(For those who are wondering, IIPM is the Indian Institute of Planning and Management, an unaccredited business school that is in the habit of suing anyone who points out that their advertisements are full of lies.)
An application I've been working on sends random challenge tokens by SMS to confirm certain user actions. My client had an account with Way2SMS already, so I used their simple HTTP API to send out the tokens. Later, we discovered that messages to some networks were delayed by fifteen minutes or more, and we decided to find a backup provider. I relayed a friend's recommendation of Air2Web to my client, and they signed up for the starter package.
They got our account set up quickly, and I sent myself a message through their HTTP API (which, like Way2SMS, was just a URL which took the phone number and message as query parameters). The message never arrived, so I wrote to "aircare" to complain. They replied promptly that my number was on the Do-not-call registry, so they would not deliver messages to it.
I explained that we were sending transactional messages to people with whom we already had a financial relationship, and that we would never send any unsolicited or marketing messages. They replied the next day saying that they had made "some changes", and asked me to try again. I did, and it worked. Satisfied, I put aside the SMS code to work on more important things.
Some weeks passed.
When I got around to the SMS code again, I sent another message to my own number. It didn't arrive, so I wrote to Air2Web again. Once again, they replied promptly that my number was on the do-not-call registry. I pointed out that I had been through exactly the same rigmarole a few weeks earlier, when they had changed something to allow me to deliver messages. A week has passed since then, and I have sent two followup enquiries, but I have not received a response from Air2Web.
I can only assume their silence means that they don't want to do business with me, and are too unprofessional to say so. At least I know better now than to recommend them to anyone else.
I was discussing this with my friend Pooja yesterday, and it suddenly occurred to us that the simplest explanation for the behaviour was that they had just deleted my phone number from their local cache of the NDNC registry database. When they next reloaded the database (which they are supposed to do after every forty-five days or so), my number reappeared and deliveries to it were blocked again.
If that's true, they're much more shady than just refusing to answer inconvenient questions from customers. Alas, it's unlikely that I will find out the truth in this case, but I'm not planning to waste any more time with them, and I hope this post will be useful to other people who are considering them as a provider.
I've been using Spreadsheet::Read backed by Spreadsheet::ParseExcel and Spreadsheet::XLSX to process Excel spreadsheets, and the combination works reasonably well (despite various frustrating problems in retrieving dates).
Today, I wrote code with lots of diagnostics to parse a large spreadsheet I'd never seen before. The code ran properly for a while, and then complained of various inconsistencies in the data. After much digging, I realised that Spreadsheet::XLSX wasn't parsing columns beyond ZZ. LibreOffice showed me data that my Perl code wasn't seeing; but it, too, has an arbitrary 1024 column limit. I had to unzip the XLSX file and read the XML source to find the real number of columns: 1059.
Until today, I'd never imagined a spreadsheet that big either.
The fault lies with the following code in Spreadsheet/XLSX.pm, which assumes that the column name is two letters followed by a number:
foreach ($member_sheet -> contents =~ /(\<.*?\/?\>|.*?(?=\<))/g) {
if (/^\<c r=\"([A-Z])([A-Z]?)(\d+)\"/) {
$col = ord ($1) - 65;
if ($2) {
$col++;
$col *= 26;
$col += (ord ($2) - 65);
}
Fortunately, it's not hard to extend the code to handle longer names:
foreach ($member_sheet -> contents =~ /(\<.*?\/?\>|.*?(?=\<))/g) {
if (/^\<c r=\"([A-Z])([A-Z]*)(\d+)\"/) {
$col = ord ($1) - 65;
my $rest = $2;
while (my $l = substr ($rest, 0, 1, '')) {
$col++;
$col *= 26;
$col += (ord ($l) - 65);
}
I sent the patch to Dmitry Ovsyenko, author of Spreadsheet::XLSX, but received no response.
This morning, I got an email (and SMS) alert from Airtel:
Dear Airtel Customer, You have consumed 100% of your high speed data transfer limit of 10000 MB. Now you will be getting a revised speed till the end of this bill cycle (as per the bill plan subscribed by you) and the speed will be back to normal at the beginning of the new bill cycle. You are still on an unlimited plan and all your data transfer remains free.
Airtel was forced to institute a Fair Usage Policy for "unlimited" data transfer plans, because “A very small number of customers use an excessive amount of the network bandwidth, to the extent that it can impair the experience of others”. But “…needless to mention, the usage levels set are very generous such that most customers will not be affected”. And remember, they're only defining a "fair usage level", not a "limit".
I humbly apologise to everyone whose "experience" I unfairly impaired by downloading 10GB at 512Kbit/s in one month. The strain on the Airtel network must have been enormous.
But wait, there's more! The email goes on to say:
However, if you need a higher speed, you can visit www.airtel.in/sod and subscribe to speed on demand - a service from Airtel where you can increase your browsing speed by paying a nominal charge.
Oh good, I should have known a nominal charge could fix everything. I feel so… unlimited now.
(P.S. airtel.in/sod says "Unexpected error" when you try to sign up.)
Ramit's police complaint (made by way of some suitable boffin) resulted in the police going to the station the next day and arresting two people expanding their cellphone collection by the same means as before. They may not be the same people whom Ramit met, but the indications are that at least ten people are involved and—as we suspected—this is something that has been going on for a while.
I wonder if the earlier victims complained to the police. It's hard to believe that none of them did; so perhaps their complaints arrived too lown down the police hierarchy to prompt any serious action.
But I hope the cops find every one of the robbers now.
Ramit was robbed of his mobile phone by four armed men on two scooters with no license plates at 0730 this morning, while waiting outside the New Ashok Nagar Metro station for me to pick him up on our way to the Okhla Bird Sanctuary. When he handed over his phone, they immediately discarded the SIM (which he recovered), and left. Fortunately, Ramit was not hurt.
We drove to the Police Chowki nearby, but there were no policemen there. Some hours later, we returned to the Metro station and spoke to the CISF personnel in charge of security. They said they would have tried to help if we had reported the crime immediately, but that they were responsible for security only inside the station premises. The CISF superintendent told us to file a complaint at the Yamuna Bank police station, and also said there had been other thefts in the area recently, but the Delhi Police personnel deputed to patrol the outside of the station never turned up as scheduled.
I submitted a report of the incident as feedback on the Delhi Metro web site, and also called them up and spoke to a Ms. Rita Kumar at the DMRC to report the robbery. She promised to "forward" the information I gave her, for whatever that is worth, but again said that incidents outside the station were solely the problem of the Delhi Police.
Aside: the Metro station in question is (like many others) an elevated structure built around a platform. The road passes under it, and Ramit was waiting there on the sidewalk in front of a pillar with a "Station Entry" sign on it. While it may technically be outside the premises of the station, it seems somewhat irresponsible for the DMRC to wash its hands of security directly underneath the station, barely thirty metres from the entrance.
Despite his traumatic morning, Ramit (who says he has been mugged before in Nairobi) wanted to stick to our plan, and we had a nice bird-watching session at Okhla and Khadar. Notable sightings include the first Citrine Wagtail of the black-backed calcarata race this season, close-up views of Black-breasted Weavers, four Ferruginous Pochards, and a number of White-tailed Stonechats, Striated Babblers, and Graceful Prinias. I also relished the opportunity to study various species of grasses in detail.
Many years ago, I bought a Lexmark E323N laser printer (600dpi, 19ppm) because it was the cheapest printer I could find that came with Ethernet and PostScript support. I used it for a long time and was happy with it. When I moved away from home, I left it connected to my switch—along with a DSL modem and a wireless access point—so that my mother could use it.
Fast forward a few years. The DSL modem had died and been replaced. The switch had died and been replaced. The WAP died, and the Netgear WGR614 bought to replace it had four Ethernet ports, and could thus replace the switch as well. But it was a router, not a bridge, and so it wanted its internal and external networks numbered differently. The upshot was that the printer's IP address needed to change from 10.0.0.4 to 192.168.1.4.
No problem. I added a 10.0.0.0/8 address and host route to my netbook's eth2, which let me connect to the printer's administrative interface and change its address in the network settings menu. Alas, I forgot all about the separate "access control" menu, which was set to deny requests from outside 10.0.0.0/8. When the printer came back up, it would respond to ping from 192.168.1.x but discard TCP packets because of the access filter. If I used a 10.0.0.x address, it threw away all packets because they were from a source that did not match the printer's own IP address.
I ran "service ssh restart", and got the following error message:
restart: Rejected send message, 1 matched rules; type="method_call", sender=":1.75" (uid=1000 pid=3409 comm="restart) interface="com.ubuntu.Upstart0_6.Job" member="Restart" error name="(unset)" requested_reply=0 destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init"))
It turns out this is how Upstart (Ubuntu's init(8) replacement) says "you're not root".
I just received a Nigerian scam email sent through some "forward this article" feature on The Hindu web site. Here's the message, slightly edited:
Return-Path: <thehindu@vsnl.com> … Received: from web1.hinduonnet.com (web1new.hinduonnet.com [127.0.0.1]) by web1.hinduonnet.com (8.13.5/8.13.5) with ESMTP id o7SMbdhC026146; Sun, 29 Aug 2010 04:07:39 +0530 Received: (from apache@localhost) by web1.hinduonnet.com (8.13.5/8.13.5/Submit) id o7SMbRAc026122; Sun, 29 Aug 2010 04:07:27 +0530 Date: Sun, 29 Aug 2010 04:07:27 +0530 Message-Id: <201008282237.o7SMbRAc026122@web1.hinduonnet.com> From: thehindu@web1.hinduonnet.com Reply-To: virtososchulks@yahoo.com Subject: Article from The Hindu: Sent to you by Virtosos Chulks. From: The.Manager@web1.hinduonnet.com To: undisclosed-recipients:; International Commercial Bank Ghana First Light Branch Accra, Ghana. Sir, I got your contact during my search for a reliable, trust worthy and honest person to introduce this transfer project with. My name is Mr. Virtosos Chulks. I am the manager of the International Commercial Bank Ghana, First Light Branch Accra. I am a Ghanaian married with two kids. I am writing to solicit your assistance in the noble transfer of US$5.500.000.00. …
No, that's not a mistake—there really are two From: fields. But that's probably the least broken thing about a feature that allows people to send arbitrary email messages (with no reference to an article in The Hindu, by the way) through their site.
I wrote to thehindu@vsnl.com (which is also the contact address given on their web site) to report the problem. At least my mail did not bounce. I wonder if anyone will pay attention to it.
Our UPS is hooked up to three Exide Powersafe EP65-12 SLA (Sealed Lead Acid) batteries. Normally, that gives us about six hours of backup time for my desktop, monitor, and a few assorted peripherals. It's not often that the mains power is off for so long (less than half a dozen times a year, I'd guess), but that capacity has proven invaluable in the past. For the last few months, however, the UPS has lasted for half an hour at most, even when the batteries were fully charged. Using a multimeter, I found that the voltage across one of the batteries fell rapidly to 10.5V just before the UPS died, while the other two remained above 12V. Since the batteries were still under warranty, I contacted the vendor to ask about having them replaced (which I have had to do in the past)
Unlike last time, the vendor told me to register a complaint with Exide, which I did after some delay due to external circumstances. An engineer was dispatched to visit me a couple of days later, and after testing the system, he agreed with my diagnosis: one battery was bad. He wrote up a report and went on his way after telling me that the replacement should arrive in a few days. Unfortunately, what did arrive the next day was email from his supervisor, saying they couldn't replace the battery because the charging current was "too low". (The mail also said that I didn't have the original invoice for the purchase of the batteries, but that was just the engineer trying to cover his ass after forgetting to ask me for it.)