2016年11月1日火曜日

macOS Siera にアップデート後、ローカル Web サーバの UserDir にアクセスできない問題

おそらく macOS Siera にアップデートしてからだと思うけど、http://localhost/~user/ にアクセスできなくなっていることに気がついた。
/etc/apache2/httpd.conf で userdir_module が無効になっていたのでコメントアウトを解除。userdir で検索するといいです。

LoadModule userdir_module libexec/apache2/mod_userdir.so
Include /private/etc/apache2/extra/httpd-userdir.conf

後もう一つ、/etc/apache2/users/ 以下の設定ファイルを読み込まない状態になっていたようなので /etc/apache2/httpd.conf の最後に以下の行を追加してアクセスできるようになった。

Include /etc/apache2/users/*.conf

設定後の再起動はこのコマンドです。

sudo apachectl restart

以前の設定ファイルはここに残っているようなので、前の設定を見たいときはこちらで。

/etc/apache2/httpd.conf~previous

2016年10月19日水曜日

TypeScript で外部ディレクトリの ts ファイルを参照すると参照先もコンパイルされて出力ディレクトリ構造が変わってしまう問題

Yeoman の angular --typescript 環境では初期状態で以下のようなディレクトリ構造になっている。

この状態で grunt serve すると .tmp 以下に ts ファイルがコンパイルされて以下のように展開される。

そして、自前のライブラリを利用しようとする場合、プロジェクトルートに lib を追加して利用すると仮定する。
#そもそもここが間違いかも?app/scripts 以下に lib を置けば特に問題はないかもしれない。だが、アプリ限定のライブラリでもないので納得行かない…ルートに置く場合の対応ということで。

app.ts に以下のように参照を記述する。
/// <reference path="../../lib/jimae/testlib.ts" />
すると、grunt serve で .tmp 以下がこのようにディレクトリ構造が変わってしまい、動作しなくなる。

scripts/app/scripts となってしまっている。要は参照先の testlib.ts もコンパイルし、出力するために参照している最上位のディレクトリ(../../)を出力の baseDir にしていると考えられる。
コンパイルオプションの noResolve なども試してみたが、これは参照自体が行われなくなり、コンパイルエラーになる。仕方がないので、testlib.ts の型定義ファイルを以下のコマンドで生成し、typings 以下に配置し、そちらを参照するようにして解決した。(ライブラリにメソッド追加などが行われた場合は型定義ファイルを更新する必要がある。自動化した方がいいかも?)
tsc --declaration --declarationDir typings/jimae lib/jimae/testlib.ts
ts ファイルと同じ場所に testlib.js も生成されてしまうが削除する。
app.ts の参照は以下のように生成された d.ts ファイルに変更する。
/// <reference path="../../typings/jimae/testlib.d.ts"/>
これで .tmp 以下のディレクトリ構造は元通りに戻る。
しかし、この状態では testlib.ts がコンパイルされず、実行時に参照できないので Grunt タスクに以下のように追加する。
typescript: {
  jimaelib: {
    src: ['lib/{,*/}*.ts'],
    dest: '.tmp/lib',
    options: {
      module: 'amd', //or commonjs
      target: 'es5', //or es3
      rootDir: 'lib',
      sourceMap: true,
      declaration: true
    }
  },
  base: {
これで grunt serve 時に以下のように出力されるようになる。 index.html からは ../lib/jimae/testlib.js で参照できるので追加する。
<!-- build:js scripts/lib.min.js -->
<script src="../lib/jimae/testlib.js"></script>
<!-- endbuild -->
#ちなみに grunt タスクの typescript:base で sourcemap となっている箇所は sourceMap にしないとソースマップが生成されない。雛形のミスと思われる。また、rootDir 指定をしないと lib/jimae が rootDir になり lib/testlib.js のように出力される。lib/jimae2 などに ts ファイルが有ると lib が rootDir になり lib/jimae/testlib.js のように出力される。tsc コマンドの仕様らしいが、出力されるディレクトリ構造が変わってしまうのでいただけない。rootDir 指定を必ずするようにした方が良いと思われる。そもそもの話、grunt-typescript は TypeScript 1.6.2 に依存しており、古い実装になっているので新しいもの(AngularJS1.5等)を扱う場合は grunt-ts に乗り換えた方が良いと思われる。
そもそもの話、ts ファイルの reference 先までコンパイル出力しようとするのが問題なので、以下のリンクのように、reference 指定で ts ファイルを型定義として読み込む設定ができればいいのだが、TypeScript2.0.3 でもまだこの機能はないらしい。
https://github.com/Microsoft/TypeScript/issues/1753 TypeScript も何かと面倒ですな… Yeoman の雛形ではなく IntelliJ に依存した方がいいかもしれない…

2016年8月4日木曜日

Windows 10 で Kohan Ahriman's Gift のプレイ動画を録るまで

こないだ Windows10 アップグレードの駆け込みで PC を組んで Windows10 をクリーンインストールしたんです。コンセプトは省電力で GeForce NVEnc で動画エンコードだったんですが、たまにやっていたレトロゲーム、Kohan Ahriman's Gift が動くかどうかも不安でした。Kohan Ahriman's Gift はとても面白いので、Steam で安く買えるし面白さを伝えるためにプレイ動画も録ってみたかったのもあり、PC プレイ動画キャプチャ・配信の決定版 NVIDIA ShadowPlay のテストをしてみました。

先に結果

問題なくプレイできるようになり、キャプチャも成功しました。

Steam と Kohan Ahriman's Gift のインストール

Steam はゲーム配信プラットフォームとして有名ですが、Kohan シリーズも扱っていて Kohan Ahriman's Gift 単品だと 980 円、Kohan シリーズ3作品セットの Kohan Warchest が 1980 円とお手頃かつ Windows7 まで動作保証をしているので、Steam 経由でプレイするのが鉄板かと思います。
問題はサポート対象になっていない Windows10 で動作するかどうかです。
まず、普通に Steam と Kohan Ahriman's Gift のインストールをします。プレイしてみると、一応動きますが、マウスクリックなどの操作を行うたびに 0.5 秒ほど固まり、使いものにならない状態でした。
Kohan Windows10 でググってみると、この掲示板のスレッドが見つかりました。この問題のことを lagging in game とか言っていますね。
なんだかファイルが配布されていてそれを設置すると解決するらしいのですが、すでにファイルのリンクが切れていました。それで困っている書き込みもあったのでよく読んでみると、最後の Homra さんの書き込みを見ると Steam と互換モードの設定だけでも対応できるっぽい。手順を書いてみます。

Kohan Ahriman's Gift の Windows10 上でのラグを取り除く設定

まず、Steam の設定で Kohan Ahriman's Gift の起動オプションに cooperative をセットします。Steam のゲームリストで Kohan Ahriman's Gift を右クリックしてプロパティを選択、「一般」タブにある「起動オプション設定」に「cooperative」と入れて OK を押します。

 この状態でプレイしようとすると、色が 16bit じゃないとダメだよと言われます。
GTX950 の環境では 32 bit Color しか設定できないようなので、Kohan Ahriman's Gift の実行ファイルの互換モードの設定をします。実行ファイルは先程のプロパティダイアログの「ローカルファイル」タブ「ローカルファイルを閲覧」ボタンで開けます。通常は
C:\Program Files (x86)\Steam\steamapps\common\Kohan Ahrimans Gift
にあるようです。
Kohan_AG.exe が対象の実行ファイルなので、右クリックでプロパティを開き、
互換タブで

  • 「互換モードでこのプログラムを実行する」にチェックを入れる
  • 「Windows XP (Service Pack 3)」を選択する
  • 「カラーモードを制限する」にチェックを入れる
  • 「16ビット(65536)カラー」を選択する

以上の設定をして OK を押します。
この状態で Steam でプレイを押すと、Windows10 の警告が出ます。これは今のところ回避できていません。
とりあえず毎回聞かれるので、「はい」を押しておきます。これで起動すると、マウスクリック時のラグは無くなります。やった!
GTX950 のビデオカードではフルスクリーン時に画面いっぱいに引き伸ばされてアスペクト比が狂ってしまい、うまく解決できなかったので、プレイ時には画面解像度を 1024x768 に変更してからプレイするようにしています。これも勝手に解像度変更して欲しいところですが…

NVIDIA ShadowPlay でプレイ動画キャプチャ

次は ShadowPlay で動画が録れるかテストです。
GeForce Experimence を起動して右上にある ShadowPlay ボタンを押して左側のスイッチを押して緑色に点灯させます。
ただ、GeForce Experimence には対応ゲームとして認識されないようなので、左の ShadowPlay タブで「デスクトップのキャプチャを許可」にチェックを入れ右下に録画状態のオーバーレイが表示されたら準備完了です。
Alt+F9 で録画開始、停止ができます。これで録ったのが冒頭の動画です。

プレイ動画の解説を少し…

ランダムマップ 1対4 のハードモード CPU 戦です。強い CPU を選んでだいたいこの設定で遊んでいますが、ほとんど負けます…この動画の時はそこそこうまく行っていますが、エリートアーチャーが間に合わず、怒涛の数の暴力を見ることができます。この状況を打破して相手を全滅させるのが面白いです。友人とネット経由で協力プレイして 2対4 でもよくやります。でも負けます…たまに勝てるのでバランスはいいんでしょう。
ぱっと見、分からないひとにはわからないと思うので簡単な解説を入れながらのプレイ動画などもいずれやってみたいと思っています。

2016年2月14日日曜日

YAMAHA MD-BT01 導入

最近は MIDI も Bluetooth の時代らしいです。そこで、気になっていた電子ピアノの稼働率の悪さを改善するため YAMAHA MD-BT01 を導入してみました。最近は PC と 鍵盤の接続は USB 接続が主流で MIDI 端子しかないとちょっと扱いづらいのです。USB MIDI アダプタもじゃまくさいですし…なので、MIDI 接続を Bluetooth でできるようにするアダプタ MD-BT01 です。電源は MIDI コネクタから供給されるらしく充電とかは必要ないです。
これで何に繋げるかというと、iOS デバイスと Mac OSX です。Windows はまだ Bluetooth MIDI(MIDI over Bluetooth LE)に正式対応しておらず、KORG が独自のドライバで microKEY Air を対応させているようです。Windows はもうちょっと待った方がいいかもです。
iOS に繋げる際は GarageBand や Korg Module などの設定で認識させます。普通に鳴らせますが、第3世代 iPad なのでそもそもソフトの発音遅れがひどい^^; ストリングスくらいならなんとか…
Mac OSX の場合はユーティリティに Audio MIDI 設定と言うアプリがあるので、そこで MIDI スタジオを開くと Bluetooth のブロックがあります。それをダブルクリックして設定に入ると認識させられます。めんどくさい…まだ出始めでこなれていない感じです。
Mac OSX で Logic に繋げてみると、ほとんど遅れを感じません。USB で接続している感覚と変わらず。これはいい!
reface DX にも繋げてみましたが直に MIDI 端子が無いのでブレイクアウトケーブル経由でそこはかとなく脱腸感…USB で繋げた方がいい場合もありそう…
iPhone, iPad の場合はコネクタが空くので充電しながら使えるので効果大きいです。スタジオ練習で USB ケーブル引き回すよりは Bluetooth もいいですね。Bluetooth MIDI のデバイスがたくさんあるとどうなっちゃうんだろう?
とりあえず電子ピアノを iOS, Mac の今の環境に参加させることができてよかった。これで利用率あげられる!
Quicco Sound の mi.1 という Bluetooth MIDI 黎明期から出始めた先発品があるんですが、こちらも性能は変わらない様子。小さいし安いしこちらも試してみたいです。