RubyMine - Ctrl + L で行選択する
タイトル通りの設定を行う、チョイねたです。
Sublime Text 2 と同じように操作するために設定しました。
以下、手順です。
1.[File]-[Settings]を選択する。
2.[Settings]ダイアログより、[Keymap]-[Editor Actions]-[Select Line at Curet]を右クリック。
3.[Add Keyboard Shortcut]を選択する。
4.[Enter Keyboard Shortcut]ダイアログにて、Ctrl + L を設定する。
以上です。
RubyMineでRSpec + Sporkを動かしデバッグする
タイトル通り、RubyMindeでRSpecをSporkサーバ上で動かし
デバッグする手順についてです。
Sporkサーバ上でRSpecを動かすと、RSpecの起動が早くなります。
以下、手順です。
■下準備
1.RubyMineでRails Applicationを作成する。
2.「Rails Application Settings」で「Skip Test:Unit files」にチェックを入れる。
3.Gemfileに以下を追記し、bundle installする。
gem 'therubyracer'
gem 'execjs'group :development,:test do
gem 'rspec-rails'
gem 'spork', '1.0.0rc3'
end
4.RSpecをinstallする。
$ rails generate rspec:install
5.Controller、Viewを作成する。
$ rails g controller sample index
6.routes.rbに以下を記入し、index画面をルートページとする。
root 'sample#index'
7.アプリを起動し、ブラウザよりindex画面が表示されることを確認する。
■Sporkサーバの準備
1.[Tools]-[Run Spork DRb Server...]を押下する。
2.[Spork DRb Launch]ダイアログにて、[Choose test framework]は[RSpec]を選択する。
[Perform bootstrap]に初回はチェックを入れ、[Run]を押下する。
(初回以外はチェックを入れない)
3.コンソールに[pork is ready and listening on 8989!]と表示され、Sporkサーバーが
起動していることを確認する。
4.[Run]-[Stop]を押下し、一旦Sporkサーバを停止する。
5. .rspecファイル内に以下を追加し、RSpecの起動オプションとしてSporkサーバを指定する。
--drb
■RSpec、Sporkの起動とデバッグ
1.[Run]-[Debug]を押下し、[Debug]ダイアログより[RSpec with Spork DRb server:アプリ名]を押下する。
2.コンソールに[pork is ready and listening on 8989!]と表示され、Sporkサーバーが
起動していることを確認する。
3.RSpecやController内にブレークポイントを設定する。
4.[Project]ウィンドウより実行したいRSpecファイルを右クリックし、[Debug 'Run spec・・・]を押下し
RSpecを起動する。
5.ブレークポイントにて処理が止まることを確認する。
UbuntuでAngularJSを動かしてみる
以前に少し触っただけのAngularJSについて、もっと知ろうと思い
AngularJSのチュートリアルをやってみました。
AngularJS
今回はUbuntu上でやってみたので、AngularJSを動かすまでの
手順を以下にメモっておきます。
■動作環境
・Ubuntu 13.10
・AngularJS 1.2.12
■手順
基本的にはAngularJSの通りですが
メッセージやエラーが出たので、以下の点を変えて行いました。
1.Node.jsのインストール
Node.jsが必要とのメッセージが出たため、以下のコマンドでインストールしました。
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
2.npmのインストール
npmのインストール時にUNKNOWN, symlink ・・・というエラー発生しました。
結局、以下のコマンドでインストールしました。
npm install --no-bin-links
3.Chromeのインストール
AngularJSのテストを実行すると、以下のエラーが発生しました。
RROR [launcher]: Cannot start Chrome
Can not find the binary google-chrome
Please set env variable CHROME_BIN
テストで使用するKarmaは、Chromeが必要なようです。
なのでChromeをインストールしましたが、こちらはブラウザでChromeを検索し
以降はGUIでインストールしたので手順は省略します。
以上です。
Ruby on Rails - Zipファイルを読み込む。Jsonを解析する。
先の記事と同様、タイトル通りのサンプルを作ってみました。
こちらもモジュールとしていたので、備忘録として載せておきます。
とはいっても、Zipファイルの読み込みは
ほぼ下記サイトを参考にさせて頂きました。
http://blawat2015.no-ip.com/~mieki256/diary/201312292.html
Gemfile
gem 'rubyzip'
モジュール
require 'zip'
require 'json'
require 'kconv'module ZipData
def self.read(file_path)
content = get_file_content(file_path)
json = JSON.parser.new(content)
return json.parse()
endprivate
def self.get_file_content(file_path)
bindata = {}
Zip::File.open(file_path) do |zipfile|
zipfile.each do |f|
name = f.name
size = f.size
next if name =~ /\/$/ # ディレクトリは除外
bindata[name] = zipfile.read(f.name)
end
endcontent = bindata[File.basename(file_path, '.zip') + '.json']
return content.toutf8()
end
end
gemはrubyzip 1.1.0を使いました。
バージョンにより、使用できるメソッドが異なっていたため
Gemfileでバージョンを指定してインストールする必要があるかもです。
ziprubyというgemもありますが、こちらはRuby2.0では使えないようです。
get_file_content()でzipファイルの中身を読み込んでいます。
読み込んだ中身を、toutf8()でutf-8形式に変換しないと
後続のjson.parse()が上手く行かないようです。
read()では、zipファイルの中身のjsonをjson.parse()でhashに変換して
返却しています。
ファイルの内容はhashになってしまえば、あとはhashオブジェクトの操作で
自由自在に扱うことができます。
Ruby on Rails - AWS S3からファイルを取得する
タイトル通り、AWSのS3からファイルを取得するサンプルプログラムを書いて見ました。
S3からファイルを取得する箇所をモジュールとして実装したので
そのモジュールを備忘録として載せておきます。
使用したgemは、aws-s3 です。
(aws-sdkとAWSへの接続方法が違うので、注意してください。)
Gemfile
gem 'aws-s3', :require => 'aws/s3'
モジュール
require 'rubygems'
require 'aws/s3'BUCKET_NAME = 'your bucket name'
def self.get_files_list
connectfiles = Array.new
bucket = Bucket.find(BUCKET_NAME)
bucket.objects.each do |obj|
files.push(obj.key) if obj.key.index('.')
# zipの場合は、if File.extname(obj.key) == '.zip'
endreturn files
enddef self.get_file(file_path)
connect
downloaded = 'download/' + File.basename(file_path)
File.open(downloaded, 'wb') do |file|
S3Object.stream(file_path, BUCKET_NAME) do |chunk|
file.write chunk
end
end
return downloaded
endprivate
def self.connect
Base.establish_connection!(
:access_key_id => 'your access_key_id',
:secret_access_key => 'your secret_access_key'
)
DEFAULT_HOST.replace('s3-ap-northeast-1.amazonaws.com')
end
end
get_files_list()では、指定したバケット内のファイルパスを配列として返しています。
get_file()では、引数で取得したファイルをS3よりダウンロードし
'download'フォルダに取得しています。
connect()は、メソッド名どおり、S3に接続するメソッドです。
注意点としては、バケットが東京リージョンにある場合
DEFAULT_HOST.replace・・・で明示的に東京リージョンを指定しないと
以下のエラーとあります。
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
以上です。
参考サイト
http://www.biboureq.com/mains/53
http://d.hatena.ne.jp/dkfj/20121009/1349738999
http://aws.amazon.com/articles/8621639827664165
http://qiita.com/labocho/items/45d79fc16c78bc95e1d8
「パーフェクトRuby」を読み返してみて
去年末から今年に掛けての正月休み中、「パーフェクトRuby」を読みました。
その後、Rubyでサンプルプログラムを作成していたところ
Rubyについて確認したいことが出てきたため、「パーフェクトRuby」を読み返しました。
以下、自分が確認したことについて、備忘録として残しておきます。
■モジュール
・モジュールからインスタンスを作ることはできない
→モジュールを名前空間として使う場合、特異メソッド(self.で始まる)として定義する。
・モジュール内で定義したメソッドを、クラスのインスタンスメソッドとして取り込める
→インスタンスメソッドとして取り込む場合、通常のメソッド(self.をつけない)として定義する。
・includeとextend
モジュール内で定義したメソッドを
includeはインスタンスメソッドとして取り込み
extendは特異メソッド(self.で始まる)として取り込む。
※参考サイト
http://pgnote.net/?p=107
■Procオブジェクト
・Proc.newとlambdaで作ったメソッドの違い
return時の挙動や、引数の数が一致しないとエラーとなる点など
lambdaの方が、通常のメソッドに近い動きをする。
・lambdaのシンタックスシュガーを用いた記述例
add = -> (x, y) {
x + y
}del = -> (x, y) {
x - y
}dev = -> {
6 / 2
}x = 5
y = 2p add.call(x, y)
p del.(x, y) #callなしでも可
p dev.call
小ネタですが、以上です。