2014/02/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/02/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/02/09

無題

ふと、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/02/04

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

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

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

2014/02/02

[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がはやってるようなそうでもないような、そんな状況の説明にもなってしまう。