DomainKeys and OpenSSL have Defeated Me

I have previously written about an error that valgrind reported in the STL when some string operations were performed by the DKIM library [1]. This turned out to be a bug, Jonathan Wakely filed GCC bug report #40518 [2] about it, Jonathan is one of many very skillful people who commented on that post.

deb http://www.coker.com.au lenny gcc

I’m still not sure whether that bug could actually harm my program, Nathan Myers strongly suggested that it would not impact the correct functionality of the program but mentioned a possible performance issue (which will hurt me as the target platform is 8 or 12 core systems). Jaymz Julian seems to believe that the STL code in question can lead to incorrect operation and suggested stlport as an alternative. As I’m not taking any chances I built GCC with a patch from Jonathan’s bug report for my development machines and then built libdkim with that GCC. I created the above APT repository for my patched GCC packages. I also included version 3.4.1 of Valgrind (back-ported from Debian/Unstable) in that repository.

Nathan Myers also wrote: “Any program that calls strtok() even once may be flagged as buggy regardless of any thread safety issues. Use of strtok() (or strtok_r()) is a marker not unlike gets() of ill thought out coding.” I agree, I wrote a program to find such code and have eliminated all such code where it is called from my program [3].

I think it’s unfortunate that I have to rebuild all of GCC for a simple STL patch. My blog post about the issue of the size and time required to rebuild those packages [4] received some interesting comments, probably the most immediately useful one was to use --disable-bootstrap to get a faster GCC build, that was from Jonathan Wakely. Joe Buck noted that the source is available in smaller packages upstream, this is interesting, but unless the Debian developers package it in the same way I will have to work with the large Debian source packages.

I have filed many bug reports against the OpenSSL packages in Debian based on the errors reported by Valgrind [5]. I didn’t report all the issues related to error handling as there were too many. Now my program is often crashing when DomainKeys code is calling those error functions, so one of the many Valgrind/Helgrind issues I didn’t report may be the cause of my problems. But I can’t report too many bugs at once, I need to give people time to work on the current bug list first.

Another problem I have is that sometimes the libdkim code will trigger a libc assertion on malloc() or free() if DomainKeys code has been previously called. So it seems that the DomainKeys code (or maybe the OpenSSL code it calls) is corrupting the heap.

So I have given up on the idea of getting DomainKeys code working in a threaded environment. Whenever I need to validate a DomainKeys message my program will now fork a child process to do that. If it corrupts the heap while doing so it’s no big deal as the child process calls exit(0) after it has returned the result over a pipe. This causes a performance loss, but it appears that it’s less than 3 times slower which isn’t too bad. From a programming perspective this was fairly easy to implement because a thread of the main program prepares all the data and then the child process can operate on it – it would be a lot harder to implement such things on an OS which doesn’t have fork().

DomainKeys has been obsoleted by DKIM for some time, so all new deployments of signed email should be based on DKIM and systems that currently use DomainKeys should be migrating soon. So the performance loss on what is essentially a legacy feature shouldn’t impact the utility of my program.

I am considering uploading my libdomainkeys package to Debian. I’m not sure how useful it would be as DomainKeys is hopefully going away. But as I’ve done a lot of work on it already I’m happy to share if people are interested.

Thanks again for all the people who wrote great comments on my posts.

10

Microsoft Open Source Information Evening

I have just attended a Microsoft Open Source Information Evening. It was in some ways one of the stranger things that I have experienced in my computer career.

Firstly there was the location, it was in a function room in the CBD, it was convenient for public transport and had good service but seemed likely to be quite expensive. A MS employee said that they believed that some people wouldn’t want to enter an MS office – I can’t imagine why they think that they could convince people who refuse to enter the MS office of anything if they got them to attend. As there were only about 6 people who weren’t from MS it seems likely that they paid something in excess of $200 per head for each non-MS delegate (I can’t imagine two function rooms, two dedicated hotel employees manning the bar, and a supply of food for a larger audience costing less than $1200).

