読者です 読者をやめる 読者になる 読者になる

実録コンピュータ物語

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

PC版FF X/X-2 HD RemasterでDSR時に画面が拡大表示されてしまう現象の対処法

PC版がリリースされたFINAL FANTASY X/X-2 HD Remasterですが、NVIDIAGPUでDSR(ディスプレイを超える解像度で描画してから縮小表示する機能)を有効にするとスケーリングが行われず、画面の左上だけが拡大表示されてプレイが続行不可能になります。

この問題の対処法は以下のサイトで説明されていて、FF X/X-2 HD Remasterがインストールされているフォルダー内の実行ファイル「FFX.exe」「FFX-2.exe」を右クリック→互換性→「高DPI設定では画面のスケーリングを無効にする」にチェックを入れて適用

これでDSR状態でも拡大されずに正しく表示されるようになります。

techfaqs.net

英辞郎をStarDict形式に直接変換するスクリプト「eiji2sd」

英辞郎をStarDict辞書に変換するスクリプトを作りましたので公開します。StarDict、GoldenDictOmegaTなどで英辞郎が使えるようになります。

ダウンロードリンク(Dropboxeiji2sd_20160307.zip

f:id:bosh:20160301193001p:plain

最初、OmegaT英辞郎を使いたくて方法を調べていたのですが、PDIC用データをエディタで編集する作業が必要だったり、StarDict変換ツールがUnix環境前提だったりと敷居が高く、もっと手軽に変換する方法が必要だと考えました。なので、Windowsでも変換できるようにPowerShell(ついでにPerl)で作成しています。

この手のツールはGo言語で作りたかったのですが、まだ習得中なので・・・

不具合修正

eiji2sd_20160307:PowerShell版で辞書ファイル未作成の状態だとResolve-Pathがエラーになることがわかり、Join-Pathを使うように変更した(YU-TANGさんより)

使い方(PowerShell版)

変換スクリプトはeiji2sd-text.ps1(StarDict用)とeiji2sd-html.ps1(GoldenDict、OmegaT用)があり、使う前にセキュリティ設定の変更が必要です。エクスプローラのメニューで「ファイル」→「Windows PowerShell を開く」からコンソールを起動し、「Set-ExecutionPolicy Unrestricted」と入力してスクリプトを実行できるようにする必要があります。

f:id:bosh:20160301204442p:plain

英辞郎のテキストデータ(EIJI-140.TXT、数字はバージョンによる)をスクリプトと同じ場所に保存し、「.\eiji2sd-html.ps1 .\EIJI-140.TXT」と入力すると変換が行われます。

f:id:bosh:20160301205823p:plain

stardict.idx、stardict.dict、stardict.ifoという3つのファイルが作成されるので、適当な名前のフォルダー(EIJIROなど)に入れて各ソフトの辞書保存場所にフォルダーごとコピーしてください。(OmegaTの場合はプロジェクトのdictionaryフォルダーに保存)

さらに、dictzipというツールを使えばdictファイルを圧縮することができます。 https://github.com/Tvangeste/dictzip-win32/releases

課題

  • Go言語で作りなおして速度と移植性を向上させる
  • .synファイルも作成する

参考リンク

購入して2ヶ月半のCore i7-6700がまさかの故障

2015年9月にゲーム用のPCを一新して、CPUをIvy BridgeCore i5-3570K)から一気にSkylake(Core i7-6700)にしたのですが、早くも故障しました。

まさかCPUが故障するとは思わなかったので、原因を調べるのに無駄に金を浪費する羽目になってしまいました・・・一応言っておくと6700Kではなく通常版の6700です。オーバークロックで壊れたとかではなく定格運用です。

CPU(Core i7-6700)故障の経緯

Fallout 4の日本語版待ちでFallout 3をプレイしていたら、突然PCがフリーズした。Ctrl+Alt+Delなどのキー入力も受け付けない。まあFallout 3だからな・・・と諦め、電源ボタン長押しで強制的に電源を落とした。

cabonera.hateblo.jp

再度電源を入れたところ、最初に出るBIOS画面(いわゆるPOST画面)でフリーズしてしまった。なんか様子が変だぞ?と思いつつ、もう一度強制的に電源を入れなおすと、今度はPOST画面すら表示されなくなった。CPUファンやケースファンは正常に回っており、この時はCPUの故障だとは想像もしていなかった。

ファンが回るということは電源ユニットの故障ではない。グラフィックカードを外して内蔵グラフィックにしても画面は表示されなかった。そもそもBIOSが起動しないということはマザーボードの故障だろうと判断し、ヨドバシ・ドット・コムに修理依頼を出してマザーボードを引き取ってもらった。

