Saturday, December 22, 2012

Issues with the Google Nexus 4 Phone

I am now waiting on my second replacement 16 MB Nexus 4 to arrive.  The first two had an issue that appears to be a hardware problem. When you blanked the screen when connected via WiFi, about a minute later the phone would turn WiFi off. This, in spite of having the "Keep Wi-Fi on during sleep" set to "Always" in the advanced WiFi settings.  You notice this WiFi sleeping behavior because running apps like Gmail and Facebook no longer receive notifications of new mail and messages.  When you turn the screen back on you can watch the WiFi signal icon which is now greyed out turn blue as it reconnects.

More important for me is that GrooveIP, my must-have voip phone app, no longer answers calls when the screen is blanked.  A phone that doesn't answer calls, while maybe attractive in concept, is not of much use.

I bought the unlocked Nexus so that I could drop my expensive Verizon plan and sign up for a less-expensive data-only plan from T-Mobile.  I tried out GrooveIP on my Nexus 7 for a while and found it to be a completely acceptable alternative to a traditional cell phone.  The dialer interface feels just like a regular smart phone, and GrooveIP interfaces with your Google contacts making it a nice integrated component of the Google infrastructure.  GrooveIP works well over both WiFi, and 3G and 4G mobile carrier network connections.

Interestingly, it is only the WiFi connection that sleeps when the screen is blanked.  When connected to T-Mobile, the phone works as expected.

When I first encountered this issue I thought it was a bug in GrooveIP, and so I contacted the developer of the app.  It turns out that he has  Nexus 4 as well.  We checked and he is running the same 4.2.1 Android rev. as my phone, but it did not have the same WiFi problem. This leads me to suspect that there is a hardware issue with at least some of the LG Nexus 4s.

In addition, there is a known bug in bluetooth in 4.2.1 that effects the Nexus 4.  That issue is described in the previous post in this blog.

The good news, I guess, that that Google has a surprisingly efficient device support team, at least so far as their being able to ship me a couple of replacement phones.  I'm interested to see if the next replacement has the same issue.  My Nexus 7 which is also running 4.2.1, btw, does not have this particular problem.

Tuesday, August 21, 2012

More Windows 8 Countdown Material

Well, here we go again.  Another month counting down to the October release date for Windows 8, and another sampling of "I hate it!" reviews.  How about this one from ZDNet" :

"Oh sure, Windows 8 does boot faster and it has a few new features, but generally speaking Windows 8 with its “not Metro” interface is junk. I've been working with Windows 8 in one version or another for months now and there is simply nothing about it that would make me recommend it over Windows 7 or XP for that matter."

A little later on in the article you begin to find out what the author really thinks:

If you want something better than Windows, go with desktop Linux, a cloud-based Linux desktop like Google's Chrome OS, or a Mac. Heck, try an iPad. Just don't waste your time with Windows 8.

I can't wait for the release of Windows 8, I really am curious if it will be received as badly as reviews seem to be indicating.  Remember Ubuntu and it's Unity bomb.  One size does not fit all.


Monday, July 30, 2012

More Micro$oft In the News

First there was this piece on /. yesterday about Microsoft's lost decade:

    "I think Microsoft's even more screwed than the conventional wisdom thinks they are. Their mobile strategy is a shambles, their console business will never turn a profit (and could end up costing them another $10-$20 billion), they're an also-ran in the cloud, and their OS and office applications monopolies are increasingly threatened by Apple in the home, and by Linux and cloud-based applications in the workplace.
    Their patent portfolio is formidable, but then, so was Kodak's.
    I think they have about 5 years left to turn it around before they begin a rapid slide into irrelevance, and I don't think there's a snowball's chance in hell that Ballmer could lead such a turnaround."

Then yet another assessment of Windows 8 on ZDNet here.

You would have thought that M$ would have learned from Ubuntu's Unity fiasco that this was not a direction to go.  Ubuntu saw their popularity drop from 1st place in the Linux distros to 2nd almost overnight in favor of the current number one: Mint.

