Hatena::ブログ(Diary)

C++でゲームプログラミング

2014-05-30

[]Ruby で \( じゃない場合に ( を \ でエスケープする

某ももんがさんに教えてもらったので覚書。

結果的に以下のような正規表現になるらしい。


puts "() aa (((() \() \\()".gsub(/(?<!\\)\(/, '\(')
# => \() aa \(\(\(\() \() \()

正規表現の否定戻り読みとかあまりよくわかっていないので使っていきたい。


参照

http://d.hatena.ne.jp/satosystems/20100519/1274237784

2014-05-20

[][]sinatra + guard + foreman + chrome で LiveReload 環境を整える

sinatra + guard + foreman + chrome で LiveReload するための環境を簡単にまとめてみました。


[必要なもの]


ブラウザのリロードは Chrome の LiveReload を使用します。


1.適当なディレクトリに以下の4つのファイルを作成します。

[app.rb]

require 'sinatra'
require 'sinatra/reloader' if development?

get '/' do
  "Hello, World"
end

[Gemfile]

source :rubygems

gem 'sinatra'
gem 'haml'
 
group :development do
  gem 'sinatra-contrib'
  gem 'guard'
  gem 'guard-livereload', require: false
end

[Guardfile]

guard 'livereload' do
 # sinatra
  watch(%r{.+\.rb})
  watch(%r{views/.+\.(haml|sass|css)})
end

[Procfile]

guard: bundle exec guard -i
web: bundle exec ruby app.rb -p 5000

2.bundle install

ファイルを作成し終わったら bundle で gemインストールします。

$ bundle intall

3.foreman で guard と sinatra の起動

今回は foreman で guard と sinatra を一緒に起動します。

$ foreman start

実行するコマンドなどは Procfile ファイルで設定します。

コマンドオプションなどを指定したい場合はこのファイルを編集します。


4.Chrome で LiveReload ボタンを押す

http://localhost:5000/ にアクセスしてページを開きます。

ページを開いたあとに LiveReload のアイコンをクリックします。

Chrome に LiveReload の拡張をインストールしたら以下のようなアイコンが URL バーの右側に追加されています。

http://gyazo.com/62fa8348209cd14e205a22efbfa9096c.png


クリックしたら foreman を起動しているコンソールに

23:00:30 guard.1 | 23:00:30 - INFO - Browser connected.

とログが追加されているのを確認してください。


5.LiveReload する

あとは app.rb などを編集して保存すれば自動的にブラウザが更新されます。

これで最低限の LiveReload 環境を実現することができます。


[参照]

http://kenkiti.hatenadiary.jp/entry/20130407/p1

2014-04-25

[]foreman で guard と sinatra を実行した時に正しくプロセスを終了させる


上記の記事を参考にして sinatra を liverealod にしてみたんですが、1箇所だけ気になる点があったので覚書。

上記の記事では Procfile に

guard: bundle exec guard
application: bundle exec shotgun --server=thin --port=3000

を記述して foreman で guard と shotgun の両方のプロセスを実行していたのですが、これを端末で実行した場合に <C-c> で正しく foreman を終了させる事ができませんでした。

これを回避する場合は guard に -i オプションを追加しておく必要があります。


guard: bundle exec guard -i
application: bundle exec shotgun --server=thin --port=3000

これで vimshell からもいい感じに常駐させたり終了させたりする事ができるようになったので便利感。

2014-03-21

[]Ruby で文字列内の URI を抽出する

某所でそのような話がでていて調べてみたら URI.extract が利用できるようです。


[ソース]

require "uri"

text = "
あああ
http://atnd.org/events/33746
いいい
https://f.cloud.github.com/assets/214488/2436964/04c70a28-ade2-11e3-88b7-0ed9a83b4704.gif
ううう
http://docs.ruby-lang.org/ja/2.1.0/method/URI/s/extract.html
"

puts URI.extract(text, ["http", "https"])

[出力]

http://atnd.org/events/33746
https://f.cloud.github.com/assets/214488/2436964/04c70a28-ade2-11e3-88b7-0ed9a83b4704.gif
http://docs.ruby-lang.org/ja/2.1.0/method/URI/s/extract.html

URI.extract() の戻り値は配列になります。


[参照]

http://docs.ruby-lang.org/ja/2.1.0/method/URI/s/extract.html

2014-03-19

[]sinatra からコンソールに出力を行う

某所で教えてもらったので覚書。

sinatra を使っている場合にコンソールへ出力を行いたい場合は、

$stdout.sync = true

# コンソールへと出力される
puts "homu"

のように #stdout.sync を設定しておけば出力されます。

ちょっとした変数の値を確認したい場合には Logger 使うよりはこっちの方が手軽そう。


[参照]

http://d.hatena.ne.jp/riocampos+tech/20130907/p2