タブレット機で電話したい
こんばんは。
「タブレット機(iPadやGalaxy Tabなど)で電話したい」と言うと、たいてい怪訝な顔をされるか、スルーされて反応がありません。
彼らの頭の中にはバカでかいタブレット機を、枕のように横顔にあてて歩きながら電話する私の姿が思い浮かぶのでしょう。僕だって街中でそんなことはしないと思います。それがマイク付きイヤホンを使ってるとしてもあまり変わりません。
そうではなくて、テレビ電話またはボイスポイントとして、仕事や家族で使いたいという意味です。
iPadを持ってる人は体験済みの人が多いと思いますが、2〜4人でiPadを使うのはかなり勝手がいいのです。用途がゲーム、静止画、動画、ツールのいずれであっても、操作してる人の横や後ろから人が覗き込んでちゃんと場に入り込めます。
また一人で使う場合も、Webブラウズなりゲームなどにおいて自然に(苦労せずに)コンテンツが目に入ってくる画面サイズでもあります。
そう、タブレット機は少人数の場を作ることができるデバイス、あまり不自由なくゆったり使えるデバイスなのです。*1
そんなタブレット機にカメラと通話機能がついたら、こちら側の2〜4人と遠隔地の2〜4人がコミュニケーションを取れるのです。
楽しいと思いませんか?私は楽しいと思います。
今でもテレビ会議システムを整えればできますが、鞄の中に入れて運ぶのは至難の業だし、高価です。でもタブレット機なら、たった数万円の、持ち運びに便利なデバイスでできるし、さらにそのデバイスは拡張性に富み、他の用途にも利用できるのです。
というわけで、iPad 2が発売されたら購入しようかどうか悩んでいるuzakadeuなのでした。
MacでClang(ARM用)
昨日はMac OS X 10.6.5上でClangを使って、Intel x86用のコンパイルを行いました。
今日はMac OS X 10.6.5上でClangを使って、iOS 3.0以上&ARM Cortex-A8用のコンパイルを行います。
手探りでコンパイルできた状況をメモと残したものです。ARMアセンブリは昨日始めたばかりだし、実機上で動作確認できないので、間違ってる可能性大です。そのつもりでご覧下さい。
$ /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.2.1 -I/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/usr/include/ -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/usr/lib -mcpu=cortex-a8 -miphoneos-version-min=3.0 hello.c -O3
生成する中間アセンブリ言語ソースはこんな感じです。_putsをコールするためのベニアが生成されています。
.cstring .align 2 LC0: .ascii "Hello world\0" .text .align 2 .globl _main .thumb .thumb_func _main _main: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 1, uses_anonymous_args = 0 push {r7, lr} add r7, sp, #0 ldr r0, L4 L2: add r0, pc blx L_puts$stub movs r0, #0 pop {r7, pc} .p2align 2 L5: .align 2 L4: .long LC0-4-(L2) .section __TEXT,__picsymbolstub4,symbol_stubs,none,16 .align 2 .code 32 L_puts$stub: .indirect_symbol _puts ldr ip, L_puts$slp L1$scv: add ip, pc, ip ldr pc, [ip, #0] L_puts$slp: .long L_puts$lazy_ptr - (L1$scv + 8) .lazy_symbol_pointer L_puts$lazy_ptr: .indirect_symbol _puts .long dyld_stub_binding_helper .subsections_via_symbols
次にClangでコンパイルする方法です。
$ /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/clang -I/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/usr/include/ -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/usr/lib -arch armv7 -mcpu=cortex-a8 -miphoneos-version-min=3.0 hello.c -O3
生成する中間アセンブリ言語ソースはこんな感じです。_pusをコールするためのベニアが生成されてません。
.globl _main .align 2 .code 16 .thumb_func _main _main: push {r7, lr} ldr.n r0, LCPI0_0 mov r7, sp LPC0_0: add r0, pc blx _puts movs r0, #0 mov sp, r7 pop {r7, pc} .align 2 LCPI0_0: .long _str-(LPC0_0+4) .section __TEXT,__cstring,cstring_literals .align 2 _str: .asciz "Hello world"
気付いた違いをまとめると...
- ARMの場合、分岐命令で指定できる即値アドレスの範囲が小さいので、必要ならベニアを生成して二段階で分岐する必要があります。GCCはアセンブリの出力段階でベニアを生成し、Clangはリンカの配置段階でベニアを生成するようです。
- GCCの方はSPレジスタをリストアしてません。_puts呼び出し後には上位を含めてSPレジスタを使用しないので、そこまで見越したということかも知れません。
今はお金がないので無理ですが、そのうちiOS Developer Programを購入したら実機で確認したいと思います。
以上です。
MacでClang
Mac OS X 10.6.5でClangを使ってみました。
今なぜClangなのか。私は詳しくないのでこの記事やこの記事を参考にして下さい。
さてHello world(hello.c)をGCCとClangでそれぞれコンパイルしてみます。
起動方法 | 内部で起動するプログラム | |
---|---|---|
GCC | $ gcc hello.c | cc1, as, collect2 |
Clang | $ clang hello.c | as, ld |
まずGCCが生成するコードを見てみます。
$ gcc hello.c -S -O3
.cstring LC0: .ascii "Hello world\0" .text .align 4,0x90 .globl _main _main: pushq %rbp movq %rsp, %rbp leaq LC0(%rip), %rdi call _puts xorl %eax, %eax leave ret
次にClangが生成するコードです。
$ clang hello.c -S -O3
.section __TEXT,__text,regular,pure_instructions .globl _main .align 4, 0x90 _main: pushq %rbp movq %rsp, %rbp leaq _str(%rip), %rdi callq _puts xorl %eax, %eax popq %rbp ret .section __TEXT,__cstring,cstring_literals _str: .asciz "Hello world"
ほぼ同じコードを生成しますね。
今回は x86用にコンパイルしましたが、そのうちARM用のコンパイルも試してみようと思います。
以上です。
製品は商いのための道具...という考え方
自分の知能・情熱を余す所なくつぎ込んだ製品を、魂の宿ったアートだと思いたい気持ちが私にはあります。
でもどんなに素晴らしい理想的な製品であっても、人の役に立たないモノは売れません。
人の役に立つモノを適正価格でタイミングよく上手に売ってこそ、商いが成り立ちます。自分の作りたいモノではなく、自分の得意なモノでもなく、ターゲットが欲するモノを提供する必要があります。
そう言う意味で製品は商いのための道具だと言えます。
- 目的は商いで利益を上げること。
- 目的を実現するための道具が、製品、販売戦略、組織、etc。
製品をアートだと考えて悪いわけじゃありません。いろんな考え方があっていいと思います。ただ商いが目的である以上、製品は商いのための道具だと考えるとシンプルになると考えています。
商いは「誰に」「何を」「どうやって」売るかが基本です。他の人との差別化もこの三点を中心に考えます。人の役に立つものを売るからには、「誰に」をまず決めて「何を」「どうやって」売るかを後で考える方が合理的だと思うのです。
以上です。
新製品/新規顧客は敵のいない所で...という考え方
新製品を開発しようと言うと「今までにない画期的な製品」とか「世界で最高の性能/品質」を作りたくなります。
そんな製品を作れたら世界制覇も夢ではないかもしれません。でも、正直なところ、技術的にもリソース的にもそんな製品を作るのは大変です。それに美味しい製品はみんなが参入してきて、収益を保つことは難しそうです。
もちろん「敵のいない所/敵の弱い所」では商売がしやすいので、商品の差別化は必要です。だから技術やリソースが少なくて実現できる差別化を考えだします。
具体的には次のような方法があるかなぁと思います。
- 商圏を絞る。採算上の都合などで敵がいない地域をターゲットにする。特化することで一番になれる。
- 商品カテゴリーを絞る。採算上の都合などで敵がいないカテゴリーをターゲットにする。特化することで一番になれる。
- ライバルとまったく反対の戦略をとる。スーパーの隣にスーパーと品揃えの違う店を出せば、スーパーと競合しないし、スーパーの集客力を利用できる。
敵が多いフィールドで華々しく戦うか、敵のいない所で戦わずに勝つか。
敵と戦うにしてもまず自分を大きくする、武田家や上杉家に対する織田信長のような戦略もあります。
。。。と、昨日の続きで考えてました。
以上です。
難しいですよね、新規開拓営業と新製品開発
きっかけはさておき、主力事業の利益や売り上げが伸び悩むんだり下降すると、主力事業以外を開拓しようということになります。
つまり
- 現在の顧客の別のニーズを開拓する
- 新しい顧客を開拓する
- 新しい製品を開発する
といったことをやろうということになります。
ですが、実際どうやるのかというと難しいですよね。
営業員は今の顧客の継続営業で日々手一杯だろうし、技術者も日々の仕事で忙しいから、なかなか余裕がありません。それに通常業務とは求められる技能が違うかもしれません。
かといって、手を打たないと会社の業績が悪くなるのは目に見えています。
だから会社はそこに適切なリソース(人材、資金、しくみ、ツール、etc)をきちんと投入しなくてはなりません。会社というか経営者かな。
。。。と、ある記事を読んで考えてました。
以上です。