2016/01/25(月)復活へ向けて

2016/01/25 21:52

オフシーズンのニュースにありがちな特に内容がない記事ではあるものの、復活に向けての調整が順調に進んでいることだけは伝わってきました。

西武高橋朋が復活へ「山の神」神野流…ゆっくりかむ - 野球 : 日刊スポーツ

今年こそは年間通してきっちり働いてもらいたいと思います。状態さえ万全であれば、おのずと結果はついてくるはずですから。あとは、その万全な状態を維持できるように、少し登板数が減ってくれるといいんですけどね。

ところで、この記事の書きっぷりを見るに、今年も高橋朋が抑えということでいいのでしょうか。監督は「左だから中継ぎで使いたい」という時代錯誤なことを言っていましたが。

2016/01/24(日)時間切れ

2016/01/24 22:46

この週末はバタバタしていてほとんど何もできませんでした。ブログのカスタマイズなどは来週以降に持ち越したいと思います。

残念ながら大きなデザイン変更はできませんでしたが、小さなカスタマイズとしてサイドバーに過去ログへのリンクを追加しています。これを見ると、2005年は693記事、2006年は692記事も書いていて、少し驚いてしまいました。最初の転職をしたのが2005年4月で、それからしばらくはかなり平和な現場にいましたので、それまでの感覚からすると時間が余っていたのかもしれませんね。

2007年以降は少しずつ件数が減っていき、2010年に再び転職してからはほぼ1日1記事だけですから、仕事の状況はお察しくださいという感じです。幸い、昨年8月から勤めている今の会社は比較的平和なので、たまには力を入れた記事を書いてみたいと思います。

2016/01/23(土)親子ヒーロープロジェクト

2016/01/23 21:58

一昨年はウルトラマンと、昨年は仮面ライダーとコラボしたパ・リーグの親子ヒーロープロジェクト。今年はスーパー戦隊シリーズとのタイアップが発表されました。

パ・リーグ6球団共同企画『パ・リーグ 親子ヒーロープロジェクト』開催のお知らせ | 埼玉西武ライオンズ オフィシャルサイト

イーグルとライオンはいいとして、セ・リーグのチームまで混ざっているような気もしますが、あまり深く考えるのはやめておきます。

過去2年の親子ヒーロープロジェクトは非常に盛り上がったようで、継続して開催するということはパ・リーグ側でも手応えを感じているということでしょう。プロ野球ファンの裾野を広げるため、こういった親子向けの試みは応援していきたいと思います。

なお、西武プリンスドームでの開催は夏休み中の8月13日(土)、14日(日)になるようです。

8月13日(土)、14日(日)試合開始時間未定

埼玉西武 対 オリックス @西武プリンス

パ・リーグ6球団共同企画『パ・リーグ 親子ヒーロープロジェクト』開催のお知らせ | 埼玉西武ライオンズ オフィシャルサイト

子供たちが熱中症にならないことを祈るばかりです。

2016/01/22(金)やっと週末

2016/01/22 22:16

今週はとても長く感じる一週間でした。月曜日の出勤がハードだったからかもしれません。

週末は雪が降る可能性もあるということなので、家でおとなしくしていようと思います。昨年11月あたりからのオライリーのPython本ラッシュで、読まなければいけない技術書もたくさん積んであることですし。

あわせて、ブログのデザインにも少し手を入れてみたいと思います。移転するときは記事をインポートするのに一生懸命で、デザインにまで気が回らず、元々用意されているものをそのまま使っているだけなので。

2016/01/21(木)adiaryへの移行で苦労したところ

2016/01/21 19:22

このブログははてなダイアリーはてなブログWordPress→はてなブログと移転を繰り返し、今月の11日からadiaryで書いています。

今回の移転にあたって、adiaryの設置そのものは簡単にできたのですが、過去のブログ記事のインポートにはかなり苦労させられました。以前のブログからエクスポートしたファイルを単純にインポートするだけでは上手く行かなかったからです。

同じような境遇の方のお役に立てるかもしれませんので、その苦闘の記録を残しておきたいと思います。

はてなダイアリー

架空の日付を修正する

はてなダイアリーは自由な日付で投稿することができ、実在しない日付で記事を書くことも可能です。この仕様を活かして、0000年00月00日の記事として自己紹介やブログの説明を書くという光景も見られました。

adiaryでは非実在日の投稿はできないので、そのような記事については実在の日付に変更する必要があります。とはいえ、私はそんな投稿はしていないはず……と思ったら、前川勝彦さんについて書いたときに11月31日という日付を使っていました。どうりで同じ場所でインポートエラーが出続けると思ったんだ。

残念ながら現在の主要なOSでは前川標準時は採用されていないため、投稿日時を日本標準時である12月1日に修正します。

不正な時刻を修正する

はてなダイアリーのエクスポートファイルは、午前0時台、午後0時台の表記方法に誤りがあります。本来、午前0時を表現するのは以下のどちらかの形式でなければいけません。

01/01/2016 12:00:00 AM
01/01/2016 00:00:00

