2014年2月23日

[ios]調べることメモ

iOS開発でよくわかってないことを調べておこう、というメモ。
いや、わかってないことが多いのだけど、

PROJECT-Deployment Targetにある「iOS Deployment Target」とTARGETS-General-Deployment Infoにある「Deplyment Target」の違い。

ばらばらに設定できるとは思わんかった。
https://developer.apple.com/jp/devcenter/ios/library/documentation/Xcode/Conceptual/ios_development_workflow/#115-Configuring_Applications/configuring_applications.html
項目としては「対応する一番古いiOSリリース」を指定するものらしい。

Quick Helpでは、「IPHONEOS_DEPLOYMENT_TARGET」という設定名のよう。

Code will load on this and later versions of iOS.  Framework APIs that are unavailable in earlier versions will be weak-linked; your code should check for null function pointers or specific system versions before calling newer APIs. 
AndroidManifestにも同じような項目があるけど、こっちがなぜそれぞれ設定できるのかわからん・・・。
エミュレータで試してみよう(Xcode5.1 beta5)。

PROJECT=iOS6.1、TARGET=iOS6.1・・・iOS6.1エミュレータ:OK
PROJECT=iOS7.1、TARGET=iOS6.1・・・iOS6.1エミュレータ:OK

PROJECT=iOS6.1、TARGET=iOS7.1・・・iOS6.1エミュレータ:not valid
PROJECT=iOS6.1、TARGET=iOS7.1・・・iOS7.0エミュレータ:not valid
PROJECT=iOS6.1、TARGET=iOS7.1・・・iOS7.1エミュレータ:OK

これだけ見ると、TARGETで指定した方しか意味を持たないように見える。
ただ、こちらのサイトを見ると、64bit対応とかに関係するみたいだが、よくわからん。
うーん・・・気持ち悪い。

-------------------

TextView1つだけ、みたいなときは、Viewの中にTextViewを置いた方がよいのか、Viewの代わりにTextViewを置いた方がよいのか。

これは、TextViewを代わりに置いた方が良さそうだ。テキストが最後までスクロールされなかった。
とはいえ、毎回そんなアプリでいいわけもなく。

UITextViewは、
@interface UITextView : UIScrollView <UITextInput>
なので、スクロールする成分を持っているし、実際にやってくれた。
いい子だ。

しかし、それをUIViewの中に入れただけで、スクロールを最後までしなくなってしまう。
正確には、フリックすると一番下まで見えるのだが、離すと数行前まで戻ってしまう。
スクロールを持っているのはUITextViewだから、場所が変わっても同じ動きをしそうなものなのだけど、理屈がわからん。
うーん・・・気持ちが悪い。

[mac]Ctrl+Hでウィンドウを隠してほしくない

Mac初心者です。
Mac miniってのを使ってます。

Xcode使うだけだから適当に使えればいいやん、くらいに思っていたのだが、慣れというのは怖いものだ。
普段はWindows+AutoHotkeyを使ってキーバインドを変更しているし、レジストリでCapsLockとCtrlを入れ替えているので、無意識に「CapsLock + H」でバックスペース動作をしようとしてしまうのだ。

それで動かなければいいのだけど、Macの場合はウィンドウを隠す、という動作をしてしまう。
困った。

----

まず、CapsLockとCtrlを入れ替えたい。
Macだと、WindowsのCtrlキーにあたるのがCommandキーだと思っている。
Mac miniはキーボードがなかったので、Windowsで使っているキーボードを使っているのだが、Commandキーは無い。
KeyRemap4MacBookという便利なツールがあり、これはキーバインドを変更できるらしい。また、Macのキーボード設定でも修飾キーの変更ができる。

KeyRemap4MacBookにEventViewerというツールがあって、これは押したキーの種別を表示してくれる。
これで見ると、WindowsキーがCommandキーになっている。Optionキーの代わりはAltキーのようだ。

