Appleのブランドイメージが、地図アプリでどのように失墜したのかという話

Appleは、今回の地図アプリの件で相当にブランドイメージを落としたと思う。それもブランドイメージのかなり中核の部分を。

調査をしたわけでも、根拠があるわけでもないけれど、私はAppleのブランドイメージの中核は「消費者中心主義」だと考えている。
つまり、企業の都合と消費者の利便性を秤にかけたときに、Appleは常に消費者の利益が大きくなるような選択をしてきたと消費者にみなされている。
このことこそがAppleのブランドイメージの中核ではないかと。


iPodを例に考えてみよう。
iPodが発売された2003年は、mp3ファイルの違法流通が大きな問題になっていた頃だった。
違法な流通を少しでも減らすためにmp3フォーマットの利用を減らしたいレコード会社と、利便性のためにmp3フォーマットを求める消費者の利益は対立していた。
そのような状況下で、レコード会社との関係を重視して著作権保護機能のついたATRACフォーマットを採用したSONYに対して、消費者の利便性を重視してmp3フォーマットを採用したApple
レコード会社重視のSONYと、消費者重視のAppleというイメージが生まれた。


iPhoneを例に考えてみよう
iPhoneが発売された2007年は、2004年に始まったパケット定額制が十分に定着していた頃だった。
パケット定額制により所謂パケ死の恐怖からは免れたものの、キャリアから提供されるサービスは相変わらず2G時代と同じようなテキスト中心のサービスだった。
パケット定額制ではあっても、周波数帯域あたり通信できる情報量に限界があることには変わりが無いので、キャリアはその限界に達しないように通信量を抑えようとしてきたが、パケット定額制により無限に通信できると思った消費者には貧弱なサービスしか提供しないキャリアに不満がたまっていた。

そこにiPhoneが登場した。
iPhoneは従来のフィーチャーフォンと比べると異次元の量の通信を行ったが、パケット定額制の消費者にはそんなことは関係が無かった。
こうして、キャリアの言いなりのフィーチャーフォンと、消費者重視のiPhoneというイメージが生まれた。


Appleのこれまでの躍進を支えた二つの製品により、Appleの消費者重視のイメージが作られた。
しかし、この二つの状況を良く見てみるとどちらも消費者と対立しているのはApple本人ではなく、第三者であるということに気づく。
iPodのとき、消費者と対立したのはレコード会社だった。
iPhoneのとき、消費者と対立したのはキャリアだった。
どちらのときも、Appleは利害関係の外の第三者だった。


では、AppleAppleの利益と消費者の利益が対立したときにどちらの利益を重視するのか。
これまでのAppleの消費者重視のイメージからは消費者の利益を重視するように予想できる。
しかし、地図アプリではAppleAppleの利益を重視し消費者の利益をないがしろにした。


何故Appleがあのような低品質の地図アプリをリリースしたのかは想像するしかないが、報道によるとGoogleとの交渉に失敗したからというものらしい。例えば、こういった報道がされている。
http://www.itmedia.co.jp/news/articles/1209/27/news027.html


Appleが従来通りGoogle製の地図アプリを採用すれば消費者は満足するが、音声ガイドがついていないためAndroidとの競争力は低くなる。Appleが独自の地図アプリを採用すれば、一時的に消費者の満足度は低下するが音声ガイドというAndroidの優位点はなくなる。つまり、Appleの選択は、消費者の満足とiOSの競争力のどちらを優先するのかという選択である。そして、Appleは消費者の利益をないがしろにし、自分の利益を大きくしようとした。これは、従来のAppleのブランドイメージからは大きくかけ離れたもので、この選択はイメージを大きく傷つけることになったのではないのかなと私は考えている。


Appleは消費者重視の会社というような単純なイメージを持っているなら改めた方がいい。
より正確なイメージは、消費者と他社の利益が対立する場合は消費者の味方をするが、消費者の利益と自社の利益が対立する場合には自社の利益を優先するという、ある種普通の会社のイメージだと言える。別に特別な会社ではない。


