2012/12/07

git config --global push.default simple したら neobundle.vim でエラーになった

git push したらwarningがでた

warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

そういえば git の push.default を設定していなかったので、simpleに設定しておいた。

git config --global push.default simple

vimを起動したらwarningがでた

This is old version of neocomplcache-snippets-complete.
This is no longer maintained.
You should use neosnippet plugin instead of it.
https://github.com/Shougo/neosnippet

neocomplcache-snippets-complete は古いから neosnippet 使えよということらしい。
.vimrc から

NeoBundle 'Shougo/neocomplcache-snippet-complete'

を削除して

NeoBundle 'Shougo/neosnippet'

に変更して:NeoBundleInstallを実行した。

エラーになった

/Users/pinzolo/.vim/bundle/neosnippet
error: Malformed value for push.default: simple
error: Must be one of nothing, matching, tracking or current.
fatal: bad config file line 22 in /Users/pinzolo/.gitconfig
Cloning into /Users/pinzolo/.vim/bundle/neosnippet...

simple は push.default の値として不正だからnothing, matching, tracking, currentのどれかにしろと。
普通にgit pullするのは問題ないのになぁ。

simple から currentへ

git config --global push.default current

にして、:NeoBundleInstallしたら成功した。
挙動としては simple の方が好きなんだけど、とりあえず current にしておくか。
neobundle側での原因と対策も調べないとな。

2012/12/06

mac(Mountain Lion)にEclipseをインストールした

これまで事情があって Parallels 上の eclipse で開発していたけど、mac にも eclipse を導入しようと思い立ったので作業メモ。

Eclipseのインストール

  1. Eclipse DownloadからEclipse IDE for Java EE Developers」の「Mac OS X 64bit」をダウンロード
  2. ダウンロードしたファイルを解凍する
  3. 解答してできたeclipseフォルダをアプリケーションフォルダに移動

日本語化

  1. Pleiadesから「64bitのStandard Edition」をダウンロード(JavaだけでいいならJavaを、PythonやPHPの環境が欲しければUltimateを)
  2. ダウンロードしたファイルを解凍する
  3. 解凍したpleiades/eclipse/dropins/MergeDoc/Applications/eclipse/dropins内にコピーする
  4. 下記のコマンドを実行して、eclipse.iniに設定を追加する。

     echo "-javaagent:/Applications/eclipse/dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar" >> /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini
    
  5. /Application/eclipse/eclipse -cleanを実行してeclipse起動

これで、macで日本語化したeclipseが使えるようになった。

「'fenc' を空にしてください」エラーが出たら

vimを使っていてこんなエラーが出た。

E513: 書き込みエラー, 変換失敗 (上書きするには 'fenc' を空にしてください)

実際:set fenc=して保存したら保存できたけど、sjis だったのが utf8 になって文字化けしてしまった。
原因は×の代わりに☓(機種依存文字)を使っていたからだった。
このエラーが出たときは、機種依存文字や、現在の文字コードにない文字を使用していないかどうか確認しよう。

2012/11/17

Office2010のスクリーンショット挿入がとっても便利

最近 Office2010 を使い始めたんだけど、スクリーンショットを直接挿入できるようになってた。

[挿入]→[スクリーンショット]でウィンドウが列挙されて(自分自身のウィンドウは表示されない)

ウィンドウを選択すれば

スクリーンショットが挿入される。

領域を指定しての貼り付けも簡単。

[挿入]→[スクリーンショット]→[画面の領域(C)]をクリック。

画面がホワイトアウトして、領域が選択できる。

選択完了と同時に貼り付けられる。
範囲指定して確認とかは出来ないので注意。

操作マニュアル作る時など、いろんな場面で役立ちそうですね。

2012/11/14

Google Calendar で新しく作ったカレンダーがJorteに読み込まれない

PC から Google Calendar に新規カレンダーを作成したが、何をどうしても Jorte が読み込んでくれない。
Jorte の利用するカレンダーの候補に現れない。
Android設定 -> アカウントと同期 -> google のアカウント -> カレンダーの同期 を手動で同期させても、いっこうに候補に現れない。

あれこれ調べて試したところ、デフォルトのカレンダーアプリを凍結していたのがまずかったみたい。
凍結を解除して、デフォルトのカレンダーアプリで同期するカレンダーに設定すると、Jorte 側で利用するカレンダーの候補に現れた。
Jorte が Google Calendar に接続してデータ取得しているわけじゃないのね。
基本的にシステムが同期したデータを利用しているわけだ。なるほど

2012/11/07

ParallelsとWindows7とOfficeのインストール

Parallels のインストール

インストールメディアを突っ込んで、インストール.appをクリックすればインストールされる。

Windows7のインストール

Windows7のインストールメディアが入っている状態で、paralles を起動し「DVD/イメージファイルからWindowsをインストール」からインストールする

Officeのインストール

Officeのインストールメディアを入れてから仮想マシン上でSETUP.EXE を叩いてもインストール出来ない。「○○\setup.exe は有効な Win32 アプリケーションではありません」とエラーになる。
調べてみたらどうやら Finder でも認識されているからそうなるらしい。
それってどうあがいてもメディアからはインストール出来ないんじゃ??

というわけで、iso を作ることにした。
ディスクユーティリティを起動し、表示されたインストールメディアを選択し、[ファイル] -> [新規] -> [○○からのディスクイメージ]を実行すれば iso イメージが作成される。

Officeのインストールメディアをアンマウントし、Parallels のメニューから [デバイス] -> [CD/DVD] -> [イメージの接続]を実行し、さっき作成した iso を選択すればマウントでき、自動的にインストールが始まった。

Officeのインストール時に行った手法は、今後何度も使いそうなのでメモとして残しておこう。
惜しむらくは深夜に作業したため、スクリーンショットをまったく取ってなかったことだ

2012/10/15

define_method で可変長引数のメソッドを定義する

色々試してみたけど、こうすればいいみたい。
ポイントは7行目の *params と 9行目の *args かな。

2012/10/12

RSpec で undefined method `fixtures'

RSpec で fixtures が動かない

rspec でテストデータを用意して、fixtures メソッドを使用したら、そんなメソッドねーよ。と言われた。

/Users/pinzolo/projects/mastar/spec/mastar/name_value_pair_spec.rb:30:in `block (2 levels) in <top (required)>': undefined method `fixtures' for #<Class:0x007faa888623a8> (NoMethodError)
    from /Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `module_eval'
    from /Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:238:in `subclass'
...

TestFixtures を include してみる

spec_helper.rb に下記を追加してみる。

require 'rspec'
RSpec.configure do |config|
    config.include ActiveRecord::TestFixtures
end

実行してみる。

/Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/activerecord-3.2.8/lib/active_record/fixtures.rb:728:in `block in <module:TestFixtures>': undefined method `setup' for #<Class:0x007fb3c20527d8> (NoMethodError)
    from /Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/concern.rb:119:in `class_eval'
    from /Users/pinzolo/projects/mastar/vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/concern.rb:119:in `append_features'
