RSRubyの使い方

よく忘れるのでメモ

Rubyでクラス名からインスタンスを作成

環境: ruby 2.2.2

参考

http://d.hatena.ne.jp/stakizawa/20070505/t1

http://yiaowang.web.fc2.com/programing/ruby_tips/etc_01.html

WindowsでJekyll環境構築

jekyllをご存知でしょうか?そこいら中に記事があるので詳細はググればわかりますが、簡単にいえば静的HTMLのジェネレータフレームワークです。

Rubyで作成されていますのでgemで簡単にインストールできます。

がちょっとハマったので備忘録。。

環境

  • Windows8.1

インストール

まずはRUBYを入れます。Windows用のRubyはいろいろありますが、

http://rubyinstaller.org/downloads/

こちらからWindows用のMSIをダウンロードしインストールします。

C:\Ruby21-x64にインストールした後には環境変数PATHにC:\Ruby21-x64\binを追加します。

そのままgemでインストールしようとすると以下のエラーが出ます

どうやらMakeできなよと怒られたようです

DevelopmentKitなるものを同じページからダウンロードします。

DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe

現在だとこれになります。

これをC直下にc:\devkitというフォルダを作成しその中に解凍します

その後以下のコマンドを実行

これで準備が整いました

あとはgemでインストール

rubyでMongoDBにISODateを入れる試み

  • ruby1.9.3

apacheのログなどを解析する場合にはmongodbに一度入れると扱いやすくなります。

そこでこのプレーンテキストのapacheのログをrubyを使っていれる試みをしてみました

この辺りを参考に

http://mironal-memo.blogspot.jp/2012/07/mongodb-ruby.html

ログからip,時間、urlの3つ、必要なものを抽出します

こんな感じで入るのかと思ったのですがISODateにはなりません

仕方がないので一度ファイルにします

  • create.rb

これくらいしかわかりませんでした

20131225 追記

一度ファイルにせずともできました

Time型のオブジェクトを作成し、utcへ変換するとMongodbではISODateへとなっています

RUBYのgsubでアポストロフィ[’]をエスケープ

ちょっと悩んだのでメモ

  • NG

  • OK

Kakasiをrubyでつかう(その後)

ruby-kakasiを導入してみたのですが、どうも動きがおかしいことに気づきました

どういう時におかしいかというと連続で違う引数で呼び出す際にどうやら2回めの呼び出し時の引数が聞いていないような感じです。しかもローマ字に変換する際にヘボン式か訓令式か変更した場合のみです

こんなコード

結果がこれ

最初kakasi-rubyがおかしいのかと思いソースコードをいじってみていたのですがどうやらそうではなく、本体側がおかしいことがわかりました。

このぶぶん

どうも訓令式とヘボン式のテーブルを切り替えて使っているようなのですが、高速化のためか一文字目の際にテーブルを作成し、それ以降はキャッシュを見るような感じになっています。しかしstatic変数で管理しているため、Library使用時にはこれがクリアされず、2回めのライブラリ呼び出し時には前回のキャッシュをそのまま使っていたようです

とりあえずキャッシュ部分を削除してみました。

本来ならばきちんと治すべきなのですが、、、、、

本体修正後rubyを実行

期待通りとなりました

kakasi-rubyをruby1.9で動かす

https://github.com/hogelog/kakasi-ruby

ruby用のkakasiモジュールはそのままではruby1.9ではコンパイルが通りません

そこで↓を参考に修正

http://www.metareal.org/2007/06/14/ruby-extension-struct-rstring-macros/

パッチ

と思って作成していたらすでに修正している人がいました。_| ̄|○

https://github.com/hogelog/kakasi-ruby/tree/1.9

YAML.dumpで日本語が文字化けする

YAML.dumpでUTF8文字列をダンプする際にはバイナリと認識されてしまい、ファイルに保存した際にちょっと困ったことになります。

Psychなどを使う方法があるとのことですが、1.8だと気軽には使えません。

一つすばらしいやり方が紹介されていたのでちょっと改造してみます

http://projectzero-swb.blogspot.jp/2010/06/rubyyaml2.html

  • CentOS5.4
  • ruby1.8.7

実行結果

test3.yaml

rubyのマルチスレッド

rubyはマルチスレッドのプログラムを書いても、CPUは一個しか使ってくれないらしい。

GIL というもののせいらしい。。

http://ja.wikipedia.org/wiki/グローバルインタプリタロック

そこでマルチプロセスのプログラムを作ってみる