これを、システム環境設定のキーボードで、CapsLockをCommandに割り当てると、ちゃんとそうなる。
めでたしめでたし。

と思ったのだが、Ctrl+Hの問題が出てきた。
MacでDeleteの動作をするのはCtrl+Hで、Command+Hではない。
Command+Hはウィンドウを隠す、という動作になる。
うーむ。

KeyRemap4MacBookは、自由にカスタマイズするというよりも、カスタマイズのセットがあって選択していくタイプ。
でも、無いセットは自分で作ることもできる。
~/Library/Application Support/KeyRemap4MacBook/private.xmlを変更していけばいいらしい。

<item>
    <name>COMMAND_L+h, p, n, f, b</name>
    <identifier>option.key.hiro99ma</identifier>
    <autogen>__KeyToKey__ KeyCode::H, ModifierFlag::COMMAND_L, KeyCode::DELETE</autogen>
    <autogen>__KeyToKey__ KeyCode::N, ModifierFlag::COMMAND_L, KeyCode::CURSOR_DOWN</autogen>
    <autogen>__KeyToKey__ KeyCode::P, ModifierFlag::COMMAND_L, KeyCode::CURSOR_UP</autogen>
    <autogen>__KeyToKey__ KeyCode::F, ModifierFlag::COMMAND_L, KeyCode::CURSOR_RIGHT</autogen>
    <autogen>__KeyToKey__ KeyCode::B, ModifierFlag::COMMAND_L, KeyCode::CURSOR_LEFT</autogen>
</item>

identifierの書き方がよくわからないけど、とりあえず私の希望は叶えられた。

2014年2月12日

[nfc]Certification Register

2012年・・・9
2013年・・・40
2014年・・・2(2月11日現在)

何の数かというと、NFC Forumの認証機器の数だ。
企業別に行こう。

ACS : 1
BlackBerry : 3
Broadcom : 4
DUALi : 2
HP : 3
INSIDE Secure : 1
MediaTek : 1
NXP : 8
QUALCOMM : 1
Samsung : 10
SFMGCL : 1
Sony : 6
Toshiba : 9
ZTE : 1

ふーん。

2014年2月9日

無題

ふと、iBeaconと同じようなしくみをNFCでやるとどうなるんだろうか?と思った。

認証せず、応答を求めず、となるとポーリング動作しかないだろう。
R/Wからすると、SENS_REQ / SENSF_REQだ。
この段階でデータを一番多く載せられるのは、TypeBのときみたいだ。

が、こういうのを考えるのはあまり意味が無い。
BLEのビーコン系は不特定多数にばらまきたいしくみなのだけど、NFCは通信するときはほぼ一対一前提だ。
なので、やるならいつもの認証無しアクセスで十分。

まあ、そういうどうでもいいことをたまには考えないといかん。

[ble]どういうライブラリが良いものか

AndroidでBLEを使う練習をしている。
TIのSensorTagだけ持っているのだが、ここのサイトにAndroid APIの使い方もひっくるめて書かれているので、参考にしながら作ってみた。
http://blog.fenrir-inc.com/jp/2013/10/bluetooth-le-android.html

作ったのは、これ。
あまり考えずにまねしただけなので、できがいいとか、技を使ったとかはない。
https://github.com/hirokuma/BleTest

 

実装で忘れてしまいそうなところはライブラリにしてしまい、あとは使うだけという状態にしておきたい。
そう思ってBleUtils.javaを作ってみたのだが、どこまでをライブラリにして、どこまでをアプリにするかが決めきらなかった。
SensorTagなんかはペアリングでキーを入力せずに使えるし、ビーコンなんちゃら系はAdvertisingさえ取れれば良いのだろうとか、いろいろ考えてしまう。

そんなわけで、今回はスキャンとそれ以降で分けた。
それ以降、といってもNotificationを受け付けるところしか作っていないのだがね。


以下、どうでもいい話。

 

