してログ

こんな地域が地球上にあるとは思わなかった
こんな地域が地球上にあるとは思わなかった

デバッグしてたら、白夜や極夜の地域で表示が崩れてしまい、最初バグだろうと思っていたのが実は正しかったようです。プログラムとしては、日中の範囲は日の出時刻と日の入り時刻で管理し、それぞれ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 のバグじゃないかと思います。

数年前に作っていた大気光象時計を、このサイトの右側に常時配置する向けに改造してたら「あれっこれ違うんじゃないの」と思ってしまったので、ついでに改良してみた。

24時間計を180度回転

昼間時間を扇形に示していると、24時間計は0時の位置を真下に置いたほうがいいと思いました。今までは真上だったので、昼間の範囲が下側に示されるので昼夜が逆転しているように見えるためです。

南半球の太陽方位

24時間計と同様の理由で、南半球では昼夜が逆転したように見えていました。とりあえず、同じように180度回転させてみましたが、逆回りにするか迷っています。北半球の我々は文字盤を南向きに見て、左(東)から昇って右(西)に沈むと自然に見えます。南半球の人は文字盤を北向きに見て、右(東)から昇って右(西)に沈むのがいいんじゃないかと思います(たぶん)。

ただ南半球はまだこんがらがってるので、じっくり考えて対応したいと思います。北半球はやはり、北を上にして左回りに太陽を動かすのが良さそうです。

24時間計の腕時計を見ると0時が上なのですが、昼間を上にするなら0時を下にしなければならなくなり、腕時計と逆になっちゃうけど仕方が無いです。同じような理由で、太陽方位も北半球だと南に向いて左(東)から昇り右(西)に沈むというのが自然なため、上が南で下が北という地図の見方と逆になってしまいます。こう考えると、南半球の表示のほうは地図を見る方向と一致して分かり易くて、なんか悔しいような気もします。

ネットワーク共有ファイルなどで開いているときに回線切断になったりすると、誰も開いていないファイルが使用中で編集ができなくなる場合があります。ちょうど昔の 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時間以上も掛かってアップデートに失敗しやがった。しかも、どういう理由でコケたのか、解決方法は何なのか、何も提示されない。さ・ら・に・「更新プログラムの操作にどの程度満足していますか?」とか無神経に聞いてきやがった。