TONY0922のブログ

学んだことを適当に記録していくブログです。主にRubyで仕事してます。最近はJavaScriptとObjectibe-C始めました。Titanium関連もちょいちょい触ってます。更新頻度はそんなに高くないので、ご了承下さい。

capistrano の topメソッド

topメソッドが何してくれるのかわからなかったので、調査。

Definition

top() 

Module

Capistrano::Configuration::Namespaces

使い方

namespace :cache do
  task :warm_up do
    # ...
  end
end

namespace :deploy do
  namespace :cache do
    task :restart do
      # ...
    end
  end

  task :default do
    update_code # (1) 同じネームスペースのupdate_codeが呼ばれる。
    cache.warm_up # (2) トップレベルの「cache」ネームスペースではなく、「deploy:cache」ネームスペースのwarm_upが呼ばれる。
  end

  task :update_code do
    # ...
  end
end

(2)でトップレベルの「cache」ネームスペースのwarm_upを呼びたい場合は下記の書く。

task :default do
  update_code # calls the task in the same scope
  top.cache.warm_up # uses the top-level cache namespace
end

参考URL

KiwiをCocoaPodsからインストールしようとしたら、ハマった

使用環境
Xcode 5.1.1
iOS 7.1
CocoaPods 0.32.1

既存のプロジェクトにKiwiを導入したくて、 CocoaPodsにKiwiをインストールさせるために以下を書いた。

platform :ios

target "App_Kiwi", :exclusive => true do #テスト用プロジェクト
    pod 'Kiwi'
end

そんで、プロジェクトのルートディレクトリで下記を実行。

$ pod install
Analyzing dependencies
[!] The platform of the target `App_Kiwi` (iOS 4.3) is not compatible with `Kiwi (2.2.4)` which has a minimum requirement of iOS 5.0 - OS X 10.7.

色々調べた結果、platformでバージョンを指定していないのが、ダメっぽい。

platform :ios, '7.1' #ここで使用しているバージョンを書く。

target "App_Kiwi", :exclusive => true do
    pod 'Kiwi'
end

もう一回チャレンジ!

$ pod install
Analyzing dependencies
Downloading dependencies
Installing Kiwi (2.2.4)
Generating Pods project
Integrating client project

[!] From now on use `App.xcworkspace`.

うまくいった!

参考URL
http://stackoverflow.com/questions/18797180/platform-of-the-target-fubartests-ios-4-3-is-not-compatible-with-kiwi-2-2

CocoaPodsのインストールで色々ハマった。

iOS開発にてKiwiを使って、テストコードを書くために
まずはCocoaPodsをインストールしようとしたのだが、色々ハマったのでメモ。

OS X 10.9.2
XCODE Version 5.1.1

$ gem install Cocoapods

"/Users/user_name/.rvm/rubies/ruby-1.9.3-p362/bin/ruby" -rubygems /Users/user_name/.rvm/gems/ruby-1.9.3-p362/gems/rake-10.3.1/bin/rake RUBYARCHDIR=/Users/user_name/.rvm/gems/ruby-1.9.3-p362/gems/xcodeproj-0.16.1/ext RUBYLIBDIR=/Users/user_name/.rvm/gems/ruby-1.9.3-p362/gems/xcodeproj-0.16.1/ext
/Users/user_name/.rvm/rubies/ruby-1.9.3-p362/bin/ruby extconf.rb
checking for -std=c99 option to compiler... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
        --with-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/Users/user_name/.rvm/rubies/ruby-1.9.3-p362/bin/ruby
/Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:491:in `block in try_compile'
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:443:in `with_werror'
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:491:in `try_compile'
        from extconf.rb:24:in `block in <main>'
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for'
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone'
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:254:in `open'
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone'
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:254:in `open'
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:280:in `postpone'
        from /Users/user_name/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for'
        from extconf.rb:23:in `<main>'
