読者です 読者をやめる 読者になる 読者になる

colemak の話

こんにちは、 Qooh0 です。 冬の寒さが一段と増してきましたね。 いかがお過ごしですか?

VOYAGE GROUP エンジニアブログ Advent Calendar 2015 の19日目です。

さて、我流でキーボードの打ち方を学んだ人なら「親指が痛くなった」という経験があるかと思います。 私は今年はじめて親指に違和感を覚えるようになりました。

考えられる対策で手軽にできるのは、だいたい下記 3つでしょうか。 1. ストレッチをする 2. キーボードを変える 3. 配列を変える


  1. ストレッチ

'腱鞘炎 ストレッチ' で検索すると、良い方法が見つかるかと思います。

  1. キーボードを変える

いろいろと世の中にはキーボードがあるので、手に合うものを探してみてください。 'Ergonomics' で検索すると、よりよいキーボードが見つかるかもしれません。

また gest.co のキーボードも手に優しそうです。

  1. 配列を変える

大抵の人は 'QWERTY 配列' という配列のキーボードを使用しています。 QWERTY 配列より腱鞘炎の予防に効果があると言われるものに 'Dvorak 配列' という配列があります。 もうちょっと QWERTY 配列寄りで、腱鞘炎の予防に効果があると言われるものに 'Colemak 配列' があります。

私は Colemak 配列を使っています。 Colemak 配列は、母音がスタンダードな手の配置にそって配置されており、 'QWERTY 配列' に比べ指の動きが少なくて済みます。 また、ショルダーハックを防ぐことが出来ます。

Colemak 配列を覚えるのに、下記サイトを使い練習をしました。 http://www.keybr.com/

手が完全に覚えるまで 3ヶ月くらいかかりました。 特に、R と S に苦労しました。 S の位置に R が来るのですが、S を押したい時に R を押してた!ということが良くありました。 R と S などの些細な問題を除けば 1ヶ月もせずに覚えられると思います。

また、変更し始めた時はキーを打つスピードが下がるので、忙しい時には配列の変更をしないほうがいいと思います。 忙しくないと思って、配列の変更をした途端に忙しくなるとかは あるあるだと思います。

そして何より、物理的にキーの位置を変更するとペアプロが、とてもやりにくくなります。 私が 'QWERTY 配列' を使う分には問題ないのですが、他の人に Colemak 配列を使わせようとすると嫌がられます。 どうしてもペアプロをする場合、Mac のキー配列を QWERTY 配列に戻したりしています。

私個人としましては変なキー配列にすると苦労するので、物理的に楽なキーボードを試しまくることをお勧めします。

hubot で雑談したり、FAQ に答えてもらう

メモ

TL;DR

https://github.com/Qooh0/myhubot
script ディレクトリ以下に hubot + Slack で DoCoMo の雑談API と FAQ API に対応したスクリプトを置きました

■ hubot を触る

https://hubot.github.com/docs/
上記に書いてあるとおりにインストールすればOK
npm install -g yo generator-hubot を実行

その後

mkdir myhubot
cd myhubot
yo hubot

で入力していきます。
adapter を聞かれたら、 slack と入力します。

■ hubot を実行する

簡単なのは、実行スクリプトを書くことです。

[2015-09-06 19:04:36] % cat start-el.sh
#!/bin/zsh

cd src/myhubot
export PORT=10001
export HUBOT_SLACK_TOKEN=wwwwww
export DOCOMO_API_KEY='xxxxxx'
export DOCOMO_CLIENT_SECRET='sample'
export DOCOMO_CLIENT_ID='id_xxxxxx'
./bin/hubot --adapter slack

こうすると、 node.js では環境変数にアクセスできるので process.env.DOCOMO_API_KEY で設定を取得することができます。

■ ライブラリを追加したい場合

npm install —save <package> で追加することができます

Rails プロジェクトの実行環境を作る

これからしばらく Rails についての blog を更新していきます。
そのための下準備として、Ruby の実行環境を作り方を記載していきます。

■ プロジェクトの実行環境を作成する

昔は、実行環境を構築するまでが一苦労でしたが、今は誰かが用意してくれたやつを実行すればよいだけになっていることが多くて楽ですよね。今回のプロジェクトでは、 Ansible + Vagrant で作成していくことになりました、私が…。

■ なぜ Ansible か?

  • Client に特別なアプリを入れる必要がない
  • 特殊な DSL を覚える必要がない

