2013年6月27日木曜日

任天堂の第73期定期株主総会に行ってきた

本日京都の任天堂本社にて行われた同社の株主総会に参加してきました。
感想等はまた後日書こうと思っておりますので
とりあえず報告だけしておきましす。

質疑応答の中で、岩田社長が4月(でしたっけ?)にコミットメントという言葉を発言した際に、
岩田社長自身は自分の進退について何も触れていないことを明らかにしました。
その質問をされた方は、今後数年に渡って売っていくWiiUを 岩田社長がオペレーションすることを前提に投資されたということで、
単年度の利益でやめられるのは困るというようなことをおっしゃっておられましたが、
これは私も同意見です。
正直言って経営者としての岩田社長はかなりいけてると思っており、
ビジョンを語れ、インタビューで話を聞き出せるのみならず、
想定外の質問にも適切で的確な回答を臨機応変にしてみせるところは頭の回転の早さを感じさせます。
下手な大臣よりよほど能力があると思います。
しかも伝説的なゲームプログラマーというバリューもありますし、
任天堂の代表取締役社長としては本当にふさわしいと個人的には思っています。
仮に今年度の経営責任を取って辞任なんてことになると
その後どうすんだという話になります。
席順と功績とネームバリューでいえば宮本専務が次期社長というのもなくはないでしょうが、
共に経営責任をとる可能性もありますし、やっぱりちょっと違う気がします。
もちろん人材がいないことはないと思いますが、
岩田社長の後を引き継ぐ(戦略の転換?)というのはかなり骨が折れるでしょう。
もちろん今期それなりの成果を上げてほしいのですが、
万一期待に添えなかったとしてもやめるというのはちょっと勘弁してほしいですね。
最低でもWiiUを軌道に乗せてその先の目鼻をつけるまではね。

2013年6月26日水曜日

Windowsで動作中の邪魔なプロセスを無理やり落とす

Windowsであるプログラムが常時走っていて、しかも手動で止められなかったりすると、
高負荷な処理をさせるときにそいつが邪魔でしょうがない時があります。
そんなときは[ctrl]+[shift]+[esc]でタスクマネージャを出して強制終了させるのですが、
もはやそれすらうっとうしいことがあります。

で、もうそいつを自動的に落としてしまおうとプログラムを書きかけました。
特定のファイル名(ここでは"sample.exe")を強制終了するには、
C+WinAPIなら以下のようなコードを実行すればいいようです。
    DWORD p[1024],num;
    unsigned int i,j;

    if (EnumProcesses(p,sizeof(p),&n)){
         j=num/sizeof(DWORD);
        for(i=0;i<num;i++){
            if(p[i]!=NULL){
                TCHAR name[MAX_PATH];
                HANDLE h;
                
                h=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE,FALSE,p[i]);
                if(h!=NULL){
                    HMODULE m;
                    DWORD k;
                    if(EnumProcessModules(h,&m,sizeof(m),&k))
                        GetModuleBaseName(h,m,name,sizeof(name)/sizeof(TCHAR));
                }
                if(strcmp(name,"sample.exe"))
                    TerminateProcess(h,0);
                CloseHandle(h);
            }
        }
    }
    return 0;
}
ところでこのコードはコンパイルさえ試していないので動くかどうかわかりません。
というのも途中でもっと簡単な方法を見付けたからです。

Windowsにはtasklistとtaskkillのコマンドが用意されていることを知り、
これを使えば同等な機能をバッチファイルで実装できます。
cygwinを入れていれば以下の1行で可能です。
tasklist | grep sample.exe | awk '{print $2}' | xargs taskkill /F /PID
もし10秒に1回の頻度で"sample1.exe"と"sample2.exe"を強制終了したければ、例えば
#!/bin/bash
while :
do
 PID=`tasklist | grep sample1.exe | awk '{print $2}'`
 if [ -n $PID ]; then
  taskkill /F /PID $PID 2> /dev/null
 fi
 PID=`tasklist | grep sample2.exe | awk '{print $2}'`
 if [ -n $PID ]; then
  taskkill /F /PID $PID 2> /dev/null
 fi
 sleep 10
done
のようにシェルスクリプトを書いて実行すればいいだけです。
これでだいぶ快適になります。

2013年6月25日火曜日