自分でAndroidのソースを書くと、非常にCっぽい。
今回だって、エラーコードをstatic final intで数値にしてreturnするようにしてるが、たぶんenumとかにしてthrowするのがJavaっぽいんじゃないかね。
どうもね、try-catchってコストが高いというイメージがあって、よっぽどの例外じゃ無い限りはreturnで返すように作ってしまうのだ。
新しい酒は新しい革袋に、というわけではないが、違う言語をやるんだったら自分もある程度リセットしてからやらないといかんし、時代が変わればやり方も変わってくるだろうし。
歳を取ってきて新しいことに追いつく体力が無くなってきたとは思うが、やらないとゼロだ。

でもねー、最近は仕事でコードを書かないようになってきたし、家にいる時間短いしで、なにもできてない。
いろいろとお悩み中だ。

2014年2月4日

[nfc]ゆっくりNFCのことを書く (2)

NFCって、どのくらい届くの?

3cmくらいだったら、だいたい大丈夫じゃないかね。
10cmくらいまではいけるかも。
まあ、無線なので、強さと環境次第だろうね。
それでも1メートルなんてのは無理だろう(Nearじゃないし・・・)。

2014年2月2日

[git]stashって便利だな

お仕事で、git管理するようにしている。
まあ、私は「gitでやるんで、みんなよろしく」というだけなんだけど、たまには自分でちょっと修正したりすることもある。
で、修正中のソースにpullしたいことがある。
そのとき「ちっ」と舌打ちして、「git checkout --」とかで全部元に戻して、pullして、また変更箇所をWinMergeとかで戻す、などということをやっていた。
普段、gitはGUIのツールでやってたのだけど、昨日はなんとなくコマンドラインから実行した。
pullとすると失敗したので、またいつもの作業をするか・・・と思っていると、なんか説明が出ている。
「commitかstashかしんしゃい」みたいなことらしい。
あることは知っていたstashだが、「一時保存して何に使うんだ?」くらいの印象しか持っておらず、試したこともなかった。
試しにstashすると、statusで見たら変更分が消えて、一時保存されていた。
あら、一時保存して、汚れたソースを元に戻すところまでやってくれるんだ!
statusで変更が無い状態になるので、pullしても問題なし。
その後、stash listとかで保存名を探し、stash applyで復帰させられるようだ(stash popでポップするみたい)。
ほほぅ。
まあ、今回は修正したソースが誰も触っていないことがわかっていたのでこれでよかったのだけど、変更されていたらまずそうだ。
どうやらコンフリクトしてくれるらしいので、それでよいのかな。

いろんな人がいるので、GUIで「こうやれば何とかなるので使ってください」という形に持っていかないと、なかなかうまく使ってくれなかったり、変な使い方をして結果的に困ることになったりする。
Git Flowっていう運用がよいという話も聞くので、検討せんといかんな。

家ではTortoiseGitを使ってるのだけど、会社ではGit Extension(だっけ)を使い、MacだとSourceTreeになってる。
Linuxは、SambaにしてWindowsから使うか、コマンド打ちか(GUI環境無しなので)。
SourceTreeで統一したい気もするが、Windowsだとインストールがちょっと会社的に面倒なのだよなあ。

[nfc]ゆっくりNFCのことを書く (1)

忙しい記念に、NFCのことをゆっくりと書いていこうと思う。
「ゆっくり」というのは、1回の記事を短くする、というだけのことだ。
でも、初回だけ長めにする(ストレス発散のため)。


NFCとは?

Near Field Communicationの略。
ここでは特に、13.56MHz帯の無線を使った10cm以内の近距離通信技術を指す。

Suicaのようなおサイフケータイや、IC免許証、パスポート、住基カード、Taspo、社員証のように、「かざす」という動作で何かできるものは、NFCを使ったものが多い。

一時期は、磁気カードがよく使われていたと思う。
カードに黒い帯がついていて、私なんかは出退勤のカードとして使っていた記憶がある。
会員証とかでも使われているんじゃないかと思う。
その置き換えとして使われたりする。

