実録コンピュータ物語

趣味で使っているコンピュータ&アプリの情報を発信するブログです。

「Roslyn」の読み方は「ロズリン」

最近のC#オープンソースになったりクロスプラットフォームになったりでスゴイらしい。興味はあるけど、自分の知識はC# 2.0で止まったままでほとんど忘れていました。

というわけで「C#エンジニア養成読本」という本を買ってみました。C#が登場した経緯から説明されているので、復習しながら最新事情を把握するにはピッタリだと思います。

C#エンジニア養成読本 (Software Design plus)

C#エンジニア養成読本 (Software Design plus)

そして途中で疑問が。.NET Compiler Platform「Roslyn」についてです。これ、なんて読むんだろう?

そこでマイクロソフトのプレゼン動画を探してみたところ、これは「ロズリン」と発音するそうです。初見だと間違いそうなので注意ですね。

ちなみに本題と関係ないですが、映画「ダ・ヴィンチ・コード」のロケ地になった町は「Rosslyn」で、こちらの読みは「ロスリン」になります(sが1つ多い)。思わぬところで雑学の勉強になりました。

ドラゴンズドグマ オンラインのベンチマークをやってみた(GeForce GTX 960、GTX 970)

ドラゴンズドグマ オンラインがサービス開始ということで、手持ちのPCで公式ベンチマークを実行してみました。

www.dd-on.jp

ベンチマークその1(GTX 960 1920 x 1080 最高品質 フルスクリーン)

CPUはちょっと古いけど能力は十分。GeForce GTX 960のビデオカードに交換してあります。(MGSV:GZとTPPが両方もらえるのでつい買ってしまった)

結果はスコア8099、「とても快適」になりました。ビデオカードオーバークロックしているというのもありますが、ドラゴンズドグマ オンラインをプレイするならGTX 960で十分そうですね。

ベンチマークその2(GTX 970 1920 x 1080 最高品質 フルスクリーン)

ゲーム用に組んだPC。GeForce GTX 970のビデオカードを使用しています。

結果はスコア9072、「とても快適」になりました。GTX 960から思ったほど伸びない。ややオーバースペックのようです。

Perl 6を語る(第2回)変数の宣言と型制約

第2回はPerl 6の変数宣言と型制約について説明していきます。

新規のローカル変数を宣言するにはmy 変数名という構文を使います。これはPerl 5と同じです。

さらにPerl 6はスクリプト言語ですが、TypeScriptやDartのように変数の型を指定することができます。型を宣言する方法はC言語などと一緒で、変数の宣言時に型名を付けます。

変数の型を指定しない場合は「Any」型になる

最初は型を指定せずに変数を宣言する場合を見てみます。変数の型と内容を表示したい場合はWHICHメソッドを使うと簡単です。

my $hoge;
say $hoge.WHICH; # Anyと表示される

my Any $hoge; # 丁寧に書くとこうなるが、通常は省略する

Anyはその名の通り「何でも」という意味で、最も制約の緩い型です。JavaScriptなどの言語におけるObject型に相当します。

変数の宣言時に初期値を設定すると、それに応じてデータ型も変わります。

my $hoge_int = 1234; # 整数
say $hoge_int.WHICH; # Int|1234と表示される

my $hoge_str = "1234"; # 文字列
say $hoge_str.WHICH; # Str|1234と表示される

プロトタイプオブジェクト(型オブジェクト)とは

上記の例でmy $hoge;と変数を宣言しただけの場合に$hogeの中身はどうなるのかというと、「プロトタイプオブジェクト」と呼ばれる特殊なオブジェクトになります。略して「型オブジェクト」です。

型オブジェクト自体を評価すると未定義となり、値としては意味を持ちません。

my $hoge; # 未定義のAnyプロトタイプオブジェクトになる

# .definedメソッドで値が定義済みか調べる
say $hoge.defined; # False

型オブジェクトは裸の型名を書くことでも得られます。上記のコードを厳密に書くと次のようになります。

my $hoge = Any; # 未定義のAnyプロトタイプオブジェクトになる
say $hoge.defined; # False

型宣言の例(Int型)

具体的に型宣言の例を説明していきます。基本中の基本ということで整数オブジェクトである「Int型」を使ってみます。

my Int $int; # 未定義のIntプロトタイプオブジェクトになる
say $int.WHICH; # Int
say $int.defined; # False

my Int $int2 = Int; # 上と同じ

Any型の場合と同様に、単に変数を宣言しただけなので$intの中身はIntのプロトタイプオブジェクトになります。

この変数に整数以外の値を入れようとするとエラーになり、型制約が機能していることが確認できます。

my Int $int;

# 有理数(Rational Number)なのでエラー
$int = 1234.5; # Type check failed in assignment to '$int'; expected 'Int' but got 'Rat'

# 文字列なのでエラー
$int = "1234"; # Type check failed in assignment to '$int'; expected 'Int' but got 'Str'

型オブジェクトの使用用途

型オブジェクト自体は値として意味を持ちませんが、以下のような用途に使用することができます。

