してログ

このブログでは、主に技術系の話題やネット関連の話題を扱います。 ネーミングはまだしっくりいってないけど、「LANDHERE Web Site log」→「Site blog」→「Sitelog」→「してログ」、とりあえず。

IODATA製の WQHD(2560×1440)と決まったので、早速値段を調べてみました。ところがマイナーチェンジなのか逆輸入なのか、同仕様で複数の型番があるので分かりづらい。とりあえず、同等製品と共にリストアップしてみると下記のとおり。

メーカー型番最低価格備考
IODATAKH3200V-Q¥30,024
IODATAEX-LDQ321DB¥32,798
IODATALCD-MQ321XDB¥38,381
IODATALCD-PHQ321XQB¥53,789※広色域
HPPavilion Gaming 32HDR¥37,584
ViewSonicVX3276-2K-MHD-7¥29,800
AcerEB321HQUBbmidphx¥33,816DVIあり
ASUSVA32AQ¥38,848D-SUBあり

調べてみると広色域タイプ以外はすべて同スペックで同形状(型番しか違いが見つけられない)なので最安の KH3200V-Q をカートに入れておきました。その他、問題が無いか今日中に判断して購入しようと思っていましたが、残念なことに夕方見たら売切れていました。同価格でもう1店舗あるにはあるのですが、ショップ評価が低いので止めときました。

価格変動を見ると ¥26,000 くらいまで下がったことがあるらしいので、待ってみるのもいいと思いました。

代わりに中古モニタ買いました

購入意欲が削がれて長期戦モードに移行しましたが、サブモニター SHARP LL-T1520-H の輝度ムラと15インチ(1024×768)というサイズを何とかしようと思い、ハードオフに立ち寄ってみました。狙い目は17インチ(1280×1024)かなと思いながら探していると、EIZO FlexScan S1721 を発見しました(結構な美品)。

その1で書いた通り前は、FlexScan S2031W + FlexScan L885 の環境でした。現在は S2031W が故障して、L885 がメインモニターです。なので同じ EIZO 製の S1721 は相性もいい、17インチ SXGA なので繋ぎとしても十分だと思いました。

さっそく繋げてみると、なんかちょっとイマイチな映り。もしかして、外れを引いちゃったのかなと思いました。設定とか見ると、1024×768 になっていてモニターの設定でも 1280×1024 が選べません。何が悪いのか分かりませんでしたが、ディスプレイアダプタのドライバーアップデートを掛けたら選べるようになりました。映りもシャープになってなかなかいいじゃないか。もしかしたら、前のモニターの設定が固定されていたんじゃ無いかな。

ちなみに、このモニターを選んだのはもう一つ理由があって、縦スクロールシューティング専用モニタにちょうどいいなと思ったからです。モニターアーム無くても標準で縦に回転できるし、4:3なので古い縦シューやるのに向いています。解像度が細かすぎないのもいいですね。大型ワイドの高解像度でもスペック的には十分だけど、黒マスク入り真ん中ちょこんだと雰囲気が無いです。

WQHD の大型モニターはちょっとお預け

と言う訳で、しばらく大型モニターは様子見することにします。価格的には3万円でも十分安いと思いますが、最近お金を使いすぎてしまった感があるので妥協です。

年末に壊れたメインディスプレイの代わりに、大画面モニタを購入計画が持ち上がっています。元々が 1680×1050 という中途半端な解像度だったので FHD のモニタでもぜんぜんいいのですが、どうせならもっと高解像度&大画面化したいなあという訳です。それで色々と調べたところ、32インチ WQHD(2560×1440)がバランスが良さそうなので、これを軸に選定作業を進めて行くことにしました。

WQHD に決めた理由

メインモニタが壊れて、サブモニタとして使っていた FlexScan L885 をメインモニタに昇格して利用していました。このモニタは UXGA(1600×1200)の解像度で、なかなか快適な広さだったので 1080 にダウングレードするのが嫌だからです。あと、無くなったサブモニタはサーバー用に使っていた 1024×768 を使っているので非常に狭い、早く L885 に戻したい。

