eventmachineのインストール時にエラーになる問題の対応

エラー内容

bundle install 時に下記のようなエラーが出る。

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /Users/nihito/.rbenv/versions/1.9.3-p327/bin/ruby extconf.rb
checking for rb_trap_immediate in ruby.h,rubysig.h... no
checking for rb_thread_blocking_region()... yes
checking for inotify_init() in sys/inotify.h... no
checking for __NR_inotify_init in sys/syscall.h... no
checking for writev() in sys/uio.h... yes
checking for rb_thread_check_ints()... yes
checking for rb_time_new()... yes
checking for sys/event.h... yes
checking for sys/queue.h... yes
creating Makefile

make
compiling binder.cpp
In file included from binder.cpp:20:
./project.h:107:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
         ^
1 error generated.
make: *** [binder.o] Error 1


Gem files will remain installed in /Users/nihito/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/eventmachine-1.0.0 for inspection.
Results logged to /Users/nihito/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/eventmachine-1.0.0/ext/gem_make.out
An error occurred while installing eventmachine (1.0.0), and Bundler cannot continue.
Make sure that `gem install eventmachine -v '1.0.0'` succeeds before bundling.

対応

homebrewのopensslを参照するようにする。

bundle config build.eventmachine –with-cppflags=-I$(brew –prefix openssl)/include

wercker(自動テスト・デプロイツール)について調べてみた。

werckerとは

https://app.wercker.com/

Wercker is an automation platform and toolchain that helps you speed up your development, build, and deployment work-flows.

CI as a service

gitのリポジトリから自動的にpullして、テストしてくれて、その上その上デプロイまでしてくれる、と聞いて調べてみることにした

WerckerはTravisCIやDrone.ioのようなCI-as-a-Serviceのひとつ.GitHubへのコードのPushをフックしてアプリケーションのテスト,ビルド,デプロイを行うことができる.

サポートしているリポジトリ

  • GitHub
  • Bitbucket

Bitbucketはprivateレポジトリでも対応しているとのこと。

wercker.ymlについて

wercker.ymlという設定ファイルで色々定義できる。

Ruby2, rails4の場合のwercker.yml

こんな感じ

Boxについて

rubyの環境や、javaの環境などBoxを指定することで用意することができる。

各フェーズはboxと呼ばれる同一の環境上で実行される.boxはOSと一連のパッケージがインストールされたVMである.例えば,rubyがインストールされたbox,Golangがインストールされたboxなどがある.

Serviceについて

下記のようなミドルウェアを自動的に構築してくれる

  • MySQL
  • PostgreSQL
  • MongoDB
  • RabbitMQ
  • Redis

  • slackにも通知できるらしい
  • 画面から色々設定できるみた。(ymlファイルもダウンロードできるみたい)
  • 自動デプロイまで設定できたらかなり便利。

懸念(TODO)

  • 他AWSサービスとの連動はどうするのか?調査が必要
  • 設定ファイルを書くのが大変そう。 やりながら学しかない

参考

Werckerの仕組み,独自のboxとstepのつくりかた
上記を一通り読むのが一番早い
WerckerでRailsのCIを回す
Githubのプライベートリポジトリでも無料で使えるCI、Werckerを使ってrails newからHerokuのデプロイまでやってみる

dynamodbを使う前に一読すべきもの

公式

Amazon DynamoDB 開発者ガイド

参考になるスライド

ビッグデータだけじゃない Amazon DynamoDBの活用事例

DynamoDBによるソーシャルゲーム実装 How To

Amazon DynamoDB(初心者向け 超速マスター編)JAWSUG大阪

Qiita

DynamoDBのドキュメントAPI、JSON対応したから簡単なサンプルで紹介する part1

DynamoDBのドキュメントAPI、JSON対応したから簡単なサンプルで紹介する part2

DynamoDB の Export, Import を行ってみる

DynamoDBへ大量インポートするときはHASHキーを分散させると高速化する

コンセプトから学ぶAmazon DynamoDB【Amazon RDSとの比較篇】

集中して作業をするために行う事

サラリーマンの時は、通勤から出社という流れが、集中力ONのスイッチだった。

今は、スタバに行く事がスイッチ。

家で仕事をしようと思うと、全然スイッチがONにならない。

スタバで紅茶を頼んで、席に座った時やっとONになる。

スタバに行く道のりで日の光を浴びている事も、影響していると思う。

スイッチを入れる何らかの要因、大切だと思う。

Rubyでベクトルaとbのなす角の求める方法

計算方法

下記のような計算でベクトルから角度を求めることができる。

cosθ = ( AとBの内積 ) / (Aの長さ * Bの長さ)
radian = arccos(cosθ)
degree = ラジアン角度 * 180 / π

コード

require 'matrix'

a1 = 6.5
a2 = 3.5

b1 = 5
b2 = 0

a = Vector[a1, a2]
b = Vector[b1, b2]

puts "aとbの内積: #{a.inner_product(b)}"
puts "aのノルム: #{a.norm}"
puts "bのノルム: #{b.norm}"

cos_theata = a.inner_product(b) / (a.norm * b.norm)
radian     = Math.acos(cos_theata)
degree     = (radian * 180 / Math::PI).round(2)

puts "aとbのなす角(ラジアン): #{radian}"
puts "aとbのなす角(角度): #{degree}"

参考

http://alotofwe.github.io/blog/2013/10/08/rubyde2tufalseduo-ci-yuan-bekutorufalsejin-sawoqiu-meru/http://www.wakhok.ac.jp/~asami/linalge/pdf/02-03.pdf

cannot load such file — gem_parent_dir-gem_child_dir (LoadError)

概要

モジュールのモジュール以下にgemを作成するときは、下記のコマンドを使用する

bundle gem gem_parent_dir-gem_child_dir -t

上記のようにgemを作成した場合に、下記のようにrequireしようとすると

require "gem_parent_dir-gem_child_dir"

こんなエラーが出る。

/Users/nihito/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/dependencies.rb:274:in `require’: cannot load such file — gem_parent_dir-gem_child_dir (LoadError)

下記が正しい指定です。

require "gem_parent_dir/gem_child_dir"

/でつなぐ必要がある。