2014-02-16

山城とお別れをした

昨日はymsr送別会、彼と親しかった面々とLTや花火で盛大に山城先生とお別れをしてきた。

人間は死ぬ

身近な友人が死ぬというのは人生初めての経験だった。送別会は悲しい一方で最高に楽しかったのは事実で、印象的だったのは参加者がくちぐちに「気持ちに区切りがついた」と言っていた事だ。自分は一昨日まで葬儀の存在意義がわからず、葬式など必要無いと考えていたのだが、それは死者のためでは無く、生き残った人々のためにあるというのが理解できた。弔いの儀式は人類が古くに編み出した文化的な行為であると。

Bye Bye Yamashiro.

この様なバカ騒ぎをしながら氏を偲ぶのはjava-jaに必要な儀式なのだ。

俺と山城

彼とは職場が一緒になった事は無いが、java-ja.jsというイベントを一緒にやったりしていた。歯に衣を着せぬ物言いをしてくれる貴重な友人でもあった。

最後にちゃんと話をしたのは、同じビルで働いていた時に、職場の近くでランチをした時だ。彼は「Google AnalyticsをGoogleアナルティックスと言い間違えないのは難しい」等と下ネタばかり展開したあげく、「同僚(キラキラ女子)がこない様な店でメシが食いたい、この店は霊圧を感じる。リラックスできない。」と主張しており、この人はなんでサイバーエージェントに転職したのかなと疑問に思ったのを覚えている。

その後、渋谷のキラキラ女子がこない店で一緒にランチを食うという約束が果せなかったのが今でも心残りだ。

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

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"]}}

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

2013-12-17

iOS WebViewアプリ勉強会の資料と補足 #vgadvent2013

この記事はVOYAGE GROUP エンジニアブログ: Advent Calendar 2013の15日目です。

先日社内で行なった勉強会の資料をSlide Shareにアップしました。口頭で説明した内容を追加してあります。


補遺

前提としてiOSのWebView(ハイブリッド)アプリでネイティブアプリになるべく近いLook and Feelを実現する際の話です。

ネイティブとの連係

直近のプロジェクトではコードベースを最小にしたかったので、PhoneGapを使わなかったのですが、最新のPhoneGapは必要な機能を切り出してビルドして使えるみたいですね。素晴らしい。あまり自分で実装したくない所なので、既存で使える物をなるべく使いましょう。

なるべくブラウザ(Chrome)でデバッグする理由

iPhoneシミュレーター、実機ではデバッグしづらいからです。

touchendとclickイベント

clickイベントが遅延する対策としてtouchendを使っても良いと説明しましたが、touchendイベントとclickイベントは発動条件が異なります。具体的にはタッチした後に別の要素まで指を動かして離すとtouchendはFireするが、clickイベントは飛びません。タップしたけどやっぱ辞めた、という動きはclickイベントを使った方が意図した通りになります。
私はFastClick.jsを有効にして、タッチの処理はclickイベントをハンドルしています。

パフォーマンス周り

最後のまとめで覚悟が必要とさらっと書いてありますが、どういう事かと言うと。ネイティブであればiOS SDKが標準で用意してくれる、少ないメモリ、貧弱なCPUでUIを構築するための仕組み、例えばUITableCellの再利用やGrand Central Dispatch(GCD)がHTML5/JavaScriptには無いです。独自で実装したり、WebWorkerを利用してバックグラウンドプロセスで動かすという手もありますが面倒な事に変りはありません。そのあたりをカバーしつつ、レンダリングエンジンの気持ちになって考え、DOM操作を最適化していくという覚悟が必要、という意味です。Androidに比べればWebViewがサクサク動いてくれる、というのが唯一の救い。
初回リリース時は工数のかかるパフォーマンス、アニメーションのチューニングを潔く諦めるのもアリかなと思ってます。いつでも直せるのがメリットなので。

それ以外に大変な事

やった事はありませんが、オリエンテーション対応が必要という場合はもうSencha Touchを使った方が良いと思います。2.3でiOS 7のスタイルも追加されました。個人的にはjQuery mobileよりもおすすめ。学習コスト高いけど。

Advent Calendar明日の担当は@shinbashiさんです。既に記事が公開済みという手筈の良さ、流石ですね。

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