「Roslyn」の読み方は「ロズリン」
最近のC#はオープンソースになったりクロスプラットフォームになったりでスゴイらしい。興味はあるけど、自分の知識はC# 2.0で止まったままでほとんど忘れていました。
というわけで「C#エンジニア養成読本」という本を買ってみました。C#が登場した経緯から説明されているので、復習しながら最新事情を把握するにはピッタリだと思います。
C#エンジニア養成読本 (Software Design plus)
- 作者: 岩永信之,山田祥寛,井上章,伊藤伸裕,熊家賢治,神原淳史
- 出版社/メーカー: 技術評論社
- 発売日: 2015/08/26
- メディア: 大型本
- この商品を含むブログを見る
そして途中で疑問が。.NET Compiler Platform「Roslyn」についてです。これ、なんて読むんだろう?
そこでマイクロソフトのプレゼン動画を探してみたところ、これは「ロズリン」と発音するそうです。初見だと間違いそうなので注意ですね。
ちなみに本題と関係ないですが、映画「ダ・ヴィンチ・コード」のロケ地になった町は「Rosslyn」で、こちらの読みは「ロスリン」になります(sが1つ多い)。思わぬところで雑学の勉強になりました。
ドラゴンズドグマ オンラインのベンチマークをやってみた(GeForce GTX 960、GTX 970)
ドラゴンズドグマ オンラインがサービス開始ということで、手持ちのPCで公式ベンチマークを実行してみました。
ベンチマークその1(GTX 960 1920 x 1080 最高品質 フルスクリーン)
CPUはちょっと古いけど能力は十分。GeForce GTX 960のビデオカードに交換してあります。(MGSV:GZとTPPが両方もらえるのでつい買ってしまった)
- OS:Windows 7
- CPU:Core i7-2600 @ 3.4GHz(ターボブースト時3.8GHz)
- メインメモリ:8GB
- ビデオカード:GIGABYTE GV-N960WF2OC-2GD-GA GeForce GTX 960(コアクロック+100MHz、メモリクロック+150MHzにオーバークロック)
GIGABYTE ビデオカード Geforce GTX960搭載 『メタルギア ソリッド V グラウンド・ゼロズ』バンドルモデル GV-N960WF2OC-2GD-GA
- 出版社/メーカー: 日本ギガバイト
- 発売日: 2015/01/23
- メディア: Personal Computers
- この商品を含むブログを見る
結果はスコア8099、「とても快適」になりました。ビデオカードをオーバークロックしているというのもありますが、ドラゴンズドグマ オンラインをプレイするならGTX 960で十分そうですね。
ベンチマークその2(GTX 970 1920 x 1080 最高品質 フルスクリーン)
ゲーム用に組んだPC。GeForce GTX 970のビデオカードを使用しています。
- OS:Windows 7
- CPU:Core i5-3570K @ 3.4GHz(ターボブースト時4.2GHzにオーバークロック)
- メインメモリ:8GB
- ビデオカード:ZOTAC ZTGTX97-4GD501 GeForce GTX 970(コアクロック+100MHz、メモリクロック+200MHzにオーバークロック)
ZOTAC GeForce GTX 970 グラフィックスボード VD5516 ZTGTX97-4GD501
- 出版社/メーカー: ZOTAC
- 発売日: 2014/09/20
- メディア: Personal Computers
- この商品を含むブログを見る
結果はスコア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でダウンロードできます。
Perl 6を語る(第1回)コメントとアンスペース
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の周辺機器設定から手動で音量を下げる必要があります。
- PS4起動中にコントローラーのPSボタンを長押しする
- 「サウンドと周辺機器を設定する」を選ぶ
- 「音量コントロール(コントローラーのスピーカー)」の音量をゼロにする
これでゲーム中にコントローラーの音声が出なくなります。
- 出版社/メーカー: スクウェア・エニックス
- 発売日: 2015/02/26
- メディア: Video Game
- この商品を含むブログ (18件) を見る
HD598の標準ケーブルをXLRバランスケーブルに改造する
HD598のオーディオケーブルにXLRタイプコネクター(キャノンコネクター)を接続してバランス化する方法を紹介します。ケーブルが共通なのでHD518 / HD558にも適用できると思います。
改造に使ったもの
以下で紹介するものは全てAmazon.co.jpで注文できます。はんだこてなどの道具込みで4300円程度でした。
はんだこてセット
単純にベストセラー1位だったので購入。オーディオケーブルとXLRコネクターの接続に使います。(これを購入後に知ったのですが、はんだの代わりに接着剤で接続する方法もあります)
- 出版社/メーカー: 太洋電機産業
- メディア: Tools & Hardware
- 購入: 11人 クリック: 38回
- この商品を含むブログ (4件) を見る
ワイヤーストリッパー
これもベストセラー1位だったので。ケーブルの被膜を切り取る道具です。このNo.3500E-1は直径0.5~2.0mm用で、HD598のケーブルでも使えました。
黄色のNo.3500E-2もありますが、対応する径が異なるので注意。
- 出版社/メーカー: ベッセル
- メディア: Tools & Hardware
- クリック: 33回
- この商品を含むブログを見る
XLRコネクター(メス3ピン)
自分が使っているUSB DAC UD-301のXLRコネクターがオス3ピンなので、メス型のNEUTRIK NC3FXX-Bを2個購入。
NC3FXX-Bは接続部が金メッキですが、銀メッキのNC3FXXもあります。
- 出版社/メーカー: ノイトリック
- メディア: エレクトロニクス
- この商品を含むブログを見る
バランスケーブル化の手順
具体的な改造方法を説明していきます。HD598はケーブルが着脱可能なので、本体から外しておきます。(接続部を左回りにねじるように動かしてから引き抜く)
ステレオプラグを切り離す
オーディオケーブルを途中でカットし、プラグを切り離します。自分は端から50cmくらいの位置でカットしました。
ケーブルの外側の被膜を切り取る
カットした部分の端から10cmの被膜をワイヤーストリッパーで切り取ります(穴は2.0mmを使用)。うまく切れない場合はカッターナイフも併用してください。
中にはL側(白、黒)とR側(赤、青)の線が入っています。黄色っぽい繊維は不要なので切り取っておきます。
4本の線の被膜を切り取る
上記の線の端から4mmをワイヤーストリッパーで切り取り(穴は0.5mmを使用)、ヨリ線をねじってまとめます。これらの中にも繊維が織り込まれているので、できるだけ切り取っておきます。
白と黒(Lの場合)の線をブッシングに通す
ブッシング(接続具)にL / Rそれぞれの線を通しておきます。はんだ付けした後だと通せなくなるので注意。
インサートに銅線をはんだ付けする
インサート(内部金具)と銅線をはんだ付けして接続します。HotとColdが対応するようによく確認しましょう。なお、XLRコネクターの1番は使用しません。
HD598用ケーブルの仕様
種類 | L | R |
---|---|---|
Hot | 白 | 赤 |
Cold | 黒 | 青 |
XLRコネクターの仕様
番号 | 種類 |
---|---|
1 | GND |
2 | Hot |
3 | Cold |
インサートは1、2、3と番号が表示してあります。
はんだこてセットに入っているヒートクリップでインサートと線を固定すれば作業しやすいです。
LとRをはんだ付けした状態
補足:はんだの代わりに接着剤を使う
はんだを使わずにAgICの導電性接着剤で接続ができます。はんだと比べて強度が弱そうなので、導電性接着剤の上から瞬間接着剤を上塗りして補強する必要があります。(はんだこてを購入した後で知ったので、実際に試したわけではないですが)
- 出版社/メーカー: ENSON
- メディア: おもちゃ&ホビー
- この商品を含むブログを見る
コネクターを組み上げる
NC3FXX-BのページにあるAssembly Instructionを参考にしてコネクターを完成させます。
XLRバランス接続に使ったDAC (TEAC UD-301)
ヘッドホンアンプになるし、光デジタル入力にも対応している(主にPS3/PS4用)ということで購入したUSB DAC。LとRで回路が独立しているので、フルバランスのステレオ再生ができます。
TEAC UD-301-B Reference 301 D/Aコンバーター デュアルモノラル構成 ハイレゾ音源対応 ブラック
- 出版社/メーカー: ティアック
- 発売日: 2014/03/15
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る