rake aborted!
Command failed with status (1): [/Users/user_name/.rvm/rubies/ruby-1.9.3-p3...]
/Users/user_name/.rvm/gems/ruby-1.9.3-p362/gems/xcodeproj-0.16.1/ext/xcodeproj/Rakefile:37:in `block in <top (required)>'
Tasks: TOP => default => ext
(See full trace by running task with --trace)

You have to install development tools first.
と言われるので、開発ツールが必要らしい。

ここを参考にコマンドを試してみる。

$ xcode-select --install

そこから下記にコマンドをもう一度、試してみる。

$ gem install cocoapods

ダメだ、さっきと同じエラーが起こった。

ここを参考に今度は下のコマンドを試してみる。

$ brew install apple-gcc42
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/apple-gcc42-4.2.1-5666.3.mavericks.bottle.2.tar.gz
######################################################################## 100.0%
==> Pouring apple-gcc42-4.2.1-5666.3.mavericks.bottle.2.tar.gz
==> Caveats
NOTE:
This formula provides components that were removed from XCode in the 4.2
release. There is no reason to install this formula if you are using a
version of XCode prior to 4.2.

This formula contains compilers built from Apple's GCC sources, build
5666.3, available from:

  http://opensource.apple.com/tarballs/gcc

All compilers have a `-4.2` suffix. A GFortran compiler is also included.
==> Summary
🍺  /usr/local/Cellar/apple-gcc42/4.2.1-5666.3: 104 files, 75M

もう一回チャレンジ。

$ gem install cocoapods

Building native extensions.  This could take a while...
Fetching: cocoapods-try-0.2.0.gem (100%)
Fetching: escape-0.0.4.gem (100%)
Fetching: open4-1.3.3.gem (100%)
Fetching: cocoapods-0.32.1.gem (100%)

CHANGELOG:

## 0.32.1

##### Bug Fixes

* Fixed the Podfile `default_subspec` attribute in nested subspecs.
  [Fabio Pelosin][irrationalfab]
  [#2050](https://github.com/CocoaPods/CocoaPods/issues/2050)


Successfully installed xcodeproj-0.16.1
Successfully installed cocoapods-try-0.2.0
Successfully installed escape-0.0.4
Successfully installed open4-1.3.3
Successfully installed cocoapods-0.32.1
5 gems installed
Installing ri documentation for xcodeproj-0.16.1...
Installing ri documentation for cocoapods-try-0.2.0...
Installing ri documentation for escape-0.0.4...
Installing ri documentation for open4-1.3.3...
Installing ri documentation for cocoapods-0.32.1...
Installing RDoc documentation for xcodeproj-0.16.1...
Installing RDoc documentation for cocoapods-try-0.2.0...
Installing RDoc documentation for escape-0.0.4...
Installing RDoc documentation for open4-1.3.3...
Installing RDoc documentation for cocoapods-0.32.1...

お、うまくいった。 ちゃんと、インストールされているのを確認した。

$ gem list | grep cocoapods
cocoapods (0.32.1)
cocoapods-core (0.32.1)
cocoapods-downloader (0.5.0)
cocoapods-try (0.2.0)

インターフェースデザインの心理学を読んだ。(その4)

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

9章 間違えない人はいない

人間にノーミスはありえないし問題ゼロの製品も存在しない 設計前にプロトタイプを作って、どのような誤りをするかを事前にテストしてもらうと良い。 ターゲットにしているユーザに実際に使ってみてもらうと良い。

人がどういうところでストレスを感じるかを調査する上で、非常に有効だと思われる。 アプリを設計する前に自前に使いやすさを図る場合はプロトタイプを作る重要性がやっと分かった。 人はアプリを使う上でファーストインプレッションでそのアプリが使えるかどうかを判断するため、 エラーに関する対応が不適切だとあっという間にユーザ離れを引きを越しかねない。

エラーの対処方法は様々。 間違いを修正する方法は人それぞれである。 年配者のほうが固定的探索(何回も同じ操作をしてしまう)や試行錯誤的探索(やみくもに操作を行う)を行い、ゴールまで時間が掛かるが、若者と同じ作業をこなせることはできる。

なるほど。

10章

人は自分の処理能力を超えた数の選択肢や情報を欲しがる。 しかし、その場合決定することが少ない。 人は選択肢が絞られたほうが決定を下すことが多い。 なので、多くの選択肢を提示しなくてはいけない場合、ある程度数を絞ってやると良い。

提示する選択肢は必ず絞ってやること。

選択肢が多いほど、思い通りになっていると感じる。 最速の方法があっても、ユーザはそれを選ぶとは限らない。 改良されたバージョンを提示するのと同時に前のバージョンも残しておくと良い。

これは判断が分かれるかな。

「お金」より「時間」 殆どのケースでユーザは「時間」や「体験」に共感をもつ。 ユーザリサーチを前提に何を欲しがるかを考える必要はあるものの、時間がない場合は「時間」や「体験」の路線をとったほうが無難。

ケースによると思うけど、「物語」が人の興味を惹きつけるのと同じで、 体験などをユーザにイメージさせたほうが良いかもしれない。

意思決定には気分も影響。 自分のいつものやり方で決断できるとき、製品の見積り額は実際より高くなる。 相手の決断の仕方が事前にわかっている時はそれに合わせて見ると良い。 楽しい気分の時は直感で素早く決断するように求めれば、製品をより高く評価してもらえる。

これは交渉術に非常に有効な手段だと思う。 相手をいい感じにのせて、一気に決断を迫れば、いいかもしれない。

人は支配的な人物に影響される。 グループディスカッションする際は、最初に提案された案に飛びつく場合が多いので注意。 したがって、それぞれの意見を書き出させてそれを事前に回覧できると良い。

これはほんとにそう思う。 グループの中で一つの意見をたたき台にすると起こってしまう弊害だよな。

確信が無いときは人任せにする。 ユーザの行動に影響を与えたいときは推薦文や評価、レビューを活用する。

なんとか高評価を付けてもらえるような仕組みを考えると良いかも。

目の前にある品物のほうが高値になる。 実際の店舗は品揃えさえ良ければ、ネットショップよりも優位に立てる(値段的には)

イメージさせやすいからかな。

インタフェースデザインの心理学 を読んだ。(その3)

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

7章 ~ 8章 までの感想をつらつらと

7章 人は社会的な動物である。

人には生来模倣と共感の能力が備わっている。
ある人にある行動を促したければ、その人に誰か他の人がその行動をしているところを見せる。
人に行動を起こさせたければ、物語を活用する。

そういえば、昔スノボー旅行に言った時、ちょうど冬のオリンピックでスノボジャンプ台を悠々と飛ぶ選手を見て、
真似しようとチャレンジしたら、見事に骨折した思い出があるけど、これは人間の生来の行動原理が原因だったのか。(違)
子供は親の背中を見て育つわけだから、子供に勉強させる習慣を付けたいなら、まず親からその姿勢を見せるべきだな。

オンラインでの交流においては社会的なルールの遵守を期待する。
ユーザビリティデザインの指針の多くは人間同士のやりとりに関する規定に基づいて設計すれば外れない。

インターフェースを対人と行う間隔でやると親しみやすくなるかも。

笑いは絆を生む。
相手に笑って欲しければ自分から笑うこと。笑いは伝染する。

10章で「相手が喜んでいるときは直感で物事を決定する」とのコンボで、
交渉などで場を和ませる時なので、使えると思う。

8章 人はどう感じるか。

人は忙しいほうが満足を感じる。
何かをしている方が良いが、それが「価値ある仕事」でない場合はなにもしないほうが良い。

待ち時間等で何か操作できるようにしておくことで暇つぶしの時間を与えて、ユーザの注意を引きつけられるかも。

人は「見た目」と「感じ」で信用するかを決める。
人は「信用できない」という判断をすぐに下す。拒絶すべきサイトを排除してから、残ったサイトについて信用するかどうかの検討に入る。
したがって、最初の「信用拒否」でふるい落とされないために、デザインをしっかり考える必要がある。

これ重要。あたりまえだけど、改めて指摘されないと意識が向かない。
人の印象の8割が第一印象で決まるのと同様で、ここはしっかりと時間をかけて取り組んでいきたい。

達成が難しいことほど、愛着を感じる。

Paizaとかある程度、プログラミングができないと良い求人を見ることができないサービスとかで利用されている。

将来の出来事に対する自分の反応を大げさに予測する傾向。
顧客からの反応はプラスでもマイナスでもおそらく本人が思っているほど強いものでない。

必要以上に相手の評価を鵜呑みにしないということ。

出来事の最中よりその前後の方が前向き。
目標で将来の計画をたてるためのインターフェースデザインを行う場合、計画を練る時間を長くしてやるほど、ユーザは楽しめるかもしれない。
ユーザの評価は使用している最中よりも2~3日後のほうが良くなりやすい。

旅行前の準備が楽しいという理屈と一緒かな。
また、人間は思い出を美化しやすいので、上記の内容は納得がいく。

インタフェースデザインの心理学 を読んだ。(その2)

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

インタフェースデザインの心理学 ―ウェブやアプリに新たな視点をもたらす100の指針

5章 〜 6章 までの感想 をつらつらと書いていく。

【読書メモ】

5章 人はどう注目するのか。

情報は取捨選択される。
情報を提供しさえすれば必ず注目してもらえると期待してはいけない。
ある情報に注目してもらいたい場合は自分で必要だと思う提示方法よりもはるかに目立つ方法で強調する。

Facebookのお知らせで赤色で更新がある旨表示したり、
ゲームで最新情報をアニメーションで強調したりする。

注意力の持続時間は10分が限度である。
それ以上、集中が必要な場合は適度に休憩を入れること。

ゲーム等で相手をフロー状態に引き込みたいときは3〜5分くらいが、丁度いいかもしれない。
そういえば、ドットインストールも3分までに動画を区切っているのはこういった所を意識しているのかもしれない。

6章 人はどうすればやる気になるのか

目標に近づくほど「ヤル気」が出る。
目標に近づけば近づくほど、目標を達成しようとする気持ちが強くなる。
前進していると感じさせることができればより一層ヤル気が高まる。
(達成率が 0/10 or 2/12 だと同じ進捗度でも、後者の方が進んでいる感が出て良い。)
進捗しているとそれ自体を楽しむようになるし、それに関するコストも払ってくれるようになる。
目標が達成されると急激にヤル気が失われる。(報酬後初期化)したがって、報酬を獲得した後が顧客が離れる可能性が一番高い。

有名な話だとタリーズコーヒーとかのポイントカードがそうかも知れない。
最近だと、Webページの会員登録の進捗状況で利用されるケースが多い。

報酬に変化がある方が強力。
ユーザに求める行動パターンによって強化スケジュールを立てる。
行動の反復を最大限に引き出したいなら、変動比率パターン(何回かに一回の報酬を与えるパターン)を使用する。

ソーシャルゲームのガチャがこれに該当する。

人は予測出来ないと探索を続ける。
情報を少しだけ与えて、さらに情報を得るための手段を提供すると情報探索行動が増える。
情報の到着が予想不能であるほど、人はその情報の探索にのめり込む。

確かにTwitterFacebookで情報の更新が不定だと何度もアクセスしてしまうが、
こういった理屈があるわけか。
ちなみにこういった状態を「ドーパミンループ」と呼ぶが、これから脱却するには
コンピュータの電源を切ったり物理的にシャットアウトするのが一番良いらしい。

内部報酬よりも外部報酬の方がやる気が出る。
外部報酬(お金など)が報酬として最も優れているわけでは無い。
それでも、外部報酬を与える場合は予期しない物であるほうがヤル気を引き出す。
何か目標を達成しようとする行為は意識的なものであると思われがちだが、
無意識的に行われるものもある。そして、時を経て意識的な思考に現れるようになる。

この部分でオモシロイと思ったのは金銭的な報酬(外部報酬)を得てしまうと、
それに依存して、金銭的な誘いがなければ、働かなくなってしまう。
これは子供の躾が外部的報酬ではうまくいかないといった例と非常に似ている。
だから、何か予期しない物を元に働かせるのが効果的かも知れない。

進歩や熟達によりヤル気が出る。
新しい知識や技術を学び、習得することに喜びを感じる。
ユーザが目的を設定し、達成の経過を追えるような仕組みがあると良い。
それが目に見えてわかるようになるとなお良い。
ユーザの定着を狙うなら本能的な欲求(知識向上、他人と繋がる)を促す仕組みを作る。

学習系のアプリなら自分が以前より、これだけ成長出来たというフィードバックがあると良いかもしれない。

欲しいものが我慢できるかは幼少期に決まる。
我慢が苦手な人はものの希少性を示す情報に触れるとすぐに手を出してしまう。

子育てで参考にする。

競争意欲はライバルが少ない時に増す
ライバルが多くなる時はグルーピングして、競争相手を少なくする。

ライバルの存在を目に見えて分かるようにグルーピングしてあげると、
実感が湧いて、競争心を燃やすようになるのかもしれない。
学習系のアプリだと、1000位中何位とかではなく、
千葉県20代の内で何位みたいな感じで、
なるべく小さいグループで競わせて上げれば良いかもしれない。

人は自律性をモチベーションにして行動する。
人は自分が主体となって何かをしたいという気持ちがある。
セルフサービス的な機能を拡張しようとする場合、ユーザーが自分でコントロールできる範囲を増やすようにコントロールすると良い。

逆に言うと、人は受動的になればなるほどモチベーションの低下につながってしまうのではないだろうか。
部下や後輩に仕事をやらせるときに自身が色々コントロールできる範囲を増やしてやれば、
モチベーション高く仕事させることができるかもしれないので今度試す。

続きはその3で

Ruby覚える新人さんには資格勉強を勧めるよ!!

以前、Rubyを仕事で使うにあたって、
ついでに、Ruby認定技術者試験Silverを受験しまして、
無事合格できたので、簡単ですがこれから受ける方のためにアドバイスを
つらつらと書いていこうと思います。

【準備期間】
約一ヶ月
Rubyを既に業務で使われている方はもっと短い期間で取得できると思います。)

【使用した参考書】

RUBY技術者認定試験 公式ガイド (ITpro BOOKs)

RUBY技術者認定試験 公式ガイド (ITpro BOOKs)

→昔から多くの人に使われている公式の参考書。
前半パートの文法はSilverの試験範囲に絞って、掲載されているので、習得の効率が良い。
後半パートの問題集100問は最低2週はやりましょう。
実際の試験問題と同じ問題もよく出てくるので、即答できるものもあります。

Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)

Ruby公式資格教科書 Ruby技術者認定試験 Silver/Gold対応 (EXPERT EXPASS)

→SilverとGold両対応。
参考書としては、SilverとGoldの部分が明確に分かれていないので、正直使いづらいです。
後半の模擬問題集のみ使用しました。
Ruby技術者認定試験 公式ガイド」の問題を繰り返し解いた後で、解くと自分の実力がわかって良いかも。
文法覚えるなら、「Ruby技術者認定試験 公式ガイド」の参考書をおすすめします。

■リファレンスマニュアル
http://doc.ruby-lang.org/ja/1.8.7/doc/index.html
→これを一番多く読みなおした。
String型、Array型、Hash型、File型、Dir型は必ず2回は読みましょう。
後、どれが破壊的メソッドで非破壊的メソッドかも必ず押さえること。
Rubyの破壊的メソッドは必ずしも「!」が末尾に付いているわけではないので、
ちゃんと覚える必要があります。
そこらへんで引っ掛けてくる問題も多数出題されます。

【よく出る問題】
String型、Array型、Hash型、file型、Dir型のメソッドの使い方。
破壊的、非破壊的メソッド
再定義できないメソッド
strfprintの書式
などなど、過去問を解きまくれば出題傾向もつかめます。

以上です。

Rubyを業務で使うことになったんだけど、文法を覚えるのにモチベーション上がらないって方は
是非とも資格勉強と兼ねてやってやると、ヤル気が出るかも!?
受験料がお高いので、是非一発合格を目指して下さい!!