Friday, March 29, 2013

Administering PostgreSQL in Mac OS X 10.8 Server (Server 2.2 and beyond?)

Those who are familiar with the Apple Mac OS X Server software product know that Apple recently deprecated the internal database (MySQL) in favor of the more robust, but lesser known PostgreSQL—or postgres to many, as that was the original name, which we'll use for the rest of this blog post.

For those using Mac OS X Server 10.6 and earlier, MySQL is still the default. From the emergence of Lion (10.7) forward to today's Mountain Lion (10.8) there's no trace of MySQL.

In addition, there's really no way to safely use postgres for custom content (read, non-Server databases) and there's really no way to remotely start and stop a postgres database engine short of turning on remote SSH login.

That's right: even the Server application itself, when used to remotely administer a running instance of Server, cannot start and stop a postgres database, at least of of this writing, via Server 2.2.1 (build 169).

Ok, so what's the best way to administer the postgres database on Mac OS X Server 2.2.1? Via SSH remote login.

Yes, it's clunky and requires the use of Terminal (and a bit of faith that SSH really will provide a secure connection) but it can be done.

Here are the steps for accessing postgres administration via a remote computer that is running a separate copy of the Server application FOR ADMINISTRATION PURPOSES ONLY.  For instance, we choose to administer one of our OS X Server installations from a remote machine (a Macbook Air with the Mac OS X 10.8.3 operating system).

Remember that enabling Server for administration from the remote device is of no benefit  when it comes to administering Server's built-in database engine (Postgres) . . . but at least the remote administration via the Server app does seem to have some limited benefits for those who are hesitant to use command line interface (CLI) to control Server. For those who want to use Server to control PostgreSQL, you're SOL.

1. Launch the Server app on the actual server unit (ours is a Mac Mini using an OS X 10.8.3 base operating system) and click the checkbox next to "Allow remote administration using Server"

2. Either from Server from either the Server app on the actual server unit or from the Server app on a remote Mac, click first on the name of the server (top left corner).

3. Check the check box next to "Allow remote login via SSH" to enable SSH remote login via Terminal. It can be found under the Settings tab in the middle top of the screen as shown in the picture below.



4. If you've installed Server on a remote device (like our Macbook Air) and want to control the postgres database engine, click on the arrow next to the "Allow remote login using SSH" text. This will launch Terminal on the remote machine.

5. You should now see a bit of heartwarming text, noting that  "The authenticity of host 'nun.nnn.nnn.nnn (nun.nnn.nnn.nnn)' can't be established". Don't panic

