してログ

ネットワーク共有ファイルなどで開いているときに回線切断になったりすると、誰も開いていないファイルが使用中で編集ができなくなる場合があります。ちょうど昔の Windows で画像のサムネイルの thumb.db のせいでフォルダが削除できなくなったりする問題に似ています。MS-Office でも何らかの形でロックファイルみたいなものがあるんだと思いますが、そこらへんは知らなくても解消できる方法があったのでご紹介します。

設定方法

  • リボンメニューの余白で右クリックして「リボンのユーザー設定」を開く
  • ユーザー追加したグループがない場合は、右側のタブのどこかに予め作っておく
  • コマンドの選択から「リボンにないコマンド」または「すべてのコマンド」を選択する(コマンドリストが出るまで結構待たされる)
  • コマンドリストから「読み取り専用の設定/解除」を選択し(ユーザー追加のグループに)「追加>>」を押す
  • 設定が終わったら「OK」で適用する
すべてのコマンドのかなり下のほうにある
すべてのコマンドのかなり下のほうにある

追記1

ロックしたユーザーが別のユーザーだからか、上記コマンドでも「通知」しか選べないような場合がありました。NAS 上のファイルなので再起動を最終手段としていろいろと試してみたところ、別のフォルダーにそのファイルを移動したところ編集できるようになりました。もしかしたら勘違いかも知れないレベルの情報ですが、試してみる価値はあるかと思います。

追記2

追記1で書いた内容ですが、恐らく時間が経って編集可能になったというのが真相だと思います。ファイルを開きっぱなしのノートPCがスリープなどでネットワーク切断した場合、そのファイルをロックしたままになるとこのような状態になります。このような場合は「通知」を選んでしばらく放っておくと、「利用可能になりました」という通知が来ますので [編集] ボタンで復帰できます。

平成31年

新しい元号は4月1日に発表するらしいが、やっぱり天皇即位と同時に発表になった方がいいと思うんです。システムの変更なんてどうでもいいし、平成31年でも新元号元年でも受け付けれるよう柔軟に対応したらいいのに、なんか面白くないですよね。

そこで提案。4月1日に発表するのは「アルファベット1文字」だけにして「漢字」は5月1日に発表する、というのはどうでしょう。システム的には漢字でもアルファベットでも対応できるようにしておけばいいし、漢字に置き換える関数は暫定でアルファベットにしておけば問題は少ないと思いますよ。まぁ、これに関してシステム変更はそんなに手間でも無いし、普通に5月1日でもいいと思いますけどね。

EIZO FlexScan S2031W というディスプレイを使っています。数年前から故障していたのを騙し騙し使っていたのですが、先ほどからいよいよ本格的に故障したようです。

  1. 数年前のこと、突然画面に白い横線が一本常に入るようになる
  2. 何をしても直らず、EIZO のサポートに電話したけどめんどくさそうな対応される(なんか新しいの買えよって雰囲気ぷんぷんさせてて、あまりいい印象が残っていない)
  3. 一本くらいだったらいいか、とそのまましばらく使い続ける
  4. 数か月経った頃、もう一本増えたw(ちなみに、ディスプレイの枠外を強く押さえたりすると、しばらく直ることもあるが、だんだん通用しなくなる)
  5. それから数年経つ間に、10本ぐらいまで増えたw(こうなってくると、ちょうど横棒に重なったりすると別の文字に見えることもあり、プログラムコードを打つときなどかなり辛くなっていた)

ここまでならまだ使い続けることもできるかも知れないが、先ほど新たな段階に入ったようでいよいよ終わりの時が来たようです。

  • 画面 2/3 ほどが暗く表示される
  • 暗い領域では、残像が長く残り、細かい文字などにフリンジのような偽色が生じる
  • 残像はかなり長く残るようで、画面を真っ白にすると、デスクトップにあったアイコンがうっすら見える

さすがにもう無理です。新年早々、思わぬ出費になりそうです。