...

こんどは setup がないと。

調べてみると

https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/fixture_support.rbを見ると RSpec::Rails::FixtureSupport を include していて、その時に各種設定メソッドが追加されている。

結局

rspec-rails をインストールしないと fixtures は使えないのか。
できれば、関連 gem を増やしたくないので、他の手段を考えよう。
factory-girl がいいのかな。

2012/09/21

vimで保存するときにマジックコメントを埋め込む

最近ちまちまと.vimrcを再構築している @pinzolo です。

Ruby1.9+Railsで開発しているとちょくちょくやらかすのがのがエンコーディングの指定忘れ。 rails gで作られるファイルはマジックコメントがないので日本語入力して実行したらエラーになるわけですな。

んで世のエンジニアはそれをどう解決するかというのを調べてみた。

  1. ショートカットで先頭にマジックコメントを埋め込む
  2. magic-commentermagic-encodingのようなツールで一括付与

というのが結構多かった。 でも、1.は忘れることがあるし、2.はジェネレートするたびに行うのはめんどくさい。 じゃあどうするのが一番いいかと考えたら、保存時に追加されるのが一番だと思った。

エディタで保存を実行しないファイルは編集をしないのだからマジックコメントなくても問題無いわけだ。

class HogeHelper
end

こんなファイルはマジックコメントをいちいち付けなくていいや。というスタンスです。 というわけで、.vimrcに保存時にマジックコメントを追加する処理を書いてみた。

vimscriptなんて今までろくに書いたことがなかったからなかなか大変だった。以下、気にしたポイント。

  • 対象とするのは ruby, ERB, Haml の三種類。
  • ruby の場合は shebang の存在も考慮する。
  • すでにマジックコメントが存在する場合は付与しない。
  • マジックコメントは 1 行目。shebang があるときは 2 行目。
  • マジックコメントの形式は emacs 形式にしようか迷ったけど、自分の環境では vim しか使わないからまあいいや。

ソースコードは間違ってないと思うのだけど、いざ保存すると必ず E488 エラーがでる。
正直なんでかわからん。有識者の方々教えてください。
動作に影響はないからとりあえずこのままにしてる。エラーメッセージがうざかったらとりあえず :silent! つければいいや。

とまあ、微妙に不完全なシロモノですがよければお試しください。

2012/08/09

初めてのたいむまっすぃーん

MacBook Air を購入してしばらくたったが、非常に快適に使用している。
いろいろと仕事に開発に使用する以上、当然バックアップが必要なわけで、遅まきながら TimeMachine を初めて使ってみた。
当然ながら外部メディアがないとどうしようもないので、ヨドバシで使えそうなのを購入。
安かったのとシルバーがあったので、ヨドバシ.com - 東芝 HDTC610JS3A1 [USB3.0接続 ポータブルハードディスク 1TB シルバー]【無料配達】を購入した。
ヨドバシのオンラインだと、11800とかだけど実店舗だと10,000円未満だったですわ。

あとはつないでポチポチポチだった。楽ちん

ただ繋いだら

こんなのが出てきたので、「バックアップディスクとして使用」をクリック。

そしたらこんなのが出てくるので、バッサリと消去。

そしたらもう TimeMachine の設定終わっちゃってさ。

ちょいとしたらバックアップ始まってやがんの。

んで、そのままバックアップ完了よ。簡単でしょ。

Windows も最近はバックアップ(復元ポイントとか)が簡単になってるけど、Mac も簡単なのね。
正直このレベルならどちらも個人的には差がないので甲乙付けられないけど、バックアップと復元が手軽なのはいいね。
願わくばバックアップを使うことがありませんように・・・

2012/06/22

さくら VPS の Ubuntu Server 10.04 に SSL 環境を設定

Ubuntu 10.04 Serverの設定メモ を参考に Redmine を SSL 環境に移行した。
# 鍵作成時の入力の手間を省く
pinzolo@mkt-sys:~$ sudo vim /usr/lib/ssl/misc/CA.sh
- DAYS="-days 365" # 1 year - CADAYS="-days 1095" # 3 years + DAYS="-days 3650" # 10 year + CADAYS="-days 7300" # 20 years
# 鍵作成時の入力の手間を省く pinzolo@mkt-sys:~$ sudo vim /etc/ssl/openssl.cnf
- default_days = 365 # how long to certify for - default_crl_days= 30 # how long before next CRL + default_days = 3650 # how long to certify for + default_crl_days= 7300 # how long before next CRL - countryName_default = AU + countryName_default = JP - stateOrProvinceName_default = Some-State + stateOrProvinceName_default = Kanagawa - 0.organizationName_default = Internet Widgits Pty Ltd + 0.organizationName_default = mkt-sys.jp - basicConstraints = CA:FALSE + basicConstraints = CA:TRUE
# 自己認証局(CA)用に複写して編集 pinzolo@mkt-sys:~$ sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl_server.cnf pinzolo@mkt-sys:~$ sudo vim /etc/ssl/openssl_server.cnf
- basicConstraints = CA:TRUE + basicConstraints = CA:FALSE - # nsCertType = server + nsCertType = server
# 秘密鍵の作成(このサーバー用にパスワードを考える) pinzolo@mkt-sys:~$ sudo openssl genrsa -des3 -out mkt-sys.key 1024 # 要求証明書(CSR)を作成(本来このCSRを認証局に送って署名してもらう) pinzolo@mkt-sys:~$ sudo openssl req -new -days 3650 -key mkt-sys.key -out csr-mkt-sys.pem # 自分で認証局(CA)を立てて署名するため、CAの構築(CA用のパスワードを考える) pinzolo@mkt-sys:~$ sudo /usr/lib/ssl/misc/CA.sh -newca # CSRに署名をして証明ファイルを作成 pinzolo@mkt-sys:~$ sudo openssl ca -config /etc/ssl/openssl_server.cnf -in csr-mkt-sys.pem -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem -out ssl-cert-mkt-sys.pem # エラーが発生した場合 index.txt を空にして再実行 pinzolo@mkt-sys:~$ sudo rm demoCA/index.txt pinzolo@mkt-sys:~$ sudo touch demoCA/index.txt pinzolo@mkt-sys:~$ sudo openssl ca -config /etc/ssl/openssl_server.cnf -in csr-mkt-sys.pem -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem -out ssl-cert-mkt-sys.pem # 秘密鍵のパスワードを解除する(サーバー用パスワードを使用) pinzolo@mkt-sys:~$ sudo openssl rsa -in mkt-sys.key -out ssl-cert-mkt-sys.key # permission 変更 pinzolo@mkt-sys:~$ sudo chmod 640 ssl-cert-mkt-sys.* # グループの変更(owner は root のまま) pinzolo@mkt-sys:~$ sudo chgrp ssl-cert ssl-cert-mkt-sys.* # 解除した秘密鍵と証明書を適当なフォルダに格納 pinzolo@mkt-sys:~$ sudo mkdir /etc/apache2/cert pinzolo@mkt-sys:~$ sudo cp ssl-cert-mkt-sys.* /etc/apache2/cert/ pinzolo@mkt-sys:~$ sudo ln -s /etc/apache2/mods-available/ssl.conf /etc/apache2/mods-enabled/ssl.conf pinzolo@mkt-sys:~$ sudo ln -s /etc/apache2/mods-available/ssl.load /etc/apache2/mods-enabled/ssl.load # 鍵ファイル情報を追加 pinzolo@mkt-sys:~$ sudo vim /etc/apache2/sites-available/redmine
+ SSLCertificateFile /etc/apache2/cert/ssl-cert-mkt-sys.pem + SSLCertificateKeyFile /etc/apache2/cert/ssl-cert-mkt-sys.key
# サービスを再起動 pinzolo@mkt-sys:~$ sudo service apache2 restart # 後始末(最初にワークディレクトリ作れば良かった) pinzolo@mkt-sys:~$ mkdir work/ssl pinzolo@mkt-sys:~$ sudo mv mkt-sys.key work/ssl/ pinzolo@mkt-sys:~$ sudo mv csr-mkt-sys.pem work/ssl/ pinzolo@mkt-sys:~$ sudo mv demoCA/ work/ssl/ pinzolo@mkt-sys:~$ sudo mv ssl-cert-mkt-sys.* work/ssl/