この戦略の結果はどうなったか。
消費者の利益を重視し消費者の支持を得て、その消費者の数を武器にレコード会社や携帯キャリアとの交渉を優位に運ぶ。
レコード会社はiTunesではCDを安売りさせられ、新人を発掘する金もない。50年経ってもBeatlesを売ってる。
携帯キャリアは高額な販売奨励金を払い、基地局を整備する金もなく、ついにパケット定額制を放棄することになった。
消費者優先の戦略の結果、消費者の利益は失われていく。


Appleに限らないが、プラットフォーマーと言われる会社が、過度に消費者を優遇することを良いことだとは思っていない。
その戦略は長期的に見て消費者の利益にはならない。
(・・・ちょっと校正が足りないかなー?)

過去形で表現する丁寧さについて

http://anond.hatelabo.jp/20091010002215

はてなブックマークを見ていたら、星がたくさんついていて皆さん興味があるかと思ったので補足。

英語における過去形のの文法に関して『英文法 日本人が繰り返す200の間違い』という本に面白いことが書かれています。引用します。

基本的に過去形は3つの遠さ(distance)を表します。1つは時間的な遠さ、つまり、過去の意味。2つ目は現実からの遠さ(非現実)、つまり、仮定法の意味。3番目は相手からの遠さ(隔たり)、つまり、控えめの意味です。自分の気持ちを表したり、人にものを頼む時は過去形を使うと丁寧な響きが感じられるのもこうした理由からなのです。

この例として、

(ex)Do you want cream with your coffee ?
→Did you want cream with your coffee ?(より丁寧)
「コーヒーにクリームは入れますか」

という文があげられています。


私は文法学者でもなんでもなくただ本を読んだだけなので詳しくはわかりませんが、日本語の「よろしかったでしょうか」の「かった」の部分も過去形を使ってはいますが、過去形としての意味はなく丁寧語としての意味でしかないのではないかと思います。


言葉のもともとの意味どおりに受け取ると、おかしな表現をしていると言うことは「よろしかったでしょうか」以外にもたくさんあって、芦ヶ原 伸之さんの本で昔読んだ例では、「お電話かわりました」という表現はおかしい、なぜなら電話は変わっていないから電話をかけている人が変わったと言うべき、なんてものもありました。(芦ヶ原 伸之さんはパズル作家であって文法学者ではないので上記発言はジョークです。)


ほかにも、ファンタ!のCMでは、「そ〜だったらいいのにな そうじゃないからファンタ!飲もう」と歌われいています。これも、「そ〜だったら」の部分が過去形です。こちらは非現実を表す過去形でしょう。


誰かほかの言語でも過去形が丁寧や非現実を表す例があったら教えてください。

Python 29日目(複雑なルールでのソート)

Text Processing in Pythonを少し読んでみた。
http://gnosis.cx/TPiP/chap2.txt


チャプター1は難しいらいいので、チャプター2から。


リストのソートをするときに、普通でない方法でソートする。

適当な文字列を要素に持ったリストLがあったとして、通常のL.sort()では、頭文字でソートするが、
それを4文字目でソートしたい。というような、通常でないソートをする方法。


リストのメソッドsort()は、通常は引数をとりません。
ですが、実は引数をとれます。

cmpのような大小を判断して、-1,0,1を返すような関数を引数に与えることができます。

cmpのような関数を自分で作ってやれば、複雑なルールでのソートにも対応できるというわけです。



では、通常は大小の比較のできない複素数複素数の絶対値でソートしてみます。

>>> import random
>>> L = [random.randint(1,10)+random.randint(1,10)*1j for i in range(20)]
>>> L
[(10+3j), (4+2j), (7+5j), (2+4j), (6+1j), (2+3j), (2+6j), (5+4j), (2+1j), (1+3j), (2+2j), (5+1j), (3+1j), (2+7j), (2+8j), (9+4j), (3+9j), (8+4j), (6+10j), (2+2j)]
>>> def cmpComplex(complex1,complex2):
	return cmp(abs(complex1),abs(complex2))

