なんか久々にrails動かしたので手順をメモしておく。何年ぶりだろう。 続きを読む
2016年09月09日
gnomeの端末でrvmでuseできなかった場合
ちょっとRubyを使う用事があったのでrvm入れてuseとか言ったら下記のエラーが出た。
$ rvm use ruby-2.2.1 RVM is not a function, selecting rubies with 'rvm use ...' will not work. You need to change your terminal emulator preferences to allow login shell. Sometimes it is required to use `/bin/bash --login` as the command. Please visit https://rvm.io/integration/gnome-terminal/ for an example.続きを読む
2012年01月09日
UbuntuにRedimineをインストールしてみる
Redmineのインストール(Redmine1.3.0/Ubuntu10.04)
http://www.mwsoft.jp/programming/other/redmine_install.html
とりあえずこのくらいの品質でとりとめもなくやってみようと思う。
そういえば最近はあまり冗談は書かないようにしている。真面目路線。
真面目に書くと読者対象が絞れるから安心できる、というのが理由の1つ。
2010年12月19日
ファイルからURLを抽出するいい加減なRubyソース
そういえばRubyのURLって新しいRFC使ってたっけ。URI.parseすると現行で使われているURLも弾いたりする。
続きを読む
2010年01月02日
Ubuntuでgemでzlib (LoadError)が出た際
sudo apt-get install zlib1g-dev
をしてから、再度makeからやり直したら、動いた。
2009年09月15日
Railsでstrip_tagsがしたい時
でいけるらしい。
ここが詳しかった。
http://d.hatena.ne.jp/moro/20080416/1208311316
2009年07月13日
2009年07月12日
2009年07月11日
2009年07月09日
2009年07月07日
2009年07月06日
2009年07月05日
2009年07月04日
Ruby on Railsを使ってメリットを感じた瞬間
※あまりサーバサイドの処理は担当していません。どちらかというと、裏側の処理を書いてました。そういう仕事をしていた人間の所感なので、ちと王道とはズレがあるかも。
requireって書かなくていい
へいへい、無精者ですよ。
デフォルトでいろんなものがインクルードされていて、自前で標準モジュールを呼ぶことが少ないというのは、楽で良いと思います。
日付・時刻の扱いが簡易
元々RubyはDate.parseって書けば、割と空気を読んでくれたりするように、日付処理はかなり簡易ですが、ActiveSupportはそれに輪をかけて便利です。
tomorrowと言えば翌日が出てきたり、next_weekと言えば次週が出てきたりします。
開発途中にDBを変えても損害が少ない
試しにWindows+MySQLで開発したソースをLinux+SQLite3に移しても、特に問題なく。PostgreSQLに移した際も、ActiveRecordを推奨された使い方で(SQLベタ書きとかせずに)使っていれば、差異をほとんど吸収してくれました。
まぁ、途中でDB変えるってことはあまり無いと思いますが、本番環境の選定が決まってない状態で開発スタートしても平気かもしれないってのは、なかなかに興味深いです。
データベースの管理が楽
create文を書くよりgenerateしたmigrationファイルに手を入れる方が数段楽ですし、管理もしやすいです。
あと、DBに関する設定が、必ず決められた場所(config/database.ymlとか)にいるというのもありがたいです。
作業量が減る
script/generateやら、rake db:migrateやら、何かと作業工数を削ってくれる代物が用意されています。
1つ1つの短縮時間は大したものでもないですが、全部足せばけっこうな時間が短縮できます。
RESTで云々する際のコストが限りなく低い
ちょっとしたXMLやJSONを吐き出したい時に、非常に少ないコストで実行できます。
XMLはscaffoldで作った叩き台上で、デフォルトで出力出来るようになっているし、JSONも1行か2行書き変えれば出力されます。
引き継ぎ易い
個人的に、これが一番良いメリットなんじゃないかと思ってます。
Railsで書いたソースは、どの設定ファイルにどんな記述がされているか決まっているし、環境構築もrakeである程度自動生成できます。
オリジナリティ溢れるRubyソースを渡すよりも、Railsで書いたものの方がお互いに共通認識があるので意思疎通がしやすいです。Rails知ってる人の絶対数が少ないということについては、ノーコメント。
もちろん、感じてるデメリットもいくつかあります。
ActiveRecordで大量データ取り扱わせたらやたら重いですし、そもそもRubyの実行速度も芳しくない。C++やJavaなら数秒で終わる処理が数十秒かかったりします。
ちょっと昔のマージソート実行時間比較
http://techtrim.net/2008/01/18_19196.html
それでも、さすがキラーアプリと呼ばれるだけの便利さはあるなぁと、そう思いました。
2009年07月02日
2009年07月01日
2009年06月30日
2009年06月28日
【1日1Rails】前月・翌月を取得する
Rails 2.3.2
# Dateでやってますが、Timeでも動きます
# 先月=last_month, 翌月=next_month
>> date = Date.new(2009, 1, 1)
=> Thu, 01 Jan 2009
>> date.last_month
=> Mon, 01 Dec 2008
>> date.next_month
=> Sun, 01 Feb 2009
# 2ヶ月後、2ヶ月前
>> date.months_ago(2)
=> Sat, 01 Nov 2008
>> date.months_since(2)
=> Sun, 01 Mar 2009
# monthをyearにすれば、年の扱い
>> date.next_year
=> Fri, 01 Jan 2010
>> date.last_year
=> Tue, 01 Jan 2008
>> date.years_ago(2)
=> Mon, 01 Jan 2007
>> date.years_since(2)
=> Sat, 01 Jan 2011
# 標準関数でやるとこんな感じ
>> date = Date.new(2009, 1, 1)
>> date << 1
=> 20081201
# ちなみに3月31日の1ヶ月前2月28日
>> date = Date.new(2009, 3, 31)
>> date << 1
=> 20090228
2009年06月27日
【1日1Rails】月の末日を取得する
Rails 2.3.2
# end_of_monthで取れる
Date.today.end_of_month #=> Tue 30 Jun 2009
# Timeだと末日の最終秒が取れる
Time.now.end_of_month #=> Tue Jun 30 23:59:59 +0900 2009
# Rubyの標準関数のみでやろうとすると、こんな感じ
Date.new( Date.today.year, Date.today.month, -1 ) #=> Tue 30 Jun 2009
【1日1Rails】SQLを直接実行する
# エンコード指定を打ちたい時、
# ActiveRecordの実行速度がボトルネックになる時などに使用
# SELECTも実行できる
rs = ActiveRecord::Base.connection.execute( "select * from hoge" )
rs.each { | item |
puts item[0]
}
2009年06月08日
Ruby + Mysql5.1 = ハマる
Windows に Ruby on Rails 2.2 + MySQL 5.x 環境を構築する手順とハマり所
http://d.hatena.ne.jp/seiunsky/20081228/1230485404
5.1はハマりやすいらしい。というか、Windows版は全体的に不安定な気がする。とりあえず面倒になったので、SQLiteにリターン。
ついでにWindowsでSQLite使うときにgemで怒られる件もここに書いておこう。
gem install sqlite3-ruby
とやると、「'nmake' は、内部コマンドまたは外部コマンド……」みたいなエラーが出る。
gem install sqlite3-ruby --version '= 1.2.3'
とすると良いらしい。
参考
http://d.hatena.ne.jp/GARAPON/20081022/1224657975
2009年06月06日
Rubyの定数の動きを確認する
クラス内で宣言された場合はそのクラス内がスコープになり、クラスの外で宣言された場合はObjectクラスの定数になる。
# クラスの外で宣言
HOGE = "uga"
# クラス内で定数を宣言
class Test1
HOGE = "hoge"
def initialize
p HOGE #=> hoge
end
end
# 継承した場合、定数もちゃんと継承される
class Test2 < Test1
def initialize
super #=> hoge
p HOGE #=> hoge
end
end
# 継承して同名の定数を宣言した場合は、上書きされる
# superした場合は継承元を見る
class Test3 < Test1
HOGE = "fuga"
def initialize
super #=> hoge
p HOGE #=> fuga
end
end
# 定数を宣言してない場合は、Objectの定数を見る
class Test4
def initialize
p HOGE #=> uga
end
end
真性オブジェクト指向言語を名乗る(?)だけあって、非常にイメージしやすい動き。こういうところは好きです。
2009年06月02日
Ruby on Railsで前方一致検索をする際に
が、普通にlike 'hoge%'と書くと、こんなエラーが出る。
malformed format string - %
どうやら%は置換用の文字になっているので使ってはいけないらしい。サニタイズのこととかもあるので、「?」使うのがとりあえず正解のように見えた。
Hoge.find(:all, :conditions => ["fuga like ?", "moge%"]
Railsのことはまだまだよく分からない。何度も「もうfind_by_sqlでいいか」と思いつつ、それでは学習しないのでやり方を調べる日々。
2009年05月30日
Rubyでn-gram的なことをする
お陰で、とある自殺回数が多い作家様が書いた斜陽という作品は「お母さま」が325回出きたり(お母さま言い過ぎ)、ギロチンが24回出てくる(そんなに使ってたっけ?)ことが分かった。
分かったからどうだと言われると困る。語尾とかの傾向を見て「女性っぽい小説」、「男性っぽい小説」とかを見分けるくらいはできるかもしれないが。
にしても、文章解析の為にはやるべき下準備が多い。他人様の書いたソース読んだり、知らない概念を勉強したり。自分は頭悪いと1日5回くらい思う。その後、俺って天才と2回くらい思う。そんな日々。
n-gramっぽい簡易なソース
2009年05月29日
RubyでZIPの解凍
青空文庫は著作権が消滅した作家と、著作権が残っているけど了承を得て掲載している作家の2種類を扱っている。著作権が消滅している作家については再配布や改変も可能らしいので、こういう処理をしても問題ないはず。
青空文庫にいるのはXHTML版とテキスト版(ZIP圧縮)の2つなんだけど、XHTMLは扱うのが面倒なので、ZIPファイルのURLを指定して、解凍、テキストファイルの保存、形態素解析、DB登録という一連の流れを行うプログラムを作ることにする。
で、ZIPファイルをRubyで扱う方法を知らなかったので、調べる。
以下、コードとか
2009年05月27日
RMagickを使ってみる
「あ」
ここに表示している「あ」という文字は画像ではなくテキストであり、文字コードの何番目とかでしかない。プログラムはそれをコードとしては捉えられるけど、形として捉えてはいない。
だからプログラムは片仮名の「ヘ」と平仮名の「へ」を全く違うものとして捉える。けど、画像化して類似画像を検索すれば似たものとして捉えられる。うちの子にはそういう目線で文字を見て欲しい。親である私の希望である。
というわけで、受け取った文字列をその場で画像に変換して、その場で見て、何に近いか連想してもらうという実に意味のないことを考える。
とりあえず画像にするとこまで。Ruby経由なのでRMagick使用。
以下、インストールとかサンプルコード
2009年05月24日
Rails学習中
Railsは「設定よりも規約」というキャッチコピーを持つように、プログラマが勝手に名前を付けてweb.xmlやらstruts-config.xmlみたいなものにそれを書き込むのではなく、リクエストとController、テーブルとModelなどが規約通りに命名されていれば勝手に繋がってくれる。
それがあるので「10分で簡単なアプリケーションが出来る」とかいう「売り文句としては上等な」長所を実現できたりする。
「手軽に出来る」こともあるが「手軽にソースを追える」メリットも大きい。URLからrewriteを見て、web.xmlやら何やらを見て、Actionを見つけて、という手間が省けるし、自動生成の雛形から物を作るという経路を皆が経験すれば、誰もが似た構成のアプリケーションを作るようになる。
以下、簡単な使い方
2009年05月19日
RubyでTimeout::Errorを拾う
普通に「begin 〜 rescue」でくくっても「Timeout::Error」は拾わないそうです。(使用バージョン、1.8.7)
begin
hoge
rescue => e
p e
retry
rescue Timeout::Error => e
p e
retry
end
みたいな感じで両方拾ってあげないといけないそうです。今晩は無事に処理を完了してくれますように。
2009年05月15日
Mecabを入れる(Ruby版)
○ダウンロード
ここから、「mecab」(本体)と「mecab-ipadic」(辞書)と「mecab-ruby」(Ruby用モジュール)をダウンロードする
http://sourceforge.net/project/showfiles.php?group_id=177856
○Mecab本体のインストール
$ ./configure
$ make
$ sudo make install
という代わり映えのしないコマンド
○Mecab辞書のインストール
$ ./configure --with-charset=utf8
$ make
$ make install
デフォルトだとEUC-JPになるので、お好みに応じてデフォルトキャラセットを指定。我が家はもっぱUTF-8。
○mecab-rubyのインストール
$ ruby extconf.rb
$ make
$ ruby test.rb
うちでは「ruby test.rb」で以下のようなエラーが出た。
./MeCab.so: libmecab.so.1: cannot open shared object file: No such file or directory - ./MeCab.so (LoadError)
対応
$ sudo vim /etc/ld.so.conf
で、一行目にこれを追加
/usr/local/lib
$ sudo ldconfig
この後、「ruby test.rb」をすれば通った。
最後にこれ
$ sudo make install
○サンプルソース
require 'MeCab'
mecab = MeCab::Tagger.new()
puts mecab.parse("俺たちに明日はない(たぶん)")
これを実行して動けば成功。
【20091012追記】
こちらにもう少し詳しい内容を書きました。
http://www.mwsoft.jp/programming/munou/mecab_linux.html
ブログの記事本文のみを取得する
フィードに本文が全て含まれていれば良いのですが、そうでない場合も多いので、プログラムで抽出することに。車輪の再発明を避けるべく(断じて作るのが面倒だったわけではない)、既に作られていそうなものを探してみた。
その中で精度、手軽さ、共に良かったのがこれ。
ExtractContent(BSDライセンス)
http://labs.cybozu.co.jp/blog/nakatani/2007/09/web_1.html
文中における句読点の存在や、ブロック内の文章の長さなどを元にスコアを付け、スコアが低いものを除去した状態で返してくれる。
これを使ってどの程度の精度が出るのか確認したかったので、テスト用のソースを書く。概要はこんな感じ。
・URLを指定して、HTMLページを取得する
・ExtractContentを使って取得ページを解析する
・取得ページのBODYタグの直下に解析結果を挿入して、ファイルに保存する
・そのファイルをブラウザで見ると、ページの全体と解析結果が一望できる
ソースはこちら(動作確認はかなり適当です。自己責任でご使用ください)
mwextractcontenttest.rb
Hpricot使ったりしてます。あと引数指定するとリンクを辿って解析をしたりします。詳細はソースのコメントにて。
ということをしていたらいつのまにやら午前3時。明日は寝不足気味に出勤すること確定。いかんですな。この世界は楽し過ぎます。