I believe the key take-away here is that the desktop OS market is rapidly declining in importance.  As suggested in the ZDNet article,  there are plenty of choices out there that satisfy many of the current desktop use cases; now is not a good time for Microsoft to be further alienating their customer base.


Friday, May 4, 2012

M$ Windows 8 - Linux's Best Friend

The more we learn about the upcoming Microsoft Windows 8 release, the more we think we're going to hate it.  The latest: you will have to purchase the Media Center Pack in addition to purchasing the OS if you want to play your DVDs.

This, on top of the new "improved" UI mentioned previously that will be pushed out with Windows 8 will almost positively create significant, unpleasant backlash.

You have to wonder what Balmer is thinking...


Thursday, April 12, 2012

A Framework for Distributed Agent Based Model Development

Note: This is a longish article, originally published a year ago in Linux Journal. It includes a brief description of agent-based modeling, and then it introduces ABM++, a framework for developing distributed ABMs on Linux clusters.



What is agent-based modeling, otherwise known as ABM? What is distributed computing? Why do it?

These are all easily answered questions, right? Surprisingly, not really, even after all the years that this technology has been in use. There are still a whole lot of software developers out there today implementing applications using purely procedural methodologies and languages like C, FORTRAN, PASCAL, Visual Basic, etc. Worse, there are plenty of people using languages that are capable of good object oriented implementations, like C++ and Java, but they are using the language to only implement procedural designs. These people, for whatever reason, have simply not become aware of the advantages provided by ABM software methodologies.

We won't go into those advantages here because we do not wish to initiate one of those ABM software design Holy Wars (although, we might suggest that procedural software engineering approaches are artifacts left over from the Dark Ages, with current practitioners strongly resembling critters last seen roaming the Earth during the late Jurassic period).
But we certainly don't want to start any flame wars.

Rather, we will simply suggest that ABM methodologies represent current best practices for a large range of current-day software design challenges and then proceed on to the meat of this article, which discusses distributed agent-based modeling.

What is ABM Methodology?

What is agent-based modeling? The answer is incredibly simple, yet I invariably find myself frustrated at the inability of some hard-core died-in-the-wool procedural developers to grasp the concept. Here's the whole kernel of ABM methodology in a nutshell:

An agent-based model design is one in which analogs of those real-world entities that are to be modeled are represented as software agents, or objects, at a level of detail and resolution necessary to address the questions the model is required to answer. The agents interact with each other as the model runs, producing dynamic information about the system being simulated.

Some ABM practitioners might quibble with the distinctions between "software agent" and "software object"; if so I encourage them to present their quibbles in the comments section following this article. These quibbles, however, are not important to the thrust of this article, which is how to do develop agent based models in a distributed computing environment.

Now, let's illustrate what this means in the context of a real ABM implementation. The example we will use here is EpiSims, a large-scale distributed epidemiological simulation. EpiSims was designed and implemented by my group at Los Alamos National Laboratory during the mid 1990s. Its purpose is to simulate the spread of infectious disease in large urban populations, and to allow the analyst to evaluate the impact of various proposed intervention strategies to slow or halt the spread of disease. EpiSims is still in use at various locations around the United States.
So, what are the software agents in EpiSims? They are

  • Person agents,
  • Location agents, places where people go throughout the course of a day and come into contact with each other. There are various subclasses of location agents: homes, schools, workplaces, hospitals, shopping centers, mass transit, etc., and
  • A disease agent.

That's it. Those are the agents. Infected person agents carry an instance of a disease agent along with them that defines how disease is transmitted to other person agents when contact occurs at a location, as the simulated people conduct their daily activities. The disease agent also controls the progression of the disease in its Person-agent host.

Person agents are characterized by a small set of demographic information such as age, gender, family structure, ethnicity, and household income which have been identified as necessary for conducting effective disease intervention analysis.