If they had spent $100 per head for us all to have dinner at a good restaurant then I think that the result would have been better. They might want to consider running targeted meetings in future with a small number of people personally invited to dinner at a good restaurant. That said, the dinner of duck canapes and asian-style chicken noodles that they provided was pretty good.

I suggested that they should find other ways of promoting such events as the audience was obviously smaller than they desired. One suggestion that I made was that they create a blog about what MS in Australia is doing in relation to Linux and to offer the RSS feed URL to the people who run Planet Linux Australia. They were reluctant to accept that idea and stated that they don’t want to be seen to be forcing their presence where they are not wanted. That is a good approach (and a contrast to some activities of MS in the past). But I believe that it is misguided in terms of RSS feeds. When you create a blog you make the RSS feed available and then the people who run syndication services have the option of using it. The Linux community is on the side of open discussion, I don’t think that we have anything to fear from hearing what MS people have to say. While my opinion of MS has improved this evening, I still have no interest in using any of their software. Linux just works really well and satisfies all of my needs.

There were a bunch of smart MS people there, they seemed to really care about their work and want to improve things. Their pitch was about how Open Source software works on Windows, they showed demos of the installation process for a variety of PHP programs and showed Python code being used in a MS web environment. Most of the presentation time involved technologies developed outside of MS, while there was obviously a lot of MS code involved in getting Python, Ruby, PHP, etc working well the focus was mostly on the free software. They also mentioned some of their work in opening APIs so that free software programs can access Exchange servers (among other things). I didn’t pay a great deal of attention to the technology as I’m never going to use it. I was more interested in their approach which was positive and respectful and the general trend of what they are doing.

It seems that there is an increasing number of people within MS who realise that free software is not going away and that their customers demand that things work together.

They also didn’t display any of the arrogance for which MS is known. When one of the delegates predicted that MS would take a fall the way IBM did there was no argument about that possibility, instead there was a discussion about how MS software can be used with software from other sources to meet the current and future needs of customers.

The discussion of software patents was generally not very productive, I got the impression that they were not permitted to give anything that I would have considered to be a good answer to any of the questions. They did show examples of software that they have released with RAND terms for patents and other situations in which there would be no patent liabilities. But it seems that MS as a whole has no interest in getting any of the patent problems fixed. I can only hope that IBM, NEC, or one of the other big patent companies will give MS a demonstration of why software patents are bad.

Finally I was given a couple of 8GB USB sticks and a copy of MS Expression Studio 2. If anyone wants the unopened copy of Expression Studio they can make me an offer by email.

5

Unreasonably Large Source Packages

For the past few hours I’ve been going a build of the GCC packages on a dual-core Opteron system with 2.5G of RAM and a pair of reasonably fast SATA disks in a RAID-1 array. The machine is reasonably powerful so presumably such a build would take a significantly larger amount of time on a laptop or an older machine – my primary development machine is an old laptop and is thus unsuitable for such things.

My aim is to do a build with the patch for GCC bug 40518 [1] – which is a small patch to the STL.

Presumably the people who are seriously involved in GCC development don’t do this, they would be doing a build of a small sub-set that matches the code that they are working on. But as someone who is not involved in the project such an approach doesn’t seem viable, by using the Debian build tools to rebuild all packages from the source package I can reliably get a good build.

It would be convenient if these large source packages could be split into smaller packages. It shouldn’t be necessary to compile the C compiler (presumably with the full double-compile process), as well as the C++, Objective C, and Fortran compilers when I only want to compile the STL (libstdc++). It also shouldn’t be necessary for me to hack around a build system when all I want to do is to apply and test a single patch.

It seems to me that the current situation discourages contributions. If I can build a package in a reasonable amount of time on my laptop (Pentium-M 1.7GHz with 1.5G of RAM) then I can work on it at any time and in any place. If it requires hours of build time on my biggest machine then I can only work on it when at home and only when I have hours to spare (or if I have enough of a need to come back to it the next day).

