Translate

2016/09/30

流行りのビッグデータをやってみた。

最近、Twitterからツイートを分析するような作業が多かったので、これはデータ分析の入り口として良さそうだったので、勉強・実践してみた。

データ分析とは

この定義もかなりあいまいなようでピンとくる記事が見つからなくて困った。
一番わかりやすかったのはこちらのデータサイエンティストの説明。

以下自分なりにまとめた、作業・ツール。

収集 =>  整形  =>  蓄積 =>  分析・可視化
説明 アクセスログや可視化したい統計データなどをDBなどに保存する。 収集した時に実行する場合と、DB保存後にバッチ処理する場合がある。 データを保存しておく場所。DataWareHouseというらしい。 Visualization。これもリアルタイムでデータを更新していくものと、バッチ的に分析するものがある。
ツール
fluentd
logstach
Apache Spark
Hadoop
自作スクリプト
Apache Spark
Hadoop
自作スクリプト
Elasticsearch
Apache Solr
各DB
AWS S3
Google Drive
ローカル
Kibana
Banana
Jupyter
Rstudio
Data sientist workbench
スプレッドシート 

整形・分析などをサービスとして使えるBIツールというものがあるが、今回は調査できなかった。

今回やってみたこと

やり方はいろいろありすぎて、どれがいいのか分からず。流行りのデータ解析らしく、
Spark + Elasticsearch + Kibana
という割りと情報がありそうなものをやってみた。

参考記事とやった結果:
https://github.com/Samemura/twitter-spark

無事、SparkでデータをElasticsearchに蓄積し、Kibanaで表示できるようにできた。

感想

データ分析の流れを構築できたものの、効果的に分析できる方法は構築できなかった。
このあたりはKibanaでは限界がありそうなので、Jupyterなどで分析する方法を検討したい。
またデータ収集部分は、普段から使っているスクリプトなどでもあまり困らなそうだと感じた。大量のデータをリアルタイムで分析する、まさにビッグデータでなければメリットがなさそう。

アルゴリズムの検討などには、
1.自作スクリプトでデータ収集
2.Jupterなどで詳細分析・可視化
を次のステップとしたい。

2016/06/17

Webサイトの決済に、Amazon Paymentsを実装した。 そうRuby On Railsで。

仕事でAmazon Paymentsを使って決済機能を開発したので、そのまとめ。

まとめ

報告書は最初に結論が大事。ということで、早速まとめ。
  • Amazonが提供しているDocumentやサンプルが豊富でとても助かった。
  • サーバーサイドとフロントエンド(JavaScript)の両方で実装する必要があったので、他の決済と比べると理解に時間がかかった。
  • 仕様はオープンだが、ネットでの実装事例はなくて、完成イメージを持てずに苦労することもあった。
    →この記事がその助けになったら嬉しい。
  • サイトのUXはすごく向上したと思う。個人的にAmazonをよく使っていることもあり、Amazonログイン→支払いはとにかく簡単。
  • Amazon Paymentsのアカウント開設前に、すぐに使えるテスト環境はないため、事前の技術検証がほぼできなかった。Ruby SDKをAPI通信をスタブして、コードはかろうじて動かせた。これが改善されたら、もっと導入するところが増えると思う。他の決済サービスは準備されていることが多いらしい。
    (もちろん、サンドボックス環境はある)
  • 決済サービスってどれを選べばいいの?って決めるまでは全然決められなかった。考えれば考える程、どれでも同じなような。でもとにかくAmazonログインのUXを優先して決めてよかったと思う。Paypal, WebPayとかは導入はいいと思う(事例やドキュメントが多い)けど、UXの向上は見込みないので。

決済機能とは?

有名なのはPaypal、その他にも最近はいろいろあって、結構群雄割拠。

去年くらいまではPaypalっぽい専門の決済サービスが多かったようだが、大手ECサイト(Amazon / 楽天 / Line ?)が参画して、今後はこっちに流れていくような気がする。

理由は、既にアカウント持っている人が多ければ、その人はすぐに支払いができるから。
ユーザーには、決済のUIはあんまり重要じゃないと思う。
また、使っているサービスで支払いできた方が安心感もある。Amazonはそれを謳ってもいる。

Amazon Paymentsって?

