2011年8月19日金曜日

Git on Windows

参考ページ:http://sourceforge.jp/magazine/09/02/12/0530242/3

・インストール
mysysgitをインストールする。

・日本語対応
lessとnkfをbinに放り込む。

C:\Program Files (x86)\Git\etc\inputrc
set output-meta off
set convert-meta off
↓
set output-meta on
set convert-meta on
set kanji-code utf-8

C:\Program Files (x86)\Git\etc\profile
export GIT_PAGER="nkf -s | less"

~/.gitconfig
[core]
editor = 'c:/nazochu/xyzzy-utf8/xyzzy.exe'

エディタはコミット時のコメントの入力に使用し、UTF-8Nで保存しないといけない。保存時にいちいち文字コードを指定していられないので、デフォルトの文字コードをUTF-8にした状態で起動したい。
xyzzy.exe -e "(set-buffer-fileio-encoding *encoding-utf8n*)" で行けるのだが、.gitconfigに括弧を含む値を記載すると思い通りに動いてくれなかったため、xyzzyを別の場所にコピーしてメニューの設定からデフォルトの文字コードを変えてそちらを使うという力技で対処した。

Git Bashでgitと打った後、Tabを押すとハングして反応が帰ってこなくなる現象が発生した。
C:\Program Files (x86)\Git\etc\git-completion.bash が悪さをしていそうだったので、
一時的にファイル名を変えたら、現象は再現しなくなった。
そしてファイル名を元に戻したら、何故か二度と再現しなくなった。

Ruby on Windows