さくら VPS (Ubuntu Server 10.04)設定エントリ一覧

2012/06/16

果実酒つけたのでレポートするよ

今年も果実酒がアツい季節がやって参りました。
というわけで、いつもは「○○漬けた」とつぶやくだけだったけど、今回はレポートしてみます。
今回漬けるのは二つ。
果実酒の定番である梅酒と、果実酒の王様であるびわ酒。

今日の主役たち


びわ 1kg強
梅(南高梅) 1kg
ウォッカ GILBEY'S 750ml を 2.5本
ウィスキー トリス を 1.8リットル
果糖 300g
果実酒の基本は、果物1kgにお酒1.8リットルです。
お酒はアルコール度数20度以上の物にしましょう。
酒税法で決められているというのもありますが、度数が低いとカビが生えたりして失敗する可能性が高くなります。
なぜ、こういうチョイスなのかは後で述べます。

前準備


あく抜きのために梅を水につけておきます。
熟した南高梅の場合はあまり必要ないのですが、青梅やあまり熟していない南高梅の場合はやっておいた方がいいでしょう。
漬けておく時間は、長くても一時間ぐらいで。

びわ酒を漬ける


びわを一つずつ丁寧に水洗いし、へたを取ります。


とりあえずクッキングシートを敷いて並べてます。


焼酎など度数が強めのアルコールで容器を消毒し


びわを一つ一つクッキングシートでよく拭いて


消毒した容器に入れていきます。


びわは高いし、こんな機会でもないとなかなか買わないのでつまみ食いも欠かしません。


全部入れ終わると、ウォッカを注いでいきます。
基本はこれだけですが、もうちょっとあります。


つまみ食いしたびわの種がありますよね。
びわはあんずとかと同様に仁、つまり種からもいい味が出ます。
なので、種も洗って放り込みます。


こんな風に投入します。
漬けた後からも、びわを食べる機会があったら種をちょこちょこ足していくといいですよ。
これでびわ酒は終わりなので、次は梅酒に行きましょう。

梅酒を漬ける


びわと同じように梅も一つずつ丁寧に洗います。
その際に爪楊枝などでへたを取ります。
えぐるより真ん中に刺してはがす感じ。これが意外と楽しい


びわと同じように綺麗に拭いて容器に入れていきます。


果糖300gを投入します。


ウィスキーを投入して完了。

最後に


日付や材料をタグ付けして


暗所(押入)に保存。
本来は冷暗所がいいんだけど、最近の住宅事情だと冷蔵庫以外の冷暗所なんてなかなかない。
だれか蔵を寄贈して下さい。

こだわり

ホワイトリカーじゃなくてウォッカ?
一般的には果実酒はホワイトリカーで作ります。
これはホワイトリカーが香りもクセもないお酒なので、果物の味がわかりやすく、楽しみやすいからです。
ということなら無味無臭無香のウォッカでもいいわけで、絞りカスから作られるホワイトリカーよりウォッカの方がいいなーということでウォッカを使ってます。
自分が果実酒を作るときはまずウォッカで作り、いったん試してから相性の良さそうなお酒を探します。

レモン使わないの?
びわのように酸味の弱い果物にはレモンの輪切りを一緒に漬ける人も多いみたいです。
でも、ほとんどの果物においては単一で作った方がしっかり味が出ておいしいと思います。
旬の果物の味を楽しみたいのでレモンは使ってません。

氷砂糖じゃなくて果糖?
レモンと同様に基本的に果実酒には糖類は使わないのですが梅酒とあんず酒には糖類を入れた方がおいしいと思います。
特にあんず酒はあんず単品だと飲めた物じゃないです。糖類必須。
で、一般的に梅酒には氷砂糖を使うようです。
浸透圧だとか、じっくり溶けるからより梅のエキスがでるとかいいますが、あまり関係ありません。
関係なくはないのですが、あれは短期間しか漬けない人が少しでも味を良くするための知恵だと思います。
氷砂糖がゆっくり溶けるといっても一ヶ月もあれば影も形もないのです。
自分のように最低でも一年は漬ける場合、梅単体で漬かっている方が遥かに長く、氷砂糖が溶けている時間なんて誤差みたいなもんです。
そして、なぜ果糖かというと果糖は果物によく含まれているので、相性がいいだろうということと、糖度が砂糖よりも高いため500gのところを350g程度で済みます。
カロリー的には少し低いか、大して変わりませんが、コストパフォーマンスはけっこういいですよ。
吸収率は無類ですし

ウィスキー?
梅酒に関しては色々試しました。
各種焼酎、ウォッカ、黒糖焼酎 + 黒糖の黒糖梅酒、ブランデー、ウィスキー、紹興酒...
どれもそれぞれおいしいんですが、ウィスキーが一番インパクトがあります。
ウィスキーって独特のクセがあったりしますが、あれがなくなり非常にまろやかになります。
人に飲ませたとき、ウィスキーで漬けたというとたいてい驚かれます。
個人的にはウィスキー梅酒はかなりオススメです。

というわけで果実酒レポートでした。
旬の果物を果実酒にすると色々と楽しめます。
同じ果物はだいたい一年に1,2回しかつけません。
来年はこういう漬け方してみようとか思うので趣味として長続きするんじゃないでしょうかね。
この時期、果実酒にしておいしい果物があふれています。梅、びわ、あんず、プラムなどなど。
ぜひ、この機会に試してみて下さい。