NFCを使うと、ICカードといって、ICが入ったカードを使うことになる。
磁気カードに比べると、当然値段が高い。
にもかかわらず使われているのは、以下のようなメリットがあるからだろう。

  • 他者から読み取られにくい
  • 改ざんが難しい
  • 情報量を多くためられる
  • けっこう丈夫

磁気カードなんかは見えないペンで書かれた文字のようなもので、読む手段さえあれば誰だって読むことができる。
一方NFCは、カードに入っているICと会話をしないと話を聞き出すことができない。
会話して、合い言葉を交わして、そしてようやく本題に入ることができる。

そういうセキュリティを高めた使い方もできるし、もう少し敷居を下げてクーポンのような使い方をすることもできる。
いろいろ考えると、なにに使っていいのかわからなくなってくるが、特徴を考えるとよいだろう。

  • すごく安価にはしにくい(IC入ってるし)
  • 値段を上げるとセキュリティも上がるが、安くてもそこそこ何とかならなくもない。
    • セキュリティMAX、か、セキュリティそこそこ、の2モデルくらいになる
    • お金を扱うことができるくらいのセキュリティを持てる

この特徴が、NFCがはやってるようなそうでもないような、そんな状況の説明にもなってしまう。

2014年1月19日

[nfc]nfc.scをもう一度見てみよう

見ただけで手を付けていなかったnfc.sc。
NFC勉強会に行ってきた後なので、もう少し見ておこう。


できること

  • NDEFの読み書き
    • 読む
    • 書く
    • 更新(読んで、書く)
  • ユーティリティ
    • RTD SmartPoster用NDEF Record作成
    • RTD Text用NDEF Record作成
    • RTD URI用NDEF Record作成
      • Android API 14以下用らしい。
    • NDEF Recordから文字列の取得
    • NDEF RecordからURI取得
    • NDEF RecordのRTD Text判定
    • NDEF RecordのRTD URI判定
  • サーバ連携
    • ソーシャルサービスへのログイン(nfc.scのページ経由みたい)
    • ローカルデータとサーバデータの同期
    • ギフト?

 

「開封されていないギフトの一覧取得」とか「ギフトをunpack」とかいう言葉が出てくる。
なんだろう?


nfc.scの入り口が「開発者」と「アプリを利用したい人」でわかれている。

開発者の方にログインすると、「サービス」なるものを作成することになる。
これが・・・よくわからない。
サンプルソースを見ると、APIキーとサービスコードを使うところがある。
確かに、サービスを追加されるとそれらがランダムっぽい値で作られている。
「サービス転送URI」とか、課金なんて情報も出てくるのだが・・・まだドキュメントが作られていないのかな。

image

 

サーバに置いたりとかはできそうなので、そこまではできそうなのだけれども、どういうデータ管理になっているのかがもやもやしている。

おそらく、なのだけれども、サーバ連携するサンプルのチュートリアルにはタグを作るという過程がなかったので、作ったアプリの画面を開いてからタグをかざして読み込み、読んだデータをローカルストレージに置いて、それをサーバに上げるときに「サービスコード」と「サービスAPIキー」がいる、ということなんじゃなかろうか。

image

ここまで書いてわかったが、nfc.scについて私が困っているのは、nfc.scを使うとなにができるのか、という説明がないというところのようだ。
開発者ブログもあるのだが、あまり更新されていないようだ。

NFC勉強会2014/01/18

タイトル忘れたけど、福岡のNFC勉強会というか集まりというか、そういうのに行ってきた。

仕事のデバッグではまっていたので、会社から直接出かけた。
会社には私用PCは持ってけないので、スライドのデータだけ持っていくことにした。
スライドは一応作ったんだけど、半分寝ながら作っていたので、今回はSlideshareには置かないことにした。
内容は、ここ最近の状況ってことで、AndroidにHCEが載ったことと、RC-S390が出たことなんかをちょっと書いただけだ。