Distributed ABMs

Why go to the trouble to develop a distributed agent based model? The short answer is that there are many problems that are too big to be solved in a serial computing environment. Again using EpiSims as an example: the city of Chicago has a population of approximately 8.6 million people, and over 2 million households. That's a lot of software agents. The memory requirement represented by this ABM design is too large for most single-CPU environments. The computational requirement likewise cannot be supplied by a single CPU.

The question then becomes: how best to develop an ABM design that can take advantage of the hundreds-to-thousands of processors and large amounts of distributed memory that today's Linux clusters provide?

It turns out that there are a some rules of thumb to consider when developing a distributed design. Here are a few of them:

  • Distribute your ABM as evenly as possible. You don't want underutilized nor over-utilized compute nodes in your distributed runs. Your run will ultimately be limited to the performance of the slowest node in your run configuration.
  • Distribute your ABM in a way so as to minimize message passing requirements between compute nodes. Message bandwidth is slow compared to on-board memory bandwidth.
  • Simple synchronization methods are the easiest to implement, but they typically do not scale well. Start simple, add complexity later as needed for performance.

How to Get Started With a Distributed ABM Implementation

The following sections of this article describe ABM++, an open source (GPL) software framework that allows the developer to implement agent based models in C++ for deployment on distributed memory Linux clusters. ABM++ can be downloaded from The framework provides the necessary functionality to allow applications to run on distributed architectures. A C++ message passing API is provided which provides the ability to send MPI messages between distributed objects. The framework also provides an interface that allows objects to be serialized into message buffers, allowing them to be moved between distributed compute nodes. A synchronization method is provided, and both time-stepped and distributed discrete event time update mechanisms are provided.

ABM++ is completely flexible with respect to how the developer chooses to design his C++ representations of agents. All of the functionality necessary for distributed computation is provided by the framework; the developer provides the C++ agent implementations for his application. Distributed computing functionality is provided by the framework to the application via simple inheritance and containment. The source code includes a simple working example in the Applications directory to illustrate how the framework is used.


ABM++ is a re-engineered version of the distributed computing toolkit that was developed at Los Alamos National Laboratory during the period of 1990 – 2005. EpiSims, TRANSIMS, and MobiCom are three large-scale distributed agent based models developed at Los Alamos that utilized the distributed toolkit. The toolkit was re-engineered and re-implemented in 2009 to make it more modular and extensible.

Tools for Managing Distributed Agents

In a distributed ABM, the agents are distributed across the compute nodes in the cluster. In most applications some agents might be statically distributed: they never migrate between distributed compute nodes after the initial distribution. Other agents are dynamically distributed: they can migrate between compute nodes as the simulation runs. As an example of this, consider a design for a social network model that simulates interactions between all individual persons in a city the size of Chicago, which has a population of 8.6 million people. The agents in this design are
  • individual people, and
  • locations in the city (households, workplaces, schools, shops, hospitals, etc.). For a Chicago model there might be 200,000 non-household locations to be simulated in addition to the ~2,000,000 households.

In this example design, location agents will be statically distributed and person agents will be dynamically distributed. At simulation initialization time all 2,200,000+ locations will be distributed across the cluster compute nodes. Then, as the simulation runs people will migrate between CPUs as their simulated daily activities cause them to move from location to location during the course of a simulated day. Person agents will come into contact with other person agents at locations as a result of the social network mobility patterns, and whatever person agent interactions are of interest can then be simulated.

The ABM++ framework provides specialized container classes that can be populated with information about what CPU all statically distributed agents reside on. This facilitates the ability to send messages between distributed agents. An example distributed ABM is included in the source distribution which demonstrates the used of these specialized container classes.

Time Update Tools

Two methods of time update are provided by the framework: time step and discrete event updates. The provided example framework code includes an example which uses time step updates.

Synchronization Tools