So if there are two bugs that have equal importance to me and one of them happens to be in part of the GCC family then the probability that I will work on the GCC bug is close to zero.

I realise that packaging GCC etc is really hard work. But it seems that making it easier for more people to contribute would alleviate the burden slightly.

20

Valgrind/Helgrind and STL string

I am trying to track down a thread-safety problem in one of my programs. Valgrind when run as “valgrind –tool=helgrind ./thread-test” claims that there is a problem with the following program (the Valgrind errors are at the end of the post). The SGI documents state [1]: “The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe, and simultaneous read accesses to to shared containers are safe. If multiple threads access a single container, and at least one thread may potentially write, then the user is responsible for ensuring mutual exclusion between the threads during the container accesses. “.

My interpretation of the SGI document is that different STL strings can be manipulated independently. When I have two threads running I have two stacks, so strings that are allocated on the stack will be “distinct containers“. So this looks like a bug in the STL or a bug in Valgrind. I am hesitant to file a bug report because I remember the advice that a wise programmer once gave me: “the people who develop compilers and tool chains are much better at coding than you, any time you think there’s a bug in their code there is probably a bug in yours“. I know that my blog is read by some really great programmers. I look forward to someone explaining what is wrong with my code or confirming that I have found a bug in Valgrind or the STL.

#define NUM_THREADS 2
#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
#include <string>

using namespace std;

void whatever()
{
string str;
str.erase();
}

struct thread_data
{
int thread_id;
};

void *do_work(void *data)
{
struct thread_data *td = (struct thread_data *)data;
printf("%d:stack:%X\n", td->thread_id, &td);
while(1)
  whatever();
}

int main(int argc, char **argv)
{
pthread_t *thread_info = (pthread_t *)calloc(NUM_THREADS, sizeof(thread_info));
pthread_attr_t attr;
if(pthread_attr_init(&attr) || pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE) || pthread_attr_setstacksize(&attr, 32*1024))
  fprintf(stderr, "Can't set thread attributes.\n");

int t;
struct thread_data td[NUM_THREADS];
for(t = 0; t < NUM_THREADS; t++)
{
  printf("created thread %d\n", t);
  td[t].thread_id = t;
  int p = pthread_create(&thread_info[t], &attr, do_work, (void *)&td[t]);
  if(p)
  {
  fprintf(stderr, "Can't create thread %d\n", t);
  exit(1);
  }
}
pthread_attr_destroy(&attr);
void *value_ptr;
for(t = 0; t < NUM_THREADS; t++)
  pthread_join(thread_info[t], &value_ptr);
free(thread_info);

return 0;
}