故障した(と思い込んでいた)マザーボードはあまり使い続けたくないなあと思い、修理されて戻ってきたら売ってしまうつもりで代替のマザーボードを発注。

新しいマザーボードが届いたのでPCを組み直し、電源を入れてみたらBIOS画面が出ない。組み方を間違えたかな・・・と何度も確認したが不備はない。マザーボードが原因じゃなかったのか?と思い始めた。

悩んだ結果、メモリ(DDR4)も交換することに。4GB x 2枚をさらに追加で発注した。メモリに異常がなかったとしても4GB x 4枚にすればいいやと思った。

メモリも交換したが、やはりPCが起動しない。マザボとメモリを交換してダメということは、まさかCPUが原因なのか?ということでネット閲覧用PCのCore i5-6500(こっちのPCもSkylakeにしていた)に交換したら普通に起動し、ようやくCPUの故障だと判明。

というのがCPU故障の経緯です。古いPCパーツを売ったお金があるのでダメージは少ないですが、最悪な11月になってしまいました。

その後:保証期間内なので、CPUは新品に交換してもらいました。

【追記】大型のCPUクーラーを使うとCPUが破損する可能性

故障の原因はこれかもしれない。

gigazine.net

使っていたCPUクーラーは手裏剣リビジョンBというもので、全高は低めだけど重量は結構あります。 タワー型のPCケースだとCPUクーラーが横に倒れた状態になるので、CPUの片側に圧力が集中して破損したのかもしれません。対策としてはクーラーの圧力が均等になるようにPCを横置きにすればいいんですが、場所を取るし、クーラーを軽量のものに変えるしかないのだろうか。

Fallout 3の日本語化を自動でやってくれるPowerShellスクリプト

Fallout 4の日本語版が発売間近なので、待っている間に前作のFallout 3を遊ぶことにしました。PC版は有志の翻訳によって日本語化が可能ですが、色々とファイル操作が必要なので面倒です。そこで、手軽に日本語化ができるように作業を自動化するPowerShellスクリプトを作ってみました。

f:id:bosh:20151115063922p:plain

スクリプトの使い方(2017年4月15日更新)

更新:DropboxからファイルをダウンロードするURLを修正しました。

スクリプトのダウンロード&セキュリティ設定の変更は不要です。事前準備は管理者権限でWindowsを起動することとFallout 3 GOTYのインストールだけです。

Windowsスタートメニュー→Windowsシステムツール→「コマンドプロンプト」にカーソルを合わせて右クリック→その他→「管理者として実行」をクリックしてコマンドプロンプトを起動する

以下のテキストをコピーしてコマンドプロンプトに貼り付け、Enterを押して実行する(テキストを選択してコピー→コマンドプロンプト上で右クリックすると貼り付けされます)

powershell -NoProfile -ExecutionPolicy Bypass -Command "Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://www.dropbox.com/s/lirhtypa0p5lls5/FO3AutoJapanize.ps1?dl=1'))"

デスクトップに「Fallout 3 - FOSE」というショートカットが作成されるので、これを起動すれば日本語化された状態で起動します。

デスクトップに作業用としてFO3AutoJapanizeというフォルダーを作成するので、必要なければ削除してください。

スクリプトがやってくれること

動作確認環境

参考情報

スクリプトの使い方(旧)

Fallout 3日本語化スクリプトをダウンロードし、適当な場所に展開してください。

エクスプローラでFO3AutoJapanize.ps1がある場所に移動し、メニューの「ファイル」→「Windows PowerShellを開く」→「Windows PowerShellを管理者として開く」を選択してPowerShellのコンソールを開きます。

f:id:bosh:20151115055725p:plain

PowerShellはセキュリティ機能の制限によってネットからダウンロードしたスクリプトを実行できない仕組みになっています。そのため、コンソールで「Set-ExecutionPolicy Unrestricted」と入力して制限を解除します。後で元に戻したいときは「Set-ExecutionPolicy Default」と入力してください。

f:id:bosh:20151115055822p:plain

コンソールに「.\FO3AutoJapanize.ps1」と入力すると日本語化スクリプトが実行されます。

デスクトップに「Fallout 3 - FOSE」というショートカットが作成されるので、これを起動すれば日本語化された状態で起動します。

デスクトップに作業用としてFO3AutoJapanizeというフォルダーを作成するので、必要なければ削除してください。

「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:<( )>'

動作確認環境と参考情報