>>> cmpComplex(L[3],L[8])
1
>>> abs(L[3])
4.4721359549995796
>>> abs(L[8])
2.2360679774997898
>>> L.sort(cmpComplex)
>>> L
[(2+1j), (2+2j), (2+2j), (1+3j), (3+1j), (2+3j), (4+2j), (2+4j), (5+1j), (6+1j), (2+6j), (5+4j), (2+7j), (2+8j), (7+5j), (8+4j), (3+9j), (9+4j), (10+3j), (6+10j)]
>>> for i in L:
	print abs(i)

	
2.2360679775
2.82842712475
2.82842712475
3.16227766017
3.16227766017
3.60555127546
4.472135955
4.472135955
5.09901951359
6.0827625303
6.32455532034
6.40312423743
7.28010988928
8.24621125124
8.60232526704
8.94427191
9.48683298051
9.8488578018
10.4403065089
11.6619037897

と絶対値の順に、ソートされたわけですが、絶対値が同じ要素に関しては、元のリストのままの順番が維持されるようなcmpComplex関数になっているようです。


絶対値が同じ場合は実数部分でソートするような判断する関数を作ってやればよいのでしょう。


最初はこんなやり方を考えたのですが、比較関数を作ったほうが断然簡単ですね。

>>> L = [random.randint(1,10)+random.randint(1,10)*1j for i in range(10)]
>>> L
[(8+4j), (6+7j), (2+8j), (5+5j), (5+9j), (2+5j), (1+3j), (2+7j), (7+10j), (7+8j)]
>>> LL = zip(map(abs,L),L)
>>> LL
[(8.9442719099991592, (8+4j)), (9.2195444572928871, (6+7j)), (8.2462112512353212, (2+8j)), (7.0710678118654755, (5+5j)), (10.295630140987001, (5+9j)), (5.3851648071345037, (2+5j)), (3.1622776601683795, (1+3j)), (7.2801098892805189, (2+7j)), (12.206555615733702, (7+10j)), (10.63014581273465, (7+8j))]
>>> LL.sort()
>>> LL
[(3.1622776601683795, (1+3j)), (5.3851648071345037, (2+5j)), (7.0710678118654755, (5+5j)), (7.2801098892805189, (2+7j)), (8.2462112512353212, (2+8j)), (8.9442719099991592, (8+4j)), (9.2195444572928871, (6+7j)), (10.295630140987001, (5+9j)), (10.63014581273465, (7+8j)), (12.206555615733702, (7+10j))]
>>> L = [i[1] for i in LL]
>>> L
[(1+3j), (2+5j), (5+5j), (2+7j), (2+8j), (8+4j), (6+7j), (5+9j), (7+8j), (7+10j)]

【追記】
調べてみたらもっと上手なやり方があったようです。
http://d.hatena.ne.jp/yumimue/20071218/1197985024


簡単な関数で比較できるなら、sortメソッドのkeyという引数に関数を渡せばよい。よって、複素数の絶対値でソートするなら以下のコードで十分。絶対値が同じになったときにどうするか、例えば実数部分でソートする、ということまでやりたいならやはり比較する関数を書く必要があるでしょう。

>>> import random
>>> L = [random.randint(1,10)+random.randint(1,10)*1j for i in range(10)]
>>> L
[(7+6j), (8+1j), (5+7j), (7+9j), (9+9j), (4+1j), (5+8j), (6+6j), (9+9j), (3+5j)]
>>> L.sort(key=abs)
>>> L
[(4+1j), (3+5j), (8+1j), (6+6j), (5+7j), (7+6j), (5+8j), (7+9j), (9+9j), (9+9j)]
>>> for i in L:
	print abs(i)

	
4.12310562562
5.83095189485
8.0622577483
8.48528137424
8.60232526704
9.21954445729
9.43398113206
11.401754251
12.7279220614
12.7279220614

マジコン問題を理解するための不正競争防止法解説

まず不正競争防止法の目的を理解してください。


不正競争防止法の目的は不正な競争を防止すること「ではありません」
それは手段であって目的は、国民経済の健全な発展です

第一条  この法律は、事業者間の公正な競争及びこれに関する国際約束の的確な実施を確保するため、
不正競争の防止及び不正競争に係る損害賠償に関する措置等を講じ、もって国民経済の健全な発展に寄与することを目的とする。 