Interprocess communications between compute nodes in a distributed ABM often impose synchronization requirements. In our example social network simulation, person agents migrate between compute nodes as the person agent randomly moves between locations. It is important that both compute nodes be at the same simulated time at the time of each move, otherwise causality errors would be introduced into the simulation if a person agent arrived at a compute node with a different notion of the current simulation time than the node he had just departed.

The current version of the framework provides one synchronization method that uses a master/worker design. This type of synchronization has the advantage of being simple, but it has the disadvantage of not scaling well to thousands of compute nodes. A future version of the framework will include a second synchronization method that utilizes a random pair-wise compute node method that scales well to large cluster configurations.

C++ API to the Message Passing Interface (MPI)

A library is included with ABM++ called MPIToolbox that provides a C++ API to MPI. This API provides an interface to MPI that includes methods for serializing agents into message buffers, allowing agents to be sent via the MPIToolbox between compute nodes in the cluster. The advantage of the MPIToolbox is that it handles the lower-level interfaces to MPI transparently, easing the task of implementing message passing code.

An Example

The Applications directory contains a full working implementation of a simple social network ABM. The agents in the simulation consist of Location agents and Person agents, as described above. The Location agent software objects are statically distributed, and the Person agents migrate between them.

It is intended that the code in the Applications directory be used as a stub, or starting point for actual distributed ABM implementations. In particular, the DSim.[Ch], DistribControl.[Ch], and ABMEvents.[Ch] files are intended to be modified to meet specific application requirements.

Example Problem statement, to be implemented as a distributed ABM

Create 100 locations of the type described above on each CPU of each available compute node. Create 1000 people at each location. Randomly send all people to other locations every 15 minutes. Assume it takes 15 minutes for a person to reach another location from his current location.


This file contains the int main() routine for our example simulation application.
It is in main() that several framework globals are instantiated. It is also here that the simulation end time is set and the simulation is started. One of the globals created is DCtl, instantiated as shown below starting at line 60 of DSim.C :

   // Create an instance of a class object that will perform
   // distributed run control

   DCtl =
new DistribControl();
One instance of the DistribControl class is created on each compute core.


This file contains the method definitions of the DistribControl class. The DCtl object is responsible for understanding the distributed topology of the ABM and controlling the simulation run. A brief description of the public methods of the DistribControl class follows. See DistribControl.C for the details of implementation.
  • Create Distributed Object containers on each compute core. The Distributed Object containers are used to dereference compute core ids where distributed location objects reside.
  • Create a simulation Controller object for each compute core. The simulation Controller object causes time updates to occur.
  • Create an instance of the ABMEvents::TimeStep class. The Controller object uses this TimeStep class to perform rescheduling time step updates.
  • Create some locations on each compute core.
  • Broadcast the location ids that reside on this core to all the other workers in this distributed run.
  • Synchronize with the master so that none of the workers leave DistribControl::Init until they are all done initializing.

This method just causes the rescheduling ABMEvents::TimeStep event to execute each time interval.

This method coordinates with all other compute cores to accomplish a synchronized shutdown of the distributed run.

This method is only invoked on the MPI master core. It uses an MPI Toolbox method to sit in spinlock listening for incoming MPI messages.

This method runs on the master and all worker compute cores. It is a specialized method that is inherited from the TmessageRecipient class in the MPI Toolbox. It handles all incoming messages based on the type of message being received. For example, if the message ID was of type kReceivePerson, the DistribControl::HandleEvent knows that the message buffer contains a serialized representation of a person-agent that is arriving at this compute core, and that the DistribControl::ReceivePerson method is to be called, passing the message body as a parameter from which a new instance of the Person class will be instantiated.

A new instance of type Person is instantiated from the message bugger passed as an argument. The person-agent is then inserted into it's destination location.

This is the method that is called when a person-agent needs to move to a new location. If the destination location is one that is local to this compute core, Location::ReceivePerson is called for that location. If the destination location resides on another compute core, the person-agent is serialized into an MPIToolbox message, and the message is sent to its destination compute core.

