Categories
Uncategorized

Every time you make a PowerPoint presentation…

I found this little gem while searching for images related to the phrase “system of record”:

every time you make a powerpoint

Found at Dataviz. Click to see the source.

For more on what Edward Tufte thinks of PowerPoint, see this page for his book, The Cognitive Style of PowerPoint: Pitching Out Corrupts Within.

Categories
Uncategorized

iOS 9’s lowercase keyboard (or: Business Insider is late to the party, even for them)

we already knew this

If you’re a regular reader of this blog, you already know that iOS 9 will finally get a feature that’s been in Android and Windows Phone for ages: keyboards that show uppercase letters when you’re in uppercase mode, and lowercase letters when you’re in lowercase mode. I wrote about it a month ago, in my June 10th article. I even called it “the most important feature in iOS 9” and posted a video of this new keyboard in action:

Business Insider wrote about it today, and it’s all over Techmeme. That’s a month later, which is slow, even for Business Insider. C’mon, guys, this is your business; this blog is just my hobby.

Categories
Uncategorized

For T-Mobile customers, Canada and Mexico are now the 51st and 52nd states

mobile without borders

T-Mobile’s new “Mobile Without Borders” feature allows its subscribers to treat Canada and Mexico as if they were part of the U.S.. That means that they:

  • Don’t have to pay voice or data roaming fees when using their T-Mobile devices in Canada or Mexico,
  • Get high-speed data service at no extra charge, including LTE where available, when using their devices in Canada or Mexico, and
  • Can call across any of the US/Canada/Mexico borders — even from Canada to Mexico — at no extra charge.

Here’s T-Mobile CEO/Wacky Spokesmodel John Legere announcing what’s happening in 4 minutes and 44 seconds:

“Cross a border, and [AT&T and Verizon]  jack up your rates 120 times for data,” says Legere. “You know why? Just so they can make more money off of you! In fact, they’re projected to make nearly 10 billion dollars in global roaming charges this year at margins north of 90 percent.” He points out that while other carriers offer roaming packages, the onus is on you to guess what your mobile usage abroad will be.

fint printIf you’re thinking “What’s the catch?”, you’re right — there are a few, but in my view, they’re pretty minor:

  • If you’re a T-Mobile customer, you don’t get it automatically; you have to opt in. I’ve already logged into my T-Mobile online account and can’t find any announcements or way to opt in, but this feature was just announced.
  • Customers currently on certain T-Mobile promo plans, such as older unlimited plans or the “bonus 2.5 gig plan”, will have to either switch to a new plan or pay an addition $10/month in order for Mobile Without Borders be available to them.
  • You have to spend more than half your time in the US to qualify. This will disappoint any people who live in Canada or Mexico who were planning on capitalizing on this offering.
  • If you’re on T-Mobile’s Data Stash program, which lets you roll over unused data allotments to the next month, your extra data won’t be available to you while you’re in Canada or Mexico. T-Mobile says it won’t always be this way.

T-Mobile will still have to pay roaming fees to its Canadian and Mexican carrier partners, and it appears that they’ll eat these costs. This tactic is pretty consistent with many of the other ones they’ve used to differentiate themselves from the competition.

As a T-Mobile user based in Tampa (where their service is quite good) and who travels to Canada at least a couple of times a year, this is great news.

Categories
Uncategorized

Goodwill, impairment, and what’s to become of Windows Phone

Goodwill

When someone says “goodwill”, most people in North America don’t think of a spirit of friendship and cooperation. They think of the store pictured below:

macklemore thrift shop 2

…in fact, it’s also the first thing Google thinks of when you say “goodwill”.

Goodwill also has a business definition: it’s the reputation of a business, expressed as a dollar value. This reputation comes from factors such as its brand name, how the business is perceived by its customers and the market, and any intangible “special sauce” that sets the company apart, such as its history, notable high-level employees, unique approaches or processes, and the like. It appears in a company’s books as an intangible asset, unlike buildings and office equipment, which any Business or Accounting 101 textbook will tell you are tangible assets.

For example, Apple has a high goodwill value: it’s $4.6 billion as of September 2014. Google’s is even higher: $16 billion as of December 2014. Packard Bell, not so much.

Goodwill is an arbitrary value, and it isn’t used in day-to-day business. It’s used to help determine the value of a company when it’s acquired. If you live in the world of Silicon Valley startups, you might think that its sole purpose is to inflate the price of a company past its actual book value, but as my friend Mike van de Water (who’s forgotten more about accounting than I have learned) says:

Goodwill isn’t a way of pumping up the value, it’s exactly the reverse – the excess of the purchase price over the fair market value of all the identifiable assets acquired. In Microsoft’s case, that would include tangible assets, such as buildings and equipment, and intangibles, such as licenses, patents, etc.. If those fair market values come up to less than the purchase price, the delta becomes goodwill. Negative goodwill — a.k.a. a bargain — is also possible.

Impairment charge

When someone says “impairment charge”, this is what I usually think of:

nick nolte dui

Nick Nolte: quite possibly the most best celebrity DUI photo ever.
Click the photo for context.

In the world of finance, impairment is a lowering of the value of a company’s capital. It can reflect the decrease in worth of tangible assets — again, the classic “Business 101” examples are buildings and equipment — and intangible assets, such as the aforementioned goodwill.

The term “Impairment charges” are often used to describe the writing off of lost or worthless goodwill, such as AOL’s 2002 impairment charge of $54 billion. It was an accountant-style way of admitting that AOL wasn’t as good as an acquisition as was they’d thought (AOL was technically the buyer because of they were the more valuable company due to their overinflated share prices back in 1999/2000; Time-Warner, as the “grown-up” in the deal, was really doing the buying).

For the purposes of this article, that’s all you really need to know about impairment. If you’d like to dive in a little deeper — and hey, if you’re a regular reader of this blog, you’re that type of person — check out Investopedia’s “impairment charges” page.

Microsoft’s impairment charge

satya nadella unhappy face

Even if you’ve been ignoring all the warnings for the past few years (back in 2012, I wrote “you’d best run away from this platform as quickly as your feet will take you“), there’s no more denying that Windows Phone isn’t long for this world. Microsoft’s latest news release, which bears the corporate-euphemism-laden title Microsoft announces restructuring of phone hardware business, can be boiled down to two key take-aways:

  1. They’re cutting 7,800 jobs, “primarily in the phone business”.
  2. They will “record an impairment charge of approximately $7.6 billion related to assets associated with the acquisition of the Nokia Devices and Services (NDS) business”, and that it’s an “impairment adjustment of its Phone Hardware segment assets and goodwill”.

At this point, you should be asking: “Hmmm…how much did Microsoft pay to acquire Nokia’s Devices and Services business, anyway? Would it be in the ballpark of the impairment charge?” A little Googling — or Binging, if you must — will reveal that it is. When Microsoft completed the acquisition last year, it had spent $7.2 billion.

They’re not saying it with words, but something that means more in business. They’re saying it with the universal language of money: Their mobile device division is worth nothing.

Along with these other statements in the release:

  • that Microsoft is adopting a “strategy to grow a standalone phone business to a strategy to grow and create a vibrant Windows ecosystem including our first-party device family”, and
  • that “the future prospects for the Phone Hardware segment are below original expectations”

…the writing on the wall has never been more clear. They’re getting out of the phone hardware business, and given that they make more than 95% of the Windows Phones, it’s quite clear Windows Phone’s days are numbered.

You know things are bad when Paul Thurrott, a die-hard Microsoft and Windows fan, says that things are coming to an end. I have to agree with his prediction:

Microsoft will cut back on the number of Lumia handsets it makes, a long overdue change. It will wait and see how these new devices perform during the current fiscal year, which runs through June 2016. And it won’t go well: Windows Phone will continue to lose share, and will continue to struggle.

I expect Microsoft to kill Lumia, possibly as soon as mid-2016, and relegate Windows 10 Mobile to third party devices, which can include phones. These phones will never gain any appreciable market share. Tablets will probably continue to do high single-digit or possibly low double-digit market share only for the foreseeable future. The future is the “mobility of experiences,” not Microsoft mobile hardware/phones.

I still love Windows Phone. I desperately want it to succeed. But you can’t get emotional about this stuff. Windows Phone is failing, and has been on a downward trajectory pretty much forever. You can pretend otherwise, but I can’t do that disservice to the community. I can only be realistic. And realistically, things have gone from bad to worse.

Here’s mobile consultant/curmudgeon Tomi Ahonen’s prediction:

So now we see the final stage of this sad play. Nadella will give one last chance for someone other than Elop to try, with only a very reduced portoflio of handsets and with far less staff, to try the miracle of turning this business around. And they warn publically not to expect profits for more than a year. And yes, as the losses will continue, this unit will be shut down. Now the clock is ticking… From 12 to 24 months i the time-frame when Microsoft exists the phone manufacturing business. And Windows Phone side of Windows 10, I would not count on much R&D ivolvement on this dead path. The next Windows version (I would suggest it might be called Windows 11) will no longer bother to support handsets, only tablets and PCs…