コンストラクターメソッドを呼び出す

型オブジェクトからクラスのコンストラクターメソッド(通常はnew)を呼び出すことができます。

他のプログラミング言語から見ると$int = $int.new;のように変数からコンストラクターを呼び出すのは変に思うかもしれませんが、型名を何度もハードコーディング(直接書く)しなくて済むというメリットがあります。

my Int $int; # 未定義のIntプロトタイプオブジェクトになる
say $int.defined; # False

$int = $int.new; # 0に初期化される
say $int.WHICH; # Int|0
say $int.defined; # True

$int = Int.new; # これでも同じ(ハードコーディング)
my Int $int .= new; # 省略形

型変換関数として使う

型オブジェクトを関数として使うことで型変換を行うことができます。

my Int $int;

$int = $int(1234.5); # 有理数をInt型に変換。小数部は切り捨てられる
say $int; # 1234

$int = $int("1234"); # 文字列をInt型に変換

$int = Int(1234.5); # これでも同じ(ハードコーディング)
my Int $int = $int("1234"); # これもOK

値が初期化された後で型変換関数として使うことはできません。

my Int $int = 0; # 初期化しているので型オブジェクトではない

# エラー
$int = $int("1234"); # Cannot find method 'postcircumfix:<( )>'

動作確認環境と参考情報

Rakudo Perl 6 2015年3月版がリリース。JITコンパイルに対応したWin 64bit版もあり

2015年3月版Rakudo Windowsインストーラが公開されました。 今回はJITコンパイル対応の64bit版パッケージもあり、32bit版よりも高速に動作するとのこと。(MoarVMバックエンドのみ)

Announce: Windows MSI Installers for release 2015.03 | rakudo.org

Rakudoは以下のURLでダウンロードできます。

http://rakudo.org/downloads/star/

Perl 6を語る(第1回)コメントとアンスペース

f:id:bosh:20150308150430p:plain

2015年のクリスマスにPerl 6のバージョン1.0がリリースされるということで、少しずつ情報を整理していきたいと思います。

第1回はPerl 6のコメントとアンスペース(Unspaces)について取り上げます。(コメントから説明するのは、Perl 6の言語仕様で最初の方にあるからです)

単行コメント

コメントは#で始まり、行の終わりまで続きます。コメントはプログラムの動作には影響を与えません。これはPerl 5や他のプログラミング言語とまったく同じです。

# これはコメント行です。内容は無視されます

say "Hello Perl 6"; # Hello Perl 6と出力する

複数行コメント

PODの=beginセクション使って複数行コメントが可能です。Perl 5と違い、最後に=cutを書く必要はありません。

=begin comment

これはコメントです。
内容は無視されます

=end comment

say "Hello Perl 6";

埋め込みコメント

Perl 6では埋め込みコメント(インラインコメント)も使うことができます。埋め込みコメントは#`で始まり、後ろに任意の括弧文字が続きます。

#`(
    これは埋め込みコメントです。
    内容は無視されます
)

say #`(これもコメント) "Hello Perl 6";

#`の後に続く文字はユニコードで定義されている括弧ならなんでも使えます。

#`『
    これは埋め込みコメントです。
    内容は無視されます
    ユニコードで使える括弧文字なら何でもOK
    () [] <> {} 「」“” 《》【】
』

say "Hello Perl 6";

括弧は複数重ねることができます。括弧を閉じる時も同じ個数にする必要があります。

#`{{
    括弧を重ねる
    } ←括弧が1個しかないので、これはコメント終了とは見なされない
}}

#`「『
   「括弧の種類が別でもOK」
』」

アンスペース

アンスペースとは、バックスラッシュ\の後に続く空白文字とコメントを構文解析に無視させる機能です。C言語で改行文字をエスケープする機能とよく似ています。

括弧文字と同様に、ユニコードで定義されている空白文字ならなんでもアンスペースできます。特にメリットはありませんが全角空白でも可能です。

(ちなみにアンスペースに限らず、Perl 6では半角と全角の空白に区別はありません。全角空白をコード中に書いても普通に動きます)

以下のコードは全て「Hello Perl 6」を出力します。バックスラッシュの後に続く空白文字(改行含む)やコメントは全て「無かった」ことにされます。

"Hello Perl 6".say; # say "Hello Perl 6" と同じ

"Hello Perl 6"\    .say;

# 分かりにくいけど全角空白でも可能
"Hello Perl 6"\    .say;

# 改行を無効化
"Hello Perl 6"\
.say;

"Hello Perl 6"\ # 途中にコメントがあっても無視される
.say;

"Hello Perl 6"\ #`(
    埋め込みコメントも全部無視される
).say;

動作確認環境と参考情報

ドラゴンクエストヒーローズでコントローラーから出る音声を消す方法

PS4版のドラゴンクエストヒーローズをプレイ中。世間では無双系と言われていますが、自分はPCゲームのOrcs Must Die!に近いという印象を受けました。