2012/06/15

MacBook Air 13inch を注文してきた

なんで Mac?

開発用ノートとして個人的に外せない要素として
  1. 持ち運びできる大きさ、重さなこと(1.5kg前後まで)
  2. *nixもしくはそれに準ずる環境が使えること
  3. USキーボード
  4. メモリたくさん
  5. それなりに高い解像度
があるのだけど、2, 3 の時点でだいたい3つの選択肢になる。
  1. ThinkPad + Ubuntu
  2. Vaio + Ubuntu
  3. Mac
最初は 2 でがんばってたんだけど、どうも Vaio と Ubuntu が相性が良くない。(あくまで経験上ね)
なので、ほとんど ThinkPad に Ubuntu 入れていた。
Windows 環境もいるので、Mac はあまり眼中になかった。
また ThinkPad X200 シリーズはモバイル性、スペックの上で素晴らしいバランスだった。
しかし、そのまま正当進化すればいいのに 1440 * 900 の解像度を捨ててしまった。
縦 768 とかアホか。ほんとアホか。
というわけで Windows 環境込みで考えるとコストが高いけど、開発マシンとして評判の高い Mac を買うことにした。
あ、あと iPhone アプリも開発してみたかったんだ。iPhone 持ってないけど。

どの Mac にしたの?

結局 MacBook Air 13inch にした。
先日の WWDC では、MacBook Pro 13inch with Retina Display を期待していたんだけど、15inch だけった。
いくら従来より軽くなったとはいえ重い。そしてでかすぎる。
なので持ち運びやすい MacBook Air にした。
MacBook Pro 13inch は約2kgと重いし、解像度が Air 13inch に劣るしね。

どんな構成?

  • CPU を i7 に
  • メモリを8Gに
  • キーボードをUSに
こんな感じ。
SSD 256 → 512 に +44,000 はちょっときつい。
初めての Mac なので 256 でも十分だろうと思った。
3年後ぐらいには MacBook Pro 13inch with Retina で2kg切ったやつが出てるだろうし。

どこで買ったの?

仕事帰りに帰り道とは全く関係ない秋葉原まで行ってきた。
カスタマイズした Mac を買ってポイントつくのは、ここら辺だと Mac Collection AKIBA しかないみたい。
現金だと 5%、カードだと 3%。プレミアムクラブに入ってると +1% のルピーっていうソフマップのポイントがもらえる。
クレジットカード + プレミアムクラブだったから、145800円で5832ポイントもらえた。
ソフマップのポイントはビックカメラのポイントに交換できるし、ビックカメラのポイントは Suica やマイルに交換することができる。
Mac 買うためだけにポイントカード作ってもいいんじゃないかな?
プレミアムクラブは年会費かかるけどね。(でも、年に一回ソフマップで買い物すれば無料になる)
あと、独自のサポートもやってるので Apple Care 高いなーと思う人にはいいかもしれない。
自分は Apple Care に入らず、ワランティMってやつに入っておいた。
月額 300 円で、落として壊してもサポート受けられるってお店の人が言ってた。

いつごろ届く?

お店の人に 10 日から 2 週間かかるって言われた。
土日を多く挟むタイミングだったから少し長いって言われたので、平均したら一週間ちょいぐらいで届くみたい。
ちなみに、自宅への送料も無料

というわけで

人生において初めての Mac。
今から楽しみです。
とりあえず、アレ入れよう、これ設定しようといろんなエントリ見ながらワクワクしてます。
早く来い来い。

2012/06/09

さくら VPS の Ubuntu Server 10.04 に git サーバーを構築

公開リポジトリは github でいいけれど、プライベートなリポジトリも欲しいよね。
というわけで、サーバーに git のリポジトリをたてるべく gitosis をさくらの VPS の Ubuntu Server 10.04 に導入したのでメモ。

# gitosis のインストール
pinzolo@server:~$ sudo aptitude install -y gitosis
[sudo] password for pinzolo: Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initializing package states... Done The following NEW packages will be installed: gitosis python-pkg-resources{a} python-setuptools{a} 0 packages upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 318kB of archives. After unpacking 1,487kB will be used. Writing extended state information... Done Get:1 http://jp.archive.ubuntu.com/ubuntu/ lucid/main python-pkg-resources 0.6.10-4ubuntu1 [65.0kB] Get:2 http://jp.archive.ubuntu.com/ubuntu/ lucid/main python-setuptools 0.6.10-4ubuntu1 [213kB] Get:3 http://jp.archive.ubuntu.com/ubuntu/ lucid/universe gitosis 0.2+20090917-2 [40.4kB] Fetched 318kB in 0s (501kB/s) Preconfiguring packages ... Selecting previously deselected package python-pkg-resources. (Reading database ... 64406 files and directories currently installed.) Unpacking python-pkg-resources (from .../python-pkg-resources_0.6.10-4ubuntu1_all.deb) ... Selecting previously deselected package python-setuptools. Unpacking python-setuptools (from .../python-setuptools_0.6.10-4ubuntu1_all.deb) ... Selecting previously deselected package gitosis. Unpacking gitosis (from .../gitosis_0.2+20090917-2_all.deb) ... Setting up python-pkg-resources (0.6.10-4ubuntu1) ... Processing triggers for python-central ... Setting up python-setuptools (0.6.10-4ubuntu1) ... Processing triggers for python-central ... Setting up gitosis (0.2+20090917-2) ... Please read /usr/share/doc/gitosis/README.Debian for information about how to use gitosis. Processing triggers for python-support ... Reading package lists... Done Building dependency tree Reading state information... Done Reading extended state information Initializing package states... Done Writing extended state information... Done
# git ユーザーを作成 pinzolo@server:~$ sudo adduser git --system --shell /bin/sh --group --disabled-password --home /var/lib/git
Adding system user 'git' (UID 107) ... Adding new group 'git' (GID 116) ... Adding new user 'git' (UID 107) with group 'git' ... Creating home directory '/var/lib/git' ...
# gitosis 初期化 pinzolo@server:~$ sudo -H -u git gitosis-init < .ssh/id_rsa.pub
Initialized empty Git repository in /var/lib/git/repositories/gitosis-admin.git/ Reinitialized existing Git repository in /var/lib/git/repositories/gitosis-admin.git/
# post-update フックスクリプトに実行権限を付与 pinzolo@server:~$ sudo chmod 755 /var/lib/git/repositories/gitosis-admin.git/hooks/post-update
これでサーバー上の作業はおしまい。

ここからローカルでの作業。