テキストのプログラム言語を自動的に判別するlinguist(https://github.com/github/linguist)というライブラリがあることを知って使いたくなったけれど、Rubyで書かれているらしい。試すためにWindows上で環境を作ろうとしたらちょっとハマったのでメモ。
Rubyの実行環境は簡単に作れたんだが、linguistがbundler(ruby版aptやportsみたいなものらしい)を使っていたり、拡張ライブラリを使っているせいでコンパイルが必要だったりして面倒だった。
bundlerは裏で色々やってくれるのはありがたいんだけど、内部で何をしているのかが直観的に分かり難かった。
任せきりにしてもエラーが発生しないならブラックボックスとして使えるので良いんだろうけどまだその域には達していなさそう。Linuxで使うならもっとスムーズに行くのかもしれないけど。

rubyをダウンロードして解凍。(以下、C:\nazochu\rubyに置いたとして記載)
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html

PATHを変えるのは嫌だったので以下のbatファイルを作成してrubyを使う時はこれからコマンドプロンプトを開くようにする。
set path=%path%;C:\nazochu\ruby\bin
%comspec% /k

lignuistのHPにあるとおりにやってみる。
git clone https://github.com/github/linguist.git
cd linguist/
gem install bundler
bundle install
bundle exec linguist bin/linguist

エラーが色々出てくるので順番に解決していく。

・DLLが見つかりませんのポップアップ

以下から落としてきてbinに放り込む。

zlib, readline : http://jarp.does.notwork.org/win32/
openssl : http://www.limber.jp/2005/04/05/316
iconv : http://sourceforge.net/projects/gettext/files/libiconv-win32/

・nmakeが見つかりません。

必要な環境変数が設定されていないせい。Visual Studio 2008コンソールからbundle installを実行する。

・MSC version unmatch: _MSC_VER: 1200 is expected.

C:\nazochu\ruby\include\ruby-1.9.1\i386-mswin32\ruby\ruby.hを修正する。
#if _MSC_VER != 1200
↓
#if _MSC_VER < 1200

・'VALUE' : この型は演算子として使用できません、みたいなエラー

VC++はC99に対応していないのでブロックの最初以外で変数が宣言されるとエラーになる。
escape_utils.cの拡張子を.cから.cppにリネームしてC++としてコンパイルすることで回避。

・rb_define_methodとかで型エラー

1つ前の対策の副作用。C++になったことで関数ポインタの型が合わなくなったのでキャストを追加。
rb_define_method(mEscapeUtils, "escape_html", rb_escape_html, -1);
↓
#define RB_FUNC(f) reinterpret_cast(f)

rb_define_method(mEscapeUtils, "escape_html", RB_FUNC(rb_escape_html), -1);

・hexCharsのところでエラー
const unsigned char hexChars[16] = "0123456789ABCDEF";
↓
const unsigned char hexChars[17] = "0123456789ABCDEF";

・修正したソースファイルを使わせるにはどうするの?

bundlerで自動ダウンロードされるソースを修正したのだが、bunder installを使うと修正前のファイルで上書きされてしまうため困った。しょうがないのでエラーとなるgemだけ、bunderを使わずにインストールすることにする。
cd C:\nazochu\ruby\lib\ruby\gems\1.9.1\gems\escape_utils-0.2.3\ext\escape_utils
nmake
cd C:\nazochu\ruby\lib\ruby\gems\1.9.1\gems\escape_utils-0.2.3
gem build escape_utils.gemspec
gem install --local escape_utils-0.2.3.gem
ここまでやってbundle installに成功。

・MSVCR90.dllが見つからない。
bundle exec linguist bin/linguistと実行したら怒られた。
ランタイムを入れても良いけど必要ないようにコンパイルオプションを変更してmakeをやり直し。

C:\nazochu\ruby\lib\ruby\1.9.1\i386-mswin32\rbconfig.rb
CONFIG["CFLAGS"] = "-MD -Zi -W2 -O2b2xg- -G6 -Zm600"
CONFIG["CXXFLAGS"] = "-MD -Zi -W2 -O2b2xg- -G6 -Zm600"
↓
CONFIG["CFLAGS"] = "-MT -Zi -W2 -O2b2xg- -G6 -Zm600"
CONFIG["CXXFLAGS"] = "-MT -Zi -W2 -O2b2xg- -G6 -Zm600"

・異常に遅い。

そこそこ新しいPCなのに4秒以上かかる。本処理の前の起動処理で時間がかかっているみたいだ。
bunder経由での起動をやめたらかなり早くなった。

lib以下のファイルをruby -e "puts $LOAD_PATH"で出力されるディレクトリのどこかに置くようにして、
rubyコマンドで直接起動。

2011年8月15日月曜日

BloggerでCSSを設定する方法

Bloggerとかだと投稿欄はWebの表示のコピペを属性付きで受け入れられるので、コードとかを枠付きので記入したいときWebから適当にコピペすればできちゃうんだけど、それだと後で背景色とか枠線のフォーマットとかを変えたくなった時に困るのでCSSで指定する方法を調べてみた。

(1) [デザイン]-[テンプレートデザイナー]-[アドバンス]-[CSSを追加]

#code{
  border: solid 1px #000000; padding: 10px;background-color:#f0ffff;
}

(2) 投稿時、[HTMLの編集]を選んで以下のような感じで記入
<div id="code">
test
</div>

【結果】
test

2011年8月12日金曜日

VirtualBoxでエロゲの薦め

自分は最近エロゲをやるときはPCに直接インストールするのではなく、VirtualBoxという仮想環境上にインストールしてやるようにしている。なぜそんなことをしているのか? スタートメニューやプログラムの削除画面を他人に見られても大丈夫なようにという理由がないとは言わないが、もっと嬉しいご利益があるからだ。

ゲームをやる時はやっぱりフルスクリーンモードでやりたい訳だけど、そうすると困るのが同時にゲーム以外のウインドウをちょっと操作したいという時に切り替えが面倒ということだ。デュアルディスプレイ環境ならいくらか軽減できるけど、ゲームによっては起動すると別のディスプレイに移動できなくなってしまう。ちょっと飽きたんでゲームを一時中断してネットでも見ようかという時も、ゲームを落とさないと片方のディスプレイだけで使いづらい。
かといってウインドウモードでやる場合にも、最近のHD対応の1920x1080のディスプレイで、昔の640x480のゲームをやると、ウインドウが小さすぎてやってられない。