As a former Windows Phone Champ, it breaks my heart to see this happening, but as you’ve probably guessed from all the development articles I’ve written on iOS and Swift (as well as the occasional Android piece), I’ve moved on.

Updated Thursday, July 9 for a less hyperbolic description of goodwill and a better description of impairment. I also yanked out a section where I talked about the early days of Windows Phone and the “phone funeral” parade that Microsoft had in September 2010 — I’ll use that story in another article.

Categories
Uncategorized

Geek mug of the day

i square unicode

And yes, you can buy this mug, and in three different sizes, too! Click here or on the photo above to get one.

Thanks to Visual Idiot (@idiot) for the find!

Categories
Uncategorized

Mobile data at US airports and on major US airlines

airplane takeoff

If you’re a reader of this blog, it’s quite likely that when you go to the airport, as soon as you’ve cleared security and found a perch at your departure gate or on your flight, you typically take out a mobile device and go online. You’re not the only one: look around on any plane or any airport lounge, and you’ll easily see dozens of people staring at glowing rectangles in their hands. Air travel consists largely of sitting and waiting, whether on the ground and in the air, and these days, much of that sitting and waiting is made a little less tedious by going online.

Mobile data performance in America’s busiest airports

departure lounge

Creative Commons photo by Phillip Capper. Click the photo to see the source.

The mobile networks performance research firm RootMetrics regularly posts their “RootScore” reports of mobile data performance by the major US carriers in various locations across the country, including airports. Their latest report on mobile data performance at the 50 busiest airports in the nation appears in their 2nd Half 2014 US Airport Mobile Network Performance Review, published in March. It shows how individual carriers’ networks perform at airports, in terms of online access for web sites and apps (which is one matter) and the completion of tasks (a completely different matter).

Yes, many airports do offer free or paid wifi service, but it’s often spotty, overloaded, and slow. There are many times when it’s better to go online using your own mobile data — especially if you have an all-you-can-eat plan — and that’s why this information is so useful.

The infographic below shows a quick summary of the RootMetrics report on airports, but we recommend that you read their writeup for the full story:

mobile data at us airports

Click the infographic to see it at full size.

Wifi offerings on US airlines

in-flight wifi light

While on the ground, you have the option of using your own mobile data plan or going with airport wifi. In the air, where you can’t use your cellular connection but are now allowed to use wifi (which will eventually change the meaning of “airplane mode”), you have to go with whatever wifi service the airline offers.

More recently, Fortune published the article The crazy economics of inflight wi-fi, where they astutely observe that many of the normal rules don’t apply. Paying more doesn’t necessarily get you better bandwidth, and that’s because the various airlines’ wifi services have different business models (most are treating it as a profit center, a handful as a differentiator) and technology (varying satellite technologies, as well as ground-based cellular services specifically set up for air travel). Another factor is that you’re sharing bandwidth with anyone else on the plane who’s using it. If you’re on a flight full of Poindexters doing business while en route, prepare for sluggish connectivity; if you’re on a red eye where everyone’s asleep and you’re on a deadline and pumped full of espresso or Red Bull, that bandwidth might be all yours.

As with the previous story, we’ve made a nice summary infographic for you, but it’s worth it to read the full article:

in-flight wifi on us airlines

Click the infographic to see it at full size.

What do all these bandwidth numbers mean, anyway?

speedometer

Simply put, “bandwidth” refers to the speed at which data is transmitted in a network, and these days it’s typically measured in Mbps, short for megabits per second. If you recall, all computer information boils to down to ones and zeroes — binary digits, or bits for short — and a megabit is about one million of those bits. The chart below should make numbers and rates of bits more meaningful:

Speed
(in Mbps)
Email a picture
(1.5 MB, or 12 million megabits)
Download a song or long PowerPoint presentation
(8 MB, or 64 million megabits)
Download an ebook or short video
(20 MB, or 160 million megabits)
20+ less than 1 second <4 seconds 8 seconds
10 2 seconds 7 seconds 16 seconds
5 3 seconds 14 seconds 32 seconds
1 12 seconds 64 seconds 160 seconds

this article also appears in the GSG blog

Categories
Uncategorized

How to fix the common “no sound from AVPlayer/AVAudioPlayer” problem in iOS/Swift programming

maxwell sound and his shoe phone

Maxwell Smart, the protagonist of the 1960s spy comedy Get Smart, and his shoe phone,
quite possibly the first mobile phone to make regular appearances on a TV show.

swift kickWhile answering this question on Stack Overflow, I noticed that in the “Related” list running down the right-hand side of the page that there were several similar questions. They essentially asked the same question:

I’m not getting any errors, so why isn’t the AVPlayer or AVAudioPlayer in my iOS app playing anything?

I’ve seen this question asked often enough that I’ve decided to post this article as an answer that I can point to from now on.

Here’s the short answer:

Because your AVPlayer or AVAudioPlayer went out of scope just as the sound started playing.

The long answer, complete with code examples, appears below.

To make my point as clear as possible, the examples will be simple: they’ll be attempts at creating an app that plays an MP3 located at a given URL. That way, all you have to follow along is either type in or copy-and-paste code without having to bring a sound file into your project. While these examples use an AVPlayer object to play an online MP3, what I’m demonstrating is equally valid for apps that use an AVAudioPlayer object to play an MP3 stored as a local file or in memory.

First, let’s do it the wrong way

Many “why isn’t my app playing any sounds?” questions on Stack Overflow include code snippets that make the same mistake that I’m about to demonstrate. Fire up Xcode and follow along…

xcode new single view application

Create a new single view Swift application in Xcode, then replace the contents of ViewController.swift with the following code:

// Our quick and dirty sound streaming app,
// done the WRONG way. It compiles,
// but doesn't play any sound.

import UIKit
import AVFoundation // The AV Foundation framework lets us work
                    // with audio and video files

class ViewController: UIViewController {
  
  override func viewDidLoad() {
    super.viewDidLoad()

    println("Setting up.")
    
    // If you'd rather not use this sound file, 
    // replace the string below with the URL of some other MP3.
    let urlString = "http://www.stephaniequinn.com/Music/Pachelbel%20-%20Canon%20in%20D%20Major.mp3"
    let url = NSURL(string: urlString)!
    
    // We'll instantiate our player here, inside viewDidLoad.
    let avPlayer = AVPlayer(URL: url)
    
    println("About to play...")
    avPlayer.play()
    println("...and we're playing!")
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

}

Feel free to run it in either the simulator or on a device. You’ll see a blank screen and hear…nothing. The only feedback you’ll see in the app is in Xcode’s output pane, where you’ll see the messages from the println functions:

output

If you look at the code, you’ll see that everything happens in the viewDidLoad method. The output from the println functions — combined with the lack of error messages and the fact that the code compiled — suggests that code in viewDidLoad is being executed, even though you’re not hearing anything.

Take a look at where the AVPlayer instance is created. It’s inside the viewDidLoad method, which means that its scope is limited to viewDidLoad. Once viewDidLoad has executed its final line, the println function that outputs “…and we’re playing!”, all its local variables go out of scope, including avPlayer, which contains the reference to the AVPlayer object that’s supposed to be playing the MP3. Without that reference, that AVPlayer object gets cleaned up by the system and gets zapped out of existence. Simply put, the app did start playing the MP3, but stopped very, very shortly afterwards; probably on the order of milliseconds.

viewdidload 1

Hopefully, what I just told you gave you the hint for making the app work properly. Let’s try doing it the right way…

The right way

Replace the contents of ViewController.swift with the following code:

// Our quick and dirty sound streaming app,
// done the RIGHT way. It compiles,
// *and* it streams audio from an URL.

import UIKit
import AVFoundation // The AV Foundation framework lets us work
                    // with audio and video files

class ViewController: UIViewController {

  // This time, we'll declare avPlayer as an instance variable,
  // which means it exists as long as our view controller exists.
  var avPlayer: AVPlayer!
  
  override func viewDidLoad() {
    super.viewDidLoad()

    println("Setting up.")
    
    // If you'd rather not use this sound file, 
    // replace the string below with the URL of some other MP3.
    let urlString = "http://www.stephaniequinn.com/Music/Pachelbel%20-%20Canon%20in%20D%20Major.mp3"
    let url = NSURL(string: urlString)!
    avPlayer = AVPlayer(URL: url)
    
    println("About to play...")
    avPlayer.play()
    println("...and we're playing!")
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }

}

Note the difference: this time, we’re creating avPlayer as an instance variable. That means that its scope is the viewController instance. As long as the viewController exists, so will avPlayer. And since this app has only one view controller, it means that avPlayer — and the AVPlayer object it references — will exist as long as the app is running.

Try running the app again. As long as the simulator or device can access the ‘net and there’s actually an MP3 at the URL specified in urlString, you’ll hear that MP3 playing.

viewdidload 2

Once again: the answer to the problem is that your AVPlayer or AVAudioPlayer instance needs to be scoped at the view controller level, and not at the level of a method. That way, the player exists as long as the view controller instance does.