rvmをインストールしてRuby1.8.7とRuby1.9.2を共存させられるようになるまで

asakusa.rbで、1.8と1.9をうまく共存させる方法ありませんかと質問した時に、ひょいひょいっと教えてもらったrvmインストールのメモ。その時持っていたmacbookにはもういれたので別のPC(Ubuntu)で試してます。教えてくださったid:takkan_mさんありがとうございます。


元々gemのインストールをホームディレクトリ以下(~/.gem)にする習慣が無かったので、今回からそれを改めるべく、その辺の設定も一緒にやりました。所要時間:10分くらい。
まずはrvmのインストール。

hibariya@HIBARIYA% gem install rvm

実はこれだけではまだrvmのインストールは終わってないらしい。rvm-installというのを叩く必要がある。インストールが完了した時点で、rvm-installというコマンドが使える人はそのまま実行。使えない場合はPATHが通ってないので、.zshrcとか.bashrcに、

export PATH=$PATH:~/.gem/ruby/1.8/bin/ 

などと追記。sourceで読み直して、rvm-installを実行。

hibariya@HIBARIYA% source ~/.zshrc
hibariya@HIBARIYA% rvm-install 
Installing rvm to /home/hibariya/.rvm/ ...
rvm - shell scripts that allows a user to manage multiple ruby versions in their own account.

<中略>

1) Place the folowing line at the end of your shell's loading files(.bashrc and then .bash_profile for bash and .zshrc for zsh), after all path/variable settings:

     if [[ -s /home/hibariya/.rvm/scripts/rvm ]] ; then source /home/hibariya/.rvm/scripts/rvm ; fi

2) Ensure that there is no 'return' from inside the .bashrc file. (otherwise rvm will be prevented from working properly).
3) CLOSE THIS SHELL and open a new one in order to use rvm.

.zshrc(とか.bashrc)の最後にこの一行を追加してね。という文言が出てくるので、
if -s /home/hibariya/.rvm/scripts/rvm ; then source /home/hibariya
にあたる行を.zshrcの末尾にコピーして貼り付け。sourceで読み直すと使えるようになる。

hibariya@HIBARIYA% source ~/.zshrc
hibariya@HIBARIYA% rvm --version

rvm 0.1.11 by Wayne E. Seguin (wayneeseguin@gmail.com) [http://rvm.beginrescueend.com/]

これでrvm自体のインストールは完了。次はrvmを使って最新のRubyをインストール。

hibariya@HIBARIYA% rvm install head-ruby 
Installing Ruby from source to: /home/hibariya/.rvm/rubies/ruby-head
Updating ruby from http://svn.ruby-lang.org/repos/ruby/trunk
Compiling ruby-head, this may take a while, depending on your cpu(s)...

<中略>

Installation of gems for ruby-head is complete.

自分の環境ではautoconfとbisonがないと言われたのでaptitudeで適当に入れました。結果的には動いてるんですけど、よく見たらRubyインストールの段階で「rvm requires curl, which does not seem to exist in your path :(」とか言われているので後でやり直します。

rvmの使い方はこんな感じです。

hibariya@HIBARIYA% ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]
hibariya@HIBARIYA% rvm list
   ruby-head [ i386 ]
   system [ ]
hibariya@HIBARIYA% rvm use ruby-head 

Now using ruby head

hibariya@HIBARIYA% ruby --version
ruby 1.9.2dev (2010-02-09 trunk 26623) [i686-linux]

コマンド一つでRubyの環境を切り替えられます。あと、irbとかのバージョンも一緒に切り替わります。

もとに戻すにはresetを使います。何かエラーが出ますが。

hibariya@HIBARIYA% rvm reset
__rvm_reset:6: no matches found: /home/hibariya/.rvm/bin/default_*
__rvm_reset:6: no matches found: /home/hibariya/.rvm/bin/passenger_*
__rvm_reset:6: no matches found: /home/hibariya/.rvm/bin/editor_*
__rvm_reset:18: no matches found: /home/hibariya/.rvm/bin/default*
hibariya@HIBARIYA% ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]