平成30年師走。Windows10 への無償アップグレードキャンペーンはとっくに終わっていますが、どういうわけかできるみたいです。というわけで、実際にアップグレードを試してみました。

  1. Windows 10 のダウンロードのサイトにアクセスして「ツールを今すぐダウンロード」から MediaCreationTool を取得します
  2. ダウンロードしたツールを実行しアップデートします(私の環境では一回何の報告も無しに終了しましたが、再起動してもう一度実行したら大丈夫でした)
  3. 途中、環境チェックで互換性が無いデバイス(ディスプレイアダプタ)の警告が出ましたが、「確認」ボタンで続行することが出来ました
  4. その他は特に問題なく、アップデートが完了しました
  5. システムのプロパティでも「Windows はライセンス認証されています」となっているので問題無さそうです

Windows アップデートを昼間やると仕事にならんので、昨日の夜にやったわけですよ。アップデートを開くと累積アップデートの 1803 と 1809 があがってて、1803 のアップデート完了で再起動になった。かなり待たされたが、時間のことでとやかく言うつもりはない。再起動後、念のため更新プログラムのチェックを行うと、1809 のアップデートが始まった。いっぺんにやってくれないのか、と思いつつ処理を待っていると...。

C: ドライブの容量不足で、何やら解決手段のようなダイアログが表示された。それを見ると、STEP1 C: のクリーアップ、STEP2 他のドライブを使用、みたいな内容でクリーンアップも限界そうだったので、他のドライブを指定して続行を選んでみた。その後再起動が掛かり、ブルーバックで更新処理が続行される画面になるが、ここからいっこうに進まない。ずっと0%のままだったが、1時間くらい経ったころようやく動きはじめ20%超えくらいまで確認して放っておいた。更に1時間ほど経っても終わってない、何気にメッセージを見てみたら「元の状態に復元しています...」とある。

これなんだよ Windows10。ちなみに、指定した他のドライブは 200GB ほど空きがあったし、ダイアログで○マークも付いていたので問題無かったはず。結局、1803 の1時間に、1809 の2時間+復元2時間、5時間以上も掛かってアップデートに失敗しやがった。しかも、どういう理由でコケたのか、解決方法は何なのか、何も提示されない。さ・ら・に・「更新プログラムの操作にどの程度満足していますか?」とか無神経に聞いてきやがった。

複数の条件で処理を分けたい場合は、「if ~ else if ~」といった繰り返しでコードを記述すると思いますが、条件式の開始位置が合わず、どうやっても美しいとは言えないコードになります。同じような条件分岐に、「switch ~ case」文もありますがこちらを多少トリッキーな書き方をすることで、見やすいコードにすることができます。

if ~ else if で記述した場合

if ($val1==1) {
	$color = 'red';
} else if ($val2==1) {
	$color = 'orange';
} else if ($val3==1) {
	$color = 'yellow';
} else if ($val4==1) {
	$color = 'purple';
} else {
	$color = 'default';
}

switch (true) ~ case で記述した場合

switch (true) {

case $val1==1:
	$color = 'red';
	break;

case $val2==1:
	$color = 'orange';
	break;

case $val3==1:
	$color = 'yellow';
	break;

case $val4==1:
	$color = 'purple';
	break;

default:
	$color = 'default';

}

このように通常は変数を記述する部分に true と入れることで、各 case 文に条件式を記述することができます。人によっては break 文が余計で嫌とか思うかも知れませんが、条件式の開始桁が揃って見やすくなるので、直観的には分かりやすい書き方だと思います。

Unicode(UTF-8)を採用しているサイトで、これらの文字が小さく(半角サイズで)表示されてしまう場合があります。ブラウザがこれらの記号が表示される際、小さく表示される欧文フォントが選択されてしまうために起こります。いくつか対応方法がありますが、CSS で font-family を固定してしまうのがベストだと思います。

日本語フォントを指定した場合

日本語フォントを指定すると「○×□」は正しい幅で表示されます
<div style='font-family:"MS ゴシック"'>○×□</div>

欧文フォントを指定した場合

欧文フォントを指定すると「○×□」は半角の幅で表示されます
<div style='font-family:"Arial"'>○×□</div>

以前の私は「font-family: monospace」を指定していましたが、これだとブラウザに依存してしまうのでお勧めしません。ブラウザのデフォルト設定に依存しないよう、しっかりフォントを固定しておくことをお勧めします。また例では「MS ゴシック」のみですが、Windows でも MacOS でも大丈夫なように複数の日本語フォントを指定するのが良いと思います。