==30622== Possible data race during write of size 4 at 0x414FED0
==30622==    at 0x40FAD9A: std::string::_Rep::_M_set_sharable() (basic_string.h:201)
==30622==    by 0x40A945E: _ZNSs4_Rep26_M_set_length_and_sharableEj@@GLIBCXX_3.4.5 (basic_string.h:206)
==30622==    by 0x40FD6B6: std::string::_M_mutate(unsigned, unsigned, unsigned) (basic_string.tcc:471)
==30622==    by 0x40FDBEE: std::string::erase(unsigned, unsigned) (basic_string.h:1133)
==30622==    by 0x8048AA8: whatever() (thread-test.cpp:16)
==30622==    by 0x8048B0A: do_work(void*) (thread-test.cpp:29)
==30622==    by 0x402641B: mythread_wrapper (hg_intercepts.c:193)
==30622==    by 0x40464BF: start_thread (in /lib/i686/cmov/libpthread-2.7.so)
==30622==    by 0x42696DD: clone (in /lib/i686/cmov/libc-2.7.so)
==30622==  Old state: shared-readonly by threads #2, #3
==30622==  New state: shared-modified by threads #2, #3
==30622==  Reason:    this thread, #3, holds no consistent locks
==30622==  Location 0x414FED0 has never been protected by any lock
==30622==
==30622== Possible data race during write of size 4 at 0x414FEC8
==30622==    at 0x40A9465: _ZNSs4_Rep26_M_set_length_and_sharableEj@@GLIBCXX_3.4.5 (basic_string.h:207)
==30622==    by 0x40FD6B6: std::string::_M_mutate(unsigned, unsigned, unsigned) (basic_string.tcc:471)
==30622==    by 0x40FDBEE: std::string::erase(unsigned, unsigned) (basic_string.h:1133)
==30622==    by 0x8048AA8: whatever() (thread-test.cpp:16)
==30622==    by 0x8048B0A: do_work(void*) (thread-test.cpp:29)
==30622==    by 0x402641B: mythread_wrapper (hg_intercepts.c:193)
==30622==    by 0x40464BF: start_thread (in /lib/i686/cmov/libpthread-2.7.so)
==30622==    by 0x42696DD: clone (in /lib/i686/cmov/libc-2.7.so)
==30622==  Old state: shared-readonly by threads #2, #3
==30622==  New state: shared-modified by threads #2, #3
==30622==  Reason:    this thread, #3, holds no consistent locks
==30622==  Location 0x414FEC8 has never been protected by any lock
==30622==
==30622== Possible data race during write of size 1 at 0x414FED4
==30622==    at 0x40A9012: std::char_traits<char>::assign(char&, char const&) (char_traits.h:246)
==30622==    by 0x40A9488: _ZNSs4_Rep26_M_set_length_and_sharableEj@@GLIBCXX_3.4.5 (basic_string.h:208)
==30622==    by 0x40FD6B6: std::string::_M_mutate(unsigned, unsigned, unsigned) (basic_string.tcc:471)
==30622==    by 0x40FDBEE: std::string::erase(unsigned, unsigned) (basic_string.h:1133)
==30622==    by 0x8048AA8: whatever() (thread-test.cpp:16)
==30622==    by 0x8048B0A: do_work(void*) (thread-test.cpp:29)
==30622==    by 0x402641B: mythread_wrapper (hg_intercepts.c:193)
==30622==    by 0x40464BF: start_thread (in /lib/i686/cmov/libpthread-2.7.so)
==30622==    by 0x42696DD: clone (in /lib/i686/cmov/libc-2.7.so)
==30622==  Old state: owned exclusively by thread #2
==30622==  New state: shared-modified by threads #2, #3
==30622==  Reason:    this thread, #3, holds no locks at all

3

Lies and Online Dating

Separating Fact From Fiction: An Examination of Deceptive Self-Presentation in Online Dating Profiles is a really interesting paper by Catalina L. Toma and Jeffrey Hancock of Cornell University and Nicole Ellison Michigan State University [1]. People who don’t use the Internet much regard online dating as an area that is filled with liars – largely due to a small number of gross liars that are well publicised (EG people conducting net-relationships while lying about their gender), but the evidence suggests that this is not the case.

The first point this paper made which I found to be particularly interesting is that anyone who desires a meeting in person will be limited in their lies (EG they have to post a real photograph of themself). So it seems that someone who doesn’t want to be lied to should insist on phone calls and meetings in person without much delay – the worst horror stories about online dating seem to concern people who interact over the net for many months before meeting. Maybe it would be a good strategy for users of singles sites to have a paragraph stating “I want to talk to you after receiving X messages” where X is some number significantly less than 10.

The next point was that connections to the real-world persona decrease the ability to lie, lying on a dating site that is only read by other singles is going to be easier than lying on your favorite social networking site, personal web-site, blog, or any other online resource that is read by people who know you. So someone who didn’t want to be lied to could demand the link to other online resources of the person that they are corresponding to.