rvmでインストールできるのはruby-head以外にも色々あるようです。詳しくは、rvm --helpで。

  * ruby    - MRI/YARV Ruby (The Standard), defaults to 1.8.6
  jruby     - JRuby
  rbx       - rubinius
  ree       - ruby Enterprise Edition
  macruby   - MacRuby (Mac OS X Only)
  maglev    - Gemstone Ruby
  ironruby  - IronRuby
  mput      - shyouhei(mput)'s github repository

notify-sendについて調べたのでメモ

Ubuntu(9.10 Karmic Koara)での話。

  • notify-sendというコマンドを知りました

自分の環境ではCommand Not Foundだったので、インストール。

hibariya@HIBARIYA% aptitude install libnotify-bin
hibariya@HIBARIYA% notify-send 'summary' 'body'

デフォルトでは画面の右上にGrowlみたいなのが出てきて、なかなか素敵。

  • Pythonでできるそうです
import pynotify

pynotify.init("notify-example")
n = pynotify.Notification(
    "notify-example",
    "Hello, NotifyOSD",
    "notification-message-IM")
n.show()
http://kamenasu.blogspot.com/2009/08/pythonnotifyosd.html

すごい!

  • Rubyでもやってみたい
hibariya@HIBARIYA% gem search -r libnotify

*** REMOTE GEMS ***

libnotify (0.0.4)

なんだかそれらしいものが。
libnotifyにはFFIも必要らしいので、一緒にインストール。

hibariya@HIBARIYA% sudo gem install libnotify ffi
Successfully installed libnotify-0.0.4
Building native extensions.  This could take a while...
Successfully installed ffi-0.5.4
2 gems installed
Installing ri documentation for libnotify-0.0.4...
Installing ri documentation for ffi-0.5.4...
Installing RDoc documentation for libnotify-0.0.4...
Installing RDoc documentation for ffi-0.5.4...
hibariya@HIBARIYA% sudo updatedb
hibariya@HIBARIYA% locate libnotify.rb
/usr/lib/ruby/gems/1.8/gems/libnotify-0.0.4/lib/libnotify.rb
/usr/lib/ruby/gems/1.8/gems/libnotify-0.0.4/test/test_libnotify.rb

使い方も何も知らないので、中身を覗いてみる。
libnotify.rbは/usr/lib/ruby/gems/1.8/gems/libnotify-0.0.4/libにあるみたい。
どんどこスクロールしていくと、ファイルの最後あたりにサンプルコードがあった。

  Libnotify.new do |notify|
    notify.summary = "world"
    notify.body = "hello"
    notify.timeout = 1.5        # 1.5 (sec), 1000 (ms), "2", nil, false
    notify.urgency = :critical  # :low, :normal, :critical
    notify.icon_path = "/usr/share/icons/gnome/scalable/emblems/emblem-default.s
    notify.show!
  end 

  Libnotify.show(:body => "hello", :summary => "world", :timeout => 2.5)

早速見よう見まねでで動かそうとしたら、何かのライブラリが足りないと(何だったか忘れた)怒られたので、libnotify-devをインストール。

hibariya@HIBARIYA% aptitude install libnotify-dev

↓みたいに色々省略してもOK。

#!/usr/bin/env ruby

require 'rubygems'
require 'libnotify'

Libnotify.show{|n|
  n.summary = 'どうのこうの'
  n.body = 'あーしてこーして'
}


rubygemsをrequireしたり環境によってはlibnotify-devをインストールしなきゃいけなかったりするので、普通にシェル叩いた方が楽な気もするけど、満足できたのでOK。

Ubuntuのwine上でゆめにっき

仕事でも個人的にもUbuntuしか使わなくなったので(Office的な仕事だけその辺に落ちてたノートPCにWindows入れて作業してる)、ゆめにっきをプレイするにはwine仮想マシンっていう選択肢があって、wine上で動くか調べてみたら割と問題なく動くようなので実際にやってみた。メモ。
画面はすぐ動くようになったけど、問題は音。

  • 環境
    • EeePC 1000H
    • Ubuntu 9.10 Karmic Koala (LiveCDからインストール)
  • 手始めにwineとlhaをインストール。
% sudo aptitude install wine wine-dev 
% sudo aptitude install lha
  • ランタイムのダウンロードとインストール

http://www.famitsu.com/freegame/rtp/2003_rtp.html
自己解凍形式で落とした。

  • ゆめにっき本体のダウンロードとインストール