6. If that line is followed by an RSA key fingerprint, consisting of 16 pairs (32 alphanumeric characters, with each two characters separated by a colon (:) you SHOULD be OK to proceed.  In fact, Terminal will make you second-guess yourself by noting:

Are you sure you want to continue connecting (yes/no)? 

7. After typing "yes" and hitting the return key, you will be met by another ominous warning:

Warning: Permanently added 'nnn.nnn.nnn.nnn' (RSA) to the list of known hosts.

8. At this point, you should be able to proceed by responding to the password challenge. Once you've moved beyond this point, it's just like a standard SSH (or older, non-secure telnet) session. To take control of PostgreSQL, enter the following line:

sudo serveradmin start postgres

9. After another password challenge, the Terminal bash will return the state of PostgreSQL, with a line such as postgres:state = "RUNNING" to confirm postgres is indeed running.

This is a new feature in Server 2.2.1, as Apple has modified the way that it handles custom content. In fact, a recent Apple release note mentions that custom content in Server versions prior to 2.2 will not be migrated when 2.2 is installed.


OS X Server v2.2 now stores Postgres data needed by services in its own database (“/Library/Server/PostgreSQL For Server Services” by default). If you migrate from a previous version of OS X Server, system Postgres data will be migrated from /Library/Server/PostgreSQL to “/Library/Server/PostgreSQL For Server Services”.  Any custom content you may have created in /Library/Server/PostgreSQL will remain there after upgrading to OS X Server v2.2. If you wish to access this data, or if you’re installing OS X Server v2.2 for the first time and wish to create new Postgres data, you may need to start the service with this sudo serveradmin start postgres command. This will start a Postgres process separate from the one used by services, which can be used to serve your own content.


10. To stop postgres, issue the same command as above, but substitute the word stop for start and you should then receive, without a password challenge, the response postgres:state = "STOPPED"

11. Note that the requirement for a password challenge and response is only required ONCE per session, so subsequent start commands or other commands for postgres will not require a password. Be careful, since this means typing sudo serveradmin stop postgres will halt PostgreSQL immediately.

But what if you've opted not to install Server on a remote machine, and just want to hit a quick Terminal window to access the remote Server installation? We'll cover three simple steps in our next blog post.

Sunday, March 24, 2013

2013 Quickbooks Pro "matching" bug persists

Having participated in a number of beta tests for Intuit products, at the request of an Intuit VP after finding a significant calculation error in TurboTax a few years ago, I've had the privilege of working with both Mac- and Windows-based products before they are shipped.

One bug I found—and reported—for the 2012 Quickbooks Pro software continues to be a problem. I wasn't chosen for the 2013 Quickbooks Pro beta tests for either operating system platform, but I've since confirmed that the bug is persistent in 2013.

The error stems from the "Downloaded Transactions" matching feature in Quickbooks. For those unfamiliar with "Downloaded Transactions" this feature allows credit card (or other bank account transactions) to be downloaded into Quickbooks and then matched against entries in the linked account.

For example, if I eat at McDonald's and enter the McDonald's transaction into my AMEX card account in Quickbooks, then later download all the most recent AMEX charges, the matching feature will note that I have a dollar amount and date matching between the "Downloaded Transactions" and the linked QuickBooks account.

It almost works like magic, with the matched charges automatically highlighted by the presence of an orange dot in the Downloaded Transaction window (as opposed to those that aren't matched being represented by a white dot).


I say "almost works like magic" because it turns out that the bug will automatically match transactions with the same amount, even if they are from a date weeks before and from a completely different vendor. This might not be a big deal for some transactions, but it leads to mass confusion when multiple wrong "matches" are registered, and can even lead to doubling up on erroneous entries, since the intended matches are left unmatched in the Downloaded Transactions window.

Here's the real-world example that shows the bug, present in the 2012 Quickbooks Pro beta, is still present in the 2013 shipping versions of QuickBooks Pro.

Having taken an extended trip, where I didn't have time to download transactions every few days, but did have downtime to enter the credit card receipts into QuickBooks (on a few train rides in India and Europe where I didn't have always-on data connectivity), I felt good about keeping up with the expenses for various expense reports.

When I finally reached a place where I could pull down transactions from the past three weeks of multi-continent travel, I noticed that the Downloaded Transactions window had "matched" several earlier transactions with entries in my QuickBooks credit card account register. But rather than matching the ones closest to the date of the transaction, it was matching to transactions from several weeks prior.

In other words, it was a bug around first-in vs last-in (FIFO and LIFO, to use two old computer and Finance 101 terms). Where QuickBooks should have matched to older transactions (FIFO) it was actually matching to the more recent transactions (LIFO).

I was able to repeat this a few weeks later, with a new set of data, where the downloaded transactions contained two pairs of transactions that were both for the same dollar amount ($1.10 for the first set and $2.19 for the second set).

The earliest transactions, one each for $1.10 and $2.19,  had both been for McDonald's purchases, one day apart (12/4 and 12/5, respectively, for the $1.10 and $2.19 amounts). In the credit card account register, those two transactions had been entered, splitting out the tax and food, but equaling the total amounts noted above (although you'll never find those using the Find function in QuickBooks, but that's another bug story for another day).

In addition to the 12/4 and 12/5 McDonald's purchases, there were two other transactions already entered into the credit card account register, a 12/21 McDonald's purchase for $1.10 and a 12/23 Subway purchase for $2.19. The McDonald's is a repeat of an exact same order two weeks later, and the Subway was a promotional deal. Each were clearly entered as McDonald's and Subway, respectively.

When I checked the automated matching for the 12/4 and 12/5 McDonald's transactions, they did not show as marked in the credit card register, but they did show matched in the Downloaded Transactions.


On further inspection, QuickBooks had once again marked off two more recent charges, the 12/21 and 12/23 McDonald's and Subway duo.

To see the "matched" transactions side by side, note the check marks and orange dots in each of the next two images:



The average user of QuickBooks isn't going to pick this up, but will be seriously confused when automated matching mis-matches transactions, leaving the intended transactions without a mate and perhaps causing a QucikBooks user to assume a large check or credit card amount has cleared when in fact it's just's Intuit's ongoing matching error that's at fault.

I sense a liability issue for Intuit if someone's set of matching $9,013.42 transactions are inadvertently mis-matched, especially since the issue has been present for at least two shipping versions of QuickBooks Pro on both Mac and Windows platforms.


Friday, June 29, 2012

To iPad (only) or not to iPad? Introduction

As someone who makes a living—or at least pays the technology hobby bills—partly as a tech journalist and partly as a consultant to startups, extensive traveling is just part of the job.

Along with travel—including significant international travel—comes the requisite gaggle of gadgets, wires, chargers, and receptacle adapters.

For years, I've traveled with a laptop, trading up and down in size (and operating system) to find the perfect balance of power and compactness. From early 10" Sony Vaio laptops, to Apple Powerbooks, to 15" MacBooks and, finally, to the 13" MacBook Air, I've tried it all.

I've even done a few product reviews along the way, testing the use of a widescreen laptop in economy class to see just how much work can be done while staring down at a screen balanced on my ample tummy while trying to peck at the keys. Sometimes it works, at least when fingers fit between the screen and keyboard, until the passenger in front of me decides to kick back and sleep.

One of the last trips, to West Africa, proved the MacBook Air's worth: its thin wedge-shaped front lip could be stuffed down between piles of dirty clothes, virtually disappearing in to a roller-board suitcase during the never-ending stops (where local militia search vehicles for "bombs" or "explosives" while at the same time begging for money).

Could there be an even better approach, though, one that would include a tablet that could be separated from the physical keyboard, allowing for even greater flexibility (or better hiding places) while on the road?

That question, and the sale of my Apple MacBook Air just before last month's worldwide developer's conference, coalesced in to the perfect opportunity to try out the new iPad (iPad 3 for those of us who keep track) as the sole computing device.

Stay tuned in a few days for the outcome of week one of a four-week trip.


Monday, June 11, 2012

What Is Dan Hesse's Sprint Hiding?












The mild-mannered CEO of Sprint (formerly of Embarq and, before that, AT&T Wireless) is a reassuring figure in his TV ads for Sprint: if you have a problem with your service or any questions about Sprint, Hesse says, send an email to Dan@Sprint.com and let him know.

The inference from these commercials is that something will be done to address the problem. The reality is that Dan@Sprint.com is just a PR ploy by Sprint to cover up known problems the company has with various bits of its iPhone and other smartphone provisioning.

One issue in particular that keeps appearing (or disappearing as the case may be) could be called the Case of the Missing Voicemails. Unlike Sherlock Holmes, who tracks down the problem and then corrects it, Sprint is just content to say "we're sorry for the inconvenience, the problem is temporary, we're working on a solution".

The problem with these lines, and others that Sprint representatives use, is that they're not actually designed to find a solution for a customer. In fact, if you hear the words "we hate to lose you as a customer" it really means "yes, we know we can't get our stuff together and make services that we pitch as part of our iPhone or other smartphone packages actually work, but you'll still have to pay $340 per line to leave our service".

Turns out, in the Case of the Missing Voicemail, to use one widespread issue that Sprint is facing, that Dan's company is not just hiding something (a "known issue" that has plagued some users for more than three months) but is in fact obfuscating the facts that the problem is not a temporary one but one that will continue to plague its customers for the length of their contract.

Let's take a look at several ways the company uses "exhausting all options" as a way to create busy work for its customers, so that they'll give up in frustration and just toe the Sprint line.

BlackBerry Visual Voicemail problems. A user on the Sprint forums, known by the handle JTDAV8R, upgraded his device at Sprint's request, but then reported that "my visual voicemail has stopped functioning". (http://community.sprint.com/baw/message/420320)

Like many iPhone users who face the Visual Voicemail break down in service, JTDAV8R reports, "I get no alerts at all when a voicemail is recorded. However if I randomly check the Sprint system the messages are there."

So what is the Sprint response to this type of voicemail issue? Turns out it all revolves around a single button press (#1) to see if any voicemails might have been left in between the time you last checked and the current moment. Ignoring, for a moment, the fact that the phone itself doesn't show a voicemail, and that the visual voicemail (at least on the iPhone) shows NO MESSAGES at all, Sprint insists that randomly calling voicemail multiple times a day is a viable solution. It may be a narcissistic solution, but it's not a practical one and doesn't mesh with Sprint's policy of charging a premium for smartphones like the BlackBerry and iPhone.

Sure enough, JTDAV8R faces the same incompetence in technical support:

"Power off the device and remove and replace the battery and power back on," wrote forum contributor Abe (abe2020). "Update profile by hitting Menu – Settings – System Updates – Update profile (try to leave yourself a VM). Go into the visual voicemail application and compose a visual voicemail message (Hit Menu --- Compose) of 5+ seconds and send to activate@vvm.sprint.com".

Sounds complex enough that it might work, but turns out it's just busy work, as JTDAV8R responded to this suggestion back on May 11, 2012, and has yet to receive an answer to the problem. We know why: there is no solution to this "temporary issue" that Sprint is working to "resolve".

"I've been on the phone numerous times with Sprint customer service + their Blackberry tech group," wrote JTDAV8R in reply to Abe's suggestion. "Have tried a hard reset/data wipe, countless re-boots, another ALT + irmi and even downgraded to the previous version of OS 6. Unfortunately I still have the problem with my visual voicemail, and so far no one seems to be able to pinpoint the source".

"Visual Voicemail is still DOA," JTDAV8R concludes. "No alerts or indications of any kind when someone leaves a voicemail on the Sprint system."

Separating voicemail from phone service. Let's recap: the BlackBerry in question does not indicate in any way that a voicemail has been left, Sprint cannot pinpoint the reason, but the company maintains that there is no problem with their phone service.

The problem with this logic, of course, is one that the company does admit to but obfuscates in hopes of maintaining customers.

"Visual voicemail is not a separate service," a Sprint representative is taught to say. The implication is that the voicemail is just something that comes along with phone service. Yet that's also a point where customers can stress this point: if one part of the phone service is not working, why would customers pay for any part of the phone service over the course of a given service month.

iPhone Voicemail problems. So is this issue just limited to the BlackBerry? No, it is much more widespread than just BlackBerry, spreading to the flagship product that Sprint's Hesse expects to save his company from irrelevance behind AT&T and Verizon: the iPhone 4s.

Why use the term obfuscation when discussing Sprint's approach to voicemail issues on premium smartphones, such as the iPhone 4s? After all it's a term that denotes intentional shunting of responsibility off on to a third party. Turns out that's exactly what Sprint is doing.

"I am no longer getting voicemail notifications," wrote Apple forum user leldance. "Called Sprint and they said it was apple's problem and a software update was needed. Apple denied this and recommended a hard reset which did not work." (https://discussions.apple.com/thread/3874341?start=0&tstart=0)

Again, no indications of voicemails at all, Sprint denies it has anything to do with their network, sends customer to Apple. What's the solution? Turns out there is no solution.

"I was having the same problems as well as a few others and it really is a Sprint problem caused by the iOS 5.1 update," wrote user EvLwMn. "Apparently something about visual voice mail isn't 100% compatible with their system. They know about it and 'are working on it' [eyeroll]."

EvLwMn wrote about this issue on an iPhone 4s back on April 14. Sprint has yet to respond to this user with a solution. Again, no surprise, because there is none.

A possible solution was suggested on one forum, and it may be the one reason that Sprint doesn't want to let customers know that this isn't a "temporary issue" that it tries to convince customers of: there are particular phones that do not work on Sprint's network in the way that it is currently provisioned.

After 9 days," wrote Sprint forum user mehca back on October 23, 2011, "tech support finally had me check my PRL. Settings>General>About>Carrier and tap to toggle to PRL. PRL51082 is a defective phone and needs to be returned. This is a known issue." (http://community.sprint.com/baw/thread/79413)

If the known issue is a requirement to swap out the phone, Sprint could be in for a world of hurt if the issue reaches the average Sprint wireless subscriber.

My experience with Sprint. Having faced a similar issue with not just one but two iPhone 4s devices, starting in March, 2012, I've spent significant time with Sprint technicians on the phone and in store locations, and can attest that Dan's company knows there is a problem but is actively obfuscating in an attempt to maintain customers that are unable to receive a significant service.

After six sessions on the phone and in person in stores, I finally reached out to the "last resort" by writing Dan@Sprint.com.


Direct Contact. Not. Anyone who thinks that Dan Hesse actually reads his emails (at least the ones addressed to Dan@Sprint.com) will be sorely disappointed. An automated response is generated fairly quickly, saying that the company is looking in to the problem and will contact the customer, but the contact is from a general customer service representative. 

Calls to 757-223-3379, the phone number in the email, lands one in a department that is called--and not tongue in cheek, since telcos don't do irony well--the "Dan@Sprint.com" department.

In speaking to the "Dan@" representative, there are key phrases to look for: fancy terms like "partnering with upper management" or "exhausting all possible options" are used as an effective, albeit courteous smokescreen to fully address problems that are taking place at Sprint--ones the company is fully aware of but either not competent enough—or not willing—to fix.

That's an issue I wanted to address, but found that the representatives were trained to ignore that question.

A Similar Story. Rather than spending undue time on my specific story, let's look at one from an online forum that eerily matches my own, where a customer had two iPhone 4s devices (one his own, one his wife's) that not only was not receiving calls but also was not showing voicemails.

"We are not receiving our visual voicemail or notifications of voicemail at all," wrote forum user Medic_Coop. "Yesterday, we were not even getting our calls at all.  They would just go straight to voicemail, and we would get NO notification as to a missed call or a voicemail being received.  So, this is a BIG problem."

Similar to MedicCoop, our two phones don't show that calls have come in, and those that do come in do not show up in the visual voicemail, so there is NO WAY to know that a voicemail has been left.

The Sprint "solution" to a "known issue". Worse, as the "Dan@" representative witnessed, not all voicemails appear: on the sixth round of tech support on this issue, with the "Dan@" representative listening in, a Sprint tech support representative attempted to leave a voicemail.

Not only did the tech support rep's voicemail not appear, but her attempt to leave the voicemail triggered a previously left voicemail to appear, one that the "Dan@" representative had left TWO HOURS earlier.

Faced with that obvious flaw in Sprint's provisioning, what was the "Dan@" representative's response? She said would "partner with upper management" to see what possibilities existed to honor our request to leave Sprint and go to a service provider whose voicemail system actually worked (AT&T is one, Verizon is another).

She "couldn't promise" but she wanted to "exhaust all possible options" and would contact me again the next business day. There was a glimmer of hope because of the failure of Sprint's provisioning right in front of her.

Oh, and I forgot to mention that the tech support supervisor brought in to solve the problem while the "Dan@" representative was on the phone DISCONNECTED us after almost two hours of tech support busy work. One moment the tech support supervisor was there, the next she was gone.

Fast forward to the next business day. Having heard nothing from the Sprint "Dan@" representative by 5 PM, I called and left a message. The representative returned the call, stated that she is "sorry for the inconvenience" and that she "would hate to lose me as a customer" but that the penalty for early termination still applies. So much for "partnering with upper management" to bring some common sense in to the discussion.

I've now asked to speak to a supervisor (upper, upper management, perhaps?) and am told I will receive a call tomorrow after the supervisor researches the issue and "exhausts all possible options" for the "known issue" of voicemail. I hold little hope that this will end well, but there are always next steps beyond the supervisor. Who knows, maybe Dan Hesse will actually read one of his emails...

The irony is that the unlocked iPhone 4s I'm having trouble with performs admirably on other networks, including its visual voicemail, in various parts of the United States and other countries. Even before Sprint representatives admitted there is a provisioning issue, and suggested I get another phone, I have been able to satisfy my own curiosity and know that the issue lies solely within Sprint's sphere of responsibility.

That assumes, of course, that Dan's company will take responsibility for an issue that various Sprint representatives told me required hard resets and soft resets (iPhone) partial resets and full resets (voicemail) and enough update attempts (##UPDATE# or ##873283#) to populate an entire army platoon

Medic_Coop summed up the insanity that is Sprint's obfuscation of a very real problem with basic service provider functionality, speaking of both his and his wife's issues with Sprint's provisioning:

"We both are on call at our jobs (Emergency Medicine) and rely on having phones work when we need them," he wrote. "I know everyone's situation is different, but I know everyone also wants their devices to work properly when needed."

"What is being done to fix this problem," he added, "and what is the time frame?  I have had multiple tech support calls and have 2 different tickets open with them."

That question was written back in October, 2011, almost eight months ago. Seems Sprint's "temporary" problem is on track to celebrate its first birthday in just a few months.



Tuesday, February 7, 2012

Brother, can you spare a card?


About six months ago, when Netflix was back on its heels after jettisoning some 800,000 angry customers, StreamingMedia.com received lots of traction around the whole story including a number of radio and television interviews on the story. One piece that got little attention, though, was our conjecture that Redbox and other kiosk-based DVD delivery systems might prove problematic for Netflix as the DVD-by-mail company morphed into a streaming media delivery giant.

Turns out the hunch about Redbox was right, and it's affecting not just Netflix but also Verizon and Blockbuster. 

Yesterday's announcement that Coinstar, the "coin-operated" company that runs the Redbox kiosks—among other types of entertainment stations—had tripled revenue for the year and was using some of that cash on hand to buy Blockbuster Express kiosks from another point-of-sale company, NCR of cash register fame.

The news sets the streaming world on edge a bit. The Blockbuster Express name was licensed out to cash-register maker NCR for the kiosk-based system NCR had cobbled together to compete against Redbox. The interesting irony here, of course, is that the Redbox name is now being licensed out to Verizon Communications for the streaming service (in much the same way that the Blockbuster name was licensed to NCR for Blockbuster Express).

As I mentioned in the KOMO interview around the Netflix debacle of late 2011, the problem with Blockbuster and Netflix is that neither offer—to steal a marketing phrase from Blockbuster—Total Access to their disparate DVD and streaming libraries.

Coinstar might just be on to something, though, with its simple-to-use kiosks popping up all over the USA (34,000 and counting, before the Blockbuster Express units are accounted for). If it can pull off an equally simple approach to streaming in its newfound partnership with Verizon Communications—especially a non-subscription model akin to the kiosk approach—there just might be hope yet for a "total access" option.

Out of all this comes one truth: the days of brick-and-mortar DVD rentals are well past being numbered, but the pax romana of physical DVD rentals is still ahead. Still, the other major difference between Netflix and Redbox is the one-off impulse rental nature of a kiosk delivery—available to anyone passing a Walgreens, 7-11 or Wal-Mart in any corner of the USA—versus the subscription-only nature of Netflix's DVD or streaming models.

Read the StreamingMedia.com article for more details.

Monday, February 6, 2012

What will the New Era of HP entail?

About this time of year, every other year, HP's workstation division unveils something new. A few years ago it was the z800 workstation, unveiled at a presentation at BMW Designworks, the agency that helped shape the unique design of the z-series cases.

This year, though, HP is moving the event to Las Vegas, and is teasing—complete with 2001:Space Odyssey "monolith" imagery— that a New Era is just over the horizon. We'll keep you informed as soon as we peek over the rainbow, or around the next planet...

Super streaming Bowl fail?

The fine folks at StreamingMedia.com have an article I wrote late last night, after the Super Bowl ended, about the failure of large-scale streaming for those trying to watch the big game on their desktop or laptop computers.

It's touched a nerve, apparently, and the article has rocketed to the top of the most popular list on this  Monday morning after the game. Some commenters are expressing embarrassment over having tried to show their friends the alternate angles offered by the online stream—that is, if you didn't mind waiting a full minute after the game play to actually view the "live" stream.

Something's gotta get better in this whole live streaming scenario...

[Update: The New York Times' Media Decoder blog from Brian Stetler quotes a bit from—and links to— the StreamingMedia.com article.

Stetler notes that NBC is blaming low-quality streams on last-mile issues or "connection issues" as Kevin Monaghan, managing director of digital media for the NBC Sports Group, calls them.  It's disingenuous for NBC to blame last mile issues when a) much higher-quality live content was also delivered across the same networks during our testing and b) there are many consistencies in the overall problems that viewers have commented on—from variable lag times to consistent poor quality at the height of the game's key moment, one of which Monaghan mentions.

It's as if, in the early days of TV, the broadcast engineer says "hey, the signal looked good when it left our building" and it's a reminder that we're in the early days of large, live events—enough so that we can all "blame it on the blockbuster" if the event has problems.

We look forward to eventually seeing the numbers from NBC Sports, which we suspect will show that the adaptive bitrate worked but only if measured by the fact that the number of viewers seeing sub-standard, low-bandwidth streams are considered an acceptable viewing experience.]