■ なぜ Docker ではないのか?

  • なにか問題が発生した時に、ある程度開発者個人で対応できる必要があるが、そこまでコストを掛けられないのではないか?
  • 新しく人が入ってくるたびに、 Docker について学んでもらう必要があるが、そこまでコストを掛けられないのではないか? と判断したため

■ Ansible でやっていること

  • OS のインストール
  • 必要なライブラリのインストール
  • bashrc などへの書き込み、 ソフトリンクの作成など環境設定
  • プロジェクトのコードの Git clone
  • DB へのデータ投入

Ruby の実行環境について

Ruby の実行環境は Vagrant 内に rbenv —global で設定しています。
専用の VirtualBox なので、グローバルで設定したほうが良いという判断です。
ansible で設定しています。

Ubuntu 用は Galaxy.ansible.com で公開中です。
https://galaxy.ansible.com/list#/roles/2698

■ gem のインストールについて

開発環境を作成するときに ansible から bundler を グローバル環境に gem install しています。 bundler 以外のインストールについて気にするときは、Rails new した時に —path を指定するのを忘れないようにします。
一回、path を設定すると .bundler/config にインストール場所が保存されます。
この場合、Gemfile を更新した場合は次回から bundle install で OK です。

■ どこまで書くか問題

こういう環境設定の話って、どこまで書くか毎回悩みますわ…。

昔ながらの Private 関数の宣言、見にくくない?

ruby

■ その昔

Ruby には このような書き方しか許されてなかった…

class Hoge
  def fuga
  end

  def jack
  end

private:

  def sage
  end

  def age
  end
end

■ 今

しかし、時代は変わった

class Hoge
  private def sample
  end
end

def の前に private ってかけるようになった

今までだと、図の左のような作りになる
Public メソッド内で使用されているprivateメソッドが遠くに宣言されていて、ちょっと見にくい.
vimmer の :vsp / :sp 使えばいいじゃん的な発想 滅びろ! は、ちょっと…。
f:id:qooh0:20150829140923p:plain

そんなわけで、private を def の前に書けるようになったんだから、
昔の書き方にとらわれず、private を近くに書いてもいいんじゃないでしょうか?

……だめかな?

YAPC Asia 2015 に参加してきた

YAPC::Asia に参加してきました。

一晩寝て、強く印象に残っているのは
- HTTP/2時代のウェブサイト設計
- Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜
- Profiling & Optimizing in Go
- Adventures in Refactoring
です。

この中のいくつかは資料が公開されていますし、受賞もしているので blog されていることが多いと思います。
そこで Adventures in Refactoring で紹介されていた gem について書こうと思います。

scientist
https://github.com/github/scientist

Rubyリファクタリングツール
2つのメソッド(新・旧)をテストできる。

たとえば A, B と2つのメソッドがあったとする
A : 既存の実装
B : 新しい実装
Github では、scientist を使って A, B のパフォーマンスを計測する。
ということをしているとのこと。

良いリファクタリングと悪いリファクタリングについてや
リファクタリングする理由など、改めて考えさせられましたた。

資料が公開されたら、チームで話しあおうと思っています。


YAPC::Asia 長年お疲れ様でした。
今までで 2回しか参加したことないけど、寂しさを感じますね。

// Perl6 だいぶ面白そうなので、ちょっと魅力を感じてます。

IP Address かどうかの Validator (ruby, rspec)

IP Address は IPv4IPv6 があるのは御存知の通り。
RSpec とかでバリデーションしたいときに、どちらかであることをチェックしたいことがあります。
ユーザーの IP Address とかを DB に保存するときの Validation として使います。

StackOverFlow などで検索しても、このやり方が紹介されていなかったので記載しておきます。
ただ、昔からやってる rubist には普通なのではなかろうか…

IP_ADDRESS_VALIDATE = Regexp.union(Resolv::IPv4::Regex, Resolv::IPv6::Regex)

SICP 問題 2.5

どのように解いたかは、下記のリンクに記載しました。

https://gist.github.com/Qooh0/172078ef015bfd4b8612

ここにハマった

(car x) を作成するときは、2 ^ a を調べればいいので、偶数かどうかを調べればよかった。
(cdr x) も作成するときは、奇数かどうかを調べていけばいいと思った。

しかし、頭の良い皆さんならわかると思いますが、奇数かどうかを調べるのでは正しくない。
なぜなら、 (* 2 3) は 6 になる。つまり、偶数になります。

これに気づくのに時間がかかった…

そのため、回答の car と cdr では、実装方法が異なっている。
両方とも cdr の実装でとくのが正しいはず。

やー、失敗した。