# 管理リポジトリを clone する
pinzolo@local % git clone git@server:gitosis-admin.git
Cloning into 'gitosis-admin'... remote: Counting objects: 5, done. remote: Compressing objects: 100% (5/5), done. remote: Total 5 (delta 0), reused 5 (delta 0) Receiving objects: 100% (5/5), done.
# リポジトリ内はこんな構造になっている pinzolo@local % cd gitosis-admin pinzolo@local % tree
. ├── gitosis.conf └── keydir └── pinzolo@mkt-sys.jp.pub 1 directory, 2 files
# gitosis.conf を編集 pinzolo@local % vim gitosis.conf
[gitosis] [group gitosis-admin] writable = gitosis-admin members = pinzolo@mkt-sys.jp # ここから追加 [group hoge] writable = hoge members = pinzolo@mkt-sys.jp
# 修正を commit して、反映させるために push(新しいリポジトリ hoge.git が作成される) pinzolo@local % git add gitosis.conf pinzolo@local % git status
# On branch master # Changes to be committed: # (use "git reset HEAD ..." to unstage) # # modified: gitosis.conf #
pinzolo@local % git commit -m "hogeリポジトリを追加"
[master 01e4aec] hogeリポジトリを追加 1 file changed, 4 insertions(+)
pinzolo@local % git push
Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 387 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@server:gitosis-admin.git 893246e..01e4aec master -> master
# サーバーのリポジトリを origin として登録し push する pinzolo@local % cd ~/projects/hoge pinzolo@local % git remote add origin git@server:hoge.git pinzolo@local % git push origin master
Counting objects: 5557, done. Delta compression using up to 2 threads. Compressing objects: 100% (5162/5162), done. Writing objects: 100% (5557/5557), 14.71 MiB | 145 KiB/s, done. Total 5557 (delta 1436), reused 0 (delta 0) To git@server:hoge.git * [new branch] master -> master

結構簡単に中央リポジトリのある開発ができますね。

さくら VPS (Ubuntu Server 10.04)設定エントリ一覧

2012/05/30

BackgroundWorker 内で DataContext を使うとき

DataContext を取得するのは UI スレッドからでしか無理のようだ。例外が発生する。
なので BackgroundWorker で DataContext を取得したい場合、こんな風に UI スレッドで動かしてやらないといけない。
Action action = () =>
{
    var hoge = (HogeViewModel)this.DataContext;
    // do something ...
}
tihs.Dispatcher.Invoke(action);

WPFのドラッグアンドドロップで処理を行う場合

エクスプローラとかからディレクトリを D & D して処理を行う場合、よほど軽いすぐ終わる処理でない限りは BackgroundWorker などで別スレッドにしたほうがいいみたい。
Window_Drop ハンドラ内で処理していたら、処理が終わるまでエクスプローラがロックされたような状態になってしまう。

2012/05/29

WPFでファイルやディレクトリのドラッグアンドドロップ処理

例えば Window に対して行うなら、Window の AllowDrop を true にして、DragOver と Drop イベントにハンドラを設定すればできる。
イベント名が違うだけで、これも WinForms 時代と変わらないね。
DataFormats って文字列の定数クラスなのね。
const じゃなくて readonly なのは理由があるのだろうか?

2012/05/28

WPFで未処理の例外を一括処理

アプリケーション開発の定番の例外一括処理。
WPF も Windows Forms 時代とたいして変わらないね。
DispatcherUnhandledException はコードビハインドではなく、App.xaml に記述することもできるけど、UIスレッドで発生した時の DispatcherUnhandledException と UIスレッド以外で発生した時の UnhandledException はセットで考えるべきだと思うので、見通しが良いように一括で設定するようにしてる。

2012/05/19

特定のインターフェースを実装しているかどうかを調べる

プロパティの型が IEnumerable かどうかを判別したかった。
// 基底クラス
public class Base {}

// サブクラス
public class SubClass : Base {}

// とあるクラス
public class Foo
{
    // 実体は List だけど IEnumerable として公開
    public IEnumerable Classes
    {
        get { return new List<SubClass>(); }
    }
}
これでリフレクションを用いて、Classes プロパティが IEnumerable と互換性があるかどうかを調べたい。
var propType = typeof(Foo).GetProperty("Classes").PropertyType;
bool impl = false;

// これは false
impl = propType.IsSubclassOf(typeof(IEnumerable));

// これで IEnumerable を実装していることは判別できた
var filter = new System.Reflection.TypeFilter((t, obj) => t == (Type)obj);
impl = propType.FindInterfaces(filter, typeof(IEnumerable)) > 0;

// 最終的にはこう
impl = impl && propType.IsGenericType && propType.GetGenericParameters()[0].IsSubclassOf(typeof(Base));
かなり長ったらしくてめんどくさい。
なんか簡単な方法があるはずだと思って調べてみたら、これだけでできた。
typeof(IEnumerable<Base>).IsAssignableFrom(propType)
代入可能かどうかで調べたらよかったのか。

2012/05/16

chrome に期間限定系の Google 検索を登録すると便利

Googleの検索結果を常に更新が1年以内のものに限定するChrome Extension「ato-ichinen」が便利 | Last Day. jp
けっこう需要あるみたいですね、これ。
技術系の調べ物をしている時に昔のページが検索に引っかかって、バージョンが古くて微妙に違うとかよくあるので、一年以内とか一ヶ月以内はよく使うね。
なので、自分の場合はよく使うものを検索エンジンに登録してる。
登録してるのはこんな感じ。
検索エンジン キーワード URI
google(1年) gy https://www.google.co.jp/search?q=%s&tbs=qdr:y
google(半年) gh https://www.google.co.jp/search?q=%s&tbs=qdr:m6
google(3ヶ月) gq https://www.google.co.jp/search?q=%s&tbs=qdr:m3
google(1ヶ月) gm https://www.google.co.jp/search?q=%s&tbs=qdr:m
拡張機能もいいけれど、キーボードだけで操作できるし、期間も細かく区切れるので、自分にはこっちのほうが便利かな。

2012/05/15

Rails プロジェクトの初期化