This method is called as a result of DCtl having received a message from the simulation master process that synchronization is required. This method will sit in spinlock until it receives another message from the master process to continue simulating.

This method is called after DCtl receives a message of type kSendLocationInfo. The message body contains the compute core id and location ids for all distributed locations that reside on other compute cores. This information is used by DCtl to dereference the compute core id for a distributed location.


This file contains just two methods.

This method is called by DistribControl::Init to create 100 locations on this compute core.

This is the method that is called by the Controller object each time step. It sends all of the person-agents residing in Locations on the compute core to other randomly-selected Locations. Note that this method invokes Location::SendPerson, which in turn invokes DCtl->SendPerson, because only the DistribControl object is aware of the distribution of Location objects on the cluster compute cores.


The TimeStep class is used to define what simulation activities are to occur each time step. The time step interval is defined at line 42, and the time step functionality is defined in the TimeStep::Eval function which begins at line 45:
  1. Call the DistribControl Synchronize method to ensure that all compute cores are synchronized to the same simulation time step.
  2. Call the SocialActivity::MovePeople() method to randomly move person agents between locations.
  3. Reschedule the next time step event.


The Location class is a statically distributed agent in the simulation. It has methods to send and re receive person-agents, and a container to hold them in. Each location has a unique ID, defined at line 27 of Location.h.


The example person agent is defined by the Person class. Person agents are dynamically distributed objects. A Person object has a unique id, and Encode and Decode methods for serializing the person agent data into MPIToolbox message buffers. For this simple example the Person Id is the only data that is serialized at message passing time.

The ABM++ MPI Appliance

As a way to get users up and running with the ABM++ framework described above we have created a virtual machine configured to provide users with an adequate environment for development of C++ MPI applications and hopefully extension of the ABM++ framework itself. Please see the ABM++ User's Guide for instructions on how to use the appliance.

Friday, April 6, 2012

Fun Sound Project

So I got up one morning earlier this week and, as usual, stopped off at the espresso machine in the kitchen before going on in to the home office.  I then followed routine by restarting the VirtualBox Windows XP image in preparation for signing in to my work place's vpn, and reached over to turn on the sound system.

No sound.

My expensive Creative AWE 7.1 surround system had died.  Crap.

That got me to thinking: I'd never really liked the Creative surround sound system all that much.  No matter how I adjusted it, the sub woofer always produced lows that were just too boomy, and the mid-ranges were harsh.

I mulled over what to do throughout the rest of the day, and then started searching for an alternative that evening.  Here's what I came up with.  Since I only use the sound on my office system to play music from my archive of ripped CDs (purchased over the last 20 years -- I have lots of music), RadioParadise, and the local NPR station, and maybe to watch some news video and a little Youtube, I decided to go with a plain old stereo sound this time.

I dug around a bit and found this, the Pyle PVA2 amp.  It's only rated at 60 watts, but that should be plenty for how I intended to use it, and it only costs $54 at!  It's got decent specs, so I figured it would sound ok.

  • Power Output: 2 x 12w (8 Ohm, RMS), 2 x 24w (4 Ohms RMS), 60w max peak
  • 2 microphone inputs
  • DVD VCD-CD tape karaoke input selector
  • 2 mic volume controls, treble/bass controls, and master volume control
  • Frequency range: 20-20khz

Now, what about speakers?  I know!  I have these wonderful old '90's vintage Celestion 9 speakers that have been stored away for about the last 8 years.  These Celestions are still some of the best speakers I've ever listened to.  So I dusted them off and parked them temporarily on my desktop.

My home-built workstation is running Mint 12 and has an Asus M3N78-VM motherboard in it with a VT1708B 8 -Channel High Definition Audio chipset - that's what will drive the system.

I plugged it all together, and wow!  Do those Celestions ever sound good!  I hope they never break, because they haven't been made for years, although a quick check showed that replacement parts seem to be available.