って動画を見ても、あんまり理解できないと思う。
要は、Amazonでログインボタン、Amazonでお支払いボタンを自サイトに埋め込んで、Amazonアカウントで支払いができるということ。

決めた理由:
  • UXの向上
    →Amazonでログインは効果があるはず
  • 支払い手数料
    →競合と比較して大体同じ
  • 運営者の使い勝手
    →Amazon Seller Centralという、Amazonマーケットプレイスと同じプラットフォームで、安定
  • 定期支払い
    →会員年会費の支払いに使いたかったので、必須

サービス名がところどころ、Amazon ログイン&ペイメント とかってなっていてよくわからなくなるけど、多分世界的に共通な名称がAmazon Paymentsで、日本のサービス名がAmazon ログイン&ペイメントってことのよう。

大差ないが、APIはログインとペイメントで分かれているので、一応気にしておく必要はある。Ruby SDKは同じような名前のメソッドだけど。

Documentが豊富

amazon.co.jpでは問い合わせしないとDocumentがもらえない(なのでここで公開することは適切でないと思う)
しかし、amazon.comでは普通に公開されているので、こちらを参照するといい。
Forumもあって、質問すれば、1日くらいで回答きた。

実装

動線がすごくわかりにくいけど、こんな素晴らしいモックが用意されていて、これにかなりお世話になった。
使ったRuby SDK(gem)はこちら。

詳細はインテグレーションガイドを参照してもらうとして、概要はこんな感じ。
  1. JS(JavaScript)でログインボタンと支払いボタンを実装。
  2. ボタンを押すと、AmazonのJSがアカウントを認証し、指定したコールバックURLにリダイレクト、クエリパラメータでアクセストークンがついてくる。
  3. アクセストークンを使って、ユーザー情報を取得したり、支払い処理を実行する。
今回は、調べながらで2週間くらいで基本的な実装はできた。
Ruby SDKを使ったモックを自分でも作ったので、参考にしてもらえるとうれしい。
HerokuでPreviewも提供していて(Readme参照)、実際にはログインできないが、Amazonのログインウィンドウが出てくるところまでは見ることができる。

おまけ

Ruby SDKを使わせてもらったけど、日本のサンドボックス環境のEnd pointが間違っていたので、Forkして修正した。よかったら、こちらをどうぞ。

あと、細かいハマりポイントなども、質問されればなるべく回答しますので、お気軽にコメントどうぞ〜

2016/06/13

Elasticsearch をRuby On Railsで。

タイトルのとおり、Elasticsearch をRailsで実装したので、そのまとめ。

やったこと


  1. RakeタスクでcsvなどのファイルからElasticsearchにIndexを作成
  2. 作成したIndexをModelで検索

コア部分のソースコード

https://github.com/Samemura/Elasticsearch-rails-example

解説

だいたいのことは、Githubを見ればわかるので、ここでは検索まわりを中心に紹介する。
今回はAmazon Elasticsearch Service を使ったが、基本はこちらの記事で全てまかなえた。
bool: { term: { 検索対象 => 検索する値 }} 
term を繰り返して、検索対象を追加する。

OR検索

bool: { should: { 検索対象 => 検索する値 }} 
should を繰り返して、検索対象を追加する。

NOT検索