ゆめにっきの詳細情報 : Vector ソフトを探す!

  • lha-sjisのインストール

lhaを展開してみて気付いたけど、ubuntu上だとファイル名が化けてまともに実行できない。lha-sjisというパッケージが必要らしい。

システム > システム管理 > 日本語環境セットアップ・ヘルパ

を起動。場合によっては色々なアップデートをしろと言われるので、素直にアップデートしたらちゃんと起動した。
インストールするパッケージをリストからチェックする画面が何回か現れるので、適当にチェックを入れる。リストのどこかにlha-sjisが現れるのでそれには必ずチェックを入れる。
lha-sjisがインストールされると、lhaを展開するとき自動的にsjisのファイル名をUTF-8に変換してくれる。

  • とりあえず動いた

~/.wine/drive_c/Program Files など適当な場所に解凍したゆめにっきを配置。
ゲームスタート.exeを叩けば普通に動く。
ただ、自分の環境では音は鳴らなかった。

MIDIの再生ができるようにtimidityとSoundFontをインストール。してtimidityを起動。

% sudo aptitude install timidity timidity-interfaces-extra
% sudo aptitude install fluid-soundfont-gm fluid-soundfont-gs
% sudo vim /etc/timidity/timidity.cfg
#  以下の記述を追記
  source /etc/timidity/fluidr3_gm.cfg
  source /etc/timidity/fluidr3_gs.cfg
  opt -Os
% sudo /etc/init.d/timidity start
  • その他

まだ不安定。理由は分からないけど以下の手順で割と安定した。

アプリケーション > Wine > Configure Wine

でWineの設定画面を開く。
[オーディオ]タブを開く。
[Driver Selection]ではALSAを選択。
[DirectSound]ではハードウェア・アクセラレータを[Emulation]に設定。[ドライバ・エミュレーション]のチェックは外したまま。


これでなんとか普通にプレイできた。
たまにエラーを吐いて終了するので気長にやれたらいいかも。

ちなみ、にConfigure Wineの[画面]タブで、[デスクトップをエミュレートする]にチェックを入れると、ゲーム起動する度にフルスクリーンにならずに済みます。

三項演算子の改行

改行してみようとか思ったこともなかったけど、改行する書き方もあることを知った。if文にするには短すぎるけど三項演算子一行で書いちゃうには長すぎる記述とか、式が長すぎるけどその場ではどうしても一行じゃないとだめで、でも一行のためにifとか書くのが面倒なときにいいのかな?

  true ? 'hoge' : 'piyo'

これが

  true ?
    'hoge' : 'piyo'

でも大丈夫。
Rubyだと、改行が入る前に?か:がないとだめみたい。

  true ? 'hoge' 
       : 'piyo'

こう書けたりする言語はちょっと羨ましいな。

空のディレクトリに空の.gitignoreを作成するシェルスクリプト

 技術っぽいエントリをこっちに書くことにした。
 タイトルどおりのことをやろうとしたときのスクリプトをメモ。

#!/bin/sh 

directory_scan()
{
  finds=""
  for file in `ls $1`;
  do
    finds=${finds}" "$file
  done

  if [ "$finds" = "" ];
  then
    echo 'create: '${1}'/.gitignore'
    touch $1/.gitignore
    if [ $? -eq 0 ];
    then
      echo 'success'
    else
      echo 'failure'
    fi
  fi 

  for directory in $finds;
  do 
    if [ -d ${1}'/'${directory} ];
    then
      directory_scan ${1}'/'$directory 
    fi
  done
}

directory_scan `pwd`
exit 0

白昼夢200901106

 古い、A4見開きページの左ページに書かれた文字。
 まん丸い太い書体で縦書きの「うろうろするな」。
 文字の丸くなっている部分が、そのまわりを埋め尽くしている童の笑っている口になっている。
 初めから文字ではなくて、もしかしたら初めから童の笑っている口だったのかもしれない。
 もう片方のページを見ると、そこにも文字が書いてあって、でもよく見るとそれは文字ではなくて、
 赤黒い何か動物の死体が象形文字みたいに並んでいる写真だった。

 その後で少しだけ目が覚めて、薄いぼんやりとした視線は、カーテン、枕の奥深く、夢の中の見開きページの間を行ったり来たりした。
 気味が悪くて午前休をとった。