ちなみにサブモニタは縦にして A4縦の資料を見るのに使っていました。この目的だと 4:3 の UXGA ってこれ以上無いってくらいぴったりなんですよね。実はハードオフで 1,500円で購入したものなのですが、まじでいい買い物したと思っていました。今となっては、4:3 の UXGA ってなかなか無いですからね。縦スクロールのシューティングやるのにもぴったりです。

グラフィックボードが WQHD に対応しているか問題

今使っているメインPCは、ドスパラで組んでもらったものなので何のグラフィックボードが搭載されているか確認してみました。ドスパラだと購入時に構成表を渡してくれますのでこういうとき便利です。それによると、Palit NE5X66001049-1060F(GTX660 2G GDR5 2D1H1P)のようで、仕様をみると「Dual-Link DVI x2」「最大解像度 4096×2160」とあります。

今では無くなりつつある DVI ですが、WQHD に出力するにはデュアルリンクに対応していなければなりません。このグラフィックボードは、DVI しか端子がありませんがスペック的には問題なさそうです。

DVI 端子のある WQHD ディスプレイが少ない問題

というか1機種しか見つけられませんでした。それが Acer EB321HQUBbmidphx です。その他のディスプレイは、HDMI と DisplayPort だけの仕様。DVI はもう終わった規格なんですねぇ。

この Acer をポチるかグラフィックボードも交換することになりそう。正直グラフィックボードはゲームしないから今ので十分なんですよ。やたらインターフェイスを乱立させるのやめて欲しいです。

DVI → HDMI 変換アダプタが WQHD を映せるか問題

グラフィックボードも交換するのはお財布に悪いので、変換アダプタを検討してみることにしました。そのような製品はいくつかあるのですが、詳しい仕様が書いてありません。具体的には、DVI デュアルリンクから HDMI 1.4 への変換ができるかどうか、です。DVI 側のコネクタピンの本数を数えても、デュアルリンクのピン数でありながら非対応というレビューがあったり、品名に 1080P と書いてあったり、正直訳が分かりません。

商品名にデュアルリンクと表記してある製品を見つけたのですが、価格が安くてとっても不安。価格コムのクチコミに変換アダプタで映せたというのがあったのですが、製品名までは分かりません(これなのかなあ)。まあ280円なので試してみようかと思っています。

他にデュアルリンク表記の2製品を見つけたけど1万円以上。正直、変換アダプタに1万円は出したくは無いです。変換ケーブルに検索対象を広げて探してみようと思います。

入力切替の操作が面倒な問題

今使っているディスプレイは、独立した入力切替ボタンが付いていて2系統を交互に切り替える方式になっています。調べたところ、ツリーメニューを操作しないと切り替えられないディスプレイばかりです。リモコンが欲しいところですが、安価のモデルには付いていません。正直、これがネックで購入に二の足を踏んでいます。

デスク回りはすっきりさせたい派なので HDMI 切り替え器を挟むのは論外ですし、高級な切り替え器でないとディスプレイの設定がいちいち変わってしまう恐れもあります。入力切替は頻繁に利用するので、この操作感が悪いと嫌なんです。

日本製が壊滅状態な問題

ディスプレイはずっと日本製を使ってきましたが、最近は安価な海外製に淘汰されつつあります。しかも、それに対抗してからなのか日本製の信頼性もずいぶん落ちてきています。今まで使っていた EIZO FlexScan S2031W はライン抜けやカラー異常でお陀仏、別の iiyama ProLite E2208HDS は電源が10分くらい点かない有様です。海外製は通電時に異音がしたり、突然まったく点かなくなって故障したりで耐久性は悪いイメージがありますが、日本製もそんな状態だったら安い方がいいですよね。

