Categories
Technology

PS

Recovered from the Wayback Machine.

In case I was too subtle in the last post, if you have a gmail account, I would immediately check to see if any of the emails in your incoming or outgoing folders have a password in them. If so, I would change the password at these accounts mentioned in the emails.

I would also recommend that you access the gmail settings, and set forwarding on your gmail account to forward to a more secure email system and trash the emails sent to you on gmail.

In plain words: do not use gmail for sensitive, important, or daily communication. Even with this bug being fixed, this demonstrates the vulnerability of centralized applications and data outside of your control. More than that, it demonstrates the infeasibility of trusting your day to day communications to beta software. My bad for doing so.

Categories
Technology Travel

Missing

Salt Lake City has a nice airport — good view of the mountains, nice places to sit and relax. I had a three hour break there between flights and had a chance to get a sandwich and a beer. When I finished, I realized it was only 10 in the morning, and followed the meal with a large cup of coffee. It was a confusing morning.

As we lined up for our 1:00 pm flight to St. Louis, we noticed a flurry of mechanics around the plane we were taking — one of those small Canadair craft that only seats 70. The Delta folks then announced that the maintenance crew wouldn’t release the plane until 1:30.

We watched through the window anxiously as the crew stuck things into slots in the plane and scanned readings on various hand held devices. I remarked to a couple of folk standing next to me that the duct tape holding the plane together was probably out of date. I also received a voice call from Orbitz warning me that my flight was delayed.

At 1:45 we were getting increasingly concerned that our flight would be canceled — especially when one of the maintenance crew left to get a manual and a group then poured over its pages. I asked the person at the desk what Delta would do if the flight was canceled and he, flustered, said that the plane was full and the only other flight that night was also full — the maintenance crew would just have to fix the plane.

Eventually, I can’t remember when exactly, they came on and said the plane had been cleared. I watched them pull instruments out and then noticed one take a piece of silver duct tape and stick it on the side, just below where the co-pilot sits. We had a nervous laugh at that.

I have one picture of them working on the plane, but I left my USB cable at my mother’s and until it arrives, no pictures. I only took one photo, though, as every time I would take a picture in the airport, security people would magically appear and just sort of ‘hang around’.

When our cramped overcrowded flight full of Very Tall People landed at St. Louis, I went to pick up my bag but it was missing. Oh, no, how could it possibly had missed the flight–I was there three hours early. I went to the office to report it and there it was: it had been sent out on an earlier flight. Another person whose bag was also sent early mentioned to the Delta attendant that this is against the law, because people’s baggage must travel with them. I didn’t care, because I just wanted to go home. When I got home though and opened it, there was a card on top saying that my bag had been opened and searched. Luckily my underwear was clean and safely packed in little snuggy bags.

As for the problem with the plane, just before we took off, the pilot said that an inboard data computer had failed during the incoming flight and that it had to be replaced and a complete diagnostic run to ensure everything was okay. This relieved all of us greatly, and I remarked to the person sitting next to me that it was too bad that this information couldn’t have been given out while we were waiting. Yes, he said, because in the absence of all information, people will make up their own interpretations of what’s happening–an interpretation usually worse than the reality.

Which, since I can’t find a human to connect with at Google about my gmail account, means that I will make up my own interpretation and it is that gmail was cracked recently and somebody deliberately deleted over a month’s worth of emails: from October 9th until new emails started coming in on the 16th of November. As such, I will no longer be using my gmail account for anything but throw-a-way communication. If you want to reach me, use shelleyp@burningbird.net. No, I don’t obfuscate my email addresses as this is tantamount to putting a finger into a broken levee to hold back a raging river; it doesn’t stop the problem and only gets your finger very, very dirty.

Anyway, as to gmail: so much for Web 2.0, centralization, and the ‘power’ of applications that are always in beta.

Bingo. gmail was cracked November 17th.

Update: Cracked a few days before, but Google didn’t announce the fact.

Categories
Technology

Always in Alt

Recovered from the Wayback Machine.

In a post titled Passion is Blind Kathy Sierra discusses passionate users, double-standards, and forgiveness:

But there’s no getting around it–we all have double standards. We are all cutting one side some slack while holding the other to our ruthless, concrete expectations. And of course we will all screw up. We aren’t perfect. Neither is our software, our hardware, our service, our support, our employees, our policies, our products and services and ideas. But that’s the beauty of passion–if you can inspire it, by helping your user kick ass–they WILL cut you some slack. They’ll forgive you when you screw up.

To demonstrate her point, Kathy uses the now legendary support that Apple customers feel for the company, as compared to Microsoft customers.

It is true that it seems as if Apple can do no wrong, and Microsoft do no good. In fact, the unstable nature of Windows and the ‘blue screen of death’ is a standing joke in the industry. However, I imagine if there were as many Mac users as Windows users, we would hear the sounds of dissatisfaction about Apple just as loudly. In fact, from the anger expressed by many about the new Nano iPods, Apple doesn’t necessarily have the same ‘free’ ride it has enjoyed in the past. Apple is not as successful as Microsoft, but it successful enough.

How does a company get a break from its users? It’s easy: all they have to do is stay small, or appear to stay small; personalize the company so that being critical of a product is equated to being critical of a person or a group of people; most importantly, create a feeling of being an insider by being a customer–all the cool kids have iPods, you know.

(Personally, all the really cool kids have super-cheap iPod rip offs, and use the money they save to buy more music.)

Does this all then mean that there’s a double-standard in play because we’re critical of Microsoft where we’re not of Apple? If both companies delivered the exact same products, possibly, but both companies don’t deliver the same product. True, Apple and Microsoft both deliver an operating system–but the claims they make for both differ dramatically.

Apple promises to provide an environment in which you can add and remove devices and rarely have to worry about configuration; that’s simple to use and easy to maintain; that doesn’t have some of the performance issues associated with fragmented disk space and so on. The company can make these promises because it provides much of the hardware as well as the software, and in this environment, it’s easy to follow through on the claims. It is the hardware that allows Apple to shine, and which sets itself apart from Microsoft.

Apple focuses as much of its effort on design as it does engineering–knowing that people are easily swayed by smooth corners and sexy slim lines. Someone, somewhere thought, “Let’s put a lighted Mac logo on the back of all our notebooks”, so that a seeming sea of blinking apples face us out of conference after conference, even though in the beginning most notebooks probably weren’t Apple (but that changed, as all the cool kids etc.)

All in all, Apple promises what it can deliver. Apple promises to be easy, and it is; Apple promises to be sexy, and it is. What Apple doesn’t promise is what it can’t deliver: to be a cheap, reliable work horse.

Microsoft, on the other hand, is a company that makes claims based on its weaknesses, rather than its strengths. It makes grand promises about security, and thus virtually guarantees being a target; releasing, on average, one new security bulletin a week. It brags about reliability, when the operating system has to work on devices that range from the powerhouse to the puny. It seeks to win over business based on the stability of its products, and just when developers had created a wealth of applications in one environment (COM, DCOM, and COM+), it abandons it and the developers in favor of something completely new (.NET).

To be blunt: Microsoft has a corporate death wish, but will never be allowed to die and will, instead, thrive. This rather astonishing contradiction is based on the fact that the Windows operating system is about as ubiquitous as the common cold; the kicker is the reason it’s so ubiquitous is that Microsoft makes promises it can’t keep. Soooo, Microsoft gets slapped, true; but it gets slapped all the way to the bank.

Saying there’s a double-standard, then, when people complain about having to re-boot a Windows laptop, as compared to having to re-boot an Apple powerbook implies that both systems are focused on the same audience, and based on the same promises. It ain’t no such thing.

And this leads us to the second example Kathy uses in her post: she also references the past discussion that occurred when Phil Ringnalda noticed the sponsored links at the O’Reilly web sites, and when I brought up the sponsored links at my own site:

But sometimes our double-standards bite us in the ass and we’re forced to face it, as Phil Ringnalda did a few months back. When O’Reilly appeared to have search-engine-gaming ads, Phil slammed him in this blog entry. But when his friend Shelley Powers does it, the conversation got very interesting. It was fun (and impressive) to see Phil acknowledge and wrestle with the ambiguity of it all.

True, Phil is my bud–and not just because he has a great way with a rant. But was he indulging in a double-standard because he was critical of O’Reilly for sponsored links but not as critical of me? If he had continued being as unevenly critical, yes. In the end, though, as discussion on the topic brought about a deeper understanding of the issues, I think he was equally disappointed with both of us, but my cat, Zoë, won him over to the dark side.