The system sounded so good, that it got me wondering:  how much of the quality is the speakers & amp, versus the on-board audio chipset?  To find out, I bought another 3.5mm - to RCA stereo cable, and hooked up my little Acer Aspire One netbook.

Pardon the messy desk.

I already had Clementine installed on my workstation, so I installed it on the netbook as well and quickly had it scan my music collection.  Clementine is a clean fork of the old KDE Amarok 1.4, back before the folks at KDE garbaged up Amarok 2.x with a bunch of unneeded features and a clumsy, un-intuitive interface.

Then I set up a side by side comparison, where I started the same playlist on both systems, and switched between input sources on the Pyle.

I could not tell a difference.  So, bottom line:  if you want a low-cost, good sounding stereo music system, here's one option.  But you'll have to find your own Celestion 9 speakers.


Monday, April 2, 2012


According to this article, Google Android will surpass Microsoft Windows in terms of number of units shipped in 2016.  From the article:

"By 2016, devices running Windows will be eclipsed by phones and tablets running Google's Android, according to a report by analysts IDC.

More than 90 per cent of the world's PCs still run Windows - but the whole technology landscape is changing around Microsoft's operating system.

By 2016, Microsoft's leading market share of 35.9% [in 2011] will slip to 25.1%. Devices running Google's Android will climb from 29.4% to 31.1%."

Smartphones will show the greatest growth, growing from 916 million shipped last year, to a predicted 1.84 billion units in 2016.

Wednesday, March 21, 2012

Microsoft Windows 8

I was browsing tech news a couple of weeks ago and came across this article about Microsoft Windows 8 and its anticipated mass market release in September or October.  One of the take-aways from the article for me was this bit:

"Microsoft's future path is riding on Windows 8 and its success," said Gartner Inc. analyst David Cearley. "This is a chance for Microsoft to re-establish itself in a market where it's becoming increasingly irrelevant."

The article goes on to point out that the computing architectures that people use are shifting from the traditional PC and rapidly moving towards mobile architectures like Android and IOS tablets and smart phones.

Finally, one more bit caught my attention:

"Windows 8 is radically different from its predecessors. The system won't even have Microsoft's familiar "Start" menu. All applications are spread across a mosaic of tiles, as part of a design Microsoft calls "Metro." The tiles, which resemble road signs, can be navigated with a swipe of the finger on the display screen or with a keyboard and a computer mouse. The tiles also provide a glimpse at the activity occurring in applications connected to the Web, such as email."

Uh, oh.  When Ubuntu recently decided to somewhat arbitrarily come out with their "radically different" Unity interface, users voted with their feet.  Within weeks Linux MINT became the new top Linux Distribution, and has been increasing its lead ever since.

Looks like there are more interesting times ahead for Microsoft.


Monday, February 6, 2012

Ebook Publishing in Linux

Here's an article I wrote for Linux Journal last May on Linux tools that are available for ebook publishing:

Since then, a number of changes have occurred in e-publishing the world, not the least of which is that has become the big gorilla in the epublishing world.  In one swift move last month, Amazon positioned itself to be the the number one book epublishing site by announcing the KDP Select program, as a huge incentive for authors to exclusively publish their works on Amazon.

Here's how the KDP Select program works:  if you as an author of a Kindle-format book chose to sign up for the program, you

  • allow your book to be published exclusively on as a Kindle-format ebook.  In addition, you allow Amazon to place your ebook in the Kindle Owner's Lending Library.
  • In return, Amazon will give you a royalty for each copy of your book that is borrowed, in addition to receiving normal sales royalties.  To jump-start the KDP Select program, Amazon set aside $700,000 for lending royalties for January, 2012, and $600,000 for February.  They promise to make at least $6 million available for lending royalties in all of 2012.
I expect that Amazon saw a flood of authors decide to accept the terms of granting Amazon exclusive publishing rights for their work in return for the additional exposure and royalties that the Kindle Lending Library will provide.

