(wrist blog)

twitterはこちら http://twitter.com/wrist

homebrewでphp5.4.12をインストール

brew tapリポジトリを追加したらインストールできるはずだがconfigure: error: GD build test failed. Please check the config.log for details.と表示されてコケて調べたのでそのメモ。 このissueを参考にして、freetype, jpeg, libpng, gdを入れなおしたら行けた。

$ brew update
$ brew tap homebrew/dupes
$ brew tap josegonzalez/homebrew-php
$ brew rm freetype jpeg libpng gd
$ brew install freetype jpeg libpng gd
$ brew link --overwrite freetype 
$ brew install php54  

なおbrew link --overwrite freetypeWarning: Could not link freetype. Unlinking...というエラーがfreetypeのインストール時に表示されたため実行した。

osxとdebian上でrbenv + ruby-buildを使ってruby 2.0.0-p0をインストール

今更な上に色んな人が書いていますが自分もやってみました。

rbenv, ruby-build

rbenvはrvmのような複数バージョンのRubyを管理するためのツールで、 ruby-buildはrbenv installを提供するrbenvのプラグインです。 環境変数でバージョンの切替などができる模様です。

参考: rbenvとRVMとの違い

インストール環境

  • mac osx(Mountain Lion 10.8.3, x86_64)
  • さくらVPS上のdebian(squeeze 6.0.7, x86_64)
  • homebrew/apt-get, gitはインストール済み

mac osx上でのインストール

この記事を参考にさせて頂きました。 ここではhomebrewを使ってrbenv, ruby-buildのインストールを行います。 ちなみにruby 2.0.0-p0を使いたいだけならばhomebrewで直接導入もできるみたいです。

0. 準備

予めreadline、opensslをインストールしておきます。

$ brew update
$ brew install readline
$ brew install openssl

1. rbenv, ruby-buildのインストール

以下のようにしてインストールします。

$ brew install rbenv
$ brew install --HEAD ruby-build

2013/10/27追記

ruby-buildでインストール可能なrubyのバージョン一覧を更新したいときは、gitで入れた場合はpullするだけですが、homebrewで入れている場合は一旦brew uninstall --HEAD ruby-buildした後に再びinstallしてやれば最新のruby-buildがインストールされるのでこれで一覧が更新されます。

2. ruby 2.0.0-p0をインストール

以下を実行して

$ rbenv install -l

一覧にruby 2.0.0-p0があることを確認した後に、

$ RUBY_CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install 2.0.0-p0

でインストールします。インストール後、以下を実行します。

$ rbenv rehash
$ rbenv global 2.0.0-p0

rbenv rehash~/.rbenv/shimsを更新することで、インストールしたrubyやgemの情報を更新するコマンドです。 ~/.rbenv/shimsirb, gem, rake, rails, rubyといったrubyに関するコマンドを維持するためのディレクトリで、 このディレクトリをパスの先頭に追加してやる必要があります。 公式にはこのためにrbenvは予め以下を実行することで、パスの追加及び自動補完を有効化し、 ついでに.zshenv(bashの場合は.bash_profile)にeval $(rbenv init -)を書き込んでくれる旨が書かれています。

$ echo 'eval "$(rbenv init -)"' >> ~/.zshenv

rbenv init -のみを実行すると何が行われているかが分かると思います。

一方でrbenv global~/.rbenv/versionを更新するためのコマンドです。 このファイルが存在しない場合、rbenvはシステムにインストールされたrubyを使用することを想定するようです。 またrbenv localでアプリケーション毎に利用するrubyのバージョンを切り替えられたりするようです。

この上で、以下を実行してバージョンを確認します。

$ ruby -v

これでruby 2.0.0p0が表示されれば無事インストール完了です。

2013/10/27 追記

osxをmavericksにアップデートしたらrbenv install実行時に以下のようなエラーが出るようになりました。

BUILD FAILED

Inspect or clean up the working tree at /var/folders/nc/h5hw29596zzbhrcstv7h24hr0000gn/T/ruby-build.20131027021741.58118
Results logged to /var/folders/nc/h5hw29596zzbhrcstv7h24hr0000gn/T/ruby-build.20131027021741.58118.log

Last 10 log lines:
checking build system type... x86_64-apple-darwin13.0.0
checking host system type... x86_64-apple-darwin13.0.0
checking target system type... x86_64-apple-darwin13.0.0
checking for gcc-4.2... gcc-4.2
checking for gcc... (cached) gcc-4.2
checking whether the C compiler works... no
configure: error: in `/var/folders/nc/h5hw29596zzbhrcstv7h24hr0000gn/T/ruby-build.20131027021741.58118/ruby-2.0.0-p195':
configure: error: C compiler cannot create executables
See `config.log' for more details
make: *** No targets specified and no makefile found.  Stop.

コンパイラが問題だということが分かるので、

$ CC="/usr/bin/clang" RUBY_CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install 2.0.0-p0

コンパイラを明示的に指定してインストールすることで解決します。

debian上でのインストール

この記事を参考にさせて頂きました (Qiita上で僕も記事を書くべきのような気もして来ましたが…)。 debianではapt-getを使って必要なパッケージ一式を取得した後に、 rbenv, ruby-buildをgithub上のリポジトリをcloneして取得します。

0. 準備

予めビルドに必要なパッケージ一式をインストールします。

$ sudo apt-get update
$ sudo apt-get install build-essential bison openssl libreadline6 \
libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev \
libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf \
libc6-dev ncurses-dev

1. rbenv, ruby-buildのインストール