Ubuntu 12.04 上にとりあえず簡単な Rails プロジェクトを作成した。
このあたりの作業は毎回ほぼ同じになるのでログとして残しておこう。
# デフォルト設定の確認
$ cat ~/.railsrc
-T -d postgresql --skip-bundle
$ mkdir projects/new_prj $ cd projects/new_prj $ bundle init $ echo "gem 'rails', '3.2.3'" >> Gemfile $ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/......... Installing rake (0.9.2.2) Installing i18n (0.6.0) Installing multi_json (1.3.5) Installing activesupport (3.2.3) Installing builder (3.0.0) Installing activemodel (3.2.3) Installing erubis (2.7.0) Installing journey (1.0.3) Installing rack (1.4.1) Installing rack-cache (1.2) Installing rack-test (0.6.1) Installing hike (1.2.1) Installing tilt (1.3.3) Installing sprockets (2.1.3) Installing actionpack (3.2.3) Installing mime-types (1.18) Installing polyglot (0.3.3) Installing treetop (1.4.10) Installing mail (2.4.4) Installing actionmailer (3.2.3) Installing arel (3.0.2) Installing tzinfo (0.3.33) Installing activerecord (3.2.3) Installing activeresource (3.2.3) Using bundler (1.1.3) Installing json (1.7.3) with native extensions Installing rack-ssl (1.3.2) Installing rdoc (3.12) Installing thor (0.14.6) Installing railties (3.2.3) Installing rails (3.2.3) Your bundle is complete! It was installed into ./vendor/bundle Post-install message from rdoc: Depending on your version of ruby, you may need to install ruby rdoc/ri data: <= 1.8.6 : unsupported = 1.8.7 : gem install rdoc-data; rdoc-data --install = 1.9.1 : gem install rdoc-data; rdoc-data --install >= 1.9.2 : nothing to do! Yay!
$ bundle exec rails new .
Using -T -d postgresql --skip-bundle from /home/pinzolo/.railsrc exist create README.rdoc create Rakefile create config.ru create .gitignore conflict Gemfile Overwrite /home/pinzolo/projects/expns/Gemfile? (enter "h" for help) [Ynaqdh] Y force Gemfile create app create app/assets/images/rails.png create app/assets/javascripts/application.js create app/assets/stylesheets/application.css create app/controllers/application_controller.rb create app/helpers/application_helper.rb create app/mailers create app/models create app/views/layouts/application.html.erb create app/mailers/.gitkeep create app/models/.gitkeep create config create config/routes.rb create config/application.rb create config/environment.rb create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb create config/initializers create config/initializers/backtrace_silencers.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/secret_token.rb create config/initializers/session_store.rb create config/initializers/wrap_parameters.rb create config/locales create config/locales/en.yml create config/boot.rb create config/database.yml create db create db/seeds.rb create doc create doc/README_FOR_APP create lib create lib/tasks create lib/tasks/.gitkeep create lib/assets create lib/assets/.gitkeep create log create log/.gitkeep create public create public/404.html create public/422.html create public/500.html create public/favicon.ico create public/index.html create public/robots.txt create script create script/rails create tmp/cache create tmp/cache/assets create vendor/assets/javascripts create vendor/assets/javascripts/.gitkeep create vendor/assets/stylesheets create vendor/assets/stylesheets/.gitkeep create vendor/plugins create vendor/plugins/.gitkeep
$ rm public/index.html $ echo "/vendor/bundle" >> .gitignore $ echo "/config/database.yml" >> .gitignore # .bundle/config が作成されているので --path はもう不要 $ bundle install
Fetching gem metadata from https://rubygems.org/......... Using rake (0.9.2.2) Using i18n (0.6.0) Using multi_json (1.3.5) Using activesupport (3.2.3) Using builder (3.0.0) Using activemodel (3.2.3) Using erubis (2.7.0) Using journey (1.0.3) Using rack (1.4.1) Using rack-cache (1.2) Using rack-test (0.6.1) Using hike (1.2.1) Using tilt (1.3.3) Using sprockets (2.1.3) Using actionpack (3.2.3) Using mime-types (1.18) Using polyglot (0.3.3) Using treetop (1.4.10) Using mail (2.4.4) Using actionmailer (3.2.3) Using arel (3.0.2) Using tzinfo (0.3.33) Using activerecord (3.2.3) Using activeresource (3.2.3) Using bundler (1.1.3) Installing coffee-script-source (1.3.2) Installing execjs (1.3.2) Installing coffee-script (2.2.0) Using rack-ssl (1.3.2) Using json (1.7.3) Using rdoc (3.12) Using thor (0.14.6) Using railties (3.2.3) Installing coffee-rails (3.2.2) Installing jquery-rails (2.0.2) Installing pg (0.13.2) with native extensions Using rails (3.2.3) Installing sass (3.1.18) Installing sass-rails (3.2.5) Installing uglifier (1.2.4) Your bundle is complete! It was installed into ./vendor/bundle
$ git init $ git add . # 確認 $ git status
# On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: .gitignore # new file: Gemfile # new file: Gemfile.lock # new file: README.rdoc # new file: Rakefile # new file: app/assets/images/rails.png # new file: app/assets/javascripts/application.js # new file: app/assets/stylesheets/application.css # new file: app/controllers/application_controller.rb # new file: app/helpers/application_helper.rb # new file: app/mailers/.gitkeep # new file: app/models/.gitkeep # new file: app/views/layouts/application.html.erb # new file: config.ru # new file: config/application.rb # new file: config/boot.rb # new file: config/environment.rb # new file: config/environments/development.rb # new file: config/environments/production.rb # new file: config/environments/test.rb # new file: config/initializers/backtrace_silencers.rb # new file: config/initializers/inflections.rb # new file: config/initializers/mime_types.rb # new file: config/initializers/secret_token.rb # new file: config/initializers/session_store.rb # new file: config/initializers/wrap_parameters.rb # new file: config/locales/en.yml # new file: config/routes.rb # new file: db/seeds.rb # new file: doc/README_FOR_APP # new file: lib/assets/.gitkeep # new file: lib/tasks/.gitkeep # new file: log/.gitkeep # new file: public/404.html # new file: public/422.html # new file: public/500.html # new file: public/favicon.ico # new file: public/robots.txt # new file: script/rails # new file: vendor/assets/javascripts/.gitkeep # new file: vendor/assets/stylesheets/.gitkeep # new file: vendor/plugins/.gitkeep #
$ git commit -m "initial commit"
[master (root-commit) 230f0d4] initial commit 33 files changed, 920 insertions(+) create mode 100644 .gitignore create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 README.rdoc create mode 100644 Rakefile create mode 100644 app/assets/images/rails.png create mode 100644 app/assets/javascripts/application.js create mode 100644 app/assets/stylesheets/application.css create mode 100644 app/controllers/application_controller.rb create mode 100644 app/helpers/application_helper.rb create mode 100644 app/mailers/.gitkeep create mode 100644 app/models/.gitkeep create mode 100644 app/views/layouts/application.html.erb create mode 100644 config.ru create mode 100644 config/application.rb create mode 100644 config/boot.rb create mode 100644 config/environment.rb create mode 100644 config/environments/development.rb create mode 100644 config/environments/production.rb create mode 100644 config/environments/test.rb create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/initializers/secret_token.rb create mode 100644 config/initializers/session_store.rb create mode 100644 config/initializers/wrap_parameters.rb create mode 100644 config/locales/en.yml create mode 100644 config/routes.rb create mode 100644 db/seeds.rb create mode 100644 doc/README_FOR_APP create mode 100644 lib/assets/.gitkeep create mode 100644 lib/tasks/.gitkeep create mode 100644 log/.gitkeep create mode 100644 public/404.html create mode 100644 public/422.html create mode 100644 public/500.html create mode 100644 public/favicon.ico create mode 100644 public/robots.txt create mode 100755 script/rails create mode 100644 vendor/assets/javascripts/.gitkeep create mode 100644 vendor/assets/stylesheets/.gitkeep create mode 100644 vendor/plugins/.gitkeep
bundle exec rails new . と現在のディレクトリ名から rails new できるのがとてもありがたい。
これが引数ベースじゃないからこそ、bundler が生きるんじゃなかろうか

