ソースコードをシンタックスハイライトしてまとめてHTML化

Wordにソースコードを貼り付ける必要に迫られたので、色付きにすべくGVIMを使ってHTMLに変換してコピペすることにした。のメモ。
最初SyntaxHighlighterを使ってやろうとしたけど、tableタグ使ってたからうまくコピペできなかった。
カレントディレクトリ以下から*.java *.html *.js *.cssファイルを抽出後、/bin/ディレクトリ以下とjqueryファイルを除外して、タブ幅2、行番号表示、色の設定delek、エンコーディングutf-8でHTMLに変換するコマンドは次のとおり。.vimrcは設定してない。ファイル数だけgvimが起動するので要注意。

$ find . -name '*.java' -o -name '*.html' -o -name '*.js' -o -name '*.css' | grep -v /bin/ | grep -v jquery | while read -r file; do; gvim -g -n -c ':set tabstop=2' -c ':set number' -c ':colorscheme delek' -c ':so /usr/share/vim/vim72/syntax/2html.vim' -c ':set fenc=utf-8' -c ':wqa' $file; done

生成されたHTMLは元ファイルと同じ場所にできるので取り回しが悪い。そこでパス区切り文字の'/'を'.'に置換して~/html/にまとめることにした。Mercurialリポジトリ管理してるので、作成されたファイルの抽出は丸投げした。

$ mkdir ~/html
$ hg st | awk '{if ($1=="?") print $2}' | while read -r file; do; mv $file ~/html/`echo $file | sed 's%/%.%g'`; done;

新型Time Capsule購入

Time Capsuleが新しくなって値下げされました.そういうわけで500GB版を購入しました.バックアップは大事ですから.
学割で28,800円.ポチったのが3月6日の深夜で3月7日の午前中に届きました.いい仕事してます.ちょっととらぶってて部分的にしか試せてないのですが,概ね満足です.DHCPはちゃんと機能するし,Wi-Fiも安定してます(前のルータはここがダメだった).ネットのスピードテストでは予想通り通信速度は変化なしですが,応答速度が向上して感覚的には確実に速くなりました.ギガビットも最高ですね.あとはトラブルさえ解決してくれれば….以下はメモです.

導入とか

基本的には配線してAirMac ユーティリティで設定すればOKです.付属CD-ROMにはAirMac ユーティリティとマニュアル類が入っていますが,既にバージョン5.4以上であればインストールは不要です.で,はまったのがPPPoE.アカウント名,パスワード,サービス名を設定するようになっているのですが,ISPから何も指定されてない場合はサービス名は空にしておきます.設定名と勘違いして勝手に名前を付けてはいけません(そんなやつは私くらいでしょうが).
インターネットに接続したらAirMac ユーティリティからFirmware 7.4.1のアップデートが可能です.でもアップデートしたらとらぶるかもしれません.

特定のサイトが開けない

www.apple.com は開けるけど www.apple.com/jp/ は開けないという奇怪な現象に見舞われています.PPPoE接続時に一部のURLにアクセスできません.もしかしたらFirmware 7.4.1が原因かもしれませんが,7.4で確認したわけじゃないので何とも言えません.
最初DNSの問題かと思いましたが,違うようなのでサポートに問い合わせようと思います.これは結構致命的なので,とりあえず以前のルータを引っ張ってきて,Time Capsuleはブリッジモードで接続しています.Time Capsuleがルータじゃないので応答速度は元通りですが,他のメリットは全て享受できます.

余談:ブリッジモードの設定方法

ISPとTime Capsuleの間にルータを挟みます.配線はISP <-> ルータのWAN,ルータのLAN <-> Time CapsuleのWAN,Time CapsuleのLANとWLAN <-> MacやPCになります.その後,AirMac ユーティリティで設定したいTime Capsuleを選択し,手動設定をクリックするかCmd + Lで詳細設定画面に入ります.そして,インターネット>インターネット接続から接続方法にEthernetを,接続共有に切(ブリッジモード)を選択します.最後にアップデートをクリックして設定を更新すれば完了です.