bool: { must_not: {bool: { should: { 検索対象 => 検索する値 }}}
should を繰り返して、検索対象を追加する。

RANGE検索

range: {検索対象: {lte: 値}}
lte は以下。
この時にDateの値の場合は、きちんとフォーマットを定義しないと、範囲チェックできない。
        type: date
        analyzer: standard
        format: yyyy/MM/dd

ページング

{size: 件数},
{from: 開始件数}

ソート

{sort: {ソート対象: desc} }
desc は降順

集計

aggregations: {agg_hits: {terms: { field: 集計対象, size: サイズ } # size = 0 means Integer.MAX_VALUE. https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html#_size
集計結果を取得できる最大件数を指定する。0は無制限。よく使うのはTop10とか。

AWS認証

AWSのIAM認証でアクセスしたい場合は、こちらのGemを使えば簡単にできた。意外と情報は少なかったので、ハマった。

2016/05/02

Twitter API, favoritesのレスポンスの考察

RailsでTwitterAPIを使ってfavoriteを取得する処理を実装したけど、表示が遅かったので、調査してみた。

前提:
gem Twiiter

コード:
client.favorites(count:200)
clientは別途初期済み

計測:
MiniProfiler gem を使って計測。導入が簡単でかなり助かった。
http://yachibit.hatenablog.jp/entry/2013/05/29/004756

count:200

API getで合計500msくらいかかっていて、これは厳しい。
他のリソース使ったことないけど、favoriteは特別遅い気がする。
以下、いくらか処理を変えてみたけど、変化なし。

結論:
バックグランドで取得する。
取得件数・検索範囲を変えても効果ないので。

count:10
since_idを付加して、直近のツイートから検索。

2016/04/17

今までの振り返りと、見えてきた方向性

ソフトウェア開発をしてきて10年が経過して、今までのこと、分かったことを整理してみる。

略歴

福島県生まれ、中学校まで福島で育つ
高専に入学し、宮城県でプログラミングを学ぶ
卒業後、東京に本社のあるSIerに就職
と思ったら、配属されたのは宮城県で組み込みソフトの開発
マイコンとかそんなに好きじゃないな、と思いながらも、車載ソフトを結構頑張って開発
主に海外向けの開発を楽しくやらせてもらい、出張でも良い経験・人脈を築けた
プロセスにこだわって、独学で学びながら実践でもノウハウを蓄積
ポイント:MBD、TDD、リファクタリング、課題管理、日程管理、チーム運営

要件定義、設計、実装、テスト支援、チーム管理と一連の仕事をこなして10年経ち
最新のソフト開発を求めて、Web開発に転職
現在、Ruby On Railsでサーバーサイドの開発に勤しむ

こだわり


コードにこだわる

潔癖コーダーの名のとおり、DRYでリーダブルなコードにこだわっています。書籍やWeb記事で情報はたくさんありますが、実践出来ている人は少ないです。
理由は様々ある(使い捨てのコードとかプロジェクトが短期間とか)と思いますが、どんな理由があれ、コードにこだわらない人はいつになってもできるようにならず、そういう人に増えるにつれ、チームのサステナビリティ・モチベーションはどんどん低下し、Outputの質が落ち、プロジェクトの最終的な品質・価値は低いものになってしまいます。


プロセスにこだわる

コードにこだわるためには、プロセスにこだわる必要があり、テストを使ってリファクタリングすることが欠かせません。全体の設計ももちろん重要で、不適切な機能分割では無駄なコードを作りがちですし、テストもしづらいです。
総じて、全体設計→実装→テスト→リファクタリングと、どれか一つでも手をぬくと最終的な品質の低下・遅延になります。


否定しない

自分が否定されるのが嫌いなので、人のことも否定しないようにしています。否定してしまうと、否定しあう負のスパイラルに陥り、消極的になってしまいます。
議論でも、なるべく否定せず、肯定的に建設的に結論をつけるようにしてます。


目指すところ


たくさんの人が使って、楽しい・うれしいWebサービス

月並みですが、GoogleやFacebook、Airbnbなどのサービスが好きです。
・一過性ではなく継続して使えるもの
・楽しいだけではなく、生活に不可欠だったり、楽になる


ハードウェアも連携

Webだけで完結せず、ARやVR、カメラなどを使ったセンシングで新しいUXを提供したいです。

2016/04/13

Ruby On Rails でTwitter連携アプリのプラクティス

Webでも記事が多い情報になりますが、実際にきちんと運用できるレベルの実装をするとそれなりにポイントがあったので、ブログとしてまとめてみます。
また、最後にTwitter gemを使ったベストプラクティスとして、モジュール化したコードを載せておきます。これはWeb上にもなかなかないので、ぜひ参考になれば幸いです。

参考:
https://syncer.jp/twitter-api-matome
https://takuyokomizo.com/ruby-twitter-api/

Twitter認証

gem omniauth を使いました。https://github.com/intridea/omniauth
使い方は、wikiが詳しいです。特に難しいことはなし。
以降は、情報が少ないものに絞って列挙しておきます。

TokenをSessionに保存

    auth = request.env['omniauth.auth']
    session[:access_token]        = auth['credentials']['token']
    session[:access_token_secret] = auth['credentials']['secret']
    session[:username]            = auth['extra']['raw_info']['screen_name']
    session[:profile_image_url]   = auth['extra']['raw_info']['profile_image_url_https']
このときに、なるべく情報を保持しておくと、API回数制限を少しでも回避できる。
使える情報は、こちらから。https://github.com/arunagw/omniauth-twitter

テスト

wikiどおりで基本はOK.
 @auth_resp = {
      provider: 'twitter',
      uid: '123456',
      info: {
        nickname: 'johnqpublic',
        name: 'John Q Public',
        location: 'Anytown, USA',
  。。。
    OmniAuth.config.test_mode = true
    OmniAuth.config.mock_auth[:twitter] = OmniAuth::AuthHash.new(@auth_resp)

authのテストデータは、TwitterAPIのExampleレスポンスを基にするとよい。

認証失敗のテストは、バグがあってWikiどおりにはできない。
OmniAuth.config.mock_auth[:twitter] = :invalid_credentials
これをやっても、Failureのパスには飛んでくれない。
通常のパスに飛んで、CredentialsがInvalidになるだけ。

Twiter API

client

gem 'twitter' を使った。使い方は、参考URLが詳しい。
テストなどに使うデータは、Twitter APIのページを見ると例がのっているので、それを流用すると簡単。

update profile image

このAPIを使用したところ、レスポンスでくるprofile_image_urlは更新前の情報になることがあった。これは、Twitter側でデータを更新するタイミングで発生していると思われ、その時によって、発生頻度はまちまち。頻発するときもあれば、出ない時もある。
対策は、レスポンスを使わずに、自サーバーで保持しているデータを使うことにした。
本質的な解決とはいえない気もする。
APIで取得しなおすと、レートリミットに+1されてしまうので。

APIレートリミット(回数制限)

こちらも既にWebで情報があるので、簡単に。
https://dev.twitter.com/rest/public/rate-limiting
15分に15回のAPIのアクセス制限あるよということ。世のアプリも結構引っかかることが多いらしい。
今回とった施策は、
・認証時のレスポンスをなるべく使う。
・既に持っているデータはなるべく取得しない。

TwitterアイコンのdefaultイメージはCORS

defaultイメージ(卵アイコン)は、URLのドメインが通常とは異なり、CORSが許可されない。つまり、直接HTMLに画像をURLで埋め込むことはできない。
対策:
予めdefaultイメージを保存しておいて、ドメインが変わったらそちらを使う。
defaultイメージは、7種類あって0からの連番だった。(自分が確認した時点で)
使用した正規表現 regex = /http.*default_profile_images\//

その都度、wgetでローカルに保存してそれを使うこともできたが、実装のインパクトが大きかったので、上記方法を採用した。

CORS(Cross-Origin Resource Sharing)は、その名の通り、ブラウザがオリジン(HTMLを読み込んだサーバのこと)以外のサーバからデータを取得する仕組みです。http://dev.classmethod.jp/cloud/cors-cross-origin-resource-sharing-cross-domain/

Twitter client module

https://github.com/Samemura/twitter-client-practice


2016/04/08

新しいプログラミング言語の習得、Kata

新しい言語を習得、Kata

プログラミング言語を学ぶ

初級者

構文を覚える

簡単なプログラムを作る

中級者

少し難しい使い方を覚える

配列
ハッシュ
クラス
ライブラリ

上級者

人に教える

ライブラリを作る

これは結構充実

意外と少ない 今日の主題

どうやって

初級者

書籍

Webサービス

まとめ (link)
サービス名 日本語対応 学習スタイル エディタ機能Codecademy テキスト ○ドットインストール 動画 ×Progate テキスト ○ミニツク テキスト(一部動画) ×CODEPREP テキスト ○RubyWarrior × テキスト ○CodinGame × テキスト

RubyWarrior (link)

中級者

日々の業務

Webサービス

上級者

フォーラム

Github

いいところ

他の人の回答が見れる (link)

いっぱいクリアすると、昇級する

1問、20分前後でできて、ちょうどいい

対応言語が多いので、新しい言語の勉強に良い

新人教育にも良い

いざ実践 (link)

Githubでログイン

Kataを選ぶ (link)

テストを読む

コードを書く

テストする

回答を送信

def days_until_christmas(day)
 date = Date.new(day.year,12,25)
 date = date.next_year(1) if day.month == 12 and day.day > 25
 date - day
end

Kataとは (link)

空手の型 繰り返しの練習

「格闘技の世界では練習もせずいきなり試合にでるなんて自殺行為に等しい。スポーツや芸術、手工芸の世界でも常日頃から地道な反復練習が必要不可欠だ。それなのに、プログラミングの世界では最初に大学などで基礎を習った後、仕事をしながら技術力を高めようと考えるのが常識だ。これはおかしい。プログラミングの世界でも、既存技術の反復練習や新技術の習得に、継続的にいそしむべきだ」

つまり

こういうこと




2016/04/06

Mindmesiter プレゼン お試し埋め込み

MindMesiterのプレゼン機能を試してみた。

前提

MindMeisterのフリープラン
GoogleDriveにmindファイルを保存して、管理

やりたいこと


  • マインドマップをプレゼンに使う
  • プレゼンをブログなどに埋め込んで、再利用できるようにする。GooglePresentationみたいに。


マインドマップをプレゼンに使う

マインドマップを作成して、プレゼンを設定する。
マップをリンクで共有(閲覧)して、自分がプレゼンを開始すると、放送できる。
はずだったが、プレゼンの放送はフリープランでは対応外らしい。
ただし、あまり使う場面がなさそう。Hangoutとかで画面共有すればことたりす。

プレゼンを埋め込む

埋め込めたけど、スライドショーは動作せず。
フリープランだからか。Proになると、PowerPointにもできるらしい。
RTFで吐き出して、GoggleDriveにインポート。それを開いてコピペすれば、リンク含めていい感じにBloggerに貼り付けられる。
あとは、PNGで吐き出して貼り付け。


2016/02/14

外国でMeetupに行ってみた

Meetupというサービスを使ってみたかったのと、外国で交流ができたらいいなと思いたったのがきっかけ。

参加したMeetup

The London Japanese Language Meetup
1月中旬、ロンドンのとあるカフェバー

このMeetupにした理由

ロンドンに滞在している日程で都合がついたから。
日本に興味がある外国人とは交流しやすいと思って、このカテゴリを選んで、カレンダーで日程をみると、ちょうどこのイベントだけがヒットした。

良かったこと


  • 知らないにあうことができる。
  • 気軽に参加できる雰囲気


イマイチ


  • なんとなく会話するのに参加してしまったので、なんらかの目的があった方が良かった。(FBで友達10人とか、趣味共有する人を探すとか)
  • もしくは時間を決めて、制限なくダラダラしない。
  • 意外とシャイな人が多くて、逆に難しいかも。
    (オープンな人は逆にこういうところにあえて行かないのかも)


まとめ

目的を持って、参加した方がいい。
今回は、参加直前にかなり緊張して、自分の性格を再認識するのに良いきっかけにもなった。
Meetup自体は、グループや地方によって、ハマるのを探すのは結構難しそう。

2016/02/09

Mac で、キーリマップして快速カーソル移動

以前からWindowsで使っていたリマップの設定をMacに適用する。

Karabiner

使うのはKarabiner以前から使っているが、今回はPrivate.xmlで設定する。
http://qiita.com/altitude3190/items/bbef986ff8dd288b2641
http://qiita.com/ogomr/items/c724d2ec88552104f453

Private.xml

こんな感じ。


            <name>Right command to cursor move</name>
            <identifier>private.remap.r_coomand_to_cursor</identifier>
            <autogen>
                __KeyToKey__
                KeyCode::J, ModifierFlag::COMMAND_R,
                KeyCode::CURSOR_LEFT
            </autogen>
            <autogen>
                __KeyToKey__
                KeyCode::I, ModifierFlag::COMMAND_R,
                KeyCode::CURSOR_UP
            </autogen>
            <autogen>
                __KeyToKey__
                KeyCode::K, ModifierFlag::COMMAND_R,
                KeyCode::CURSOR_DOWN
            </autogen>
            <autogen>
                __KeyToKey__
                KeyCode::L, ModifierFlag::COMMAND_R,
                KeyCode::CURSOR_RIGHT
            </autogen>
            <autogen>
                __KeyToKey__
                KeyCode::H, ModifierFlag::COMMAND_R,
                KeyCode::HOME
            </autogen>
            <autogen>
                __KeyToKey__
                KeyCode::SEMICOLON, ModifierFlag::COMMAND_R,
                KeyCode::END
            </autogen>
            <autogen>
                __KeyToKey__
                KeyCode::N, ModifierFlag::COMMAND_R,
                KeyCode::PAGEUP
            </autogen>
            <autogen>
                __KeyToKey__
                KeyCode::M, ModifierFlag::COMMAND_R,
                KeyCode::PAGEDOWN
            </autogen>
            <autogen>
                __KeyToKey__
                KeyCode::U, ModifierFlag::COMMAND_R,
                KeyCode::DELETE
            </autogen>
            <autogen>
                __KeyToKey__
                KeyCode::O, ModifierFlag::COMMAND_R,
                KeyCode::FORWARD_DELETE
            </autogen>
        </item>

2016/02/07

VagrantでRsync

Defaultでは、~/sync は自動でsyncしてくれる(未検証)らしいが、フォルダを任意の場所に設定できるので、こちらを設定する。

参考:
http://www.1x1.jp/blog/2014/03/vagrant-rsync-synced-folder.html
http://tech.recruit-mp.co.jp/dev-tools/vagrant-rsync-synced-folder/

Vagrantfile

config.vm.synced_folder(host_folder, guest_folder, type: :rsync, rsync__exclude: [
          'log/', '.git/', '.bundle/', 'vendor/bundle/', 'tmp/',
          'public/uploads/'
        ]
      )

Rsync-auto

Terminalで、vagrant rsync-auto を実行。以降プロセスが継続し、変更を監視する。
ので、別ターミナルにしておくのが良いと思う。

ゲストからホストにSync

Rsync-autoでもホストー>ゲストにSyncしかできない。どうにかする方法を考えねば。



2016/02/06

Mac でZsh

BashからZshに乗り換えようと思い、インストールと設定をした。
https://codeiq.jp/magazine/2014/01/5143/

インストール

Macだとインストールは不要だった。

設定

色とかの設定をする。
~/.zshrc に設定ファイルを作る。
こちらの設定を使って、色をつける。

フォルダの色が見難いので、以下を参考にカスタマイズ
http://yuk.hatenablog.com/entry/2014/09/23/072648

Sublime Text

.zshrcに、追加
alias subl="/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl"

2016/02/05

Rails TutorialでPort 3000がロックされた

ローカル環境でPort 3000をオープンしようと思ったら、できなくなっていた。

どうやら、SSLの設定をWEBrickにすると、ロックすることがあるらしい。

http://d.hatena.ne.jp/seinzumtode/20120501/1u335886009

対策:

MacのNetwork utility でPortscan でチェックする。ポート確認。

ブラウザのキャッシュをクリア。

$ lsof -i:3000
$ kill プロセス番号

Port:3000をひらけるようになった。

2016/02/01

Mac を最初に設定すること

Macなれないけれど、最初に設定すると便利なこと。
http://www.atmarkit.co.jp/ait/articles/1511/30/news026.html

Windowを切り替える。
http://news.mynavi.jp/articles/2012/08/14/tips/
http://c-through.blogto.jp/archives/38812126.html
これを基に、Mission ControlをOption+Tabに設定し、ウィンドウ切り替えとした。

DockをOption+Tabに変更
http://gori.me/mac/mac-tips/70156

ショートカットキー:


ウィンドウを閉じるときは、Command+w
http://www.hirx.net/mactips/shortcutkey/

VMをVagrantで作って、CentOSにRails をインストールする(Mac)

以下サイトを参考に、VagrantでのRoR環境を構築。

全てインストールしたところで、Vagrant起動するとエラー発生。
ChefのURLでエラーが起きているが、簡単にできそうになく、Chefを使わずVagrantのみでVM起動するようにしてみる。(Officialのページに従い)

使用したのは、CentOS/7。Atlasから探した。

Vagrant は起動できるようになった。そこから、今度はRailsを準備、公式に従って。

Cent OSは、yum でインストールする。
yum install git
yum install -y openssl-devel readline-devel zlib-devel

以前の記事に従い、rbenvをインストール。

次にようやく、gemを入れる。
git clone https://github.com/rubygems/rubygems.git ~/.rubygems
ruby .rubygems/setup.rb


Ruby 公式はこれ。

gemが入って、Railsがようやく入った。

blogを作ってみる。Bundleでインストールする。
bundle install --path vendor/bundle

sqliteのエラー。
SQliteをインストール。

therubyracerのエラー。
sudo yum install gcc-c++
こちらのサイトがとても助かった。

ようやくRails sができた。
bundle exec rails s -b 0.0.0.0
IPアドレスの指定が必要。

ホストOSでブラウザ表示できない。
ポートの設定が必要。Vagrantfile:
  config.vm.network "forwarded_port", guest: 3000, host: 3000
(その他の設定も参考になる。)

で、ようやくBlogが表示された。

MACでマウスのボタンを使う。Chromeのタブ移動する。

Karabinerを使う。

http://tanweb.net/2014/07/03/1388/

Chromeのタブを移動するには

Chromeの拡張で、KeyConfigを入れる。
タブの移動を、M-Tab(Option + Tab)にする。
Karabinerのprivate.xmlをM-Tabを使うように修正。

<?xml version="1.0"?>
<root>
    <list>
        <item>
            <name>MouseButton 4 and 5</name>
            <identifier>remap.mouse_button4_5</identifier>
            <autogen>
                --PointingButtonToKey-- PointingButton::BUTTON5,
                KeyCode::TAB, ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L
            </autogen>
            <autogen>
                --PointingButtonToKey-- PointingButton::BUTTON4,
                KeyCode::TAB, ModifierFlag::OPTION_L
            </autogen>
        </item>
    </list>
</root>


その他、参考。

https://pqrs.org/osx/karabiner/document.html.ja#preferences
http://qiita.com/altitude3190/items/bbef986ff8dd288b2641

[2016/2/1 追記]

あんまり面倒くさいことは必要ないことがわかった。
まず、Chromeのタブは、Control+Tabで移動できる。なので、これをKarabinerで設定すれば良いだけ。

SSHの設定ファイル

SSHの接続をするのに、設定ファイルを作っておくと、便利。

https://dogmap.jp/2011/10/27/ssh_config/

~/.ssh/config を作って、

1
2
3
4
5
Host example
  HostName     example.com
  Port         10022
  User         wokamoto
  IdentityFile ~/.ssh/id_rsa.example

のようにする。

Proxyを使う場合は、

こんな感じ。

Host proxy
HostName 0.0.0.0
User fugafuga
IdentityFile ~/.ssh/keys/git_id_rsa

Host test.kayac
User fugafuga
Hostname test.site
IdentitiesOnly yes
IdentityFile ~/.ssh/keys/git_id_rsa
ProxyCommand ssh -W %h:%p proxy


その他、応用。

http://qiita.com/ik-fib/items/12e4fab4478e360a82a1

2016/01/06

Amazon Primeを使ってみた

海外旅行に行くのに、機内などのオフライン環境で映画を見たいために、Primeの無料会員になってみた。

映画 & ドラマ

Prime 会員は無料で視聴できるものがいくつか用意されているのでそちらから選択。

あまり選択肢は多くないものの、いくつか気にいたものを探せた。
・ボーンアルティメイタム、ちゃんとまとめて見たことがなかったので。
・アンダーザドーム、気になっていたもの。1stシリーズ全部見れるので。

ダウンロードしてみる

実際にダウンロードしてみた。私のNexus7は初代で、かなり老人化しているが、Amazon videoはまずまず使えるレベルで、ダウンロードも割と短時間で終わった。

容量をみてみると、映画1本で700MByte程度なので、本体に保存してもそれなりに入れておけそう。(音声・字幕を限定しているからだろう)

結構いいけど、、、

Primeをこの用途だけで使い続けるのはちょっと高いと思った。年に1回使うか使わない頻度なので、Primeは年会費で4000円くらいで月払いはないため、常に年4000円は自分に合わない。
今回はお試しPrimeで無料だったので、使ってみた。

次回からは、dTVなどのオフライン可能のものを試してみたい。