実は、他の製品のイメージが悪くて IODATA は検討から外していたんですが、調べてみると元は三菱なのだそう。そうなってくると IODATA 製がいっきに検討トップに踊り出ます。三菱といったらダヤモンドトロンにだいぶお世話になっておりました。

という訳でまとめです

  • 必要スペックは、32インチ WQHD(2560×1440)、IPS液晶、ノングレア
  • DVI → HDMI 変換アダプタ(またはケーブル)をかます(ダメならグラフィックボード交換を検討)
  • IODATA 製ディスプレイ(値段次第で海外製も検討)
  • 予算は5万円以下
こんな感じです。

ffmpeg を使用してアスペクト比のおかしい動画を、再エンコードなしで直すことができます。

ffmpeg -i movie_src.mp4 -c copy -aspect 4:3 movie_fix.mp4

パラメータを見ればだいたい分かる、ということで説明省略。以上。

ものぐさ変換バッチツールを作っておく

毎回オプションを調べたり正しいアスペクト比を計算するのも面倒なので、汎用的な変換バッチツールを準備しておくことにします。代表的なアスペクト比、4:3 と 16:9 の横と縦を用意しておき、実際の変換結果を見てみることで正しい結果のものを残すイメージです。

aspect.bat
ffmpeg -i src.mp4 -c copy -aspect 4:3 fix_4-3.mp4
ffmpeg -i src.mp4 -c copy -aspect 3:4 fix_4-3_v.mp4
ffmpeg -i src.mp4 -c copy -aspect 16:9 fix_16-9.mp4
ffmpeg -i src.mp4 -c copy -aspect 9:16 fix_16-9_v.mp4

ついでに回転と反転も直す

スマホ撮影ものやライブ配信ものだと、回転の向きがおかしかったり、左右が反転していたりするものも多くなっています。左右反転はそのままでもまあいいんですが、回転方向は直してあげないと見にくいです。再生時にプレイヤー側でも直せますが、操作が面倒なのでメタ情報を修正してあげるのがいいです。

時計回りに90度回転
ffmpeg -i movie_src.mp4 -c copy -metadata:s:v:0 rotate=-90 movie_fix.mp4
反時計回りに90度回転
ffmpeg -i movie_src.mp4 -c copy -metadata:s:v:0 rotate=90 movie_fix.mp4

※ストリーム識別子は、":s:v:0" で最初のビデオストリームという意味になる(で合ってると思います)

仮想マシンをボリューム間で移動することがあったのでそのメモです。ssh でそのままコピーすると、シンがシックになっちゃうので、ディスクイメージだけは vmkfstools を使用します(それ以外は普通にコピーして構いません)。

基本的には、vmdk と vmx をコピーするだけの単純な作業になります。データストアにかなり負荷を掛けますので、夜間など利用が少ない時間帯に行うことをお勧めします。

ディスクイメージのコピー

まず、スナップショットがある場合は統合しておきます。コピーは下記のようなコマンドになりますが、-d はシンプロビジョニングにする指定になります。-a オプションはアダプター種別で、付けても無視されたので無しでいいと思います。

vmkfstools -i /vmfs/volumes/src_vol/src_vm/src_vm.vmdk /vmfs/volumes/dst_vol/dst_vm/dst_vm.vmdk -d thin

ちなみに、スナップショット統合し忘れて ~000001.vmdk のほうをコピーしたことがあるのですが、「スナップショットの管理」の「すべて削除」はエラーで不能でしたが、「ディスクの統合」ではうまく解消できたようです。

vmx ファイルのコピー

他のファイルはいらない(逆にあると起動しない)ので vmx ファイルだけコピーします。ディスクイメージの名前を変更した場合は、vmx をテキストエディタで編集し、変更したファイル名を置換します。

cp /vmfs/volumes/src_vol/src_vm/src_vm.vmx /vmfs/volumes/dst_vol/dst_vm/dst_vm.vmx

仮想マシンの登録変更