Redmine を 1.4.1 から 2.0.0 にアップデートした

Redmine 2.0.0 リリース | Redmine.JP Blog
先日 1.4.x がリリースされたのに、2.0.0 が早くもリリースされました。
bundler 使っていれば、Rails のバージョンは実運用にはあまり関係ないかと思うけど、まだインストールして間もないことだしせっかくなので最新環境に変更します。
基本的に アップグレード | Redmine.JP のままやるだけだけど。
# ダウンロード→展開→配置
$ wget http://rubyforge.org/frs/download.php/76134/redmine-2.0.0.tar.gz
$ tar xvf redmine-2.0.0.tar.gz
$ mv redmine-2.0.0 /var/lib/rails/
$ cd /var/lib/rails/redmin-2.0.0

# 依存 gem をインストール
$ bundle install --path vendor/bundle --without development test mysql sqlite

# 設定ファイルを引き継ぎ
$ cp ../redmine/config/database.yml config/
$ cp ../redmine/config/configuration.yml config/

# トークンを生成。generate_session_store から generate_secret_token に変更になったらしい
$ bundle exec rake generate_secret_token

# マイグレーションを実行、追加されたのはテーブル 1 つだけだった
$ bundle exec rake db:migrate RAILS_ENV=production

# 環境を掃除して
$ bundle exec rake tmp:cache:clear
$ bundle exec rake tmp:sessions:clear

# オーナーを変更
$ chown -R www-data:www-data .

# Apache の設定ファイルを修正して再起動
$ vi /etc/apache2/site-available/redmine
<VirtualHost *:80> ServerName xxx.mkt-sys.jp - DocumentRoot /var/lib/rails/redmine/public + DocumentRoot /var/lib/rails/redmine-2.0.0/public PassengerEnabled on </VirtualHost>
$ service apache2 restart # ログローテートの設定も修正 $ vi /etc/logrotate.d/redmine
- /var/lib/rails/redmine/log/*log { + /var/lib/rails/redmine-2.0.0/log/*log { weekly missingok notifempty copytruncate }
アクセスして、ログイン→管理→情報でバージョンを確認。
バッチリですね。

XCData を後から追加するには

<name><![CDATA[pinzolo]]></name>
こんな XML を出力したい場合、通常ならばこう書けばいい。
var nameElement= new XElement("name", new XCData(obj.Name));
でも、obj.Name が null の場合、ArgumentNullException が発生する。
そこで、文字列が存在する場合のみ CDATA セクションを追加するようにしたい。
最初はこう書いた。
var nameElement = new XElement("name");
if (obj.Name != null)
{
    nameElement.SetValue(new XCData(obj.Name));
}
しかし、XObject を値にすることはできないという ArgumentException が発生した。
とりあえず次はこうしてみた。
var nameElement = new XElement("name");
if (obj.Name != null)
{
    nameElement.SetValue(new XCData(obj.Name).ToString());
}
こうなった。まあ、当たり前だ。
<name>&lt;![CDATA[pinzolo]]&gt;</name>
他にも正解はあるだろうが、とりあえず正解の一つはこれのようだ。
var nameElement = new XElement("name");
if (obj.Name != null)
{
    nameElement.ReplaceNodes(new XCData(obj.Name));
}
なるほど、置き換えてやるのね。

2012/05/14

rbenv で rubygem をインストールしても command not found となる場合

rails の開発環境をぼちぼちと整えようと思って、とりあえずグローバルな gem として pry と bundler だけインストールした。
ところが、pry はターミナルから使用できるが、bundle コマンドは command not found となった。
rbenv をインストールしていると、$HOME/.rbenv/shims と $HOME/.rbenv/bin に PATH が通っているはずなので、$HOME/.rbenv/shims を覗いてみた。
$ ll $HOME/.rbenv/shims
drwxrwxr-x 2 pinzolo pinzolo 4096  5月 14 07:52 .
drwxr-xr-x 9 pinzolo pinzolo 4096  5月 11 11:46 ..
-rwxrwxr-x 2 pinzolo pinzolo  100  5月 14 07:18 coderay
-rwxrwxr-x 8 pinzolo pinzolo  100  5月 11 11:46 erb
-rwxrwxr-x 8 pinzolo pinzolo  100  5月 11 11:46 gem
-rwxrwxr-x 8 pinzolo pinzolo  100  5月 11 11:46 irb
-rwxrwxr-x 2 pinzolo pinzolo  100  5月 14 07:18 pry
-rwxrwxr-x 8 pinzolo pinzolo  100  5月 11 11:46 rake
-rwxrwxr-x 8 pinzolo pinzolo  100  5月 11 11:46 rdoc
-rwxrwxr-x 8 pinzolo pinzolo  100  5月 11 11:46 ri
-rwxrwxr-x 8 pinzolo pinzolo  100  5月 11 11:46 ruby
-rwxrwxr-x 8 pinzolo pinzolo  100  5月 11 11:46 testrb
こんな風になってた。全て同じサイズ??ということで diff を取ってみると、ファイル名以外は全て同じらしい。
$ cat shims/pry
#!/usr/bin/env bash
set -e
export RBENV_ROOT="/home/pinzolo/.rbenv"
exec rbenv exec "${0##*/}" "$@"
環境変数を設定して、rbenv 経由で処理を実行しているのね。
というわけで、bundle という名前でファイルをコピーしてやれば良さそうだ。
$ cp $HOME/.rbenv/shims/{pry,bundle}
$ bundle
Could not locate Gemfile
# 2012-05-15 追記
単に rehash していなかっただけだった
rbenv rehash しても command not found になるなら、お試し下さい。

2012/05/12

Ubuntu 12.04 に色々とアプリケーションをインストールした

Ubuntu 12.04 にいつもの環境を整えた。

環境系

# 日本語ディレクトリを英語に
$ LANG=C xdg-user-dirs-gtk-update

# aptitude はデフォルトではインストールされていない
$ sudo apt-get aptitude

# システムをアップデート
$ sudo aptitude update
$ sudo aptitude full-upgrade

# screen も入ってなかった
$ sudo aptitude install -y screen

# 日本語入力はmozc
$ sudo aptitude install -y ibus-mozc

# 日本語のほうがありがたい
$ sudo aptitude install -y manpages-ja

# シェルは zsh
$ sudo aptitude install -y zsh

# vim 必須
$ sudo aptitude install -y vim-nox vim-gnome

# lv 使う
$ sudo aptitude install -y lv

アプリケーション

# Google Chrome と Dropbox は本家からインストールする

# コマンドラインランチャ。これがあれば左側のいらない
$ sudo aptitude install -y gnome-do

# F12でターミナルが降りてくる。とても便利。zsh を使う際、bash をかませる必要がなくなった
$ sudo aptitude install -y guake