他の話で印象に残ったものをいくつか。

  • Windowsの標準BTドライバはうまく使いにくい。
    • そういえば、「32feet.NET」ってのがあったなあ、と今さら思い出した。
  • nfc.scってよさそうなサービスなんだけど・・・話題にならないね。。。(過去記事)
  • ビットコインはソースが公開されている

nfc.scはやったことがある、と話してしまったが、私が思ってたのはtapeeだった。
早急に調査してご報告いたします(仕事風)。

アンテナが携帯電話背面にあるけど、赤外線みたいに先っちょにあればかざしやすいのに、という話もあった。
使い勝手は別として、技術的にできるのかな?
たぶんだが、そうなるとNFCのタグ側もアンテナ位置を小さくして「ここに当ててください」みたいな事になるんじゃなかろうか。
「とりあえず全面をあわせれば読める」がよいか、「指定した場所に当てないといけないけどアンテナは小さくできる」がよいか。。。
あとは「アンテナが小さくても電磁波が強いので何とかできる」とかか。
NFC HACKSに出ていた距離とアンテナ巻数のグラフを見ると、パッシブでは距離を伸ばすのは難しいような気がした。

いつものことながら、最後は「NFCってどうなんだろう」みたいな話になった。
まーねー、そうよねー。
「かざす、という動作も意外と敷居が高い」という話は納得できるし、「決済するのなら、せめてかざすという行為をしないと気持ちがわるい(近づいただけでやられると、やだ)」というのもわかる。

じゃあ、決済以外でかざしても心理的に抵抗が少ないものはなんだろう?
社員証や学生証みたいな、証明系か。
扉がかざさないと開かないので、両手に荷物を持っていると開けづらいというのはあるんだけど、セキュリティ的にはそれくらい仕方ないかな、と思う。
それ以外、それ以外・・・指定席に座ったとき「本当に私はこの席で良いのかしら?」と不安に思ったときに、かざして確認できるとうれしいかも。

 

ちなみに私がNFCに手を付けた理由は、携帯電話からパソコンにデータを移すローカルな方法がほしかったからだ。
私はP906iっていうドコモの携帯電話を使っているのだが、カメラがついている。
うちにはデジタルカメラで一番ましなのが携帯電話のやつなので、それをパソコンに移動させたいことがある。
SDカードでやればいいんだけど、手間がかかってめんどくさい。
かといって、ネットにデータを置くのは金がかかる(私はパケット課金にしてる)ので、使いたくない。
実家に帰ると、光接続とか、ADSLとか、ISDNとか、そういうのが届かない地域なので、そういうのも考えるとローカルな手段が良い。
ローカルで転送となるとBluetoothがありそうなんだけど、P906iではBTでのファイル転送ができないようだ。
で、、残ったのがNFCというかFeliCaだった、というわけだ。

その形跡は、このサイトの最初がLLCPの話で始まるところなどに残っている。
当時は、LLCPとFALPの違いもわからなくてねぇ。同じようなやり方なんだろうと思ってたのだ。
懐かしい思い出だ。


あと、BLEのお話が少し聞けた。
ビーコン端末も見せてもらった。まあ、見た目上は普通のBLE端末と変わらんけど。

ビーコン端末って、ペアリングとかしなくてもよいから値段が安くできるんだろうな。
前ちょっと書いたが、BLEで遊ぶのに買ったSensorTagだけど、コードを書いて焼きたかったらIARのコンパイラしかなく、それが30万円くらいするらしい。
フリーで使えもするのだけど、リンクサイズに制限がかかり、BLEプロトコルスタックが既にリンクサイズを超しているから実質使えない、ということだそうだ。
でも、ビーコン専用であればプロトコルスタックを削りに削ればいけたりしないだろうか・・・?

と思ったが、プロトコルスタックはバイナリ提供だから手を入れられそうにない。
自分で書くという選択もあるんだろうけど、うーーーーーん・・・。