古い仮想マシンを登録解除し、コピーした仮想マシンを登録し直します。初回起動時にコピーか移動か尋ねられると思いますので、移動を選択しておきます。実際に起動してみて問題が無ければ、古い仮想マシンはボリュームから削除して構いません。

中古で買ったパソコンの回復ドライブを作成しようと思い、Windows10 が示した 8GB の USB メモリを用意したんですが、半分ぐらい進んだ時点で「エラーが発生しました」とかで失敗してしまいました。理由も何も示されないのは、もはや Windows10 の伝統芸能なんでしょうか。

これさ、8GB の USB メモリでいいと思うじゃん
これさ、8GB の USB メモリでいいと思うじゃん

結論から言うと容量不足なわけで、16GB の USB メモリに作成し直したところ 9.18GB ほど必要だったことが分かりました。 ちなみに、失敗した USB メモリを見てみると約半分ぐらい容量が残っていて、これだけ見ると容量不足と気が付きにくいんでは無いでしょうか。恐らくは、初期の Windows10 は 8GB に収まっており、あのメッセージは固定テキストで実装されているんだと思いますね。準備に結構時間が掛かっているにも関わらず、正確な見積もり容量すら計算していないとか、相変わらずお粗末な OS ですよね。

Windows7 のころまでは subst というコマンドを使って実現していましたが、最近の Windows では利用できなくなっていました。このコマンドをレジストリに登録することで解決できるようですが、設定も解除も面倒なので別の方法を紹介します。

やり方はすごい単純で、ネットワークドライブを自分自身のディレクトリに設定してしまうというものです。コマンド操作もレジストリ編集も出てきませんので、subst+起動バッチを使うよりお手軽かも知れません。

  1. ドライブにしたいディレクトリのプロパティを開き、[共有]>[詳細な共有]>[このフォルダーを共有する] にチェックを付ける(必要に応じてアクセス許可も設定します)
  2. エクスプローラでネットワークから、自分のPC名を探して開きます
  3. 先ほど設定した共有名を右クリックし「ネットワークドライブの割り当て」を選択します
  4. 最後にドライブレターを選んで [完了] を押します
こんな地域が地球上にあるとは思わなかった
こんな地域が地球上にあるとは思わなかった

デバッグしてたら、白夜や極夜の地域で表示が崩れてしまい、最初バグだろうと思っていたのが実は正しかったようです。プログラムとしては、日中の範囲は日の出時刻と日の入り時刻で管理し、それぞれ1回あるか無いかしか判断していませんでした。これを、今回配列に変更し複数の日の出、日の入りいイベントを管理できるように改修してみました。

恐らく、白夜や極夜が明ける最初の1日しかこのようなことは起こらないのでは無いかと思いますが、どの地域でも完璧に表示したいので対応しました。ただし「どの地域でも」とは言いましたが極点の2地点だけは別です。極点ではすべての方角が、南もしくは北になるのでここだけは表示できないと思います(どんな表示になるか後でやってみよう)。

Windows10 バージョン1809 あたりからデフォルトの設定が変わったのか、ウィンドウの境界線が描かれなくなったりしていました。アップデートしてずっと使っているPCなら設定が引き継がれますが、新規インストールなどの場合はちょっと戸惑う点です。前から思っていますが、フラットデザインはあまり好きじゃない部分ってこういうところです。そこにボタンがあるのが視覚的に分からなかったり、どのウィンドウが手前なのか分かり難かったり、明らかに利便性を損ねていると思います。

アクセントカラーを境界線に適用する

デスクトップで右クリックして、[個人設定]>[色]>[タイトルバーとウィンドウの境界線] にチェックを入れます。タイトルバーにも色が付いてしまうのがイマイチですが、境界線が付くので好みの色があってフラットデザインが好きならこちらの設定が良いでしょう。また、リモートデスクトップで視覚効果をオフにしたい場合もこちらがいいと思います。

こちらの場合は色を固定した方がいい
こちらの場合は色を固定した方がいい