ところで、このゲームはなぜかスピーカーと同時にコントローラーからもキャラクターの音声が出力されるようになっています。(DUALSHOCK4には小型のスピーカーが付いている)

ゲーム内のボリューム設定には「ボイス」という設定しかなく、コントローラーの音量を単独で変更することはできません。そのため、PS4の周辺機器設定から手動で音量を下げる必要があります。

  1. PS4起動中にコントローラーのPSボタンを長押しする
  2. 「サウンドと周辺機器を設定する」を選ぶ
  3. 「音量コントロール(コントローラーのスピーカー)」の音量をゼロにする

これでゲーム中にコントローラーの音声が出なくなります。

HD598の標準ケーブルをXLRバランスケーブルに改造する

f:id:bosh:20150222173616j:plain

HD598のオーディオケーブルにXLRタイプコネクター(キャノンコネクター)を接続してバランス化する方法を紹介します。ケーブルが共通なのでHD518 / HD558にも適用できると思います。

改造に使ったもの

以下で紹介するものは全てAmazon.co.jpで注文できます。はんだこてなどの道具込みで4300円程度でした。

はんだこてセット

単純にベストセラー1位だったので購入。オーディオケーブルとXLRコネクターの接続に使います。(これを購入後に知ったのですが、はんだの代わりに接着剤で接続する方法もあります)

goot 電子工作用はんだこてセット X-2000E

goot 電子工作用はんだこてセット X-2000E

ワイヤーストリッパー

これもベストセラー1位だったので。ケーブルの被膜を切り取る道具です。このNo.3500E-1は直径0.5~2.0mm用で、HD598のケーブルでも使えました。

黄色のNo.3500E-2もありますが、対応する径が異なるので注意。

VESSEL ワイヤーストリッパー No.3500E-1

VESSEL ワイヤーストリッパー No.3500E-1

XLRコネクター(メス3ピン)

f:id:bosh:20150222202808j:plain

自分が使っているUSB DAC UD-301のXLRコネクターがオス3ピンなので、メス型のNEUTRIK NC3FXX-Bを2個購入。

NC3FXX-Bは接続部が金メッキですが、銀メッキのNC3FXXもあります。

NEUTRIK NC3FXX-B XLRコネクター

NEUTRIK NC3FXX-B XLRコネクター

バランスケーブル化の手順

具体的な改造方法を説明していきます。HD598はケーブルが着脱可能なので、本体から外しておきます。(接続部を左回りにねじるように動かしてから引き抜く)

ステレオプラグを切り離す

オーディオケーブルを途中でカットし、プラグを切り離します。自分は端から50cmくらいの位置でカットしました。

f:id:bosh:20150222165842j:plain

ケーブルの外側の被膜を切り取る

カットした部分の端から10cmの被膜をワイヤーストリッパーで切り取ります(穴は2.0mmを使用)。うまく切れない場合はカッターナイフも併用してください。

中にはL側(白、黒)とR側(赤、青)の線が入っています。黄色っぽい繊維は不要なので切り取っておきます。

f:id:bosh:20150222171506j:plain

4本の線の被膜を切り取る

上記の線の端から4mmをワイヤーストリッパーで切り取り(穴は0.5mmを使用)、ヨリ線をねじってまとめます。これらの中にも繊維が織り込まれているので、できるだけ切り取っておきます。

f:id:bosh:20150222172731j:plain

白と黒(Lの場合)の線をブッシングに通す

ブッシング(接続具)にL / Rそれぞれの線を通しておきます。はんだ付けした後だと通せなくなるので注意。

f:id:bosh:20150222174220j:plain

インサートに銅線をはんだ付けする

インサート(内部金具)と銅線をはんだ付けして接続します。HotとColdが対応するようによく確認しましょう。なお、XLRコネクターの1番は使用しません。

HD598用ケーブルの仕様
種類 L R
Hot
Cold
XLRコネクターの仕様
番号 種類
1 GND
2 Hot
3 Cold

インサートは1、2、3と番号が表示してあります。f:id:bosh:20150222181003j:plain

はんだこてセットに入っているヒートクリップでインサートと線を固定すれば作業しやすいです。f:id:bosh:20150222175010j:plain

LとRをはんだ付けした状態f:id:bosh:20150222182446j:plain

補足:はんだの代わりに接着剤を使う

はんだを使わずにAgICの導電性接着剤で接続ができます。はんだと比べて強度が弱そうなので、導電性接着剤の上から瞬間接着剤を上塗りして補強する必要があります。(はんだこてを購入した後で知ったので、実際に試したわけではないですが)

AgIC 導電性接着剤

AgIC 導電性接着剤

コネクターを組み上げる

NC3FXX-BのページにあるAssembly Instructionを参考にしてコネクターを完成させます。

f:id:bosh:20150222173616j:plain

XLRバランス接続に使ったDAC (TEAC UD-301)

ヘッドホンアンプになるし、光デジタル入力にも対応している(主にPS3/PS4用)ということで購入したUSB DAC。LとRで回路が独立しているので、フルバランスのステレオ再生ができます。

参考にしたサイト