これは、特許法も同様です。
特許法の目的は、発明を保護することではなく、産業の発達です。

第一条  この法律は、発明の保護及び利用を図ることにより、発明を奨励し、もつて産業の発達に寄与することを目的とする。 

どちらの法律も産業を発展させることを目的としていますが、
これらの法律がない場合、産業は発達しないということでしょうか?

いかなる規制も作らない場合

ゲーム機、電化製品、薬などを新規開発し、その製品が大ヒットしたとします。
すると、他の競合他社は新規開発した製品のコピーを作ります。
競合他社は研究開発費が必要ないため、安く作れるようになります。
この状態が続くと、新規開発しても利益を上げられなくなり、
どの企業も新しい技術を開発しなくなります。

他社によるいかなる利用も禁じる場合

では、ゲーム機、電化製品、薬などを新規開発した企業にその製品の販売を独占する永久の権利を与え、
他社の新規参入を永久に規制するようにしてはどうでしょうか?
このような永久の権利を与えると、未来永劫利益を上げ続けられるわけですから、
これでも、企業は新規開発を怠るようになります。

どちらの方法をとっても産業が発達しなくなることが予想されます。

産業を発達させるには

規制が全くない場合も、永久の規制を課す場合も産業は発達しません。
どうすれば、産業が発達するでしょうか?

特許法が採用している方法は、新規に発明した個人・企業に一定期間の独占権を与えるという方法です。
これなら、一定期間は独占できるのでコピーは作られずその期間に利益を上げられ、
永久に独占できるわけでもないので、新たに優れた製品を開発する動機付けになりえます。

コピーを完全に野放しにすること、新規参入を完全に妨害することとの間でバランスを取っていると考えると分かりやすいと思います。

不正競争防止法

不正競争防止法は、産業を発達させるために、商標のコピー、
製品のコピーなどのフリーライドを防止する法律だと理解すると分かりやすいと思います。

不正競争防止法特許法著作権法などの知的財産権の枠組みは、
不正なコピーは容認しない、独占する権利は与えるが何らかの形で制限を設ける、
両者のバランスを取ることで産業を発展させるというものです。


ここまでが前提知識です。
よく読んで、理解してください。


chnpkさんの主張は、ユーザーは安い製品を求めるし、コピーをなくすことはできないのだから、
コピーがあることを前提としたビジネスモデルを考える"べき"だ、
裁判で規制してユーザーに不便を強いるビジネスモデルは業界が腐敗し、
海外企業に市場をとられるという主張だと理解しました。


不正競争防止法は、ユーザーがコピーであっても安い製品を求めることは否定していません。
コピー製品の製造・販売・輸入輸出を行う「企業」を排除する法律です。

任天堂はユーザーの倫理を前提としたビジネスモデルを作っているのではなく、
現在の知的財産法の枠組みを逸脱している企業を訴えただけです。

私には、訴えるべきではないという主張も、
海外企業であればコピーを前提としたビジネスモデルを構築できるという主張も意味が分かりません。


http://d.hatena.ne.jp/chnpk/20090302/1235971461
このエントリーへの反論として書きました。

Python 28日目

リストのインデックス・スライスで、範囲外の引数を指定したらどうなるのかって「初めてのPython」には書いてなかったと思い込んでいたら、pp.151のまとめ演習のページがあった。

演習のページなので、答えが書いてあるわけではないが、最初に読んだときは余り重要ではないかとおもって、読み飛ばした。

リストのメソッド

リストのメソッドは全部で9つ。
ここを参照すればすべて載っている。
http://www.python.jp/doc/release/tut/node7.html#SECTION007100000000000000000

では、これをおぼえていく。おぼえるためにリストのメソッドは、append,extend...と呪文を唱えるようにおぼえるよりも、似た機能に分類したり、似た機能の似ていないところとを確認した方が私はおぼえ易かった。

私の場合は(上記チュートリアルも同じだが)このようにまとめた。

リストに要素を加えるメソッド

append
extend
insert

