してログ

ハードウェア障害っぽい
ハードウェア障害っぽい
どうやら原因はメモリのようだ
どうやら原因はメモリのようだ

未だに稼働している Windows 2000 Server が遂に堕ちた。しかしこのブルースクリーン、ずいぶん簡素なメッセージでハードウェア故障を報告しています(初めて見るタイプだ)。強制的にリセットしてみると、メモリの構成変更のワーニングが出たのでメモリが逝ったらしい。とりあえず、休止サーバーからメモリをかき集めて交換して復旧させました。

画像付きツイートは希望通りの動作なのですが、画像が無いと image not found という画像になってしまう。当然と言えば当然なのだが、これではちょっと困るため回避方法を考えてみた。

必ず RSS フィードに画像を出力する

記事内に画像が入っているか調べ、入っていない場合はカテゴリに対応するアイコンやアイキャッチ画像を追加してしまう方法です。WordPress の人は改造してこの方法を使っている人がいるみたいです。

RSS フィードを画像付きと画像なしに分ける

記事内の画像の有無によって、画像付きの記事だけのフィードと、画像なしの記事だけのフィードに分けるようにします。画像付きのほうは「post a tweet with image to」で登録し、画像なしは「post a tweet to」で登録します。

ISS 17:54
ISS 17:54

左側から真ん中にかけて通過したのが ISS で、それよりも目立っちゃってるのは飛行機です。本当は、HTV6 が飛行しているところを撮りたいのですが、空が明るかったり、日本から見えなかったり、悪天候だったりで、なかなか条件が合いません。離脱のときはデブリ関係の実験をするみたいなので、ワンチャンスあるかも知れません。

12/16 17:54 新潟市西区
iPhone6s+(NightCap Pro)
Tags #ISS

連想配列の配列をループしながら、分類項目でキーブレイクして階層的な HTML に出力したい場合、前後のタグを挟む条件分岐や最終部分の閉じタグの書き方が煩雑になりがちです。こういった処理は度々書いていますが、もう少し簡潔に書けないものかとマニュアルを読んでいたところ、currentnext などの関数が使えそうでしたので試してみました。

例として、都道府県で市町村をグループ化して、セレクトボックスの HTML を出力するコードを書きました。まだ、$opt の初期化が2箇所にあるのが気に入りませんが、タグでラップする部分は分かりやすいと思います。

$dataset = array(
	array('pref'=>'新潟県','city'=>'新潟市'),
	array('pref'=>'新潟県','city'=>'長岡市'),
	array('pref'=>'新潟県','city'=>'上越市'),
	array('pref'=>'新潟県','city'=>'村上市'),
	array('pref'=>'長野県','city'=>'長野市'),
	array('pref'=>'長野県','city'=>'松本市'),
	array('pref'=>'長野県','city'=>'上田市'),
	array('pref'=>'長野県','city'=>'岡谷市'),
	array('pref'=>'石川県','city'=>'金沢市'),
	array('pref'=>'石川県','city'=>'七尾市'),
	array('pref'=>'石川県','city'=>'小松市'),
	array('pref'=>'石川県','city'=>'輪島市'),
);


$code = $opts = '';

while ($row = current($dataset)) {

	$opts.= "<option>{$row['city']}</option>";

	if (!($ner = next($dataset)) || $row['pref'] != $ner['pref']) {
		$code.= "<optgroup label='{$row['pref']}'>{$opts}</optgroup>";
		$opts = '';
	}

}

echo "<select>{$code}</select>";

スマホで撮っていたスナップショットから作成しました。twitter 配信テストで何か上げようと思っても、最近まともに撮影していないので素材が無いんですよね。今年はもう捨ててますが、来年はもうちょっと頑張ってみようと新年の抱負に願ってみます。

10/30 加茂市
iPhone6s+(AutoBracket HDR)
JPG×3→Photomatix / Topaz Simplify / Photoshop
Tags #植物 #モミジ #落ち葉

相対 URL を絶対 URL に解消する関数を探したのですが、ぴったりのものが見つからないので自分で作ってみました。ただし、簡単そうにみえて難しい部類なので、あらゆるパターンで完璧かどうかは保証できません。なお、HTML を処理すると言っても、<a>、<img> の2つのみが処理対象になっています。他のタグを含めるには、正規表現のパターンを追加してください。

