2013-03-31

oldriver.org の整理: ウェブサイト編

年間数アクセスの http://oldriver.org を、使っていたレンタルサーバから、Github Pages に移行しました。まずは、そのまま移行しただけですが、コンテンツも整理していく予定です。

作業にあたって、以下を参考にしました。



作業手順は以下のとおり。
  1. torufurukawa.github.com というリポジトリを作る。
  2. master ブランチにウェブサイトのコンテンツを add して commit して push する。
  3. 10分ほど待つとホスティングされる。
  4. CNAME というファイルを作り、 oldriver.org とだけ書いて、push する。
  5. DNS の A レコードを設定する
    torufurukawa.github.com.      IN      A       204.232.175.78
Aレコードに使う IP アドレスですが、ググったときに見つかったもので設定しても動かず。nslookup で解決。

これでレンタルサーバとサヨナラです。が、退会方法が分からないので、問い合わせ中。月曜以降にお返事がくることでしょう。

2013-03-30

oldriver.org の整理 : メール編

oldriver.org というドメインを持っていますが、ほとんど活用していません。どうして org なんて取ったのかなぁ。.com とか .net がすでに取られていて、まだ .jp とかなかったのかなぁ。ちなみに torufurukawa.com は誰かに取られているようです。

そしてウェブサーバとメールサーバは、アメリカのホスティング会社の共有サーバを使っています、いまどき。しれっとカナダの会社に買収されて、Python で書いた CGI も動かなくなりました。小さなスクリプトを動かしたくて、プランのアップグレードの相談メールを出したら、「あー、そんなのでいいんなら、権限だけあげとくよ」というなぁなぁ対応で SSH できるようになったのですが、買収されて法人が変わって、本来のサービス提供を受けています。

どーせアクセスのないサイトだし、そろそろ整理をすることにします。

まずはメールから。ほとんど使っていないのですが、たまーに、ID として使っていたりするわけですよ。完全に停止させるわけにいかないので、お手軽な方法を探しました。

結論としては outlook.com を使います。 Windows Live アドミンセンターとやらで、独自ドメインのメールを受け取れるように設定できました。数年以内に有料になったりしそうですが、自分でメールサーバ管理するくらいなら、ちょっとくらいお金を払ってもいいです。

DNS サーバも、ホスティング会社のを使っていましたが、今回、AWS Route 53 に移行しました。

2013-03-23

Python 旅館 2013.03

Python 旅館 2013.03 に参加しました。


Python 温泉の簡易版です。なんと温泉もありません。

というイベントです。前回参加したのはいつだったかなと思い、検索してみたら、 2010年4月でした。3年前です。泊りのイベントは初めてで、知っている人も少なくて、どきどきしながら行ったことを覚えています。何をしたかは、まったく覚えていません。検索してみたら...


文字コード周りの挙動がアヤシイときにはbuchoに助けてもらいました。

そんな偉そうなことしたかなぁ。


@torufurukawa と酔っぱらいUstreamしてたらあんまり出来ませんでした。

これはよく覚えています。

さて、今回は簡単な課題を持って参加しました。とおるメモという駄文集がありまして、これを Kindle Direct Publishing で出版することです。もはや Python でも、プログラミングでもありません。と見せかけて、HTML から epub 形式に変換するまでを Python 3 で書きました。

もともと、簡易オレオレなマークアップで書いたテキストファイルから、スクリプトを使って静的なページ群を作っていました。m4 使ったり、XSLT 使ったりした記憶がありますが、もはや、どこにいったのか分かりません。@ae35 が reST 形式に変換したものを作ってくれていますが、今回は自分でやってみようと思いました。Python 3.3 を使ってみたかったんだい。

各文章の HTML から題名、日付、本文を取得するのに、 Beautiful Soup を使って HTML をパースしてから取り出しました。find_all() メソッドしか使っていません。いつの間にかバージョンが4になっていて、 beautifulsoup4 はそれ以前のものとはまったく別物になっているようです。

ちまちま作っていくときに、何度 print hoge と書いてエラーが出たことか。なかなか慣れませんね。Python 2 を使う時でも、 print(hoge) って書くように気をつけているつもりだったんですけどね。

その後は、まとめて torumemo.rst としてテキストファイルに吐き出すだけでした。タイトル、日付、1つ以上の段落で、ひとつの文書が構成されているので、ベタで出力しました。