In the end of her post, Kathy writes:

So, we have to ask ourselves… what can we do to put ourselves on the side of forgiveness? What can we do to help protect us from the times when we will screw up? What would it take in our product, company, service, whatever — to get users to have a glass-half-full attitude about whatever it is we do? If “rebooting” is a metaphor, I’d rather be Apple than Microsoft.

As a developer I try not to make mistakes, but when I do, I fix them. I would hope that ‘forgiveness’ never enters the equation, as forgiveness implies an emotional context, and what does code have to do with emotion? As for my site, what can I do to put myself on the side of forgiveness? I can do nothing, because I promise nothing.

Categories
Media Technology

Playing the game

Recovered from the Wayback Machine.

A while back I listed in a post 50 television programs the Boston Globe considered to be the top sci-fi shows on TV. In comments, we discussed shows we felt were missing, but none of us picked up that Max Headroom was missing from the list. Now that I look back on the discussion, I am surprised by its absence. Though Max Headroom was a short-lived series, I considered it to be both innovative and entertaining.

If you haven’t seen Max Headroom, the show centers around a television crew where the main character, a television journalist, has his personality copied into a digital construct named Max Headroom. In this future time, political entities no longer exist, and society is ruled by corporate rules and regulations, especially several competing broadcast companies, which, among other things, don’t allow televisions to be turned off. People are subjected, day in and day out, to broadcasting, including a continuous barrage of ads.

I was reminded of Max Headroom when I read about Microsoft Live last week, and again when I read Ray Ozzie’s supposedly leaked memo today. I don’t think any of us really doubts that the Microsoft memos were leaked deliberately and with careful thought and planning. Both memos, Gates and Ozzie’s, read as if they’ve been copy-edited, and every phrase meticulously constructed for maximum conjecture and obfuscation–perfect for a new takeover campaign.

Much of the writing is the usual hype–the sense of being on the verge of ’something new’–the ‘aha’ about technologies that are ubiquitous. But what surprised me about Ozzie’s memo and the Live discussion was the strong reference to advertising. Ozzie wrote:

Most challenging and promising to our business, though, is that a new business model has emerged in the form of advertising-supported services and software. This model has the potential to fundamentally impact how we and other developers build, deliver, and monetize innovations. No one yet knows what kind of software and in which markets this model will be embraced, and there is tremendous revenue potential in those where it ultimately is.

Julie Lerman also noticed this from the Microsoft Live announcement: advertising is now being seen as a technological innovation:

Now there is windows live and office live – but somehow the repetetive them(e) that kept jumping out at me when reading the press release was “advertising”.

Opera had ads around it’s browser before going all free; Google makes its money through adsense, and I’ve seen an increasing number of tools that you can use for free…as long as you allow certain bits of software to sit on your machine, counting your key strokes, reading you words, and feeding you focused ads. I do foresee a time when we’ll download Microsoft tools and products–all complete with bar frame and flitty, flighty ads. Not only that, but the technology will be added into .NET that enables those who build tools to do the same–and this enabling will then make it all okay.

At a time when television, radio, and music are becoming subscriber-based and on-demand downloadable for small fees, normally ad-free spaces–such as our desktops, browsers, and every day tools–will pick up the vacuum left by the broadcasters. You will have a choice: pay for the software, or allow ads. It is an inevitable next step in software product releases. With this approach, the software pays and pays no matter how long it takes people to upgrade. More importantly from Micrsoft’s point of view, the companies no longer need worry about pirated copies of any of the software because everyone can get it for free.

In our rush and our new enthusiasm–!?–for this new breed of ads, I can only hope that we remember, as Max Headroom surely could remind us: nothing is really free.

Categories
Technology Web

Accessing the Newsgator API within PHP

One of the programming jobs I’ve had recently was to provide PHP functions to access the Newsgator SOAP API; hiding as much of the SOAP bits as possible. I used the nuSOAP PHP library as the basis for my work. Though SOAP functionality is built into PHP 5, my client, like most people, are still using PHP 4, and nuSOAP has a very clean implementation.