iPhone用My SoftBankが終わってる件

SMSで請求額が確定したという通知がきたのでMy SoftBankにログインして確認しようとしたらはまりました.これ,はっきりいって終わってます.電波は悪いものの,料金設定やソフトバンクiPhoneに対する姿勢は評価していたんですが.

別途登録が必要

ソフトバンクからやってきたSMSはこれ.

ソフトバンクより>
今月分のご請求情報が確定しました。下記、「オンライン料金案内」から請求金額が確認できます。しかも通信料無料だから、大変便利!
以下略

URLが記載されているんですが,Safariのブックマークに入っているのを知っていたのでSafariを開いてブックマークからアクセスしました.以下がトップページ.

My SoftBankをタップするとログインページにいきます.

1枚目のEmail(i)にいくとログインページがでるのですが,同じソフトバンクのサイトなんだから同じIDだと勝手に思い込んでいたわけです.というか,My SoftBankから確認できますなんてきたら,既にログインできる状態だと思って当然だと思うわけですよ.そうでないなら「利用には登録が必要です」って明記しておくべきだと思うんです.
PCからアクセスしてFAQを見ると何やらiPhone本体から登録しないと使えないようなので,新規登録してると「ご登録内容に不備があります」と表示されて登録できません.
・・・?
あの,どこが間違ってるか分かるようにエラー出してもらえませんか?Google先生にきいてみると,電話番号か暗証番号が間違っている可能性があると“公式の”FAQに書いてました.セキュリティ上秘匿するわけじゃないなら,ちゃんと書いとけと.携帯らしい暗証番号の存在なんて忘れてたし,新規登録でIDとパスワード(暗証番号)とくれば普通,アカウント作成に必要なログイン情報だと思うのですが,どうやら違うようです.

携帯らしい料金の確認画面

紆余曲折を経てようやく登録できたので,さっそくログインしました.ログイン後のトップページはこんな感じ.

iPhoneらしいUIですね.さっそく料金案内へ.

これ,「確定前料金照会」とかリンクじゃないんです.ちょっとひっかかりますが,まぁ次へとあるので次へ進みましょう.

・・・?
なにこの携帯用のページをそのまま使った感じ.なんでIDとパスいれてログインしてるのに,さらに暗証番号を求めるのか理解不能です.詰めが甘いというかなんと言うか.途中までiPhoneっぽく作ったなら,最後まで手を抜かずにやってほしいところです.この次にメニューが出るんですが,HTMLの構造が悪いのでメニュー部分をダブルタップしても拡大されないんですよね.ピンチで拡大するか,すごく小さい文字で書かれたリンクを間違わないよう慎重にタップするしかないわけです.iPhoneからアクセスすると自動的に専用サイトに飛ばされるのですが,これならPC用をそのまま表示してくれた方がよっぽどましです.
ソフトバンクにはユーザビリティをもっと考えてほしいところです.インターネット事業で培ったノウハウがドコモやauにはない強みだと思うのですが.最後に確定前の料金を載せておきます.

172,868円ですか….2段階定額で下限になる日は永遠に来なさそうです.

MacPorts版Pythonでvirtualenv

MacPortsPythonでvirtualenvを使おうとしてはまったので解決方法を記しておきます.問題は

$ virtualenv --no-site-packages env

が使えないということです.Upgrade 1.9.7 -> 2.0b1 without Virtualenv - TurboGears | Google グループによると,これはMacPortsPythonの問題で,9月に報告されているけど何の返信も無い.MacPorts版はいろいろいじってるから,トラブルを避けるために公式のPythonを使いなさいとのこと.

公式版Pythonをインストール