Also the ability to track different versions of the profile decreases the ability to lie. It would be interesting if some of the singles sites added a history tracking feature so that it was possible to see the previous versions of someone’s profile. But even without such a feature the need to have a single profile greatly decreases the ability to lie. When trying to impress someone in a bar I believe that it is standard practice to pretend to be interested in whatever interests them, but on a profile page it is necessary to provide a short list of interests that remains relatively static.

Later in the paper there is an analysis of the average discrepancies of the profiles, which in most cases are small enough that they would not be noticed when meeting in person. But it does note that there were a few extreme lies (such as someone misrepresenting their age by 11 years).

Near the end of the paper there is a brief description of some related research. One interesting point is that even when there is no way for a liar to be caught (EG online discussion forums in which no meeting in person is planned) most people will still tend not to lie much. Great lies require a change in self-concept, and most people don’t want to think of themself as a liar.

It seems to me that this paper provides strong evidence to show that no-one should be afraid of being lied to on an Internet singles site and it can also be used to form strategies to avoid being the victim of a lie. So for those of you who are single and afraid of singles sites, fear no more!

7

McDonalds – Wifi Without Power

I am writing this post at a small cafe while my car is being serviced. I tried a local Red Rooster food store, a KFC, and a McDonalds but none of them had a power socket I could use. This seems quite perverse as McDonalds advertises free wifi net access to entice customers, but no power to charge laptops, phones, etc. So anyone who has 3G net access will avoid that particular McDonalds store in spite of the free Wifi.

Also this is not something that happens accidentally. Power sockets are needed to power the variety of cleaning equipment that is used at fast food stores and it would same some cleaning time if they were centrally located, so someone at those fast food stores apparently decided to put power sockets out of reach of customers. I’m currently seated in a position that is within vacuum cleaner range of every table in the cafe, so whoever rents the premises to the small restaurants has thought of these things.

At home tariffs a laptop will consume about 1/3 of a cent worth of electricity per hour. It seems to me that a smart business owner would want to have several power sockets available to customers and advertise this fact. One cafe has made considerably more than 1/3 of a cent profit from me due to having a power socket where I could use it.

Note that not all McDonalds stores have this problem. One I visited last week had a power socket where I could use it. I noticed that they had made a good choice of uncomfortable chairs to discourage customers from spending too long there, it took the rest of the day to recover from a couple of hours sitting in McDonalds.

8

Actually You Do Care

A reasonably common feature in Internet debates is that of one party claiming to not care about the issue. Statements such as “I haven’t got time to debate this” or “I’m not interested” are used to try and disclaim any interest in the topic. Such claims are silly and rather amusing.

Outside the Internet it does make sense to say “I don’t care” because interactions are between small numbers of people. Telling a tele-marketer that you don’t care about their product is part of the process of getting them to stop calling you. But it doesn’t make sense in interactions between large numbers of people.

If there are 100 people on a mailing list then there will be a variety of opinions about any issue, but one thing you can count on is that the majority of people on the list are not interested in whether any individual cares about an issue. If there was a general desire to discover how many people cared about a topic of discussion then the way to determine this would be via an online poll. In almost every situation individuals saying “I don’t care” in email just isn’t a scalable solution. The only exception is when someone in a leadership position is asked for an opinion, in such a case a response is expected and if the leader actually doesn’t care then saying so and letting other methods be used to resolve the dispute makes sense.

One common case where an “I don’t care” message is seen is at the end of a long and heated discussion. After a discussion has gone on for a while (well beyond the point where it was obvious that no-one was going to change their position) one party might claim to not care or not have the time to debate the issue. But of course if they didn’t care at all or had no time then they wouldn’t have written any messages on the topic. If they had a limit to their time or care factor then they would probably have stated their opinion once and maybe written a single follow-up post clarifying the first one. Anyone who has written 6+ messages or a total of 1000+ words on a topic obviously cares and obviously has time. In such cases it seems that claiming to not care or not have time is a final desperate attempt at getting the last post on a topic by someone who subscribes to the “last post wins” school of online debating.