For those who might want to give the API a shot, I’ll walk through some sample code that should be easily modified as interested. I had hoped to write a more complete application, but have ran out of time.

The Newsgator API requires an account in order to test the code, but you can sign up for one at no charge. When you get an account, you’re given an online Newsgator Location in which to add subscriptions. You’re also given the ability to create new locations, as well as folders, and to subscribe to and read, syndication feeds. The API itself is split into five main categories for the five SOAP endpoints: Locations, Folders, Subscriptions, Feeds, and Posts.

Each SOAP engpoint page lists the web service methods for the specific item, including a description of the parameters and values returned. An important element when looking at the page is to find a link to the endpoint at the bottom. Clicking on it opens a window asking for the account username and password. Once you enter these, the endpoint page opens, containing links for each of the methods.

Clicking on a method link opens up another page, usually containing a form, and an example SOAP request and response. These latter are essential in order to determine the values used with nuSOAP. You can also test the web service by typing values into the form and invoking the method. If, that is, the parameters are simple values rather than programmatic structures, such as arrays.

Once you’ve looked through the API methods to see what parameters are needed, and explored the actual SOAP request and response, it’s just a matter of plugging in values within the nuSOAP functions. To demonstrate, I’m going to walk through a program that creates a SOAP client, queries the service for all subscriptions for a given location, and then accesses and prints out links to the individual items for the subscriptions.

In the program, I first create a SOAP client using the appropriate endpoint, checking for any error afterwards. (Complete source code is provided later, so no worries about any gaps in the code):

// create SOAP client
$client = new soapclient(”http://services.newsgator.com/ngws/svc/Subscription.asmx”);
$err = $client->getError();
if ($err) {
err($client,$err);
die();
}

I’m not using a proxy or WSDL, so no other parameters other than the endpoint are set.

Next, I define the method’s parameters, in this case a location string and a synchronization token. This latter value is used to synchronize the data between method calls, and in the results you’ll see this returned as part of the response. Using this provided synch value in the next method call ensures that the data, such as the count of unread items for each subscription, is fresh.

// set parameters
$params = array(
‘location’ => $location,
’syncToken’ => $synctoken
);

During the initial web service request, the synch token is blank.

Once the method parameters are set, I added code to authenticate the user:

// authenticate against the service
$client->setCredentials($user, $pass,’basic’);

Note that this uses example uses BASIC authentication; Newsgator also supports DIGEST authentication.

The Newsgator API token is passed in a SOAP header, which I build manually next. Note that the token must be authenticated with the service, so you’ll need to specify the appropriate service namespace:

// create SOAP header for Newsgator API
$hdr = “<ng:NGAPIToken xmlns:ng=’http://services.newsgator.com/svc/Subscription.asmx’>
<ng:Token>$token</ng:Token></ng:NGAPIToken>”;

Finally, we can now invoke the service:

// invoke SOAP service
$result = $client->call(’GetSubscriptionList’, $params,’http://services.newsgator.com/svc/Subscription.asmx’,
‘http://services.newsgator.com/svc/Subscription.asmx/GetSubscriptionList’,
$hdr,false, ‘rpc’,’literal’);

// check for error
if ($client->fault) {
echo ‘<h2>Fault</h2><pre>’; print_r($result); echo ‘</pre>’;
} else {
$err = $client->getError();
if ($err) {
echo ‘<h2>Error</h2><pre>’ . $err . ‘</pre>’;
}
}

In this function call, the SOAP method is the first parameter, followed by the parameters, the SOAP endpoint (namespace), the SOAP action, the manually created header, the serialization style (’rpc’), and the serialization for the parameters (’literal).

The nuSOAP function processes any XML returned as multi-dimensioned arrays. With this service call, the subscriptions are returned as OPML, values of which you can access by walking through the array:

// decipher the array, based on OPML
$opml = $result[”opml”];
$body = $opml[”body”];
$outline = $body[”outline”];
$syntoken = $opml[”!ng:token”];
foreach ($outline as $key => $sub) {
$feed = $sub[”!ng:id”];
$title = $sub[”!title”];
$url = $sub[”!htmlUrl”];
echo “<a href=’$url’>$title</a><br />”;
}

After each subscription is accessed, the feed identifier ($feed) is then used to invoke another service to get the news for the feed. The complete application demonstrates this.