ところが、はてなダイアリーのエクスポートファイルでは以下のようになってしまいます。

01/01/2016 00:00:00 AM

私の感覚では「午前12時」より「午前0時」という表現のほうがしっくり来ますが、こういうルールなのですから仕方がありません。テキストエディタの一括置換で正しい表記に修正します。

:%s;\v(DATE: \d{2}/\d{2}/\d{4}) 00:(\d{2}:\d{2} [AP]M);\1 12:\2;g

投稿日時を実時間に変換する

私がはてなダイアリーを使っていたときには、「日付の変わる時間」を午前6時に設定していました。この設定では、1月11日の午前0時から午前6時までに書いた記事は、前日の1月10日のものとして扱われます。

この仕様は、エクスポートファイル上では残念ながら破綻してしまいます。たとえば、実時間の2016年1月11日の午前1時に書いた記事をエクスポートすると、投稿日時は以下のように出力されてしまうのです。

DATE: 01/10/2016 01:00:00 AM

これ以外に表現のしようがないのはわかりますが、実時間としても投稿時間としても微妙な出力になってしまいました。これをいったん実時間に置き換えたいと思います。今回はさすがに正規表現による置換では難しかったので、簡単なPythonプログラムを作成しました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import datetime
import re
import sys

FORMAT = '%m/%d/%Y %I:%M:%S %p'
PATTERN = re.compile(r'^DATE: (\d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2} [AP]M)')

def convert(in_file_name, out_file_name):
    with open(in_file_name, 'r') as in_file, open(out_file_name, 'w') as out_file:
        for line in in_file.readlines():
            out_string = line
            match = PATTERN.search(line)
            if match:
                posted = datetime.datetime.strptime(match.group(1), FORMAT)
                if datetime.time(0, 0, 0) <= posted.time() < datetime.time(6, 0, 0):
                    posted += datetime.timedelta(days=1)
                    out_string = 'DATE: %s\n' % posted.strftime(FORMAT)
            out_file.write(out_string)

if __name__ == '__main__':
    convert(sys.argv[1], sys.argv[2])

エイプリルフールに対応する

エイプリルフールにネタめいたことを書くようになってから、毎年4月1日の記事は実時間の4月1日0時に投稿しています。これらの記事が先ほどのPythonプログラムで4月2日に変換されてしまいました。

こちらに関してはそれほど数も多くないので、自分の目で確認しながら一つずつ手で修正します。

はてなブログ(第1期)

残念ながら生のエクスポートファイルは残っていませんでした。この時期の記事については、次項のWordPressのエクスポートファイルであわせてインポートします。

WordPress

古い記事を削除する

このファイルでは、はてなブログ(第1期)とWordPressの記事をインポートしますので、それ以前のはてなダイアリーの記事をばっさり削除します。

Movable Type形式に変換する

WordPressからはてなブログ(第2期)に移行するとき、エクスポートファイルをWordPress形式からMovable Type形式に変換するWebサービスを使わせてもらいました。ところが、そのサービスは投稿日時をなぜかwp:post_dateではなくwp:post_date_gmtから取得しており、本来の日時から9時間ずれた時刻でインポートされてしまいました。

今回は同じ轍を踏まないよう、自作のプログラムで変換を行います。

GitHub - 7pairs/wp2mt

adiaryはWordPress形式のファイルも扱えるので、変換せずにそのままインポートすればよかった……ということにたった今気がつきました。でも、気がつかなかったふりをして先に進めます。

はてなブログ(第2期)

古い記事を削除する

はてなダイアリー、はてなブログ(第1期)、WordPressの記事をばっさり削除します。

記事の順番を逆転させる

はてなブログのエクスポートファイルは新しい記事から順に上から並んでいますので、このファイルをそのままadiaryにインポートすると、新しい記事のほうが若いIDで作成されてしまいます。

対応のために記事の順番を逆転させるプログラムを作ろうかとも思いましたが、VirtualBox環境に構築したローカルのadiaryにいったんインポートして、その内容をMovable Type形式でエクスポートすれば用が足りることに気がつきました。この手順で古い順に並んだファイルを作成します。

インポート

以下の手順でadiaryへのインポートを行いました。

  1. ブログの基本設定の「日付変更時間」を午前6時に設定する
  2. 「日付変更時間の処理」を午前6時にし、はてなダイアリーのファイルをインポートする
  3. ブログの基本設定の「日付変更時間」を午前0時に設定する
  4. 「日付変更時間の処理」を午前0時にし、WordPressのファイルをインポートする
  5. 「日付変更時間の処理」を午前0時にし、はてなブログ(第2期)のファイルをインポートする
  6. ブログの基本設定の「日付変更時間」を午前6時に設定する

インポートが正常に行われたことを確認するため、全記事をadiary形式でエクスポートし、そのファイルに対して以下のコマンドを発行します。

$ grep "^4198。移行対象の2004年7月14日から2016年1月10日までは4198日間ですから、すべての記事が望んでいる日付でインポートされていることを確認できました。