Another common case is when someone makes a point that is decisively refuted. The Internet is filled with people who can’t handle criticism and who can never leave any critical email without a reply. In such a situation claiming to not care is a way that such a person can protect their fragile ego even if the point is indefensible. One of the variations on this theme is to claim to be an expert who doesn’t care enough to educate people on mailing lists (or even provide a couple of URLs that reference what they need to know). As a hint, if you are going to claim to be an expert while making statements that disagree with notable experts in the field in question (professors at prestigious universities, Nobel laureates, or people who have demonstrated great practical success) then you really need to demonstrate your expertise and cite references.

While generally it’s the scope of the Internet that makes the “I don’t care” argument silly, it also doesn’t make sense in interactions via electronic media such as private email where a sender can be ignored. If you don’t care about a private email in reply to one of your messages then what you will do is simply delete it. Replying and saying “I don’t care” merely demonstrates that you do care, invites another reply, and shows that you have a fragile ego to protect. My general practice when dealing with such people is to send one reply to every message that they send me, such people typically demonstrate how much they care by sending me more than a dozen messages explaining in detail how much they don’t care.

Another variation on the theme of private correspondence is people who write blog comments that are obviously inappropriate and will not pass moderation. Someone who polls my blog to see if their comment has been approved and then writes an abusive comment when they discover that they fell well short of my comment quality standards obviously cares about having their comment published. To then claim to not care about whether their comment was approved is obviously a lie.

Google is almost entirely filled with things that I don’t care about. I demonstrate the fact that I don’t care about them by not commenting.

10

CPL

I’ve just bught an NVidia video card from Computers and Parts Land (CPL) [1].

I asked for a PCIe*8 card but was assured that a PCIe*16 card would work. However when I got it home I discovered that it would not fit, the size difference was obvious enough that I didn’t even need to unwrap the new card.

According to the Wikipedia page for PCIe (PCI Express) [2] it is quite legal to have a motherboard implement a slower version of PCIe but have the full slot width, so a motherboard could have PCIe*1 implemented but have a socket that will fit a PCIe*16 card. The motherboard and the card will negotiate the capabilities that they both support. But there is no requirement to have a larger socket than required to use the capabilities of the motherboard.

The CPL salesman assured me that any PCIe*16 card will fit into any PCIe*8 socket. I presume that he is used to white-box gear manufactured by companies that can save a few cents on the sockets if they make them all the same size. The Dell PowerEdge T105 that I own has PCIe*8 sockets that do not fit PCIe*16 cards.

So now I have to return the card, and the CPL web site doesn’t even give the hours that the store is open, so I have to call them. Sigh.

Update: I returned the video card, first I had a debate with the CPL guy who had sold it to me regarding whether such PCIe sockets exist. He suggested that I had mistaken a PCI slot for a PCIe slot and was not convinced until I showed him a picture I had on my phone. He then claimed that Dell made sub-standard machines for not using a PCIe*16 socket for PCIe*8 connectors – so it was Dell’s fault not his fault for delivering me a PCIe*16 board when I asked for a PCIe*8. He told me that no-one had ever made a PCIe*8 video card. Then he told me that I was lucky to not have a re-stocking fee (they sold me a device that was not what I asked for, I returned it in perfect condition on the same day and I was lucky to not pay them for the privilege). They gave me a credit note for the value of it (not a refund).

I recommend never doing business with CPL if you can avoid it. I will make exactly one more purchase from them, that will be to use the credit note.

Mo Rewards

While shopping at Highpoint [1] today I noticed that they had a new loyalty system. It’s called Mo Rewards [2] (for which the real web site is at MoCoMedia.net [3] which has no link from the main site because they didn’t care enough about their web presence).

mo RFID keyring tokens