appendとinsertはほとんど同じ。
appendは最後にしか要素を加えられないが、insertはインデックスを指定して任意の場所に要素を加えられる。
extendはリストのスライスを使って末尾にリストを加える操作と同じ。
プラス演算子+を使ってもほぼ同じことができる。
extendと+の違いは、extendは値を返さないが、+は値を返す。

>>> a=range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a.extend([2,3,4])
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4]
>>> a+[2,3,4]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 2, 3, 4]
リストから要素を取り除くメソッド

remove
pop
removeは引数に要素をとり、
popはインデックスをとる。

リストの状態を調べるメソッド

index
count
これはどちらも引数に要素をとる。

リストを並べ替えるメソッド

sort
reverse
どちらも引数なし。


Python 27日目

リストのスライスについて
aをリストとすると、
a[num1:num2]と2つの整数をコロンで区切るとスライスになる。
num1,num2はすべての整数。
整数以外ではエラーが返される。
a=range(10) に対して、
a[-2000:2000]
としても、エラーにはならない。
無効な数字が無視され、有効な部分のみが残り、
a[0:10]と解釈される。



リストのスライスの恒等式
a[:n]+a[n:]=a
len(a[n:]) = len(a) - n
len(a[:-n]) = len(a) - n
a[n:n] = []
a[:] = a

len(a[num1,num2]) = num2 - num1
num1,num2が同符号のとき

>>> a=range(10)
>>> len(a)
10
>>> len(a[:-3])
7
>>> len(a[3:])
7
>>> a[:5]+a[5:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> len(a[2:5])
3
>>> len(a[-9:-2])
7


リストのスライス 引数が3つのとき
リストのスライスは3つ目の引数に0以外の整数を指定することで、
スライスのステップを指定できる。
a[num1:num2:num3]
a[1:7:2]
区切りはすべてコロン。

num3に1を指定する意味はない。
それなら指定しなければいい。
num3に0を指定するとエラーが出る。

num3には負の整数を指定できる。
num3が負のとき、要素が1以上のリストを返させるには、
num1>num2である必要がある。

>>> a=range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[2:5:-1]
[]
>>> a[5:2:-1]
[5, 4, 3]
>>> a[2:5]
[2, 3, 4]

このa[5:2:-1]とa[2:5]の違いに注意する。num1,num2に含まれる数字は同じだが、
出てくる要素は異なる(順番が違うだけじゃない!!)。
スライスを簡単に理解するために、num1,num2が要素の「間」を指すという考え方があるが、
その考え方を採用すると、num3に負の整数を指定した場合との整合性が取れない。(数値がずれる)
num3が正負どちらも統一的に理解する方法は、やはり、num1,num2は要素そのものを指していて、
num1は含むがnum2は含まないと言う理解の仕方しかない。

良くある表現
逆に並んだリスト[::-1]
奇数番目の要素のみ、[::2]
偶数番目の要素のみ[1::2]
[::]、有効な表現だが、あまり意味のない表現。
全ての要素は[:]で十分。

>>> a=range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[::2]
[0, 2, 4, 6, 8]
>>> a[1::2]
[1, 3, 5, 7, 9]
>>> a[::]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Python 26日目

2 リストのスライス
引数がひとつの場合はスライスではなくて、インデックスの方が正しいと思う。


引数が2つの場合


インデックスのときとは異なり、引数が整数である限りエラーは出ない
よって、引数の範囲はインデックスほどは気にしなくてよい


スライスによって、1つ以上の要素を持ったリストを返すためには、
num1

IDLE 1.2.2      
>>> a = [1 , "text", 1+4j,[1,2],(1,2),{1:"text"}]
>>> a
[1, 'text', (1+4j), [1, 2], (1, 2), {1: 'text'}]
>>> for i in a:
	print type(i)

	
<type 'int'>
<type 'str'>
<type 'complex'>
<type 'list'>
<type 'tuple'>
<type 'dict'>
>>> for i in range(6):
	print type(a[i])

	
<type 'int'>
<type 'str'>
<type 'complex'>
<type 'list'>
<type 'tuple'>
<type 'dict'>

よくある表現
リストの最初の要素:list[0]
リストの最後の要素:list[-1]

ちなみにリストの名前をlistにすると、文字列などからリストを作る関数listを上書きしてしまうので注意