2010-05-03 [長年日記]
_ 事故ってた
片付いたので本来の日記らしい日記として書き起こし。
田舎で車を運転していたら後ろから追突された。状況は長い直線の途中の右折待ち。つまり自分は停車できたが後ろの車が停車できずにごつんといった。
- 長い直線の途中の右折待ち
- ただし停車直前にごく小さな橋があり、アップダウンがあったため、気づいたタイミングが遅い場合は止まりにくかった
- ダウン時に踏んでも無理。アップ時に踏まないと。
- ぶつけてきたのは若葉マーク
ぶつかる瞬間はミラーで見えていたので覚悟はできていたが、まともに運転中にぶつけられたのはほとんど初めてだったのでちょっとびっくらこいた。幸い、2台合わせて乗車5人のうち誰にも怪我がなかったのでただの物損事故で処理でき、非常に簡単に済んだのが幸いだった。
が、反省点も。
- 急いでいたのと人身事故じゃなかったのと、まったく問題なく自走できたので警察への報告を後回しにしてしまった
個人的な状況としては本当に急いでいたのだが、お互いに近所に住んでいるならともかく、そうでない場合は呼びつける必要があるのでこれはあまり良くなかった。すぐに警察に電話しておいた方がよかった。現場からなら逆に警察に来てもらってすぐに済んでたかも。
相手が初心者でとても若かったのでいったん落ち着いてもらうという意味はあったかと思うし、自分も保険屋と話してみるまで、正直なところ段取りが吹っ飛んでいたという理由もあった。しかし二度手間は二度手間。保険屋と警察はセットで覚えておこう。
- せめて保険屋の連絡先はすぐに分かるように携帯の電話帳とEvernoteに入れておこう
と思った次第であった。
2010-05-08 [長年日記]
_ プログラミング入門者ではない人間が新しく言語を学ぶ際に気になること
あるいは Python-FIT 第0回に参加したでござるの巻。
※ Python-FIT とは北陸の Python 勉強しようグループです。Google group のページはまだ何も書いてないですけど。
場所は福井の Web 制作会社サーフボードさんのセミナールーム(?) 開発(かいほつ)で開発(かいはつ)されてます*1。
輪にテーブルを並べて集まる形は初めてだったけど、これはいいな。
進行がグダグダに見えてやたら濃いめの話ありーの無茶振りありーので不思議なバランスの勉強会だった。自分の中では
- Python に何を求めているのか?
- Python の何を特に知りたいのか?
が全然明確になっていないことがよく分かった。
これまではなんか Python は進んだ取り組みも多く、「参考になる +5」みたいな印象で情報だけつまみ食いする感じでつきあっていたんだけど、改めて Python を自分で触るとなると何がしたいのかは実はよく分からない。Ruby に特に大きな不満はないし、Pyton のメリットは GAE でネイティブで動くこと?みたいな感じになってしまっている。
何が分からないと不安か
しかし久しぶりの新しい言語、何かはつかみたいと思い、まずは自分なりに Python を知ろうと手を動かし始めて、急に気がついた。
- ライブラリの入手、検索方法が分からない
- 言語およびライブラリのドキュメントの見方が分からない
- 何を揃えておけば自律的なユーザーになれるのかが分からない
これは不安だ。
Rubyでは何を知っていて安心なのか
例えば Ruby に置き換えると、無料で手に入る分だけで
- Rubygems 使え*2
- Ruby 1.8 ではシステムの package、あるいは setup.rb で Rubygems をインストールして、あとは gem の使い方を覚える
- Ruby 1.9 では Rubygems は標準なので gem の使い方を覚えるだけ
- ri か refe. 自分は refe は使っていないのでよく分からない
- 上で挙げた ri, refe 以外に以下のサイト、サービス
- rubyforge.org
- rubygems.org
- raa
- ruby の ML のアーカイブ
- Ruby 界隈で有名な twitter アカウントというか有名人を何人か
- github
こんな感じ。
Pythonの分を調べてみた
これが Python で今のところ分かってる範囲では
- easy_install でインストールできる
- 最近は pip なのかな?
- pydoc ?
- 以下のサービス
特に 2 のドキュメントの見方が分からないのは痛いのでなんか記憶を頼りに手を動かしたら
pydoc
って言葉が出てきた。zsh で
$ pydoc <TAB>
と打ったらなんか補完された! これでいろいろ読める! かと思ったらライブラリは補完されてないような? あくまで文法や機能の説明用なのか? perldoc や ri のように非標準ライブラリも補完してほしい。
いや、待てよ?
$ pydoc help
お。modules って入れるといいらしい。
$ pydoc modules
なんか module がいっぱい出てきた!
$ pydoc modules setuptools
おぉ、setuptools のドキュメントが読める! よしよし、これで terminal から離れずにあれこれやれそうだ!
easy_install は setuptools でした。インストール方法はまた今度まとめるかも。
※ ついでに phpdocr っていう php のドキュメントをコマンドラインで表示できる gem を見つけて何コレと思ったけど、中身は php.net のドキュメントを Mechanize で検索して引っ張ってくるだけっぽかった。イラネ。
2010-05-09 [長年日記]
_ Pyに触ってみた
昨日も書いたんだけどPython-FIT 0回目に参加してきた。その際、自分が Python の何を分かっていなかったか、何を期待しているかが少しはっきりしたので整理しておく。
Pythonも触れるようになっておこうと思った理由
Rubyを始めることにした何年か前の自分は、実は
PythonとRubyを比較してRubyを始めることに決めている
ので、Pythonを何も知らないわけではない。
いま改めて Python も使えたらいいかもな、と思った理由は勉強会で喋ってるうちに気づいたけど、
- Python 製のツールを一部直したり plugin 書いたりしたくなることはよくある
- GAE(要するにクラウド対応*1)
という感じらしい。
積極的に乗り換えようとは思ってないけど、おいしいとこどりはしたいのだ。
インストール
- 公式バイナリ
- システム(OS)用のパッケージシステムから
- ActivePython
とか使えばいんじゃね? とりあえず CPython についてはそんなもんで、Pure Windows よりは Mac か Linux の方が簡単そうだねという話には落ち着く。
MacPortsの場合
$ port search python
すればたくさん出てくる。面白いのは
python_select
というパッケージで、これがあれば単に python と叩いたときに立ち上がる python を切り替えることができるので、安心して複数バージョン入れておくことができる。
はず。
充実してるっていうライブラリの恩恵はどうやって受けるの?
Perl なら CPAN, PHP なら Pear, 1.8 以降の Ruby なら Rubygems の話は必ず出てくるが、Python ではライブラリが充実しているという話だけはよく出てくるが、それを具体的にどう探してどうインストールするのかという話が少ないよね?
とりあえず当日その場にあった本にはライブラリの探し方やインストール方法については書かれていなかった。ライブラリの読み込み方は書いてあるんだけど、それだけだと標準ライブラリしか読み込めないから全然嬉しくない。いくら標準ライブラリが充実してても Web サービス用のライブラリは数多あり、かつ日々増えているはず。そういうものを見つけてインストールできなきゃ面白くないじゃん。
で、どうも聞いた話とその場でサクッと調べた範囲だと以下のような関係になっているっぽい。
| 言語 | Ruby | Python | Perl | PHP |
| パッケージツール | Rubygems | setuptools | CPAN | Pear |
| パッケージリポジトリ | rubygems.org | PyPI | CPAN | pear*2 |
| コマンド | gem | easy_install | cpan | pear |
easy_install ってどうやって使うの?
でだ。この easy_install をどうやって使うのかがよく分からない。
実は OSX には最初から easy_install が入っている。しかしこれは MacPorts で後から入れた Python とは無関係である。
じゃあ MacPorts で入れた Python とマッチする easy_install を入手しないといけない。
しかしそもそも easy_install はコマンドであってパッケージ名じゃない。じゃあどのパッケージに入ってるのっていうのがよく分からず、例によって「インキー*3な雰囲気」で、個人的にはイライラしていたのだけど、当の勉強会はそんなこと気にしない雰囲気だったので自分で勝手に調べた。あちこちのブログや本家ドキュメントを読んでいるうちに
easy_install というコマンドは setuptools というライブラリに含まれているらしい
ことが分かったので目的は setuptools をインストールすることに決まった。
egg 形式
egg 形式は jar みたいなもので、
- 中にライブラリファイルのアーカイブを持っている sh スクリプト
- Python を起動して必要な処理を走らせることができる
ので、
$ ./XXXXX.egg
や
$ sh XXXXX.egg
でライブラリのインストールができる。egg 内で Python のバージョンを決め打っているものがあるので、自分の使いたいバージョンに合わせた egg を落としてきて実行すればよい。今回は setuptools を入れたいので
Python Package Index : setuptools 0.6c11
から目的のアーカイブを落としてきて実行する。
ez_setup.py
setuptools に関しては ez_setup.py というスクリプトも用意されていて、これを実行するとよいという話も見かけた。で、これは PyPI じゃなくて以下にある。
http://peak.telecommunity.com/dist/ez_setup.py
Rubygems や rubyforge と関係なく
が存在するのと似たようなものか。
これを実行すると自動的にいいバージョンの setuptools を落としてきてインストールまでしてくれるらしい。結局動かさなかったのでよく分からないけど、中身を見ると shebang が
#!python
なので、複数の Python を入れている場合には注意が必要だと思う。個人的にはこういう場合はバージョンを明記してある egg を落としてきて実行する方が安心。
MacPorts用のsetuptoolsはMacPortsで入れればいいじゃん
最後になって気づいたけど、これがいちばん簡単だね。当たり前だけど。最初からパッケージシステムに依存してるんだから、そのまま走るのが正解。そうでない方法を混ぜると面倒が増える。ただし、tcl を入れたり、えらく遠回りするのでさっさと使いたい人には不向き。
まだ結局 easy_install 使えてない easy_install-2.6 を使うことにした
MacPorts で setuptools を入れるところまでは終わったんだけど、これをやってもインストールされるだけで後から入れた easy_install に PATH が通っていないので、
結局立ち上がるのはシステム標準の easy_install
という状態は変わらなかった。うーん、面倒くさい。この話はまた今度。上に挙げた python_select で切り替えてくれればいいのにね。
と、思ったら
/opt/local/bin/easy_install-2.6
っていう link を見つけた。MacPorts で入れるとこの link が作られるのかな? ちょっとアレだけど Debian で Ruby を使うようなもんか。分かった、これにするわ。
2010-05-12 [長年日記]
_ mergeが難しいのはrepositoryが中途半端だから
のような気がする。最近は。
svn 1.5 くらいからあまり merge で苦労することはなくなっているような気がする。それでも merge に苦労することがあるのは
- branch が複線化しているなど複雑すぎる
- working copy の状態が中途半端
な場合が多い気がしてきた。
特に自分の場合は 2 のケースが多い。というのも関連するファイルに触る人が開発者以外も多く、とうてい全部をバージョン管理できない状態だから。(規模に対して教育コストが大きすぎる。)
理由が分かればあとは簡単。merge 用の working copy を用意すればよい。
実際、この方法を採用してからは merge でトラブることはほとんどなくなった。問題は、この方法を採用していることを忘れて中途半端な working copy で作業してしまうケースが後を絶たないことなんだけど、それはこのように日記に書き起こすことで少しは…減ってくれないかな。
_ Y!Pipesで日本語リソースに対してFilterモジュールを使う
結論だけ。2009-05 現在、[ Operators ] の [ Filter ] を使いたい場合は
- [ My pipes ] を起点にしてはいけない(ちゃんとフィルタリングされない)
- My pipes は使わずに Run Pipe した結果の feed を [ Sources ] の [ Fetch Feed ] を使って取り込むと大丈夫
- つまり、Pipe の結果を取り込もうとしない限り Filter は日本語リソースに対しても安全
という結果になった。こういうのって Pipes のバージョン情報とかないので、「いつの時点」しか書きようがないんだけど、ちょっと不便だね。細かいバージョン情報がとれるといいんだけど。
2010-05-13 [長年日記]
_ Thunderbirdの受信メールのヘッダを書き換えてImportし直す
結論
受信したメールを書き換えたい場合、いったんメールを .eml で保存して必要な書き換えを行ったあと、
を使って .eml を Import することで可能。
書き換えを Thunderbird 上で行うツールがあるのかどうかは分からない。
背景
- Subject なしで割と重要なファイルを添付したメールを受け取った
- このままでは検索できないので受信メールの Subject を書き換えたい
- そんなことできるの? 拡張にある?
書き換えの拡張を探し始めたけど見つからず、Thunderbird の外で書き換えればいいんじゃないかというアイディアを確か他の人にもらって探したら見つかった。
直接編集なので MIME encode は自力でどうぞ
Subject などヘッダは MIME encode されているのでエディタでそのまま編集するのはつらい。自分の場合は手元の irb で
NKF.nkf( '-M', 'あいう' )
とかやるとすぐに得られるので苦労はないんだけど。
※ Un*x 版の nkf はデフォルトで iso-2022-jp への変換を行うので、-M で MIME encode してやるだけでよい。でも最近の nkf のマニュアルにはこの辺が明示されていないっぽいので、もしかしたらそのうち挙動が変わるかもなぁ。
2010-05-17 [長年日記]
_ PHP の get_class() は 5 以降引数不要だった
PHP 4 までは絶対にこう書かなきゃいけなかったんだけど、
class Klass() {
function funktion() {
get_class( $this );
}
}
PHP 5 以降はこう書けるようになっていたってこと。
class Klass() {
function funktion() {
get_class();
}
}
ただし、Klass::funktion() と static に呼ばれた場合はこの限りではない。
知らなかった。
class 名を判別して何かするのはオブジェクト指向的にはやっちゃダメなことになっているんだけど、class 名から自動的に別な何かを決定するみたいな処理は案外書きたくなる。その場合にこれが役に立つ。
そうか要らなかったか。なるほどなぁ。
2010-05-18 [長年日記]
_ Webベースのプロジェクト管理サービス探訪
結論
「はじめての導入」に fixdap を選びました。
背景
- 遠隔地とタスクを共有したい
- メールベースでは共有しにくい*1
- 相手方はそういうツールに疎いのでシンプルな方が良い
- 非公開で使いたい
- できれば無料で
もう十分に外部のサービスが揃っているので、小さい仕事まで全部自前でサーバにセットアップとか、できるだけやりたくない。すぐやめるかもしれないんだし :-P
候補
ITS ( Issue Tracking System ) は外す。Issue Tracking とプロジェクト管理はベツモノだと思うので。まぁ最近は ITS とプロジェクト管理を統合する方向で各ツールは進化してるっぽいが、個人的には Wiki が好きということでも分かるように
シンプルなツールが好き
なの。特に管理系のツール自体がヘビーになるのはどうも解せない。ツールは目的じゃないんだから。
| Google Docs | Office 文書が共有できるだけでプロジェクト管理というのは無理があるかなぁ |
| Zoho Projects | ものすごくいろんなことができる Zoho の中の一つ |
| Backlog | ずばりプロジェクト管理。ただし無料版は非公開にできない。 |
| fixdap | livedoor のコンペから生まれたタスク管理ツール |
| Lighthouse | Issue Tracking だった |
| Basecamp | おなじみ 37signals のプロジェクト管理 |
| Pivotal Tracker | 最近E和さんを中心(?)に話題 |
で。
- 残念ながら参加する人間の関係上、英語インターフェイスしかないものは却下
- Google Docs は Office 文書の共有しかできない。まさか Excel で管理とか常識的に無理
- Backlog は非公開プロジェクトを無料では作れない
残りは Zoho Projects と fixdap
Zoho Projects
これは本格的なプロジェクト管理ツールで、しかも無料で非公開で使える。(ただし、作れるプロジェクトは一つまで。)
OpenID 対応
Google ID などでログインできる。一見地味だけど、後に挙げる「外部メンバー」のところで効いてきそう。
概念の階層が Trac より一つ多い
- プロジェクト
- マイルストーン
- タスクリスト
- タスク
- タスクリスト
- マイルストーン
慣れもあるけどタスクリストはちょっと邪魔かなぁ。
外部メンバー、内部メンバー
これは面白い。社外の顧客と情報共有をしつつ、内部リリース(非公開)用のマイルストーンを設定できる。
またこの際、Google ID などでログインすることができるので、Zoho Projects を普段使っていない人との情報共有の際にいくらかハードルを下げてくれる効果があると思う。
カレンダーですぐ確認できる
カレンダーと連携しているので、締め切りを視覚的に確認できる。
未割り当てタスクを作れない
タスクを起こす際に担当を未定にできない。この辺はちょっと最初の計画の比重の高いツールという印象を受ける。まぁ普通のビジネスではあまり問題にはならないのかもしれないけど、「にわか」アジャイラーとしてはこういうところも気になる。
結論としては見送り
今回に関しては見送り。というのも本格的過ぎる。プロジェクト管理の概念、管理ツールに慣れていない人にとっては逆に多機能、高機能さが「面倒くさそう」という印象になってしまいかねない。
「はじめての導入」にはちょっと向かないと思う。
慣れている人同士ならかなり使えるツールだと思う。
fixdap
fixdap はプロジェクト管理じゃなくてタスク管理ツール。
- livedoor ID は無関係
- milestone 管理はできない
- 締め切り、担当を未定にしてタスクを起こせる
- 洗い出しだけ先にやって「振ったり」「立候補したり」して進めていくことができる
- 無料
- 内容は非公開にできる
- プロジェクトの存在を完全に隠蔽することはできない(ユーザーにたどりつけば、非公開のプロジェクトの存在はバレる)
あと地味に
- ガラケー対応
これ実は日本人同士のお仕事で使う際に大きなポイントになるような気がする。
これがあれば
- iCal 出力
- 非公開プロジェクト用の Feed URI
- RTM のプライベートアドレス程度のもので ok
fixdap はタスクに変化(作成とか変更とか)があったときにメールを飛ばす機能があるんだけど、正直毎回メールが来るのはうっとうしい。逆に iCal や Feed で出力してくれると「チェックする側」としてはとても嬉しい。作業者向けというよりはマネージャ向けの機能として欲しいかなぁ。
あとタスクの description を再編集できないという致命的な問題がある。これは早急に直してほしいけど、たぶん放置なんだろうなぁ。仕方ないので description は短く簡潔に書いておいて、返信で補足していく感じにしないといけない。
fixdap ってちょっと信用ならない感があったり、残念な扱いだけど、面白い企画だと思うんですよねぇ。多少マネタイズを考えてもらってもいいので、もうちょっと完成度を上げると全然他のツールに負けないと思うんだけどなー。
ちなみに
タスク管理なら RTM でいんじゃね?と考えるかもしれないけど、RTM は個人のタスク管理をベースにしているので普段 RTM を使っていない人を巻き込むのはかなりハードルが高いと思う。見なくていい情報が多すぎる。
スマートフォン対応がしっかりしてるという意味では今後も考えてとてもいいんだけど。
*1 この話は真面目に書くと長くなるので割愛
2010-05-19 [長年日記]
_ Evernoteで快適に「書く」
以前から Evernote アプリが重いなぁと思っていたのです。まぁ iPod touch のアプリが重いのは仕方ないけど、Mac のアプリもたいがい重いなと。特に「書く」ことについては
リッチテキストなんて要らないし、使い慣れたエディタと同じキーバインドで書きたい
と思うのが人のサガ(違います)。
そんなときこんな記事を見つけた。
Evernoteで外部エディタ ex. Emacs を使う4つの方法 - hig3の言い忘れたこと書き間違えたこと
あぁ、そうか。WYSIWYG エディタを要求しない textarea で編集するページがあればよかったのか。早速試す。既に Firefox に ViewSourceWith は仕込んであるので追加作業は必要ない。いざ、
にアクセス。なんか…、ちょっと見慣れなくて使いにくいけど、確かに textarea さえ開いてしまえばそこから先は Emacs で超快適に入力できる!
これだ! markdown とか reST とか好きなフォーマットで入力できるし!
「書く」ことの快適さだけを考えれば、やっぱどんなアプリよりもやはりエディタで書く方が快適だなぁと思った次第。まぁ、当然ある程度長い文章を書いてるわけですが。1, 2文程度のメモだけなら特に必要ないし、完全オフラインの場合は使えない技だけど、ネットワークが使えてちょっと長めの文書を Evernote に書きたい場合はこの技を覚えておくとよさげ。
ただし、検索やタグ付けなどの操作性はやはり良くないので、その辺の作業は素直に Evernote アプリを使った方がいいように思う。
2010-05-20 [長年日記]
_ QuickSilver ででかい文字を出す
以前 Sapporo.rb で kakutani がやっていたのを見て以来気になっていながら調べていなかった
QuickSilver ででかい文字を出す
方法。思い立って調べてみた。
です。
single quote or period って書いてあるけど、自分の環境だと period しか受け付けないな。改行は入れることができないみたい。
というわけで自分の設定だと
shift + cmd + space -> .
でイケる。
2010-05-22 [長年日記]
_ PYTHON-FIT 1回目
Python-FIT 1回目。
会場
今回は
- 福井(自宅) x 2
- 石川(KIT) x 1
の変則的な形に。
目的
Python 初心者も少なくないということで Python チュートリアルの読み合わせを進める感じで、かつオンライン勉強会の方法を模索する。
結果
よかった
- Skypeのグループチャットは Twitter と違って長いコードを貼ることができて、かつみんなが同じコードを見れる。
本当は全部 Twitter でまかなえた方が個人的には楽なんだけど、いきすぎた Twitter 脳は何も考えていないのと同じだね。
イマイチ
- KIT で 3G回線の確保は易しくない
- 学外の人間は自由に学内のネットワークには参加できない。今どき当然。
- Skype のグループチャットはともかく、音声と特に Kogomi を使った画面共有はネットワーク品質に依存する
- オンライン勉強会の進行はネットワーク品質に引っ張られる
- 複数人参加する会場の音声もそれなりに気を使う
- マイク、スピーカーがちゃんとしてないと意味が分からない
個人的には
- チュートリアルは買って読んだ方が楽
ということに気づいた。
内容
あんま進展がなかったとは言え、いきなり脱線して
RubyからScalaに乗り換えた15くらいの理由 - ヽ( ・∀・)ノくまくまー(2010-04-26)
に Python を入れようとしていた。面白かったけど、ちょっと時間掛けすぎたかも。
interactive shell
python の interactive shell で補完する方法がしばらく分からず難儀した。あちこちさまよって見つけた
import readline
import rlcompleter
readline.parse_and_bind("tab: complete")
を実行してなんとかなった。でも毎回こんなもん実行したくないから irb で言う ~/.irbrc に相当するファイルに書いて自動実行すればいいんだよね、と思ったらそういうファイルは存在しないことが分かってがっかり。どうも
PYTHONSTARTUP
という環境変数で明示的にファイル名を与えないとダメなようだ。いやいやいや。指定して実現できるのは正しいと思うけど、より便利なデフォルトを考えようとは思わない文化なのかな?
その後
デスクトップ丸ごと共有できる必要はないし、ぶっちゃけ Python の interactive shell だけ共有できればいいよね、という話をしていた。サイト上で interactive shell が動くサイトあるよね、きっと。あるある。そんなんでいいんだよね。でも Web だと同じセッションを共有することはできないね。
で、帰ってきてあれこれ探していてやっと思い出したのが以下。
ttyだけ共有できればいいんじゃ?
これなら Terminal の様子だけ共有*1できる。
これで必要な会場分セッションを作って、それをブラウザのタブで開いておいて、必要に応じて各自が切り替えながら参照するという形でいいんじゃなかろうか。これなら HTTP さえ開いていればいいはずだし、十分軽いような気がする。
まだ次回これでいくと決まったわけじゃないけど、有力な候補とは言える気がする。Skype チャットでコードや結果は共有できてもやっぱ(ほぼ)リアルタイムで動く様子を共有したいじゃない。
音声はやっぱ Skype ?
あとは音声で、これは個人的に感じている問題が二つ。
- 個人でカフェとかで勉強会に参加するのは周りに気を使う
- ネットワーク的に P2P を制限している会場からは勉強会に参加できない
ただ、音声なしでチャットベースだとこれはこれで進行的にはちょっとしんどい。進行用に Ust で音声だけ流すってのもアリなのかもしれないけど、何か大げさな感じがするし、帯域的な問題もあるような気がする。
ネットワークの問題は上の Partty! の作者の音声チャット用のツールもあるんだけど、1 の方はいかんともしがたい。一人の場合は PC 使わないで iPod touch に新しいコード繋いだらいいかな?
ちょっと今度実験してみよう。bluetooth ヘッドセットも1年前の半額くらいだな。安くなったもんだ。
*1 実際には完全大公開。Ust の tty 版みたいなもの
2010-05-27 [長年日記]
_ schemeのないURLは相対URL
知らなかった。もしかして Web を支える技術には載ってました?(未読)
問題
- GoogleAjaxAPI を使って jQuery を読み込んでいた
- 開発、検証環境では http だが本番では https で動く
- http での読み込みを決め打ちしてたら IE で怒られた><
要件
- schemeの変化に自動で追随してほしい
Google Analytics とかどうしてんの? なんか scheme の判別して URL を組み立て直してるよ。あーじゃあこれ真似すればいいか、なんかでも面倒だな。
ここで神降臨!
Twitter / Yosuke HASEGAWA: @wtnabe script src="//exam ...
@wtnabe <script src="//example.jp/foo.js">と書けば現在のschemeで読んでくれます。
……。ほんとだ。
RFC 2396
しかし実はこの根拠が分からなかった。なんか言われればそれでいいような気がするけど、scheme だけ欠けている URL を見たことがなかったから。でもちゃんと定義されていた。
RFC 2396 - Uniform Resource Identifiers (URI): Generic Syntax
absoluteURI = scheme ":" ( hier_part | opaque_part )
URI that are hierarchical in nature use the slash "/" character for
separating hierarchical components. For some file systems, a "/"
character (used to denote the hierarchical structure of a URI) is the
delimiter used to construct a file name hierarchy, and thus the URI
path will look similar to a file pathname. This does NOT imply that
the resource is a file or that the URI maps to an actual filesystem
pathname.
hier_part = ( net_path | abs_path ) [ "?" query ]
net_path = "//" authority [ abs_path ]
abs_path = "/" path_segments
(snip
The syntax for relative URI takes advantage of the <hier_part> syntax
of <absoluteURI> (Section 3) in order to express a reference that is
relative to the namespace of another hierarchical URI.
relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
A relative reference beginning with two slash characters is termed a
network-path reference, as defined by <net_path> in Section 3. Such
references are rarely used.
えーと、これで見ると
//example.com/path/to/resource
は net_path として定義されていて、net_path だけの URL は relativeURI と定義されていることになる。なるほどー。
※ ちなみにちゃんと読んだら Google Analytics の tracking code が scheme 判別をしているのは scheme によって net_path が異なるからだった。確かにこの場合は判別して書き換えないとダメだね。
2010-05-29 [長年日記]
_ reSTからOOo Writer形式のドキュメント(.odt)を作る
なんとなくできるんじゃないかと思ったけどほんとにできた。
準備
必要なものは
- Python
- docutils
実際に試したのは Python 2.6 + docutils 0.6 の組み合わせ。
背景 - OOo が重すぎる
というのも機械が非力(PPC G4)だからなんだけど。最近は妙に Office 仕事が多くて、この前時代マシンには荷が重すぎることがよくある。
ずーーっと前の自分ならこういう場合はテキストから変換する方法を考えていたように思うけど、最近はもう気力がないので一時的に私物の Intel マシンを投入したりとか、そりゃどうかなぁと思いながらやりくりしてたんだけど、急に思いついた。
Python の docutils に変換機能あった気がする
そうそう。最近まともに Python を動かせる(≠使える)ようになってるから、一応ね。あと、OOo を利用したドキュメント変換ツールにも Python バージョンがあったのを覚えていたから。普段からぼけっとパッケージマネージャの検索結果とか眺めておくといいよ(違
準備
$ sudo easy_install-2.6 docutils
※ easy_install のコマンドファイル名は適宜読み替えてちょ。
確認
MacPorts で入れた Python で確認。
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin $ ls rst* rst2html.py* rst2odt.py* rst2xml.py* rst2latex.py* rst2odt_prepstyles.py* rstpep2html.py* rst2man.py* rst2pseudoxml.py* rst2newlatex.py* rst2s5.py*
お。rst2odt.py なんてのがあんじゃん*1。
自分の環境では
/opt/local/bin
に PATH が通っているので
/opt/local/bin/rst2odt.py
に symbolic link を用意して使うことにした。
使い方
サンプルの reST データをこんな風に用意。
見出し ====== simple table 小見出し -------- official な table ってどう書くんだっけな ========== ========== テーブルは こうだっけ ---------- ---------- どうだった かな ========== ========== * 箇条書き * bullet もしかして ========== 見出しでセクションが分かれる仕様か? --no-sections でイケた。
で、変換はこう。
$ rst2odt.py --no-sections sample.rst sample.odt
デフォルトだと見出しごとにセクションが切られてしまうので、それを避けたい場合は上のようなオプションを使う。
で、OSX だと
$ open sample.odt
とするとほんとに OOo のファイルじゃん!て感じでとても簡単に使える。
参考
- Docutils: Documentation Utilities
- はやわかり reStructuredText
- 一通りの書き方が分かる
- rst-mode.el
- Emacs がちゃんと認識してくれなきゃヤダなので
- rst-modeで「Symbol’s function definition is void: lazy-lock-mode」と怒られてしまう « ナンクル力学系
- 自分の環境でもこれやらないとダメだった。一応使えるんだけど怒られるのは気持ちよくない。
残った課題
実は変換して生成したいのは odt ( Writer ) ではなく ods ( Calc ) なんだけど、とりあえずこれはこれで使ってみようと思う。ただし
そうなると見た目が気になる
ただの表ならいいんだけど、文書になるとやっぱり見出しとか地の文とか気になる。全部欧文のフォントが指定されていても美しくない。日本語のテンプレートを作れるようにはなっていた方がいいかなとは思っているんだけど、そこはまだ全然未開拓のまま残っている。
関連エントリ
*1 HTML や LaTex に変換する機能があることは知っていた。
2010-05-30 [長年日記]
_ 久しぶりにPartty!を実験
は tty を共有するサービス。アプリをインストールして立ち上げると、それ以降の tty の様子を全世界に配信してしまう tty 版の Ustream である*1。
サービス開始はいつだったか覚えてないけどそんな最近の話じゃない。なんだけど、最近になってこれを思い出したのでどの程度使えそうかもう一度実験してみた。で、分かったこと。
- CLI の様子は Win/Mac ともに問題なく配信可能
- screen も使えて、window 切り替えも問題なく動く
- Emacs も使えた
- screen/Emacs ともに window 分割は NG(手元の機械も正しく描画できない)
また、
- Windows +cmd.exe では irb や python など独自の interactive shell は NG
だった。実は今回はこれがちょっと痛いんだけど、Windows 以外では問題なく使えるし、tty にこだわるなら Windows なんか使ってないで Un*x にすればいいじゃんという気もする。もしかして PowerShell v2 ならまた違うのかもしれないけど、そこまでは実験してない。誰かやって。
利用ポート
| Flash による公開セッションの閲覧 | partty.org:[80, 7776, 7777] |
| tty の状態の送信 | partty.org:2750 |
| telnet による共有 | partty.org:7777 |
となっているので、特に 2750 への送信が切られてると意味がありませんし、ただの閲覧でも 7776, 7777 が開いている必要があります。くくくく。意外にハードルが高い。
なお、通信の様子は
$ sudo ngrep -d en1 dst partty.org
で確認できます。さっさと思い出してやればよかった*2。
なんだなぁ。やっぱ screen -X 最強か? でもそうするとネットワーク越しに宗教戦争だしな。
2010-05-31 [長年日記]
_ coLinuxへsshするときは子ネットワークのIPアドレスへ
いや、単にネットワークの設定をちょっと忘れてしまったのでメモし直し。
というのもちょうどcoLinuxの設定をした辺りに親Windows*1の方で有線LANを使ったり無線LANを使ったりしていて、その度に、「あ、このやり方だと繋がる」「このやり方だと繋がらない」とかややこしいことになっていたのと、その後しばらく Windows + coLinux を使わなきゃいけない事態も少なくなっていたので、要領がよく分からなくなってしまっていた。
しばらくしてPocket Wifi を手にしたので、Windows を WiFi 一本にすれば話を単純化できるなと思ってそうしていたんだけど、肝心の coLinux の方の設定方法をやっぱり忘れていて、ssh できなくなっていた。
ポイントは
coLinux の立ち上げ方、console の見方を忘れていた
というすごい状態で、これは andLinux を入れているので
- スタートメニューから start andLinux
- 同じスタートメニューから andLinux Console
でログインして実現できた。で、
$ /sbin/ifconfig
して IP アドレスを確認。sshd は自動で立ち上がるようになっているので、あとは coLinux の IP アドレスへ向けて好きな terminal で ssh で繋げば ok.
このあとはもうこの使えない console は必要なくて、閉じてしまえばよいし、設定変更しないなら coLinux への接続を terminal の設定で保存しておけば二度と設定を確認したりする必要もない。
※ この際ネットワークのゾーンが全然思っていたのと違っており、"GATEWAY = TAP の IP アドレス"も違っていたので、これを設定し直しておいた。確かここが無線と有線切り替えて使うときにいちばん邪魔くさかったところだったように思う。
あとは andLinux がもう古いので Portable Ubuntu に移行しなきゃと思っているんだけど、X なしの設定が楽にできるかよく分からないというのと面倒くさいので放置している。
*1 netbook U100
_ morchin [Pythonのライブラリのドキュメントは、コマンドプロンプトでpythonと打つとREPLが出てくるので、help(..]