The way that Mo works is that everyone gets a free RFID token similar to the two in the above photograph. The token comes with a pseudo-random seven letter code that you have to SMS to register it to your phone. You SMS the code and then receive a confirmation SMS. After that you can wave your token near a detector any time you visit the shopping center and you will receive three SMS messages with discount offers. You can send an SMS with your gender and birth-year to receive more targeted offers. To redeem offers you have to wave your token near a detector at the store so they know who is using the offers.

Then of course once the database knows that you are a regular customer at a certain shop they can send you targeted advertising to entice you to buy from that shop on every visit. I presume that they have some sort of bidding system for adverts from the shops of a similar nature to the Google advertising.

It’s an interesting system and a lot better than most loyalty programs.

One interesting thing about this is that high quality RFID devices are being given out for free. The tokens are quite solidly constructed and could be used for a variety of other purposes. I couldn’t find anyone offering RFID tags at a reasonable price with a quick Google search (the cheapest was $75 for 100 tags – and they were the fragile ones used for marking stock in shops). So a hobbyist who wanted to do some RFID stuff could buy a cheap reader under one of the demo offers (where you get a reader and a small quantity of keys for a reasonable price) and then collect free RFID tokens from shopping centers. I expect that the number of people who would do such things is small enough to not be statistically significant and therefore not affect the business model. The tags are given out freely with no requirement that you must use them for the expected purpose (Mo Rewards) instead of using them for your own RFID work.

5

Fads and Internet Services

Richard Glover has written a polemic about fads on the net [1]. His points are essentially good, but he does over-reach them a bit (which is part of the polemic style) and he also seems a little unimaginative about the future of technology. He starts by suggesting that Twitter [2] is a fad. Twitter has grown in popularity very rapidly, and I believe that the company is not guaranteed to last forever (the business model could fail or a better implementation of the concept could take the users). But the basic premise of Twitter (SMS length messages being published on the net in a similar manner to blog posts) is something that has been proven to work well. So even though I have not felt inclined to use Twitter (either as a reader or a writer) I don’t think that the class of service will ever go away.

He also cites an example of watching TV news on a mobile phone. While I believe he is right about that not being a viable business, it’s because TV news itself isn’t a great thing. Before the Internet was commonly used the only ways of getting news of something that happened in the last few hours was via TV or radio, if you want pictures with that then TV was the only option. If you wanted quality news (in-depth coverage, insightful analysis, and a depth of detail) then you were probably out of luck, but the best option available to you was the the newspaper. Watching a TV news segment on a mobile phone (or on a PC connected to the net) is not effective. What I want is a newspaper that is updated as soon as events happen and which contains full color pictures and video. There are a number of web sites which provide this service, The Sydney Morning Herald (which employs Richard Glover) [3] is one example.

I think that the current fad for mobile phone TV is like the fad for WAP [4]. Many years ago I worked for an ISP that installed a WAP server, one of my duties was to keep the WAP server running. Everyone who knew anything about technology knew that the project was going to fail, WAP phones were horribly expensive (you could expect to spend an extra 200 guilders or more to buy such a phone) and the features of WAP were not particularly exciting. Also requiring that everything be re-written for WAP was just insanity. The problem with the WAP fad was managers who knew nothing about technology making technical decisions. I’m sure that the TV on mobile phone fad is driven by managers in TV companies that are greedy for more revenue opportunities and don’t stop to think about the implications. I might watch a news show on free TV, but I’m certainly not going to pay by the minute to watch it on my mobile phone. Instead I can just go to a web site such as the SMH and read news items, see pictures, and even watch the occasional video (most TV news doesn’t really require any video – they just re-enact scenes or use stock footage to have something on screen).

Finally he makes a sarcastic reference to chocolate fondue. That reminds me, someone gave me a fondue set years ago that I haven’t used yet. I’ll have to make a chocolate fondue! For those of you who live in Melbourne, the restaurant of the Melbourne Swiss Club [5] offers cheese fondue for the main course and chocolate fondue for dessert. Fondue is still with us!