ようはブラウザのデフォルト設定で、欧文フォントが日本語フォントより優先されているため、Unicode で表示可能な記号が欧文フォントで描画されてしまうということでしょう。Unicode だと欧文フォントでも表示可能な記号としてマップされているのだと思います。ただ、欧文と日本語でフォントを分けたい場合は対応できませんが、個人的には同じフォントで描画した方が好きなので問題ありません。

今ではすっかり廃れた感のある SOAP だが、久しぶり(というか PHP では初)に作成する機会があり、やっぱり苦労の連続になりました。XML 地獄という言葉もあるらしいが、しっかりと設計されておらず名前空間が入り乱れてるような複雑な XML は、もはやいじめでしかないように思う。せめて、stdClass や SimpleXML で軽くアクセスできるようなレベルに留めてもらいたいものである。

今回悩んだのは、あるメソッドに XML 文書をポストしてくる仕様で、受け取った時点で stdClass にパースされてしまっているというもの。その XML がシンプルな要素のみで構成されているなら、むしろ簡単にアクセスできるのでいいのだが、前述したような名前空間が入り乱れ、同じ要素名で属性が違うとかいうものがあると対応できない。stdClass では、名前空間プレフィクスは消えるし、属性にはアクセスできないためである。それであれば、プレーンテキストで受け取れれば簡単に解決できるのにどうしても出来ない。そもそもデフォルトでオブジェクトにするのなら DOMDocument じゃないのかなあ?

という訳で、PHP の SOAP エクステンションじゃあどうにもならないので、裏技的な手法で生の XML を取得することができたので紹介します。SOAP のリクエストは POST で来ますので、その生データを横取りする方法です。

$soapxml = file_get_contents('php://input');

注意点としては、返ってくるのは SOAP エンベロープにラップされた XML になるので、適切に抜き出す必要があるということ。具体的には、DOMDocument に変換してルート要素を抜き出して saveXML すれば良いです。他にスマートな方法があるかも知れませんが、とりあえずこれでうまく行っています。

以前から気になっていたのですが、TS ファイルを大量に含むフォルダをエクスプローラで開いたときに、異常なハードディスクのアクセスが発生しフリーズしてしまうことが多々ありました。「グァーーーゴゴゴゴゴ」とシーク音が酷く鳴るのでハードディスクの故障かと疑いました、それ以外はまったく問題ありません。なんとなく、プレビューでファイルを読みにいってるときに不具合があるんだろうなと察しは付いていて、縮小アイコンが表示される前にすばやく一覧表示にするなどしてしのいでいました。

しかし、どうしても開けないフォルダーが出てきて、重い腰をあげて調べなおしてみることにしました。いろいろ試してみて、ハードディスクの問題では無いのは分かりました。ネットで探そうにも検索キーワードが見えなくて紋々としていましたが、「Windows TSファイル フリーズ」これで答えが出てきました。

これによると、動画ファイルの再生時間などのプロパティを読み込んでエクスプローラで表示するような機能があり、これがうまく行かないようです。そう言えば、エクスプローラの詳細表示で「長さ」の列が表示されていないファイルがあったと思います。

具体的な方法は次の2ステップになります。

  • ShellExView このツールをインストールします
  • "MF MPEG Property Handler" という項目を探し、Disabled = yes に変更します

結果は見事解決です。恐らくはムダなシークをするようなプログラムを組んでいて、小さい動画の場合は顕著に表れないとかそんな感じなのでしょう。TS ファイルだと数十ギガバイトにもなるので膨大でムダなシークをしてるんだろうね。なんか最近の Windows ってこんなんばっかだなあ。

PayPal から「お客さまが別のウェブサイトでご使用のメールアドレスとパスワードが、ウェブ上で共有されていることが判明しました」というメールが来た。やっぱりどこからかアカウント情報が漏れたんだろうけど、いったいどこだ? メルアドで検索してみたけどないなあ。まあ、漏れたドメインはすでに解約済みで余生が残っているだけなんですが、ちょっと気になるところ。

現在は、サービスごとにメールアドレスも、パスワードも変更しているので、次こういうことがあったらどこから漏れたかすぐに分かる。こういう事があると、せめてウェブサービスに使うアカウントとローカルアカウントぐらいは分けておくべきだと思う。