アクティブウィンドウに影を付ける

エクスプローラのPCアイコンを右クリックして、[システムのプロパティ]>[システムの詳細設定]>[パフォーマンスの設定]>[ウィンドウの下に影を表示する] にチェックを入れます。アクセントカラーだと見た目が大きく変わってしまいますが、こちらはウィンドウのデザインはそのままに周囲に影を落とします。Windows7 の Aero や MacOSX がお好きな方(私も)はこちらが断然お勧めです。

やっぱりこっちがお勧め
やっぱりこっちがお勧め

ついでにゴミ箱の削除確認を出すようにする

最近の Windows では削除確認が無く直接ゴミ箱に入るようですが、何となく不安だし間違えたときメンドクサイので今までどおりがいいです。設定方法は、ゴミ箱を右クリックして [プロパティ]>[削除の確認メッセージを表示する] になります。

ネットで探しても、シンプルで使い勝手が良いカレンダー作成関数が無かったので自作してみました。そのまま使えて、余計なコードが入って無くて、カスタマイズもしやすい、そんな関数になっていると思います。

カレンダー作成関数
function build_calendar(mon,cell) {

	var cur = new Date(mon.getTime());
	var lst = new Date(mon.getTime());

	cur.setHours(0,0,0,0);
	cur.setDate(1);
	cur.setDate(-cur.getDay()+1);

	lst.setMonth(mon.getMonth()+1,0);
	lst.setDate(lst.getDate()+7-lst.getDay()-1);

	var tbody = '';

	tbody += '<table>';
	tbody += '<tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr>';

	while (cur<=lst) {

		tbody += (cur.getDay()==0 ? '<tr>' : '');
		tbody += '<td>'+cell(cur)+'</td>';
		tbody += (cur.getDay()==6 ? '</tr>' : '');

		cur.setDate(cur.getDate()+1);
	}

	tbody += '</table>';

	return tbody;
}

使い方

第1引数に作成したい月の Date オブジェクト(月内であれば何でも良い)を、第2引数で日付セルのコールバック関数を渡してください。セルをコールバック関数にしたことで、予定を入れたり、月齢を入れたり、自由にカスタマイズができます。

var html = build_calendar(new Date('2019/1/1'),function(cur){
	return cur.getDate();
});
出力結果
303112345
6789101112
13141516171819
20212223242526
272829303112

コールバック関数は引数で Date オブジェクトを渡してくるので、シンプルに getDate() で日付を返せば出力結果のようになります。その Date オブジェクトを別の関数(たとえば月齢計算など)に渡せば、情報をカレンダーに埋め込むことが可能になります。オプションを増やして、デフォルトの表示を付けたり、月内の日付以外は出さないようにしたり、汎用的に拡張してもいいかも知れません。

ロジック

コードを見れば分かる程度のことですが、簡単にロジックを説明しておきます。

  1. 渡された日付からその月の1日を求め、更にその週の日曜日(A)を求める
  2. 渡された日付からその月の末日を求め、更にその週の土曜日(B)を求める
  3. (A)から(B)までループさせながらテーブルタグを構成していく
  4. 各日付の中身は、渡されたコールバック関数を呼び出して任せる

シンプルにするための工夫としては、半端な前月と次月の日付を含めてループさせることで余計なパディングをしていないこと、<tr> タグの入れ方により変数の数を減らした点です。カレンダーのカスタマイズは CSS とコールバック関数でほとんどクリアできると思います。

昨日からサイトの構成を変更してたのですが、表題どおり iPhoneX だけメディアクエリが効いてないような症状に悩まさました。iPhone6 plus や Android では問題ないのに、iPhoneX だけ無視されるメディアクエリがあるようで、詳しくは分からないのですが複数ブロックに分けて書いてあるものをまとめたらうまく動く、という訳のわからん状態です。明らかにおかしな動きをしているので、iPhoneX のバグじゃないかと思います。