gccでライブラリをリンク

Ubuntu 12.04でOpenSSLのライブラリを呼び出すプログラムをビルドしようとしたときの話です。
# apt-get install libssl-dev
を実行してビルド用のヘッダやライブラリを用意した後、
$ gcc -lcrypto -lssl test.c
を実行しても
undefined reference to `<OpenSSL内の関数名>'
なエラーが出てリンクに失敗します。
散々悩んだ挙句
$ gcc test.c -lcrypto -lssl
でビルドできるというところまでたどり着きました。
つまり順番が重要ということのようです。
このあたり今まで意識したことがなかったため、
かなり古めの環境で試したところ、前後どちらにつけてもビルドできることが確認できました。
いったいいつから順番が重要になったの?

2013年6月24日月曜日

Wiiポイントを使い切る

WiiU購入時に特に何も考えずWiiから引越ししたところ、
Wiiに残っていたWiiポイントはWiiUでは使えず、
WiiUのWiiモードでしか使えないと判明しがっくりしました。
何しろ未だ4700ポイント(4700円分)も残っており、
今後Wiiでダウンロードソフトを買う予定もないのでまさかの死蔵かとも思っていたのですが…

実はWiiで購入しているバーチャルコンソールのソフトを
WiiUで買いなおすときに割引してもらえ、
これを利用すれば私みたいなユーザも救済してもらえるかもしれません。
ただし、WiiとWiiUで同じゲームが販売されてなければ使えない手ですし、
WiiUのものを単体で買うより高くつく(多くに場合FCで+100円)のが弱点です。
まあ使い道のないWiiポイントを置いておくよりはましですから。

ということで試してみました。
なお今回購入するのはFC版スーパーマリオブラザーズです。
このゲーム、なぜか時々無性にやりたくなるんですよね。
しかも、Nintendo3DSだと画面が小さすぎて遊びづらく、
32型のテレビだと画面の粗が目立ってしまうので、
WiiUのGamePadで遊ぶのはちょうどよさそうです。

まずはWiiUでWiiモードを立ち上げショッピングチャンネルから
「スーパーマリオブラザーズ」を500Wiiポイントで購入します。
その後WiiUモードに戻って、ニンテンドーeショップから
同じく「スーパーマリオブラザーズ」を購入します。
通常500ポイントかかるところが100ポイントに割り引いてもらえました。やった!
で、早速WiiUのGamePadで遊んでみると…
Wiiで遊ぶと画面表示が16:9に引き伸ばされて(設定による?)遊び辛いのが
WiiUだと画面の左右に黒い帯が入って4:3のまま遊べます。
もちろんHDMIにつないだTVもGamePadも4:3です。
いいかんじです。

まだまだWiiポイントが残っているので、この手で何とか使い切るつもりです。
問題はWiiUのバーチャルコンソールのラインナップがなかなか拡充されないことですね。

2013年6月20日木曜日

svnの方が好きだけどgitもいいかも

ソースコードのバージョン管理はcvsから使い始めて、
今ではsvnを利用しています。というか未だにsvnを利用しています。
最近の流行は明らかにgitですけどね。
gitの出始めはクライアント、特にWindows環境からのアクセスにいろいろ問題がありましたが、
もはやそれも過去の話でgitを使うのに大きな制限はありません。
強いてあげればプロキシがらみでしょうか。

さて、私はgitよりもsvnのほうが好きで、もちろんsvnにも使いにくさもあるのですが、
私の用途ではそもそも中央集権のほうが使いやすかったりするので、
サーバにはsvnを使っています。
gitは必要なときにクライアントオンリーで使っています。

ところが最近この考えが変わってきました。
きっかけはServersma@VPS LABに当選したことです。
これで自由にいたぶれるVPSが2台になりました。
まあLABは期間限定のベータサービスなのですが、
これだけVPSのコストが下がると複数台借りるのは現実的ですし、
バージョン管理サーバも複数台で分散管理というより
1台をマスターにしてを他をバックアップにするというのも選択としてありです。
codebreakなる無料で無制限なgitサーバサービスも登場しており、
これとVPSとを組み合わせるようなこともできるかもしれません。
もちろんsvnだってサーバにあるリポジトリのディレクトリを丸ごとコピーするとか、
"svnadmin dump"コマンドでバックアップし"svnadmin load"コマンドでリストアすることもできますが、
gitほど手軽ではありません。

ということでgitサーバを立ててみます。
作業はServersMan@VPS(debian-32bit)とServersma@VPS LAB(ubuntuー64bit)で同じです。
まずは以下を実行します。
$ su -
# apt-get install git-core
# apt-get install git-daemon-run
次に設定ファイル"/etc/sv/git-daemon/run"の最後の行
--base-path=/var/cache /var/cache/git
--base-path=/var/repos --export-all --enable=receive-pack
に変更して以下を実行します。
# mkdir /var/repos
# sv restart git-daemon

リポジトリ(ここでは名前を"sandbox"とする)を作成するには以下を実行します。
# mkdir -p /var/repos/sandbox.git
# cd /var/repos/sandbox.git
# git init --bare --shared
# chown -R gitdaemon .
このリポジトリにとりあえずファイル"README"を登録するには同一マシンから以下を実行します。
$ cd ~
$ mkdir sandbox
$ cd sandbox
$ git init
$ git config user.email "<メールアドレス>"
$ git config user.name "<ユーザ名>"
$ echo 1 > README
$ git add README
$ git commit -m 'Created.'
$ git remote add origin git://localhost/sandbox.git
$ git push origin master
この状態で同一マシンから
$ cd ~
$ mkdir sandbox1
$ cd sandbox1
$ git clone git://localhost/sandbox.git .
$ cat README
を実行すると、確かに"README"が登録されていることがわかります。
もちろん別のマシンからもgitサーバにアクセスでき以下を実行すれば確認できます。
$ cd ~
$ mkdir sandbox
$ cd sandbox
$ git clone git://<サーバ名>/sandbox.git .
$ cat README

それではマスターサーバのリポジトリの内容をバックアップサーバにコピーしてみましょう。
バックアップサーバから以下を実行するだけです。
# cd /var/repos/
# git clone --mirror git://<マスターサーバ名>/sandbox.git .
# chown -R gitdaemon .
以後は定期的に以下を実行して同期するようにします。
# cd /var/repos/sandbox.git
# git fetch --all
# chown -R gitdaemon .
こうしておけばバックアップサーバでもリポジトリが管理できるようになります。
万一マスターサーバが壊れたら、バックアップサーバをマスターサーバにして運用可能です。
ただし、マスターサーバとバックアップサーバに好き勝手にpushすると
あとで内容を同期するのが面倒になる可能性があるのでやめておきましょう。
もしかするとDBM並みにレプリケーションもできるかもしれませんが。

2013年6月19日水曜日

すれちがい通信がパワーアップ

すれちがい通信をするために、私のNintendo3DSは1日のうちの結構な時間スリープになっているのですが、
唐突に新しいファームウェアが届きアップデートするよう促されました。
しょうがないので6.0.0-12Jにアップデートしてみると、すれちがい通信がパワーアップしているではないですか。
最近すれちがいでやることがなくなってきたので朗報です。

具体的には"すれちがいシューティング"、"すれちがいガ~デン"、"すれちがい合戦"、"すれちがい迷宮"の
4つのゲームが買えるようになりました。って、売るのかよ!!
まあ1つ500円で4つまとめて買うと500円引いてくれるので許せる値段ではあります。
それに近いうちに鬼のようにすれちがう予定になっているので買わないわけにはいきません。

ではほんの少しだけ遊んだ感想を書いておきます。
まず"すれちがいシューティング"です。
基本的にはなつかしの横スクロールシューティングゲームで、
すれちがった、あるいはコインで雇ったMiiでフォーメーションを組んで戦います。
テラクレスタみたいな感じです。ってちょっと古い?
Miiの色によって武器が変わり、私が使った範囲では使いにくいものばかりです。
Miiのレベル(すれちがい回数)が高くても武器が強くなることはありません。
で、やられるたびに周りのMiiが減っていき、いなくなればゲームオーバーとなります。
この手のゲームがうまければあまりすれちがううことがなくても、
コインをそれほど消費することなくクリアできるかもしれません。
ゲーマーとしての腕が物を言うゲームです。
なお、1つのステージクリアしたら隊は解散です。

"すれちがいガ~デン"は花を育てるゲームで、Miiと出会うことでしか育たないので、
あまりすれちがえないとコインでたくさんMiiを雇う必要があります。
すれちがうことで交配し種を取ってまた育ててを繰り返すようです。
すれちがわないとあんまり面白くないかもしれません。
Miiのレベル(すれちがい回数)は関係なので、
行楽地を引き回すとかでも十分育てられそうです。

"すれちがい合戦"は戦国シミュレーションです。
すれちがいやオンラインゲームで集めたMiiの人数が自軍の兵士数となり、
すれちがうとその相手の兵士数が自軍に加わってより強くなるようです。
敵国との戦いは兵の3旅団への振り分けとじゃんけんを組み合わせたようなシステムで、
勝てば相手の兵の一部がこちらに寝返って自軍が増えます。
すれちがった相手と戦うわけではありません。
またコインで雇えるのはMiiではなく兵100人のような師団になります。

"すれちがい迷宮"はルイージマンション2に雰囲気が似ていますが、オバキュームは出てきません。
まあ自分勝手なキャラクターが案内役なのは共通しています。
内容はテトリス風のパズルとアクションRPGの要素を盛り込んだ運のみのマインスイーパーと言う感じでしょうか。
うーん、われながらひどい説明です。
階段を探して最上階まで上がるのが目的で、
途中遭遇するおばけとリアルタイムバトルしていきます。
すれちがって(またはコインで)もらえる床板を配置して進める範囲を作っていきます。

一通り遊んでみて私の一番好きなのは"すれちがいシューティング"かな。
まあでも全部それなりに面白いですし、すれちがったMiiは各ゲームでそれぞれ使えるので
頻繁にすれちがえる方なら4つまとめて1500円で買うことをお勧めします。
ちょっと問題なのは、私のようにそんなにすれちがえないと、
それぞれのゲームで別々にコインを消費することになり、たくさん必要になることでしょうか。
ぜひ1日10枚までしかたまらない現行の制限を緩めてほしいですね。

今回のパワーアップでは他にも改善されていて、
すれちがった相手に個別メッセージ送る際に自分の表情を設定できるようになっていますし、
Miiのぼうしも大幅に増えています。
そして、すれちがい伝説IIの勇者選択画面でフィルタ機能が加わりました。
レベルと色で抽出できるので、必要な勇者を探すのが楽になります。
今Miiが400人程いるので、これは地味にうれしい機能です。

2013年6月18日火曜日

PS3のセーフモード

実はずいぶんと前からPS3+torneの調子が悪くって、
それが起こり出したのがファームウェアの更新のタイミングのような気もするのですが、
気のせいかもしれません。

症状としては、大昔に録画した番組が今再生するとところどころ静止画になったり、
予約していたのに録画できていなかったりというところで、結構痛い不具合です。
あとかなりの確率で起こるのが、
録画中に録画済番組の再生やタイムシフト再生をしたときに再生エラーとなることで、
ついでにその瞬間の録画がおかしくなったりします。
電源をいったんOFF(torneの動作は継続)にしてからONにし、
再びtorneのアプリケーションを立ち上げるとちゃんと再生できることもあるのですが、
今度は録画中番組の録画が止まっていたりします。
ということで、最近は録画中は再生しないような運用にしており、
それでとりあえずなんとかなっています。
まあ録画するにはDIGAのBZT710があるのでそれを使えばいいようなものですが、
地デジをブルーレイディスクに焼くことなく見たらすぐに消すのなら、
操作が快適なPS3+torneを使いたいんですよね。

ところで最近PS3にセーフモードがあることを知りました。
私のPS3の型番では電源ON時に本体の電源ボタンをとにかく押し続けるといったん電源が落ちるので、
電源ボタンを押しなおし、そのまま押し続けていると、
テレビに「コントローラをUSBケーブルで接続して、PSボタンを押してください。」
と表示されるので、電源ボタンを押すのをやめてPSボタンを押すとセーフモードに入ります。
セーフモードには[ファイルシステムの修復]なるメニューがあります。
先の不具合の原因がなんとなく内蔵HDDにあるような気もするので早速実行してみました。

結果は…しばらく使ってみましたが改善しているようにはみえません。
どうやら内蔵HDDはまったく悪くないようです。
今後は録画中にむやみに操作しないことにします。