ソースコード
function html_absolute_url($base,$html) {

	return preg_replace_callback(

		'/(<a\s+.*?href=")(.+?)(".*?>)'.
		'|(<a\s+.*?href=\')(.+?)(\'.*?>)'.
		'|(<img\s+.*?src=")(.+?)(".*?>)'.
		'|(<img\s+.*?src=\')(.+?)(\'.*?>)/',

		create_function(
			'$matches',
			'$base = unserialize(\''.serialize($base).'\');'.
			'$n = (count($matches)-1)/3-1;'.
			'$url = $matches[$n*3+2];'.
			'$url = absolute_url($base,$url);'.
			'return $matches[$n*3+1].$url.$matches[$n*3+3];'
		),

		$html
	);

}

function absolute_url($base,$url) {

	if (substr($base,-1)!='/') $base.='/';

	$pbase = parse_url($base);

	$purl = parse_url($url);

	if (!isset($purl['scheme'])) {
		if (!isset($purl['host'])) {
			// スキームとホストが省略されている
			if (substr($url,0,1)=='/') {
				// 絶対URL
				$url = $pbase['scheme'].'://'.$pbase['host'].$url;
			} else {
				// 相対URLと判定(./と../の解消は行わない)
				$url = $base.$url;
			}
		} else {
			// スキームのみ省略されている
			$url = $pbase['scheme'].':'.$url;
		}
	} else {
		// 完全なURLと判定
	}

	return $url;
}

html_absolute_url が HTML を処理する関数で、absolute_url が URL を個別に処理する関数です。PHP5.3 未満に対応するために、preg_replace_callback のコールバック関数でクロージャを使用しておらず、変数の値を無理やり展開して渡しています。また、正規表現の中でシングルとダブルクオーテーションをそれぞれ記述していますが、まとめてうまく表現できないものかと思います。もっとスマートに書ける人がいたら、教えて欲しいです。

今どき、RSS だけでは見てもらえないので、twitter に自動ツイートするためにアカウントを作成しました。自動ツイートのサービスをいくつか検討していますが、ちょっと理解が足りていないのかしっくり来るものが無くて困っています。API を直に使って自動ツイートさせることは、大昔にやったことがあるので、それも検討しています。

公式 twitter アカウント

https://twitter.com/landherejp

検討した自動ツイートサービス
  • twibble
    シンプルで分かり易いのですが、なぜか画像付きツイートができないようでした。フィード側で相対パスや属性内改行の解消をしてみましたが、どうしてもできないようです(たまたま不具合が出ていたのかも知れませんが)。
  • myThings
    Yahoo! のサービスなので日本語だし、安心感もあるのですが、ツイート文に RSS の内容が使えず「更新しました」のような固定文となるようでした。
  • IFTTT
    myThings と同様の様々なウェブサービスを連携して自動化するサービスなため、少し分かり難い面もありましたが、今のところ希望通りの働きをしてくれています。という訳で、こちらを採用しました。
月暈とオリオン座
月暈とオリオン座

ブロ友さんからの LINE で、綺麗な月暈を見ることができました。寒いので、無人微速度撮影に切り替えてみたら、夜半過ぎくらいまで出ていたようです。画角の端ぎりぎりを動くので、楕円に写っちゃっているのが残念でした。今日がふたご座流星群の極大なので、もしかしたら写るかと期待しましたが、ISO200 じゃ無理だったようです。

12/12 新潟市西区
Canon EOS Kiss X4 / AT-X 107 DX Fish Eye 10-17mm F3.5-4.5
JPG×1→Photoshop
Tags #大気光学現象 #月暈 #オリオン座

加茂市水源地第1ダム
加茂市水源地第1ダム

Magic Lanturn をアップデートして、HDR 撮影が 12 枚できるようになったので、試しに撮ってみた一枚です。これだけ刻めると、露出ステップ幅を小さくして中間のトーンを充実させたりするのにも使えて、こういった風景にはもってこいですね。

10/30 加茂市
Canon EOS Kiss X4 / AT-X 107 DX Fish Eye 10-17mm F3.5-4.5
JPG×12→Photomatix / Photoshop
Tags #加茂水源地 #ダム #水鏡 #粟ヶ岳

PHP ソースコードの標準的なエンコーディングは UTF-8 になっており、そのまま記述すればどのような記号も問題ないはずです。しかし、使っているエディタによっては文字化けしたりしますので、一般的な記号以外はあまりお勧めしません。こういった文字は「\uXXXX」のようなコードポイント数値表現を json_decode でデコードすることで記述できます。

「♥」を記述したいとき
json_decode('"\u2665"')