このどちらもVirtualBoxを使うと解決できてしまうのだ。VirtualBoxにはスケールモードという機能があって、仮想環境のデスクトップを好きな大きさに拡大・縮小することができる。つまり、仮想環境内でフルスクリーンでゲームを起動し、スケールモードを使ってウインドウの大きさを変えれば好きな大きさのウインドウでゲームをすることが可能になる。

ただ、この状態でウインドウをディスプレイの大きさ目一杯まで拡大し、フルスクリーンのようにゲームをしようしても、ウインドウに枠線があったり、タイトルバーがあるせいで、微妙にフルスクリーンと同じようにはならない。でも↓のツールを使うことでタイトルバーや枠線を消してフルスクリーンと同じ状態でゲームをすることができる。
https://sites.google.com/site/nazochu/Home/tools/autoscale

この似非フルスクリーンだがマルチディスプレイ環境で別のディスプレイへの移動を妨げられることもないし、ゲーム以外のウインドウを重ねて表示することもできるし、通常のフルスクリーン状態に比べてとても使い勝手が良い。仮想環境を使わなくても初めからこういう動作をしてくれれば良いのに。

最後にデメリットがないわけではないので書いておく。まず、仮想環境では起動しないゲームがたまにあることだ。タイプは2つあって、新しすぎてDirect3DのにVirtualBoxが対応しきれていないタイプと、古すぎてDirect2Dのバグが残ったままになっているタイプだ。手元のソフトで数えてみると、10%行かないくらいだった。

VirtualBoxはDirect3Dにも対応したんだけれど、最近だし、まだまだ穴はあるみたい。これはそのうち解決されていくと期待している。一方古いゲームでできない奴は対応の優先度が低そうなので、ちょっと不安。

あと、普通のゲームならともかく3Dを駆使しているやつだとPCのパフォーマンスに問題が出るかもしれない。(自分のやった範囲では問題にはならなかったが)

最後にWindowsのライセンスが余計に必要になる。意外と高い。

2011年8月10日水曜日

VirtualBoxでディスクイメージファイルを再構築する。

(1) ディスクの空き領域をゼロクリアする
Microsoftの配布しているツール(sdelete)が使える。

http://technet.microsoft.com/ja-jp/sysinternals/bb897443(en-us).aspx

sdelete -c 対象ドライブ

(2) 再構築
REM uuidを調べて
 vboxmanage list hdds

REM 再構築実行
 vboxmanage modifyhd [UUID] compact

Windows Updateを使わずにセキュリティパッチを一括入手

久しぶりにプログラムを作った。Windows2000以降なら動くようにはしたいなと思い、動作確認用に仮想環境にWindows2000をセットアップして知ったけれど、Windows2000用のWindows Updateってもう終了していたのね。プログラムの動作確認用でネットに接続するわけではないので、パッチがあたってなくても致命的ではない気がするけどなんか気持ちが悪い。

とはいえ、さすがに手作業で1つずつパッチをインストールする気にもなれず、いい方法がないか探してみたら↓を見つけた。

Windows Updates Downloader
http://www.windowsupdatesdownloader.com/

セキュリティパッチを一括ダウンロードしてくれるソフトで簡単にパッチが一括ダウンロードできた。

後はインストーラを全部実行すれば良い。
これも手作業でやるのはバッチファイルでもつくろうと思ったけど、ネットを探したらスクリプトが簡単に見つかった。

http://w-lab.sblo.jp/article/1308604.html

そんなわけで思ったより簡単にアップデートが完了。

インテリセンスのファイル格納場所の変更

Visual Studio C++ 2010で作ったプロジェクトをWebで配布しようとして、圧縮ファイルにするとやけにサイズが大きいことに気が付く。
これはインテリセンスという入力補完などをやってくれる機能があり、この機能がキャッシュファイルなどの一時ファイル的なもの(.sdf、.ipchなど)を作るのだが、その出力先がプロジェクトディレクトリ内であるせいだ。これをプロジェクトディレクトリ内から別の場所にする設定をメモ。

(1) メニューから[ツール]→[オプション]
(2) [テキスト エディター]→[C/C++]→[詳細]にある、[常にフォールバック位置を使用]をTrueに設定し、[フォールバック位置]に適当なディレクトリを選ぶ。