I know that I jumped ship and dis-enrolled my book, Second Cousins from Smashwords, Apple, Barnes & Noble, Sony, and Diesel.  Amazon had already accounted for 95% of my sales anyhow.

Another update from the older Linux Journal post above:  Amazon's book uploader seems to no longer need the special OpenOffice template mentioned in article in order to convert cleanly to Kindle format.  A plain old OpenOffice or LibreOffice-produced file will work just fine, so long as it has the appropriate hyper-linked TOC and heading definitions.

One of these days I might post a how-to for producing a Kindle ebook.


Monday, January 30, 2012

Amazon's New DRM-Enabled Flash Player

On or about January 15 of this year, apparently re-encoded much of their instant video content so that a new DRM-enabled flash player is required to view it. When Amazon customers select one of the newly encoded video selections via the Amazon Instant Video browser interface, the message "Updating video..." appears with a yellow status bar.

The update then fails for any Linux user running a 64-bit system for which the 64-bit version of the Adobe flash player had been installed. On Linux Mint and Ubuntu systems, this 64-bit version of the flash player is installed by

sudo apt-get install flashplugin-installer

After about a week and a half of receiving apologies, but no solution from Amazon, one Linux user presented a partial work-around in this Amazon discussion forum:

Here's the partial work-around (thanks, Andy)

Doug, it runs fine on my Mint 12 after HAL is installed. My OpenSuSe box never had the problem, and I just simply can't do anything on my BSD box (understandably). My guess is that Amazon changed the streaming player to probe something in your hardware like MAC address for DRM, but Flash Access uses HAL to accomplish this task although HAL has been obsolete for Debian-derived distros for some time now.

[...] You can follow the steps below but since I don't know how your system is configured, please perform them at your own risk.

1. Remove/rename .adobe and .macromedia from your home directory
mv .adobe adobe.old
mv .macromedia macromedia.old

2. Remove Flash
sudo apt-get --purge remove adobe-flashplugin

3. Install Flash
sudo apt-get install adobe-flashplugin

4. Verify you have the latest Flash by going to:

5. Test with your Firefox or Chrome (not Epiphany)

Please make sure your hald is running.

The problem with this work-around is that it removes the 64-bit version of the Adobe flash plugin, and installs the 32-bit version which performs horribly on 64-bit Mint/Ubuntu installations, or at least on those installations that have an Nvidia graphics chipset. The 32-bit version of the player is not accelerated, and the video is quality is unacceptable, with very jerky/stop-action rendering.

Lot's of people are complaining that they cannot play new video content for which they have purchased, and alll because Amazon decided to deploy DRM enabled content without properly first testing on Linux.

BTW, I just got off the phone with Amazon instant video support people, and they basically told me "You're on your own, check the discussion forums for how to get the new DRM-enabled player working.  We can’t help you."  It appears that Amazon, which had such a huge win over Netflix by making their flash content available in an OS-agnostic fashion has decided to backtrack.  As one user on an Amazon discussion forum states:

“Wow...epic fail on Amazon's part. I shouldn't have to do this sort of work to get a service I'm paying for to work. People should be fired for this. And not just on the technical side -- there's been no communication from Amazon about the issue. Luckily, I'm in my trial month, and now I'm going to cancel my Prime membership. Oh, well, I guess it's back to piratebay for me....”

I guess I agree: a pretty big misstep was made here.  Up until now I had been fairly impressed by Amazon’s tech support service, but somebody definitely dropped the ball on this one.



Welcome to my new Linux blog!

For the past several years I have written for Linux Journal, Linux Today, and various other journals.  In the spirit of self-publishing, I recently decided to create my own Linux blog as a place to air suggestions, observations, and rants about the life of a Linux user in Microsoft/Apple world.

Please enjoy, and if you would like to be a guest author please feel free to send me your submisions.