2014-01-30

UIWebViewのスクロール減速率の初期値がUIScrollViewDecelerationRateNormalでは無いのは何故か

iOSのUIWebViewのスクロールの減速率について。人に説明していると何故かややこしい話になってしまうのは初期値がノーマルじゃないせいな気がした。

UIWebViewの慣性スクロールの減速率を決める _webview.scrollView.decelerationRateの値だが、初期値は UIScrollViewDecelerationRateFast (以降RateFastと表記)になっている。これはUITableView等が 
UIScrollViewDecelerationRateNormal (以降RateNormalと表記)となっているのと違って、より早く減速するためスクロールして指を離した後に進む距離が短かい。変更するには
_webview.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal;
とすれば良いが、これはWebViewの内容によって使い分けるのが良いだろう。一覧リストの様に、目的の物が見つかるまでスクロールし続ける画面であれば、よりスムーズにスクロールできる RateNormal 。記事を読ませるような画面であれば、1画面分づつスクロールできれば良いので RateFast といった具合に。

decelerationRateの型はCGFloatなので任意の実数をセットできそうだが、0.1等をセットしても無視されてしまう。ドキュメントにある様に UIScrollViewDecelerationRateNormal と UIScrollViewDecelerationRateFast しか効果が無い。

ちなみにfacebookアプリで外部リンクを踏んだ時のUIWebViewは RateNormal で、SmartNewsだと RateFast になってる模様。どちらも違和感を感じないので、Webの記事を読む時はどちらでも気にならないのかも。

タイトルの問いに対する答えは、AppleはUIWebViewに表示するコンテンツはWebの記事が多いだろうという仮説でもって、記事が読みやすいようにスクロールがすぐに止まるようにしたのでは無いかと。

このエントリーをはてなブックマークに追加

2014-01-19

瞑想システムのフィードバックはどうあるべきか

瞑想を日々の生活に取りいれる事にした。しかし一度も瞑想をした事が無いため、どのようにして瞑想状態に入るか、また瞑想状態に入ったかどうかを判断する方法がわからない。まずはそこからである。

瞑想のやり方はWebを検索するといくらでも見つかるので、それらを参考にする。そして瞑想の計測方法だが、幸い手元に脳波ヘッドセットのEPOC neuroheadsetと開発者SDKがあるので、これを使う。コードを書くまでもなく欲しい物そのものである Meditation という値が付属ツールで表示できる。

上のスクリーンショットは瞑想に初めて挑戦した時の物、Meditaionの値が平常時と同じ = つまり失敗しているのがわかる。瞑想の修行を積む必要がある様だ。

しかし、瞑想に入ろうとしている際にこの Meditation のグラフに目をやると、同時に Instantaneous Excitement の値が跳ね上がり、所謂雑念に気を取られてしまうのがわかる。瞑想できているかどうかを気にした時点で負けかもしれない。なんらかの方法で瞑想状態のフィードバックを送るとしても、それに気をとられないような工夫が必要だろう。
既にある特許で瞑想装置(ミサワホーム株式会社. 瞑想装置. 特開平5-253302. 1993-10-05)があるが、これは背もたれ後方に配置した照明がアルファ波によって変化するとある。製品化されたかは不明だが、今ならhueを使えば簡単に実現できそうだ。

ミサワホーム株式会社. 瞑想装置. 特許公開平05-253302 より

とりあえず今はリアルタイムでフィードバックするのでは無く、Meditation の値の経過を後で参照できれば良いのでGrowthlForecastに投げるコードを書くとする。

このエントリーをはてなブックマークに追加

2014-01-18

vim-python-pep8-indentプラグインで幸福実現した

Pythonのコーディングスタイルチェックにはflake8を使っていたのだが、インデントルールの次の二つは守れないでいた。
E126 continuation line over-indented for hanging indent
E128 continuation line under-indented for visual indent
具体的にはvimのインデント(Visualモードで範囲選択して = )だとpep8のインデントルールになってくれないので、ignore = E128,E126 していた。

そこで、@seizansに教えてもらった vim-python-pep8-indent を入れたらvimのインデントがpep8準拠になり、ほぼノーコストでpep8対応が完了できるようになった。これは良い。

.vimrcの記述は次の通りにした。
" flake8
NeoBundleLazy 'hynek/vim-python-pep8-indent', {
    \ "autoload": {"insert": 1, "filetypes": ["python", "python3", "djangohtml"]}}

このエントリーをはてなブックマークに追加