開発環境

# 開発するならこれは必須
$ sudo aptitude install -y build-essential

# webサーバは無難にapache
$ sudo aptitude install -y apache2

# DB は PostgreSQL(バージョンが9.1.3になってる)
$ sudo aptitude install -y postgresql libpq-dev pgadmin3

# Subversion から git に完全移行中なのであえて Subversion は入れない
$ sudo aptitude install -y git-core

# ライブラリのインストール(zlib1g-dev とか libssl-dev はすでに入ってたけど一応)
$ sudo aptitude install -y zlib1g-dev libssl-dev libreadline-dev libxslt-dev libxml2-dev libyaml-dev libsqlite3-dev

# rbenv を github から取得
$ mkdir ~/git_repos
$ cd ~/git_repos
$ git clone git://github.com/sstephenson/rbenv.git
$ cd ~
$ ln -s git_repos/rbenv .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> .zshrc
$ echo 'eval "$(rbenv init -)"' >> .zshrc
$ source .zshrc

# ruby-build を github から取得
$ cd git_repos
$ git clone git://github.com/sstephenson/ruby-build.git
$ cd ruby-build
$ sudo sh install.sh

# 最新バージョンを確認して、最新をインストールして、使用するように設定する
$ rbenv install
$ rbenv install 1.9.3-p194
$ rbenv rehash
$ rbenv global 1.9.3-p194
Ruby on Rails 3.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました - Rails 雑感 - Ruby on Rails with OIAXとかを参照すると rbenv は apt で入れられるようになったみたいだが、自分の環境だとダメだった。
インストールはできるが、rbenv global しても /usr/bin/ruby が居座り続ける。
apt から rbenv をインストールすると ruby1.9.1(実体はruby1.9.3-p0)もインストールされる。
これが /usr/bin/ruby の実体になるので、rbenv global してから ruby -v すると、ruby1.9.3-p0 のまま。
ruby1.9.1 パッケージを削除しようとすると rbenv が依存しているため rbenv が動かなくなる。
どうにもならないので、全部削除して rbenv を github から取ってきたらうまくいった。

2012/05/11

Ubuntu 12.04 に行ったキーボード関連の設定

Ubuntu 12.04 をインストールしてまずキーボード関連の設定を行った。

CapslockをCtrlに

右上から[システム設定]を選択
[ユーザー向け]→[キーボードレイアウト]を選択
オプションをクリック
[Caps Lock キーの動作]を展開
[デフォルト]から[Caps Lock を追加の Control にするが・・・]に変更

ibus-mozcをインストール

# aptitude はデフォルトでは入ってなかった
$ sudo apt-get install -y aptitude

# aptitude で update
$ sudo aptitude update

# ibus-mozc をインストール
$ sudo aptitude install -y ibus-mozc

日本語設定

Dashをibusで検索。キーボード・インプットメソッドを立ち上げる
[一般]タブの[キーボードショートカット]→[切り替え]から余計なものを削除しAlt+graveだけにする。
削除は右の[...]ボタンからどうぞ。
[インプットメソッド]タブを表示
Mozcだけ使用するように設定

ところが...

Alt+grave しても日本語が入力できない。
Alt+Tab のようなウィンドウ選択になる。
どうやら既に Alt+grave がなにかのショートカットになっているみたい。
ぐぐってみると Gnome3における日本語入力設定 - サトルサトラレ in Boston に解決策があった。
また右上から[システム設定]を立ち上げて、今度は[ハードウェア]→[キーボード]を選択
[ショートカット]タブを表示して、左側のリストから[ナビゲーション]を選択。
どうやらこれの[ひとつのアプリケーション内のウィンドウを切り替える]が Alt+grave になっているらしい。
見た目は無効だけど、割り当てられているらしい。
これに適当に別のショートカットを割り当てる。
割り当てるには選択して割り当てたいショートカットを押せばOK。
さらに Back Space で再度無効にする
これで無事 Alt+grave で日本語が入力できるようになった。
こんなん完璧にトラップじゃねーか!

VMWare Player に Ubuntu 12.04 をインストールした

Ubuntu 12.04 LTS Desktop 日本語 Remix CD がリリースされていたので、開発環境を構築するために VMWare Player にインストールした。

CDイメージのダウンロード

Ubuntuの日本語環境 | Ubuntu Japanese Team から iso ファイルをダウンロード。
32bitしかないのね、まあいいか。

VMWare Playerで仮想マシンの作成

通常のインストールと同様にするため、OSは後からインストールする。
ゲストOSはLinux、バージョンはもちろんUbuntu
仮想マシンの名前と置き場を指定。データ置き場が E ドライブなので、デフォルトから変更した。
長く使う予定なのでファイルのサイズを100G、移動とか後の管理がしやすいのでファイルは分割する。
後からでもできるけど、この段階でカスタマイズする。
メモリは4G。Ubuntu 12.04はデフォルトでPAEが有効になっているから3G以上指定しても無駄にならないよ。
プロセッサはとりあえず2つ使う。本格的に開発するようになったら4にするかも。
仮想マシンを再生したら自動的にインストールが始まるように、ISOイメージファイルをダウンロードしたISOファイルに指定しておく。
作成完了。仮想マシンを再生したらインストール始まります。

Ubuntu 12.04 のインストール

新規作成のVMで試すのは時間の無駄かなということでいきなりインストール。
「インストール中にアップデートをダウンロードする」と「サードパーティのソフトウェアをインストールする」にチェックして続ける。
専用領域なんだしおまかせで。
ドライブを選択。一つしかないけどね。
インストール始まりました。
地域を選択。最初から Tokyo になっているので問題なし。
ちなみに下に表示されているファイルのコピーはバックグラウンドで別スレッドで動いてる。
キーボードのレイアウトを選択。デフォルトでは日本語キーボードになっているけど、自分が使用しているのは英語キーボードなので、英語(US)を選択。
自分のユーザーを作成。名前・マシン名・ユーザー名・パスワードを入力。
自動的にログインはしない。毎回パスワード入力するほうがセキュリティ的に安心できる。
残りのインストールが始まる。
インストールが完了した、簡単だね。再起動します。
ログイン画面が表示された。後はログインして好きなように使いましょう

感想

  • インストールは相変わらず簡単。基本的にポチポチしてれば大丈夫
  • フォントとか画面描画とか綺麗になってる
  • VMWare でもデスクトップ効果が有効になったのか、guakeの透過が可能になってたり、gnome-doのスキンが変更できたり実機へのインストールと見た目も変わらん
  • メニューが大幅に変わったので慣れるまで使いにくいかも、最初の環境設定がやりにくくてしゃーない
  • Dashは便利。というか最初はDashか右上のシステム設定でなんとかするしかない
  • アプリの一覧とかアクセスしにくくなった。カテゴリで絞り込むのも手間かかる。まあgnome-doあるので問題ないけど
  • より一般ユーザー向けになった印象