公式サイトからPython 2.5.4のMac版をダウンロードしてインストールしました.公式版Pythonはバイナリを/usr/local/bin/に,ライブラリを/Library/Frameworks/Python.framework/に,サードパーティのパッケージを/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/にインストールします.元々インストールされているApplePythonMacPortsPythonと重複することはありません.
公式版Pythonとsetuptoolsでいくなら,MacPortsPythonを無効にしてやればOKです.公式版Pythonを使いつつパッケージはMacPortsで管理したい人は以下のコマンドは実行せずに進んでください.

$ sudo port deactivate python25

公式版PythonMacPortsのパッケージ使う

setuptoolsはインストール後の管理機能が不十分なので,パッケージはMacPortsからインストールするようにします.MacPortsPythonは有効にしておく必要があります.公式版には少なくとも以下のパッケージは含まれているので,MacPortsから無効にしてください.他にもあるかもしれませんが….

  • readline
  • hashlib
  • zlib
  • sqlite3

まず,ハードリンクを削除してMacPortsPythonを優先的に使用しないようにします.

$ sudo rm /opt/local/bin/python

次にMacPorts版のsite-packagesにシンボリックリンクを張ります.

$ cd /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5
$ sudo mv site-packages site-packages.orig
$ sudo ln -s /opt/local/lib/python2.5/site-packages/ site-packages

最後にvirtualenvのコマンドを編集し,1行目のshebangを変更します.

$ sudo vim /opt/local/bin/virtualenv
#!/opt/local/Library/Frameworks/Python.framework/Versions/2.5/Resources/Python.app/Contents/MacOS/Python

を次のようにします.

#!/usr/local/bin/python

IPython等のコマンドも同様に変更してください.これで使えるようになりました.

$ virtualenv --no-site-packages env

とすると,全てうまくいくはずです.

MacでDjangoをさわってみた

新年,あけましておめでとうございます.
年明け一発目はPythonネタです.PythonのWebアプリケーションフレームワークはいくつかあって,Ruby on RailsみたいWebアプリならこれ!という状況にはなっていません.私はTurboGears派で今までDjangoを触ったことがありませんでしたが,昨年末にリリースされたTurboGears 2.0β1がうまく導入できなかったので,Google App Engineでも採用されたDjangoも試してみることにしました.
第6回 Djangoフレームワークを利用してWebアプリケーションを作成する | 日経 xTECH(クロステック)を参考にやったのですが,一部うまくいかなかったので補足しておきます.今回使用したバージョンはPython 2.5.2とDjango 1.0.2です.また,DBにはSQLiteを使いました.

インストール

必要なものはすべてMacPortsでインストールできます.この辺のお手軽さはDjangoの魅力でしょうか.DjangoはSQLite3を要求するので,Python 2.5を使っていても別途インストールが必要です.

$ sudo port install py25-hashlib
$ sudo port install py25-zlib
$ sudo port install py25-sqlite3
$ sudo port install py25-django 

データベースの設定

SQLiteを使うのでmyprj/settings.pyを次のように変更します.

DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = '/Users/name/myprj/site.db'

DBに関する他の項目は使用しません.DATABASE_NAMEには使用する.dbファイルの名前をフルパスで指定します.

X-MAC-JAPANESE

しばらく進めるとX-MAC-JAPANESEというエラーがでるので修正します.Djangoで「X-MAC-JAPANESE〜」とかエラーが出たら - 牌語備忘録 -pygoを参考にしました.
/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/utils/tzinfo.pyの8行目あたりを修正します.

DEFAULT_ENCODING = locale.getdefaultlocale()[1] or 'ascii' # この行を探して下2行を追加
if DEFAULT_ENCODING == 'X-MAC-JAPANESE':
    DEFAULT_ENCODING = 'ascii' 

これでもまだ文字コードの問題がでる場合は,日本語を含むファイル(コメントも含めて)の冒頭に

# -*- encoding: utf-8 -*-

を記述しているか確認してください.

myappと管理ページをサイト設定に追加