公式を参考に以下のようにしてgitで取得し、各種設定を行います。 rbenvのインストールは以下のように行います。~/.rbenv/binにパスを通しているのは、rbenv init`の実行のためです。

$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshenv
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l  # restart login shell

この上でruby-buildをインストールします。

$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

2. ruby 2.0.0-p0をインストール

以下を実行して

$ rbenv install -l

一覧にruby 2.0.0-p0があることを確認した後に、

$ rbenv install 2.0.0-p0

でインストールします。インストール後、以下を実行します。

$ rbenv rehash
$ rbenv global 2.0.0-p0

2013年 手首の目標

緒言

そろそろ一年の1/12が終わろうとしているというのに今更2013年の目標を立てようかと思います。 昨年は修論に始まり就職、研修、配属と立て続けに色々あったので、多少は落ち着いた今年こそ適当に頑張りたい。

目標達

  • 頑張ってブログを書く
  • ロードバイクでn*100km以上の遠出をする
  • 10kg痩せる
  • 裁断機とスキャナを買ってできれば自炊する
  • 一ヶ月に一回ぐらいは地域の勉強会に参加
  • githubをちゃんと使う
  • 個人のポートフォリオを作る
  • アップルにお布施を払ってしまったのでiPhoneアプリを一本仕上げてリリースしたい
  • HTML5のaudio周り(web audio apiなど)をちゃんと追う
  • Scalaで一本Webサービスを仕上げる
  • 放置しているSICPをスケジュールをちゃんと立てて読む
  • PRMLもちゃんと読みたい
  • 本業のための勉強を最優先にする

無理かもしれないけど諦めるものか

はてなブログとの使い分け

一つ前のエントリではてなブログに移行すると書きましたが技術ブログと日記的なものを分けて書いて行きたいと思ったので
前言を撤回して今後そういう使い分けをして行きます。
はてなダイアリーの方が将来サービスを停止したらその時はwordpressにでも移行します。

あとあんまり関係ないのですがこの4月から社会人になりました。
名古屋から大阪に移ったので大阪界隈の方々はどうぞ宜しくお願い致します。

xargsにbashのfunctionを渡す方法

あっさりできるかと思ったら意外に時間が掛かってしまったので纏めておく。
ポイントは2点で、

  • export -f 関数名 しておく
  • xargsではbash -c "コマンド" を実行する

で行けた。

パスにそのbasenameした結果をTAB区切りで連結しただけの文字列をechoする関数を定義する。

$ function echo_with_basename(){
>  echo -e "$1\t`basename $1`" # -eオプションが無いと\tがTABに変換されない
> }

この関数を次のようにファイルリストを出力した結果をパイプで繋ぎxargsに渡す。

$ cat filelist.txt
/home/wrist/data/A00000.txt
/home/wrist/data/A00001.txt
/home/wrist/data/A00002.txt
/home/wrist/data/A00003.txt
/home/wrist/data/A00004.txt
$ cat filelist.txt | xargs -I % echo_with_basename % # "-I %"のオプションは引数を%で表すことを示す
xargs: echo_with_basename: そのようなファイルやディレクトリはありません

このようにそのようなファイルやディレクトリが無いと言われてしまう。
そこでexport -fした上で次のように実行する。

$ export -f echo_with_basename
$ cat filelist.txt | xargs -I % echo_with_basename %
xargs: echo_with_basename: そのようなファイルやディレクトリはありません

またしても同じ事を言われてしまう。これを防ぐためには、次のように実行する。

$ cat filelist.txt | xargs -I % bash -c "echo_with_basename %"
/home/wrist/data/A00000.txt     A00000.txt
/home/wrist/data/A00001.txt     A00001.txt
/home/wrist/data/A00002.txt     A00002.txt
/home/wrist/data/A00003.txt     A00003.txt
/home/wrist/data/A00004.txt     A00004.txt

これで所望の結果が得られた。
なおインタラクティブシェルだけでなくスクリプトとして実行する際もexport -fした上で同様に利用することができる。

2011/11/27の手首

今日はTOEICを受けたのであるがリスニングが途中で止まる等ハプニングに見舞われた上に,
だらだらやってたら明らかに時間が足りなくなってしまったので
僅か一ヶ月半前の前回の受験と比べると大幅なスコアの減少が見込まれ
目から汗が湧き出しかねない一日であった.

それ以上に受験後に行こうと思っていたつけ麺屋が昼から夜に掛けてずっと開店してると思い込んでいたら
開店時間が18時という遥か先だったので泣きながらココイチでビーフカレー400gを食べた.

ココイチは余り知られていないがルー多めと頼むと無料でルーを追加してくれるので,
実際100g米の量を増やすよりも300gで頼んだ上でルー多めに150gのライスを別で注文した方が同じ値段なので量的にはお得である.
これは実際にココイチ店員であった友人に教えて頂いた技なので僕から半径Nkm以内にいる貧乏学生達は覚えておいて損は無いと思われる.

さて現在研究室に戻って来ているので今から研究やら書類を相手に一晩戦おうかと思う.

ところでiPhone/iPadアプリのiSSHを随分前に購入したものの,外出先からジョブの様子を見るなどする以外に特別な用途を見い出せないでいたのであるが,
rubyのautotestをこれで走らせておけばPCでファイルを保存する度にiPad側も反応してくれるので
これは意外と良い使い道ではないかと思いこれから試そうかと思っている.

来週は実質最後のゼミなので死ぬ気で血ヘドを吐くまで頑張りたい.