それを Sphinx を使って、epub 形式にビルドしました。困ったことがひとつありました。epub テーマで変換すると、各ページのヘッダに「とおるメモ 1.0 document」、フッタに「(c) ふるかわとおる 2013, Created using Sphinx 1.1.3」 になり、それぞれハイパーリングがつきます。あと、index.rst に書いていなくても、空っぽのインデックスページができてしまう。ちと、これ要らないんすけど...。

これはもしやテーマを自作しなければいけないのか、と焦ってしまいました。テーマの作り方とか読んでしまいましたよ、はい。だらだらドキュメントを読んでいってるうちに、簡単な解決策がありました。

まずフッタとインデックスは、conf.py で指定できます。
html_use_index = False
html_show_sphinx = False
ヘッダは layout.html という、すべてのテーマが継承しているファイル  document という文字列が定義されているようでした。ようでしたというのは、このあたりで調べるのをやめました。というのは、 conf.py に自前の CSS を定義できることに気づいたからです。


def setup(app):
  app.add_stylesheet('torumemo.css')

これ。で、torumemo.css の中で

div.related {display: none}

という強引な方法で不可視にしています。データとしては含まれている、という、セマンティック的にひどい状態です。

とこんなことを書いているうちに、Kindle ストアで買えるようになるはずなのですが、Amazon からのメールに書かれていた「このURLで公開されているぜ」というページが 404 です。なんか時間がかかるみたいなので、もう今日はいいです。

2013-03-20

作業の終わりと、タスクトリガーワンダーランド


作業にせよ、まとまった仕事にせよ、なかなか思い通りに進まないことが多いことが悩みです。もう30年くらい悩んでいます。単純に自分が完了させるだけのスキルを持っていない場合と、仕組みに問題があるときがありますが、後者について考えてみます。

仕事の終わり

何をもって完了したと言えるのか、を定義するようにし始めました。「要件定義をする」という仕事だったら、設計担当者に要件定義書を渡すとかです。あるいは、機能の実装であれば、それが試験担当者が確認できる環境においてある、とか。

これをやらないと、たいてい手戻りが発生します。作業を重ねている途中で予期しないことが起こり、紆余曲折したりします。使おうと思ってた道具が、予想と違う挙動をすると分かり、深追いが始まり、潮時を忘れてしまいがちです。あるいは書いている文書の体裁が受け入れられないことが、最後の最後に発覚し、またやり直しです。

なので「藤本さん(仮名)が開発するときに参照する文書を、共有場所に保存する」などと定義することで、藤本さんに出来上がりの期待値を確認する、など細かい作業が浮き彫りになって、予期しない手戻りが減ります。おそらく。

タスクトリガーワンダーランド

一方で、タスクが増えてくると、そのタスクの山の大きさに圧倒されて、躊躇してしまうことがある。後回しや逃避などという行動に出る。GTDでいうところのプロジェクト(複数のタスクをこなすことで終了するかたまり)のゴールを明確に定義すればするほど、小動物のファミリーのように、いつのまにかタスクが増殖し、やがて対処するのが嫌になってくる。特に私は、人にものを頼むのが苦手なので、相談系のタスクを避ける傾向があり、そのためよけいにあとでややこしくなる、という悪循環に陥りいがちだ。

そんなわけで、最初のほうのタスクは、すごく簡単にするように設定する。ゴールの設定さえもややこしそうなときには、ゴールを決める、みたいなタスクにしてしまう。それも大変そうなときには、ゴールの思いつきを10個メモする、にする。とにかく乗ってくるまでは、どう考えてもできるだろう、というくらいのアクションを並べるようにしている。

というわけで、まずはコーヒーでも飲もう。

2013-03-18

Python の辞書に dot-notation でアクセスする

Python の辞書オブジェクトは x['foo']['bar'] みたいに書くのですね。それはよいのですが、 x.foo.bar みたいにアクセスしたくなる日もあるわけですよ。

もうこれは、古くて新しい問題で、いろんな人がいろいろと似たような実装をしていて、検索するといっぱい引っかかります。 自分のプロジェクトの中にも、そういうのが幾つかあります。

今日も久しぶりに検索したら、よさそうなのがありました。

https://github.com/makinacorpus/easydict

これが、x.foo.bar みたいに辞書に辞書が含まれててもうまくいく実装のなかで、シンプルできれいだなぁと思いました。