ITproの記事はこの説明が抜けているので,http://localhost:8000/にアクセスしてもTemplateSyntaxErrorになるし,http://localhost:8000/admin/にアクセスしても管理ページが表示されないしという致命的な状態になっています.解決するために,myprj/settings.pyのTEMPLATE_DIRSとINSTALLED_APPSを編集します.

TEMPLATE_DIRS = (
    "/Users/name/myprj/myapp/templates/"
)

INSTALLED_APPS = (
    ....
    'django.contrib.admin',
    'myprj.myapp' 
)

TEMPLATE_DIRSはDjango標準以外の場所にテンプレートを置く場合に,その場所を検索パスに追加するように指定する変数です.次に追加したアプリのテーブルを作成します.

$ python manage.py syncdb

最後に

今回ITproを参考にやりましたが,実は公式ドキュメントのはじめてのDjangoアプリ作成が非常によくできているので,Djangoがどんなものか試してみたいならこちらがおすすめです.最後に雑感を記しておきます.

  • 1つのパッケージをインストールするだけで済む
  • ORMが簡単(SQLObjectみたい)
  • URLのマッピング正規表現で自由自在
  • 基本的に関数ベース
  • 高度な管理画面を自動生成できる
  • 汎用ビューの概念がある
  • 日本語ドキュメントが豊富
  • 高速らしい
  • テンプレートの記法がやや冗長

Mac OS X 10.5.6アップデート顛末記

ソフトウェアアップデートが10.5.6アップデートがあるというのでインストールしました.が,失敗.インストールを構成中の状態でディスクアクセスも停止し,30分程放置しても変化なし.ダウンロードは事前に済んでいたはずなのに.仕方ないのでびくびくしながら電源ボタンをポチっと.無事10.5.5で起動してくれました.
ネットを徘徊してみるとソフトウェアアップデート経由で失敗している事例がちらほらと見つかりました.その場合は単体インストーラで行うと成功する場合もあるとのことなので,アップルのサイトからApple - Support - Downloadsをダウンロードしました.日本語のサイトにはまだ掲載されていませんが,こっちでちゃんと日本語でインストールできます.なお,Combo Updateは10.5.5以前のバージョンから一発でアップデートできるようにするもののようです.
ダウンロードしたファイルからインストールをします.どきどきしながらインストールを実行!あっさり成功しました.しかも3分くらいで.再起動後にログイン画面にいく前に一瞬固まって,その後自動的に再起動された時には少し焦りましたが,その後は問題なく動いています.
単体インストールして分かったことですが,インストールを構成中は情報収集している段階で,ファイルの展開等はしていないようです.だから強制再起動で大丈夫だったのですが,これがファイルの書き換え中に固まっていたらと思うとぞっとします.というわけで,バックアップの大切さを思い知りました.来月に迫ったMacworld 2009でTime Capsuleの1TB版安くならないかな.

:open googleでgoogleを検索できるようにする

Vimperatorを愛用してずいぶん経ちますが,たまにイラっとくることがあります.それは,oやtでgoogle mapsとか検索しようとしたときに,Googleでmapsを検索しちゃうことです.Ubuntu使ってる場合はubuntu 8.10と検索しようとするとUbuntuのフォーラムで8.10を検索しちゃいます.今回はgoogleの場合の設定方法を書きたいと思います.
vimperatorの検索キーワードは検索バーのキーワードを参照しているので,こちらを変更します.検索バーを表示している場合は検索エンジンのアイコンをクリックして「検索バーの管理」を選択.そうでない場合は:dialog searchenginesで開けます.Googleを選択して「キーワードを編集」,新しい名前を“g”としてください.ubuntuの場合も同様です.
これで:open g firefoxとするとGooglefirefoxを検索するようになりますが,Googleがデフォルトの検索エンジンだった場合:open firefoxではfirefoxを検索できません.そこで.vimperatorrcに次の一行を加えます.

set defsearch=g

これで:open googlegoogleを検索できるようになりました.